Okay, for strings:
I'd prefer something like the "I am %v(age) years old." model, since it's the most like what's already in the language. I don't see any backwards compatibility issues there, since presumably the compiler would still accept the "I am %v200 years old." format. If it's currently possible for the game to see "I am %v(age) years old." and print it out literally, then there could a simple method for allowing the literal string to still be printed.
For temporaries:
I think the new compiler directive sounds like the best approach to me. That would be pretty straightforward to use, I think.
For new commands:
I don't have a preference about them.
For said tests:
I guess that new syntax would be ok, but there seems to be potential for ambiguity, as in this case:
if (said("talk to girl|bills sister")
Does that get translated to:
if (said("talk", "girl") || said("talk", "bills sister"))
or does it get translated to:
if (said("talk", "girl", "sister") || said("talk", "bills", "sister"))
Ok, it's a slightly contrived example, but the point is that the potential for that kind of thing exists and might get in the way.