A text based adventure engine written in Javascript.
Here's a very basic example, that is included in this Repositroy: https://dak0r.github.io/TextAdventureJS/example.html
A different project, that uses TextAdventureJS can be foundon my website: https://www.danielkorgel.com
See example.html
for a working minimal example.
// Defines where to write output
function witeLine(outputLine){
$("#outputArea").append(outputLine);
}
// Clears output area
function clearArea(){
$("#outputArea").val("");
}
// Init engine and load a game
var textAdv = new textAdventureEngine(witeLine, clearArea);
textAdv.loadDatabaseFromFile("game.TADB.json");
// Send Input to game
textAdv.input("look at cookie");
A Text Adventure Database (TADB) is JSON file which describes games that can run in the TextAdventureJS Engine.
.tadb.json
files can be validated using the JSON schema in this repo: textAdventureDatabase.schema.json
.
The schema contains also includes descriptions for the properties. I recommend using the JSON Schema Validator for this task.
Each game exists of objects
which are either in the players inventory or in locations
. The player can interact with object using verbs
.
Locations are basically groups of objects
.
The description text of a location soley exists of the objects which can be found in it. This means an empty location has no description. Thus a location should always have at least one object, at any given moment.
Verbs are commands that the user can type.
Each verb has a...
- a name
- list of synonyms (
words
) - a text that is shown, in case the verb can't be used with the object the user mentioned (
failure
)
E.G. if the user tries to 'open' an object, that can't be opened.
Everything that player can see or interact with is an object.
Each object has...
- a unique name
- a list of
words
that the player can type to refer to this object - an optional text that is added to the location description if the object is in the players current location or in his inventory (
locationDescription
) - a list of
actions
which describes theverbs
that can be used with this object.
each of these actions has...- a
text
that will be shown if the verb is used with this object - zero, one or more functions listed under
action
, which can be used to change the current location and its objects (see Functions) - a list of 'usableObjects' which is currently unused.
It is designed to implement usage of object with other objects.
- a
In almost every game there are scenarios where objects have to change their description texts or behaviors during gameplay. For example if you need a chest
which the player can open only once, after that it will be open.
In this case you have to create a second object chest_opened
, which has it's own description and verbs it can handle.
Now you can use the objectReplaceInLocation
function in chest
s open
action to replace chest
in the current location with chest_opened
.
To close the chest again, you can use objectReplaceInLocation
again in chest_opened
s close
action.
Functions can be used in actions to modify the current location or the plazers inventory.
objectRemoveFromLocation {objectId}
Removes the given object from the current location
objectAddToLocation {objectId}
Adds a given object to the current location
objectReplaceInLocation {objectIdToRemove} {objectIdToAdd}
Removes {objectIdToRemove}
and adds {objectIdToAdd}
. Shorthand for sequentially calling objectRemoveFromLocation
and objectAddToLocation
.
Useful if an object transitions into a different one like chest_closed
to chest_opened
.
gotoLocation {locationId}
Changes the current location to a different one
showLocationDescription
Automatically shows the current location description, as if the user typed 'look'
inventoryAdd {objectId}
Adds the item to users inventory. The user can have multiple items in his inventory, the location descriptions will be listed below each other.
inventoryRemove {objectId}
Removes the item from users inventory