!% -~S
!% $OMIT_UNUSED_ROUTINES=1

Constant Story      "Show Contents";
Constant Headline   "^A PunyInform code sample.^";

Constant STATUSLINE_SCORE; Statusline score;

Constant INITIAL_LOCATION_VALUE = WhiteRoom;

Include "globals.h";

Include "puny.h";

Object WhiteRoom "White Room"
	with
		description "You are in a large white room.",
	has light;

Object -> Table "table"
	with
		name 'table',
		description [;
			print "It's a nice sturdy table.";
			self.show_contents();
			@new_line;
		],
		initial [;
			print "There is a beautiful table in the middle of the room.";
			! If the player is on the table, PunyInform will show the contents
			! automatically. Otherwise, we do it!
			if(~~IndirectlyContains(self, player)) self.show_contents();
			@new_line;
		],
		! show_contents is an individual property - it could have been called
		! anything. We just picked a descriptive name.
		show_contents [;
			! PrintContents returns true if it printed anything, false if not.
			if(PrintContents(" On the table you can see ", self)) print ".";
		],
	has static supporter enterable;


Object -> -> plate "plate"
	with
		name 'plate'
	has supporter;

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

[Initialise;
	print "^^A supporter or container in PunyInform is normally included in the
		room description, and if there is something in/on it, this is also
		printed. However, if you give your supporter or container a paragraph of
		its own using any of the properties initial, when_open, when_closed
		or describe, the contents of the object will not be printed. This game
		shows how to make the object print its contents in the room description.
		Also, it shows how to make the object print its contents when the
		player examines the object.^^";
];
