Get Adobe Flash player

Projects at Roostertail Games

an image

Well, we're not really up and running but I thought I'd share some of what I've been planning so that this page is a little more interesting.

Additionally, I'm going to start a script library of sorts for use with Torque engines.

Now, a word about the AI scripts - if you want to use them you'll have to make a new Torque 3D project, then copy those scripts directly on top of the project scripts. I could have trimmed that pile down to about 20 files in all, but I didn't get around to finishing that or the actual tutorial. The scripts that I modified should be obvious by the dates, and I tried to comment them thoroughly.

I'm also including the source for my slightly tweaked version of Luna, a Lua/C++ binding tool.

Torque 3D Conversation Editor

Update - 30 Aug 2015

Version 1.0 is "ready." You can pull down the installer here. I have added a quick start guide at this location.

Now, when I say "ready" what I mean is that I have tested this myself. If you've ever written software you know that testing your own stuff leaves you with huge blind spots. So if you find a bug please report it to me via the email in the Contact Info section in the sidebar.

Update - 22 Aug 2015

Okay, I think it's ready for use so I'm going to start working with it to create conversations for my current (erstwhile) project and see what tweaks I think it needs. Once I feel that it's solid I'll turn my attention to refactoring it as described earlier. This will place a larger burden on plugin writers but will also give them greater control over how nodes are configured and therefore over the final output.

Update - 20 Aug 2015

This is almost ready - mostly just options dialogs left to fix. Right now you can begin editing a conversation graph, save it to disk (JSON format if anyone really cares) and then load it back and continue editing. The TSWriterPlugin writes the conversation to TorqueScript that can be consumed by a conversation script system that I have been fiddling with.

Next I plan to reorganize the systems so that the plugin manages the node types and internal item layouts so that the main program doesn't have to either dictate or care about how that's done - plugins will be completely free to use the graph solely for editing and to deal with the data however it wants.

16 Aug 2015

So, got a wild hair and decided to build a conversation editor using the Graph library from here: https://github.com/LogicalError/Graph.

I made a few tweaks, but essentially it's ready to rock and roll out of the box. I just wanted to be able to handle clicks for all node items. I also wanted a way to make it easier to see what tags I was actually using so I added this:

// Friendly tag def
public static class TagType
{
    public static CheckboxClass CHECKBOX = new CheckboxClass();
    public static ColorClass COLOR = new ColorClass();
    public static DropDownClass DROPDOWN = new DropDownClass();
    public static ImageClass IMAGE = new ImageClass();
    public static LabelClass LABEL = new LabelClass();
    public static NumericSliderClass NUMERICSLIDER = new NumericSliderClass();
    public static SliderClass SLIDER = new SliderClass();
    public static TextBoxClass TEXTBOX = new TextBoxClass();
    public static NodeTitleClass NODETITLE = new NodeTitleClass();
}

// Dummy classes to use as types for item tags
public class CheckboxClass : object { }
public class ColorClass : object { }
public class DropDownClass : object { }
public class ImageClass : object { }
public class LabelClass : object { }
public class NumericSliderClass : object { }
public class SliderClass : object { }
public class TextBoxClass : object { }
public class NodeTitleClass : object { }
        

Since the node tag system relies on the tag's type, this works pretty well.

I also added a simple enum for the input/output property of node items instead of passing two booleans.

public enum NodeIOMode
{
    None,
    Input,
    Output,
    InOut
}
        

And now you create nodes something like so:

var node = new Node("Conversation Node");
node.AddItem(new NodeTextBoxItem("NodeName"));
node.AddItem(new NodeTextBoxItem("Enter NPC text", NodeIOMode.None));
node.AddItem(new NodeLabelItem("Conversation input", NodeIOMode.Input) { Tag = TagType.TEXTBOX });
var editNode = new NodeLabelItem("Click Here To Edit Output List");
editNode.Clicked += new EventHandler(editOutputListNode_MouseDown);
node.AddItem(editNode);
node.AddItem(new NodeTextBoxItem("Enter player text", NodeIOMode.Output) { Tag = TagType.TEXTBOX });
this.DoDragDrop(node, DragDropEffects.Copy);
        

So, mostly "quality of life" changes. Now I just have to get it to write the graph out as a bunch of script that can be used to power a conversation system in Torque! I've got a start on that so all I have to do is get it all into a cohesive script package and away we go....

Interactive Comics

I got it in my head that a good starter project would be something like interactive comic books. I don't know how many people remember the old "Pick Your Path" books, but the general idea is that you read a section of the story and then at the end of the section you can choose to do one of two or three things. Depending on what choice you make you are directed to go to a new page and continue reading until you reach another decision point or you finish the story.

So, my girls have been interested in art and writing since they were able to hold a crayon. My plan is to enable them to tell their stories in an interactive e-book for desktop and mobile platforms. My plans are a little fuzzy after that, but it would be fun to act as a sort of clearing house for kids who want to draw and write stories to share with others.

downloads/reader.zip

Deathball Arena

There was a game a while back from Instant Action called RokkitBall. It was basically a sort of high-speed rocket-launcher and jet-pack basketball game. In a forum post on GarageGames.com someone mentioned that the "Deathball" in the Deathball Desert demo mission didn't do anything when you shot it. Immediately, the image that leapt into my mind was a soccer game like RokkitBall with this giant, spiked metal ball from Deathball Desert. So, here is a screen shot.

Deathball Arena 4

That's a big ball.

My prototype uses the old Boombot from one of the TGEA demos and I'm running entirely in Torque 3D 1.1 at the moment. I'll be porting to 1.2 before I really start cleaning things up. I'm planning to extend the Universal AI Starter Kit to handle playing the game while also harassing the players on the other team so that you can have a match with three on three even if you don't have all of your friends online.

I did some experimenting with Raknet's voice system but haven't figured out how to port it to work with Torque 3D yet. I think it would be cool to get voice chat integrated, especially if it was set up to handle team channels. Failing that I guess I'll just tell people to use Mumble, Ventrilo or Teamspeak....

Nerdly Needs - Gaming Utilities

Rank Counter 4.0 is the fourth iteration of a tool that I put together to use in our Pencil-and-Paper role-playing game sessions. We were having trouble with interruptions that would cause us to lose track of just whose turn it was and what point in the round we were at. Kids, spouses, you know. So we came up with a tool that would help us with this, and also help to alert anyone whose turn was approaching that the combat was progressing.

The Rank Counter just counts down from 30 as you tap the space bar and plays a sound to alert the players that the combat is progressing. When the "rank" count reaches 0 it increments the round counter and starts the initiative count back at 30. It resets when you hit the Escape key. I'll be adding other handy features that the original had as I go along - a music player, an easier way to edit the sound lists, a pop-corn popper, a quick method for adjusting the number of "ranks" in a round, etc.

Rank Counter screenshot

Instructions

SPACE - to advance the current initiative count within a round.

LEFT SHIFT - to reset the counter.


If you're interested in giving it a whirl here's a download link. You can always drop feedback at service@roostertailgames.com.

Donations Gratefully Accepted

I've started a Patreon campaign to help pay site support costs. Donations are gratefully accepted and greatly appreciated.

Vegassparkyrich on Patreon
Highlights
  • Feb 1, 2014

    I've added a copy of the Torque 3D Documentation to my site. This was a move on my part to alleviate some frustration I was feeling related to being unable to update the Official Documentation with corrections or clarifications to the existing articles. The link is just down a bit from this sidebar item....

  • Mar 2, 2012

    The main menu buttons got a slight style tweak, making the active state more visible and the menu text more legible. This should be the last style adjustment and then it's just a matter of generating several pages of bogus content.
    Read more...

Torque 3D Reference
Torque 3D Online Documentation

This is not the "Official" Torque 3D documentation. This is my personal version. It will have some portions that are newer or have been edited for clarity, and it will have some portions that are very stale. I update the things that I am interested in or that I have seen many questions about on the forums. I will be adding things as I discover new ways to do this or that, or just because I think they're nifty.

Torque 3D Source Reference

Torque 3D 3.7
Torque 3D 3.8

This is a generated document, and as such may not be as helpful as one might hope. However, it is a complete class, namespace, file, and variable reference generated directly from the source and does contain inheritance diagrams (pretty helpful in their own right).

You can always contact richard@roostertailgames.com with corrections, updates, questions or requests, but be aware that I'm grumpy and don't always answer my email.

Contact Info
an image
Roostertail Games
Las Vegas, NV 89147
Email: service@roostertailgames.com
For Fun
Two fish swim into a concrete wall. The one 
turns to the other and says "Dam!"