{"id":65,"date":"2016-01-02T17:05:29","date_gmt":"2016-01-02T17:05:29","guid":{"rendered":"http:\/\/www.ferzkopp.org\/wordpress\/?p=65"},"modified":"2016-01-08T07:44:29","modified_gmt":"2016-01-08T15:44:29","slug":"fontasteroids","status":"publish","type":"post","link":"https:\/\/www.ferzkopp.net\/wordpress\/2016\/01\/02\/fontasteroids\/","title":{"rendered":"FontAsteroids"},"content":{"rendered":"<p>An OpenGL based Atari Asteroids clone using Fonts as Asteroids where a spaceship with inertial<br \/>\ncontrol has to be maneuvered through an &#8220;asteroid field&#8221; consisting of words<br \/>\nof web pages.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-174\" src=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/asteroids_manual-99x128.jpg\" alt=\"asteroids_manual\" width=\"258\" height=\"334\" srcset=\"https:\/\/www.ferzkopp.net\/wordpress\/wp-content\/uploads\/2016\/01\/asteroids_manual-99x128.jpg 99w, https:\/\/www.ferzkopp.net\/wordpress\/wp-content\/uploads\/2016\/01\/asteroids_manual.jpg 449w\" sizes=\"auto, (max-width: 258px) 100vw, 258px\" \/><\/p>\n<p><!--more--><\/p>\n<p><strong>DOWNLOAD<\/strong><\/p>\n<p><strong>[ <a href=\"http:\/\/www.ferzkopp.net\/Software\/glfast\/glfast-1.2.zip\">glfast-1.2.zip<\/a> (17M)]<\/strong><\/p>\n<p>Note: This is an experimental version\/rewrite into OpenGL from the original 3Dfx Voodoo2K version that used a custom Mesa library.<\/p>\n<p><strong>SCREENSHOTS<\/strong><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.ferzkopp.net\/Software\/glfast\/screenshots\/Screenshot-Selection.png\" alt=\"\" \/><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.ferzkopp.net\/Software\/glfast\/screenshots\/Screenshot-Gameplay1.png\" alt=\"\" \/><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.ferzkopp.net\/Software\/glfast\/screenshots\/Screenshot-Gameplay2.png\" alt=\"\" \/><\/p>\n<p><strong>README<\/strong><\/p>\n<p>[ This is FAST &#8211; FontAsteroids ]<\/p>\n<p>[ INDEX ]<\/p>\n<p>[ 1. ] [ Introduction ]<br \/>\n[ 2. ] [ Version history ]<br \/>\n[ 3. ] [ System Requirements ]<br \/>\n[ 4. ] [ Software Requirements ]<br \/>\n[ 5. ] [ Installation and Control ]<br \/>\n[ 6. ] [ Comments on the Coding Style ]<br \/>\n[ 7. ] [ Planned Future Additions and Addons ]<br \/>\n[ 8. ] [ Web Links ]<br \/>\n[ 1. ]<\/p>\n<p>[ Introduction ]<\/p>\n<p>Based on the original Asteroids game console, a spaceship with inertial<br \/>\ncontrol has to be maneuvered through an &#8220;asteroid field&#8221; consisting of words<br \/>\nof a web page. During the game the player fragments the already mangled page<br \/>\ncontent from sentences to words, from words to characters, and characters to<br \/>\nnothingness.<\/p>\n<p>Effectively, this game is the game with the most levels in the world &#8211; every<br \/>\nwebpage could be played as a level &#8230; and there are millions of URLs.<\/p>\n<p>The game was first presented to the public during the net_condition<br \/>\nExhibition Sept. 1999 at the ZKM, Karlsruhe, Germany (www.zkm.de). This is<br \/>\nalso the reason why there are many german URLs included in the list. For<br \/>\ncompleteness, the exhibition webpage texts from the 22\/9\/99 are included.<br \/>\nSee file LICENSE for copyright information.<\/p>\n<p>Have fun with the game!<br \/>\n[ 2. ]<\/p>\n<p>[ Version history ]<\/p>\n<p>Ver 1.0 &#8211; Sun Sep 19 16:52:02 CEST 1999<br \/>\n* Initial release<\/p>\n<p>Ver 1.1 &#8211; Fri Sep 24 12:27:14 CEST 1999<br \/>\n* Removed yiff in favour of my own libgaudio system.<br \/>\n* Changed web parsing script to load only html files.<br \/>\n* Added &#8220;supershot&#8221;.<br \/>\n* Fixed up keyboard controls<br \/>\n* Rewrote this README<\/p>\n<p>Ver 1.2 &#8211; Mon Sep 27 15:38:09 CEST 1999<br \/>\n* Cleaned up fast.C<br \/>\n* Added analog joystick driver<br \/>\n* Updated README and Makefile<br \/>\n[ 3. ]<\/p>\n<p>[ System Requirements ]<\/p>\n<p>* Fast machine (&gt;P2-333)<br \/>\n* Voodoo2 OR Voodoo3 graphics card (see comments below)<br \/>\n* Soundcard with joystick port<br \/>\n* Analog Joystick OR Logitech WingMan Gamepad (see comments below)<\/p>\n<p>Comments:<\/p>\n<p>&#8211; The game was developed (and runs well) with a Voodoo2 card and is running in<br \/>\nthe exhibition even better with a Voodoo3-3000 card. Nonetheless, Voodoo<br \/>\ncards are not really required, since the game is using OpenGL as basis. At<br \/>\nthe time of this writing (09\/99) there is are two other options to get the<br \/>\ngame to run on a Linux-PC: the Matrox G200 OpenGL drivers and the Nvidia<br \/>\nRivaTNT\/2 OpenGL drivers. To enable these, edit the Makefile to set<br \/>\nthe new GL libraries and their locations. In the source code, the screen<br \/>\nrefresh frequency will have to be set manually.<br \/>\nThe Makefile option -DVOODOO2 will set a 800&#215;600 resolution at 75Hz.<br \/>\nThe Makefile option -DVOODOO3 will set a 1024&#215;768 resolution at 85Hz.<br \/>\nYou must use one.<\/p>\n<p>&#8211; The game has fallbacks for keyboard control. These are two slow for proper<br \/>\ngameplay, as keydown and keyup events are processed in the event handlers<br \/>\nbut not provided the way I need them by glut.<br \/>\nYour best bet to add support for your game controller, is to rewrite the<br \/>\nreadJoystick() routine in fast.C for your input device. If you manage to<br \/>\ndo so, please send me the code to be included in future versions of FAST.<br \/>\nThe Makefile option -DLOGITECH_WINGMAN will enable the logitech gamepad.<br \/>\nThe Makefile option -JOYSTICK_ANALOG will enable the analog jostick.<br \/>\nYou must use one.<\/p>\n<p>&#8211; To get the wingman working properly with my Soundblaster PCI64 card, I had<br \/>\nto work with the following procedure. Edit the kernel es1371.c file such as to<br \/>\nalways enable the joystick port even when compiled as module.<br \/>\nAdd these lines:<br \/>\n#define CONFIG_SOUND_ES1371_JOYPORT_BOOT 1<br \/>\n#define CONFIG_SOUND_ES1371_GAMEPORT 0x200<br \/>\nThen edit the joy-logitech.c modules to reflect the nonstandard joystick<br \/>\nport. Edit this line to what is shown:<br \/>\nstatic int js_lt_port_list[] __initdata = {0x200, 0 };<br \/>\nLoad all the modules manually.<\/p>\n<p>&#8211; To get the analog joystick working properly, it is recommended to get the<br \/>\njoystick 1.2.x package and set up a calibration file. Compile &#8220;jscal&#8221; and<br \/>\nthen run the sequence:<br \/>\njscal -c \/dev\/js0<br \/>\njscal -p \/dev\/js0 &gt; \/etc\/joystick.cal<br \/>\nAnd add a line to your rc script (i.e. \/etc\/rc.d\/rc.local) executing that file<br \/>\nsource \/etc\/joystick.cal<br \/>\n[ 4. ]<\/p>\n<p>[ Software Requirements ]<\/p>\n<p>* Linux 2.2.x, glibc 2.x (i.e. Mandrake Linux 6.x)<br \/>\n* Joystick driver modules (part of kernel)<br \/>\n* Glide 3Dfx library installed (see comments)<br \/>\n* Mesa openGL library installed (i.e. Mesa-3.1b2)<br \/>\n* freetype TTF rendering library installed<br \/>\n* gltt OpenGL-TTF library installed<br \/>\n* wget installed (see comments)<br \/>\n* libgaudio library (included with glfast)<\/p>\n<p>Comments:<\/p>\n<p>&#8211; Linux 2.2.x, glibc2.x is recommended, since the program uses pthreads<br \/>\nmultithreading.<\/p>\n<p>&#8211; Glide might not be required if a different GL library is beeing used. See<br \/>\nthe section &#8220;System Requirements&#8221;.<\/p>\n<p>&#8211; Mesa is aften already installed, but compiled without Glide support. To<br \/>\ninstall Mesa with Glide support, remove existing libraries, get, recompile<br \/>\nand install Mesa from the source code.<\/p>\n<p>&#8211; freetype and wget is often already installed on current systems.<\/p>\n<p>&#8211; gltt can be downloaded. Compilation is a simple &#8220;.\/configure; make; make<br \/>\ninstall&#8221; sequence. Make sure you add &#8220;\/usr\/local\/lib&#8221; to &#8220;\/etc\/ld.so.conf&#8221;.<\/p>\n<p>&#8211; libgaudio is included, but is to be considered a seperate package with<br \/>\nits own production and update cycle.<br \/>\n[ 5. ]<\/p>\n<p>[ Installation and Control ]<\/p>\n<p>* Compile libgaudio:<br \/>\ncd libgaudio-1.0; make; cd ..<br \/>\n* Edit Makefile and set your graphics card and input device<br \/>\n* Compile program in fast directory:<br \/>\nmake<br \/>\n* If desired, update webpage files with scripts in webpages directory:<br \/>\ncd webpages<br \/>\nparse_all.sh<br \/>\ncreate_list.sh<br \/>\ncd ..<br \/>\nThis might take a long time. Change pages to be loaded in the &#8220;url-list&#8221; file.<br \/>\n* Make sure sound and joystick driver modules are loaded.<br \/>\n* Start the game and blast away:<br \/>\n.\/fast<\/p>\n<p>If enabled, the game tries to open a network connection to another program<br \/>\nthat is only useful in the exhibition context (asciireflector).<br \/>\nThis will fail (unless an asciireflector is running at the specified section)<br \/>\nbut this doesn&#8217;t affect the game in any way.<\/p>\n<p>The keyboard commands are as follows:<br \/>\nESC\u00a0\u00a0\u00a0 &#8211; start the game on title, exit the game otherwise<br \/>\nSPACE\u00a0\u00a0\u00a0 &#8211; fire shot<br \/>\nx\u00a0\u00a0\u00a0 &#8211; fire supershot<br \/>\ns\u00a0\u00a0\u00a0 &#8211; start<br \/>\nUP\u00a0\u00a0\u00a0 &#8211; thrust<br \/>\nDOWN\u00a0\u00a0\u00a0 &#8211; shield<br \/>\nLEFT\u00a0\u00a0\u00a0 &#8211; rotate left<br \/>\nRIGHT\u00a0\u00a0\u00a0 &#8211; rotate right<\/p>\n<p>The analog joystick commands are as follows:<br \/>\nUP\u00a0\u00a0\u00a0 &#8211; thrust, select up<br \/>\nDOWN\u00a0\u00a0\u00a0 &#8211; shield, select down<br \/>\nLEFT\u00a0\u00a0\u00a0 &#8211; rotate left<br \/>\nRIGHT\u00a0\u00a0\u00a0 &#8211; rotate right<br \/>\nButton1\u00a0\u00a0\u00a0 &#8211; fire shot, start<br \/>\nButton2\u00a0\u00a0\u00a0 &#8211; fire supershot<\/p>\n<p>The Logitech wingman commands are as follows:<br \/>\nGamepad &#8211; rotate left\/right, select up\/down<br \/>\nStart\u00a0\u00a0\u00a0 &#8211; start<br \/>\nTrigger &#8211; fire shot<br \/>\nButtonA\u00a0\u00a0\u00a0 &#8211; shield + thrust<br \/>\nButtonB &#8211; thrust<br \/>\nButtonC\u00a0\u00a0\u00a0 &#8211; shield<br \/>\nButtonY\u00a0\u00a0\u00a0 &#8211; fire supershot<\/p>\n<p>[ 6. ]<\/p>\n<p>[ Comments on the Coding Style ]<\/p>\n<p>As you might have noticed, the source code is all in one big file, C-style<br \/>\ninside, C++ outside (for GLTT) and with lots of hardcoded variables. Most of<br \/>\nyou will start to shudder and shout. Well, this is how I program and you<br \/>\nhave to live with that. \ud83d\ude42 But hey, as long as it works its OK, right!<br \/>\nIn retrospect, this is how the computer industry worked for much of the 70s,<br \/>\n80s and into the 90s when binary was king &#8211; and then it was binary ONLY &#8211; we<br \/>\nsurvived that too!<br \/>\n[ 7. ]<\/p>\n<p>[ Planned Future Additions and Addons ]<\/p>\n<p>&#8211; SpaceMiner mode where one can traktor-beam words around.<br \/>\n&#8211; More input modes: Unix man pages, local filesystems, local files &#8230;<br \/>\n&#8211; Live webpage loading and user URL entry.<br \/>\n&#8211; Multiplayer modes using a public asciireflector as server.<br \/>\n&#8211; More special weapons, more fragments, more sound-effects.<br \/>\n[ 8. ]<\/p>\n<p>[ Web links ] (Links from 09\/99)<\/p>\n<p>* See <a href=\"http:\/\/www1.zkm.de\/~bernd\/\">http:\/\/www1.zkm.de\/~bernd\/<\/a> for ESC_to_Begin details.<br \/>\n* See <a href=\"http:\/\/www.zkm.de\/\">http:\/\/www.zkm.de\/<\/a> for the ZKM main page and net_condition exhibition<br \/>\ninformation.<br \/>\n* See <a href=\"http:\/\/www.linux3d.org\/\">http:\/\/www.linux3d.org\/<\/a> for Linux specific info on 3D hardware and the<br \/>\n3Dfx drivers.<br \/>\n* See <a href=\"http:\/\/www.mesa3d.org\/\">http:\/\/www.mesa3d.org\/<\/a> for info on the MesaGL library.<br \/>\n* See <a href=\"http:\/\/services.worldnet.fr\/~rehel\/gltt\/gltt.html\">http:\/\/services.worldnet.fr\/~rehel\/gltt\/gltt.html<\/a> for info on the GLTT<br \/>\nlibrary.<br \/>\n* See <a href=\"http:\/\/www.freetype.org\/\">http:\/\/www.freetype.org\/<\/a> for info on the freetype library<br \/>\n* See <a href=\"http:\/\/atrey.karlin.mff.cuni.cz\/~vojtech\/joystick\/\">http:\/\/atrey.karlin.mff.cuni.cz\/~vojtech\/joystick\/<\/a> for info on the<br \/>\nLinux joystick driver.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An OpenGL based Atari Asteroids clone using Fonts as Asteroids where a spaceship with inertial control has to be maneuvered through an &#8220;asteroid field&#8221; consisting of words of web pages.<\/p>\n","protected":false},"author":1,"featured_media":135,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[32],"tags":[34,29,35,33],"class_list":["post-65","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-media-art","tag-asteroids","tag-games","tag-opengl","tag-zkm"],"_links":{"self":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":4,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"predecessor-version":[{"id":198,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/65\/revisions\/198"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/media\/135"}],"wp:attachment":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}