Wrapping Up Year #3!

Video Thumbnail
Mischieviots First Trailer

This month marks the anniversary of Mischieviots 3rd year of development! I’m actually quite impressed that I’ve stuck it out this long and to this day am still learning so much about game development itself.

If you’re interested in how much things have changed over the years, you can read all about my prior two years wrapped: First Year and Second Year.

The biggest news to talk about is that, on Feb 26, 2017, Mischieviots (“The Gathering”) was finally released to the wild! That’s right, you can finally play this goofy little game of mine. If you haven’t yet tried it out, you really should!

So, what’s else happened this past year? There were so many little things I couldn’t possibly think of them all, but below are some of the major highlights I did remember:

Let’s start off with a quick overview of the year:

  • Our friends finally got names! (yeah, yeah, in year #3)
  • Added tons of sound effects and map ambiance.
  • Updated monster encounters by making them spawn on the map and wander around a bit.
  • Combat flow improvements (several iterations)
  • Continued memory management and performance improvements.
  • Added In-Game tutorials to let players learn some of the basic mechanic’s of the game.
  • So many visual, interface and cosmetic changes that I can’t even begin to list them all, so here’s a few of my favorites:
    • Screen shaking
    • Walking through small things like flowers
    • Updated inventory and Equipment comparison window.
    • Experience Window Improved.
    • Status Messages
    • Afflictions window

Major time sinks:

This year didn’t involve any major time sinks like the previous years since they involved mostly the core engine/mechanics design and implementation. Outside of a few bug fixes and added features, it’s been very stable and reliable, making all the prior effort worth it.

If I was to list anything for this year though, it’d probably be the time spent during sound/ambiance; although that wasn’t exactly a time sink as it was an entirely new system being introduced.

Future plans:

This next year I’m planning on setting my focus on working through all the content needed for the all the chapters being planned out. I have big ambitions for the overall story/plan, so we’ll have to wait and see how far I actually make it I guess!

Of course, adding in more polishing/features etc will still be on the plate, so I’m always on the lookout for suggestions and feedback from players.

Our friends got names!

I can’t believe it took me this long, but I finally got around to giving our little friends the names and also came up with a short little biography for each one. Here’s our cast of friends in order that you’ll meet them:

Knight: Finley
Scottish for “Fair-haired hero”. Our main character in the game has no significant background and has pretty much spent his entire life aimlessly wandering around from tavern to tavern pretty much accomplishing nothing.
Amazon: Gerarda
Old English for “Brave Spear Woman”. Nobody is entirely sure where she came from. One day she just showed up in town for a competition and amazed everyone with her combat skills; she was immediately offered a job in guard duty and hasn’t left since. She dreams of big things in her life other than just being a simple guard grunt though and is always looking for something else to do instead. She doesn’t talk a lot, but when she does, you’d better listen!
Archer: Frezza
Italian for “arrow”. Fezza has spent many years learning the fine art of archery and has become quite good at her trade. She prefers to live among animals in the forest and isn’t a huge fan of large cities. There are only a few people she would call a true friend, but will do anything in her power to help them when in need.
Mage: Lilura
Basque for “Enchantment”. While very early in her development as a mage, Lilura is a quick study and really likes it when she can fine new shiny magical things to play with. She is good friends with Frezza going back many years and too prefers the more solitude life away from larger cities.
Bandit: Calvin
Latin for “Hairless” or “Bald”. Born with a full head of hair, which his parents were never able to keep control, he was named ironically after his bald great-great-uncle. He was raised to be a free spirit and always speaks his mind, even if it means peeving someone off. Unfortunately, due to unknown events, he was left with nothing but hit wits and attitude to carry him through life; resulting in his life as a bandit.
Dwarf: Gus
Gaelic for “Strength”. He’s Dwarf, enough said!?! Grumpy and very strong willed, Gus has spent most of his life focused on combat training, exploring caves and obtaining as much loot as he can. He’s not an overly great conversationalist, but tries his best when required. Gus isn’t a big fan of free-spirited people though, then tend to annoy him!

 

Sound effects and Map ambiance

I must admit, when I first started this project I hadn’t given sounds or ambiance much thought at all and put only basic placeholders into place. I figured I’d only need to expand on them slightly when the time came to needing more. Boy, was I wrong!

I hired a great guy Jack Powell to work on sound effects for me along with some ambiance for the maps (birds etc). When we first started out I thought that we’d only need a handful of sounds for specific needs (spells, attacks etc). As we dug further though and discussed things in more detail, it soon became apparent that Jack knew much more than me about sound options and how best to present them.

So off we went together on a fantastic adventure as a developer/musician duo working out all the best ways to get the sounds we really wanted. Jack making suggestions on where/how sounds could be used best and me coding things like crazy trying to make it all happen. And it paid off!

We ended up with a very intricate and detailed system of sound “layers”, each one assigned to all kinds of actions/events in the game, allowing us to control and time sounds in almost every part of the game at any time. Many of these sound layers overlap and also have variations of the same thing to reduce loop exhaustion (like walking).

Then we turned our focus onto ambiance (sounds played when wandering around the maps). We used the same layered system from above for birds, bee’s, bugs etc which play at “random” intervals, but still have a very natural feel to them at the same time.

We then decided that some sounds should get louder as you got closer (like walking up to a lake). This resulted in a “sound wave” system I came up with that produced exactly this. If you listen carefully in game, you can hear the sounds of water splashing get louder as you draw closer, then fade out as you walk away. You will also hear multiple splashing (also at various sound levels) from lakes should you be near several at any time. It’s all very subtle, but worth it!

In the end we created a very rich sound quality throughout the game as a whole. I couldn’t speak more highly of Jack and the effort he put into this process. If you’re looking for sounds for your projects, grab him!

Monster spawns / encounters

My original implementation of monster encounters started with the old JRPG style where you have “random” (algorithm, not actually random) encounters which would immediately force you into battle with them.

In recent months I decided to try out something a little different. I wanted to keep the same algorithm for encounters themselves, but instead of forcing the player directly into battle, I would spawn monsters on the map near by the player.

When spawned, these monsters will show up as little pink markers on the map showing their locations. This allows you to choose to walk up to and engage, or simply ignore them and continue onto whatever else you were doing. There could be up to 6 at any time, but might be less if they happen to spawn in places you can’t reach (lakes, mountains etc).

After a certain amount of time, which varies on per monster spawned, the monster markers will change to darker color indicating they’re about to wander off. A short period after that they’ll disappear off the map entirely and you’ll need to wait for a new batch to wander in again.

I’ve done some lot’s of play testing with this new setup and the leveling still works out to be about the same; assuming you go attack things frequently and not ignore every time.

For those who like the immediate encounters, they can choose to turn them back on and not use the spawning. You can change this in the options area of the game.

Here’s a quick little GIF showing the monsters spawning in the forest and walking up to one:

Shortly after the original implementation, I felt that they we’re a bit too boring just standing around waiting to be attacked. So I decided to change that and make them move around a bit when they had room to (sometimes they spawn in places where they can’t move, and thus won’t still). This ended up with them being far less static and much more lively looking:

WanderingMonsters.gif (401×257)

WanderingMonster2.gif (500×302)

Shortly after that, I decided that the direct left/right was also a little bit too static looking and I added a small (random) vertical incline/decline to their path making them a little bit better:

I believe since this I’ve slowed them down slightly, but has been much remained the same since.

Combat flow improvements

Over the past year, I’ve made several changes with the flow and how turns are used; some very strict while others were way to beneficial to either the player or the monsters.

For the first official release, I was using a “everyone gets a turn, then start over” design in which the players chose an action, their character immediately took that action then waited for their next turn. All the monsters would still need to take their turns also and if the players turn was ready before they finished, you had to sit around and wait for them to finish.

The wasn’t too bad overall, but at times you did find yourself wanting a bit more action in the flow. Recently I decided to revisit this mechanic and try to improve the flow of action a bit better.

I started off with allowing the player to no longer have to wait to attack once their turn is ready, instead they could attack right away (you still have to wait for your turn to be ready though). I then made the monsters a lot more lively by making them attack any time the player isn’t keeping them engaged (if all your characters are waiting on turns, the monsters will keep attacking until you return).

This one change made a huge improvement in the overall “feeling” of combat. There were times though that I felt you’d rolling over the enemies too quickly though, so I continued to look for additional solutions. After several variations I eventually found a nice balance between monsters and players that I’m happy with.

At this point, monsters still attack when the player isn’t keeping them busy, but I’ve been able to adjust turns in a way that they attack about 50% of the time of the player (two player attacks per monster). Should the player start to lose the battle though (deaths), the monsters become “over confident” and will slow down their attacks giving the player a chance to possibly win still.

This seems like a nice balance so far and will probably be the direction I keep going forward. In response to the changes though, the monsters had to be “beefed up” slightly since they don’t all get to attack like before. So although they will hit harder now, they hit less often.

Also, after further consideration, I decided to remove the dual combat styles and no longer support the “simultaneous” style and focus instead on the improving the newer system I’ve been working on (as above). I also don’t believe it was ever used much, if at all, since it was not the default style.

Memory / Performance Improvements

As with any long-term project, the desire to make it as robust as possible is always there. Throughout the entire year, I was always keeping an eye on memory usage and looking for places to make performance improvements. There were many minor changes, some that might not have even been overly beneficial, but were made anyway for future-proofing.

My recent venture into porting over for the iOS mobile device showed me several additional places where things could be improved. Here are the more recent changes I made:

  • Significantly reduced the number of sprite sheets used for spell/effect animations by using Spriter animating instead. This was something I wanted to do for a while, but kept putting off, I’m really glad I did it though because using the same Spriter engine for both characters and effects is a great benefit.
  • Unfortunately iOS devices required having loading screens for every map visit due to iPhone 5 memory limits. I may reconsider later no longer supporting iPhone 5 and remove/reduce the loading screen requirements.
  • Significantly reduced layers in several of the maps to improve loading times and memory usage.
  • Changed the spawn behaviour for monsters to allow for better management of memory.
  • Revisited loading screen mechanics several times to get the best performance from them.

Added in-game tutorials

One thing I’ve learned is that writing tutorials is hard and making them in-game is even harder!

I found myself setting out with a plan in mind, then quite often not being able to get the point across without a large “word dump” on the player. I went through many, many variations of the tutorials in game before settling with what I have now.

I did have a lot of help from a friend (Thanks again Tony!) who helped out with many of the steps and layout used in the tutorials and the overall “feel” of them. To be honest, I still find myself fiddling with them to try and improve them (not such a bad thing I guess).

Cosmetics, Polishing and User Interfaces

I’ve made a ton of changes this past year in all kinds of places adding in minor visual improvements, polishing etc. So many that I’ve long lost track of them!

One major difference this year was that I picked up several packs of icons/graphics that I’ve been using for items, spells etc throughout the entire game. I really like their style and they seem to fit well with the game overall.

A lot of interface changes were driven through player feedback during the Alpha/Beta stages prior to the first release and they were all very helpful. Many of the changes just came from my own imagination also over time and some were just added in because something was annoying me 🙂

Here’s some of my favourites from this past year (no particular order)

Screen shaking

A while back someone suggested to me that I should add in screen shaking during combat for special attacks to make them feel more “exciting”. Not only did I add it there, but I also added it to a couple places during mini-cut-scene’s also. I also wrote up a short article about how I did it using LibGDX in case you were interested.

Here’s a couple GIF’s showing off the screen shaking in two places:

CaveExplosionShake.gif (499×299)

Walking through small things on the map

This was added just for fun because I saw it being used in someone else’s game a while back.

When you go up to some small things on maps (such as flowers, plants etc). You can now “walk though” them and have the plant either be in front or behind you as you pass through.

It’s a subtle in the game and doesn’t add much value except for polishing, but I kind of like how it turned out:

Updated inventory

When visiting the vendor or looking in your inventory, previously you had no way to do a full comparison of the equipment piece your looking at against all the characters. I added a little window that allows you to see the benefits and losses a certain piece of equipment will have on all the members of the party. This should help everyone decide if they should purchase the item and who could make the best use of it.

Experience Window Improved

After some feedback from players, it was observed that most didn’t even realize that the window displayed post-combat showing their experience also allowed them to review what benefits a character gets should they level up on that last battle.

Previously you had to click on their “panel” that showed the character and it would open up a separate window with details, but it was never made obvious that this could be done; so many people missed it.

I updated that window to better show all characters in one place (no more scrolling needed) and also made it more obvious that you can now step into a separate window to review details on a level up of that character.

Here’s what the new experience window looks like:

javaw-2016-11-20-01-52-51-268

Added status messages

Previously when characters were under the effect of longer term spells such as confusion, slow etc their name in their console would switch in/out with that affliction until it goes away.

I added in a small icon beside their name/affliction to show it full time regardless of the rotation of name/affliction. I also added a small number over the icon to indicate how many turns (if applicable) that effect has remaining and then sort by that number from highest to lowest.

Due to space limitations though there will only ever be a maximum of 4 shown and any additional messages/icons will be displayed as the oldest are expired/removed.

Not all spells will end up in this list as some of them are designed to be “secret” and you’re just going to have to learn how they work 🙂

Added afflictions window

Shortly after adding in the status messages from above, I realized that it would be handy to be able to learn more details about those afflictions. I decided to add an “Afflictions” window to the main action menu allowing the player to review/read what is currently on that character:

Conclusion

When I first started writing about this past year I didn’t think I’d have a lot to say, but it seems there actually was a lot accomplished. There wasn’t as much technical problem solving this year, but instead mostly usability and polishing changes.

I’m looking forward to working through all the new chapters in the coming year along with anything new idea wise I might come up with.

Thanks for reading!

0
Weekly Wrap-up #117
Spring 2017 Combat

Leave a Reply

Your email address will not be published / Required fields are marked *