DEV website instance!

Generalised error handling

Here is that BAIL.OUT procedure for handling general errors. I'll use it to show two distinct ways of embedding player command words in the game's responses.

proc bail.out
   local qualifier            # Local variable initialised to zero
   ifeq status, 1             # If a single word command given
     ifflag arg1, object      # If that word is an object name
       ifnear arg1
       else
         quip "There is no # here!", arg1
       fin
     else
       set qualifier, 1       # The word is not an object name, assume verb
     fin
     quip "You need to say what you want to [do with the /]{arg1}.", qualifier
   fin
   quip "You can't do that!"  # Generic no can do

Used as other than a major directive for declaring objects, OBJECT is an automatically maintained entity flag, which is true for objects (or variables pointing at objects) and false otherwise.

If the supplied word refers to an object and the object is not nearby (not carried and not at the current location), the QUIP directive will say so. The # sign in that message is a word holder, which gets replaced by the word pointed at by the ARG1 variable.

If the object referred to is present or the supplied word is not an object, we want to say that not enough information has been given. That response is very similar in either case, so I used the same meassge with an embedded switch, which is qualified by the QUALIFIER variable. The command word is, in this case, echoed via the {} construct, which gets replaced by the text (if any) with the entity pointed by the variable name.

If code execution continues past that second FIN, it means that the command being processed had more than one word (otherwise it would have been handled by one of the preceding QUIPs). That being so, a very generic "don't understand" will do the job.

Previous page            Next page


Back to the tutorial index
To the Mipmip home page
Feel free to leave a comment!
Mike Arnautov (06 May 2025)