This jam is now over. It ran from 2019-10-04 07:00:00 to 2019-11-01 17:45:00. View results

Adventuron Halloween Jam 2019, #textadventurejam

Use Adventuron Classroom to make your own spooky illustrated text adventure game using Adventuron Classroom.

Adapt Spooky Adventure to fit your own purpose (source provided) - your game must be different (see rules below).

Your game can be in whatever style you wish (it does not have to be pixel art style). Your game can use modern fonts and typography (and graphics) if you wish.

Adventuron Classroom is fully documented, complete with tutorial.




Rules - General

The game to be developed in the English language using Adventuron Classroom (desktop browser required for editor).

  • Your game should involve at least 4 new puzzles.
  • Games should be limited to VERB NOUN responses.
  • The game must contain a graveyard, a skeleton, a bell, and a spooky building.
  • The win game condition is whatever you want it to be.
  • The story must be completely different to the Spooky Adventure, but puzzles may be re-used (re-used puzzles are not counted in the minimum puzzle count rule).
  • A minimum of two thirds of locations require a graphic, even a bad graphic. Every graphic should be unique per location but mirroring, shifting and palette swapping can be used. Whatever makes life easier. Mazes may re-use location graphics. Location graphics are suggested to be 128 x 40 pixels, or 256 x 80 pixels, half height teletext, or whatever resolution you prefer if not using pixel art style graphics. Pixel art style is strongly recommended for this jam but this style suggestion is optional.  The original graphic assets should not be used. The game requires a loading screen. The loading screen resolution is up to the author (256 x 192 is recommended if using pixel art style).
  • A (optional) custom font may be used (see ZX Origins by Damien Guard - https://damieng.com/typography/zx-origins/ )
  • The game can be scary if you wish, but if the game has anything that would be disturbing for young children, then a warning screen should exist at the start of the game (sample code will be posted for this). Even if the game has a warning, in this jam assume your game will be played by older children. Spooky, not realistically gory, psychologically disturbing, or horrific. 
  • You must own the rights or be licensed to use assets used in your game, and fully credit the source of those assets.
  • The game should have nothing racist, sexist, or otherwise offensive in it. No curse words, or responses to curse words. Assume your game will be played by children.

Rules - Graphics


  • No gore.
  • No digitised images of violence.
  • No adult images.

Adventuron Documentation

Adventuron's documentation is available here.

Links

Social Media

Follow Adventuron here.

Prize Draw

This jam features a small prize draw for qualified entrants (see terms and conditions here).

The prize draw is for qualified entry, not placement.

If you have a prize and wish to help support this jam, please email info@adventuron.io 

Current prizes include:

2 x "Computer Adventures : The Secret Art", a book by Gil Williamson


1 x Any Issue of "The Classic Adventurer" Bookazine by Mark Hardisty.

(Donated by Mark Hardisty, thank you Mark)

NOTE: The picture shows three issues of THE CLASSIC ADVENTURER, the prize is ONE issue only

NOTE: The picture shows three issues of THE CLASSIC ADVENTURER, the prize is ONE issue only

1 x Hibernated 1: This Place is Death - Collector's Edition - PC 5.25" Diskette

(Donated by Stefan Vogt, thank you Stefan)

1 x Usborne's World of the Unknown: Ghosts (2019 reprint)


"First published in 1977, this cult classic has been reissued for a new generation of ghost-hunters. This book is for anyone who has shivered at shadowy figures in the dark, heard strange sounds in the night, or felt the presence of a mysterious 'something' from the unknown."


Sample Source Code

Also see the source code posted here for cave of magic.

Below is the source code for a MINI version of spooky adventure. This mini version removes the tutorial, and several puzzles. The only puzzles that remain are entering the house, entering the secret room, and the two ending triggers. The graphics and ModeSeven font assets have been removed.

Spooky Adventure is copyright of Adventuron Software limited, but you can use this code for informational purposes.


## (1) Please watch the following video to 
##     demonstrate the editor features of Adventuron
##     ... https://www.youtube.com/watch?v=zbC_bSysbrA
## (2) To get rid of the tutorial side panel
##     Select MENU / Display Side Documentation
## USEFUL SHORTCUTS
## Click the header in Adventuron Classroom to quicklyccc
## navigate to different code sections
## Press Control + SPACE (or ALT + SPACE) to access code completion
##        ... see youtube video for demonstration of this feature.
## Press Control + F (to find code)
## Press Control + F x2 (to search and replace)
## Press Control + S to save the code and execute.
## Click Menu / Compile to export game as HTML.
######################################
# Code Start                         #
######################################
## Set the Start location to be lakeside
start_at         = graveyard
start_theme      = my_theme
## Set the initial (or loading) screen to be
## the graphic asset with id 'loading_screen'
//loading_screen   = haunted_house
######################################
# locations                          #
######################################
locations {
   graveyard   : location "You are in a <SPOOKY GRAVEYARD<10>>." graphic = "graveyard_skeleton";
   porch       : location "You are on a <PORCH<11>>. You see no way around the house." graphic = "porch_1" ;
   hallway     : location "You are standing in an <EERIE HALLWAY<11>>." graphic = "hallway_animated" ;
   library     : location "You are in the <LIBRARY<12>>." graphic = "library_1";
   secret_room : location "You are in a <SECRET ROOM<9>>.\nLight shines in from the <LIBRARY<12>> to the west." graphic = "secret_1" ;
}
######################################
# connections                        #
######################################
connections {
   ## The graveyard connects northwards to the porch
   ## The porch connects northwards to the hallway
   from, direction, to = [
      graveyard, west,  porch, 
      porch,     north, hallway
      hallway,   east,  library, 
      library,   east,  secret_room, 
   ]
}
######################################
# Objects / Scenery                  #
######################################
objects {
   // Graveyard
   gravestone        : scenery "a gravestone"  start_at = "graveyard" ;
   heavy_stone       : scenery "a heavy stone";
   skeleton          : scenery "a cloaked skeleton" start_at = "graveyard" ;
   house             : scenery "an old house";
   parchment         : object  "an old parchment" ;
   // Porch
   bell              : scenery "a large bell"  start_at = "porch" examine_message="A large bell hanging by the door." ;
   closed_door       : scenery "a closed door" start_at = "porch";
   open_door         : scenery "an open door";
   
   // Library
   bookshelf         : scenery "a bookshelf" start_at = "library" ;
   secret_passage    : scenery "a secret passage leading east" ;
   painting          : scenery "a painting" start_at = "library" examine_message="The eyes seem to be following you." ;
   fireplace         : scenery "a fireplace" start_at = "library" examine_message="The warmth of the fire soothes you, but who lit it?";
   // Hallway
   grandfather_clock : scenery "a grandfather clock" start_at = "hallway" examine_message = "Tick tock!" ;
   // Secret Room
   broomstick        : object  "a broomstick" examine_message="About 6 feet long." start_at = "secret_room" ;
}
######################################
#  Vocabulary                        #
######################################
vocabulary {
   : verb { aliases = [move, push, slide, pull] }
   : verb { aliases = [insert, place, put] }      // For placing the strange book in the bookshelf
   : noun { aliases = [grave, gravestone, plot] }
   : noun { aliases = [bookshelf, shelf] }
   : noun { aliases = [clock, grandfather] }
   : noun { aliases = [broomstick, broom, stick] }
}
######################################
#  Booleans                          #
######################################
booleans {
   ## A boolean is something that will store a true or false fact.
   ## In this case, we store the fact that at the start of the game
   ## it is misty
   has_spoken_skeleton         : boolean "false" ;
   tmp                         : boolean "false" ;
}
######################################
# barriers                           #
######################################
barriers {
   block_secret_room : block {
      location               = secret_room
      block_when_not_exists  = secret_passage
      show_blocked_exit      = false
   }
   
   block_hallway : block_path {
      from                   = porch
      to                     = hallway
      message                = A door stands in your way
      block_when_not_exists  = open_door
   }
}
######################################
# on_startup                         #
######################################
## The on_startup hook runs at the start of the game, one time per game.
on_startup {
   : print_graphic "warn" width = "30" align = "center" ;
   
   : print "^c^<!!! WARNING !!!<10>>\n^l^THIS GAME FEATURES SCARY THEMES AND IS NOT SUITABLE FOR YOUNG CHILDREN OR PLAYERS WITH A NERVOUS DISPOSITION." ;
   
   : ask_bool {
      question   = What do you want to do?
      yes_answer = Proceed
      no_answer  = Quit
      var        = tmp
   }
   
   : if (tmp) {
      ## Clear the content of the screen
      : clear_screen;
      ## Print the graphic with id 'warn' stretched to occupy 30% of horizontal
      : print_graphic "warn" width = "30" align = "center" ;
      ## ^c^ Tells adventuron to centre the paragraph horizontally.
      : print "^c^<!!! LAST CHANCE WARNING !!!<10>>\n^n^The game features <SCARY<10>> themes and is not suitable for young children or players with a nervous disposition." ;
      ## Waits for the player to press a button
      ## click the mouse, or touch the screen.
      : press_any_key ;
      : clear_screen;
      
      : print_graphic "broomstick" width = "80" align = "center" ;
      : print "^c^<-- SPOOKY ADVENTURE MINI --<14>>\n<Written by Chris Ainsley<12>>\n<Graphics by Steve Horsley<11>>\n<Font by Andrew Bulhak<10>>\n<Made With Adventuron Classroom<9>>" ;
      
      ## Can alter content for mobile platforms
      : if (is_mobile()) {
         : print "^c^<TOUCH SCREEN to begin.<7>>" ;
      }
      : else {
         : print "^c^<Press ENTER to begin.<7>>" ;
      }
      
      ## Some beeps for mood
      : beep millis = "400"  pitch = "-4" ; ## Pitch 0 = middle C.
      : beep millis = "400"  pitch = "-10" ;
      : beep millis = "600"  pitch = "-16" ;
      
      ## Will probably combine press_any_key and clear into single command in
      ## Later release
      : press_any_key ; 
      : clear_screen;
      
      : print_graphic "haunted_house" width = "60" align = "center" ;
      : print "^c^An <EVIL WITCH<10>> has been abducting children in the night." ;
      
      : press_any_key ;
      : clear_screen;
      
      : print_graphic "haunted_house" width = "60" align = "center" ;
      : print "^c^You set off on the long journey to her <MANOR<11>>." ;
      
      : press_any_key ; 
      : clear_screen;
      
      : print_graphic "haunted_house" width = "60" align = "center" ;
      : print "^c^On the first night of your journey, your companions <DISAPPEAR<12>>." ;
      
      : press_any_key ; 
      : clear_screen;
      
      : print_graphic "haunted_house" width = "60" align = "center" ;
      : print "^c^Gathering your courage, you decide to continue -  <ALONE<13>>.";
      
      : press_any_key ; 
      : clear_screen;
      
      : print_graphic "haunted_house" width = "60" align = "center" ;
      : print "^c^The following evening, a <MIST<9>> surrounds you.";
      
      : press_any_key ; 
      : clear_screen;
      
      : print_graphic "haunted_house" width = "60" align = "center" ;
      : print "^c^<SHE<10>> knows you are coming";
      
      : press_any_key ; 
      : clear_screen;
      
      : print_graphic "haunted_house" width = "60" align = "center" ;
      : print "^c^<TRUST NO-ONE.<9>>";
      
      : press_any_key ;
   }
   : else {
      : print "Best to just navigate away then ... " ;
      : end_game ;
   }
}
######################################
# on_command                         #
######################################
## The on_command block is used to handle player text input
on_command {
   
   #################################
   ## Graveyard
   #################################
   
   : if (is_at "graveyard") {
   
      : match "read gravestone;examine gravestone"  {
         : print "<\"Here lies Rose. Loved eternally.\"<12>>" ;
         : press_any_key ;
         : redescribe;
      }
      : match "talk skeleton; examine skeleton"  {
         : if (is_present "skeleton") {
            : set_true "has_spoken_skeleton" ;
            : clear_screen;
            : print_graphic "graveyard_skeleton" ;
            : stagger "<\"The witch has cast a spell on this realm.\"<11>> says the skeleton.\n<\"To defeat her, you must find the source of her power and bring it to me.\"<11>>" ;
            : press_any_key ;
            : redescribe;
         }
      }
   }
   : match "give _"  {
      : match "give broomstick"  {
         : if (is_carried "broomstick" && is_beside "skeleton") {
            : gosub "bad_ending" ;
         }
      }
   }
   
   : if_examine "house"  {
      : clear_screen;
      : print_graphic "haunted_house" align = "center" width = "80" ;
      : print "^c^The house lies to the west." ;
      
      : press_any_key ;
      : redescribe;
   }
   #################################
   ## Porch
   #################################
   : if (is_at "porch") {
      : match "ring bell; pull bell; use bell; use chain;pull chain"  {
         : beep millis = "200"  pitch = "0" ;
         : beep millis = "600"  pitch = "-6" ;
         
         : if (is_present "open_door") {
            : print "You ring the bell." ;
         }
         : else {
            : print "You ring the bell and the door creaks open." ;
            : swap o1 = "closed_door"  o2 = "open_door" ;
            : set_graphic target = "porch" graphic = "porch_2";
            
            : press_any_key ;
            : redescribe;
         }
      }
      
      : match "close door"  {
         : if (is_present "open_door") {
            : gosub "unreveal_secret" ;
            : swap o1 = "closed_door"  o2 = "open_door" ;
            : set_graphic target = "porch" graphic = "porch_1";
            : redescribe;
         }
      }
      
      : match "open door"  {
         : if (is_present "closed_door") {
            : print "It won't budge." ;
         }
      }
   }
   #################################
   ## Library
   #################################
   
   : if (is_at "library") {
      
      : if_examine "bookshelf"  {
         : print "You see the strange wooden book, sitting atop of a metal hinge amongst a huge selection of books." ;   
      }
      : match "pull book; twist book;push book; lift book; press book"  {
         : if (is_exists "secret_passage") {
            : clear_screen;
            : print_graphic "library_2" ;
            : gosub "unreveal_secret" ;
            : destroy "secret_passage" ;
            : print "The secret passage closes." ;
            : set_graphic target = "library" graphic = "library_1" ;
            : redescribe;
         }
         : else {
            : clear_screen;
            : print_graphic "library_1" ;
            : gosub "reveal_secret" ;
            : create "secret_passage" ;
            : print "A secret passage opens up!" ;
            : set_graphic target = "library" graphic = "library_2" ;
            
            : press_any_key ;
            : redescribe;
         }
      }
      : match "get book"      { : print "The strange book is lodged in place." ; }
      : match "move painting" { : print "It's firmly attached to the wall." ; }
      : match "move shelf"    { : print "It's far too heavy to move." ; }
      : match "move chair"    { : print "You move the chair to a different position in the room. Not the best use of your time." ; }
      : match "burn _"        { : print "Setting fire to things is not on the path." ; }
   }
   #################################
   ## Hidden Room
   #################################
   : match "get broomstick"  {
      ## This is meant to trigger a bit of fear, but actually
      ## there is no penalty for taking the broomstick in this
      ## simple game
      : if (is_beside "broomstick") {
         : clear_screen;
         : print_graphic "secret_1" ;
         : ask_bool {
            question   = Are you sure you want to take the broomstick?
            yes_answer = Yes, I'm sure.
            no_answer  = Erm, no.
            var        = tmp
         }
         : if (tmp) {
            : set_graphic target = "secret_room" graphic = "secret_2";
            : pocket "broomstick" ;
         }
         : else {
            : print "You decide not to take the broomstick." ;
            : press_any_key ;
         }
         : redescribe;
      }
   }
   : match "drop broomstick"  {
      : if (is_carried "broomstick") {
         : set_graphic  target = "secret_room" graphic = "secret_1"  ;
         : drop "broomstick" ;
         : redescribe;
      }
   }
   #################################
   ## All Location Handlers
   #################################
   : match "examine book"  {
      : if (is_at "library") {
         : print "It appears to be made of wood and is attached to the shelf by a piece of metal." ;
      }
   }
   ## Good Ending
   : match "snap broomstick;break broomstick;destroy broomstick"  {
      : if (is_carried "broomstick") {
         : gosub "good_ending" ;
      }
   }
}
######################################
#  On Describe                       #
######################################
on_describe {
   ## Put code here that is printed when a location is described.
   : if (is_at "graveyard") {
      ## Always display this whether tutorial mode or not
      : print "Tip: Type <HELP<11>> to see a list of commands." ;
   }
}
######################################
# on_tick                            #
######################################
## The on_tick code is executed after a command has been dealt with.
on_tick {
   ## --------------------------
   ## Graveyard
   ## --------------------------
   : if (is_at "graveyard") {
      : if (is_present "skeleton" && has_spoken_skeleton == false) {
         : execute_one_at_random {
            : print "<In the distance you hear a howl.<10>>" ;
            : print "<You are afraid.<10>>" ;
            : print "<Your heart is racing, you are terrified.<10>>" ;
         }
      }
   }
   ## --------------------------
   ## Secret Room
   ## --------------------------
   : if (is_present "broomstick" && is_at "graveyard" == false) {
      // Just to make the player feel a little bit uneasy
      // and forget about the warning not to trust anyone
      // The cackling won't occur in the graveyard due to the 'twist'.
      : print "<You hear a cackling in the distance.<9>>" ;
   }
}
######################################
#  Subroutines                       #
######################################
subroutines {
   ## Add your subroutines here, could be useful for commonly
   ## used beep commands, or decorative game over screen
   
   reveal_secret : subroutine {
      : beep pitch = "0" millis = "100"  ;
      : beep pitch = "1" millis = "100"  ;
      : beep pitch = "2" millis = "100"  ;
      : beep pitch = "3" millis = "100"  ;
      : beep pitch = "4" millis = "100"  ;
      : beep pitch = "5" millis = "100"  ;
      : beep pitch = "6" millis = "100"  ;
      : beep pitch = "7" millis = "100"  ;
      : beep pitch = "8" millis = "100"  ;
      : beep pitch = "9" millis = "100"  ;
      : beep pitch = "10" millis = "100"  ;
   }
   
   unreveal_secret : subroutine {
      : beep millis = "100"  pitch = "-6" ;
      : beep millis = "100"  pitch = "0" ;
   }
   bad_ending : subroutine {
      : clear_screen;
      
      : print_graphic "graveyard_skeleton" ;
      : beep millis = "100"  pitch = "0" ;
      : beep millis = "100"  pitch = "2" ;
      : beep millis = "100"  pitch = "4" ;
      : beep millis = "100"  pitch = "6" ;
      : beep millis = "100"  pitch = "8" ;
      : beep millis = "100"  pitch = "10" ;
      
      : stagger "\"You have done well brave adventurer.\" says the <SKELETON<11>>.\n\"Without her <BROOM<12>>, the <WITCH<10>> is powerless to hold you here against your will...\"" ;
      : press_any_key ;
      : clear_screen;
      : print_graphic "graveyard_skeleton" ;
      : print "\"... so thank you young adventurer ... " ;
      : press_any_key ;
      : clear_screen;
      : print_graphic "witch" align = "center" width = "60" ;
      : print ".. for returning it to <ME<11>> ...\" says the <EVIL WITCH<10>>." ;
      : beep millis = "200"  pitch = "-12" ;
      : beep millis = "1000"  pitch = "-24" ;
      : press_any_key ;
      : clear_screen;
      : print_graphic "witch" align = "center" width = "60" ;
      : print "^c^<BE CAREFUL WHO YOU TRUST.<9>>" ;
      : print "^c^<DARKNESS WILL NOW LAST FOREVER.<10>>" ;
      : end_game ;
   }
   
   good_ending : subroutine {
      : clear_screen;
      : print_graphic "haunted_house" width = "66" align = "center" ;
      : beep millis = "100"  pitch = "0" ;
      : beep millis = "200"  pitch = "8" ;
      : print "You put the <BROOMSTICK<11>> over your knee and split it clean in two." ;
      
      : press_any_key ;
      : clear_screen;
      
      : print_graphic "haunted_house" width = "66" align = "center" ;
      : print "You have destroyed the source of the evil witch's power." ;
      
      : press_any_key ;
      : clear_screen;
      
      : print_graphic "haunted_house" width = "66" align = "center" ;
      : print "Upon returning to your village you find all the children have been returned to their families, not quite the same as before, but safe." ;
      
      : press_any_key ;
      : clear_screen;
      
      : print_graphic "haunted_house" width = "66" align = "center" ;
      : print "^c^<CONGRATULATIONS ADVENTURER !<12>>" ;
      : print "^c^<YOU HAVE WON !<14>>" ;
      : end_game ;
   }
}
######################################
# game_information                   #
######################################
## This information is used when packaging the html file
## and for determining the key to use for save slots in 
## the browser (the uuid stops save game collisions)
game_information {
   game_name                    = Mini Spooky Adventure
   game_version                 = 1.0.1
   game_shortname               = MiniSpook
   #uuid                        = Please set this
   written_by                   = Chris Ainsley
   year                         = 2019
   copyright_message            = (C) Adventuron Software Limited
   short_synopsis               = Defeat The Evil Witch
}
######################################
#  Themes                            #
######################################
themes {
   my_theme : theme {
   
      ## H = Header
      ## G = Graphics
      ## D = Description
      ## X = Exit List
      ## O = Object (or entity) List
      layout = H G D O X
      ##font           = userfont_modeseven
      
      lister_objects {
         list_type         = verbose
         list_type_mobile  = verbose
      }
      
      system_messages {
         object_list_header_verbose = You see\s
      }
      
      screen {
         ## The space between paragraphs in terms of font height
         ## 0.5 = half the height of the current font
         paragraph_spacing_multiplier = 0.5
         widescreen_horz_ratio        = 0.7
         border_mode_vertical_percent = 1
         border_mode_aspect_ratio     = 1.2
         snap_mode                    = free
      }
   }
}
######################################
#  Graphics                          #
######################################
assets {
   ## Graphics are base64 encoded, and graphics that
   ## share an id with a location are automatically 
   ## associated with that location (and shown if G
   ## is included in the theme / settings / layout)
   
   ## NOTE : Use the Menu button, and select Import, to import
   ##        more graphics. Graphics should ideally be either
   ##        128 pixels by 40 or 256 x 80 pixels (for the jam)
   ##        PNG Images can be created with any tool, but pixel art 
   ##        editors work best, such as https://lospec.com , choose 
   ##        a consistent palette for your game.
   ##        Adventuron will be getting an integrated pixel art editor
   ##        in a later release.
   ##        PNGs can be compressed quite nicely using https://squoosh.app/
   
   ## Placeholder graphics are listed here, but graphics
   ## cam be replaced with textual base64 encoded representations of 
   ## PNG files.
   
   graphics {
      haunted_house      : base64_png ;
      graveyard_skeleton : base64_png ;
      hallway_animated   : base64_png ;
      porch_1            : base64_png ;
      porch_2            : base64_png ;
      library_1          : base64_png ;
      library_2          : base64_png ;
      secret_1           : base64_png ;
      secret_2           : base64_png ;
      witch              : base64_png ;
      warn               : base64_gif ;
      broomstick         : base64_png ;
   }
   
}

Submissions(6)

All submissions
·
Browser playable (5)

No submissions match your filter

A Horror Short-Story
Adventure
You wake up and you have two problems: you don't remember anything and you're a skeleton.
Interactive Fiction
Play in browser
There's been a murder and you're suspect #1. Can you figure out who did it?
Interactive Fiction
Play in browser
Help bring a missing witch back for her birthday party on Halloween.
Interactive Fiction
Play in browser
After two years of study, you are ready to start your witch's apprenticeship.
Interactive Fiction
Play in browser
An unexpected Hallowe'en adventure!
Interactive Fiction
Play in browser