It's been a while since I tried my hand at game development, but I've had an idea for a magic-based roguelike.
Basically I was thinking there are 'X' number of elements, for now, let's say we have these three:
Heat, Life, and Time.
There would be various methods of directing these elements--such as your standard projectile, directional, and AoE (and combinations thereof)--there would also be "ambient" casting and the stacking of effects on summonable objects to create emergent spell casting and schools of magic. The goal being to distill your stock spells that you encounter in every RPG into their smallest parts for the purpose of creating and entirely customizable magic user experience.
Let's say each of those elements can manipulate a variable contained by an object. Heat->Temperature. Life->Hit Points. Time->Turn Counter. And let's also say that all objects, whether inanimate furniture, deceased monsters, or living creatures all contain the same variables. Their behavior is determined by a tagging system which automatically updates an instance of an object's tags upon checking that instance's variables. Manipulating elements essentially allows you to--on a code level--increase, decrease, set, or hold one or more variable's value(s)--depending on the element being used to cast spells.
Example 1: Necromancy and Resurrection and unintended side effects.
In a normal RPG you may know how to resurrect someone or how to raise their corpse as a shambling undead. In this game, they're two sides of the same coin.
Simplified, when an object's health is a negative value it is undead, if it's zero it's just dead, and if it's positive it's alive.
So, you kill a goblin. You want to fight it again. You've got several options. You could manipulate it's HP with a life spell and resurrect it--it'll be confused and angry and probably start hitting you--or you could bring back as a Zomblin--devoid of emotion, but it'll probably start hitting you anyways so it can consume your flesh. A third option would be to rewind it's turn counter with a directed time spell, bring it back to whichever state of living it was in X number of turns ago, and then regardless of whether you kill it or not, Y turns later it reverts back to the shape it was in before you used a time spell to bring it back to life (or not, it's your time spell you continuum-shattering disaster).
Now you may recall that ALL objects have HP--because they're objects. Inanimate ones just start with 0. If you want to create living armor or a hat that talks well...
... Just make sure you remembered to imbue them with positive life force rather than negative.
Example 2: Combining elements to kill stuff in new and interesting ways.
Due to the way I've sorted things, you're not really in the market of casting fireballs in this game. Let's add a fourth element: Matter. This doesn't effect variables like the other three--most elements will, some will not--instead you can generate and degenerate matter.
Now lets say that in addition to being able to cast single-element spells, you can save multi-part incantations and invoke them all at once to achieve the desired effects.
You meet another gobline--you've just killed, then re-killed his brother--whoops. Guess you'll have to kill this guy now too. There's a lot of ways to do that luckily. If you're strong enough, you can simply heat him up until he melts or cool him down until he freezes or degenerate him entirely--but that'll take a lot of raw magical power (not sure how spell cost will be measured yet, but probably just a mana pool of some sort). Instead, let's make a quick incantation.
Matter: Generate 1lb stone ball.
Time: Freeze stone ball's time for X turns.
Heat: Increase stone ball's temperature to 3000°F
Great. You invoke your spell. Now you have a stone ball that's gonna turn into lava in X number of turns. You throw it at the Goblin, and because you're so fuckin' fly, you dumb wizard, you time it perfectly and he catches a heaping pile of molten stone to the face--instantly killing him. Nice job.
But you're a sick fuck so you resurrect him. Let's make another multi=part incantation for a more powerful wizard.
Time: You freeze the goblin for X turns.
Life: You decrease goblin's health by Y for X turns.
If you're powerful enough to sustain it, you'll kill him, and by the time he's unfrozen he'll just collapse into a heap. If you really want to engage in some overkill you can up the life element and either turn him into a zombie instantly--useful for distracting groups of other concerned goblins--or take his health down past -100, turning him into a pile of dust. Well done, Hero.
Example 3: Blinging yourself out.
Now that you've killed a few goblins you're feeling' pretty good about yourself. You know what you need now? A flaming sword. Don't worry there's a multi-part incantation for that. First though, we need to have a sword so we can apply the effects.
Matter: generate oil on sword for X turns. (applied probably as a tag to the sword, magic can cause material to generate from objects in several amounts going from insubstantial [like oil dripping off the sword, but not creating puddle or anything] to torrential [like flooding a room moments after someone touches an enchanted pebble]).
Heat: increase temperature of sword to 350°F for X turns.
There you go. I hope you brought some insulated gloves, otherwise you just lost your hands. Wooo!
I think I've made my point here. The goal would be to be able to have ~50-100 elements that could combine in interesting ways. Variables would just be dependent on the physics necessary to make stuff happen and track character skills. (casting spells to increase your concentration to increase your ability to cast spells? Aw yis.)
I hope that in many cases what you can accomplish is ridiculously OP as long as you have the mana reserves. Thoughts, concerns, good idea, bad idea? I'm not sure how quickly the game could run tracking potentially dozens of variables for hundreds or thousands of objects at a time. The hardest part would definitely be the non-standard elements like Time and Matter that don't just apply to one variable of an object or tile and keeping track stuff like every object's last 10 turns and etc.