[[!template id=project title="User interface plugins for games" contact=""" [tech-x11](mailto:tech-x11@NetBSD.org), [tech-toolchain](mailto:tech-toolchain@NetBSD.org), """ category="desktop" difficulty="medium" description=""" Some of the games in base would be much more playable with even a simple graphic interface. The card games (e.g. canfield, cribbage) are particularly pointed examples; but quite a few others, e.g. atc, gomoku, hunt, and sail if anyone ever fixes its backend, would benefit as well. There are two parts to this project: the first and basically mostly easy part is to pick a game and write an alternate user interface for it, using SDL or gtk2 or tk or whatever seems appropriate. The hard part is to arrange the system-level infrastructure so that the new user interface appears as a plugin for the game that can be installed from pkgsrc but that gets found and run if appropriate when the game is invoked from /usr/games. The infrastructure should be sufficiently general that lots of programs in base can have plugins. Some things this entails: * possibly setting up a support library in the base system for program plugins, if it appears warranted; * setting up infrastructure in the build system for programs with plugins, if needed; * preferably also setting up infrastructure in the build system for building plugins; * choosing a place to put the header files needed to build external plugins; * choosing a place to put plugin libraries, too, as there isn't a common model out there yet; * establishing a canonical way for programs in base to find things in pkgsrc, which is not technically difficult but will require a lot of wrangling to reach a community consensus; * setting up any pkgsrc infrastructure needed to build plugin packages for base (this should take little or no work). It is possible that plugins warrant a toplevel directory under each prefix rather than being stuffed in lib/ directories; e.g. /usr/plugins, /usr/pkg/plugins, /usr/local/plugins, so the pkgsrc-installed plugins for e.g. rogue would go by default in /usr/pkg/plugins/rogue. Note that while this project is disguised as a frivolous project on games, the infrastructure created will certainly be wanted in the medium to long term for other more meaty things. Doing it on games first is a way to get it done without depending on or conflicting with much of anything else. """ ]]