Report walking - KVonGit/zil-stuff GitHub Wiki

<CONSTANT DIR-TBL 
  <LTABLE
    "down" "up"
    "out" "in" 
    "southwest" "southeast" "northwest" "northeast"
    "west" "east" "south" "north"
  >
>

<ROUTINE DIR-STRING (DIR-TBL-KEY)
  <GET ,DIR-TBL .DIR-TBL-KEY>
>

<ROUTINE DIRP-TO-DIR-TBL-VAL ("OPT" (DIR-PROP ,PRSO))
  <- .DIR-PROP <- ,P?DOWN 1>>
>

<ROUTINE REPORT-WALKING ()
  <TELL "You walk "><TELL <DIR-STRING <DIRP-TO-DIR-TBL-VAL>>><TELL ".||">
>

Then, at the very bottom when redefining V-WALK:

    <REPORT-WALKING>
    <GOTO .RM>>

EXAMPLE GAME

<VERSION XZIP>
<CONSTANT RELEASEID 4>
<CONSTANT GAME-BANNER "*** TESTING ***">

<COMPILATION-FLAG DEBUGGING-VERBS T>
<COMPILATION-FLAG DEBUG T>

<INSERT-FILE "parser">
<SET REDEFINE T>



<ROUTINE GO ()
    <CRLF>
    <CRLF>
    <SETG MODE ,VERBOSE>
    <SETG HERE ,ROOM1>
    <MOVE ,PLAYER ,HERE>
    <INIT-STATUS-LINE>
    <V-VERSION>
    <CRLF>
    <V-LOOK>
    <MAIN-LOOP>>

<ROOM ROOM1
  (IN ROOMS)
  (DESC "ROOM1")
  (FLAGS LIGHTBIT)
  (WEST TO ROOM2)
>

<ROOM ROOM2
  (IN ROOMS)
  (DESC "ROOM2")
  (FLAGS LIGHTBIT)
  (EAST TO ROOM1)
>


<ROUTINE V-WALK ("AUX" PT PTS RM D)
    <COND (<NOT ,PRSO-DIR>
           <PRINTR "Which direction?">)
          (<0? <SET PT <GETPT ,HERE ,PRSO>>>
           <COND (<OR ,HERE-LIT <NOT <DARKNESS-F ,M-DARK-CANT-GO>>>
                  <TELL-CANT-GO-THAT-WAY>)>
           <SETG P-CONT 0>
           <RTRUE>)
          (<==? <SET PTS <PTSIZE .PT>> ,UEXIT>
           <SET RM <GET/B .PT ,EXIT-RM>>)
          (<==? .PTS ,NEXIT>
           <TELL <GET .PT ,NEXIT-MSG> CR>
           <SETG P-CONT 0>
           <RTRUE>)
          (<==? .PTS ,FEXIT>
           <COND (<0? <SET RM <APPLY <GET .PT ,FEXIT-RTN>>>>
                  <SETG P-CONT 0>
                  <RTRUE>)>)
          (<==? .PTS ,CEXIT>
           <COND (<VALUE <GETB .PT ,CEXIT-VAR>>
                  <SET RM <GET/B .PT ,EXIT-RM>>)
                 (ELSE
                  <COND (<SET RM <GET .PT ,CEXIT-MSG>>
                         <TELL .RM CR>)
                        (<AND <NOT ,HERE-LIT> <DARKNESS-F ,M-DARK-CANT-GO>>
                         ;"DARKNESS-F printed a message")
                        (ELSE
                         <TELL-CANT-GO-THAT-WAY>)>
                  <SETG P-CONT 0>
                  <RTRUE>)>)
          (<==? .PTS ,DEXIT>
           <COND (<FSET? <SET D <GET/B .PT ,DEXIT-OBJ>> ,OPENBIT>
                  <SET RM <GET/B .PT ,EXIT-RM>>)
                 (<SET RM <GET .PT ,DEXIT-MSG>>
                  <TELL .RM CR>
                  <SETG P-CONT 0>
                  <RTRUE>)
                 (ELSE
                  <THIS-IS-IT .D>
                  <TELL "You'll have to open " T .D
                        " first." CR>
                  <SETG P-CONT 0>
                  <RTRUE>)>)
          (ELSE
           <TELL "Broken exit (" N .PTS ")." CR>
           <SETG P-CONT 0>
           
           <RTRUE>)>
    <REPORT-WALKING>
    <GOTO .RM>>

<CONSTANT DIR-TBL 
  <LTABLE
    "down" "up"
    "out" "in" 
    "southwest" "southeast" "northwest" "northeast"
    "west" "east" "south" "north"
  >
>

<ROUTINE DIR-STRING (DIR-TBL-KEY)
  <GET ,DIR-TBL .DIR-TBL-KEY>
>

<ROUTINE DIRP-TO-DIR-TBL-VAL ("OPT" (DIR-PROP ,PRSO))
  <- .DIR-PROP <- ,P?DOWN 1>>
>

<ROUTINE REPORT-WALKING ()
  <TELL "You walk "><TELL <DIR-STRING <DIRP-TO-DIR-TBL-VAL>>><TELL ".||">
>

<SYNTAX DIRS = V-DIRS>

<ROUTINE V-DIRS ()
  <TELL "NORTH: " N, P?NORTH CR> ;"63"
  <TELL "SOUTH: " N, P?SOUTH CR> ;"62"
  <TELL "EAST: " N, P?EAST CR> ;"61"
  <TELL "WEST: " N, P?WEST CR> ;"60"
  <TELL "NE: " N, P?NE CR> ;"59"
  <TELL "NW: " N, P?NW CR> ;"58"
  <TELL "SE: " N, P?SE CR> ;"57"
  <TELL "SW: " N, P?SW CR> ;"56"
  <TELL "IN: " N, P?IN CR> ;"55"
  <TELL "OUT: " N, P?OUT CR> ;"54"
  <TELL "UP: " N, P?UP CR> ;"53"
  <TELL "DOWN: " N, P?DOWN CR> ;"52"
>

<SYNTAX EXITS = V-EXITS>

<ROUTINE V-EXITS ()
  <TELL "Exits:" CR>
  <MAP-DIRECTIONS (D PT ,HERE)
    <TELL "  " <DIR-STRING <DIRP-TO-DIR-TBL-VAL .D>>><CRLF>
  >
>
⚠️ **GitHub.com Fallback** ⚠️