by Roody_Yogurt » Fri Jun 14, 2013 11:50 am
Ok, I have uploaded some new files. The following zip contains my latest parser.zil, a "newverbs" file, and a stub file (I see now that there is an empty.zil file in the ZILF distribution, but this new one has AGAIN and UPDATE-STATUS-LINE support for XZIP games):
https://docs.google.com/file/d/0B_4ZXs4 ... sp=sharing
Here is the code from the "new verbs" file:
Code: Select all
<SYNTAX LOOK IN OBJECT = V-LOOK-IN>
<SYNTAX LOOK INSIDE OBJECT = V-LOOK-IN>
<SYNTAX LOOK ON OBJECT = V-LOOK-IN>
<SYNTAX LOCK OBJECT = V-LOCK>
<SYNTAX UNLOCK OBJECT = V-UNLOCK>
<SYNTAX LOCK OBJECT WITH OBJECT (FIND KEYBIT)(HAVE HELD CARRIED)= V-LOCK>
<SYNTAX UNLOCK OBJECT WITH OBJECT (FIND KEYBIT)(HAVE HELD CARRIED) = V-UNLOCK>
; a routine to handle openable/closable items
<ROUTINE OPENABLE-RULES ()
<COND
(<VERB? OPEN>
<COND
(<FSET? ,PRSO ,OPENBIT>
<PRINTR "It's already open.">)
(<FSET? ,PRSO ,LOCKEDBIT>
<TELL "You'll have to unlock it first." CR>)
(ELSE
<FSET ,PRSO ,TOUCHBIT>
<FSET ,PRSO ,OPENBIT>
<TELL "You open the " D ,PRSO "." CR>
<DESCRIBE-CONTENTS ,PRSO>
)
>
)
(<VERB? CLOSE>
<COND
(<NOT <FSET? ,PRSO ,OPENBIT>>
<PRINTR "It's already closed.">)
(ELSE
<FCLEAR ,PRSO ,OPENBIT>
<TELL "You close the " D ,PRSO "." CR>
)
>
)
(<VERB? EXAMINE>
<COND
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "The " D ,PRSO " is closed.">
)
(<FSET? ,PRSO ,OPENBIT>
<TELL "The " D ,PRSO " is open.">
)
>
<COND
(<OR <FSET? ,PRSO ,OPENBIT> <FSET? ,PRSO ,TRANSBIT>>
<TELL " ">
<DESCRIBE-CONTENTS ,PRSO>
)
(T
<CRLF>
)
>
)
(<VERB? LOOK-IN>
<COND
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "The " D ,PRSO " is closed." CR>
)
(<OR <FSET? ,PRSO ,OPENBIT> <FSET? ,PRSO ,TRANSBIT>>
<DESCRIBE-CONTENTS ,PRSO>
)
>
)
>
>
; a routine to handle always-open or surface objects
<ROUTINE CONTAINER-RULES ()
<COND
(<VERB? EXAMINE LOOK-IN>
<COND
(<OR <FSET? ,PRSO ,SURFACEBIT> <FSET? ,PRSO ,TRANSBIT>
<FSET? ,PRSO ,OPENBIT>>
<DESCRIBE-CONTENTS ,PRSO>
)
>
)
>
>
<ROUTINE LOCK-RULES ("AUX" KEY)
<COND
(<VERB? UNLOCK>
<COND
(<NOT <FSET?,PRSO,LOCKEDBIT>>
<TELL "The " D, PRSO " is already unlocked." CR>)
(<AND <NOT ,PRSI> <SET KEY <FIND-IN, WINNER, KEYBIT "with">>>
<TELL "You unlock " D ,PRSO " with the " D .KEY "." CR>
<FCLEAR, PRSO, LOCKEDBIT>
)
(<AND, PRSI <FSET? ,PRSI ,KEYBIT>>
<TELL "You unlock " D ,PRSO " with the " D, PRSI "." CR>
<FCLEAR, PRSO, LOCKEDBIT>
)
(T
<TELL "You don't have a key that fits the " D, PRSO "." CR>
)
>
)
(<VERB? LOCK>
<COND
(<FSET?,PRSO,LOCKEDBIT>
<TELL "The " D, PRSO " is already locked." CR>)
(<AND <NOT ,PRSI> <SET KEY <FIND-IN, WINNER, KEYBIT "with">>>
<TELL "You lock the " D ,PRSO " with the " D .KEY "." CR>
<FSET, PRSO, LOCKEDBIT>
)
(<AND, PRSI <FSET? ,PRSI ,KEYBIT>>
<TELL "You lock the " D ,PRSO " with the " D, PRSI "." CR>
<FSET, PRSO, LOCKEDBIT>
)
(T
<TELL "You don't have a key that fits the " D, PRSO "." CR>
)
>
)
>
>
<ROUTINE V-LOOK-IN ()
<COND
(<FSET? ,PRSO ,PERSONBIT>
<PERFORM ,V?EXAMINE ,PRSO>)
(ELSE
<PRINTR "You'll have to tell me how to do that.">)
>
>
<ROUTINE V-LOCK ()
<TELL "The " D ,PRSO " does not have a lock." CR>
>
<ROUTINE V-UNLOCK ()
<TELL "The " D ,PRSO " does not have a lock." CR>
>
So, I lump always-open containers in with surfacebit objects, as I thought the determining factor was whether the game needs to print "The [x] is open." The main drawback to my handling, I think, is that the CONTBIT is not very important, but I think doing things this way has its benefits.
Here is some example code that uses the new verbs above:
Code: Select all
<OBJECT BOX
(DESC "box")
(IN STARTLOCATION)
(SYNONYM BOX)
(FLAGS CONTBIT)
(ACTION BOX-R)
>
<ROUTINE BOX-R ()
<COND (<OR <VERB? OPEN EXAMINE CLOSE> <VERB? LOOK-IN>>
<OPENABLE-RULES>
)
(<VERB? UNLOCK LOCK>
<LOCK-RULES>
)
>
>
<OBJECT DOLL
(DESC "doll")
(IN BOX)
(SYNONYM DOLL)
(FLAGS TAKEBIT)
>
<OBJECT RED_KEY
(DESC "red key")
(IN PLAYER)
(ADJECTIVE RED)
(SYNONYM KEY)
(FLAGS KEYBIT TAKEBIT)
>
Ok, I have uploaded some new files. The following zip contains my latest parser.zil, a "newverbs" file, and a stub file (I see now that there is an empty.zil file in the ZILF distribution, but this new one has AGAIN and UPDATE-STATUS-LINE support for XZIP games): https://docs.google.com/file/d/0B_4ZXs4Z_yoWbTNYcVFDcmFfZWs/edit?usp=sharing
Here is the code from the "new verbs" file:
[code]<SYNTAX LOOK IN OBJECT = V-LOOK-IN>
<SYNTAX LOOK INSIDE OBJECT = V-LOOK-IN>
<SYNTAX LOOK ON OBJECT = V-LOOK-IN>
<SYNTAX LOCK OBJECT = V-LOCK>
<SYNTAX UNLOCK OBJECT = V-UNLOCK>
<SYNTAX LOCK OBJECT WITH OBJECT (FIND KEYBIT)(HAVE HELD CARRIED)= V-LOCK>
<SYNTAX UNLOCK OBJECT WITH OBJECT (FIND KEYBIT)(HAVE HELD CARRIED) = V-UNLOCK>
; a routine to handle openable/closable items
<ROUTINE OPENABLE-RULES ()
<COND
(<VERB? OPEN>
<COND
(<FSET? ,PRSO ,OPENBIT>
<PRINTR "It's already open.">)
(<FSET? ,PRSO ,LOCKEDBIT>
<TELL "You'll have to unlock it first." CR>)
(ELSE
<FSET ,PRSO ,TOUCHBIT>
<FSET ,PRSO ,OPENBIT>
<TELL "You open the " D ,PRSO "." CR>
<DESCRIBE-CONTENTS ,PRSO>
)
>
)
(<VERB? CLOSE>
<COND
(<NOT <FSET? ,PRSO ,OPENBIT>>
<PRINTR "It's already closed.">)
(ELSE
<FCLEAR ,PRSO ,OPENBIT>
<TELL "You close the " D ,PRSO "." CR>
)
>
)
(<VERB? EXAMINE>
<COND
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "The " D ,PRSO " is closed.">
)
(<FSET? ,PRSO ,OPENBIT>
<TELL "The " D ,PRSO " is open.">
)
>
<COND
(<OR <FSET? ,PRSO ,OPENBIT> <FSET? ,PRSO ,TRANSBIT>>
<TELL " ">
<DESCRIBE-CONTENTS ,PRSO>
)
(T
<CRLF>
)
>
)
(<VERB? LOOK-IN>
<COND
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "The " D ,PRSO " is closed." CR>
)
(<OR <FSET? ,PRSO ,OPENBIT> <FSET? ,PRSO ,TRANSBIT>>
<DESCRIBE-CONTENTS ,PRSO>
)
>
)
>
>
; a routine to handle always-open or surface objects
<ROUTINE CONTAINER-RULES ()
<COND
(<VERB? EXAMINE LOOK-IN>
<COND
(<OR <FSET? ,PRSO ,SURFACEBIT> <FSET? ,PRSO ,TRANSBIT>
<FSET? ,PRSO ,OPENBIT>>
<DESCRIBE-CONTENTS ,PRSO>
)
>
)
>
>
<ROUTINE LOCK-RULES ("AUX" KEY)
<COND
(<VERB? UNLOCK>
<COND
(<NOT <FSET?,PRSO,LOCKEDBIT>>
<TELL "The " D, PRSO " is already unlocked." CR>)
(<AND <NOT ,PRSI> <SET KEY <FIND-IN, WINNER, KEYBIT "with">>>
<TELL "You unlock " D ,PRSO " with the " D .KEY "." CR>
<FCLEAR, PRSO, LOCKEDBIT>
)
(<AND, PRSI <FSET? ,PRSI ,KEYBIT>>
<TELL "You unlock " D ,PRSO " with the " D, PRSI "." CR>
<FCLEAR, PRSO, LOCKEDBIT>
)
(T
<TELL "You don't have a key that fits the " D, PRSO "." CR>
)
>
)
(<VERB? LOCK>
<COND
(<FSET?,PRSO,LOCKEDBIT>
<TELL "The " D, PRSO " is already locked." CR>)
(<AND <NOT ,PRSI> <SET KEY <FIND-IN, WINNER, KEYBIT "with">>>
<TELL "You lock the " D ,PRSO " with the " D .KEY "." CR>
<FSET, PRSO, LOCKEDBIT>
)
(<AND, PRSI <FSET? ,PRSI ,KEYBIT>>
<TELL "You lock the " D ,PRSO " with the " D, PRSI "." CR>
<FSET, PRSO, LOCKEDBIT>
)
(T
<TELL "You don't have a key that fits the " D, PRSO "." CR>
)
>
)
>
>
<ROUTINE V-LOOK-IN ()
<COND
(<FSET? ,PRSO ,PERSONBIT>
<PERFORM ,V?EXAMINE ,PRSO>)
(ELSE
<PRINTR "You'll have to tell me how to do that.">)
>
>
<ROUTINE V-LOCK ()
<TELL "The " D ,PRSO " does not have a lock." CR>
>
<ROUTINE V-UNLOCK ()
<TELL "The " D ,PRSO " does not have a lock." CR>
>[/code]
So, I lump always-open containers in with surfacebit objects, as I thought the determining factor was whether the game needs to print "The [x] is open." The main drawback to my handling, I think, is that the CONTBIT is not very important, but I think doing things this way has its benefits.
Here is some example code that uses the new verbs above:
[code] <OBJECT BOX
(DESC "box")
(IN STARTLOCATION)
(SYNONYM BOX)
(FLAGS CONTBIT)
(ACTION BOX-R)
>
<ROUTINE BOX-R ()
<COND (<OR <VERB? OPEN EXAMINE CLOSE> <VERB? LOOK-IN>>
<OPENABLE-RULES>
)
(<VERB? UNLOCK LOCK>
<LOCK-RULES>
)
>
>
<OBJECT DOLL
(DESC "doll")
(IN BOX)
(SYNONYM DOLL)
(FLAGS TAKEBIT)
>
<OBJECT RED_KEY
(DESC "red key")
(IN PLAYER)
(ADJECTIVE RED)
(SYNONYM KEY)
(FLAGS KEYBIT TAKEBIT)
>[/code]