mirror of
https://gitlab.com/Oreolek/salet.git
synced 2024-05-17 08:28:28 +03:00
241 lines
6.7 KiB
JavaScript
241 lines
6.7 KiB
JavaScript
import jQuery from 'jquery';
|
|
import dialogue from './_dialogue';
|
|
import phrase from './_phrase';
|
|
|
|
salet.game_id = "your-game-id-here";
|
|
|
|
salet.game_version = "1.6";
|
|
|
|
jQuery(document).on('ready', function($) {
|
|
window.addEventListener('popstate', function(event) {
|
|
return salet.goBack();
|
|
});
|
|
$("#night").on("click", function() {
|
|
var styles;
|
|
if (window.night) {
|
|
styles = {
|
|
"-webkit-filter": "",
|
|
"filter": "",
|
|
"background-color": ""
|
|
};
|
|
$("body").css(styles);
|
|
$("#night").removeClass("active");
|
|
return window.night = false;
|
|
} else {
|
|
styles = {
|
|
"-webkit-filter": "invert(1)hue-rotate(180deg)",
|
|
"filter": "invert(1)hue-rotate(180deg)",
|
|
"background-color": "#000"
|
|
};
|
|
$("body").css(styles);
|
|
$("#night").addClass("active");
|
|
return window.night = true;
|
|
}
|
|
});
|
|
return salet.beginGame();
|
|
});
|
|
|
|
|
|
/*
|
|
Element helpers. There is no real need to build monsters like a().id("hello")
|
|
because you won't use them as is. It does not make sense in context, the
|
|
author has Markdown and all utilities to *forget* about the markup.
|
|
*/
|
|
|
|
const way_to = function(content, ref) {
|
|
return "<a href='" + ref + "' class='way'>" + content + "</a>";
|
|
};
|
|
|
|
const textlink = function(content, ref) {
|
|
return "<a href='./_writer_" + ref + "' class='once'>" + content + "</a>";
|
|
};
|
|
|
|
const actlink = function(content, ref) {
|
|
return "<a href='./" + ref + "' class='once'>" + content + "</a>";
|
|
};
|
|
|
|
room("start", {
|
|
enter: function() {
|
|
return salet.character.bought_lamp = false;
|
|
},
|
|
dsc: " ",
|
|
choices: "#start"
|
|
});
|
|
|
|
room("inventory", {
|
|
canSave: false,
|
|
enter: function() {
|
|
return jQuery("#inventory").hide();
|
|
},
|
|
exit: function() {
|
|
return jQuery("#inventory").show();
|
|
},
|
|
dsc: function() {
|
|
var i, len, ref1, text, thing;
|
|
if (salet.character.inventory.length === 0) {
|
|
text = "You are carrying nothing.";
|
|
} else {
|
|
text = "You are carrying:\n\n";
|
|
ref1 = salet.character.inventory;
|
|
for (i = 0, len = ref1.length; i < len; i++) {
|
|
thing = ref1[i];
|
|
text += "* " + (salet.character.listinv(thing.name)) + "\n";
|
|
}
|
|
}
|
|
return text + "\n\n" + "<div class=\"center\"><a href=\"./exit\"><button class=\"btn btn-lg btn-outline-primary\">Go back</button></a></div>";
|
|
},
|
|
actions: {
|
|
exit: function() {
|
|
return salet.goBack();
|
|
}
|
|
}
|
|
});
|
|
|
|
room("world", {
|
|
tags: ["start"],
|
|
optionText: "Enter the world",
|
|
ways: ["plaza"],
|
|
dsc: "### Rhinestone Room\n\nYou're in a large room carved inside a giant milky rock mountain.\nThe floor and walls are littered with signs and signatures of the previous visitors.",
|
|
units: [
|
|
unit("well", {
|
|
dsc: "A steep narrow {{well}} proceeds upward.",
|
|
act: "There is only one passage out. See the „Other rooms“ block popped up? Click it."
|
|
})
|
|
]
|
|
});
|
|
|
|
room("plaza", {
|
|
title: function(from) {
|
|
if (from === "world") {
|
|
return "Upwards";
|
|
} else {
|
|
return "Town plaza";
|
|
}
|
|
},
|
|
cycle: ["quirky", "distinct", "kooky", "crazy", "quaint"],
|
|
ways: ["shop"],
|
|
before: function(from) {
|
|
if (from === 'world') {
|
|
return "You climb up the well and come out to a central plaza of a " + (salet.view.cycleLink("quaint")) + " little town.\nA plaque nearby says it's the town of *Innsmouth,* wherever that is.";
|
|
} else {
|
|
return "You quickly find the central plaza.";
|
|
}
|
|
},
|
|
units: [
|
|
unit("policeman", {
|
|
dsc: "There is a policeman nearby. You could ask him {{for directions.}}",
|
|
act: function() {
|
|
var base;
|
|
if (salet.character.has_mark != null) {
|
|
return "You already talked to him, no need to bug the man twice.";
|
|
}
|
|
if ((base = salet.character).has_mark == null) {
|
|
base.has_mark = true;
|
|
}
|
|
salet.getRoom("lair");
|
|
return "“Here, let me mark it on your map.”";
|
|
}
|
|
}), unit("people", {
|
|
dsc: "There are {{people shouting}} nearby.",
|
|
act: 'Just some weirdos shouting "Viva la Cthulhu!". Typical.'
|
|
})
|
|
],
|
|
writers: {
|
|
cyclewriter: function() {
|
|
var cycleIndex, response, responses;
|
|
responses = this.cycle;
|
|
if (typeof responses === "function") {
|
|
responses = responses();
|
|
}
|
|
cycleIndex = window.localStorage.getItem("cycleIndex");
|
|
if (cycleIndex == null) {
|
|
cycleIndex = 0;
|
|
}
|
|
response = responses[cycleIndex];
|
|
cycleIndex++;
|
|
if (cycleIndex === responses.length) {
|
|
cycleIndex = 0;
|
|
}
|
|
window.localStorage.setItem("cycleIndex", cycleIndex);
|
|
return salet.view.cycleLink(response);
|
|
}
|
|
}
|
|
});
|
|
|
|
room("shop", {
|
|
title: "The Shop",
|
|
ways: ["plaza", "shop-inside", "lair"],
|
|
dsc: "Being the only shop in town, this trendy establishment did not need a name.\nIt's an open question why it had one, especially because its name was \"Hung Crossing\".\n\nYou are standing in front of a picturesque sign. It's cold here."
|
|
});
|
|
|
|
room("lair", {
|
|
title: "The Lair",
|
|
before: "Finding The Lair is easy. Leaving it is impossible. Your game ends here.",
|
|
dsc: "The Lair of Yog-Sothoth is a very *n'gai* cave, full of *buggs-shoggogs* and *n'ghaa ng'aa*.",
|
|
ways: ["shop"],
|
|
units: [
|
|
unit("bugg", {
|
|
dsc: "You see a particularly beautiful slimy {{bugg.}}",
|
|
takeable: false,
|
|
display: "bugg",
|
|
act: (function(_this) {
|
|
return function() {
|
|
salet.rooms[salet.current].drop("bugg");
|
|
return "You eat the bugg mass. Delicious and raw. Perhaps it's a good lair to live in.";
|
|
};
|
|
})(this)
|
|
})
|
|
]
|
|
});
|
|
|
|
phrase("Yes", "merchant", "Yes.");
|
|
|
|
dialogue("No", "merchant", "merchant", "No.");
|
|
|
|
room("sell-lamp", {
|
|
ways: ["shop"],
|
|
tags: ["merchant"],
|
|
choices: ["#merchant"],
|
|
optionText: "May I buy this lamp?",
|
|
title: "Talking with merchant",
|
|
canView: function() {
|
|
return salet.character.has("lamp") && salet.character.bought_lamp === false;
|
|
},
|
|
enter: function() {
|
|
return salet.character.bought_lamp = true;
|
|
},
|
|
dsc: "\"That'll be 30 pieces of your time.\"\n\nYou quickly pay the price and take the lamp as a rightful owner."
|
|
});
|
|
|
|
room("shop-inside", {
|
|
ways: ["shop"],
|
|
tags: ["merchant"],
|
|
optionText: "End the conversation",
|
|
title: "Inside the Shop",
|
|
dsc: "The insides are painted pastel white, honouring The Great Milk Spill of 1985.",
|
|
units: [
|
|
unit("merchant", {
|
|
dsc: "A {{merchant}} eyes you warily.",
|
|
takeable: false,
|
|
act: (function(_this) {
|
|
return function() {
|
|
salet.processClick("merchdialogue");
|
|
return "";
|
|
};
|
|
})(this)
|
|
})
|
|
]
|
|
});
|
|
|
|
const lamp = unit("lamp", {
|
|
display: "lamp",
|
|
takeable: true
|
|
});
|
|
|
|
lamp.put("shop-inside");
|
|
|
|
room("merchdialogue", {
|
|
choices: "#merchant",
|
|
dsc: "Nice day, isn't it?"
|
|
});
|