CAGD 373 - Blog Post 1
- Els Fouche
- Nov 5, 2025
- 3 min read
Group 1 - Goblin Camp
This project is a recreation of Baldur's Gate 3's Goblin Camp; specifically, the entrance to the camp where the player first encounters Volo. Due to time constraints character modeling is not viable for this project.
Credits:
Julian Kroeger-Miller: Lead & Flex
Destiny Rose Smith: 3D Artist
Devin G. Monaghan: Texture Artist
Els S. Fouché: Programming & Design
Initialization
Sprint 1 was extremely short, lasting only two days total. As such, work from that sprint will be incorporated into this blog post. The initialization of the project involved the standard setup: I created a Github repository, set rules to prevent force-pushes to the dev branch, created the base project, set up the required plugins, and imported some of my personal libraries based on our initial planning discussions. I then documented this information for the team and shared it.

Interaction Systems
During the design stage we spoke about how we could successfully create a micro game loop. We settled on allowing the player to collect dice and gold from treasure chests, using gold as a high score tracker and dice as a resource to unlock other chests. One of my goals for the project is to evoke the original game wherever possible. It would have been simple to add containers to the game with no UI elements that automatically deposited their contents into the player's inventory but that's simply not as fun as unlocking a treasure chest and then getting to peruse the contents.

I emphasized functionality during this sprint. The system is set up in such a way that it is trivial to adjust the appearance of the items in the chest once we add UI icons to the game.
In the above video you can see a simplistic interaction hint appearing and facing the player as well as the container menu. Of note is that the container menu is fairly heavy-weight and as such is only created once then hidden or displayed as needed. The container menu can also be adjusted to be a world-space menu relatively easily to create a feeling of integration between the game world and the UI. This will likely be implemented later on depending on designer feedback.
Dice Rolling
In order for the player to open containers to find loot they will be required to roll dice to meet or exceed certain values known as difficulty checks (or DCs). In order to facilitate non-deterministic (aka physics-based) dice rolling I also worked on a system to automatically determine the face normals of an object. The reason for this is to aid in answering the question, "what number did the dice roll?" With a non-deterministic system it is difficult to check a mesh to determine which value is where.
As a workaround, I decided to add invisible objects to the faces that are held in an array such that their index is also the value of the face. These invisible objects are represented as arrows that reflect the face normal of the die in question. By checking which of these arrows is pointed a certain direction (e.g. which is closed to 'up') we can then reference their address in the array to determine the face value of the die.
The 'chaos star' shown in the above video demonstrates the automatic face-normal determination and placement of arrows as mentioned. It then becomes trivial to assign each arrow to the appropriate index of an array based on the values of the faces of the dice. One final note on the face-normal calculation: I ran into a surprising stumbling block here. So far as I'm aware, Unreal does not offer a way to directly check each face of an object.

Rather, the best method I've found is to retrieve a section from the static mesh (I've found that for most meshes the section index is 0 which seems to refer to the entirety of the mesh) then get all of the normals from that section. The normals that are returned from this node are vertex split normals. You can use then use the 'add unique' node in Unreal to safely discard duplicated normal information to retrieve each of the face's normal vector.

Comments