Music 220c | Spring 2006 | CCRMA
Rob Hamilton

Composition/Performance within the Quake III engine (Quake III+PD)
During this project I will use an existing video-game engine (Quake III by ID Software) as a platform for the development and presentation of an interactive musical composition. Using a library developed to stream certain information from the Quake III game platform to PD, I will work to create an interactive compositional environment where a user's virtual motion through a virtual space creates a musical work. While this idea is not entirely novel and has been pursued by others, the platform still provides a rich environment for the realization of multi-media and musical ideas.


.mov demonstration video clip (~10 mb)



Maps and Legends: 8-channel multi-user performance (5/25/2006)

Multi-user "map" performance environment for real-time control of sound events in an 8-channel space

Project Status Configured as an 8-channel spatialized "map" leading 1-2 users through zones of sound triggers
Multiple users have multiple sets of sounds to control
Distance-based panning algorithm makes use of positioning information streamed over UDP from Quake 3

Current Issues Statically-scalable system - currently will not dynamically scale to player/user number
Limited control methods - need to implement more "hands-on" control of sounds (i.e. weapon/sound selection, vertical positioning, processing)
Better "map" and concept for piece needed
More realistic panning algorithms should be employed to "fill" the space better (use of delays/reverbs)

02.26.2007 * r_mode -1
* r_customheight 800
* r_customwidth 1280
interesting link:
svn checkout ./GtkRadiant
svn checkout ./GtkRadiant/games/Q3Pack
./ioquake3.i386 +set sv_pure 0 +set fs_game ccrma +devmap test2 +set vm_ui 0 +set vm_cgame 0 +set vm_game 0
bot_minplayers "4"
bot_nochat "0"
bot_pause "0"
bot_pause "1", then have attractors in the level, then they won't fight? maybe not
/cg_thirdPerson (0/1; default: 0)
/cg_thirdPersonAngle (0-360; default: 0)
/cg_thirdPersonRange (default: 4)
02.26.2007 dedicated server: quake3 +sv_pure 0 +sv_cheats 1 +devmap pit4 +set fs_game q3apd +set cg_draw2d 0 +set cg_drawGun 0 +set fudi_hostname +set fudi_port 6662 +set fudi_open 1 +set r_allowSoftwareGL 1 +set dedicated 1
05.23.2006 record demo: "/g_synchronousClients 1"... "/record demoname"... "/stoprecord"
playback demo: quake3 +sv_pure 0 +sv_cheats 1 +set fs_game q3apd +set cg_draw2d 0 +set cg_drawGun 0 +set fudi_hostname +set fudi_port 6662 +set fudi_open 1
05.13.2006 Tested system for "firing" an individual sound in a direction given by x-axis view-angle. Need to encapsulate as poly~ for multiple sounds at a given time per "weapon"
05.10.2006 Demo level "pit4" (model of listening room) up and tracking single player position to 8-channel outs in the Listening Room.
quake3 +sv_pure 0 +sv_cheats 1 +devmap pit4 +set fs_game q3apd +set cg_draw2d 0 +set cg_drawGun 0 +set fudi_hostname +set fudi_port 6662 +set fudi_open 1
04.12.2006 Installed update with nando; call oss sound via "aoss ./quake3"
04.10.2006 Q3 CD arrived; installed game on Linux boxes; working with 'nando to install QTKRadiant level editor
04.03.2006 Ordered Q3 Linux flavored on
04.03.2006 eureka moment in class...

Issues/Bug Tracker
04.10.2006 Currently no sound on Linux boxes
  Level editor not installed on Linux; not working on Mac OS X (need OS X cd?)
  Need root auth to install latest Q3 point release

Quake III game engine + PD

q3apd uses activity in Quake III as control data for the realtime audio synthesis environment Pure Data. we have developed a small set of modules that once installed into the appropriate directory, pipe bot and player location, view angle, weapon state and local texture over a network to Pure Data, which is listening on a given port. once this very rich control data is available in PD, it can then be used to synthesise audio, or whatever. the images below are from a map "gaerwn" that delire put together as a performance environment for q3apd. features in the map like it's dimensions, bounce pads and the placement of textures all make it a dynamic environment for jamming with q3apd. of course any map can be used. to use q3apd first grab the latest Quake III point release. we used version 1.32. make a directory called 'pd' in /usr/local/games/quake3/, or wherever quake3 is installed on your system [this is the default install path on a Debian system]. then, cd into this new directory and unzip this package of modules ensure that this machine is on the same network as the box with PD on it. run the q3apd.pd (from the above archive) in PD on this machine [ping it to be sure]. in the terminal, exec Quake III with:

yourbox:~$ quake3 +set sv_pure 0 +set fs_game pd +devmap (yourmap)

once the map is loaded pull down the console in q3a with the '~' key and type:
/set fudi_hostname localhost
/set fudi_port 6662
/set fudi_open 1

'netsend', an object used in PD and MaxMSP systems to send UDP data over a network, is is now broadcasting. at this stage you should see plenty of activity in the pd patch on the PD machine. enjoy!


Links link
selectparks.images Images from the project Other users of q3apd How to setup Quake III on Linux Link to Quake3PD archive Quake III Latest Point Release General Quake III resource

seta snddevice "/dev/dsp"
quake3 +sv_pure 0 +devmap q3dm1 +set fs_game q3apd +set fudi_hostname +set fudi_port 6662 +set fudi_open 1

quake3 +sv_pure 0 +sv_cheats 1 +devmap pit4 +set fs_game q3apd +set cg_draw2d 0 +set cg_drawGun 0 +set fudi_hostname +set fudi_port 6662 +set fudi_open 1
/cg_draw2d 0
/cg_drawGun 0

quake3 +sv_pure 0 +sv_cheats 1 +devmap pit4 +set fs_game q3apd +set cg_draw2d 0 +set cg_drawGun 0 +set fudi_hostname +set fudi_port 6662 +set fudi_open 1 (classroom) (pit) (cluster) (studio D) (cmn48)