Most of the ideas I had for weapon effects could be phrased "when X, do Y". When this hits an enemy, stun them. When this kills an enemy, charge the player. Made a basic description language with this format; level / trigger / conditions / effect / conditions. Exceptions are passive effects like "you have an extra hit point", "this weapon is ranged", these can squeeze in as special cases. So weapon data file looks like this:
L1 kill restore_red
L2 kill cursed restore_red
L1 hit cursed damage_blue
L1 move_onto percentage_level 10 20 30 50 curse
L1 hit boss damage_blue num_level
Started with a basic set of triggers: hit, kill, level up, start of turn, move onto; and basic effects: hit, kill, damage (red or blue), heal (red or blue), stun, teleport, feed; also modifiers to specify whether the target of the effect is the enemy being attacked, a random enemy, all enemies, or enemies of a specific type. Already just combining these generic triggers and effects creates a lot of possibilities, and having a simple text format for them makes it easy to try out different possibilities. The in-game rule text is automatically generated from this code so I'm not constantly having to update two copies whenever I change anything.
So far with these effects there aren't many interactions between weapons, just some basic tactics. Deck-building is all about combos, different pieces than can combine together to make a bigger effect, I wanted exciting ways you can put some weapons together and they explode. Simplest interaction would be for one weapon to just modify another, so we get something like the Whetstone. Trying out these kinds of effect, they tend to be very strong and fairly complex, but also not very interactive because the modification happens once and then you just play with the new version. (Ongoing modifications are hard to pull off in such a small space, like with maximum damage 4 an effect like "increase damage of another weapon when this kills an enemy" doesn't have much room to work in.) So I didn't put many of these.
I needed some kind of economy, one weapon creates a resource and another weapon spends it. Something cyclic, an engine that takes constant interaction to produce and consume, rather than a static bonus. Started with the concept of "charge", a simple resource you can only carry one of - when weapon A gets a kill you become charged, then with weapon B you can discharge for extra damage. Went through all the combinations of this with the primordial effects - charge on hit, charge on kill, charge on level-up, discharge to damage, discharge to kill, discharge to heal, discharge to stun.
As well as granting a status effect to the player it made sense to grant one to enemies too, so I put in the concept of cursing. Thinking a bit of Netrunner's tags here. Again, go through all the combinations - curse on hit, curse another on kill, extra damage to cursed enemies, discharge to curse, charge when you kill a cursed enemy. Playing this version of the game, some things kind of worked but overall it had gotten very complicated, too much to keep track of. There were too many ways of doing the same thing, maybe I needed to prune it down so that charges and curses each had separate types of effects they produced. I'd also added the possibility for weapons to spend hit points for an extra effect and I realised charges weren't doing much different to this - "spend charge to stun" and "spend #b to stun" felt very similar, both spending a resource that was attached to the player.
As status effects, curses were more interesting than charges because they created more possible situations - different subsets of the enemies on screen could be cursed to create different setups, but the player being charged is always only one thing. And as a resource to spend, hit points were more interesting than charges because they also interacted with enemy damage. So I dropped charges, kept curses, and ended up limiting hit point spend to just blue. Through most of development curses had no innate effect which had some elegance ("but what do curses do?" "exactly what your cards say they do") but they needed a little extra and I got convinced to give them an effect of their own, again nice because it makes curse weapons contribute something even if you don't go for a combo.