So there’s a room being booked for playtests at 13:30 03/05/23 again and I’ve ran short on time to work on the game since the last one. The time is 12:06 so this might be rushed.
PRE-PLAYTEST WORK
These are the main changes I want to make right now based on last playtests.
- Destroy projectile on enemy hit
- Reduce mana costs to compensate, round numbers up.
- Difficulty Scaling, start at 1 and increase every minute. Enemy health and damage is multiplied by this.
- Add a little more speed to the dashes.
- Prototype some different spell effects?
This is a checklist on trello now to keep track of what i’ve done and what’s next.
I’m first making the easiest changes first, I forgot to include that I want to reduce the number of enemies that spawn at a time, I’m doing that first.
I’m currently using a random range between 2 and the maximum possible enemies that can spawn at a given moment (max-current), I think it would be best to just give this a defined range of say 2-5 instead of max as there is already a branch to prevent going over the spawn limit.
The range was 2-10 but it is now 1-4, and added a clamp for the second spawn-loop so the index does not go into the negatives.
Dashes currently use launch character with a velocity of 1.20, I’ve upped this to 1.32 and it’s much more noticable and nicer now, but I’m going to add an extra second and a half to the delay so kiting isn’t aided too much.
I’ve tweaked the values to these, reducing costs and rounded them up.
Fire spell: | Mana cost: 20 | Damage: 50
Corrosive spell: | Mana cost: 50 | Damage: 100
Freeze spell: | Mana cost: 75 | Damage: 125
Lightning spell: | Mana cost: 125 | Damage: 250
I am rapidly following this to get damage effects https://www.youtube.com/watch?v=UvrN45S6YDM&t=603s
I have to quickly rework what I had.


This new system requires breaks too much and requires too much for what im about to do, I should try it later but not now.
actually I meant to work on the difficulty scaling.

My plan is to have gamemode hold a difficulty multiplier that increments overtime which the increase all enemy values (health, damage, xp, gold and score).
the HUD displays this so the player can see it’s part of the game

at enemy begin play, the default values are increased base on the difficulty multiplier.

I’m trying to rack my head of a good way for the enemy to choose an effect based on spell it’s hit with but I don’t know how to choose a path based on the spell without nesting if statements, but after a little online research I found the solution would be a ‘switch’. I’ve given spells a number each to act as an index number and choose a different string of blueprints based on that.

Now I need each spell to do a different effect each, I had a couple ideas floating around but not set in stone, such as lightning chaining between targets, corrosive leaving a puddle and freeze stopping targets from moving for a few seconds, quick idea for fire I think it could damage overtime.

I’ve made the enemies change material based on the spell they’ve been hit with as a nice way to show that enemy has been hit and is has been affected – This is a common effect in a lot of games such as Warframe and Destiny 2 that have elemental effects to communicate that they have been applied.
Luckily the stun I had added to enemies could be re-used to as the ‘freeze’. Fire has its own function, I wanted to test by having a ‘burn’ effect using a function on the enemy.
For the corrosive spell and the shock spell’s effects, the best way I could think of creating this is when those spells are destroy, they create another actor for these effects.
Corrosive creates a puddle that is always at the floor level so it has a consistent application(I don’t want to quickly add math that may bug out), and since the switch in BP_enemy has solely visual effects, I can pass through the effect index number to trigger the material change and a smaller damage number for damage overtime while in contact with the puddle. I toyed around with using ‘do-once’ to avoid enemies being damaged too much but it just didn’t have the effect I wanted, so I unhooked it.


Lightning was the same, except instead of being a large visual blob, it’s a large capsule collider that appears for a split second, the aim here is that this is the ‘chain’, it’s finding other close enemies to trigger the damage event with.
With difficulty scaling increasing enemy health overtime, I want to add healthbars to enemies as a way for the player to have some form of feedback, to be able to visibly see they’re doing less damage than compared to 5 minutes ago.

Playtest feedback:
I had 3 people playtest my game and all 3 of them had played my game during the last playtest, all Year 3 Game Dev students who had a variety of insight. One had a keen eye for balancing in the game, big numbers guy who suggested making spells no longer go through enemies, and he was delighted with the changes (I think the most fun thing with game dev is seeing the change overtime that a game has).
His only suggestion was to make the shock capsule bigger to more enemies are actually affected (it rarely hits more than 2-3 enemies), and make the scale/corrode scale with enemy health so players who pushing into harder difficulties have a better chance (scaling means that as difficulty increases, their health value increases thus the damage these spells do increases aswell).
I had a small hiccup where I accidentally disconnected the pin that triggers player health-loss on enemy collision as I mistook it for the system to damage the enemy that I was trying to remove, I think in future it’d be wise to have a plan of what to playtest before playtests or packaging and make sure it works like a pilots pre-flight checklist.
I asked players run of the mill questions to see if they aligned with what I intended, mechanics were clear, assumed goal was survive/highest-score or reach-hardest-difficulty/get as deep as possible (all have the same effects).
I liked someone’s breakdown of the spell effects as “fire is tick damage, ice is crowd control, corrosive is tick damage aoe, lightning is large burst aoe”, main points were that they wish lightning was stronger and noted that corrosive is more powerful than others.
For other mechanics, one desired for enemies to split up more and noted that dash isn’t used very often.
-AI is something I would like to work on further, the chaser style enemies are very basic and not very interesting to fight at all.
-Dash is a lateral movement to help get out of a pinch, I was inspired to add this because of my research on movement shooters and I liked its usage in Gunfire Reborn. If the player effectively kites around enemies then they rarely need it. Maybe the enemy overhaul I have in mind will change this (enemy varieties, slimes/skeletons/mages).
The difficulty rating now has a nice range, a point each for 1, 2 and 3 with 1 being easy.
When asked what they particularly liked, all said the spells having different effects. I think this works nicely as players gets to choose the way they play, this active choice between spells is a great way to keep players engaged as they practice different strategies against waves of enemies.
Nobody said they found anything confusing,
For things they found lacking/missing, I got a range:
- Visual Effects
- Different types of enemies
- Use of money for now
These are all things I want to do already, the priority I’m unsure about, maybe I need a big self-game jam day to bang these all out.
When asked if they think better enemies and shops to spend gold and XP will fix the main flaws of the game, 2/3 said yes and that last one said “no but it would add a lot of depth to the game”.
That’s a good bit of semantics with my question, part of solving the issue is fixing what feels like a little missing amount of depth to my game.
They rated the game a solid 4/5.
For additional feedback, “swap ice and corrosive spells around” (as in, order in spellbook as it goes weakest to strongest), “frost should be a lower-cost utility, the corrosive puddle is satisfying but needs to feel more powerful”, I agree with the idea, I think this would work better for balance in the game
“Make it look like you’re going deeper, and scroll wheel goes back to start of spells” – I ought to try the scroll wheel bit again, I tried making it do this when I added it but I couldn’t get it to work.
I like the idea about visuals for going deeper, maybe it should get darker or more purple as you go deeper, or maybe the walls change colour.
Summary, big-fat summary list of things I can do, with attached complexity rating of * to ***:
- *Make the shock capsule much, much bigger
- *fix player hit-damage pin.
- **scale burn/corrosive damage to enemy health
- **more enemies (slime[small chaser]/skeleton[medium melee/mage[medium caster]).
- Visual polish (particle effects[spells], textures[walls,floor], maybe some models[enemies/player], add a fog to the top of the tower, Rich should have some great notes for final polish).
- XP and Gold design idea is, one for spells, the other for the player.
- ?*/**money shop (At the start of the level, provide a shop for the player to spend money, they increase some of the player’s stats permanently. do a brief mock design).
- ?*/**XP expense (BUILD this into the gold shop to save time but this buffs spells).
- Difficulty vendor – choose the rate at which the difficulty increases (this just came to mind for players who want to choose a difficulty option, based on the range of difficulty ratings I think some peoples go in with different mindsets).
- confirm prompt before descent(not part of feedback, but I recall some players mindlessly started the level without thinking about it.
Big note, from my own testing after this I found that when the enemy takes burn damage, they are taking damage but it’s not reflecting in their healthbar consistently and neither is their death event being called (because silly me forgot to take into account the deathcheck on damage) – EZ FIX, just call the damage event in the function and pass 0 on the index. Both issues fixed on test.
Corrosive is only working once on hit which, despite players saying it felt powerful it actually wasn’t doing much at all, I’m guessing it looked powerful because it could hit a lot of enemies at once but actually it only triggered damage once.
[This segment is entire troubleshooting the corrosive spell, to make sure that it applies to multiple enemies at a given time and correctly deals damage overtime]
My first solution in mind was to use a while loop to re-trigger the damage event but it just crashed the game. I tried moving it infront of the cast thinking that was the cause but it crashed again, but on further use of brain cells, I realise I forgot to toggle the bool off on ActorEndOverlap. It worked fine but produced some errors and when I changed the damage to 0.001 to test if enemies wouldn’t die on impact it crashed again.

It does what I intended, damage enemies rapidly but there’s no timer so it’s per tick and there’s too much room for error, I don’t think end-overlap is being called when enemies are destroyed during overlaps. Combined with the fact that timer-functionality is going to be better held by the enemy rather than the trigger, any loops in the damage trigger is not viable.
I think a better solution would be to add a function similar to burn to the enemy but triggered by an begin overlap but it loops until the enemy stops overlapping. However, I’ve found It’s not letting me set function timers through casts, then I tried creating a function that sets that function timer off but that doesn’t work either.
Upon even further use of brain cells after testing, I realise I’ve approached this all wrong, all the code for what happens to the enemy on this overlap event should be held on the enemy.
I still however can’t seem to call the function – turns out I didn’t turn on ‘enable call-in-editor’, but still it’s both not being called.
I compared it to the burn function and noticed the only difference is that there is a set bool being fed into the loop parameter, I made one for the corrode function and it works. I guess this is preventing an infinite loop despite having a blueprint to clear it? Next issue is that the function was still looping when I set the bool to false, but after a little troubleshooting I found that I I just resolved it a ‘clear timer by function name’.
[End of troubleshooting segment]

All these notes have been put into a crunch list on trello, as despite the playtest being nearly 2 weeks ago, I’m writing it now.

*Shortly after this, I quickly did most of the fast fixes/adjustments for the game, namely the first 4 as well as rotate all spawnzones.