top of page
EDGAR ALEXANDER KNAUER
Programmer & Designer

About Uniwizardry
Platform: Windows Desktop
Project Duration: 2 Months
Project Type: University/ Solo
Engine: GameMaker
Team Size: 1
My Tasks
GameMaker was my introduction to game engines and writing code. During this project, I learned about finite state machines, animations, coding conventions, programming patterns, and many more things. For this solo project, my tasks consisted of designing the game, taking care of writing its logic and creating visuals.
The Game
I concepted Uniwizardry around requirements given to us by lecturers for this project. The experience was supposed to help future students of Hanze UAS, with difficulties of integrating and finding connections in a new and possibly unknown environment. Additionally, the game was to implement intercultural competencies into its design. In hindsight, the final product was a good attempt at fulfilling those requirements at most, being childish in its narrative and scraping only the surface of why difficulties and conflict may arise. The mechanics barely supported the message if the message was clear at all. However, I look back at it with pleasure! It was the first proper "game" I created with a start, middle, and finish and the production as well as retrospective taught me a lot.
Feature Example
This code snippet shows the Strolling behaviour for an enemy called "Runner". During development, I was very interested in getting more natural movement behaviour from the enemies and came across Perlin Noise. I got the Perlin Noise function for GameMaker from a public GitHub repository and used it to create my own movement behaviour.
function scr_RunnerStrolling()
{
//Caclulate Perlin Noise values
strollingX = scr_PerlinNoise(xRandom, 100.213, 480.2311);
xRandom += inc;
strollingY = scr_PerlinNoise(243.8585, yRandom, 321.261);
yRandom += inc;
//Move direction
if (place_free(x + strollingX, y))
{
x += strollingX;
}
if (place_free(x, y + strollingY))
{
y += strollingY;
}
//State change logic
counter += 1;
if (counter >= room_speed * 3)
{
runnerState = RunnerStates.idle;
}
if (collision_circle(x, y, 256, obj_Player, false, false))
{
runnerState = RunnerStates.hunting;
}
}

bottom of page