Q3osc

From CCRMA Wiki
Revision as of 22:10, 11 January 2008 by Rob (Talk | contribs) (feature list)

Jump to: navigation, search
 

about

q3osc is an attempt to update the manner in which the quake3 gaming engine can be used to export player locations and entity actions outside of the q3 server via OSC. While q3osc is working from a fresh ioquake3 codebase, the inspiration came from pix + delire'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.


current status

feature list

  • individual client x,y,z coordinates: ✓
  • homing bfg: ✓
  • homing plasma: ✓
  • homing rockets: ✓
  • cvar projectile speeds: ✓
  • bounce-able plasma: ✓
  • independent plasma, bfg speeds: ✓
  • bindable homing and bounce flags: ✓
  • independently addressable osc host and port outs for client vs projectiles: ✓
"b" ("/bind b bounce") enable/disable plasma bounce
"h" ("/bind h homing") enable/disable plasma, rocket and bfg homing
/osc_projectile_hostname missle-events can have their own OSC target IP
/osc_projectile_port missle-events can have their own OSC target Port
/osc_client_hostname client-events can have their own OSC target IP
/osc_client_port client-events can have their own OSC target Port
g_homing_speed initial and tracking speed for all missles fired with homing enabled
g_plasma_speed speed for non-homing plasma bolts
g_plasma_bounce enable/disable (1/0) bouncing for plasma bolts
g_bfg_speed speed for non-homing bfg bolts
g_plasma_time set decay/fade-out time
g_bfg_time set decay/fade-out time
g_rocket_time set decay/fade-out time

update history

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 $<

Makefile
Makefile.local

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

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.


dev shortcuts

rm -rf ccrma && mv baseq3 ccrma && ./ioquake3.i386 +set sv_pure 0 +set fs_game ccrma +devmap fan +set vm_ui 0 +set vm_cgame 0 +set vm_game 0


things to think about

VideoTrace
head-tracking with wiimote as lean-controller?
another homing missle approach

links