Programming Linux Games

Total Page:16

File Type:pdf, Size:1020Kb

Programming Linux Games Programming Linux Games John R. Hall Loki Software, Inc. January 15, 2001 2 Contents Work In Progress i 1 The Anatomy of a Game 1 A Quick Survey of Game Genres . 2 Simulation Games . 2 First Person Shooters . 4 Real-time Strategy Games . 5 Turn-based Strategy Games . 7 Role-playing Games . 7 Puzzle Games . 8 Multi User Dungeons . 9 A Quick Look Under The Hood . 11 The Input Subsystem . 11 The Display Subsystem . 12 The Audio Subsystem . 13 The Network Subsystem . 13 The Update Subsystem . 14 The Game Loop . 15 3 4 CONTENTS 2 Linux Development Tools 17 Programming Editors . 17 vi..................................... 18 Emacs . 19 NEdit . 20 Compiling Programs Under Linux . 21 Using The Make Utility . 23 Creating Makefiles . 24 Error Handling . 28 Working With Libraries . 28 Static Libraries . 28 Shared Libraries . 29 Linux Linker Quirks . 32 Debugging Linux Applications . 33 Compiling For Debugging . 33 The GNU Debugger, gdb . 34 The Data Display Debugger . 40 Bug Tracking . 41 Project Management With CVS . 42 A Brief CVS Tutorial . 43 Other Useful Tools . 49 Rapid Text Searching with grep . 49 Updating Source with diff and patch . 50 3 Linux Gaming APIs 53 Times Have Changed . 53 CONTENTS 5 Graphics APIs . 55 SVGALib . 55 General Graphics Interface, LibGGI . 56 Simple DirectMedia Layer, SDL . 56 ClanLib . 56 OpenGL . 57 Plib . 57 Glide . 58 Xlib . 58 Graphical User Interface Toolkits . 59 GTK+ . 59 Tk.................................... 59 Fltk . 60 Qt .................................... 60 SDL GUI support . 60 Audio APIs . 61 The Open Sound System, OSS . 61 Advanced Linux Sound Architecture, ALSA . 61 The Enlightened Sound Daemon, EsounD . 62 The Open Audio Library, OpenAL . 62 Scripting Libraries . 63 Tcl.................................... 63 Guile and MzScheme . 63 Python and Perl . 64 Networking APIs . 64 6 CONTENTS BSD Sockets . 64 OpenPlay . 65 IPX and SPX . 65 File Handling . 66 libpng and libjpeg . 66 libaudiofile and libsndfile . 66 Ogg Vorbis . 67 The SDL MPEG Library, SMPEG . 67 zlib . 68 4 Mastering SDL 69 Computer Graphics Hardware . 70 The Framebuffer . 71 The SDL Video API . 72 Setting Up The Display . 73 Direct Surface Drawing . 77 Drawing With Blits . 82 Colorkeys And Transparency . 85 Loading Other Image Formats . 89 Alpha Blending . 90 Achieving Smooth Animation With SDL . 95 Input and Event Processing . 105 Processing Mouse Events . 105 Processing Keyboard Events . 110 Joystick Events . 113 Portable Threading Support . 117 CONTENTS 7 SDL Audio Programming . 121 Representing Sound with PCM . 121 Feeding a Sound Card . 124 An Example . 125 Integrating OpenGL with SDL . 135 Penguin Warrior . 139 Creating Graphics . 141 Implementing a Parallaxing Scroller in SDL . 142 A Simple Particle System . 147 Game Timing . 152 To Be Continued... 153 5 Linux Audio Programming 155 Competing APIs . 156 Introducing Multi-Play . 157 Loading Sound Files . 157 Using libsndfile . 158 Other Options . 163 Using the Open Sound System . 163 Reality Check . 168 Squeezing Sound Performance with Direct DMA Access . 171 Playing Sound with ALSA . 181 Sharing the Sound Card with ESD . 187 Building Multi-Play . 192 Environmental Audio with OpenAL . 198 OpenAL Basics . 198 8 CONTENTS Adding Environmental Audio to Penguin Warrior . 204 Implementing Game Music with Ogg Vorbis . 212 Working with Vorbis Files . 213 Adding Music to Penguin Warrior . 216 6 Game Scripting Under Linux 227 A Crash Course in Tcl . 228 Built-in Tcl Commands . 230 Interfacing Tcl With C . 235 Linking Against Tcl . 236 Executing Scripts . 236 Commands And Objects . 240 A Simple Scripting Engine . 241 Designing A Game Script ..
Recommended publications
  • GNU/Linux AI & Alife HOWTO
    GNU/Linux AI & Alife HOWTO GNU/Linux AI & Alife HOWTO Table of Contents GNU/Linux AI & Alife HOWTO......................................................................................................................1 by John Eikenberry..................................................................................................................................1 1. Introduction..........................................................................................................................................1 2. Symbolic Systems (GOFAI)................................................................................................................1 3. Connectionism.....................................................................................................................................1 4. Evolutionary Computing......................................................................................................................1 5. Alife & Complex Systems...................................................................................................................1 6. Agents & Robotics...............................................................................................................................1 7. Statistical & Machine Learning...........................................................................................................2 8. Missing & Dead...................................................................................................................................2 1. Introduction.........................................................................................................................................2
    [Show full text]
  • Ethereal Developer's Guide Draft 0.0.2 (15684) for Ethereal 0.10.11
    Ethereal Developer's Guide Draft 0.0.2 (15684) for Ethereal 0.10.11 Ulf Lamping, Ethereal Developer's Guide: Draft 0.0.2 (15684) for Ethere- al 0.10.11 by Ulf Lamping Copyright © 2004-2005 Ulf Lamping Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 or any later version published by the Free Software Foundation. All logos and trademarks in this document are property of their respective owner. Table of Contents Preface .............................................................................................................................. vii 1. Foreword ............................................................................................................... vii 2. Who should read this document? ............................................................................... viii 3. Acknowledgements ................................................................................................... ix 4. About this document .................................................................................................. x 5. Where to get the latest copy of this document? ............................................................... xi 6. Providing feedback about this document ...................................................................... xii I. Ethereal Build Environment ................................................................................................14 1. Introduction .............................................................................................................15
    [Show full text]
  • The Elinks Manual the Elinks Manual Table of Contents Preface
    The ELinks Manual The ELinks Manual Table of Contents Preface.......................................................................................................................................................ix 1. Getting ELinks up and running...........................................................................................................1 1.1. Building and Installing ELinks...................................................................................................1 1.2. Requirements..............................................................................................................................1 1.3. Recommended Libraries and Programs......................................................................................1 1.4. Further reading............................................................................................................................2 1.5. Tips to obtain a very small static elinks binary...........................................................................2 1.6. ECMAScript support?!...............................................................................................................4 1.6.1. Ok, so how to get the ECMAScript support working?...................................................4 1.6.2. The ECMAScript support is buggy! Shall I blame Mozilla people?..............................6 1.6.3. Now, I would still like NJS or a new JS engine from scratch. .....................................6 1.7. Feature configuration file (features.conf).............................................................................7
    [Show full text]
  • A.5.1. Linux Programming and the GNU Toolchain
    Making the Transition to Linux A Guide to the Linux Command Line Interface for Students Joshua Glatt Making the Transition to Linux: A Guide to the Linux Command Line Interface for Students Joshua Glatt Copyright © 2008 Joshua Glatt Revision History Revision 1.31 14 Sept 2008 jg Various small but useful changes, preparing to revise section on vi Revision 1.30 10 Sept 2008 jg Revised further reading and suggestions, other revisions Revision 1.20 27 Aug 2008 jg Revised first chapter, other revisions Revision 1.10 20 Aug 2008 jg First major revision Revision 1.00 11 Aug 2008 jg First official release (w00t) Revision 0.95 06 Aug 2008 jg Second beta release Revision 0.90 01 Aug 2008 jg First beta release License This document is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License [http:// creativecommons.org/licenses/by-nc-sa/3.0/us/]. Legal Notice This document is distributed in the hope that it will be useful, but it is provided “as is” without express or implied warranty of any kind; without even the implied warranties of merchantability or fitness for a particular purpose. Although the author makes every effort to make this document as complete and as accurate as possible, the author assumes no responsibility for errors or omissions, nor does the author assume any liability whatsoever for incidental or consequential damages in connection with or arising out of the use of the information contained in this document. The author provides links to external websites for informational purposes only and is not responsible for the content of those websites.
    [Show full text]
  • THE 2003 Editionlinux
    SUBSCRIBE or renew your subscription to APC for your chance to WIN the new Alfa 156 JTS, valued at over $54,000 Only $65 for 12 issues THE 2003 edition linux POCKETBOOK Subscribe ... www.apcmag.com Online at magshop.com.au or Call 13 61 16 Authorised under NSW Permit No. L02/09075 VIC: 02/2531 SA: T02/3553 ACT: TP02/3650 NT: NT02/3286 For terms and conditions refer to www.xmas.magshop.au. Expiry date: 24/12/02 Contents CHAPTER 1 Customising Gnome 57 CHAPTER 6 Editorial INTRODUCTION 11 Exploring KDE 60 WORKING WITH WINDOWS 131 The origins of the Customising KDE 64 What about Windows? 132 Welcome back to The Linux Pocketbook 2003 edition! penguin 12 Windows connectivity 138 Many of you will probably remember the original print ver- CHAPTER 4 sions of The Linux Pocketbook on newsstands across the country. Why Linux? 18 Basic security 145 The original versions sold so well that we ran out of copies. We’ve The ways of the world 20 USING LINUX 67 had countless requests for reprints, so we’ve decided to bundle the Connecting to the Net 68 CHAPTER 7 entire book into this single resource. This version of the pocketbook relies heavily on Mandrake Linux 9.0 or Red Hat 8.0. Both were CHAPTER 2 Applications 71 PLAYING WITH LINUX 151 released late in 2002, and can be easily found for sale at www.everyth INSTALLING LINUX 21 Conjuring Linux 75 Linux multimedia 152 inglinux.com.au, or for download from either mandrakelinux.com or First published December 2000.
    [Show full text]
  • Hands on #1 Overview
    Hands On #1 ercises Overview See Wednesday’ s hands on Part Where1 : Starting is your andinstallation familiarizing ? Getting the example programs Running novice examples : N01, N03, N02 … Part Examine2 : Looking cross into sections Geant4, trying it out with ex Simulate depth dose curve Compute and plot Bragg curve Addenda : other examples, histogramming Your Geant4 installation VMware Player users under Windows or Mac OS all files downloaded from http://geant4.in2p3.fr/cenbg/vmware.html in principle, no installation needed all your peripherals should be operational (WiFi, disks,…) Installation from beginning CERN link http://geant4.web.cern.ch/geant4/support/download.shtml SLAC link http://geant4.slac.stanford.edu/installation/ User forum http://geant4-hn.slac.stanford.edu:5090/HyperNews/public/get/installconfig.html Installation guide http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/InstallationGuide/html/index.html This Hands On will help you check your installation of Geant4 is correct If not, we can try to help during this Hands On… Access your Geant4 installation for VMware users Start the VMware player software Start your VMware machine Log onto the VMware machine Username: local1 , password: local1 Open a terminal (right click on desktop with mouse) You are now working under Scientific Linux 4.2 with gcc 3.4.4 By default on your Windows PC, the directory /mnt/hgfs/echanges is a link to C:\ Tips for VMware users (1/2) Geant4 8.3 installation path : /usr/local/geant4 you need root privileges
    [Show full text]
  • Source Level Debugging GDB: Gnu Debugger Starting/Exiting GDB Stopping and Continuing the Execution of Your Program In
    Source Level Debugging GDB: Gnu DeBugger ● A source level debugger has a number of useful features that facilitates debugging problems ● GDB is a line oriented debugger where actions associated with executing your program. are issued by typing in commands. ● You have to create symbolic table information ● It can be invoked for executables compiled by within the executable by using the -g option when gcc or g++ with the -g option. compiling with gcc or g++. ● General capabilities: ● This symbolic table information includes the correspondances between – Starting/exiting your program from the debugger. – Stopping and continuing the execution of your – statements in the source code and locations of instructions program. in the executable – Examining the state of your program. – variables in the source code and locations in the data areas of the executable – Changing state in your program. Starting/Exiting GDB Stopping and Continuing the ● Bring up the gdb debugger by typing: Execution of Your Program in GDB gdb executable_name ● Setting and deleting breakpoints. ● Initiate your executable by using the command: run [command-line arguments] ● Execution stepping and continuing. – Command line arguments can include anything that would normally appear after the executable name on the command line. ● run-time options, filenames, I/O redirection, etc. – When no arguments are specified, then gdb uses the arguments specified for the previous run command during the current gdb session. ● Exit the gdb debugger by typing: quit Setting and Deleting Breakpoints Examples of Setting and Deleting Breakpoints ● Can set a breakpoint to stop: – at a particular source line number or function (gdb) break # sets breakpoint at current line # number – when a specified condition occurs (gdb) break 74 # sets breakpoint at line 74 in the # current file ● General form.
    [Show full text]
  • IT Acronyms.Docx
    List of computing and IT abbreviations /.—Slashdot 1GL—First-Generation Programming Language 1NF—First Normal Form 10B2—10BASE-2 10B5—10BASE-5 10B-F—10BASE-F 10B-FB—10BASE-FB 10B-FL—10BASE-FL 10B-FP—10BASE-FP 10B-T—10BASE-T 100B-FX—100BASE-FX 100B-T—100BASE-T 100B-TX—100BASE-TX 100BVG—100BASE-VG 286—Intel 80286 processor 2B1Q—2 Binary 1 Quaternary 2GL—Second-Generation Programming Language 2NF—Second Normal Form 3GL—Third-Generation Programming Language 3NF—Third Normal Form 386—Intel 80386 processor 1 486—Intel 80486 processor 4B5BLF—4 Byte 5 Byte Local Fiber 4GL—Fourth-Generation Programming Language 4NF—Fourth Normal Form 5GL—Fifth-Generation Programming Language 5NF—Fifth Normal Form 6NF—Sixth Normal Form 8B10BLF—8 Byte 10 Byte Local Fiber A AAT—Average Access Time AA—Anti-Aliasing AAA—Authentication Authorization, Accounting AABB—Axis Aligned Bounding Box AAC—Advanced Audio Coding AAL—ATM Adaptation Layer AALC—ATM Adaptation Layer Connection AARP—AppleTalk Address Resolution Protocol ABCL—Actor-Based Concurrent Language ABI—Application Binary Interface ABM—Asynchronous Balanced Mode ABR—Area Border Router ABR—Auto Baud-Rate detection ABR—Available Bitrate 2 ABR—Average Bitrate AC—Acoustic Coupler AC—Alternating Current ACD—Automatic Call Distributor ACE—Advanced Computing Environment ACF NCP—Advanced Communications Function—Network Control Program ACID—Atomicity Consistency Isolation Durability ACK—ACKnowledgement ACK—Amsterdam Compiler Kit ACL—Access Control List ACL—Active Current
    [Show full text]
  • OSS Disclosure Document OSS Licenses Used in RN AIVI 1
    OSS Disclosure Document Date: 08-10-2017 OSS Licenses used in RN_AIVI CM-CI1/PJ-CB Page 1 Project 1 Overview .................................................. 12 2 OSS Licenses used in the project .......................... 13 3 Package details for OSS Licenses usage .................... 14 AES - Advanced Encryption Standard – 1.0 ..................... 14 Alsa Libraries - 1.0.29 ...................................... 14 Alsa Plugins - 1.0.29 ........................................ 14 Alsa Utils - 1.0.29 .......................................... 14 APMD - 3.2.2 ................................................. 15 ATK - 2.8.0 .................................................. 15 Attr - 2.4.47 ................................................ 15 Audio File Library - 0.2.7 ................................... 15 Avahi - 0.6.31 ............................................... 15 Bash - 3.2.48 .............................................. 15 BidiReferenceCpp - 26 ...................................... 15 Bison - 2.5.2., 3.0.2, 3.0.4 ............................... 16 Blktrace - 1.0.5 ........................................... 16 BlueZ - 4.101, 5.33 ........................................ 16 BPSTL ...................................................... 16 Btrfs-progs – 4.1.2 ........................................ 16 Busybox - 1.23.2 ........................................... 16 Bzip2 - 1.0.6 .............................................. 16 Cairo Vector Graphics Library - 1.12.14, 1.12.16, 1.14.2 ... 17 Cairo-Pixman - 0.30.2,0.32.6 ..............................
    [Show full text]
  • Linux Games Page 1 of 7
    Linux Games Page 1 of 7 Linux Games INTRODUCTION such as the number of players and the size of the map, then you start the game. Once the game is running clients may Hello. My name is Andrew Howlett. I've been using Linux join the game. Clients connect to the game using TCP/IP, since 1997. In 2000 I cutover to Linux for all my projects, so it is very easy to play multi-player games over the except I dual-booted Windows to play games. I like to play Internet. Like many Free games, clients are available for computer games. About a year ago I stopped dual booting. many platforms, including Windows, Amiga and Now I play computer games under Linux. The games I Macintosh. So there are lots of players out there. If you play can be divided into four groups: Free Games, native don't want to play against other humans, then Freeciv linux commercial games, Windows Emulated games, and includes some nasty AIs. Win4Lin enabled games. This presentation will demonstrate games from each of these four groups. BZFlag Platform BZFlag is a tank combat game along the same lines as the old BattleZone game. Like FreeCiv, BZFlag uses a client/ Before I get started, a little bit about my setup so you can server architecture over TCP/IP networks. Unlike FreeCiv, relate this to whatever you are running. This is a P3 900 the game contains no AIs – you must play this game MHz machine. It has a Crystal Sound 4600 sound card and against other humans (? entities ?) over the Internet.
    [Show full text]
  • MX Linux Benutzerhandbuch V
    MX Linux Benutzerhandbuch v. 20210327 manual AT mxlinux DOT org MX Linux Webseite MX Linux deutschsprachiges Forum Strg-F = Dieses Handbuch durchsuchen Pos1 / Home = Zum Anfang des Dokuments Translation: Sigi Vranšak – SpinBit Informatik Schaan, 27.03.2021 Tools: LibreOffice 7.0.4, deepl.com Rückmeldungen zu diesem deutschsprachigen Handbuch bitte an: [email protected] OpenPGP 51F0D5C53CF46E29 Titel des englischen Originals: MX Linux Users Manual v. 20200801 Inhalt 1 Einleitung.........................................................................................................................................7 1.1 Über MX Linux..........................................................................................................................7 1.2 Über dieses Handbuch.............................................................................................................7 1.3 Systemanforderungen..............................................................................................................8 1.4 Unterstützung und «Lebensdauer» (EOL, End Of Life)...........................................................8 1.5 Fehler, Probleme und Anfragen, Anträge.................................................................................9 1.6 Migration, Upgrade (Aktualisierung nächste Hauptversion)..................................................10 1.7 Unsere Standpunkte...............................................................................................................10 1.7.1 Systemd..........................................................................................................................10
    [Show full text]
  • Copyrighted Material
    Index abld build 36 AVRecorder 270 with C 40 abld freeze 226 IDE 32 abort() 74, 400, 402 MFC 214 abstract base class 46 Base Class Library (BCL) Mutex 388–391 active objects 31, 94–99, 237 C classes 53, 79, 85, 87 381 battery 10, 14, 43 C Wrappers 339–340 Active Template Library Bazaar 392–393 CActive 95, 97 (ATL) 134 BCL. See Base Class Library CActiveScheduler Adapter pattern 384 Binary Runtime Environment Add() 95–96 Alerts API 166 for Wireless Start() 141 AllFiles 130, 349, 355 (BREW) 253–254 CAknAppUi 155 Alloc() 64 Blackberry 11, 17–18 calendar 186, 251 ALLOC panic 45–46, 399 bld.inf 35, 36, 38, callbacks 147, 324, 381 AllocL() 64 115–116, 186, camera 165, 185, 253 All-Tcb 117 211, 292, 293, 316 Cancel() 98 Android 11, 12, 17–18, bldmake 36, 211 capabilities 228, 348–355 244–253, Bluetooth 127, 138 Android 369–371 369–371 Boost 107, 197 trusted applications ANSI C++ standardCOPYRIGHTED 386 BREW. See Binary MATERIAL Runtime 362–363 APIs 68–71, 103–131 Environment for untrusted applications applications, portable Wireless 363–364 375–396 CAPABILITY 37, 355 ARM RealView Compilation capitalization guidelines Tools (RVCT) 34, C 21, 28, 40, 103–131, 50–51 112 214 Carbide.c++ 32, 38, 72, ATL See Active Template C++ 21, 28, 31, 50, 59, 147, 211, 214, Library 61–66, 103–131, 368–369 auto_ptr 85, 143, 144 CArray 58 391–392 abstract base class 46 CArrayFixFlat 58 412 INDEX CArrayFixSeg 58 Common Language Runtime DLL. See dynamic link CArrayVarSeg 58 (CLR) 236 library CArrayXSeg 58 compilers 34, 39–40, Document Object Model catch 72 318–322 (DOM) 184 CBase 53, 54, 82, Component Object Model DOM.
    [Show full text]