Game Design, Programming and running a one-man games business…

Determinism

“Determinism is the view that every event, including human cognition, behavior, decision, and action, is causally determined by an unbroken chain of prior occurrences.”

That’s what wikipedia has to say. In terms of gsb determinism would mean that if you field the same fleet twice, against the same enemy, then the result will be exactly the same.

This isn’t true.

I wish it was, as do a few GSB players who are doing great things with tournaments. In fact, if I knew that I could make the game work as well as it does now, but be deterministic with a weeks work, I’d do it. Sadly, the reasons why it is not deterministic go deeper than that. I spent most of today experimenting with making it work, and I never got past 6000 milliseconds of a big battle before losing synch. (Yes I know all about random seeds and how to do it. If you saw how much code is the game, you’d see the scale of the problem :()

Fundamentally, the game is not frame-rate independent in terms of simulation calculations. (although it is scaled so as to provide constant playback rates). The BIG BIG plus side of this is that games visuals are pretty darn smooth and look great, with no jitters or jumps like you sometimes see in laggy multiplayer games. The downside is it’s not deterministic.

This limits the game a bit in terms of being really competitive as any sort of online serious league style thing. However, thats not altogether a problem. The game is called GRATUITOUS space battles, and isn’t designed to be taking uber seriously. I’d love to code an ultra-complex, ultra-geeky dterministic space combat game where you even selected the rivets to use on the laser gun stabiliser panels, but the trouble is it would likely see 500 copies, and that means I’d be broke :(

Sooo…. The current limitations of GSB 1 which will always be there are these:

2D. Not 3D

No direct ship control

Not deterministic.

Everything else can be improved and expanded and bettered and tweaked. What would you like to see?

<offtopic rant>

I’m watching (as-in, it’s on in the background) masterchef. With the way these people talk, and the ominous sci-fi thriller music as they talk about cooking prawns, they take themselves waaaayyyy too seriously. I know my place, I make video games to entertain people, and play with spaceships for a living. You can do that, and take it very seriously and aim to be the best you can, without building up some big fucking hero-complex. These people are good at frying, they arent discovering DNA or serving as fucking fighter pilots. Bah! </offtopic rant>


22 thoughts on Determinism

  1. I think you’re underestimating the interest there would be in a “ultra-geeky deterministic space combat game”. There are a lot of people who enjoy endlessly tweaking. Just look at EvE or SimCity 4.

    Not that I’m saying you should push GSB in that direction as that would attract a different crowed and might turn off some of the people who already have interest in the game the way it is. Maybe if GSB takes off, there could be a sequel: SSB (Serious Space Battles).

    For now, since GSB will never be deterministic and doesn’t need to be, why not push it in THAT direction. It could become more like a gambling game. Users could bet honor on challenges they submit. There’s a range of things you could do with that concept.

    Although one of the obvious issues is the meta-gaming that will occur, such as ‘My processor speed is X, so I should use Y weapon” and “I’m using a lot of weapon A, so I should play the game on x3.4 speed.”

  2. I would love to see:

    i) More racial specialization in terms of weapons and equipment. You’ve done a great job of thematically sperating the ship sets, but there needs to be greater variation between the fleets.

    and

    ii) A campaign or meta game, something to link the battles and let me form a greater attachment to my units.

    just my two cents!

    -Knave

  3. The fact that the game is NOT deterministic is what i like about it.. I love randomness in rts games and other strategy games / empire builders. I dont like chess or other such incredible deterministic static games..

    Thats why i got into computer games in the first place, because they had a near infinite possibility space compared to rigid games like chess or monopoly or whatever, with static moves and a static playing field.

    If this game was deterministic, you could just calculate / build 1 uber fleet to kill all other fleets, no matter how well balanced it is. It would ALWAYS end the same way.
    Now, if it is a bit random, even an uber fleet can fail, if a missile fails to hit a few ships etc. That adds replayability, it adds suspense, and it adds fun.

    Imagine Starcraft, Total Annihilation / Supreme Commander or the Total War games, if they were devoid of any such randomness. They’d utterly suck.

  4. Deterministic doesn’t mean there isn’t any random chance. It means for the exact same input the simulation will reach the exact same state. Starcraft, Total Annihilation and Supreme Commander are all completely deterministic games. The multiplayer component of these games relies on that fact so it only needs to send player input over the network and it still produces the exact same simulation state on each client.

  5. In my opinion, it is supposed to be a Gratuitous game, for the simple pleasure of watching epic battles and seeing ships blow to pieces.

    If I wanted something more complex and a direct control over my ships, I’d play a STR in space, like Homeworld, SoaSE, or Nexus. The point of GSB is to make great and beautiful space battles, simply.

    I mean, it’s not like if it was said in the game’s name. Oh wait.

    Good post, and I like your position on this question, keep it this way, and don’t fall to the trap of the “passionate community requests”. I mean, it’s great to have a community, and ideas from it. But as for each internet forum, about a game, the main fact is that only a minority goes to them, and mostly the kind who has precise requests, rants, and whoc will be posting a lot about it. It finally makes them look like a majority, but it’s not.

  6. While i can understand that some people consider repeatable/deterministic battles quite important for challenges and tournaments, and can also empathise that its going to be next to impossible to force a game to work that way unless its been designed and coded that way from the very beginning, i do feel the need to point out that i really like masterchef – it’s basically food porn for hungry people broadcast at teatime, and criticising it for its pomposity is a bit like criticising ‘debbie does dallas’ for its lack of plot.

    So there.

  7. Deterministic? Who cares!?! Any vet of any battle or war will tell you that just surviving, none the less WINNING, a battle is a good part luck. The fact that you wrote an engine that does not provide an absolute repeat every time I play the same battle actually improves my experience. One of the earlier questions I had was along these lines. I just BARELY one an engagement with a fleet. I replayed the fleet exactly, and lost the second go around.

    How does this scale? It does add extra fun to trying to win based on an extremely small fleet. While this might not have been an INTENTIONAL design decision, it is still a good one. At least to me.

  8. [excuse my english]
    Deterministism would be boring.

    If we can have more detailled info about who take our challenges, how many time someone try before they succeed, it would probably be enough for “hardcore league” to have fun.
    [/excuse my english]

  9. To get the smoothness run constant mechanics frames and then interpolate between the last 2 ones for the graphics frames.

  10. If you’re using a “delta-time” update, then indeed determinism is impossible. But why not switch to fixed-step updates? If you already have a delta-time system in place, such a switch should be trivial — instead of doing this:

    Update(time_since_last_frame)

    You can just do something like:

    while(time_since_last_frame > step_size)
    {
    Update(step_size);
    time_since_last_frame -= step_size;
    }
    //..and make sure to save the remaining time_since_last_frame here for next frame

    Fixed-size steps make a LOT of things much simpler.. you should really consider using them :)

  11. Yes I tried switching to that system, but although it made things slightly more predictable, it still doesn’t work 100%
    The problem is that some stuff is assessed and acted on during a draw frame.
    in theory it should be fine if those draw frames are always exactly the same distance apart, but it doesn’t seem to be the case.
    I’ve already spent probably more time on it that can be sensibly justified :D

  12. Game mechanics stuff should definitely be separate from drawing I think, a lesson for future games I guess.

    Although I think determinism would really add a lot to the game and open up so many possibilities, you could have 2 players directly submit 2 fleets against each other and play out the same result. Tournaments, replays, etc. If you ever wanted to implement direct control mulltiplayer it would be a prerequisite. Least likely but most awesome if there ever was some kind of metagame you would need it too.

    On the other hand if it would take a whole rewrite I guess you could just as well save it for GSB2 then… I’m sure there’s a ton of other stuff you could do better with afterthought too.

  13. i agree with Wouter. GSB 1? is there gonna be a sequel or something? (not that i’m expecting one so soon!)

  14. i agree that it shouldn’t be deterministic, it’s more exiting this way.

    but if you’d have to make it deterministic, i think the best way is to precalc all the actions of the battle and just ‘replay’ it visually afterwards. that way you’d have even less of a lag.

  15. This discussion is going right over the heads of all the non programmers here. It’s not about removing the random factor, it’s about taming it. You want to be able to reproduce the same battle multiple times for certain purposes (replays, both players can watch the same battle, tournaments), but if cliff wanted he could make the same battle setup run differently by just using a different random seed in other situations.

    Also the fact that the simulation is not run at a constant timestep is a pretty serious mistake, since it makes the game behave inconsistently, not just unreproducably.

  16. Rather than worrying about determinism for GSB tournaments why not design a double blind challenge. This would require three participants, the two contestants, and the user running the tournament. Each contestant submits their challenge for the tournament and the people managing the event run the battle (they could even run the battle several times give points as victories per round). I see the flaw in my plan, there needs to be a way to record an entire battle and save it as a demo file (like in Doom and Quake) that could be sent to the contestants and watched (maybe there already is but I only have seen the screen shot button). With an identical record of the events, both contestants would see the same result of the battle. Since it would be a demo and not just a video the audience running the file (using GSB) would still be able to zoom in and adjust play speed. I am not a programmer. I do not know if this is feasible; however, I would like a way to record my battles and play them back later.

  17. Getting GSB deterministic so we can have consistent results to use in tournaments and other cooperative community endeavors would be cool, but I’m sure it’s something we can live without. Might just have to agree to run all tournament rounds at 1x speed, and maybe do matchups as best out of 3 or 5 instead of single battles.

    As to the randomness question (which is indeed a different subject), I prefer my games to have a minimum of sheer randomness. It has its place as a means of generating suspense and interest, but by and large I want to be contesting on the basis of skill, not just rolling dice. This is especially true in typical RPGs or other games with relatively few, highly-significant simulation events (e.g. attack -> hit/block/dodge/miss). In GSB, there are enough things going on at any given time that the individual dice-rolls aren’t too important – you’re really just interested in the aggregate results of all those rolls, and a few consecutive misses by one ship in one corner of the battle isn’t going to ruin your fun.

  18. Please. DO NOT make the game play on synch. DO NOT make every single battle play the same if nothing changes in them. DO NOT EVEN TRY TO PURSUE THIS!

    Do you have any idea how much more depth it adds to the game when there are so much randomness in the game? It adds a great deal. It adds more enjoyement when the game can’t be predicted. Even you did the same battle 100 times each time could still be different (if I understood your post correctly) and this just makes it good.

    There is not exact and one and the most holy way to counter each ship setup because the randomness doesn’t allow it. This makes the battles more interesting because the same ship setup can be defeated with same score even with totally different ships. If everything was on synch and there was no randomness involved, all the battles could be easily beaten by just number crunching and doing some maths.

    I loathe that kind of games where you can predict the out come within first few seconds or minutes of a match. I want games where there is also luck and randomness involved in the winning, it just makes each match more epic and so different from each other.

  19. @ Weedy:
    You can’t loathe that kind of game, since just EVERY GAME is deterministic, even GSB. Computers can’t generate true randomness, they create pseudo-randomness, which is a way to create seemingly random results from the very same algorithm by changing only one parameter, called the seed. Even GSB uses it.
    As it is, you could already predict the outcome of a battle if you knew the various seeds used during the battle, so please don’t discard the whole idea of deterministic results, as they already are. The only reason you don’t get the same reasult from one battle to another, with the same setup, is because the seeds used aren’t the same (as time, which by definition, always changes is usually used as the seed). If every time you need to produce some random results, the result was generated from a global seed (that for example you could export) added to, say, time into the battle, then all battle could end up the same (if you used the same seed that is). All you’d have to do, is let the user generate another seed if he wants the battle to follow a different course.

Comments are currently closed.