|
- "use strict";
-
- /*jshint browser: true*/
- /*jshint devel: true*/
-
- let NORTH = 0;
- let NORTH_EAST = 1;
- let EAST = 2;
- let SOUTH_EAST = 3;
- let SOUTH = 4;
- let SOUTH_WEST = 5;
- let WEST = 6;
- let NORTH_WEST = 7;
-
- let locations = {};
-
- let locationsSrc = [
- {
- "name": "Bedroom",
- "desc": "A bedroom. It has a bed in it.",
- "conn": [
- {
- "name": "Bathroom",
- "dir": EAST,
- "desc": "You step into your bathroom."
- },
- {
- "name": "Living Room",
- "dir": NORTH,
- "desc": "You walk into the living room."
- }
- ],
- "objs": [
- Bed,
- Journal
- ],
- },
- {
- "name": "Bathroom",
- "desc": "Your modest bathroom.",
- "conn": [
- {
- "name": "Bedroom",
- "dir": WEST,
- "desc": "You walk back into your bedroom."
- }
- ],
- "objs": [
- Toilet
- ]
- },
- {
- "name": "Living Room",
- "desc": "A bare living room",
- "conn": [
- {
- "name": "Lobby",
- "dir": NORTH,
- "desc": "You leave your apartment and head to the lobby."
- },
- {
- "name": "Bedroom",
- "dir": SOUTH,
- "desc": "You walk into your bedroom."
- }
- ],
- "objs": [
- TV,
- Phone
- ]
- },
- {
- "name": "North Street",
- "desc": "It's a street",
- "conn": [
- {
- "name": "Alley",
- "dir": WEST,
- "desc": "You wander into the dark alley"
- },
- {
- "name": "Lobby",
- "dir": EAST,
- "desc": "You step into your apartment's lobby"
- },
- {
- "name": "Crossroads",
- "dir": SOUTH,
- "desc": "You walk south"
- },
- {
- "name": "DANGER ZONE",
- "dir": NORTH,
- "desc": "You walk into the DANGER ZONE"
- }
- ],
- "objs": [
- Nerd
- ]
- },
- {
- "name": "Lobby",
- "desc": "The modest lobby of your modest apartment complex",
- "conn": [
- {
- "name": "North Street",
- "dir": WEST,
- "desc": "You walk out into the street"
- },
- {
- "name": "Living Room",
- "dir": SOUTH,
- "desc": "You walk back into your apartment"
- }
- ],
- "objs": [
- VendingMachine
- ]
- },
- {
- "name": "Alley",
- "desc": "A suspicious alley",
- "conn": [
- {
- "name": "North Street",
- "dir": EAST,
- "desc": "You hurry back into the open street."
- },
- {
- "name": "Seedy Bar",
- "dir": NORTH,
- "desc": "You step into the bar."
- }
- ]
- },
- {
- "name": "Seedy Bar",
- "desc": "God this place is seedy",
- "conn": [
- {
- "name": "Alley",
- "dir": SOUTH,
- "desc": "You step out of the bar"
- }
- ],
- "objs": [
-
- ]
- },
- {
- "name": "Crossroads",
- "desc": "Where the roads cross",
- "conn": [
- {
- "name": "North Street",
- "dir": NORTH,
- "desc": "You walk north"
- },
- {
- "name": "South Street",
- "dir": SOUTH,
- "desc": "You walk south"
- },
- {
- "name": "Corner Mart",
- "dir": SOUTH_EAST,
- "desc": "You walk into the convenience store"
- }
- ]
- },
- {
- "name": "South Street",
- "desc": "This street is in the south",
- "conn": [
- {
- "name": "Crossroads",
- "dir": NORTH,
- "desc": "You walk to the crossroads"
- },
- {
- "name": "Nature Trail",
- "dir": SOUTH,
- "desc": "You head out into the woods"
- }
- ]
- },
- {
- "name": "Nature Trail",
- "desc": "A winding train cutting through a thick forest",
- "conn": [
- {
- "name": "South Street",
- "dir": NORTH,
- "desc": "You return to town."
- },
- {
- "name": "Wilderness",
- "dir": SOUTH,
- "desc": "You wander into the wilderness...and immediately get lost."
- }
- ],
- "objs": [
- NatureTrailExercise,
- GetaObj
- ]
- },
- {
- "name": "Wilderness",
- "desc": "Pretty spooky",
- "conn": [
-
- ],
- "objs": [
- WildernessExplore
- ]
- },
- {
- "name": "DANGER ZONE",
- "desc": "THE DANGER ZONE",
- "conn": [
- {
- "name": "North Street",
- "dir": SOUTH,
- "desc": "You walk out of the DANGER ZONE"
- },
- {
- "name": "SUPER DANGER ZONE",
- "dir": NORTH,
- "desc": "Getting eaten is fun!",
- }
- ],
- "hooks": [
- function() {
- startCombat(new Anthro());
- }
- ]
- },
- {
- "name": "SUPER DANGER ZONE",
- "desc": "Very dangerous",
- "conn": [
- {
- "name": "DANGER ZONE",
- "dir": SOUTH,
- "desc": "You hurriedly leave the SUPER DANGER ZONE"
- }
- ],
- "hooks": [
- function() {
- startCombat(new Fen());
- }
- ]
- },
- {
- "name": "Corner Mart",
- "desc": "A convenience store with a variety of snacks and supplies",
- "conn": [
- {
- "name": "Crossroads",
- "dir": NORTH_WEST,
- "desc": "You leave the store."
- }
- ]
- }
- ];
-
- function Location(name="Nowhere",desc="Nada") {
- this.name = name;
- this.description = desc;
- this.exits = [null,null,null,null,null,null,null,null];
- this.exitDescs = [null,null,null,null,null,null,null,null];
- this.objects = [];
- this.hooks = [];
- this.conditions = [];
-
- this.visit = function() {
- this.hooks.forEach(function (x) {
- x();
- });
- };
- }
-
- function opposite(direction) {
- return (direction + 4) % 8;
- }
-
- function connectLocations(loc1,loc2,dir,desc) {
- if (loc1.exits[dir] != null) {
- alert(loc1.name + " is already connected to " + loc1.exits[dir].name);
- return;
- } else {
- if (dir >= 0 && dir <= 7) {
- loc1.exits[dir] = loc2;
- loc1.exitDescs[dir] = desc;
- } else {
- alert("Invalid direction given when linking " + loc1.name + " and " + loc2.name + ": " + dir);
- }
- }
- }
-
- function createWorld() {
- for (let i = 0; i < locationsSrc.length; i++) {
- let src = locationsSrc[i];
- let location = new Location(src.name,src.desc);
- locations[src.name] = location;
- if (src.objs != undefined) {
- src.objs.forEach(function (obj) {
- location.objects.push(new obj());
- });
- }
- if (src.hooks != undefined) {
- src.hooks.forEach(function (hook) {
- location.hooks.push(hook);
- });
- }
- if (src.conditions != undefined) {
- src.conditions.forEach(function (cond) {
- location.conditions.push(cond);
- });
- }
-
- }
-
- for (let i = 0; i < locationsSrc.length; i++) {
- let src = locationsSrc[i];
- let from = locations[src.name];
- for (let j = 0; j < src.conn.length; j++) {
- let to = locations[src.conn[j].name];
- connectLocations(from, to, src.conn[j].dir, src.conn[j].desc);
- }
- }
-
- return locations;
- }
|