Spaghetti Code

Techinical Design
This weekend has been great as far as progress is concerned. Although, I’ve noticed that I’m just kind of throwing code all over the place. Some of it is getting a bit wild and is all over the place. I’m taking some time to reel those parts in, as well as correcting and expanding on some things;
naming of variables and scripts, including tree locations

  • collision: this hasn’t worked correctly since I changed the main character sprite
  • data structure: I am making objects for each item and that’s not working out. I’m going to set up an item index and build objects based on the index data instead of building the data into the objects. I’ll have to think about how code works for unqiue items.
  • animation: it’s working ok as is. It needs a little more flexibility for layering items on top of each other. I want to setup parts for characters (head, torso, legs, etc…) and be able to assign items to those parts.
  • drawing: I need to make a system to control drawing order. The sprites are drawn in whatever order Game Maker draws them in. This leads to some items being drawn on top of things they shouldn’t be. I need keep a depth order and draw based on that.

I’m not going to beat myself up over these thinsg, I’ll look at it as learning the ropes of Game Maker. Also, I’m pretty happy with the way input is handled and abstracted. The extra time spent on that will allow for custom input mapping and it’s easy to use in code.

Game Design
I’m playing through Breath of the Wild on Master Mode. There are times when I’m totally ignoring the story or any quest and I just go around in my stealth gear collecting beetles. This is the kind of activity I want to have in my game. Something that is fun and beneficial to the player, despite being totally optional. I would love for the players to be able to take pictures, or something with a similar purpose (tagging different game objects). I’m thinking about that a lot.

The story is still a work in progress. I aim for it to be something that can stand alone and be enjoyable on its own. I like it a lot so far.

This is a picture of the inventory window. The dark gray slots are disabled and can be unlocked through perks or experience.
Inventory Window

ps. This article on The Legend of Zelda level design is pretty good!


Doom Article

This article on Gamasutra about the design process behind Doom 2016 is really interesting.

Here’s how Stratton and id creative director Hugo Martin defined the idea of “combat chess”: speed of movement; individuality of the demons; distinctiveness of the weapons; overall power of the player; and the idea of “make me think, make me move.”

On gameplay…

Martin added, “We just edited a lot of stuff, and said we don’t necessarily want the player to have multiple ways to accomplish their goals – there’s only one way to play Doom…We cut a lot of stuff that is completely valid in a lot of [other] games, just to get the game to feel like Doom.”

No reloading, it’s DOOM!

Doom cuts the cruft from the modern first-person shooter format. There’s relatively little dialog, there are “missing” mechanics like reloading, and the tools provided to players in order to progress require little overt explanation or tutorializing.


Camera Perspective

Technical Design
Holy hell, March is half over! I’m picking at things, trying this, that… mostly to see how Game Maker works and what’s possible. I did something with the background sky that’s been behind the buildings in many of the videos below, replacing it with a shader instead of a texture. It works really well. If the shader was some type of cloudy sky, it would look a lot like the sky in Breath of the Wild, which is definitely a dynamic shader. Something a lot like this…

Game Design
One of the problems I’m having is how to handle the camera perspective. Think of a first or third person game, when the camera is low to the ground and you can see off into the distance. When the camera is high, you are above the player, staring down at the ground. These pictures illustrate the difference. These are all pictures of the same scene, with only the camera’s height changing.

Directly Behind Behind High Overhead

In my opinion, the first one looks the best and the third the worst. My game is a top down game, which is a lot like the third picture. My dilemma is: How do I make something that looks more like the first picture, than it does the third? The awesome feeling that I get from being able to stand atop a big mountain and look out over the landscape can’t be overstated. I don’t know that it’s possible to replicate that feeling in a 2d world though. In an attempt to replicate the low camera look, you can zoom out, which will increase the field of view. This relieves some of the claustraphobic feeling from the third picture. If that view was zoomed out, allowing you to see the sorroundings, it would be a little more playable. I tried this with my protoype and zoomed the camera out around 100%. It gives a much larger field of view and feels a little more substantial, which you can see in the video below.

I’m going to keep experimenting. I’ll check out some other games to see how they handle it, as I’m sure someone already has a great solution.


Work Log

If you don’t see any updates for a while, check my Work Log. I keep it updated with technical stuff, some ideas, to do lists, upcoming objects, etc. Sometimes I don’t have much to say and don’t want to make a post here just to say I’m still around. I’ve added a link at the top of all pages.

Testing refined ghost movement.


Little Light

Technical Design
GameMaker really works well when it comes to reuseability. I will code something directly on the player object, the code to initialize the sound emitters for instance, then refactor that code into a function that accepts the target object as a parameter. This isn’t groundbreaking or anything. The great part is the way GameMaker facilitates this type of design and makes it easy to do. It agrees with my style very much.

Let’s get to some specific things I’m working on…

The Player
The main character was originally written as a guy like me named Elliot Ever. However, this quickly lead to me referring to the world as the Eververse, which is not good. I’m not sure what to name him now. I was thinking of letting the player name the character and not referring to the character by any specific gender. This way, the person playing the game can pour themself into the main character container and not feel out of place. I’d like anyone to be able to imagine that if they were put in the hero’s place, they could fill the role very well!

Not having a specific character to work with got me thinking about the hero’s interactions with other characters in the game. How would a hero with no personality decide what to say, what to do? So I decided to give the hero a personality type, akin to how the hero is defined in Just Cause 3. Rico Rodriguez has a very well defined personality and set of needs.

“The child of one thousand comic books and action movies. He is James Bond, Mad Max, Jason Bourne, El Mariachi, Wolverine, Punisher, Rambo, Tony Montana and Han Solo all rolled into one. With a touch of Enrique Iglesias to top it all off!”

I’ve thought about giving the hero a personality that is loosely based on one of the Myers-Briggs types, speficially, INTP. That’s probably where I will start as far as interactions go.

Little Buddy
I wanted to have a buddy companion for the player. Think, Destiny’s Ghost, Halo’s Cortana, or System Shock’s SHODAN. I picture the companion traveling with the player like the Ghost, giving the player real-time augmented reality feedback. For instance, when you walk up to an NPC, the companion will display the active quests involving that NPC. How or where these would be displayed is unknown.

GameMaker works in such a way that I will code the logic for these augmented reality components into the companion’s game object. They will activate and deactivate based soley on the Ghost’s presence in the world and will operate entirely independent of any other object in the game. The ghost requires a follow target, in our case it’s the player. From that follow object, the ghost gets the viewport and uses that to display its augmented reality information. You could attach it to any object with an active viewport and it would display its information correctly.

I liked the Ghost idea until I played Hyper Light Drifter and saw their Ghost. That game already has so many similarities to mine that adding a ghost just seems like it will invite even more comparison. Part of me doesn’t care about the similarities. I’ve known about the type of game I want to make for 10 years and that’s what I’m going to make. Another part of me says, get rid of the ghost, get rid of the work required to make the ghost. I’m leaning towards an in-ear companion, much like Jane from the Ender book, “Speaker for the Dead.”

The Game World
This has been tough for me. I want so badly to integrate unexplained real world events into my story, explaining them as consequences of the game’s events. It just doesn’t seem like it’s going to line up. I will take another pass at it though, I really enjoyed writing those parts of the story.

The ‘alien’ world is called Roma in everything I’ve written. Inhabited by Romans, which aren’t from Romania. They are ‘robotic human.’ Not really robotic at all, but that’s how we can understand them from our frame of reference.

They are a lot like we could be a few hundred years from now. Their planet is dying and has recently reach the tipping point. They disregarded any concern for the planet because they had an extremely advanced space program. It was very nearly ready to support a full blown planet-wide emigration when they were attacked on a global scale. The assailant, an alien race that frequented the Solar system, was thought to be an ally and attacked with little resistance. By the time the Romans were able to respond, the war had already been lost. The Romans presence in space was nearly wiped out when the capital spaceport, Porta De Ceu, was totally destroyed. Millions died in the unprovoked attack.

Collusion and the Altayih
Once the dust had settled from the invasion, It was found that many Romans had colluded with the Altayih to ensure the effectiveness of the attack. These traitors, known as Tamurins, were critical to the Altayin’s understanding of the Roman defenses, helping to detail and map out the Roman response to the surprise attack. The Roman’s faith and trust in the Altayih was mirrored by the Tamurins, and they too were betrayed. The Tamurins were promised positions of power once the Romans were conquered, but few survived the attacks and many were executed by their co-conspirators. Within a few weeks, the Altayin’s had taken control of every one of the Romans offworld mines. They enslaved the inhabitants of the mining colonies and eventually worked many of the colonists to death. It turned out that the Altayih had no desire to conquer the Romans and were merely doing what had to be done to collect as many resources as they could. After a few decades, the Altayih moved on to a new system.

This goes on and on…


Collision Detection

I’ve been working steadily on collision detection. Here is a bug with collision detection and dashing.

The problem is that my player is moving more pixels per game tick than the collision object is wide. The player passes right over the collision block without ever setting foot on it, then it collides with the next one and stops. What I’m doing now is checking to see if my destination location would cause a collision. I need to check for a collision at any point from my current position to my destination. Fun stuff!

Here is a short clip of the city.