Drone Runners
  From the author's blog:

You might be a little confused right now, but please bear with me. During my college research in deep-space radio astronomy, I detected repeating signals which I was finally able to decode, using the metaphor of drone space ships blowing each other up.

What is ACTUALLY happening might be something else, but so far nothing has broken with that metaphor.

By eavesdropping on their packet communications, I was able to detect a large number of these drones, spread densely throughout our galaxy, using a communications network I call DroneNet.

I have no idea who made them.

What you're holding is the remote control for an actual drone spaceship, which is located somewhere in our galaxy.

Sorry for the crude graphics, but this is all just based on telemetry received from the drone. The real action is happening somewhere else.

Given a Starmap, you can control the drones in a particular star system of our galaxy. I've included some Starmaps to start you off, but you should share any others you find.

It's fun exploring our galaxy, and blowing up each other's drones, and no harm done since they self-replicate as needed. At least that's what I thought.

But now it turns out there are some other players I didn't know about.

So be careful out there. And I recommend not letting them know where you're from. No sense leading them back here to Earth.

synspace privacy policy   Making Your Own Starmaps  

How It Works

Most of the User Interface is rendered directly by the drone's AI, or maybe from some camera drone nearby. I just provided some drawing primitives based on my synSpace game for Windows. But the AI is behind it all. really, and it is constantly changing.

I know it listens to me, all the time, and I think sometimes it tries to talk. I'm pretty sure it sings.

As to the UI, here's what I've got working so far:

  * First, you connect to my server, which connects you to DroneNet via a radio telescope
* DroneNet routes your commands to the Star System indicated by your StarMap
* You choose one of the available drones idling there (they are color-coded).
* Other pilots, up to eight at a time, can join you by selecting the same Starmap Instance.
* Once you connect to your drone ship, you can customize it a little before launch.
* Select your ship SHELL, your pilot FACE, and NAME, creating new ones as needed.
* When you're ready, you LAUNCH your drone, at which point it's a melee battle in space.
* If your ship gets destroyed, it is instantly replicated and you can choose it again, or a different one.
  I have also added some minor social networking tools to help you keep track of your fellow pilots and maintain a competitive environment with scores and ratings.
  Once you have a color (it's yours until you disconnect), you can configure your drone ship. Each ship starts with the same number of pods, which you allocate between Weapons, Shields, or Engines as you like. Also, you can configure the shape of your ship's appearance, or SHELL. You may also customize your pilot FACE and pick a NAME.

  Once you have launched your drone, there are two primary controls -- set up like a game controller. On the right is your NAV Stick, which controls your heading and engines. On the left is your TRIGGER (with auto-repeat) and a row of weapon/item selectors below.

As you fly about, with inertia, and engines which fire only forwards and backwards, you will discover a variety of 'power ups' which you can fly directly over to pick up. PowerUps are usually additional ship pods, or energy refills, but occasionally you find offensive or defensive devices and weapons.

Plus some Star systems left behind some interesting structures and artifacts. It all varies with the Starmap you select.

DroneNet provides its own built-in Users Guide that it shows on power up. That's probably got the most up to date information since it comes straight from the AI.

It understands a lot about us. Almost like it's studying us.


Apparently, the same self-replication technology that rebuilds the drones can also create new hulls from scratch, based on your designs. I've included a simple thumb-friendly shell designer which can send the necessary construction commands for you.

You start out with just the stock Shells that come with the app. But you can clone them and then edit your own copies to create a set of custom ships to use.

The editor shows the current hull shape (Shell) as a series of connected lines, with 'handles' at the vertices, and in the middle of each 'bone.' Drag vertices (round handles) as you like. Drag bones (square handles) to 'break' them and create a new vertex, that you can drag around.

Don't forget to save your changes!

Your designs are share automatically with those with whom you make contact.


The AI indicated it felt more comfortable if the individual pilots provided an identifying image of themselves. Hence, in addition to the SHELL that represents the drone, you can provide a FACE that represents you, the pilot of the drone.

It's still not clear what the AI wants these for, but since there is no requirement that they resemble you in any way, it seems harmless enough.


As the AI works on its speech skills by listening to what we say, I've had some success communicating with it via music. I've been working on a series of PATCHes (the knob settings you need for the built-in music synthesizer to recreate a particular sort of sound), and you should feel free to clone and improve them at will.

There's also a GROOVE EDITOR for recording and re-mixing loops and jams into mutatable music. You'll find some tips here, and here but as I said, the AI is constantly rewriting the interface!

STARMAP EDITOR (semi-vaporware)

Whatever powers the self-replication is apparently cheap enough to allow you to build huge structures in space, creating barriers to travel or weapons fire. Structures which are millions of km in size.

You can clone any existing Starmap that you have collected, and then make changes to it, save it to a new name (hopefully retaining some sort of chain of authorship) and then share it with others.

In addition to creating gigantic 'barrier' structures in space, you can also move the stars and planets around as you like... and vary gravity itself.

Drop NPC "Bosses" and other scriptable objects for shared adventures, quests, races, duels, etc.

Some maps might have NPC bad guys and support cooperative play. Some maps might have highly storied quests, issued from 'planet's via radio beacon. 'help us from the pirates' 'bring medicine', etc.

Ideally, people should be able to just add simple extras to an existing starmap, but all pilots must use an identical version of the starmap. (probably same version as current moderator)

Pragmatically, a Starmap is just a text file you could write yourself from scratch. It's "top half" is in INI file format and just declares what all is in the star system the map represents. The "bottom half" is an optional Lua script which provides scriptable 'adventures' while on that map. Sort of like HTML with javascript, only some quirky INI and lua, instead.

If you're interested in becoming a Starmap Designer, check out our Starmap Designer Resource Center!


I think the drones might be trying to learn our language. You might think about what you say in front of one. Others might be listening! I've added an option to squelch your microphone, but otherwise -- they're listening.. and learning.


I promise, you will be able to turn this off.






synSpace: Drone Runners
Lest the back story encourage you to believe otherwise, I assure you this is just a game, and does not depend on the hijacking of any Radio Telescopes or the breaking of any laws at any time.

At one level, this is just a port of my game, synSpace for Windows, to the Android platform. But really this project came out of my long term goal to eventually make Well of Souls: Rune Runner a more complete experience, with player-created worlds, like its forbear, my game Well of Souls (for Windows). Only in 3D this time.

To take Rune Runner to the next level, I needed to make it multiplayer, and provide content creation tools and a path for submission. Note that no one asked me to do this, nor is there much of a pressing need for this, it's just how I choose to spend my weekends for therapeutic reasons :-)

Ultimately, I would like a self-managing ecosystem of asset types (skeletons, animations, sounds, textures, materials, instruments, compositions, npcs, maps, quests, etc) which were interchangeable within the context of my android apps (to the degree that makes sense/is possible), without particularly trying to create a new Open Standard and encourage others to join it. This is just a cul-de-sac on the march to the future.

But in my dream, you would use finger-friendly tools to make cute little critters that you could then arm and equip and drop into some jungle in a Rune Runner map you just made and shared. And your critters and map would ideally be archived in some master database other players could browse when making their own maps. All assuming I declare some appropriate Terms of Use that explains what the game will do with your creation. It probably will NOT pay you. BUt the idea is that it SHOULD credit you.

And you should play along by not creating obscenities. And there should be a mechanism for preventing you from tainting innocent minds.

That's the little dream. We'll pretend it's a plan.

Anyway, so what does synSpace have to do with Rune Runner?

Not a lot. synSpace is a 2.5D space game, a la the original SpaceWars, with a lot of wiggly little details, and getting more wiggly every week.

But being a pretty simple game at its core allowed me to use it as a driver for improvements to my python based 'mixter' server (Mix for android, as it were). I made that server for 'WarPath for Android' but it only supported WarPath, where the online metaphor is "all the players launch at the same time" and Rune Runner needed more of a drop-in, drop-out as you like, but still offer synchronized experiences.

So, I added some features like:

* drop in play

* solid infrastructure for secure sessions

* possible access to SQL databases

* more flexibility in 'intent' declararion of player (I want THIS map, with THIS many peopld, using THESE rule variations, etc, ) when selecting a session assignment *including not assigning you to a session if people in that session have you on mute) These intents need to be game agnostic since Mixter doesn't know game-specifics other than "oh, it's a synthetic reality android game" It's just pooling you with people who have declare similar intents.

But mainly this was to solve the WarPath problem of "people are unwilling to wait for other players to appear, if they have nothing to do in the meantime." The server logs are full of sad stories of players just missing each other by a few seconds.

So, with synSpace: Drone Runners, the goal is to have you fully engaged in a multiplayer session within just a few seconds of launching the app (had it down to 2.5, but now it's up to 5). That assumes it will resume with your previous intent (from the last time you played), and then you can change your intent and look for a different session if you like, but you are ON THE SERVER right away, no matter what else you do. So other people see you and can play you immediately, so fewer people miss each other and you have a more predictable experience when you play.

Plus the game itself gives you lots of activities to fill the time with, including the creation of assets using integrated finger-friendly editors and a simple peer-to-peer asset sharing scheme. (sorry, can't be used to move non-game files, and will be unable to carry that illegal video download you have there!)

And that's what makes it a bit like Well of Souls: Rune Runner. So the plan is to get all the infrastructure working in synSpace, and then port it back into Rune Runner.

The Developer Blog for synSpace::Drone Runners (for Android)

Now I will just blabber on about synSpace, what I did, what's working, screenshots, etc. I don't expect anyone to be reading this, but feel free to surprise me with comments and suggestions.

Here's the current Splash Screen. For ME, this is high art:

The first time you start the app, it will insist on your picking a name for yourself. It's just for fun. Don't use your real name! Well, you CAN, but it's just for fun, so why make it about privacy? After the connection to droneNet completes, you are taken to the currently selected Star System (the tutorial system for a newbie) and offered the selection of one of eight drone star ships available in that Star System.

The drone channels are color coded, pick your preferred color, if it is available.

While you think about what color you want, the built-in Handbook runs a slide show for you with more backstory, and then the basic operation of the game

That's also an example of a supported 'Collectible.' In this case, a 'Face.' You create them, clone them, edit them, and share them. Collectibles are shared automatically when needed, but that may or may not grant the right to thereafter 'use' the asset (in this case, maybe you cannot select someone else's face (or clone it) without some in-game interaction. Like "Hey, let's swap faces!") But while you are wearing your custom face, everyone who encounters you gets a copy of it, which the game retains in a collection cache (you COLLECT assets. It's a meta game!) that they can review later.

Mostly I do NOT want to 'lock' assets, but I see value in a game mechanic where you share faces via facebook or some other social media concept. But stop right now thinking that your creation will be 'protected from re-use' as I can make no such promise.

Here's another asset type, the 'Shell' (aka 'Hull'). It represents the cosmetic outer appearance of your drone (while the Face documents you, the remote pilot).

Each Asset type requires an editor, and while I think it would be cool if all the editors where HTML5 thingamies that maintained a master database that was then accesssed by the games... well, for now the editor is built into the game.

And if anyone is keeping track, yep, another lost business opportunity if I can't spin the editors out as standalong apps for another buck each.

But my favorite new Asset type in synSpace is the Musical Instrument with this editor:

Why a Music Synthesizer in my Space Game?

Well, because Rune Runner will want music! (see above until that makes sense). I can also let you define personal entrance music that plays when you join a session. Maybe. But certainly when you script a synSpace adventure where some malevolent force comes on screen, you'll definitely want to have some Theremins playing, won't you?

There is pretty much no documentation yet for the synth, and it's a moving target, but it's what I was working on lately, so it's dear to my heart at the moment. So I will now document it!

Obviously, if you tap a note on the keyboard, you hear a sound. The built in oscilloscope depicts the sound it made (you can pinch zoom and scroll that).

Being an 'additive' synthesizer, the actual sound is the sum of a bunch of sine waves, each generated by its own "Harmonic Oscillator" These are defined by those green/yellow rectangles with the "1x, 2x, 3x" text below them. touch inside of one, then drag up or down (even outside of it, just don't lift your finger) to raise or lower the little attenuation control for that oscillator.

The higher the bar, the louder that sine wave will be in the mix of sine waves you hear.

But the loudness is also controlled by a Contour generator, which you can see in the section above the harmonic oscillators. Contours are triggered by you tapping a key on the keyboard. They then play out a little loudness envelope (a little pulse that indicates how fast the note starts to sound, and how slowly it drops off when its done). You drag those little verts around to control the shape.

Each Harmonic oscillator is driven by one of the countour generators (I offer six total at present). But it doesn't have to all be the same CG. You select a particular CG by tapping its tab along the top. That shows its shape in highlight, but you can dimly see all the other contrours in the background to help you line things up.

By default (until you change it), all oscillators are driven by the far left CG, so they all get the same loudness shape, and only their personal attenuators control how loud one sine wave is relative to the others.

But if you then assign SOME oscillators to OTHER CGs and then modify those CGs, you can achieve effects like 'the fundamental plays immediately, as do the harmonics, but the harmonics drop off quickly, while the fundamental remains'

You do that by assigning the higher harmonic oscillators to CGs that start out strong, but fade out more quickly than your 'main' loudness CG.

You assign a CG to an oscillator by: 1.) select the CG by its tab, 2.) hold finger still on the oscillator for about a second.

You can tell which is assigned by selecting the CG and seeing which oscillators are GREEN (assigned to this CG) or YELLOW (assigned to some other CG)

Fun with Music

So, you might be thinking "my god, he's porting ALL of his Windows games to android, and doing most of them inside of synSpace itself!" And yes, this probably is along the lines of my Windows game synJam (for Arcadia), and I WILL seek to eventually offer live performance with the other people in the session.

By that point, I should definitely make a separate app that focuses on that, if only to make it easier to avoid rendevous with people who insist on playing their latest song to you.

Musical Misogyny aside (I didn't mis-spell that, I made it up! Unless I spelled it right, in which case, look how smart I am!).

My thin rational is, of course, that Well of Souls world developers enjoyed providing music, and thus I need to be able to do that, in general, and why not just do it from scratch with my own synthesizer than just use some easily available MIDI code for android?

Shut up!

synJam INVENTED fun with midi! Actually, you probably can plug a nice MIDII keyboard into an android usb plug, and maybe I will support that someday. And I likely will offer a midi file importer/exporter of some form, but my internal music format is not pure midi, though it is midi-like. (key up/down events, channels, etc)

synJam addressed latency by having the performance be a river that passed by all the players at a different time. You could play along with anything you heard coming down the river from above, and people below you on the river heard that same thing with your stuff added in at the appropriate time, but no oone could hear anyone 'down river' of them, or at least not without noticable lag.

But, in synJam, all the performances ended up inside of the MIDI file it produced, so playback included all parts, some of which were then heard for the first time by the upstream musicians, but the idea was you would contribute to a track multiple times until eventually everyone had a solid track they liked (which then looped while other musicians achieved their perfect recording)

At least that was the idea, and I plan something similar here.

Just above the piano keyboard is a row of 15 buttons (empty rectangles in the screenshot). The first six buttons are shortcuts to your favorite instruments. They work a bit like a car radio. Tap to change patch, orlong press to bind slot to current patch..

The rest of the buttons in that row generally toggle additional control windows, like the PATCH and GROOVE browsers, the oscilloscope, the PATCH editor, etc.

On the far right is the 'social' key you use to step through all the social keyboard choices (music being just one of them)

Musical Jams and Collaboratve Compositions

My PLAN is to have LOOP button which opens a panel (replacing the instrument editor in this screenshot) that shows a diagram of a multi-track, looping performance of some length. The idea would be that within a given server session, all players are synchronized to a common loop. They play along with the timing of the loop as they see it, and other players hear their contribution either rigth away, or 'the next time around' depending on whether the note arrives before or after that loop point passes by on the listener's device.

Probably some finite number of tracks (midi limits probably), and you have to grab a track for YOU, so some moderatino required. But you can finishe with one track, and fgrab aother for a subsequent loop.

That would be 'live' mode, or a 'jam'

But you could also just ignore real time and click anywhere on the loop to lay down a new contribution at that point. All the data is still being shared, so when you play your local copy of the loop, it contains all that is known, even if you weren't listening to it in real time.

That's more of a collaborative composition where you might even start with a prototype MIDI file (like synJam did) to riff off of.

And just to get my Windows game Collaboration involved, maybe a collaboration for Music, where players offer tracks, and get voted for inclusion in the piece, which is composed one measure at a time.

See, life is fun when rules are few!

I should point out that as in love as I am with my synthesizer, you won't really have any trouble distinguishing it from a professional instrument, and the key lag depends on a lot of things not entirely under my control. On most tablets (well, that are a year or two old at least), there is a noticable lag from the moment you tap the key until you first hear the note. Sometimes real instruments do that as well (pipe Organs) but it doesn't make them easy to play.


Update: After writing that, I went ahead and added a 'sequencer' and a new collectible type, called GROOVE. A groove contains up to 4 channels of 'live piano performance' as well as up to fifteen pre-programmed LOOPs which can be turned on and off during a live performance. So, where a PATCH represents a certain kind of instrument sound, a GROOVE represents a multi-track performance that can be played back in whole or part.

Like all collectibles, you can clone and edit them, replacing loops, instruments, and tracks as you like, while preserving other elements of the original

As I type this, the way to share music with other players is:

1) make some interesting PATCHes on your own

2) use your PATCHes to record a GROOVE

3.) on the GROOVE panel, tap USE IT to select it as your current GROOVE

That's similar to how you specify your FACE and SHELL. After a change, within a few seconds, the other pilots in your star system have received the 'collectible id' of your new GROOVE.

Thus everyone you meet sees the id of your GROOVE. They then look to see if they have a copy (and if they are ignoring you or something) and then ask you for the actual GROOVE if they don't have it.

You comply (automatically) by sending it to them, whereafter it appears in your GROOVE browser.

On the Pilot Info page, a new button appears if you know of a GROOVE selected by this player. If you tap that button it opens the GROOVE browser with that groove selected. You can read about it, or just press PLAY to hear it.

When you receive a new GROOVE, you automatically unpack it and get the PATCH ids that it uses. And again, if you are missing any of them, you ask the same guy for a copy.

Bottom line, with minimum effort on anyone's part, your GROOVE is sent to people who care, and people can then easily PLAY it, if they choose to. Obviously, being able to, under the proper circumstances, get more live music triggers that turn things on and off automatically is also desirable, so long as the listener has adequate control against spam in sound or bandwidth.

That's not synJam, but it DOES allow collaborative music projects :-)


Update: Finally started the Track Editor, which lets you delete and reshape your previously recorded jam trax. It's not done, but should make a first appearance in the next release.

It's your basic Piano Roll display, with a pretty minimal set of functions, but you can select notes individually or in groups, and then modify the selection. Shift it up or down in pitch, back and forth in time, change duration or stress or associated instrument. Finger Friendly, but probably pretty useless on a tiny screen. Maybe with a stylus.

How To Play synSpace: Drone Runners (for android)

I'm not really going to cover that here probably, see game for more up to date info. But here are some screen shots and comments in no particular order

After you select your drone color, you get to configure your drone before launching it. That screen looks like this, and is largely red because I picked the red 'thumb' (see it on the left? It is now decorated with some icons. The STAR means it is ME (the person holding the device). You are always the STAR of the game! The little crown means I am the moderator of this server session (server picks the moderator automatically. Moderator role in the session has added responsibilities and powers, in some StarMaps)

To change your selections, you can tap on a named button, or you can tap on the actual Face, Shell, or name in the panel. Selecting a Face or Shell is also how you get to the editor to clone and make new ones.

You have to make these choices before you launch, but your previous picks are retained until you change them.

The triangle on the right is how you allocate your initial six 'pods' between the categories of Shields, Weapons, or Engines. After you launch, you can pick up (up to) four additional pods of each type, via PowerUps.

This same info will be available in-game, for all pilots, but will be read-only at that point.

The stats just track drone destructions: yours (lost) or theirs (won). The rating is based on the general 'chess rating' alorithm and goes up more when you beat someone rated more highly than yourself (and goes down more when you lose to someone less highly rated than yourself)

You earn galactic credits as a bounty for destroying drones (since you're helping preserve the galaxy)


The game includes a 'Threaded Script" engine, using Lua as the scripting language. It's optional, but you can add a script to your StarMap by adding a final TAG followed by the text of the script

; This is the last line of the normal starmap file (that defines barriers and zones)
-- This is the first line of your Lua Script
-- Note that Lua uses two dashes for comments, avoid using semicolons
-- Your script is a message handler, that tries to react quickly to incoming messages.

| function onMsg( cmd, url )
|.. if cmd eq 'go' then
|.... handleGoCommand( url )
|.. end
| end

I added the |.. crap just to force an indentation, you don't do that for real. Anyway, I will document the real API elsewhere as it comes into shape.

But just to give you an idea. Imagine you wanted to play a game of tag. The moderator would start the game by sending a packet to all players (I mean, the script would do that in response to the moderator tapping a button that the script willed into existence). That packet would send the full game state "it=sernum" so everyone would know which pilot was it.

upon receipt of that packet, each player's copy of the script is invoked with that message, and the result is the script records the state, announces it locally on screen ("billy is it"), plays a sound effect based on a musical PATCH, and commands the game engine to display a special marker on billy's ship and add a special radar marker as well. Whatever the script likes.

on Billy's device, his copy of the script would tell him to display the tag on his ship, and also suppress weapon fire and shields, and slow him down and whatever other primitives synSpace, supports and your map game finds desirable.

Billy would then be on the hunt for another player, and when he saw him, hw would try to shoot him, possibly by using a special weapon available only on this starmap. When Jill sees her ship take the right kind of damage, synSpace informs her copy of the script 'Jill was hit with tickle_phasers at xyz by Bill"

The script is the only one that knows the rules of this game, which it is inventing. It decides that your report is honest and qualifies for making you IT, so it sends a packet to the moderator saying so.

When the moderator gets an "I am IT!" packet, it checks to make sure it makes sense and isn't some antique packet from a player whose wifi was down for 3 minutes...

and if it meets the script's rules, it sends the big "Jill is IT!" packet we started with, and the cycle repeats.

As I write this, the above is only almost possible. As I read this later, version 1.0 has been released and includes many possibilities via the game's lua API. Check out the Starmap Designer Resource Center for more info.


There should be some legalese somewhere, but I have a short in-game ToS which covers the basics. We reserve the right to suspend your access to droneNet if you demonstrate you cannot be trusted to play nicely with others.

We celebrate your creative expression, but please do not abuse the provided tools to make vulgar or hateful art pieces.

Accept that while you are not allowed to use Intellectual Property without the permission of its source (so no pictures of Mickey Mouse), you have granted an unlimited license to the other players to build upon any art you create in game.

That 'art' extends to all collectible classes, including, but not limited to: STARMAPs, GROOVEs, PATCHes, FACEs, and SHELLs

Your primary self-defense against obnoxious pilots is to use the MUTANT BADGE (open their pilot info and give them the MUTANT 'buddy badge'). This will mute them, and block various transactions with them.

Hopefully the punishment can just be banishment to StarMap Instances containing only other people who have been banned from polite society.