!% $OMIT_UNUSED_ROUTINES=1
! -- % -~S

! The very first lines of the main source code file for a game can
! contain compiler options, like the two lines above. -~S disables
! strict error checking. This is otherwise used in z5 and z8 games by
! default. While useful for debugging, it adds ~10 KB to the story file
! size and it makes the game slower.
! $OMIT_UNUSED_ROUTINES=1 makes the compiler remove all routines which
! aren't used. This can save some space.

Constant Story      "Large Game";
Constant Headline   "^A game where packed routine and string addresses are > $8000.^";

! Uncomment ONE of the two following lines, to show either time or score/turns
! Leaving both commented out makes the library bigger.
!Constant STATUSLINE_TIME; Statusline time;
Constant STATUSLINE_SCORE; Statusline score;

! Comment out to keep track of score
! The value is what will be shown as the score on statusline in z3
!Constant NO_SCORE = 0;

! Customize the statusline in z5+ (will have no effect in z3)
!Constant OPTIONAL_SL_NO_SCORE;
!Constant OPTIONAL_SL_NO_MOVES;

Constant SACK_OBJECT = Bag;
Constant MAX_CARRIED = 3;

! Uncomment to add optional features to PunyInform
!Constant DEBUG;
!Constant DEBUG_PARSEANDPERFORM;
!Constant DEBUG_PARSEPATTERN;
!Constant DEBUG_PARSETOKEN;
!Constant DEBUG_PARSENOUNPHRASE;
!Constant DEBUG_GETNEXTNOUN;
!Constant DEBUG_SCOPE;
!Constant CUSTOM_ABBREVIATIONS;
!Constant CUSTOM_PLAYER_OBJECT = myPlayerObj;
!Constant OPTIONAL_NO_DARKNESS;
Constant OPTIONAL_ALLOW_WRITTEN_NUMBERS;
Constant OPTIONAL_EXTENDED_METAVERBS;
Constant OPTIONAL_EXTENDED_VERBSET;
Constant OPTIONAL_PRINT_SCENERY_CONTENTS;
Constant OPTIONAL_SCORED;
Constant OPTIONAL_FULL_SCORE; ! Comment out NO_SCORE when uncommenting this
Constant OPTIONAL_FULL_DIRECTIONS;
Constant OPTIONAL_SIMPLE_DOORS;
Constant OPTIONAL_SHIP_DIRECTIONS;
Constant OPTIONAL_GUESS_MISSING_NOUN;
!Constant OPTIONAL_MANUAL_SCOPE;
!Constant OPTIONAL_MANUAL_REACTIVE;
Constant OPTIONAL_ORDERED_TIMERS;
!Constant OPTIONAL_PROVIDE_UNDO;
Constant OPTIONAL_REACTIVE_PARSE_NAME;
!Constant RUNTIME_ERRORS = 0; ! 0, 1 or 2. 0 = smallest file, 2 = most info

! Define any library constants you need here, like MAX_SCORE, AMUSING_PROVIDED,
! MAX_CARRIED, SACK_OBJECT,  etc.

Constant INITIAL_LOCATION_VALUE = Library;

Include "globals.h";

! Define your own global variables here, if any

! Define the entry point routines you need here, like Amusing, DarkToDark etc.

! Uncomment to add PunyLib extensions
Include "ext_menu.h";
Constant FLAG_COUNT 16;
Include "ext_flags.h";
Include "ext_quote_box.h";
Include "ext_cheap_scenery.h";

Include "puny.h";

! Uncomment to add PunyLib extensions
Include "ext_waittime.h";

Array a1 --> 28000;

Object Library "Library"
	with
		description "You are in a library. Here be books and stuff.
			Exit is southeast.",
		se_to Kitchen,
		cheap_scenery
			'book' 'books' "Just ordinary books."
			1 'stuff' "Oh, just stuff you know.";

Object -> Candle "candle"
	with
		name 'candle',
	has light switchable on;

Object -> Box "box"
	with
		name 'box',
		inside_description "It feels so nice, standing in the box.",
	has static container openable enterable;

Class Ball
	with
		name 'ball';

Ball -> -> GreenBall "green ball"
	with
		name 'green';

Ball -> -> RedBall "red ball"
	with
		name 'red';

Object Kitchen "Kitchen"
	with
		description "You are in the kitchen. Exit is northwest.",
		nw_to Library;

Object -> Bag "bag"
	with
		name 'bag',
		description "Lovely.",
	has container open;

Ball -> YellowBall "yellow ball"
	with
		name 'yellow';

Object -> Knife "knife"
	with
		name 'knife';

Object -> Fork "fork"
	with
		name 'fork';

[Initialise;
	print "^^And so the story begins...^^";
	a1-->0 = 0; ! to avoid compiler warnings
];
