Blogs

Hello?

Posted on 13 March 2017

I have been quiet for a while and haven’t made any updates in the year 2017. Let me assure you I am still alive! I haven’t made any significant updates in the past two and a half months, but I have made a lot of progress with Messiah Quest II. There just hasn’t been much to talk about. I’ve slightly changed my development process, though. When I originally described my process on the Messiah Quest II page, I stated I would create all the graphics first, then code the game. I still have to create graphics first, but I am building the game by level so I only have to create a small set of images before I can start coding. I will expand on my explaination.

Since I need images of the rooms before I can code, I create a simple grid image as a placeholder. The grid has 32x32-pixel cells with black borders and white inner-color. I then use my map I drew for the plans of the level, which has individual pixels to represent the walls, doors, etc. and I color the cells of the grid to match the map. I end up with a large image which looks similar to the original map, except it is 32 times bigger.

The Grid Phase

The Shadow Realm in the grid phase. If anything was wrong, it would be easy to fix at this point.

The plan

The plan for the Shadow Realm. This was used when coloring the grid image as well as programming the walls.

This image is enough to begin coding. The next phase of building the level is in the GUI tier. I need an object that can specifically create the graphical objects for the specific level. The image contains all the rooms for the level, and this object knows where those rooms are located, slices those rooms out of the master image, and creates a graphical object to draw the image of a room as a background. With this object, I can begin coding the actual level.

The levels are defined in the base of the game. The definition of the level creates each room and fills the rooms with the appropriate walls, doors, etc. At this point, I only focus on the puzzle aspect of the level. Switches are placed and set up to open doors or spawn objects. Keys are placed in the rooms. Basically, everything except the monsters is added to the level (because most monsters require new image assets). I also write in code to track the player’s progress through the level. With this finished, I can begin testing.

I test the two objects I created by playing the game. The object known as a MapBuilder is tested by observing the image drawn on the screen. The MapBuilders are responsible for slicing out the images of the rooms as well as positioning the “camera” based on where the player enters the room. I have to make sure the image is not distorted in the game, and the player is on the screen at all times, especially when entering a new room. If everything appears like it should, I try to reach the end of the level like I should, and this tests the object known as an Overworld. I have to make sure each door leads to the right room, certain doors are closed, the right switch opens the right door, and most importantly, the walls are where they should be. It is easy to test these features at this phase, because I can explore the entire level without being interrupted by combat.

At this point, everything is easy to fix when something goes horribly wrong. The coding errors are the easiest to fix, but if I determine the code is not wrong (because it follows the plan exactly), then something is wrong with the image. I once finished the drawing of a level before I began coding, and while testing it I found everything to be off. One side of the master image was 32 pixels too long while the other side was 32 pixels too short! I had to first find where to move the 32 pixels, then very surgically fix the image. It’s not fun dealing with large, complex images in MS Paint. This is why I only make the simple grid image, and then I code it out and test it. Fixing the grid image is as simple as recoloring the cells. Once everything is well, I draw “textures” for the walls and floors and fill in each cell until it is a detailed image that will appear in the game.

The finished Fire Temple

The final image used for the Fire Temple. It has detailed textures on the walls and floors instead of a colored grid.

One of the next assets required to finish a level is music. The music isn’t necessary until combat is implemented in the level. There is a single line of code I have to add to play a song, and it isn’t necessary until I have the song made. If you enter a level with this line of code, it will play the song. If you enter a level without this line of code, it will simply continue playing the previous song. The only time there is silence is if the player saved inside a level without a song, and the game started in the level. Now this is how the problem starts. If there are monsters in the level and you engage in combat, the game will play one of the battle songs. When combat ends, it will attempt to restart the music for the level. If there was no music playing before the battle, it will raise an error when it tries to play a song that doesn’t exist. The error is not fatal, though. It just pops up a window with a detailed error message. It’s just annoying and I don’t like to see it, so I prefer to make the music before adding monsters.

The next phase is creating sprite sheets for new monsters. Many monsters share the same appearance (they vary in level ex: Lesser Fire Spirit, Fire Spirit, and Greater Fire Spirit all look the same but are located in different places and are more powerful than the last). Even more monsters are simply recolored because they are similar creatures but different elements. These monsters still require new sprite sheets before they can be implemented, but the images can be created quickly. Many monsters are abstract shapes rather than anything that resembles a human or animal. These monsters are also easy to create because I don’t have to animate arms and legs or different sides. The resulting sprite sheets are often very small. The creative struggle occurs when I have to create a monster unlike any other monster in the game. This is why I started building the game one level at a time. There is a small group of at least five monsters per level, and there are usually a couple monsters I have to create from scratch. Once I power through the creative struggle, I get to go back to coding! I would not be able to draw every monster in the game before programming the game. I know I would eventually give up and just move on to programming (or the monsters would turn out poorly). I will officially say that I am not an artist. I am a programmer. This is why I make pixel art!

The final phase of development is to define the monsters in the Overworld object and implement the spawning method. This part is very easy, because I planned it so well. I have already planned out the values of every property for each monster, so I simply have to convert the plan to code. Finally, I code in where to place the monsters in each room.

Now the level is complete. The only thing to do is play it! This is the final test to further ensure the level works with appearances and monsters (there is another kind of art asset I forgot to mention, and it is the background for the battle scenes. It is often easy to draw because I can reuse the textures from the map). There isn’t often different results from this last test, but I make sure that I enjoy playing the full level. Rarely the monsters will reveal flaws in the level. For the most part, I test the cohesion of the new level with the other parts of the game. I make sure I can play a character I have been building up, enter the new level, and continue improving my character. For example, I have created two of the three temples. I want the player to be able to play any temple at any time and have it get progressively harder. So I made the monsters of each temple level scale. The first temple’s boss is level 10, the second is level 20, and the third is level 30. Now I have two characters: the first character beat the Fire Temple first and the Nature Temple second, and the second character beat the Nature Temple first and the Fire Temple second. It’s a neat feature that I am glad I implemented.

Fire Temple battle background

This is the background which appears during combat in the Fire Temple. It uses the same walls and floors as the map.

When I started writing this post, I thought it would be a short announcement to let you know I am still working on things. I got carried away with describing my development cycle. Although there are a lot of words above this paragraph, I still say there hasn’t been any major updates with Xatro Games or Messiah Quest II. I haven’t added completely new features. For the most part, I have only added what I said I would add. I have only been building out the game, and almost every core feature is already implemented. The next big update will most likely be when I finish the game. So let me inform you on how close I am to finishing the game level-by level.

Messiah Quest II Levels

I am essentially building out parts of the game which follow the main story. Once I can play the game from beginning to end, I will finish building the other levels you avoid during the main story. Therefore the other stories will be playable from beginning to end. The main story begins in the Fire Realm, so that is why most of the Fire Realm is done. Next on my path is to build out more of the Shadow Realm so it is drawn, and I will have to make a monster for a quest in the Fire Realm. Next I will build the Realm of Balance completely. Then I will finish the Nature Realm. After that I will build the Light Realm completely. Finally, I will build the Lunar Spire and the ending of the main story.

Once the main story is complete, the remaining levels will be the rest of the Fire Realm, Ice Realm, and the Shadow Realm. Now you may be wondering how every level fits together if some aren’t part of the main story. Without spoiling too much, I call it the main story because it is the story which continues directly from the first Messiah Quest. SPOILER ALERT! At the end of Messiah Quest, your creator wants you to defeat the Ice Deity to save the human race forever. In the “main story” of Messiah Quest II, you do just that. However, there will be another story. It is equal to the main story, but it is opposite! Therefore, it deviates from the story of Messiah Quest and that is why I consider it “secondary.” In the secondary story, you get to go to most of the levels you never visited in the main story as well as some of the same. There are a lot of equivalences between several levels. The Lava Spring, the Maze of Trees, and the Ice Caves I are the same level range of 11-15, and they each offer a legendary weapon. BUT! The monsters are different elements and the weapons only benefit a certain element. The entire point of each story is to build up an elemental advantage towards the final boss, and the quests guide you to specific levels where you have the elemental advantage while avoiding levels where you have a disadvantage. Ultimately, it’s a way to increase re-playability by offering new levels the second time around. The levels may be equivalent in ways, but each one offers different puzzles.

Now, hold on to your mind, because it’s about to blow! If you understand the elements perfectly and no longer require guidance through the realms of Messiah Quest II, there is a THIRD story! A NON-STORY! If you want to go anywhere and eventually everywhere, this is your story! If you don’t want anyone telling you what to do, this is your story! If you want to kill everything, THIS IS YOUR STORY! How do you play this story? Ignore the story! The antagonist tells you to go this way! The former confidant tells you to go that way! All you have to do is GO YOUR OWN WAY! Let the protagonist become his own confidant, and let everyone else become the antagonist! This story-less story only ends when EVERYONE IS DEAD AND YOU ARE THE ONLY ONE LEFT!

Ok, you may now reassemble your mind. The About section on the Messiah Quest II page hints to the three stories (which offer three endings), and if it wasn’t clear, now it is. I hope I didn’t spoil too much, but I believe the experience is still intact. I’m still trying to be vague about what exactly happens as you progress through the game. So far in this blog only one character has been named. I think I should stop before I do any more damage.

This blog went to a weird place, and I’m trying to bring it back down. This is just my way of saying

Hello? How are you? I’m fine. I’m still here. I hope you are still waiting for this, because I’m not giving up on this. I may have been quiet for months, but I have been busy for months. Just know that just because I’m quiet, it doesn’t mean I’m not here working away. This is my life, so I will always be here.