The map got quite big.
This past week I continued the greybox level design. I got to the final stages of my greyboxing, where all I need to finish is the boss room, and then I'll move on to iterate on the layout and enemy positioning.
I had fun making a very large hall with columns, made a bridge, put a last tower with stairs where it takes you back to the beginning of the level (and to the boss area), and place the usual lights to guide the player.
Also in Unreal Engine thanks to Lumen is very convenient to be able to see the bounce of lights in dark areas right away, without having to do the usual slow bake lighting of static lights.
I also had to move a whole portion of the level to get the last tower to be near a particular area, but the fact that each room is a Group actor (each room is a group of walls, floors, lights and props), moving each room is like moving Lego blocks, it's very modular, and it took me just 5 minutes.
This past week I continued with greyboxing level design, completing the boss room.
I started placing enemies in the map. To test the mechanics of the enemies, I am recreating the Boletaria level from Demon Souls. I put in Navmesh and redid some stairs, as they were too tall and narrow and the default Navmesh would not take them (I made them at least 100cm wide and 0.25 high). I positioned the enemies and tweaked their sight radius (some enemies should not trigger from a distance, so as to catch the enemy off guard for example).
Next step will be to create destructible props so it can hide behind various things (enemies, secret passages, traps etc.)
Greyboxing level design continues, this time with the implementation of destructibles. I made destructibles as fractures.
They can be destroyed when the player attacks them. Same logic was done for enemies, with the addition that if AIs have a destructible in front of them they always have to hit it. Also, I changed the player dash again. I had lowered the dash speed since it was too fast, creating a lot of motion sickness. Prevously, to prevent motion sickness, I had lowered it too much and the dash was very boring. I raised the dash speed again, but this time eliminating the motion sickness by greatly reducing the dash time (from more than half a second to ¼ second), I was inspired by the dash in Doom Eternal.
Faster dash could make you too much stronger, so I greatly increased the consumed stamina for dash, now you can't dash 2 times in a row, and you have to wait 1-2 seconds before you have the stamina needed to dash again. Also I tweaked the Lunge attack, since this also was creating motion sickness due to the combination of high speed and dash time.
This week I stopped with the greybox to implement some gameplay things.
I added a new enemy, a soldier who shoots arrows from a distance. The arrows also destroy destructibles.
I also made some improvements to destructibles, including removing the collision with the player and enemies right after it's destroyed. Plus you can now destroy destructibles using dash.
I placed a hole in the level, where there is a collider at the bottom that kills the player and enemies.
I spent the rest of the time placing various destructibles in the level.
This week I implemented a new enemy, the Soldier Swordsman. These enemies have much more health than the normal enemies. They have a chance to throw a Firebomb, which creates an area damage.
At the moment their attacks consist of two slow horizontal swings, and a side step where they can block player attacks (not implemented for now).
In addition, I created other destructibles such as chairs and tables, and placed them in the greybox level together with the Soldier Swordsman.
This week I devoted it completely to gameplay. I introduced a visible health bar above enemies, with a second yellow bar to indicate the damage of the last attack.
Also, I added a strong attack, which, besides being an attack with a higher range, does much more damage.
I need to finish tweaking the attack, as it's too safe for me, since you can charge the attack from a distance with a nice range. Probably the charge of the attack will happen during a small dash forward, so that it is more unsafe to use it.
Also, I made several tweaks to the enemy balance, changing the health of enemies so that the Strong Attack damage has a significant impact, and reduced the hitbox of some weapons since enemies tended to hit you a little too much from a distance.
I finally managed to post a new video about my progress! These weeks I implemented a couple of gameplay mechanics. I added the Parry, since in a serious combat system I think it’s an important mechanic.
The parry is active in the first 10 frames of the parry animation, in which any attack is parried, leaving the enemy in a state of knowback and possible counterattack by doing a Frontstab.
For the Parry animation, I edited an animation via keyframe inside Unreal Engine so that the player’s left arm moves to the left.
For the frontstab instead, I added some camera shakes, adding some forward-backward spring shakes, some rotational swings, and a slight camera zoom by tweaking the FOV.
Backstab mechanics, on the other hand, work similarly to Frontstab but must be done behind the enemy. To be valid, the player must be no more than 60 degrees behind the enemy.
So far I have used the same animation as Frontstab, but with an addition of an enemy throw. I don’t really like the enemy throw animation (a sort of a forward roll), I’ll probably replace it with a throw animation.
In the future I will fix the animation of the stabbed sword, I would like the hand to turn the sword in the flesh of the enemy, kind of like what happens in the Backstab animation of Demon’s Souls.
In addition, I changed the animation of the Hit Block knockback of the enemy, so that it is more distinguishable from when the enemy received a parry.
This past week I implemented the rolling boulder, one of the traps in the level. It's a cinematics instead of being a physical object, because I wanted full control over its movement.
Then I made a modification to the Soldier Swordsman, some soldiers are throwing firebombs instead of going at the enemy. They are often placed in high areas to endanger the player in certain areas.
I also made changes to some parts of the level, such as widening the stairs where the rolling boulder will have to fall and finished placing enemies in the first tower of the level, especially enemies that throw firebombs at you.
In the gameplay video I didn't include the rolling boulder since I haven't finished adding it in the greybox level yet, it will be for the next video.
I have included a new enemy, the Soldier Spearman. Compared to the normal Soldier, he has a spear that allows him to strike from a greater distance. He has 3 attacks: the Quick Jab, a Heavy Attack and a running attack.
In addition, I have started to implement another enemy, the Knight, but I am still in the early stages.
I have also added the Rolling Boulder in the Greybox map, moving it using a Sequence, and placed more enemies in the map.
I have fixed various various bugs, but I still need to fix some of them (also visible in the gameplay video).
This past week I implemented the Stunlock: in particular cases (like when the player’s stamina is over), an enemy's attacks causes you to temporarily be paralyzed, leaving you vulnerable.
Stunlock time is about 2 minutes, but it can be canceled with a Dash (reducing the Stunlock by half a minute), so you can dodge some of the enemies' attacks at the last moment.
I put a slight camera shake and an animation where the sword and shield disappear on screen to emphasize the Stunlock.
In addition, I added a new enemy, the Silver Knight. It will be a kind of mid-level Boss, and there will be only one in the game.
It has 3 attacks: Heavy, Thrust and a Swing Combo attack. He often walks, but if the player gets too far away, he starts running.
It's not completed yet, I'm just finishing implementing a couple more features (like the ability to send you into Stunlock and the ability to heal himself when his life is low).
I introduced a new enemy, the Green Knight, who is a stronger version of the Silver Knight, but uses a spear instead of a sword.
He has different attacks: a running attack where he strikes multiple times and a winding overhead thrust, which has a long but slow range, and finally a forward thrust.
Also, as with the Silver Knight, it shares blocking attacks with shield, a shield bash attack and a cure animation.
The block has a probability that it can be followed by a Heavy attack or a Shield Bash.
The Shield Bash is a shield attack that puts the player in stunlock. In this state the player can only cancel the stunlock animation with a dodge.
The cure happens if the Knight is with less than 50% health. The less health he has the more likely he will try to cure himself. The cure restores about 75% health. If he is too close to the player he will try to move away.
The cure animation is just over a second long so the player can hit him before he can cure himself. If he get attacked during the heal, the Knight will not try to heal after few attacks, and then he will try to heal again.
Also, I placed the Silver Knight in the Greybox map and tested it.
This weeks I implemented 2 new enemies.
The first new enemy is the Soldier Axeman. Like the Soldier Spearman, the Axeman is a variation of the Soldier that uses a battle axe with a shield. The Axeman has similar attacks to the Swordman but has slightly more health and an overhead attack that can perform at the end of a combo or while running. The Soldier Axeman can throw firebombs like other soldiers.
The second new enemy is the Silver Knight with Claymore. It is a variant of the Silver Knight. He does less damage and has less health, but has a greater attack range and performs an overhead smash attack, which if parried sends the player into stunlock. I made sure that if the player goes into stunlock the Knight can only perform a slow attack (like an Overhead) so that the player has time to perform a dodge at the last moment (the stunlock can only be cancelled by a dodge).
I also placed various enemies in the greybox level and fixed stairs inside the first tower, as the steps were too high and did not work well with the Navmesh,
There are a couple of visual bugs in the gameplay video (such as weapons staying in the air and animations getting stuck), which of course will need to be fixed. Also I need to fix the framerate, which I can no longer stay on 60 fps on my machine, it seems that there are too many enemies active at the same time in the level (I'm CPU-bound), I guess I'll have to optimize a bit.
I have implemented an NPC and some key features:
1. NPC Character:
I introduced a non-playable character (NPC) into the game. This addition serves multiple purposes, introducing the potential for additional interactions within the game, making it more engaging.
2. Simple AI:
The AI for the NPC is intentionally kept simple. It primarily involves two main functions:
- Navigating from one point to another within the game world.
- Engaging in combat when necessary.
- The simplicity of this AI design streamlines development while still achieving the desired gameplay elements.
3. Mesh and Animations for the NPC:
- Initially, I focused on setting up the NPC's mesh and animations. I opted for a mesh design similar to that of a soldier enemy for practicality, although it presented some minor challenges.
- The NPC wields different sword and shield compared to the standard soldier enemy, signifying its enhanced strength.
- I used a moveset identical to the soldier for the time being, though it will require modification. This change is essential to make the NPC a more formidable opponent, especially if the player chooses to engage in combat.
- Implementing evasion maneuvers, such as dodges, is also on the to-do list.
4. Small Quest Involving the NPC:
- I introduced a mini-quest where the player is tasked with rescuing the NPC from a group of monsters. Once rescued, the NPC proceeds with their quest.
- I plan to incorporate dialogue or text-based interactions to provide clarity about the quest objectives and enhance the overall narrative.
5. Patrol Logic:
- The NPC is programmed with a patrol logic. It will attack enemies if it detects them within its vicinity.
- The NPC will turn hostile if the player attacks it excessively.
6. Continuous Level Design Iteration:
- I have been consistently refining the game's level design, ensuring that it is engaging, balanced, and visually appealing.
7. Additional Traps and Enemy Placement:
- I expanded the gameplay by adding new traps, such as obstacles involving boulders, to create diverse challenges.
- I strategically positioned enemies within the game world to keep the player engaged.
Over the past few weeks, I've implemented some gameplay mechanics, with a primary focus on the environmental hazard, which I had some fun, as it's represented by a massive monster.
1. Environment Hazard:
- The Environment Hazard is represented by a giant monster; I adjusted its size to make it appear threatening to the player.
- This monster serves as a challenge to cross a bridge, taking inspiration from Demon Souls by populating the area with numerous enemies to emphasize that the environmental hazard can affect a broad area.
- Deciding on the monster's size and position was a bit challenging. I scaled it enough to cover at least a third of the screen, creating a sense of threat without making it too large, which could become confusing.
- The placement was also a decision point. I chose to position it slightly above and at an angle to cover the entire bridge with its attack. The distance is set so that its fire attack appears as a moving beam, indicating that it's mobile and can be evaded.
- Currently, the monster cannot be killed, but I'm still thinking about it.
2. Environment Hazard Trigger Wakes from Afar:
- I've implemented logic that allows the monster to wake up only when the player gets sufficiently close.
- It remains in a dormant state to indicate that it's not active.
- Upon waking, it emits a roar to signal an impending attack (sound to be added in the future).
- There's a 10-second delay from the moment it wakes up to when it unleashes its fire attack, giving the player time to cross the bridge.
3. Fire Attack:
- I haven't added the VFX for the attack yet because I want to focus on the logic first to save time.
- I've included a debug red line to denote the attack's area.
- The attack has a range from left to right.
- It inflicts substantial damage, capable of eliminating enemies in a single strike, but not the player. However, it deals a significant amount of damage.
4. Door Lever Logic:
- I've also implemented levers that, when activated, open previously closed doors.
- Additionally, there's a logic for triggering a cinematic that I use to showcase unlocked doors that are far from the player's current location.
5. Boulder Trap:
- The boulder trap triggers when the player is descending from an incline.
- To escape the boulder, the player must run and reach a passage in the wall.
- I'm not entirely satisfied with this trap, and I'm considering modifying it as there is a risk of it feeling a bit unfair since the threat comes from behind.
I decided to move the Greybox to the Unreal default Level Template to be able to check the performance of the game with shadows turned on.
I must say that graphically it looks much better! Although I personally like to prototype with as few graphical effects as possible so that I can focus on gameplay (and not be distracted by the pretty graphics).
Improved performance of destructibles, decreasing the number of fractured pieces (from about 100 pieces per object to about 10-20 pieces) and continuous collision after fracture that caused intensive CPU usage indefinitely (solved by forcing fractured pieces to sleep so they don’t use the CPU after a while).
I started the implementation of the boss battle, intending to challenge the player as a final test to ensure mastery of the game mechanics.
The boss character is designed to be imposing, emphasizing its strength through high health and powerful, long-range attacks.
Boss attacks:
• Spear Sweep: The boss performs a sweeping attack with its spear when the player is in front, covering a significantly large area.
• Spear Stab: Executed when the player is at a distance, this powerful attack has an extended targeting duration, requiring the player to dodge at the last moment for successful evasion.
• Spear Throw Attack: When the player moves out of reach, the boss resorts to throwing its spear toward the player.
• Back Jump: This move is executed when the player stands behind the boss, adding a surprise element to the battle.
• Shield Slam Attack: The boss raises its shield and slams it on the ground, causing Area of Effect (AoE) damage. This move is performed when the player is near the boss.
I may temporarily halt the development of the boss battle to return to it later, I need to focus on player mechanics and prototype some new gameplay elements.
I am implementing usable items, starting with potions. I put a temporary UI, an icon in the bottom left corner with text indicating the number of potions available.
The item icon overlaps with the shield (which why I had to put the icon a little bit higher), I don’t like it very much, I will think at a later time how to solve this problem.
I am implementing a new gameplay mechanic: the staggered and recharge healing items. There is a probability that the enemy, before dying, will go into a staggered state. During this state, the player can perform a frontstab to the enemy and recharge healing items if they are finished.
The probability of the enemy going into a staggered state is around 10%, but I would like to give the possibility to increase the staggered probability through upgrades.
I am experimenting with a modification to the backstab mechanics: it is possible to backstab only if the enemy’s health is below 50%. When it is possible to backstab, an icon appears on the enemy’s health bar indicating that it is possible to execute a backstab on the enemy (this also applies to frontstab).
I am introducing this to decrease backstab abuse and increase face-to-face combat. Also, backstabs refill potions, so it’s something that should balance the potion refill mechanics.
I am implementing a new ability: the Invisibility Cloak. This ability makes the character invisible to enemies. Invisibility is removed after 10 seconds or if the player attacks or is damaged. The skill can be recharged by killing enemies. I want to introduce this skill to give the player the opportunity to play in stealth, move to a more strategic location or decide to run away from enemies.
I am implementing a new gameplay mechanic: possession, an ability that allows the player to merge corporeally with enemies and control them. During possession, the player can use the possessed enemy and use its attacks against other enemies. The possess lasts 10 seconds or if the host dies, and the player returns to the original body.
Since last month, I've begun implementing new gameplay mechanics:
- Healing Mechanic:
- I've introduced the use of healing, which restores approximately 1/3 of the player's health.
- An UI indicator displays the number of healing potions available (starting with 3).
- There's a startup animation before the healing takes effect.
- Once potions are depleted, players can recharge them by executing a backstab or frontstab on an enemy.
- Enemy Stagger Mechanic:
- Enemies can go into a stagger state before dying.
- Attacking a staggered enemy automatically triggers a frontstab (or a backstab), useful for recharging potions.
- The probability of causing an enemy to stagger is low (around 10%).
- Enemies remain staggered for only a few seconds, and if not attacked during this time, they recover. This can add complexity to frontstab attempts when facing multiple enemies simultaneously.
- Upgrades will offer the chance to increase the likelihood of causing an enemy to stagger.
- Backstab and Frontstab Conditions:
- Backstab and frontstab moves are executable only when the enemy's health is below 50%.
- An icon appears next to the enemy's health bar to indicate its vulnerability to backstabbing.
- This mechanic aims to mitigate the exploit of circling around an enemy and eliminating it with a single blow, encouraging more face-to-face combat.
- Invisibility Cloak:
- I've implemented the Invisibility Cloak, rendering the player invisible to enemies.
- The cloak is removed after 10 seconds, upon attacking an enemy, or sustaining damage.
- The cloak can be recharged by killing enemies.
- This mechanic offers the opportunity to stealthily attack and eliminate enemies or skip an area (in case an enemy is too strong).
There are still more mechanics I plan to implement, including Possession (already in progress), where the player can control possessed enemies and use their attacks against other foes. I hope to showcase updates on these new mechanics soon.
The creature that will be featured in the horror section of the game.
To unlock the shortcut, the player will have to get past a small horror section where without weapons will need to escape from a creature. The horror section will be very much inspired by the scarier parts of games like Resident Evil and Dead Space.
Layout of the small horror section, a simple go from point A to point B, where you have to pick up an object at point B and bring it back to point A. The creature will at some point appear in the middle of the level and follow the player. The goal is to activate the elevator to escape, without getting caught by the creature. Passing the level will unlock the shortcut.
I tweaked the lighting to make the atomosphere more horror. The main mechanic works (creature chasing you and the player has to reach the elevator without getting caught). I’m trying to wrap up the prototype horror section as quickly as possible, but the temptation to add more stuff is always around the corner.
I am implementing the Skill Tree UI screen, that features both passive and active abilities. Players can unlock abilities, but they must have enough Special Items to apply the ability. Each node enhances additional stats and grants various effects, such as increasing the maximum number of Potion uses, expanding the Possession ability and many more.
I have implemented side quests, these are given by NPCs. Sometimes the side quest will be collecting items, other times it will be killing a particular enemy. The NPCs have a friendship system, which increases with the completion of the side quest. If the friendship is high enough, the NPC can help you during a boss fight.
I implemented a small Dialogue Manager, when you talk to a character it shows the text of the current dialogue. During dialogue the controls are locked (as opposed to Souls-like where you can move the character freely), in first person in my opinion it’s preferable but I might change it. Initially I didn’t plan to implement any dialogues, but with the introduction of side quests it was almost obligatory (otherwise the player doesn’t understand what needs to be done).
I am implementing a new gameplay mechanic: the character’s health affects the weather conditions and will have an impact on enemies. The lower the player’s health, the worse the weather conditions will be. For example, the player will be able to use traps that would only work if it is raining, and lightning could fall on enemies. This introduces a risk-reward mechanic, so that the player could be pushed to stay low on health and take advantage of the weather.
I’m iterating on a new greybox level, which will replace the testing greybox I’ve been using so far. It’s a citadel, so there’s town surrounded by the castle walls and there is the fortress at the top of the hill. For the design of the streets and squares as references I am taking inspiration from games such as Bloodborne, Dragon’s Dogma and Lies of P.
I’m currently focus on the spatial communication of the Citadel, iterating on how to motivate player movement.
For example within the market square, exits aren’t immediately visible due to the maze of market stalls obstructing the view. Players are forced to navigate the space actively, uncovering more information as they explore and mentally chart the area.
As they walk to the other side of the square, a clear exit is revealed. This different perspective allows for strategic planning, enemy spotting, and anticipation of rewards, making exploration less boring and giving a reason for exploration.
The greybox reiteration of the new level continues. I completed the lower part of the citadel, consisting of the town. The player, starting from the main gate in the lower area, must make his way through the city streets to reach the castle in the upper area. The next step is to create the castle rooms.
I’m starting the level design of the castle, with the walls and the shortcut tower that takes you back to the bonfire.
As soon as the player starts the level, the castle is shown in the distance to give the player a clear objective. Weenies (in this case the castle) are little clues to tell the player where to go.
The level design of the castle is progressing quite fast, although it will take me all month. I’ve completed the left side of the castle, the garden area, where continuing will lead to a plaza where you’ll have the choice of climbing the walls or entering the dungeon.
Sometimes I waste a little too much time on the aesthetic details, I shouldn’t since it’s a greybox, there will be time for that when I put in the real environment.
I’m doing the stairs going down into the dungeon. I like that they are narrow and go downward to give a feeling of tension as you go down (there will be torches on the wall since it will be dark).
In the second screenshot you can see how I placed the slanted ceiling, I tried to keep the same distance from the floor. I placed it a little quickly but it will be done more carefully when I put the models in.
I am adding the art assets of the stairs leading to the square. I also iterated on the floor material, I did some vertex painting using a stone pavement, a soil mud and a mossy stone as materials. There is some repetition in the floor, which I will fix by placing some plants growing between the tiles, pieces of tiles coming out etc.
I’m focusing on the plaza, I added a fountain with a statue on top and some stairs. Also I am experimenting with various floor materials, I am trying some stone tiles with some displacement, I like the tesselation it creates. I would like to try soon some decals like ground and plants.
Maybe right now the floor is a little too defined compared to the rest, I’ll have to make the buildings and the props more defined otherwise it might clash with the style.
I am continuing to add 3d models, I placed the gate with stairs leading to the upper part of the city and a square with a fountain. I’m also experimenting with a different lighting, a different sun orientation and a higher intensity, I think the warmer colors go better with the walls and floor. However the floor is too flat and I’ll have to fix it with some modeling.
I am continuing to place mesh to replace the blockout, adding one of the last areas before the castle, such as 2 indoor areas and a few roads to the castle. The more I continue, the happier I am to see my blockout turn into a medieval town, but on the other hand, I’m starting to worry about the amount of work that will await me in making it polished, it’s going to be tough.
I am focusing on placing the 3d assets in the initial area of the castle. Here the player can take different paths, for now I’ll focus on the one that leads to the first shortcut. Doing the interiors has its challenges, adding walls and floors without messing up the rooms next door makes me busier than when I was doing the streets in the citadel.
Today I did a performance optimization pass, including lowering the sampling quality of volumetric clouds and reducing the quality of global illumination. I can again stay around 16.6ms /60fps on my target machine (i5/RTX 3060 at 1080p). Also for aesthetic tweaked the lighting to make it brighter and also tweaked the fog since it was blocking the view too much.
I am adding 3d assets in the castle area. I changed the layout of the original greybox a bit to fit the stylistic side of the setting, it doesn’t affect the gameplay so I think it was a good decision. I’m changing a little bit the workflow of how I’m placing the 3d assets, so for now there might be a difference in the detail between the castle and the city, I’ll fix it in the next art-pass.
I have finished with the dungeon for now, replacing most of the dungeon greyboxes with 3D assets. The dungeon covers a good part of the area below the castle. Compared to the greybox I decided to raise the ceiling of many rooms but fortunately I did not encounter any major problems as overlaps with other rooms.
In indoor areas the brightness is low, so I added a small light around the player, very similar to the light in Dark Souls. I’ll probably remove it, in a first person view it doesn’t look good especially if you have an enemy in front of you, the light illuminates the enemy in an annoying way. I’ll place more torches to increase overall visibility.
I fixed a problem with lighting, where in build the lighting was much higher than what I was seeing in editor. I found that it was a problem related to the volumetric clouds, I removed them since they were a bit too heavy for performance anyway. I will be working on the castle again soon, I am in the final stages of the first art pass.
This week I am focusing on implementing some VFX, starting with the Bonefire. I’ve been tweaking the fire particles, especially the lighting intensity. A bonfire produces lighting intensity in the value of between 10,000 and 50,000 candelas. I used these values to get a more physically realistic illimination.
I'm testing various environments for Chapter 2, right now this is the one I like the most because of the composition and it conforms to the game's story. I am also experimenting with implementing a Perfect Block (like in Stellar Blade) and some tweaks for the enemies.
I have yet to bring the various lighting and VFX tweaks I made to this new map. What do you think so far? Do you like the environment?
Lately, I've been focusing on finishing the third scenario. At the same time, I'm refining the first level of the castle by increasing design density: adding more variety in encounters, improving progression, and fine-tuning the level design. I’ve also updated the enemy death animation (now they get launched) and started implementing breakable crates containing items. It still needs some polish, but they will eventually hold energy and currency for players to spend.
Citizen Pain is officially on Steam!
My dream of releasing my own action game is finally coming true.
I’ve been working hard on the trailer over the past month, I hope you like it!
Wishlist it now on Steam:
:https://store.steampowered.com/app/3752240/Citizen_Pain/
This week I updated the Axeman enemy by giving him a new character mesh, so he’s visually distinct from the Swordsman. I also changed his lunge attack to strike from above, adding a bit more verticality to the action.
On the technical side, I optimized performance by converting the level to World Partition, and I fixed several bugs, including one where enemies would shift slightly in front of the player with each hit.
Crates can be smashed with a dash, it’s super satisfying to watch wooden pieces fly everywhere.
There are "super weapons" like the axe: they deal more damage than your main weapon, but break after about ten hits, so use them wisely.
A strong tactic is to parry, which grants you a short window of invincibility. Perfect moment to land a heavy attack and hit multiple enemies at once.
This stage is a bit dark visually, hope it still comes through okay despite video compression.