One of the biggest issues with Icebreaker is its tutorial; it’s poorly paced, doesn’t explain anything properly, and barely even teaches half of the game mechanics.

Last time I finished the tutorial super late in development, so this time I’m doing it at the start, and making it an essential part of the final experience.

What needs to be there?

The tutorial needs, at a minimum:

  • Movement
  • Picking up the hammer
  • Throwing the hammer
  • Throwing to attack enemies
  • Rolling

Other mechanics, such as the varying enemy speeds, health drops, and more can be explained in later levels; those listed above are the core skills needed to play the game at its absolute simplest.

Designing the tutorial

To fit with the military theme, I want the tutorial to be set in a training room, with an army officer calling in to educate the player as a new recruit.

Lots of the art here is probably tentative; I’m sure I’ll change a lot of it as I go.

The intro to the tutorial
The tutorial opens with some short dialogue

Interactive tutorial
The player completes certain actions to progress in the tutorial

-- dialogue
td = {
 "\fdattention!!\n\ntHIS IS \f9cOLONEL\nmAX\fd CALLING.",
 "\fdi'M HERE TO GUIDE\nYOU THROUGH THE\n\f9BASICS OF COMBAT\fd.",
 "\fdlET'S GET TO IT!",
 "\fduSE \f9⬆️⬇️⬅️➡️\fd TO\nMOVE AROUND THE\nBATTLEFIELD.",
 "\fdtO THE RIGHT IS\nA SERVICE WEAPON,\n\f9THE hammer.\n\fdpICK IT UP!",
 "\fdtHROW WITH\n\f9⬆️⬇️⬅️➡️\fd AND \f9🅾️\fd,\nTHEN PICK IT UP\nAGAIN.",
 "\fdgREAT!\ntHROW THE HAMMER\nAT ENEMIES TO\n\f9DESTROY\fd THEM.",
 "\fdaMAZING! yOU SHOW\nGREAT PROMISE...",
 "\fdfINALLY, \f9⬆️⬇️⬅️➡️\fd\nAND \f9❎\fd WHILE\nEMPTY-HANDED TO\n\f9ROLL\fd.",
 "\fdwITH \f9GOOD TIMING\fd,\nYOU CAN ROLL\nTHROUGH ENEMIES\n\f9TAKING NO DAMAGE\fd.",
 "\fdyOU'RE READY FOR\nDEPLOYMENT.\n\f8GOD SPEED,\nRECRUIT\fd!"
}

The dialogue is stored in a table, and incremented through; when a certain trigger is activated (pressing 🅾️, or performing the action being taught), the next dialogue is printed.

This allows the player to proceed through the tutorial at their own pace, and gives them ample time to experiment with the skills they’re being taught. It also replaces the original hub; I wanted players to have practice with the movement through navigating the main menu as the main character, but this tutorial gives them more than enough time to practice if they want.

The dialogue also uses control codes to change colours; \f9, for example, sets the colour to orange (hex 9), then \fd sets the colour back to dark grey (hex d, or 13 in decimal).

I also chose not to use the camera implemented last time; I think the player should have a very clear view of their character while they’re learning.

Improving the game UI

With the base of the tutorial made, I chose to add the UI top bar to main gameplay. This will consist of a map segment for the background, a thermometer-inspired health bar, the current score and combo, and remaining enemies.

First, though, I need to make the score system. I want this to be more than just “one kill is one point”, but that runs into integer limits very quickly.

I’m going to reuse the score system I used last time; two integer variables store the first 4 digits and last 4 digits.

function increase_score(score)
    -- increment score by amount given, multiplied by current combo
    p_score1+=flr(score*(1+p_combo/10))
    p_combo+=1
    
    -- if the last 4 digits (1000s, 100s, 10s, 1s) reaches max, reset it and increment 10,000s
    if (p_score1>9999) p_score1-=9999 p_score2+=1
end

That supports scores of up to 99,999,999, which… should be enough, I hope 😅 If it isn’t, I could use a table system that appends new digits as needed, but this should work well enough.

Then, I simply used this function whenever an enemy is killed, and printed it using LokiStriker’s wonderfully blocky Picowide font with a nice drop shadow.

Top UI bar shows health and current score
The top bar already looks cleaner than the original's!

The new camera system also has the added benefit of allowing for a slightly larger map despite the UI bar taking up some screen real estate!


Next steps include displaying the other two bits of info: the current combo, and the remaining enemies. I also need to implement losing health when hit, and I want to add the screen shake and hit-stop effects I used in the original, as well as the particle system for enemy deaths.

Stay tuned!

wsasaki