Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

A Winter's Night

A topic by mpaul0416 created Jan 25, 2020 Views: 274 Replies: 7
Viewing posts 1 to 8
(4 edits) (+1)

A Winter's Night

A Tale of Duty and Love

Hi everyone! I'll be making a game about a father who is looking for his son who is in trouble.

Play the latest version of the game on Unity Connect here! https://connect.unity.com/p/a-winter-s-night

The Game Idea

The game is a hide-and-seek where a father has to find his son in the frozen woods while avoiding soldiers. He will be racing against the temperature with only a lantern and his ears to guide him.

The mechanics at play are a lantern, the sounds the father hears, his son to find, and soldiers to avoid.

The main emotions in the game will be balancing between the fear of the soldiers and the desire to find the son. A player can change strategy depending on how risky they want to play. A reckless player might run everywhere to see if he could find the Son quickly, while a cautious player would move slowly through the map in the hopes of not getting caught.

It's going to be a low-poly 3D aerial view mouse/swipe game.

The Lantern

The lantern will be the main mechanic. If it is held high, the player can see farther but makes it easier for the soldiers to see the player. If the player hunkers down, the lantern will be very difficult for the soldiers to see but will also leave the player blind as well.

The Sounds the Father Hears

Sound will act as a warning for the player. Sounds will produce a UI "sound ring" in the direction of the sound in relation to the player. Closer sounds become more defined. Until a sound is identified by the lantern, the player won't know if it's the Son, the Soldiers, or other noise makers.

The father can shout to get an indication of where the Son is, but it will also track the attention of the Soldiers.

The Son

The son will be the end goal of the game. He will wander around a little, but tends to favor one area. He can't be found by the soldiers, but will freeze to death if the temperature drops too low. If the father shouts for him, the Son will answer with a sound ring that's blue.

I added a web build so people can play it! https://connect.unity.com/p/a-winter-s-night

Update 1 - 3 Hours In

Basic Movement, Temperature, and Finding Mechanics

I have a basic game. I am working on getting my core loop finished so I can start testing. I've added the ability to swipe and move, a thermometer, a basic lantern, and a Son to find.

[ I can't figure out why I can't upload mp4 files, so this is a placeholder]

Brainstorming

I started out sketching my idea out on paper. I find that doing it there helps me brainstorm quickly without getting bogged down with software.

Initial Brainstorm

A paper session really allows me to focus on the game

I came up with some of the mechanics. I want the game to really focus around the balance between needing to move and wanting to stay still, so I wrapped a lot of the mechanics back into that. For example, I originally thought about having the player have a button to change the height of the lantern, but then decided it would fit that balance better by tying the lantern height to the player movement.

Mechanics - The Lantern

The lantern will have 3 heights -- low, medium, and high. The higher the lantern goes, the further the player can see, but also the further the player can be seen. The only way to raise the lantern is by moving, which should force the player to think about moving vs. standing still. As soon as the player stops, the lantern goes to medium height. If the player doesn't move for a bit, then the player hunkers down and moves the lantern to low. This makes the player almost invisible to the Soldiers, but he can't see very far.

The lantern will have 3 light ranges as well -- Bright, Dim, and Darkness. Bright light is where he can see well, identify things and colors, etc. A Soldier who sees the Bright light will find the player. Dim light he can still see a little bit, but it's muted and muddied. A soldier ignores dim light. Darkness is pretty absolute. It will have some variation to help with providing context to player movement, but nothing useful can be gained from the darkness.

Feel of the Game

I also brainstormed on the title screen and several of the cut scenes that I wanted in the game -- Opening, Freeze, Shot, etc. These will be coming later, but I wanted to work on the emotional feel and knowing how I wanted to present things would help me decide direction later.

Colors

I read somewhere that offering a strong color palette can help to really tie a game together, so I went with a minimal palette in order to help guide the player without telling them what to do.

As an aside, I recommend the site (coolors.co) I pulled this from. It was quite nice to generate a palette. 

My wife has offered to watercolor some textures for me, which is awesome! Hopefully I can do her work justice. I will probably model my own stuff, but we will see on how far I get on the mechanics. No mechanics, no game. Graphics are a plus.

Next Steps - Web Build and Finish Gameplay Loop

The next steps I have are to build a basic level, improve player/camera movement, and implement some rudimentary AI for both the Son and the Soldiers. I need the level and the AI to start iterating on Light Mechanics. The movement improvements are because the movement doesn't feel good enough to me. With it being a core gameplay loop, it needs to be flawless in interaction.

I also want to get a web build up and running for people to try. That way, I can get feedback on the game as it progresses. I know I am already biased to like the game and need outside feedback to help make it better!

Update 2 - 5 Hours In

Better Player Controls, Terrain, and Random Son

I wanted to work on the player interactions because I felt like I couldn't really improve my hide-and-seek without being able to look in more than one direction. I really struggled with Quaternions to get the rotations correct.

First Playtest

My 5 year old son wanted to know what I was doing, so I let him play the game. I didn't think it would be useful, but it turned into my first playtest!

Right off the bat, he became frustrated with the controls. He didn't understand why he couldn't turn or that the swiping was relative to the start of the swipe rather than the relative position of the mouse to the character. After I showed it to him, he quickly figured out the controls, but I wonder if I could design them in such a way as to be completely intuitive.

After he played a few times and I told him to go find the blue pill, he gave me my second piece of valuable feedback. "This is boring. Why doesn't he go anywhere else?" I explained that I hadn't put that in yet and that I would have to work on it some more. The hide-and-seek (HaS) aspect was immediately understood by him, enough that he focused on the hider not moving. To allow for replayability, it will be critical for me to get good hide-and-seek mechanics down.

Better Player Controls

I wanted to work on the HaS mechanics but didn't really feel I could tweak them with the character movement gimped as it was. Before, I could only look in the starting direction and the player felt slow. 

I wanted the player to be able to change direction by changing the direction of the swipe without causing the player to continuously turn in a circle. I also wanted the swipe direction to change the players direction based on the forward direction of the player

I really struggled with applying my rudimentary knowledge of quaternions to get what I wanted. In the end, I settled on code like this:

If player is swiping...
    if player wasn't swiping before, store the player's rotation Quaternion
    Get direction of swipe
    Calculate the move vector from the direction, speed, time, and adjust by -90 degrees using Quaternion.AngleAxis(-90, Vector3.up)
    Get a look rotation using Quaternion.LookRotation(direction)
    Move the player using transform.Translate(lastRotateQuaternion * moveVector, Space.World)
    Set the player's rotation using Quaternion.RotateTowards(rotation, lastRotateQuaternion * lookRotation, anglePerFrame)

It took me some time, but I think the player controls are much better now.

Terrain

I added rudimentary terrain to the game in order to start playing with it. I think I want to use it for my base, but I wasn't sure because I've never used it before. It did increase my lighting bake time by around 5 minutes, but since unity does that in the background, I'm not too worried about it.

I also made sure to rebake the navigation so we could use it and not clip through.

Random Son

Because the foundation of the game is the HaS mechanic, I added some basic randomness by creating 4 possible spawn points and randomly selecting one for the Son to spawn at. Hopefully, it will keep my 5 y.o son occupied for more than 2 minutes.

Next Steps - AI 

The next thing I want is some basic wander AI for the soldier. Then I can start working on light mechanics.

Host

oh wow this is an awesome devlog! i love how thorough you are with the mechanics and breakdown of how they work. the premise overall is really intense too, i can't wait to see this in motion!

(2 edits)

Update 3 - 7 Hours In

Rudimentary Soldier AI, Lantern Mechanics

I've not had a lot of time between work and my masters, but I worked on the soldier AI and added some basic lantern mechanics.

Soldier AI

I wanted to get some wandering in, so I created an AI object that wanders around a certain point. This will be important, because I want the soldiers to stay in the general area where I put them, but don't want to force their movement.

The pseudocode for the AI looks like this.

if we don't have a destination around our target...
    Update our idling time
    If our idling time has run out...
        Get our target position
        Calculate a random position (X and Z, no flying soldiers here)
        Set the navmesh agent's new destination
if we are close to our destination (based on sqrMagnitude)...
    Clear our destination
    Pick a random time to idle


I also started playing with textures that my wife watercolored. Textures are hard to get right. I'm going to have to learn a lot more before they start to look presentable.

Lantern Mechanics


I also added some basic lantern mechanics. Based on how high the lantern is held, the light level and collider distances change. I will definitely have to tweak the distances, but this will enable me to add some soldier specific logic.

Next Steps - Soldier AI to recognize Lantern

I next want to tackle the soldier recognizing when he's in the dim light, bright light. I know I want to do some kind of cone vision to add a more maneuvering element to the game, but I'm not sure how I will implement that.
(+1)

Update 4 - 8 Hours In

Soldier interacting with Lantern

This is a small update due to the time constraints. The soldier now interacts with the Lantern light radius in a classic manner.

The Soldier and the Lantern

 

After some work, the soldier now recognizes when he is in range of the lantern. Right now, I've used an exclamation point to indicate whether he is in dim, bright, or no light. I first tried to set this up by having multiple collider objects on the lantern, but when I went to code the OnTriggerStay method used, I realized that I can't have two colliders on the same object that used different script methods. I then resolved to do this manually by keeping track of the distance from the lantern to the soldier (as a squared number, it's supposed to be faster) and then firing the event based on the light conditions. The interaction between the difference classes looks something like this diagram.

Open Problems

I see a couple of issues right now with the game. The controls still feel stiff, and I think I need to do some research about best practices for swiping/mouse combos. The second, and more pressing issue right now, is that the light doesn't give a good indication of where the boundaries are between the light levels. This info is critical for the player to make decisions and so it needs to be much easier for a player to understand.

A bigger issue in general, however, is that I have a distinct lack of time over the rest of the jam. I'm going to have to scope down and prioritize a finished game over a perfect game. So many projects die in perfection, and the goal of this jam was to finish a game. Some ideas to cut for scope:

  • Sound Cues (This one will weaken it a bit)
  • Any sound
  • Cutscenes
  • Animals and other neutral objects
  • Snow Drifts
  • Procedural Level

Next Steps - Title Card, Better Level Design

As my goal is a finished game, I will next work on a title card with placeholder UI. I also want to work some on the level design. I threw something together for testing, so iterating on that to get a more gamey feel would be good.

I also want to add some rudimentary sounds, but that may get tossed out of the back.

Host

omg i love those exclamation points. the flowchart you set up for the states is also really easy to read! nice stuff. i like that you're taking the time to assess how far the game has come and where you think you'll be by the end of the jam--this is so important for finishing the game. im wishing you the best of luck!