Definitely a possibility to look into, although I can’t yet quite visualize how I could make the commands work for each item - I can currently “ort”, “ort camera”, “ort trees”, etc quite easily. Using the record and replay I may have to edit the file every time to replace the noun of what I want to test. I actually consider the “undo” thing resolved as of my last post, that solution involves only a global variable and is easy to implement - UNDO was only ever a way to avoid changing the game state in the middle of ORTing, but now that I can easily block those action from being ORTd in any instance I desire, I’m satisfied. It is simple enough to test, quit, add a line to block an ORTd action, recompile and test again. I don’t see this as a tool that is heavily used all the time anyway; a couple of times for each object, first early in development to give ideas how to mange the responses and then later when a certain section or location is as good as completed, just to make sure. This piece of code is kinda meant to reveal stuff that you go tinker with immediately, it’s not really something that has to be resilient enough to endure a lengthy playthrough.
When trying to implement ORT for the verbs which require topics, like consult and ask, I ran into the limit of what I can do at this exact point, so now I’m unhurriedly pausing ORT to continue reading through the DM4 until I get to that relevant chapter.
In the meantime, it’s already proven to be a useful tool to me, in the sense that I can look at a certain interaction result for a certain command and ask myself “is this a desirable output” and continue from there.
There are possibly many verbs that may be considered superfluous to test on everything every single time, lile swing and switchoff and pray, but since the point is to catch unexpected situations, it makes sense to cover all bases.
I’m currently least satisfied with how a user can implement their own verbs. Right now I can only envision that they have to open the .h file, go to the sub, and in the end of the sub there’s an area clearly marked where they can add new verbs, following the template of all the others. I don’t like that a user has to open the extension file directly and edit a copy of it for every game. If that’s the case I may instead recommend the code is simply copy-pasted into the project, and not kept separate.
Anyway, so it’s currently paused while I learn more I6, but it’s only those actions that are missing. In the meantime I’m actively using what I already have as I continue to experiment with examples and exercises in DM4. It’s practically finished for its intended use.
Interestingly I have found that, if during ORT I pick up an object which has a custom “after take” reply (namely the mushroom in Ruins) which checks to see whether it ‘has moved’… well, later on down the line, the mushroom is dropped during ORT as well, and if I try to pick it up again I still get the custom text which shouldn’t appear anymore. I figure that there is code to update that which only gets called at the end of all the actions, and since ORT takes and drops within a single Sub, by the end the game may check to see whether it is still where it was… and it is, because it was dropped after being picked up… so it doesn’t give it “moved”.
I am actually not very interested in ensuring that situations like the above work better because it’s outside the scope of what I intend to use this for: to quickly check responses and ensure that I find the results are desirable (and if not, add a few rules, maybe an object or two to capture an interaction which I think is too sensible not to be better recognised).
ORT has also shown to me some iffyness in implicit actions as they work by default, so I’ll need to take care. I have an action that blocks an item from being taken, but it’s implicitly taken anyway if I try to put it into another item! That’s the sort of behaviour I hope ORT helps catch, too.
Not to mention the bag thing I mentioned earlier. That’s default behaviour I’m getting, just by implementing a regular object in a regular room. So if I want to implement a sleeping bag, I need to ensure that I model properly blocking it from being implicitly taken when the player is in it, since the default world model doesn’t and results in that error.
Yep, if I know that certain implicit actions should just be removed - if I want to block implicit “taking” when “dropping” - I can resolve that by working on that level. But I still needed the behaviour to be exposed, so that I knew there was something to correct. And this is where I think ORT is useful, potentially.
To clarify: after these issues appear, I try to reproduce them manually, without ORT. And they are reproducible. So it’s not ORT screwing up.
EDIT - It’s also revealing to me that I can “drop west” to get the result “(first taking the west out of the compass) Dropped.” I’ll be honest, I expected the standard world model to be a little bit sturdier than this out of the box. But no matter! Because of ORT, I am exposing issues that need to be fixed! Because, without ORT, my code for a room where everything you drop goes to a different room - together with this implicit “take” on dropping - meant that I could drop “the west”, and have it go to a different room, and then I couldn’t move anymore! And I probably wouldn’t have though of anything to trigger this situation without the ORT.