Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

 
Advanced search

1065955 Posts in 43497 Topics- by 35516 Members - Latest Member: Onipunks

November 23, 2014, 06:36:27 PM
TIGSource ForumsCommunityCompetitionsEXCOSC game jam Aug 17th-24th
Pages: [1] 2
Print
Author Topic: EXCOSC game jam Aug 17th-24th  (Read 7482 times)
NiallM
Level 1
*



View Profile WWW
« on: March 05, 2013, 04:06:58 AM »



Finished Games

This Mortal Coil

by Sam____
Download - Announcement post

Gunpowder's Kiss

by NiallM
Download - Announcement post


What's this?
A game jam where every game is network aware and responds to (and transmits) the exact same set of Open Sound Control messages. A shared network protocol means that all the games made for the jam can be hooked up to each other, with chaotic, unpredictable, and exciting! results.

What's Open Sound Control?
Quote
OpenSound Control ("OSC") is a protocol for communication among computers, sound synthesizers, and other multimedia devices that is optimized for modern networking technology
Essentially it's a very simple means of communicating over a network. Although it was designed primarily for audio applications the specification is very open-ended, and can be used for almost anything.

The specification can be read here.

What are the rules?
Every game must respond to and transmit the same set of OSC messages. These messages are:
Code:
/player/position/x
/player/position/y
/player/colour/r
/player/colour/g
/player/colour/b
/player/trigger

/entityX/position/x
/entityX/position/y
/entityX/colour/r
/entityX/colour/g
/entityX/colour/b
(where X is a number 0..7; i.e. your game should be designed so that there are 8 networked entities of some kind, in addition to the player)
All messages should be made up of one of the above addresses and a single float value, normalised to 0..1. Messages can be sent individually or as part of an OSC bundle.

The jam will start on August 17th and finish on August 24th, but the dates are flexible. If you need more time, take it!

How do I?
Depending on your tool/language of choice, the biggest hurdle may be implementing the OSC protocol. To simplify things, I've put together a simple lua project which will receive and transmit OSC messages, based on my own 2d game engine:

Download it here
(see below for more information about it)


If you'd rather not use lua, here's some OSC libraries which might be useful:

Alternatively, if you have access to sockets for networking, you could always code your own OSC implementation. The specification is not particularly complicated, and you could ignore the parts that we're not using for the jam (timetags, data types other than float etc.).

This Part's Optional
I've written a combined game launcher and patcher for the jam, to make it easier to setup games and route messages between them. If you want your game to play nicely with the launcher however, it does impose a couple more requirements on your game. See this post for details.
Download the launcher here



[original post follows]

Hi!

Prompted by this game by Chris Novello, I want to host an Exquisite Corpse Open Sound Control game jam.

The idea is that we each (separately) make games that transmit and respond to a common set of OSC messages, and then connect them all together and see what happens Grin

For now I'm going to leave the details up for discussion, but here's my thoughts:
  • The first thing to do is settle on a common OSC address structure so that we don't need to rely on intermediary programs to translate messages from one game to another.
  • Chris Novello's code-bending FAQ offers some useful suggestions.
  • I'm in favour of making the addresses as generic as possible, so something along the lines of /trigger, /setPosition x,y,z, /addEntity etc. I'm open to suggestions.
  • We should probably have a list of OSC resources here. I have a fairly robust c++ OSC lib I could make available, but I'm sure there's plenty of other options out there.
  • Of course, the use of OSC means the games could be hooked up to all sorts of other things. Using something like Duration to record and playback a speed run, for example Grin
« Last Edit: August 26, 2013, 07:01:10 AM by NiallM » Logged

jonbro
Level 3
***



View Profile
« Reply #1 on: March 05, 2013, 04:59:10 AM »

Cool! I had figured that piece was your inspiration. It strikes me that what is interesting about it is the ability to bend the internals of the game though, perhaps rather than just consuming osc data, it would be more interesting to match the api of that particular piece, so  that they can interoperate , and control each other.
Logged

NiallM
Level 1
*



View Profile WWW
« Reply #2 on: March 05, 2013, 06:12:48 AM »

Oh yeah, I definitely agree there's huge potential in being able to modify the other game's internals on the fly like that. I wouldn't want to restrict that at all.

My only reservations about using War Machine's api is that it might be a little limiting? 6 inputs and 4 outputs (counting the position and colour addresses as single inputs) seems like it might not be enough? Then again, maybe a limited address space is a benefit.

The other thing that comes to mind is the role of the player in this. I was originally thinking of this as a series of chaotic asymmetric multiplayer games, but of course you could easily set up a loop that involves no human input, and continually modulates and adapts according to the OSC data being passed around. The games could play themselves. Really interesting... Grin
Logged

jonbro
Level 3
***



View Profile
« Reply #3 on: March 06, 2013, 03:45:24 AM »

I think the only issue with the war machine api is that it is too specific... I think it would be more interesting to have a fixed number of the following: (int, float (0-1), color, bang Vector2)... I guess this is what you are suggesting though. I think it would be useful to mask all of the entity stuff, and limit it to a fixed length array for each of these. Limits breed creativity.

Not sure how these would be controlled either. It would be cool if they could all run simultaneously, with separate inputs, I am imagining an arcade where the more machines are being played, the crazier the overall state of the arcade is. I didn't imagine that the osc api would be used for control input, but that is an interesting idea as well.
Logged

jonbro
Level 3
***



View Profile
« Reply #4 on: March 06, 2013, 03:51:28 AM »

actually looking closer at the warmachine api it is cool that it only has two types... very control voltage! I bet you could get away with just one and do rising edge / falling edge for triggers.

Re: OSC... I have a good thing on the old system that I worked on, but now that I have moved to unity, I don't have a good one anymore. I remember messing with one that was on the unity forums a while back, but it was hard to get working. I could dig that up though. Also I have worked with one for flash and had a ton of difficulty getting that running smoothly. That might be a sticky bit in this project.
Logged

NiallM
Level 1
*



View Profile WWW
« Reply #5 on: March 07, 2013, 02:27:46 AM »

actually looking closer at the warmachine api it is cool that it only has two types... very control voltage! I bet you could get away with just one and do rising edge / falling edge for triggers.
Yeah, I really like that aspect of it. It bugs me a little to transmit positions and colours as separate x/y/r/g/b messages, but it makes a lot of sense if you want to mix and match inputs/outputs. Have you seen his illucia project? I could see an arcade set up with a bunch of similar arduino patch-boxes letting people reconfigure how the games communicate with each other as their friends are playing them.

So I think it's worth specifying a single float type (0->1) for all messages. Whether we wind up re-patching the games like that or not, it definitely makes for a more flexible system. (something that might be cool with this approach is a game that acts as a patch-board itself, routing its input signals to different outputs according to the player's input)


I think it would be useful to mask all of the entity stuff, and limit it to a fixed length array for each of these. Limits breed creativity.
I'm cool with that. I'm still a little unsure about how to come up with a useful, generalised set of addresses to use though. Would something like this work?
Code:
/player/posX
/player/posY
/player/colourR
/player/colourG
/player/colourB
/player/trigger

/entity/1..8?/posX
(ditto)
I don't know if that's too many addresses though, and it doesn't expose much in the way of game internals (not sure how to do that in a general way).


Re: OSC... I have a good thing on the old system that I worked on, but now that I have moved to unity, I don't have a good one anymore. I remember messing with one that was on the unity forums a while back, but it was hard to get working. I could dig that up though. Also I have worked with one for flash and had a ton of difficulty getting that running smoothly. That might be a sticky bit in this project.
Yeah, I did wonder about that. I'm not really familiar with languages other than c/c++ so I'm not sure I can be of much help there. For some reason I was under the impression there were a lot of OSC libraries out there, but doing some googling it seems most of them are c/c++ Undecided
Logged

NiallM
Level 1
*



View Profile WWW
« Reply #6 on: July 29, 2013, 12:54:26 AM »

Okay, resurrecting the thread.

How about if we set the dates for this as 17th-24th August? I figure a week's enough time to throw something together without feeling completely rushed.

For the rules I think we just specify that every game has to transmit and respond to a predetermined list of OSC messages. Is the list of addresses I posted previously good enough?


Also, since I'm probably going to be using lua for this I'll upload a full project set up to receive and transmit OSC prior to the jam. It'll have everything you need for making a 2D game without having to touch a compiler or any c++. I don't know if that's useful to anyone, but since I'll be setting up a barebones project for myself anyway, I may as well make it available to everyone.
Logged

Ragzouken
Level 0
***



View Profile WWW Email
« Reply #7 on: July 29, 2013, 01:29:52 PM »

Sounds good to me. I usually use lua and LOVE, so I can probably adapt myself to use what you're providing if making OSC work is very difficult otherwise.
Logged

jonbro
Level 3
***



View Profile
« Reply #8 on: August 02, 2013, 06:46:16 AM »

yeah, those dates are fine! happy to use your lua thing as well. I am just in the midst of porting an old lua framework (with osc support) of mine to windows, but I don't know if I will get in done in time. TOO MANY LUAS!
Logged

paulmcgg
Level 0
***



View Profile WWW Email
« Reply #9 on: August 03, 2013, 11:25:09 AM »

This is a cool idea. I've never used LUA and I'm not sure how free I am that week, but I'll have a poke around with your template when you upload and see what I can do.
Logged
jonbro
Level 3
***



View Profile
« Reply #10 on: August 05, 2013, 02:23:31 AM »

if lua isn't your flavor, this game programming framework for processing includes OSC support among other things:

http://rdlester.github.io/hermes/

this post includes code that should work in unity, for those that are into that flavor of things:

http://www.nullpointer.co.uk/content/generative-av/
Logged

NiallM
Level 1
*



View Profile WWW
« Reply #11 on: August 05, 2013, 02:43:47 AM »

Cool! Added to the main post.
Logged

NiallM
Level 1
*



View Profile WWW
« Reply #12 on: August 08, 2013, 02:39:19 AM »

Okay, I've uploaded my lua game skeleton thing. It comes with a very basic example game to show how to use it, and a bunch of API reference text files (I should have really made them html, but that seemed like a lot of extra work).

Download it here

The zip contains Windows and OSX binaries which will run any lua scripts they find in the scripts subdirectory.

My game framework does run on Linux too, but I don't know how to create a Linux binary that will work universally, so for Linux I distribute it as c++ source code and require users to compile it themselves. I also wouldn't recommend it for development purposes due to the slightly awkward folder structure the framework uses on Linux.

Download for Linux/source code here


That zip includes the MSVC and XCode project files to build the skeleton on Windows and OSX, as well as the cmake project to build it on Linux, BSD etc.


Big Disclaimer
This might be an issue for some people: The code in these zips is all licensed under the GPL, meaning any lua code you write to interface with it will also be GPL licensed. I'm assuming that the small scale nature of the jam, and the fact that lua scripts can be read by any standard text editor anyway, means this won't be a major problem.


Anyway, please let me know if it works, doesn't work, if my naming conventions are stupid etc.
Logged

paulmcgg
Level 0
***



View Profile WWW Email
« Reply #13 on: August 08, 2013, 04:15:16 AM »

if lua isn't your flavor, this game programming framework for processing includes OSC support among other things:

http://rdlester.github.io/hermes/

this post includes code that should work in unity, for those that are into that flavor of things:

http://www.nullpointer.co.uk/content/generative-av/
Awesome, will check this out.

Okay, I've uploaded my lua game skeleton thing. It comes with a very basic example game to show how to use it, and a bunch of API reference text files (I should have really made them html, but that seemed like a lot of extra work).

Download it here

The zip contains Windows and OSX binaries which will run any lua scripts they find in the scripts subdirectory.

My game framework does run on Linux too, but I don't know how to create a Linux binary that will work universally, so for Linux I distribute it as c++ source code and require users to compile it themselves. I also wouldn't recommend it for development purposes due to the slightly awkward folder structure the framework uses on Linux.

Download for Linux/source code here


That zip includes the MSVC and XCode project files to build the skeleton on Windows and OSX, as well as the cmake project to build it on Linux, BSD etc.


Big Disclaimer
This might be an issue for some people: The code in these zips is all licensed under the GPL, meaning any lua code you write to interface with it will also be GPL licensed. I'm assuming that the small scale nature of the jam, and the fact that lua scripts can be read by any standard text editor anyway, means this won't be a major problem.


Anyway, please let me know if it works, doesn't work, if my naming conventions are stupid etc.
Will have a look at the weekend. :D
Logged
NiallM
Level 1
*



View Profile WWW
« Reply #14 on: August 13, 2013, 01:58:23 AM »

I've put together a combined games launcher and patcher for the jam.

It should make it a bit easier to setup games and route messages between them.

Download it here (Windows and OSX)


To play nicely with the launcher part games do need to offer two things, however:

1.)
The game should respond to command line arguments to set the listen port, send port and send address. The arguments (respectively) are:
Code:
-lp <port number> -sp <port number> -sa <send address>

2.)
You should include screenshot.png and metadata.txt files in your game folder. screenshot.png is just a thumbnail of your game. metadata.txt is a three-line text file, with the following format:
Code:
<game name>
<game author(s)>
<short game description>

    This is entirely optional, though. The patcher part will work regardless of whether your game follows the launcher's requirements.


    Note that the patcher doesn't currently offer any filtering; all OSC messages received on a listen port will be passed to all send ports it's connected to. I may add the ability to selectively route individual messages after the jam, if that seems like a useful addition.
    « Last Edit: August 24, 2013, 08:44:31 AM by NiallM » Logged

    jonbro
    Level 3
    ***



    View Profile
    « Reply #15 on: August 13, 2013, 02:13:42 AM »

    this is slick! excited to work on it.
    Logged

    ChrisNovello
    Level 0
    *



    View Profile WWW Email
    « Reply #16 on: August 13, 2013, 02:37:49 AM »

    !!!!!!!!
    Just found out about this through createdigitalmotion.
    Super cool!

    I haven't given a public push to the (almost-finished, live beta) illucia site
    but I recently updated
    http://www.illucia.com/software/
    to include some new programs, source code, Max objects, and better user guides.

    Also, dunno if it is useful to anyone... but I've been using ".illuciamodule" files, which're just JSON.
    It makes for a quick way to parse all the IO available in a game.
    Useful for autogenerating things like Max objects, documentation, and more. I'd be happy to release my documentation generator.
    Here is PCO's, for example: http://www.illucia.com/guide/PCO/PCO.illuciamodule

    Let me see if I can block some time to work on something new in this block.. indeed I have a few ideas kicking around....!
    Logged
    NiallM
    Level 1
    *



    View Profile WWW
    « Reply #17 on: August 13, 2013, 03:08:48 AM »

    !!!!!!!!
    Just found out about this through createdigitalmotion.
    Super cool!

    I haven't given a public push to the (almost-finished, live beta) illucia site
    but I recently updated
    http://www.illucia.com/software/
    to include some new programs, source code, Max objects, and better user guides.

    Also, dunno if it is useful to anyone... but I've been using ".illuciamodule" files, which're just JSON.
    It makes for a quick way to parse all the IO available in a game.
    Useful for autogenerating things like Max objects, documentation, and more. I'd be happy to release my documentation generator.
    Here is PCO's, for example: http://www.illucia.com/guide/PCO/PCO.illuciamodule

    Let me see if I can block some time to work on something new in this block.. indeed I have a few ideas kicking around....!
    Hi! It's great to have you aboard, especially since War Machine was the catalyst for all this Grin

    I'm really excited about illucia, it's such a cool idea. I'm definitely going to have a go at building one of those controllers at some point.
    Logged

    NiallM
    Level 1
    *



    View Profile WWW
    « Reply #18 on: August 14, 2013, 02:27:05 AM »

    Relevant to this jam, I just uploaded a game I started last month which is also OSC-aware.

    I pretty much set out to make the simplest game I could think of, so there's not much to it. On the OSC side, it responds to most of the EXCOSC jam addresses, so it should play nicely with any jam games.
    Get it here


    (I also just updated both my EXCOSC base code and launcher to v1.01; the base code zip now includes a screenshot and metadata for the launcher, and I fixed a bug in the launcher where the thumbnails were accidentally being displayed slightly transparent)
    Logged

    Sam____
    Level 0
    *


    View Profile WWW Email
    « Reply #19 on: August 15, 2013, 05:26:35 AM »

    Hello,

    This looks like a lot of fun, so I made a very simple OSC template for anyone wanting to use Processing (but not Hermes). It relies on oscP5 (http://www.sojamo.de/libraries/oscP5/) for managing OSC.

    The template is set up to allow commandline arguments (I think!) but so far I've only been able to test it on OS X. Any testing of exported apps on Windows or Linux would be greatly appreciated.

    Template can be found here: https://github.com/samsheffield/EXCOSC_Template
    Logged
    Pages: [1] 2
    Print
    Jump to:  

    Theme orange-lt created by panic