diff --git a/games/Makefile b/games/Makefile index b21665deb41c..e3b92e6fcc72 100644 --- a/games/Makefile +++ b/games/Makefile @@ -1,1183 +1,1184 @@ COMMENT = Games and related software SUBDIR += 0ad SUBDIR += 0verkill SUBDIR += 2048 SUBDIR += 3dc SUBDIR += 3dpong SUBDIR += 3omns SUBDIR += 54321 SUBDIR += 7kaa SUBDIR += 90secondportraits SUBDIR += Bugdom SUBDIR += Bugdom2 SUBDIR += CaribbeanStud SUBDIR += DDNet SUBDIR += Doom64EX SUBDIR += HeroesOfMightAndMagic SUBDIR += KnightCap SUBDIR += LibreMines SUBDIR += NBlood SUBDIR += Nanosaur SUBDIR += OpenLara SUBDIR += OpenTomb SUBDIR += SRB2 SUBDIR += SpaceCadetPinball SUBDIR += SpaceCadetPinball-devel SUBDIR += abbayedesmorts SUBDIR += abe SUBDIR += abuse_sdl SUBDIR += ace-of-penguins SUBDIR += adom SUBDIR += aestats SUBDIR += affenspiel SUBDIR += afternoonstalker SUBDIR += agame SUBDIR += ags SUBDIR += aisleriot SUBDIR += aklabeth SUBDIR += alephone SUBDIR += alephone-data SUBDIR += alephone-scenarios SUBDIR += alex4 SUBDIR += alienarena SUBDIR += alienarena-data SUBDIR += alienblaster SUBDIR += alienwave SUBDIR += amnesia-tdd SUBDIR += amoebax SUBDIR += an SUBDIR += angband SUBDIR += anki SUBDIR += antipolix SUBDIR += aop SUBDIR += apoolGL SUBDIR += apricots SUBDIR += aquaria SUBDIR += armagetronad SUBDIR += arx-libertatis SUBDIR += ascii-invaders SUBDIR += asciiquarium SUBDIR += assaultcube SUBDIR += asteroids3d SUBDIR += astromenace SUBDIR += asylum SUBDIR += atanks SUBDIR += atomix SUBDIR += atr3d SUBDIR += atris SUBDIR += atris-sounds SUBDIR += augustus SUBDIR += auralquiz SUBDIR += automuteus SUBDIR += avanor SUBDIR += avoision SUBDIR += avp SUBDIR += awale SUBDIR += awele SUBDIR += ballerburg SUBDIR += banihstypos SUBDIR += barony SUBDIR += barrage SUBDIR += bass SUBDIR += bastet SUBDIR += battalion SUBDIR += battletanks SUBDIR += belooted SUBDIR += beret SUBDIR += billardgl SUBDIR += biloba SUBDIR += biniax2 SUBDIR += biorythm SUBDIR += bitefusion SUBDIR += black-box SUBDIR += black-hole-solver SUBDIR += blackjackclient SUBDIR += blackshadeselite SUBDIR += blinken SUBDIR += blinkensisters SUBDIR += blobby SUBDIR += blobwars SUBDIR += block SUBDIR += blockattack SUBDIR += blockout SUBDIR += blockrage SUBDIR += blokish SUBDIR += bloodfrontier SUBDIR += bluemoon SUBDIR += blues SUBDIR += bomber SUBDIR += bomberclone SUBDIR += bombherman SUBDIR += bomns SUBDIR += bovo SUBDIR += braincurses SUBDIR += brainparty SUBDIR += brainworkshop SUBDIR += brickout SUBDIR += brickshooter SUBDIR += brikx SUBDIR += briquolo SUBDIR += brogue SUBDIR += brumbrumrally SUBDIR += brutalchess SUBDIR += bs SUBDIR += bsdgames SUBDIR += bsdtris SUBDIR += bsp SUBDIR += bstone SUBDIR += bubble-chains SUBDIR += bucklespring SUBDIR += bugsquish SUBDIR += bugsx SUBDIR += bumprace SUBDIR += burgerspace SUBDIR += burr-tools SUBDIR += bzflag SUBDIR += bzflag-server SUBDIR += cake SUBDIR += candycrisis SUBDIR += caph SUBDIR += cardpics SUBDIR += cataclysm-dda SUBDIR += catesc SUBDIR += cave9 SUBDIR += cavezofphear SUBDIR += cdogs-sdl SUBDIR += cgoban SUBDIR += chapping SUBDIR += chessx SUBDIR += chocolate-doom SUBDIR += chroma SUBDIR += chromium-bsu SUBDIR += chromono SUBDIR += circuslinux SUBDIR += cmatrix SUBDIR += coffeebreak SUBDIR += colobot SUBDIR += colorcode SUBDIR += columns SUBDIR += concentration SUBDIR += connectagram SUBDIR += connectfive SUBDIR += construo SUBDIR += coronapoker SUBDIR += corsix-th SUBDIR += cosmosmash SUBDIR += cowsay SUBDIR += crack-attack SUBDIR += craft SUBDIR += crafty SUBDIR += crashtest SUBDIR += cretan-hubris SUBDIR += crimson SUBDIR += crispy-doom SUBDIR += criticalmass SUBDIR += crossfire-client SUBDIR += crrcsim SUBDIR += cryptoslam SUBDIR += csmash SUBDIR += ctris SUBDIR += cube SUBDIR += cursive SUBDIR += cutemaze SUBDIR += cuyo SUBDIR += cxxmatrix SUBDIR += d2x SUBDIR += dMagnetic SUBDIR += dangen SUBDIR += darkplaces SUBDIR += defendguin + SUBDIR += devd-controller-rules SUBDIR += devilutionX SUBDIR += dhewm3 SUBDIR += diaspora SUBDIR += digger-vgl SUBDIR += divide-and-succeed SUBDIR += dmjava SUBDIR += dobutsu SUBDIR += dodgindiamond2 SUBDIR += domination SUBDIR += domino-chain SUBDIR += dontspace SUBDIR += doom SUBDIR += doom-data SUBDIR += doom-freedoom SUBDIR += doom-hacx SUBDIR += doom-hr SUBDIR += doom-hr2 SUBDIR += doom-wolfendoom SUBDIR += doomlegacy SUBDIR += doomsday SUBDIR += dose-response SUBDIR += dreamchess SUBDIR += duel SUBDIR += dunelegacy SUBDIR += dungeon SUBDIR += dungeoncrawl SUBDIR += dustrac SUBDIR += dxx-rebirth SUBDIR += easyrpg-player SUBDIR += eboard SUBDIR += ecwolf SUBDIR += edge SUBDIR += editss SUBDIR += eduke32 SUBDIR += egl SUBDIR += egoboo SUBDIR += eif SUBDIR += eights SUBDIR += einstein SUBDIR += eksanos SUBDIR += el SUBDIR += el-data SUBDIR += emptyepsilon SUBDIR += endgame-singularity SUBDIR += endgame-singularity-music SUBDIR += endless-sky SUBDIR += endless-sky-high-dpi SUBDIR += enigma SUBDIR += ensemblist SUBDIR += entombed SUBDIR += enygma SUBDIR += epiphany-game SUBDIR += etlegacy SUBDIR += etracer SUBDIR += euchre SUBDIR += eureka SUBDIR += evilfinder SUBDIR += evq3 SUBDIR += excido SUBDIR += exhaust SUBDIR += exhaust-doc SUBDIR += exhaust-ma SUBDIR += exult SUBDIR += ezquake SUBDIR += f1spirit-remake SUBDIR += fairymax SUBDIR += fakesteak SUBDIR += falconseye SUBDIR += fargoal SUBDIR += fbg2 SUBDIR += fheroes2 SUBDIR += fightorperish SUBDIR += fillets-ng SUBDIR += filters SUBDIR += fishsupper SUBDIR += five-or-more SUBDIR += fkiss SUBDIR += flare-engine SUBDIR += flare-game SUBDIR += flightgear SUBDIR += flightgear-aircraft SUBDIR += flightgear-data SUBDIR += flightgear-mb339-pan SUBDIR += flobopuyo SUBDIR += flyhard SUBDIR += flying SUBDIR += fmars SUBDIR += foobillard SUBDIR += formido SUBDIR += fortunate SUBDIR += fotaq SUBDIR += four-in-a-row SUBDIR += freebee SUBDIR += freeblocks SUBDIR += freecell-solver SUBDIR += freeciv SUBDIR += freeciv-nox11 SUBDIR += freeciv21 SUBDIR += freecol SUBDIR += freedink SUBDIR += freedink-data SUBDIR += freedink-dfarc SUBDIR += freedink-engine SUBDIR += freedoko SUBDIR += freedroid SUBDIR += freedroidrpg SUBDIR += freeminer SUBDIR += freeminer-default SUBDIR += freeorion SUBDIR += freesweep SUBDIR += freesynd SUBDIR += freetennis SUBDIR += fretsonfire SUBDIR += fretsonfire-data SUBDIR += frikqcc SUBDIR += frogatto SUBDIR += frotz SUBDIR += frozen-bubble SUBDIR += fs2open SUBDIR += funnyboat SUBDIR += galaxis SUBDIR += garden-of-coloured-lights SUBDIR += gargoyle SUBDIR += gbrainy SUBDIR += gcompris-qt SUBDIR += gemdropx SUBDIR += gemrb SUBDIR += genact SUBDIR += gigalomania SUBDIR += gillo SUBDIR += gl-117 SUBDIR += glaxium SUBDIR += glbsp SUBDIR += glest SUBDIR += glest-data SUBDIR += glightoff SUBDIR += glmaze SUBDIR += glob2 SUBDIR += glsfcave SUBDIR += gltron SUBDIR += gmastermind SUBDIR += gmines SUBDIR += gnome-2048 SUBDIR += gnome-chess SUBDIR += gnome-games SUBDIR += gnome-klotski SUBDIR += gnome-mahjongg SUBDIR += gnome-mines SUBDIR += gnome-nibbles SUBDIR += gnome-robots SUBDIR += gnome-sudoku SUBDIR += gnome-tetravex SUBDIR += gnubg SUBDIR += gnubik SUBDIR += gnuchess SUBDIR += gnudoku SUBDIR += gnugo SUBDIR += gnujump SUBDIR += gnurobbo SUBDIR += gnurobots SUBDIR += gnushogi SUBDIR += gnustep-ladder SUBDIR += gnustep-sudoku SUBDIR += gobang SUBDIR += gogrepo SUBDIR += gogui SUBDIR += golddig SUBDIR += golly SUBDIR += gomoku SUBDIR += goonies SUBDIR += gottet SUBDIR += gracer SUBDIR += granatier SUBDIR += greed SUBDIR += griels-quest SUBDIR += grubik SUBDIR += gshisen SUBDIR += gti SUBDIR += gtkatlantic SUBDIR += gtkballs SUBDIR += gtkevemon SUBDIR += gtkradiant SUBDIR += gtypist SUBDIR += gunfudeadlands SUBDIR += gzdoom SUBDIR += hangman SUBDIR += hedgewars SUBDIR += help_hannahs_horse SUBDIR += heretic SUBDIR += heroes SUBDIR += hex-a-hop SUBDIR += hexalate SUBDIR += hexxagon SUBDIR += highmoon SUBDIR += hinversi SUBDIR += hitori SUBDIR += hivetui SUBDIR += hllib SUBDIR += holotz-castle SUBDIR += hoverboard-sdl SUBDIR += hs-scroll SUBDIR += hypatia_engine SUBDIR += hyperrogue SUBDIR += icbm3d SUBDIR += icebreaker SUBDIR += iceicepenguin SUBDIR += impossible_mission_puzzle SUBDIR += inform7 SUBDIR += instead SUBDIR += interlogic SUBDIR += ioquake3 SUBDIR += ioquake3-server SUBDIR += iortcw SUBDIR += iqpuzzle SUBDIR += irrlamb SUBDIR += ishido SUBDIR += ivan SUBDIR += jaggedalliance2 SUBDIR += java-games-suite SUBDIR += jchessboard SUBDIR += jfk SUBDIR += jfsw SUBDIR += jigsaw SUBDIR += jigzo SUBDIR += jin SUBDIR += jinput SUBDIR += joequake SUBDIR += jtans SUBDIR += julius SUBDIR += jumpnbump SUBDIR += jumpy SUBDIR += jutils SUBDIR += jvgs SUBDIR += jzip SUBDIR += kajongg SUBDIR += kanagram SUBDIR += kanatest SUBDIR += kapman SUBDIR += kartofel SUBDIR += katomic SUBDIR += kblackbox SUBDIR += kblocks SUBDIR += kbounce SUBDIR += kbreakout SUBDIR += kdegames SUBDIR += kdiamond SUBDIR += keeperrl SUBDIR += kevedit SUBDIR += kfourinline SUBDIR += kgoldrunner SUBDIR += khangman SUBDIR += kigo SUBDIR += killbots SUBDIR += kiriki SUBDIR += kjumpingcube SUBDIR += klavaro SUBDIR += klickety SUBDIR += klines SUBDIR += klondike SUBDIR += kmahjongg SUBDIR += kmines SUBDIR += knavalbattle SUBDIR += knetwalk SUBDIR += knights SUBDIR += kobodeluxe SUBDIR += kodi-addon-game.libretro SUBDIR += kodi-addon-game.libretro.beetle-psx SUBDIR += kodi-addon-game.libretro.fceumm SUBDIR += kodi-addon-game.libretro.genplus SUBDIR += kodi-addon-game.libretro.pcsx-rearmed SUBDIR += kodi-addon-game.libretro.picodrive SUBDIR += kolf SUBDIR += kollision SUBDIR += konquest SUBDIR += kpat SUBDIR += krank SUBDIR += kreversi SUBDIR += kshisen SUBDIR += ksirk SUBDIR += ksnakeduel SUBDIR += kspaceduel SUBDIR += ksquares SUBDIR += ksudoku SUBDIR += ktuberling SUBDIR += ktx SUBDIR += kubrick SUBDIR += kuklomenos SUBDIR += ladder SUBDIR += lander SUBDIR += lapispuzzle SUBDIR += lbreakout SUBDIR += lbreakout2 SUBDIR += lbreakouthd SUBDIR += ldmud SUBDIR += leela-zero SUBDIR += legend-of-edgar SUBDIR += legesmotus SUBDIR += lexter SUBDIR += lgeneral SUBDIR += lgogdownloader SUBDIR += libgnome-games-support SUBDIR += libgnome-games-support2 SUBDIR += libkdegames SUBDIR += libkmahjongg SUBDIR += liblcf SUBDIR += libmaitretarot SUBDIR += libmanette SUBDIR += libmt_client SUBDIR += libretro SUBDIR += libretro-2048 SUBDIR += libretro-a5200 SUBDIR += libretro-beetle_psx SUBDIR += libretro-bluemsx SUBDIR += libretro-boom3 SUBDIR += libretro-cap32 SUBDIR += libretro-core-info SUBDIR += libretro-desmume SUBDIR += libretro-desmume2015 SUBDIR += libretro-dosbox SUBDIR += libretro-emux SUBDIR += libretro-fbalpha2012 SUBDIR += libretro-fbneo SUBDIR += libretro-fceumm SUBDIR += libretro-fmsx SUBDIR += libretro-freeintv SUBDIR += libretro-fuse SUBDIR += libretro-gambatte SUBDIR += libretro-genesis_plus_gx SUBDIR += libretro-gpsp SUBDIR += libretro-gw SUBDIR += libretro-handy SUBDIR += libretro-hatari SUBDIR += libretro-mame2000 SUBDIR += libretro-mame2003 SUBDIR += libretro-mame2003_plus SUBDIR += libretro-mednafen_bsnes SUBDIR += libretro-mednafen_gba SUBDIR += libretro-mednafen_lynx SUBDIR += libretro-mednafen_ngp SUBDIR += libretro-mednafen_pce SUBDIR += libretro-mednafen_pce_fast SUBDIR += libretro-mednafen_pcfx SUBDIR += libretro-mednafen_saturn SUBDIR += libretro-mednafen_supergrafx SUBDIR += libretro-mednafen_vb SUBDIR += libretro-mednafen_wswan SUBDIR += libretro-melonds SUBDIR += libretro-mgba SUBDIR += libretro-mu SUBDIR += libretro-nestopia SUBDIR += libretro-nxengine SUBDIR += libretro-o2em SUBDIR += libretro-opera SUBDIR += libretro-parallel_n64 SUBDIR += libretro-pcsx_rearmed SUBDIR += libretro-picodrive SUBDIR += libretro-play SUBDIR += libretro-prboom SUBDIR += libretro-prosystem SUBDIR += libretro-puae SUBDIR += libretro-px68k SUBDIR += libretro-quicknes SUBDIR += libretro-scummvm SUBDIR += libretro-shaders-glsl SUBDIR += libretro-shaders-slang SUBDIR += libretro-snes9x SUBDIR += libretro-snes9x2005 SUBDIR += libretro-snes9x2010 SUBDIR += libretro-stella2014 SUBDIR += libretro-tgbdual SUBDIR += libretro-tyrquake SUBDIR += libretro-vba_next SUBDIR += libretro-vecx SUBDIR += libretro-virtualjaguar SUBDIR += libretro-xrick SUBDIR += libretro-yabause SUBDIR += libshhcards SUBDIR += libtmcg SUBDIR += lightsoff SUBDIR += lincity SUBDIR += lincity-ng SUBDIR += linux-doom3 SUBDIR += linux-doom3-demo SUBDIR += linux-dwarffortress SUBDIR += linux-enemyterritory SUBDIR += linux-enemyterritory-jaymod SUBDIR += linux-enemyterritory-shrub SUBDIR += linux-enemyterritory-tce SUBDIR += linux-etqw-demo-server SUBDIR += linux-etqw-server SUBDIR += linux-nerogame SUBDIR += linux-nwnclient SUBDIR += linux-quake3 SUBDIR += linux-quake4 SUBDIR += linux-quake4-demo SUBDIR += linux-ssamtfe SUBDIR += linux-ssamtse SUBDIR += linux-steam-utils SUBDIR += linux-unrealgold SUBDIR += linux-ut SUBDIR += linux-virtual-jay-peak SUBDIR += linwarrior SUBDIR += lizzie SUBDIR += lm-solve SUBDIR += lmarbles SUBDIR += lmpc SUBDIR += loderunner-ng SUBDIR += lolcat SUBDIR += lordsawar SUBDIR += lpairs SUBDIR += lskat SUBDIR += ltris SUBDIR += luanti SUBDIR += lugaru SUBDIR += luola SUBDIR += lwjgl SUBDIR += lwjgl3 SUBDIR += macopix SUBDIR += madbomber SUBDIR += maelstrom SUBDIR += magiccube4d SUBDIR += mahjong SUBDIR += maitretarot SUBDIR += mancala SUBDIR += mangband SUBDIR += marblemarcher SUBDIR += mari0 SUBDIR += mastermind SUBDIR += masterserver SUBDIR += maxr SUBDIR += meandmyshadow SUBDIR += megaglest SUBDIR += megaglest-data SUBDIR += megamario SUBDIR += melonds SUBDIR += memonix SUBDIR += meqcc SUBDIR += meritous SUBDIR += mindfocus SUBDIR += minecraft-server SUBDIR += minerbold SUBDIR += minetest_game SUBDIR += minetestmapper SUBDIR += minigalaxy SUBDIR += mirrormagic SUBDIR += miscom SUBDIR += mizuma SUBDIR += mkhexgrid SUBDIR += moagg SUBDIR += monsterz SUBDIR += moon-buggy SUBDIR += moonlander SUBDIR += moonlight-embedded SUBDIR += moonlight-embedded-devel SUBDIR += moonlight-qt SUBDIR += moria SUBDIR += mrboom SUBDIR += mt_dolphin_ia SUBDIR += mt_gtk_client SUBDIR += mtaserver SUBDIR += multimc SUBDIR += mvdsv SUBDIR += nInvaders SUBDIR += naev SUBDIR += narcissu2 SUBDIR += nazghul SUBDIR += nbsdgames SUBDIR += nehquake SUBDIR += neo SUBDIR += neo-cowsay SUBDIR += nethack32 SUBDIR += nethack33 SUBDIR += nethack33-nox11 SUBDIR += nethack34 SUBDIR += nethack34-nox11 SUBDIR += nethack36 SUBDIR += nethack36-nox11 SUBDIR += netherearth SUBDIR += netradiant SUBDIR += netrek-BRMH-bin SUBDIR += netrek-client-cow SUBDIR += nettoe SUBDIR += netwalk SUBDIR += neverball SUBDIR += newvox SUBDIR += nextgo SUBDIR += nexuiz SUBDIR += nighthawk SUBDIR += nimuh SUBDIR += ninix-aya SUBDIR += njam SUBDIR += nlarn SUBDIR += nonsense SUBDIR += npush SUBDIR += nsnake SUBDIR += nuclearchess SUBDIR += numptyphysics SUBDIR += numptyphysics-npcomplete SUBDIR += nwndata SUBDIR += nxengine SUBDIR += oblige SUBDIR += odamex SUBDIR += oldrunner SUBDIR += omega SUBDIR += oneko-sakura SUBDIR += onscripter SUBDIR += onscripter-1byte SUBDIR += oolite SUBDIR += oonsoo SUBDIR += open-adventure SUBDIR += openage SUBDIR += openarena SUBDIR += openarena-data SUBDIR += openarena-oax SUBDIR += openarena-server SUBDIR += openbor SUBDIR += openbor3482 SUBDIR += openbor3711 SUBDIR += openbor3979 SUBDIR += openbor4432 SUBDIR += openbor7144 SUBDIR += openbubbles SUBDIR += openbve SUBDIR += opencity SUBDIR += openclaw SUBDIR += openclonk SUBDIR += openenroth SUBDIR += openfodder SUBDIR += opengfx SUBDIR += openglad SUBDIR += openjazz SUBDIR += openjk SUBDIR += openmortal SUBDIR += openmsx SUBDIR += openmw SUBDIR += openomf SUBDIR += openra SUBDIR += openrct2 SUBDIR += opensfx SUBDIR += opensonic SUBDIR += openspades SUBDIR += openssn SUBDIR += opensurge SUBDIR += openttd SUBDIR += opentyrian SUBDIR += openxcom SUBDIR += openyahtzee SUBDIR += orbital_eunuchs_sniper SUBDIR += orthorobot SUBDIR += osgg SUBDIR += p5-Acme-GuessNumber SUBDIR += p5-Algorithm-Pair-Best2 SUBDIR += p5-Algorithm-Pair-Swiss SUBDIR += p5-Baseball-Sabermetrics SUBDIR += p5-Games-Alak SUBDIR += p5-Games-AlphaBeta SUBDIR += p5-Games-Bingo SUBDIR += p5-Games-Bingo-Bot SUBDIR += p5-Games-Bingo-Print SUBDIR += p5-Games-Dice SUBDIR += p5-Games-GuessWord SUBDIR += p5-Games-Tournament-RoundRobin SUBDIR += pachi SUBDIR += pacman.c SUBDIR += pacmanarena SUBDIR += palapeli SUBDIR += pangzero SUBDIR += passage SUBDIR += patapizza-tetris SUBDIR += pathological SUBDIR += pcgen SUBDIR += pear-Games_Chess SUBDIR += peg-e SUBDIR += pengpong SUBDIR += penguin-command SUBDIR += pengupop SUBDIR += pentobi SUBDIR += phalanx SUBDIR += phlipple SUBDIR += picmi SUBDIR += pinball SUBDIR += pingus SUBDIR += pink-pony SUBDIR += pioneer SUBDIR += pioneers SUBDIR += pipenightdreams SUBDIR += pipepanic SUBDIR += pipewalker SUBDIR += pmars SUBDIR += pmars-sdl SUBDIR += polyglot SUBDIR += pongix SUBDIR += ponscripter-07th-mod SUBDIR += popstar SUBDIR += powder SUBDIR += powder-toy SUBDIR += powder-toy-devel SUBDIR += powermanga SUBDIR += powwow SUBDIR += prboom-plus SUBDIR += primateplunge SUBDIR += prismlauncher SUBDIR += puckman SUBDIR += punchy SUBDIR += pvpgn SUBDIR += py-2048-py SUBDIR += py-cbeams SUBDIR += py-discord.py SUBDIR += py-fife SUBDIR += py-mnemosyne-proj SUBDIR += py-pychess SUBDIR += py-pysol-cards SUBDIR += py-sgflib SUBDIR += py-sgfsummary SUBDIR += py-trueskill SUBDIR += pysolfc SUBDIR += pysolfc-cardsets SUBDIR += pyspacewar SUBDIR += q2p SUBDIR += q2pro SUBDIR += q3cellshading SUBDIR += qcc SUBDIR += qccx SUBDIR += qnetwalk SUBDIR += qonk SUBDIR += qqwing SUBDIR += qstat SUBDIR += qtv SUBDIR += quackle SUBDIR += quadra SUBDIR += quadrapassel SUBDIR += quake-data SUBDIR += quake-dpmod SUBDIR += quake-maps SUBDIR += quake-source SUBDIR += quake2-3zb2 SUBDIR += quake2-ctf SUBDIR += quake2-data SUBDIR += quake2-extras SUBDIR += quake2-lights SUBDIR += quake2-matrix SUBDIR += quake2-psychomod SUBDIR += quake2-relay SUBDIR += quake2-rogue SUBDIR += quake2-source SUBDIR += quake2-xatrix SUBDIR += quake2lnx SUBDIR += quake2max SUBDIR += quake3-data SUBDIR += quake3-excessive SUBDIR += quake3-osp SUBDIR += quake3-ut SUBDIR += quake3-wfa SUBDIR += quakeforge SUBDIR += quantumminigolf SUBDIR += quaqut SUBDIR += qudos SUBDIR += quetoo SUBDIR += quit SUBDIR += qwdtools SUBDIR += qwfwd SUBDIR += r1q2 SUBDIR += railroad-rampage SUBDIR += rawgl SUBDIR += re3 SUBDIR += redeclipse SUBDIR += redeclipse-data SUBDIR += redeclipse-data16 SUBDIR += redeclipse16 SUBDIR += redorblack SUBDIR += regoth SUBDIR += reminiscence SUBDIR += rescue SUBDIR += retroarch SUBDIR += retroarch-assets SUBDIR += rezerwar SUBDIR += rfksay SUBDIR += ri-li SUBDIR += rlvm SUBDIR += rnd_jue SUBDIR += robocode SUBDIR += robocode-naval SUBDIR += robotfindskitten SUBDIR += rockdodger SUBDIR += rocksndiamonds SUBDIR += rocksndiamonds-data SUBDIR += rottdc SUBDIR += rpg-cli SUBDIR += rubix SUBDIR += rubygem-fortune_gem SUBDIR += rubygem-lolcat SUBDIR += rubygem-vimgolf SUBDIR += runelite SUBDIR += sampsvr SUBDIR += sarien SUBDIR += sauerbraten SUBDIR += scare SUBDIR += scid SUBDIR += scourge SUBDIR += scourge-data SUBDIR += scramble SUBDIR += scummvm SUBDIR += scummvm-tools SUBDIR += sdb SUBDIR += sdl-ball SUBDIR += sdl-sopwith SUBDIR += sdl_jewels SUBDIR += sdl_lopan SUBDIR += sdl_scavenger SUBDIR += sdlpop SUBDIR += sdlroids SUBDIR += sdlsand SUBDIR += sea-defender SUBDIR += seabattle SUBDIR += searchandrescue SUBDIR += searchandrescue-data SUBDIR += sets SUBDIR += sex SUBDIR += sgt-puzzles SUBDIR += shockolate SUBDIR += shootingstar SUBDIR += simplevaders SUBDIR += simsu SUBDIR += simutrans SUBDIR += simutrans-pak128 SUBDIR += simutrans-pak128.german SUBDIR += simutrans-pak64 SUBDIR += sjeng SUBDIR += ski SUBDIR += skladnik SUBDIR += sl SUBDIR += slade SUBDIR += slashem-tty SUBDIR += slump SUBDIR += sokoban SUBDIR += sokobano SUBDIR += sol SUBDIR += solarconquest SUBDIR += solarus SUBDIR += solarus-quest-editor SUBDIR += solver SUBDIR += spacejunk SUBDIR += speak SUBDIR += species SUBDIR += spellcast SUBDIR += spicetrade SUBDIR += star_traders SUBDIR += starfighter SUBDIR += starlanes SUBDIR += steelstorm SUBDIR += stendhal SUBDIR += stockfish SUBDIR += stonesoup SUBDIR += stormbaancoureur SUBDIR += stratagus SUBDIR += sudsol SUBDIR += sulis SUBDIR += supertux SUBDIR += supertux2 SUBDIR += supertuxkart SUBDIR += swell-foop SUBDIR += sxsame SUBDIR += tads SUBDIR += taipan SUBDIR += taisei SUBDIR += tali SUBDIR += tanglet SUBDIR += tbclock SUBDIR += tecnoballz SUBDIR += teeworlds SUBDIR += tenebrae SUBDIR += tesseract SUBDIR += tesseract-data SUBDIR += tetrigo SUBDIR += tetrinet SUBDIR += tetrinet-x SUBDIR += tetzle SUBDIR += textmaze SUBDIR += thegrind SUBDIR += tileworld SUBDIR += tinycols SUBDIR += tkmoo SUBDIR += tmatrix SUBDIR += tomatoes SUBDIR += tome4 SUBDIR += tome4-beta SUBDIR += tomenet SUBDIR += tong SUBDIR += toppler SUBDIR += torcs SUBDIR += tornado SUBDIR += torrent SUBDIR += toycars SUBDIR += trackballs SUBDIR += tractorgen SUBDIR += traingame SUBDIR += tremulous SUBDIR += trenchbroom SUBDIR += trigger-rally SUBDIR += trimines SUBDIR += triplane SUBDIR += trojka SUBDIR += tsito SUBDIR += tt SUBDIR += ttt SUBDIR += tty-solitaire SUBDIR += tux-aqfh SUBDIR += tuxkart SUBDIR += tuxpaint SUBDIR += tuxpaint-config SUBDIR += tuxpaint-fonts SUBDIR += tuxpaint-stamps SUBDIR += tuxracer SUBDIR += tuxtype SUBDIR += twind SUBDIR += tycho SUBDIR += typespeed SUBDIR += typtea SUBDIR += tyrian-data SUBDIR += ufoai SUBDIR += ufoai-data SUBDIR += uhexen SUBDIR += uhexen2 SUBDIR += uhexen2-extras SUBDIR += ultimatestunts SUBDIR += umark SUBDIR += unknown-horizons SUBDIR += unnethack SUBDIR += untahris SUBDIR += uqm SUBDIR += urbanterror-data SUBDIR += valyriatear SUBDIR += vamos SUBDIR += vanilla-conquer SUBDIR += vavoom SUBDIR += vavoom-extras SUBDIR += vcmi SUBDIR += vectoroids SUBDIR += veloren-weekly SUBDIR += violetland SUBDIR += viruskiller SUBDIR += vitetris SUBDIR += vkquake SUBDIR += vms-empire SUBDIR += voadi SUBDIR += volleyball SUBDIR += vor SUBDIR += vt100-art-and-animations SUBDIR += vultures-eye SUBDIR += vvvvvv SUBDIR += wanderer SUBDIR += wargus SUBDIR += warmux SUBDIR += warzone2100 SUBDIR += wesnoth SUBDIR += whichwayisup SUBDIR += widelands SUBDIR += wipeclean SUBDIR += wizznic SUBDIR += wmeyes SUBDIR += wmpuzzle SUBDIR += wmqstat SUBDIR += wmtictactoe SUBDIR += wolfpack SUBDIR += wop SUBDIR += wordplay SUBDIR += wordsearch SUBDIR += wordwarvi SUBDIR += worldofpadman SUBDIR += wtf SUBDIR += wxlauncher SUBDIR += wyrmgus SUBDIR += wyrmsun SUBDIR += xasteroids SUBDIR += xbat SUBDIR += xbill SUBDIR += xbl SUBDIR += xblackjack SUBDIR += xblast SUBDIR += xblood SUBDIR += xboard SUBDIR += xboard-devel SUBDIR += xboing SUBDIR += xbomb SUBDIR += xbubble SUBDIR += xchadance SUBDIR += xcheckers SUBDIR += xchomp SUBDIR += xconq SUBDIR += xcowsay SUBDIR += xcubes SUBDIR += xdeblock SUBDIR += xdemineur SUBDIR += xdesktopwaves SUBDIR += xdigger SUBDIR += xdino SUBDIR += xemeraldia SUBDIR += xeyesplus SUBDIR += xfce4-eyes-plugin SUBDIR += xfireworks SUBDIR += xfrisk SUBDIR += xgalaga SUBDIR += xgalaga++ SUBDIR += xgalaga-sdl SUBDIR += xglk SUBDIR += xhexagons SUBDIR += xhime SUBDIR += xinfocom SUBDIR += xinvaders SUBDIR += xinvaders3d SUBDIR += xisola SUBDIR += xjig SUBDIR += xjump SUBDIR += xjumpx SUBDIR += xkoules SUBDIR += xlaby SUBDIR += xlennart SUBDIR += xlife SUBDIR += xlogical SUBDIR += xmahjongg SUBDIR += xmastermind SUBDIR += xmball SUBDIR += xmemory SUBDIR += xmille SUBDIR += xmine SUBDIR += xminehunter SUBDIR += xmines SUBDIR += xmlink SUBDIR += xmoto SUBDIR += xmris SUBDIR += xmulti SUBDIR += xneko SUBDIR += xnethack SUBDIR += xoct SUBDIR += xoids SUBDIR += xoj SUBDIR += xonotic SUBDIR += xorgramana SUBDIR += xosmulti SUBDIR += xpanex SUBDIR += xpat2 SUBDIR += xpilot SUBDIR += xpilot-ng-server SUBDIR += xpipeman SUBDIR += xpired SUBDIR += xpuzzletama SUBDIR += xpyraminx SUBDIR += xrally SUBDIR += xray-16 SUBDIR += xray_re-tools SUBDIR += xrick SUBDIR += xrisk SUBDIR += xroach SUBDIR += xrobots SUBDIR += xrot SUBDIR += xrubik SUBDIR += xsc SUBDIR += xscavenger SUBDIR += xscrabble SUBDIR += xshisen SUBDIR += xshogi SUBDIR += xskat SUBDIR += xskewb SUBDIR += xsokoban SUBDIR += xsoldier SUBDIR += xspacewarp SUBDIR += xspringies SUBDIR += xteddy SUBDIR += xtet42 SUBDIR += xtgyoretsu SUBDIR += xtic SUBDIR += xtriangles SUBDIR += xtrojka SUBDIR += xtron SUBDIR += xtruco SUBDIR += xtux SUBDIR += xtxf SUBDIR += xvier SUBDIR += xworm SUBDIR += xye SUBDIR += xzip SUBDIR += yadex SUBDIR += yahtzee SUBDIR += yquake2 SUBDIR += zangband SUBDIR += zatacka SUBDIR += zaz SUBDIR += zdoom SUBDIR += zhlt SUBDIR += zoom SUBDIR += ztrack .include diff --git a/games/devd-controller-rules/Makefile b/games/devd-controller-rules/Makefile new file mode 100644 index 000000000000..7c5f48d60c46 --- /dev/null +++ b/games/devd-controller-rules/Makefile @@ -0,0 +1,36 @@ +PORTNAME= devd-controller-rules +PORTVERSION= 2025.11.17 +CATEGORIES= games +MASTER_SITES= https://raw.githubusercontent.com/libsdl-org/SDL/${SDL_COMMIT}/src/joystick/:headers +DISTFILES= usb_ids.h:headers \ + controller_list.h:headers +EXTRACT_ONLY= + +MAINTAINER= arrowd@FreeBSD.org +COMMENT= Rules for devd making game controller devices accessible to non-root users +WWW= https://gist.github.com/shkhln/b39c2f3d609e57d47b7026da2a925aef + +# The script itself is MIT, the database comes from SDL +LICENSE= MIT ZLIB +LICENSE_COMB= multi + +USES= ruby:build +USE_LOCALE= en_US.UTF-8 + +SDL_COMMIT= a882afafe55501711593d96f8f0f59f0e3adf3ee + +PLIST_FILES= etc/devd/${RULES_FILE} +RULES_FILE= gamecontrollers.conf + +do-extract: + ${CP} ${DISTDIR}/usb_ids.h ${DISTDIR}/controller_list.h ${WRKDIR} + ${INSTALL_SCRIPT} ${FILESDIR}/freebsd-sdl-controller-devd-rules.rb ${WRKDIR} + +do-build: + cd ${WRKDIR} && ${SETENVI} ${WRK_ENV} ${MAKE_ENV} \ + ./freebsd-sdl-controller-devd-rules.rb > ${WRKDIR}/${RULES_FILE} + +do-install: + ${INSTALL_DATA} ${WRKDIR}/${RULES_FILE} ${STAGEDIR}${PREFIX}/etc/devd/ + +.include diff --git a/games/devd-controller-rules/distinfo b/games/devd-controller-rules/distinfo new file mode 100644 index 000000000000..f55e2ef03d54 --- /dev/null +++ b/games/devd-controller-rules/distinfo @@ -0,0 +1,5 @@ +TIMESTAMP = 1763397232 +SHA256 (usb_ids.h) = e4731c52c51bb7e5afe910f73b2726132a03d8905917e7e0578e3569eba7406e +SIZE (usb_ids.h) = 11704 +SHA256 (controller_list.h) = cc87bb3c596ed9c962cfb1d9c5afa32afadd5190b3833cfc608de0a09ae3a757 +SIZE (controller_list.h) = 73014 diff --git a/games/devd-controller-rules/files/freebsd-sdl-controller-devd-rules.rb b/games/devd-controller-rules/files/freebsd-sdl-controller-devd-rules.rb new file mode 100644 index 000000000000..88f7fb5e36a4 --- /dev/null +++ b/games/devd-controller-rules/files/freebsd-sdl-controller-devd-rules.rb @@ -0,0 +1,196 @@ +#!/usr/bin/env ruby +# encoding: UTF-8 + +# MIT License +# +# Copyright (c) 2025 shkhln +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +MIN_EXPECTED_ENTRIES = 555 +PRINT_NOTES = true + +VID_NOPELIST = [ + 0, + 1, + 0x0e00, # no idea who's that + 0x0fff, # Aopen, Inc.; no known gamepads + 0x11ff, # no idea who's that + 0x162e, # ditto + 0x16d0, # MCS, whatever that means + 0x1a34, # ACRUX, ungoogleable + 0x20ab, # no idea who's that + 0x25b1, # ditto + 0x2f24, # ditto + 0x7545, # ditto + 0x8380, # ditto + 0x8888, # ditto + 0xd2d2 # ditto +] + +if !File.exist?('usb_ids.h') + system('fetch https://raw.githubusercontent.com/libsdl-org/SDL/refs/heads/main/src/joystick/usb_ids.h') +end + +if !File.exist?('controller_list.h') + system('fetch https://raw.githubusercontent.com/libsdl-org/SDL/refs/heads/main/src/joystick/controller_list.h') +end + +controllers = [] + +controller_list_header = File.read('controller_list.h') +controller_list_header.scan(/MAKE_CONTROLLER_ID\(\s*0x([0-9a-f]+),\s*0x([0-9a-f]+)\s*\).*?(?:\/\/(.*)|)$/) do + controllers << {vid: $1.to_i(16), pid: $2.to_i(16), note: ($3 ? $3.strip : nil)} +end + +vids_by_name = {} +pids_by_name = {} + +usb_ids_header = File.read('usb_ids.h') +usb_ids_header.scan(/#define USB_VENDOR_([0-9A-Z_]+)\s+0x([0-9a-f]+)/) do + vids_by_name[$1] = $2.to_i(16) +end +usb_ids_header.scan(/#define USB_PRODUCT_([0-9A-Z_]+)\s+0x([0-9a-f]+)/) do + pids_by_name[$1] = $2.to_i(16) +end + +vids_by_name['BDA'] = vids_by_name['POWERA'] +vids_by_name['EVORETRO'] = vids_by_name['DRAGONRISE'] +vids_by_name['VICTRIX'] = vids_by_name['PDP'] +vids_by_name['XBOX'] = vids_by_name['MICROSOFT'] + +for vendor in vids_by_name.keys + pids_by_name.keys.find_all{|product| product.start_with?(vendor)}.each do |product| + controllers << {vid: vids_by_name[vendor], pid: pids_by_name[product], note: product.delete_prefix(vendor).delete_prefix('_')} + pids_by_name.delete(product) + end +end + +if !pids_by_name.empty? + STDERR.puts "#{pids_by_name.size} product ids from usb_ids.h were not assigned to a vendor:" + STDERR.puts "#{pids_by_name.keys.join(', ')}" + STDERR.puts +end + +# let's get rid of duplicates after merging entries from controller_list.h with usb_ids.h +controllers.uniq!{|controller| [controller[:vid], controller[:pid]]} + +# garbage in, garbage out +controllers.delete_if{|controller| VID_NOPELIST.include?(controller[:vid])} + +raise "Found #{controllers.size} controllers, expected at least #{MIN_EXPECTED_ENTRIES}" if controllers.size < MIN_EXPECTED_ENTRIES + +def ids_to_regex(ids, width = 4) + raise if !(ids.any?{|id| id.is_a?(String) && id.size == width && id =~ /[0-9a-f]+/}) + + if width > 1 + alternatives = ids.group_by{|id| id[0]}.map{|first_digit, ids| first_digit + ids_to_regex(ids.map{|id| id[1..-1]}, width - 1)} + if alternatives.size == 1 + alternatives[0] + else + "(#{alternatives.join('|')})" + end + else + if ids.size == 1 + ids[0] + else + "[#{regex_char_class(ids)}]" + end + end +end + +def regex_char_class(letters) + out = '' + range_start = nil + letters = letters.sort.uniq + letters.each_cons(2) do |a, b| + if a.ord + 1 == b.ord + range_start = a if !range_start + else + if range_start + if a.ord - range_start.ord > 2 + out += "#{range_start}-#{a}" + else + out += (range_start..a).to_a.join + end + range_start = nil + else + out += a + end + end + end + if range_start + if letters[-1].ord - range_start.ord > 2 + out += "#{range_start}-#{letters[-1]}" + else + out += (range_start..letters[-1]).to_a.join + end + else + out += letters[-1] + end + out +end + +vendors_by_id = vids_by_name.invert.merge({ + 0x03eb => 'Atmel Corp.', + 0x05b8 => 'SYSGRATION', # doesn't look like a gamepad vendor + 0x056e => 'Elecom Co., Ltd', + 0x0810 => 'Personal Communication Systems, Inc.', + 0x0925 => 'Lakeview Research', + 0x0d62 => 'Darfon Electronics Corp.', # ? + 0x0e8f => 'GreenAsia Inc.', + 0x0f30 => 'Jess Technology Co., Ltd', + 0x1038 => 'SteelSeries ApS', + 0x11c0 => 'Betop', # ? + 0x11c9 => 'Nacon', + 0x12ab => 'Honey Bee Electronic International Ltd.', + 0x1345 => 'Sino Lite Technology Corp', + 0x1430 => 'RedOctane', + 0x15e4 => 'Numark', # doesn't look like a gamepad vendor + 0x1689 => 'Razer USA, Ltd', + 0x1bad => 'Harmonix Music Systems, Inc.', + 0x2516 => 'Cooler Master Co., Ltd.', # what might that be? + 0x25f0 => 'ShanWan' # who? +}) + +puts '# This config file, including most comments below this one,' +puts '# was generated by https://gist.github.com/shkhln/b39c2f3d609e57d47b7026da2a925aef' +puts '# from SDL\'s source code available at https://github.com/libsdl-org/SDL' +puts '# under the terms of Zlib license.' +puts +puts controllers + .sort_by {|controller| [controller[:vid], controller[:pid]]} + .group_by{|controller| controller[:vid]} + .map {|vid, group| + [ + ("# #{vendors_by_id[vid] || '???'}" if PRINT_NOTES), + (group.map{|controller| '# %#06x %s' % [controller[:pid], controller[:note]]}.join("\n") if PRINT_NOTES), + <<~RULE + notify 100 { + match "system" "USB"; + match "subsystem" "INTERFACE"; + match "type" "ATTACH"; + match "vendor" "#{'%#06x' % vid}"; + match "product" "0x#{ids_to_regex(group.map{|controller| '%04x' % controller[:pid]})}"; + action "chgrp games /dev/$cdev && chmod g+rw /dev/$cdev"; + }; + RULE + ].compact.join("\n") + } + .join("\n") diff --git a/games/devd-controller-rules/pkg-descr b/games/devd-controller-rules/pkg-descr new file mode 100644 index 000000000000..c2700e83e943 --- /dev/null +++ b/games/devd-controller-rules/pkg-descr @@ -0,0 +1,3 @@ +This package installs a configuration for file the devd(8) daemon that +matches a list of know game controller and makes them accessible by the +"games" user group. The config itself is generated from SDL header files.