top of page
  • Group 2
  • Group 3

Moose Lost in the Woods (2023)

Project info

Role: 

Game Designer / Game Programmer

Engine:

Unity

Teamsize:

8

Genre:

Adventure

Duration:

12 Weeks

Platform:

PC / Mac

BEST_NARRATIVE_WIN_blackBG.png
GAME_OF_THE_YEAR_NOM_blackBG.png
BEST_DESIGN_NOM_blackBG.png
BEST_ART_NOM_blackBG.png

About

Moose Lost in the Woods is a cozy 3D platformer without a language barrier. Explore by running, leaping, bouncing and splashing around in Swedish forest environments. 

Moose.jpg

Introduction

This project was an assignment at Södertörns University. I wanted to work with people that had the same goal as me which was to be nominated for Swedish Game Awards. Luckily I found the perfect match and we made our goal come true!

​

I contributed to several key systems, including the game design, dialogue system, interaction system, inventory system, cosmetic system, and save system. Additionally, I collaborated with the artist on level design.

Dialogue System

I started by building a simple dialogue system using scriptable objects for the speakers and conversations.

I first added button functionality to the system, then worked on integrating icon-based dialogue. I began with one dialogue bubble for both speakers to make sure the sprites were working properly.

​

Then, I added a second speech bubble and ran into a small issue with the sprite not showing correctly, but it turned out to be a minor rendering problem that was easy to fix.

​

Since the game is small, I didn’t use a state machine for the dialogues, but that’s something I’d improve if I worked on it further.

​

We also realized that it wasn’t clear enough for players, especially kids, if they had the correct items for a character’s request. To fix this, I created a thought bubble script that shows whether the player has the right items.

PNG_InGameInventoryHats.png

Inventory System

I used ScriptableObjects for items to keep the system flexible and easy to expand.

​

For the inventory and item system, I worked with Unity events, even though I didn’t have much experience with them. It took some trial and error, but once I figured out how to create and subscribe to custom events, everything started working as intended. This ended up being a valuable learning experience that will help in future projects.

​

To make pinecones attract to the player, I created a script with an adjustable magnetization speed. Planks and hats were designed to be picked up through interactions, so I integrated them into the interaction system.

Interact System

I built the interaction system using an interface to make it easy to add different types of interactions, like talking to NPCs or picking up hats.

​

First, I created an interface to define the necessary functions. Then, I made a player script that detects interactable objects and updates the HUD with the correct icon. The objects themselves handle their specific interactions through their own scripts, inheriting from the interface.

​

To manage interactions, I used Unity Events, which let the HUD and inventory update at the same time when needed.

PNG_InGameExclamationmark.png

Cosmetic System

​To demonstrate how the moose appears with different hats, I created a rendering of the player within the inventory.

Save and Load System

The save system was a challenge since I hadn’t built one before. After struggling with JSON for a few days, I teamed up with another programmer to make sure we met the deadline.

​

We used PlayerPrefs to save the number of pinecones, planks, and hats, along with the equipped hat. Saving pinecones was simple, but hats were trickier. We stored the inventory as a string of hat names and matched them to resources when loading.

​

This worked but wasn’t ideal, as hat names had to match exactly. While working on this, we realized the issue was how we handled scriptable objects. Later, I learned that using unique IDs for each hat would have been a more reliable approach, something I’d do next time.

Moose.jpg

What I learned

I learned the importance of discussing every detail, big or small, which helped improve both the implementation and gameplay.

I also realized how helpful it is to ask for help when needed. It speeds up the process and makes sure everything works as it should.

​

I got experience in blocking out levels and playtesting to spot necessary changes and clear up any confusion. This was my first time involving our target audience for game testing, and their feedback was crucial. It played a big part in our success at the Swedish Game Awards 2023, where we won two categories.

​

I also became more efficient with ScriptableObjects and learned how to avoid common mistakes. Plus, I gained some knowledge about saving data with JSON, even though we decided not to use it in the end.

Code Snippets

Inventory Manager

Player Interact

Cone Interactable

Save And Load

© 2025 by Isabelle Höljer Heiskanen

bottom of page