Difference between revisions of "Q3osc"
m |
m (→references) |
||
(122 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<div style="vertical-align: top; float:right; margin:0px 0px 20px 30px;">http://ccrma.stanford.edu/~rob/q3osc/images/shot0041a.jpg</div> | <div style="vertical-align: top; float:right; margin:0px 0px 20px 30px;">http://ccrma.stanford.edu/~rob/q3osc/images/shot0041a.jpg</div> | ||
'''q3osc''' is a heavily modified version of the ioquake3 gaming engine featuring an integrated oscpack implementation of Open Sound Control for bi-directional communication between a game server and a multi-channel ChucK audio server. By leveraging ioquake3’s robust physics engine and multiplayer network code with oscpack’s fully-featured OSC specification, game clients and previously unintelligent in-game weapon projectiles can be repurposed as behavior-driven independent OSC-emitting virtual sound-sources spatialized within a multi-channel audio environment for real-time networked performance. | '''q3osc''' is a heavily modified version of the ioquake3 gaming engine featuring an integrated oscpack implementation of Open Sound Control for bi-directional communication between a game server and a multi-channel ChucK audio server. By leveraging ioquake3’s robust physics engine and multiplayer network code with oscpack’s fully-featured OSC specification, game clients and previously unintelligent in-game weapon projectiles can be repurposed as behavior-driven independent OSC-emitting virtual sound-sources spatialized within a multi-channel audio environment for real-time networked performance. | ||
+ | |||
+ | '''The most up-to-date downloads and information can currently be found on http://www.q3osc.org.''' | ||
q3osc is an update of the manner in which the quake3 gaming engine can be used to export player locations and entity movements and actions outside of the q3 server via OSC. While q3osc is working from a fresh [http://ioquake3.org/ ioquake3] codebase, the inspiration came from Julian Oliver's excellent [http://julianoliver.com/q3apd Q3APD] project, which unfortunately makes use of the string-based [http://en.wikipedia.org/wiki/FUDI FUDI] protocol instead of a more flexible proper [http://www.cnmat.berkeley.edu/OpenSoundControl/ OSC] protocol. | q3osc is an update of the manner in which the quake3 gaming engine can be used to export player locations and entity movements and actions outside of the q3 server via OSC. While q3osc is working from a fresh [http://ioquake3.org/ ioquake3] codebase, the inspiration came from Julian Oliver's excellent [http://julianoliver.com/q3apd Q3APD] project, which unfortunately makes use of the string-based [http://en.wikipedia.org/wiki/FUDI FUDI] protocol instead of a more flexible proper [http://www.cnmat.berkeley.edu/OpenSoundControl/ OSC] protocol. | ||
Line 10: | Line 12: | ||
By adding behavioral controls to in-game entities like plasma and bfg-bolts (both of which have interesting visual attributes), visual in-game behaviors like bouncing and attraction/homing both to self and other in-game entities, we can create audio gestures which tightly follow the visual gestures. | By adding behavioral controls to in-game entities like plasma and bfg-bolts (both of which have interesting visual attributes), visual in-game behaviors like bouncing and attraction/homing both to self and other in-game entities, we can create audio gestures which tightly follow the visual gestures. | ||
+ | |||
+ | ==works== | ||
+ | [[q3osc: works]] | ||
+ | |||
+ | |||
+ | ==source== | ||
+ | This source archive contains everything needed to compile q3osc excluding of course standard and required C and C++ development libraries. As current development is done in KDE (Fedora Core 8/PlanetCCRMA) using KDevelop, the ccrma.kdevelop file in the top-level ccrma-kdevelop directory can be opened in KDevelop and should be buildable from the start. Builds make use of a tweaked version of the ioquake3/OpenArena Makefile with added changes in a second Makefile.local - running build from KDevelop will call these Makefiles by default. | ||
+ | |||
+ | * Download Linux Source: [http://ccrma.stanford.edu/~rob/q3osc/source/q3osc_4.6.08.tar.bz2 Initial Release (4.6.08)] - <i>q3osc_4.6.08.tar.bz2</i>, ~291MB | ||
+ | * Download Mac OS X (10.5.2) Source: [http://ccrma.stanford.edu/~rob/q3osc/source/q3osc-OSX_6.16.08.zip Initial OS X Release (6.16.08)] - <i>q3osc-OSX_6.16.08.zip</i>, ~559MB | ||
==media== | ==media== | ||
+ | * [http://www.youtube.com/watch?v=a3aZx0eWpx0 ''nous sommes tous Fernando...''] by the Stanford Laptop Orchestra | ||
+ | |||
* demo with sound: study 1 ([http://ccrma.stanford.edu/~rob/q3osc/media/study1_web.mov small], [http://ccrma.stanford.edu/~rob/q3osc/media/study1_cd.mov medium], [http://ccrma.stanford.edu/~rob/q3osc/media/study1_custom.mov large], [http://ccrma.stanford.edu/~rob/q3osc/media/study1_full.mov full-size]) | * demo with sound: study 1 ([http://ccrma.stanford.edu/~rob/q3osc/media/study1_web.mov small], [http://ccrma.stanford.edu/~rob/q3osc/media/study1_cd.mov medium], [http://ccrma.stanford.edu/~rob/q3osc/media/study1_custom.mov large], [http://ccrma.stanford.edu/~rob/q3osc/media/study1_full.mov full-size]) | ||
Line 19: | Line 33: | ||
* demo with sound: study 4 ([http://ccrma.stanford.edu/~rob/q3osc/media/study4_web.mov small], [http://ccrma.stanford.edu/~rob/q3osc/media/study4_cd.mov medium], [http://ccrma.stanford.edu/~rob/q3osc/media/study4_custom.mov large], [http://ccrma.stanford.edu/~rob/q3osc/media/study4_full.mov full-size]) | * demo with sound: study 4 ([http://ccrma.stanford.edu/~rob/q3osc/media/study4_web.mov small], [http://ccrma.stanford.edu/~rob/q3osc/media/study4_cd.mov medium], [http://ccrma.stanford.edu/~rob/q3osc/media/study4_custom.mov large], [http://ccrma.stanford.edu/~rob/q3osc/media/study4_full.mov full-size]) | ||
− | |||
* demo movie: [http://ccrma.stanford.edu/~rob/q3osc/media/q3osc-demo-1.mov q3osc-demo1.mov] (~340mb) [no-sound] | * demo movie: [http://ccrma.stanford.edu/~rob/q3osc/media/q3osc-demo-1.mov q3osc-demo1.mov] (~340mb) [no-sound] | ||
− | |||
* random screenshots: [http://ccrma.stanford.edu/~rob/q3osc/images/ ~rob/q3osc/images] (.tga, .jpg) | * random screenshots: [http://ccrma.stanford.edu/~rob/q3osc/images/ ~rob/q3osc/images] (.tga, .jpg) | ||
+ | ==files== | ||
+ | * new map: [http://ccrma.stanford.edu/~rob/q3osc/files/quintet_dome.bsp quintet_dome.bsp] | ||
* ChucK stereo-demo script: [http://ccrma.stanford.edu/~rob/q3osc/q3osc_balls2_stereo.ck q3osc_balls2_stereo.ck] | * ChucK stereo-demo script: [http://ccrma.stanford.edu/~rob/q3osc/q3osc_balls2_stereo.ck q3osc_balls2_stereo.ck] | ||
* ChucK demo script: [http://ccrma.stanford.edu/~rob/q3osc/q3osc_balls.ck q3osc_balls.ck] | * ChucK demo script: [http://ccrma.stanford.edu/~rob/q3osc/q3osc_balls.ck q3osc_balls.ck] | ||
+ | * test map "space6a": [http://ccrma.stanford.edu/~rob/q3osc/files/space6a.bsp .bsp], [http://ccrma.stanford.edu/~rob/q3osc/files/space6a.aas .aas] | ||
+ | * more devmaps: [http://ccrma.stanford.edu/~rob/q3osc/files/devmaps.zip devmaps.zip] | ||
− | |||
+ | ==publications/lectures== | ||
− | * | + | * draft of ICMC 2008 paper (submitted): [http://ccrma.stanford.edu/~rob/q3osc/hamiltonicmc2008DRAFT.pdf q3osc or: How I Learned to Stop Worrying and Love the Game] |
+ | * [http://ccrma.stanford.edu/~rob/papers/hamilton-ICMC2007-fps.pdf Hamilton, R., "Maps and Legends: FPS-Based Interfaces For Composition and Immersive Performance" In Proceedings of the International Computer Music Association Conference, Copenhagen, Denmark, 2007.] | ||
+ | * [http://ccrma.stanford.edu/~rob/q3osc/q3osc-ANETII-banff.pdf ANET II: q3osc] | ||
+ | * [http://ccrma.stanford.edu/~rob/seamus07/splash.html SEAMUS 2007: Maps and Legends] | ||
+ | == Contributors == | ||
+ | * Rob Hamilton | ||
+ | * Ge Wang | ||
+ | * Dave Kerr | ||
==client install process== | ==client install process== | ||
+ | ''Just for clarification, these are the instructions for configuring client installations of q3osc, suitable for running on each platform against a server (Linux for now, OS X coming soon) running q3osc.'' | ||
+ | |||
=== ALL OS's=== | === ALL OS's=== | ||
Line 43: | Line 68: | ||
=== Mac OS X === | === Mac OS X === | ||
− | + | ''NOTE: Currently, this is the procedure for just installing the vanilla OpenArena mod with the q3osc config. This setup is suitable for running as a client connecting to a Linux-based q3osc server, but can not create or host q3osc games. | |
+ | ' | ||
* download OpenArena 0.7.0 binary for Mac OS X (OpenArena0.7.0j2.dmg): http://www.atomicgamer.com/gameFiles.php?id=1943 [~260 MB] | * download OpenArena 0.7.0 binary for Mac OS X (OpenArena0.7.0j2.dmg): http://www.atomicgamer.com/gameFiles.php?id=1943 [~260 MB] | ||
* download OpenArena .0.7.1 patch (OA071-PATCH.ZIP): http://www.atomicgamer.com/file.php?id=63046# [~11 MB] | * download OpenArena .0.7.1 patch (OA071-PATCH.ZIP): http://www.atomicgamer.com/file.php?id=63046# [~11 MB] | ||
− | * running OpenArena will create a directory in ~/Library/Application Support/OpenArena which contains by default the basoa directory, itself containing | + | * running OpenArena will create a directory in ~/Library/Application Support/OpenArena which contains by default the basoa directory, itself containing a default q3config.cfg file. Copy the file above ( http://ccrma.stanford.edu/~rob/q3osc/files/q3config.cfg ) here. |
+ | * copy the maps directory and textures directory to ~/Library/Application SUpport/OpenArena/ as well | ||
+ | * MacBook video settings: | ||
+ | /r_mode -1 | ||
+ | /r_customwidth 1280 | ||
+ | /r_customheight 756 | ||
+ | /vid_restart | ||
+ | |||
+ | * MacBookPro video settings: | ||
+ | /r_mode -1 | ||
+ | /r_customwidth 1432 | ||
+ | /r_customheight 870 | ||
+ | /vid_restart | ||
=== Windows === | === Windows === | ||
Line 64: | Line 102: | ||
+ | |||
+ | === SLOrk installs === | ||
+ | |||
+ | * bash script testing on shabushabu /Users/slork/slork/users/rob/q3osc/ | ||
+ | * download installer package here: [http://ccrma.stanford.edu/~rob/q3osc/q3osc-slork-installer.zip q3osc-slork-installer.zip (~271.6 MB)] | ||
+ | * create dir /Users/slork/slork/users/rob and unpack the zip there, so that there is a /Users/slork/slork/users/rob/q3osc/ dir with all the necessary components | ||
+ | * run ./install.sh and follow the instructions. | ||
+ | |||
+ | /r_mode -1 | ||
+ | /r_customwidth 1280 | ||
+ | /r_customheight 756 | ||
+ | /vid_restart | ||
==current status== | ==current status== | ||
Line 216: | Line 266: | ||
===enhancements=== | ===enhancements=== | ||
+ | |||
+ | <ul> | ||
+ | <li>change rate of weapons fire (plasma, bfg) dynamically: bg_pmove.c ~1667; addTime = g_plasma_rate;</li> | ||
+ | <li>lock projectiles on 100% vertical or horizontal planes even after bounce</li> | ||
+ | <li>track projectiles per client and allow clients to selectively or en masse destroy projectiles</li> | ||
+ | <li>fix bot errors: trying to switch to weapons which are no longer in the array</li> | ||
+ | </ul> | ||
+ | |||
dedicated server support | dedicated server support | ||
Line 226: | Line 284: | ||
changeable color for each user for plasma and bfg | changeable color for each user for plasma and bfg | ||
+ | |||
+ | use gethostbyname() to get ips for slork stations | ||
===update history=== | ===update history=== | ||
+ | =====8/07/08===== | ||
+ | initial OSC input patches inplace. q3osc can receive simple OSC messages and realize their values in real time: | ||
+ | * /g_gravity <float> | ||
+ | * /g_speed <float> | ||
+ | * /g_homing_speed <float> | ||
+ | |||
+ | working on linking for OSX: | ||
+ | |||
+ | dev builds: [http://ccrma.stanford.edu/~rob/q3osc/files/q3osc-8.7.08r9.zip q3osc-8.7.08r9.zip] and [http://ccrma.stanford.edu/~rob/q3osc/files/q3osc-8.7.08r9.zip q3osc-8.7.08r9lite.zip] | ||
+ | |||
+ | =====6/17/08===== | ||
+ | changes for OS X build: | ||
+ | * Modified Makefiles | ||
+ | * cleaned up unix/unix_net.c | ||
+ | * cleaned up osc/oscpack/ip and osc dirs | ||
+ | |||
+ | * copy baseoa into build/release-darwin-i386/ | ||
+ | * mv baseq3 to ccrma (change this in make?) | ||
+ | * copy libSDL-1.2.0.dylib to release-darwin-i386 dir | ||
+ | |||
+ | =====6/16/08===== | ||
+ | * Mac OS X source q3osc-OSX_6.16.08.zip added to downloads section. Version is compiled against OS X 10.5.2 for intel; not tested against ppc (shouldn't work) and not bundled as a .app (still command line driven) | ||
+ | |||
+ | =====6/15/08===== | ||
+ | To build Mac OS X .app bundle: | ||
+ | * copy customized ioquake3.i386 into ioquake3.app/Contents/MacOS/ and rename ioquake3.ub | ||
+ | * make ccrma/ dir in Contents/MacOS/ and put in cgamei386.dylib, qagamei386.dylib, and uii386.dylib from darwin build dir | ||
+ | * how to make /q3osc appear as a mod? (need to first change from /ccrma to /q3osc in makefile build script | ||
+ | |||
+ | =====6/13/08===== | ||
+ | * Thanks to Dave Kerr, the OS X server linker issues have been weeded out. Will be posted soon... | ||
+ | |||
+ | =====6/03/08===== | ||
+ | * performance of "nous sommes tous Fernando..." for 16 slork-stations, with the Stanford Laptop Orchestra, outside in the Knoll courtyard at CCRMA. | ||
+ | |||
+ | =====5/29/08===== | ||
+ | * idiot-proofing changes: | ||
+ | ** g_client.c changes to set plasma and bfg as initial weapons with unlimited ammo | ||
+ | ** g_cmds.c edits to disable all "give" commands. | ||
+ | ** addition of osc_broadcast cvar for future use of Osc broadcasting | ||
+ | ** change osc_projectile to default to 1, and to pull from CVAR_ARCHIVE | ||
+ | |||
+ | =====5/28/08===== | ||
+ | * demo of "fernando" for documentary film-makers with 6 slork-stations and projection | ||
+ | |||
+ | =====5/25/08===== | ||
+ | * q3osc featured on ioquake3.org; interview with Khalsa in irc chat (#ioquake3 on freenode). | ||
+ | |||
+ | =====5/24/08===== | ||
+ | * First concert performance using q3osc with ''nous sommes tous Fernando..." for 5 laptops and four performers. Performers were Chryssie Nanou, Ge Wang, Michael Berger and Juan-Cristobel Castillo with Rob Hamilton acting as virtual camera operator. | ||
+ | |||
+ | =====5/12/08===== | ||
+ | * all slork stations updated with quintet.ck and q3osc | ||
+ | |||
+ | =====5/11/08===== | ||
+ | * for quintet, added 4 custom .cfg files, one per client, switchable via F1-F4 to set keyboard's 1-5 to control respectively gradations of Plasma-speed, Homing-speed, gravity and client-speed. Files are pspeed.cfg, hspeed.cfg, gspeed.cfg, gravity.cfg | ||
+ | |||
+ | =====5/05/08===== | ||
+ | * added new devmap "quintet_dome.bsp" (see files section) | ||
+ | * added client currentClient.hostname = osc_client_hostname<n>.string; in g_active.c for clients 1-20 (may be better way of doing this in the future as clientnum is derived from joining order | ||
+ | * added "slork_switch" game command-line flag: 0, OSC all routed to projectile/client hostnames; 1, OSC routed to osc_client_hostname<n> | ||
+ | |||
+ | =====4/19/08===== | ||
+ | * trying compiling for OS X 10.5 Intel again: | ||
+ | ** in /unix/unix_net.c, fixed typo in "if (ioctl(interfaceSocket, OSIOCGIFADDR, (caddr_t)&ifr) < 0) {" to "if (ioctl(interfaceSocket, SIOCGIFADDR, (caddr_t)&ifr) < 0) {" | ||
+ | ** added "USE_CODEC_VORBIS=0" to Makefile.local to kill Ogg | ||
+ | ** change Makefile references from "i686-apple-darwin8" to "i686-apple-darwin9" | ||
+ | ** stuck on something having to do with the C wrappers around the oscpack code? oscpack compiles fine on its own but with the wrappers, throws errors; maybe need different compiler flags?: | ||
+ | |||
+ | Undefined symbols: | ||
+ | "_read$UNIX2003", referenced from: | ||
+ | SocketReceiveMultiplexer::Implementation::Run() in UdpSocket.o | ||
+ | "_EndMessage", referenced from: | ||
+ | _EndMessage$non_lazy_ptr in osc.o | ||
+ | "_write$UNIX2003", referenced from: | ||
+ | SocketReceiveMultiplexer::Implementation::AsynchronousBreak() in UdpSocket.o | ||
+ | "_EndBundle", referenced from: | ||
+ | _EndBundle$non_lazy_ptr in osc.o | ||
+ | "_select$UNIX2003", referenced from: | ||
+ | SocketReceiveMultiplexer::Implementation::Run() in UdpSocket.o | ||
+ | "_close$UNIX2003", referenced from: | ||
+ | UdpSocket::Implementation::~Implementation()in UdpSocket.o | ||
+ | SocketReceiveMultiplexer::Implementation::~Implementation()in UdpSocket.o | ||
+ | SocketReceiveMultiplexer::Implementation::~Implementation()in UdpSocket.o | ||
+ | ld: symbol(s) not found | ||
+ | collect2: ld returned 1 exit status | ||
+ | make[1]: *** [build/release-darwin-i386/baseq3/qagamei386.dylib] Error 1 | ||
+ | make: *** [build_release] Error 2 | ||
+ | |||
+ | =====4/18/08===== | ||
+ | * Added installer for SLOrk stations for Mac Client | ||
+ | |||
+ | =====4/16/08===== | ||
+ | * commented out CG_AddPlayerWeapons method in cg_weapons.c to make weapons not visible for every avatar | ||
+ | * changed this and instead comented out the call for CG_AddPlayerWeapons at the end of CG_AddViewWeapon in in cg_weapons.c | ||
+ | |||
+ | =====4/11/08===== | ||
+ | * q3osc presented at the ANET II Summit meeting on networked audio at the Banff Centre in Alberta, Canada. Here is a link to the slides I used in the talk: [http://ccrma.stanford.edu/~rob/q3osc/q3osc-ANETII-banff.pdf ANET II Slides] | ||
=====4/5/08===== | =====4/5/08===== | ||
Line 363: | Line 521: | ||
===references=== | ===references=== | ||
− | [http://ccrma.stanford.edu/~rob/papers/hamilton- | + | [http://ccrma.stanford.edu/~rob/papers/hamilton-ICMC2008-q3osc.pdf Hamilton, R., "q3osc: or How I Learned to Stop Worrying and Love the Game", In Proceedings of the International Computer Music Association Conference, Belfast, Ireland, 2008.] |
+ | [http://ccrma.stanford.edu/~rob/papers/hamilton-ICMC2007-fps.pdf Hamilton, R., "Maps and Legends: FPS-Based Interfaces For Composition and Immersive Performance" In Proceedings of the International Computer Music Association Conference, Copenhagen, Denmark, 2007.] | ||
===port forwarding=== | ===port forwarding=== | ||
Line 407: | Line 566: | ||
/cg_thirdPersonRange (default: 40) | /cg_thirdPersonRange (default: 40) | ||
− | * set custom video size | + | * set custom video size: for linux larger monitor @ ccrma: |
/r_mode -1 | /r_mode -1 | ||
/r_customheight 1021 | /r_customheight 1021 | ||
/r_customwidth 1672 | /r_customwidth 1672 | ||
/vid_restart | /vid_restart | ||
+ | |||
+ | * for linux: | ||
+ | /r_customwidth 1275 | ||
+ | /r_customheight 960 | ||
* random video properties | * random video properties | ||
Line 440: | Line 603: | ||
* Kandinsky: "Point and line to plane" | * Kandinsky: "Point and line to plane" | ||
* [http://graphics.stanford.edu/~kekoa/q3/ q3 bsp structure (from Stanford EE)] | * [http://graphics.stanford.edu/~kekoa/q3/ q3 bsp structure (from Stanford EE)] | ||
+ | |||
+ | ===Subversion Repository Setup=== | ||
+ | |||
+ | svn co svn+ssh://cmn51.stanford.edu/user/r/rob/svn/q3osc | ||
+ | |||
+ | [cmn51 rob] ~/data> svnadmin create --fs-type fsfs svn | ||
+ | [cmn51 rob] ~/data/q3osc/dev> svn co file:///user/r/rob/data/svn | ||
+ | Checked out revision 0. | ||
+ | |||
+ | [cmn51 rob] ~/data/q3osc/dev> cd svn | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn> ls | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn> svn mkdir q3osc | ||
+ | A q3osc | ||
+ | |||
+ | [cmn51 rob] ~/data/q3osc/dev/svn> svn commit -m "Setting up empty q3osc directory - rob" | ||
+ | Adding q3osc | ||
+ | |||
+ | Committed revision 1. | ||
+ | |||
+ | [cmn51 rob] ~/data/q3osc/dev/svn> ls -al | ||
+ | total 32 | ||
+ | drwxr-xr-x 4 rob users 4096 May 6 22:27 ./ | ||
+ | drwxr-xr-x 3 rob users 4096 May 6 22:25 ../ | ||
+ | drwxr-xr-x 3 rob users 4096 May 6 22:27 q3osc/ | ||
+ | drwxr-xr-x 6 rob users 4096 May 6 22:28 .svn/ | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn> cp -r ~/data/source/q3osc/* q3osc/ | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> ls -al | ||
+ | total 1184 | ||
+ | drwxr-xr-x 5 rob users 4096 May 6 22:31 ./ | ||
+ | drwxr-xr-x 4 rob users 4096 May 6 22:27 ../ | ||
+ | drwxr-xr-x 3 rob users 4096 May 6 22:30 build/ | ||
+ | -rw-r--r-- 1 rob users 6729 May 6 22:30 ccrma.kdevelop | ||
+ | -rw-r--r-- 1 rob users 947792 May 6 22:30 ccrma.kdevelop.pcs | ||
+ | -rw-r--r-- 1 rob users 5991 May 6 22:30 ccrma.kdevses | ||
+ | drwxr-xr-x 25 rob users 4096 May 6 22:31 ccrmamod/ | ||
+ | -rw-r--r-- 1 rob users 755 May 6 22:31 devnotes | ||
+ | -rw-r--r-- 1 rob users 756 May 6 22:31 devnotes~ | ||
+ | -rw-r--r-- 1 rob users 10405 May 6 22:31 Doxyfile | ||
+ | -rw-r----- 1 rob users 59721 May 6 22:31 Makefile | ||
+ | -rw-r----- 1 rob users 59722 May 6 22:31 Makefile~ | ||
+ | -rw-r--r-- 1 rob users 564 May 6 22:31 Makefile.local | ||
+ | -rw-r--r-- 1 rob users 564 May 6 22:31 Makefile.local~ | ||
+ | drwxr-xr-x 6 rob users 4096 May 6 22:28 .svn/ | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> svn add * | ||
+ | A build | ||
+ | A build/release-linux-i386 | ||
+ | A build/release-linux-i386/client | ||
+ | A build/release-linux-i386/client/be_interface.d | ||
+ | ... | ||
+ | ... | ||
+ | ... | ||
+ | A Makefile.local~ | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> ls | ||
+ | build/ ccrma.kdevelop ccrma.kdevelop.pcs ccrma.kdevses ccrmamod/ devnotes devnotes~ Doxyfile Makefile Makefile~ Makefile.local Makefile.local~ | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> svn commit -m "Initial code check-in; entire project + bins, maybe a bad idea" | ||
+ | Adding q3osc/Doxyfile | ||
+ | Adding q3osc/Makefile | ||
+ | Adding q3osc/Makefile.local | ||
+ | ... | ||
+ | ... | ||
+ | ... | ||
+ | Adding q3osc/devnotes~ | ||
+ | Transmitting file data | ||
+ | ............................................................................................................................................................. | ||
+ | Committed revision 2. | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> svn log | ||
+ | ------------------------------------------------------------------------ | ||
+ | r1 | rob | 2008-05-06 22:28:14 -0700 (Tue, 06 May 2008) | 1 line | ||
+ | |||
+ | Setting up empty q3osc directory - rob | ||
+ | ------------------------------------------------------------------------ | ||
+ | [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> | ||
===bundle data: 1/13/08=== | ===bundle data: 1/13/08=== | ||
Line 505: | Line 740: | ||
/projectile "plasma" 0 87 894.454651 184.281860 -8038.076172 -1079107888 0 0 | /projectile "plasma" 0 87 894.454651 184.281860 -8038.076172 -1079107888 0 0 | ||
+ | |||
+ | ===current work paths=== | ||
+ | |||
+ | svn checkout svn+ssh://gate-ccrma.stanford.edu/user/r/rob/svn/q3osc/<br/> | ||
+ | svn repo: /user/r/rob/svn/q3osc/<br/> | ||
+ | ccrma: ~/dev/svn/<br/> | ||
+ | macbook pro: /data/Projects/q3osc/svn-work/ | ||
+ | |||
+ | ~/dev/svn/q3osc/build/release-linux-i386> | ||
===licensing=== | ===licensing=== | ||
Line 515: | Line 759: | ||
*** quake3 | *** quake3 | ||
+ | ===Unsolicited user-feedback=== | ||
+ | "So, normally I would be really cynical and make fun of your SLORK shit, but I actually found that video extremely cool. It's like a concert of people playing the DOOMophone. And there was something so visually pleasing about watching the video when combined with music, which was so much better than the expected loud sound of gunfire, etc. Awesome, seriously!" | ||
+ | ===Development/Community Links=== | ||
+ | Best link ever: [http://lists.ioquake.org/pipermail/ioquake3-ioquake.org/ ioquake3 mailing list]<br/> | ||
+ | Second best: [http://bugzilla.icculus.org/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__all__&product=Quake+3&content= ioquake3 bugzilla] | ||
− | = | + | <div style="width:200px; float:left; margin:0px 10px 50px 0px; border:1px solid #ccc; padding:10px"> |
− | + | ||
+ | [http://psykor3.quakedev.com/tutorial3.html console writing]<br /> | ||
− | |||
− | |||
− | |||
[http://ccrma.stanford.edu/~rob ~rob]<br /> | [http://ccrma.stanford.edu/~rob ~rob]<br /> | ||
[http://www.audiomulch.com/~rossb/code/oscpack/ oscpack]<br /> | [http://www.audiomulch.com/~rossb/code/oscpack/ oscpack]<br /> | ||
Line 542: | Line 788: | ||
[http://planetquake.gamespy.com/View.php?view=guides.detail&id=47 server config] <br /> | [http://planetquake.gamespy.com/View.php?view=guides.detail&id=47 server config] <br /> | ||
[http://planetozh.com/blog/2005/01/quake3-webrcon-web-based-rcon-interface/ rcon php]<br /> | [http://planetozh.com/blog/2005/01/quake3-webrcon-web-based-rcon-interface/ rcon php]<br /> | ||
− | [http://hermitworks.blogspot.com/2008/04/quake-3-itouch.html iPhone q3] | + | [http://hermitworks.blogspot.com/2008/04/quake-3-itouch.html iPhone q3] <br /> |
+ | [http://www.linuxjournal.com/article/9931 Linux Video Editors]<br /> | ||
+ | [http://www.map-craft.com/modules.php?name=Tutoriaux&rop=tutoriaux&did=104 3D terrain generation tutorial] | ||
</div> | </div> | ||
− | <div style="width: | + | <div style="width:500px; float:left; margin:0px 10px 0px 0px; border:1px solid #ccc; padding:10px"> |
[http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html mixing C and C++]<br /> | [http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html mixing C and C++]<br /> | ||
[http://developers.sun.com/solaris/articles/mixing.html more c/c++ mixing]<br /> | [http://developers.sun.com/solaris/articles/mixing.html more c/c++ mixing]<br /> | ||
Line 560: | Line 808: | ||
[http://skindom.planetquake.gamespy.com/faq/quake3/ skinning faq] <br /> | [http://skindom.planetquake.gamespy.com/faq/quake3/ skinning faq] <br /> | ||
[http://www.hypertmg.com/tabid/54/UserID/23/Default.aspx q3 with Wii C++ port] <br /> | [http://www.hypertmg.com/tabid/54/UserID/23/Default.aspx q3 with Wii C++ port] <br /> | ||
− | [http://www.3dgw.com/guides/q3a/ q3a server guide] | + | [http://www.3dgw.com/guides/q3a/ q3a server guide]<br /> |
+ | [http://archive.cnmat.berkeley.edu/OpenSoundControl/send%2BdumpOSC-OSX.tar.gz dumpOSC]<br /> | ||
+ | [http://www.amazon.com/Focus-Programming-Quake-Premier-Development/dp/193184156X Focus On Mod Programming in Quake III Arena by Shawn Holmes]<br /> | ||
+ | [http://musica.unq.edu.ar/personales/odiliscia/software/wdspa.htm Panning]<br /> | ||
+ | [http://ilovefps.y7.ath.cx/idtech_cvar_guide/ cvar guide]<br /> | ||
+ | [http://expertctf.net/expq3doc.htm extended cvars] <br /> | ||
+ | [http://www.iwriteiam.nl/Ha_cmt.html threading] <br /> | ||
+ | [http://www.gidforums.com/t-17530.html?page=2 thread thread] <br /> | ||
+ | [http://cs.baylor.edu/~donahoo/practical/CSockets/practical/ baylor threads stuff] <br /> | ||
+ | [http://slowchop.com/2006/07/20/python-quake-3-server-rcon-and-query-class/ rcon python class] <br /> | ||
+ | [http://gameadmins.com/modules.php?name=Sections&op=viewarticle&artid=7 ron stuff]<br /> | ||
+ | [http://gamall-ida.com/f/viewtopic.php?p=4575#p4575 console rcon app]<br /> | ||
+ | [http://aluigi.org/papers.htm#q3 quake3 papers/tools via link] <br /> | ||
+ | [http://docs.hp.com/en/B3901-90019/ch10s02.html C++ referencing C funtions] | ||
</div> | </div> | ||
Latest revision as of 12:29, 17 May 2010
q3osc is a heavily modified version of the ioquake3 gaming engine featuring an integrated oscpack implementation of Open Sound Control for bi-directional communication between a game server and a multi-channel ChucK audio server. By leveraging ioquake3’s robust physics engine and multiplayer network code with oscpack’s fully-featured OSC specification, game clients and previously unintelligent in-game weapon projectiles can be repurposed as behavior-driven independent OSC-emitting virtual sound-sources spatialized within a multi-channel audio environment for real-time networked performance.
The most up-to-date downloads and information can currently be found on http://www.q3osc.org.
q3osc is an update of the manner in which the quake3 gaming engine can be used to export player locations and entity movements and actions outside of the q3 server via OSC. While q3osc is working from a fresh ioquake3 codebase, the inspiration came from Julian Oliver's excellent Q3APD project, which unfortunately makes use of the string-based FUDI protocol instead of a more flexible proper OSC protocol.
After using Q3APD for the 8-channel work maps & legends, it became apparent that while the mod was great, the idea could be improved and further explored, especially in terms of using OSC instead of FUDI, additional player gestures and data-points being exported from quake3 to an external audio engine. Since Q3APD used the string-based FUDI UDP implementation, rather than a full-blown standards-based OSC implementation, only PD could reasonably be used as the recipient of Q3APD outgoing data-streams. Since there are other excellent languages to be used, osc is a better choice.
With q3osc, the goal is to use a fully-featured OSC implementation like oscpack to not only recreate the basic user-coordinate tracking from Q3APD, but to also expand the scope of usable in-game parameters to include missle objects and other actionable items and events in the game world. Using OSC, we can implement audio engines built in any osc-capable audio software, such as ChucK, Max/MSP, SuperCollider or PD.
By adding behavioral controls to in-game entities like plasma and bfg-bolts (both of which have interesting visual attributes), visual in-game behaviors like bouncing and attraction/homing both to self and other in-game entities, we can create audio gestures which tightly follow the visual gestures.
Contents
- 1 works
- 2 source
- 3 media
- 4 files
- 5 publications/lectures
- 6 Contributors
- 7 client install process
- 8 current status
- 8.1 feature list
- 8.2 enhancements
- 8.3 update history
- 8.3.1 8/07/08
- 8.3.2 6/17/08
- 8.3.3 6/16/08
- 8.3.4 6/15/08
- 8.3.5 6/13/08
- 8.3.6 6/03/08
- 8.3.7 5/29/08
- 8.3.8 5/28/08
- 8.3.9 5/25/08
- 8.3.10 5/24/08
- 8.3.11 5/12/08
- 8.3.12 5/11/08
- 8.3.13 5/05/08
- 8.3.14 4/19/08
- 8.3.15 4/18/08
- 8.3.16 4/16/08
- 8.3.17 4/11/08
- 8.3.18 4/5/08
- 8.3.19 3/27/08
- 8.3.20 2/27/08
- 8.3.21 2/27/08
- 8.3.22 2/17/08
- 8.3.23 2/16/08
- 8.3.24 2/13/08
- 8.3.25 2/12/08
- 8.3.26 2/06/08
- 8.3.27 1/30/08
- 8.3.28 1/28/08
- 8.3.29 1/27/08
- 8.3.30 1/26/08
- 8.3.31 1/25/08
- 8.3.32 1/24/08
- 8.3.33 1/21/08
- 8.3.34 1/20/08
- 8.3.35 1/20/08
- 8.3.36 1/19/08
- 8.3.37 1/18/08
- 8.3.38 1/16/08
- 8.3.39 1/13/08
- 8.3.40 1/11/08
- 8.3.41 1/09/08
- 8.3.42 1/08/08
- 8.3.43 1/03/08
- 8.3.44 12/29/07
- 8.3.45 12/07
- 8.4 references
- 8.5 port forwarding
- 8.6 dev shortcuts
- 8.7 things to think about
- 8.8 Subversion Repository Setup
- 8.9 bundle data: 1/13/08
- 8.10 current work paths
- 8.11 licensing
- 8.12 Unsolicited user-feedback
- 8.13 Development/Community Links
works
source
This source archive contains everything needed to compile q3osc excluding of course standard and required C and C++ development libraries. As current development is done in KDE (Fedora Core 8/PlanetCCRMA) using KDevelop, the ccrma.kdevelop file in the top-level ccrma-kdevelop directory can be opened in KDevelop and should be buildable from the start. Builds make use of a tweaked version of the ioquake3/OpenArena Makefile with added changes in a second Makefile.local - running build from KDevelop will call these Makefiles by default.
- Download Linux Source: Initial Release (4.6.08) - q3osc_4.6.08.tar.bz2, ~291MB
- Download Mac OS X (10.5.2) Source: Initial OS X Release (6.16.08) - q3osc-OSX_6.16.08.zip, ~559MB
media
- nous sommes tous Fernando... by the Stanford Laptop Orchestra
- demo movie: q3osc-demo1.mov (~340mb) [no-sound]
- random screenshots: ~rob/q3osc/images (.tga, .jpg)
files
- new map: quintet_dome.bsp
- ChucK stereo-demo script: q3osc_balls2_stereo.ck
- ChucK demo script: q3osc_balls.ck
- test map "space6a": .bsp, .aas
- more devmaps: devmaps.zip
publications/lectures
- draft of ICMC 2008 paper (submitted): q3osc or: How I Learned to Stop Worrying and Love the Game
- Hamilton, R., "Maps and Legends: FPS-Based Interfaces For Composition and Immersive Performance" In Proceedings of the International Computer Music Association Conference, Copenhagen, Denmark, 2007.
Contributors
- Rob Hamilton
- Ge Wang
- Dave Kerr
client install process
Just for clarification, these are the instructions for configuring client installations of q3osc, suitable for running on each platform against a server (Linux for now, OS X coming soon) running q3osc.
ALL OS's
- install custom q3config.cfg file from here: http://ccrma.stanford.edu/~rob/q3osc/files/q3config.cfg
Mac OS X
NOTE: Currently, this is the procedure for just installing the vanilla OpenArena mod with the q3osc config. This setup is suitable for running as a client connecting to a Linux-based q3osc server, but can not create or host q3osc games. '
- download OpenArena 0.7.0 binary for Mac OS X (OpenArena0.7.0j2.dmg): http://www.atomicgamer.com/gameFiles.php?id=1943 [~260 MB]
- download OpenArena .0.7.1 patch (OA071-PATCH.ZIP): http://www.atomicgamer.com/file.php?id=63046# [~11 MB]
- running OpenArena will create a directory in ~/Library/Application Support/OpenArena which contains by default the basoa directory, itself containing a default q3config.cfg file. Copy the file above ( http://ccrma.stanford.edu/~rob/q3osc/files/q3config.cfg ) here.
- copy the maps directory and textures directory to ~/Library/Application SUpport/OpenArena/ as well
- MacBook video settings:
/r_mode -1 /r_customwidth 1280 /r_customheight 756 /vid_restart
- MacBookPro video settings:
/r_mode -1 /r_customwidth 1432 /r_customheight 870 /vid_restart
Windows
- .cfg files are located in C:\Documents and Settings\rob\Application Data\OpenArena\baseoa
- set Shortcut Target settings to: "G:\Program Files\openarena-0.7.0\openarena.exe" +set sv_pure 0 +set cg_draw2d 0 +set cg_drawGun 0 [replace path with valid path]
Linux/client and dev install
- when OpenArena is run, ~/.openarena is created with ~/.openarena/baseoa and ~/.openarena/ccrma created when dev-code is run
- maps go into ~/.openarena/baseoa/maps (maps dir will need to be created)
- for Development need OpenAL on Linux: yum install openal-devel
- load project into kDevelop, build will call the custom Makefiles
SLOrk installs
- bash script testing on shabushabu /Users/slork/slork/users/rob/q3osc/
- download installer package here: q3osc-slork-installer.zip (~271.6 MB)
- create dir /Users/slork/slork/users/rob and unpack the zip there, so that there is a /Users/slork/slork/users/rob/q3osc/ dir with all the necessary components
- run ./install.sh and follow the instructions.
/r_mode -1 /r_customwidth 1280 /r_customheight 756 /vid_restart
current status
feature list
|
|
enhancements
- change rate of weapons fire (plasma, bfg) dynamically: bg_pmove.c ~1667; addTime = g_plasma_rate;
- lock projectiles on 100% vertical or horizontal planes even after bounce
- track projectiles per client and allow clients to selectively or en masse destroy projectiles
- fix bot errors: trying to switch to weapons which are no longer in the array
dedicated server support
OSC input functionality
assignable clientID projectile tracking
individual control of projectiles (speed, xyz)
changeable color for each user for plasma and bfg
use gethostbyname() to get ips for slork stations
update history
8/07/08
initial OSC input patches inplace. q3osc can receive simple OSC messages and realize their values in real time:
- /g_gravity <float>
- /g_speed <float>
- /g_homing_speed <float>
working on linking for OSX:
dev builds: q3osc-8.7.08r9.zip and q3osc-8.7.08r9lite.zip
6/17/08
changes for OS X build:
- Modified Makefiles
- cleaned up unix/unix_net.c
- cleaned up osc/oscpack/ip and osc dirs
- copy baseoa into build/release-darwin-i386/
- mv baseq3 to ccrma (change this in make?)
- copy libSDL-1.2.0.dylib to release-darwin-i386 dir
6/16/08
- Mac OS X source q3osc-OSX_6.16.08.zip added to downloads section. Version is compiled against OS X 10.5.2 for intel; not tested against ppc (shouldn't work) and not bundled as a .app (still command line driven)
6/15/08
To build Mac OS X .app bundle:
- copy customized ioquake3.i386 into ioquake3.app/Contents/MacOS/ and rename ioquake3.ub
- make ccrma/ dir in Contents/MacOS/ and put in cgamei386.dylib, qagamei386.dylib, and uii386.dylib from darwin build dir
- how to make /q3osc appear as a mod? (need to first change from /ccrma to /q3osc in makefile build script
6/13/08
- Thanks to Dave Kerr, the OS X server linker issues have been weeded out. Will be posted soon...
6/03/08
- performance of "nous sommes tous Fernando..." for 16 slork-stations, with the Stanford Laptop Orchestra, outside in the Knoll courtyard at CCRMA.
5/29/08
- idiot-proofing changes:
- g_client.c changes to set plasma and bfg as initial weapons with unlimited ammo
- g_cmds.c edits to disable all "give" commands.
- addition of osc_broadcast cvar for future use of Osc broadcasting
- change osc_projectile to default to 1, and to pull from CVAR_ARCHIVE
5/28/08
- demo of "fernando" for documentary film-makers with 6 slork-stations and projection
5/25/08
- q3osc featured on ioquake3.org; interview with Khalsa in irc chat (#ioquake3 on freenode).
5/24/08
- First concert performance using q3osc with nous sommes tous Fernando..." for 5 laptops and four performers. Performers were Chryssie Nanou, Ge Wang, Michael Berger and Juan-Cristobel Castillo with Rob Hamilton acting as virtual camera operator.
5/12/08
- all slork stations updated with quintet.ck and q3osc
5/11/08
- for quintet, added 4 custom .cfg files, one per client, switchable via F1-F4 to set keyboard's 1-5 to control respectively gradations of Plasma-speed, Homing-speed, gravity and client-speed. Files are pspeed.cfg, hspeed.cfg, gspeed.cfg, gravity.cfg
5/05/08
- added new devmap "quintet_dome.bsp" (see files section)
- added client currentClient.hostname = osc_client_hostname<n>.string; in g_active.c for clients 1-20 (may be better way of doing this in the future as clientnum is derived from joining order
- added "slork_switch" game command-line flag: 0, OSC all routed to projectile/client hostnames; 1, OSC routed to osc_client_hostname<n>
4/19/08
- trying compiling for OS X 10.5 Intel again:
- in /unix/unix_net.c, fixed typo in "if (ioctl(interfaceSocket, OSIOCGIFADDR, (caddr_t)&ifr) < 0) {" to "if (ioctl(interfaceSocket, SIOCGIFADDR, (caddr_t)&ifr) < 0) {"
- added "USE_CODEC_VORBIS=0" to Makefile.local to kill Ogg
- change Makefile references from "i686-apple-darwin8" to "i686-apple-darwin9"
- stuck on something having to do with the C wrappers around the oscpack code? oscpack compiles fine on its own but with the wrappers, throws errors; maybe need different compiler flags?:
Undefined symbols: "_read$UNIX2003", referenced from: SocketReceiveMultiplexer::Implementation::Run() in UdpSocket.o "_EndMessage", referenced from: _EndMessage$non_lazy_ptr in osc.o "_write$UNIX2003", referenced from: SocketReceiveMultiplexer::Implementation::AsynchronousBreak() in UdpSocket.o "_EndBundle", referenced from: _EndBundle$non_lazy_ptr in osc.o "_select$UNIX2003", referenced from: SocketReceiveMultiplexer::Implementation::Run() in UdpSocket.o "_close$UNIX2003", referenced from: UdpSocket::Implementation::~Implementation()in UdpSocket.o SocketReceiveMultiplexer::Implementation::~Implementation()in UdpSocket.o SocketReceiveMultiplexer::Implementation::~Implementation()in UdpSocket.o ld: symbol(s) not found collect2: ld returned 1 exit status make[1]: *** [build/release-darwin-i386/baseq3/qagamei386.dylib] Error 1 make: *** [build_release] Error 2
4/18/08
- Added installer for SLOrk stations for Mac Client
4/16/08
- commented out CG_AddPlayerWeapons method in cg_weapons.c to make weapons not visible for every avatar
- changed this and instead comented out the call for CG_AddPlayerWeapons at the end of CG_AddViewWeapon in in cg_weapons.c
4/11/08
- q3osc presented at the ANET II Summit meeting on networked audio at the Banff Centre in Alberta, Canada. Here is a link to the slides I used in the talk: ANET II Slides
4/5/08
- run dedicated server with +set dedicated 1
- rcon commands via terminal work from client
- CCRMA port range open and external clients can connect with no problems
3/27/08
custom video config for Macbook Pro (Fed 8):
/r_customheight 870 /r_customwidth 1434
2/27/08
- should add offset to user position which would move player bounding box +- XYZ from user-center
2/27/08
- added demo video 4
2/17/08
- cg_railTrailTime: can rail-trails be made to persist and turned into "strings" when crossed?
2/16/08
- Jeff Smith's 16-chnl example
- recorded demo with sound
2/13/08
- q3osc presentation to Stanford Composition Seminar
2/12/08
- upgraded chuck demo script with Stereo panning (Y-axis) and more robust shred destruction (with dedicated events per shred)
2/06/08
- q3osc presentation to the Bay Area Computer Music Technology Group
- initial demo ChucK script posted: sonifies projectile bounces with reverb'd and enveloped sineOSCs
- chuck --loop
- chuck + q3osc_balls.ck
- chuck ^
1/30/08
- interesting to note, all modification made on weapon entities seems to be handled entirely on the server side, to such an extent that a clean default installation of OpenArena on a ppc Mac can interface perfectly with the server running q3osc-tweaked code. Wow. It just got even easier.
1/28/08
- seems like upper-bound on renderable projectiles on the screen at any given time is ~253, tracked via new object ids sent via osc to ChucK. Projectile IDs start at 73, not 0.
1/27/08
- modified durations on CG_BubbleTrail le->endTime to extend bubbles... funny looking but mostly useless... eats up alot of entities.
- increased MAX_ENTITIES in tr_types.h from 1023 to 100000; not sure how this is affecting things, may be more complicated.
1/26/08
- modified cg_weapons.c to turn on "bubble trails" for certain weapons
- added g_parent_homing_only flag to make homing projectiles only follow parent (bind j homingparentonly)
1/25/08
- created q3osc.ck ChucK main processes/class-models
- made "/<classname" descriptor for each osc projectile message and "/player" for osc client messages.
1/24/08
- added sendOSCmessage and sendOSCbundle switched by osc_bundle boolean
- added cg_plasma_trail_length to cg_local.h et al.
1/21/08
- added osc_bundle checks to determine whether bundles or single multi-field osc messages are sent
- split sendOSCMessage_projectile into sendOSCmessage_projectile... and sendOSCbundle_projectile... using osc_bundle boolean as switch between methods
- added methods and check for boolean into g_missile code
1/20/08
- added first demo movie: q3osc-demo1.mov (~340mb)
1/20/08
- using cg_oldPlasma 0
1/19/08
- added g_plasma_persist, and g_homing_persist and used in checks on G_HomingMissle to trigger expiration of all typed entities
- added g_plasma_homing_persist, g_bfg_homing_persist and logic track them in G_HomingMissle
- added bindable "plasmahomingpersist", "bfghomingpersist"
1/18/08
- added osc_send_projectile, osc_send_client booleans to turn on and off osc output
- added g_bfg_persist flag: 1 postpones ent->nextthink so bfgs don't explode... when flag is set to 0, then after g_bfg_time G_ExplodeMissile will be called and all bfg entites bouncing around will explode/go away
1/16/08
- added g_homing_radius
- recorded video demo of homing balls
- /record balls1
- /stoprecord
- /demo balls1
- /video (converts to .avi from demo format)
1/13/08
- Added insane g_parent_homing flag to allow projectiles to home on their parent client. This can create great spheres of entites revolving around the client when g_homing_speed in set just so.
1/11/08
- Running q3osc with client data output as bundles to one IP/Port while projectile data is routed to its own IP/Port. Homing and bounce are triggered by client variables, so each client can decide for him/herself whether or not homing/bounce are enabled.
1/09/08
- Ludicrous bouncing/homing enabled for Plasma and BFG projectiles. Added g_homing_speed, g_plasma_speed, g_rocket_speed cvars. Added g_plasma_bounce (taken from q3apd)
- g_synchronousClients 1 : synchronizes client messages but purportedly makes playability more difficult... will see.
1/08/08
- missle tracking working; need to isolate individual gentity_t id's for each rocket, as well as target ids (this can probably be gleaned from the radius reference)
- osc bundle output working: needed to "#define OSC_HOST_LITTLE_ENDIAN 1" in OscHistEndianness.h (oscpack) for linux system. Will need to re-set this for Windows compilation.
- Osc output console variables "/osc_hostname" and "/osc_port" are working. Currently designing and implementing osc namespace.
1/03/08
- osc output from test.cpp using oscpack compiled into ioquake3 engine successfull using homing rocket as trigger. Now moving on to isolate good params for export including the methods used in q3apd plus new goodies.
12/29/07
- initial linking success with test.cpp, thanks to ge's sweet sweet compiler flags:
$(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) : $(Q3GOBJ) $(CC) $(SHLIBLDFLAGS) -lstdc++ -o $@ $(Q3GOBJ)
$(B)/baseq3/cgame$(ARCH).$(SHLIBEXT) : $(Q3GOBJ) $(CC) $(SHLIBLDFLAGS) -lstdc++ -o $@ $(Q3GOBJ)
DO_CPP=$(CPP) $(BASE_CPPFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
12/07
- uber-beta floundering; while test .cpp classes are compiling correctly, something is going screwy in the linking process, which causes qagamei386.so to fail on the foo method call (see below)
Loading dll file qagame. Sys_LoadDll(/user/r/rob/data/q3/dev/ccrma-kdevelop/build/release-linux-i386/ccrma/qagamei386.so)... Sys_LoadDll(/user/r/rob/data/q3/dev/ccrma-kdevelop/build/release-linux-i386/ccrma/qagamei386.so) failed: "Failed loading /user/r/rob/data/q3/dev/ccrma-kdevelop/build/release-linux-i386/ccrma/qagamei386.so: /user/r/rob/data/q3/dev/ccrma-kdevelop/build/release-linux-i386/ccrma/qagamei386.so: undefined symbol: foo"
references
port forwarding
- http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
- http://www.practicallynetworked.com/sharing/app_port_list.htm
Each computer playing Quake III must use a different port number, starting at 27660 and incrementing by 1. You'll also need to do the following:
1. Right click on the QIII icon 2. Choose "Properties" 3. In the Target field you'll see a line like "C:\Program Files\Quake III Arena\quake3.exe" 4. Add the Quake III net_port command to specify a unique communication port for each system. The complete field should look like this: "C:\Program Files\Quake III Arena\quake3.exe" +set net_port 27660 5. Click OK. 6. Repeat for each system behind the NAT, adding one to the net_port selected (27660,27661,27662) IN UDP 27660 (for first player)
"Quake3 uses ports 27960-27961.. these are the only ones you will need and it is guaranteed 1005 to work."
+set dedicated 2 +set net_port 27970
dev shortcuts
171.64.197.200: 27660-70
- after compiliation, move files from baseq3 to ccrma directory and then run
rm -rf ccrma && mv baseq3 ccrma && ./ioquake3.i386 +set sv_pure 0 +set fs_game ccrma +devmap space +set vm_ui 0 +set vm_cgame 0 +set vm_game 0 +set cg_draw2d 0 +set cg_drawGun 0
- run dedicated server on port 27660
./ioquake3.i386 +set sv_pure 0 +set fs_game ccrma +devmap space6a +set vm_ui 0 +set vm_cgame 0 +set vm_game 0 +set cg_draw2d 0 +set cg_drawGun 0 +exec q3osc.cfg +set dedicated 1 +set net_port 27660
- run regular game on port 27660
./ioquake3.i386 +set sv_pure 0 +set fs_game ccrma +devmap space6a +set vm_ui 0 +set vm_cgame 0 +set vm_game 0 +set cg_draw2d 0 +set cg_drawGun 0 +exec q3osc.cfg +set dedicated 0 +set net_port 27660
- screenshot location
~/.openarena/ccrma/screenshots
- set third-person view properties
/cg_thirdPerson (0/1; default: 0) /cg_thirdPersonAngle (0-360; default: 0) /cg_thirdPersonRange (default: 40)
- set custom video size: for linux larger monitor @ ccrma:
/r_mode -1 /r_customheight 1021 /r_customwidth 1672 /vid_restart
- for linux:
/r_customwidth 1275 /r_customheight 960
- random video properties
r_ext_texture_filter_anisotropic 4 r_flares 1 cg_shadows 2 r_stencilBits 8 r_detailTextures 1
- turn off blood
/com_blood 0
things to think about
- Bi-directional communication: ChucK <--> ioq3
- VideoTrace
- head-tracking with wiimote as lean-controller?
- another homing missle approach
- l3dgeWorld
- Stanford's Jeremy Bailenson VR
- virtual world resources
- SARC Sonic Lab
- q3 on PocketPC
- Q3ce Google Code page
- Q4 SDK
- OpenArena Message Boards
- Serious Games Summit
- Phoronix: Linux & Solaris Hardware site
- Kandinsky: "Point and line to plane"
- q3 bsp structure (from Stanford EE)
Subversion Repository Setup
svn co svn+ssh://cmn51.stanford.edu/user/r/rob/svn/q3osc
[cmn51 rob] ~/data> svnadmin create --fs-type fsfs svn [cmn51 rob] ~/data/q3osc/dev> svn co file:///user/r/rob/data/svn Checked out revision 0. [cmn51 rob] ~/data/q3osc/dev> cd svn [cmn51 rob] ~/data/q3osc/dev/svn> ls [cmn51 rob] ~/data/q3osc/dev/svn> svn mkdir q3osc A q3osc [cmn51 rob] ~/data/q3osc/dev/svn> svn commit -m "Setting up empty q3osc directory - rob" Adding q3osc Committed revision 1. [cmn51 rob] ~/data/q3osc/dev/svn> ls -al total 32 drwxr-xr-x 4 rob users 4096 May 6 22:27 ./ drwxr-xr-x 3 rob users 4096 May 6 22:25 ../ drwxr-xr-x 3 rob users 4096 May 6 22:27 q3osc/ drwxr-xr-x 6 rob users 4096 May 6 22:28 .svn/ [cmn51 rob] ~/data/q3osc/dev/svn> cp -r ~/data/source/q3osc/* q3osc/ [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> ls -al total 1184 drwxr-xr-x 5 rob users 4096 May 6 22:31 ./ drwxr-xr-x 4 rob users 4096 May 6 22:27 ../ drwxr-xr-x 3 rob users 4096 May 6 22:30 build/ -rw-r--r-- 1 rob users 6729 May 6 22:30 ccrma.kdevelop -rw-r--r-- 1 rob users 947792 May 6 22:30 ccrma.kdevelop.pcs -rw-r--r-- 1 rob users 5991 May 6 22:30 ccrma.kdevses drwxr-xr-x 25 rob users 4096 May 6 22:31 ccrmamod/ -rw-r--r-- 1 rob users 755 May 6 22:31 devnotes -rw-r--r-- 1 rob users 756 May 6 22:31 devnotes~ -rw-r--r-- 1 rob users 10405 May 6 22:31 Doxyfile -rw-r----- 1 rob users 59721 May 6 22:31 Makefile -rw-r----- 1 rob users 59722 May 6 22:31 Makefile~ -rw-r--r-- 1 rob users 564 May 6 22:31 Makefile.local -rw-r--r-- 1 rob users 564 May 6 22:31 Makefile.local~ drwxr-xr-x 6 rob users 4096 May 6 22:28 .svn/ [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> svn add * A build A build/release-linux-i386 A build/release-linux-i386/client A build/release-linux-i386/client/be_interface.d ... ... ... A Makefile.local~ [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> ls build/ ccrma.kdevelop ccrma.kdevelop.pcs ccrma.kdevses ccrmamod/ devnotes devnotes~ Doxyfile Makefile Makefile~ Makefile.local Makefile.local~ [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> svn commit -m "Initial code check-in; entire project + bins, maybe a bad idea" Adding q3osc/Doxyfile Adding q3osc/Makefile Adding q3osc/Makefile.local ... ... ... Adding q3osc/devnotes~ Transmitting file data ............................................................................................................................................................. Committed revision 2. [cmn51 rob] ~/data/q3osc/dev/svn/q3osc> svn log ------------------------------------------------------------------------ r1 | rob | 2008-05-06 22:28:14 -0700 (Tue, 06 May 2008) | 1 line Setting up empty q3osc directory - rob ------------------------------------------------------------------------ [cmn51 rob] ~/data/q3osc/dev/svn/q3osc>
bundle data: 1/13/08
196 byte message: 23 (#) 62 (b) 75 (u) 6e (n) 64 (d) 6c (l) 65 (e) 0 () 0 () 0 () 0 () 0 () 0 () 0 () 0 () 1 () 0 () 0 () 0 () 18 () 2f (/) 63 (c) 6c (l) 61 (a) 73 (s) 73 (s) 6e (n) 61 (a) 6d (m) 65 (e) 0 () 0 () 2c (,) 73 (s) 0 () 0 () 70 (p) 6c (l) 61 (a) 73 (s) 6d (m) 61 (a) 0 () 0 () 0 () 0 () 0 () 18 () 2f (/) 70 (p) 72 (r) 6f (o) 6a (j) 65 (e) 63 (c) 74 (t) 69 (i) 6c (l) 65 (e) 6e (n) 75 (u) 6d (m) 0 () 0 () 2c (,) 69 (i) 0 () 0 () 0 () 0 () 0 () 54 (T) 0 () 0 () 0 () 1c () 2f (/) 6f (o) 72 (r) 69 (i) 67 (g) 69 (i) 6e (n) 0 () 2c (,) 66 (f) 66 (f) 66 (f) 0 () 0 () 0 () 0 () 42 (B) ffffffcc (?) f () ffffffaa (?) 45 (E) 1f () 6e (n) 0 () ffffffc5 (?) 11 () ffffffdd (?) ffffffd0 (?) 0 () 0 () 0 () 14 () 2f (/) 6f (o) 77 (w) 6e (n) 65 (e) 72 (r) 6e (n) 75 (u) 6d (m) 0 () 0 () 0 () 2c (,) 69 (i) 0 () 0 () 0 () 0 () 0 () 0 () 0 () 0 () 0 () 14 () 2f (/) 74 (t) 61 (a) 72 (r) 67 (g) 65 (e) 74 (t) 6e (n) 75 (u) 6d (m) 0 () 0 () 2c (,) 69 (i) 0 () 0 () 0 () 0 () 0 () 37 (7) 0 () 0 () 0 () 10 () 2f (/) 62 (b) 6f (o) 75 (u) 6e (n) 63 (c) 65 (e) 0 () 2c (,) 69 (i) 0 () 0 () 0 () 0 () 0 () 1 () 0 () 0 () 0 () 14 () 2f (/) 65 (e) 78 (x) 70 (p) 6c (l) 6f (o) 64 (d) 65 (e) 0 () 0 () 0 () 0 () 2c (,) 69 (i) 0 () 0 () 0 () 0 () 0 () 0 ()
[ 000000001 /classname "plasma" /projectilenum 84 /origin 102.030594 2550.875000 -2333.863281 /ownernum 0 /targetnum 55 /bounce 1 /explode 0 ]
/projectile "plasma" 0 87 894.454651 184.281860 -8038.076172 -1079107888 0 0
current work paths
svn checkout svn+ssh://gate-ccrma.stanford.edu/user/r/rob/svn/q3osc/
svn repo: /user/r/rob/svn/q3osc/
ccrma: ~/dev/svn/
macbook pro: /data/Projects/q3osc/svn-work/
~/dev/svn/q3osc/build/release-linux-i386>
licensing
- oscpack
- open sound control
- openarena
- ioquake3
- quake3
- ioquake3
Unsolicited user-feedback
"So, normally I would be really cynical and make fun of your SLORK shit, but I actually found that video extremely cool. It's like a concert of people playing the DOOMophone. And there was something so visually pleasing about watching the video when combined with music, which was so much better than the expected loud sound of gunfire, etc. Awesome, seriously!"
Development/Community Links
Best link ever: ioquake3 mailing list
Second best: ioquake3 bugzilla
~rob
oscpack
Julian Oliver's q3apd
original project page
ChatBear thread 1
ChatBear thread 2
Tremulous thread 1
Tremulous thread 2
Electro-music.com thread
Tutorial for OSC hooking games
Bot Editing
Backend details
q3 autoexec cfg maker
console commands
Q3 mod making
trap calls in q3
server config
rcon php
iPhone q3
Linux Video Editors
3D terrain generation tutorial
mixing C and C++
more c/c++ mixing
Good description of the q3 VM, Client and server roles, and console vars
demo recording
ioquake3 on PS3
Official PS2-Linux page
Quake-3 Networking
q3map2build (.aas file maker)
Map editing hints
Saffire review
Saffire review2
Saffire review 3
Saffire specs
skinning faq
q3 with Wii C++ port
q3a server guide
dumpOSC
Focus On Mod Programming in Quake III Arena by Shawn Holmes
Panning
cvar guide
extended cvars
threading
thread thread
baylor threads stuff
rcon python class
ron stuff
console rcon app
quake3 papers/tools via link
C++ referencing C funtions