Ideaguyed the basics of the game's classes and mechanics, and implemented basic movement and setting of all the stats it will have. Here are the initial characters, synergies and stats I want to have:
### Characters
* Vagrant: shoots a projectile at any nearby enemy, medium range
* Scout: throws a knife at any nearby enemy that chains, small range
* Cleric: heals every unit when any one drops below 50% HP
* Swordsman: deals damage in an area around the unit, small range
* Archer: shoots an arrow at any nearby enemy in front of the unit, long range
* Wizard: shoots a projectile at any nearby enemy and deals AoE damage on contact, small range
### Synergies
* Ranger: yellow, buff attack speed
* Warrior: orange, buff attack damage
* Healer: green, buff healing effectiveness
* Mage: blue, debuff enemy defense
* Cycler: purple, buff cycle speed
### Stats
* HP
* Damage
* Attack speed: stacks additively, starts at 1 and capped at minimum 0.125s or +300%
* Defense: if defense >= 0 then dmg_m = 100/(100+defense) else dmg_m = 2-100/(100-defense)
* Cycle speed: stacks additively, starts at 2 and capped at minimum 0.5s or +300%
Perhaps I'm overengineering it already with the stats but I wanna see where this goes. From SHOOTRX it seems like figuring out stats earlier is better than later, and these seem like they have enough flexibility.
Managed to get the first 4 items of the previous todo list done. Removed the cycle stat because the way projectiles work (they're autoshot) already feels like a cycle so having that in would feel redundant.
I changed it for area damage + area size stats which feel more fundamental. So currently the synergies are:
* Ranger: yellow, buff attack speed
* Warrior: orange, buff attack damage
* Healer: green, buff healing effectiveness
* Mage: blue, debuff enemy defense
* Void: purple, buff area damage and size
And the stats are:
* HP
* Damage
* Area damage
* Area of effect
* Attack speed
* Defense -> if defense >= 0 then dmg_m = 100/(100+defense) else dmg_m = 2-100/(100-defense)
HP, damage and defense are flat stats, whereas area damage, area of effect and attack speed are multipliers. This is because each character/attack has its own attack speed/area and trying to generalize that
too much wouldn't work well. For tomorrow I'll just try to finish the rest of the todo, which is add more characters, port enemy spawning logic from SHOOTRX and add sounds.
Ported over enemy spawning logic and added all characters. The characters currently are:
* Vagrant: shoots an ethereal projectile at any nearby enemy that deals physical and magical damage, medium range
* Scout: throws a knife that chains 3 times at any nearby enemy, small range
* Cleric: heals every unit when any one drops below 50% HP
* Swordsman: deals physical damage in an area around the unit, small range
* Archer: shoots an arrow that pierces at any nearby enemy, very long range
* Wizard: shoots a projectile at any nearby enemy and deals AoE magical damage on contact, small range, AoE has very small range
The classes are:
* Ranger: yellow, buff attack speed
* Warrior: orange, buff attack damage
* Healer: green, buff healing effectiveness
* Mage: blue, debuff enemy defense
* Void: purple, buff area damage and size
* Builder: orange, buffs construct damage, attack speed and duration
* Rogue: red, chance to crit dealing 4x damage
I'm not sure what I should focus on next. I know that there's sounds left to add, but after that I should probably start doing the actual game progression, but for that I think need a bunch more characters.
I should probably try to think of a cast of maybe 15-20 characters (however that number should be as low as possible) that fills up the current classes to their multiple levels. Levels possible are: 1, 2, 3, 2/4, 2/4/6 and 3/6.
Sounds done for everything. Surprising to me how much sounds added to the game and helped me sell all the different attacks way better than with just graphics.
I should probably make it a habit to add sounds earlier rather than later from now on.
Tomorrow I should probably ideaguy the full set of characters and classes that I'll need so that the game is playable and start on implementing those additional characters as well as some class bonuses.
I've implemented up to Elementor today and ATM in the process of doing Ninja, but today seems like a particularly low energy day so I'm just going to play some games instead.
Not a lot done today... My sleep schedule is fucked up and I've been unable to focus properly. I managed to get 2 characters done though and also changed their definitions a bit:
Finished all characters finally. My sleep is so fucked these two days blended together seamlessly. It's so fucking hot and I'm so tired. God damn I fucking hate the summer so fucking much. I hope I can sleep properly today.
Definition changes for one character: Spellblade - knives slowly spiral outwards.
Tomorrow I'll probably do some UI work so the player can buy new characters as he goes from arena to arena, or work on the game's progression in terms of enemy HP and DMG. These are fundamentally the only two things missing
and I have a essentially 1 week to do them, which should be more than enough.
Note: remember to attribute https://freesound.org/people/Hybrid_V/sounds/321215/ for turret_deploy sound in credits.
Another day with almost no sleep and just general low energy because of it... I managed to get things done though. I got all the class set bonuses working. Here's what they do:
Took a break today. Although I went through the game's stats because I noticed some of them were diverging from my internal docs as well as the tables posted to the devlog a few days ago. Here are current tables
based on what's actually in the code:
### Classes
| Class | Set Color | Set Numbers | Total Units | Set Effect |
| --- | --- | --- | --- | --- |
| Ranger | green | 2/4 | 5 | 10/20% chance to release a barrage |
UI work on the game's first screen. These days that I ended up not doing nothing happened because of a mix of me not knowing what to do next, fixing my sleep schedule (failed, so I give up on this already), and trying
to think up how exactly I want the game's UI to be like. I ended up thinking too much and paralyzed myself into not doing anything.
Right now I'm just doing the most basic thing I can that still looks reasonably OK and conveys all the info needed.
More UI stuff. Fairly slow moving but I'm slowly getting a clearer picture in my head of what the game's UI should be like which should make it easier to get it done.
Also found this cool article today: https://halt.software/dead-simple-layouts/. This reminds me of one of my attempts from a few years ago at creating a clean UI abstraction but with a slightly different focus that seems promising.
I wonder if I should try implementing this now or leave it for the next game.
Transition from first screen to first level works. Polish it up tomorrow with more sounds, tutorial markers (left/right arrows) and more consistency and anticipation when a level ends, and then start work on the main buy
First screen, transition from it to arena, arena and transition from arena to next screen are 99% complete and polished. There's one small bug left that I can't replicate where it will end the level right away, but I can't tell
with which win condition it's happening... I'll fix it in time. Tomorrow I can get started on the main buy screen for real.
Initial work done on the main buy screen. Fairly slow moving still. There's a sort of conceptual fuzziness that happens when writing UI code where there's a few different ways of doing it and this freedom seems fairly paralyzing.
I've been thinking really hard about what to do about that but it's still up in the air. The "dead simple layouts" thing is a good idea but layouting is not necessarily the main problem I have, it's more like relationships between
different objects and a UI coordination issue that seems to stop me.
Finished all visual progress on the main buy screen. Now all I have to do is make it all work logically, which is actually a lot easier than making it all work visually. This fact tells me that most of my problems with UI programming
have to do with visuals and not much else. I would wager that most of it has to do with not knowing how the overall UI should look, and the rest is just building each UI component visually in a quick and easy way.
The first problem can be fixed by just trying to draw the UI beforehand, which I never do but maybe I should start doing. The second problem is more involved and essentially it involves writing UI components that are generic enough
like buttons, labels, image buttons, lists, etc, but also allow for enough specialization that I can make them really juicy, as this generally requires a lot of detail fiddling the inner works of the object. I think the Node refactor
I'm planning will probably help with this, especially the idea of everything simply being a Node and classes being able to be defined inline by just defining update/draw/on_enter/etc functions.
Finished buy screen. Now the only two things left is are redoing the first screen to take advantage of all the UI built for the buy screen, balance/progression and then fixing smaller details and finishing everything up.
I can probably finish it all before day 30 which would be great.
The game is finally playable from start to finish. It is pretty fun as it is but it's clear that a few things need to be added so it can be even better. I'll add these after I release the demo with the game in the current
state since these additions will take some time and I don't want to delay the demo's release any more than necessary.
#### Enemy Modifiers
Enemies right now feel pretty samey, and a few small modifiers would help a lot:
* Grant nearby enemies a speed boost on death
* Grant nearby enemies a damage boost on death
* Explode into projectiles on death
* Charge up and headbutt towards the player at increased speed and damage
* Immune to knockback
#### Mini Boss
Every 3rd level there should be a difficult increase in the multiplier for enemy stats as well as a mini boss. This mini boss has significantly increased HP and damage and can spawn enemies of his own on top of the ones
spawned by the level. He can also grant modifiers to enemies. Upon completing such a level, the player will be granted the chance to choose 1 out of 3 passive items.
#### Other Ideas
* Show a unit DPS list like Underlord's to the right side of the screen
* About 20-30 passive items that can be collected every 3 levels
* Lv.3 effects for every character
* New classes and characters (I'm not in idea guy mode ATM so I can't think of much, but it will come to me eventually):
* Trapper: releases +1 trap
* Plague Doctor [trapper, nuker]: releases an area that deals 6 AoE DoT
* Fisherman [trapper, warrior]: throws a net that entangles enemies and prevents them from moving
The demo is finally 100% complete. Now tomorrow I'll spend some time recording gameplay and hopefully finishing the trailer. After that I can start working on the steam page.
If I have it done by tomorrow and Valve takes 5 business days to approve the store page I should have everything ready by the 25th. And then I can release the game 14 days after that, which would be the 8th of April.
I definitely want to release it around that time, before the 15th because then I will have completed the game in less than 60 days which is my limit, although I should probably aim for 40 days going forward.
This latest week I did everything necessary to get the game into a playable state as well as all the work needed for a Steam page. Most of it was spent making the trailer, but I feel like the more trailers I make
the faster I get at making them. This time it took like 3-4 days out of laziness, but I can easily see it being a 1 day job in the future.
I also tested the demo out with a few people and the results were underwhelming. No one seemed to play it for too much time, which I suspected would happen given that the longer term loop of the game isn't in yet.
More interestingly though, all of the feedback I was given about things that needed to be changed were things that I knew needed to be changed/added for the game's release, which means that I have a pretty good idea of where
the game is from other people's perspective.
The web build has a few bugs that I can't fix like sound effects not playing randomly, and since my strategy was doing a web demo coupled with the page's release, I've decided to change it. Both because of these bugs and the
underwhelming response I feel like releasing a demo at this point will damage the game more than help it. I have ~3 weeks until release date (13th of April) from now, and that should be enough to add enough things into the game
to make it significantly better.
Going forward I think the Steam page reveal demo strategy probably isn't a good idea for these 1 month games. They're small enough already as they are and releasing them in an ever more crude state is probably a waste of time.
The only thing I need to schedule better for next releases is my trailer making timing. If I want to release a game in 1 month I need to have a trailer by day 15 at the latest, which means I need to work on the game for 2 weeks
Spent most of this week relaxing and ideaguying the next things I need to do. The reaction to the demo was already underwhelming but the reaction to the game reveal itself from the Internet at large was also fairly underwhelming.
For BYTEPATH it was also like this and the 2 weeks of building wishlists were basically dead and I was only able to gain traction on release day, but for this game it seems even worse. Hopefully by the time release day comes people
will respond better, otherwise this is a big GG and this game will just be played by like 100 people at most.
This also further solidifies my previous thoughts that the 2 weeks delay from steam up to release is best thought of as non-existent. For this game I tried a 2 step process, work on a demo and release that with the game's reveal
and steam page, and then finish the rest of the game after that. But the amount of work needed to do a proper reveal with trailers and playable demo was pretty large, and it didn't really amount to anything. The demo was too unfinished
(and I knew it was) for any feedback to matter, and people just didn't respond at all to the game's reveal.
So a better plan for future games might be to just make a game in 1-2 months, and then spend 1 week or so doing everything needed to put the page up, do it, and then move on to the next game while waiting the 2 weeks before
release is possible. This also works better because it's very hard to switch from marketing mode back to development mode on the same project, whereas switching to a new project while waiting for those 2 weeks is probably
more feasible.
Whatever way it goes, here's my plan for what to do until release:
1. Enemy spawn points should have some markers before enemy spawns, or should avoid spawning near the player at all
2. Prevent spawning of units that cost 3 on first level
3. Prevent spawning of units that don't attack on first level
4. Rework position based units so that position in the snake doesn't matter
* Chronomancer: +10%/20%/30% attack speed to all allies
* Psykeeper: stores damage taken by all allies up to 20% max HP and redistributes it as healing
* Squire: +5%/10%/15% damage and defense to all allies
5. Stat details to each unit when hovering over it in the party section
6. Mini boss every 3rd level
* This is just a special enemy with more HP and ability to buff nearby enemies with modifiers, no additional AI or attack patterns
* ... aiming for ~5 different modifier combos that the boss uses
7. Enemy modifiers
* Grant nearby enemies a speed boost on death
* Grant nearby enemies a damage boost on death
* Explode into projectiles on death
* Charge up and headbutt towards the player at increased speed and damage
* Resistance to knockback
* ... aiming for about 8-10 of these
8. Additional characters and classes
9. Lv.3 effects for every character
* Classes
* Ranger: chance to release a barrage on attack
* Warrior: increased defense
* Mage: decreased enemy defense
* Nuker: increased area damage and size
* Rogue: chance to crit
* Healer: increased healing effectiveness
* Enchanter: increased damage
* Conjurer: increased summon damage and duration
* Psyker: increased damage and health based on number of active sets
* Trapper: release extra traps
* Forcer: increased knockback force
* Swarmer: increased critter health
* Voider: increased damage over time
* Characters
* Vagrant [psyker, ranger, warrior]: shoots a projectile - Lv.3: Champion - gains increased damage and attack speed based on number of active sets
* Swordsman [warrior]: deals AoE damage, deals extra damage for each unit hit - Lv.3: Cleave - damage is doubled
* Wizard [mage]: shoots a projectile that deals AoE damage - Lv.3: Magic Missile - the projectile chains 5 times, each dealing AoE damage on impact
* Archer [ranger]: shoots an arrow that pierces - Lv.3: Bounce Shot - the arrow ricochets on walls 3 times
* Scout [rogue]: throws a knife that chains 3 times - Lv.3: Replica - each chain grants +15% damage and the last chain splits
* Cleric [healer]: heals a unit when its health drops below half HP - Lv.3: Mass Heal - heals all units instead of one
* Outlaw [warrior, rogue]: throws a fan of 5 knives - Lv.3: Fatal Roulette - every 3rd attack throw a nova of 15 knives instead
* Blade [warrior, nuker]: throws multiple blades that deal AoE damage - Lv.3: Blade Resonance - deal additional damage based on number of enemies hit
* Elementor [mage, nuker]: deals AoE damage to a random target in a large area - Lv.3: Windfield - slows enemies hit
* Saboteur [rogue, conjurer, nuker]: calls saboteurs to seek targets and deal AoE damage - Lv.3: Chain Reaction - should an enemy die from a saboteur explosion, it also explodes
* Stormweaver [enchanter]: infuses all allied projectiles with chain lightning that deals extra damage - Lv.3: Lightning Spire - cast a spire of lightning periodically
* Sage [nuker]: shoots a slow moving projectile that pulls enemies in - Lv.3: Dimension Compression - when the projectile expires deal massive damage to all enemies under its influence
* Squire [warrior, enchanter]: increased damage and defense to all allies - Lv.3: Repair - you can reroll your item choice once every 3 levels, these opportunities stack if unused
* Cannoneer [ranger, nuker]: shoots a projectile that deals AoE damage - Lv.3: Cannon Barrage - showers the hit area in additional cannon shots that deal AoE damage
* Dual Gunner [ranger, rogue]: shoots two parallel projectiles - Lv.3: Gun Kata - every 5th attack shoots projectiles in a rapid succession for a duration, targetting all nearby enemies
* Hunter [ranger, conjurer]: shoots an arrow that summons a pet - Lv.3: Feral Pack - summons 3 pets
* Chronomancer [mage, enchanter]: increased attack speed to all allies - Lv.3: Quicken - enemies take DoT faster
* Spellblade [mage, rogue]: throws knives that spiral outwards and pierce - Lv.3: Spiralism - faster projectile speed and tighter turns
* Psykeeper [healer, psyker]: stores damage taken by all allies and redistributes it as healing - Lv.3: Crucio - also redistributes it as damage to all enemies
* Engineer [conjurer]: drops sentries that shoot bursts of projectils - Lv.3: Upgrade - every 3rd sentry dropped, upgrade all sentries temporarily, giving increased damage and attack speed
* Plague Doctor [nuker, voider]: creates an area that deals DoT - Lv.3: Pandemic - inflicts enemies with a contagion that deals additional DoT, if they die from it it passes to a nearby enemy
* Fisherman [trapper, warrior]: throws a net that entangles enemies and prevents them from moving - Lv.3: Electric Net - enemies caught take DoT
* Juggernaut [forcer, warrior]: creates a small area that deals AoE damage and pushes enemies away - Lv.3: Brutal Impact - enemies pushed away are instantly killed if they hit a wall
* Lich [mage]: launches a chain frost that chains 7 times, dealing damage and slowing enemies it hits - Lv.3: Piercing Frost - chain frost ignores enemy defenses
* Cryomancer [mage, voider]: nearby enemies take damage over time and have decreased movement speed - Lv.3: Frostbite - enemies killed by the cryomancer freeze nearby enemies, frozen enemies can't move and take increased damage
* Pyromancer [mage, nuker, voider]: nearby enemies take damage over time and deal decreased damage - Lv.3: Ignite - enemies killed by the pyromancer explode, dealing AoE damage
* Corruptor [ranger, swarmer]: spawn 3 small critters if the corruptor kills an enemy - Lv.3: Infestation - spawn 3 small critters if the corruptor hits an enemy
* Beastmaster [rogue, swarmer]: spawn 2 small critters if the beastmaster crits - Lv.3: Call of the Wild - spawn 2 small critters if the beastmaster gets hit
* Launcher [trapper, forcer]: creates a trap that launches enemies that trigger it - Lv.3: Kineticism - enemies launched that hit other enemies transfer their kinetic energy
* Spiker [trapper, rogue]: creates a trap that crits when triggered - Lv.3: Caltrops - slows enemies hit and deals DoT
* Assassin [rogue, voider]: throws a piercing knife that inflicts poison - Lv.3: Toxic Delivery - poison inflicted from crits deals more damage
* Host [conjurer, swarmer]: creates overlords that periodically spawn small critters - Lv.3: Invasion - increased critter spawn rate
* Carver [conjurer, healer]: carves a statue that periodically heals in an area - Lv.3: World Tree - carves a tree that heals in a bigger area and removes all buffs from enemies
* Bane [swarmer, voider]: spawn a small critter periodically that explodes and deals DoT - Lv.3: Baneling Swarm - spawn 4 banelings instead
* Psykino [mage, psyker, forcer]: quickly pulls enemies together and then releases them with a force - Lv.3: Magnetic Force - enemies pulled together are forced to collide with each other before being released
* Arbalester [ranger, forcer]: launches a massive arrow that pushes enemies back, ignoring knockback resistances - Lv.3: Ballista Sinistra - enemies hit by the arrow have massively decreased defense
* Pirate [warrior, forcer]: launches a hook that captures nearby enemies and pulls them towards you - Lv.3: Jolly Roger - place a flag that grants gold based on number of enemies killed under its effect
* Sapper [trapper, enchanter, healer]: creates a trap that steals health from enemies that trigger it and grants increased movement speed - Lv.3: when a sapper trap is triggered other nearby traps are triggered
* Priest [healer]: heals all units periodically - Lv.3: Divine Intervention - at the start of the round pick 3 units at random and grants them a buff that prevents them from dying once
* Burrower [trapper, swarmer]: creates a trap that contains 6 small critters which are released when triggered - Lv.3: Zergling Rush - triples the number of critters released
* Flagellant [psyker, enchanter]: periodically deals damage to self and grants a damage buff to all allies - Lv.3: Zealotry - deals damage to all allies instead and also grants a massive damage buff
* Sets
* Ranger = 8/8
* Warrior = 8/8
* Mage = 8/8
* Rogue = 8/8
* Nuker = 7/7
* Conjurer = 5/5
* Forcer = 5/5
* Voider = 5/5
* Psyker = 4/4
* Healer = 5/5
* Enchanter = 5/5
* Trapper = 5/5
* Swarmer = 5/5
10. Items
* Ouroboros Technique R: rotating around yourself to the right makes every unit periodically release projectiles
* Ouroboros Technique L: rotating around yourself to the left grants +25% defense to all units
* Resonance: hitting walls has a chance of releasing projectiles
* Wall Rider: hitting walls grants a speed buff for a small duration
* Force Push: +25% knockback force
* Heavy Impact: if knockbacked enemies hit walls they take damage according to the knockback force
* Centipede: +20% movement speed
* Intimidation: enemies spawn with -20% max HP
* Crucio: taking damage shares 2x the amount of HP you lost across all enemies
* Amplify: all units that deal AoE damage gain +25% AoE damage
* Amplify X: +25% AoE damage if all your units only deal AoE damage (excluding supports)
* Ballista: all units that release projectiles and don't deal AoE damage gain +25% damage
* Ballista X: +25% damage if all your units only release projectiles and don't deal AoE damage (excluding supports)
* Point Blank: projectiles deal increased damage based on distance not travelled, +100% at 0 distance and -50% at max distance
* Longshot: projectiles deal increased damage based on distance travelled, -50% at 0 distance and +100% at max distance
* Chain Reaction: projectiles that chain gain 25% damage with each chain
* Call of the Void: +25% DoT damage
* ... more ideas will come later I'm sure, aiming for 30 total items
11. Steam integration: achievements, etc
12. Hovering over a party member should show which set they belong to and vice-versa
13. Show a unit DPS list like Underlord's to the right side of the screen
14. Warriors that deal AoE damage should deal extra damage based on number of enemies hit
15. GO button is grayed out and thus doesn't say it's meant to be clicked on
16. 28/20 enemies or 4/3 wave confuses players and makes them think the level goals are bugged
17. Music for first 9-15 levels should be calm rather than upbeat
18. Crash: Error: engine/game/hitfx.lua:46: attempt to index field 'parent', engine/game/hitfx.lua:46: in function 'use' love.js:9:40605, enemies.lua:56: in function 'on_collision_enter' love.js:9:40605
19. Sage's pull force doesn't increase with unit level
20. Cleric's healing amount doesn't increase with unit level
21. Squire and Chronomancer's buffs don't increase with unit level
As I work on this project the inevitable conclusion that I came to in regards to the codebase is that everything can be conceptually simplified if every entity becomes a Node. Before I switch to execution mode for the next month to
finish this game I should take this moment to expand on the refactor that I'll work on right after this project is done.
A node is an object that has a parent and children. Nodes can be added to other nodes and it will form a tree, or a graph, since nodes can also link back to one another arbitrarily. Every object in the game is going to be turned
into a node, which means that everything will start from a root node and be initialize/updated/drawn from there.
```lua
root = Node()
root:append(Node():tag'player')
```
Here a root node is created and a child tagged with the unique identifier `player` attached to it. This means that in the node's `children` list, the first node will be this `player` node.
Each tag should be unique so that we can refer to nodes in the graph by their names, and in this case we would refer to the child node by saying `root.player`.
Similarly, `root.player.parent` automatically is set to refer back to `root`.
This simple setup eliminates the need for different types of container objects, which right now in Anchor are `Group`, `State` and `GameObject`. All of those objects have disparate/repeated ways
of handling updates/draws, when in reality they're all doing the same thing and that similarity should be conceptually reflected at the engine level.
The above code shows the main way of adding functionality to a node. Instead of defining new classes for different behaviors I prefer doing everything locally, which means defining the entire class exactly
where the instance is created. In this case, it means passing the expected behaviors as functions. In this case we have `init`, `update` and `on_enter` who expect functions to be defined and passed in, and
for brevity's sake I just passed in the variables `arena_init`, `arena_update` and `arena_on_enter`. In a real use case these would be functions defined here directly instead of variables holding a function.
A Node object expects `init` and `update` by default, but not `on_enter`. This is where the variables being passed in to the `Node()` call come in. The primary way of altering what functions a node expects
to be passed to it will happen through mixins, which are what are being passed to the node at first.
In this case, the `State` mixin changes the node such that it expects an `on_enter` function, which is called whenever the node's `active` variable becomes true (this variable is also controlled by the State mixin).
This is useful for both high level state changes, such as changing between levels, but also for low level ones, such as changing between animation states.
In this example we can see a real use case of how this node system ties everything conceptually together, as we get the same mixin code being used seamlessly for two completely different tasks.
Mixins always will derive from Object and be created according to how classic says they should be. I'll only change it so that name collisions are detected and the program exits. This will be the main way to build
objects and the last thing I need is random bugs because a function or variable from one mixin overwrote the other.
Added a spawn marker so that it's easier for the player to tell where enemies are spawning and to give a chance to avoid unfair deaths. Slowly getting back into it now...
Nothing... Finding the energy to work on this has been getting harder. I'm sure I'll get to it eventually but for now I've been spending time with some more fun projects.
# Day 52 - 09/04/21
Lots of improvements and fixes to lots of different things that needed improving and fixing. I also started on the implementation of characters and Lv.3 effects. Today I got 10 out of 40 characters done completely:
| Character | Classes | Description |
| --- | --- | --- |
| Vagrant | psyker, ranger, warrior | shoots a projectile that deals X damage |
| Swordsman | warrior | deals X AoE damage in an area, deals extra X/3 damage per unit hit |
| Wizard | mage | shoots a projectile that deals X AoE damage |
| Archer | ranger | shoots an arrow that deals X damage and pierces |
| Scout | rogue | throws a knife that deals X damage and chains 3 times |
| Cleric | healer | heals a unit for 20% of its max HP when it drops below 50% max HP |
| Outlaw | warrior, rogue | throws a fan of 5 knives, each dealing X damage |
| Blade | warrior, nuker | throws multiple blades that deal X AoE damage |
| Elementor | mage, nuker | deals X AoE damage in a large area centered on a random target |
| Saboteur | rogue, conjurer, nuker | calls 2 saboteurs to seek targets and deal X AoE damage |
| Character | Lv.3 Effect Name | Lv.3 Effect Description |
| --- | --- | --- |
| Vagrant | Champion | +10% damage and +5% attack speed per active set |
| Swordsman | Cleave | the swordsman's damage is doubled |
| Wizard | Magic Missile | the projectile chains 5 times |
| Archer | Bounce Shot | the arrow ricochets off walls 3 times |
| Scout | Dagger Resonance | +25% damage per chain and +3 chains |
| Cleric | Mass Heal | heals all units |
| Outlaw | Flying Daggers | +50% outlaw attack speed and his knives seek enemies |
| Blade | Blade Resonance | deal additional X/2 damage per enemy hit |
| Elementor | Windfield | slows enemies by 60% for 6 seconds on hit |
| Saboteur | Demoman | the explosion has 50% chance to crit, increasing in size and dealing 2X damage |
Implemented 11 characters today and was going to do more but spent a lot of time trying to make traps work and I couldn't figure it out. Have to idea guy a mechanic other than traps to fill their spot now...
Either way, 21 out of 40 characters 100% done is still good.
| Character | Classes | Description |
| --- | --- | --- |
| Stormweaver | enchanter | infuses projectiles with chain lightning that deals 20% damage to 2 enemies |
| Sage | nuker | shoots a slow projectile that pulls enemies in |
| Squire | warrior, enchanter | +15% damage and defense to all allies |
| Cannoneer | ranger, nuker | shoots a projectile that deals 2X AoE damage |
| Dual Gunner | ranger, rogue | shoots two parallel projectiles, each dealing X damage |
| Hunter | ranger, conjurer | shoots an arrow that deals X damage and has a 20% chance to summon a pet |
| Chronomancer | mage, enchanter | +20% attack speed to all allies |
| Spellblade | mage, rogue | throws knives that deal X damage, pierce and spiral outwards |
| Psykeeper | healer, psyker | all damage taken is stored up to 50% max HP and distributed as healing to all allies |
| Engineer | conjurer | drops sentries that shoot bursts of projectiles, each dealing X damage |
| Plague Doctor | nuker, voider | creates an area that deals X damage per second |
| Character | Lv.3 Effect Name | Lv.3 Effect Description |
| --- | --- | --- |
| Stormweaver | Wide Lightning | chain lightning's trigger area of effect and number of units hit is doubled |
| Sage | Dimension Compression | when the projectile expires deal 3X damage to all enemies under its influence |
| Squire | Repair | you can reroll your item choices once, these opportunities stack if unused |
| Cannoneer | Cannon Barrage | showers the area in 5 additional cannon shots that deal X/2 AoE damage |
| Dual Gunner | Gun Kata | every 5th attack shoots in rapid succession for 2 seconds |
| Hunter | Feral Pack | summons 3 pets and the pets ricochet off walls once |
| Chronomancer | Quicken | enemies take damage over time 50% faster |
Implemented more 7 units fully. Today was slower because these were all new units that also were the first units for the new 4 classes, so I had to do some more work to get it going. The rest should go faster tomorrow.
| Character | Classes | Description |
| --- | --- | --- |
| Barbarian | curser, warrior | deals X AoE damage and stuns enemies hit for 4 seconds |
| Juggernaut | forcer, warrior | deals X AoE damage and pushes enemies away with a strong force |
| Lich | mage | launches a slow projectilt that jumps 7 times, dealing 2X damage per hit |
| Cryomancer | mage, voider | nearby enemies take X damage per second |
| Pyromancer | mage, nuker, voider | nearby enemies take X damage per second |
| Corruptor | ranger, swarmer | spawn 3 small critters if the corruptor kills an enemy |
| Beastmaster | rogue, swarmer | spawn 2 small critters if the beastmaster crits |
| Character | Lv.3 Effect Name | Lv.3 Effect Description |
| --- | --- | --- |
| Barbarian | Seism | stunned enemies also take +100% damage |
| Juggernaut | Brutal Impact | enemies pushed by the juggernaut take 4X damage if they hit a wall |
| Lich | Chain Frost | chain frost slows enemies hit by 80% for 2 seconds and chains +7 times |
| Cryomancer | Frostbite | enemies are also slowed by 60% while in the area |
| Pyromancer | Ignite | enemies killed by the pyromancer explode, dealing X AoE damage |
| Corruptor | Corruption | spawn 3 small critters if the corruptor hits an enemy |
| Beastmaster | Call of the Wild | spawn 2 small critters if the beastmaster gets hit |
Finished remaining 5 characters and revised all class bonuses. So 40/40 characters and 13/13 classes done. Now the only thing left are items and then all content will be done.
| Character | Classes | Description |
| --- | --- | --- |
| Highlander | warrior | deals 5X AoE damage |
| Fairy | enchanter, healer | periodically heals 1 unit at random and grants it +100% attack speed for 6 seconds |
| Priest | healer | heals all allies for 20% their max HP |
| Infestor | curser, swarmer | curses nearby enemies for 6 seconds, they will release 2 critters on death |
| Flagellant | enchanter, psyker | deals 2X damage to self and grants +4% damage to all allies per cast |
| Character | Lv.3 Effect Name | Lv.3 Effect Description |
| --- | --- | --- |
| Highlander | Moulinet | quickly repeats the attack 3 times |
| Fairy | Whimsy | heals 2 units instead and grants them an additional 100% attack speed |
| Priest | Divine Intervention | at the start of the round pick 3 units at random and grants them a buff that prevents death once |
| Infestor | Infestation | triples the number of critters released |
| Flagellant | Zealotry | deals 2X damage to all allies and grants +12% damage to all allies per cast |
| Class | Set Color | Set Numbers | Total Units | Set Effect |
| --- | --- | --- | --- | --- |
| Ranger | green | 3/6 | 7 | +10/20% chance to release a barrage to allied rangers |
Had to ideaguy all 40 passives. Managed to do it and also get the passive selection screen working partly. Tomorrow I should finish it and start working through the 40 passives, which should go significantly faster
than the characters since I made sure to pick types of passives that were already implemented one way or another in the game.
Finished literally everything needed to make passives work, now I only need to actually make them. The more I work on this the clearer the parts that slow me down because they're annoying to work with
become. Generally it's higher level "glue" type of code, rather than the code that actually makes the thing work as a unit. So the node refactor for instance is addressing a lot of this glue code by making it conceptually the same
thing, which should make it easier to work with. The rect cutting UI idea does something similar the high level part of UI, which tends to be mostly layouting. And so on.
Lots of small fixes here and there and also made an attempt at getting the build accepted on Steam. It failed and now I'm waiting again until next week most likely since the guy didn't get to it by the end of Friday.
I also made some small graphical improvements to the game that I think will help. Now what I have left to do, in order of importance:
* General balance
* Enemies should have a chance to be spawned with a modifier as levels increase
* Every 3rd level should be wave only
* Remove "enemies killed" mode
* Balance playthroughs (record all balance playthroughs as they can be used for trailers)
* UI improvements
* Hover class highlight
* DPS list (right)
* HP list (bottom)
* Item list (left)
* Graphical improvements
* Further graphical improvements if there's time
* Trailers
* 3-4 pure gameplay playthroughs showcasing different builds
* Misc
* Better pause screen
* End screen
* Ascension mode (difficulty ramps up faster and goes higher than normal at the end)
* Music for bosses and shop
* Achievements
* Come up with a few new ones as I play the game more and balance the numbers
* Implement all the ones I already uploaded to Steam
Elites now spawn at appropriate rates. Testing out the game a little with this and it seems a lot better than before, but I need to balance a few of the elite units more (headbutter and spawner seem weak).
Also went through a bunch of smaller bug fixes and changes as I play the game more and missing details start popping up. I should leave proper balancing for later and start work on final UI improvements tomorrow.
* 3-4 pure gameplay playthroughs showcasing different builds
* 1 normal 30-40s trailer
* Misc
* NG+1-10 (difficulty ramps up faster and goes higher than normal at the end, the player also gains more gold per round, and on NG+1 and NG+5 the maximum number of units is increased by 1 (10->11->12)
* NG+10 end screen
* New music
* Credits
Tomorrow I'll start balancing the game out, which should lead to a bunch of bug fixes and small changes, and after that's done I'll get NG+1-10 working.
Once that's done I'll do credits screen, NG+10 (game complete) screen, and find new music for the game. I want something more ambient generally and less upbeat.
These 2 last weeks have been a lot of playtesting and just taking care of details. But now it's finally over.
I finally finished this game and I'm fairly happy with how it turned out. I'll write more about it in a separate blog post, I don't really have the energy to write much now.