Sunday, April 21, 2019

Chapter 13. Search for Objects using SEARCH-LIST (part 2)

13.6 Update: New version of SEARCH-LIST

Only a few major changes were added to SEARCH-LIST. Zork 2 had the addition of the SEARCHBIT attribute for objects which made it easy to restrict what objects could be searched inside of. Deadline checked the SYNONYM property for an object. If that property was not set, the object was not searched as it is not likely a “real” object. Some games would use the SEE-INSIDE? predicate (instead of hard coded) to determine which objects could be searched inside.

13.7 Update: New version of GLOBAL-CHECK

The first addition was the checking if the request was made for certain actions in Deadline. If so, an additional search using DO-SL with any flags on all ROOMs in the game was done. Other games like Wishbringer and Bureaucracy had would also search the objects contained inside LOCAL-GLOBALS. Sherlock also included this but limited it to objects that were actually rooms. Sorcerer introduced setting the location of the PSEUDO object to the current location in case a routine needed to know that. Wishbringer also expanded the search of LOCAL-GLOBALS by having GLOBAL-CHECK also search inside those objects if possible.
LGOP introduced a new property, THINGS, which replaced PSEUDO that added adjectives for THIS-IT? to match. THINGS would contain entries with a single adjective (if necessary) and a noun with an associated ROUTINE address. If any given noun or adjective does not match the values in an entry in THINGS, GLOBAL-CHECK will proceed to the next entry. If there is a match, the PSEUDO objects values are set as previously described.
Several games did you a more abbreviated form of GLOBAL-CHECK. This was first done with AMFV. After searching through the current locations local-globals, DO-SL with SRCALL was called on all the game’s room objects which essentially searched all visible objects in the game. Bureaucracy did not use a typical THINGS or PSEUDO property. It used a new property which had a routine address and 1 word argument. This routine would then be called with the noun, adjective, and stored argument. An object number could then be returned and later saved in TBL.

13.8 Update: New version of THIS-IT?

Some of the games added checks to quit this routine sooner. such as a blank SYNONYM or ADJECTIVE property. AMFV removed the INVISIBLE flag check.  Bureaucracy added a special check if the given object is “intnum”. The P-NUMBER value will then be compared to prop 20 in 2 specific objects (flight number or leaflet). Also added various situations where the object given will not be matched with the identifiers. The Lurking Horror would check all the NAMs in the G99 table against all the synonyms in an object. Sherlock also checks any token associated with the given object by “of” like in “glass of milk”. It will also check the associated token to see if it matches any adjectives and/or synonyms for the object.

13.9 Update: NOT-HERE-OBJECT

Introduced in The Witness, a new object, NOT-HERE-OBJECT, stood in for any requested objects in a command that was not found. For example, if the user requested:

TAKE CANDLE, TORCH, and MATCH

but the torch was not present, the PRSOTBL would list 3 object numbers: one candle, one NOT-HERE-OBJECT, and one match. When generating the table of object numbers corresponding to the objects requested in a noun clause, any recognized object that was not present in the current location had the NOT-HERE-OBJECT number used in its place. This occurs in the GET-OBJECT routine. So the total number of returned objects is the same as requested. The NOT-HERE-OBJECT will also call the GENERIC routine of an object to try to clarify which object the player was referencing. The use of a NOT-HERE-OBJECT allowed the game to process the remaining commands and also provide a more specific error message about the missing objects.

13.10 Update: MOBY-FIND

  • Arguments: Address to object table
  • Return: Number of objects found
I don’t know what MOBY means, but MOBY-FIND was first used in to search for a match between all visible objects (including inside open or transparent objects) in Suspended using P-NAM, P-ADJ, or GWIMBIT.  This first version was used when asking about objects to the Advisory Panel. It called SEARCH-LIST with SRCALL on all the rooms. If no object was matched, MOBY-FIND would call DO-SL to search all of the LOCAL-GLOBAL objects with the results saved in P-TABLE.
The Witness had a more formal version of MOBY-FIND by using the noun and/or object to search from XNAM and XADJ (replace the values in NAM and ADJ). It would sequentially go through every room and find a matching object to XNAM and/or XADJ using SEARCH-LIST.  If no matching objects are found, then MOBY-FIND will use search all LOCAL-GLOBALS with DO-SL with SRCALL level matching. If no match is found again, then MOBY-FIND will search all the rooms again using DO-SL with SRCALL level matching. The returns of DO-SL are saved into P-TABLE. The returned value is the number of objects found at either step. If only one object is matched, its number will be saved into P-MOBY-FOUND for easy recall.
Sorcerer changed the final check on the ROOMS object back to SEARCH-LIST. AMFV used a more brute force approach but checking each object in the game sequentially. If the object is a room, it is skipped. Any matched objects are saved in a table with the number of object found returned.
Spellbreaker will use a separate routine available on some objects to see if the object should be matched during a MOBY-FIND. If multiple objects match for the given identifiers in
The Lurking Horror  will check the GENERIC property of all the matched objects. If the routine address is the same in all the object’s GENERIC property, MOBY-FIND will call that routine to decide which object to return as the match.
Sherlock has special objects that can be searched at times (Holmes) and some that are always available (like local-global objects).

1 comment:

  1. I believe MOBY was slang meaning something like "big" (from Moby Dick, the giant whale).

    ReplyDelete