1
0
Fork 0
mirror of https://gitlab.com/Oreolek/salet.git synced 2024-05-17 08:28:28 +03:00
salet/game/story.js

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?"
});