Skip to content

Commit 0dba0e0

Browse files
committed
Stable Game Mechanics
Unpolished but playable :)
1 parent 6ff64d1 commit 0dba0e0

File tree

1 file changed

+125
-134
lines changed

1 file changed

+125
-134
lines changed

games/GMTK Jam/app.js

Lines changed: 125 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ const textStyle = new PIXI.TextStyle({
6161

6262
// Menu stuff
6363

64-
const infoText = new PIXI.Text(" [F] to enter fullscreen\n [Esc] to pause the game\n\n [A] is left, [D] is right\n[W] is jump, [S] is to drop\n\nGetting hit by an enemy die\n will lower your health by\n the shown number, jumping\n on top of it will restore\n your health by the number\n\n\n Press [W]", textStyle);
64+
const infoText = new PIXI.Text(" [F] to enter fullscreen\n [Esc] to pause the game\n\n [A] is left, [D] is right\n[W] is jump, [S] is to drop\n\nGetting hit by an enemy die\n will lower your health by\n the shown number, jumping\n on top of it will restore\n your health by the number\n\n\n Press [Enter]", textStyle);
6565
infoText.x = app.view.width * 0.5;
6666
infoText.y = app.view.height * 0.5;
6767
infoText.anchor = { x: 0.5, y: 0.5 };
@@ -80,7 +80,7 @@ topMessage.y = app.view.height * 0.1;
8080
topMessage.anchor = { x: 0.5, y: 0.5 };
8181
allocationScreen.addChild(topMessage);
8282

83-
const newRolls = [0, 0, 0, 0];
83+
let newRolls = [];
8484

8585
let rollSprite = [];
8686

@@ -110,10 +110,11 @@ statName[3].y = app.view.height * 0.4;
110110
statName[3].anchor = { x: 0.5, y: 0.5 };
111111
allocationScreen.addChild(statName[3]);
112112

113-
const directions = new PIXI.Text("Set the rules for the next level by dragging the dice", textStyle)
113+
const directions = new PIXI.Text("Press [W] try your luck in the next level...", textStyle)
114114
directions.x = app.view.width * 0.5;
115-
directions.y = app.view.height * 0.85;
115+
directions.y = app.view.height * 0.9;
116116
directions.anchor = { x: 0.5, y: 0.5 };
117+
directions.visible = false;
117118
allocationScreen.addChild(directions);
118119

119120
// Scene stuff
@@ -157,37 +158,30 @@ app.ticker.add((deltaTime) => {
157158
scene.visible = false;
158159
allocationScreen.visible = false;
159160
menuScore.text = "Level " + states.level + " | " + states.score + " points";
160-
rollSprite = [];
161161

162-
if (PIXI.input.getKeyFired("w")) {
162+
if (PIXI.input.getKeyFired("enter")) {
163163
states.start = true;
164+
states.allocation = true;
164165
states.life = 6;
165166
states.speed = 3;
166167
states.speedMult = 3;
167168
states.jump = 3;
168169
states.jumpMult = 3;
169170
states.danger = 3;
170171
states.dangerSpawnBoost = 0;
171-
states.level = 1;
172+
states.level = 0;
172173
states.dangerCount = 0;
173174
states.score = 0;
174175

175176
player.x = app.view.width * 0.5;
176177
player.y = app.view.height;
177178
player.anchor = { x: 0.5, y: 1.0 };
178179
player.vec = { x: 0, y: 0 };
179-
player.tint = 0x33ff44;
180-
states.allocation = true;
181180
}
182181
} else {
183182

184183
menu.visible = false;
185184

186-
if (!states.pause && PIXI.input.getKeyFired("escape")) {
187-
states.pause = true;
188-
pauseText.visible = true;
189-
}
190-
191185
if (states.allocation) {
192186

193187
scene.visible = false;
@@ -241,144 +235,141 @@ app.ticker.add((deltaTime) => {
241235
}
242236
});
243237

244-
if (PIXI.input.getKeyFired("w")) {
245-
states.level++;
246-
states.allocation = false;
247-
states.jump = newRolls[0];
248-
states.speed = newRolls[1];
249-
states.danger = newRolls[2];
250-
states.life = newRolls[3];
238+
if (newRolls.length == 4) {
239+
directions.visible = true;
240+
if (PIXI.input.getKeyFired("w")) {
241+
states.dangerCount = 0;
242+
states.level++;
243+
states.allocation = false;
244+
states.jump = newRolls[0];
245+
states.speed = newRolls[1];
246+
states.danger = newRolls[2];
247+
states.life = newRolls[3];
248+
for (let i = 0; i < 4; i++) {
249+
allocationScreen.removeChild(rollSprite[i]);
250+
}
251+
rollSprite = [];
252+
newRolls = [];
253+
directions.visible = false;
254+
}
251255
}
252256

253257
} else {
254-
if (!states.pause) {
255-
258+
allocationScreen.visible = false;
259+
scene.visible = true;
256260

257-
allocationScreen.visible = false;
258-
scene.visible = true;
261+
let t = Math.max(states.life, 1);
262+
player.texture = diceImg[t];
263+
player.tint = lifeTint[t];
259264

260-
let t = Math.max(states.life, 1);
261-
player.texture = diceImg[t];
262-
player.tint = lifeTint[t];
265+
score.text = "Level " + states.level + " | " + states.score + " points, " + (25 + states.level * 5 - states.dangerCount) + " dice left";
263266

264-
score.text = "Level " + states.level + " | " + states.score + " points, " + (25 + states.level * 5 - states.dangerCount) + " dice left";
267+
// X velocity
268+
player.vec.x = clamp(player.vec.x * (1 - (0.1 * deltaTime) * (player.vec.y == 0)) + (PIXI.input.getKeyDown("d") - PIXI.input.getKeyDown("a")) * (player.vec.y == 0) * states.speedMult, (states.speed + 2) * -states.speedMult, (states.speed + 2) * states.speedMult);
265269

266-
// X velocity
267-
player.vec.x = clamp(player.vec.x * (1 - (0.1 * deltaTime) * (player.vec.y == 0)) + (PIXI.input.getKeyDown("d") - PIXI.input.getKeyDown("a")) * (player.vec.y == 0) * states.speedMult, states.speed * -states.speedMult, states.speed * states.speedMult);
268-
269-
// Y velocity
270-
if (player.y < app.view.height) {
271-
player.vec.y += 1 + 1.5 * (!PIXI.input.getKeyDown("w") || (player.vec.y > 0)) + 2.5 * PIXI.input.getKeyDown("s");
270+
// Y velocity
271+
if (player.y < app.view.height) {
272+
player.vec.y += 1 + 1.5 * (!PIXI.input.getKeyDown("w") || (player.vec.y > 0)) + 2.5 * PIXI.input.getKeyDown("s");
273+
} else {
274+
if (PIXI.input.getKeyFired("w")) {
275+
player.vec.y = -14 - states.jump * states.jumpMult;
272276
} else {
273-
if (PIXI.input.getKeyFired("w")) {
274-
player.vec.y = -14 - states.jump * states.jumpMult;
275-
} else {
276-
player.vec.y = 0;
277-
player.y = app.view.height;
278-
}
277+
player.vec.y = 0;
278+
player.y = app.view.height;
279279
}
280+
}
280281

281-
// Player X position
282-
player.x += player.vec.x;
283-
if (player.x < player.width * 0.5) {
284-
player.x = player.width * 0.5;
285-
player.vec.x *= -phys.bounce;
286-
} else if (player.x > app.view.width - player.width * 0.5) {
287-
player.x = (app.view.width - player.width * 0.5);
288-
player.vec.x *= -phys.bounce;
289-
}
290-
// Player Y position
291-
player.y = Math.min(player.y + player.vec.y, app.view.height) ^ 0;
292-
293-
// Dangers
294-
dangerSet.forEach((danger) => {
295-
switch (danger.type) {
296-
case 0:
297-
danger.vec.y++;
298-
danger.y = (danger.y + danger.vec.y) ^ 0;
299-
if (danger.y >= app.view.height) {
300-
danger.y = app.view.height;
301-
danger.vec.y *= -phys.bounce;
302-
danger.vec.x = danger.vec.x * phys.bounce + (Math.random() - 0.5) * danger.vec.y;
303-
if (danger.vec.y < -2) {
304-
states.score += danger.facing;
305-
danger.facing = rand(1, 6);
306-
danger.texture = diceImg[danger.facing];
307-
danger.tint = dangerTint[danger.facing];
308-
}
309-
}
310-
danger.x = (danger.x + danger.vec.x) ^ 0;
311-
if (danger.x < danger.width * 0.5) {
312-
danger.x = danger.width * 0.5;
313-
danger.vec.x *= -phys.bounce;
314-
} else if (danger.x > app.view.width - danger.width * 0.5) {
315-
danger.x = app.view.width - danger.width * 0.5;
316-
danger.vec.x *= -phys.bounce;
282+
// Player X position
283+
player.x += player.vec.x;
284+
if (player.x < player.width * 0.5) {
285+
player.x = player.width * 0.5;
286+
player.vec.x *= -phys.bounce;
287+
} else if (player.x > app.view.width - player.width * 0.5) {
288+
player.x = (app.view.width - player.width * 0.5);
289+
player.vec.x *= -phys.bounce;
290+
}
291+
// Player Y position
292+
player.y = Math.min(player.y + player.vec.y, app.view.height) ^ 0;
293+
294+
// Dangers
295+
dangerSet.forEach((danger) => {
296+
switch (danger.type) {
297+
case 0:
298+
danger.vec.y++;
299+
danger.y = (danger.y + danger.vec.y) ^ 0;
300+
if (danger.y >= app.view.height) {
301+
danger.y = app.view.height;
302+
danger.vec.y *= -phys.bounce;
303+
danger.vec.x = danger.vec.x * phys.bounce + (Math.random() - 0.5) * danger.vec.y;
304+
if (danger.vec.y < -2) {
305+
states.score += danger.facing;
306+
danger.facing = rand(1, 6);
307+
danger.texture = diceImg[danger.facing];
308+
danger.tint = dangerTint[danger.facing];
317309
}
318-
break;
319-
}
320-
if (PIXI.collision.aabb(player, danger)) {
321-
if (player.y + player.height * 0.45 < danger.y) {
322-
// Jumped on top, score up AND heal AND bounce
323-
states.life = clamp(states.life + danger.facing, 1, 6)
324-
player.vec.y = -24 - states.jump * states.jumpMult;
325-
states.score += danger.facing * 3;
326-
states.dangerCount++;
327-
} else {
328-
// Hit by danger, lose life
329-
states.life -= danger.facing;
330310
}
331-
scene.removeChild(danger);
332-
dangerSet.delete(danger);
333-
} else if (Math.abs(danger.vec.y) < 0.25 && danger.y == app.view.height) {
334-
states.score += danger.facing;
311+
danger.x = (danger.x + danger.vec.x) ^ 0;
312+
if (danger.x < danger.width * 0.5) {
313+
danger.x = danger.width * 0.5;
314+
danger.vec.x *= -phys.bounce;
315+
} else if (danger.x > app.view.width - danger.width * 0.5) {
316+
danger.x = app.view.width - danger.width * 0.5;
317+
danger.vec.x *= -phys.bounce;
318+
}
319+
break;
320+
}
321+
if (PIXI.collision.aabb(player, danger)) {
322+
if (player.y + player.height * 0.45 < danger.y) {
323+
// Jumped on top, score up AND heal AND bounce
324+
states.life = clamp(states.life + danger.facing, 1, 6)
325+
player.vec.y = -24 - states.jump * states.jumpMult;
326+
states.score += danger.facing * 3;
335327
states.dangerCount++;
336-
scene.removeChild(danger);
337-
dangerSet.delete(danger);
338-
}
339-
});
340-
341-
if (dangerSet.size < states.danger + states.level && Math.random() < states.dangerSpawnBoost) {
342-
states.dangerSpawnBoost = 0;
343-
let num = rand(1, 6);
344-
let newDanger = PIXI.Sprite.from(diceImg[num]);
345-
newDanger.type = 0;
346-
newDanger.facing = num;
347-
switch (newDanger.type) {
348-
case 0:
349-
newDanger.width = 64;
350-
newDanger.height = 64;
351-
newDanger.y = 0;
352-
newDanger.x = clamp(player.x + ((Math.random() - 0.5) * app.view.width), newDanger.width * 0.5, app.view.width - newDanger.width * 0.5) ^ 0;
353-
newDanger.vec = {
354-
x: 0,
355-
y: 0
356-
}
357-
newDanger.anchor = {
358-
x: 0.5,
359-
y: 1.0
360-
}
361-
newDanger.tint = dangerTint[num];
362-
break;
328+
} else {
329+
// Hit by danger, lose life
330+
states.life -= danger.facing;
363331
}
364-
scene.addChild(newDanger);
365-
dangerSet.add(newDanger);
366-
} else {
367-
states.dangerSpawnBoost += 0.00005 * (states.danger + states.level);
332+
scene.removeChild(danger);
333+
dangerSet.delete(danger);
334+
} else if (Math.abs(danger.vec.y) < 0.25 && danger.y == app.view.height) {
335+
states.score += danger.facing;
336+
states.dangerCount++;
337+
scene.removeChild(danger);
338+
dangerSet.delete(danger);
368339
}
340+
});
369341

370-
if (states.dangerCount >= 25 + states.level * 5) {
371-
states.dangerCount = 0;
372-
states.level++;
373-
states.pause = true;
374-
states.allocation = true;
375-
rollSprite = [];
342+
if (dangerSet.size < states.danger + states.level && Math.random() < states.dangerSpawnBoost) {
343+
states.dangerSpawnBoost = 0;
344+
let num = rand(1, 6);
345+
let newDanger = PIXI.Sprite.from(diceImg[num]);
346+
newDanger.type = 0;
347+
newDanger.facing = num;
348+
switch (newDanger.type) {
349+
case 0:
350+
newDanger.width = 64;
351+
newDanger.height = 64;
352+
newDanger.y = 0;
353+
newDanger.x = clamp(player.x + ((Math.random() - 0.5) * app.view.width), newDanger.width * 0.5, app.view.width - newDanger.width * 0.5) ^ 0;
354+
newDanger.vec = {
355+
x: 0,
356+
y: 0
357+
}
358+
newDanger.anchor = {
359+
x: 0.5,
360+
y: 1.0
361+
}
362+
newDanger.tint = dangerTint[num];
363+
break;
376364
}
365+
scene.addChild(newDanger);
366+
dangerSet.add(newDanger);
377367
} else {
378-
if (PIXI.input.getKeyFired("escape")) {
379-
states.pause = false;
380-
pauseText.visible = false;
381-
}
368+
states.dangerSpawnBoost += 0.00005 * (states.danger + states.level);
369+
}
370+
371+
if (states.dangerCount >= 25 + states.level * 5) {
372+
states.allocation = true;
382373
}
383374
}
384375

0 commit comments

Comments
 (0)