struggle();

Screen Shot 2017-03-16 at 17.04.21 3

I finished making the Prometheus level/version/minigame of Let’s Play: Ancient Greek Punishment: CPU Edition the other day, which means I’ve now had a chance to go through various of the required conceptual grapplings involved in this particular edition of the series. As per usual, my assumptions going in have been kind of rejected/realigned thanks to the realities of actually sitting down and building the game itself – perhaps the most important argument for making games a reality even if they just seem like a ‘funny idea’ or whatever. You may not entirely know what you’re doing. I rarely do.

Going into this game my idea was that the code would be more or less identical to the original game, except that I would disable user input and instead would have computer code (running on some kind of timer) triggering the required inputs – generally speaking this would mean the computer alternately triggering keypress events for ‘g’ and ‘h’ over and over again. It turned out, however (for me at least), that simulating keypresses (or mouse clicks) didn’t actually work out (fast enough) for me. I struggled with it for while, doing the usual trawling of the internet, but never found a satisfactory approach.

But the very fact it wasn’t working kind of fits into the narrative of the game, I guess. If I can’t get the computer to do things that way, then that’s simply not how the computer would play the game. It’s kind of a truism. Rejecting the kind of human-centric idea of the computer having to trigger keyboard input meant I could rethink how a computer might interact with the game, at which point it seemed suddenly very clear that the computer would simply call a function to cause Prometheus to struggle. Why would it bother to go a circuitous route? Above I called the method struggle() but now I’m calling it INPUT() for sheer computeriness.

Thus the game work by loading the game as per usual, but instead of allowing for human input, there’s just a function you need to call again and again to struggle (or push a boulder or run a race etc.) and that’s what the computer player does, in the form of JavaScript’s setInterval() function, which runs the same code repeatedly with some interval in between. That’s the ‘AI’ of the CPU player in this game. I did think for a while about the idea of the CPU player being a kind of separate script from the game proper, so it was like the CPU was playing the game ‘from the outside’, but I don’t think that’s necessary for the game to make sense.

Perhaps most importantly, when I run the game and watch the little Prometheus struggling bravely (forever), it seems to feel like something. It’s weird to look at, knowing the the code is both generating the situation and the response to the situation at the same time, kind of eery and wrong. Which is great, obviously.

So: so far so good and thanks for asking.


The Artificial Olympic Spirit?

One thing I always enjoy about watching the Olympics is the way some athletes relate to each other immediately after an event. Some seem to retain a kind of burning hatred from within the heat of competition – fencers are pretty amazing for that. But a lot of them, on completing their race, act like the old friends they presumably are. Handshakes, exchange words, nods and smiles. The larger context of the various sports, that these people complete with each other regularly and know each other, is very pleasing. It looks like a nice feeling. It would be interesting if we could feel this way toward AI opponents. Can we?

(more…)


In conversation with my guru.

And by my guru, I mean my guru. As in, I made him myself. I’m still working on my GuruQuest game and this evening that’s meant editing away at the ELIZA script to move it from psychotherapy to gurudom. It’s been pretty hilarious, but also a rather tough writing challenge. I’m trying my best to walk a line between kind of clichéd guru-stuff, but also trying to capture some amount of resonance for people who might actually want to take it moderately seriously.

Frankly, I’m a big fan of the mystical art of guruspeak anyway – the Tao Te Ching is a favourite book of mine, with its paradoxical sentences and existentially booming one-liners. It’s a great mode of expression that’s simultaneously a parody of itself, and extremely insightful and deep at the same time.

Can I write a chatbot script that achieves guru status? Well, here’s a transcript of a conversation I just had with GuruBot 1.0:

Me: I have travelled far. Are you a guru?
Guru: Who can say whether they are a guru or not?
Me: Then you are surely a guru.
Guru: Be uncertain.
Me: Really?
Guru: This is the only world we have.
Me: There is no other?
Guru: Be uncertain.
Me: You already said that.
Guru: You may continue.
Me: What should I say?
Guru: Yes, what should you say.
Me: Help me.
Guru: Go on.
Me: I’m worried about the meaning of life.
Guru: Speak.
Me: Is it all just a cosmic joke?
Guru: Recite.
Me: Is there meaning in anything?
Guru: Do you hear the wind in the trees?
Me: Yes…
Guru: Is it Autumn?
Me: No, it’s Spring.
Guru: Perhaps.
Me: I’m pretty sure it’s Spring.
Guru: A rabbit knows that it runs.
Me: Does it?
Guru: A dog knows that it barks.
Me: Okay.
Guru: A sleeper knows that he sleeps.
Me: I’m not so sure.
Guru: Well?
Me: Well what?
Guru: Why ask?
Me: Why indeed?
Guru: And?
Me: Nothing.
Guru: This.

And on and on and on. He’s an indefatigable guru. He’s a machine.


Invasion of the Boardsnatchers

So anyway, I’m still playing Skate 3. At this point I have pretty much every achievement you can get on your own, barring a couple of super dull ones that involve designing skate parks, something I’m utterly uninterested in. The rest of the game is in the online world, which is a whole other thing. Only, to participate in that you more or less need to have friends playing that game. Problem.

Well, except that I do have one friend who plays Skate 3, oddly enough a skating friend from way back in my early teenage years who I more or less haven’t seen since then. We “made friends” in the world of Skate 3 and that means, in a Facebooky kind of way, that I can see when he’s online, “call” him to come skating with me, and all that sort of business. None of which I’ve availed myself of as yet.

But here’s a creepy thing. Once you have Skate 3 friends, the game decides that you probably miss them real bad when they’re not around. So you’ll be rolling along in your hermetically sealed personal skateboarding world, perhaps attempting a challenge, and somehow your friend will skate past you. Cue the double-take.

When you look closer at this skateboarder bearing your friend’s name above their head, you notice that in parenthesis after the name is “AI”. The game has spawned an AI version of your friend into your single player world. This creepy simulacrum will then proceed to skateboard around you, not interacting socially or anything, but just coexisting in the space that you’re in. It flies past doing all sorts of fancy tricks, but is also mute and impassive if you go anywhere near it.

It’s deeply strange to me that the game has this as a built-in feature. For one thing, why would we even want a simulated version of a person we know skateboarding around in our little virtual world? For another, I personally don’t like the idea of there being a simulated version of me skateboarding with my friend while I’m asleep in bed. It’s like finding out that while you were busy doing something else, a fake version of you was chatting to your friends on Facebook, perhaps running the ELIZA program and giving them some therapy. I’m not well-versed in any of the current thinking on identity in video games, but this seems like a really interesting and squicky edge case.

So, if you see me doing an awesome nose manual down the road, make sure it’s me before you say hi.