{{init:wearing_shoes=false}}

# ROOM The Night Before Christmas :intro:

It is the night before Christmas. All is quiet in your house. You've got all the family coming tomorrow and you need to get everything ready. Thankfully you aren't doing the cooking or supplying the food. All you need to do is to get some [[presents wrapped]].

[[Your Sitting Room|Get Ready for Christmas]]

> This is a small example game written for the [Interactive Story Maker](https://interactivestorymaker.com).

## ACTION presents wrapped :hidden:

You've got your sister and her two children coming round.

# INVENTORY Inventory

## OBJECT An empty roll of sticky tape

This isn't going to be much use for wrapping presents.

# ROOM Your Sitting Room

A cosy space with two armchairs and a sofa by [[the fire]].

Doors lead to [[the entrance hall]] and [[the dining room]].

## OBJECT The Fire :hidden:fixed:

A small log fire.

{{if:fire_lit}}
The fire is providing a surprising amount of warmth and light. Just what you want for Christmas.
{{else}}
It is currently without any wood.
{{endif}}

### ACTION Light Fire

{{if:carrying('wood')}}
{{destroy:wood}}
{{set:fire_lit=true}}
{{destroy:light fire}}
{{else}}
You can't light a fire which doesn't have any fuel.
{{endif}}

# ROOM The Entrance Hall

An unimpressive space. A [[pile of newspapers]] sits by the door waiting to be taken out for recycling.

From here you can go into [[the kitchen]] or [[your sitting room]]. There is also [[the cloakroom]].

[[Upstairs landing|Go upstairs]].

## OBJECT pile of newspapers :fixed:hidden:surface:

The top newspaper dates from July.

### OBJECT a book about dinosaurs :hidden:

An A-Z of dinosaurs.

{{if:not viewed}}
This might make a good present.
{{set:viewed=true}}
{{endif}}

### ACTION Look through newspapers

{{if:hidden('a book about dinosaurs')}}
{{reveal:a book about dinosaurs}}
You've found a book!
{{else}}
You don't find anything else.
{{endif}}

# ROOM The kitchen

You love cooking, so this is a very well equipped kitchen.

Go back to [[the entrance hall]].

# ROOM The Cloakroom

Not sure this should be classed as a room, although the sales information for your house certainly did.

Go back into [[the entrance hall]].

## OBJECT your shoes

Slightly battered brown brogues.

### ACTION Put on

{{if:playerin('the dining room')}}
You put on your shoes.
{{set:wearing_shoes=true}}
{{destroy}}
{{else}}
You've got presents to find, wrap and a house to make merry! Now isn't the time to go anywhere!
{{endif}}

# ROOM The Dining Room

This is a room used for eating and your many hobbies.

Behind you is a door to [[your sitting room]], and patio doors are the way into [[go into the garden|the garden]].

## ACTION go into the garden :hidden:

{{if:wearing_shoes}}
You slide open the patio doors and step into the garden.
{{go:the upper garden}}
{{else}}
It looks very wet outside and you only have your socks on.
{{endif}}

# ROOM The Upper Garden

The grass is covered with a light sprinkling of snow. Very few of your plants have survived the start of winter.

[[the dining room|Go back into the dining room]] or [[the lower garden|explore the rest of the garden]].

# ROOM The Lower Garden

Here is where you've dumped bits of broken fencing, paving slabs and plant pots. More mess is to be expected in [[the toolshed]].

Go back to [[the upper garden]].

# ROOM The Toolshed

You've squeezed yourself into your toolshed. Rusted garden trowels, forks, spades hang from the walls.

The small windows are covered with old spider webs which give you a blurry view of [[the lower garden]].

## OBJECT a football

A barely used football.

{{if:not viewed}}
This might make a good present.
{{set:viewed=true}}
{{endif}}

# ROOM Upstairs Landing

From the upstairs landing you can go into:

- [[Your bedroom]]
- [[The guest room]]
- [[The study]]
- [[The bathroom]]

Go back [[the entrance hall|down the stairs]].

# ROOM Your bedroom

A cosy room with a large [[double bed]] and [[a wardrobe]].

[[Upstairs landing|Leave your bedroom]].

## OBJECT double bed :fixed:hidden:

The bed is made up with Star Wars bedding.

### ACTION Get into bed

Now isn't the time for sleeping - you've got presents to find and wrap!

## OBJECT a wardrobe :fixed:hidden:

A large wardrobe stuffed with clothes.

# ROOM The guest room

An unmade futon lies on the floor. Plenty of [[wrapping paper]] sits in the corner.

[[Upstairs landing|Exit the guest room]].

## OBJECT wrapping paper :fixed:hidden:

The wrapping paper has cats on, and nothing at all related to Christmas. However, it's all you've got.

### ACTION wrap presents

{{if:not carrying('roll of sticky tape')}}
You need some sticky tape if you are going to wrap any presents.
{{stop}}
{{endif}}
{{if:carrying('a book about dinosaurs') and carrying('bath salts') and carrying('a football')}}
You wrap all of the presents. Congratulations!
{{go:the end}}
{{else}}
You haven't got all of the presents yet - your sister and her two children and coming tomorrow.
{{endif}}

# ROOM The study

You work from home and this is the most used room in the house. There is a [[desk]], chair and computer.

[[Upstairs landing|Go back onto the landing]].

## OBJECT desk :fixed:hidden:

A large solid oak desk.

### OBJECT roll of sticky tape

There is lots left on the roll!

# ROOM The bathroom

A surprisingly large room for your house. There is [[a bath]], [[a toilet]], [[a sink]] and [[a cabinet]] afixed to the wall.

[[Upstairs landing|Return to the landing]].

## OBJECT a bath :fixed:hidden:

A large victorian tub, complete with antique taps.

### ACTION Get into the bath

You can have a bath once you've found and wrapped all the presents.

## OBJECT a toilet :fixed:hidden:

One of those fancy toilets with a soft close lid.

## OBJECT a sink :fixed:hidden:

A bog standard sink, only just big enough to brush your teeth.

## OBJECT a cabinet :fixed:hidden:

A mirrored cabinet.

### OBJECT bath salts

These look unopened.

{{if:not viewed}}
These might make a good present.
{{set:viewed=true}}
{{endif}}

### OBJECT toothpaste

A tube that is rolled up as tight as possible.

# ROOM The End

Thank you for completing this little interactive story. Have a great Christmas!

[Read more about Interactive Story Maker](https://docs.interactivestorymaker.com/)

[See this game script](https://paste.lol/mken/ism_christmas_script.md)
