DDA Boss Fights
"The boss itself has an imaginative design." Dr Jeremy Gow
Imagine having a boss and multiple actions (especially attacks) already designed. Then an AI
system can automatically manage the boss's behaviour. If we apply the system to a behaviour
tree, the step of random selection will be replaced with choosing an action using the
Dynamic Difficulty Adjustment (DDA) system based on the player’s performance.
The system targets minimising the HP gap between the player and the boss to improve the
player experience.
During the selection step, the fitness of each action is calculated first.
Then I introduced two selection strategies from Evolutionary Algorithm, Roulette
and Rank, for the action choice.
The project is written in C# and developed in Unity.
It was pretty challenging to create the boss’ abilities and add audio with only free assets,
but I enjoyed it a lot during this process.
Finally, I surveyed to collect players’ opinions. Among 20 participants, I found that
those
bosses applied with a DDA system are generally more popular, while players with different skill
levels have diverse preferences for bosses.
2D Game Level Generator
This project was the prototype of DDA boss fights, and it is written in C# and developed
in Unity.
The generator uses Perlin noise to generate caves to form the fundamental level structure.
Then in the caves, it randomly generates level features including spikes, potions and
particles
(random player events, e.g., decreasing player movement speed and increasing player attack
damage).
It can generate diverse levels by adjusting the modifier of Perlin noise, the danger
degree, and
the potion and player events proportion. There is always a path to the boss stage, thanks to
channel control.
Frozen Lake Level Generator
As an environment for Reinforcement Learning, Frozen Lake’s levels are not designed for human
players. Most of its levels are not fun enough from a player’s perspective, but I believe it has
the potential to be enjoyable.
So, I used Evolutionary Algorithm to generate fun levels of Frozen Lake. The project was
written
in Python and developed in Google Colab.
The most challenging part was the definition of fitness. With the knowledge of game design
fundamentals, I integrated three features into the fitness function: the length of the
shortest
path, the number of holes and the danger degree of the shortest path.
The result was quite satisfying, and the generator can produce high-quality levels of
Frozen Lake stably.
Mini-Game
Written in C++, this mini-game involves multiple game design patterns. Through
this project, I have learnt how significant the design patterns are for extensibility and
readability, and the cost of each pattern.
I worked with a fellow student to complete the assignment, and we ultimately received a mark of
94%. Throughout the development, we collaborated well and discussed a lot on how
to make the common interfaces clean and extensible for each other’s tasks.
Tales of Syrinx
Written in C#, Tales of Syrinx is a platformer developed in Unity by a
group of three.
One member wished to retell the Syrinx myth from Greek mythology. She was transformed into hollow
water reeds to run away from the amorous god Pan. So, I designed the reed generation as her core
ability. The player can use the reed as a temporary platform and defensive tool in the
game.
Then I designed several puzzles around the reed in the level. Creating
multipurpose
abilities has become my favourite design process.
In terms of teamwork, we did well overall. However, I was eager to add more features and
was
overly detail-oriented. So, the project became somewhat disordered as I did too many, even some
of which were not my responsibility. Later I realised that the development should have started
out with a detailed plan, and the division of tasks should have been clear-cut.
Battle of the Plants
Battle of the Plants is a 2v2 board game. I spend much time designing the core mechanics
to make
the rules simple and intuitive. Besides, I playtested the game and adopted
others’ feedback to
improve the balance. I was excited to see how much my fellow students appreciated it.
Pommerman Agents
This project is written in Java, which includes three AI agents I designed for the
Pommerman game.
The first one chooses the action according to the current time, and the second one involves
rule-based and One step look ahead (OSLA) methods. The last one is a variant of the
Monte-Carlo Tree Search (MCTS), enhanced by progressive bias and biasing
rollouts.
All agents perform better than the agents in the same skill levels.
Technical Reviews
1. AI Companions in BioShock Infinite and The Last of Us
2. Video Game Design with Description Languages (grade: 90%)