Просмотр исходного кода

Created a very basic story selector

tags/v0.1.0
Fen Dweller 6 лет назад
Родитель
Сommit
dbd3a5afc4
7 измененных файлов: 167 добавлений и 114 удалений
  1. +2
    -2
      audio.js
  2. +3
    -1
      game.js
  3. +18
    -0
      satiate.css
  4. +15
    -2
      satiate.html
  5. +31
    -6
      satiate.js
  6. +95
    -0
      stories/demo.js
  7. +3
    -103
      world.js

+ 2
- 2
audio.js Просмотреть файл

@@ -169,13 +169,13 @@ function checkCache(type, name, hit, miss) {
}
}

function initAudio(game, state) {
function initAudio(story, state) {
if (!audioContext)
audioContext = new (window.AudioContext || window.webkitAudioContext)();

createCache();

games[game].sounds.forEach(sound => {
story.sounds.forEach(sound => {
loadAudio(sound);
});
}


+ 3
- 1
game.js Просмотреть файл

@@ -1,4 +1,6 @@
function initGame(game, state) {
stories = [];

function initGame(story, state) {
state.info = {};
state.info.time = 60 * 60 * 9;



+ 18
- 0
satiate.css Просмотреть файл

@@ -6,6 +6,24 @@ html, body, .scene {
font-family: sans-serif;
}

.hidden-scene {
display: none;
}

.modal {
position: fixed;
z-index: 1;
height: 100%;
width: 100%;
left: 0;
top: 0;
background-color: rgba(0,0,0,0.5);
}

.modal-content {
margin: 50%;
}

#info-area {
position: relative;
display: flex;


+ 15
- 2
satiate.html Просмотреть файл

@@ -7,6 +7,7 @@
<script src="audio.js"></script>
<script src="entity.js"></script>
<script src="game.js"></script>
<script src="stories/demo.js"></script>
<script src="world.js"></script>
<script src="satiate.js"></script>
<meta name="theme-color" content="#000000" />
@@ -18,8 +19,13 @@
</head>

<body>
<div class="scene" id=
<div class="scene" id="game">
<div class="scene" id="pick">
<select id="game-select">

</select>
<button id="start-button">Start</button>
</div>
<div class="hidden-scene" id="game">
<div id="info-area">
<div class="sidebar">
<div id="menu">
@@ -53,5 +59,12 @@
</div>
</div>
</div>
<!--
<div class="modal" id="settings">
<div class="modal-content">
<button>butt</button>
</div>
</div>
-->
</body>
</html>

+ 31
- 6
satiate.js Просмотреть файл

@@ -34,14 +34,39 @@ function refresh() {
updatePlayerInfo(state);
}

// setup the game
// set up the game

function init() {
initWorld("demo", state);
initAudio("demo", state);
initGame("demo", state);
function init(story) {
initWorld(story, state);
initAudio(story, state);
initGame(story, state);

goToRoom("Home", state);
}

window.addEventListener("load", init);
// set up the load screen

function initStart() {
const select = document.querySelector("#game-select");
const options = {};

stories.forEach(story => {
const option = document.createElement("option");
option.value = story.id;
option.textContent = story.name;
select.appendChild(option);
options[story.id] = story;
})

const start = document.querySelector("#start-button");

start.addEventListener("click", (event) => {
init(options[select.value]);
document.querySelector("#pick").classList.remove("scene");
document.querySelector("#pick").classList.add("hidden-scene");
document.querySelector("#game").classList.remove("hidden-scene");
document.querySelector("#game").classList.add("scene");
});
}

window.addEventListener("load", initStart);

+ 95
- 0
stories/demo.js Просмотреть файл

@@ -0,0 +1,95 @@
stories.push({
"id": "demo",
"name": "Tech Demo",
"sounds": [
"sfx/oof.ogg"
],
"world": {
"Home": {
"id": "Home",
"name": "Home",
"desc": "Where the wifi autoconnects",
"move": (room, state) => {
print(["You go back to your living room"]);
},
"actions": [
{
"name": "Squint",
"desc": "Squint in a very aggressive manner",
"execute": (room, state) => {
state.player.rooms[room.id].squinted = true;
print(["You stare at the wall and notice a secret door. But where is the key?"]);
}
},
{
"name": "Find Keys",
"desc": "Find your keys",
"execute": (room, state) => {
state.player.items.keys.push("Locked Room");
print(["You found your keys under the couch cushions"]);
},
"show": [
(room, state) => {
return state.player.rooms[room.id].squinted;
},
(room, state) => {
return !state.player.items.keys.includes("Locked Room");
}
]
}
],
"exits": {
"up": {
"target": "Locked Room",
"desc": "It's locked!",
"conditions": [
(room, state) => {
return state.player.items.keys.includes("Locked Room");
}
],
"show": [
(room, state) => {
return state.player.rooms[room.id].squinted;
}
]
}
},
"hooks": [
(room, state) => {
print(["This is a test of the hooks"]);
return true;
}
]
},
"Locked Room": {
"id": "Locked Room",
"name": "Locked Room",
"desc": "Super seecret",
"move": (room, state) => {
print(["You enter the locked room. wowie!"]);
},
"actions": [
{
name: "Oof",
desc: "Oof",
execute: (room, state) => {
print(["Oof"]);
playSfx("sfx/oof.ogg");
}
}
],
"exits": {
"down": {
"target": "Home",
"desc": "Back to home",
"hooks": [
(room, exit, state) => {
print(["Potato"]);
return true;
}
]
}
}
}
}
});

+ 3
- 103
world.js Просмотреть файл

@@ -11,8 +11,8 @@ dirs = {
"descend": "Down"
}

function initWorld(worldChoice, state) {
state.world = games[worldChoice]["world"];
function initWorld(story, state) {
state.world = story["world"];
initRoomState(state);
}

@@ -72,7 +72,7 @@ function goToRoom(dest, state) {
}

state.player.location = dest;
refresh();
}

@@ -178,104 +178,4 @@ function updateRoom(state) {

});
}



}

games = {
"demo": {
"id": "demo",
"sounds": [
"sfx/oof.ogg"
],
"world": {
"Home": {
"id": "Home",
"name": "Home",
"desc": "Where the wifi autoconnects",
"move": (room, state) => {
print(["You go back to your living room"]);
},
"actions": [
{
"name": "Squint",
"desc": "Squint in a very aggressive manner",
"execute": (room, state) => {
state.player.rooms[room.id].squinted = true;
print(["You stare at the wall and notice a secret door. But where is the key?"]);
}
},
{
"name": "Find Keys",
"desc": "Find your keys",
"execute": (room, state) => {
state.player.items.keys.push("Locked Room");
print(["You found your keys under the couch cushions"]);
},
"show": [
(room, state) => {
return state.player.rooms[room.id].squinted;
},
(room, state) => {
return !state.player.items.keys.includes("Locked Room");
}
]
}
],
"exits": {
"up": {
"target": "Locked Room",
"desc": "It's locked!",
"conditions": [
(room, state) => {
return state.player.items.keys.includes("Locked Room");
}
],
"show": [
(room, state) => {
return state.player.rooms[room.id].squinted;
}
]
}
},
"hooks": [
(room, state) => {
print(["This is a test of the hooks"]);
return true;
}
]
},
"Locked Room": {
"id": "Locked Room",
"name": "Locked Room",
"desc": "Super seecret",
"move": (room, state) => {
print(["You enter the locked room. wowie!"]);
},
"actions": [
{
name: "Oof",
desc: "Oof",
execute: (room, state) => {
print(["Oof"]);
playSfx("sfx/oof.ogg");
}
}
],
"exits": {
"down": {
"target": "Home",
"desc": "Back to home",
"hooks": [
(room, exit, state) => {
print(["Potato"]);
return true;
}
]
}
}
}
}
}
}

Загрузка…
Отмена
Сохранить