Jump to content

  • Log In with Google      Sign In   
  • Create Account

Pixel → Tile → World

Code snippet for typesafe void* userdata

Posted by , in Code snippets 28 July 2013 - - - - - - · 1,378 views
Just tossed this piece of code together - it wraps void* points with asserts() to ensure you are getting the same type that you originally set.
Normally I shy away from void* pointers as I feel like they are indicators of bad design, but sometimes you need to use them, and when you do, they might as well be type-safe.

This is kinda a lightweight alternative to boost::any, but not designed by a peer-reviewed team of professionals who also have seats on the C++ standards committee. Posted Image

Requires C++11's typeid(), and RTTI enabled.
#include <typeinfo>
#include <vector>
#include <cassert>
//Quick macro to replace my real Assert() function, just for this file.
#define Assert(condition, message) assert(condition && message)
//Holds any type of user-given pointer that can be cast to void, and does run-time checks on the type of the data when retrieving it.
//Ownership is *not* taken. It is the original owner's responsibillity to ensure the lifetime of the object when
//someone tries to retrieve the pointer later. The Userdata class itself never de-references the pointer.
class Userdata
    Userdata() = default;
        template<typename UserType>
        Userdata(UserType *data)
        //Sets a user-spe
        template<typename UserType>
        void Set(UserType *data)
                //Save the pointer (cast to void*), and the type's RTTI information, so we can validate on retrieval.
                this->type_info = &typeid(UserType);
                this->userdata = data;
        template<typename UserType>
        UserType *Get()
                //Validate that we've actually set *anything*.
                Assert(this->type_info, "We never set any data, so we can't retrieve any.");
                //Validate that we are getting the same type that we initially set.
                Assert((*this->type_info) == typeid(UserType), "The types don't match - we can't retrieve the userdata safely.");
                return static_cast<UserType*>(this->userdata);
        void Reset()
                this->type_info = nullptr;
                this->userdata = nullptr;
        //A pointer to the global compiler-specific (but standardized) type_info for this type (the type that Userdata's void* points to).
        //C++11 guarantees that "The lifetime of the object referred to by [typeid()'s return value] extends to the end of the program." (N3337 5.2.8)
        const std::type_info *type_info = nullptr; 
        //A pointer to the user-defined data.
        void *userdata = nullptr;
//Manages a FILO stack of void pointers in a type-safe way.
//This class does not take any ownership of the data pointed to.
class UserdataStack
        UserdataStack() = default;
        ~UserdataStack() = default;
        template<typename UserType>
        void Push(UserType *userdata)
        template<typename UserType>
        UserType *Get()
                Assert(!this->stack.empty(), "The stack is empty - we can't retrieve any userdata.");
                return this->stack.back().Get<UserType>();
        void Pop()
    //Pops the stack, and returns the pointer previously pointed to.
    template<typename UserType>
        UserType *Take()
                UserType *data = this->Get<UserType>();
                return data;
        void Clear()
        std::vector<Userdata> stack;
Compilable code on Ideone.com

Note: By design, the Userdata/UserdataStack classes don't take ownership of the data. I guess that's another difference than with boost::any - though you could always just pass boost::any some pointers.

Cabinets and shrubbery for Of Stranger Flames

Posted by , in AdventureFar, Pixel art 25 July 2013 - - - - - - · 1,283 views
art, concept art, sketches and 1 more...
Here's some art I made today and yesterday for my RPG game project.
(Note: This art is not public domain - I intend to use it for my own game projects - though I'd love to release some of it in the future)

Since Of Stranger Flames takes place in a heavily-forested land, I need alot of shrubbery to make the environment more detailed and 'natural'.
Previously I posted pictures of some trees I was working on. Yesterday and today I made some shrubbery:

Attached Image

Note 1: This is not a screenshot from within the game, this is merely a test image layered in an art program.
Note 2: I added way too many shrubs in the picture.
Note 3: Every shrub there is a different shrub, they aren't copies of each other.
Note 4: I added way too many notes under this not-a-screenshot image.

Since the game also takes place in urban environments - namely: small villages, prosperous towns, and prosperouslier cities - then I need the inside of the buildings to also look good.
These images are some cabinets I just finished:

Attached Image
Attached Image
Attached Image Attached Image

Here's the concept art I sketched several months ago, which I based these cabinets on:
Attached Image

I drew it while re-re-watching Pride and Prejudice (the good one - the 2005 movie). Posted Image

Tiny bit of art, some programming talk

Posted by , in AdventureFar, Pixel art, Code snippets 21 July 2013 - - - - - - · 1,163 views
Here's a few pieces of art I made for my game, in between programming.

Stone fence
Attached Image

I just finished this a few minutes ago - it took about an hour.

Attached Image

I guess about a week ago? Maybe two.


Didn't get anything done today - rather lazy. Still have a few hours left in the day, so I'm going to crack back into the code for a bit more work.

Yesterday and the day before I made great progress finally figuring out a good resource-management system for my game. This is after a week or two of false-starts, and several concepts drawn on paper over the past few months. The end result isn't anything special - but all my prior attempts were either too limiting in capability, or else too generalized to be useful. I've gotten it mostly working already, and yesterday I started connecting it up to the old area-drawing code that I haven't seen in several months. I'm happy with the area-drawing code - it's still stable and clean - but the tile-drawing and image-sharing code that I was replacing just was too clunky.

One bit of code I'm somewhat proud of is a new serializing system I wrote up to replace my old one. The new one is more reusable and a pleasure to use, though there is one annoying thing I'd like to fix later.

The new serializer is heavily template-based for great flexibility, observe:
struct MyStruct
	std::tuple<std::pair<std::string, int>, float, std::vector<std::string> > tupleOfPairsAndVectorsOfStrings;
	float otherStuff;

//Template specialization for serializing 'MyStruct'.
size_t Serialize<MyStruct>(Serializer &serializer, MyStruct &tileDetails, size_t pos)
	//Automaticly calls the overload for floats.
	pos = Serialize(serializer, tileDetails.otherStuff, pos);
	//Automaticly calls the overload for tuples, which in-turn calls the overload for each tuple's member,
	//which in this case calls the overload for std::pair<> which then calls the overload for std::string and int,
	//and also calls the overload for std::vector, which calls on each element the overload for std::string.
	pos = Serialize(serializer, tileDetails.tupleOfPairsAndVectorsOfStrings, pos);
	//Sound slow? Not when you remember template functions are resolved at compile-time. =P
        //It shouldn't be any slower than most other serializing methods.
	return pos;

class Foo
	//Calling Serialize() on class 'Foo' automaticly detects that Foo has a Foo::Serialize() function, and calls that instead.
	size_t Serialize(Serializer &serializer, size_t pos)
		//Calls the Serialize() function for vectors... which automaticly detects the type of element in the vector,
		//and calls Serialize<ElementType>() for each element in that vector.
		return Serialize(serializer, this->arrayOfStructs, pos);
	std::vector<MyStruct> arrayOfStructs;
While not intentional, I think it's also loads faster than my old class, which is a nice plus. I haven't profiled it yet to see.

Better still, I don't have to code almost-identical read and write serializing functions for classes - just one function, that reads OR writes, using the same code. Serialize() depending on the nature of the Serializer passed in, reads or writes using the same functions. And without a bunch branching statements - it redirects to the read or write function using a function pointer.

Using a function-pointer also allows me to redirect to Safe or Fast read functions at run time (or for individual pieces of code), depending on the requirements of the program. If I want to, I could later also add Encrypted read/write functions, or Compressed read/write functions, without changing any existing code, but by just adding the new functions to the Serializer class that handles the incoming bytes.

Editor screenshot

Posted by , in AdventureFar 06 July 2013 - - - - - - · 812 views
rpg, tile, editor
What's cool about Qt is that you can make really impressive looking interfaces fairly quickly.

Here's what the editor looks like today, compared with a week ago:

Posted Image

Still alot of work todo. I'm halfway considering licensing this editor out as a RPG making tool, or maybe just a tile editor, when I finish it. But that's low priority. The focus is on making the editor stable enough to use it for the Of Stranger Flames and several games afterward.

Editor work and forest work

Posted by , in AdventureFar, Design 28 June 2013 - - - - - - · 943 views
design, editor, rpg, trees, maps
For a few reasons, I needed to rework a good part of my game editor *again*. This is at least the third time.

Here's the work I did today and yesterday, but I think I'll be able to quickly re-integrate the components from the previous editor. Most of the underlying engine code is the same.

Posted Image

Last post I mentioned some of the trees I've been working on. Since the world of Of Stranger Flames is predominately covered in forests, the trees need to look even better, and there needs to be alot of foliage and underbrush and things like fallen logs on the forest floor.

Also, even more importantly, different portions of the forest need to have a distinctive look and feel so it doesn't all seem identical.
Here's something I slapped together a few days ago:

Posted Image

I've had this 'guideline' map for awhile now, just to help solidify the shape of the world. There will be a much better map ingame - this is only for developmental purposes.

However, I layered over some trees to give a feel for the four separate wooded areas and to look at some of the colorschemes I'll use for each area. The upper-left one will probably use more redwood-esque trunks, while the lower-right forest will probably have a mix of light-brown trunks and grey birch-like trunks.

Sometime in the future I'll need to create a few more tree types. Right now all I have is something vaguely looking like a pine tree. More variation would be better. We'll see how it turns out.

I'd like to be a tree

Posted by , in AdventureFar, Pixel art, Design 25 June 2013 - - - - - - · 1,136 views
2d, art, pixel, rpg
I'd like to be a tree I know I haven't posted in a long while. Still working on Of Stranger Flames, but progress has been sporadic. Still optimistic though!
Here's some of the tree art I've been working on:

Attached Image

Alas, this is not a screenshot from within the game, but merely layering the tree components (shadow, trunk, leaves) over each other in a image editor. Because the trunks are separated from the leaves, I can mix and match any of the 19 trunk variations with any of the 10 tree tops in 13 different colors of tops. Hopefully that'll give enough variation for some good forests - most of the French colony in Of Stranger Flames takes place in heavily forested areas, so they need to look good and have enough variation. I'll hopefully animate them just a little in the wind, by slightly rotating the tree tops +-10 degrees.

Oh, I have one of those 'tweetering' accounts now, if'n you care to follow me. I average about 5 twits a week, so I'm not too spammy on your feed. Though I should really increase that to at least twice a day... Sometimes my feed gets filled with a single twitter user tweeting seven or eight times in a row. Posted Image That's not something I want to mimic.

I haven't posted in awhile, so here's some art I've been working on

Posted by , in AdventureFar, Pixel art 24 March 2013 - - - - - - · 1,237 views
pixel, art, tile, rpg
I've set up mercurial and use that for Of Stranger Flames. I should've learned some kind of source versioning system years ago, but the list of things I 'should learn' is rather large. Posted Image

Mercurial was surprisingly easy to get up and running, so I'm glad. I've installed TortoiseHg but I end up doing everything by the command-line anyway, so next time I won't bother installing the GUI.

I've been making very slow progress, chipping away at things here and there. Yesterday, for a small programming break, I made some windows with curtains:

Posted Image
I tried to design the window so that it'd work with multiple different wall-types, though I'm not too pleased with the result. I don't particularly like the way the glass panes, the framework between the frames, or the window sill came out. Which is pretty much everything except the curtain rod. Posted Image

I like the curtains much better though! And since the curtains block most the window, and I don't outright hate the window, I'm not too concerned with getting it perfect. The main thing that irks me about 2D windows, is what do you show through it? Grass? Streets? My usual 'sky blue' panes don't make much sense, since the player is looking down at the window at an angle.

I guess I could make the panes semi-transparent and place ground tiles beneath it, depending on what the window actually looks out at. This is something I'll tweak once I get the much-talked-about-but-not-finished map editor working and am able to walk around in-game.

Here's the window covered with curtains:
Posted ImagePosted Image

Not to compliment my own work or anything (Posted Image), but I particularly like how the line shines through the curtain.

Posted Image
This first parted curtain is rather unnatural - the strait lines and how the curtain comes to a point (instead of a clump) at the bottom.
My later versions improved:
Posted ImagePosted Image
Posted ImagePosted Image

The only thing really lacking in these curtains (aside from the gold tiebacks on the blue curtains that I accidentally miscolored) is that the curtain doesn't bunch together in folds of frabric, but I'm not particularly worried about that.

This was about two hours work.

I wish I had something more substantial to show, programming-wise, but on-average 90% of my programming work is non-visible. Lately (past four or five months), 110% of my programming work has non-visible and seemingly insignificant. Oh well, progress is being made, even if slowly!

Easing along, one step at a time

Posted by , in Code snippets 02 March 2013 - - - - - - · 2,586 views
interpolation, easing, tweening
I just finished adding some of the standard Ease equations to my code base for use in Of Stranger Flames.
In discussion about the equations, it was requested for me to share the code here. This is not a tutorial, I don't have enough familiarity with the subject (or with math in general) to explain how every equation works. I'm just posting what I added to my own code, so others can use it if they want to.

The equations are mostly from Robert Penner's eases, which are under the BSD license. His code seems to be the ones that are used by most software, such as the jQuery, Flash, and other libraries.

Most Ease equations have the function signature:
void equation(currentTime, start, distance, totalTime);
I personally like having my eases in start at 0.0, end at 1.0, and have a 'duration' of 1.0, and then I scale the input and output as desired, instead of having the equation scale it. It just makes it easier for me to understand.

That said, all my functions have the format:
void equation(position);
...with 'position' being from 0.0 to 1.0.

Because Eases come in various forms (You can ease IN, OUT, IN and OUT, or OUT and IN), I made sure all the ease equations were in EaseIn form, and I created a few functions to convert the input and output to the other forms as desired.

Here's the conversion code:
http://ideone.com/6rc0Zk (Posted as links, because all my code kept getting unformatted when hitting 'publish')

EaseFunction is: "typedef std::function<float(float)> EaseFunction;", which nicely permits the use of things like lambdas and functors as well as the regular ease functions. If you don't have C++11, you can just typedef it as: "typedef float(*EaseFunction)(float);" or whatever the correct C-style function-pointer syntax is.

Some of the ease equations have a few extra parameters, like ElasticEase and BackEase, so I provided some C++11 templates to convert the functions to std::functions that meet the function signature shared by the other functions. It's just a wrapper around std::bind for convenience. (I'm big on convenience! Posted Image)

You don't have to use C++11 to use the equations! Just the helper functions above.

I also use this function for scaling the output:

Actually, mine looks like this:
...but that depends on a 'FloatRange' helper class I made, whereas the previous one has no dependencies.

I actually made two ScaledEase overloads, one for my Point class, and one for my Color class. I haven't tested those out yet. Posted Image

I also made a Easer class, that handles most of everything inside of it. This is more for when you want persistent ease data wrapped nicely, and this class would be a member-variable of another class.


That also uses FloatRange, but can be easily adjusted to just use 'float begin' and 'float end' instead.

The Ease Equations
And here are a few additional ones I keep inline

The next page has graphs generated to test/demonstrate the output.

Hammering away on code and art

Posted by , in AdventureFar, Pixel art, Indie games, Design 15 January 2013 - - - - - - · 1,089 views
pixel, art, rpg, tile
I've been busy with code, and though I've been making little progress, progress is being made.

Yesterday and today I tossed together some art for my game to give me a break in-between compiles. This week's theme has been rough wooden structures.

(Note: This art, like all the art I reveal on here, is copyrighted by me for use in my own projects, so duhnt ya be steelen' it!)
(Note 2: I reposted this from my broken website, JaminGrey.com | StrangerFlames.com)

Posted Image

I'm not likely the texturing of the ropes too well, but other than that I'm quite pleased with the result.
There will probably be a gallows in two or three different towns... and depending on your judging decisions as a Guardian, you might get to hang a bandit or two.

Posted Image
Posted Image

These benches are for exteriors, like town squares or house gardens.

Cross for churches:
Posted Image

There are a couple churches scattered through the colony, but only one plays any real significance in the plot.
The churches in the game are all Catholic since France was heavily loyal to the Catholic Church during the time period of the game (the game takes place a few years after the reformation, though that doesn't feature in the game).

Wooden outdoor stairs:
Posted Image

Wooden floor:
Posted Image

Check out my nicely staggered bonds! That's how floors are supposed to be laid... or at least how I've always laid them, every single time (all one of them) that I did so.

Wooden fence:
Posted Image

I was too lazy to make the north-south fences for this fence set. =)

Wooden posts:
Posted Image

Just a couple wooden posts with no particular purpose.

I hope everyone is doing well, and that your projects are progressing better than mine is! Posted Image

Relaxing on a pixel-art couch

Posted by , in AdventureFar, Pixel art 05 December 2012 - - - - - - · 1,340 views
art, pixel art, 2d, rpg, design
While wrestling an annoying segfault (one of those, "This shouldn't be happening" bugs), and while chipping away (slowly) at a easy but tedious piece of code that I need to write, I ofcourse recline back and work on some art.

Apparently this weeks theme is couches. I guess my game takes place in a furniture store. Posted Image

Posted Image

Posted Image

Posted ImagePosted Image

I also made this really cool faux archway with a mural inside it:

Posted Image

It came out really good! The 'mural' part is a Creative Commons photograph from Wikimedia. Which is the majority of that piece of art. So I can't really claim much credit for it. Posted Image

I'm still trying to figure out the whole CC Share-Alike issue though - does that mean that specific tile is a 'Derivative work' or the entire game? I'll need to do more research to find out. Luckily I only use the CC stuff in two pieces of art, and neither are game- or plot-critical.

Minor progress update

Posted by , in AdventureFar 24 November 2012 - - - - - - · 1,370 views
game, development, editor
I've been making alot of progress on minor points, checking things off my list(s). This is especially good, because I've been really disappointed with my progress of late, mostly due to being busy with non-game development stuff that had to get done, and while my time wasn't "taken up", it was fractured into pieces that made it hard to really get into programming.

On one hand, I've been saying to myself and to others, "The level editor is almost complete! Just a month or two longer!". Alas, but I've been saying that for over a year now. Maybe longer. Posted Image However, I keep saying it because I really believe it - now more than ever! I keep on making progress and making progress, getting closer and getting closer - so I'm really truly close now. Just a month or two longer! Posted Image

My sister, who's agreed to help with map editing, practically rolls her eyes whenever I tell her "the editor is almost done". It's kinda a running joke now.

By "done" I mean "75% usable, so we can start making maps". Not 'perfectly finished'. I'll have to continue to tweak and refine it as we use it, but also, some of the features I will eventually need I'm not planning to add until later.

Quick checklist of recent things added:
  • Renaming floors and layers work
  • Adding floors and layers work
  • Deleting floors and layers work
  • Moving/reordering floors and layers work
Also got several things working again (after the internal area structure change).

Here are some of the things I fixed again:
  • Tile grid
  • Cell borders
  • Tile placement
I've also touched up the Tile Explorer some, and got world scrolling working again.

Apart from area saving and loading, and a few other minor odds and ends, I'll be ready to start making some of the first few maps. (Though collision detection and all that jazz won't be working yet).

Here's something cool I added, in-between other stuff: Dragging and dropping of layers to re-order them.

Posted Image

Here's me just playing around. I increased the default map-editing size to 5x5 cells, instead of 3x3, and adding more levels of zoom.
Here I'm zoomed out so much you can't really see anything clearly because of the red gridlines. I'm adding an option to toggle the gridlines.

Posted Image

So I'm really excited. Soon, the editor will be ready. I hope. Posted Image

Smidgen bit of art

Posted by , in AdventureFar, Pixel art 18 November 2012 - - - - - - · 1,719 views

Here's a few pieces of art I tossed together over the past dozen or so days while waiting for code to compile.

Colorful swirling floor
Posted Image

It tiles horizontally and vertically better than you'd guess.

Stone wall
Posted Image

Not my best work - I think it contrasts too much with my other art, but I'll wait until I can see it in-game before deciding whether to discard or modify it.

Stone patterned floor
Posted Image Posted Image

Meh, might be too visually "busy" - especially the one on the right. We'll see. Posted Image

French flags
Posted ImagePosted Image
Posted ImagePosted Image
Posted ImagePosted Image

The blue with gold is the french national flag of that time period (I hope!), according to Wikipedia.
The other variations are fictional that I thought might look cool. Since the colony is (unwilling) independent from France, but wants to be under French rule, they probably would use the French flag. The black version I might use for the colony's Guards, and I might use a green flag with a silver fleur-de-lis for the Rangers.

Posted ImagePosted Image

Two different banners that don't mean anything - just for hanging outside of buildings.

Cloth door covering
Posted Image

Here we start to get to some cool stuff. This cloth covering would hang on the outside of a building, over an open doorway. Uh, probably as a early form of a screen-door, to keep out bugs and some sunlight but let in some fresh air? I don't know, I just felt like drawing some cloth which is difficult for me. I'm pleased with how it came out (better than the flags, anyway!).

Rope hanging on wall
Posted Image
A nice rope to hang on the outside of some building, like a stable or someplace. Or inside, for a storage room, I guess.
Of specific coolness is the nice drop-shadow (hard to see here), which will make it stand out nicely on a stone wall.

Horse ring
Posted Image

A metal ring fastened to a stone wall to tie horses to. Also has a drop shadow for visual bonus points. Posted Image

Wishin' ya' all a happy Feast of Fowls this week. Peace be on your family interactions! Posted Image

Some new tile art, a new concept town sketch, and code architectural change

Posted by , in AdventureFar, Pixel art 27 October 2012 - - - - - - · 1,963 views
development, rpg
Hey guys! I got some work done the past week or two. Not as much as I was hoping to, but at least I got something done. Posted Image
For starters, layers now can be created/deleted using the editor.

Code architecture change

I've made some non-visible changes to the code architecture. I was running into an interesting problem, where I had my code too flexible to be easily wielded.
Previously, I had my game areas laid out like this:
  • An Area contains Chunks in a grid of an infinite non-defined size.
  • Each Chunk contains Floors (no hard limit on the number of floors).
  • Each Floor contains Layers (no hard limit on the number of layers).
  • Each Layer is 20 x 20 tiles.
The benefit of this is that chunks that only need one floor, or just three layers, only have one floor or three layers or whatever, and the chunk right next to it can have 20 floors if needed.

The first major "problem" I encountered with this was when editing chunks in the editor. If I'm placing tiles on a floor named "Floor 1", on the layer "My background layer", and I am laying the tiles down without letting go of the mouse button, and I cross the chunk threshold to continue placing tiles in the next chunk - if that chunk doesn't have "Floor 1" (and instead has a floor called "My Floor" or "Bottom floor"), or doesn't have a "My background layer", what Floor and Layer am I placing the tiles on?
Do I not place the tiles down at all (heavily reducing the ease of map making)? Do I count which numerical layer "My background layer" is - it happens to be the first layer in the array, so switch to the first layer in the array on the next chunk? Do I create a new layer implicitly to match?

Fine, so I'll just sync up the layers. If I make a "My Floor" in one chunk, every chunk in the Area will have a "My Floor".
This leads directly to the second major "problem": Not all the chunks are loaded in memory at once. Only the nearby chunks are loaded, even when editing. So... if I add a new layer, do I add it only to the chunks in memory? What about all the unloaded ones? Do I add the new layers to the unloaded chunks on the harddrive? What if I then don't "save" the changes to the Area... do I then have to go delete the new layers that were added to the unloaded chunks on the harddrive?

There were three or four such problems - they all had solutions, but the solutions just felt like band-aids, so I am now rewriting the architectural code layout of areas. Since all the important code is already written, this code change actually won't take long at all.

Here's the new layout: (knocked up in MS Paint to help me visualize it while thinking)
Posted Image

The primary benefit is that Layers and Floors are automatically "synced" between chunks (or rather, they no longer have to be synced at all, since chunks now "exist" within layers and floors instead of vise-versa). I renamed Chunks to "Map Cells" to help myself not associate the old mental imagery with the new layout. As a figurative concept, Cells are much easier to work with. A "Layer" is broken into TileBlocks, one TileBlock for each figurative 'Cell'.
However, if a TileBlock is empty (or only filled with a single tile) it will be heavily optimized away, so ideally this new layout won't waste any more memory than the old layout, but will be much easier to work with (less band-aids needed to make it usable).

New concept town sketch

Posted Image

I drew this two days ago. It's the port city which I previously called "Viarmhiem" (but every town name is going to be changed - I decided to not use a made up language, and every in-game town will be derived from French, Latin, or Italian circa the 1500s to better fit the plot of the game).

I don't know how much work I'll actually put into the city/town, it doesn't really play a major part in the game's plot. Well, actually, to tell you the truth, it doesn't play any part in the game's plot (at least not in anything I've written yet). It's important culturally and historically to the area the game takes place in, but that's about it... so is it worth it to invest time making the city feel alive?
On one hand, I feel "Why bother wasting time and effort on it? Focus on the parts that matter, and ship the game, move past "Go" and collect $200, before you go bankrupt". On the other hand, there is the importance of polish and extra detail that players will appreciate and hopefully help make the game an underground hit in the 2D turn-based RPG niche. On the third hand, IF I ever get around to working on the two other games that take place in the same game world, it won't be wasted effort, and it'd be extra nice to see how the town develops and grows as time passes between the three games.

New tile art

I also spent some time this week putting some new art together.


Posted ImagePosted ImagePosted Image

As mentioned before, I can actually apply coloration to the tiles within the editor - even so, usually I knock up multiple colorations while making the piece, just to hopefully later give me inspiration when I come across them in the editor.

Wood-paneled walls with built-in shelves

Posted Image

I'm very very happy with how these came out. Particularly the shadowing for the stairways, but overall I think it came out well. The walls are three tiles high (12ft) - most of my game will have walls 2 tiles high (8ft), so it's unusual, but makes sense in a wealthier house (like a Governor's or Lord's house). Such nice panelling also wouldn't be common, except in a wealthier dwelling. I think it'd also go well for a tavern, so I'll probably re-use it in several places in the game.

Here's a few more previews from the same set:

Posted Image

Posted Image

The mural (in the first image) I made two hours or so ago, but all three portraits (barring the picture frames) in the last image are public-domain work (thanks Wikimedia Commons!). Hopefully the people playing the game don't recognize any of the portraits (the guy is the Duke of Tuscany, for example), because some art historian could totally call me out on the timeline of the portraits.

"Sir! These portraits are all from the 1700s... And painted by a Dutchman! I was led to believe that your plot takes place in the mid-1500s, concerning the French!" Posted Image

I looked at the 1500s art, and didn't like it much, so I took some artistic liberties and time-travelled forward two centuries. Do you think anyone will notice? Posted Image


*phew* That was a long post... more like how I used to write 'em.

I hope all your projects or educational pursuits are coming along well!
Don't forget to tune in next week to find out that I didn't actually post anything and probably won't for another month. Posted Image

Layers interacting with the editor

Posted by , in AdventureFar, Design 19 October 2012 - - - - - - · 1,165 views
editor, development, rpg, indie and 2 more...
I've been having loads of difficulty getting the "game" part of the code interacting with the "editor" part of the code, but I've finally hit on a decent solution. Such interface-to-system messaging is a problem I usually have with my not-thought-through architectures, but I'm getting better at it... though I still should probably sit down with a few higher-level architectural software engineering books - it'd do me good.

I got layers and floors properly interacting with the editor again today:

Posted Image

I still need to add things like "rename/delete/copy layer", and moving around the order of the layers, but as usual, the logic is all there, just my editor->system code is lacking.

A month or two ago, I re-added zooming in and out to the editor:

Posted Image

And a few weeks ago I re-added tile placement patterns (for placing more than one tile at a time):

Posted Image

(This Of Stranger Flames post was reposted to Journeys in Grey)
(Both sites are kinda buggy right now - they currently only work well in Chrome)

Announcing 'Of Stranger Flames'

Posted by , in AdventureFar 17 September 2012 - - - - - - · 1,448 views
rpg, turn-based, 2d, game and 1 more...
Phew, I was 'gone' for almost two months (active on the forums and working on AdventureFar's website but no journal posts).

For the past 45 days, I've been chugging hard to get the AdventureFar website (and my personal website) up and running. I made my own WordPress theme, forcing me to learn PHP and HTML and CSS pretty heavily.

But I encountered a problem while working on the AdventureFar website... For the past 2 years of development, I've referred to the project under the work-in-progress name of "AdventureFar". But I can't use a work-in-progress name for the website's domain name... I need the real name, and it's about time I settle on it.

So with that said, I'm very pleased to announce "Of Stranger Flames" as the official title of the game. I've lost track of what I've told y'all over the past year, especially as the project has grown and changed, but in case I haven't already mentioned it, Of Stranger Flames is actually the first of three games in the series. Each game is completely stand-alone, with its own plot, but follow the same character in the same world, just several years later as new events are unfolding. Details on the other two games are not yet flushed out.

The entire series is tentatively called the 'Guardian Blade' series.

Of Stranger Flames is a "classically-inspired, turn-based (with action elements), 2D rpg with modern graphics, in a para-historical French setting, in the latter half of the sixteenth century".

Tons of details I may or may not have previously shared are available on the website, as well as two songs from the soundtrack (and reposting of images you've already seen).

Of Stranger Flames website
My development website + dev journal
My new twitter account

They work on Chrome, but get butchered in most versions of Internet Explorer, despite being almost completely validated as standardized HTML and CSS. Posted Image I'll definitely try to get that fixed in several months before I do any large media pushes. I also have several pages that are listed as "coming soon" (read: within the next 6 months. "soon" is subjective Posted Image), but most of the content is already up.

I'll still post here on GD.net, but my dev journal on my new website will be more of the "public face" (read: less technical details, more pictures) of my game development. All the juicy technical stuff I'll post here on GD.net, and only mirror there on occasion.

What's next? Well, I still need to get the game editor working. Posted Image However, I'm delighted to be able to get back into C++ code, starting tomorrow. Depriving yourself of programming for 45 days (to work on the website) really sucks.

Let me know what you think about the website and the game details!

Recent Entries

Recent Comments

Latest Visitors