CAGD 373 - Blog Post 2
- Els Fouche
- Nov 12, 2025
- 2 min read
Group 1 - Goblin Camp
This project is a re-creation of Baldur's Gate 3's Goblin Camp, specifically the entrance to the former Selunite temple. Our micro game loop involves breaking or unlocking containers in order to collect enough dice to access the inner sanctum of the camp. Notably and unlike Baldur's Gate 3 the player begins with a 10-sided die, otherwise known as a d10, and may collect more to unlock containers with higher 'difficulty class' (DC) values as well as the final door. Available dice to collect include a d4, d6, d8, d10, d12, and d20.
Credits:
Julian Kroeger-Miller: Lead & Flex
Destiny Rose Smith: 3D Artist
Devin G. Monaghan: Texture Artist
Els S. Fouché: Programming & Design
Dice Rolling
This sprint saw the implementation of dice rolling based on the player's dice pool. The dice pool is an array of enums that is passed to the dice rolling actor. The dice rolling actor then generates the correct dice and displays the dice roll by using a 2D scene capture component to render to a texture which is then used on a material referenced by a widget. This allows for a 'picture-in-picture' view of the dice roll in real time.
It is extremely performance heavy due to rendering multiple areas of a level simultaneously. This can be mitigated by locking the character's movement and by keeping the area of the level where the dice roll occurs simplistic. Additionally, the camera renders out at a relatively small resolution (768x1024), vastly improving performance.
Locked Containers
As shown in the above video the system supports any number of dice. The next step was to integrate the container system to allow for the player to accomplish something with their dice rolling.
This video demonstrates the dice rolling system, the container's DC, the roll result, and the container being unlocked when the player's roll meets or exceeds the DC. This involved an interplay between several systems including some minor refactoring to allow for such.
The container object is notified when the player begins an interaction with it. The container then checks if it's locked and notifies the character they need to attempt to unlock it. This initiates the dice rolling system. The dice rolling system waits for the player to initiate the roll with a context button (currently mapped to 'space' but a UI button will be added soon).

Once a roll is initiated a timer is started (shown above) that periodically queries the rolled dice to determine which face is up. As discussed in the last blog post, the automatic face normal determination was used to establish a set of invisible arrows aligned to each face of each die. These arrows are checked to find which is closest to pointing up (or down, as is the case for the d4) and the result is returned.
You'll note that currently dice do not have numbers on their faces. Once the dice are textured to include numerals the dice objects themselves will need to have their arrows manually renamed to reflect which number they're associated with. This is a weakness of the system and one I haven't determined how to overcome.

Comments