Saturday, January 25, 2014

Chuggin' Along - Winds of Commerce

Hey guys!

Just a quick update on Winds of Commerce. I've been steadily getting components of the code done. I recently finished up opening and filling the information page which will give you a random amount of information about the city you click on. From there you can purchase additional information if you'd like. I also decided to add a transaction list to the game, that way you can look back and see how much you spent, or made, at a given city and on what day that was on. It will also show you the net profit from each city.

While I have completed quite a few things, I still have a lot of work to do with the menus, choosing the starting options, and the end game.

Here is a neat bit of code I found while doing all of this that would have made some of my previous projects a little smoother. This allows you to create a movieclip in Flash, from Unrealscript. This helps because you then have an easier reference to dynamically created objects than you would spawning them through AS3. Here is the code to add the movie:
//In your custom GFxMovieplayer class var GFxObject RootMC, TestMC; RootMC = GetVariableObject("_root"); RootMC.AttachMovie("mySymbol", "myInstanceName"); TestMC = GetVariableObject("_root.myInstanceName");

This part of the code is pretty self explanatory. The function AttachMovie takes 4 parameters, but only two are required.
/** Attaches a symbol to specified movie instance. If no instance is found in this object's scope with the InstanceName, a new instance is created and returned */ native final function GFxObject AttachMovie(string symbolname, string instancename, optional int depth = -1, optional class<GFxObject> type = class'GFxObject');

The first parameter is the name of the linkage name you set in your Flash file.
The second is what you want the instance name to be of the newly created movieclip. You  can also set the depth of the new movie clip, or where it falls on the z-order in the SWF. The last parameter is what class to cast the return as, but I'm not entirely sure.

Now, even though they have a function to add a movieclip, they don't have one pre-built to remove one through Unrealscript. Matt Doyle, on the Epic Games forums, posted a work around(here) that works like a charm. First you'll need to create a new class extending from GFxObject. This will allow us to add the proper functions to remove the clip.
class GFxDisplayObject extends GFxObject; function RemoveChild(GFxObject childObject) { ActionScriptVoid("removeChild"); } defaultproperties { }

This will allow us to call the removeChild function easily on a movieclip cast to this class. When ActionScriptVoid(or similar, like ActionScriptBool, or ActionScriptObject) is called it will automatically pass whatever parameters are passed to the function that is calling it. In this case it will pass childObject onto the removeChild function in AS3. To actually make use of this you just need to add this line into your custom GFxMoviePlayer class:
//In your custom GFxMoviePlayer class GFxDisplayObject(TestMC.GetObject("parent", class'GFxDisplayObject')).RemoveChild(TestMC);

Here, you are grabbing the parent of the movieclip you want to remove, casting it into the custom GFxObject class you made, then calling the RemoveChild function of it, passing the desired movieclip. This line is really versatile since you don't have to set a hardcoded path to the object, since you are getting the parent.

Well enough rambling. hope this was helpful to someone.

Monday, January 6, 2014

And Now We're Back From Our Intermission!

Hey guys!

Sorry it's been so long, life has been hectic! Thankfully, my life has mellowed out a lot now, so I can get back on a regular updating schedule.

In the spare time I have had I've been dividing my time between working on that commerce game I mentioned in my last post, and helping a buddy with a game he's working on.

The premise of the trading game is you are the captain of a merchant ship. You can find more information here. You start off with a set amount of gold and you buy your first cargo with it. You then have a set amount of  'days' to go to different ports to try and make the greatest profit in that time. Each port, except the starting one will have randomized prices and quantities so each playthrough will be different. I've made some pretty good progress so far. I have the core system down for determining the value and quantity of the various goods, and I've almost finished up the information system in the game. This will allow you to get information on the different ports ahead of time, to help you plan. I still need to implement the actual buying and selling of goods though.

I've made a very simplistic mock up to give a representation of the game. To exit the trade and information windows just click them.

That's all I have for now. Once I get things a bit more organized I'll put up some interesting code bits, images, or something.