“Momoiro” Finishing Touches

Today has been pretty similar to yesterday. The first level Momoiro is now looking pretty finished, from now until the end of the project I’ll probably just be tweaking little bits rather than making huge changes. In the screenshot above you can see the second cave part of the level, which probably has way too many lights! So there’s something that could do with some rearranging.

Here’s a screenshot from another part of the level, which leads down to the cafe. I was previously trying to play around with things I could do with the red brick tiles and some of the shadowy overlay tiles, but in the end I’ve decided to try and keep things simple.

The part of the level which has been changed the most today is the cafe itself. To set this apart from other buildings, I’ve added outdoor table arrangements and a unique flag which reads カフエ “cafe” in katakana. I’ve also added a new table light, which shines a small circular light which at the moment is the same colour as the hanging lights. It might be a little too bright at the moment, so I might dim this later. Also, I’m trying to work out how to create a flickering effect to make it seem like candle light, but I’m not currently sure how to do this with the EasyLighting system.

Other than that, there’s not much more to do, except for adding the extra characters and working on the background imagery. I’m still happy with the silhouette at the top of the level, but the rest of the level looks very dull without anything in the background. I’ve also got to add the trees back in before I forget!

Some of the characters are more developed than others. This afternoon I started working on Kaze, a resident of Momoiro who wears a face mask and scarf due to his cold. I’ve given him a walking and climbing animation so that he can manoeuvre around his home, but haven’t programmed any movement in the engine yet.

Getting Ahead of Myself?

It turns out I jumped the gun a little last week as I was advised to “finish the first level to move on…” I checked back to my time plan this morning and my goal for this week was to add UI elements like the HUD and inventory menus. These are now well under way, so I feel like I’m doing well for time, although I know in my head that this can only mean I’ve omitted to do something a long the way. Obviously, graphics are still a working progress. The reason I wanted to start placing UI elements now is because I felt the natural graphical style would be evident enough to start expanding from background assets to the other areas, like the UI, title menus etc which will start to take form over the next couple of weeks. Right now, I’m still filling out my days with level refinement and perfecting areas which have been left overlooked for a while. So that I can’t miss A SINGLE THING, I’ve started at the beginning of the level and worked my way, changing and improving on specific things as I’ve gone along.

In a lot of places, parts of the level simply needed filling out slightly. You can see some improvements to the graphics here where I’ve added little plants and bushes and filled out large plain areas with small rock details etc, so that every part of the level has a unique combination of my existing tiles and assets. What may of may not be noticeable from this image is some adjustments to the lighting which I’ve made. I’ve expanded the sprite I use for these lights so that it covers a larger area and isn’t so concentrated on a small space, which brightens up the level significantly and adds more light variation across the level.

One major addition to the tileset has been these grassy edge tiles, which droop over the edges of platforms and just round them off nicely. They make everything seem a lot more finished, and eliminate a lot of the very hard, straight edges that were causing problems before.

Another significant change has been to the lighting system inside caves. I’ve made the ambient light nearly black, which almost makes the background invisible, except where there are lights. I’ve made these lights much brighter than the outside lights as they are significantly more essential more gameplay. I think this change make the level more interesting visually as well as in terms of how the player plays the game. Instead of looking at an entire surrounding area, the player is constrained to one small space. In this image, you can also see some improvements I’ve made to the Hanging Adversary sprite, which is now finished and working very nicely.

When it came to animating the Hello Mushroom sprite, I admittedly got a little stuck. My original design didn’t give me much space to work with, and I felt like I could only accomplish very minimal movement. This would have been fine, except my other obstacles are now much more active in comparison! So, I redesigned the shape of the mushroom to be more flexible. This new mushroom still releases spores in exactly the same way as the old design, but this one now dances about a bit. The smaller mushrooms are harmless and (I think) create a nice little piece of scenery, but warn when there is a nasty mushroom around!

I’m still having problems capturing videos of gameplay, so until I work out how to sort this out/find an alternative to Hypercam, I’ve strung together some screenshot highlights of my game so far.

This week’s aim was to create a level which was playable from start to finish and included some of the functions that would be seen in the final game. The result is a playable place-holder graphic level with a basic placeholder HUD (“Heads Up Display”) containing level progression info. Below is a list of all the current features…

Incorporation of the EasyLighting system

So far I mainly have lights inside the first building, some of the lights can be seen in the image above. When the player moves into a light source, the light affects the brightness of the sprite’s colours. A comparison can be seen below, when the character moves into an unlit area.


When the character comes into contact with a column of red lines such as this one, the custom variable “canc” is enabled which I’ve set up to allow for vertical movement. I’ve used some of the Grandma Engine’s custom variables such as “vspd” (vertical speed) and “S_JUMP_SPEED” (jump speed). The current climbing speed is half the value of the jump speed, which I’ve currently set to -5.25. This has actually resulted in climbing speed which is faster than the walking pace, but I’m keeping in for now for faster level testing!

if (place_meeting(x,y,obj_ladder)) {

vspd = 0;
canc = true;

if (keyboard_check( key_up ))
vspd = S_JUMP_SPEED /2;
if (keyboard_check( key_down ))
vspd = (-S_JUMP_SPEED) /2;

Press up to warp function

Previously, warping from room to room occurred on contact with the “warp” object (invisible in this screenshot!) In this instance, the warp object is placed in front of the door, so that when the character came into contact with the door, the character would be automatically transported outside the building. The X and Y coordinates for the door are the same in both rooms, so the character arrives in the new room in the same location.

Since incorporating this feature, I’ve adjusted the mechanism to only warp when the “up” key is pressed. This was quite simply achieved by adding the line:

if keyboard_check ( vk_up )

to the code!

Item Collection/Level Progression

I’ve dotted some of my sakura objects around the level for player collection. On collision with the character, the blossoms disappear as they did before to avoid the player picking up the same flower twice.

I’ve created a very basic HUD which tells the player how many flowers they’ve collected. Each time a blossom is collided with, the figure (starting at 0) goes up by one. This affects the global variable “gamescore”, controlled by a HUD object which always appears in the player’s view rather than on a fixed point in the level. The object contains draw commands which tell Game Maker to draw the figure “0” followed by a string of text saying “/30”. This is currently just a random figure as there aren’t even 30 collectable items in this level…

Player Hit Points

Underneath the level progression information is a figure representing player health. This needs the most work so far! I’ve currently set this figure to start at 5, and decrease by one every time a black blossom is collided with. These blossoms also disappear on contact, so you can only be hit by something once. The “enemy” objects probably won’t disappear in the final game, for now I have simply set it so that health cannot reach 0. I don’t currently know what will happen when this figure reaches 0! But it will probably re-locate the player to a designated re-spawn point.

As for the rest of the level, I’ haven’t really made any changes but I’m hoping to work on some new tiles soon. Tracing the level design by hand has given me some really good ideas for environmental tiles and objects. Hopefully I’ll get a video up and running very soon!

EDIT: My Devlog Video 1 is now online! And nearly works.

Level Testing

Building Buildings
Today’s level testing began with constructing the Ryokan in Game Maker using the tiles I already have. For the first time, I connected a room with the inside and a room with the outside of the building through a “warp point” at the door. Using the “warp” function in the Grandma Engine transports the character to a another room at the same XY coordinates, so the door is at the same point in both rooms.

Today I tried out the EasyLighting extension with my level for the first time. The system requires two colours- one ambient colour which masks the entire screen, and one light colour which is the colour generated by the light source.

The colours I used in my original text were the colours used in this tutorial, which resulted in a murky/swampy ambience!

Too murky

According to advice given in the tutorial, the ambient colour should be a darker colour and the light colour a contrasting bright colour, unless of course you want to create a light which is darker than your background for whatever reason… For this opening level of Hanami, I felt that a pink scheme would be appropriate. I started off by using hex code reference websites to look for bright shades of pink for the light colour, however weirdly when applied it came up with some weird results. My first attempt turned out these very blue lights:

Too blue

To get the right colours, all I could do was test hex codes until I found a good match.

Good light colour match

Ambient light colour too dark (and purple)

Subtle indoor lighting!

Placeholder Tiles
I made these quick tiles to act as placeholder for the rest of the level. They probably won’t make the final design, but they add a little variety to the design while it’s in its early stages! Unlike my “black-block” test level, this tileset contains sloping tiles and add gradients to the level.

Combining this with the building set makes the level design seem much clearer, especially where buildings and caves are concerned. The pink line down the middle is made of my flag tile and represents the waterfall!

This level is now completely playable as it is. For now I’m carrying on the visual design on paper by tracing the mock-up, while I’m working on creating some of the gameplay functions digitally! My first objective is to create a points system when flowers are collected. Here’s where my tracing is up to so far:

Easy Lighting Extension for Game Maker

One thing I’ve picked up on by reading developer’s forums and various articles on the Internet is that while Game Maker can do almost everything you could want it to, it doesn’t necessarily do it well.

I noticed this myself during my last Game Maker creation when it came to audio. Despite the fact that it gives you the option to use .mp3 format audio, it turns out that it doesn’t support most types of .mp3 (or some such nonsense.) I ended up using some hefty .wav files, which Game Maker compressed during the gameplay and completely changed. The majority of my sound effects seemed to sound like static! This is why people with the technological know-how have stepped in to save non-programmers by providing downloadable extension software for GM, including several which improve audio handling, which seems to be GM’s lowest point.

When it comes to in-game lighting, I’ve previously found ways to cheat by overlaying semi-opaque objects on top of light-emitting objects. In Somnium I used this to make some objects appear to glow, however this ultimately had no effect on the game’s lighting on the whole. The image above is an example of an extension called EasyLighting V7.0.2, which handles light generation in Game Maker. It is the same extension which Gabriel Verdon uses to create his moody, atmospheric lights in The Archer.

As you can see from the top example, there are two types of light generated. One is a dim, yellowish light and the other is a bright white light which casts shadows off the objects around it. Both of these lights use the same sprite image, which is a circle shape with a radial gradient. This is similar to my previous lighting “objects”.

However, the extension settings are used to draw these sprites to certain specifications, rather than simply overlay the same image in the same way repeatedly. This reduces the amount of sprites and used, and helps game performance.
You can read an in-depth description of all the extension’s functions in this tutorial here, which also runs through how the extension works and how to implement it!

The advantages of using a lighting system like this one is that it can help create the game’s desired atmosphere. The lights work by first applying a colour overlay, which immediately changes the tone of the game. Each light then has its own individual colour and brightness, which can give a really good sense of light and dark in the game.

To test the extension, I made some street-light style lights in the Grandma Engine. I recorded a quick little demo of the lights in action so you can see how effective they are in changing the ambience of a room. I’ve tried to capture the difference in the colour of the character (square) when under and away from a light source. These lights worked especially well at highlighting objects when several were placed close together.