So there’s been some refactoring to how rooms are created, a new set of room tiles made a couple of weeks ago, the addition of some more realistic torch placement in the deep dark cave and it seemed like it was time to run my ‘SIZETEST’ map again just to get a feel for things.
The ‘SIZETEST’ is set to a base of 2500 rooms, far larger than anything expected in the finished game. Currently, it ends up being 2674 rooms in the cave biome. The base size is used to generate a rough estimate of a given maze/dungeon size, but other factors and randomizations will throw that off by a factor. At any rate, clearly the refactoring has been good. With only general logging enabled, it now only takes ~3 seconds to create that 2674 room behemoth pictured below.
That leads me to another thing that my day job should’ve taught me, but that somehow had been slipping my mind of late – logging is a resource hog. Turning on the full compliment of logging nearly doubles the generation time. Still, even with logging now, it takes ~6 seconds with logging. Previously, the SIZETEST was taking closer to ~35-45 seconds to generate. This is pleasing.
Same map without the room-stage color coding, so you can see the lighting placement.
Well, I’ve overcome the first major hurdle for cave/dungeon lighting. It’s no longer haphazardly sprawled about – it’s now at wall vertices. Next step – put in on the line segments instead and randomize them a bit more.
In the first “Trying to Figure it Out” segment, I’ll share a question I posted on Stack Exchange. Sometimes things just aren’t that easy to figure out, and crowd-sourcing an answer, or at least some guidance, can save huge amounts of time.
A couple of the first unique rooms in the game (interestingly this screenshot shows two of the same room – oops!) with lighting from a single torch.
Tiled and Tiled2Unity are both saviors, but neither come without a few major question marks. Interestingly, right now every time I import a new room into my project, I have to reimport the tileset, even though it doesn’t change at all. Not quite sure what’s up with that. But it’s a minor headache.
I’ve switched to a properly top-down perspective player character as well. It’s a place holder with no animation, but it gives a better feel for scope, motion, and lighting. The movement script is a bit weak, and something funky is going down with the rotation of the sprite – sometimes he just rotates eternally for no good reason after coming to a stop. It’s the joy of figuring out these little things that cause development time to increase.
Remember, great ideas don’t always lead to great code. Hell, great code doesn’t even always lead to great code, and first attempt code is rarely great.
Oddly, the thing I found most difficult about this was using Pyxel Edit to actually put the tilesets together. Not that PE was a problem, *I* was a problem. I ended up overwriting some tiles here and there, then creating duplicate tiles as I was moving between the editor and the tile set itself. But, the lesson is learned.
For anyone interested in the process, I started with a “dirt” image from some other tilesets out there, edited it a bit in Photoshop CS4, brought it down to 64px x 64px (since that’s the “unit” size I’m using in Unity) and used that as the base. The darker dirt color was that base. For the lighter dirt, I lightened the tiles or selections from the tiles by +30. For the cave walls I darkened the selections by -70, then ran Photoshop’s Sponge filter with settings of (0, 0, 8).
Beyond the base full dark dirt tile, I mostly worked in a 3×3 grid with a feathered mask that ran from 32px in and over to 160px back and down, making a sort of rounded, feathered area that blended from a midpoint 32 pixels into the edges. This helps ensure that all tiles will fit together nicely and look decent.
For the diagonal tiles, I overlaid opposing corners, used the polygon lasso tool to cut across the opposite diagonal, merged the layers down and BOOM! There’s a diagonal tile.
The sections at the very top center and bottom center are where the three types of terrain blend together. I’m fairly certain that I’m missing a few combinations, but this should be pretty good to start.
For anyone looking to work in tilesets and the like, Pyxel Edit is a GREAT tool. And I think it costs about US$9, so it won’t break the bank.
Cave floor (tiled 3×3). It looks decent, but it took me a very long time to get this just right. I definitely need to work on my Photoshop skills. Also, man… these things don’t look nearly as good in Tiled. At least they look almost this good in Unity. It’s a start.
Well, for now I’ve decided that I want to do a truly top-down (TD) graphical style. I think this suits me well since I am not an artist. Hotline Miami is a good example of this, as opposed to a traditional isometric “top-down” view that is common in RPGs. So, I’ll need to make some new placeholder graphics for the main guy, but at least it’ll give me a lot more freedom with the tilesets.
I was considering how to make TD torches with a particle system. I recently saw this video on Unity particle systems by the awesome Daniel Moran over at Makin’ Stuff Look Good in Unity. Oddly, making a decent TD torch isn’t as easy as I would’ve expected, but it wasn’t terribly difficult. I also have a script attached that adds a flicker-type effect and also slowly changes the color of the light generated by the torch, lerped across a gradient over time.
So, this is what the torches look like currently:
It’s a work in progress, but by all means leave a comment here or on Facebook if you have any comments, critique, or suggestions.
So, the first step in fleshing out the map is to add a boss. Currently I only have one prefab creature (yet another placeholder… YAP), but I’ve been playing with materials to ensure that the standard dungeon is dark and scary for our Labyrintheer.
A bud guy lurks in the darkness with only our Labyrintheer’s aura to shed some light on the situation. I’ve disabled global illumination for the dungeon and fixed all of the materials so that they don’t light up on their own – an issue with Tiled and Tiled2Unity’s default shader. Currently I’m just using the standard shader. Next I’ll be placing torches here and there around the dungeon either as it generates or post-generation (not sure what makes the most sense quite yet). I also plan to add height maps in and create a LoS component so we don’t see through walls.
Today it’s reaching some crazy temps here in Michigan, and my wife and I decided to take the day off to go to the zoo. Dumb? Possibly. But it’ll be a great day all the same. Tomorrow evening I plan to start hammering out some new code and will update all of you at some point this weekend. The next plan is to start filling in creatures, bosses, keys, and doors on the map post-generation. It shouldn’t be too difficult, but I’ve said that before and been very, very wrong, so anything can happen I suppose.
For now, here’s a gameplay screenshot with the shaded rooms – you can see the order in which these rooms were laid out based on their color. No, the final game will not have colored rooms… unless maybe there’s a disco labyrinth.