One thing you can do with a table is make a column of rules. So one thing you could do, if you really want to be able to change properties of objects from tables, is have the table run a rule that changes Property X of whatever object you want it to to value Y. Like this:
[code]Lab is a room. A rock is in Lab.
A thing has a number called weight. The weight of a thing is usually 5. Definition: A thing is heavy if its weight is at least 10.
Before printing the name of a heavy thing: say "heavy ".
Table of Happenings
subject happening
rock heavifying rule
rock lightifying rule
rock namecalling rule
yourself namecalling rule
Doing stuff from the table to is a thing based rulebook.
Doing stuff from the table to something (called the victim) (this is the heavifying rule):
say “[The victim] is now heavy.”;
now the weight of the victim is 10.
Doing stuff from the table to something (called the victim) (this is the lightifying rule):
say “[The victim] is now light.”;
now the weight of the victim is 1.
Doing stuff from the table to something (called the victim) (this is the namecalling rule):
say “[The victim] will now be called ‘dummyhead.’”;
now the printed name of the victim is “dummyhead”.
Every turn:
choose a random row in the Table of Happenings;
follow the happening entry for the subject entry.[/code]
Now something that makes this inconvenient is that every time you want to change a new property you have to add a new rule. In fact, with this code, every time you want to change a property to a new value you have to add a new rule – if you wanted to change something’s weight to 5 you’d need a rule for that. But you’ll never (I don’t think) be able to come up with a column that contains something like “the value I want to change the thing’s property to”; Inform doesn’t like table columns full of mixed stuff, so you can’t have 10 and “dummyhead” in the same column.
(Maybe you could rig something up with more tables? Have a table for number-based changes, a table for text-based changes, etc. etc., and your master table can call a row of one of the mini-tables – since you can have a column of table names. This is more annoying than anything I am willing to try to mock up right now.)
Anyway, this requires a lot of extra rules, but I don’t know if that has a big cost in overhead, because you’ll only be calling one at a time. And it’s a pain, but at least it can be done. If you want to add another row you can add another rule.