From 7121c230fc2b46cfef80b2e5dab66b1c3ff3bc89 Mon Sep 17 00:00:00 2001 From: Nathan DECHER Date: Tue, 14 Apr 2020 18:21:07 +0200 Subject: [PATCH] added switches and spikes (closes #6) and puzzle 3 (closes #34) --- Makefile | 2 +- assets/levelList.json | 2 +- assets/spikes.png | Bin 0 -> 14017 bytes assets/switch.png | Bin 0 -> 6622 bytes levels/puzzle3.json | 22 +++++++++++++ src/js/assets.js | 6 +++- src/js/snek.js | 72 +++++++++++++++++++++++++++++++++++++++++- 7 files changed, 100 insertions(+), 4 deletions(-) create mode 100755 assets/spikes.png create mode 100755 assets/switch.png create mode 100644 levels/puzzle3.json diff --git a/Makefile b/Makefile index 75de35b..7838b61 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ PORTAL_C_ANIM = $(foreach angle, $(shell seq 0 6 359), build/portal-c$(angle).pn PORTAL_D_ANIM = $(foreach angle, $(shell seq 0 6 359), build/portal-d$(angle).png) IMAGES = $(foreach name, apple wall oil key door, public/assets/$(name)32.png) -TILESETS = $(foreach name, hole, public/assets/$(name)-ts.png) +TILESETS = $(foreach name, hole switch spikes, public/assets/$(name)-ts.png) ANIMATIONS = $(foreach name, fire peach-decay peach-rainbow portal-a portal-b portal-c portal-d, public/assets/$(name)-anim.png) JSON = $(foreach name, snake levelList config metaConfig, public/assets/$(name).json) ICON = public/assets/icon32.png public/assets/icon256.png public/favicon.ico diff --git a/assets/levelList.json b/assets/levelList.json index 9683273..2dfca16 100644 --- a/assets/levelList.json +++ b/assets/levelList.json @@ -58,7 +58,7 @@ "levelFilename": "puzzle.json", "levelDisplay": "Level ", "levels": [ - 1, 2 + 1, 2, 3 ], "nextLevel": true } diff --git a/assets/spikes.png b/assets/spikes.png new file mode 100755 index 0000000000000000000000000000000000000000..0e4d7656c44dac40cda887ca30f0710fa69fb9ba GIT binary patch literal 14017 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ߙXX0czcWmLCU(sKKCmx1(U0uAn!Gjz>K7| zFWduAL8XIM*Ix{Mgn>|yZVC0a7mV*dZ^eY&@uyHcOZ(UNkLDNj!%Wja{GFqyyrrZ6 zQdni@*N2!uD)%2Td9`ORTq|FE%fgh~W>9H34hb!!UjZR6fUNl7RTGeQF9-4F3E>r4 z+%IJaBv0%?eDe@fTR2O10}6Sc8&N#DdV`C$BEIn~`0b8H9*pi!XM_&l@fJRbzf-LC zhS^17x%y5;+U4z#$j~!Fri?$_ON%=gJz3vgvRg3?{P6(ajJ#(qh|oLS%loz-fzzJ# zy$pRBEN)-@8ugVW+;?dI#1s-1M3El#K*kInvYOtWPOTuyKDv`n2SvIK^F+`?W-VNp z^}I*kdj-N91mg9>QrfJIL^+_>&50jBqBG;>|9bbHoqea36p;0 z@WJU7aX+^i6)xI-#7N>OWIOfp;KR}oQ*-d- zYeKf8r#Q9#T`1nV9)v^#P=_#&(9(}h)nNmSE2<}kU!t RFi%2e#VD(t&OB-C`#&O{wVeO} literal 0 HcmV?d00001 diff --git a/assets/switch.png b/assets/switch.png new file mode 100755 index 0000000000000000000000000000000000000000..e4e0651216dd859fdeef89c6054be67d2fe43d2c GIT binary patch literal 6622 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 this.world[x][y]=DOOR); + + // add the switches + if(settings.switches) settings.switches.forEach(([x, y]) => this.world[x][y]=SWITCH_OFF); + + // add the spikes + if(settings.spikesOn) settings.spikesOn.forEach(([x, y]) => this.world[x][y]=SPIKES_ON); + if(settings.spikesOff) settings.spikesOff.forEach(([x, y]) => this.world[x][y]=SPIKES_OFF); } // add the snake to the world @@ -235,6 +254,8 @@ class SnekGame { const portalD=assets.get('portalD'); const key=assets.get('key'); const door=assets.get('door'); + const switchTile=assets.get('switch'); + const spikes=assets.get('spikes'); const putTile=(x, y, tile) => this.ctx.drawImage( tile, offsetX+cellSize*x, @@ -316,6 +337,23 @@ class SnekGame { case DOOR: putTile(x, y, door); break; + + case SWITCH_ON: + case SWITCH_ON_S: + putTile(x, y, switchTile.on); + break; + case SWITCH_OFF: + case SWITCH_OFF_S: + putTile(x, y, switchTile.off); + break; + + case SPIKES_ON: + putTile(x, y, spikes.on); + break; + case SPIKES_OFF: + case SPIKES_OFF_S: + putTile(x, y, spikes.off); + break; } } } @@ -511,6 +549,15 @@ class SnekGame { case PORTAL_D_S: this.world[tail[0]][tail[1]]=PORTAL_D; break; + case SWITCH_ON_S: + this.world[tail[0]][tail[1]]=SWITCH_ON; + break; + case SWITCH_OFF_S: + this.world[tail[0]][tail[1]]=SWITCH_OFF; + break; + case SPIKES_OFF_S: + this.world[tail[0]][tail[1]]=SPIKES_OFF; + break; default: this.world[tail[0]][tail[1]]=EMPTY; } @@ -530,6 +577,7 @@ class SnekGame { case WALL: return this.die("thought walls were edible", "hit a wall"); case FIRE: return this.die("burned to a crisp", "hit fire"); case DOOR: return this.die("forgot to OPEN the door", "hit a door"); + case SPIKES_ON: return this.die("thought they were a girl's drink in a nightclub", "hit spikes"); // congratilations, you played yourself! case SNAKE: @@ -539,6 +587,9 @@ class SnekGame { case PORTAL_B_S: case PORTAL_C_S: case PORTAL_D_S: + case SWITCH_OFF_S: + case SWITCH_ON_S: + case SPIKES_OFF_S: return this.die("achieved every dog's dream", "ate their own tail"); // if either 3 consecutive segments or the whole snake is on a hole, you die @@ -571,6 +622,16 @@ class SnekGame { this.getTilesOfType(DOOR).forEach(([x, y]) => this.world[x][y]=EMPTY); break; + // you step on, you trigger + case SWITCH_ON: + case SWITCH_OFF: { + this.world[head[0]][head[1]]=this.world[head[0]][head[1]]==SWITCH_ON?SWITCH_OFF:SWITCH_ON; + if(this.getTilesOfType(SPIKES_OFF_S).length) return this.die("spiked themselves", "activated spikes"); + const oldSpikes=this.getTilesOfType(SPIKES_ON); + this.getTilesOfType(SPIKES_OFF).forEach(([x, y]) => this.world[x][y]=SPIKES_ON); + oldSpikes.forEach(([x, y]) => this.world[x][y]=SPIKES_OFF); + } break; + // you eat, you grow case FOOD: // re-grow the snake partially (can't hit the tail, but it's there for all other intents and purposes @@ -638,6 +699,15 @@ class SnekGame { case PORTAL_D: this.world[head[0]][head[1]]=PORTAL_D_S; break; + case SWITCH_ON: + this.world[head[0]][head[1]]=SWITCH_ON_S; + break; + case SWITCH_OFF: + this.world[head[0]][head[1]]=SWITCH_OFF_S; + break; + case SPIKES_OFF: + this.world[head[0]][head[1]]=SPIKES_OFF_S; + break; default: this.world[head[0]][head[1]]=SNAKE; }