diff --git a/README.md b/README.md
index b3bbd47..93f16d1 100644
--- a/README.md
+++ b/README.md
@@ -85,8 +85,6 @@ Games List
| `aoe2` | Age of Empires 2 (1999)
| `alienarena` | Alien Arena (2004)
| `alienswarm` | Alien Swarm (2010)
-| `arkse` | Ark: Survival Evolved (2017)
-| `atlas` | Atlas (2018)
| `avp2` | Aliens versus Predator 2 (2001)
| `avp2010` | Aliens vs. Predator (2010)
| `americasarmy` | America's Army (2002)
@@ -94,57 +92,63 @@ Games List
| `americasarmy3` | America's Army 3 (2009)
| `americasarmypg` | America's Army: Proving Grounds (2015)
| `arcasimracing` | Arca Sim Racing (2008)
-| `arma` | ARMA: Armed Assault (2007)
+| `arkse` | Ark: Survival Evolved (2017)
| `arma2` | ARMA 2 (2009)
| `arma2oa` | ARMA 2: Operation Arrowhead (2010)
+| `arma3` | ARMA 3 (2013)
+| `arma` | ARMA: Armed Assault (2007)
| `armacwa` | ARMA: Cold War Assault (2011)
| `armar` | ARMA: Resistance (2011)
-| `arma3` | ARMA 3 (2013)
| `armagetron` | Armagetron Advanced (2001)
+| `atlas` | Atlas (2018)
| `baldursgate` | Baldur's Gate (1998)
| `bat1944` | Battalion 1944 (2018)
| `bf1942` | Battlefield 1942 (2002)
-| `bfv` | Battlefield Vietnam (2004)
| `bf2` | Battlefield 2 (2005)
| `bf2142` | Battlefield 2142 (2006)
-| `bfbc2` | Battlefield: Bad Company 2 (2010)
| `bf3` | Battlefield 3 (2011)
| `bf4` | Battlefield 4 (2013)
| `bfh` | Battlefield Hardline (2015)
+| `bfv` | Battlefield Vietnam (2004)
+| `bfbc2` | Battlefield: Bad Company 2 (2010)
| `breach` | Breach (2011)
| `breed` | Breed (2004)
| `brink` | Brink (2011)
| `buildandshoot` | Build and Shoot / Ace of Spades Classic (2012)
| `cod` | Call of Duty (2003)
-| `coduo` | Call of Duty: United Offensive (2004)
| `cod2` | Call of Duty 2 (2005)
| `cod3` | Call of Duty 3 (2006)
| `cod4` | Call of Duty 4: Modern Warfare (2007)
-| `codwaw` | Call of Duty: World at War (2008)
| `codmw2` | Call of Duty: Modern Warfare 2 (2009)
| `codmw3` | Call of Duty: Modern Warfare 3 (2011)
+| `coduo` | Call of Duty: United Offensive (2004)
+| `codwaw` | Call of Duty: World at War (2008)
| `callofjuarez` | Call of Juarez (2006)
| `chaser` | Chaser (2003)
| `chrome` | Chrome (2003)
| `codenameeagle` | Codename Eagle (2000)
-| `commandos3` | Commandos 3: Destination Berlin (2003)
| `cacrenegade` | Command and Conquer: Renegade (2002)
+| `commandos3` | Commandos 3: Destination Berlin (2003)
| `conanexiles` | Conan Exiles (2018)
| `contactjack` | Contract J.A.C.K. (2003)
| `cs15` | Counter-Strike 1.5 (2002)
| `cs16` | Counter-Strike 1.6 (2003)
| `cs2d` | Counter-Strike: 2D (2004)
| `cscz` | Counter-Strike: Condition Zero (2004)
-| `css` | Counter-Strike: Source (2004)
| `csgo` | Counter-Strike: Global Offensive (2012) | [Notes](#csgo)
+| `css` | Counter-Strike: Source (2004)
| `crossracing` | Cross Racing Championship Extreme 2005 (2005)
| `crysis` | Crysis (2007)
-| `crysiswars` | Crysis Wars (2008)
| `crysis2` | Crysis 2 (2011)
+| `crysiswars` | Crysis Wars (2008)
| `daikatana` | Daikatana (2000)
+| `dnl` | Dark and Light (2017)
| `dmomam` | Dark Messiah of Might and Magic (2006)
| `darkesthour` | Darkest Hour: Europe '44-'45 (2008)
-| `dayz` | DayZ (2018) | [Notes](#dayz)
+| `dod` | Day of Defeat (2003)
+| `dods` | Day of Defeat: Source (2005)
+| `doi` | Day of Infamy (2017)
+| `dayz` | DayZ (2018)
| `dayzmod` | DayZ Mod (2013)
| `deadlydozenpt` | Deadly Dozen: Pacific Theater (2002)
| `dh2005` | Deer Hunter 2005 (2004)
@@ -153,94 +157,85 @@ Games List
| `devastation` | Devastation (2003)
| `dinodday` | Dino D-Day (2011)
| `dirttrackracing2` | Dirt Track Racing 2 (2002)
-| `dnl` | Dark and Light (2017)
-| `dod` | Day of Defeat (2003)
-| `dods` | Day of Defeat: Source (2005)
-| `doi` | Day of Infamy (2017)
| `doom3` | Doom 3 (2004)
| `dota2` | Dota 2 (2013)
| `drakan` | Drakan: Order of the Flame (1999)
| `etqw` | Enemy Territory: Quake Wars (2007)
| `fear` | F.E.A.R. (2005)
-| `f12002` | Formula One 2002 (2002)
| `f1c9902` | F1 Challenge '99-'02 (2002)
| `farcry` | Far Cry (2004)
| `farcry2` | Far Cry 2 (2008)
+| `f12002` | Formula One 2002 (2002)
| `fortressforever` | Fortress Forever (2007)
-| `flashpoint` | Operation Flashpoint: Cold War Crisis (2001)
+| `ffow` | Frontlines: Fuel of War (2008)
+| `garrysmod` | Garry's Mod (2004)
+| `geneshift`
`mutantfactions` | Geneshift (2017)
+| `giantscitizenkabuto` | Giants: Citizen Kabuto (2000)
+| `globaloperations` | Global Operations (2002)
+| `ges` | GoldenEye: Source (2010)
+| `gore` | Gore: Ultimate Soldier (2002)
+| `fivem` | Grand Theft Auto V - FiveM (2013)
+| `mtasa` | Grand Theft Auto: San Andreas - Multi Theft Auto (2004)
+| `mtavc` | Grand Theft Auto: Vice City - Multi Theft Auto (2002)
+| `gunmanchronicles` | Gunman Chronicles (2000)
+| `hl2dm` | Half-Life 2: Deathmatch (2004)
+| `hldm` | Half-Life Deathmatch (1998)
+| `hldms` | Half-Life Deathmatch: Source (2005)
+| `halo` | Halo (2003)
+| `halo2` | Halo 2 (2007)
+| `heretic2` | Heretic II (1998)
+| `hexen2` | Hexen II (1997)
+| `had2` | Hidden & Dangerous 2 (2003)
+| `homefront` | Homefront (2011)
+| `homeworld2` | Homeworld 2 (2003)
+| `hurtworld` | Hurtworld (2015)
+| `igi2` | I.G.I.-2: Covert Strike (2003)
+| `il2` | IL-2 Sturmovik (2001)
+| `insurgency` | Insurgency (2014)
+| `insurgencysandstorm` | Insurgency: Sandstorm (2018)
+| `ironstorm` | Iron Storm (2002)
+| `jamesbondnightfire` | James Bond 007: Nightfire (2002)
+| `jc2mp` | Just Cause 2 - Multiplayer (2010)
+| `kspdmp` | Kerbal Space Program - DMP Multiplayer (2015)
+| `killingfloor` | Killing Floor (2009)
+| `killingfloor2` | Killing Floor 2 (2016)
+| `kingpin` | Kingpin: Life of Crime (1999)
+| `kisspc` | Kiss: Psycho Circus: The Nightmare Child (2000)
+| `kzmod` | Kreedz Climbing (2017)
+| `left4dead` | Left 4 Dead (2008)
+| `left4dead2` | Left 4 Dead 2 (2009)
+| `m2mp` | Mafia II - Multiplayer (2010)
+| `m2o` | Mafia II - Online (2010)
+| `moh2010` | Medal of Honor (2010)
+| `mohab` | Medal of Honor: Airborne (2007)
+| `mohaa` | Medal of Honor: Allied Assault (2002)
+| `mohbt` | Medal of Honor: Allied Assault Breakthrough (2003)
+| `mohsh` | Medal of Honor: Allied Assault Spearhead (2002)
+| `mohpa` | Medal of Honor: Pacific Assault (2004)
+| `mohwf` | Medal of Honor: Warfighter (2012)
+| `medievalengineers` | Medieval Engineers (2015)
+| `minecraft`
`minecraftping` | Minecraft (2009) | [Notes](#minecraft)
+| `minecraftpe`
`minecraftbe` | Minecraft: Bedrock Edition (2011)
+| `mnc` | Monday Night Combat (2011)
+| `mumble` | Mumble - GTmurmur Plugin (2005) | [Notes](#mumble)
+| `mumbleping` | Mumble - Lightweight (2005) | [Notes](#mumble)
+| `nascarthunder2004` | NASCAR Thunder 2004 (2003)
+| `ns` | Natural Selection (2002)
+| `ns2` | Natural Selection 2 (2012)
+| `nfshp2` | Need for Speed: Hot Pursuit 2 (2002)
+| `nab` | Nerf Arena Blast (1999)
+| `netpanzer` | netPanzer (2002)
+| `nwn` | Neverwinter Nights (2002)
+| `nwn2` | Neverwinter Nights 2 (2006)
+| `nexuiz` | Nexuiz (2005)
+| `nitrofamily` | Nitro Family (2004)
+| `nmrih` | No More Room in Hell (2011)
+| `nolf2` | No One Lives Forever 2: A Spy in H.A.R.M.'s Way (2002)
+| `nucleardawn` | Nuclear Dawn (2011)
+| `openarena` | OpenArena (2005)
+| `openttd` | OpenTTD (2004)
+| `operationflashpoint`
`flashpoint` | Operation Flashpoint: Cold War Crisis (2001)
| `flashpointresistance` | Operation Flashpoint: Resistance (2002)
-| `ffow` | Frontlines: Fuel of War
-| `fivem` | FiveM
-| `garrysmod` | Garry's Mod
-| `graw` | Ghost Recon: Advanced Warfighter
-| `graw2` | Ghost Recon: Advanced Warfighter 2
-| `giantscitizenkabuto` | Giants: Citizen Kabuto
-| `globaloperations` | Global Operations
-| `geneshift` | Geneshift
-| `ges` | GoldenEye: Source
-| `gore` | Gore
-| `gunmanchronicles` | Gunman Chronicles
-| `hldm` | Half-Life 1 Deathmatch
-| `hl2dm` | Half-Life 2 Deathmatch
-| `halo` | Halo
-| `halo2` | Halo 2
-| `heretic2` | Heretic 2
-| `hexen2` | Hexen 2
-| `hidden` | The Hidden: Source
-| `had2` | Hidden and Dangerous 2
-| `homefront` | Homefront
-| `homeworld2` | Homeworld 2
-| `hurtworld` | Hurtworld
-| `igi2` | IGI-2: Covert Strike
-| `il2` | IL-2 Sturmovik
-| `insurgency` | Insurgency
-| `insurgencysandstorm` | Insurgency: Sandstorm
-| `ironstorm` | Iron Storm
-| `jamesbondnightfire` | James Bond: Nightfire
-| `jc2mp` | Just Cause 2 Multiplayer
-| `killingfloor` | Killing Floor
-| `killingfloor2` | Killing Floor 2
-| `kingpin` | Kingpin: Life of Crime
-| `kisspc` | KISS Psycho Circus
-| `kspdmp` | DMP - KSP Multiplayer
-| `kzmod` | KzMod
-| `left4dead` | Left 4 Dead
-| `left4dead2` | Left 4 Dead 2
-| `m2mp` | Mafia 2 Multiplayer
-| `m2o` | Mafia 2 Online
-| `medievalengineers` | Medieval Engineers
-| `mohaa` | Medal of Honor: Allied Assault
-| `mohpa` | Medal of Honor: Pacific Assault
-| `mohab` | Medal of Honor: Airborne
-| `mohsh` | Medal of Honor: Spearhead
-| `mohbt` | Medal of Honor: Breakthrough
-| `moh2010` | Medal of Honor 2010
-| `mohwf` | Medal of Honor: Warfighter
-| `minecraft` | Minecraft | [Notes](#minecraft)
-| `minecraftpe` | Minecraft: Pocket Edition
-| `mnc` | Monday Night Combat
-| `mtavc` | Multi Theft Auto: Vice City
-| `mtasa` | Multi Theft Auto: San Andreas
-| `mumble` | Mumble (Requires GTmurmur plugin) | [Notes](#mumble)
-| `mumbleping` | Mumble (Lightweight) | [Notes](#mumble)
-| `mutantfactions` | Mutant Factions
-| `nascarthunder2004` | Nascar Thunder 2004
-| `netpanzer` | netPanzer
-| `nmrih` | No More Room in Hell
-| `ns` | Natural Selection
-| `ns2` | Natural Selection 2
-| `nfshp2` | Need for Speed: Hot Pursuit 2
-| `nab` | Nerf Arena Blast
-| `nwn` | Neverwinter Nights
-| `nwn2` | Neverwinter Nights 2
-| `nexuiz` | Nexuiz
-| `nitrofamily` | Nitro Family
-| `nolf` | No One Lives Forever
-| `nolf2` | No One Lives Forever 2
-| `nucleardawn` | Nuclear Dawn
-| `openarena` | OpenArena
-| `openttd` | OpenTTD
-| `operationflashpoint` | Operation Flashpoint
| `painkiller` | Painkiller
| `postal2` | Postal 2
| `prey` | Prey
@@ -256,8 +251,8 @@ Games List
| `rallisportchallenge` | RalliSport Challenge
| `rallymasters` | Rally Masters
| `redorchestra` | Red Orchestra
-| `redorchestraost` | Red Orchestra: Ostfront 41-45
| `redorchestra2` | Red Orchestra 2
+| `redorchestraost` | Red Orchestra: Ostfront 41-45
| `redline` | Redline
| `rtcw` | Return to Castle Wolfenstein
| `rfactor` | rFactor
@@ -265,12 +260,11 @@ Games List
| `riseofnations` | Rise of Nations
| `rune` | Rune
| `rust` | Rust
+| `stalker` | S.T.A.L.K.E.R.
| `samp` | San Andreas Multiplayer
-| `spaceengineers` | Space Engineers
| `ss` | Serious Sam
| `ss2` | Serious Sam 2
| `shatteredhorizon` | Shattered Horizon
-| `ship` | The Ship
| `shogo` | Shogo
| `shootmania` | Shootmania | [Notes](#nadeo-shootmania--trackmania--etc)
| `sin` | SiN
@@ -278,7 +272,7 @@ Games List
| `soldat` | Soldat
| `sof` | Soldier of Fortune
| `sof2` | Soldier of Fortune 2
-| `stalker` | S.T.A.L.K.E.R.
+| `spaceengineers` | Space Engineers
| `stbc` | Star Trek: Bridge Commander
| `stvef` | Star Trek: Voyager - Elite Force
| `stvef2` | Star Trek: Voyager - Elite Force 2
@@ -291,18 +285,23 @@ Games List
| `starmade` | StarMade
| `starsiege` | Starsiege (2009)
| `suicidesurvival` | Suicide Survival
-| `swat4` | SWAT 4
| `svencoop` | Sven Coop
+| `swat4` | SWAT 4
| `synergy` | Synergy
| `tacticalops` | Tactical Ops
| `takeonhelicopters` | Take On Helicopters (2011)
| `teamfactor` | Team Factor
-| `tfc` | Team Fortress Classic
| `tf2` | Team Fortress 2
+| `tfc` | Team Fortress Classic
| `teamspeak2` | Teamspeak 2
| `teamspeak3` | Teamspeak 3 | [Notes](#teamspeak3)
| `terminus` | Terminus
-| `terraria` | Terraria | [Notes](#terraria)
+| `terraria`
`tshock` | Terraria - TShock (2011) | [Notes](#terraria)
+| `hidden` | The Hidden (2005)
+| `nolf` | The Operative: No One Lives Forever (2000)
+| `ship` | The Ship
+| `graw` | Tom Clancy's Ghost Recon Advanced Warfighter (2006)
+| `graw2` | Tom Clancy's Ghost Recon Advanced Warfighter 2 (2007)
| `thps3` | Tony Hawk's Pro Skater 3
| `thps4` | Tony Hawk's Pro Skater 4
| `thu2` | Tony Hawk's Underground 2
@@ -316,15 +315,15 @@ Games List
| `turok2` | Turok 2
| `universalcombat` | Universal Combat
| `unreal` | Unreal
-| `unturned` | unturned
| `ut` | Unreal Tournament
| `ut2003` | Unreal Tournament 2003
| `ut2004` | Unreal Tournament 2004
| `ut3` | Unreal Tournament 3
+| `unturned` | unturned
| `urbanterror` | Urban Terror
| `v8supercar` | V8 Supercar Challenge
-| `vcmp` | Vice City Multiplayer
| `ventrilo` | Ventrilo
+| `vcmp` | Vice City Multiplayer
| `vietcong` | Vietcong
| `vietcong2` | Vietcong 2
| `warsow` | Warsow
@@ -422,10 +421,6 @@ Games with Additional Notes
To receive a full player list response from CS:GO servers, the server must
have set the cvar: host_players_show 2
-### DayZ
-DayZ uses a query port that is separate from its main game port. The query port is usually
-the game port PLUS 24714 or 24715. You may need to pass this query port into GameDig instead.
-
### Mumble
For full query results from Mumble, you must be running the
[GTmurmur plugin](http://www.gametracker.com/downloads/gtmurmurplugin.php).
diff --git a/games.txt b/games.txt
index ebdeeea..6d9c60f 100644
--- a/games.txt
+++ b/games.txt
@@ -8,8 +8,6 @@ alienswarm|Alien Swarm (2010)|valve|port=27015
arkse|Ark: Survival Evolved (2017)|valve|port=7777,port_query=27015
atlas|Atlas (2018)|valve|port=5761,port_query_offset=51800
avp2|Aliens versus Predator 2 (2001)|gamespy1|port=27888
-# avp2010 doesn't really... have a default port or query port
-# both port and port_query should be specified when used
avp2010|Aliens vs. Predator (2010)|valve|port=27015
americasarmy|America's Army (2002)|gamespy2|port=1716,port_query_offset=1
@@ -78,7 +76,7 @@ crysis2|Crysis 2 (2011)|gamespy3|port=64000
daikatana|Daikatana (2000)|quake2|port=27982,port_query_offset=10
dmomam|Dark Messiah of Might and Magic (2006)|valve|port=27015
darkesthour|Darkest Hour: Europe '44-'45 (2008)|unreal2|port=7757,port_query_offset=1
-dayz|DayZ (2018)|valve|port=2302,port_query_offset=24714|doc_notes=dayz
+dayz|DayZ (2018)|valve|port=2302,port_query_offset=24714
dayzmod|DayZ Mod (2013)|valve|port=2302,port_query_offset=1
deadlydozenpt|Deadly Dozen: Pacific Theater (2002)|gamespy1|port_query=25300
dh2005|Deer Hunter 2005 (2004)|gamespy2|port=23459,port_query=34567
@@ -101,85 +99,82 @@ f1c9902|F1 Challenge '99-'02 (2002)|gamespy1|port_query=34397
farcry|Far Cry (2004)|ase|port=49001,port_query_offset=123
farcry2|Far Cry 2 (2008)|ase|port_query=14001
fortressforever|Fortress Forever (2007)|valve|port=27015
-flashpoint|Operation Flashpoint: Cold War Crisis (2001)|gamespy1|port=2302,port_query_offset=1
+operationflashpoint,flashpoint|Operation Flashpoint: Cold War Crisis (2001)|gamespy1|port=2302,port_query_offset=1
flashpointresistance|Operation Flashpoint: Resistance (2002)|gamespy1|port=2302,port_query_offset=1
-ffow|Frontlines: Fuel of War|ffow|port=5476,port_query_offset=2
-fivem|FiveM|fivem|port=30120
-garrysmod|Garry's Mod|valve|port=27015
-graw|Ghost Recon: Advanced Warfighter|gamespy2|port_query=15250
-graw2|Ghost Recon: Advanced Warfighter 2|gamespy2|port_query=16250
-giantscitizenkabuto|Giants: Citizen Kabuto|gamespy1|port_query=8911
-globaloperations|Global Operations|gamespy1|port_query=28672
-geneshift|Geneshift|geneshift|port=11235
-ges|GoldenEye: Source|valve|port=27015
-gore|Gore|gamespy1|port=27777,port_query_offset=1
-gunmanchronicles|Gunman Chronicles|valve|port=27015
-hldm|Half-Life 1 Deathmatch|valve|port=27015
-hl2dm|Half-Life 2 Deathmatch|valve|port=27015
-halo|Halo|gamespy2|port=2302
-halo2|Halo 2|gamespy2|port=2302
-heretic2|Heretic 2|gamespy1|port=27900,port_query_offset=1
-hexen2|Hexen 2|hexen2|port=26900,port_query_offset=50
-hidden|The Hidden: Source|valve|port=27015
-had2|Hidden and Dangerous 2|gamespy1|port=11001,port_query_offset=3
-homefront|Homefront|valve|port=27015
-homeworld2|Homeworld 2|gamespy1|port_query=6500
-hurtworld|Hurtworld|valve|port=12871,port_query=12881
-igi2|IGI-2: Covert Strike|gamespy1|port_query=26001
-il2|IL-2 Sturmovik|gamespy1|port_query=21000
-insurgency|Insurgency|valve|port=27015
-insurgencysandstorm|Insurgency: Sandstorm|valve|port=27015,port_query_offset=1
-ironstorm|Iron Storm|gamespy1|port_query=3505
-jamesbondnightfire|James Bond: Nightfire|gamespy1|port_query=6550
-jc2mp|Just Cause 2 Multiplayer|jc2mp|port=7777
-killingfloor|Killing Floor|killingfloor|port=7707,port_query_offset=1
-killingfloor2|Killing Floor 2|valve|port=7777,port_query=27015
-kingpin|Kingpin: Life of Crime|gamespy1|port=31510,port_query_offset=-10
-kisspc|KISS Psycho Circus|gamespy1|port=7777,port_query_offset=1
-kspdmp|DMP - KSP Multiplayer|kspdmp|port=6702,port_query_offset=1
-kzmod|KzMod|valve|port=27015
-left4dead|Left 4 Dead|valve|port=27015
-left4dead2|Left 4 Dead 2|valve|port=27015
-m2mp|Mafia 2 Multiplayer|mafia2mp|port=27016,port_query_offset=1
-m2o|Mafia 2 Online|mafia2online|port=27015,port_query_offset=1
-medievalengineers|Medieval Engineers|valve|port=27015
+ffow|Frontlines: Fuel of War (2008)|ffow|port=5476,port_query_offset=2
+fivem|Grand Theft Auto V - FiveM (2013)|fivem|port=30120
+garrysmod|Garry's Mod (2004)|valve|port=27015
+graw|Tom Clancy's Ghost Recon Advanced Warfighter (2006)|gamespy2|port_query=15250
+graw2|Tom Clancy's Ghost Recon Advanced Warfighter 2 (2007)|gamespy2|port_query=16250
+giantscitizenkabuto|Giants: Citizen Kabuto (2000)|gamespy1|port_query=8911
+globaloperations|Global Operations (2002)|gamespy1|port_query=28672
+geneshift,mutantfactions|Geneshift (2017)|geneshift|port=11235
+ges|GoldenEye: Source (2010)|valve|port=27015
+gore|Gore: Ultimate Soldier (2002)|gamespy1|port=27777,port_query_offset=1
+gunmanchronicles|Gunman Chronicles (2000)|valve|port=27015
+hldm|Half-Life Deathmatch (1998)|valve|port=27015
+hldms|Half-Life Deathmatch: Source (2005)|valve|port=27015
+hl2dm|Half-Life 2: Deathmatch (2004)|valve|port=27015
+halo|Halo (2003)|gamespy2|port=2302
+halo2|Halo 2 (2007)|gamespy2|port=2302
+heretic2|Heretic II (1998)|gamespy1|port=27900,port_query_offset=1
+hexen2|Hexen II (1997)|hexen2|port=26900,port_query_offset=50
+hidden|The Hidden (2005)|valve|port=27015
+had2|Hidden & Dangerous 2 (2003)|gamespy1|port=11001,port_query_offset=3
+homefront|Homefront (2011)|valve|port=27015
+homeworld2|Homeworld 2 (2003)|gamespy1|port_query=6500
+hurtworld|Hurtworld (2015)|valve|port=12871,port_query=12881
+igi2|I.G.I.-2: Covert Strike (2003)|gamespy1|port_query=26001
+il2|IL-2 Sturmovik (2001)|gamespy1|port_query=21000
+insurgency|Insurgency (2014)|valve|port=27015
+insurgencysandstorm|Insurgency: Sandstorm (2018)|valve|port=27015,port_query_offset=1
+ironstorm|Iron Storm (2002)|gamespy1|port_query=3505
+jamesbondnightfire|James Bond 007: Nightfire (2002)|gamespy1|port_query=6550
+jc2mp|Just Cause 2 - Multiplayer (2010)|jc2mp|port=7777
+killingfloor|Killing Floor (2009)|killingfloor|port=7707,port_query_offset=1
+killingfloor2|Killing Floor 2 (2016)|valve|port=7777,port_query=27015
+kingpin|Kingpin: Life of Crime (1999)|gamespy1|port=31510,port_query_offset=-10
+kisspc|Kiss: Psycho Circus: The Nightmare Child (2000)|gamespy1|port=7777,port_query_offset=1
+kspdmp|Kerbal Space Program - DMP Multiplayer (2015)|kspdmp|port=6702,port_query_offset=1
+kzmod|Kreedz Climbing (2017)|valve|port=27015
+left4dead|Left 4 Dead (2008)|valve|port=27015
+left4dead2|Left 4 Dead 2 (2009)|valve|port=27015
+m2mp|Mafia II - Multiplayer (2010)|mafia2mp|port=27016,port_query_offset=1
+m2o|Mafia II - Online (2010)|mafia2online|port=27015,port_query_offset=1
+medievalengineers|Medieval Engineers (2015)|valve|port=27015
-mohaa|Medal of Honor: Allied Assault|gamespy1|port=12203,port_query_offset=97
-mohpa|Medal of Honor: Pacific Assault|gamespy1|port=13203,port_query_offset=97
-mohab|Medal of Honor: Airborne|gamespy1|port=12203,port_query_offset=97
-mohsh|Medal of Honor: Spearhead|gamespy1|port=12203,port_query_offset=97
-mohbt|Medal of Honor: Breakthrough|gamespy1|port=12203,port_query_offset=97
-moh2010|Medal of Honor 2010|battlefield|port=7673,port_query=48888
-mohwf|Medal of Honor: Warfighter|battlefield|port=25200,port_query_offset=22000
+mohaa|Medal of Honor: Allied Assault (2002)|gamespy1|port=12203,port_query_offset=97
+mohsh|Medal of Honor: Allied Assault Spearhead (2002)|gamespy1|port=12203,port_query_offset=97
+mohbt|Medal of Honor: Allied Assault Breakthrough (2003)|gamespy1|port=12203,port_query_offset=97
+mohpa|Medal of Honor: Pacific Assault (2004)|gamespy1|port=13203,port_query_offset=97
+mohab|Medal of Honor: Airborne (2007)|gamespy1|port=12203,port_query_offset=97
+moh2010|Medal of Honor (2010)|battlefield|port=7673,port_query=48888
+mohwf|Medal of Honor: Warfighter (2012)|battlefield|port=25200,port_query_offset=22000
-minecraft|Minecraft|minecraft|port=25565|doc_notes=minecraft
-# Legacy name
-minecraftping||minecraft|port=25565|doc_notes=minecraft
+minecraft,minecraftping|Minecraft (2009)|minecraft|port=25565|doc_notes=minecraft
-minecraftpe|Minecraft: Pocket Edition|gamespy3|port=19132,maxAttempts=2
-mnc|Monday Night Combat|valve|port=7777,port_query=27016
-mtavc|Multi Theft Auto: Vice City|ase|port=22003,port_query_offset=123
-mtasa|Multi Theft Auto: San Andreas|ase|port=22003,port_query_offset=123
-mumble|Mumble (Requires GTmurmur plugin)|mumble|port=64738,port_query=27800|doc_notes=mumble
-mumbleping|Mumble (Lightweight)|mumbleping|port=64738|doc_notes=mumble
-mutantfactions|Mutant Factions|geneshift|port=11235
-nascarthunder2004|Nascar Thunder 2004|gamespy2|port_query=13333
-netpanzer|netPanzer|gamespy1|port=3030
-nmrih|No More Room in Hell|valve|port=27015
-ns|Natural Selection|valve|port=27015
-ns2|Natural Selection 2|valve|port_query_offset=1
-nfshp2|Need for Speed: Hot Pursuit 2|gamespy1|port_query=61220
-nab|Nerf Arena Blast|gamespy1|port=4444,port_query_offset=1
-nwn|Neverwinter Nights|gamespy2|port_query=5121
-nwn2|Neverwinter Nights 2|gamespy2|port=5121,port_query=6500
-nexuiz|Nexuiz|quake3|port_query=26000
-nitrofamily|Nitro Family|gamespy1|port_query=25601
-nolf|No One Lives Forever|gamespy1|port_query=27888
-nolf2|No One Lives Forever 2|gamespy1|port_query=27890
-nucleardawn|Nuclear Dawn|valve|port=27015
-openarena|OpenArena|quake3|port_query=27960
-openttd|OpenTTD|openttd|port=3979
-operationflashpoint|Operation Flashpoint|gamespy1|port=2234,port_query_offset=1
+minecraftpe,minecraftbe|Minecraft: Bedrock Edition (2011)|gamespy3|port=19132,maxAttempts=2
+mnc|Monday Night Combat (2011)|valve|port=7777,port_query=27016
+mtavc|Grand Theft Auto: Vice City - Multi Theft Auto (2002)|ase|port=22003,port_query_offset=123
+mtasa|Grand Theft Auto: San Andreas - Multi Theft Auto (2004)|ase|port=22003,port_query_offset=123
+mumble|Mumble - GTmurmur Plugin (2005)|mumble|port=64738,port_query=27800|doc_notes=mumble
+mumbleping|Mumble - Lightweight (2005)|mumbleping|port=64738|doc_notes=mumble
+nascarthunder2004|NASCAR Thunder 2004 (2003)|gamespy2|port_query=13333
+netpanzer|netPanzer (2002)|gamespy1|port=3030
+nmrih|No More Room in Hell (2011)|valve|port=27015
+ns|Natural Selection (2002)|valve|port=27015
+ns2|Natural Selection 2 (2012)|valve|port_query_offset=1
+nfshp2|Need for Speed: Hot Pursuit 2 (2002)|gamespy1|port_query=61220
+nab|Nerf Arena Blast (1999)|gamespy1|port=4444,port_query_offset=1
+nwn|Neverwinter Nights (2002)|gamespy2|port_query=5121
+nwn2|Neverwinter Nights 2 (2006)|gamespy2|port=5121,port_query=6500
+nexuiz|Nexuiz (2005)|quake3|port_query=26000
+nitrofamily|Nitro Family (2004)|gamespy1|port_query=25601
+nolf|The Operative: No One Lives Forever (2000)|gamespy1|port_query=27888
+nolf2|No One Lives Forever 2: A Spy in H.A.R.M.'s Way (2002)|gamespy1|port_query=27890
+nucleardawn|Nuclear Dawn (2011)|valve|port=27015
+openarena|OpenArena (2005)|quake3|port_query=27960
+openttd|OpenTTD (2004)|openttd|port=3979
painkiller|Painkiller|ase|port=3455,port_query_offset=123
postal2|Postal 2|gamespy1|port=7777,port_query_offset=1
prey|Prey|doom3|port=27719
@@ -248,7 +243,7 @@ tf2|Team Fortress 2|valve|port=27015
teamspeak2|Teamspeak 2|teamspeak2|port=8767
teamspeak3|Teamspeak 3|teamspeak3|port=9987|doc_notes=teamspeak3
terminus|Terminus|gamespy1|port_query=12286
-terraria|Terraria|terraria|port=7777,port_query_offset=101|doc_notes=terraria
+terraria,tshock|Terraria - TShock (2011)|terraria|port=7777,port_query_offset=101|doc_notes=terraria
thps3|Tony Hawk's Pro Skater 3|gamespy1|port_query=6500
thps4|Tony Hawk's Pro Skater 4|gamespy1|port_query=6500
thu2|Tony Hawk's Underground 2|gamespy1|port_query=5153
diff --git a/lib/GameResolver.js b/lib/GameResolver.js
index 882f0d0..219cb6e 100644
--- a/lib/GameResolver.js
+++ b/lib/GameResolver.js
@@ -3,7 +3,9 @@ const Path = require('path'),
class GameResolver {
constructor() {
- this.games = this._readGames();
+ const loaded = this._readGames();
+ this.gamesByKey = loaded.gamesByKey;
+ this.games = loaded.games;
}
lookup(type) {
@@ -15,7 +17,7 @@ class GameResolver {
};
}
- const game = this.games.get(type);
+ const game = this.gamesByKey.get(type);
if(!game) throw Error('Invalid game: '+type);
return game.options;
}
@@ -24,11 +26,15 @@ class GameResolver {
let out = '';
out += '| GameDig Type ID | Name | Notes\n';
out += '|---|---|---\n';
- for(const [key,game] of this.games.entries()) {
- if (!game.pretty) {
- continue;
- }
- out += "| " + ("`"+key+"`").padEnd(10, " ") + " "
+
+ const sorted = this.games
+ .filter(game => game.pretty)
+ .sort((a,b) => {
+ return a.pretty.localeCompare(b.pretty);
+ });
+ for(const game of sorted) {
+ let keysOut = game.keys.map(key => '`'+key+'`').join('
');
+ out += "| " + keysOut.padEnd(10, " ") + " "
+ "| " + game.pretty;
if(game.extra.doc_notes)
out += " | [Notes](#"+game.extra.doc_notes+")";
@@ -40,7 +46,9 @@ class GameResolver {
_readGames() {
const gamesFile = Path.normalize(__dirname+'/../games.txt');
const lines = fs.readFileSync(gamesFile,'utf8').split('\n');
- const games = new Map();
+
+ const gamesByKey = new Map();
+ const games = [];
for (let line of lines) {
// strip comments
@@ -50,17 +58,25 @@ class GameResolver {
if(!line) continue;
const split = line.split('|');
- const gameId = split[0].trim();
+ const keys = split[0].trim().split(',');
+ const name = split[1].trim();
const options = this._parseList(split[3]);
options.protocol = split[2].trim();
+ const extra = this._parseList(split[4]);
- games.set(gameId, {
- pretty: split[1].trim(),
+ const game = {
+ keys: keys,
+ pretty: name,
options: options,
- extra: this._parseList(split[4])
- });
+ extra: extra
+ };
+
+ for (const key of keys) {
+ gamesByKey.set(key, game);
+ }
+ games.push(game);
}
- return games;
+ return { gamesByKey, games };
}
_parseList(str) {