hitchhikersguide-gold/zip-to-xzip.txt
2019-04-18 23:01:30 -04:00

251 lines
6.7 KiB
Plaintext

;"HOW TO TURN A ZIP GAME INTO AN XZIP GAME"
;"ADD TO LOAD FILE"
<VERSION XZIP>
<SETG PLUS-MODE T>
<SETG NEW-VOC? T>
<FREQUENT-WORDS?>
;"move directions to load file just before adding new files"
;"status line stuff - add to GLOBALS file"
<CONSTANT S-TEXT 0>
<CONSTANT S-WINDOW 1>
<CONSTANT H-NORMAL 0>
<CONSTANT H-INVERSE 1>
<CONSTANT H-BOLD 2>
<CONSTANT H-ITALIC 4>
<CONSTANT D-SCREEN-ON 1>
<CONSTANT D-SCREEN-OFF -1>
<CONSTANT D-PRINTER-ON 2>
<CONSTANT D-PRINTER-OFF -2>
<CONSTANT D-TABLE-ON 3>
<CONSTANT D-TABLE-OFF -3>
<CONSTANT D-RECORD-ON 4>
<CONSTANT D-RECORD-OFF -4>
<GLOBAL HOST:NUMBER 0> "Host machine."
<GLOBAL WIDTH:NUMBER 0> "Width of screen in chars."
;"put in GO routine"
<SETG HOST <LOWCORE INTID>>
<SETG WIDTH <LOWCORE SCRH>>
<ROUTINE INIT-STATUS-LINE ()
<COND (<L? ,WIDTH 38>
<TELL "[Screen too narrow.]" CR>
<QUIT>)>
<SETG CHEIGHT <LOWCORE (FWRD 1)>>
<SETG OHERE <>>
<SETG OLD-LEN 0>
<SPLIT 1>
<SCREEN ,S-WINDOW>
<HLIGHT ,H-INVERSE>
<CURSET 1 1>
;<ERASE 1> ;"This semi by Jeff"
;<PRINT-SPACES <LOWCORE SCRH>>
<PRINT-SPACES ,WIDTH>
<COND (<G? ,WIDTH 75>
<CURSET 1 51>
<TELL "Score:">
<CURSET 1 64>
<TELL "Moves:">)>
<HLIGHT ,H-NORMAL>
<SCREEN ,S-TEXT>
<RTRUE>>
<CONSTANT SL-TABLE:TABLE <ITABLE NONE 80>> "status line constructed here"
<GLOBAL OHERE:OBJECT <>>
<GLOBAL OLD-LEN:NUMBER 0>
<ROUTINE UPDATE-STATUS-LINE ()
<SCREEN ,S-WINDOW>
;<BUFOUT <>>
<HLIGHT ,H-NORMAL>
<HLIGHT ,H-INVERSE>
<COND (<NOT <EQUAL? ,HERE ,OHERE>>
<SETG OHERE ,HERE>
;<DIROUT ,D-SCREEN-OFF> ; "Screen off."
<DIROUT ,D-TABLE-ON ,SL-TABLE> ; "Table on."
<SAY-HERE>
<DIROUT ,D-TABLE-OFF> ; "Table off."
;<DIROUT ,D-SCREEN-ON> ; "Screen on."
<CURSET 1 2>
<PRINT-SPACES ,OLD-LEN> ; "Erase old HERE desc"
<SETG OLD-LEN <GET ,SL-TABLE 0>> ;"Print new HERE desc."
<CURSET 1 2>
<SAY-HERE>)>
<COND (<G? ,WIDTH 74>
<CURSET 1 58>
<TELL N ,SCORE " "> ;"for 110 to 80 score bug"
<CURSET 1 71>
<TELL N ,MOVES>)
(T
<DIROUT ,D-TABLE-ON ,SL-TABLE>
<TELL N ,SCORE "/" N ,MOVES " ">
<DIROUT ,D-TABLE-OFF>
<CURSET 1 <- ,WIDTH <+ <GET ,SL-TABLE 0> 1>>>
<TELL N ,SCORE "/" N ,MOVES " ">)>
<HLIGHT ,H-NORMAL>
<SCREEN ,S-TEXT> ;"Back to main screen."
<RTRUE>>
<ROUTINE PRINT-SPACES (CNT)
<REPEAT ()
<COND (<L? <SET CNT <- .CNT 1>> 0>
<RETURN>)
(T
<PRINTC 32>)>>>
<ROUTINE SAY-HERE ()
<COND (<ZERO? ,LIT?>
<TELL "Darkness">)
(T
<TELL D ,HERE>
<COND (<AND <G? ,WIDTH 74>
<NOT <IN? ,PROTAGONIST ,HERE>>>
<TELL ", in the " <LOC ,PROTAGONIST>>)>)>
<RTRUE>>
"To update the status line during the game - after all MOVE ,WINNER
(or similar) statements add - also check LIT to NOT LIT cases and vice-versa,
V-BOARD, V-DISEMBARK and wherever else the status line changes in special
cases, e.g. LYING DOWN in HHGG"
<SETG OHERE <>>
;"parser replacements - replace old routine with new"
<CONSTANT P-PSOFF %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 6) (T 4)>>
"Offset to parts of speech byte"
<CONSTANT P-P1OFF %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 7) (T 5)>>
"Offset to first part of speech"
"in ROUTINE PARSER when printing prompt replace with:"
%<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE>
'<PROG ()
<UPDATE-STATUS-LINE>
<TELL ">">>)
(T
'<TELL ">">)>
<PUTB ,P-INBUF 1 0>
<READ ,P-INBUF ,P-LEXV>
;"replace in PARSER"
<ROUTINE THIS-IT? (OBJ TBL "AUX" SYNS)
<COND (<FSET? .OBJ ,INVISIBLE> <RFALSE>)
(<AND ,P-NAM
<NOT <ZMEMQ ,P-NAM
<SET SYNS <GETPT .OBJ ,P?SYNONYM>>
<- </ <PTSIZE .SYNS> 2> 1>>>>
<RFALSE>)
(<AND ,P-ADJ
<OR <NOT <SET SYNS <GETPT .OBJ ,P?ADJECTIVE>>>
;<NOT <ZMEMQB ,P-ADJ .SYNS <- <PTSIZE .SYNS> 1>>>
<NOT %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE>
'<ZMEMQ ,P-ADJ .SYNS <RMGL-SIZE .SYNS>>)
(T
'<ZMEMQB ,P-ADJ .SYNS <RMGL-SIZE .SYNS>>)>>>>
<RFALSE>)
(<AND <NOT <ZERO? ,P-GWIMBIT>> <NOT <FSET? .OBJ ,P-GWIMBIT>>>
<RFALSE>)>
<RTRUE>>
;"add in MISC"
<DEFMAC RMGL-SIZE ('TBL)
<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE>
<FORM - <FORM / <FORM PTSIZE .TBL> 2> 1>)
(T <FORM - <FORM PTSIZE .TBL> 1>)>>
;"not needed in VERBS (INCLUDING next comment)"
;"defined in compiler for xzip"
;"when these are referenced, GET (and not GETB) must be used, since it
takes TWO bytes to represent their values"
<CONSTANT REXIT 0>
<CONSTANT UEXIT %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 2) (T 1)>>
"Uncondl EXIT: (dir TO rm) = rm"
<CONSTANT NEXIT %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 3) (T 2)>>
"Non EXIT: (dir SORRY string) = str-ing"
<CONSTANT FEXIT %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 4) (T 3)>>
"Fcnl EXIT: (dir PER rtn) = rou-tine, 0"
<CONSTANT CEXIT %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 5) (T 4)>>
"Condl EXIT: (dir TO rm IF f) = rm, f, str-ing"
<CONSTANT DEXIT %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 6) (T 5)>>
"Door EXIT: (dir TO rm IF dr IS OPEN)= rm, dr, str-ing, 0"
<CONSTANT CEXITFLAG %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 4) (T 1)>>
;"GETB"
<CONSTANT CEXITSTR 1> ;"GET"
<CONSTANT DEXITOBJ 1> ;"GET"
<CONSTANT DEXITSTR %<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE> 2) (T 1)>>
;"GET"
;"find all GETBs before EXITs (not CEXITFLAG) (usually in VERBS
V-WALK, OTHER-SIDE) and replace with GET"
;"put SORRY in front of Exit Strings."
;"before GO in MISC add"
<CLEAR -1>
<INIT-STATUS-LINE>
;"CHANGE ALL VOCABULARY FROM 6 TO 9 LETTERS in ADJECTIVE, SYNONYM and SYNTAX"
;"convert PSEUDO objects to real objects"
;"give them NDESCBITS, DESCs (for default printouts), LOC, SYNONYM, ADJECTIVE,
ACTION"
;"remove/fix assosciated PSEUDO code"
;"ADD V-ID, change VERSION"
<ROUTINE V-$ID ()
<TELL "Interpreter ">
<PRINTN <GETB 0 30>>
<TELL " Version ">
<PRINTC <GETB 0 31>>
<CRLF>
<RTRUE>>
<ROUTINE V-VERSION ("AUX" (CNT 17) V)
<SET V <BAND <GET 0 1> *3777*>>
<TELL CR
"BORDER ZONE: A Game of Intrigue|
Copyright (c) 1987 by Infocom, Inc. All rights reserved.|
BORDER ZONE is a trademark of Infocom, Inc.|
Release " N .V " / Serial number ">
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> 23>
<RETURN>)
(T
<PRINTC <GETB 0 .CNT>>)>>
<TELL " / ">
<V-$ID>
<CRLF>>
;"object locations have to be changed from (IN to (LOC"
;"add $REFRESH code and modify V-SAVE"
;"CHANGE SCRIPT AND UNSCRIPT CODE"
;"REMOVE REFERENCES TO P1?OBJECT P1?ADJECTIVE"
;"CHANGE ADJN TO ADJ, XADJN TO XADJ, and remove associated code"
;"check NE in perform fix - for movement"
;"CHANGE GLOBALS THAT ARE ONLY STRINGS TO CONSTANTS"
;"added new AGAIN and OOPS code"
;"changed ZMEMQ and ZMEMQB to INTBL? - added argument to BUT-MERGE"
;"fixed RESTORE to INIT-STATUS-LINE rather than Clearing Screen"