Week 3 – Some Concept Art

Do you ever have an image of what you want something to look like in your head, but struggle to get it down on paper? I suffer from this all the time, and it really becomes difficult to draw what I want to. But I managed to finally do it! Here is the first concept I made for my main character:

sprite1

The initial sketch took me about 5 minutes, and this one took me about 20 minutes. I always seem to struggle with finding the right colors for my art, but I think this one fits pretty well. I even created a pixel sprite version of this:

Strider Sprite

 

The cloak color change is done via an adjustment layer for hue/saturation, and the colors work well and don’t need any direct modification. This opens up some room for character customization or ability identification based on cloak color. I’ll work on this sprite some more in each direction.


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail


Week 2 – Code optimization and an artificial Z-axe

I took some time to go through some of my code and optimize it. The biggest issue was the fact that collision detection and silhouette rendering was polling each tile of their respective TiledMap layers, which is pretty inefficient. Instead, it seemed more logical to only poll the tiles that are applicable to each entity’s collision and silhouette AABBs – by this, I mean that instead of iterating through 10,000 tiles for each entity, each entity iterates four times (one for each corner of their AABBs), and retrieves the tile that specific corner is intersecting.

After I finished this, I wanted to add a falling-down-holes mechanic to the game, but not in the style of Zelda’s old retro games. Instead, since my game is more of a 2.5D game, I wanted the falling animation to look a little more natural. To do this, I needed to create an artificial Z-axe which gets applied to the player’s Y velocity. Now, every time the player falls off of an edge, they get to see a nice fluid falling animation.

It’s somewhat similar to the falling animation used in HLD too. Check it out:

I should also point out that I modified the camera smooth-easing code to be a little bit more fluid; the player has an internal point which is used to determine where the camera should be looking, and it’s always going to be in front of the direction the player is moving (or on the player’s center position if they are idle.) The reason for this is that I want the player to be able to see ahead of the direction they are moving, but not too much. The camera velocity is now dependent on either the X and Y position of this point, and not both.

I also had the opportunity to test this current development stage on four separate computers with unique specifications ranging from varying monitor sizes, CPU types, graphics card (dedicated and built-in), and all of them worked very well, both visually and performance-wise.


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail


Week 2 – 20k entities, Z-ordering, Shadows and View Frustum Culling

I switched from Slick2D to libGDX because the former is pretty out of date, and the latter is currently being supported. It didn’t take long to migrate my current progress, and I learned a thing or two about libGDX and had the opportunity to clean up my existing code.

While I’m talking about the software I’m using to develop this game, I might as well share what I’ve been using so far, and what I might be using in the future:

  • IntelliJ Ultimate
  • Java (8)
  • Slick2D (formerly)
  • libGDX
  • Tiled (Map Editor)
  • Photoshop
  • Paint Tool SAI (for sketching some concept art)
  • Microsoft Visual Studio 2012
  • Spine (in the future, for animations)
  • Flash (for animations)

I had to develop a padding tool for my TiledMap textures, due to the fact that because I’m using floating-point values for my camera movement, it causes gaps to appear. There is existing software out there which can pad images, but it only does it for single textures. The program I made takes an image, a tile width and tile height, and a padding width, and applies padding to each individual tile in the image:

Tileset Padder

If anyone knows of software which can do this, please feel free to tell me! It’ll come in useful.

Anyways, back to what I did during this week. I wanted to see how many entities I could render on the screen at one time, so I made a simple Health Orb entity. And multiplied it 20 thousand times.

It doesn’t lag at all, but I did notice an increase in memory usage when I looked in Task Manager. I won’t be rendering this many entities ever in my game, but it’s always good to know what your game can handle. To relieve some stress, I added some basic view frustum culling which causes entities to be rendered only if they are visible by the camera.

After this, I worked on Z-ordering by using a Comparator to determine the order that entities should be rendered based on their Y position + height. Here are the results:

In case you’re wondering, I’m also testing out libGDX’s actor MoveToAction by making every entity move towards the player. Unfortunately, their destination doesn’t update when the player moves, but I’m sure there’s an easy fix for that. Also, each health orb has an int which represents the amount of health it contains, and it also gets added to the player’s health when collected.


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail


Week 1 – New Test Sprite, Basic Collision Detection and Silhouettes

I decided to use HLD’s drifter sprite as a test sprite in my game for now, as it’s highly appropriate based on the art style I’ll be using, and I really like how fluid the animation is.

I wanted to make entities visible through layers that are rendered in front of the player, so I did some messing around and came up with a solution – give the player an AABB which represents the section of the entity which, when intersected by another AABB, will return the intersection ratio as a percentage, which is then used as an alpha value to render a completely black silhouette. 1/5th of this alpha value is used when rendering.

In total each entity has three AABBs – one for their hit box, one for their collision box and one for their silhouette box. If you’re wondering what the difference between the hit box and collision box is, the collision box is used to detect map collisions, and the hit box is used to detect entity collisions (such as being hit or collecting an item.)

Here’s a video of what I achieved so far:


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail


Week 1 – Getting Started

Before I begin, I should point out that one of the influences for this game is the new up-coming 2D RPG Hyper Light Drifter, which offers an amazing atmosphere and art style. It wasn’t an initial influence, as I had the idea to make this game since before I knew HLD existed, but when I first saw the game trailer my jaw dropped. It actually made me want to not develop my game, but I was already settled on it, and the best thing I can do in this situation is learn what HLD does best and what it can do better, and apply my findings to my game. It’s also worth noting that HLD applies a noticeably different set of game mechanics to what I have in mind, and the main influence I have from the game is it’s amazing art style and atmospheric 16-bit music.

I took some time to research a few ways I could go about developing this game, and I tried my hand at a few solutions including Unity and UE4, but I finally settled on Java with libGDX, as I prefer to code more than design. My first choice was Slick2D, and I had started on some basic game mechanics including TiledMap rendering (including layer ordering), Camera center-on location and graphics translation, and basic animation.

Here’s what I got done in my first day of using Slick2D:


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail


The Game (sorry)

So, the game I’m making is a 2D open world Action-Adventure game. It’s going to have a pixel art style, and the game mechanics are going to revolve around and expand on Zelda’s puzzle-solving game mechanics. These are the basic steps to creating this style of game:

  1. Bad guy introduces himself and does bad things
  2. You’re inevitably become a part of it and must stop him
  3. Visit a place of importance (a dungeon)
  4. Solve puzzles and arrive at a mini boss
  5. Defeat the mini boss and receive a unique item with unique abilities
  6. Use the item to get past new puzzles (or old puzzles you couldn’t get past before)
  7. Arrive at the boss and use the item to defeat the boss
  8. Receive an item of importance which is used to defeat the bad guy
  9. Repeat steps 3-8 (Usually 8 times, given the circumstances)
  10. Arrive at the final boss (the bad guy) using all items you acquired. Use these items to defeat him and restore balance to the world

That’s basically it. There are countless other steps that I could (and will) add to this, but that’s a basic representation of how the game will work.

It’s been over a month since we started this module, and I’ve made some moderate progress on this, which I’ll share with you all in the upcoming posts. I’m also making a video diary of my progress which I’ll be sure to upload here every so often.

Stay tuned!


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail


An Introduction

When I was about 8 years old, I received a GameBoy for my birthday. It was the greatest present I had ever got. My parents also got me two games for it – Wario Land 3 and The Legend of Zelda: Oracle of Ages, and they were my favorite games ever. I loved the amazing twist on Mario’s platformer that Wario offered, and I loved adventuring in the mystical lands of Labrynna in Zelda, collecting items, solving puzzles and defeating bosses.

What I loved most about both of these games is how complete they both felt. They didn’t have great graphics at all, but they delivered something unique and fulfilling, and that’s something you rarely see these days. When I look at a game like Call of Duty, I see the same recycled garbage, and nothing new and exciting. But with Zelda, each game offers something unique. I won’t go into details about them, but I highly suggest playing a few of them if you haven’t done so already.

Moving on, 12 and a half years later, I find myself on my last year at university studying Software Engineering. I wish I could say I had more of a complete portfolio of works I have done, but up until now I’ve been a lazy ass, and I don’t really have much to show for what I’ve learnt in the past five years. Last year, I had to create a game using XNA – I created a breakout clone:

Breakout

 

It was barely a complete game, but it was enough to finish the module. I spent a lot of time getting the mechanics right on this, and the ball/pad/brick collision is just right. I should revisit this one some day, the mechanics are more solid than most breakout games out there.

This year, I am completely dedicated to my studies and desperately want to come out of this degree with something unique to show for all of the hard work I’ve put into it.

Ever since I played Oracle of Ages, I adored how amazing the game felt. It was fairly linear, but its puzzle-solving game mechanics and adventuring atmosphere made it feel like something I would want to play and return to more than once. I’ve always wanted to make a game that played like a Zelda game; something with my own twist to it; something that my players would love to return to.

And so, this is what I’m doing! I’m making my own 2D Action-Adventure game, styled after Zelda’s puzzle-solving mechanics, with an open world and pixel graphics!


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail


Welcome to my new Blog!

Hey! my name is Reece, but online I prefer to go by my alias, Dragonphase. I’m a student at university studying software engineering. It’s my third year, and it’s a Bachelors degree in Science (BSc.)

I created this blog so that I could document my progress on my university modules. There are four that I have to complete:

  • Research Project
  • Business Systems Development
  • Agile Development Techniques
  • Object Oriented Programming

I already know a fair bit about the principles of OOP, and we’re using Java for that module and the BSD module, which is great! All of those modules will require a lot of hard work and dedication to complete, and from what I’ve seen so far in my first month, it’s on a whole new level compared to the last two years.

For the research project, I’ve decided to develop a game based on the modernization of retro video games, using the old Legend of Zelda games as a primary reference. I’ve had an idea for this game in my mind for quite a while now, and I’ve always wanted to make a game similar to the old Legend of Zelda games (Link’s Awakening, Oracle of Seasons/Ages, The Minish Cap, etc.)

I’ll be updating my progress on the game I’m developing; be sure to check out the latest posts!


facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail