This PDF 1.4 document has been generated by , and has been sent on pdf-archive.com on 28/01/2015 at 17:23, from IP address 37.228.x.x.
The current document download page has been viewed 509 times.
File size: 4.28 MB (8 pages).
Privacy: public file
Interactive Game Project
The game I choose to make is called Slaze (Slenders Maze) and was modeled on the story of
, a tall, thin, faceless man who follows you at a distance but is never seen
moving. He is also known to cause cameras to pick up large amounts of noise before
breaking. When taken by Slender people later wake up in a different place not knowing how
they got there.
For my game you are placed in a corner of a maze and you have to find your way out of a
locked door without being caught and finding the opening lever.
Controls & Movement
WASD - Directional moving keys
Arrow keys - look around
Left Shift - Crouch
J - Jump
L/Enter - Toggle FlashLight
Spacebar - Action, Close Menus, Pull Levers
0,1,2,3,4 - toggles the location of the map
f12 - Quit Game
Quaternion navigation was used with WASD and the Arrow Keys.
The equation of motion was used with gravity to model jumping with a small
added before takeoff and after landing to simulate legs.
A bobbing up and down was added as a function of the elapsed time make it lag
independant. This add the effect of walking on an uneven surface.
You have a flashlight with a limited battery that slowly gets weaker, decrease in radius and
intensity, if it’s on until it runs out. The batteries are reset to full after each level, or on
returning to the starting point in the top left.
To achieve this I programmed my Vertex Shader to get in a uniform float of the
batteryLevel, a number from 0.0 -> 1.0.
As shaders can quickly get messy and confusing if doing many things I tried to keep
everything in Vertex Shaders to
and everything in Fragment Shaders to
I then passed batteryLevel out into my fragment shader as battery_level. This was then
used in calculating the arc size of the spotlight as well as the spot_factor (brightness). In a
similar manner the position of the light was set using the camera position what was
calculated in the main.
Fog was added as well with it getting more intense as you progress through the levels.
Using a smaller Min and Max radius size.
Just before getting caught by Slender there’d be distortion in the camera. I wanted to make
random white noise appear using my shader.
I found a simple pseudo random number generator online using the below formula. It can
be clearly seen that the graph produced is very random looking.
In my fragment shader I then passed it the current position of the vertex_position.xy from
the vertex shader. This produced a nice random noise effect but if you didn’t move then the
noise didn’t flicker as rand() would always produce the same value for the given vertex
position. To combat this I passed in another parameter, noisePercent, a number from 0->1
showing how intense the noise should be. This then generated a nice white noise effect.
To know when you are
he current camera position is compared with Slenders
position. If the X or Z values match within a threshold then every space in a straight
line between both points is checked for walls.
Phong lighting was the form of lighting I implemented with the additions mentioned above.
Everytime the game is played a random maze is produced for a given size depending on the
level. For this I wrote a C++ class called Maze that took in the required size of the maze and
its Complexity and Density. Complexity being essentially how long each wall is as a maze
with smaller column type was is not very complex whereas one with long walls and only one
or two paths through is much more complex. 4 randomly generated mazes are shown
Editing these 2 values results in very interesting and different gameplay.
These 2 values get increased as the levels progress resulting in more difficult game.
Ensuring the maze was solvable and every point was reachable was obviously important. To
ensure this I placed a random cell wall then expanded in a random direction checking that 2
ahead was free. This ensured that there was always corridors and no closed loops.
For the maze a terrain I made 2 mashes. One for the ground which I textured with tiles and
tufts of grass and walls which. For the walls I created a column mesh which had 2 different
textures, one plain and one with either blood, rust or graffiti on it. A random secondary text
was added to a few walls.
For collisions I compared the current camera position with the positions of the columns and
with the current position of Slender.
To ensure Slender never appeared in a wall it was first checked that it’s an empty spot.
was used to start the game and show instructions.
Lever Animation can be seen at approx. 4:38 in t
Before placing the lever in a random location it was 1st checked that there was a wall there
and that it was oriented the correctly with the lever pointing out.
Hierarchical animation was used in the tentacles on Slenders back this can be seen in
. To make it so Slender is always looking at you I computed the angle between the
camera and slender using tan
) ). After negating this and adding 180 if the
bottom line, (Z
) < 0. Slender now looks at you wherever you are. These tentacles
oscillated up, down and around keeping slender as their origin. This was done by first
translating them to the origin, rotation them then translating them back.
Texture & Models
I created the textures for all my models. Most models had a diffuse, ambient, specular and
emission texture which were used in the fragment shader. For Slender, there was an
emission text that caused his eyes to glow, the same for the lever, open door and his
I edited an online model to produce a long thin Slender with a featureless face.
I created the columns, door, bumpy ground and tentacles meshes using blender.
A map was added in the corner of the display, this could be changed to any corner as well as
the center using the 0,1,2,3,4 keys. This map was created by using 2 colored triangles based
on what they were representing, they were then translated to their position and drawn
using a different basic shader that took in a uniform of a color.
GUI and Cutscenes
The cutscenes displayed at the start or when killed, won the game, got to the next level or
tried to open a locked door were created using Gimp then drawn on 2 triangles using
another shader similar to the one before but sampling the texture at the given texture
A sky box of a nights sky was made using Gimp.
My game can very easily work with N amount of levels. I found 4 to be a good number with a
full game play lasting 10-20mins. Each level becomes more difficult than the one before.
1. Little fog. Small maze. You, Slender, End, Lever, Walls on map
2. More fog. Bigger maze. You, End, Walls on map
3. More fog. Bigger maze. End, Walls on map
4. MORE FOG. HUGE maze. NO MAP!
For each size of the map the terrain mesh and it’s texture resized and scaled to perfectly fit
edge to edge with the new width and height of the maze.
Sound was a big part of my game. There is a consistent scary noise playing in the
background. Whenever Slender moves there’s 2 loud footsteps thumps. When seen a loud
screech noise is played. 2 sounds were assigned to the operation of the lever happening
one after the other making a grinding gear noise followed by an opening noise. A clicking
noise is played when the flashlight is switched on or off.
Various performance were kept in mind making the this game. They include loading GUIs
and Sounds first so there’s something displayed to the user while they wait.
A radius around the camera was used to decide if an object should be drawn. In
very small radius is used to demonstrate it.
Following + Animation