This jam is now over. It ran from 2019-10-04 07:00:00 to 2019-11-01 17:45:00. View results
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.
The game to be developed in the English language using Adventuron Classroom (desktop browser required for editor).
Adventuron's documentation is available here.
Follow Adventuron here.
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:
(Donated by Mark Hardisty, thank you Mark)
(Donated by Stefan Vogt, thank you Stefan)
"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."
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 ; } }
No submissions match your filter