I recently started on a prototype for a Python library that creates relationships between simple values. It was targetted more at incremental game mechanics than roguelikes, but the idea was that you could set variables and combine them into new ones, and you could later change any of them and have the new values propagate changes. Like a spreadsheet with variable names instead of a cell grid.
So you could do things like this:
Strength = Variable(18)
WeaponDamage = Variable(10)
RealDamage = Strength + WeaponDamage
print(RealDamage) #28
Strength += 1
print(Strength, RealDamage) #19, 29
I made wrappers for all the functions in the math module, a fake Boolean class that returned the correct result from the unary ~ operator (since Python boolean operators aren't compatible with this concept), and started on support for containers wrapped in this kind of Variable object.
But I couldn't figure out how I wanted iteration to work (if I wanted it at all) or what syntax I wanted to reuse groups of variables and make systems change over time. I decided to skip solving for unknown variables, since that's what SymPy is for.
The project is on the back-burner for now, because it won't be useful in my procjam or NaNoGenMo projects.