#charset "us-ascii"

/*
 *   Copyright (c) 1999, 2002 by Michael J. Roberts.  Permission is
 *   granted to anyone to copy and use this file for any purpose.  
 *   
 *   This is a starter TADS 3 source file.  This is a complete TADS game
 *   that you can compile and run.
 *   
 *   To compile this game in TADS Workbench, open the "Build" menu and
 *   select "Compile for Debugging."  To run the game, after compiling it,
 *   open the "Debug" menu and select "Go."
 *   
 *   Please note that this file contains considerably more than the
 *   minimal set of definitions necessary to create a working game; this
 *   file has numerous examples meant to help you start making progress on
 *   your game more quickly, by giving you a few concrete examples that
 *   you can copy and modify.  As you flesh out your game, you should
 *   modify the objects we define here, or simply remove them when you no
 *   longer need them in your game.
 *   
 *   If you want a truly minimal set of definitions, create another new
 *   game in TADS Workbench, and choose the "advanced" version when asked
 *   for the type of starter game to create.  
 */

/* 
 *   Include the main header for the standard TADS 3 adventure library.
 *   Note that this does NOT include the entire source code for the
 *   library; this merely includes some definitions for our use here.  The
 *   main library must be "linked" into the finished program by including
 *   the file "adv3.tl" in the list of modules specified when compiling.
 *   In TADS Workbench, simply include adv3.tl in the "Source Files"
 *   section of the project.
 *   
 *   Also include the US English definitions, since this game is written
 *   in English.  
 */
#include <adv3.h>
#include <en_us.h>

/*
 *   Our game credits and version information.  This object isn't required
 *   by the system, but our GameInfo initialization above needs this for
 *   some of its information.
 *   
 *   IMPORTANT - You should customize some of the text below, as marked:
 *   the name of your game, your byline, and so on.  
 */
versionInfo: GameID
    IFID = '9df54009-ea16-a124-e8b4-5229e5bec427'
    name = 'The Fire High'
    byline = 'by Aram Zucker-Scharff, Michael Negron, Owen Ito, Jason Frostick'
    htmlByline = 'by <a href="mailto:azuckerscharff@gmail.com">
                  Aram Zucker-Scharff, Michael Negron, Owen Ito, Jason Frostick</a>'
    version = '1'
    authorEmail = 'Aram Zucker-Scharff, Michael Negron, Owen Ito, Jason Frostick <azuckerscharff@gmail.com>'
    desc = 'The Fire High: A short IF about a search. Created by a group for ENGL344 at George Mason University. '
    htmlDesc = 'The Fire High: A short IF about a search. Created by a group for ENGL344 at George Mason University. '
    headline = 'The Fire High: A Search'
    firstPublished = '2008'
    languageCode = 'en-US'
    licenseType = 'Freeware'

    showCredit()
    {
        /* show our credits */
        "Writer and Lead Programmer: Aram Zucker-Scharff
	\bWriters:
	\b--Jason Frostick\b--Owen Ito\b--Michael Negron";

        /* 
         *   The game credits are displayed first, but the library will
         *   display additional credits for library modules.  It's a good
         *   idea to show a blank line after the game credits to separate
         *   them visually from the (usually one-liner) library credits
         *   that follow.  
         */
        "\b";
    }
    showAbout()
    {
        "Hello, this game was created as the group project for English 344 - Digital Writing in the Genres. ";
    }
;

/* 
 *   Entryway location.
 *   
 *   We use the class "Room" to define the location.  Room is a class,
 *   defined in the library, that can be used for most of the locations in
 *   the game.
 *   
 *   Our definition defines two strings.  The first string, which must be
 *   in single quotes, is the "name" of the room; the name is displayed on
 *   the status line and each time the player enters the room.  The second
 *   string, which must be in double quotes, is the "description" of the
 *   room, which is a full description of the room.  This is displayed
 *   when the player types "look around," when the player first enters the
 *   room, and any time the player enters the room when playing in VERBOSE
 *   mode.  
 */
entryway: Room 'Street'
    "You are standing on a sidewalk across from Vance Park in Baltimore.
    The night is just beginning, and you're looking for some fun. The 
    streets are empty and the park, in the west, seems desolate and silent.
    Although there are several lamps, most are dark. There is a club door 
	to your north where you hear the clarion call of blasting
    techno music. The sidewalk is dirty with broken bottles and discarded 
    Burger King cups. <<describeFlyer>> There is a man lying on the curb." 
	
	describeFlyer
	{
		if (flyer.isIn(sidewalk))
			"There is a brochure on the ground, damp and flush against the concreate.";
	}
		
	
	west = park
	north = clubEntrance 
	
	

	;

+ Adam: Heavy 'man/Adam' 'Adam'
	"As you look closer at the person, you realize that it is a man in a short leather jacket. He is clearly anxious, but appears approachable. While you might not normally speak to this man, he eyes you and motions for you to come to him. You step close and you see that he is clearly out of it. His head is lolling and his eyes are rolling. His lips are moving and he is clearly saying something. You move close, ignoring the smell. 'I'm down,' he says. 'I need something to pick me up, otherwise I'll just be out on the curb forever. Go get some Fire from the club.' You check his forehead and feel that he is burning up. You should help him out."

/*	properName = 'Adam'
*	globalParamName = 'Adam'
*	isHim = true
*/
;

+ park: Door 'Vance Park' 'Vance Park'
	"The park is dark and frightening. It is surrounded by a low stone wall with a metal gate every few yards."
	
	initiallyOpen = nil
	
    dobjFor(Open)
    {
        action() { "The park looks dangerous, you are looking for a fun night, not an early grave. "; }
    }
	
;

+ sidewalk: Heavy 'sidewalk/ground' 'sidewalk'
	"The sidewalk is grimey and dirty. You are not sure if you want to touch it. <<describeFlyer>> "

	describeFlyer
	{
		if (flyer.isIn(self))
			"The sidewalk is grimey and dirty. But a flyer's bright colors attract your eye.";
			
		else
			"You've touched the sidewalk, but can't say you are particulerly pleased with the experiance. There's a greasy looking spot where you peeled a flyer of the ground.";
	}
;

++ flyer: Thing 'brochure/flyer/paper/trash/ad' 'flyer'
	"There is an attractive, scantily clad woman twirling glow sticks in a suggestive manner. While the brochure has been stepped on, you can still make out a promotion:

OLYMPUS CLUB NOW OPEN! 
FREE ADMISSION until 11pm!
glow sticks provided at entrance -
get your rave on!
Located across from Vance Park!"

	useSpecialDesc = (isIn(sidewalk))
	specialDesc = ""
	
;

+ clubEntrance: Door 'front door/club door/entrance/club entrance' 'club entrance'
	"The club's front door is a dented metal door. Barely visible after wear and tear is a black and white sticker reading 'Olympus Club.'"
	
	initiallyOpen = nil
	
;

clubFoyer: Room 'foyer' 'foyer/room/hallway'
	"This is the first room, here a few bleary eyed party-goers sit slumped, making their intentions to not talk to anyone and chain smoke as fast as possible quite clear. Directly in front of you, through an dilapidated archway, is the main area of the club. Through the gap you can hear loud music and see flashes of dancing bodies in the dim light."
	
	out = clubEntrance2
	in = mainRoom
;
+ clubEntrance2 : Door ->clubEntrance 'door/front door/club door/entrance/exit/club exit/club entrance' 'club entrance';

mainRoom: Room 'main room' 'main room'
	"The club is busy! Looking around, you let your eyes adjust to the dark colored lamps and strobe lights. A few people are standing next to the bar, which is on the right side of the club. A large majority of the crowd seems to be dancing in front of a DJ. While there are a few tables and chairs, it seems the majority of the furniture has been removed to make room for the club's rave night. While you can pick a couple people out from the swaying crowd, you wonder if you can make yourself heard over the roar of techno coming from what seems to be every corner of the room. In the west, behind some chairs, is the entrance  to the bathroom. In the east is an extremely elaborate door, but the man guarding it appears to be asleep in his chair."
	
	out = clubFoyer
	west = bathroom
	east = vipRoomEnt
	
;

+ vipRoomEnt : TravelWithMessage, ThroughPassage 'VIP/vip/VIP Room Door' 'VIP Room Door' 
  "You slip through the VIP room door." 
  travelDesc = "You move into the VIP Lounge, and the noise of the dance floor behind you vanishes as the door shuts. It is much quieter in here, with a few people standing around talking. Expecting something much better, you can't help but feel a little bored. A blonde girl in an expensive dress eyes you from her seat in the middle of the subdued room. " 
  destination = vipRoom  
;

vipRoom: Room 'VIP Room'
	"You are in the VIP Lounge, where the famous and people who know the famous come to mingle and avoid the riff raff. Plush looking chairs lay scattered about in threes and fours, with cushy couches lining the walls. Some olive trees are scattered throughout the room, and ornate columns pretend to hold up the walls. There is an oval shaped bar near the center of the room, for maximum ease of boozement. The bartender is engaged in conversation with an overweight man in a leisure suit. A couple is talking adamantly about something in the corner next to a man dressed in skin-tight black clothes. Closer to you, and the entrance, a shady man in a brown trench coat lounges, his hat pulled down over his eyes. Across from him in a separate booth a young man stares off into space. A girl sits at the bar, sipping on her drink. The girl in the expensive dress catches your eye again and motions for you to come over."
	
	out = mainRoom
	
;

+ bartender: Heavy 'barkeep/bartender' 'bartender'
	"The clean-cut bartender eyes you suspiciously. He is wearing a well pressed white collared shirt and black trousers. Employees tended to have drug connections right?"
		
;

+ oliveTrees: Heavy 'olive/olives/trees/olive trees' 'olive trees'
	"They're fake..."
	
;

+ overweightMan: Heavy 'fatty/overweight man/leisure suit/guy by the bar' 'overweight man'
	"This overweight man is chatting up the bartender. His paunch is sticking out from under his white leisure suit. He looked like a real partier, he might have some fire."
	
;

+ couple: Heavy 'couple/mand and women/corner' 'couple'
	"They look pretty busy arguing about something."
	
;

+ shadyMan: Heavy 'Shady Man/shady man/out of place guy/shady guy/trench coat' 'shady man'
	"This non-chalant looking fellow has his feet propped up on the table and his arms busy with a newspaper. What he is doing reading a newspaper in the VIP lounge is beyond your understanding. He has a gun holster at his hip."
	
;

+ youngMan: Heavy 'young man/young/kid/dude' 'young man'
	"This young man appears to be totally unaware of his surroundings. His eyes have that dead, blissful look that comes from Fire use. The table in front of him is littered with junk. You figure he might be a good bet."
	
;

+ table: Heavy 'table' 'table'
	"You search around the table, finding a lot of receipts, old tickets, and gum wrappers. <<describeTabTwo>>"
	
	describeTabTwo
	{
		if (tabTwo.isIn(self))
			"Something catches your eye, there is a tab of fire covered by a magazine!";
			
	}
;

++ tabTwo: Thing 'tab/Fire/tape/pill/inside' 'tab of Fire'
	"You are looking at what can only be a tab of Fire. The word is printed in all capital letters on the side of the pill and inside the pill it looks like there is a rotating kaleidoscope of red light."
	
	useSpecialDesc = (isIn(table))
	specialDesc = ""
	
;

+ barGirl: Heavy 'bar girl/girl at bar' 'bar girl'
	"The girl sitting at the bar looks ordinary enough. She's taking small sips of her drink and looking around wistfully. Could she have some fire, she looks like she's keeping to herself."
	
;

+ tightClothes: Heavy 'tight/tight clothes man/skin-tight' 'tight clothes man'
	"The man in tight clothes looks to be an artist of sorts. He is really skinny, and you feel like you could threaten him into giving you some drugs easily, if he had any that is."
	
;



bathroom: Room 'bathroom' 'bathroom'
	"As you step into the bathroom you immediately notice that it is quite stuffy and warm, but thankfully free of any immediate odors commonly associated with public restrooms. You note the odd design of the facility. To your right is one sink with a small mirror and light above it. Next to that is a 'U' shape of five stalls behind a line of urinals along the wall. The spacing is rather narrow and the only source of ventilation is from an open slit window high up on the back wall. The stall doors, for whatever reason, are numbered 1 to 5. The first door is in front of you, the second is next to it, in the north, is stall two, in the west is stall three, stall four is in the east and in the south portion of the cluster is stall five. Someone is coughing loudly from what sounds like the fourth stall."
	
	out = mainRoom
	in = stallOne
	north = stallTwo
	west = stallThree
	east = stallFour
	south = stallFive
	
	


;

+ stallTwo: Door 'second stall/stall two/two' 'second stall'
	"The second stall looks battered. There are what looks like head-shaped dents in the dull metal."

	initiallyOpen = nil
	
	dobjFor(Open)
	{
		action() { "You are about to knock on the door when something knocks first from inside. 'KNOCK KNOCK!' You back away slowly. Perhaps it is best to leave this stall alone. "; }
	}
	
;

stallOne: Room 'first stall' 'first stall/stall one/one'
	"You knock on the door, no one answers. You enter and notice nothing special about it. There is a water resovoir. <<describeToiletPaper>>"
	
	describeToiletPaper
	{
		if (toiletpaper.isIn(waterResovoir))
			"There is an extra roll of toilet paper sitting on top of the resovoir.";
	}
	
	out = bathroom
	
;

+ waterResovoir: Heavy 'resovoir/water resovoir' 'water resovoir'
	"It is a large water resovoir built to store the water in order to flush the toilet. This one seems to be working and is surprisingly clean. <<describeToiletPaper>>"
	
		describeToiletPaper
		{
			if (toiletpaper.isIn(self))
				"The water resovoir has a roll of toilet paper sitting on top of it. It appears usable.";
		}
		
;

++ toiletpaper: Thing 'toilet paper/toiletpaper' 'toilet paper roll'
	"It is a soft and fluffy roll of toilet paper. It's clean and looks new."
	
	useSpecialDesc = (isIn(waterResovoir))
	specialDesc = ""

;

stallThree: Room 'third stall' 'third stall/stall three/three'
	"You knock on the door, no one answers. You enter and again see nothing of interest except that the lid of the toilet's water resovoir appears to have been moved."
	
	out = bathroom
	
;

+ waterResovoirThree: Heavy 'resovoir/water resovoir/lid' 'water resovoir'
	"The water resovoir is a large hole in the top of the toilet. You can see water swirling around low in the resovoir. <<describeTabOne>>"
	
	describeTabOne
	{
		if (tabOne.isIn(self))
			"There is a bright red pill attached to the inside of the resovoir with a bit of tape. Upon a closer look you can see the word 'FIRE' printed on the side of the pill. You'd look closer, but that would required sticking your face into the resovoir; you don't want to do that, the toilet bowl is not very clean.";
			
	}
	
;

++ tabOne: Thing 'tab/Fire/tape/pill/inside' 'tab of Fire'
	"You are looking at what can only be a tab of Fire. The word is printed in all capital letters on the side of the pill and inside the pill it looks like there is a rotating kaleidoscope of red light."
	
	useSpecialDesc = (isIn(waterResovoirThree))
	specialDesc = "A bit of tape sticks up over the lip of the opened resovoir."
	
;

stallFour: Room 'fourth stall' 'fourth stall/stall four/four'
	"You walk up to the door. When you get close you can clearly hear someone coughing and exhibiting other audible consequences of abusing Fire tabs. Best to leave him alone."
	
	out = bathroom
	
;

stallFive: Room 'fifth stall' 'fifth stall/stall five/five'
	"You knock on the door, no one answers. The final stall again doesn't look any different from the first one except that it appears barren of any toilet paper whatsoever."
	
	out = bathroom
	
;

/*
 *   Define the player character.  The name of this object is not
 *   important, but note that it has to match up with the name we use in
 *   the main() routine to initialize the game, below.
 *   
 *   Note that we aren't required to define any vocabulary or description
 *   for this object, because the class Actor, defined in the library,
 *   automatically provides the appropriate definitions for an Actor when
 *   the Actor is serving as the player character.  Note also that we
 *   don't have to do anything special in this object definition to make
 *   the Actor the player character; any Actor can serve as the player
 *   character, and we'll establish this one as the PC in main(), below.  
 */
me: Actor
    /* the initial location is the entryway */
    location = entryway
;

/*
 *   The "gameMain" object lets us set the initial player character and
 *   control the game's startup procedure.  Every game must define this
 *   object.  For convenience, we inherit from the library's GameMainDef
 *   class, which defines suitable defaults for most of this object's
 *   required methods and properties.  
 */
gameMain: GameMainDef
    /* the initial player character is 'me' */
    initialPlayerChar = me

    /* 
     *   Show our introductory message.  This is displayed just before the
     *   game starts.  Most games will want to show a prologue here,
     *   setting up the situation for the player, and show the title of the
     *   game.  
     */
    showIntro()
    {
        "Welcome to The Fire High!\b";
    }

    /* 
     *   Show the "goodbye" message.  This is displayed on our way out,
     *   after the user quits the game.  You don't have to display anything
     *   here, but many games display something here to acknowledge that
     *   the player is ending the session.  
     */
    showGoodbye()
    {
        "<.p>Thanks for playing!\b";
    }
;
