Constant Story "Heading East";
Constant Headline "^By Alex Davies^First-time players should type ABOUT.^"; !Testers should type TEST^";
Constant PSEUDONYME = "Alex Davies";


Replace OffersLight;
Replace DrawStatusLine;

Constant NO_SCORE;

Include "Parser";
Include "VerbLib";

Include "EffetsDeTexte";
Include "PhraseNames";

[ OffersLight obj;
  if (obj == nothing)
    rfalse;
  else
    rtrue;
];

! Piqué de "Visual.inf" par Doe (Marnie Parker)
[ DrawStatusLine width;
   @split_window 1; @set_window 1;
   @set_cursor 1 1; style reverse;
   width = 0->33;
   if (width == 0) width = 80;
   spaces (width-1);
   @set_cursor 1 2;
   print (name) location;
   @set_cursor 1 1; style roman; @set_window 0;
];


[ w8 ;
  KeyCharPrimitive();
];



!=================================================
! Money handling

Constant YOUR_MONEY_DOLLARS = 8;	Constant YOUR_MONEY_CENTS = 75;
Constant HER_MONEY_DOLLARS = 6;		Constant HER_MONEY_CENTS = 75;
!Constant HER_MONEY_DOLLARS = 11;		Constant HER_MONEY_CENTS = 15;

Global total_money_dollars = 0;
Global total_money_cents = 0;
Global any_money_found = 0;

[ UpdateMoney i j;
	total_money_dollars = total_money_dollars + i;
	total_money_cents = total_money_cents + j;
	while (total_money_cents>=100) {
		total_money_cents = total_money_cents -100;
		total_money_dollars++;
	}
	if (total_money_dollars>=20) {EnoughMoney(); rtrue; }
];

[ PrintMoney ;
	print "$";
	print total_money_dollars;
	print ".";
	print total_money_cents;
];

[ CountMoney ;
	switch(location) {
		livingroom: print "A fiver, a few loonies... "; PrintMoney(); ". Enough for fast food, but not much more.";
		insidecar: print "Your money, plus Jane's, "; if (any_money_found == 1) { print "plus the change you found in the car, "; } print "that makes it "; PrintMoney(); ". In other words, not quite enough.";
		thewoods: "It doesn't really matter anymore, does it?";
	}
];


!=================================================
! Objets


Object change "change"
	with article "some",
	description [; CountMoney(); rtrue;
	],
	name 'change' 'coins//p' 'coin' 'dollars' 'money' 'fiver' 'loonie' 'loonies//p' 'dime' 'dimes//p' 'quarter' 'quarters//p' 'penny' 'pennies//p' 'nickel' 'nickels//p',
	before [; Count: CountMoney(); rtrue;
		Drop, ThrowAt, PutOn, Insert: "You're not exactly loaded.";
		LookFor: if (location == insidecar) { InCarHint(); rtrue; }
	],
has concealed;

Object cellphone "cellphone"
	with article "your",
	description [; switch(location){
		livingroom: "Your flip phone, currently on silent, to avoid waking up your dad.";
		default: "It's just your cell phone. You've had it for a while, I guess. You don't use it much for calls, but you sure text.";
		}
		],
	name 'cell' 'phone' 'cellphone' 'mobile',
	before [; Drop, ThrowAt, PutOn, Insert: "Of course not. It's your phone, you keep it with you at all times.";
		Open, Flip: <<Call>>;
		SwitchOn: "It's already on.";
		SwitchOff: "What if someone texts you? You never turn your phone off.";
		],
has concealed;

Object license "Novice license"
	with article "your",
	description "You got it six months ago. And six months ago, you started borrowing your Dad's car for a ride while he was sleeping. Pretty sure he knows (oh yeah, especially since that day where you and Jane forgot A & W bags in the car), but he's never mentioned it.",
	parse_name ComplicatedParsing,
	name 'permit' 'license',
	phrase_name '.opt(' 'novice' '.or' 'N' '.)' '.opt(' 'driving' '.or' 'driver' '.or' 'driver^s' '.or' 'learner' '.or' 'learner^s' '.)' '.name' './' 'GDL',
	before [; Drop, ThrowAt, PutOn, Insert: "No thanks, you'd rather not be arrested by the cops when they pull you over.";
		],
has concealed ;


! ==============================
! Trying to escape the room without making noise

[ AlreadyHaveThem ;
	"You already have the keys -- time to go now.";
];

Object livingroom "In the living room"
	with description [; print "The room is dark and warm, it's a hot June night. There's barely a glimmer of light from the street, but you know where everything is: the TV and the couch on the east wall, the door to your room behind you, and the one for your Dad's on the opposite side, the dinner table kind of in the way, and the front door. "; if (carkeys in player) { "Now that you have the keys, you better leave, quietly."; } else { if (console.touched==0) {"The keys must be on the entry table, near the door; at least that's where they always are.";} else {"But where the hell could the keys be?";} }
	],
	s_to "No need to get back there, you have everything you need.",
	out_to [; if (carkeys in player) {Leave(); rtrue; } else {"You're going to need to find the keys first.";}
		],
	before [;
		Sing: "Better not -- get the car keys and leave quietly!";
		Jump: if (noun == 0) {"That would probably wake your Dad up.";}
		Listen: "You freeze for a few seconds to listen to the noises around. But it's the middle of the night, and there are no other sounds than your Dad snoring regularly.";
	],
has ;

Object dad "Dad" livingroom
	with description "He's in his room, but you can hear him snore. Usually he doesn't wake up, but that's not a reason for not being careful.",
	name 'dad' 'daddy' 'father',
	parse_name ComplicatedParsing,
	phrase_name 'my' '.or' 'your' '.name',
	before [; WakeOther: "Ha, ha. Very funny.";
		Listen: "He's snoring; that's how you know it's safe to leave the house.";
		Search, LookUnder: "What? No. If the keys are in his pockets, there's nothing to do but go back to your room.";
		Call, TalkTo: "No, you sure don't want to wake him up.";
		],
	life [;	"No, you sure don't want to wake him up.";
		],
has animate male proper concealed ;

Object couch "couch" livingroom
	with description "A big leather couch in front of the TV; it's super comfy, and you crash in it even when you're not watching TV.",
	parse_name ComplicatedParsing,
	name 'couch' 'sofa' 'chesterfield',
	phrase_name '.opt' 'big' '.opt' 'leather' '.opt' 'comfortable' '.opt' 'comfy' '.name',
	before [; Enter: "No, you really want to hang out with Jane while she's still here.";
		Touch, Search: if (carkeys in player) {AlreadyHaveThem(); rtrue;} else {remove fakekeys; move carkeys to player; "You get closer to the front of the couch and run your hands on it, just in case... ah! The car keys got stuck in the back of the couch. They must have fell from your dad's pocket. You grab them quietly, trying to not make them jingle too much.";}
	],
has enterable scenery concealed;

Object fakekeys "keys" livingroom
	with description "They should be somewhere in the room, but where?",
	name 'keys',
	parse_name ComplicatedParsing,
	phrase_name 'car' '.name' './' '.opt(' 'your' '.)' 'dad^s' 'car' '.name' './' 'front' 'door' '.name' './' 'set' 'of' '.name',
	before [; Take, Touch, Smell, Taste, Push, Pull, Turn: "You don't know where those are. You're going to have to look around...";
		Search, LookFor: "But where to search exactly?";
	],
has pluralname concealed;

Object carkeys "car keys"
	with article "your Dad's",
	description "The car keys, and the keys of the front door, and a key from work? Maybe? Doesn't matter.",
	name 'keys',
	parse_name ComplicatedParsing,
	phrase_name 'car' '.name' './' '.opt(' 'your' '.)' 'dad^s' 'car' '.name' './' 'front' 'door' '.name' './' 'set' 'of' '.name',
	before [;
		 Drop, ThrowAt, PutOn, Insert: if (location == livingroom) { "No, you're going for a drive with Jane. You don't want to regret not spending enough time with her when she'll be gone."; } else { "You're holding on to them; your Dad would have a fit if you lost them."; }
		 Give: if (second ~= player) { <<Drop self>>; }
	],
has pluralname ;

Object tv "flat-screen TV" livingroom
	with description "A flat-screen TV your Dad bought last year, for the playoffs. It's pretty big.",
	name 'TV' 'television',
	parse_name ComplicatedParsing,
	phrase_name '.opt' 'big' '.opt(' 'flat-screen' '.or' 'screen' '.)' '.name',
	before [; SwitchOn: "You have better things to do. The TV will still be there at the end of the summer. Jane won't.";
		Attack: "That'd be pointless.";
	],
has scenery concealed;

Object mydoor "door to your room" livingroom
	with description "The door to your room, which is closed.",
	name 'door' '.room', ! needed to trigger disambiguation
	parse_name ComplicatedParsing,
	phrase_name '.name' 'to' '.or' 'of' 'your' '.or' 'my' 'room' './' 'your' '.or' 'my' 'room' './' 'my' '.or' 'your' '.opt(' 'room' '.or' 'room^s' '.)' '.name',
	phrase_name2 'to' '.or' 'of' 'your' '.or' 'my' 'room' '.name',   ! for weird command stemming from disambiguation
	before [; Unlock: "It's already unlocked.";
		Open, Push, Pull, Enter: <<Go s_obj>>;
	],
has openable scenery concealed;

Object hisdoor "door to your Dad's room" livingroom
	with description "The door to his room, slightly ajar.",
	name 'door' '.dad',  ! needed to trigger disambiguation
	parse_name ComplicatedParsing,
	phrase_name '.name' 'to' '.or' 'of' '.opt(' 'your' '.or' 'my' '.)' 'Dad^s' '.or' 'Dad' 'room' './' 'his' 'room' '.or' '.name' './' '.opt(' 'your' '.or' 'my' '.)' 'Dad^s' '.or' 'Dad' 'room' '.or' '.name',
	before [; Unlock: "It's already unlocked.";
		Open, Push, Pull, Enter: "You'd rather not, it might wake him up.";
		Search: "You peek in his room, and all you see are his feet laying on top crumpled bedsheet.";
		Listen: "Great, you can hear him snore even louder.";
	],
has openable scenery concealed;

Object table "dinner table" livingroom
	with description "An old, wooden dining table; it's kind of in the way, because it's a bit too big for the room. Well, actually the room is too small for the table, but we had to keep it, and it's not like housing in Vancouver is particularly cheap. But it is too big for two, that's for sure. There might be things on it, but you can't see in the dark.",
	name 'table',
	parse_name ComplicatedParsing,
	phrase_name '.opt' 'wooden' '.opt(' 'dining' '.or' 'dinner' '.)' '.name',
	before [; Touch, Search: if (carkeys in player) {AlreadyHaveThem(); rtrue;} else {"Maybe the keys were left on that table... You carefully run your fingers on the surface of the table, but they're not here.";}
	],
has supporter scenery concealed;

Object chairs "chairs" livingroom
	with description "The chairs came with the table - four of them.",
	name 'chairs' 'chair',
	parse_name ComplicatedParsing,
	phrase_name '.opt' 'wooden' '.opt' 'dining' '.name',
	before [; Enter: "You don't see why you'd do that.";
		Touch, Search: if (carkeys in player) {AlreadyHaveThem(); rtrue;} else {"You search each of the chairs, but it doesn't look like the keys have been forgotten here -- your Dad would have noticed while putting the chairs under the table.";}
	],
has enterable pluralname scenery concealed;

Object console "entry table" livingroom
	with description "Dad usually puts the keys on top of the entry table, if he doesn't forget them in his pockets.",
	name 'console' 'table',
	parse_name ComplicatedParsing,
	phrase_name 'entry' '.or' 'entrance' '.or' 'hall' '.name' '.or' 'shelves',
	touched 0,
	before [; Touch, Search: if (carkeys in player) {AlreadyHaveThem(); rtrue;}
				else { if (self.touched == 0) { self.touched=1; "You touch the top of the entry table, expecting to find the keys... But you can't find them. Crap! You hope he put them somewhere else, because if they're still in his pants pockets, you're just gonna have to go back to bed.";} else {"You run your fingers on top of the entry table once more, half expecting the keys to be there, but no, they're really not there.";}
				}
	],
has supporter scenery concealed;

Object entrancedoor "front door" livingroom
	with description "The house's front door. You're lucky it doesn't squeak when you open it in the middle of the night.",
	name 'door' '.front', ! needed to trigger disambiguation
	parse_name ComplicatedParsing,
	phrase_name 'front' '.or' 'entrance' '.name',
	before [; Unlock, JustUnlock: if (second == carkeys) {Leave(); rtrue; } else { "You need the car keys before you can leave."; }
		Open: if (carkeys in player) {Leave(); rtrue; } else { "You need the car keys before you can leave."; }
	],
has lockable locked openable scenery concealed;

Object fake_light "light" livingroom
	with description "There's barely a glimmer of light, but you can guess the shapes of the furniture in the living room: the couch, the TV, the table and the chairs, and the entry table by the front door.",
	name 'light',
	parse_name ComplicatedParsing,
	phrase_name 'glimmer' '.or' 'sliver' '.or' 'ray' 'of' '.name' './' 'street' '.name' './' '.opt' 'light' 'switch',
	before [; Take, Taste, Touch, Smell, Pull, Turn: "You can't really do that.";
		SwitchOff, Remove: "The light is already off.";
		SwitchOn, Push, Flip: "No way -- the light would probably wake your Dad up.";
	],
has scenery concealed;



[ Leave ;
	print "You slowly, carefully put your shoes on, then unlock the door and leave quietly. Locking the door behind you without making any noise is always a bit scary, but you've mastered the trick; once it's locked, you wait a few minutes, just in case, but the light in your Dad's room remains off. You walk to the car, unlock it manually, and start it as smoothly as you can.^^";

	w8();

	print "You slow down when you reach Jane's block; but she's been posted behind that big oak since you texted her, and she climbs quickly in your car.";
	print "^~Hey~ you nod.^
	~Hey. Thanks for picking me up~ she says as she put the guitar in the back of the car.^
	~Yeah sure. I was worried you'd forget the guitar, forgot to remind you~^
	~Well, we're going camping, of course I'm bringing it! ;)~^
	~Haha yeah. Sounds great. You ok though? :/~^
	~It's...~ She sighs, exasperated. ~My stupid sister and her stupid boyfriend~^
	She doesn't say more. But there's no need. ~Ok. Going east, then?~^
	~Yeah. I'll tell you~^^";

	w8();
	ClearScreen();

	print "^~...~^";
	w8();
	ClearScreen();
	print "^~Hey, wanna get pot?~ she says out of the blue.^
	~Haha. Sure, might as well, we're going to be up there a few hours eh? :)~^
	~I know a guy. Go towards SFU, I'll tell you~^
	~Ok. And we'll just stop at 7/11 for munchies?~^
	~I brought chips~^
	~Duuude, you rock :D~^
	~I know duuude :D~ You bump fists jokingly.^^";

	w8();
	ClearScreen();

	print "^~Is that the place?~^
	~Yeah, that house there. Shit do you have money?~^
	~How much do we need?~^
	~20 bucks for an eighth :/~^
	You count your change. ~$"; print YOUR_MONEY_DOLLARS; print "."; print YOUR_MONEY_CENTS; print ", you?~^
	~Damn it, $"; print HER_MONEY_DOLLARS; print "."; print HER_MONEY_CENTS; print ". We're short, like, 5 bucks :(~^
	You pause for a second. ~Well... My dad usually has change lying around everywhere...~^
	~Yeah but...~ She stops, uneasy.^
	~He won't mind... I mean if he asks I'll say it was for fast food or something @@94@@94'~^
	~Ok. You sure?~^
	~Yeah. Besides, I haven't smoked in ages~^
	~Hehe, k~^";

	w8();

	PlayerTo(insidecar);

];


! ==============================
! Looking for money in the car to buy pot


Object insidecar "Inside the car"
	with first 0,
	description [; print "The car is a Chevrolet... something. Like, it's not a truck, just a regular, dark red, automatic car. It's fine. Your dad always keeps change around, sometimes in the most random places, for like Tim Hortons, or groceries, or like to give to bums. He probably won't notice if you grab some, and he won't mind anyway."; if (self.first==0) {self.first=1; UpdateMoney(HER_MONEY_DOLLARS, HER_MONEY_CENTS); print "^^Jane is here, looking around her. ~I dunno, where does he keep change?~";} else {print " But now, finding some is another story...";} "";
	],
	out_to "You don't have enough for the pot yet. Besides, you'll leave the, uh, transaction to Jane -- she's the one who knows the guy.",
	cant_go "It's a pretty small car, there's not a lot of room to move around.",
	each_turn [i; i=random(40);
		switch(i){
			1: print "^You think for a second. ~Are you sure it's gonna be ok? I mean, we have a lot of change... :/~^~Ah, don't worry about that, I'm sure it'll be fine...~^~Yeah but... I dunno~^~Yeah well what's he gonna do? Make a fuss?~^~Yeah, and then we won't have any~^She shrugs. ~It'll be fine, trust me~^~K~^";

			2: print "^~So how much do we have so far?~ she asks.^~You said you had $6.75?~^~Yeah~^~So we have... "; PrintMoney(); print "~^~Ugh :( Almost there, I guess~^";

			3: print "^~Man, there sure is a lot of places you can hide change in a car~ she says.^~Yeah. I'm sure you can hear all the coins when my Dad goes over a speed bump @@94@@94~^~Haha yeah~^";

			4: print "^~Man, there sure is a lot of places you can hide change in a car~ she says.^~Yeah, and my Dad probably forgot about half of it~^~Literally sitting on a pile of gold~^~Haha yeah :p~^";

			5: print "^~So your Dad still doesn't know?~^~What, that I take the car sometimes?~^~Yeah~^~I dunno~ you shrug. ~I'm sure he knows, but he doesn't say anything~^Pause.^~Which is pretty cool I guess~^~Yeah. Your Dad is cool~^~Yeah, he's alright. We get along well. I mean, it could have been worse~^~Yeah~^";

			6: print "^~Pff look at us, looking for dimes to get pot~ you say jokingly.^~Haha yeah, that's pretty bad~^~I do want it pretty bad, so there's that~^~Yeah, it's gonna be pretty awesome~^";

			7: print "^~So this guy... Is his stuff good?~ you ask.^~Yeah, it's ok. He's a friend of Greg's~^~Oh yeah?~^~Yeah. I've bought from him a couple times. It's good~^~Good~^";

			8: print "^~Hey, so... Have you been writing anything lately?~^~Yeah...~ you reply. ~I mean nothing major, but yeah, a little bit. You?~^~A song :) but I haven't finished it yet~^~Cool. You'll show me?~^~Sure, we'll write the rest when we're high :p~^~Haha sounds good~^";
		}
	],
has scenery concealed;

[ InCarHint i;
	print "You look around, slightly frustrated. ~I'm sure there's change all over the place, but... Where should we search now?~^~I dunno. Let's see~ She takes a look around. ~Hey did we try ";

	! some of them will never be displayed, since there's more than 5.50 available
	if (i==0 && glovebox.searched==0) { i=1; print "searching the glovebox"; }
	if (i==0 && floormat.searched==0) { i=1; print "looking on the floor"; }
	if (i==0 && visor.searched==0) { i=1; print "looking in the sun visor"; }
	if (i==0 && doorcompartment.searched==0) { i=1; print "searching the door compartments"; }
	if (i==0 && seat.lookedunder==0) { i=1; print "looking under the seats"; }
	if (i==0 && middlecompartment.searched==0) { i=1; print "opening that little compartment in the middle console";}
	if (i==0 && cupholders.searched==0) { i=1; print "looking in the cupholders"; }
	if (i==0 && floormat.lookedunder==0) { i=1; print "looking under the floormat"; }
	if (i==0 && dashboard.lookedunder==0) { i=1; print "looking on the dashboard"; }
	if (i==0 && vents.searched==0) { i=1; print "looking in the air vents"; }
	if (i==0 && backofcar.searched==0) { i=1; print "searching behind the seats"; }
	if (i==0 && seat.searched==0) { i=1; print "looking in the seat"; }
	if (i==0 && gearshift.searched==0) { i=1; print "searching the gear shift"; }
	if (i==0 && wipers.searched==0) { i=1; print "turning on the wipers?~^You look at her oddly. ~What?~^~I dunno~ she shrugs. ~I guess that doesn't make sense~"; }
	"?~^You shrug. ~I don't know. Maybe, yeah...~";
];

Class Carpart
	with found_in insidecar,
	searched 0,
	before [; Take: "It's part of the car, and no way you're breaking anything here.";
		Attack: "You don't really want to do that.";
	],
	parse_name ComplicatedParsing,
has scenery concealed;

Carpart thecar "car"
	with description "The car is a Chevrolet... something. Like, it's not a truck, just a regular, dark red, automatic car. It's fine. Your dad always keeps change around, sometimes in the most random places, for like Tim Hortons, or groceries, or like to give to bums. He probably won't notice if you grab some, and he won't mind anyway.",
	name 'car' 'chevrolet' 'chevy',
	phrase_name 'your' '.or' 'my' 'Dad^s' '.name' './' 'inside' '.opt' 'the' '.name',
	before [; Search: InCarHint(); rtrue;
		Enter: "You're already in there.";
		Exit: <<Go out_obj>>;
		LookUnder: "You don't feel there could be change right there on the road, so why bother.";
		Take: "You've already got your Dad's car.";
		Empty: "You don't see why you would do that.";
		SwitchOff: "The car is already off";
		SwitchOn: "You're not going anywhere yet; you and Jane want to buy pot first.";
	],
has ;

Carpart trunk "trunk"
	with description "The car's trunk -- it's such a mess, you don't even want to try to search it.",
	name 'trunk' 'boot',
	phrase_name '.opt(' 'your' '.or' 'my' 'Dad^s' '.)' 'car^s' '.name' './' 'inside' '.name',
	before [; Open, Search: "Last time you checked, that trunk was full of random stuff and garbage. You don't feel like going through it.";
		Close: "It's already closed.";
		Enter: "It's full of garbage.";
		Empty: "It's full of your Dad's stuff -- you can't just steal his car and dump everything out.";
		LookUnder: <<LookUnder car>>;
	]
has openable;

Carpart roof "car roof"
	with description "It's just a regular roof, and the light is on. Come on, you can't really expect your Dad to own a convertible.",
	name 'ceiling' 'roof',
	phrase_name 'car' '.name',
	before [; Search: "You can't really search that.";
	],
has;

Carpart rooflight "roof light"
	with description "The little light above your head is on.",
	name 'light' 'rooflight' 'bulb' 'lighting',
	phrase_name '.opt' 'car' 'roof' '.name',
	before [; Search: "You can't really search that.";
		Touch: "You touch the bulb with your fingers, but quickly remove them. ~Ah! That's hot~^Jane looks at you funny, and chides you: ~Uh, yeah? It's a light? Why did you do that, dummy?~^~Yeah, yeah, whatever~^~Lol :p~";
		SwitchOn: "It's already on.";
		SwitchOff: "It's probably more convenient to search for change with the light on, eh?";
	],
has on;


Carpart wheel "steering wheel"
	with description "The wheel is pretty high, but you don't mind, and then you can drum up your fingers on the dashboard when you're waiting at a long light. There's the horn in the middle, and various switches on the side.",
	name 'wheel',
	phrase_name 'steering' '.name' './' '.opt' 'car' 'horn' './' 'klaxon',
	before [; Push: "And wake people up at 1am? You're not 16 anymore.";
		Search: "You can't really search that.";
	];

Carpart turnsignal "turn signal"
	with description "That's the little switch on the left of the steering wheel. You're getting better at remembering to turn it on.",
	name 'signal' 'switch' 'switches//p' 'stick',
	phrase_name 'turn' '.name',
	before [; Lift, SwitchOn, Turn: "You're fine right now - you're parked on the side of the road, in front of houses. Just chill.";
		Search: "You can't really search that.";
	],
has ;

Carpart wipers "wipers switch"
	with description "The wipers switch is on the right of the steering wheel. But the windshield isn't really dirty.",
	name 'switch' 'stick' 'switches//p',
	phrase_name 'wipers' '.or' 'wiper' '.name' './' 'wiper' './' 'wipers//p',
	before [; Lift, SwitchOn, Turn: if (self.searched == 0) { print "You turn the wipers on, because why not. ~Hang on, did you hear--~ Sounded like something flew across the windshield.^Jane goes outside, and looks on the sidewalk. ~Lol, I can't believe it.~ She picks something off the ground. ~It's a dime!~ she beams.^~Lol whaat? How was that even there?~^~Dunno, but it's ours now!~."; any_money_found=1; UpdateMoney(0,10); self.searched=1; "";} else {"~You think if I do it again there'll be more?~^~Yeah right, as if you found a cheat code for infinite dimes.~^You both silently look as the wipers go back and forth. ~Nope~^~Lol told you~^";}
		Push: "You push on the switch; a little bit of fluid comes out. You laugh, but you don't know why; Jane looks at you like you're a weirdo.";
		Search: "You can't really search that.";
	],
has ;

Carpart windshield "windshield"
	with description "It's just the windshield, with the dashboard under it; it's not really dirty right now, and you hope it won't be after your little trip to the mountains, so that your Dad doesn't notice. Hopefully.",
	name 'windshield' 'windscreen',
	before [; Search: "You can't see anything on the windshield, and nothing on the wipers either, although you can't really see them well.";
	],
has ;

Carpart vents "air vents"
	with description "There are vents on your left, in the middle of the dashboard, and on Jane's right. The car is stopped, so they're not blowing anything.",
	phrase_name '.opt' 'air' 'vents',
	before [; Search, Open: if (self.searched==1) {"You've already searched that.";} else { self.searched=1; "You fiddle with the vents, hoping something might fall off them. ~Anything in yours?~^Janes opens and closes hers. ~Nope. That would be a REALLY weird place to keep change.~^You shrug.";}
		SwitchOn: "You would need to start the car for that, and people might get mad if you idle in front of their houses at 1am.";
		SwitchOff: "It's already off.";
	],
has openable pluralname  ;
Carpart aircond "air conditioning"
	with description "There are vents on your left, in the middle of the dashboard, and on Jane's right. The car is stopped, so they're not blowing anything.",
	phrase_name 'air' 'conditioning' '.opt' 'vents' './' 'ventilation' '.opt' 'system',
	before [; Search, Open: <<Search vents>>;
		SwitchOn: <<SwitchOn vents>>;
		SwitchOff: <<SwitchOff vents>>;
	],
has  ;

Carpart odometer "odometer"
	with description "It's off right now, but it was around 110850 or something. That's it, I guess.",
	name 'odometer',
	before [; Search: "You can't really search that.";
		SwitchOn: "The car is stopped right now, and you don't feel like turning it on just for that.";
	],
has ;

Carpart dashboard "dashboard"
	with description "Right under the windshield, where you're supposed to put your parking receipt.",
	name 'dashboard' 'dash',
	before [; Search: if (self.searched==1) {"You've already searched that.";} else { self.searched=1; any_money_found=1; UpdateMoney(0,1); "You look on the dashboard... ~I can't see much. Can you?~^~Nah, there doesn't seem to... Ah, wait.~ She reaches out to catch something. ~Crap. A penny.~^~Haha sorry~"; }
	],
has supporter;

Carpart seatbelt "seatbelt"
	with description "The car's seatbelts, currently unbuckled.",
	phrase_name '.opt(' 'seat' '.or' 'security' '.)' 'belt' './' 'seatbelt',
	before [; Search: "You can't really search that";
		Close, Buckle: "Yeah, yeah, always buckle it, but not right now.";
	];

Carpart visor "sun visor"
	with description "It's above your head, fixed to the ceiling, for when it's too sunny and you can't see anything. Not that you've used it much, the weather has been kinda cloudy lately.",
	phrase_name '.opt' 'sun' 'visor',
	before [; Search, Open, Flip: if (self.searched==1) {"You've already searched that.";} else { self.searched=1; "Oh yeah, one time he forgot his credit card in there, had to look for it for like half an hour. But no, nothing here. Jane checks hers, but there's nothing either.";}
	];

Carpart mirror "rearview mirror"
	with description "You look at yourself in the rearview mirror, but only briefly.",
	name 'mirror',
	phrase_name 'rear' 'view' '.opt' '.name' './' 'rearview' '.or' 'rear-view' '.name',
	before [; Set, SetTo: "It's fine like this.";
		Search: "You can't really search that.";
		Touch: "Ugh no, smudge marks are the worst.";
	];

Carpart floormat "floor mat"
	with description "It's a kind of plastic mat; an annoying plastic mat, because it always moves under your feet.",
	name 'mat' 'mats//p' 'rug' 'carpet',
	phrase_name '.opt(' 'plastic' '.or' 'rubber' '.)' 'floor' '.or' 'car' '.name' './' '.opt(' 'plastic' '.or' 'rubber' '.)' 'floormat' '.or' 'floormats',
	phrase_name2 'below' '.or' 'under' 'me' '.or' 'us' './' 'under' 'my' '.or' 'our' 'feet' '.or' 'shoes',
	lookedunder 0,
	before [; Search: if (self.searched==1) {"You've already searched that.";} else {print "You look under your feet, to see if anything fell... A-ha! There was a quarter between the edge of the floormat and the side of the console in the middle.^~Cool! I can't really see anything on my side~";  self.searched=1; any_money_found=1; UpdateMoney(0,25); "";}
		Lift, LookUnder: if (self.lookedunder==1) {"You've already looked under that.";} else { print "You lift the floormat, to see if anything fell under it... Mmh, no, there doesn't seem to be anything.^~Ugh, it's...~ says Jane, looking at her fingers.^~Is it dirt?~^~Yeah~^~Come on, we're going in the woods, don't tell me that --~^~Ya ya ya ya, I know!~ she rolls her eyes. ~Well, I can't... ah!~^~Found anything?~^~Yeah it's... ugh, just a quarter~^~Hahaha~^~Hey shut up, I worked hard for this one~^~:p~";  self.lookedunder=1; any_money_found=1; UpdateMoney(0,25); "";}
	];


Carpart pedals "pedals"
	with description "The car is an automatic; you like it better than manual. It's smoother, and there's less foot-moving involved -- which is good, since that annoying floor mat always moves when you put your feet on it.",
	phrase_name '.opt' 'foot' 'pedal' '.or' 'pedals' './' 'accelerator' '.opt' 'pedal' './' 'gas' 'pedal' './' 'brake' '.opt' 'pedal',
	before [; Push: "It's kind of useless when the car is stopped.";
		Search: <<Search floormat>>;
		LookUnder: <<LookUnder floormat>>;
	];

Carpart seat "seat"
	with description "It's not that comfortable, your back gets kinda sore if you drive too long. Dad says it's because you slouch, but whatever. He's got longer legs too, and he likes to have his seat, like, way back.",
	phrase_name '.opt' 'car' '.opt' 'my' '.opt' 'your' 'seat' '.or' 'seats',
	lookedunder 0,
	before [; LookUnder, Pull: if (self.lookedunder==1) {"You've already looked under that.";} else {print "You reach under the seat and pull it back a little, then look down. ~There's nothing. How about you?~^~Nah. Maybe if we...~ she reaches under her seat awkwardly, and pats around on the floormat. ~Mmmh... Pfff no there's nothing~^~Let me see if I can...~ You stick your arm under the seat, and fish around... Ah! That was definitely something cold, like metal. ~I'll just... reach... and... Pff! Hey, a loonie!~^~Jesus, your Dad *does* have change lying around everywhere~^~Told you~";  self.lookedunder=1; any_money_found=1; UpdateMoney(1,0); "";}
		Set: <<Pull self>>;   ! for "adjust seat"
		Push: <<Pull self>>;  ! for "move seat"
		Search: if (self.searched==1) {"You've already looked under your butts.";} else {print "Oh yeah, maybe you're sitting on some coins. You look between your legs, and behind you. Raise your butt a little... ~Ugh this is awkward. Can you do it?~^~Do what?~^~I dunno, look under my butt, and like in the crack of the seat~^~Tssk sure, I'll look at your crack while you shake your butt :P~^~Uuugh if you could make it more awkward, that'd be just great!...~^~Yeah yeah, hold on...~ She reaches out and puts her finger there. ~Ah! Hold on...~ She can't quite grab the coin, and it falls down under the seat, but you manage to grab it. ~Another quarter!~^~Lol that quarter was under your dad's ass~^~Ugh stop it~^~It's crack money and we're using it for pot~^~hahahahaha good one good one :D :D~^~lol :D~"; self.searched=1; any_money_found=1; UpdateMoney(0,25); "";}
		Enter: "You're already sitting on it.";
		Exit: <<Go out_obj>>;
	],
has enterable;

Carpart cardoor "car door"
	with description "The car door, with a pretty deep compartment in which your dad keeps a few things, like his old CDs and his sunglasses.",
	phrase_name '.opt' 'car' 'door',
	before [; Open: <<Go out_obj>>;
		Close: "It's already closed.";
		Search: <<Search doorcompartment>>;
	],
has openable;

Carpart carwindow "car window"
	with description "The window on your side is down about a quarter of the way; it's warm out there, but you don't really like having the wind blowing in your face while you're driving.",
	name 'window',
	phrase_name '.opt' 'car' '.opt' 'side' '.name' './' '.name' 'crank' './' 'windowcrank' './' '.name' 'button',
	before [; Open, Push, Turn, Pull: "Nah, it's fine like this.";
		Close: "It's still really warm outside -- a bit of air doesn't hurt.";
		Search: "You can't really search that.";
	],
has openable;

Carpart doorhandle "door handle"
	with description "It's just the handle for the door, a little lever with a little cavity below the window.",
	phrase_name '.opt' 'door' 'handle' './' 'lever' './' 'latch' './' 'door' 'knob' './' '.opt(' 'door' 'handle' '.)' 'cavity' '.or' 'hole',
	before [; Pull, SwitchOn, Flip: <<Go out_obj>>;
		Search, LookUnder: if (self.searched==1) {"You've already searched that. ~Can you believe we found a penny in the door handle, though?~^~Haha nah, it's pretty amazing :D~";} else {print "After all, it's true you haven't searched that... ~No way!~^~What?~ says Jane.^~I just found a penny in the door handle!~^~In the what? Really?? hahahaha~^You two start laughing at this unexpected hiding place.^~Ah man, your Dad is amazing~^~Yeah lol~"; self.searched=1; any_money_found=1; UpdateMoney(0,1); "";}
	];

Carpart doorcompartment "door compartment"
	with description "Your dad keeps his sunglasses and a few CDs in that compartment.",
	phrase_name '.opt' 'door' 'compartment',
	before [; Search: if (self.searched==1) {"You've already searched that.";} else {print "You reach inside the compartment. ~Hey, there's actually a few coins here...~^~Oh yeah?~ She checks the one on her side.^~Yeah... let's see... Like, three dimes~^~I got a dime and two quarters~^~Man, we're loaded!~"; self.searched=1; any_money_found=1; UpdateMoney(0,90); "";}
	];

Object sunglasses "sunglasses case" insidecar
	with description "The case for your Dad's sunglasses.",
	parse_name ComplicatedParsing,
	name 'sunglasses' 'case',
	before [; Take, Wear: "No, you'll just leave that here.";
		Search, Open: "Just sunglasses.^~That's probably a bad place to keep change anyway~^~Yeah well... It's my dad, you never know~";
	],
has openable concealed;

Object cds "CDs" insidecar
	with description "A few CDs by old bands. Like, I don't know, Bruce Springsteen.",
	parse_name ComplicatedParsing,
	name 'cd' 'cds',
	phrase_name 'cd' 'cases',
	before [; Take, Listen: "No thanks, you're not 45.";
		Open: "You open a few cases, but there's nothing in there. Didn't think so anyway.";
	],
has openable concealed;

Carpart gearshift "gear shift"
	with description "It's an automatic; you like it better than manual. Less foot-moving involved, and smoother.",
	name 'shift' 'stick',
	phrase_name '.opt' 'gear' '.name' './' 'gearshift' './' 'park' '.or' 'neutral' '.or' 'reverse' '.or' 'drive',
	before [; Search: if (self.searched==1) {"You've already searched that.";} else {print "~Hey! That's a dime right here~^~Against the gear shift? lol~^~Yeah~"; self.searched=1; any_money_found=1; UpdateMoney(0,10); "";}
		Set, SetTo, Push, Pull: "The car is stopped.";
	];

Carpart middleconsole "console"
	with description "Between the two seats, there's a few cupholders, and a little compartment that opens from the top.",
	name 'console',
	phrase_name '.opt' 'middle' '.name' '.or' 'separation' './' 'between' '.opt(' 'the' '.or' 'both' '.)' 'seats' './' '.opt' 'middle' 'armrest',
	before [; Search: "You see cupholdhers and a little compartment; please indicate which part you want to search.";
	];

Carpart cupholders "cupholders"
	with description "There's two cupholders side-by-side in the console between the seats. They're good for soda, but the milkshakes from the place on Robson never quite fit. The trick is to drink a third of it, and then squish them in.",
	phrase_name 'cupholder' '.or' 'cupholders',
	before [; Search: if (self.searched==1) {"You've already searched that.";} else {print "~Did we look here?~^She shrugs.^~There's a dime I think... Ugh, it's... stuck...~^~Niiice. Covered in sugar?~ she says.^~Must be. Yuck, it sticks to my fingers~^~Gross :p~"; self.searched=1; any_money_found=1; UpdateMoney(0,10); "";}
		Taste: "Eww. SO gross.";
	],
has pluralname;

Carpart middlecompartment "small compartment"
	with description "A little compartment, probably to put mints and stuff. Push the top to pop it open.",
	name 'compartment',
	phrase_name '.opt(' 'small' '.or' 'little' '.)' '.name' '.rest' 'in' 'the' '.opt' 'middle' '.opt' 'console',
	before [; PopOpen, Push, Open, Search:  if (self.searched==1) {"You've already searched that.";} else {print "You open the small compartment. There's a box of Tic-Tacs there, and a few coins.^~Sweet! That's like... 80 cents!~^~That's all? Sucks :/ It was probably the most obvious place~^~Yeah... I'm sure there's more lying around.~"; self.searched=1; any_money_found=1; UpdateMoney(0,80); "";}
	],
has openable;

Carpart glovebox "glove box"
	with description "Jane's got her knees against the glovebox right now. There must be a few things in there.",
	phrase_name 'glove' 'box' '.or' 'compartment' './' 'glovebox',
	before [; Open, Search:  if (self.searched==1) {"You've already searched that.";} else {print "~Hey, could you try the glovebox?~^~Oh yeah, sure~ She pops it open.^~There's... Ah yeah, three quarters here~^~Cool~"; self.searched=1; any_money_found=1; UpdateMoney(0,75); "";}
	],
has openable;

Carpart backofcar "back of the car"
	with description "You can't really see behind, because twisting your neck is awkward, but there might be coins back there after all...",
	phrase_name 'back' '.rest' 'of' '.opt' 'the' 'car' './' 'behind' '.opt' 'the' '.opt' 'car' '.opt(' 'seats' '.or' 'seat' '.)' './' 'back' 'seat' '.or' 'seats' './' 'rear' 'shelf' '.or' 'deck' '.or' 'dash' '.or' 'dashboard',
	phrase_name2 'backseat' './' 'backseats',
	before [; Enter, Search:  if (self.searched==1) {"You've already searched that.";} else {print "~Oh yeah,~ you say, ~do you think there's some in the back?~^~Ah yeah maybe. I'll check~^She throws her leg between the seats and climbs into the back of the car. ~Well... Ah, there's like a dime here!~ she says while checking in the seats. ~And let's see... nothing on the rear deck, I think...~^~Did you check behind the seats? Like, the pockets?~^~Oh right, good call! Let's see...~ she puts her hand in it and searches while making a face. ~Yeah, there's... Hey, that's a loonie!~^~Sweet!~^~Yeah!... I'm just gonna come back from outside now~^~Ya it's awkward as hell :p~^She opens the passenger door and sits back in her seat.^~Thanks duuude ;)~^~Haha yeah you bet dude~"; self.searched=1; any_money_found=1; UpdateMoney(1,10); "";}
	],
has enterable;





Object pot "pot" insidecar
	with description "You don't have any! That's precisely what's wrong here.",
	name 'pot' 'weed' 'grass' 'marijuana' 'ganja',
	before [; Take: <<Examine self>>;
		Smoke: "You haven't done it in a couple months, but last time was good. You spent the night smoking and singing and talking with Jane, and it was awesome. Always is.";
		Buy: "Yeah, you really want it, but you don't have quite enough right now!";
		Smell, Taste, Touch: "You can almost smell it... ah, this is gonna be a good night.";
		LookFor: "You know where to find some, you just don't have enough money yet.";
	],
has concealed ;

Object guitarcar "guitar" insidecar
	with article "Jane's",
	description "Jane's guitar is in the back of the car. She often brings it along -- and it's awesome, especially when you two end up in remote, quiet places. There you can enjoy how the music sounds in the still of the night, or have fun and make as much noise as you want.",
	name 'guitar' 'instrument',
	phrase_name 'Jane^s' '.name',
	before [; Take, Play, Touch, Search, LookUnder: "It's hard to reach from here, and you don't really need it right now anyway.";
	],
has concealed ;


Object janecar "Jane" insidecar
	with description "It's Jane, like, your best friend? You've known each other for like a couple years, but immediately hit it off. Funny, cause she's the outspoken type and you're not really. But you guys can spend hours talking and talking -- especially about, like, art, and writing. She writes great songs, and sometimes you help with the lyrics; she's the only one you tell about your writing. Best friends.",
	name 'Jane',
	parse_name ComplicatedParsing,
	phrase_name '.opt(' 'your' '.or' 'my' '.)' '.opt' 'best' 'friend' '.or' 'buddy' '.or' 'mate',
	before [; LookUnder: <<Search seat>>;
		TalkTo: "I don't know... She said she'd talk to you about it later, and she doesn't really like being pressed. But you guys will talk, for sure.";
		Search: "Keep your hands to yourself -- besides, she said she was pitching in.";
	],
	life [;
		Kiss: "That'd be weird. It's not like that between the two of you.";
		Attack: "You punch her shoulder, playfully.^~Hey! What did you do that for?~^~I don't know, to start a fight?~^~Oh yeah? You're no match, kid~^~Ooooh yeah? What are you gonna do then?~^~Nothing, you're no match I say~^~Oh yeah?~ You hit her again. ~You're a chicken?~^~Hey! I'm not!~ She hits back, hard.^~Ow-ie!~^~Owie? Awww did yoo get a boo-boo?~^~Psch you wish. You'll see, when we're in the forest.~ You try your best deep voice. ~Into the woods --~^~NOBODY WILL HEAR YOU SCREAM~ you both growl in unison. Stupid tagline for a stupid horror movie you saw last Halloween.^~Haha :D~";
		Ask: switch(second) {
				'pot': "~When was the last time you smoked weed?~^~Dunno~ she shrugs. ~Probably last time we did together. Between graduation and my sister visiting...~^~Yeah I guess. Me too~^~Cool. It's gonna be awesome :D~";
				'chips': "~What flavor did you bring?~^~Old Dutch Sour Cream & Onion~^~Aaah yes! You rock :D~^~Haha :D~";
				'sister', 'problem', 'fight': "I don't know... She said she'd talk to you about it later, and she doesn't really like being pressed. But you guys will talk, for sure.";
				'change', 'money', 'car', 'idea', 'ideas': InCarHint(); rtrue;
				default: "You don't really know what to say. You guys will talk later.";
			}
		Tell: "You don't really know what to say. You guys will talk later.";

	],
	orders [;
		Search: if (noun == change && noun == car) { InCarHint(); rtrue; }
		LookFor: if (noun == change) { InCarHint(); rtrue; }
	],
has animate proper female concealed;

[ EnoughMoney ;
	print "^^~Alright, we have enough :D~^
	~Yay! Ok, I'm going~^
	~K. I hope it'll be fine...~^
	~?~^
	~With all that change and all...~^
	She shrugs. ~I don't care. I'll try it.~^
	And with that, she's out of the car.^^";

	w8();

	print "...^^";

	w8();

	print "Yeah, he doesn't seem very chill. He's like laughing at her. But she doesn't move one bit. So he starts acting all important and macho -- like, arms wide open moving a lot, his face kind of in her face. ~u disrespecting me? i'm doing u a favor selling pot to a teenager and u come here with your lunch money? man i don't have time to waste~, you can totally picture it. But she doesn't move one bit. Even crosses her arms, unimpressed like ~r u done here bro~.^^
	God, she's *amazing*. So determined and self-assured. You wish you could do that.^^
	The guy's still at it but she shrugs like ~ok u don't want my money i guess~. Then she starts to turn away but he grabs her by the arm; and, like, he starts getting angry like ~wtf r u doing~. And then bam -- she gives him the money, like right in his hand, and she puts the other one out. And she got him, and he knows it, and he's like ~pff whatever~, and he gives her the pot. She nods a thank you and walks away; he looks at her while she walks away, shaking his head but almost grinning.^^";

	w8();
	print "~You ok?~^
	~Yeah, no worries. He tried to make a fuss, but yknow. He had to I guess, but it's not like he didn't want to sell it to me so...~^
	~Haha nice.~ You stop, unsure of what to say next. But you say it anyway. ~You're amazing. Like, seriously~^
	~Haha yeah thanks. I get around.~^
	~No, really! Hey how am I gonna get pot when you're gone?~^
	~Haha. You're gonna miss me, eh?~^
	~You kidding? Totally.~^^
	You stop -- an awkward silence. It's not that funny I guess. Anyway, she breaks it:^
	~So -- head east!~^
	~East!!~^^";

	w8();
	ClearScreen();

	print "^^~...~^^";
	w8();
	ClearScreen();

	print "^^~So... yeah.~^^";
	w8();
	ClearScreen();

	print "^^~...~^^";
	w8();
	ClearScreen();

	print "^^~What happened?~ you ask, tentatively.^
	~It's just... ugh. She's visiting, right?~^
	~Right~^
	~And she brought Brandon, you know, her fiancé~^
	~Right~^
	~And like... The guy's working in real estate out there in Toronto, right? So like, three-piece suit and the smile and oh i'm a people person right~^
	~Right...~^
	~Anyway. It's fine, except that he was like asking questions, like 'Oh well what good is an art degree anyway? It's not about quality anyway, all that contemporary shit...'~^
	~Ugh, of course~^
	~Yeah, that kind of guy! And like 'What are you going to Concordia for? You're gonna have to come back and live in your parents' basement anyway. It's not like it gives you a job!'~^
	~?????~^
	~Yeah! Total. Massive. Douchebag.~^
	~:/ sorry. Why does your sister like him?~^
	~Ugh dunno. And like, she didn't like say anything! Like he was all laughing loud, and my sister was like looking at me... and I was like 'Dude! How about, like, saying something! Control your man! I'm your sister, for fuck's sake!'~^
	~Really?~^
	~Yeah! ... well, no, not really. OF COURSE i didn't say anything, cause i'm stupid~^
	~:(~^^";

	w8();
	ClearScreen();

	print "^^~Sorry~ she says after a while.^
	~That's fine~^
	~It's just... Family's hard, yknow?~^
	~Heh, tell me about it~^
	~Well, no, I mean... ugh, sorry, I just~^
	~Hey no, I know what you meant~^
	~Yeah. Sorry. Ugh, I hate this~^
	~Haha I know. Drives you crazy eh? Not finding the words. Like, for your songs too~^
	~Pff whatever, writing nerd~^
	~U jealous? :D~^
	~:D~^^";

	w8();
	ClearScreen();

	print "^^";

	PlayerTo(thewoods);
];


! ==============================
! Final conversation and guitar

[ DeathMessage ;
	if (deadflag == 3) print "You will remember this moment through the years";
];

[ HighAndWeird ;
	"What? You're high, but not that much.";
];

Object thewoods "A remote place in the woods"
	with first 0,
	turncount 0,
	description [; print "Sitting in the grass on the side of a hill, with the forest all around, with a guitar, some pot, and your best friend. Best way to spend the night. You feel very good, completely in the moment, although you can't help but think about how it's the last few months, already nostalgic."; if (self.first==0) {self.first=1; print "^^Jane is sitting next to you, eating some chips."; } "";
	],
	each_turn [; self.turncount++; if (self.turncount == 30) {print "Silently, she grabs her guitar and starts strumming, an absent look on her face. Then she turns around:^~Hey... Wanna help me with my song?~^~Sure, yeah! :)~^~Cool :) I just can't find a way to finish it. Tell me if you have any ideas?~^~Ok yeah.~^~Alright. Here we go.~ , and she starts singing, in her raw, quavering, beautiful voice:"; FinalSong(); 	rtrue; } ],
	cant_go "You're fine where you are. Just enjoy the moment.",
	before [; Smell: if (noun == 0) { "The smell of nature and the woods... but also pot. Mostly pot.";}
		Sing: "You don't really sing. If there's anyone here who should sing, it's Jane -- she's got that raw and quavering voice that can give you goosebumps.";
		Listen: "It's all quiet there. A few sounds from the forest, if you hold still and listen, but you're not sure.";
	],
has scenery concealed;


Object chips "bag of chips" thewoods
	with description "A big bag of Old Dutch Sour Cream & Onion. Your favorite -- and perfect for munchies.",
	name 'bag',
	parse_name ComplicatedParsing,
	phrase_name '.opt(' '.name' 'of' '.)' '.opt(' 'old' 'dutch' '.)' '.opt(' 'sour' 'cream' '.opt' 'and' '.or' '&' 'onion' '.)' 'chips' './' 'old' 'dutch',
	before [;
		Take, Eat, Taste: switch(random(2)) {
			1: "You extend your arm and ruffle through the bag of chips, and grab a few.^~Oh yeah, sorry, didn't mean to hog them :p~^~It's fine, don't worry ;)~";
			2: "~Can I have some?~^~Sure~ she says, tilting the bag towards you. You grab some chips and eat them almost instantly -- can't resist, and you feel really hungry right now.";
		}
	],
has container concealed;

Object guitar "guitar" thewoods
	with article "Jane's",
	description "Jane's old guitar -- she spends hours and hours playing it and writing her songs. But then again, she's going to be an Arts major at Concordia. It's what she does and she loves it.",
	name 'guitar' 'instrument',
	parse_name ComplicatedParsing,
	phrase_name 'Jane^s' '.name',
	before [; Take: "You reach out for the guitar. ~Do you mind?~^~Nah, it's cool, just chillin here~^You strum a few chords, aimlessly. You don't really know a song, and you can't sing.^";
		Play: if (self notin player) { <<Take self>>; } else { "You strum a few chords. Like, C, then a G, then... dammit, your Fs always sound so bad. You keep playing a little while, but you avoid that chord.";}
		Taste: HighAndWeird(); rtrue;
	],
has concealed;


Object woodpot "pot" thewoods
	with description "Sure, there's a bit left. You might not want to smoke too much though, you have to drive later.",
	name 'pot' 'weed' 'grass' 'marijuana' 'ganja',
	before [;
		Take, Taste, Smoke: "You think you're high enough right now. I mean, it's beautiful out there, you feel really good, and you're gonna have to drive later. Let's not push it.";
	],
has concealed;

Object car "car" thewoods
	with article "your Dad's",
	description "The car is parked up there, at the top of the hill. It's fine.",
	name 'car' 'Chevrolet',
	parse_name ComplicatedParsing,
	phrase_name 'your' '.or' 'my' 'Dad^s' '.opt(' '.opt' 'dark' 'red' '.)' '.name',
	before [; Enter: <<Go u_obj>>;
		Touch: "You're too far away.";
		Taste: HighAndWeird(); rtrue;
	],
has enterable scenery concealed;

Object forest "forest" thewoods
	with description "B.C. forests are pretty cool. You love coming out there, sit down on a slope somewhere and try to see what surrounds you.",
	name 'forest' 'trees//p' 'tree' 'nature',
	parse_name ComplicatedParsing,
	phrase_name 'bc' '.name' './' 'british' 'columbia' '.name',
	before [; Enter, Touch: "You'd probably get lost.";
		Taste: HighAndWeird(); rtrue;
		Burn: "That'd be stupid. You love the forest.";
	],
has enterable scenery concealed;
Object hill "hill" thewoods
	with description "B.C. forests are pretty cool. You love coming out there, sit down on a slope somewhere and try to see what surrounds you.",
	name 'slope' 'hill',
	before [;
		Climb: "You're pretty ok with where you are sitting right now.";
		Taste: HighAndWeird(); rtrue;
		Burn: "That'd be stupid. You love the forest.";
	],
has scenery concealed;



!================================
! Big final NPC
!   we copied-and-pasted Jesse Burneko's Info.h that implements topics as objects

! NPC topics

Class 	Topic
 with 	short_name "that",
 	parse_name ComplicatedParsing,			! this is why we copied-and-pasted instead of including
 has 	proper;

Object Topics;




! leaving

Topic -> herfeelings_topic
	with phrase_name 'her' 'feelings' './' 'how' 'she' 'feels' '.rest' 'about' 'leaving' './' 'how' 'she' 'feels' '.rest' 'about' 'going' 'away',
	phrase_name2 'leaving' './' 'going' 'away' './' 'leaving' 'for' 'montreal' '.or' 'university' './' 'jane' './' 'her' './' 'herself';
Topic -> leavingfamily_topic
	with phrase_name '.opt' 'leaving' 'her' 'family' '.or' 'parents' '.rest' 'behind' '.opt' 'her' './' 'leaving' 'your' 'family' '.or' 'parents' '.rest' 'behind' '.opt' 'you',
	phrase_name2 'leaving' 'home' './' '.opt' 'her' 'parents' '.or' 'mother' '.or' 'father' '.or' 'family';
Topic -> leavingbc_topic
	with phrase_name 'leaving' 'bc' '.or' 'vancouver' './' 'leaving' 'british' 'columbia' './' 'leaving' '.opt' 'the' 'province',
	phrase_name2 'bc' './' 'vancouver' './' 'british' 'columbia';
Topic -> departure_topic
	with phrase_name '.opt' 'her' 'departure' './' 'flying' '.opt' 'out' './' '.opt' 'the' 'day' 'of' '.opt(' 'her' '.or' 'your' '.)' 'departure' './' 'when' 'she' 'goes' '.or' 'leaves',
	phrase_name2 '.opt(' 'the' '.or' 'which' '.)' 'day' 'she' 'goes' '.or' 'leaves' './' '.opt(' 'the' '.or' 'which' '.)' 'day' 'she' 'flies' 'out' './' 'when' 'she' 'is' 'leaving' '.or' 'going' './' '.opt' 'her' 'flight' ;
Topic -> comingback_topic
	with phrase_name 'coming' 'back' './' 'returning' './' 'when' '.opt' 'does' 'she' 'come' '.or' 'get' '.or' 'comes' '.or' 'gets' 'back' '.rest' 'here',
	phrase_name2 'when' 'is ''she' 'coming' '.or' 'getting' 'back';


! her fight with her sister

Topic -> sister_topic
	with phrase_name '.opt' 'her' 'sister' '.or' 'sis';
Topic -> fiance_topic
	with phrase_name 'fiance' './' 'her' 'sister' '.or' 'sister^s' 'fiance' './' 'brandon';
Topic -> fight_topic
	with phrase_name '.opt' 'her' 'fight' '.rest' 'with' '.opt' 'her' 'sister' './' '.opt' 'her' 'fight' '.rest' 'with' '.opt' 'her' 'sister^s' 'fiance' './' 'fight';

! us

Topic -> summer_topic
	with name 'summer',
	phrase_name 'summer' 'plans' './' '.opt' 'her' 'plans' 'for' '.opt(' 'this' '.or' 'the' '.)' 'summer' './' 'this' '.or' 'the' 'summer';
Topic -> us_topic
	with phrase_name 'us' '.rest' 'two' './' '.opt' 'our' 'relationship' '.or' 'friendship' '.or' 'future';
Topic -> missingher_topic
	with phrase_name 'missing' 'her' '.or' 'Jane' './' 'I' '.opt' 'will' 'miss' 'you' '.or' 'her' '.or' 'Jane' './' 'you' '.opt' 'will' 'miss' 'her' '.or' 'Jane';
Topic -> missingyou_topic
	with phrase_name 'whether' '.or' 'if' 'she' '.or' 'Jane' 'will' 'miss' 'you' '.or' 'me' './' 'missing' 'me' '.or' 'you',
	phrase_name2 'leaving' 'me' '.or' 'you' '.opt' 'behind' './' 'forgetting' 'about' 'you' '.or' 'me' './' 'me' '.or' 'yourself';


! going to montreal

Topic -> vagueuniversity_topic
	with name 'university' 'college' 'uni' 'school';
Topic -> concordia_topic "concordia"
	with phrase_name 'concordia' 'university' '.or' 'college' '.or' 'school' './' 'university' '.or' 'college' '.or' 'school' 'at' '.or' 'in' 'montreal' '.or' 'quebec',
	phrase_name2 'university' '.or' 'college' '.or' 'school' 'she' 'is' 'going' 'to';
Topic -> campus_topic "campus"
	with name 'campus',
	phrase_name '.opt' 'concordia' '.opt(' 'university' '.or' 'college' '.)' '.name' './' '.name' 'of' '.opt' 'concordia' '.opt(' 'university' '.or' 'college' '.)';
Topic -> montreal_topic "montreal"
	with name 'montreal' 'montréal' 'city' 'quebec',
	phrase_name 'going' 'to' '.name';
Topic -> visiting_topic "visiting"
	with phrase_name '.opt' 'me' 'visiting' './' 'whether' '.or' 'if' 'I' '.or' 'you' 'can' 'visit' '.rest' 'her' './' 'whether' '.or' 'if' 'you' 'can' 'visit' '.rest' 'her';
Topic -> major_topic "major"
	with phrase_name '.opt' 'her' 'major' '.rest' 'at' 'Concordia' '.or' 'university' '.or' 'college' './' 'fine' 'arts' '.rest' 'at' 'Concordia' '.or' 'university' '.or' 'college',
	phrase_name2 'studying' './' 'classes' './' 'degree' './' 'what' 'she' 'will' 'be' 'studying' '.or' 'taking';
Topic -> french_topic "french"
	with phrase_name '.opt' 'quebec' 'french' './' 'learning' '.or' 'speaking' '.opt' 'quebec' 'french';
Topic -> feminism_topic "feminism"
	with phrase_name '.opt' 'her' '.opt' 'radical' 'feminism' './' 'feminism' 'in' 'montreal' '.or' 'montréal' './' '.opt' 'her' 'feminist' 'fight' '.or' 'commitment' './' 'patriarchy';

! music and art

Topic -> guitar_topic
	with name 'guitar' 'instrument',
	phrase_name 'Jane^s' '.or' 'her' '.name' './' 'playing' '.opt' 'her' '.name';
Topic -> album_topic
	with name 'album' 'ep' 'lp' 'cd' 'record',
	phrase_name '.opt' 'her' '.opt' 'upcoming' '.name' './' 'recording' '.opt(' 'her' '.or' 'an' '.)' '.name' './' 'art';
Topic -> song_topic
	with name 'song' 'tune',
	phrase_name '.opt(' 'her' '.or' 'Jane^s' '.)' '.opt' 'new' '.name';

! misc (objects around)

Topic -> forest_topic
	with name 'forest' 'trees' 'tree';
Topic -> hill_topic
	with name 'hill' 'slope';
Topic -> pot_topic
	with name 'pot' 'weed' 'grass' 'ganja' 'marijuana';
Topic -> chips_topic
	with name 'bag',
	!phrase_name chips.&phrase_name; ! dammit that doesn't work
	phrase_name '.opt(' '.name' 'of' '.)' '.opt(' 'old' 'dutch' '.)' '.opt(' 'sour' 'cream' '.opt' 'and' '.or' '&' 'onion' '.)' 'chips' './' 'old' 'dutch';

! my topics

Topic -> sfu_topic
	with phrase_name 'sfu' '.opt' 'college' '.or' 'university' '.or' 'school' './' 'simon' 'fraser' '.or' 'frazer' '.opt' 'university' '.or' 'college' '.or' 'school',
	phrase_name2 'my' '.or' 'your' 'university' '.or' 'college' '.or' 'school';



! NPC object


Object jane "Jane" thewoods
	with description "You look at her, and it makes you smile. She looks back and smiles too. You're both thinking the same thing: how good it feels right now, and how you wish this summer would never end.",
	name 'Jane',
	parse_name ComplicatedParsing,
	phrase_name '.opt(' 'your' '.or' 'my' '.)' 'best' 'friend' '.or' 'buddy' '.or' 'mate',

	before [; Search: "Why would you do that? Keep your hands to yourself.";
	],

	topic_leaving 0,
	topic_sister 0,
	topic_us 0,
	topic_montreal 0,
	topic_music 0,
	life [;
		Ask: switch(second) {
			! leaving
			herfeelings_topic: self.topic_leaving++; print "~So... how do... How do you feel?~^~Fine?~^~I mean... about leaving and stuff~^~Oh.~ She sits there quietly for a while.^~I dunno, I felt like asking, because...~^~No, yeah, it's okay. I mean, thanks.~ She sighs heavily. ~I dunno. I mean, I'm excited, sure. But at the same time... like why can't I stay? Like, I'm going to have to leave everything behind, right? Family, you, friends, the city I grew up in, and all that... Is it worth it? I mean, it is... It's just...~^~Right~^~It's just a huge change, and it's hard. And the closer it gets, the worse it's gonna be~^~Right, yeah~ You sit there, quietly, for a moment.^"; w8(); "~It sucks, and it doesn't suck, at the same time~^~Yeah.~ Another pause. ~Well, if you need to talk, you know...~^~Yeah. Sure, yeah. Hey, thanks~^~Sure. And in the meantime, let's enjoy this summer?~^~Yup, definitely. It's gonna be a good one~^~Hehe. Yeah, I think so too :)~";
			leavingfamily_topic: self.topic_leaving++; "~How are your parents?~^She shrugs. ~Fine, I think. I dunno. I think it's hard for them, but they haven't talked too much about it~^~That's good I guess~^~Yeah... I dunno. I don't know why, but I think it's gonna be worse when my sister's gone~^~Ah, yeah. Yeah, maybe~^She fiddles with her hair, and doesn't say more.";
			leavingbc_topic: self.topic_montreal++; self.topic_leaving++; "~Isn't it gonna be weird, to like not be living in Vancouver anymore?~^~Yeah, it's true. I'll miss all the cool shit happening here~^~Yeah. And it's not like you can come back visit all the time...~^~I know... It's a bummer :/~^~Yeah. Anyway...~";
			departure_topic: self.topic_leaving++; "~Which day exactly are you leaving?~^~Uh, August 21st I think~^~Cool. We'll have to do something before you leave~^~Yeah, that'd be cool! We should plan a party or something~^~Definitely~";
			comingback_topic: self.topic_leaving++; "~Do you know when you'll be back?~^She shrugs. ~I don't know, Christmas probably? I dunno~ She looks a bit uncomfortable.^~Cool~, you say, but not much more. 'No worries'? 'Awesome'? 'Sounds good'? 'Can't wait'? You don't know which to say. Then probably none of them is fine.";

			! her fight with her sister
			sister_topic: self.topic_sister++; print "~So, how did your sister not say anything? I mean~^~UGH I KNOW right?~^~Yeah, but she's not usually the quiet type or whatever right?~^~Yeah, I know right? That's why it just *kills* me, really! That's why I needed to get out, you know. I can deal with having to tolerate an asshole, and I might get over her terrible taste in men, but... The fact that she just stood there and said nothing, that's it. That hurts~^~Yeah :/ I don't know, maybe she was as shocked as you? Like, couldn't believe that was happening and just let him talk for too long?~^~Yeah. I don't know, maybe. I don't know, cause like the whole time she was just, like, standing there, smiling weakly, looking at me and not at him! Like, as if she agreed! As if she thought too that I was just this terrible fucking --~^~Aw no, don't you start saying stuff like that!~^~But what if it's true!~^~No, I'm sure she doesn't think that!~^She fumes quietly for a bit. "; w8(); "And then she says: ~You know what I think it really is?~^~What?~^~Patriarchy~^~... like? Oh, like, she can't stand up to a man?~^~Yeah! Like, no, you just don't interrupt or contradict a man, you just stand there and wait politely and don't address it!~^~Yeah I don't know, maybe...~^~It makes sense! Like, she doesn't get why I talk about, like, radical feminism, and stuff, and we've had so many arguments about it...~^~Yeah, but that doesn't mean... Ah, I don't know. It's possible, I guess, I don't know her enough~^~Yeah, well, I think it's right~";
			fiance_topic: self.topic_sister++; "~Didn't your sister's fiancé also say something, like, last time you saw them?~^~Ugh, yeah. Ugh. Thanks for reminding me~^~Haha oops, sorry~^~Yeah, I remember. I guess I shouldn't be surprised then~^~Well, I dunno. He did cross the line this time, like, harder~^~Yeah no definitely, last time was just like listening to him talking politics at the dinner table, which was already... Ugh, I hate those kinds of guys~^~Haha, like, what, the Conservatives?~^~Yeah, I mean, the guys who think they know everything because they talk about money all the time! Like, ugh, of course you would think that Art has no value, when you spend your life selling buildings for obscene amounts of money!~^~Yeah, like, society would be so much better without it right?~^~Yeah! Like, yeah, sure, in your world, studying arts contributes nothing, but it only allows me to see, to feel, to live! Sorry!~^~Yeah... yeah. Like putting a price tag on meaning.~^~Yeah! ... yeah! Hey, that's deep~^~Haha. Thanks?~^~No, I mean... I mean it! That's... good one, good one~^~:)~";
			fight_topic: self.topic_sister++; "~Are you still fuming over it?~^~Ugh. I don't know. It's definitely better with the quiet and the pot @@94@@94~^~Haha yeah, it's pretty chill~^~It's just... I don't know. I'm mad at my sister, mostly. But you know. I'll figure it out I guess~ she says while shaking her head slightly.";


			! us
			summer_topic: self.topic_us++; "~Any plans for the summer?~^~Not really, no. Maybe go somewhere with my parents for a week, but not even sure right now. You?~^You shrug. ~No, nothing. My Dad's gonna work, I think~^~Ah. Sucks~^~Whatever~, you shrug, trying to act casual. ~I'm gonna try to get a part-time job somewhere, but I don't really know where. I don't know. I really don't feel like it~^~Yeah, that sucks. Well, in any case, we'll make time to hang out?~^~For sure :D I want that more than getting a job :p might be why I'm so not motivated to look for one~^~Haha yeah I bet @@94@@94~";
			us_topic: self.topic_us++; "Ah, this is a tough question. You struggle to find the words for a few minutes.^~Do you really... I mean... We're gonna stay... yknow...~^You think you see in her eyes that she's as scared as you. But she says, with a confident voice: ~We're gonna keep in touch? Yeah! Of course! Why wouldn't we?~^~I don't know, it's just... far away, right?~^~Yeah, sure, I guess, but like, it's only three hours of time difference! Like, nothing!~^~I guess, yeah, it's pretty convenient if we want to, like, call each other...~^~Yeah! It's gonna be fine, I'm sure. We always talk for hours, and we'll have even more to talk about :)~^~Haha yeah, that sounds good :)~";
			missingher_topic: self.topic_us++; "~You know I'm gonna miss you, right? Like, you have no idea~^~I knooooow duude, I'm gonna miss you too!~^~I hope we're gonna have a freakin awesome summer :D~^~Yeah me too, it's gonna be great! Lots of music and greasy food and pot and movies? :D~^~Aww yess :D~";
			missingyou_topic: self.topic_us++; print "You feel nostalgic, and for once, decide to let your insecurities show. ~I'm...~ you start. ~I'm scared.~^~What?~^~Like... Are you gonna forget about me, you know?~^"; if (self.topic_us==1) {print "She seems startled -- but after all, it kind of came from out of nowhere, I guess. ";} "She turns to you, and she tries to find to words. ~I know... Me too. But you know, I try not to think of it. Like, we've spent so much time together, I just feel like... there's no way it'll be for nothing, right? We're gonna make sure we call each other, and we'll see each other sometimes and hang out and catch up, and it'll be fine, right?~^~Yeah... I just don't want us to drift apart~^~Me either. But we won't let that happen, ok?~^~Ok. Yeah~^Then, the silence -- but there's probably not much more to say. God, this sucks.";

			! going to montreal
			vagueuniversity_topic: <<Ask jane concordia_topic>>;
			concordia_topic: self.topic_montreal++; "~So, how do you feel about this Concordia University?~^~You know what, pretty good. I mean, Montreal sounds like such a... I dunno, like, a vibrant, and different, and exciting city -- and their campus is amazing apparently, and the classes I could take all sound so cool... I'm really gonna like it I think :D~^~Cool! Sounds good. You sound excited :)~^~Yeah well, I wouldn't be going there if I wasn't, right?~^~Haha I guess yeah~";
			campus_topic: self.topic_montreal++; "~So do you know if they have a good campus or what?~^~Ah man, ah, their campus! It's, like, entirely downtown, like in the heart of the city...~^~Really?!~^~Yeah! Sooooo cool, like, close to everything, the whole city to explore...~^~Man, that sounds really cool. Hey, I'll have to check that out ;)~^~Haha, any time :D~";
			montreal_topic: self.topic_montreal++; "~Have you ever been to Montreal?~^~Nope, never been further east than Saskatoon~ she replies. ~You?~^~When I was, like, 10. Apparently I hated it cause I couldn't read any of the signs -- I dunno, I just remember the theme park~^~Haha, nice~";
			french_topic: self.topic_montreal++; "~Are you gonna have to work on your French then?~^~Nah, I mean a bit, but not that much. Concordia is an English university, so I'll be fine~^~Yeah, but you'll be surrounded by French people in the city, right? I mean, it's basically expatriation~^~I guess yeah. Guess I should have worked a bit harder in French class :p~^~Haha, instead of sitting at the back of the class and chatting with your neighbour? :p~^~Yeah -- that damn neighbour~^~Lol u mad? :D~^~:D~";
			major_topic: self.topic_montreal++; "~Have you decided on a major yet?~^~Nah... I'll see :D~^~Lol @@94@@94~^~I dunno, something in Fine Arts where I can start a zine and write more songs for my album and like, get involved in stuff...~^~And smoke pot~^~YES smoke pot too~^~Lol what if you get there and they only have classes like 'The Wonders of Capitalism', and like, 'Old French Classical Music'...~^~Haha, yeah... 'Great Leaders of War'...~^~'Nike and Coke: Two Success Stories'~^~'Symbolism in Mötley Crüe'~^~Haha, yes!~^~Haha, well in that case I'll come back to Vancouver right away~^~Ok, promise? :p~^~Yeah, you got it :D~ You shake hands dramatically, then laugh.";
			visiting_topic: self.topic_montreal++; "~So... should I come visit you when you're there?~^~Man, that'd be sweet! Of course you should! :D~^~I could come for like a week, and like, crash on your couch, and eat poutine, and come to your concerts...~^~Ah, dude, yeah! That'd be amazing!! :D~^~Cool @@94@@94 We'll have to figure that out...~^~Yeah, sure!~^~Yeah~";

		! music and art and things she likes
			feminism_topic: self.topic_music++; self.topic_montreal++; "~Are they big on feminism in Montreal?~^She stares at you, dumbfounded, and you can't really tell why.^~What?~^~Dude, did you, like forget? The Polytechnique Massacre?~^~The what?~^~Dude! Seriously! It was a while ago, but still! A guy comes in the school and kills, like, 14 women, because of feminism?~^~Oh yeah, shit. Yeah, no, you're right. It was in Montréal though?~^~Yeah, totally! So you bet they had feminists then and they have some now, like, carrying on and fighting the good fight!~^~Wow. Yeah, no, I can see how this place is like, historic~^~You bet -- I'm definitely getting involved like the day I get there~";
			guitar_topic: self.topic_music++; "~Hey, will you help me one day on the guitar?~^~Oh yeah, we've been talking about it for ages. Shit, sorry :/~^~No, that's cool! It's just... let's not forget, right? I mean, let's do it this summer~^~Yeah, this summer for sure. Before I leave, definitely~^~Cool :) and I'll practice while you're gone and then we'll start a band :p~^~Haha, yeah sounds good ;)~";
			album_topic: self.topic_music++; "~So, are you still talking about doing an album?~^~Yeah! I mean... I want to, but it's hard~^~To write?~^~No, more like... I don't know, I have a lot of songs, but it's like I have a hard time finishing them, and like, actually being proud of them... you ever get that feeling?~^~Nah, I mean... I have ideas, but I don't start them. Like, I know if I start it I have to finish writing it till the end, or it drives me crazy, so I don't~^~Oh yeah?~^~Yeah! Not you?~^~No, it's like the opposite! Like, sometimes I get ideas and like, I HAVE to grab my guitar and spend like half an hour working out chords and stuff~^~But what if you don't have time to finish it?~^~I don't know, I don't care? I'm like 'meh', and I forget about it. I mean, that's how I know a song is good, if I want to come back to it~^~Huh. Interesting~^~Huh indeed~";
			song_topic: self.topic_music++; SingMeYourSong(); rtrue;

		! object-related
			forest_topic: if (self.topic_leaving || self.topic_montreal) {
					"~Do they have forests like that in Montreal?~^She laughs -- bitterly? ~Haha. You know they don't~^~Exactly! Psch. Montreal sucks, really~^~Hey, no trying to make me regret this. Not gonna happen~^She's right. ~Yeah. Sorry. :/~^She shrugs.";
					} else {
					"~Isn't this forest great?~^~Haha, er, sure?~^~I dunno, I just... Maybe I'm high, but I freakin love it. It's so massive, and dark, and it just surrounds you, like, who are you, human, how do you think you're great?~^~Yeah... yeah I guess it's pretty cool~";
					}
			hill_topic: "~So, you've come here before eh?~ you ask.^~Yeah, I must have, can't remember when now. But I thought of it when I was texting you, for some reason. It's pretty chill eh?~^~Yeah, it's cool :)~";
			pot_topic: "~Do you think we should smoke some more?~^~Nah~ she makes a face. ~I mean, I'm pretty high right now lol~^~Haha yeah me too~^~You can if you wanna tho~^~Yeah. Nah. I'm good~^";
			chips_topic: <<Take chips>>;

		! my topics
			sfu_topic: "~Do you know many people at SFU?~^~Me? No. My sister went there ages ago, but I don't know anyone there. Sorry~^~Nah it's fine. Just wondering~";
		}
		AskFor: switch(noun) {
			woodpot: <<Take woodpot>>;
			chips: <<Take chips>>;
		}
		Show, Give: switch(noun) {
			guitar: SingMeYourSong(); rtrue;
			}
		Kiss: "That'd be weird. It's not like that between the two of you.";
		Attack: "Chill. Starting a play fight doesn't seem like the thing you want to do at the moment.";

		Tell: switch(second) {
		! leaving

		! her fight with her sister

		! our relationship
			missingher_topic: <<Ask missingher_topic>>;

		! going to montreal

		! music

		! object-related
			forest_topic: "~I love the forest~^~Yeah, it's pretty rad. I'm glad we came here~^You smile. ~Yeah, me too~";
			hill_topic: "~Cool hill, man. Quiet, in the middle of nowhere, just like we like them~^~Haha yeah, it's pretty rad~";

		! my topics
			vagueuniversity_topic: <<Tell jane sfu_topic>>;
			sfu_topic: "~I think SFU's gonna be nice~^~Yeah?~^~Yeah. I mean, first, it's on a mountain, right? And like, it's not too big, and the classes sound interesting...~^~Yeah. Are you gonna get a room?~^~Not this year, no, I'll still be with him. But we'll see for the years after -- if I can find roommates, and maybe a job... We'll see~^~Yeah. Well, you're not too far away from home I guess. That's good~^~Yeah~";

		}

	],
	orders [;
		Sing: SingMeYourSong(); rtrue;
		Play, Take: if (noun == guitar) { SingMeYourSong(); rtrue; }
		Give: switch(noun) {
			chips: <<Take chips>>;
			pot: <<Take woodpot>>;
		}
	],
has animate proper female concealed;





!=================================================
! Routines

[ HerTexts str ;
  Afficher("                      ", NON_PROP);
  Afficher(" ", NON_PROP|INVERSE);
  Afficher(str, NON_PROP|INVERSE);
  Afficher(" ", NON_PROP|INVERSE);
];

[ MyTexts str ;
  Afficher(" ", NON_PROP|INVERSE);
  Afficher(str, NON_PROP|INVERSE);
  Afficher(" ", NON_PROP|INVERSE);
];

[ Intro ;

	print "^";
	HerTexts("Hey. U asleep?   "); print "^";
	HerTexts("                 "); print "^^";
	w8();

        MyTexts ("Nah. What's up?  "); print "^";
	MyTexts ("                 "); print "^^";
	w8();

        HerTexts("Wanna steal your "); print "^";
        HerTexts("dad's car? I need"); print "^";
        HerTexts("to go for a drive"); print "^";
	HerTexts("                 "); print "^^";
	w8();

        MyTexts ("Oh ya? Ok. He's  "); print "^";
        MyTexts ("not snoring yet  "); print "^";
        MyTexts ("tho.             "); print "^";
	MyTexts ("                 "); print "^^";
	w8();

        HerTexts("Ah k             "); print "^";
	HerTexts("                 "); print "^^";
	w8();

        MyTexts ("In an hour tho   "); print "^";
	MyTexts ("                 "); print "^^";
	w8();

        HerTexts("Sounds good :3   "); print "^";
	HerTexts("                 "); print "^^";
	w8();

        MyTexts ("Where to?        "); print "^";
	MyTexts ("                 "); print "^^";
	w8();

        HerTexts("I dunno... past  "); print "^";
        HerTexts("Coquitlam? I know"); print "^";
        HerTexts("a place          "); print "^";
	HerTexts("                 "); print "^^";
	w8();

        MyTexts ("Sounds good      "); print "^";
	MyTexts ("                 "); print "^^";
	w8();

        HerTexts("@@94_@@94              "); print "^";
	HerTexts("                 "); print "^^";
	w8();
        HerTexts("Thank you        "); print "^";
	HerTexts("                 "); print "^^";
	w8();

        MyTexts ("No problem       "); print "^";
	MyTexts ("                 "); print "^^";
	w8();
        MyTexts ("Stay tuned       "); print "^";
	MyTexts ("                 "); print "^^";
	w8();

	ClearScreen();

	print "^^Half an hour later, the old man goes to bed; you wait a few more minutes, until he starts snoring. When he's snoring, the way is clear; grab the keys from the table, and let's go pick Jane up.^";

	"";
];




[ SingMeYourSong ;
	print "~Hey, so... You wrote a song lately?~^~Yeah~, she says with a smile. ~It's... yknow. About graduating to being a cog~^~Haha. Like, totally not inspired by true events~^~Noooo, definitely not a song I wrote about myself or my fears or whatever^~Hehe yeah @@94@@94~^~I'm having trouble though. Like, I want to find something powerful, like, something that really means what I want to say, and that's like... you know... powerful~ She pauses for a second. ~Wanna help me? Like, say something to finish the line when I look at you?~^~Yeah, sure. Show me :D~^~K :D It's only the last two lines... Anyway~^^She grabs the guitar and strums a few chords.^~Ok, here we go~, and she starts singing, in her raw, quavering, beautiful voice:";
	FinalSong();
	rtrue;
];



[ Verse str;
	Afficher("  ", NON_PROP);
	Afficher(str, NON_PROP|INVERSE);
];


[ WhichIsMax a b c d e local1 local2;
   if (a>b) { local1 = a; } else { local1 = b; }
   if (c>d) { local2 = c; } else { local2 = d; }
   if (local1>local2) { local1 = local1; } else { local1 = local2;}
   if (e > local1) { return e; } else { return local1; }
];


[ FinalSong i ;
	print "^^";
	w8();
	Verse(" Countdown till you're eighteen, then it's over                     ^");
	Verse(" Here is your toga, now it's time to go                             ^");
	Verse(" Here is your adult life, a dull life                               ^");
	Verse(" Taxes spouse don't forget to call back home                        ^");

	Verse(" Welcome to the machine, you must now... ");
	w8();
	style underline;
	i = WhichIsMax(jane.topic_leaving, jane.topic_sister, jane.topic_us, jane.topic_montreal, jane.topic_music);
	if (i == jane.topic_leaving) { jane.topic_leaving = -1; Afficher("leave                      ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_sister)  { jane.topic_sister = -1;  Afficher("make money                 ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_us)      { jane.topic_us = -1;      Afficher("leave the ones you love    ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_montreal){ jane.topic_montreal = -1;Afficher("choose: comfort or calling ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_music)   { jane.topic_music = -1;   Afficher("fight, or be swallowed     ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	style roman;
	print "^";
	w8();

	Verse(" Don't look back, you'll soon forget... ");
	w8();
	style underline;
	i = WhichIsMax(jane.topic_leaving, jane.topic_sister, jane.topic_us, jane.topic_montreal, jane.topic_music);
	if (i == jane.topic_leaving) { jane.topic_leaving = -1; Afficher("where you came from         ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_sister)  { jane.topic_sister = -1;  Afficher("what truly matters          ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_us)      { jane.topic_us = -1;      Afficher("who your friend is          ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_montreal){ jane.topic_montreal = -1;Afficher("your own language           ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	if (i == jane.topic_music)   { jane.topic_music = -1;   Afficher("how to sing                 ",NON_PROP|INVERSE|ITALIQUE); i = -10; }
	style roman;
	print "^";
	KeyCharPrimitive();

	print "^She gazes out into the night as the last chord reverberates in the dark, a light smile on her face. ~That's good dude. Real good. Thanks.~^You both stay quiet. It feels right. And this moment, this very night, is the memory that never fades.^";

	KeyCharPrimitive();

	style underline;
	print "^[You have reached the end of ", (string) Story, ", by ", (string) PSEUDONYME, ". But would you like to talk with Jane a little longer?]^>"; style roman;
	if (YesOrNo()) {
		style underline; print "[Rewinding the scene...]^^"; style roman;
		jane.topic_leaving=0; jane.topic_sister=0; jane.topic_us=0; jane.topic_montreal=0; jane.topic_music=0;
		<<Look>>;
	}
	else { deadflag=3; }
];

[ Initialise;
	lookmode = 2;	! Mode verbeux
	inventory_style = ENGLISH_BIT+RECURSE_BIT+FULLINV_BIT;	! Inventaire décrit en une phrase
	player.description = "Eighteen, graduated high school last week, going to university in a few months, and no plans for the summer. Except hanging out with your best friend before she leaves for the other side of the country, I guess.";

	location = livingroom;
	UpdateMoney(YOUR_MONEY_DOLLARS,YOUR_MONEY_CENTS);
	move change to player;
	move cellphone to player;
	move license to player;
	Intro();

];

!=================================================
! Grammaire

[ BuckleSub;
	"You can't buckle that.";
];

[ CallSub;
	switch(location) {
		livingroom: "Better wait until we're outside, so you don't risk waking your Dad up.";
		insidecar: if (noun == janecar) {"That would be stupid, she's right next to you.";} else {"You don't really need to do that now.";}
		thewoods: if (noun == jane) {"That would be stupid, she's right next to you.";} else {"No signal here. Besides, you'd rather just enjoy this moment.";}
	}
];

[ ChillSub ;
	switch(location) {
		livingroom: if (carkeys in player) {"You breathe in, deeply. You have the car keys, and everything's fine.";} else {"You breathe in, deeply. You're sure the keys are somewhere in here.";}
		insidecar: "Alright, there's probably enough change here, and then Jane will go buy pot. You just need to look in all those places. It'll be fine.";
		thewoods: "On a mountain, smoking pot with your best friend. Awesome.";
	}
];

[ CountSub;
	if (self has pluralname) {"There's... I dunno, a few.";} else {"There's one. Kind of a stupid question.";}
];

[ DriveSub;
	switch(location) {
		livingroom: "You don't have the car yet.";
		insidecar: "Going in the mountains with a guitar and no pot sounds like a bummer.";
		thewoods: "Not yet. Let's enjoy that moment first.";
	}
];
[ DriveEastSub ;
	switch(location) {
		livingroom: "Coquitlam is indeed east -- but you need to get the car first.";
		insidecar: "Going in the mountains with a guitar and no pot sounds like a bummer.";
		thewoods: "You're fine where you are.";
	}
];
[ DriveHomeSub ;
	switch(location) {
		livingroom: "You are already home.";
		insidecar: "No, you're not giving up just yet -- you're sure there's more change around here.";
		thewoods: "Not yet -- you're feeling pretty good right now.";
	}
];

[ FlipSub;
	"You can't really flip that.";
];

[ HonkSub;
	if (location == insidecar) {
		if (noun) {
			if (noun == wheel) { <<Push wheel>>; }
			else { "You don't know how you could do that."; }
		} else { <<Push wheel>>; }
	} else { "You don't know how you could do that."; }
];

[ LookForSub;
	"Right here, isn't it?";
];

[ LiftSub;
	if (noun has animate) { "This doesn't seem like a good idea."; }
	"You find nothing of interest.";
];

[ PlaySub;
	"You can't really play that.";
];

[ PopOpenSub;
	"You can't really pop that open.";
];

[ SearchDownSub;
	switch(location) {
		livingroom: "You look around, but the keys are not on the floor. Maybe somewhere on the furniture?";
		insidecar: <<Search floormat>>;
	}
	<<Search d_obj>>;
];

[ SearchImpreciseSub ;
	switch(location) {
		livingroom: <<SearchDown>>;
		insidecar: <<Search car>>;
		thewoods: "You don't really need to search for anything.";
	}
];

[ SearchOnSub;
	if (noun == d_obj) { <<SearchDown>>; }
	<<Search second>>;
];

[ SmokeSub;
	"You can't really smoke that.";
];

[ TalkToSub;
	"You need to be more precise about what you want to say or ask.";
];

[ JustUnlockSub;
	"You don't really see how to do this.";
];

[ AboutSub;
	Afficher("You are playing ");
	Afficher(Story, ITALIQUE);
	Afficher(", by ");
	Afficher(PSEUDONYME);
	". This is a text adventure -- a game in which your protagonist can be controlled by typing short commands such as >EXAMINE TABLE, >OPEN FRONT DOOR or >ASK FRIEND ABOUT UNIVERSITY. You may find the verbs EXAMINE, SEARCH, OPEN, and ASK/TELL a character ABOUT a topic, to be useful in this adventure, but feel free to try many more.^^This game is an entrant to ShuffleComp Disc 2; it was inspired by the song ~Vacant Night Sky~ by Vancouver band Mecca Normal (https://www.youtube.com/watch?v=o9k6jffqDsg), although maybe more by the sound and the band than this song in particular. The author apologizes for any mistakes, bugs, weird phrasings, or anything that kept you from having a smooth experience, and is eager to hear your feedback.^^This game was betatested by Jacques Frechet and Doug Orleans, and Neil Butters and Juhana Leinonen -- thanks a lot to them for their very useful and detailed feedback!";
];

![ TestInstructionsSub;
!	"Hey tester!^
!	First, thanks so much for testing this game!! Hope you'll enjoy it!^^
!	Playing through the game probably takes about 20-30 minutes. Here's what I'd like to get from your reports:^- notes on grammar, spelling, weird sentences (English is not my first language, but it's ok)^- bug reports^- notes on your overall enjoyment of the piece, and if it works well!^- does the very last thing make sense from an UX point of view? i.e. is it clear enough what I'm expecting of the player, or should there be more cues?^^
!	If you want to test just the last sequence, you can type >ending^^
!	Caveat: a few things aren't there yet:^- all the conversation topics in the last sequence^- some effects on the text, maybe^^Thanks a lot, again!";
!];

![ TestEndingSub ;
!	EnoughMoney(); rtrue;
!];

Include "Grammar";

Verb 'buckle'
* noun				->Buckle;

Verb 'call' 'text'
* noun				->Call
* topic				->Call;

Verb 'chill' 'relax' 'chillax'
*				->Chill;

Verb 'count'
* noun				->Count;

Verb 'crash'
* 'in' noun			->Enter;

Verb 'drive'
*				->Drive
* 'east'			->DriveEast
* 'home'			->DriveHome;

Extend 'eat' first
* noun				->Eat;

Verb 'find'
* noun				->LookFor;

Verb 'flip'
* noun				->Flip
* noun 'open'			->Flip;

Verb 'grab'
* noun				->Take;

Verb 'honk'
*				->Honk
* noun				->Honk;

Extend 'leave' replace
*				->Exit;

[ d_obj_token;
	if (noun==d_obj) {rtrue;}
	rfalse;
];

Extend 'look' replace
    *                                           -> Look
    * 'at' noun                                 -> Examine
* 'inside'/'in'/'into'/'through'/'on' noun=d_obj_token ->SearchDown
    * 'inside'/'in'/'into'/'through'/'on' noun  -> Search
* 'under' noun=d_obj_token	->SearchDown
    * 'under' noun                              -> LookUnder
    * 'up' topic 'in' noun                      -> Consult
    * noun=ADirection                           -> Examine
    * 'to' noun=ADirection                      -> Examine
* 'for' noun			->LookFor
* 'for' noun 'on'/'in' noun	->SearchOn
* noun 'on'/'in' noun		->SearchOn;


Verb 'lift'
* noun				->Lift;

Verb 'pop'
* noun 'open'			->PopOpen
* 'open' noun			->PopOpen;

Verb 'play'
* noun				->Play;

Extend 'pull'
* noun 'back'			->Pull
* 'back' noun			->Pull;

Extend 'search' first
* 				->SearchImprecise
* noun=d_obj_token		->SearchDown;
Extend 'search'
* 'under' noun			->LookUnder
* 'for' noun			->LookFor
* 'for' noun 'on'/'in' noun	->SearchOn
* noun 'on'/'in' noun		->SearchOn;

Verb 'smoke'
* noun				->Smoke;

Verb 'talk'
* 'to' creature			->TalkTo
* 'to' creature 'about' topic	->Tell;

Extend 'unlock'
* noun				->JustUnlock;

Verb 'about'
*				->About;

!Verb 'test'
!*				->TestInstructions;

!Verb 'ending'
!*				->TestEnding;



! DM4 page 233 or Jesse Burneko's Info.h

[ TopicScope;
    switch(scope_stage)
    {
     1: rfalse;
     2: ScopeWithin(Topics);
	rtrue;
     3: "There is no reply.";
    }
];


Extend 'ask' first
    * creature 'about' scope = TopicScope -> Ask
    * creature scope = TopicScope -> Ask;

Extend 'tell' first
    * creature 'about' scope = TopicScope -> Tell
    * creature scope = TopicScope -> Tell;