mirror of https://github.com/Oreolek/flower.git
Initial commit
This commit is contained in:
commit
7ada2bb9cc
|
@ -0,0 +1,3 @@
|
||||||
|
all:
|
||||||
|
lessc style.less >style.css
|
||||||
|
coffee -c js/game.coffee
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Муравейник
|
||||||
|
Короткая игра на Undum 2. Пока что больше proof of concept.
|
|
@ -0,0 +1,77 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Цветок</title>
|
||||||
|
<link media="screen" rel="stylesheet" href="style.css">
|
||||||
|
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||||
|
<link href='http://fonts.googleapis.com/css?family=Marmelad|Russo+One&subset=latin,cyrillic' rel='stylesheet' type='text/css'>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="page">
|
||||||
|
<div id="mid_panel">
|
||||||
|
<div id="buffer"></div>
|
||||||
|
<div id="title">
|
||||||
|
<div class="label">
|
||||||
|
<h1>Цветок</h1>
|
||||||
|
<noscript><p class="noscript_message">Эта игра требует включённого Javascript.</p></noscript>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="content_wrapper">
|
||||||
|
<div id="content">
|
||||||
|
</div>
|
||||||
|
<a name="end_of_content"></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="legal">
|
||||||
|
<p>Автор игры — <a href="https://oreolek.ru">Oreolek.</a> Для игры требуется активное подключение к сети Интернет.</p>
|
||||||
|
<p>Содержимое, дизайн выпущены под лицензией CC-BY-SA. Игра использует код и дизайн Scio, а также движок <a href="undum.com">Undum.</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> <!-- End of div.page -->
|
||||||
|
|
||||||
|
<!-- Holds UI elements that will be cloned and placed in the main
|
||||||
|
page. This block itself is always hidden. -->
|
||||||
|
<div id="ui_library">
|
||||||
|
<div id="quality" class="quality">
|
||||||
|
<span class="name" data-attr="name"></span>
|
||||||
|
<span class="value" data-attr="value"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="quality_group" class="quality_group">
|
||||||
|
<h2 data-attr="title"></h2>
|
||||||
|
<div class="qualities_in_group">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="progress_bar" class="progress_bar">
|
||||||
|
<span class="name" data-attr="name"></span>
|
||||||
|
<span class="value" data-attr="value"></span>
|
||||||
|
<div class="progress_bar_track">
|
||||||
|
<div class="progress_bar_color" data-attr="width">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span class="left_label" data-attr="left_label"></span>
|
||||||
|
<span class="right_label" data-attr="right_label"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr id="turn_separator">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="content_library">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/showdown/0.3.1/showdown.js"></script>
|
||||||
|
<script type="text/javascript" src="https://cdn.jsdelivr.net/hyphenator/4.2.0/hyphenator.min.js"></script>
|
||||||
|
<script type="text/javascript" src="https://cdn.jsdelivr.net/hyphenator/4.2.0/patterns/ru.js"></script>
|
||||||
|
<script type="text/javascript" src="js/undum.js"></script>
|
||||||
|
<script type="text/javascript" src="js/game.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
Hyphenator.config({
|
||||||
|
minwordlength : 4
|
||||||
|
});
|
||||||
|
Hyphenator.run();
|
||||||
|
$('#buffer').css("margin", ($(window).height()-$('#title').outerHeight())/2+"px" );
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,71 @@
|
||||||
|
converter = new Showdown.converter()
|
||||||
|
undum.game.id = "7f7e611e-1276-11e4-beaf-afabc89d7876"
|
||||||
|
undum.game.version = "1.0"
|
||||||
|
|
||||||
|
undum.game.situations =
|
||||||
|
start: new undum.SimpleSituation(
|
||||||
|
converter.makeHtml("""
|
||||||
|
Солнечный день, горная деревня. Маленький мальчик по имени Вова собирает букет цветов для мамы.
|
||||||
|
"""),
|
||||||
|
{
|
||||||
|
choices: "#flowers",
|
||||||
|
optionText: "Какой цветок он добавит к букету?"
|
||||||
|
}
|
||||||
|
),
|
||||||
|
|
||||||
|
cornflower: new undum.SimpleSituation(
|
||||||
|
converter.makeHtml("""
|
||||||
|
Вася наклоняется и срывает фиолетовый цветочек. Мама любит васильки.
|
||||||
|
"""),
|
||||||
|
{
|
||||||
|
tags: ["flowers"],
|
||||||
|
optionText: "Василёк"
|
||||||
|
enter: (character, system, from) ->
|
||||||
|
character.qualities.chose_flowers = character.qualities.chose_flowers + 1
|
||||||
|
if character.qualities.chose_flowers > 2
|
||||||
|
system.setQuality("flower_chosen", "cornflower")
|
||||||
|
system.doLink("tourist")
|
||||||
|
}
|
||||||
|
),
|
||||||
|
|
||||||
|
camomile: new undum.SimpleSituation(
|
||||||
|
converter.makeHtml("""
|
||||||
|
Вася наклоняется и срывает фиолетовый цветочек. Мама любит васильки.
|
||||||
|
"""),
|
||||||
|
{
|
||||||
|
tags: ["flowers"],
|
||||||
|
optionText: "Ромашка"
|
||||||
|
enter: (character, system, from) ->
|
||||||
|
character.qualities.chose_flowers = character.qualities.chose_flowers + 1
|
||||||
|
if character.qualities.chose_flowers > 2
|
||||||
|
system.setQuality("flower_chosen", "camomile")
|
||||||
|
system.doLink("tourist")
|
||||||
|
}
|
||||||
|
),
|
||||||
|
|
||||||
|
dandelion: new undum.SimpleSituation(
|
||||||
|
converter.makeHtml("""
|
||||||
|
Жёлтый одуванчик — ничего необычного, но он сделает букетик ярче.
|
||||||
|
"""),
|
||||||
|
{
|
||||||
|
tags: ["flowers"],
|
||||||
|
optionText: "Одуванчик"
|
||||||
|
enter: (character, system, from) ->
|
||||||
|
character.qualities.chose_flowers = character.qualities.chose_flowers + 1
|
||||||
|
if character.qualities.chose_flowers > 2
|
||||||
|
system.setQuality("flower_chosen", "dandelion")
|
||||||
|
system.doLink("tourist")
|
||||||
|
}
|
||||||
|
),
|
||||||
|
|
||||||
|
tourist: new undum.SimpleSituation(
|
||||||
|
converter.makeHtml("""
|
||||||
|
Но прежде чем Вова закончит букетик, я должен рассказать про другого героя.
|
||||||
|
|
||||||
|
На вершине высокой горы стоит альпинист. Он смотрит на облака, на горы, на горизонт, на деревню внизу.
|
||||||
|
""")
|
||||||
|
),
|
||||||
|
|
||||||
|
undum.game.init = (character, system) ->
|
||||||
|
character.qualities.chose_flowers = 0
|
||||||
|
character.qualities.flower_chosen = ""
|
|
@ -0,0 +1,25 @@
|
||||||
|
/* This a language file. It contains ALL the strings of the Undum core. And
|
||||||
|
* so separates the translation from the implementation. If you want to
|
||||||
|
* translate Undum to another language, use this file as a basis. - Oreolek
|
||||||
|
*/
|
||||||
|
undum.language["ru"] = {
|
||||||
|
terrible: "ужасно",
|
||||||
|
poor: "бедно",
|
||||||
|
mediocre: "средне",
|
||||||
|
fair: "нормально",
|
||||||
|
good: "хорошо",
|
||||||
|
great: "прекрасно",
|
||||||
|
superb: "идеально",
|
||||||
|
yes: "да",
|
||||||
|
no: "нет",
|
||||||
|
no_group_definition: "Невозможно найти определение группы {id}.",
|
||||||
|
link_not_valid: "Ссылка '{link}' не выглядит правильной.",
|
||||||
|
link_no_action: "Ссылка с ситуацией '.' должна иметь действие.",
|
||||||
|
unknown_situation: "Вы не можете переместиться в неизвестную ситуацию {id}.",
|
||||||
|
erase_message: "Это навсегда удалит вашего персонажа и немедленно вернёт вас к началу игры. Вы уверены?",
|
||||||
|
no_current_situation: "Я не могу отобразить, потому что у нас нет текущей ситуации.",
|
||||||
|
no_local_storage: "Локальное хранилище недоступно.",
|
||||||
|
random_seed_error: "Вы должны задать верное случайное зерно.",
|
||||||
|
random_error: "Проинициализируйте Random с непустым зерном перед использованием.",
|
||||||
|
dice_string_error: "не могу интерпретировать вашу строку кубиков: '{string}'."
|
||||||
|
};
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,343 @@
|
||||||
|
body {
|
||||||
|
background: lightblue;
|
||||||
|
color: black;
|
||||||
|
font-family: 'Marmelad', 'Open Sans', sans-serif;
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 1.6em;
|
||||||
|
background-attachment: fixed;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Basic structure */
|
||||||
|
#page {
|
||||||
|
margin: 0 auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
#mid_panel {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The title block */
|
||||||
|
#title, #title .label, #content, .tools {
|
||||||
|
border-radius: 2px;
|
||||||
|
-moz-border-radius: 2px;
|
||||||
|
-webkit-border-radius: 2px;
|
||||||
|
}
|
||||||
|
#title {
|
||||||
|
max-width: 28em;
|
||||||
|
margin: 2.2em auto 1.1em auto;
|
||||||
|
padding: 1.7em;
|
||||||
|
border: 1.1em solid rgba(0,0,0,0.25);
|
||||||
|
cursor: pointer; /* Until we click to start. */
|
||||||
|
.label {
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 2.0em;
|
||||||
|
padding-left: 0.5em;
|
||||||
|
padding-right: 0.5em;
|
||||||
|
margin: auto;
|
||||||
|
max-width: 30em;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
margin: 0;
|
||||||
|
font-family: 'Russo One', cursive;
|
||||||
|
font-size: 1.6em;
|
||||||
|
line-height: 1.4em;
|
||||||
|
letter-spacing: 0.2em;
|
||||||
|
text-shadow: rgba(255,255,255,0.25) 1px 1px 2px;
|
||||||
|
color: #80806b;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 0.74em;
|
||||||
|
font-weight: normal;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#dynamicsub {
|
||||||
|
margin: 0;
|
||||||
|
margin-bottom: -2em;
|
||||||
|
}
|
||||||
|
#staticsub {
|
||||||
|
bottom: 0;
|
||||||
|
right: 3.4em;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 1.0em;
|
||||||
|
font-weight: normal;
|
||||||
|
text-align: center;
|
||||||
|
margin: 1.1em 0 0 0;
|
||||||
|
}
|
||||||
|
.noscript_message {
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
position: absolute;
|
||||||
|
font-size: 0.9em;
|
||||||
|
font-style: italic;
|
||||||
|
text-align: center;
|
||||||
|
color: #943;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main content */
|
||||||
|
#content_wrapper {
|
||||||
|
max-width: 975px;
|
||||||
|
position: relative;
|
||||||
|
background: #060606;
|
||||||
|
background-color: rgba(0,0,0,0.25);
|
||||||
|
margin: 0.6em auto 1.1em auto;
|
||||||
|
padding: 2.8em;
|
||||||
|
display: none; /* Shown by Javascript */
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
span.drop + p {
|
||||||
|
text-indent: -0.4em;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
padding-bottom: 0.2em;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
border: none;
|
||||||
|
background-color: #0a0a0b;
|
||||||
|
width: 1.1em;
|
||||||
|
height: 1.1em;
|
||||||
|
margin-left: -3.2em;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
br + * {
|
||||||
|
text-indent: 1.6em;
|
||||||
|
}
|
||||||
|
p + p, p + img + p, p + hr + p {
|
||||||
|
text-indent: 1.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0 1em;
|
||||||
|
&.options {
|
||||||
|
border: 2px solid #876;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: 0.7em;
|
||||||
|
list-style-type: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
li {
|
||||||
|
border-bottom: 1px solid #876;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ul.options li:hover {
|
||||||
|
background-color: rgba(153,136,119,0.2);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
ul.options li:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 1.0em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
margin: 2.3em 0 1.1em 0;
|
||||||
|
color: #654;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
h1:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #900;
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: 1px solid transparent;
|
||||||
|
&:hover {
|
||||||
|
border-bottom: 1px dotted #900;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img.float_right {
|
||||||
|
float: right;
|
||||||
|
margin: 1.1em 0 1.1em 1.1em;
|
||||||
|
}
|
||||||
|
img.float_left {
|
||||||
|
float: left;
|
||||||
|
margin: 1.1em 1.1em 1.1em 0;
|
||||||
|
}
|
||||||
|
img.float_center {
|
||||||
|
float: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tools_wrapper {
|
||||||
|
position: fixed;
|
||||||
|
max-width: 56em;
|
||||||
|
top: 2.2em;
|
||||||
|
left: 0.4em;
|
||||||
|
right: 0.4em;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: none; /* Shown by Javascript */
|
||||||
|
}
|
||||||
|
#info_panel, #character_panel {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.tools {
|
||||||
|
padding: 0.6em;
|
||||||
|
width: 8.9em;
|
||||||
|
background: #cec3ae url("../img/tools_bg.jpg") repeat left top;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.tools p {
|
||||||
|
font-size: 0.95em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
.tools.left {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.tools.right {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.tools h1 {
|
||||||
|
font-size: 1.0em;
|
||||||
|
font-weight: normal;
|
||||||
|
border-bottom: 1px solid #321;
|
||||||
|
margin-bottom: 0.6em;
|
||||||
|
}
|
||||||
|
.buttons {
|
||||||
|
padding-top: 0.6em;
|
||||||
|
margin-top: 0.6em;
|
||||||
|
border-top: 1px solid #321;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.buttons button {
|
||||||
|
font-size: 0.8em;
|
||||||
|
background: #876;
|
||||||
|
color: #e6e6c6;
|
||||||
|
border: none;
|
||||||
|
padding: 0.3em 1.0em;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
}
|
||||||
|
.buttons button:hover {
|
||||||
|
background: #987;
|
||||||
|
}
|
||||||
|
.buttons button + button {
|
||||||
|
margin-left: 0.3em;
|
||||||
|
}
|
||||||
|
.buttons button[disabled], .buttons button[disabled]:hover {
|
||||||
|
background: #ba9;
|
||||||
|
color: #dcb;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
#legal {
|
||||||
|
max-width: 33em;
|
||||||
|
color: #654;
|
||||||
|
margin: 1em auto 0 auto;
|
||||||
|
padding-bottom: 2.2em;
|
||||||
|
display: none; /* Shown by Javascript */
|
||||||
|
}
|
||||||
|
#legal p {
|
||||||
|
font-size: 0.7em;
|
||||||
|
line-height: 1.3em;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
#legal p + p {
|
||||||
|
text-indent: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#character {
|
||||||
|
font-size: 1.0em;
|
||||||
|
line-height: 1.4em;
|
||||||
|
}
|
||||||
|
#qualities .quality, #character_text {
|
||||||
|
position: relative;
|
||||||
|
clear: both;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0 -0.25em;
|
||||||
|
padding: 0 0.25em;
|
||||||
|
}
|
||||||
|
#character_text {
|
||||||
|
margin-bottom: 0.6em;
|
||||||
|
}
|
||||||
|
#character_text_content {
|
||||||
|
position: relative;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
#qualities span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
#qualities span.name {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
#qualities span.value {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.highlight {
|
||||||
|
background: rgba(255, 255, 0, 0.75);
|
||||||
|
position: absolute;
|
||||||
|
left: -4px;
|
||||||
|
right: -4px;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
#qualities h2 {
|
||||||
|
margin: 0.5em 0 0.25em 0;
|
||||||
|
font-size: 1.0em;
|
||||||
|
border-bottom: 1px solid #321;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress_bar {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0.6em 0;
|
||||||
|
}
|
||||||
|
.progress_bar_track {
|
||||||
|
z-index: 100;
|
||||||
|
background: rgba(255,255,255,0.25);
|
||||||
|
border: 2px solid #876;
|
||||||
|
height: 0.75em;
|
||||||
|
width: 27.7em;
|
||||||
|
clear: both;
|
||||||
|
border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
}
|
||||||
|
.progress_bar_color {
|
||||||
|
background: #987;
|
||||||
|
width: 0;
|
||||||
|
height: 0.75em;
|
||||||
|
}
|
||||||
|
.progress_bar span {
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
.progress_bar .name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.progress_bar .value {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.progress_bar .left_label {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.progress_bar .right_label {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
#content_library, #ui_library {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#menu {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
Loading…
Reference in New Issue