Posts Tagged ‘game’

Pentecost programming

Monday, June 13th, 2011

For some reason almost everyone in Norway have the day of on “Pentecost Monday”. Not that I’m complaining, I slept until noon, got up to watch Doctor Who and Game of Thrones, but also managed to get lots of work done on my Startrek Game.

The game is almost ready for a little pre-alpha test which I’ve got about 15 volunteers ready for. Today I completed the final feature that will be implemented before this test, and maybe the most important feature of them all.

Trekwar Ship Combat

It was nice to see those stupid fleets that have been moving around my screen finally do something violent. My technologically superior (I cheat) scoutship blew that poor Klingon while taking almost no damage.

Implementing the combat between spaceships took about 5-6 hours of work today (lots of rules for selecting which ships to fight, calculate if they hit, calculate damage, etc..), so now I can start working on the testing scenario that all the testers will be playing through before the big multiplayer test starts.

Fedcon 2011 – Day 1

Wednesday, June 8th, 2011

Thursday 28.04.2011

First day of the convention, up “early” for a shower and breakfast. Got to the convention hotel around 11. but kept walking between several places to get those sponsor tickets I won from GameForge (the  makers of Star Trek Infinite Space).

Gameforge infinite space

Having used 1 hour to finally get my badge (and being sent back and forth between about 10 of the Fedcon crew), I went to the Infinite Space booth, and got to test a development build of the game. I liked the game, the graphics is very nice, the controls were OK but some features were obviously missing. The mission you played in that particular development build was a bit disappointing story wise, and seemed a bit rushed (but what can you expect from a developer build?), but it showed off a bit of the mission system, and it seems pretty good. All in all, I think it may turn out very good, and I’m looking forward to follow the game progress to alpha/beta testing.

I kept walking around the convetion area, looking at booths, etc.. And then this Indiana Jones hat literally begged me to buy it (and by literally I mean figuretively), and by begged I mean “it was there” and by buy I mean “to exchange a common currency for goods or services”.
I met a few people from Fedcon 2 years ago, which was nice, and some people from the German star trek forum said hi (or guten tag) :) Also I ran into Zach from Hailing Frequency and Trek Radio at the infinite space booth, which was fun.

I waited over an hour to get my photo taken with RDA (and if you don’t know who RDA is, you should really be ashamed of yourself).

Garret Wang did a really good job of being MC, and was alot of fun at his own panel and the Opening Ceremony.

Garret Wang and Wil Wheaton

At 21:00 it was time for the Wil Wheaton Panel, and at the time of writing I’m 90% sure it was the highlight of the entire Fedcon Trip. Wil Wheaton is just amazing (not just because he’s a fellow geek, gamer, skeptic, sci-fi fan, etc..) He’s always funny, intelligent and entertaining. A few quotes: “I’m a skeptic” (for posterity), and in regard to the recent Sony fuck up: “Sony put’s DRM on EVERYTHING, but store your personal information in a text file.. Genius!” :) Also he talked alot about his roles on TNG and the Big Bang theory (Eureka was never mentioned, but he did mention The Guild in passing a few times :) )

After that I was pretty tired, so I opted out of whatever happens at the maritim after closing, and took a cab back to my hotel.

Toodledo API (simple java version)

Sunday, June 5th, 2011

Wanted to get a list of all the bugs for my Star Trek game, that I have registered at Toodledo and have them listed on the Trekwar wiki.

Toodledo offers a nicely done API, but there was no java implementation, there were a couple of unofficial ones, but I decided to write my own very simple basic program for connecting to Toodledo and getting all the tasks as XML, and parsing them into a simple Java object. So if you’re doing something similar, this program might be a nice place to start. To keep it as short as possible, comments and exception handling is pretty much not there :)

download the file: Toodledo2html.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
 
class Task {
    String id;
    String title;
    String modified;
    String completed;
 
    String folder;
    String context;
    String tag;
    String status;
    String priority;
    String length;
    String note;
}
 
public class Toodledoo2html {
    // TODO you must get the 4 values below from Toodledo
    private static String appID = "x";
    private static String userID = "x";
    private static String userPW = "x";
    private static String applicationToken = "x";
 
    private static String fields = "folder,context,tag,status,priority,length,note"; // get these fields when downloading tasks
 
    private static String sessionToken;
    private static String key;
 
    private static String toodledoTokenURL = "https://api.toodledo.com/2/account/token.php";
    private static String toodledoGetTaskURL = "https://api.toodledo.com/2/tasks/get.php";
 
    public static void main(String[] args) {
        sessionToken = getSessionToken(md5(userID+applicationToken));
        key = md5(md5(userPW)+applicationToken+sessionToken);
        ArrayList<Task> tasks = getTasks();
        // do whatever to tasks
    }
 
    private static ArrayList<Task> getTasks() {
        try {
            String data = "?key=" + key + ";fields=" + fields + ";f=xml";
 
            System.out.println("Getting tasks: " + toodledoGetTaskURL + data);
 
            URL url = new URL(toodledoGetTaskURL + data);
            URLConnection connection = url.openConnection();
            connection.setDoOutput(true);
 
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder xml = new StringBuilder();
            String line = in.readLine();
            while( line != null) {
                System.out.println(line);
                xml.append(line);
                line = in.readLine();
            }
            in.close();
 
            ArrayList<Task> tasks = xmlToTasks(xml.toString());
 
            for(Task t : tasks) {
                System.out.println(t.id + " " + t.title);
            }
            return tasks;
 
        } catch (MalformedURLException ex) {
            System.out.println(ex);
        } catch (IOException ioe) {
            System.out.println(ioe);
        }
        return null;
    }
 
    private static ArrayList<Task> xmlToTasks(String xml) {
        ArrayList<Task> taskList = new ArrayList<Task>();
 
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(new StringReader(xml)));
 
            Element root = doc.getDocumentElement();
 
            NodeList tasks = root.getElementsByTagName("task");
            for (int i = 0; i < tasks.getLength(); i++) {
                Element task = (Element) tasks.item(i);
 
                Task t = new Task();
                t.id = getDomTextValue(task, "id");
                t.title = getDomTextValue(task, "title");
                t.modified = getDomTextValue(task, "modified");
                t.completed = getDomTextValue(task, "completed");
 
                t.folder = getDomTextValue(task, "folder");
                t.context = getDomTextValue(task, "context");
                t.tag = getDomTextValue(task, "tag");
                t.status = getDomTextValue(task, "status");
                t.priority = getDomTextValue(task, "priority");
                t.length = getDomTextValue(task, "length");
                t.note = getDomTextValue(task, "note");
                taskList.add(t);
            }
 
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(Toodledoo2html.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch(SAXException se) {
 
        }
        catch(IOException ioe) {
 
        }
 
        System.out.println("xmlToTasks got " + taskList.size() + " tasks");
        return taskList;
    }
 
    private static String getSessionToken(String signature) {
        try {
            String data = "?userid=" + userID + ";appid=" + appID + ";sig=" + signature + ";f=xml";
 
            System.out.println("Getting session token: " + toodledoTokenURL+data);
 
            URL url = new URL(toodledoTokenURL + data);
            URLConnection connection = url.openConnection();
            connection.setDoOutput(true);
 
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String xml = in.readLine();
            in.close();
            String token = xml.substring(xml.indexOf("<token>")+7, xml.indexOf("</token>"));
            return token;
        } catch (MalformedURLException ex) {
            System.out.println(ex);
        }
        catch(IOException ioe) {
            System.out.println(ioe);
        }
        return "";
    }
 
    private static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(input.getBytes());
 
            byte byteData[] = md.digest();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < byteData.length; i++) {
                sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException nse) {
            System.err.println("ERROR. MD5 ALGORITHM NOT FOUND");
            return "";
        }
    }
 
    public static String getDomTextValue(Element element, String tag) {
        if (element != null) {
            NodeList nl = element.getElementsByTagName(tag);
            if (nl != null && nl.getLength() > 0) {
                Element el = (Element) nl.item(0);
                if(el != null && el.getFirstChild() != null) {
                    return el.getFirstChild().getNodeValue();
                }
            }
        }
        return "";
    }
}

Note: This program was made to run once per hour.. running this program many times in a row will cause Toodledo to ban you for about 1 hour. When that happens there will be a IndexOutOfBoundsException -7 from the method that gets the session token. This can be fixed by saving the token you get between requests, and not asking for a new one each time (which is what causes the short ban).

Looking forward to E3 2011

Tuesday, May 31st, 2011

It’s almost time for E3, where the Gaming studios release lots of new info, screenshots and videos from the games they are working on.

This year I only got a few games I’m following:

X-Com (2K Games/Take-Two):
Huge fan of the original X-Com games, but so far I’ve been unimpressed by the video (the black blob being chased around). But hopefully some more interesting gameplay footage will be released.

Battlefield 3 (Electronic Arts):
Not really a huge FPS gamer, but I enjoyed Bad Company 2 alot, and Battlefield 3 looks awesome.

The Elder Scrolls V: Skyrim (Bethesda):
Never finished Oblivion (was not a huge fan of the combat system), but if time permits I might play Skyrim.

Dead Island (Deep Silver):
Got noticed for their really awesome trailer, but not so sure about the game itself. Seems like Left 4 Dead with minor RPG elements added. And it seems to focus very much on melee combat, and afraid it will be to much of a hack and slash game (not a fan).

Star Wars: The Old Republic (Electronic Arts):
Saved the best piece for last.. I hope they will provide LOTS of new information, and gameplay from the latest builds. This is the game I’m looking the most forward to as of 2011, and I’m definitely going to play it when it’s released.

Fallout New Vegas

Tuesday, October 26th, 2010

I’ve been pretty busy playing Fallout New Vegas since it released Friday, have played around 20 hours and just recently got Veronica (voiced by Felicia Day) as a companion and made my way to the Strip to talk with Mr. House (voiced by Rene Auberjonois), it’s like being in geek heaven.

I really like the game so far, tt’s basically the same as Fallout 3 (not a complaint), and I like the story and setting so far. I do miss the 50′s music, but I listen to the Fallout 3 soundtrack almost daily anyhow :)

Seems like since I got Veronica the game has started to freeze up when trying to close it. But other than that it has been very stable and bug free.

I did however notice a strange bug with Veronica once I logged in.. She kept grinning for the entire session. It started to really creep me out:
Veronica Felicia Day Grins

Scrum tool (Jira vs Toodledo)

Tuesday, October 5th, 2010

Up until recently I’ve been using ToDoList (read my previous post about it) to keep track of all tasks that needs to be done for the Trekwar project.

Don’t get me wrong, ToDoList is very nice, except there are a few drawbacks that made me go look for a replacement.

  • It’s Windows only, so using it from linux would be cumbersome
  • It’s not online, so I have to sync the file between different computers
  • It’s hard to share the list, or make it public (there is html report, but the output is not very nice, and you’ll have to generate the file + upload it) which is a hassle.
  • It’s hard to use this to get a good view of what is needed for a specific release (like to view every task that is needed for alpha, beta or release)

JIRA
I’ve used JIRA a bit at my real job, and it’s pretty good. It’s online, and I installed it on my server to give it a try. I quickly had to abandon that idea seeing that JIRA is extremely bloated.. It uses like 600 MB of ram just starting up, no idea what it uses the memory for, it’s not doing anything remotely fancy that would require that amount of memory.

So I decided to run it from my desktop computer, now I get the same problems as with ToDoList with having to sync files between computers, and difficulty making the task list public. Also the interface itself is pretty bloated and slow, even tough it has pretty nice views for planning and when doing the tasks.

Toodledo
In trying once more to find the perfect tool for managing the tasks of my scrum like development, I tried out Toodledo. I found out about it because minecraft (awesome game BTW) also uses Toodledo as a public task list. Which is good as it lets people following projects get a sense of how much work/time is needed until the next milestone.

Toodledo is a online to do list, and it works very nicely for scrum development. It’s quick and easy without all the bloat of JIRA and gives you pretty much the same information.

It’s very easy to add tasks (subtasks require a pro account which is 15$ per year, well worth the money), and you can create context’s like “alpha”, “beta”, “release”, etc.. and add folders/tags which can be anything. There are lots of different views, I mostly use the main view which has all the tasks grouped by context and sorted by priority. There is also a view for seeing all the tasks in a particular context (like alpha) and the estimated time for all the tasks. (currently 94 hours of work needed before Trekwar can go into alpha).

My only problem with Toodledo is that subtasks don’t show up in the public view, but it should be implemented shortly. Another great thing about Toodledo is the forum, which is frequently visited by the staff/developers.

So if you’re looking for a good way to organize your project, I can definitely recommend Toodledo, and you can try it for free at their website.

For an example you can look at the Trekwar Todo list

Trekwar Fog Of War

Sunday, October 3rd, 2010

It’s been too long since I got any programming done on my Star Trek game Trekwar, but today I managed to implement animation support on the main map, as well as get the sensor system and fog of war working (still needs a bit of tweaking):

I’ve gotten a new job, and been working on another paying project as well (Comicon does not pay for itself you know). But this other project is almost done, and then I should be able to get back to doing regular Trekwar updates.

I’ve also switched over to Toodledo for maintaining the list of features to be implemented, so hopefully you can see the issues under “0.4.0 (Alpha)” shrinking over the next few months :)

Monkey Island 2 – Lechuck’s Revenge

Thursday, March 11th, 2010

I just got the piece of gaming news I’ve gotten so far in my life:

Lucasarts is releasing a special edition of the best adventure game of all time (Monkey Island 2: Lechuck’s Revenge) this summer :D

http://www.lucasarts.com/games/monkeyisland2

Trekwar cargo system

Sunday, March 7th, 2010

Today I mostly finished the Trekwar Cargo system, so now it’s possible to collect resources and bring them back to your starsystems.

Also included 4 images from the design and implementation of the UI:

Read full devblog post at trekwar.org

Trekwar sensor system

Thursday, February 18th, 2010

I haven’t had much time working on Trekwar lately, but I’ve recently made a prototype of the sensor system:

I’ll have to add this, as well as fog of war when I’m done with the fleet management tools which are almost ready.

> Read the whole devblog post @ trekwar.org