| ! ObjNameA.h An Inform Library Extention. | |
| ! by Michael Roy (aeiddiea@aol.com) | |
| ! Tested on Inform 6.21 with Library 6/9 and | |
| ! Inform Bi-Platform 6.21 with Library 6/10 | |
| ! But should work with other versions | |
| ! | |
| ! To allow objects with "a" in their name properties to parse correctly, | |
| ! instead of as the indefinite article (which would set indef_mode) | |
| ! (So if you don't have an object with name "a", you don't need this.) | |
| ! | |
| ! Note: This only allows one "a" object per room. If you need more, | |
| ! change ObjWithA to an array and the make relevant changes. Most | |
| ! of the information about setting ObjWithA mention belowed can | |
| ! be bypassed if your game only contains one object of this type | |
| ! by setting ObjWithA = to it in your Initialise and not changing | |
| ! it at all later on. | |
| ! | |
| ! To use: | |
| ! Include this file after Verlib.h and before Grammar.h | |
| ! Set the object's properties like in the example | |
| ! object below. | |
| ! *OR*, if you only have one such object just set ObjWithA equal to | |
| ! it in your Initialise(). This method is probably easiest. | |
| ! Make sure to change the name and description properties | |
| ! | |
| ! Example Object: The A string from a cello | |
| ! | |
| !Object A_String "a string" | |
| ! with name "string" !change this | |
| ! "a" "a,word" !keep "a" and "a,word" in your code | |
| ! descripton "It's the A string from a cello.", !change this | |
| ! initial [; ObjWithA = self; ], | |
| ! react_after [; Go: if (TestScope(self, player) == 0) | |
| ! ObjWithA = 0; | |
| ! ]; | |
| ! | |
| ! If the object is contained inside of another object, the initial() | |
| ! should be put in the objects parent and changed so that it sets | |
| ! ObjWithA to the appropriate child. | |
| ! | |
| ! Revision history: July 11, 2000: 1.0: First Release | |
| ! July 19, 2000: 1.1: Fixes large dictionary bug | |
| ! | |
| ! Questions or bugs? Email me at the address given above. | |
| ! Ensure compatibility with glulx, which uses four-byte words. | |
| Constant TARGET_ZCODE 0; | |
| Constant WORDSIZE 2+TARGET_ZCODE; ! avoid compiler warning | |
| Global ObjWithA = 0; | |
| [ BeforeParsing a_word_loc next_word x y; | |
| !Don't bother checking if the room doesn't have an A-named Object | |
| if (ObjWithA == 0) return; | |
| !If the object is out of scope, the player can't refer to it | |
| if (TestScope(ObjWithA, player) == 0) return; | |
| a_word_loc = -1; | |
| !Check through the word stream for "a" | |
| y = parse->1; | |
| y = parse-->0; | |
| while(wn <= y) | |
| { | |
| x = (WordAddress(wn))->0; | |
| if((WordLength(wn) == 1) && (x == 'a')) | |
| { | |
| a_word_loc = wn; | |
| break; | |
| } | |
| wn++; | |
| } | |
| wn++; | |
| !If a_word_loc is still -1, we didn't find any a words in parse | |
| if(a_word_loc == -1) return; | |
| !check the next noun as a reference to ObjWithA | |
| next_word = NounWord(); | |
| if( UnsignedCompare(next_word, 128) ) !matched a noun | |
| { | |
| x = ObjWithA.&name; y = x + ObjWithA. | |
| for( : x < y: x = x + WORDSIZE) !loop through the names | |
| if( x-->0 == next_word) !if the word after "a" is obj | |
| { | |
| parse-->(a_word_loc * 2 - 1) = 'a,word'; !change the word | |
| parse-->(a_word_loc * 3 - 2) = 'a,word'; !change the word | |
| return; !the change replaces the "a" with one of the obj's names | |
| } | |
| } | |
| !if the next word didn't match or wasn't a noun, a is for the indef. art. | |
| return; | |
| ]; | |
Xet Storage Details
- Size:
- 3.66 kB
- Xet hash:
- aa611262120304ebc475d0f8b9c1524574a9e6a0da5c4ff35936b25c503db0c9
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.