Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Hey!
Just published a update with balance chances (no more basic abilities as a reaction), more detailed descriptions, and more interesting crystal upgrades!
Later this week, I intend to add unlockable units (they might show up in the silver/gold encounters)
This took a longer time, because I added new targeting and effect options to be used by the new units and crystals: target strongest/weakes ally/enemy,  every 100 damage/heal/shield or 10 poison/regen, on over heal, on re-haste/re-slow, and more.

By the end of the week I hope to have a good package to finally apply the "1.0" label over it!

Looking forward to testing it tomorrow, most likely.

(9 edits)

Ok, so there are issues. The change to Crystalline Geode completely breaks the game. To the point where my 7600x got stuck at 100% utilization and the game froze for around 30s at wave 16. Basically the crit only going to row is insanely OP. Making it so whatever is on that row becomes godlike instantly. Just slap a regen and shield unit on the same row and you cannot take damage. To make matters worse, Mana Source and Crystalline Geode (at Tier 1) create an infinite loop. The triggers from Geode charges Mana Source that then Hastes Geode + the other row ally which causes Geode to give crit 4 times which charges Mana Source. You get the point. I then upgraded Mana Source to Tier 2 for funsies. This was what broke the game completely. The -power on crit upgrade for the Core is also completely broken. Since it goes up to -300% power to 7 units pretty much instantly. This sets enemy units to like -1.4m power and is probably part of what causes the CPU to just die. Had to abandon the run at that point since it was effectively unplayable.

Edit: Oh and the grammar of unit descriptions has issues. Specifically the syntax you use works for spell effect, but not on damage. I forget what the exact wording is, but the expected wording would have been something like "on dealing damage" but it was instead "on used damage". Something to that effect.

Edit2: On some more testing, the infinite only seems to work with Quick Core. That being said I just got 10 wins running only Protective Core + Geode+Mana Source with no other units. So yeah, the power level of that row is not okay.

Edit3: The exponential growth re-slow and re-haste skills also have issues, as can be seen below:


Those two units started the fight with like 2k power. They now have 2.1 and 4m power and the Mana Source also has several thousands of crit despite that being a tier 1 Geode.

Oh and if you tab out of the game (to write this post, for instance) from the end screen where you pick if you want to go infinite mode or not. That run just disappears, no choice to pick resume run and go infinite. It's just gone.

Edit4: The regen unit that gives crit to column instead of row on any is also completely busted. Got it with +1.1x on crit and it instantly killed the game. Last I saw one of my units had 16b power on wave 9 before the game crashed (after being frozen for over 5 minutes).

Edit5: Fatigue counter renders on top of menu.

Edit6: Fatigue damage is way too low. Every single fight beyond the super early game goes to full Fatigue duration, which means it becomes optimal to build 0 damage and 0 poison. Then just do a full shield+regen permanent scaling build, and just sit out the full duration every fight, to outscale the curve as long as possible.

Edit7: The bug where permanent +10% crit gets removed between rounds when you give temp crit still persists.

Edit8: All the various power share bugs are still a thing too. I'm on wave 75 with there being 0% chance of anything killing me. But I'll have to abandon the run because it seems the game just cannot handle power numbers in the millions very well. Just loading into a fight freezes the game for 5+ seconds and 100% utilized at least one core every time it happens. Then once the fight starts it's just a slide show. The game especially struggles with regen and poison once they get north of 1m per tick (and that happens in seconds). When I dropped my 17m power poison guy for a 27m damage guy instead. It temporarily made things not that bad. Then I upgraded my regen guy from 4.4m power to 20m or so and the game went into full slideshow mode again. The biggest difficulty currently isn't the enemies. It's trying to make the game not crash.

That reaction of the geode was the only leftover all+allies reaction (removed all the others, because not only they were extremelly op, they were also braindead reactions). Also changed directions in the mana source, because hasting the same units that charge you can't end well.

Also adjusted the description template - I'm trying to find a good way of handling non-indo-european languages, now that the descriptions are no longer using the [source]->[effect]->[target] format. This was the main frustation for new players, as the short descriptions are gibberish to them, and source of my only negative steam review : ( . Maybe we can add an option to use the short version, might be useful for more experienced players (warcraft 3 had that).

Also changed how silver/gold stores work: you get a stronger unit, but it's just one (you can't choose), so there's some risk involved because that unit might now fit into your current build.

Also the random events can't repeat in at least 5 turns.

Just published an update. 

Next step should be adding unlockable units with more advanced mechanics (eg. a balancer that  removes 5% power from the strongest unit and adding 10% to the weakest).

(1 edit)

The other crit builder (+crit on row when row does something) is basically equally OP as the Geode. Also a large part of the issue with Mana Source is how the charge works, it charges 0.5s per effect on its row allies. So since some allies do 2-3 things every time they trigger, sometimes even more with how they seem to interacts with core abilities. It means that instead of charging 0.5s every time your row allies go off. It charges 1.5s, which makes it trigger A LOT. It becomes an infinite regen source with barely any upgrades.

The "big number issue" whatever in the code it might stem from, is what worries me a lot. Since 10 win is so easy and over so quick, I see infinite mode as the game. And this issue made infinite mode basically unplayable. Hell the 1.1x on crit/re-haste/re-slow broke the game to the point of crashing as soon as wave like 4. So that isn't even an infinite mode issue. Spammable exponential growth is just not the best idea unless your game is built to handle absurdly large numbers (like most incremental games).

The way crit works in general is just so overpowered that any build that doesn't stack crit is simply useless compared to any build that does stack it. With it being as strong an effect as it is, it should be really sparse and hard to come by. But last patch it was everywhere. Also the +power to core upgrade needs to be tuned down a lot. Since it's deterministic and you get it every single round, it just gets out of hand too fast. Add in that there is still the bug where any time you use a +flat power the unit forgets any % modifiers, and you can just use 25% row share, then use +power on the core and it will regain the 25% power it lost and then gain the +power. Meaning you can just yoink 5m power from your core then instantly get it back for free next wave.

Edit: Oh and yes please on the tooltip toggle. I much prefer the old version, let you see what a unit did at a glance much faster. Also made it more instantly apparent what was part of the CD ability and what was part of the reaction. It would also be very nice to have lockable tooltips where you can mouseover terms and a get a tooltip as to what exactly it means, it took me a second to realize that re-haste and re-slow wasn't a new mechanic. But rather just haste being reapplied to an already hasted unit etc.

I found a way to avoid the "any" effect trigger multiple times for the same unit action, that should help avoiding multiple triggers to haste and charge, as that can make things go off the charts pretty quickly.

I agree that spammable percentual boosts are not a good idea, that's something better tied to a effect tied to a unit with large cooldown.

The health/power boosts for the cores are also overtuned (I tried to make them increase with a function, but I need to tune them down for the first rounds).

Crit needs some rethinking, because now it is the same as a % percentage boost. So it creates a spammable % boost. One way might be grating 1/5 of the value above 100% as 1 pwr - the player still gets something, but going over 100% is not optimal.

(1 edit)

Yeah, the re-haste core reaction for crit is nuts. I got it twice and it scales up to 480% crit per trigger to 8 units very, very early. I got it twice on my Prot core in the same run.

Also prot core is crazy OP. It being shield is already good, having +5 permanent on top of that is just crazy. You just build a regen+shield board early and let every round go to max fatigue. By round 2 you've already outscaled all possible enemy damage and it only gets worse from there.

Once crit gets fixed to something more manageable. Honestly even with the 1/5th value thing it would still be what I'd stack. Because you still have full infinites. So like your right column will just be column +crit guy, prot core and arcane anomaly. Anomaly+core creates an infinite loop and the crit guy gives 100% crit to both basically instantly and then scales them to the moon with flat +power. Not as badly as right now (i normally end up with like 270,000% crit by the end of a round. Unless the game crashes before then.) But yeah, I'd say as soon as crit is fixed, arcane anomaly and gunslinger should probably be next.

Oh and as much as the change to mana source made it less insane, it's still insane. You just have to put in a little bit more work to make it so. (put it, water elemental and crit column regen guy on the same row and they outscale anything the enemy can do to you until like wave 50).

For early game that shield dog that gives permanent power to column on row haste is basically mandatory as it gives you instant easy permanent scaling AND shield AND column haste.

Then later you get the froggo with mana source and the ent above it to just trigger regen like mad and give flat +power to your core until it's stong enough that the core +power upgrade every level just sends it to infinity. I had a 1.2m prot core when I retired my last run at wave 78 due to lag. If power share wasn't still bugged you can then just share 25% of that to your Mana Source and Arcane Anomaly and now you have infinite regen, shielding and damage. Well you would if the game didn't completely die when you have those numbers.

I'd say overall everything with permanent scaling is currently OP. Because the choices just don't make sense. Would you like a unit that gives +5 temp power on haste or a unit that gives +4 permanent power on haste? That's not really a trade-off worth thinking about. Why would you pick temp power when the upside is +25% per trigger? I don't really think anything should have more than 1 base permanent power gain. Look at the ent, it starts at 1 permanent power gain and it still somehow always ends up being like a 20k power unit eventually.

The other overall just general balance thing is that full tank is just too good. There is just no reason to build damage when you can always out-tank the enemy. And there is currently no room to really increase damage output, because of how small health pools are. But then again, if defenses were made weak enough that you needed a health buffer, I'd just start taking the +health option on core level up again. Currently it's completely pointless due to how much shield+regen you get and how hard enemies hit (pre 10 since they can't break your tank, then in infinite it's because you can't keep up with their damage scaling)

Edit: I'd strongly advice to just implement an internal cooldown as well. At least until you've fixed all the infinites, assuming you want to remove them at all. Because the game just simply cannot handle the current infinites. I just made a very, very weak infinite with low numbers (by this game's standards). And it still became CPU melting at wave 36. Oh and until the +crit reactions are either tuned waaaay down or just removed. Crit core is useless. It gives like +10 crit at the same time that a core reaction would give +100 crit to 4 allies. Like what is even the point at that stage? Same with the +x instead of +x* cores like mana crystal. It just doesn't do anything when compared to the reactions. There really isn't any reason to pick any core but prot. Since your core is just a reaction stick, with the only possible relevant upsides being permanent scaling (yay) or shielding (also yay) or regen (we get regen elsewhere, don't care).

So, I finally finished adding some unlockable units (it unlocks based on total stats, so you should have most of them when booting).

I changed the balancing, in two main points:

- the great simplification: bronze units do up to 2 things, the base effect and another effect or reaction. Currently everyone reacts to something, and I think that it makes stuff overwhelming. Only the crystals and gold units will have 3 things on them.

I'm thinking about adding events for later rounds, allowing you to add a set of predefined reactions based on types (not completely random). That would help making bronze units more useful later on. In the same way, we can have encounters to replace/buff effects. Another idea, for far in the future, is an encounter to let you change keywords in an effect, like replacing "column" with "row". 

- effects vs reactions balance: I was stupid and designed a "points" system for how much each type of action or reaction would cost, having a "budget" for each card. The idea was using cooldown to balance that. The issue is that the reaction doesn't rely on the cooldown, as it's always in stand by. So now the idea is first dividing the ponits between active and reaction first, and use the cooldown to scale only the action. I'm building an excel with some charts.

For scaling effects (power up), the idea is that they yield "profit" over the regular skills after 20s of combat.

Permanent boosts should be made more scarce, we can do that by limiting to which type of effects they trigger to (never "any"). That should also reward control builds that make the combat last as long as possible.

Here's a preview of the new unlockable units:

{
// power distributor
id: "walking_reactor",
pic: "boss_protector",
power: 30,
rank: 2,
locked: true,
cooldown: 5200,
effects: [
shield,
distributePower(row),
],
reactions: [
reaction("all", "column_allies", increasePower(20, self))
]
},
// power absorber
{
id: "spectral_knight",
pic: "boss_gol",
power: 45,
rank: 2,
locked: true,
cooldown: 5200,
effects: [
damage,
absorbPower(column)
],
reactions: [
reaction("all", "row_allies", increasePower(20, column))
]
},
// re-haste
{
id: "gold_protective_crystal",
pic: "yellow-stone",
power: 30,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
shield,
haste(2000, row)
],
reactions: [
reaction("re_hasted", "allies", increasePower(20, self))
]
},
// re-slow
{
id: "corruption_bringer",
pic: "boss_legion",
power: 45,
rank: 2,
locked: true,
cooldown: 5000,
isCore: true,
effects: [
poison,
slow(2000, randomEnemy(2))
],
reactions: [
reaction("re_slow", "allies", decreasePower(2, strongestEnemy))
]
},
//on_crit
{
id: "frontline_dasher",
pic: "boss_kane",
power: 60,
rank: 2,
locked: true,
cooldown: 5500,
effects: [
damage,
increaseCritical(10, column)
],
reactions: [
reaction("on_crit", "allies", increasePower(20, column))
]
},
//over_heal
{
id: "gold_quickstone",
pic: "haste-stone",
life: 1500,
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
heal,
],
reactions: [
reaction("on_over_heal", "allies", increasePower(5, allAllies, true))
]
},
//Balancer
{
id: "gold_quickstone",
pic: "haste-stone",
life: 1500,
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
shield,
decreasePower(5, strongestAlly),
increasePower(15, weakestAlly)
],
reactions: []
},
//metronome
{
id: "gold_quickstone",
pic: "haste-stone",
life: 1500,
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
regen,
],
reactions: [
reaction("all", "left_ally", haste(2000, right)),
reaction("all", "right_ally", haste(2000, left)),
]
},
//damage -> poison
{
id: "essence_harvester",
pic: "boss_malyk",
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
poison,
],
reactions: [
reaction("every_100_damage", "allies", increasePower(10, allAlliesOfType("poison"))),
],
},
//poison -> damage
{
id: "plague_incubator",
pic: "boss_manaman",
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
poison,
],
reactions: [
reaction("every_10_poison", "allies", increasePower(10, allAlliesOfType("damage"))),
],
},
//regen -> heal
{
id: "gold_quickstone",
pic: "haste-stone",
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
regen,
],
reactions: [
reaction("every_10_regen", "allies", increasePower(10, allAlliesOfType("heal"))),
],
},
//shield -> damage
{
id: "tempest_ravager",
pic: "boss_invader",
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
regen,
],
reactions: [
reaction("every_100_shield", "allies", increasePower(10, allAlliesOfType("damage"))),
],
},
//shield -> heal
{
id: "paragon",
pic: "boss_paragon",
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
regen,
],
reactions: [
reaction("every_100_shield", "allies", increasePower(10, allAlliesOfType("heal"))),
],
},
//heal -> regen
{
id: "gold_quickstone",
pic: "haste-stone",
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
heal,
],
reactions: [
reaction("every_100_heal", "allies", increasePower(10, allAlliesOfType("regen"))),
],
},
//regen -> heal
{
id: "Mend Sage",
pic: "boss_orias",
power: 55,
rank: 2,
locked: true,
cooldown: 5200,
effects: [
regen,
],
reactions: [
reaction("every_10_regen", "allies", increasePower(10, allAlliesOfType("heal"))),
],
},
//gambler2
{
id: "gold_quickstone",
pic: "haste-stone",
power: 45,
rank: 2,
locked: true,
cooldown: 4500,
effects: [
damage,
multiplyPower(1.2, self),
multiplyPower(1.4, weakestEnemy)
],
reactions: [],
},
(10 edits)

Should be interesting to play around with.

As for the cooldown scaling thing, that's also an infinite mode issue I've been meaning to bring up. It seems that the enemy scaling is "flat" as in all units gain x power where x is based on some exponential function.

This means that past a very, very, very early point. Whatever the base power of a unit was is completely irrelevant. All that matters is their cooldown (part of why old Shadow Assassin was a run ender). A unit with 2 million and 20 power is no different than a unit with 2 million and 60 power. But one has a 2s CD and the other has a 6s CD. It causes all units to lose their identity over time.

The same is obviously true for all flat power reaction units. Having +20 power whenever something hastes only matters very early for the enemy. Beyond a point all that matters is their base stats. So every unit that doesn't do crit/haste/charge is just reduced to a stat stick with a CD. Nothing else on the unit is relevant.

I think moving some of the enemy scaling away from flat power gains and towards scaling their flat power reactions would make your enemies scale a lot more like you scale and make stat check one-shots less prevalent. Currently you either die from the first hit from an enemy in infinite, or you literally cannot die as you will outscale them through the fight, and then be stuck in slideshow mode for about 5 minutes as the game engine dies trying to process everything scaling towards infinity.

Because it's not even a CPU limit past a point. Yes at first you have a couple cores pegged to 100%. Then the engine itself just loses its will to live and you drop to like 60% utilization as the game just grinds to a halt. Then when the enemy dies, the wave doesn't end. The game just keeps resolving triggers that got backed up for another couple minutes before you can end the wave.

The freeze on loading into waves that starts around wave 66 is also still a thing and it gets longer for every wave. I'm guessing something about how that exponential function adds power to enemies is the reason it just takes longer and longer every single wave and starts to be problematic once power added is north of 1m.

Edit: Just faced a 1.2k power column +20 knight thingy on wave 4. That's not okay.


This amount of shielding was not enough to beat it, for reference. It just one-tapped me before I really got to do anything.

Edit2: When I reloaded the run after editing this post, my units swapped positions by themselves, breaking my combo. So that's a new bug.

Edit3: Wave 8 and the game is broken, have to retire the run.


The core is stuck in an infinite reaction loop as you can probably tell from the reaction sprite being layered so much it's just a white circle.

If I had to guess, it's that the overheal caused my bottom regen dude to have 1m power regen (also that unit was already good, now it's OP with row charge instead of charge right). So every time it goes off it triggers the +2 power to allies 100,000 times. Since it's charging the Water elemental to its right, that is just overhealing non-stop pushing the 1.4x power on top of that to create numbers that maybe shouldn't exist on wave 8.

Edit4: The "Every 10 regen do x" just killed another run at Wave 13. That effect either needs to be scrapped or you need to code it to work way more efficiently. It just breaks the game currently.

Also so far outside of a single random "get a gold unit" store I haven't seen a single one of the new incredibly overpowered units in stores. But my enemies usually have 1-2 of them on their board. Meaning that if you are unlucky and hit a board like that before you've hit full build with enough scaling/upgrades. You simply lose and no choice you made could have changed that. Going damage seems completely doomed currently as most enemy boards spam shield/regen to the point where nothing you could have built damage wise at that wave would ever break their tank. So it's just a tank-off until fatigue kills.

Edit5: bruh, I just faced TRIPLE golden new OP unit on WAVE 1.


Edit6: Not sure if bug, or intended. But when a unit that slows 4 targets uses its slow, it counts as 1 slow for the Poison Core's reaction.

Edit7: Made it to Wave 60 before the game hard crashed. It did not enjoy my 368B power Witch, at all. So yeah, you can get about 2/3 of your board infinite still. Water Elemental + Arcane Anomaly + That row charging regen dog in one column. Then you put Shielder+<haste/slow/crit for whichever reaction your core got> on the dog's row and you have infinite shielding, infinite regen and infinite damage with a flex slot for infinite slow or haste or crit, whatever you feel like really. Takes a bit to come online, but it's still there.

Edit8: Ooh boy is the -% power bugged.



Which leads to this:

The overflow is real, and it will kill you (and your CPU). I instantly closed the tab when I saw this happen, but it still yeeted my CPU to 90 degrees instantly, who needs Cinebench anyways? This is more of a CPU stress test.

(1 edit)

Now that all features that I wanted are in place I'm going to focus on bug fixes and balance.

The scaling is based on a function that creates a pool of power to distribute based on the formula (roundNumber * 10) * (1.2 ^ round -10), so after the 10th round it starts scaling exponentially.

Once I introduced the "x every y" has this issue on large numbers, I'm going to adjust it to create a single effect with (eg. for 2 power on every 100 damage, if someone deals 1000 damage it generates a single effect of 20 power instead of 10 effects of 2 power). I'm also going to add a delay of 100ms for reactions to trigger, that should stop those loops.

To make units keep their relevance, we can have some effects that allow upgrating the effects/reactions, as if they were being upgraded beyond platinum (maybe even have a label like platinum III, IV etc), something like  the MU online level of infinite scaling. Haste/slow would not benefit as much, unless if I substituted re-haste/re-slow for "every 10s of haste/slow applied" - that would scale on the same factor.

For this week, the priority is improving the gameplay feel, removing remaining wonkyness and buggy behavior.

Edit: Going to address the negative numbers and the inifite loops in a hotfix ASAP

(3 edits)

Haste and slow probably don't need that added scaling. Their effect is a multiplicative scaler on everything already. Doesn't need to be stronger than that. If you have haste, all those other units that just gained scaling will now have twice the scaling because of the haste. And the opposite for slow, halving enemy scaling, effectively. Currently all the re-haste and re-slow abilities are so strong they literally break the game. So they don't exactly need *more* scaling. The fact that you're allowed to reduce CD of units over time kind of automatically makes re-haste and re-slow happen more often. For enemies since their cooldowns stay the same, I'd say the one thing that might be worth scaling is how long their hastes last for. So that eventually your enemy boards are very likely to get perma hasted, making trying to include slow in your own build a lot more incentivized. Currently I only really run slow to abuse the busted re-slow effects. Not for the slow itself, unless you can fit a slow in your infinite loop. It's simply too slow (hah) and too inconsistent at slowing what needs to be slowed, to be worth using for its actual effect.

Edit: The internal cooldown means in combat lag is now completely gone (at least from all the things that used to crash the game). However the load in performance issues still persist. At wave 84 currently and I'm spending more time frozen than not frozen and chrome is starting to throw "this page is not responding" messages just before it finally managed to load in. It's also auto-closing full screen mode every load.


That's what my CPU load looks like, the slope is actually playing the game. The plateau is trying to load into the next fight. And that ss was from like wave 82, it's getting much much worse every wave at this point. Also I'm getting integer overflow on all my regen units dropping them to 0 regen. But since they have put up aroung 700,000,000T regen by the time it happens. That's not so much of an issue. But sometimes they manage to pump enough regen/s that it too overflows to 0. Which might eventually kill me (but the game will crash before that point on load i'm 99% sure) also the scientific notation on the end of fight screen doesn't kick in until 10^21, which might be a bit too late, and when it does it doesn't cut off fractions. So the number still goes outside the tooltip by a lot.

Edit: New bug, when you get into this lategame stage the sound effects won't play during the fight. It's completely silent, then at the end of the fight it plays every single sound effect that should have played at once, over the top of each other. And as is often the case when the same sound effect plays over itself, it increases the volume. I damn near blew out my left eardrum as a result. So for now I'm playing full muted.

Edit2: Calling it quits at wave 90. The freezes are now several minutes long. Wanted to go for wave 100 since the enemies has literally no shot at touching me. But the lag is just too much.