Progress Log, November 2013

Posted by Astryl on Nov. 17, 2013, 6:49 a.m.

Written in the dead of night into a txt file, and copy-pasted here for your viewing displeasure.

Decided to write a blog about my progress, and my planned progress.

Right now, I'm doing something really unusual for me: Focusing on one project.

That's not to say that I'm not working on that plethora of projects I had posted

last time.

I'm just putting in way more time than usual on this one (Around 8 hours a day).

The project I'm working on so hard is Darkness. Or "Walk of Darkness" as I'm calling it now.

Ideas have been coming to me while I've been working on it, and I've been writing each one down. The game is starting to take shape and also change direction a little.

It's not focusing directly on being a 'clone' of the classic Castlevania games, but more on being a tribute to the great NES platformers I recall from my childhood. Of course, Castlevania is included amongst these, but my inspirations include Contra, Megaman, Zelda II, Metroid and SMB 3.

I'm not going into this with the shotgun approach though; I'm creating a very focused platformer, and it's style is very much set in stone. I want to use large character sprites, have huge bosses, a wide variety of enemies and progressive mechanics.

Of course, to ease the pressure on myself I'll have to drop the strict adherence to NES palettes (At the moment I'm keeping it limited to 3 colors + transparency for sprites, and making sure everything fits within 8x8 tiles per attribute, as if I was using the MMC2 or VRC mappers).

This will also mean that 'porting' the game to the actual NES won't be as easy, or quite as possible as it was prior to deciding this.

On that note, I'm not planning on pursuing the NES version at this point. Maybe afterwards, as a new project; but right now I want to make a game. Complete from beginning to end, polished and enjoyable; I've never really finished a game. Even Exile was incomplete, missing more than half of the planned mechanics, only having half of the levels I wanted, and nowhere near as much visual complexity as I was aiming for.

Anyway, enough about that. Let me ramble a bit about some of the new ideas/features I'm working on for Darkness…

New Engine

The current demo was made in Game Maker, but I'm getting sick of Game Maker's hand-holding. It's great for prototyping, competition game development, small scale tests and such; but when I start trying to develop a long term project with it I start to yearn for the power of a programming language.

So I began work on the horribly named PRISM engine (I've actually decided to name it Spectrum2D after realizing what PRISM is…), and I've made massive headway already.

Engine programming is very simple after you've spent time doing OS development. A lot of the concepts and programming paradigms apply to engines.

The most obvious one is multitasking.

I treat every 'object' in my game as a Task, or Program. The engine has a task kernel of sorts that executes these tasks in order, giving some more priority than others and basically slicing execution time up into little pieces for each Program running.

The priority is weighted by the depth value; it's a cheap way to do depth sorting without needing any kind of sorting algorithm or clipping test.

I also use the concepts of 'Screens' instead of the "Rooms" that GM uses (And I used in early versions of Spectrum).

I started doing this in SC5, with Abyss (My 7DFPS entry, if anybody remembers it).

When I tried to modify the options menu, I realized abominable my code looked. There were literally dozens of nested ifs, loops within loops within loops and too many flags to count. It made modifying the menu system a nightmare, so I did the logical thing and hit CTRL-A-DELETE.

Or not quite. I at least deleted that block (Was nearly 700 lines of code in the main source file).

I can understand why I did that in Exile though; near the end of development, time was running out and I still had what was basically a 'test' game. No menus, and no UI at all.

I was also driven by a desire to have spinning skulls or some reason. And spinning skulls there were, at the expense of code readability.

Anyway, the original system I used for executing objects was to have the Main Window contain a list of Objects, and call their update() method each frame, removing dead Objects and skipping those that were suspended.

In the current system, you attach a "Screen" to the Window. Several screens can be attached, but only the top level screen is processed, with the others 'waiting' in the background. These screens now contain the 'task kernel' of the engine.

This little bit of organization helped immensely, even though it wouldn't be immediately apparent. In Abyss, and Lightbound, adding a new menu or interface became far easier.

To add the Load screen for the editor, for instance, I would create a new EditorLoad class that inherited from a Screen. This class would call it's base constructor, and call the protected "run" methods during it's own run method (Meaning I didn't have to redefine the task kernel code each time I created a new Screen).

All I did was add a single entity to this screen called TextEntry, then add a check to the run method for when the user either pressed Escape (to cancel) or Enter (to confirm), and grabbed the text if necessary from the TextEntry entity and called the relevant code on this.

Even with the new system, I reduced the near 800 lines of Exile's menu system to around 300 lines, and the code is now far more readable, and it's easy to expand. If I want to open up any of the game's screens during execution, I can just do this:

Window::get().add_screen(new EditorScreen());

I went off on a major tangent.

Either way…

That little piece of code also hints at another design pattern I use in my code now, quite often. For classes I need to access everywhere, but only really need to contain one common set of data, I create a single-instance (I prefer this name for them) class that automatically handles it's own reference and destruction (To a degree; some of them need a bit of prodding for various reasons).

The classes in my engines that use this behavior are the main Window class, the KeyboardInput class, the MouseInput class and the Res class (Resource loader. Called AssetManager in SC5).

Heh. I ramble like heck when I get started on engine talk.

Let me cut it off here.

Player(s)

So, originally the game was going to have a single character. Somebody who looks suspiciously like a slightly-higher-detailed bluer-haired character from another game (No surprise, I studied Konami's art carefully before making it).

This is obviously perfectly acceptable, but then I started thinking of some of the mechanics I'd like to add.

After a while, I decided that I couldn't load these all onto the whip-guy (Who has a name in my design docs. Sergio. Because names).

I then designed three other playable characters, and decided to make them player-selectable at the beginning of the game. Here are their bios:

Sergio - Adventurer/Explorer

Melee type, uses Whip.

Supposed to be the Man. You know. That Guy. Probably Spanish. Nobody cares though. I'm definitely making a typical mockup manual though with all this useless information in it. :P

I'm planning on keeping his attacks the same, though he'll be getting a unique set of sub-weapons.

Sir Jeffrey - Knight

Melee type, uses Sword

If he had a backstory, it would be something about being horribly guilt ridden and compulsed to travel the world defeating evil monsters etc etc cheese etc.

His sword attack differs from the whip in that he swings it overhead (Thus making it effective against aerial enemies).

Instead of getting sub-weapons, he gets a shield that can block magical and physical projectiles, but not direct blows.

Lukhail - Hunter

Ranged type, uses Bow

I seriously get these names from my dreams. People have weird names in my dreams.

Basically, he's going to be able to attack in eight direction with arrows that travel at a moderate speed across the screen. They won't be able to pass through solid blocks.

His sub-weapons will imbue his bow with elemental effects that increase the power of his attacks (Think Flame Arrows, Ice Arrows, etc).

Midas - Archmage

Ranged type, uses Books

Balding old man with a spellbook.

I decided to do something different with his attacks, and make them 'command based'. His basic attack that you get when you hit the attack button is a weak and short-ranged energy ball.

Things get more interesting if you discover (either in game or via experimentation) the commands to cast his higher power spells (Think Down Forward Attack).

His sub-weapons are going to be crystals that choose what element you're casting in.

Well, that's out of the way.

Sub Weapons

The sub-weapons, or Generic Powerups, are going to be different from what people might expect if they're expecting Castlevania.

They'll be permanent pickups found at specific locations in the levels.

So if Midas picks up his Fire Crystal, he'll keep it until the end of the game.

If Sergio picks up his Throwing Knives… well, his mechanics are a bit different. He gets Ammo. Might make it separate, or might base it on some generic Mana type stat (Which would work well for the other characters too).

Either way, I've got them all planned out (A set of four sub-weapons for each character, potentially a bonus one).

So I won't spoil 'em.

Levels

I decided to forgo a completely linear level layout, but at the same time avoid too much of a Metroidvania style. I was thinking more along the lines of a Megaman style level select, with a 'hub' level where you save your game, heal up and actually get to spend the gold pieces you'll pick up in the game. From here, you can head to any of the levels I'll be adding into the game, in any order.

If you die in a level and lose all your lives, you'll be sent back to the village.

Since each level has a powerup (Sub-weapon) or Upgrade (Upgrades the primary weapon), exploring them will make you stronger if the bosses are giving you trouble.

I haven't yet decided on settings yet, other than the usual Forest and a Machine Tower (Going to make it somewhat steam-punkish instead of a clocktower. Valves, gears, pistons, steam, etc).

Anyway, once you clear all the levels I end up making, the final level will appear (And will be a series of Megaman style Fortress levels, with unique bosses and the final boss. I'm planning on four 'normal' bosses before the finale).

Release and Distribution

I was thinking about this, and wondering where I would get the motivation to finish this, and I decided: I'm damned well selling this.

So yeah… I'm going to finish the game, I'm going to market the game, I'm probably going to sell a paltry handful of copies of the game if any… But I'm going to do it.

Looking at some of these so-called 'retro' games on Steam, GoG and Desura… Yeah. I'll say outright that they look like shit. Not so much 'badly drawn' as 'hardly drawn at all'.

The common hero of the platformer is no longer the Soldier, or the Vampire Hunter, or even a Plumber… it's a little rectangle three pixels wide if you're lucky.

Regardless of whether the game mechanic is good or not, whether or not the game is fun to play… you should take pride in your work as an indie, and make your games look as good as humanly possible with whatever time you have.

A lot of these games seem half-assed, like somebody relatively new to game design has taken a minor game mechanic, slapped some programmer art over it and sold it on Steam (Getting through Greenlight by calling it "retro" (ugh) and "indie"). These are horrible games, lacking the soul of a game.

Not to mention it's a jab at some of us who can create good looking games in short order (Look at some of the results of a Ludum Dare. Some of those are beautiful).

Even a non-artist can learn to become a mediocre artist. Case in point is me; my artwork was the worst kind of programmer art in 2009. In 2010, I started trying to draw better instead of just giving up and thinking that I was "just a programmer". Did the same with music.

Ugh, I'm rambling again. I really shouldn't try to form these blogs when I'm low on caffeine and high on ideas.

I want to distribute this game as a parody of an NES game. Box art, badly written manual (With illustrations), soundtrack, trailer… the whole works.

Then… the release.

I put my game up on IndieDB, so I can both post progress to it there and possibly launch it on Desura later. From there, I also want to send it in to GOG (They have a page for indie submissions, and it's a nice deal for indie developers), and if I build up interest, I might send it in to Steam (Not as a Greenlight submission).

Another thing to investigate is submitting it to the Humble Store.

As for the price? Who knows. I'll charge what it's worth by the end of things.

Schedule and release date

So yeah… I'm driven to finish this. I want to make the jump from just tinkering with game development in my free time to actually being a game developer. Whether or not I make money out of it isn't the point; whether I make games is the point.

Having a goal helps a lot though. I've already done more work on my game this week than I had during the week before I submitted it to the competition.

I made the decision on Monday to put in as much time as I could, but within reason. Since I'm currently unemployed, I decided to make this my employment; spend the nine-to-five on my game, only take tea breaks at specific times for specific periods, and take one lunch break (During which I force myself to stay away from the computer, and my room, for an hour).

So far the results have been definite. During the near 20 hours I put in this week (Didn't work all week because of 21st birthday's having a way of getting in the way of things, it seems. Having a 'braai' (A real barbeque) tomorrow),

I've managed to create a new from-scratch game engine, create new art, solidify ideas, come up with a ton of new ones, and generally made my game.

Under normal circumstances, given the speeds I know I can work in, I'd say I could finish this within three months. However, I'm not being that optimistic (Since I won't be working in burnout mode from the offset; also, Kilin nuked my clone factory), so my release date is set tentatively to August 10th, 2014. Failing this, an extension 'til November (Thus meaning 1 year of development max).

I get the feeling that as I start to feel the development deadlines approach, I'll get into my usual manic development state.

One of these days I'll have to get a webcam set up so I can livestream just how ridiculously fast and focused I get when I'm working under stress of a deadline. :P

Anyway, from this point I'm not going to be speaking of the game's content too much. I'll probably post more about the engine, maybe show off a few concepts or art assets at some point. Might even release a demo of the intro level in December; but I want to keep as much of this under wraps, so it's a new and unique experience when people get their hands on it. Not new as in "Oh look, another new gimmick in an Indie game", but a new adventure in a familiar feeling game. My game should feel comfortable.

You pick it up, and you don't have to worry about "Gimmick X" or "Press X and Y followed by Z to pick up the stick" crap. Simple mechanics, limited controls, fair rules and challenging gameplay.

We'll see where this goes. I might be leaning on a few of the Windows 8 users for testing purposes at a later point in development, or at least use the demo as a measure; similarly, the Linux users might be able to lend me a hand. I plan on porting the engine to Linux once I've gotten all the necessary functionality in place.

Shouldn't be too hard; at the moment it's literally a simple recompile, since I'm using SFML2, and no Windows specific functionality. The only problem I foresee with the Linux release is me grandly screwing up the distribution and forgetting some shared libraries or something stupid like that.

That's enough wall of text for now. I seem to write more when I'm tired…

Comments

Astryl 10 years, 10 months ago

Also, let it be known that on this day, I drank a beer… shandy. Didn't like the beer on it's own much; had a sort of non-flavor to it, with an aftertaste.

Acid 10 years, 10 months ago

I like both the semi-design brief and the look of the characters. Patiently waiting for August 2014.

Also: Your first beer?

Astryl 10 years, 10 months ago

Quote:
Also: Your first beer?
Yup.

Toast 10 years, 10 months ago

I also get really pissed off at those indie game where the character is a 4x6 sprite, basically a stickman, but people go crazy for it because it's "so retro". It's easier to make the game look aesthetic but at the same time it's pointless because there is no definition or detail. Lo-res sprites take less time, but super-super-lo-res sprites are just stupid, lazy and very hard to look at. I simply can't play a game like that for more than 5 minutes - they're surely the laughing stock of the video games industry.

Examples:

Good graphics

Bad graphics

I think the one thing that might work against you is if you don't have a hook or gimmick, people think it's just another platformer (there are so many at this stage). Like I said, you nailed the real retro NES aesthetic (unlike the neo-retro-indie trend), so making it a NES parody sounds like a good marketing scheme, or even as "a classic NES game which never was".

Quote:
I drank a beer… shandy
Acquired tastes are strange, I never used to like beer or coffee or red wine but now those are my three favourite things to drink. Commit to trying beer (not just shandy) a few times and you might discover you really like the taste (or that you don't, I'd say most people don't care about the taste much)

Astryl 10 years, 10 months ago

Quote:
or even as "a classic NES game which never was".

That is, more or less, what I'm shooting for. Also showing Capcom how it's really done… *glares daggers at Dark Void Zero*

Quote:
Commit to trying beer (not just shandy) a few times and you might discover you really like the taste (or that you don't, I'd say most people don't care about the taste much)
Yeah, probably will.

Castypher 10 years, 10 months ago

It's cool to see people like you and Toast and Rez persisting in game development, where you were all depressingly skeptical about it not too long ago. I really hope you continue.

Quote:
Kilin nuked my clone factory
=(

Also, you drank beer? My god, I thought you'd vowed never to drink alcohol. Well welcome to the club, Mega! We have… beer!

Astryl 10 years, 10 months ago

Thanks Kilin. I don't think game development is something I can stop myself from doing; I'm constantly thinking of new ideas, worlds to create, etc.

Acid 10 years, 10 months ago

Beer sucks. Drink rum. 151

Unaligned 10 years, 10 months ago

I really admire your determination on this project. Best of luck to you.

As far as beer goes, there's more to it than shandy. Run around your store of choice and pick what seems interesting. Move on from there I'd say. That's what I did and I more or less know what variety to pick (or none at all if that's your thing).