Development Blog

RSS FeedTo follow Harmonia development news, please subscribe to this RSS Feed.

How Harmonia's Stats Work

What was supposed to be a short reddit reply turned into a blog-worthy article, so... Have you ever wanted to know how statistics work in Harmonia? Of course you have! Here are some of the basic principles.

Unlike most RPGs, Harmonia uses exponential variables for stats. It's a little more math-heavy than usual, but it's 100% scalable to high levels and allows for even progression with guaranteed balance at each level. It also guarantees that something 5 levels higher than you will be the same difficulty, no matter what your current level.

[edit] Here's how it works:

Nothing is added, only multiplied. Wielding a sword, for example, may increase your Attack power to 150%, or, multiply it by 1.50. Wearing a ring of power may increase Attack *again* to 150%, resulting in 225% power (1.50 * 1.50 = 2.25). These would both be totally overpowered, but you get the idea ;)

Levels work the same way - gaining a level means a 5% increase to all stats, guaranteeing that every level has the same "worth", i.e, Level 1->2 is just as significant as 98->99.

Formulas use multiplication/division as well. The damage formula is, for example, "Damage = Attack / Guard". Double the attack, deal double damage. Double guard, deal half damage. Double both, damage is the same.

Stats are represented internally as decimals, or percentages. A balanced class at level 1 will have stats of 1.00 (or 100%).

Stats are represented to players by their log(base 2) * 50 (a constant). This is so the numbers are a lot more digestable than giant floating points :P Here's a table to show how it works:

Internal For Player
0.0625 (6.25%) -200 (yes, stats go negative)
0.125 (12.5%) -150
0.25 (25%) -100
0.50 (50%) -50
1.00 (100%) 0 (average)
2.00 (200%) 50
4.00 (400%) 100
8.00 (800%) 150
16.00 (1600%) 200

To players, because of that conversion, putting on leather armor appears as a simple +10 armor increase. Much easier to understand ;)

Equipment power is, like players, calculated based on their level. This makes balancing *incredibly* easy. A level 15 helmet has the ideal stats for a level 15 player. Bam, done!

If you want to add variation to equipment, like an "Axe of Guarding" that boosts your Guard to 110%, you need only multiply "Guard" by 110% (x1.100) and divide "Attack" by the same number (or x0.909). The result is still "Attack * Guard = 100%" (1.100 * 0.909 = 1.00), which is balanced.

The result of using this system is that characters of equal levels and equal equipment will have a fight that is equally favored and, regardless of their level, will last the same amount of time. However, weighing one stat more heavily can result in desirable balance changes. Distributing points from "Resistance" into "Guard" will make a player a mighty tank against melee hits, but soft as butter against magicians. These sorts of tweaks make every class situationally useful, and knowing when and where to use them becomes the real strategy.

There's a lot more to this, including formulas for "Agility", magic damage, stamina costs, and specific balance of the various gear slots, but they all follow the same principles. Hope this was somewhat enlightening!

-- Synival

Slimming Down -or- Decreeping Features

At this point, a million concepts have been thrown against the wall. After a lot of mindless coding and flailing about carefully planned experiments, Harmonia's gameplay finally feels solid. However, there are a lot of leftover ideas, concepts, and "features" that make the game overly complex and ultimately take away from the fun. In the spirit of good design and fun, it's time to clean house and produce a leaner, meaner Harmonia! :D

[edit] Why so many features!? A Historical Journey

Back when Harmonia was a private hobby project, I had the luxury of using it as a test bed for a variety of gameplay concepts. Every zone in the game was a little experiment with new engine features - a randomly-generated cavern, an 8-room Zelda-style dungeon, a long scripted quest, a goofy mansion with logic puzzles (ugh), blah blah blah. Some of the experiments included wacky stuff like random spell generation and day/night effects. In the extreme case, some zones were made to intentionally break the engine to see if it still worked :P

[edit] What's getting cut, and why is this a good thing?

Several planned features are going to be shelved, much to my disappointment. This includes proposed classes, zones, quests, spells, factions, graphical features, and (for now) an awesome PvP system. There's certainly time for these things after release, but there are plenty of incomplete features that need extra work, polishing, and some rather thorough testing. Extra weight is being dropped off as well - redundant features, abilities, areas, etc. What's </i>not</i> getting cut is everything that's fun, which should be most of the current game, I hope :)

Slimming down is good because, in addition to hitting proposed release dates, it will make the game feel more focused and unified, rather than 10 games put together as some sort of grotesque Frankenstein's monster. The engine can certainly be a tool for testing other concepts, but for future games - not this one.

[edit] Skills and Spells

75% of the abilities are being cut. Once multiple character control was in, it made no sense to have so many skills for each "unit". So now, each character has one thing they're good at, and that's it. Magicians will learn better versions of their spells, of course, but most if not all of their utility spells are currently gone. They could possibly make a resurgence as spellbooks as quest rewards, but that's not essential, so consider them gone.

Here's the current table of skills and spells. All of these abilities are currently completed:

Class Skill(s) Description
Soldier *Bring, *Return, *View, *Suppress Utility spells for group and dungeon management.
Knight Pierce Armor values greater than zero (which is average) are cut in half.
Warrior Guard Increases defense of the warrior and holds adjacent enemies.
Archer Adapt Increases sight radius and night vision of the archer.
Bird Soldier Focus Increased attack speed followed by short exhaustion.
Magician *Blaze, *Freeze, *Desoul, *Spark Standard elemental spells with varying ranges and AOE.
Priest *Heal, *Aura, *Antidote, *Revive Healing, AOE healing, and other forms of healing.
Monk *Slow, *Support, *Negate, *Resist, *Attack (De)buffs for agility/defense, magic resistance, and attack.

* This skill/spell will be renamed. These names come directly from good ol' Shining Force, back when it was originally a fan game. But now it's not. Intellectual property blah blah blah

[edit] Classes

The original plan was to have classes that gain levels and promote to other classes, branching off. This implies adding way too many classes, so, reluctantly, it's cut. There are plenty of other ways to customize your characters using different equipment, rolling with different personalities, and simply from the sheer variety of characters you may earn randomly through quests and such. Aside from very specific "secret" classes, the current 8 is more than enough. Furthermore, the possible combinations of forces adds an insane amount of variety, so no more is necessary! :)

[edit] Weapon Types

Harmonia has a lot weapon types - about 20 or so. There were plans to have multiple levels of these weapons, so you could train them up, learn a variety of special attacks, blah blah blah it's gone. In its place is something a lot simpler - remember those skills that were cut? They're being redistributed to the weapon classes. All player classes will be able to use all weapon classes, aside from the Wing which is bird-specific. Characters will still have to train them like they do now, but they will always be at 100% strength - just without the skill.

Here's an incomplete list of skills for the various weapon classes:

Class Skill(s) Description
Sword Channel Uses MP to inflict magic damage.
Lance Charge Attack pushes an enemy out of the way, thrusting you forward.
Spear Repel Attack pushes an enemy back, keeping you in place.
Halberd Swipe Melee attack hits two adjacent enemies.
Mace Bash Knocks an opponent down, preventing movement and spellcasting.
Bow Ice Shot Freezes an enemy in place for a short time.
Crossbow Strafe Shot Allows a move action after an attack rather than before.
Longbow Long Shot A normal attack with +1 additional range.
Ankh Smite 50% chance to inflict heavy light damage. Very effective against undead.
Wand Missile Non-elemental ranged magic attack.
Rod *Burst Earth-based AOE damage.
Wing Dive Attacking a foe also moves your character like a chess knight.

[edit] Zone Design and Loot

There's a variety of equipment painstakingly coded in the game. Each piece is unique with differently balanced statistics. However, at one point, I made a zone that generated random equipment in the style of Nethack, which produced equipment like this:

a +1 uncursed orcish dagger
some blessed ringmail
a -2 cursed hawaiian shirt
some +1 iron shoes

Although this gear is pretty generic, there was a real sense of reward when you found the occasional +2 piece of equipment that suited a character's build. More importantly, it made each mob much, much more valuable and fun to fight when there was a small chance you could find some rare item.

This system later evolved into something much cooler for a procedurally-generated cavern zone:

a magical sunstone blade of vision
a -3 olive green mithril helmet
some +1 dark matter boots of strength
a +2 mighty orichalchum axe of healing

This zone worked so well for levels 1 through 30 that it's now the method for all equipment in the game. This means less coding of individual objects aside from the occasional zone-specific keyword. This should make every zone a lot more compelling to play, which means Harmonia won't need nearly as much content as originally intended - which is VERY GOOD for my workload and/or sanity :)

[edit] Random Mobs

Although this technically (and literally) qualifies as a new feature, this system can be applied directly to mobs because of the game's scripting system. This should add yet more variety to running through a zone without the need to design dozens of new creatures. The only reason I'm considering this is because it takes no extra coding. It will literally use the exact same code as the random equipment generation. The current zones will stay as they are, but new content will use the new model.

Possibilities for mobs in a slime zone could play out like so:

a blue slime (lv3.0)
a red slime (lv3.0)
a small red slime (lv2.5)
a large blue slime (lv3.5)
a green slime warrior (lv3.2)
a green slimebeast (lv3.2)
a magical slime (lv3.2)
an armored slimegician (lv3.5)
a glowing blue slimelord (lv3.7)

[edit] Zone Consolidation

There are probably too many zones, and most of these zones, if not all, are incomplete. So, instead of finishing the proposed billions of zones, bits of pieces of incomplete areas will be glued to the better zones to make them feel fleshed-out. It's better to have a small amount of feature-complete, polished, and tested areas rather than twice as much broken stuff. In other words: Quality > Quantity. The world map will need to be reduced as well, much to my disappointment :( It looks pretty, but about 50% of it is totally unused, so... It's gone!

[edit] Graphical Feature Freeze

No more fancy effects. The game already looks fine, so I'd like to work with what we have. That being said, there are a few things that need to be in the game which aren't - projectiles for ranged attacks comes to mind, as well as spell effects. The FOV code will need an upgrade, too, because it's really stupid :P New sprites and tiles will still be produced, but there won't be any fancy glow effects of animations or what not.

Bugfixes are, of course, always fair game. There is, unfortunately, always plenty to do in that department. Wahhh.

[edit] Client Work ... is still required :(

The Harmonia client still doesn't support everything the server can do. That's why I've been playing around with text-based Harmonia Classic to do so much work lately. A big reason for this slimming-down is so the client can finally get on its own two feet, firmly ushering in the era of "Not Using Telnet because Telnet is kinda dumb".

The next step for the server is to send menus to clients in order to use all of the commands. Then objects (not just mobs) will need to be synced. This includes player inventory. There's also no shared vision between your players, or a proper character selection screen, blah blah blah I'M WORKING ON IT :(

[edit] And more (?)

That's everything off the top of my head. Which is still a lot. I just now finished all the stuff with the random gear (which is awesome, by the way!), so it's back to work on the client! To the code dungeon, I go... Those whips smart.

I will finish this game.
I will finish this game.
I will finish this game.

(Bart Simpson joke)

-- Synival

Harmonia Classic - Download now, or play online!

[edit] Harmonia Classic v0.1rc2 is now available for download! :D

Here's the link!

This link will connect you online via the Java Telnet Application. Honestly, though, it's not the best option for compatibility, so if I were you, I would download PuTTY and connect manually to the address listed below the applet. If you'd like to play the game single player, you might prefer downloading it and running your own server.

This build is far from finished, hence the v0.1, so consider this the first of many work-in-progress public builds before the "finished" version :) However, now that this is finally out publicly, we're anxious to get back to working on "real" Harmonia, so don't expect much Harmonia Classic news for a while!

Anybody who has the interest is welcome to play around with the script files located in the "scripts" folder. You are of course welcome to host your own server, as well - if you do, please send me a link ;)

Enjoy! :D
-- Simon (Synival) -

Downloads? Source? Branches? Madness!

We've got some exciting news on the "Downloads" and "When can I play this %*#@(&$ game" front which we're very happy to announce :) First up is what the user-end experience will be regarding the Server/Client stuff. There's some small news about platforms and compatibility, and finally, some BIG news regarding the old MUD version of Harmonia. So here we go:

[edit] Playin' the Game, Runnin' a Server

Harmonia will NOT be an "always online" game. Although originally conceived as a light-weight MMO (or just MO?), the nonsense with Diablo 3 and Sim City's "always online" policy has convinced us to add a single player, offline mode. Harmonia will come bundled with both the client AND the server. In single player mode, the server will run quietly in the background, similar to Quake, Minecraft, and... well, everything else :P

Just to be clear, Harmonia is still a multiplayer game at heart, and there are no plans to create an extensive single-player only campaign. Players will still be able to host their own online servers, register them with our master server list so other players can find them online, and tinker around with the game's scripts however they see fit. We hope that opening up the game's assets and scripts will encourage modding, which should make playing on 3rd-party servers a very worthwhile experience.

[edit] Multiple Platforms / Compatibility

I finally have a new laptop that isn't falling apart, which gives me a 64-bit Windows 8 environment on which to test, as well as a shiny new NVidia card to play around with. After a lot of hackery, the Windows build is now very stable, and graphics card compatibility is on the rise :) The Linux build is still working great in both 32- and 64-bit environments. The only other card I've personally tested so far is my ancient Intel Integrated Graphics card, which still runs surprisingly well. Hopefully we can get some more brands tested sooner rather than later.

[edit] Harmonia Classic

Big news - We're splitting the current form of Harmonia away from its MUD origins, which will soon be available for download as "Harmonia Classic". Ideally, this game will be maintained alongside the latest Harmonia server, as they share the same source code, but the technical details haven't been sorted out yet. Harmonia Classic will be free to download, its many scripts will be free to edit, and it will very likely be open-source. We're looking forward to giving old MUD hackers the opportunity to play around with the engine, make a zone or two, and give us feedback on the shortcomings of our scripting environment. We're also hoping we'll see some pretty cool mods/upgrades come out of this :) And, of course, we want people to play ours games while we continue work on Harmonia!

Harmonia Classic will not have many of the features present in the Harmonia server - most significantly, you won't be able to use the client. This will be a text-based only game and will be Telnet- or MUD Client-only for quite a while. However, because Harmonia Classic and the Harmonia server share so much code, their scripts should be compatible, and updates should apply to both if we can pull this off the way we want to.

[edit] When can I get it?

We're already experimenting with running the MUD on our soon-to-be-released company website, and the code is almost organized enough to be split into separate branches. Licensing is an issue if we want it GPL'ed, so that's something we'll need to look over very, very carefully. There could also be some potential downsides to open-sourcing a lot of our server code, which we really need to consider before diving in. My gut feeling says this will take several weeks, not months, but I won't many any promises just yet ;)

That's it for now. Time for a break! :D

Filling in Features

Focus this week has been on developing the official company website, and filling in the blanks for client<->server functionality. The website won't be done until it's done, but it's coming along nicely! Regarding the game, here's progress for the week:

[edit] Server / Client Features

Controlling a Magician and Warrior at the same time.

You can play with multiple characters at a time now! For the time being, you can switch between players manually using the 'character' command. I have some sketches at home for a new UI component that shows all your characters so you can click through them, or select them by left-clicking on the map.

The server now sends over ALL the entity/object data to the client, which includes Max HP/MP, current condition, terrain costs, and a million other things. The irrelevant stuff has yet to be filtered out (we don't need Max MP for items), but it's still relatively cheap on bandwidth. Now that the client has this info, it can show us loads of useful information, which means another round of UI improvements should be coming up.

[edit] Key Bindings

Now that key bindings work, we need a proper key configuration window. Until that's ready, keys are stored in a "keys.txt" file which looks like this:

      f      fly
      `      character
      space  use_map
      enter  attack
      1      skill_1
      2      skill_2
      3      skill_3
      4      skill_4

Creating the key configuration window implies a big change to the way options are stored, so this will be a ways off ;) There's plenty of more exciting work to do right now.

[edit] More User-Interface Tools

This game won't be only keyboard-driven. Now that the client can send every command to the server, it's time to make a few windows and tools to make those commands more intuitive and mouse-driven.

For example, to attack a target, right now you have to enter the command 'attack <target_hotkey>' manually. Eventually, you'll have these options available:

  1. Right-click and hold on a target and release over the 'attack' icon. This is a standard 'move to our target and attack' command.
  2. Hit 'a' and left-click the target. This will also move to the target and attack.
  3. Right-click and hold on a map location, release over the 'attack' icon, then left-click your target. This will make your character hold position at the location and attack the target whenever possible.

The other big UI project will be for a fancy inventory screen to handle the 'use', 'give', 'equip', 'drop', 'remove', and 'put' commands. And then... well, everything else :( That will take a while.

How does this work again...?

For several months now, May 1st has been circled in my mental calendar as the day to crawl out of my e-cave and resume this blog. A severe drought of Internet connectivity at home has thrown off that schedule, but that's resolved now! Well, sort of - it's basically being held together by duct tape and a lot of hope.

Regardless, there's a lot of new stuff to talk about, so here's what comes to mind right now:

[edit] Programming Stuff

It's a pretty exciting phase of development right now. For a long time, work has been client-side only - the UI, graphics engine upgrades, camera stuff, etc. A lot of that is done now, so the work has shifted back to the server, which is progressing a lot quicker than expected :) Most of the infrastructure is in place, which means we can start focusing on cool stuff like fancy combat effects, more music, more sprites, nice-looking inventory menus... Real game stuff!

Here's the latest video, showing some basic connectivity with the server. We've improved things quite a lot since this video, which will be posted here as soon as it's nice and polished :)

We've also been playing around with a lot of gameplay concepts. Here's an RTS-style combat interface:

[edit] Important Stuff

We're starting a lot of website development and drafting some long-term plans and budgets for Harmonia. I can't say much right now, but we have some exciting plans for late Summer and early Fall.

That's it for now. More later! :)

-- Synival

Big list of updates!

Wow, it's been a long time since I've posted anything. Does this mean I haven't been working on Harmonia? Absolutely not! In fact, I've been working on it quite a bit. So why I haven't I posted anything? Because I'm a shut-in that would rather work on code than communicate with the outside world - at least until the game feels somewhat complete.

Regardless, here's an update, in all its non-proofread glory! I'm largely fueled by caffeine right now, so don't be too surprised if this rambles on a bit. Also, news posts in the future will be infrequent, just because that's easiest for me, but rest assured that everything is progressing along nicely.

There aren't many new screenshots to post, but here are a few:

  • Screenshot #1: Real-time lighting integrated into the rendering engine
  • Screenshot #2: Ultra-fast new rendering engine. 6 fps isn't great, but my laptop has an awful Intel integrated graphics chip. A screenshot this size would have been about 0.5 fps before! I've also made some improvements since this.
  • Screenshot #3: Animated gif of the newest sprites. Each sprite has a walking animation in all 8 possible directions. In the works are three new monsters and one new class (Birdsoldier).
  • Screenshot #4: Big improvements to the networking architecture, and the beginning of the new login screen. This isn't impressive on the outside, but represents a huge leap forward on the inside.

What else is new? Here's some stuff for the client:

  • New rendering engine. It turns out everything was slow because it was rendering the world in a really, really dumb way. This is now fixed. Framerate is literally 10x better than before!
  • Improved tile picking. With the new rendering engine, picking tiles with the mouse is now 100% accurate AND lightning fast.
  • More sprites! Art assets were a major bottleneck for Harmonia for a the longest time, but I've settled on a 16x16 aesthetic that looks good enough and is easy enough for me to draw. Drawing skills are not my best skills :( But 7/8 of the current player classes are done, and they look pretty nice, if I do say so myself.
  • Real-time lighting. The server has had lighting effects for a long time, but they weren't reflected in the game engine yet. Now they are, although it's a bit broken, so a rework is in the near future - it will be worth it!
  • Smooth lighting. With the new rendering engine, I can do a lot more. Normals are now provided by coordinate instead of by surface, so everything looks smooth instead of jagged and metallic.
  • UI rewrites and effects. The UI code has received a facelift for extra flexibility and ease. Thanks to these changes, windows now fade in-and-out when opened and closed. They also have a neat sound effect when opened! This feels complete, so I can move on to more important things.

Alright, that's nice, but what about gameplay? Here's another big list:

  • Scaled-down concept. Harmonia the MMO is too grandiose for just one person, and I'd like to keep this a solo project. So, the concept has, for now, been scaled down to a more Roguelike dungeon-crawler. A lot of the material will still be in, but re-worked to fit into one giant, complete zone.
  • Procedural generation. As stated in the previous blog post, procedural generation is in the game. Caverns can be generated as you advance, then populated with monsters and items.
  • Procedural equipment. One of my favorite new features, new weapons and armor are now generated using a variety of variables: material type, elemental balance (color), weight, damage type, spell/skill, enchantment, and so on. In lower dungeon levels, it's normal to come across things like: a +1 titanium sword, some -2 purple iron gloves of brilliance, a +1 copper Aura lance, or a -3 moonstone quarterstaff.
  • Weapons are now available to all classes. The weapon restriction seemed dumb, so now it's gone! All 18 (?) weapon classes are available for every class - although you still have to learn it. Each class's level 1 skill has been moved to their weapon, which is obtained at level 1. For example, when your sword skill is at level 1, you will learn the "Channel" ability, previously assigned to the Soldier class. This means this ability is available to every class patient enough to master the sword. Likewise, Soldiers can now learn the Monk's "Fireball" ability by mastering the claw, knuckle, or quarterstaff.
  • Upgrading equipment! By using the new random equipment, you can modify their level by +1, for a price. Prices are exponentially higher as they reach higher levels (i.e, a +6 copper sword), so it's more cost-effective to find a new weapon (a -2 titanium sword would be better!).
  • Targeting improvements. Targets are now managed by CONNECTION instead of by ENTITY - this means that switching between group members using the ` key will preserve your targets.
  • Bugfixes + optimizations galore! A lot of things were slow, and a lot of things were broken or unintuitive. Things are improved!

Whew - Quite a post! Hopefully this is everything. Who know that making an entire MMO by oneself would be so much work? :P Until next time! ...Whenever that is. Later!

-- Synival

Procedural Cavern Generation

We're adding a bunch of new features to our engine right now to prepare for instanced dungeons and zones. Our task for the week was to replace the level design team with robots and implement procedural cavern generation. Here's a play-by-play of the cavern creation process, which makes some pretty interesting maps. The method is pretty straight forward, and can be used for any Roguelike or dungeon crawler. Our 3D client needs some enhancements, so we'll be using the text-based version for screenshots.

The method used is based on an algorithm described by a Roguebasin article here:

[edit] Step One: Placing Random Walls

Starting with a totally open map, the first step is to randomly change a percentage of the walkable tiles (.) into walls (spaces). The density of these wall tiles will affect the shape of the cavern in the next step. We want to create a circular cavern rather than a square one, so the amount of wall tiles rises steadily from the center out towards the edge. In our example map to the right, we have a 20% fill rate, which should create an open, spacious cavern.

Density map

[edit] Step Two: Smoothing Things Out

Our map looks ugly right now, so we use a fancy cellular automation algorithm to smooth it out. For each tile, a count of walls is performed in a 3x3 box. If there are 5 or more walls, it becomes a wall tile. If not, it's a walkable space.

Another check is performed to remove really open spaces - if there are no walls in a 5x5 area of a tile, the tile becomes a wall. The box size can be expanded to allow for more spacious caverns.

First pass

The first pass already looks much, much better. Performing the same transformation a few more times will smooth the map out even further. To the right, the map has run through five passes, which looks smooth enough for our final result. Notice that a lot more open space has been filled.

For a variety of ruggedness between maps, some caverns run fewer or more passes.

Fifth pass

[edit] Step Three: Adding Variety

The map shape is pretty good, but it's still pretty boring overall. Let's add a variety of different terrain types to spice things up. In our example map, we're going to place some rough terrain (%) and forests (#). This is done by placing 16 to 64 % and # tiles randomly, then spreading them out until they fill a certain percentage of their usable space. Each map has anywhere from 2-15% of its walking space occupied by these terrain types.


Next, we place some pools of water or lava using the same algorithm. This is an easy map that's close to the surface so we're only using water, but as we go deeper into the earth, lava pools will start to form. The amount of water varies drastically from map to map - anywhere from 0% to 33%.

Water pools

[edit] Step Four: Making it Playable

Our map looks interesting now, but it has one fatal flaw: the water has divided most of our walkable area and left several regions unreachable by foot. Our characters can't walk on water (or lava), so adding pools will often make huge sections of the map inaccessible. There are also some pockets of space completely surrounded by rock. To fix all this, we cut away every walkable region but the largest one, as shown to the right.

Every tile reachable by foot

Although all of our map is now reachable by foot, this is obviously a tiny portion of our original map, and it's totally unacceptable! So, let's take a few steps back to the terrain/water placement phase to shrink pool sizes and change their locations. We'll repeat this process until we have at least 75% of our original map. After a few tries, we finally end up with something usable. The regions cut make the map more unique as an added bonus.

Less water, more reachable

[edit] Step Five: Final Touches

Our map is now fully playable, and every location is reachable by foot. This means we can randomly place treasure, monsters, exits, traps, etc. without fear that players will never reach them. But first, let's make some cosmetic changes. In the image on the right, pools of water surrounded by rock have been scrapped, leaving us with a clean map, totally free of any useless regions.

Scrapped useless water

Finally, we can add a border to our map to make it prettier. Each wall tile checks the 8 adjacent tiles to see what character it should use. This is done with a simple table lookup. Once our borders are placed, the map is finished! Here's the final map in full view:


[edit] More Examples


-- Simon (Synival)

Where's the Post-Mortem? An Update

Hey folks, Simon (Synival) here.

At the end of the Kickstarter campaign, I promised a post-mortem analysis that hasn't happened yet. It's nearly-completed and almost ready to post here, but before I get to that I'd like to give a more personal update to clear my own head. This blog will typically be about development stuff, but it feels appropriate now to act like a human being instead of a game-developing robot. Hopefully my programming will allow for this.

It's been two weeks since the campaign was over, and I honestly walked away on high spirits. It was nice to finally get a day off, but you know what wasn't nice? Not having work to come back to. I'd read before that running a Kickstarter is a full-time job with a lot of overtime work, and it's certainly true. It turns out that it's also really satisfying, too; I love interacting with people, developing crazy new features (multiple unit selection, whoo!), doing the art stuff, and managing the project in general. Not sure why, but getting stuff done is always satisfying, and game development has so many facets, I'm content with just working around the clock. Who needs a social life when I have a glowing LCD screen and the Internet? Don't answer that.

So why aren't I working around the clock on Harmonia right now? Something I've never mentioned and will only mention this one time (because I have no interest in pity or making excuses) is that I need to generate some extra income to pay the bills. I'm not in horrible shape financially or anything, but there's no way I can justify working 14 hour days on Harmonia at the moment, and it's a real downer. Not because there's no money, but because there's a long, long list of features that aren't getting implemented, and I'm super duper eager to get back to work on it. Development on the local client is getting close to replacing the Telnet window, and I really wanna do it!

The plan right now is to gather some extra work to save money and resume development as soon as possible. Developing 2 hours a day seemed like a good idea, but for a project that would take six months to complete, it isn't a realistic plan at all, nor is it satisfying. Aggressive job hunting is my life at the moment, then I can get back to work on Harmonia, possibly working towards another fund-raising campaign later on down the line. Dedicating all my time towards Harmonia was really satisfying, even if it was exhausting (and unhealthy), and I'd like to give another stab at it now that we know how to run a much, much better campaign.

As a side note, you know what I hate? Shameless plugging all over the Internet. It's a necessary evil to be sure, and most people recognized that to my relief, but I still felt dirty every time I did it. So, sorry, Internet, for pushing my wares all over your webs. At least I wasn't posting xzibit memes everywhere or something, starting threads in threads because I heard you like threads oh god I should stop this now.

Okay. The post-mortem: It's almost done, but my first draft was really dry and suffered from a lot of tl;dr, so I'm going to clean it up, add some pictures, and possibly split it into two articles. The post-Kickstarter blues are finally wearing off, so I'm feeling motivated again :D

</personal jibber jabber>

-- Simon (Synival)

That's a Wrap!

We'll be releasing a thorough postmortem on our Kickstarter experience as well as future plans on here our dev blog. We want to keep you in the loop, and this is the place to follow all future development of Harmonia from now on, including articles, videos, screenshots, downloads, etc:

[edit] You guys are awesome.

First off, I want to thank all of our backers for their support. When full-time development on Harmonia began back in May, we had a lot of questions and a lot of doubts, but it ultimately came down do a choice: to make something happen, or to do nothing. Our decision has always been to act and to move forward, and it always turned out to be the right choice - and it's still the right choice. We've seen a lot of genuine enthusiasm for Harmonia, and all of your support, feedback, bug reports, and well-wishes have encouraged us to keep pressing on. Rocky Balboa-style, we went the distance in these last 30 days, and we'll be popping the Champagne cork to celebrate momentarily :)

[edit] To be continued... or, WE AREN'T DEAD

After a short rest to recover from our 14-hour-a-day work cycle marathon bonanza, development of Harmonia will continue! Nearly everyone that saw our project loved it, and now that people know we're out there, we're going to start planning for round two, wiser and better prepared. We still believe in what we're doing over here, and this Kickstarter was just one battle in a long war. Our eye is still on the prize!

So, in what capacity is work going to continue? We naturally can't maintain our previous level of development with no funding, but we'll chip in at least two hours a day of steady work while we plan for Harmonia's future. There are a lot of ideas and plans on the table, including funding alternatives, and we're still hammering out the details. Once we've taken a step back to breathe, re-evaluate, and regroup, we'll get back to work, starting with a postmortem on this whole experience on our blog, as well as a solid plan for Harmonia's future.

[edit] Follow future development for Harmonia

We're going to resume regular Friday blog updates like we did before the Kickstarter began. From here, you'll be able to see our latest development screenshots, downloads, articles, news updates, etc.

You can also follow our video updates and sporadic news on YouTube, Facebook, and Twitter

[edit] And we're off!

As of this moment, I can stop shilling for Harmonia every waking hour of the day, and I'm really looking forward to it :) Developing games is great fun, but spamming the Internet with Kickstarter links is significantly less. So farewell for now, and please follow our blog for future updates every week on Friday. Cheers, and until then!

-- Simon

New Artist, New Build

First, I'd like to officially introduce Takae Saito as Harmonia's character artist. So far, she's drawn a concept for the female Wizard, which we've incorporated into our new logo. She's a fantastic artist, and we're thrilled to have her on board - check out her art here, which speaks for itself:


She's working on designs for the other 7 class archetypes, and I'm really excited to see what she comes up with. If it's as good as the art she's already made, which I know it will be, we have a bright future in the art department!

We've also rolled out a new build of the tech demo for Windows, Mac OSX, and Linux. This features some art enhancements, a tile editor, proper damage effects, sample dialogue windows, and several under-the-hood upgrades. You can get it from our download page here:

Download Harmonia v0.0.3 (Windows / Mac OSX / Linux32

Eight days left to go on the Kickstarter campaign! We just reached 100 backers today, which I consider a milestone. Still a ways to go, but we're now on the Rock, Paper, Shotgun "Kickstarter Ketchup", and all of our wonderful backers have been spreading the word all over the Interwebs. For the billionth time, the Kickstarter link is here:

Harmonia on Kickstarter

We're going to get back to work and focus on making more awesome contact to show-off for our big final push, so stay tuned! :)

-- Synival

Mac OSX Build, and we have a staff!

Just released the latest development build, with support for Mac OSX! :D From the Download page:

[edit] Harmonia v0.0.2 pre2

  • Mac OSX (10.6+): Link
  • Windows/Linux: Link

[edit] Changelog:

  • 3D Map Viewer Feature
  • Resize features for Windows build
  • Windows mouse cursor changes for moving/resizing windows.
  • Improved logging for error detection.
  • Internal code reworking for compatibility and stability.
  • Program icon for Windows build.
  • Version displayed in the corner.

[edit] We have a staff now!

It's not finalized yet, but the team has now grown to five members, including two artists and someone dedicated to promotion full-time while the Kickstarter is underway. Pretty exciting stuff! Stay tuned for some exciting new stuff in the future.

We're looking for artists!

Fledging studio Baroque Creations is looking for an artist to assist with Harmonia, our game currently on Kickstarter. Here is our ad as presented on /r/gamedevclassifieds:

[edit] Project Links

All information about Harmonia is available on these various websites:

[edit] About Us

Baroque Creations is currently a two-person operation: me (developer, project manager, promoter) and my partner (server administrator, web developer) who is currently working only on occasion. All of our time thus far has been unpaid as we get the studio off the ground. I am an American currently living in Berlin, Germany, so all efforts are coordinated online.

We're both laid back and casual personally, but we take this project seriously and manage it in a professional manner. Baroque Creations is looking for friendly, confident team members who aren't afraid to work a little overtime in order to meet deadlines and keep the project on track.

[edit] Game Pitch

"Harmonia is an online fusion of Tactical RPGs (Shining Force), Roguelikes, and text-based MUDs. The game will play like a combination of an RTS and MMO - you command a small band of heroes to form a large force with other players, then go on quests to face-off against huge armies. Rewards for completing quests include access to new character classes, races, abilities, and flair for your army.

"It's also an engine where you can modify anything in the game's scripting environment, create new content, and host your own server for others to play. Upon release, the server and all of the game's assets will be open for editing."

[edit] Art Style

We'd like the game to draw its aesthetic from Shining Force III for Sega Saturn, but other concepts in the fantasy vein are welcome. Here are some examples:

[edit] Responsibilities

This project is currently in full development. Artists are expected to work in a professional manner, remain dedicated to their work throughout the entire development cycle, provide time estimates for their work, and meet deadlines for the assets they produce.

We need artists for one or more of the following:

  • Presentable art for the Kickstarter Campaign produced by August 24th
  • New logo
  • Several animated sprite sheets
  • Tilesets (current sample)
  • Character designs
  • Concept art

[edit] Compensation

All projects for *Baroque Creations* are currently on a volunteer basis; however, if this project gets the necessary funding, this will be a paid position. Harmonia will have a total art budget of $4,000. Please submit your rates for completed assets.

[edit] Licensing

A major part of Harmonia's model relies on game assets being open and free for modification. This means all assets produced for playable, in-game content must be in the public domain or free for modification. However, ownership for concept art and other material that isn't used in-game is not subject to this.

[edit] Experience

No formal experience required. However, you must have samples of your work to present.

[edit] How to Apply

Please submit prepared samples of your art as well as your work history in formal, personal, or otherwise casual projects. For each piece of art submitted, provide a rate for similar work and an estimated time of completion.

Please send your application by email to:

If you have any questions, please feel free to email me directly, post in this thread, or send me a personal message.


-- Simon Bielman (Synival)

Kickstarter is LIVE!

Harmonia Kickstarter

I'm very excited to announce that, after months of non-stop work, the Harmonia Kickstarter is finally LIVE!

We've been laying the groundwork since May, and now it's time to start the 30 day promotional marathon! From August 9th to September 9th, I'll be chained to my computer, without food, sleep, or sunlight, promoting this game like crazy.

My time will now be spent evenly between fund-raising and intense development. Updates have been lackluster recently while I've working on this page, but now I can devote more time to make sure gameplay is coming along.

Naturally, you can help this project along by spreading the word, sharing links to this Development Blog, our YouTube channel, Facebook page, and twitter feed!

Transitioning Combat

To my frustration, I've been knocked-out flat with a cold for the last week and it's totally drained my energy. It could be because my immune system is terrible, because I'm totally burnt out and need a break, or a little of both. Regardless, this update's going to be short and sweet.

The server finally sends combat information over, which means we can do fancy things like have numbers appear over character's heads when they're hurt or healed. I'll be playing around with this to make it "juicier", but functionally, it's in.

There are a lot of half-finished projects that will get some attention as soon as I can get back to work without staring at my laptop for hours on end. In the meantime, I'm going to take it easy.

Hue-Based Palette Swapping Using Shaders

Alright, posting a Friday blog post on a Friday. What a milestone! I'm extremely tired today, but determined to make this post happen, so through sheer force of will, I shall now type.

Let's talk about some technical stuff today. One of the goals for this week was to design the basics of our sprite system. A key design philosophy in Harmonia is that the creation of new assets must be accessible, or, as I like to think of it, as lazy as possible. I want the engine to handle as much as it possibly can for me before I resort to making another batch of artwork or 3D models. With that in mind, I want to get as much mileage as possible from the game's sprites, so I want to have color-swapping effects like in JRPGs of yore.

Here are some sprites from Final Fantasy IV that take advantage of this:

Shader Example

The catch is, making indexed-color sprites is a bit of a pain and it limits the number of colors you can use, which, in turn, restricts the game's aesthetics. Furthermore, reselecting the palette for every color of a 256-color sprite would be more trouble than it was worth. In the end, I ultimately want to draw 32-bit RGBA images using Photoshop or Gimp.

So, if the image isn't using an indexed color palette, the various color regions of a sprite must be marked so you can modify only specific colors. For example, you may want to change the armor color of a Warrior but leave the skin and eye color intact. One way to do this is to manually define color regions for each frame, but this is extremely tedious. The method we used is to define color regions by using unique hues in the image itself:

Harmonia Guy Sprite

He may look like a zombie with poor fashion sense, but this image was easy to create, and the scripting to define regions is beautifully simple:

    region skin  grey
    region arms  red
    region shirt green
    region eyes  blue
    region hair  brown
    region legs  purple

At this point, Harmonia takes our image and rebuilds it as an HSV map. The red channel represents the closest matching region color: 0 for skin, 1 for arms, 2 for shirt, and so on. Here is the image, not meant for human eyes to decipher:

Harmonia Guy HSV

Blech. Anyway, now that this color map is built, we can define our own color regions which we'll eventually pass to the shader. When assigning a sprite to a mob, we can simply use the following commands:

    # set the sprite.
    set ("sprite", "harmonia_guy")

    # define these colors as an RGBA value...
    set ("color_skin",  "255 160  64 255")
    set ("color_arms",  " 96  96 128 255")
    set ("color_shirt", "128 255 128 255")

    # ...and these colors as a web color.
    set ("color_eyes", "blue")
    set ("color_hair", "brown")
    set ("color_legs", "tan")

Now that we've assigned some color data, we can pass it along to a shader to draw and render our completed sprite:

Rendered Harmonia Guy

With this system in place, it's possible to modify specific colors of a sprite in the scripting environment. For example, the Berserk condition may give a character's skin a red hue, while the Banish spell may change everything but one's eyes to be 75% transparent. It also allows for random colors to be assigned, like in this image here:

Lots of Harmonia Guys

So, now that this part of the engine is finished, I need some real artwork with good animations... If you know a good artist, I'll pay him double my salary. Which is nothing. See what I did there? Yeah, okay, time for bed.

Another Not-on-a-Friday Update

Alright, this post should finish this game of catch-up so I can finally maintain a weekly Harmonia blog. If I miss a future Friday post for whatever reason, it's because I'm too busy putting in awesome stuff. And if a blog post doesn't seem awesome enough, it's because there was so much awesome that I couldn't remember it all. That's a lotta awesome.

First and foremost, my video editing skills have gained a few levels, and there's now a basic promotional video! Huzzah:

Now we're one step closer to the perpetually-in-progress Kickstarter page. Fund-raising is serious business, so it should be done right from day one. Hopefully this is good enough? Still more to do, as always, but not much more.

Development-wise, the focus has still been on Harmonia's graphics engine, although that's about where it needs to be. It finally mipmaps and uses linear interpolation to properly smooth textures out. Shaders are in, which opens up possibilities for some neat effects. For instance, the viewable map now fades at the edges:

...and here's me just messing around, set to the absolute worst music on my hard drive :D Thanks, Hindemith!

With help from Harmonia team member Miles, we've got a better 32x32 tileset to work from. Although not complete, there are a bunch of new tiles, including a hilariously ornate oriental carpet texture. Something about this carpet seems out of place in this castle, but it really ties the room together:

Castle Map

In gameplay news, the server now barely communicates with the client to let you play the game with the new 3D map. It's buggy as hell and a work-in-progress, so expect more detail on that next week, as well as details regarding the upcoming sprite engine.

Time to get some food before everything closes for the evening. Until Friday!

Making Movies, Making Art, and Fightin' Round the World

Harmonia Guy

Hey, did you know that using copyrighted material in promotional videos is generally a bad idea? Someone clued me in on this a while ago, so I had this great idea: let's not use stuff that isn't ours so we don't get sued. Pretty good, huh? Revolutionary things are happening over here in the Harmonia team.

Basically, I've been ready to make a good promotional video for a few days now, but it occurred to me that we still didn't have any character sprites of our own. The one used in most videos is Max from Shining Force 1, which is probably not fair use material. Thus, after a crash-course in amateur pixel art, Harmonia Guy was born:

Harmonia Guy Sprites

Nothing ground-breaking by any means, but I'm proud of my first-time-ever human pixel art. The first incarnation had a much taller body - roughly 50% taller than it is now, excluding the head - and shrinking the body down gave him a lot more character and personality. Apparently, bigger heads = bigger fun.

This sprite was drawn pixel-by-pixel at 10x zoom level, but I've recently discovered that you can actually get better results by drawing the same thing more lazily at larger sizes, then scaling it down. He's a larger version of Harmonia Guy (128x128) and two other versions scaled down from that (64x64 and 32x32):

Harmonia Guy (Big)

Now, this one was drawn really quickly and, to be honest, it looks pretty awful. However, compare the scaled-down version of this to the original pixel art on the left:

Compare Harmonia Guys

If you ask me, the one on the right looks much better, especially considering how much less time went into making it. The next step is to experiment around with 6-frame walking animations, 45 degree angles, and adding fancy clothes and armor.

Good Times with a Bad Camera

Video production is going well - it's processing as we speak! Throughout this process, I've learned a few things: 1) My camera sucks, 2) my acting sucks, 3) bad lighting sucks, and 4) Linux video editing software sucks. For whatever reason, my camera records at 12.50 fps, but saves the video at 15 fps, meaning there are a lot of redundant duplicate frames. So, I wrote a shell script to get rid of those frames from a set of extracted JPG files:

    for i in *.jpg; do
      if [ $last ]; then
        if diff $last $i > /dev/null; then
          mv $last removed/

Once that was done, the video needed to be rebuilt at the new frame rate and exported to a raw video format:

    mplayer mf://*.jpg -nosound -fps 12.125 -vo yuv4mpeg

And finally, insert audio, encode to H264, and bring the video up to 50 fps by interpolating frames. My computer has been grinding away at this for about an hour with an hour left to go:

    cat ./stream.yuv | yuvmotionfps -r 50:1 | mencoder - \
        -ovc h264 -audiofile ./final_audio.mp3 -oac copy \
        -o final_video.mp4

tl;dr - Hire a cheap film maker if you can afford it. None of this process was fun, and I can't wait to get back to making the game again. Maybe tomorrow!

More Maps, Kickstarter, New Logo

Oof, it's been a busy week. Mostly under-the-hood stuff with the rendering engine, but it's shaping into a powerful little tool for easy map-making. Lots of bug fixes, speed improvements, restructuring, and a few significant enhancements.

Getting down to business (literally), I'm nearly ready to launch this project's Kickstarter page! When this thing goes live, it will be a mad dash to raise funds for 30 solid days, which sounds like the exact opposite of fun. Follow this blog to stay posted, and please, help spread the word so people know we exist! The larger the following this project has, the more likely it is to be successfully funded.

Here's a preview of the page's logo:

New Kickstarter Logo

To keep the nostalgia going, I've added an ASCII mode, and a Data mode to view raw map data, which is handy for editing. Here's a video demonstrating the two new modes, and some wandering footage of the newly converted Forest Maze zone:

Okay, time for a rendering screenshot. Wall tiles now have actual walls, and it is pretty. Let's follow the journey of one humble map script into a client-side 3D render:

Rendering Development Progression

Hey, it's almost a game!

Everything is slowly but surely inching towards pretty 3D graphics instead of ASCII characters! Now, I'm certainly a big fan of everything text-based, but I have to admit, it's pretty satisfying to have terrains like this:

Moonrise Over Harmonia

So, a list of things that have been happening in the last month:

  • Sound effects! Over fifty 8-bit sound effects have been produced for the game, with many more to come.
  • 3D Terrains! The game's maps are being converted to a format which allows for multiple texture layers, height maps, background effects, and more. Day/night lighting colored lighting effects are in, featuring some beautiful sunsets and moonrises. Here's a pretty animated gif of the sunrise in action.
  • File syncing! The game's client now receives files as they are updated in real time, sorted by server address. With this feature complete, the server is now sending map and tile data over demand. It shouldn't be too long before you'll get to actually play on these maps!
  • 3D map editor! Hover your mouse over a tile to draw, automatically connecting with neighboring tiles and adjusting the heightmap. Watch a demonstration here:

  • Kickstarter page stuff, and a lots of it. The page is almost ready to be launched - a few things need to be tweaked, and some new video footage will be shot, but overall, it's almost ready to go live. When it does, you'll certainly hear about it :)

That's it for now - time to slack heavily!

-- Synival (

« newest ‹ newer 20 ... oldest »
Harmonia Game Engine
Copyright © Baroque Creations 2014
All Rights Reserved