Download Hanami Beta Now!

The Hanami Beta is now available to download from the Yoyo Games Sandbox website! Because the game won’t scale to account for various screen resolutions, I’ve created a fixed windowed version of the game which sits in a 960×570 window. Compared to the footage and images I’ve been showing so far, this version reduces the amount that is visible on the screen at once. I actually prefer this limited field of vision as the screen looks a lot less cluttered, although it does potentially make the game harder and much easier to get lost!

The sites requires info and images to create a dedicated page for the game. I took some screenshots from the new windowed version of the game to upload:



The zipped folder available by clicking on the download game link consists of a folder containing:

Folder of box art images
The empty save folder
Folder of game sounds
The game (windows executable)
PDF instruction manual
Readme text file
Supersound.dll (required to play sounds in game)


The game currently appears in the Beta type section of the site in the Platform genre. After the project is over I would love to continue working on and improving the game. I’ve already had some really helpful feedback and have started thinking of ideas for positive changes. Hopefully I can get some more feedback from the Yoyo Games site.


You can see the game’s download page by clicking on the link below!

YoYoGames

1

Hanami
Added: 12 May 2012
By: Hana Mi

End of Week Wrap Up & 1/2 of Weekend Update #6

Towards the end of this week I’ve been concentrating my efforts on the Professional Development unit and have tried to fix little bits of the game and add art in between writing sessions. I’ve kept a list of the little things I’ve managed to get done, and some of the things that were on my original to-do list that haven’t made it yet…

What I did do:

  • Made music for the opening slideshow (though not completely happy with the result)
  • Made a “press button” prompt when the opening slides can be changed
  • Sorted out the double-jump sound so that it ONLY plays when double jumping. It had been found to play when on ladders…
  • Fixed the retro X-press thing that was going on when trying to obtain sushi (for some reason you would gain sushi for the amount of times that X had previously been pressed. Not sure why or how but it works properly now.)
  • Added a sushi-get sound when acquiring sushi from Hiru
  • Fixed some anomalies in the arrangement of tiles in certain levels
  • Removed some pointless and annoying invisible walls. I can’t remember why I even put them there in the first place.
  • Re-placed one instance of Ji-sama and one instance of Kigurumi where they seemed to get stuck on the scenery or tried to walk no thin air. Neither of these worked especially well.
  • Changed the layering of the onsen hot springs in level three so that they are in front of the player
  • Added a door unlocking sound to the final door in level four
  • Added a confirmation sound when saving
  • Sorted out a problem with a serious framerate drop during the final boss fight. This happened a lot previously where I’d jammed unnecessary commands into instances’ step events, and this was basically the same problem.

What I couldn’t do/haven’t done yet:

  • Sort out a petal-giving animation, which plays when the player talks to a character with a petal. I’ve made a couple of animations, but can’t seem to get the timing right in the code.
  • Make Ji-sama disappearing after talking to him. I’ve programmed a conversation with Ji-sama to restore all of the player’s health, but I want this to be a one time only thing and for him to disappear in a cloud of smoke afterwards, however at the moment only the first frame of the animation plays for a while then he returns to normal. I may just have to write in the code to only allow healing once.
  • Improve transition between different background music. I just can’t figure out a way to make a nice cross-fade or anything. Game Maker just isn’t equipped for good music handling.
  • Figure out how to solve the final loading issue…I’m now pretty sure that loading the game works fine, except that on a fresh load none of the sounds of background music loads. This has something to do with the files being external resources, but I’m not sure how to fix the problem yet.

Save/Load Functions

The tricky part of implementing a save/load system is the painful process of working out what Game Maker will and won’t do using its default game_save(); and game_load(); functions.

Based on my original inventory menu, I’ve created two new menus in a similar style which represent the save menu, which is brought up by pressing the menu button at a save point, and a pause menu, which is brought up by pressing return/start and can be used to load up a saved game.

Save Menu


Pause Menu


To activate these menus, I’ve used a similar set of code to that used to activate the inventory menu. In the case of the save menu, when the player is in contact with a save point object and presses “S”, all objects are deactivated and a temporary overlay is created from a still image of the background. The object obj_save is then created, which draws the save menu onto the screen.


I’ve included the object obj_save in my list of instances that are created when the game is started. When initiated by the save point object, it changes the state global.save from 0 (false) to 1 (true), and draws the menu sprite onto the screen as well as the highlight sprite which changes position when the left and right keys are pressed. The options in the save menu are the same size and shape as the menu slots in the inventory menu, so I was able to use the same highlight sprite for this menu. Like the inventory menu, each “slot” (s) is given a value, in this case because there are only two options the values are 0 and 1. If s is 0 when the X button is pressed, the game is saved. If s is 1 when the X button is pressed, the game returns- pauseon and global.save are both reset to 0. Game Maker uses a simple one line of code to save games: game_save(“example.sav”);. However, there are many things that aren’t included in this save file. I already discovered a while ago that temporary datastructures, such as the item lists I use to hold information about collected blossoms, are not saved in save files. To save this information, I’ve had to save each list as a separate text file, so the save code has become quite extensive!


The game here is saved as a file called hanamisav.sav in a designated folder called “save”. I made this empty folder to test if this save function would work, and sure enough the files appeared in the folder straight away.


As a symbol of the game being saved, I’ve made a floppy disc icon which appears at the top of the screen whenever the player opts to save or the game is autosaved. The floppy disc seems to be the universal symbol for “save”, whether used as an icon in software such as Game Maker or as a save point in games such as Cave Story!



On my floppy disc icon, I’ve included the kanji I discovered before for “to save”. This is supposed to look like it written on the standard lined label that you used to get with blank floppies. Like the sushi icon which appears temporarily at the top of the screen, this icon remains for about three seconds before disappearing.


I’ve assigned the pause menu to the return key or start button on the SNES controller. Pressing either of these buttons will do exactly the save as all pause functions I’ve implemented so far, but will draw the pause menu sprite onto the screen. The options are actual strings of text which are drawn over the top of this sprite, according to the array I’ve set up in the object obj_pause.


This list of text acts differently to the slots I’ve used in my previous two menus, so I wasn’t able to use the same highlight sprite to hover over options in this case. Instead, I’ve used two different colours to show whether the text is highlighted or not. The lighter colour shows the option currently selected.


At the moment, both the “continue” and “main menu” options will simply resume the game, as I don’t have anything that acts as a main menu yet! I may later change this option to “quit”, and simply make it close the game. To load the game, I’ve had to make sure that all five files are loaded and properly restored. I’ve written out the code in the opposite way to the save code, so that each text file is loaded then applied to one of my global.itemLists. As for the rest of the game’s properties, I’ve so far relied on the default game_load(“save/hanamisav.sav”); function to restore everything else.

Loading the game shows some….interesting results. Each of the text files are actually restored properly, this was the part that I was mainly worried about! Everything in the GUI returns to exactly how you left it, including level progress, health and collected sushi. However, I’ve noticed a couple of things that the aren’t restored properly due to faults in the default Game Maker save file. The sounds aren’t loaded, possibly because the SuperSound.dll doesn’t exist in the “Save” folder, and weirdly enough the mushroom’s particle system isn’t restored. Another MAJOR issue is that 8 times out of 10, the game will crash after you’ve taken a few steps from the restore point. Of the remaining 2 times out of 10, 1 of those will produce an error message stating that a non-existing background cannot be deleted, which is probably due to a fault in my code for the temporary pause background. Because of these problems, I’m going to look at alternative ways of saving that don’t use the default save functions. I may also make slight tweaks to the menu interfaces, but not too much.

Technical Updates

Until now, each level has only existed on its own, completely unlinked from any of the other levels I’ve currently created. This is mainly because the pink square that I’ve been using as my warp between rooms can only be used if the destination is in the same coordinates as the square on both sides. This is useful for entering and leaving buildings and caves, which I’ve made to line up with the main level structure -all buildings and caves are the same dimensions inside and out. However, in the transition between level one and two for example, the player jumps from an X coordinate of 2992 to an X coordinate of 688, so I’ve had to create a new item specially designed for transition between levels. The new icon uses all my artistic abilities and has formed this go faster arrow shape to differentiate itself from the standard warp square.


On contact with this object, I’ve set up variables who’s values are defined in the individual instances on the map. In the collision event I have:

room_goto(rm); //goto “rm”
obj_player.x = X; //the player object’s new X coordinate
obj_player.y = Y; //the player object’s new Y coordinate

Then, in the individual instance these figures are defined as something like:

rm = rm_2_1; //Level 2 part 1 (main)
X = 688; //new X position
Y = 178; //new Y position

This allows transition between any level regardless of score, so I’ve had to make only allow transition if a sufficient amount of flowers have been collected. Before now, I’ve used one datastructure list to hold information about the collected blossoms, but as this figure changes depending on the level the player is currently on, I thought the best course of action would be to create a unique datastructure for each level. In my GameInit script which runs at the beginning of the game, I now create four lists instead of one:


The first list controls collected sushi boxes. This was previously the same list used to hold information about collected blossoms, but as I’ve had to change everywhere in my code that uses one of the new lists it was simpler to leave this list there. The other three lists correlate to the three levels. I’ve also had to set up three different “gamescore” variables, which display the amount of flowers collected in the HUD and in the inventory. Because these are persistent global variables, each value will remain even if the figure doesn’t show. So when the player leaves and returns to level one for example, the figure will return to the previous global.gamescore1 figure.


The value of each is increased by one whenever a flower is collected, but now the room that the player is in affects which gamescore value is increased. I don’t know if this is the simplest method of achieving this, but I’ve set up the system in this lengthy but fool-proof way:


The || symbol represents the word or, so the top line of the code states that the following actions only apply if the player is in room 1_1 or room 1_2 or room 1_3 etc. The corresponding gamescore is increased by 1, the item collection sound is played and the information added to the appropriate datastructure list. The instance (the individual flower item) is then destroyed, as it has been collected and shouldn’t appear again! I haven’t had to create three different HUD objects as the player’s health remains constant throughout the entirety of the game, instead I’ve simply had to state which gamescore should be drawn depending on the current level. It’s a very similar process to before:


In order to determine whether a level transition will work depending on score, I’ve simply stated that gamescore1 must be over 9, gamescore2 must be over 14 and gamescore3 must be over 19. If not, the player won’t be able to progress to the next stage.


At the moment, the open transition is marked by my beautiful pink square sprite, so next on my to-do list is create an open door sprite to replace this with! You can now play all levels from beginning to end (as far as I’ve made, anyway.)

Changes to the Background

One thing that’s been bugging me for a while is the overpoweringly plain background, which so far has been a challenge to improve. Because Game Maker doesn’t support large images, the background must be repeated in some way and can’t consist of one specially designed image. So far I’ve created one repeating image that repeats itself across the X axis at the top of the screen, but the image cannot be repeated vertically, so for the majority of the space I’ve ended up with a solid block colour filling most of the screen.


I’ve tried taking inspiration from existing games, although a lot of the most successful backgrounds (in my opinion) are either made of large complex images specially created to fit the foreground, or they’re smaller images that can have a “proper edge” because there is no moving camera change the background view. Above is an example from Braid, which consists of a huge background which pans the extent of the room.


A Boy and his Blob has some really great foresty parallax scrolling backgrounds, and to some extent some vertical camera movement. Here the trees have been scaled to create a sense of depth throughout the background, and brighter colours have been used closer towards the foreground to reduce the emphasis of distant background features. This is something that I could really consider incorporating. A while ago I posted about some trees that I designed to be part of background imagery, but I have since removed these because I felt the design was too inconsistent with the foreground. I felt inspired to redesign these recently after watching Tekken: Blood Vengeance (of all things :S) and seeing a similar style tree in the Japanese landscapes of the film.



I realised that in order to make believable, aesthetically successful trees I would have to pad my old design out slightly, and try to represent the trees textures much better, especially leaf formations. I mocked up this new design to check how well it fit into the level design, judging by its size and shape:


Here is the finished design, with all details added:


The colours have also been dimmed slightly, because I noticed that the old design cluttered the foreground a lot more than it should have done. I only have one tree made up with this new design, but it doesn’t seem to get too repetitive when placed throughout the game. I’ve placed the design into level one for now, although I’m considering only using Cherry trees in this level and saving the Bonsai style trees for level three.


I haven’t got round to adding any “depth” to the background imagery yet, but you can see here that I’ve been playing around with difference colour combinations etc. I’ve finally got round to brightening the ambient colour overlay which activates the lights, so the level feels a lot less dark now! The new colour is “grey38” from this list of hex code colours. The colour of the sky here may or may not stay, but this is intended to be level specific, so in level two the sky will be an orangey colour.

I’ve also been working on an alternative to trees in level two to add a little more variation to the level. Instead of a thick layer of trees, I’ve been trying out a thin layer of bamboo in a similar colour scheme to the new tree designs.


These seem to look much better spaced out than bunched together, as you can see from these screenshots:




In this last image, you can see that I’ve added the same silhouette background, ambient overlay and sky colour to create a much more finished looking background, which is consistent with other levels.

Sound Effects

In contrast with the synthy background music track I created, I’ve actually been experimenting with 8-bit NES style noises as sound effects elsewhere in the game. These started off as placeholder sounds so that I could work out what type of noises to include, but they all seem to fit really well.


I’ve been making the majority of my sound effects using a browser-based software called as3SFXR, which generates random 8-bit sounds that you can adapt and customise in your web browser before saving and downloading your generated sound. You can see from the image above that its possible to customise all settings of any sound created, generate sounds based on category or create completely random sounds using the randomise button. You can export sounds as good quality .wav files!

Sound effects I’ve currently created in as3SFXR are:

  • jump & double jump
  • hurt sound
  • door sound
  • “flower squash”
  • “flower unsquash”
  • blossom collection
  • sushi box collection

As luck would have it, a couple of days ago an article came up on TIGsource about a lesser known piece of software that could be used to generate multi-channel sound effects called LabChirp.


This works very similarly, you can generate random sounds or create your own very easily. The main difference about LabChirp is that you can use the 8 channels listed down the right hand side of the first window to create complex sounds which utilise up to 8 instruments playing at once. You can see here that I’ve set the category to footstep, which is a category not covered by as3SFXR! I’ve made myself a very simple footstep sound based on a random generation which I customised to be softer and quieter. This only uses one channel, but was much easier to make from the starting point presented by the program. I’ve also made a “death” sound which uses two channels, and plays when the player runs out of health. You can also export sounds created in LabChirp as .wav files.

As I’ve mentioned before, I’m trying to avoid using Game Maker’s built in sound functions because there are much better ways of implementing sound effects and music. I had a go at using the Caster extension for Game Maker, which supports .ogg playback. Ogg Vorbis files are a great alternative to mp3s, especially with the restrictions on mp3 files and as Game Maker support for mp3s is temperamental at best. Game Maker plays .wav files fairly well, but using many .wav files can result in an unnecessarily large game file. Caster uses many of the same sound calling functions as the built in GM functions, but allows better customisation of things like volume and panning. In the end though, I’ve decided to use the SuperSound.dll because it seems to have much more support on the internet. This .dll still support the use of Ogg Vorbis files, and many of the same functions as Caster, but works much differently as it is a .dll rather than an extension.


The Super Sound System comes with several scripts for GM. This example is a script called SS_Init, which is called in any instance where a sound is played. There are several other scripts (you can see some of them in the browser on the left hand side) including scripts to play and stop sound, and change various settings. In order for an external sound to be played, it must first be loaded. This can be done individually within each instance, but to save memory I’ve created an instance which loads all sounds as globals. This is created once, meaning that all sounds are only loaded once but can be played several times.


Here are all the sounds I currently have loaded (this list really needs some sorting out and arranging-it’s a bit messy!) I start off by initialising the Super Sound System, then use the SS_LoadSound function to load sounds from their location in the “Sound” folder. I’ve given each sound a handle, which acts as a unique ID for each sound. for example:

global.musHanami
is the background track which is continuously looped;

global.sndstep
is the sound that the footsteps make.

You can see I’ve also used the SS_SetSoundVol function, which allows you to change the volume of individual sounds. Because my sounds files have been brought in from various places, volume levels are a little erratic! This is only there temporarily, as eventually I’m planning to change the volume of the actual files to decrease the amount of functions called. I’ve been using Audacity to convert my files from .wavs to .oggs, and changing the volume is no problem.


Here’s a really simple example of how a sound is played. This script runs when the Z button is pressed (making the player jump). The Super Sound System is initialised with SS_Init();. If the player is on the ground when the Z button is pressed, the SS_PlaySound(global.sndjump) function is called. The second section of code applies to when Z is pressed and the player is in the air performing a double jump. This plays the global.snddoublejump handle, which is a higher pitched version of the jump sound.

Most of the sound effects have been fairly simple to implement, based on various parameters like the ones above. The most complex so far has been the step sound, which uses a timer between plays that I had to time perfectly to the point when each foot touches the floor! You’ll be able to hear some of these sounds in my next devlog video!

Rough Inventory Menu Design

Based on the designs I’ve been looking at from previous games, here’s my template design for the Hanami Inventory menu:

The window design has been greatly inspired by the simple blue menu windows in Final Fantasy Tactics Advance. I’ve emphasised titles by giving them a strong background rather than using bold text. At the moment, the type face is an image which I have drawn. I’m currently using DejaVu Sans in all my development work and for the text in my HUD, but I might change this later. The typography here has been custom made to fit best into the space, so I feel that it’s the best option.

The Petal progress diagram is very rough and unfinished. This is for a feature that I haven’t implemented yet, where collecting five petals in each level will result in the collection of one full flower. This information is displayed entirely visually, like the Triforce diagram in The Legend of Zelda or the Orb collection diagram in Final Fantasy. I’ve taken a lot of layout ideas from the original Final Fantasy menu system. The only interactive parts of the menu are on the left hand side, while the right hand side contains information about items and the character. However, instead of linking to pages of lists of items, I’ve used a more visual approach similar to the one used in Harvest Moon More Friends of Mineral Town. The player can scroll through each collected item in the three available slots and see information about each on the right hand side, where there is a designated blank space for written information.

The health diagram in the right-hand column is similar to the health bar in the HUD, so that player can see which stats it correlates to. This is currently fully interactive, so when the player eats a sushi item one coin is restored to its slot.

In Game Maker, information on each item in the inventory is stored in a 2D array. This stores information about the name, description and start amount of each item (in that order!)


I have a script called itemAdd which is called every time a piece of sushi is acquired. This tells the engine to draw the correct sprite into the menu when the “S” key is pressed on the menu, ie

if global.inventory[0,2] > 0
//here, [0,2] refers to that specific information in the array


Another draw code tells the engine to draw the strings of text for name and description in its designated place on the screen. This is a general code where the figure indexing each individual item is replaced by “s”, meaning this one code will cover all instances where “s” is a figure.


The left and right keys are programmed to direct a “highlight” sprite above each slot in the inventory in order to select an item. This is simply achieved by programming an X and Y coordinate for each time the button is pressed. When an item is selected using the “X” button, this code controls the processes of restoring 1 point of health and removing the item from the menu.


To make sure the player cannot restore more than 5 points of health, I’ve programmed all figures above 5 to equal 5.

Lastly, I have a code which pauses the game by disabling all other objects and drawing a static background based on the objects on screen when the inventory was opened. This is based on a process I used for a pause menu in my last project, where I create a state called pauseon which is true when the menu is open and false when the menu is closed and the game is running.

Screenshots:



You can see the new system work in my latest Devlog Video here!

Natural Hazards…


This week I’m thinking about all the features I want to have in the game before handing it to others for feedback! I think in my original time-plan I wanted to base the product of this week on feedback from participants, but I’ve gone into some of the graphics in a lot more detail than I was expecting to and as a result have a few other things that need rounding off/actually making… So my goal for this week is to create a working prototype ready for testing either at the end of this week or the beginning of the next.

One of the major things which I have omitted until now is, to summarise, how to loose whilst playing Hanami. I’ve implemented a really basic health system so far, which can currently only go down, and instigate an immediate game-over is it reaches 0 (which it can’t, because I haven’t put enough hazards in yet!) This is one of the things that needs a lot of improvement this week- it especially needs something to build it back up.

I’ve mentioned possible “hazards” or “enemies” before, and I’ve sketched out a few ideas in some of my level designs. The main feature of all enemies/hazards is that they cannot be “defeated” because there is no combat in the game. They are a part of the environment, and will not actively attack but will stand as a hindrance to players. As the collectable items are based on flowers, I’ve also based my enemies on plants, creating a good/evil balance throughout the natural world! Each enemy is also based on a unique movement type, to keep them varied and keep the player actively working out how to evade them.


The first enemy type is one that I’ve been using as a health system test, and is based on the Sakura blossom object. The idea is that it lurks in shadows and looks similar enough to the real Sakura object to lure players towards it, only to hurt them if they make contact. I’ve called this one the deceitful blossom, which is currently a working title name but may stick! Its movement type is nothing, it’s the easiest enemy to avoid as it simply sits in once place.

This enemy type has a few influences from existing games, not so much in terms of visual qualities but in attack style! I’ve looked at items and enemies that disguise themselves and attack at the last second. I thought of Vileplume from Pokemon which disguises itself as a flower, and the mimic from Braid which hides under the soil with a flower under its back. In a way it reminded me of the Mario “know you mushrooms” design seen on bags & T-shirts etc. Many Mario mushrooms look similar, but have very different effects, good and bad if acquired…

The second enemy happens to be a mushroom, but nothing like a Mario mushroom unfortunately. Unlike the other enemy types, a name didn’t pop into my head straight away with this one, so it is currently called Hello Mushroom…for a number of irrelevant reasons… This enemy doesn’t move itself, but it sprays a vertical line of deadly fumes into the air at random times through one of its many sphincters, which will deduct health points if touched. Most of my house mates have a serious aversion to mushrooms and try hard to stop themselves from vomiting when I cook them, so I’ve made this one super gross to fit their opinion of them. I think mushrooms are really yummy personally.

To get the motion of spore-release, I’ve been playing around with the particle functions in Game Maker today. I found a great guideline to all the available functions in a downloadable PDF here, which literally misses nothing! But so far I really have only been messing, so I’ll write up about my proper particle experiments later!
This guy’s kind of inspired by the many monster mushrooms in video games, like Funguar from Final Fantasy VIII, the Fume Shroom from Plants vs Zombies, and of course the deadly mist emitting Black Fungus from Kingdom Hearts.

The final enemy is one that moves horizontally by swinging from ledges and cave roofs etc. I’ve called this the Hanging Adversary, mainly because it was the first enemy I came up with and I wanted to differentiate it from any other potential creations! The hazard here is really sharp leaf-type structures- I said I didn’t want to feature any cliched spike-pits, so this is my original equivalent. I’ve fashioned it after a venus fly-trap to some extent, simply because the venus fly-trap has those naturally evil-looking teeth which make for a great game enemy. I’m sure they’ve inspired many monster creators to make plants that bite.


I had to be careful that this guy didn’t end up looking too much like anything else from the gaming world, although influences can natural be seen to the Mario Piranha Plant, and similarly the Venus Flytrap from Braid which was probably based on the Mario enemy! My favourite of the carnivorous plant monsters from games has to be the Deku Baba from the Legend of Zelda series, which looks so spiky and evil even with the lowest of poly-counts!


I’ll hopefully get all of this into the game tomorrow, and adapt the health system accordingly!

Draw, Animate, Code & Play etc…

Drawing
Over the past couple of days I’ve tried to prioritise sorting out my environmental tiles, but still haven’t really come to a conclusion. I tried to test out my new idea for rocky tiles with real parts of the level design, but so far can’t seem to make them work well as they do on paper! To stop myself from ending up in a rut, I’ve discarded ALL rocky texture tiles for now and replaced them with a plain purple colour, which can easily be swapped for a textured tile when I decide what it will look like!


I made a little progress with the rock pattern around cave entrances however. I considered using straight edges around rock outcrops so that straight edges around other level features wouldn’t stand out so much, but didn’t feel this worked as well as the more natural, uneven design which is closer to my previous trace design.


I tried this design here with my previous rock texture, but decided that the rocks looked better against a more plain background. Even if I bring a heavily textured tileset back for platforms, I may stick with a plainer tile for cave walls.

Whilst trying to ignore all the complications of seamless tiles etc, I’ve diverted my attention to creating more Japanese-looking objects for the level. I’ve started by taking objects I’ve already made and adapting them to suit various instances, which is great for level continuity.


Amongst these smaller features I’ve been working on some large objects inspired by specific Japanese things, like this shrine gate:


and this bridge:


Although, the reason for the bridge’s funny shape is because it follows the shapes of my platform mask tiles. I may round this off later to make it look nicer and have the character follow the tiles rather than the shape of the bridge.

And I finally got round it pixelising the small food stand that I designed about a week ago. You probably can’t tell even if you’re Japanese, but I attempted to write ramen “らめん” in hiragana on the sign!

Without the ground texture tiles, the game definitely doesn’t look as “nice” as it did before, but the more empty spaces of the level are starting to fill up. (I haven’t built the lights in this screenshot either, which is why it looks so dark!)

Animating
In time for a proper working level prototype, I wanted to get many more character animations in. Before now, I’ve simply had one continuous running animation! I’ve only created the basics so far: running, stopping, jumping and climbing ladders.

To make the character stop you could use a single frame of the character just stood still, but I like to keep the character moving to ensure the player that the game is still running! Before now, I’ve used a breathing motion by making the character move slightly up and down, but where Hana is made of so few pixels, any rearrangement of pixels results in something far from “subtle”. I think a breathing animation is out of the question, unless I find a clever way to do this. For now, I’ve created a couple of frames that make her look fidgety when stood still, and a blink frame that flashes up irregularly.




For the jumping animation I’m currently only using one frame, although I would later like to add another to differentiate the character jumping up and coming back down.

My climbing animation is currently universal, used for climbing up and down ladders. This particular animation works best for climbing down ladders, so I may later add another one which looks more like climbing up a ladder.

Coding
The main bulk of the coding I’ve done over the past couple of days has been in the character step function, which controls the way the character moves. With all the new sprite sequences, I’ve had to customise things like image-scrolling speeds for each individual animation and can no longer rely on one over-ruling command.

I’ve split character movement into two separate “modes”-one fore running, jumping etc. and one for climbing. If the player is not on a ladder or in mid-air, the player is on_ground (this is a ready-made variable that comes with the Grandma Engine.) If the player is on_ground, the rules of horizontal movement apply, including sprite sequences and player input. If the player crosses a ladder but does not climb, ie. does not press up or down, then the rules of on_ground still apply.

if on_ground && place_meeting(x,y,obj_ladder) && !keyboard_check( key_up ) && !keyboard_check( key_down ) {
can_c = false; }

But, if the player crosses a ladder and does press up or down, can_c (short for can climb) becomes true, and the rules of ladder climbing apply. This code is pretty similar to the code I wrote before for vertical movement, but I’ve added sprite sequences and image-scrolling speeds. As you can see, I’ve applied the climbing animation twice, once for each vertical direction, so if I wanted to I could use two animations that would represent each direction.

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

vspd = 0;
can_c = true; {

if (keyboard_check( key_up ))
vspd = -S_MAX_V /4;
sprite_index=spr_hana_climb;
image_speed=.1;

if (keyboard_check( key_down ))
vspd = S_MAX_V /4;
sprite_index=spr_hana_climb;
image_speed=.1;
}

I haven’t written much other than this, but I’ve added a few lines of code for more warp objects throughout the level. This has helped me create some clarity where caves are involved, as I have created two new rooms for caves that are joined to the main level by these warp points. Now you can see a definite distinction between the outside and inside of the cave parts!

Outside:

Inside:

Playing

Adding a lot of visual features doesn’t occur easily whilst play-testing, due to the fact that in Game Maker the platforms are made of these red-block objects that cover the background imagery. They need to do this so that I can see where I’ve put platforms! But at the same time, I can’t see if I’ve made a mistake with the imagery below. So when I’m editing tiles and want to see how they look in-game, I have to add these red blocks temporarily and delete them again afterwards. One major criticism of Game Maker is that it doesn’t allow bulk actions to be applied to all instances, so each block must be added and deleted individually, which is a looooong and tedious process. My main focus is still on visuals, but I’ll build the complete level for a play-test from volunteers next week.

This concludes my lengthy summary or the past two days!

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.

Ladders

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.