!\ Okay, so this is the code to the game I wrote while trying to learn the basics of Hugo.
  As you can see, I started off with the shell.hug file and added from there.
  I ended up borrowing code from Guilty Bastards, Spur, sample.hug, and help from others
  (who I don't want to incriminate by saying their names).
  In any case, it's my hope that despite my ugly coding, some things might be easier for
  newbies to understand (like, getting NPCs to follow and basic NPC interaction) just
  because this game is so simplistic.
  Unfortunately, this game is pretty juvenile and was originally only written as an
  inside joke between my siblings and I.  I apologize if the tone offends you; I did
  edit out some of the swears and what not.
\!

!\---------------------------------------------------------------------------

       HUGO v2.5 SHELL
       by Kent Tessman (c) 1995-1998

---------------------------------------------------------------------------\!

! Uncomment the following to use a precompiled version of the Hugo Library:
! #set PRECOMPILED_LIBRARY

! Uncomment the following to include the HugoFix Debugging Library:
! #set DEBUG

! Uncomment the following to include verb stub routines:
#set VERBSTUBS

#ifset DEBUG
#switches -d
#endif
!----------------------------------------------------------------------------
! NEW GRAMMAR:
verb "read"
       * object                                        DoRead
verb "choke"
       *                                               DoChoke
verb "escape"
       *                                               DoEscape
verb "play"
       * "ping" "pong"                                 DoPing
       * object "in" "ping" "pong"                     DoPing
       * "ping" "pong" "against" object                DoPing

#include "verblib.g"                    ! grammar must come first
constant INDENT_SIZE 0
#ifset PRECOMPILED_LIBRARY
#link "hugolib.hlb"
#else
#include "hugolib.h"
#endif

!global rank

routine init
{
       counter = -1
       STATUSTYPE = 1                  ! score/turns
       TEXTCOLOR = DEF_FOREGROUND
       BGCOLOR = DEF_BACKGROUND
       SL_TEXTCOLOR = DEF_SL_FOREGROUND
       SL_BGCOLOR = DEF_SL_BACKGROUND

       prompt = ">"
       color TEXTCOLOR, BGCOLOR
       MAX_SCORE = 30
       MAX_RANK = 4
       ranking[0] = "Jerk-Faced Loser"
       ranking[1] = "The Ponginator"
       ranking[2] = "King Pong"
       ranking[3] = "Spartacus Jonez"
       cls
"You dreaded this day.  In fact, you wish it was still nothing more
than a cold-sweat-inducing nightmare that woke you in the darkest hours
of the night.  Alas, the day has come that you would need Anne's help.\n"

       Font(BOLD_ON | DEFAULT_FONT)
       "Anne and the Terrordome of Evil"
       Font(BOLD_OFF)
       "An Interactive True Story\n"
       print BANNER

       player = you                    ! player initialization
       location = emptyroom
       old_location = location
       move player to location
       FindLight(location)
       DescribePlace(location)
       location is visited
       CalculateHolding(player)

#ifset USE_PLURAL_OBJECTS
       InitPluralObjects
#endif
}

#ifset PRECOMPILED_LIBRARY
replace main
{
#else
routine main
{
#endif
       counter = counter + 1
       PrintStatusLine
       run location.each_turn
       runevents
       RunScripts
       if parent(speaking)~=location
               speaking = 0

}
!\   I put this stuff in here to see if I could get resources to work.
       It worked fine with the 32-bit DOS interpreter, but I had actually been confused
       about whether the other DOS interpreters have any kind of sound or graphic
       capabilities...  I guess they don't.

#set COMPILE_RESOURCES
resource "anne_snd"
{
       "c:\windows\ding.wav"
}
\!

player_character you "you"
{
nouns "me"
       long_desc
       {
               "You are as cool as twelve velvet Elvis's and a bag of Cheetos.\n"

       }}

room emptyroom "Entrance to the Terrordome of Evil"
{
       long_desc
       {
       "To the west is the Terrordome of Evil.  By golly, it looks fun!\n\n
       There seems to be activity to the east.\n"
       }
       cant_go {
       "There's nothing of interest in that direction.\n"
               }
       w_to {
       if Anne is not blah
       {"As much as you'd like to go to the Terrordome of Evil, you lack the
       courage to do it alone."}
       else
       {print "With Anne following you around like a lame little hell-puppy, you confidently
       stroll into the Terrordome of Evil.  It's everything you hoped it would be.\n"
       score = score + 10
       endflag = 1}
       }
       in_to { return self.w_to }
       e_to {
!\      sound "anne_snd", "ding", 100
       One of the times that I tested the sound resources.
\!
       return anneroom
       }

}

object terrordome "Terrordome of Evil"
{
       in emptyroom
nouns "terrordome" "evil"
adjectives "terrordome" "of"
       long_desc
       {"Wow!  You can't wait to enter it!"}
       is hidden
       is static
}
object activity "activity"
{
       in emptyroom
nouns "activity"
       long_desc
       {"You can't see much from here."}
       is hidden
       is static
}
room anneroom "Temple of Anne"
{
nouns "temple"
adjectives "temple" "of"
       long_desc
       {"This is where Anne sits and worships herself.  You feel like
       burning it all down but somehow manage to resist the urge.
       Besides the exit to the west, there is also a cloud of darkness
       to the south.\n"}
       w_to { return emptyroom }
       s_to {print "\nAs you approach the cloud of darkness, it becomes
       apparent that it isn't actually darkness, persay.  Truthfully, it
       actually seems to be a...\n"
       return daveroom}
}
attribute blah alias special
character anne "Anne"
{

       in anneroom
       noun "anne"
       short_desc
       {
               "Anne is here, worshipping herself.\n"
               self is moved
       }
       long_desc
               {
               "Anne reminds you why it's so cool to be you and not
               someone like her.\n"
               }
       before
       {
               object  DoKiss
               { "You don't want to put your lips on that!"}
       }
       after
       {
               xobject DoGive
               {
                       select object
                       case belt
                       {
                       print   "Naw, that'd be silly.  Anne just has to earn it someday like
                       a real man."
                       return true
                       }
                       case else
                               return false
               }
               xobject DoShow
               {
                       select object
               case belt
                       {
                       if (Anne is not blah)
               { "\"Wow, you must've beat Dave.  I am truly in awe of your
                       mad ping-ponginating skillz.  I shall follow you
                       to the ends of the earth, so that I may learn
                       the Way of the True Ping Pong Master.\""
                       Activate(anne_following)
                       Anne is blah
                       score = score + 10
               }
                       else
                       "You don't need to rub it in."
                       }
                       case else
                               return false
               }
               object DoAsk
               {
                       select xobject
                       case anne
                               "\"I'm the coolest thing since
                       ChiPs, yo.\""
                       case anneroom
                               "\"This place rocks.\""
                       case belt
                               "\"The one who holds the championship
                       ping pong belt has the respect and admiration
                       of millions.  I'd follow that person to the ends
                       of the earth.  One day, I will wear it myself.\"\n
                       \n
                       You hold back a guffaw."
                       case dave
                               "\"He bites my ass.  What can I say?\""
                               case else
                               "Anne's eyes start glazing over and drool
                               dribbles out of the corner of her mouth.
                               I guess she doesn't know anything about
                               that.\""
               }
       }
}
event in anne
{
       if (Anne is not blah)
       {
       if (belt is worn)
       {print "Anne notices the shiny golden goodness that is your
       ping pong championship belt."
       Perform( &DoShow, belt, Anne)
       }
       }
}

daemon anne_following
{
       timer 0
}

event in anne_following
{

       if anne in location or location = old_location  ! no need to follow
               return

       ! Deal with special following messages for certain locations:
       select location

! locations:

       case daveroom                   ! Cloud of Ugly
       {
               "\nAnne follows you into the cloud."

       }
       case anneroom                   ! Temple of Anne
       {
               if old_location = daveroom
                       "\nAnne exits the Cloud of Ugly and
                       follows you back to the temple."
               else
                       "\nAnne follows you back to the temple."
       }
       case emptyroom
       {
               if old_location = anneroom
                       "\nAnne follows you west."
       }
       move anne to location
}


scenery cloud "cloud of darkness"
{
       in anneroom
       noun "cloud" "darkness"
       adjective "cloud" "of"
       article "the"
       long_desc {"It's certainly a strange thing.  There's no logical
       reason for the cloud of darkness to the south."}
       door_to                         ! so a player can "go cloud"
               {return daveroom}
       before
       {
               object DoEnter
               {
                       return daveroom
               }
       }
}

room daveroom "Cloud of Ugly"
{
       long_desc
       {"You are choking in a big cloud of Ugly.  It's definitely not
       fun.  Escape is to the north.\n"}
       n_to {return anneroom}
}

object pingpong "ping pong table"
{
       in daveroom
       nouns "pong" "table" "paddles" "ball"
       adjectives "ping" "pong"
       short_desc
       {"Surprisingly enough, there is a ping pong table here.\n"}
       long_desc
       {"You almost missed it in this whole cloud of Ugly, but there's no
       denying that yes, there's a ping pong table, complete with paddles
       and everything.\n"}
       before
       {
       object DoGet
       {       "You don't need to take that, but feel free to play some
       wild and crazy ping pong!" }
       }
       is static
}

character dave "Dave"
{
       in daveroom
       noun "dave" "david"
       adjective "ugly"
       short_desc
       {
               "It's obvious that the source of all of the ugliness is Dave,
       who is standing nearby, doing stupid Dave things.  He holds a ping pong
       championship belt.\n"
               self is moved
       }
       long_desc
               "In ancient times, Dave is what would've been called a \"jerk-faced loser.\"
       You do your best to not slap him around.\n"
       before
       {
               parent(object) DoGet
               {
                       "Dave holds ";
                       The(object)
                       " away from you.  \"Easy there, leadbelly.\""
               }
               object DoKiss
               {
                       "You don't want to put your lips on that!"
               }
       }
       after
       {
               object DoAsk
               {
                       select xobject
                       case anne
                               "\"Ha!  She thinks she can beat me at
                       ping pong, but we all know she can't hang.  At least, she does
                       everything I say because I am the True Ping Pong Champion.\""
                       case dave
                               "\"What can I say?  I'm the best there
                       ever was.\""
                       case belt
                               "\"This proves that I am as great in ping
                               pong as I am ugly!\""
                       case cloud
                               "\"It's not much, but I call it home.\""
                               case else
                               "Dave's eyes start glazing over and drool
                               dribbles out of the corner of his mouth.
                               I guess he doesn't know anything about
                               that.\""
               }
       }

}

object belt "championship ping pong belt"
{
       in dave
       noun "belt"
       adjective "championship" "ping" "pong"
       long_desc
       {
        "The belt seems to almost have a certain glow to it."
        }
       article "a"
       is hidden
       is clothing
}

!----------------------------------------------------------------------------
! NEW VERB ROUTINES
!----------------------------------------------------------------------------
routine DoRead
{
       select object
       case belt
       {"Etched into its face are the words, \"He who wears this belt
       is truly master over the wannabes.\""}
       else
       {
       "There's nothing to read there."
       }
}
routine DoChoke
{
       if (player in daveroom)
       {"That goes without saying."}
       else
       "But why?"
}
routine DoEscape
{
       if (player in daveroom)
       {return anneroom}
       else
       "But where?"
}
routine DoPing
{
       if player not in daveroom
               "There's no ping pong table here!"
       else
       {
               if Dave in Daveroom
               { print "You ask Dave to play a game of ping pong and he confidently accepts
               your offer.  It doesn't seem like quite a match, though, and you beat him
               easily.\n\n
               \"Was there anything wrong?\" you ask. \"Did you have all of
               your limbs cut off when I wasn't looking?  Or maybe you just
               really do suck.  That was \Beasy\b!\"\n\n
               Tears streaming down his face,
               he hands you the belt and runs off to wallow in his ugliness.  You feel bad
               for the guy.\n
               \n
               Strangely enough, the Cloud of Ugly remains."
                move belt to player
                remove Dave
               belt is not hidden
               score = score + 10
                return true }
       else
       {
               if Anne in Daveroom
               { "You easily beat Anne.  C'mon now!  What did you expect?"}
       else
       "There's no one to play here!"
}
}
}

property is_following