! testing normal scoring
!
#Iftrue (#version_number == 8);
Constant USEINFORM;
#Endif;

Constant Story      "Parser test";
Constant Headline   "^A parser test suite for PunyInform.^";
Serial "200827";
Constant INITIAL_LOCATION_VALUE = LitRoom;

! Uncomment to show time instead of score/turns
!Statusline time;

!Constant DEBUG;
!Constant DEBUG_PARSEANDPERFORM;
!Constant DEBUG_PARSEPATTERN;
!Constant DEBUG_PARSETOKEN;
!Constant DEBUG_CHECKNOUN;
!Constant DEBUG_GETNEXTNOUN;
!Constant DEBUG_SCOPE;

! Uncomment to add optional features to PunyLib
!Constant DEBUG;
!Constant CUSTOM_ABBREVIATIONS;
!Constant OPTIONAL_ALLOW_WRITTEN_NUMBERS;
Constant OPTIONAL_EXTENDED_METAVERBS;
!Constant OPTIONAL_EXTENDED_VERBSET;
!Constant OPTIONAL_FULL_SCORE;
!Constant OPTIONAL_FULL_DIRECTIONS;
!Constant OPTIONAL_GUESS_MISSING_NOUN;
!Constant OPTIONAL_MANUAL_SCOPE;
!Constant RUNTIME_ERRORS = 0;

#IfDef OPTIONAL_FULL_SCORE;
Constant MAX_SCORE = 7;
Constant OBJECT_SCORE = 1;
Array task_scores -> 3 0; ! inform doens't like array of length 1
Constant TASKS_PROVIDED;
Constant NUMBER_TASKS = 1;
#IfNot;
Constant MAX_SCORE = 4;
#EndIf;

![ PrintTaskName task_number;
!  switch (task_number) {
!      0: "opening the box";
!  }
!];


#Ifdef USEINFORM;
Include "Parser";
Include "VerbLib";
#IfNot;
Include "globals.h";
#EndIf;

#Ifndef USEINFORM;
Include "puny.h";
#EndIf;

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

#Ifdef USEINFORM;
Include "Grammar";
#Endif;

Object LitRoom "Lit Room"
	with
		description [;
			print "You are in a brightly lit room.^";
		],
	has light;

Object -> Box "box"
    with
        name 'box',
        after [;
        LetGo:
            --score;
            "Yay, got rid of ", (the) noun, "!";
        Open:
#IfDef OPTIONAL_FULL_SCORE;
            Achieved(0); ! opening the box is an achievement
#EndIf;
        Receive:
            ++score;
            ! win if you put two things in the box
            if(score >= MAX_SCORE) deadflag = 2;
        ],
    has openable static container;

Object -> Poison "poison"
    with
        name 'poison',
        before [;
        Eat:
            deadflag = true;
            "AAAargh!";
        ];

Object -> Point "one point"
    with
        name 'one' 'point';

Object -> Toy "toy"
    with
        name 'toy';

Object -> Torch "torch"
    with
        name 'torch';

[Initialise;
	print "^^The testsuite is open for business!^^";
#IfDef USEINFORM;
    location=INITIAL_LOCATION_VALUE;;
#EndIf;
];


