• # Hollow Knight Design Critique

Game Design and Theory

# Introduction

This essay is a critique of the popular indie title Hollow Knight (with the free Lifeblood, Grimm Troupe and Hidden Dreams DLC). It was written mostly for my own benefit in exploring different games and learning about game design. However, I hope that a few other people will also enjoy this piece and share their thoughts on the game and discuss some potential improvements. I am not at all experienced in writing, critiques and game design so please excuse any mistakes, flawed judgements or sloppy writing. I also know what an amazing job Team Cherry did with such a small team, so I am not criticising them when I ask for extra content, only pointing out how this masterpiece could be improved with more time and a larger budget.

I have completed the game 107% (over 50 hours), watched others play it and am trying the speedrun achievement while I am writing this. I used a controller to play.
Hope you enjoy!

# Summary/Review

Hollow Knight is an amazing 2D Metroidvania game made by Team Cherry with a vast world to explore, various secrets to discover and thrilling enemies to fight. It is a challenging game that rewards you for your effort as you continuously improve. The great sound design, music and art all give the game and incredible atmosphere. I could only name a few flaws in a game that already far exceeds the expectations of a $15 game (with three free DLC’s). I am sure that you have heard a lot of praise about this game on the internet and I do not think I should elaborate further. You can read spoiler-free reviews on IGN (9.4/10), PC gamer (92%) and Steam (9/10). If you have any doubt about buying the game yourself, just do it. This game is the most perfect representation of a game genre I have seen next to Portal 2. It delivers in combat, platforming, exploration and lore and if you play through the entire game, you will have more than 50 hours of play time. Pretty good value for$15.

From here on, spoilers for everything, so I advise you to at least get the final ending before ruining the story moments!

# Difficulty

I want to address this at the beginning to clarify some things that I will say and to show my perspective of the game. I won’t list things I found too difficult or too easy, I will expand on that in the specific sections.  I am not a very good gamer. I will admit that I haven’t played too many Metroidvania games or just video games in general as a child. Partly due to my inexperience, I got stuck on the first Hornet boss. I was impatient and frustrated because I wanted to enjoy the game without grinding for hours on one boss.

Luckily, I didn’t give up on the game and instead found, after some research, a mod that allowed me to tweak the difficulty by making the player invincible when I wished. This, while not feeling too gratifying, allowed me to progress and fall in love with the game. I could occasionally skip a phase of a boss, heal uninterrupted or try a platforming section multiple times.

While the game has a challenging difficulty curve for new players, herein lies the true genius of Hollow Knight. It forced me to get better and better, and I ended up using the mod less and less until I fully stopped. I beat the final boss on my own. On my second playthrough, with no better equipment, Hornet was a breeze and I did each platforming section on my first try. Truly impressive from the game and myself.

# Exploration, World, Collecting

## Collectibles

Hollow Knight has a vast underground world with around 15 areas for you to explore. These are all meticulously designed, with branching paths, hidden areas and many secrets.

Many players enjoy getting lost in the caverns and wandering around until they stumble upon some hidden-away treasure. This can be really fun but also tense as you have no idea what will be in the next room. Every time I explored a new area I was filled with wonder at the sights and characters I met. As time went on, I grew accustomed to these areas and I didn’t even need a map anymore. This feeling of mastery when coming back to older areas with more experience and stronger gear was also great. I was often surprised as I found even more secret areas with my new abilities.

The problem for me became apparent when I had explored most parts of an area and I could not find the remaining items and/or the entrance to the next area. I did not purchase any markers from the map shop, so I did not mark inaccessible areas and it can also be easy to miss shaking floors or loose walls when you are focused on combat. I could not help looking up several things on the Wiki because I could not be bothered to comb through all areas and go searching for hidden paths as this seemed tedious and boring. This was mainly a problem for charms, abilities, enemies, etc., as the last ones were really hard to track down if you do not know anything about it in this large world. Maybe some cryptic riddles could be found later on in the game to aid the player with the general area of the charm.

Grubs and relics are a good example of how exploration is done well in Hollow Knight. Grubs can be found sometimes hidden, but mostly with a small challenge. This is usually platforming or enemies, but there are also some unique challenges. I estimate that most players rescue about 2/3 of grubs before the late game. After enough items are acquired, a boss can be fought, after which the approximate locations of the grubs are revealed on the map. I find this a perfect exploration system: the player finds most secrets with challenges and after enough exploration and a battle, they can track down the remaining secrets more easily but will still have to complete the challenge.

Relics are the game’s way of rewarding extra exploration and curious players. Players that wonder what would happen if they wall-climbed up the well or pogoed on a spiked roof will be rewarded with some extra geo that they won’t lose when they die. These relics can be hidden anywhere that would be too obscure for a normal player but are a good reward for the dedicated explorer. There are some problems with geo, but that will be discussed in the next section.

## Geo

Geo is the main currency of the game. It is collected by defeating enemies, finding relics or as a reward for various goals. It can be spent in shops to buy charms, items, etc. or to unlock benches/stag stations.

At the beginning of the game, geo is scarce and there are many things you need to buy. The player is presented with many shops with crucial items (quill, compass, geo magnet, extra HP) and enemies that drop only a few geo. This can make the early game somewhat tough as the player is missing crucial mapping tools when they are needed the most as they are still getting used to the game.

In the midgame, geo is used well to soft-lock areas with the expensive lamp and limit your health and soul until you play more and naturally collect more geo.

In the late game, I gather that players complained that they had 20,000+ geo and nothing to spend it on as there are no expensive items by the end. In response, Team Cherry created an NPC in the Grimm Troupe update that made ‘fragile’ charms (strength, heart and greed) unbreakable for 36,000 geo. This is a good bonus for late-game bosses, but as the game does not ramp up geo naturally as it does not progress any more, it might lead to boring grinding. As I said, it is a bonus, but a slightly cheaper price or at least an explanation of what it will do (before the player accidentally loses a charm and cannot get it back until they pay the price) would be nice.
The player loses all geo upon death, but they can retrieve it by going back to the place they died and killing their shade. This is a good system, punishing the player by taking the time to run back to the place they died. Losing a third of their soul storage is also necessary as it requires the player to go back. I might argue that losing all geo is not too necessary. In the late game, the player faces virtually no danger in going back and recovering geo. On the other hand, players only learning the controls are set back even more on the essential items they have to buy. I would be interested to see what would happen if the geo loss was partially or fully removed. A better option would be to have an easily accessible bank where the player can store geo (no, not Millibelle).

## Travel

Hollow Knight has a simple fast-travel system that lets you teleport to all the previously unlocked stations. This was a necessary inclusion in such a vast world. The Stagways also fit into the lore of Hallownest and talking to the Stag also reveals more information about each area. I think that the decision to make the fast-travel system a living being was very smart of Team Cherry, making you care about even simple things like the fast-travel stations.
The tramways are a fine addition, though they are probably not the most interesting or necessary method of travel. With one or two extra Stag Stations, the trams could have been left out. I can’t say they are bad, just maybe a waste of time.

The dream gate was a good idea, and it helps a lot with bosses like the Traitor Lord, where the walk back is very long. Personally, I would have removed the essence usage, as it is so insignificant that it already has virtually infinite uses. The use of essence might scare some players off and discourage them from using this tool, which is not the intention.

The way saving and quitting saves your progress is logical and it is nice to not lose progress because you have to stop the game. However, it is also an easy and straightforward ‘exploit’ that can be used to travel back to the last bench. I like this, it saves time backtracking, but if everyone knows about it, it would be possible to just add the option in-game to save time.
Overall, the time spent travelling was fine, with just the right amount of walking and fast travel. Traversing old areas never felt too boring, rather a showcase of how much you improved, both in skill and power. These are the only times I found the time spent travelling back to an objective/boss after death was questionable:

• Soul Master: even with the hidden shortcut, the path is long and full of dangerous enemies
• Hive Knight: many rooms filled with enemies (can be negated by dream gate)
• Traitor Lord: some tricky platforming, especially with sharp shadow’s longer dash (can be negated by dream gate)

I might as well mention the flower quest and the Mr Mushroom quest. Traversing the whole map without taking any damage is thrilling and takes strategy to plan your route. The punishment is a lot of time loss, but the reasonable difficulty makes up for it. The only complaint I have is the three jumps I find just insulting. You travel for five entire minutes and then mess up a jump, so start all over again. It feels very disheartening to lose at the finish line. Maybe some harder platforming at the beginning to balance out the difficulty vs punishment.

The Mr Mushroom quest is, in my opinion, an unnecessary but fun addition, but it is just an Easter egg referencing the developers’ original game jam, so it is irrelevant to most players. There is a mysterious tablet with cryptic hints to his locations, which is a good feature that should have been implemented for more collectibles.

## Mapping

Hollow Knight is a game where most things have to be earned. This includes finding and buying a map for every area, then filling it in as you explore. Team Cherry probably intended to give the player a sense of being lost the first time they explore an area, while not leaving the player lost in areas they have already explored. It is a nice compromise, though missing the mapmaker sometimes tends to be frustrating.

You also have the opportunity to buy a quill to add to and correct Cornifer’s maps. This might be an item I would just give the player as most are already struggling for geo.

The objective/item markers also have to be bought individually. Personally, I find some of these pins unnecessary or at least not comparable to others. Bench, whispering root and vendor markers are essential. You could argue that Stagways are important too, but they always have benches and are so important that you would know where they are. The others I found almost useless: warrior graves only show up after you find and defeat the boss; lifeblood cocoons are not very helpful; tram stations are already obviously marked by the dotted lines. This is not a big problem however and I just bought them for the sake of buying them late-game when I had enough geo.

## Atmosphere

I can’t say much about the feel and atmosphere of the game other than it is perfect. The art style is cute, clear and pretty and the game uses filters to really distinguish each area from the rest. It reminds me of the hand-drawn Kingdom Rush games. The score by Christopher Larkin is beautiful and really captures the melancholy or intense mood. I listen to it often while I am working. The sound design is good, and the funny gibberish of the NPCs brightens the mood every time.

## Areas

Hollow Knight has a vast open world with 15 or so distinct areas for the player to explore. Areas can be large or small, and some contain one or more subsections. The variety of areas is incredible for such a small team and an effort was made to make each area unique. They all have different enemies, colours and music. In addition, most areas have recurring themes and interactable objects.
Here is a list of the areas and my thoughts on them.

### Dirtmouth

This is the main hub of the game with many vendors and NPCs. At the beginning of the game, it is dark and depressing, the only bug in the village being the solemn Elderbug. Slowly, more NPCs arrive, and it is nice to see the tiny windows light up as the residents return. Personally, I think this is taken too far by the end of the game. The town will have a cacophony of continuous annoying sounds, including a preaching hero, a snoring fighter, an accordion, and a humming, floating oyster. For me, this is a parody of the miserable town I saw at the beginning or the optimistic midgame. I felt more annoyed as I sat on the bench than reflective.

The first true area of the game, it teaches the player about the main concepts of the game: some platforming, different enemy types, geo, grubs, secrets, spells and bosses. I particularly love how Team Cherry teaches a player about collapsing walls by placing a breakable wall behind a clump of geo. When the player hits the geo, they accidentally reveal a secret passageway – a great example of teaching without telling.

The combat is still fairly simple. I understand this, and I know it is necessary to have a smooth learning curve for inexperienced players. However, I still wonder if some players are put off by the seemingly bland look and simple combat that is not at all representative of the game as a whole. For me, I only realised how amazing this game was after I beat hornet in Greenpath.

Team Cherry shows off their ingenuity again with the sudden transformation of the Forgotten Crossroads into the Infected Crossroads. The surprise is great, and it solves the problem of having too easy enemies in this often-traversed zone. It is also an important story moment as the player now realises what the infection is and what it does to the bugs. I only wish they had discarded the old simple enemies – they probably ran out of resources to make infected versions of the horned bugs and crawlers. I also found out that the colour blue (background) is opposite on the colour wheel to orange (infection) – a clever use of contrast.

### Greenpath

Wow. As the player finds an exit from the Crossroads, they stumble into what seems like a jungle area. The game truly shows off its visual potential in this stunning area filled with lush vegetation, waterfalls and flocks of birds. More unique challenging enemies are introduced along with a well-designed boss. The player now starts to understand the true nature of this game: a beautiful, atmospheric environment but also a great challenge.

### Fungal Wastes

Another solid area with a variety of different mushroom-inspired enemies to fight. There is a focus on bouncing and explosions, so your dash comes very handy as you learn how to use it. The only boss here is the Mantis Lords in the mantis village who are not required to progress, but I think it is enough.

### City of Tears

This is one of my favourite areas of the game in terms of atmosphere. The music, just like the deserted city, is beautiful yet melancholy. You truly feel like walking in a forgotten world and can imagine its beauty when it was still full of life. Vast empty palaces only populated by armoured husks. The subarea, Soul Sanctum, also has a great atmosphere, accompanied by dramatic organ music.

The area is split into two sections, an easier section where you arrive from the Fungal Wastes and the elite palaces of the nobles that you can only access later in the game. It is located at the centre of the world, and the player will travel through there many times to visit NPCs. Lurien the dreamer also sleeps here atop a tall spire protected by more husks of armour. Overall, an atmospheric central area with great story and mood, even if the gameplay is somewhat basic.

### Deepnest

Before I played the game, I saw many players writing about their frightening experience when they fell into Deepnest and had to fight their way out. Luckily for me, I missed the secret entrance and pitfall and only attempted to explore the area with late-game items and sword.

It was definitely a contrast to the rest of the game due to the claustrophobic, maze-like structure, minimal map information and constant ambushes. The soundtrack was eerie and sometimes silent as I wandered around, hoping to find a safe place to rest. I might have ruined the experience for myself as I was not really scared of dying. The moment that truly sent a chill up my spine was when I encountered an exact mirror image of myself, out of reach, but with an unnatural bony colour (this led to the fight with Nosk – more on that later).

The one concern I have is the location of the map maker, Cornifer, in this area. While it may be intentional, the lack of humming could cause many players to miss him and have to wander around the caverns without a map. Some shortcut to the failed tramway area would have been nice as the route is long and tedious when you want to come back after exploring the area.

As you venture deeper and deeper, the place starts filling with spiders and webs. The game forces you to trigger a trap in the spiders’ village and you escape, wandering through the maze of Herrah without any indication of where to go. It seemed very intense and from the roaring sounds, I thought there would be a large spider boss before the dreamer. Unfortunately, Team Cherry seemed to have run out of time or budget, because three minutes later, you arrive at the dreamer without any opposition. This is a pity, a spider boss is implied and expected, and it would be a great opportunity to fight in the maze itself. Even Nosk would have been a better replacement than nothing.

### Resting Grounds

For me, this feels like the most disjointed area in the game. It features the Blue Lake, which is beautiful but should be a part of the City of Tears. It also has the Seer and some ghosts made by donators (blue filter with ghostly smoke), some graves (dark blue filter), underground (dark, brown filter) and the house of Ze’mer. It all feels different and disconnected. I would have preferred a smaller area or subarea with a similar filter throughout.

### Kingdom’s Edge

Team Cherry shows off their ingenuity with the design of this area. Most designers would have just made an icy/snowy area, maybe with some freeze mechanics. Team Cherry makes an area where it rains the ash of an ancient creature, something I find very creative and a twist on the expected theme. This is seen again with the attention to detail in the City of Tears: that rain isn’t just there, it has a source.

On the negative side, the enemies (fleas, spitting bugs) seem a bit random and the lack of any distinct mechanic makes this area feel slightly repetitive.

The Hive is a part of this area, though it can be hard to find as the only entrance is through a hard-to-reach, hidden destructible wall. It is distinct, short, but sweet, with a unique mechanic, enough enemies and a boss.

### Fog Canyon

Again, a unique twist on a recurring level theme in gaming, the underwater level. From the designers’ original art, we know that this might have been intended to be an underwater level, but I like the ‘fog and mist’ pink aesthetic. It is calm and there are no enemies, only floating jellyfish hazards.

A recurring theme I noticed in Hollow Knight are the many explosions and explosive enemies. These are found in the Fungal Wastes, Infested Crossroads and Fog Canyon. While I understand the first two, Fog Canyon’s explosions felt repetitive and did not help the atmosphere. A simple fix would have been to implement the already introduced electricity theme and just replace the explosions with bursts of lightning to have visual variety.

### Ancient Basin

This is one of my least favourite areas. It is small, but that does not mean it is bad. I just feel that it is messy and not distinct enough. There is a section with Mawlurks (which is fine), a section with a few ‘walking rocks’ and a boss with a new ability. However, I believe it can be fixed simply. The addition of one enemy to replace some recycled enemies from previous areas and the ‘walking rocks’ would give the area a distinct feel.

### The Abyss

A more story- and atmosphere-oriented area with no real challenge. The only enemies are your shade siblings and a creative twist on a damaging pit, these tendrils reaching up to grab you.  I definitely felt the tension and danger of the place. There is a ‘puzzle’ where you must turn on a light to keep dark void tendrils at bay – a mechanic that could have been explored better, but I don’t feel that it is necessary. The colour palette is also a bit similar to the Ancient Basin, so I would change it to a grey/black tint. It would give a better feeling of descending down the colour brightness.

### Other

The rest of the areas are very good, but not worth mentioning in a separate section. Crystal Peaks, White Palace and Royal Waterways are solid, well-rounded areas. Queens Gardens could have used more platforming. Howling Cliffs could have used with a unique mechanic (blowing winds?). The ‘mound’ areas where spells are found and upgraded with their funny snail shamans offer a bit of light-hearted humour.

# Platforming & Movement

## Abilities

### Jump

Control is the main focus of the movement system in Hollow Knight. With devilishly difficult platforming segments and fast-paced boss battles, the player should be fully in control of their character at all times. The jump is very simple. There is no momentum in the game: the player instantly reaches full speed and can alter their trajectory at any time. This was useful and also kept the tough-but-fair feeling of the game – every mistake you make is your own fault.

A versatile ability to traversing the air, moving faster, or dodging attacks. It was very necessary, and it is delivered with the usual tight controls. Joseph Anderson suggested that it should be able to get cancelled, but personally, I do not want that extra layer of difficulty. He also said it could have been included from the start, though again, personally, I think it is necessary for the learning curve. Near the end of the game you receive an invincible dash on a short cooldown, further boosting the versatility of this ability and facilitating combat – nothing apart from great.

### Wall Climb

Takes some time to get used to, but very essential, controllable and useful.

### Double Jump

Opens up many possibilities and makes you rethink all of your encounters so far. It is also a handy tool when you miss a small platform or to slow down your fall. It has the same control as the jump and I love the ethereal wings aesthetic.

### Super Dash

One of the questionable abilities that is very situational and mostly just used to access previously far areas. It is useful in platforming and as a wall cling, though I wonder how it could have been used in combat with a shorter charge-up time or some type of invincibility. Another issue I have with it is the difficult stopping and the precise timing to move again. When a Super Dash is cancelled in mid-air or on a wall there is a short period where no input can be made and then a short period to make that input, otherwise, the character will fall. A smoother cancel or a larger hovering window would have been a nice addition for me, though it may not be a problem for others.

### Isma’s Tear

An ability that seems to only be another way of locking you out of certain late-game areas. While I understand the use of ‘keys’ to stop the player from entering areas that are not for their skill/equipment level, having an entire ability that mostly functions as a key is not too satisfying and requires no skill to use. It also removes any danger from acid, making some platforming trivial.

I don’t know how this ability should be tweaked to make it more engaging. One idea I had would be for it to remove any damage from environmental hazards (spikes, thorns, acid) but still reset the player to the previous ledge. This would keep the protection idea while also making it more useful and solving another problem, addressed in the next section.

## Platforming

I had played platforming games before, and to say that I was pretty bad at them would be an understatement. I couldn’t beat level 2 of Mario. Seriously.

At first, I found the platforming sections of Hollow Knight frustrating as well. There were a few small platforming sections (like the entrance to City of Tears) where I had to resort to cheating. This wasn’t because I didn’t want to keep trying and learning, it was because I didn’t want to spend three minutes walking to a bench and then back again for around seven more tries. That is not great game design: a player should be able to experiment and try out the platforming without being heavily punished.

This issue is fully solved in later areas by the introduction of the hiveblood charm, which regenerates your last mask of health. This is why I surprisingly really enjoyed the White Palace gauntlets – like other great platformers (e.g. Super Meat Boy), you could instantly try again and learn from your mistakes. It felt great to pull off a string of complicated jumps and dashes. That made it one of my favourite areas as I felt like I was improving a lot, though it is hard to choose from all the great ones.

I actually completed the Path of Pain, an extra hard hidden platforming challenge, after I wrote this and thought I had to add it in just to praise the sheer ingenuity and feeling of accomplishment. It is even more generous in retrying with infinite soul totems at nearly every stop, which are otherwise very distant from each other. The last segment was about 30 seconds of not touching the ground, pogoing on spikes and saws until you reached the end. It also had two difficult enemies near the end, which frustrated many people as they had to do the platforming all over again. However, it wasn’t too tough, and the feeling of mastery and accomplishment is wonderful even if there was no tangible reward – it was only intended for the few willing to spend the time to feel accomplished (I beat it in about 3 hours).

Tip for anyone who hasn’t completed it: Grubberfly’s Elegy + Grubsong + Deep Focus is a better combination than Hiveblood and minimises downtime.

This is where my suggestion for Isma’s Tear comes in. Ideally, all platforming should only punish the player with restarting the section, not a severe time punishment. Isma’s Tear could be an item found in the early game that makes the character not take any damage from hazards used in platforming challenges (there could be one type that still deals damage for things like Colosseum of Fools). This solves all tedious walking and makes the White Palace even more fast-paced with less downtime. Again, this is just a possible solution to the issue I highlighted, and I would appreciate any other ideas.

Where there enough platforming sections? Definitely towards the beginning, though towards the end I could only find the White Palace. It felt like a same that after I got into the platforming there was no way I could use it in the world. I’ll talk later in the Dream Nail section about a place where more platforming could have been included, but for a game mainly about combat, Hollow Knight has great platforming.

## Combat & Enemies

### Combat System

In my experience and time spent watching other games, I cannot think of a better 2D combat system than Hollow Knight’s.

The basic combat system is great and finetunes the norm in these types of games. All hits feel impactful as enemies briefly flash white and you both get knocked back with a satisfying sound effect. The Knight can only hit in four directions (up, down, left, right), but that just simplifies the controls. There aren’t any combos, but they were not necessary as the combat isn’t centred around repeatedly hitting enemies. The combat controls are just as responsive as the movement options, and the two systems intertwine in, to quote Grimm, a dance of death. Battles are not just about attacking or dodging attacks, but a combination where you weave through attacks, stabbing or healing in the openings.

Team Cherry also made a great choice with the aerial nature of the combat system. Pogoing (downward slashing) off an enemy resets your double jump and dash, allowing skilled players to juggle themselves on top of enemies without touching the ground. It is good fun and an incentivised strategy.

### Soul – Healing & Spells

The soul and healing system is a stroke of genius, even if it can lead to some awkward moments. Hitting enemies fills a soul meter. This soul can be used to heal or to cast three different spells. It is a great system that forces you to be aggressive if you want to heal and not run away from the fight. Healing also takes some time, so memorisation of patterns is necessary to find gaps where you can heal. It also has some interesting charm modifiers, discussed in the charms section.

In addition, it adds a risk-reward factor with the spells – trade a heal for some damage and risk dying or let that enemy live and potentially damage you even more. The spells are well-balanced: vengeful spirit can hit enemies from far away but has less damage; desolate dive deals a lot of damage to a small area over time and gives the player invincibility frames; howling wraiths deals good damage to enemies above you. The controls are good as usual, though I wasted a spell many times accidentally as I tried to heal. An option to unbind the spells from the same key as healing would be appreciated.

The only time this system feels awkward is when you are down to one mask of health while exploring: there is no way of healing outside of fighting, and I assume many players rather save and quit, then trudge their way back to where they were. I know no system can be perfect and I completely agree with Team Cherry’s decisions regarding this.

### Nail Arts

These are charge-up sword attacks learned from three Nailmasters found in the world. I didn’t use them much, but I like the Great Slash. It is very useful in the Colosseum for one-shotting certain enemies or dealing quick damage to evasive bosses. Unfortunately, the same cannot be said for the other two. Dash Slash is basically a dash and then a Great Slash. Cyclone Slash also offers little use. It is a spinning attack that deals damage on both sides, but it is never a good idea to be between enemies in the first place and there are no horde encounters. I heard it deals more damage if you mash the attack button while it is performed (never indicated in-game), which would be unbalanced as it allows you to face-tank.

I do not like the last two attacks and think they could be replaced with more useful attacks for each direction. For example, as an idea, UP + Nail Art could slash upwards and DOWN + Nail Art could do a pogo attack (as in Shovel Knight). These are just suggestions, but hopefully, you understand what I mean.

I have two more issues with these attacks. The first is that they take way too long to charge up without the charm Nailmaster’s Glory, though that may be intentional and does not disturb the gameplay. The second is more of a problem for the controller players (I tried keyboard for a while but gave up): holding down the attack button limited my jumping capabilities, so I didn’t dare to charge up an attack until the enemy was really close out of fear of messing up a jump. This is the controller’s problem and not the developers’, and the only solution I can think of is to include a toggle option: hold to charge and release to strike or hold to charge, release and tap to strike.

### Dream Nail & Essence

This section could fit into the exploration section as well, but I’ll discuss it here since most essence is gathered through combat. The dream nail is a versatile tool that is given to you by the moth Seer, said to “cut through the veil that separates the waking world from our dreams”. This is essentially (no pun intended) a new questline that has you fighting dream bosses for various rewards.

Acquiring the dream nail unlocks six minibosses, the Warrior Dreams, who are ghosts of fallen warriors. They usually only have a few mechanics but grant a lot of essence when defeated. They are a nice addition to the game, and I always love more interesting bosses. Some thoughts on them and the rematches against bosses are found in the bosses section.

The other way to gather essence is by hitting Whispering Roots with your dream nail and spending a minute or so jumping around a large room collecting what seem like dream coins. Honestly, this could have been left out of the game. It offers little to no challenge and takes a fair amount of boring jumping around. These magical dream trees could have been a place for any cool dream challenge, though again, the developers probably ran out of time and I do not blame them. It could also have been a nice way to add more optional platforming to the game that could be completed at any time.

The dream gate has already been discussed.

The dream nail also allows the player to access the thoughts of enemies and NPCs. It sometimes leads to interesting lore with NPCs, but with enemies, it is mostly used to gain soul – the thoughts of enemies are usually something along the lines of “Kill…” or “Danger…”. Gaining soul from hitting enemies with the dream nail is handy but also clumsy and exploitable. First, the dream nail takes a second to charge up and you cannot move while charging. This requires good timing - close enough to hit the enemy but far enough for you to remain safe. It can feel awkward, which might be intentional as it can also be used to ‘exploit’ the soul system. For example, you can farm a single slow enemy in the Colosseum for infinite soul to heal. My suggestion would be to leave the dream nail as a lore tool: make it gain little soul but let it be used quickly and while moving or jumping. This, along with some more unique dream dialogue, could be a fun for players interested in actually knowing about a creature and not just for farming soul.

### Charms

Charms are a great feature. While some are hard to find, they allow the player to customise their character with a ‘loadout’ of charms that suit the specific situation. A tricky boss encounter? Switch some exploration charms to combat boosts. Hard platforming segment? Give yourself a longer nail or regenerating health. These charms allow each player to express themselves and choose a playstyle that suits them or have fun experimenting with different combinations. As with any game, perks can be hard to balance, but Team Cherry did a good job overall in making each charm viable.

Here is a list with my thoughts on some charms that are worth mentioning. Any charms not mentioned are balanced and useful. Any ideas I throw around are just suggestions I came up with that could be tried out. I am not saying that is what should happen, maybe some charms are like this for a reason.

• Quick Focus: this is the charm I have the most trouble with, not because it is overpowered or underpowered, but because I feel that if you want to heal properly in a boss fight, this charm is necessary (e.g. Hornet 2, Watcher Knight). While I know that all bosses have small openings to heal if you are skilled enough, this charm allows you to heal more times and twice in larger openings. If I intended to heal at all, I felt like I needed to use this charm. Maybe this was intended to balance out Joni’s Blessing, but I feel like the normal focus time could be reduced to 75% to make it a harder decision (50% decrease -> 33% decrease).
• Wayward Compass: feels like the most controversial charm. I see many people on Reddit debate if it should be a charm or not. Honestly, I don’t feel like it is a huge problem as it is, though showing your location on the map wouldn’t be game breaking and would be appreciated by many players.
• Fury of the Fallen: I do not understand why any player would use this charm. It is only useful in a highly dangerous state of one health that will likely end in 5 seconds. Even so, Fragile Strength gives almost the same effect without requirements. This charm could use a buff, potentially increasing the damage in portions until the player is at one health (3 HP – 125% damage, 2 HP – 150% damage, 1 HP – 175% damage). This would help a player who intends to stay at low health during fights but still heal up to 2/3 hitpoints.
• Fragile Charms: when the developers wanted to include basic, powerful charms that flatly improve the main mechanics, they solved the power issue in a creative manner: these charms are high risk, high reward for those who are good enough to not die at all. I would, however, move the ant merchant a bit closer to the Stag Station: tedious, repetitive traversal it is not a great way to punish the player. The geo cost is enough.
• Heavy Blow: one of the charms that I find questionable. Sure, more knockback would be good for a few specific enemies, but it is detrimental when fighting long range enemies and just useless with bosses. A lower charm cost and some buffs (knocking enemies against things?) might make this charm more viable.
• Flukenest: this charm was very overpowered until the last patch. It is still very good, breaking the game in the player’s favour. That can make some fights way too trivial (e.g. God Tamer dies before it even moves with empowered Flukenest). On the other hand, it is helpful with (somewhat) unfair or RNG fights like the Watcher Knights. Not ideal, but I think it helps the game more than it breaks it.
• Glowing Womb/Weaversong: both of these charms grant small helpers to the Knight. While they are mostly fun and fair, there are a few fights that are broken by these charms: Traitor Lord and Failed Champion can both be cheesed by hanging in the top corner. If this was fixed, these charms are otherwise good.
• Joni’s Blessing:  this charm is a genius idea. Another great risk-reward decision for the player to make – do I try to heal more than 50% of my HP back or do I lose all healing capabilities and instead gain more health?
• Grubberfly’s Elegy: I like the charm, but this is an example of a charm interaction that anyone could only find on the wiki. Using this charm with Grubsong increases the amount of soul gained when taking damage. At least a hint would have been nice in the description.
• Sharp Shadow: I came across the issue of harder platforming segments with the longer dash while using this charm. I don’t know how I would fix this as it is a core part of the charm. I only came across this problem with Traitor Lord, where dream gate can be used.
• Shape of Unn: I honestly thought this would break the game, but again, I was surprised by the nuanced decision-making that is necessary in this game.
• Kingsoul/Void Heart:  when I got Kingsoul, I immediately went down to the Abyss and got the Void Heart. I didn’t know it would take the charm away from me, which would have been very useful in other boss fights and the Colosseum. I would like it if the player could keep this charm after they find the Void Heart. The Void Heart itself is handy to kill your shade, but not very useful otherwise – maybe it could keep your geo and not even spawn a shade?
• Dreamshield: this shield revolves around the character and protects them from some projectiles and deals damage if it touches an enemy. It is a cool concept, though somewhat based on randomness – if the shield is in a good position to block a projectile or not. However, not much can be done about this and this is not really an issue.
• Carefree Melody: another random charm, the only fix would be to replace it with a more skill-based, engaging charm. Luckily, I think most players will not find this charm and instead beat Nightmare King Grimm for the Grimmchild.

Each charm has a specific notch cost so only a few can be equipped at a time. As the player progresses, they will find more notches and therefore increase the number of charm combinations possible. This is a good system and I found the number of notches balanced.

If the player equips a charm that costs more than their available notches, the Knight will be overcharmed and take double damage. Unless you are going for a hitless fight, I do not see how it would be useful. At least allow the player e.g. 4 – 6 extra notches for taking such a huge risk. In the end, I do not really see the use of this system and would just remove it.

## Enemies & Bosses

### Enemies

Hollow Knight has a good variety of different enemies that challenge the player to try new strategies and techniques. While the variety is a bit deceptive as there are a lot of reskins (which I do not blame Team Cherry for), there are enough to keep the game interesting. Here are some thoughts about certain enemies that I would like to highlight – remember, any criticism is just nit-picking here. Any not brought up are fun and suit the situation.

• Crossroads Husks: these are the basic enemies in the first area of the game. It is good that they are simple and easy, but at least one of the three ‘run at the player’ enemies could use a new mechanic.
• Husk Guard: these large foes not only have a fast, long strike but for some reason deal two damage. Even having completed the game, I struggled with these enemies more than False Knight. Their damage should be lowered to one mask, heavy-hitting enemies are for the late game.
• Entombed Husk: the first time I encountered them, they scared me more than Deepnest. In the dark underground, their panting is frightening - well done to the sound designers.
• Mosscreep: these guys are annoying but cute.
• Volatile Mosskin/Fungified Husk: these enemies can be boring at first – hit, move away, hit. If you are more experienced, you can sneak in two or three hits before they explode, making this enemy a great game of risk-reward.
• Uoma, Ooma and Charged Lumafly: these ‘enemies’ float around passively and the Ooma are clearly meant to be avoided. I have stated before that I would have preferred an electricity theme as the orange explosion is used a lot. I would even consider adding some extra mechanic to make the Fog Canyon even more dangerous as it is still relatively easy to traverse. Alternatively, some extra Charged Lumaflies could do the job.
• Sporg: I struggled a lot with these enemies when I first played the game. They take four hits to kill, are often in hard to reach positions and shoot homing explosives hat deal two damage. A slight nerf would be nice, but it is still a good enemy.
• Mantis enemies: these are good enemies and I enjoy their lore, but I wish there was a third mantis enemy to mix it up a bit – there is only so much you can do with two types of enemies.
• Soul Twister: another enemy I found too difficult, especially with more than one at a time. They follow you around and teleport constantly, making them hard to hit. If you get close, their homing missiles are almost guaranteed to hit you. Maybe slightly lower health or a more visible telegraph?
• Belfly: not very fun or engaging. They are either a frustrating surprise two damage or you can just walk past and they kill themselves.
• Flukemon: a fast and maniacal enemy that really supports the dangerous atmosphere. I like how its split body comes back to attack you.
• Furious Vengefly & Volatile Gruzzer: they are supposed to be infected versions of the Vengefly and Gruzzer, but for me, they seem too large compared to the Violent Husks, who did not change in size. I will also mention again the lack of infected horned husks.
• Dirtcarver: the trademark enemy of Deepnest, they ambush you by burrowing underground. The oppressive atmosphere and the feeling of no escape is supported by the leap and wall-climb abilities.
• Shadow Creeper: if it wasn’t the only enemy in the Ancient Basin I might tolerate this walking rock, but it is not challenging or creative for a mysterious place like this.
• Infected Balloon: these are alright enemies, but the happy fat look doesn’t fit with lore and atmosphere of the dangerous infection.
• Primal Aspid: everyone I know who plays this game hates these enemies. I can see why they are so frustrating: they shoot three fast projectiles with little warning. I would like to see if making them shoot more frequently but with a slower telegraph would change this. Though maybe the community just needs to "git gud" (as Hornet would say).
• Hiveling: it would have been nice to see more of these small enemies. Bees move in large swarms and it would have been cool if 30 or so attacked the player at once.
• Hive enemies: a great combination of unique larger and smaller foes and a fun breakable platform mechanic
• Loodle: aside from their name, which is hilarious, I hate these enemies. They are tedious and random, which is not a great combat experience.
• Mantis Traitor & Petra: I like how these enemies are evolved from the ones in Mantis village, which even fits the lore of the infection. They are difficult, but I enjoyed fighting them.
• Grimmkin: these enemies were added in the Grimm Troupe update and appear in different locations on the map. As most people completed the game before they started the DLC, these enemies had to be quite difficult. Personally, I found them more annoying: their dash attack was very fast, and they often appeared very far or in a wall. I died a few times to the two damage versions, but in the end, it was satisfying to defeat them.

Overall, a good variety of enemies with some interesting mechanics. While fighting in the world was a little less frantic than in the Colosseum, I enjoyed finding and taking on new enemies when I explored new areas. The combat is definitely one of the strong sides of Hollow Knight, even though I loved the bosses even more.

## Colosseum of Fools

In the majority of small fights, especially when the Knight has upgraded health, they have little chance of dying to a lone enemy while exploring. Usually, they can brute force their way through these encounters and just heal up the damage. This isn’t a problem in itself and just contrasts the rush of the Colosseum even more: here, you are locked up and have to fight waves of enemies without dying.

These three trials are the ultimate test of enemy combat in the game – and it is hard as hell. With a variety of unique and reskinned enemies and changing environments, it can be a challenge. I enjoyed the first two trials and really had to step up my sloppy combat skills. The skilled use of Nail Arts and spells is essential to beating these trails and I had to relearn old enemies as well as new ones to thrive. The aerial nature of the combat can really shine in these final battles with most charms and upgrades.

The Trial of the Fool was the only one I found frustrating and unfair. Not because I didn’t want to try again or didn’t have the skill to beat these enemies, it was because I needed to concentrate heavily and play perfectly for about ten minutes just to get another try at a wave of tricky enemies. This is even worse than a long journey back as it takes a lot of effort to make it back to the point you died. I feel like the last trial could be made a bit shorter or even split into two separate trials as it has two bosses. The Trial of the Fool was one of the only times I cheated in the late game, but only to get back to the point I died. Again, this type of criticism is weak and dependent on the player, and maybe I am just an impatient player.

## Bosses

These frantic fights were my favourite parts of Hollow Knight. I loved a lot of these unique and fun battles, most of which took some time to learn and master. The game has many different, fun bosses that wow you with their dramatic entrances, unique styles, cool abilities and immersive atmosphere and music (yes, most boss fights have their own amazing track). They are also a good example of the number of skills you learn playing this game. After I beat the second, more difficult version of Hornet, the first fight feels easy and predictable.

Unlike some other games (e.g. Cuphead), the bosses don’t take up all the screen and dodging through attacks is not the only focus. If you can dodge a move, great, but how much can you heal or hit the boss in the meantime?

The interwoven systems of offense and defence, risk and reward and the integration of all the combat systems make these fights all the more addictive.

Most bosses have a stun mechanic that is quite complicated to understand. To put it simply, most bosses will be knocked down for a few seconds if they are hit enough times. This is an appreciated and sometimes necessary break to heal or deal extra damage if you are already doing well. I do wish the stun took a bit more time to take effect: I missed the animation many times and accidentally hit the boss, ruining my healing opportunity.

Bosses also lack any sort of health bar in this game. There is some indication with staggers, but it is not very reliable. This is not an issue with smaller enemies who take a few hits to kill, but it can change the mood of a boss fight entirely. You might go from feeling “Just one more hit… yesss!” to “oh… it’s dead… glad that is over with”. I am sure the developers did this intentionally for some reason, but at least a charm that shows boss health would be nice.

Here are my thoughts on most boss fights. If a boss is not mentioned, they are a good boss with solid mechanics and style.

• False Knight/Failed Champion: a fun first boss with mechanics that are taught to you before by regular enemies like Husk Guards. I could only beat him after a few tries because I was still getting used to the game, but I enjoyed the fight and the surprise of the tiny maggot falling out of the armour. The second fight was surprisingly hard, but nothing beats a good Flukenest spam (it was actually an interesting fight).
• Hornet 1: I found this fight really hard on my first playthrough and had to cheat one of her phases. This is more of an issue with my previous gaming experience though, and she is an interesting, quick boss with cool lore and mechanics. After I looked it up, her separate shouts do not indicate any specific attack – this could be added for struggling players to memorise and get a head start on the reaction.
• Mantis Lords: this boss has gotten a lot of praise for being one of the best bosses in the game, and I have to completely agree. They are fast and frantic – their throw attack is hard to dodge but is the only time to heal. When you defeat one of them, the other two start attacking simultaneously. The player will at first doubt if they can keep up to this double threat but will feel like a true ninja when he finally earns their respect and the Mantis Lords bow to them.
• Soul Master: aside from the long, dangerous trek back to the arena, this is a nice boss with a cool fake-out death. It isn’t a hard phase though, so it isn’t a problem.
• Crystal Guardian: he doesn’t have too much health in his first battle, but damn, his second battle is tough. Two damage and a fast pace is a challenge, but with some spell charms you can beat this boss in a few tries. It would have been good to practice with some of the beam enemies before this battle though.
• Dung/White Defender: I personally found this fight easy but really fun. The rematch against White Defender is also a battle I really enjoyed, but I could never react in time to the dung pillar attack because the telegraph was too short for me.
• Flukemarm: I found this fight one of the less fun and balanced fights. If your nail is too weak to one-shot the little flies, you will be easily overwhelmed, and it is almost an impossible battle. However, with a nail upgrade, the battle is quite easy and not very fun. In the developers’ defence, this fight is not required and could be classified as a unique enemy with a large health pool.
• Broken Vessel/Lost Kin: I put these bosses together because they felt very similar to me. I did the Lost Kin fight quite late, so it was pretty easy, especially with Defender’s Crest. This charm really broke the battle for me: the infected balloons are a big part of the fight like Hornet’s traps and this charm negates them for one notch. The wiki states that there are some enemies with 1 HP that do not die to tick damage. This should be the case here too. Otherwise, another fun boss that you feel great fighting.
• Brooding Mawlek: this is clearly meant to be an early-game boss, yet it is restricted by wall jump, so most players will find it quite late. In those cases, you can probably out-damage the boss, and the fight is trivial. Maybe give it a slight buff or remove the wall jump gate.
• Nosk: I was filled with anticipation as I followed my eerie brother through the caverns of Deepnest. I entered a room filled with hanging dead bodies and suddenly… well, it was pretty anticlimactic. I admit I had strong gear, but the boss was so easily exploited by the terrain that the fight was boring and unexciting. The other attacks are not too creative and reused. Overall, not the best boss fight for me, knowing that it was the only boss in Deepnest and could have been at least placed before Herrah. Maybe the fight would have been more intense with even ground. The second problem I had personally with this boss is the design: along with the Collector, the black, simple void creature was unappealing to me and I would have preferred a large spider.
• Hornet 2: this was a step up from the first fight with annoying traps and much faster attacks. I was determined to defeat her properly after I had to cheat her first encounter and after some time I finally beat her. A high-speed, skilled fight with my favourite character in the game (next to, you know, all the other characters).
• The Collector: as mentioned before, I hate this design and it reminds me of FNAF World. It looks silly and weird, not suitable for a mysterious bug world with a charming art style. Otherwise, a very random boss, but not too bad if you have an ungraded nail.
• Uumuu: this boss is not very well designed in my opinion. I like the idea of a giant intelligent king jellyfish, but this dreamer boss only has two simple mechanics that are easily avoidable. Furthermore, the boss is only vulnerable for a short period of time every 10 seconds or so and bounces around randomly when you try to get some hits in. It is a laughably easy boss that many people will defeat after going to the abyss and getting the shade cloak, an (almost) required item for entrance. Definitely needs a rework.
• Watcher Knights: a difficult and frustrating fight for many players (even speedrunners), especially without shade cloak. There are two enemies to keep track of that bounce in, invulnerable, randomly from off-screen. Not entirely random, but random enough to be frustrating. However, they are a dreamer boss and have the right to be hard. They can definitely be beaten with the right gear.
• Dreamers: they aren’t bosses. I included them here because many people seem to wish that they were boss fights. It is definitely implied by their dramatic appearances twice along the Knight’s journey. However, two already have a boss and the third is also hard to reach. I believe that if the issues with Uumuu were fixed and Herrah got a spider boss, the dreamers are fine as they are as a story/lore element. I do wish they had more dialogue – you don’t get to know much about these important characters.
• Traitor Lord: I found bosses that dealt two damage pretty difficult, especially this one. I know the intent is to lower the Knight’s health to similar to its original quantity, but that is without the healing factor taken into consideration. It is almost impossible to heal in this fight, and each heal only counts for half a hit. Again, I need to git gud, but this was one of the bosses I had to partially cheese with Weaversong. Overall, it has some good attacks after the Lifeblood update and the ending is quite sad.
• Hive Knight: with the large queen bee looming in the background, I expected Team Cherry to finally make a big boss. There is a lack of larger bosses (full/half screen sized), but I understand the reasoning. As discussed before, Hollow Knight’s boss fights are not just about dodging, but also about when you attack. This would be made irrelevant if a boss covered the whole screen. Anyway, Hive Knight is still a fun nail duel, quite similarly to the Hollow Knight boss.
• Grey Price Zote: haven’t spent as much time learning him, to me his attacks felt too numerous and similar. He looks stupid (which is probably intentional) and seems to cause shockwaves with every attack. Not my favourite boss fight, especially that you can do it up to ten (!) times.
• Warrior Dreams: these ghost bosses give essence when defeated and usually have less health and simple mechanics, with the theme of spawning objects to attack you while they themselves just float around. I liked most of these fights, they were sufficiently challenging but not full boss level. No Eyes was the only boss in a dark room and was very atmospheric, my favourite of the ghost bosses. I also liked how it fit the dark, eyes gouged out look of the character and the creepy lullaby playing during the fight (https://www.youtube.com/watch?v=TLAXPJ521z0). Marmu was the only one who broke the ghosts’ theme and also had the most boring fight of standing in the corner and hitting her when she came close.
• The Hollow Knight: definitely my favourite boss. Not necessarily because of the mechanics, which are satisfying and enjoyable. It also isn’t a very hard boss – I didn’t die to him, granted I had over 90% completion by that time. What I love so much is the atmosphere: the music was really fitting, the effects and sound was great, and it really felt like the conclusion of my journey. It also had great importance in the lore, but I will talk about that later.
• The Radiance: the true final boss of the game. Unlike the Hollow Knight boss, this one is really hard and requires all of your skill. Her attacks deal two damage, but there are a lot of healing opportunities as well. I did feel sometimes that luck can be a factor in this battle, however, it wasn’t as prominent, and it never felt unfair. I could argue again that at least this final boss could have been larger in size (this super-powerful being is about as large as False Knight), though again you could say that it makes offence more interesting. The fight has a lot of phases and attacks, but the difficulty was fine with me, except for having to defeat the Hollow Knight every single attempt. That got tedious as I had to concentrate for about 3 minutes beating a boss I had already proved I could defeat. Perhaps Hornet could still be holding him down if the player died to the Radiance.
• Grimm (Troupe Master/Nightmare King): I was surprised at how enjoyable the first version of this boss was and I felt great after besting him. The music was intense and a whole masked crowd was watching you. It was surprisingly difficult and fast-paced, but it was fun learning his patterns. I can see how the second fight appeals to hardcore players. It adds a twist to the patterns you learned before, speeds up the fight and gives Grimm a much larger health pool. This was the one boss I finally gave up on after trying 30 times and only reaching 75% of his health. This was mainly due to the double damage and virtually impossible healing. I ended up banishing the Troupe to get the final percent. That was a nice inclusion for the less skilled players who still want to complete the game, but trying the boss was very fun and frantic.

# Story & Lore

I am still uncertain about what I think about the story and lore of Hollow Knight. On one hand, I loved the characters, the atmosphere and the dark storyline. On the other hand, I found everything so vague and up to the player’s interpretation, most of which only have a very simple basis.

All of the characters in the game are very likeable: I loved the pessimistic but sweet Elderbug who was so annoyed at the travellers; I loved the bulky but cowardly Cloth who finally found the courage to fight and falls heroically while fighting; I loved how Quirrel admired the rain in the City of Tears and finally found its source, the Blue Lake, before departing from Hallownest; I loved the creepy yet adorable Myla’s sad story; I loved Cornifer’s enthusiasm and optimism; I loved Hornet’s dedication and prowess in battle. Team Cherry shows time and time again how they can create compelling sad, funny and heroic characters.

The character design, music and overall atmosphere also fit really well with the story. I cannot think of a better example than the dramatic final battle between the Knight and the Hollow Knight. Usually, such emotional intensity and deep meaning is only achieved in stories without interaction, such as movies and books. These developers, however, deliver a final battle worthy of most movie finales. I genuinely pitied the Hollow Knight as he stabbed himself, desperately trying to stop himself from being controlled by the infection and hurting the Knight. The music swelled, and I felt no anger, only sadness as I slayed this hopeless creature, damned to forever be sacrificed and chained. Then I knew the only way was to absorb the infection myself and continue on this endless cycle of horror. This was a wonderful showcase of how great the story could be.

I don’t know how I feel about the resetting of the story every time you reach an ending. I had to sit through the credits twice because I was curious what happened to the Hollow Knight after I defeated him. Seeing Hornet as I walked out after she was sealed in there forever slightly broke the immersion. This is a weak criticism though as not much could be done about this.

I am sure a lot of people loved how the lore is told in Hollow Knight. Subtle hints in the environment, cryptic messages and dialogue and item/enemy descriptions give clues that you have to piece together yourself if you want to know what the kingdom looked like before it was corrupted.

It is fun to learn bit by bit from the environment, though personally, I would have preferred some lore that is certain and can be easily interpreted. The history of Hallownest is so vague that I am not sure even the developers know anything for certain. I mean, sure, crazy theories can be fun, but not if the whole game is so unexplained. I knew next to nothing after I finished the game and was even more confused after I read some lore explanations. What are the void, the Pale King, the Radiance, the moths, the dreamers, the Knights, the shades, the infection, the bosses and all the other characters? Behind all the vague dialogue and mysterious messages, the established and clear lore is surprisingly lacking.

The only things that are given to you are lore bits like a tablet with completely random words in Monomon’s archive. I believe that the story could be made much clearer and a solid groundwork should be established before vague details are added in. As much as it is mysterious wondering who or what you are, some clarification is necessary for players unwilling to search online for answers or theories. It would also help with signifying/explaining the importance of the things said towards the beginning of the game. For example, I completely forgot about the infection escaping the Hollow Knight in the opening cutscene until I replayed the game because I did not understand what was happening.

Extra information about some characters would also have been appreciated. Minor characters have a few lines of dialogue at most and players are left to theorise about their past. For example, take a boss like Crystal Guardian. If you look on the wiki (http://hollowknight.wikia.com/wiki/Crystal_Guardian), the only lore you can find is a part of the hunter’s description: Heavyset miner of the Crystal Peak overcome by crystal growth. That’s all the information on a main boss. Just like him, many other characters and enemies only have a short entry in the Hunters Journal with basic information, maybe some lore of the Hunter himself but not the enemy. A lot of hidden information could have been left for curious players to find: titbits of lore, not necessarily of significance, but fun to discover nonetheless (e.g. food storages, dead bodies, paintings, …). This would require more time and funding though, and the developers already added so much detail that I cannot blame them.

In conclusion, I both love and dislike the lore. It adds depth and significance to fights and the characters are great, but it is too vague and barebones for my liking.

# Conclusion

Overall, Hollow Knight is one of the best games I have ever played. As a product with such a ridiculously low price, it is 100/100. As a piece of art among all the amazing games in history, probably around 95/100. The story, atmosphere, combat, bosses and platforming are truly masterful, and the game offers days’ worth of content and playtime. If you still haven’t bought it, please do. I want their next game to be even better and with as much funding as possible. Not to mention the Hornet expansion.

If you’ve found this essay interesting, please share your thoughts and discuss the things that I pointed out. Try not to be too harsh and remember that I am inexperienced in writing about and playing games and that these are my personal experiences and opinions. Thank you for reading this (overly) long opinion!

Many thanks to the Hollow Knight wiki for all data and lists, Joseph Anderson for the idea and some opinions, Snowman Gaming and Gamemaker’s Toolkit for lessons about game design and Team Cherry for making this amazing game.

Have fun and remember to…

# TL; DR

Report Article

## User Feedback

I would like to throw my two cents in here, because Hollow Knight is a game I absolutely hate. I hate it because it's one of the rare cases where a game is bad not on accident or through incompetence, it's bad *on purpose*.

For the record, I do like challenging games. I've beat DMC3 and 4. I've beat DMC4 on LDK and am making my way through SoS. I have about 800 hours total in Dark Souls 1,2&3. I've also played through and really enjoyed both Super Metroid and Symphony of the Night, i.e. the Metroid and the 'Vania of "Metroidvania". I do like hitting my head against a wall and feeling you get a little bit better each time.

Of course I wouldn't hate Hollow Knight, if it weren't otherwise excellent. The overall look, sound and visual design is 10/10. I don't think I need to say anything about it, you've laid it out perfectly in your post. In fact I agree with most of your post, save for the combat system and some of the charms. My overall problem is that the game's tougher challenges aren't congruent with the player mechanics.

Let's talk about the Queen's Gardens for a second. There is a platforming challenge section in a room above the room next to the stag station. It starts on the top left with a drop through a spike chimney onto a safe platform, then down and up around a spike wall while jumping on retracting platforms - we'll call this U Bend 1; down and up again - U Bend 2; and finally down and exit through the right through a spike corridor. You can also do it in reverse, depending on where you're going. Now, this is a pretty challenging platforming section. Generally when games have tight sections like this, they're built on a grid system that's carefully aligned with the various movement options of the main character, so a confident player who has mastered their movement can probably breeze through on their first try. Hollow Knight doesn't do that. The two platforms at the bottom of U Bend 1 and U Bend 2 are different distances apart. You have to learn exactly where to stand on each of them individually, so that your dash will take you precisely to the opposite platform and not hit the spikes. I've died more times to U Bend 2 than I did to the Mantis Lords. I've lost more health to this section than to the Traitor Lord. At the end, when you have to dash into the spike corridor, the platform isn't aligned with the floor of the corridor - you have to execute a precise short hop before you dash, otherwise you hit the spikes. In fact, you have to do the short hop no matter in which direction you traverse this section, as this platform is lower than both the floor of the corridor and the platform that precedes/follows it. Additionally, the various platforms and spike walls aren't really aligned with your jumping arcs, it's a section that's extremely hard to navigate with the movement you're given. I wouldn't have expected to see a challenge like this outside of a Kaizo Mario-style troll game. Of course, there is nothing really wrong with either the design of the section, or with the way your character controls, individually. Not designing on a grid is nice and lets you make really organic levels. Having floaty jumps and dashes can make the movement feel fluid and not stilted. The problem is when you combine all that with a tight platforming challenge that requires precise execution that everything falls apart. It's designed to make you fail and frustrate you until you learn the exact inputs required for this one single screen. It's not a skill challenge, it's just a stupid memorisation challenge.

In general I think the platforming in Hollow Knight is excellently constructed. I picked the section above as an example of the general problem with Hollow Knight - its built around a really simple and casual movement and combat system that doesn't allow for the kinds of challenges that Team Cherry wanted to put in. The controls have almost no precision, but the challenges permit almost no leniency. It's a disastrous combination that ruins what could have otherwise been an excellent game.

Let's talk about DMC4 for a second. The final boss of DMC4 - Sanctus, is kind of bad. He's bad because in a game built around stylish combat, you can't actually fight him most of the time. He's built around taking down his shield while avoiding attacks until you put him in a vulnerable state and have a couple of seconds to hit him before he shields again. Now, to take down his shields you have 3 options: 1. Wait until he does a safe attack and hit him; 2. Attack right away and pray to the RNG gods; 3. Be donguri990. Now, I'm not donguri and I can't wait forever, so the boss is mostly tedium and frustration punctuated by boringly wailing on him. At least his final phase, when he's at 10% health is interesting and engaging. So again Sanctus has the problem of his mechanics not working well with the character's mechanics. Dante ironically seems to work a bit better with him, but Dante is an absolute beast that can do literally everything.

So. Many. Bosses. In Hollow Knight are like Sanctus. The problem is less in the design of the bosses as it is in the design of the character's combat system and how extremely one-sided it is. From my experience, a good melee combat system needs at least one, preferably two of Dodge (iframes), Parry or Block. To be fair, you do gain a dodge once you get to the Abyss, but that really should have been a part of the basic dash. DMC in contrast gives you irames on the basic jump. Once you upgrade Nero you get three consecutive dashes and enough iframes to go make tea. Bayonetta rewards your timely dodges with time stop. Metal Gear Rising gives you parries. Metroid doesn't do any of those, but Metroid doesn't do melee combat. Hollow Knight has challenging, tight, melee combat and the only way you can interact with the enemy's attacks is to Not Be There. Again, there is nothing wrong with the system itself. I don't require my games to be challenging, over the top spectacle fighters, I can absolutely enjoy and appreciate casual games. The problem is that Hollow Knight has a casual combat system in which it tries to shoehorn highly challenging boss fights. It just doesn't work. It does work sometimes. Mantis Lords work. Their rhythm matches the basic movement set and the range of your basic nail and all their attacks are precisely telegraphed from enough distance that you can learn the patterns and dodge. Traitor Lord is also ok, but he does require something that will let you damage him from a distance, because there's nearly no way to hit him with your nail safely. I found sharp shadow + dream shield easiest. Oh and the first Hornet fight is easy peasy. The second Hornet fight though is where it gets awful. Hornet's attacks are again telegraphed with fair warning, but now she adds random hazards to the stage that you have to clear in order to dodge the rest of her attacks. The randomness of the hazards means that the challenge is not fair or balanced, it's just "repeat until RNG says you can pass". And Hornet 2 is one of the most fair examples. Too many other bosses just spam projectiles all over the screen in semi-random patterns that can leave you with no way out, because your only way to interact with them is to Not Be There and if you make one wrong step, well you're There and there's nothing you can do. It becomes a bullet hell with no "bomb" option. Oh yeah, maybe we could have had our basic heal spell generate a protective shield for the first half of its casting time? You can hold the button for half the time and have a shield, or keep holding it after the shield goes down and you sit there vulnerable but also heal. Balanced, fair, a good way to interact with enemy projectiles and attacks. Oh wait, that's a charm.

Hiding essential combat mechanics behind charms is not good game design. Yes, you can fix most of the problems above by equipping Sharp Shadow, Thorns of Agony and Baldur Shell. Those three should have been straight upgrades, with Shadow Dash being the basic dash, that you unlock by the time you finish City of Tears. Defeating Mantis Lords should just upgrade your nail with more range permanently. Some way to parry and reflect shots would be nice as well. All that, so that the rest of the game can be properly designed around an actual good combat system. Because right now, all it is is artificial difficulty and forced damage. We're left with installing mods that just bypass the broken combat system, so we can actually enjoy the game.

Hollow Knight could have been an enjoyable game. But it's not.

##### Share on other sites

Hi Mo6eB,

Thanks for the reply, you raise some very interesting points about the game, some of which I would like to argue against in this reply.

In the first section, your problem seems to be that the platforming sections are too hard for the movement system of Hollow Knight. Personally and from many others on forums, I think that the movement system is very precise compared to most games: almost every move is executed on the button press, there is no momentum (or 'float', granted the jumps aren't super-quick) and you have full air control at all times. Sure, it can be fiddly and hard to master, but since you said you beat Traitor Lord without losing much health (I assume), you should be pretty familiar with the controls by now. Have you done the white palace or path of pain? I don't think you did, but me and many others find these platforming areas to be very challenging, but definitely enjoyable and fair. However, not all movement systems are for everyone and I see how you can get frustrated by a platforming section (as I said in the article, I had to cheat a few times to skip past these when I did not yet have hiveblood).

You conclude with the claim that the game is too hard for the casual controls. I understand this is your opinion, but in my belief, most others tend to think the opposite. With a quick search I found these on popular review sites:

'fantastic controls' https://kotaku.com/hollow-knight-the-kotaku-review-1827367425

'pitch perfect controls' https://www.technobuffalo.com/reviews/hollow-knight-review/

In the bosses section, you compare the bosses to a boss you say is' built around taking down his shield while avoiding attacks until you put him in a vulnerable state and have a couple of seconds to hit him before he shields again'. Further on, you mostly talk about iframes, rng, projectiles etc. and do not elaborate on the subject. Unless you specify, I cannot really agree with this: except for Uumuu, who I agree is a bad boss, you can hit them at any time in a great risk-reward system. The stunned states are just a breather and a chance to heal or do extra damage.

Your main wish is to have a counter/parry/block system in the game. In my opinion, that would ruin the game entirely. I think you are comparing the game too much to melee combat games like Dark Souls that have block-hit type gameplay with less focus on dynamic or vertical movement. I would compare Hollow Knight to a radically different game to suit my explanation. Mario is a mostly a game about dodging projectiles and getting close to enemies to kill them. Now imagine a Bowser boss fight where you could parry his fireballs or had a roll with iframes to dodge through them. It would no longer be a fun dodging game and an exciting ascent in difficulty as you get closer and you have less time to react to his attacks. It would be a simple 'press the button at the right time' game, much less exciting than the original one. In conclusion, the boss fights in hollow knight are more of a platforming game type challenge with the added risk-reward element of having to go close and expose yourself to deal damage.

As a side note, you can use desolate dive to get a generous amount of iframes and deal damage if you have the soul. Furthermore, there is actually already a parry system in the game: you can parry sharp attacks with the right timing, though it is incredibly hard to pull off and not worth it.

While the healing system has its problems, such as being near useless in harder boss battles, I think having a permanent Bladur shell is definitely not a good idea. It takes away the risk element and deincentivizes good timing. You could just spam the button to not get hit and heal as much as you wanted. Sharp shadow is a unique playstyle that focuses on dashing through enemies - this is perfect for a charm but a strange addition as a normal ability. Thorns of agony is just bonus damage for making a mistake, I don't see why that should be a regular ability. As for the range increase, I would love that, but not sure if it would be balanced or not.

In conclusion, I think your main problem with the game is that the controls feel unfair when compared to the challenges. As a person who started this game as an incompetent player, I can assure you that if you spend time learning the controls, the game becomes just as rewarding and 'tough but fair' as the other games you mentioned. If you really feel that the game doesn't suit you, I respect your opinion, but I believe for most of us the combat and platforming systems are great as they are and do not need most of the changes you mentioned.

Thanks,

ArtemisGodess

##### Share on other sites

A game that is unplayable due to being too difficult is no better than a game that is unplayable due to crashing all the time, and it doesn't matter how "fair" this difficulty is.  Unplayable is unplayable.

That said, I actually finished Hollow Knight, so Hollow Knight is not unplayable - for me, with my skills and my abilities.

## Create an account

Register a new account

• ### Game Developer Survey

We are looking for qualified game developers to participate in a 10-minute online survey. Qualified participants will be offered a \$15 incentive for your time and insights. Click here to start!

• 0
• 0
• 4
• 3

• 14
• 30
• 9
• 16
• 22
• ### Similar Content

• By Pepsidog
I'm wanting to create a hybrid game between turn based and action.  I'm looking to create a system where the player has a list of attack or move options on their turn, but I want to add a skill minigame in order to make the game more engaging for non-strategists.  I figured some sort of minigame or something.  Any ideas are welcome.  Thanks in advance!

You are leading a team of a handful of programmers and artists to port a good-looking PS4 VR game to Oculus Quest. You have six months to complete it. Well? What's your first move? Let's bring Unity Addressables to the table.
You do realize you have to tackle quite many challenging tasks at once. I bet some might be personally more concerning than others, depending on your expertise level in each area. If you had to pick one that robbed your sacred sleep the most, which one would it be?
My initial guess would be this: above 70% of the readers would say CPU/GPU performance is the biggest concern when porting a title to Quest. And to that I say: you can very well be right. Performance is one of the toughest areas to improve on in a VR game. For optimizations of this kind, you require in-depth knowledge about the product, which is a time intensive process. Sometimes you even cannot just optimize further, which usually ends in dropping expensive gameplay or graphics features. And not meeting people's expectations is a dangerous place to be.
Performance, performance, performance.. The word might let some chills go down your spine. What can you expect in this regard from the Quest platform? How does it perform? The thing is, if you have had some development experience in it, you will probably know that in spite of being mobile hardware, it is astonishingly powerful.
But Ruben! Don't give me that crap. I tell you my phone slows down significantly the time I open a second browser tab. How dare you say mobile platforms can be so performant?
I read your mind, didn't I? The massive difference lies on Quest's active cooling system, which gives it a huge boost on its attainable CPU/GPU hardware levels that no other mobile platform can offer. It is a powerful fan that will prevent your hair from gathering dust and avoid melting the CPU together with your face (the GoT crown scene comes to mind).
Additionally and on the side of the Quest software, the more specialized OS is better optimized for virtual reality rendering (surprise) than the generic Android variant. Mobile hardware has been catching up with standalone platforms so quickly in the last few years.
But, at the same time, I cannot deny that our task of constantly rendering at 72 fps will prove to be challenging, especially for VR ports coming from high-end platforms. To be more precise, when we talk about the Oculus Quest, you have to picture yourself a Snapdragon 835 with a screen, a battery, four cameras and a fan.
What could look like a disadvantage can actually be thought of as an edge. This mobile platform is a well researched piece of s*** hardware. One can say there are a myriad of known tricks you can pull off to quickly reduce the CPU and GPU load up to an acceptable point. If it is of your interest, you will be able to read about it in upcoming posts. As of now, we will take performance out of the equation for this post.
What might catch your attention in our challenge is that, compared to the PS4, there is a single hardware characteristic literally halved on the Quest: the RAM capacity. That's right, we go from 8 to 4GB RAM. This is an approximation since, in both platforms, the operating system does not allow you to use it all so it can keep track of a few subsystems for the ecosystem to work. On the Quest you will be able to roughly use up to 2.2 GB of RAM before things get messy.
Ruben, what do you exactly mean by messy? The thing is, proper memory handling is crucial for your game. This is so because you have two constraints:
Hard memory constraint: if you go above a certain threshold, the OS will just kill your game Soft memory constraint: above another certain limit, the OS might decide to kill your game when your user minimizes your game, takes the headset off or you go out of the Oculus Guardian area Obviously, you do not want any of the two to happen in your game. Can you picture an angry player who just lost his last two hours of gameplay? Yes, they will go to your store and nothing pretty will come out of their mouth.

Disgruntled Player - RUN!
The thing is, the guaranteed availability of 2.2GB of RAM is not much, honestly. It's usually not a problem for new projects where you track your stats constantly from the beginning, but it definitely is an issue for a port to a severely downgraded hardware.
If you dealt with similar ports in the past, you will quickly realize how extremely challenging it can become to decrease your game's RAM budget by half. It grandly depends on how well the game architecture was prepared for such a change, but in most cases this will temporally transform you into a tear-producing machine.
The most popular strategies to reduce memory pressure include tweaking asset compression settings, optimizing scripts, reducing shader variants, etc.. Depending on the specifics of your project, tweaking texture import settings is your first go-to solution, but if you need to you can also resort to compressing meshes, animations and audio. The problem is that those techniques are usually complex in nature and will have a ceiling limit.
Not all platforms support the same import settings; targeting several devices will dramatically increase your build pipeline overhead, not to mention QA, art, design and programming complexity. Does this Android device support ASTC, or just ETC2 (if at all)? Oh, we also want to build 64 bit builds, but also keep the players on the 32 bit versions. How many split-APKs should we create, and worse, manage and test, for each update we do on the game? You want to make your life easier, so you should not rely exclusively on these techniques.
We would like to go further. As usual, we want to keep things as simple as possible (TM), especially if you are doing a port. Redesigning the entire game for performance's sake is a worse option than just not porting it. For that matter and in today’s topic, I will offer you one of the biggest gains for the buck: I will show you how to halve a project's memory budget in matter of hours. Boom!
Wouldn't that be awesome?
Go ahead, go ahead... ask me: is it really possible for me? The answer is: it depends on your starting point, but in my experience, YES. Unity Addressables can be of a great value here. The catch? You must be willing to put in the work and to master the process. But this workflow will earn you the title of employee of the month.
If you are interested, keep reading.
In this post you and I will go through the journey of moving from a traditional asset management to an addressables-based asset management system. To illustrate the process,  we will port a simplified old-school project to the new era of Unity Addressables.
Now, you might ask me: why don't you just show me the real-life work you did?
In a non-competitive world I would just show you all the material I created. In the real world though, that is likely to get me canned. And worse, busted.
What I will do instead is to offer you my guidance so you and I iterate on project that absolutely represents the difficulties you could find tomorrow in your next project. And we will do so by first welcoming Unity's Addressables to our family of suggested packages.
In this blog post I will get you started in Addressables ASAP so you can implement your own Unity Addressables system in a matter of minutes.

Time to pay attention to this very important section. Our goal is to diagnose easy memory gains and implement them fast. There are several ways to do this, but one of the most powerful yet simplest methods to pick the low-hanging fruits by loading the initial scene and opening up the profiler. Why this?
Because an unoptimized game architecture can frequently be diagnosed at any point during gameplay, so the quickest way to check this is by profiling the initial scenes. The reason for this is the common over-usage of singleton-like scripts containing references to every single asset in the project just in case you need it.
In order words, in many games there is usually an almighty script causing an asset reference hell. This component keeps each asset loaded at all times independently from whether it's used or not at that time point.
It depends. If your game is likely to be constrained by memory capacity, it is a very risky solution, as your game will not scale with the amount of assets you add (e.g. think of future DLCs). If you target heterogeneous devices, such as Android, you don't have a single memory budget; each device will offer a different one, so you settle for the worst case. The OS can decide to kill your app at any point if our user decides to answer a quick message in Facebook. Then the user comes back and surprise, all their game is gone for good.
How fun is that?
Zero. Unless you are overworked and sleep deprived, situation which might grant you a desperation laugh.
To complicate matters further, if later on you decide (or someone decides for you) to port your game to another less powerful platform while keeping cross-play working, good luck. You don't want to get caught in the middle of this technical challenge.
On the other side, is there a situation where this traditional asset management solution works just fine? The answer is yes. If you are developing it for a homogeneous platform such as PS4 and most requirements are set from the beginning, the benefits of global objects can potentially outweigh the extra added complexity of a better memory management system.
Because let's face it: a plain, good old global object containing everything you need is a simple solution, if it works well enough for you. It will simplify your code and will also preload all your referenced assets.
In any case, the traditional memory management approach is not acceptable for developers seeking to push the boundaries of the hardware. And as you are reading this, I take you want to level up your skills. So it is time for just doing that.

Requirements for our Unity Addressables project
If you are planning on just reading this blog entry, your screen will suffice. Otherwise, if you want to do this along with me, you will need:
Functional hands Overclocked brain Unity 2019.2.0f1 or similar The level 1 project from GitHub (download zip or through command line) Willingness to get your hands dirty with Unity Addressables The git repository will contain three commits, one per skill level-up section in the blog (unless I messed up at some point, case in which I will commit a fix).

Level 1 developer: Traditional asset management
We are starting here with the simplest asset management method here. In our case, this entails having a list of direct references to skybox materials in our component.
If you are doing this with me, the setup is a simple 3 step process:
Download the project from git Open the project in Unity Hit the damn play button! Good, good. You can click a few buttons and change the skybox. This is so original... and boring. I take it, no Unity Addressables yet.
In a short moment you and I will see why we need to endure this short-lasting boredom.
To start with, how is our project structured? It pivots around two main systems. On the one side, we have our Manager game object. This component is the main script holding the references to the skybox materials and switches between them based on UI events. Easy enough.
using UnityEngine; public class Manager : MonoBehaviour { [SerializeField] private Material[] _skyboxMaterials; public void SetSkybox(int skyboxIndex) { RenderSettings.skybox = _skyboxMaterials[skyboxIndex]; } } The Manager offers the UI system a function to apply a specific material to the scene settings through the usage of the RenderSettings API.
Secondly, we have our CanvasSkyboxSelector. This game object contains a canvas component, rendering a a collection of vertically-distributed buttons. Each button, when clicked, will invoke the aforementioned Manager function to swap the rendered skybox based on the button id. Put in another way, each button's OnClick event calls the SetSkybox function on the Manager. Isn't that simple?
Once we're done daydreaming how immersive it was to play X2, it's time to get our hands dirty. Let's launch the multisensory experience and open the profiler (ctrl/cmd + 7; or Window - Analysis - Profiler). I take you are familiar with this tool, otherwise you know what to do with the top record button. After a few seconds of recording, stop it and see the metrics for yourself: CPU, memory, etc.. Anything of interest?

Performance is pretty good, which is nothing surprising considering the scope of the project. You could literally turn this project into a VR experience and I assure you that your users will not fill any of the bile buckets that so many players filled when playing Eve: Valkyrie.

In our case, we will be focusing on the memory section. The simple view mode will display something as depicted below:
Level 1 Asset Management - Simple Memory Profiling
The numbers on the texture size look pretty oversized for just displaying a single skybox at any given time, don't you agree? Surprise incoming: this is the pattern you will find in many unoptimized projects you are likely to suffer lead. But heck, in this case it's just a collection of skyboxes. In others, it will be more about characters, planets, sounds, music. You name it, I have it.
Time for magic. Let's switch the memory profiler to detail mode. Have a look!
Level 1 Asset Management - Detailed Memory Profiling
Holy crap, what happened there? All skybox textures are loaded in memory, but only one is displayed at any given time. You see what we did? This rookie architecture produced the whoooooooping figure of 400mb.
This is definitely a no-go, considering this is just a small piece of a future game. Addressing this very problem is the foundation for our next section.
Come with me!
Summary:
Traditional asset management entails direct references Therefore you keep all objects loaded at all times Your project will not scale this way
Level 2 developer: Unity Addressables workflow
In video- games you start at level 1, which is great, but once you know the gameplay rules it is time to leave the safe city walls in our quest to level up. That is exactly what this section is about.
Grab the level 2 project now.
As we previously saw in the profiler, we have all skyboxes loaded in memory even though only one is actively used. That is not a scalable solution, as at some point you will be limited on the amount of different variations of assets you can offer to your players. An advice? Don't limit the fun of your players.
Here, let me help you. Take my shovel so we can dig the so needed tunnel to escape the prison of traditional asset management. Let's add a new fancy tool to our toolbox: the API of Unity Addressables.
The first thing we need to do is to install the Addressables package. For that, go to Window → Package Manager, as shown below:

Unity Package Manager - Unity Addressables
Once installed, it's time to mark the materials as addressables. Select them and activate the addressables flag in the inspector window.
Level 2 Asset Management (Unity Addressables)
What this will do is to ask Unity politely to include those materials and their texture dependencies in the addressables database. This database will be used during our builds to pack the assets in chunks that can easily be loaded at any point during in our game.
I'll show you something cool now. Open Window → Asset Management → Addressables. Guess what's that? It's our database screaming to go live!
Level 2 Asset Management (Unity Addressables) - Main Window
My dear reader: that was the easy part. Now comes the fun part.
I want you to pay a visit to an old friend of ours from the previous section: Sir Manager. If you check it, you will notice it is still holding direct references to our assets! We don't want that.
We are teaching our manager to use indirect references instead - i.e. AssetReference (in Unreal Engine you might know them as soft references).
Let us do just that, let's beautify our component:
using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class Manager : MonoBehaviour { [SerializeField] private List<AssetReference> _skyboxMaterials; private AsyncOperationHandle _currentSkyboxMaterialOperationHandle; public void SetSkybox(int skyboxIndex) { StartCoroutine(SetSkyboxInternal(skyboxIndex)); } private IEnumerator SetSkyboxInternal(int skyboxIndex) { if (_currentSkyboxMaterialOperationHandle.IsValid()) { Addressables.Release(_currentSkyboxMaterialOperationHandle); } var skyboxMaterialReference = _skyboxMaterials[skyboxIndex]; _currentSkyboxMaterialOperationHandle = skyboxMaterialReference.LoadAssetAsync(); yield return _currentSkyboxMaterialOperationHandle; RenderSettings.skybox = _currentSkyboxMaterialOperationHandle.Result; } } What happens here is the following:
Keep in mind: this code is not production-ready. Do not use it when programming an airplane. I decided to favor simplicity over robustness to keep the matter simple enough.
Enough with explanations. It is time you and I saw this in action.
If you would be so kind to perform the following steps:
In the addressables window, cook the content (build player content) Then make a build on a platform of your choice Run it and connect the (memory) profiler to it. Protect your jaw from dropping.
Level 2 (Unity Addressables) - Build Player Content
Level 2 Asset Management (Unity Addressables) - Memory Profiler
Isn't asset cooking delicious?
I like happy profilers. And what you saw is the happiest profiler the world has ever seen. A satisfied profiler will mean several things. For one, it means happy players playing your game in a Nokia 3210. It also means happy producers. And as of you, it means a happy wallet.
This is the power of the Addressables system.
Addressables which comes with little overhead on the team. On the one side, programmers will have to support asynchronous workflows (easy-peasy with Coroutines). Also, designers will have to learn the possibilities of the system, e.g. addressable groups, and gather experience to make intelligent decisions. Finally, IT will be delighted to set up an infrastructure to deliver the assets over the network, if you opt to host them online.
I have to congratulate you. Let me tell you what we have accomplished:
Appropriate memory management. Faster initial loading times. Faster install times, reduced in-store app size. Higher device compatibility. Asynchronous architecture. Opening the door of storing this content online → decoupling data from code. I would be proud of such a gain. It's for sure a good return on investment.
Oh, and make sure to mention your experience with Addressables in job interviews.

INTERMEDIATE: Instancing and reference counting. Read on it my blog post for information on this topic.

Summary:
Addressables-based asset management scales just well Addressables introduces asynchronous behavior Do not forget to cook content on changes or you'll give your game a pinkish tint!

Level 3 Asset Management (??) - Content Network Delivery
Level 3 Asset Management (??) - Content Network Delivery
In the previous section, we achieved the biggest bang for the buck. We leveled up our skills by moving from a traditional asset management system to an addressables-based workflow. This is a huge win for your project, as a small time investment gave your project the room to better scale in assets while keeping your memory usage low. That accomplishment indeed made you step up to level 2, congrats! However, one question is yet to answer:
Is that it?
No. We barely scratched the surface of Addressables, there are further ways to improve your project with this game-changer package.
Of course, you do not have to memorize all the details regarding Addressables, but I highly suggest you to have an overview of them because down the road you are likely to encounter further challenges and you will be thankful to have read a bit further. That's why I prepared an extra short guide for you.
There you will learn about the following aspects:
The Addressables window: the details matter Addressables profiling: don't leak a (memory) leak ruin your day Network delivery: reduce the time-to-play user experience Build pipeline integration Practical strategies: speed up your workflow, trash your 10-minute coffee breaks
And more importantly, answer questions such as:
What is the hidden meaning behind Send Profiler Events? How useful is the AddressableAssetSettings API? How do I integrate this all with the BuildPlayerWindow API? What's the difference between Fast Mode, Virtual Mode and Packed Mode? In order to grab the level 3 guide check out my blog post
• By Ey-Lord
Hello everyone

I am here to gather your opinion, remarks, ideas or any constructive criticism you may have about what I am going to present. Don’t be shy!

A bit of background:

I am working alone on an indy web-based game, a simulation of RPG (idle game) where the player controls a group of 4 characters that he can sent into battle and that will fight automatically based on some AI preference that are similar to the FF 12 system (but more complex / powerful). He then earns some experience and resources that he can use to improve his unit’s gear, talents and skills. He has a lot of control on what skills his characters will use and how/when.

What brings me here today:

The AI of Monsters. I have the AI settings for players covered (basically a bunch of if/then/and/or/else settings that he can combine and order so that his units will act as he intends in battle). I’ve been working on the AI of monsters for quite some time, made a long break and came back recently to it.

Short description of the battle system:

No movement involved. Battle is fully automated. Players setup its units AI settings before battle and monsters are controlled by a separate AI. This is a 4v4 battle, like FF7 with some kind of ATB and any time a unit fill its ATB, it can play and the then the next unit who will fill it will play, etc. The player is completely free of his playstyle and may create very offensive group or very defensive ones. 4 healers or 4 tanks is completely possible.

The battle system is very complex and allows for very varied and sometimes unusual strategies, like killing your own allies to proc an “on death buff” that will be devastating for the opponent.

What I want for my AI?

It needs to be fun to fight against and challenging. Ideally, I would like an AI as smart as possible (not omniscient but thinking as a human would). I know that a super-smart AI is not always the best way to make a game fun or challenging but in the context of my game, this is the result I want to achieve. It may seem unfair to have the AI try to kill your squishy while your tank is standing right there but my class design gives the tools to players to counter that so it’s not an issue (tanks are not purely aggro based for example). I want players to always be challenged by AI moves and that they must carefully think about their strategy because if they leave a big hole in it, I want the AI to exploit it.

In practice, it means a few requirements:

No dumb decision / do not fall into obvious player’s traps Exploit obvious flaws of the opponent Act in coordination when appropriate with other units Able to find who should be their focus in the player’s team (some notion of threat) Find the best move to use and if there is some kind of combo possible, use it

These requirements are harder to meet than it looks. The issue is the sheer number of different mechanisms and strategies available to players and to monsters as well. For example, there are many cases where killing or attacking a player unit might be detrimental (units that return damages or that gain power when you hit then for example).

What I have tried before?

I have tried or at least reviewed many different AI concepts so far.

-          A simple copy of my player’s AI system (hierarchical if/then/else). It was easy to script as I already have the UI in place for players so I can quickly define a basic AI for any new monster’s group. The main drawbacks are that it needs to be written for every monster group, it does not allow smart targeting and cannot find the best target or the best skill to use. It will also make dumbs decision as the targeting options cannot assess threats at all.

I’ve rules out planners since for purely selecting the best pair of (skill, target), they do not seem to match my needs.           (H)FSM or BT does not seems to match my needs as monsters do not have states / transition condition that can lead to something useful for me.        I’ve ruled out aNNs as they might, with proper training, be able to find the best action at a given time but it’s very tedious to implement and will not solve my need of finding combo or coordinating with other units very well. (plus, let’s be honest, I’d be a bit out of my depth to program them)           I have spent an extensive period of time trying with tree searches. Mainly: monte-carlo with random sampling and came to the conclusion that due to the complexity of my battle system, it is excessively costly to compute any kind of reliable data this way.
-        My current AI system is a version of my first one (the same as the players) but with access to some “smarter” targeting function that in theory allow to choose the best target. These functions work by gathering data for thousands of simulated fights during the AI time to play (1 second). It’s a first step to find the best target but not very accurate (lots of big flaws that can be exploited by players) and it is very time consuming and that is something I’m trying to get away from. I do not want to use 100% of the players CPU as I do now.

What is my latest idea?

I started to study more in-depth the Utility theory as described by Dave Marks (I read his book and watched his GDC AI lectures as well). I liked the idea. I like that I can start on something relatively simple and add more considerations as things progress to handle more and more situations. While my work began as something very close to utility theory, it evolved a bit afterward. Here is what I plan on doing to compute a unit’s best course of action:

A – Score every of its move (each move is a pair [skill, target]).

B – Chose the move according to a selection strategy (highest score, weighted random, random amongst the top scores… lots of different selection algorithm can be used there).

So far, easy, right? Let’s dig deeper into our first phase of scoring (A), which is the hard part. For all the damage or healing skills:

Step 1: The final scoring of the move [skill,target] will be function of the a “Survival” scoring for the player team and for the enemy team. An example of this relationship could be: Adding all the survival scores of each unit in Team A and divide the result by the addition of all the survival scores for each unit in team B.

Step 2: The survival score of each unit will be its Health after the move we are evaluating, divided by the total damage per turn that we estimate other units can deal to her (minus the total heal it ca receive). [This a step where we can process damage and heal over time as well]

Step 3: This damage per turn estimation will be, initially, the sum for every unit in battle of the damage or heal per second it can deal to that unit. For example: If I’m alone vs 2 bad guy that can deal 1 dmg/turn and if I can deal 1 heal/turn, the damage per turn estimation against me will be 2-1 = 1. [This is not optimal since we are counting the damage of each unit once per enemy unit but it’s a start]

Step 4: To compute the DPS or HPS of each unit, we review the unit’s skills and compute their output against the unit we want to evaluate it against. From that, we construct a skill sequence to maximize the damage output and once we got the optimal skill sequence, we can compute its DPS or HPS output and pass it along for Step 3.

It might seem like a lot of work, since, in a world with only damage or healing skills, the DPS or HPS sequence of each unit will be the same in every situation and as such only the damage done or healing done by the skill evaluated would be enough. But…

The tricky part comes from buffs and debuffs. If we use the above algorithm, (de)buffs that changes the damage or healing someone does or receive will be evaluated correctly as it will change the damage or heal per second output of units and it would affect the survival score and the final scoring. That is why I chose to include DPS and HPS computations for each unit for each move.

This is all fine until we consider (de)buffs that changes the power of other (de)buffs. Like: I cast a buff that double the length of all my future buffs. My algorithm can’t evaluate it correctly. It’s a situation that will be common enough in my game and I want my AI to deal with it. Note: there are more complex situations where a unit could buff a buff that buffs a buff that buff a buff [….] that will end-up buffing a damage or healing skills, but those cases will not be addressed as they will hopefully be rare and too cumbersome to compute anyway.

So, my goal is to score properly buffs that:

Buffs the damage or healing output of someone           Buffs that buffs a skill that does the above

L    Long story short of how I am doing that. I’m using my initial algorithm but while also estimating damage or healing per second change for each dps or hps sequence.To do that I’m evaluating every move of the unit (or every unit in case of AoE but lets keep it simple with single target) that is targeted by the buff. So, we are switching PoV here compared to the initial unit we are evaluating (unless the move evaluated is buffing itself)

-          I’m doing the above in 2 situations:

o   A : After a cast of the buff skill I’m evaluating

o   B : Without the cast of the buff, just like if it was that unit’s turn to play

-          Using a sort of min/max approach: if the unit targeted by the buff is an ally, we will take the best branch of our tree in A and compare it with the same branch (pair [skill,target]) in B. If the unit targeted by the buff is an enemy, we want to lower their maximum score and will select the tree branch that does that in A to also compare it with the same branch in B.

-          The information we extract here are DPS or HPS delta for each sequence of DPS/HPS for each unit vs each other unit.

-          Then, we go back to our steps 1 to 5 and compute our scoring for the move (buff) while using our new dps/hps deltas to get better and more accurate dps/hps sequence for units affected by the buff.

This is basically it. I’ve ran a manual version of the algorithm in 2 different battle settings to test it and see if it gave good results. It worked. Not flawlessly but it worked. Lots of cases will still require tweak and additions to the basic idea but I think its promising. (taunts and CCs are not easy to deal with but it’s manageable)

What I like is that I can add more considerations later (as in the utility theory) like: resource cost, general unit strategy (cleave or focus), behavior (careful, lunatic, reckless). While this will still be a bit time consuming it should be a good order of magnitude faster than my current AI. It also does not prevent me from adding hardcoded AI move if I want to “script” more some monsters. Debugging and tweaking might be a bit painful though, especially when fights will involve lots of skills & stats but that’s an issue that most AI for my game would likely have anyway.

To come back with my initial goals:

No dumb decision / do not fall into obvious player’s traps
o   Not perfect but it should choose the best target whenever possible

Exploit obvious flaws of the opponent
o   Same as above

Act in coordination when appropriate with other units
o   This can be done simply by adding weight to some targets or computing moves for all units of a group before deciding which one to take (for example to take the best move vs a specific unit, on average)

Able to find who should be their focus in the player’s team (some notion of threat)
o   It will naturally focus the unit who is the easiest to kill and debuff or CC the ones that deal the more heal/damage. But, to better solve this, we will need to add other considerations to the AI scoring process, It should not be *too* hard

Find the best move to use and if there is some kind of combo possible, use it
o   Combo are very often in the form of buff/debuff setup before an actual damaging or healing skills and my AI can compute up to a 3 moves combo (buff > buff > skill that dmg or heal) which should cover most cases.

I’m quite happy with my initial tests. I’m not going to be coding it now. My goal was to reflect on the subject on paper and try to see if designing my AI would be a roadblock or not for my project. There are a few other area I want to design and take time to really think about before getting back to my project full time. I’d love to hear your toughs and feedbacks about my AI ideas. Do you see huge roadblocks I’m missing? Does it sound ok to you?

If you read that far…. thank you and I can"t wait to hear from you guys😊

• By G-Dot
Hello everyone! I've decided to implement a destructible enemies system.

Description:
When bullet hit enemy in specific part of his body(arm fo example) armour, which covers that part of body, will fall off. Enemies in my game are robots so this means that when shooting them certain plates of their armour will fall off. All enemies will have a different amount of armour plates

My solution:
The only solution I came up with is to make an actor with a static mesh and attach it to the bones of enemy's skeletal mesh. When bullet hit that actor it detaches and fly away with add impulse node.

Question:
Maybe there is a better solution, which I'm missing and it's more efficient.
• By mujina
What could be a way of avoiding using inheritance and virtual methods when designing components for an entity-component-system?
I'll be more specific about my design issue:
I currently have different classes for different kinds of colliders (let's say, CircleCollider and LineCollider).
My system that checks for collisions and updates the positions and/or velocities of my entities should be something like:
for entity_i in alive_entities { collider_i = get_collider_of_entity(entity_i) // components of same kind are stored contiguously in separate arrays transform_i = get_transform_of_entity(entity_i) for entity_j in alive_entities { collider_j = get_collider_of_entity(entity_j) transform_j = get_transform_of_entity(entity_j) if check_collision(collider_i, collider_j) { update(transform_i) update(transform_j) } } } my problem is that I don't have a generic get_collider_of_entity function, but rather a function get_circle_collider_of_entity and a separate one get_line_collider_of_entity, and so on. (This happens because under the hood I am keeping a mapping (entity_id -> [transform_id, sprite_id, circle_collider_id, line_collider_id, ...]) that tells me whether an entity is using certain kinds of components and which are the indices of those components in the arrays containing the actual components instances. As you can see, each component class is corresponding to a unique index, namely the index position of the array of the mapping described above. For example, transforms are 0, sprites are 1, circle colliders are 2, line colliders are 3, and so on.)
I am in need to write a system as the one in the snippet above. I can write several overloaded check_collision functions that implement the logic for collision detection between different kinds of geometric primitives, but my problem is that I am not sure how to obtain a generic get_collider_of_entity function. I would need something that would get me the collider of an entity, regardless of whether the entity has a circle collider, a line collider, a square collider, etc.
One solution could be to write a function that checks whether in my internal entity_id -> [components_ids] mapping a certain entity has a collider at any of the indices that correspond to colliders. For example, say that the indices related to the collider classes are indices 10 to 20, then my function would do
get_collider_of_entity (entity_id) { for comp_type_id in 10..20{ if mapping[entity_id][comp_type_id] not null { return components_arrays[comp_type_id][entity_id] } } return null } This could turn out to be pretty slow, since I have to do a small search for every collider of every entity. Also, it may not be straightforward to handle returned types here. (I'm working with C++, and the first solution - that is not involving inheritance in any way - would be returning a std::variant<CircleCollider, LineCollider, ... all kinds of components>, since I would need to return something that could be of different types).
Another solution could be having some inheritance among components, e.g. all specific component classes inherit from a base Collider, and overrride some virtual collide_with(const Collider& other) method. Then I would redesign my mapping to probably reserve just one index for colliders, and then I would actual colliders in a polymorphic array of pointers to colliders, instead of having a separate array for CircleColliders, another for LineColliders, and so on. But this would destroy any attempt to be cache-friendly in my design, wouldn't it? That's why I am looking for alternatives.
A third alternative would be to just have a single, only, Collider class. That would internally store the "actual type" ( aka what kind of collider it is ) with dynamic information (like an enum ColliderType). Then I would have all colliders have all members needed by any kind of colliders, and specific collision detection functions which I can dispatch dynamically that only use some of that data. (Practical example: a "Collider" would have a radius, and the coordinate for 2 points, and in case its type was "circle" it would only make use of the radius and of one of the 2 points - used as the center -, while if it was a "segment" it would only make use of the 2 points). My gut feeling is that this would bloat all colliders, and, even if the bloat could be reduced - using unions in some smart way for storing members? I wouldn't know how -, then still the design would be pretty brittle.
I'm clueless and open for ideas and advice! How do you handle in general situations in which you have components that can be naturally modeled as subclasses of a more generic component class? Inheritance? Smart hacks with variants, templates, macros, custom indexing? Dynamic "internal" type?
×