Still Alive Saturday #28: Do I Dare?

Hey everyone!

This will be a simple update, as the Ludum Dare begins this evening and I will most definitely be taking part. If you’re interested in what I’ll be working on this weekend, be sure to follow along on Twitter. I’ll be tweeting my progress semi-regularly as the weekend progresses.

As for what we got done this week:

1. We finally sat down and had our sound design discussion. We settled on a direction, as well as musical inspirations, and made a couple sounds to start things off. We now have a functional footstep sound engine (TM) and some sand/cave sounds to match. Now that we’re getting into sound, expect some actual video footage coming in the near-ish future.

2. We finished the first Quetzan variant. Following typical bird fashion, male Quetzan are colourful and vibrant, and female Quetzan are more desaturated and basic in colour scheming.

 

1cc393edd0087bc7a0069bd24524217a

 

3. I wrote a batch file to allow for easier adding of new character skins into the game. This will hopefully reduce a half-hour task to around 5-10 minutes. This makes for a happy Chris, believe me.

4. I made progress in developing the new pathfinding engine. AI can now navigate over gaps, which makes them about 100% more useful than before. They’re still squirrelly and buggy, but progress is being made and I am glad.

 

That’s all for this week! Expect more progress on pathfinding next week, as well as some new sounds and (I’ll say this again) potentially a new enemy. See you soon!

Chris

Still Alive Saturday #27: Bits and Pieces

Hey everyone!

 

This week was a bit of a miscellaneous task week. We spent the first two days completely and utterly engrossed by the Full Indie Summit here in Vancouver. It was a great experience and gave us quite a deal of insight into some aspects of game design and development that we hadn’t thought of before.

Beyond that, we took some time to finish up/implement a couple features that had been waiting at the sidelines for a while. Justin completed the ocean island icons for the map interface and began work on the first variant of the Quetzan. This is an important milestone for us because it will mark the inclusion of all 3 playable races into the game, at last.

I spent the week looking into re-designing the pathfinding system, primarily. Pathfinding is a complicated beast, especially in the non tile-based platformer environment that we’re working in. It’s been a struggle for me to learn, comprehend and expand on the limited resources out there for an environment like this, and so the first run of the system that I created has some flaws.

The major flaw is that I designed the algorithm to work in a grid. This works in a top-down pathfinding environment where every tile is either walkable or not walkable, but in an environment with gravity and open air, the pathfinding algorithm needs to be run on more of a general graph.

What I mean by this is that the walkable ground should be linked not based on adjacency in the grid, but based on connections created by edge detection, fall lines and jump lines. This means that the algorithm can pathfind across gaps that are as wide as I specify, allowing the ai to know when it has to jump to reach its destination.

I’m going to be spending this week largely attempting to implement it. It’s going to take some time, but hopefully I’ll be able to make a sizeable dent in it.

 

That’s all for this week! Check back next Saturday for some word on sound design, as well as (with a little luck) a new enemy!

Chris

The Pinnacle of Laziness

Hey everyone!

There won’t be a SAS update this week on account of a couple things:

 

1. Justin returned from his vacation halfway through the week.

2. Chris is a lazy piece of garbage.

3. The Full Indie Summit in Vancouver is happening this weekend.

 

We’ve decided to officially take this week off. Progress will resume in full force next week. In addition, if anyone is going the Full Indie Summit, be sure to look out for us! I’m the scrawny white kid with glasses and Justin is the muscular Chinese guy with glasses. We’d love to say hi!

 

See you all next week,

Chris

Still Alive Saturday #26: Spelunkin’

Hey everyone!

It’s going to be a bit of a short update this week, not because we didn’t get much done but because there isn’t a whole lot to show just yet.

Both Justin and Avash are away on vacation presently, leaving little ol’ me all by myself to work. I made some good progress on cave generation, mostly in terms of item placement, chunk sizing and enemy locating.

More exciting than that, in my opinion, is the revised item/enemy hierarchy I implemented this week. We discovered this particular design from a game design blog that I’ll link at the end of this post. It’s very interesting, and I’ll explain it briefly so that you understand how I plan to use it.

 

The hierarchical system for both enemies and items works in a very similar manner, but I’ll use items to explain for the time being. The item hierarchy allows us to specify, with as little or as much specificity as desired, what item to give to the player in a certain situation. For example, when opening a chest in a certain type of cave, we may decide that players should only get a weapon, but we don’t want to specify precisely what weapon we want to give them because we want it to be a surprise, even to us. Alternatively, perhaps we’re generating items for a shop and want to pick from all available character equips. This system allows for both of these scenarios and more.

The way the hierarchy works, in brief, is this:

1. We begin with a root node. The children to this root node are the widest possible categories for items that we want. In this situation, my categories are “Equips”, “Ship Equips”, “Consumables” and “Miscellaneous”. I can add more later if  I want, but those are my categories at the moment.

2. We add sub-categories under each category based on how we want to structure our hierarchy. For this example, under Equips I have “Head”, “Body”, “Trinket” and “Weapon”.

3. Under each of these sub-categories, I add a list of items that exist under that category. These are keyed by item name, so for example: “IronHelmet”.

 

When I want to retrieve an item from the hierarchy, I can specify any node that I like. I could specify “IronHelmet” and it would only ever retrieve that specific item. Alternatively, I could specify “Equips” and it would give me anything that exists under that node, at random.

There are a couple additional aspects of this design that help add to the variety and usefulness. The first of these is the ability to backtrack up the hierarchy, if desired. For example, if I want my cave chest to give weapons 90% of the time, but give an equip at random 10% of the time, I can specify that the hierarchy should be able to backtrack. The hierarchy may then step up one node to “Equips” and then choose randomly from there.

The second special thing is to be able to assign a rarity value to each item node. When calling for an item to be generated, we can specify a rarity, and only items below that rarity level will be generated. This allows us to be sure that we aren’t giving the player something too powerful too early in the game.

If you’re interested, here’s the link to the blog that we stole the design from http://journal.stuffwithstuff.com/2014/07/05/dropping-loot/

 

That’s all I’ve got to share this week! Hopefully the slightly more technical/design-heavy update was interesting for you all. See you next Saturday.

Chris

Still Alive Saturday #25: Caved In

Hey everyone!

Continuing with my usual tradition of making a horrible pun to celebrate the week’s update, this week is primarily about cave generation. Before I get fully into that, however, I should mention the other progress we’ve made this week.

Justin spent the week finishing up the ocean island chunk set. That means that all islands, regardless of what type, have at least one complete image set to work with. There will be more to come in the future, but this is a really nice thing to have complete and it looks great in-game.

We also put some time this week into starting the design for the game’s logo. We’ve come up with some pretty great ideas and I can’t wait to be able to show the finished image to you!

 

Cave Generation

Caves in Tomorrow’s Horizon are generated as part of an island event. Cave islands will be ones that are very thick (that you can’t see the bottom of) or ocean islands, mostly because it wouldn’t make a whole lot of sense if a thin snaky island hid a multi-level cave complex inside of it. Suspension of disbelief only goes so far!

Caves can be seen as a sort of alternate (or in some cases, supplementary) challenge for a location. A lot of island locations will have their combat/events/exploration entirely above ground on the island’s surface, but cave islands will typically be more heavily emphasized on the underground aspect. This means that there will be fewer or no enemies above ground. However, some late-game locations might end up being a two-part challenge that requires you to fight your way TO the cave, and then conquer it for your reward.

e2dbf6c3e39d2b4da30b1a0ec5cffb4e

 

The generation process for caves is a grid-based recursion method. We start off with a root node which can have 1 or 2 children. These children are randomly placed in one of the four directions outside of the root node. Once this has been done, the children recursively generate their own children over and over (so long as the maximum branch length has not been reached). This leads to a very snaky layout that feels like a maze.

Obviously, you can see by the above screenshot that the generation is still very early in development, but this process allows us a great deal of customizability and control over the nature of each cave. In coming weeks you can expect to see more work done on the caves, so look forward to that!

I may write a more detailed technical break-down of the road, probably once the generation is a little bit more fleshed out.

 

That’s all for this week! See you soon.

Chris

Still Alive Saturday #24: What’s in a Name

Hey everyone!

This week was a bit of a monumental week for the game’s development. I say this because we have achieved two important things that we have been working toward for most of development. The first of these is the beginning of a functional, moving ai crew member. The second of these is an official name for the game.

 

Naming the Game

We’ve spent hours over the past couple weeks brainstorming what exactly we want to name this massive game. There are so many elements that make up what we want to achieve with this project, and it was hard to nail exactly what about this game is so unique and valuable.

What we eventually came to realize is that this game isn’t special by virtue of it’s gameplay, story or art style alone. Instead, the game is made up of a unique and powerful combination of all of those elements. We are not only aspiring to deliver an exciting and dynamic game to play, but also an emotionally moving and deep story each time you play.

In this game, you play as one of a number of captains. Each captain has their own unique story paths to take, but the similarity between all of them is their struggle, journey and discovery. The world that this game occupies is one that mirrors our own in many ways. There is racism, cultural issues and war. This is a game about exploring those problems, as well as individual conflicts. It’s a game about the human condition and how the world affects us. It’s a game about looking to the future and striving to achieve the impossible.

With all of this in mind, the name that we’ve settled on for the game:

 

Tomorrow’s Horizon

 

Let us know what you think of the name. We hope you like it as much as we do!

 

Moving AI

A very large aspect of the game has always been the dynamic nature of the crew. Your crew is meant to be smart enough to assist you in combat. This means that they have to not only be able to pathfind intelligently through any kind of map, but also that they have to be able to fight for you in a way that is actually helpful, not detrimental. Your crew should not need to be rescued all the time.

Developing ai this intelligent has proven to be quite difficult, but this week I made some serious strides toward achieving that goal.

Untitled-2

 

As you can see, the ai movement is nowhere near completion, but it is a very important first step towards achieving realistic and intelligent movement throughout the game world. One of my goals over the next few weeks is to take this movement even further and achieve a highly versatile artificial intelligence that will enhance the game’s atmosphere and feeling.

 

That’s all for this week! We’ll be spending some time next week improving both the studio and the game’s representation online, so look for that. See you all soon.

Chris

Still Alive Saturday #23: It was Bugging me

Hey everyone!

 

This week was supposed to be a mix of a couple things: The sound engine, the debug console and continued AI pathfinding. Un/fortunately, the debug console proved to be a much more monumental task than I had anticipated and I instead spent the entire week working on it. The results are something I’m incredibly proud of, but the pathfinding will have to wait until next week.

Note that Justin was away for the duration of this week, so no progress was made in the art department! How dare he.

 

The Debug Console

The debug console is a tool that I’ve been meaning to add to Sky for some time now. It allows us as developers to test, watch and modify aspects of the game with ease.

Testing combat? Spawn some Jellyfish in with a couple clicks.

Trying to figure out what location the player is at? We can monitor that.

Want to change the probability of a random encounter happening? No problem.

Untitled-1

 

The console gives us much more freedom with testing and will speed up a lot of processes. It also means we can customize and set up scenarios easily so that all components of the game are highly polished.

4081a938c09acc40e432f299b52e806c

 

Other Progress

Despite the overwhelming focus on the debug console, I did manage to get some other small tasks done this week. For one, the sound engine is functional and there are some basic attack/damage sounds in-game for testing purposes. It’s nice to see that even with really basic temp sounds, the combat really comes alive. I’m excited to get some serious sound and music work done in the future!

Additionally, I spent some time on Friday optimizing the existing pathfinding structure. It’ll need some work yet before it’s fully optimized and ready to be run on slower computers, but it’s a start and it feels good to be able to have a dozen or more algorithms running at the same time with only slight frame loss.

 

That’s all for this week! I’ll see you all next Saturday for what will probably be a more interesting update than this!

Chris