The Playbook, Tom Edition


The button is on the top right of the screen. Check it out.

Shout if you like this. If you some ideas you want to add send me an email.

Advertisements

Things I’ve been accused of: Being “The Biggest Flirt”


This is my first post in a new series called “Things I’ve been accused of” starting with “Being The Biggest Flirt.”

That’s right, not just a Flirt, or a Big Flirt, or even a Massive Flirt but The Biggest Flirt! This has happened so often I’ve lost count but this is the latest (and most easily remembered) story.

The incident happened when I was climbing Mt Remarkable with my by buddy Jess Greatbatch. We hadn’t seen each other for about a year so naturally we got talking about the good old times and people we used to know (it’s amazing how teenagers can act like old women).

At one point of the conversation Jess burst out with “Tom! You are The Biggest Flirt! I remember when you hooked up with bla bla bla!”

Here’s a list of responses that are often used to reply after a statement like that:

  • Well that was only once!
  • Well I really liked her!
  • Well we were in love!
  • Well we had been going out for ages!

But choosing to break with the mould I decided none of those answers were applicable to my situation and had to create my own custom response which was.

“WTF! Are you high girl? Me and bla bla bla never hooked up! We were just buddies!”

“Yeah you did!” replied Jess, “on the couch!”

After half a hour of  “Yes you did!”, “No I didn’t!” we gave the subject away. Not because we were mature and dropped it but because we were climbing a flipping mountain and it was hard!

Much later I was thinking about that conversation (I have a tenancy to obsess about little things) and was getting really worried. I didn’t want people going around thinking I’d been hooking up with girls I was just friends with.

After much worry and lost sleep I came to a sudden realisation. We never worked out what the phrase “hooked up with” meant. I quick search of Urban Dictionary yielded this, which wasn’t horrible helpful.

Hook up, is a really ambiguous term which can mean anything ranging from “had sex with” to “met down the street”. Racking my brain for possible situations I remembered that once, two or three years ago, we had been sitting next to each other on a couch and I had put my arm around her.

FINALLY! When Jess said I’d “Hooked Up” with her, what she actually meant was I’d “Had my arm around her one time”.

So what does this mean for me? If what “Hooked Up” actually means “Had my arm around her one time” then I have hooked up with many many girls. Including Jess. It means I would have maybe hooked up with over half the girls I’ve met a feat beaten only by this man and that therefore yes, I AM:

The Biggest Flirt.

Which has been a massive boost to my confidence. Here’s a commercial I was in.

httpv://www.youtube.com/watch?v=owGykVbfgUE

My Roguelike (this one’s for the geeks)


As we’ve talked about previously, I love roguelikes. And I also love programming in python. Which is why it shouldn’t come as a huge surprise that I decided to try to make one. First I made a combat engine which allows special abilities, a relationships and conversation mechanic, and finally pathfinding. Then I scrapped the whole thing because it didn’t work. Later I tried again and came up with a better pathfinding system (read:it works). Later I plan to implement the combat engine from the last game but at the moment all I’ve got is people wondering around a town (yes that is what those rectangles are). For those of you who are interested in programming here is the source code so far. For those of you who are NOT interested in programming and just want to see the code in action download python, start IDLE (comes with python) and run this code in the window.

It has been a few weeks since I’ve looked at it so I’ll do my best to explain what’s going on in it (I’m a lousy commenter).

There are two class, the Game class which controls the game and the Character class which represents the character inside of the game.

The Game Class:
Right now all that this does is first setup the map, tell the characters when to update themselves (take a turn) and display the map when it’s told to.

The Character Class
This is where it’s at just now. The character class handles all the pathfinding. I must say that pathfinding had been the most difficult part of a game to program. Although unlike other areas (balancing and so forth) when it works you usually know that it’s working. What it does is identify where the character wants to get to. Then it looks at where the character is. If that isn’t where the character wants to get to the pathfinder looks at the spaces around it and runs a couple checks on them.

  1. Have I seen this space before? No? Keep going then, else stop and look at the next space in the cue.
  2. Is it possible to walk on this space? If it isn’t stop and look at the next space in the cue.
  3. Is this the space you’re looking for? What?? It isn’t? In that case we’ll just have to add every space around this one to the back of the cue and go onto the next one.

When you finally find the space that you’re looking for the pathfinder generates a list of the moves needed to get to that space which the characters will go through one at a time till it reaches that space and the whole thing starts over again.

This is just the first step in a (rather) large journey. If anybody want to help me make this feel free to chime in.

By now I should have learnt not to try to make predictions about what I’ll talk about in the future but one day I plan to post the game me and Gio made in the large school break as well as posting updates to this project as well as some talk about the direction that I want it to take in terms of game mechanics and philosephy.

#!/usr/bin/env python
import string
import collections

class Game():

    def __init__(self):
        self.make_map()
        self.characters = []

    def loop(self):
        while True:
            for character in self.characters:
                character.update()
            self.display_map()
            raw_input("Press Enter")

    def make_map(self):
        self.map = []
        for line in open('map.txt', 'rU'):
            temp = []
            for i in line.strip():
                temp.append(i)
            self.map.append(temp)

    def display_map(self):
        mapy = []
        for line in self.map:
            temp = []
            for i in line:
                temp.append(i)
            mapy.append(temp)

        if self.characters:
            for character in self.characters:
                mapy[character.position[1]][character.position[0]] = '@'
        for line in mapy:
            print ''.join(line)

class Character():

    def __init__(self, position = (1, 3), goals = None):
        self.position = position
        if goals == None:
            self.goals = [(8, 4), (23, 4), (10, 18)]
        else:
            self.goals = goals
        self.path = []

    def update(self):
        if len(self.path) == 0:
            self.path = self.pathfinder(self.goals[0])
            temp = self.goals.pop(0)
            self.goals.append(temp)
        self.move(self.path.pop(0))

    def pathfinder(self, goal):
        game.map[goal[1]][goal[0]] = '#'
        game.display_map()
        if self.position == goal:
            return True
        else:
            possible = collections.deque()
            for i in self.look_round(self.position):
                possible.append(i)

            seen = []

            while True:
                focus = possible.popleft()
                if (focus[0], focus[1]) in seen:
                    continue
                else:
                    seen.append((focus[0], focus[1]))

                if game.map[focus[1]][focus[0]] == 'x':
                    continue

                if (focus[0], focus[1]) == goal:
                    return focus[2]

                else:
                    for i in self.look_round(focus):
                        possible.append(i)

    def look_round(self, place):
        if len(place) == 2:
            place = (place[0], place[1], [])
        return ((place[0]-1, place[1], place[2] + ['west']),
               (place[0]+1, place[1], place[2] + ['east']),

               (place[0], place[1]+1, place[2] + ['south']),
               (place[0], place[1]-1, place[2] + ['north']),

               (place[0]-1, place[1]-1, place[2] + ['northwest']),
               (place[0]-1, place[1]+1, place[2] + ['southwest']),

               (place[0]+1, place[1]+1, place[2] + ['southeast']),
               (place[0]+1, place[1]-1, place[2] + ['northeast']))

    def move(self, direction):
        moves = {'north': self.move_north,
                 'south': self.move_south,

                 'east': self.move_east,
                 'west': self.move_west,

                 'northwest': self.move_northwest,
                 'northeast': self.move_northeast,

                 'southeast': self.move_southeast,
                 'southwest': self.move_southwest}
        place = moves[direction]()

    def move_west(self):
        self.position = (self.position[0]-1, self.position[1])
        return self.position

    def move_east(self):
        self.position = (self.position[0]+1, self.position[1])
        return self.position

    def move_south(self):
        self.position = (self.position[0], self.position[1]+1)
        return self.position

    def move_north(self):
        self.position = (self.position[0], self.position[1]-1)
        return self.position

    def move_southwest(self):
        self.position = (self.position[0]-1, self.position[1]+1)
        return self.position

    def move_northwest(self):
        self.position = (self.position[0]-1, self.position[1]-1)
        return self.position

    def move_southeast(self):
        self.position = (self.position[0]+1, self.position[1]+1)
        return self.position

    def move_northeast(self):
        self.position = (self.position[0]+1, self.position[1]-1)
        return self.position

game = Game()
game.characters.append(Character())
game.characters.append(Character((15, 12), [(23, 4), (8, 4), (10, 18)]))
game.display_map()
game.loop()

Easter Camp@Melrose


Every year since I was in year 9 I’ve spent Easter time at Easter Camp@Melrose, a Christian camp run by an organisation called Scripture Union. It represents the true, good part of Christianity while leaving out the politics and waffle that some of the churches seem to acumulate. Frankly, if somebody was in crisis (or even if they weren’t) it’d be the first place that I would send them, it’s one of the rare places where you can find love freely given. Pretty much, it’s a great place for young people regardless of what they believe.

I, personally had a fantastic and highly meaningful time. It was also great to see many of my friends from when I moved away including Dylan Gershwitch who I haven’t seen for eight years and had ‘just happened to drop by’. Anouther person who rocked up was Jess Greatbatch who, knew Dylan from when she lived in Pt Augusta but now lives in Pt Lincon so she knows a bunch of the people that me and Dylan know.. All leaving a very tangled, unlikley, but highly interesting web of interconnecting relationships.

Funny Stories From EC:

  • Didn’t think that I would need shampoo and conditioner
  • Regreted not thinking I wouldn’t need shampoo and conditioner by the secound night
  • Going for a long sweaty walk up Mt Remarkable with Jess and Dylan
  • Gossiping about all my old friends with Jess and Dylan (between the two of them they know most of the ones I like but don’t talk to anymore)
  • Losing my soap the day I went up Mt Remarkable, seriously limiting my ability to clean
  • Taking roughly a bazillion photos. This was my first outing with a camara
  • Introducing everybody to Roomba

Something new that happened this year was all of the audio that went on in the sessions (where we sat down and got serious(ish)) was recorded and distributed to the campers. After asking the speaker if it’s ok here is all of the audio for the campers who missed out and for anybody who’s interested in what exacly goes on when a bunch of Christians get together.

Atleast this blog is where it will be… when I can find the time to upload 100MB of audio. If anybody wants to put it on rapidshare for me go right on ahead ;D

All of the photos are viewable here.