Michael VanderBurgh's profile

Escape the Wizard's Crypt

Escape From the Wizard's Crypt
Version 2.0
GitHub: https://github.com/mpvan/WizardCaveV2
Since finishing school earlier this year, I decided to take a little time to update this project because it was one that I did not particularly like. I remade the entire thing in Unreal Engine 5.1 still trying to use as much C++ as possible in order to practice those skills. So not only was I able to make the game look better, by using different assets and having more time available to spend on the level design - but I also wanted to improve the gameplay. For example, healing potions are spawned after defeating enemies or breaking barrels instead of just being placed throughout the map. The item carry system is also improved by utilizing UE's existing Physics Handle instead of trying to make a clunkier version myself with a socket on the skeleton. This version also includes two different enemy types with AI controlled with Behavior Trees and code, instead of just code alone - one that chases, and one that is more of a guard - adding to the gameplay variety. I would like to also add a unique boss, but combat design is still something I'm working on learning since it isn't my main focus.
Version 1.0
Gameplay Demo
About the Project:
Wizard's Cave is a first-person shooter game developed mostly with C++ classes in Unreal Engine. In the game, the player is a space explorer who has been captured by a clan of malicious alien wizards. They have been making repairs to their weapon in secret and are ready to make their escape - however, it still suffers from problems with overheating. Magic cauldrons act as portals that show the player what is waiting for them in other rooms of the dungeon, which they need to navigate through in order to find the key that unlocks the exit. This game also features the ability to pick up, carry, and drop/throw objects. (Rotating and examining your currently held object is still being developed.) The level runs on an endless loop, whether the player is captured or they escape they are returned to the beginning of the game for another attempt - challenging players to maximize their escapes while minimizing captures. Other features of the game include health and ammo recovery pick-ups and fire damage hazards.
Tools Used:
Unreal Engine 4.27, Microsoft Visual Studio 2019/2022
Unreal Marketplace Assets: Low Poly Medieval Interior and Constructions, Basic Pickups VFX Set
Video Music: "Alien Dream" by Romariograde (freesound.org)
Highlighted Skills:
- Understanding of common Unreal Engine functions/tools (e.g. materials and textures, UI widgets, lighting types, particle systems, combining C++ classes and Blueprints)
- Gameplay design and scripting with C++ (e.g. using UE components and properties to create assets, enemy AI and sight perception, object pickup/carry/drop system, overlap triggers for different behaviors - pick-up items, cauldrons (camera changes), fire damage, torches)
- Level design with basic geometry and imported assets
Game Screenshots:
Main Menu  --  Instructions  --  Cave Room Example
Carrying an Object  --  Overheated Gun and Pickup
Source Code Examples:
Pick up and Dropping Objects
Enemy AI and Perception
Reflection:
This project was initially made as a means to learn the basics of C++ development in Unreal Engine. The creation of this project was a bit of a struggle because instruction mostly came from piecing together different random YouTube videos (many of which had out of date information) with little instructor input/assistance. Out of all of my game development courses this one probably had the most active discussion forum amongst the students as we all tried to puzzle through many of the same compiler errors together. At the end of that particular term, many of us reflected that we wouldn't have made it through the course without that collaborative effort.

One of the main skills practiced in this project is building classes for objects and features of the game by making use of UE's included components and properties - things like static mesh components, box triggers, scene components, and particle effects. The enemy AI, while simple, is also coded in C++ - where the enemies perceive the player through sight and return to a home point if the player is able to get out of range. A unique feature of the game that I started working on for the initial assignment was picking up, carrying, and dropping objects in the world - similar to games like Skyrim. It worked by using a line trace to search for a pickup item class and attaches the item to a socket when the player uses a specific input. If the player is holding something, using that input released the item. In the original assignment, the implementation of this wasn't the smoothest, but it was a start to build from. For example, the placement of the socket/held item was fairly obstructive to the player's view. My item classes at the time also weren't simulating physics or using gravity, so dropped items just hung in the air where they were released. I also didn't (and honestly still don't) have a strong gameplay reason for including this feature - I came up with the idea to attempt it because of a line trace assignment, and I just thought of all the fun I had in Skyrim playing around with the world and the objects in it. I have toyed with the idea of the player needing to throw a potion into the cauldron in order to activate the spell that allows for spying on another room.

Because of the struggles during the initial development, I was not eager to return to and update this project. The level initially was basically a straight line from start to goal, with a single enemy and it could be completed in under a minute. In other words...not very fun. So even if I wasn't feeling much more confident or improved in my C++ skills from when I first made this, I knew that the level had to be expanded - just to make it more challenging and fun, even if it's just a demo/prototype. Since I was adding more rooms and enemies to fight, I had to give the player a way to restore their gun's ability to fire after fully overheating/running out of ammo, otherwise the larger level would be unplayable. It was just a logical addition to make. It was also important for me to put more work into the item pick up/carry mechanics. I corrected the two issues mentioned earlier by adjusting how the item attaches to the player and by allowing physics and gravity to affect the item when it has been released (or thrown, as there is some force added as well). I wanted to also allow the player to inspect/rotate the object - but constantly ran into a game crashing error that I haven't been able to resolve yet.

Like many of my other projects, I did not receive much feedback on this one during the courses I worked on it beyond that it met the requirements of the assignment, but nothing in the way of how I can still make it better. In terms of self-feedback, I can feel comfortable saying I know I need to work more on my C++ knowledge which is incredibly important in game development. This is why I've already purchased an additional course on UE development and C++ that I'll be starting following my final school term. I'm hopeful that this class will help to give me a more solid understanding of C++ in UE and bring together the bits and pieces of knowledge I have now in a stronger form because it is presented in a much more cohesive way and the content is updated to be current with Unreal Engine 5. Just because I won't be graded anymore doesn't mean I still don't want to improve.
Escape the Wizard's Crypt
Published:

Owner

Escape the Wizard's Crypt

Published: