From 3724fb1a4a63aa18595d5dcfc397067bab3495ed Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Fri, 29 Nov 2019 19:39:38 +0200 Subject: [PATCH] Initial commit --- .babelrc | 14 ++++ .editorconfig | 14 ++++ .gitignore | 6 ++ index.html | 10 +++ package.json | 27 +++++++ src/canvas.js | 65 +++++++++++++++ src/game.js | 187 +++++++++++++++++++++++++++++++++++++++++++ src/image.js | 33 ++++++++ src/index.js | 44 ++++++++++ src/level.js | 136 +++++++++++++++++++++++++++++++ src/player.js | 174 ++++++++++++++++++++++++++++++++++++++++ src/resource.js | 103 ++++++++++++++++++++++++ src/utils.js | 21 +++++ static/diamond.png | Bin 0 -> 2186 bytes static/gold_1.png | Bin 0 -> 6851 bytes static/gold_2.png | Bin 0 -> 7686 bytes static/gold_3.png | Bin 0 -> 7503 bytes static/hook_open.png | Bin 0 -> 1089 bytes static/loot.png | Bin 0 -> 10487 bytes static/rock_1.png | Bin 0 -> 5032 bytes static/rock_2.png | Bin 0 -> 4353 bytes static/rock_3.png | Bin 0 -> 4163 bytes webpack.config.js | 30 +++++++ 23 files changed, 864 insertions(+) create mode 100644 .babelrc create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 index.html create mode 100644 package.json create mode 100644 src/canvas.js create mode 100644 src/game.js create mode 100644 src/image.js create mode 100644 src/index.js create mode 100644 src/level.js create mode 100644 src/player.js create mode 100644 src/resource.js create mode 100644 src/utils.js create mode 100644 static/diamond.png create mode 100644 static/gold_1.png create mode 100644 static/gold_2.png create mode 100644 static/gold_3.png create mode 100644 static/hook_open.png create mode 100644 static/loot.png create mode 100644 static/rock_1.png create mode 100644 static/rock_2.png create mode 100644 static/rock_3.png create mode 100644 webpack.config.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..4b15448 --- /dev/null +++ b/.babelrc @@ -0,0 +1,14 @@ +{ + "presets": ["@babel/preset-env"], + "plugins": [ + [ + "@babel/plugin-transform-runtime", + { + "corejs": false, + "helpers": true, + "regenerator": true, + "useESModules": false + } + ] + ] +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a0a4de8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true + +# Matches multiple files with brace expansion notation +# Set default charset +[*.js] +charset = utf-8 +indent_style = space +indent_size = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..99d9404 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/node_modules/ +/dist/ +/package-lock.json +/**/dna.txt +*.db +*.sqlite3 diff --git a/index.html b/index.html new file mode 100644 index 0000000..4ec7fcf --- /dev/null +++ b/index.html @@ -0,0 +1,10 @@ + + + + + + Hook Miner + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..73a010a --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "aaaidk", + "version": "0.0.1", + "description": "idk", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack -p", + "watch": "webpack -w --mode=development" + }, + "keywords": [], + "private": true, + "author": "Evert \"Diamond\" Prants ", + "license": "MIT", + "devDependencies": { + "@babel/core": "^7.1.6", + "@babel/plugin-transform-runtime": "^7.1.0", + "@babel/preset-env": "^7.1.6", + "babel-loader": "^8.0.4", + "html-webpack-plugin": "^3.2.0", + "standard": "^12.0.1", + "webpack": "^4.26.0", + "webpack-command": "^0.4.2" + }, + "dependencies": { + "@babel/runtime": "^7.1.5" + } +} diff --git a/src/canvas.js b/src/canvas.js new file mode 100644 index 0000000..c767349 --- /dev/null +++ b/src/canvas.js @@ -0,0 +1,65 @@ +const canvas = document.createElement('canvas') +const ctx = canvas.getContext('2d') + +ctx.mouse = { pos: {} } + +canvas.addEventListener('mousemove', (e) => { + let x + let y + + if (e.changedTouches) { + let touch = e.changedTouches[0] + if (touch) { + e.pageX = touch.pageX + e.pageY = touch.pageY + } + } + + if (e.pageX || e.pageY) { + x = e.pageX + y = e.pageY + } else { + x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft + y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop + } + + x -= canvas.offsetLeft + y -= canvas.offsetTop + + if (ctx.oX && ctx.oY) { + x += ctx.oX + y += ctx.oY + } + + ctx.mouse.pos.x = x + ctx.mouse.pos.y = y +}, false) + +canvas.addEventListener('mousedown', (e) => { + e.preventDefault() + ctx.mouse['btn' + e.button] = true +}) + +canvas.addEventListener('mouseup', (e) => { + e.preventDefault() + ctx.mouse['btn' + e.button] = false +}) + +canvas.addEventListener('contextmenu', (e) => { + e.preventDefault() +}) + +// Resize the canvas when window is resized +canvas.resizeWorkspace = function () { + canvas.width = window.innerWidth + canvas.height = window.innerHeight +} + +window.addEventListener('resize', canvas.resizeWorkspace, false) + +// Add elements to the document +document.body.appendChild(canvas) + +canvas.resizeWorkspace() + +export { canvas, ctx } diff --git a/src/game.js b/src/game.js new file mode 100644 index 0000000..abf7e05 --- /dev/null +++ b/src/game.js @@ -0,0 +1,187 @@ +import { canvas, ctx } from './canvas' +import { Level, Rock, Gold, Diamond, Lootbag } from './level' +import { randomi } from './utils' + +const REWARD_TABLE = { + rock: 16, + gold: [129, 543, 2399], + diamond: 599, + lootbag: [5, 5000] +} + +export class Game { + constructor (time, player, oh, gw, gh) { + this.currentLevel = 0 + this.player = player + this.roundTime = time + this.time = time + this.score = 0 + this.goal = 0 + + this.level = null + this.oh = oh + this.gh = gh + this.gw = gw + + this.message = null + + this.state = 0 + this.wait = 0 + } + + static calculateScore (obj, skipLoot) { + if (obj instanceof Rock) { + return REWARD_TABLE.rock * obj.size + } + + if (obj instanceof Gold) { + return REWARD_TABLE.gold[obj.size - 1] + } + + if (obj instanceof Diamond) { + return REWARD_TABLE.diamond + } + + if (skipLoot) return 0 + + if (obj instanceof Lootbag) { + let ssChance = randomi(0, 3) + if (ssChance === 1) { + return 'special' + } + return randomi(REWARD_TABLE.lootbag[0], REWARD_TABLE.lootbag[1]) + } + + return 0 + } + + static calculateLevelScore (level) { + let total = 0 + for (let i in level.objects) { + total += Game.calculateScore(level.objects[i], true) + } + return total + } + + nextLevel () { + this.player.superStrength = false + this.currentLevel++ + this.time = this.roundTime + this.level = Level.create(this.currentLevel, this.oh, this.gw, this.gh) + this.goal = Math.floor(this.score / 2 + Game.calculateLevelScore(this.level) * 0.65) + } + + displayMessage (msg, time = 60) { + this.message = { text: msg, time: time, duration: time } + } + + scoredItem (obj) { + let scored = Game.calculateScore(obj) + if (scored === 'special') { + this.displayMessage('SUPER STRENGTH!') + this.player.superStrength = true + return + } + + this.displayMessage('$' + scored) + this.score += scored + } + + update () { + ctx.oX = (canvas.width - this.gw) / 2 + ctx.oY = (canvas.height - this.gh) / 2 + + if (this.state === 0 && this.time === 0) { + if (this.score > this.goal) { + this.state = 1 + this.wait = 160 + this.nextLevel() + } else { + this.state = 2 + } + } + + if (this.state === 1) { + if (this.wait > 0) { + this.wait-- + } else { + this.state = 0 + } + return + } + + if (this.state !== 0) return + if (this.message) { + if (this.message.time > 0) { + this.message.time-- + } else { + this.message = null + } + return + } + + this.player.update(this.level) + } + + tick () { + if (this.state === 0 && this.time > 0) { + this.time -= 1 + } + } + + draw () { + if (this.state === 2) { + ctx.fillStyle = '#ff1111' + ctx.font = '20px sans-serif' + let t = 'Game Over!' + let s = 'Score: $' + this.score + ctx.fillText(t, ctx.oX + this.gw / 2 - ctx.measureText(t).width / 2, ctx.oY + this.gh / 2 - 15) + ctx.fillText(s, ctx.oX + this.gw / 2 - ctx.measureText(s).width / 2, ctx.oY + this.gh / 2 + 15) + return + } + + if (this.state === 1) { + ctx.fillStyle = '#05ff05' + ctx.font = '20px sans-serif' + let t = 'Level Cleared!' + let s = 'Next Goal: $' + this.goal + ctx.fillText(t, ctx.oX + this.gw / 2 - ctx.measureText(t).width / 2, ctx.oY + this.gh / 2 - 15) + ctx.fillText(s, ctx.oX + this.gw / 2 - ctx.measureText(s).width / 2, ctx.oY + this.gh / 2 + 15) + return + } + + // Underground + ctx.fillStyle = '#3a2201' + ctx.fillRect(ctx.oX, ctx.oY, this.gw, this.gh) + // Room + ctx.fillStyle = '#b26b08' + ctx.fillRect(ctx.oX, ctx.oY, this.gw, 25 + this.player.h) + // Floor + ctx.fillStyle = '#2b1a02' + ctx.fillRect(ctx.oX, ctx.oY + 25 + this.player.h, this.gw, 15) + + if (this.level) this.level.draw() + this.player.draw() + + ctx.fillStyle = '#05ff05' + ctx.font = '20px sans-serif' + ctx.fillText('Money: $' + this.score, ctx.oX + 20, ctx.oY + 30) + ctx.fillStyle = '#eabb4d' + ctx.fillText('Goal: $' + this.goal, ctx.oX + 20, ctx.oY + 62) + ctx.fillStyle = '#05ff05' + let time = 'Time: ' + this.time + let ftsize = ctx.measureText(time) + ctx.fillText(time, ctx.oX + this.gw - ftsize.width - 5, ctx.oY + 30) + + let round = 'Level ' + this.currentLevel + let frsize = ctx.measureText(round) + ctx.fillText(round, ctx.oX + this.gw - frsize.width - 5, ctx.oY + 62) + + if (this.message && this.message.time > 0) { + let tfloat = this.message.duration - this.message.time + ctx.fillStyle = '#05ff05' + ctx.font = '20px sans-serif' + ctx.fillText(this.message.text, ctx.oX + this.player.x - this.player.w - tfloat, ctx.oY + this.player.y + this.player.h / 2 - tfloat / 2) + } + } +} diff --git a/src/image.js b/src/image.js new file mode 100644 index 0000000..76a46bc --- /dev/null +++ b/src/image.js @@ -0,0 +1,33 @@ +import Resource from './resource' +import { ctx } from './canvas' + +let imageCache = {} + +class Image { + constructor (file, img) { + this.file = file + this.img = img + } + + static async load (file) { + if (imageCache[file]) return imageCache[file] + let img = await Resource.loadImage(file) + let imgCl = new Image(file, img) + imageCache[file] = imgCl + return imgCl + } + + get width () { + return this.img.width + } + + get height () { + return this.img.height + } + + draw (x, y, w, h) { + ctx.drawImage(this.img, x, y, w, h) + } +} + +export { Image } diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..d1ec907 --- /dev/null +++ b/src/index.js @@ -0,0 +1,44 @@ +/* global requestAnimationFrame */ +import { canvas, ctx } from './canvas' +import { Game } from './game' +import { Player } from './player' +import RES from './resource' + +const GameWidth = 1080 +const GameHeight = 720 + +let playing = true +let player = new Player(GameWidth / 2 - 30, 25, GameHeight - 80) +let game = new Game(60, player, player.h + 60, GameWidth, GameHeight) + +// Retranslate score function +player.score = function (obj) { + /* eslint-disable no-useless-call */ + game.scoredItem.call(game, obj) +} + +function gameLoop () { + playing && requestAnimationFrame(gameLoop) + ctx.fillStyle = '#111' + ctx.fillRect(0, 0, canvas.width, canvas.height) + game.update() + game.draw() +} + +function start () { + game.nextLevel() + gameLoop() + setInterval(function () { + game.tick() + }, 1000) +} + +async function loadAll () { + let images = ['static/hook_open.png', 'static/gold_1.png', 'static/gold_2.png', 'static/gold_3.png', + 'static/rock_1.png', 'static/rock_2.png', 'static/rock_3.png', 'static/diamond.png', 'static/loot.png'] + for (let i in images) { + await RES.loadImage(images[i]) + } +} + +loadAll().then(start) diff --git a/src/level.js b/src/level.js new file mode 100644 index 0000000..ab87dfc --- /dev/null +++ b/src/level.js @@ -0,0 +1,136 @@ +import { ctx } from './canvas' +import { randomi } from './utils' +import RES from './resource' + +const offset = 50 + +// Objects + +export class GameObject { + constructor (x, y, w, h, img) { + this.x = x + this.y = y + this.w = w + this.h = h + this.img = img + this.physical = true + } + + draw () { + if (!this.physical) return + if (this.img.indexOf('#') === 0) { + ctx.fillStyle = this.img + ctx.fillRect(ctx.oX + this.x, ctx.oY + this.y, this.w, this.h) + } else { + ctx.drawImage(RES.loadImage(this.img, true), ctx.oX + this.x, ctx.oY + this.y, this.w, this.h) + } + } + + destroy () { + this.physical = false + } + + get weight () { + return 0.1 + } +} + +export class Rock extends GameObject { + constructor (x, y, size) { + let o = size * 20 + super(x, y, o, o, 'static/rock_' + size + '.png') + this.size = size + } + + get weight () { + return Math.min(0.20 * this.size, 1) + } +} + +export class Gold extends GameObject { + constructor (x, y, size) { + let o = size * 24 + super(x, y, o, o, 'static/gold_' + size + '.png') + this.size = size + } + + get weight () { + return Math.min(0.25 * this.size, 1) + } +} + +export class Diamond extends GameObject { + constructor (x, y) { + super(x, y, 16, 16, 'static/diamond.png') + } + + get weight () { + return 0.11 + } +} + +export class Lootbag extends GameObject { + constructor (x, y) { + super(x, y, 30, 30, 'static/loot.png') + } + + get weight () { + return 0.56 + } +} + +// Level + +export class Level { + constructor (id, objects) { + this.id = id + this.objects = objects || [] + } + + draw () { + for (let i in this.objects) { + this.objects[i].draw() + } + } + + static create (index, my, width, height) { + let objects = [] + let rocks = randomi(4, 12) + let gold = randomi(4, 12) + let diamond = randomi(0, 2) + let loot = randomi(0, 2) + + // Add rocks + for (let r = 0; r < rocks; r++) { + let x = randomi(offset, width - offset) + let y = randomi(offset + my, height - (offset + my)) + let size = randomi(1, 4) + objects.push(new Rock(x, y, size)) + } + + // Add gold + for (let r = 0; r < gold; r++) { + let x = randomi(offset, width - offset) + let y = randomi(offset + my, height - (offset + my)) + let size = randomi(1, 4) + objects.push(new Gold(x, y, size)) + } + + // Add diamonds + for (let r = 0; r < diamond; r++) { + let x = randomi(offset, width - offset) + let y = randomi(offset + my, height - (offset + my)) + objects.push(new Diamond(x, y)) + } + + // Add loot + for (let r = 0; r < loot; r++) { + let x = randomi(offset, width - offset) + let y = randomi(offset + my, height - (offset + my)) + objects.push(new Lootbag(x, y)) + } + + let n = new Level(index, objects) + return n + } +} diff --git a/src/player.js b/src/player.js new file mode 100644 index 0000000..b688d2e --- /dev/null +++ b/src/player.js @@ -0,0 +1,174 @@ +import { ctx } from './canvas' +import { GameObject } from './level' +import { deg2rad, rad2vec, intersectRect } from './utils' +import RES from './resource' + +const FULL_ROTATION = -85 +const FULL_ROTATION_EDGE = -FULL_ROTATION + +class Hook extends GameObject { + constructor (player, x, y, w, h, len) { + super(x, y, w, h) + this.player = player + + // Return position + this.rx = x + this.ry = y + + // Hook rotation + // Hook rotation direction + this.r = 0 + this.rd = 1 + + // Distance from center + // Moving direction + this.d = 0 + this.md = -1 + + // Travel length + this.len = len + + // Attached object + this.obj = null + } + + draw () { + if (this.md !== -1) { + // Draw line + ctx.beginPath() + ctx.moveTo(ctx.oX + this.rx, ctx.oY + this.ry) + ctx.lineTo(ctx.oX + this.x, ctx.oY + this.y) + ctx.stroke() + ctx.closePath() + } + + let hookr = deg2rad(360 - this.r) + ctx.save() + ctx.translate(ctx.oX + this.x, ctx.oY + this.y) + ctx.rotate(hookr) + ctx.drawImage(RES.loadImage('static/hook_open.png', true), -this.w / 2, -this.h / 2, this.w, this.h) + ctx.restore() + } + + update (level) { + if (this.d === 0 && this.r < FULL_ROTATION_EDGE && this.rd === 1) { + this.r += 1 + } + + if (this.d === 0 && this.r > FULL_ROTATION && this.rd === 0) { + this.r -= 1 + } + + if (this.r >= FULL_ROTATION_EDGE && this.rd === 1) { + this.r = FULL_ROTATION_EDGE + this.rd = 0 + } + + if (this.r <= FULL_ROTATION && this.rd === 0) { + this.r = FULL_ROTATION + this.rd = 1 + } + + if (ctx.mouse['btn0'] && this.d === 0) { + this.d = 0 + this.md = 1 + } + + if (this.md > -1) { + if (this.d > this.len && this.md === 1) { + this.md = 0 + } + + if (this.d <= 2 && this.md === 0) { + this.d = 0 + this.md = -1 + this.x = this.rx + this.y = this.ry + + // Score + if (this.obj) { + this.player.score(this.obj) + this.obj.destroy() + this.obj = null + } + return + } + + let dir = rad2vec(deg2rad(90 - this.r)) + dir.x *= this.d + dir.y *= this.d + + this.x = this.rx + dir.x + this.y = this.ry + dir.y + + if (this.obj) { + this.obj.x = this.x - this.obj.w / 2 + this.obj.y = this.y + } + + // Detect intersection + if (this.md === 1) { + if (!this.obj) { + let firstIntersect + for (let i in level.objects) { + let obj = level.objects[i] + if (obj.physical && intersectRect(obj, this)) { + firstIntersect = obj + break + } + } + + if (firstIntersect) { + this.obj = firstIntersect + this.md = 0 + return + } + } + + if (this.player.superStrength) { + this.d += 10 + } else { + this.d += 5 + } + } else { + if (this.player.superStrength) { + this.d -= 10 + } else { + this.d -= this.obj ? 5 * (1 - this.obj.weight) : 10 + } + } + } + } +} + +export class Player extends GameObject { + constructor (x, y, mh) { + super(x, y, 60, 55, '#4d4b4f') + this.x = x + this.y = y + + this.hook = new Hook(this, this.x + this.w / 2, this.y + this.h, 20, 20, mh) + this.hook.r = FULL_ROTATION + + this.superStrength = false + } + + score (object) { + console.log('Scored', object) + } + + draw () { + // Draw player + super.draw() + + // Draw hook + this.hook.draw() + + // + } + + update (level) { + if (!level) return + this.hook.update(level) + } +} diff --git a/src/resource.js b/src/resource.js new file mode 100644 index 0000000..eb1bbe9 --- /dev/null +++ b/src/resource.js @@ -0,0 +1,103 @@ +/* global XMLHttpRequest, Image */ + +let imgCache = {} + +function powerOfTwo (n) { + return n && (n & (n - 1)) === 0 +} + +function GET (url, istext) { + return new Promise((resolve, reject) => { + var xmlHttp = new XMLHttpRequest() + + xmlHttp.onreadystatechange = function () { + if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { + resolve(xmlHttp.responseText) + } else if (xmlHttp.readyState === 4 && xmlHttp.status >= 400) { + let err = new Error(xmlHttp.status) + err.request = xmlHttp + reject(err) + } + } + + xmlHttp.open('GET', url, true) + istext && (xmlHttp.responseType = 'text') + xmlHttp.send(null) + }) +} + +function smartGET (data) { + if (typeof data === 'string') { + data = { + url: data, + type: 'text' + } + } + + if (!data.type) data.type = 'text' + let istext = (data.type !== 'image' && data.type !== 'file') + + let url = data.url + if (!url) throw new Error('URL is required!') + + if (data.type === 'json') { + return new Promise((resolve, reject) => { + GET(url).then((dtext) => { + try { + let jsonp = JSON.parse(dtext) + return resolve(jsonp) + } catch (e) { + reject(e) + } + }, reject) + }) + } + + return GET(data.url, istext) +} + +function loadImage (url, onlyReturn = false, nowarn = false) { + if (onlyReturn && imgCache[url]) { + return imgCache[url] + } + + // Ensure we don't load a texture multiple times + if (imgCache[url]) return new Promise((resolve, reject) => resolve(imgCache[url])) + + return new Promise((resolve, reject) => { + let img = new Image() + + img.onload = function () { + // Friendly warnings + if ((!powerOfTwo(img.width) || !powerOfTwo(img.height)) && !nowarn) { + console.warn(`warn: image ${url} does not have dimensions that are powers of two. 16x16 to 128x128 recommended.`) + } + + if ((img.width / img.height) !== 1 && !nowarn) { + console.warn(`warn: image ${url} does not have an aspect ratio of 1 to 1.`) + } + + imgCache[url] = img + resolve(img) + } + + img.onerror = function (e) { + reject(e) + } + + img.src = url + }) +} + +function imageToSampler (img) { + let canvas = document.createElement('canvas') + let ctx = canvas.getContext('2d') + canvas.width = img.width + canvas.height = img.height + ctx.drawImage(img, 0, 0, img.width, img.height) + return function (x, y) { + return ctx.getImageData(x, y, 1, 1).data + } +} + +export default { GET: smartGET, imageToSampler, loadImage } diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..42542ec --- /dev/null +++ b/src/utils.js @@ -0,0 +1,21 @@ + +// Utility function + +export function randomi (min, max) { + return Math.floor(Math.random() * (max - min) + min) +} + +export function deg2rad (deg) { + return deg * Math.PI / 180 +} + +export function rad2vec (r) { + return { x: Math.cos(r), y: Math.sin(r) } +} + +export function intersectRect (r1, r2) { + return !(r2.x > r1.w + r1.x || + r2.w + r2.x < r1.x || + r2.y > r1.h + r1.y || + r2.h + r2.y < r1.y) +} diff --git a/static/diamond.png b/static/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..ddfc42c9f6d673d007bc07f0770e11c30a45aa1d GIT binary patch literal 2186 zcmV;52zB>~P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jdGJ z5GM|({6WnC0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~000N! zNklsNT|f6M14k8NDzHMYH=(6OmHIgt&o8D2cQHY zHTW8W<6Phs|8{q#4`;qTXC_YMTO2Ms(#ZB+X6M|#^PMvWe&@p-=&g@FNeBU$?Ev%7 z0L}w_2e`akN`Uu3jB>5-fwl#PUO(G3dY{jvB)6MJzm<~QPf4%GD3jM>1cm|l*Sqe? zDq#6j*F!xMW zU=}QRjbU%L)y`$C@G3lz!y+sGjSJ=X0a56c>*??cuyN;|%!N}WGBX9*jrP61L#0^@ z4!y?l2#R@qD(2<065j+s>tUhM43nZ@MbjuSjw$yr3i#+hsX+RZr(`n!*7@0@{+QF- z@}8Ysm(LHqZaf&*=JT|0-)mS9SYrhK^qNfPOU`m21zi0sjdAXrEJ|hA&5W2}gtW

rw5V&;*i6mO3B0t>;9I=)Rwg&MN3EXeh6X^ z=Vi7n@a6>#r&@s%4|o(4B-^to=eg&rREDz9q5IPP0pRW(VSvoZ44JvPoHcrVzqYi+ zj<(foa%)|XzVPHB2mh=1&5vrMcV#L6hsZb2(!S$_e7|up-G52%L7`DFI8DTr;Yyuuup1 zyqVLByZB8O+y{*_AGAo>Toc@|yuYrhoJn)ui=uWbWMUK?+1}Ez<+fJ+4s^sJYK z0Ic3DGtV%Lvibt}Y#K`d&Ymv`QH}b@93V76+o(&PJrCT!Tc*K+NqPk{em9sN0Erbn z=FSfyJc$mK5~DIgXV&j~{id~i*J;6&z1@%Xv!$QTiEyho)!M@#8DVD1RJvHo9 z${qokA-Ou)8=tqBLuJszLZco;0c}XyJ_H4{p|rlDAw>m-F!l^e5WM<%8gnm&YZ_qj zoaS2#P?pFPR5gdg#wu{~xzg1Oik&od*^ZJm#N9huRPp_~j1ED8c6`nO8!NJx6qQ&3 zzy}xIO<+O995hqsp_~;Kr&HP0lnm#ylQNP_+uSK)Agn2B^W!DvA5# z{qf=Dz1pig#H6~rwZLk{ z#i;R54p0z#mSQ z>sf^o$%*1I0zcjt*JoR-G3N@=^dQz(lrdW6KgQ|@1Hq+Bt{_6R#>Q$HzZA||iSceb zMqO7bjyNzrliS~x?~iTyj3MMH-A?I!dldfQCqo2C%d45I$F_K*eSjE&?>Cel7te(f zP^rLs+Y(~zI9U&iFD?^~XOr9rD_EquQ8_YcV&3T;{i*TCC81inGZ_VzS9)NmROx4LsK1mCg8z6nausR z7eTkTC&@7$O8CQjfCa^|c7XEo7hh6VMl7HudA4AQ(4E`z^X#ieF-{rY2)tg(@Auz! zPd5Z=o?rzU3{5?KM%@kMx;tdNAD;s3=~CS{0DzYlrDi{|Aj184A9(Fe;M*Hze}O%MCm{I51CGT5c-Bx? zbIysyzy4Cf;HL*=ON|~dn*krb=YHJ^7<-Lr?3zE+KiKX6jAGo^KRf-h6;P*1+a~A9 zv;7~Sp$9(voBM5qz@v`d?12ecA?y8Pu>8|eK#dFb;G}7RzyI~v_w#fVz!Yf@H;$0p z{5sMgi4I(u0e&|Mn8q}wF^y?VV;a+##x$lejcH6{8q=7@G@i=%KR>ki$Pi3@!2kdN M07*qoM6N<$f^C*G;{X5v literal 0 HcmV?d00001 diff --git a/static/gold_1.png b/static/gold_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d493b197b105f23318e94ab7d3e55d7dcffdd75 GIT binary patch literal 6851 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�PGqF>l~xY$06ZUOxc%`lx-RV^n0sU^fWE} zy#T;P1j1ARXg;5YO$+kD`ej_35dK~P;35HHmIYuBPx#24YJ`L;%tNu>cQVRUYsF000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jdGJ z5DOdp5YC7I0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~0013b zNkl<$~1b|72zVi4t015!o02BZNxCC$!05|e+ zTHpQjJ{Wcy0A&cj^099+k;xOH`v5dRs`rB~0qiE=IwkJJbziOTeCmA-1lmo+U-{U# z*<>2QbP3CH=S9 z7o>9kH*TB810heSQZ~@f{uWx#{O!y^K-)_EPdp=5yJNz4t@#}Bonh;KEGIj;R>B6L zxdtTHSrxdD|Ia2F2*?xQ)r8oZ?<2K2()ZMyfHNoo2sc(5j3xM^zro+D7UUj0zCYJN z>*=q~3@!LRh5wJIS^X$5a`(%L4kOu%USE+hta6*Y1@oyn7f3DZy<7AYz6fE%ynu zzW*ncfq-UC{9pYq-nbs|i6NYm>h*OXz6u!Gr1+;m=T+V`*JjD!+!#B7a@>;=G<7vq z29B=l8RS3`OC@4NyyfJ|q(1AfOvt)CxEzVb;+4pWo>Rz%Ty|V6Ox5do0ad z0;qt&MRopL*Adq?%GoI%pc;S!T0i_+B_NnR03Lr5@Q(|(_`UkLOL)rK6OP%N(5WXs}*MZ~$OD1!f3D{`? zVM~B|O>C6g0)m7^e&4=a;=hf40)(#s(VP5x^p?ak%!tS&tGty*KQncJ$(!Ytt~~mi zK=L+P-}}AcpZWNI@D6!yVRxxuA0;B7bYS3dS6n;tG^9h$7N4Pe)0Bg~e-kXXU0 z4tOVdV`(nq2q!wR8xXo8L85S*q(c5)4I6&8&FUb2iwUTfvhcGD`B_u2J2T>v39AXa z2DsCJzbr;*ahi++0nM8DE5Gu0!mT6^8?$TUHh}mYCRo>x@6Ecwt^?s~Y$ba~f#5;W zi$iYPi4kY6@pY5S8Gv?7DtKZi%!|!!v-*WHs*60pKMnXzu`h~AfpL<+n-%d_9{)#n zmq-CN@7E^6vFoh=2NKA!1sz{xVy2>1)kmj@Nl85YUgkV~m@RFywhdmyFsTq{QOq

M!OhFOxwu8Z$`Ye1~u@cZ%GtRr0n z>pZ;t+Kpl{^}cJ}W=WG=6t%F|7qO=ioMF{6fFa7*0#qg8nfU((pw3)wuCY(wof%Fwh(JWME50e{Vc2lqKNSNxwY~MmOK|GSHyq6xias=rxL6MI*~(?K*F*O zKpnv9o2|*Df!*YYTYPcvO9JxQF!oRN)lC*P2B{L_|H?nGWojeQ>j?wF#Zq_?GFp?X z?9wDxB!#;%kmx-mbAT~G7&{o_(9O(2ia7KVR?odw5(Mi&_!Cw&dmRLN38;NoR6%() zFqIdu^4M3iv?##bZ9DAZnJd``H z0#jH+N=m1^%uh`vfL&uX;MRD9&Gkw`w2A=VBh&&yy+#OpfVyrF*UvFA3vQg6=irJy zw6_gHyTOuRg2?CO08sNe(eH%#Q5NfVhJ9~ybtWNMA|UVywE$3xdN!oF+(7f>p<*6_ zT9goLeGg+Glw6429ssO-^lPGXQp;09u!tphZ^YQUG}Giv3W9o#;CWl>^IU}H$%ErT zKnn2gk{pA#M*(2is2&hi9U3Gn1Asp3pK85H2`f#SHWW86=46PuwJp!@X`o(XX+ZhN z*bwmbgCO9Ho2n+fx^rq^qqMZ0Oa)M_m-`V5`ivNZS2>isjoCOQ(xBHa0Gi8Z!nXX zz=rI-n)PTSX9&+D)B`pSX-EqBr9Q7fa~gSM9o~e#x@vIL&O6Gf z+_XlbS_Fs(RvZ8mn7zJyfs_1u0H_XNNlLrd3P<^7EeSji(3+4KhcF~Gmm64pXJbon z$w5)Bdq~Xzs>U^cmDn(fRf~6bH(J+v{y)0!K6GXgS{3YsF9HA;31g}mNq}xyvU~{z z;Pfv^k;lgFijzt3$QQd{Ykc74=f2)A1>jZ3o%#R}+|O0M-Vv@5%&jm~Fjeu3bGhoO znFfM#?c3yYR|_DuYY}$i3Ved6F;G2aZlTLHrB;DHaWD0uOl@vqb>j%JsnA>MwzthX z5}4O-@Ob0QZS2;Sssthoj1qPWNBT;&r`Q*Lgo8|DYzk*9B!0K{a7fH!Y5??Au}V2K zLg}vB1Ag=%DV3ILn`_ln6jP0pG&DC}Z&!x$+UTO$Y9v6s#maO!-BYFmcqgO)b?>aX zywLk*^g0(^nrjt=uO;QI4~X6vO@Q#%BCno?v+P0-L3E&a|#GD}C-?aenJiuClb-?|n7ElWa zUe!s!)EFB;3^yo9LltnpclX%Vu}W-!)>EICW`{_obHoe+s&RRkIv|$l?z96uO{huc zuvR1JSukn06R3X=Uh0cGRIpR&Y@ythW>yy79}94~h*vsCXKB}Z14NuYPU8YpIZl;u ze{Dp(p~?pec;Deqdbbtop|msBJ6fuV@s3()M{f!JKOG3Qw4tksfK~_q#Yc`1yFT8s zggn*zjQUE3NcFpagNVWzN}3J;s*xKkRi1tmQKv;)8-&ive4=

!#ys#lQqMMiI+_1u$#KVxoo_em>mZ_|^qpFSX= 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 AO8@`> literal 0 HcmV?d00001 diff --git a/static/gold_3.png b/static/gold_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a48bded40fead49fde1b3db4e38f0934859ae3f8 GIT binary patch literal 7503 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 Hu0mjfy-U;O literal 0 HcmV?d00001 diff --git a/static/loot.png b/static/loot.png new file mode 100644 index 0000000000000000000000000000000000000000..3bbf04af21bb8cf99ab33bed1b829a5017844319 GIT binary patch literal 10487 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 literal 0 HcmV?d00001 diff --git a/static/rock_1.png b/static/rock_1.png new file mode 100644 index 0000000000000000000000000000000000000000..02d0b66eb2eb81c28ca3cd3b1c46650e5760f153 GIT binary patch literal 5032 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 literal 0 HcmV?d00001 diff --git a/static/rock_3.png b/static/rock_3.png new file mode 100644 index 0000000000000000000000000000000000000000..116f83f711964b24c61911d27a4c0f00bd72325b GIT binary patch literal 4163 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 { + return { + entry: './src/index.js', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'app.js' + }, + module: { + rules: [ + { + test: /\.js$/, + exclude: /(node_modules)/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'] + } + } + } + ] + }, + devtool: env.mode === 'development' ? 'inline-source-map' : '', + plugins: [ + new HtmlWebpackPlugin({ template: 'index.html' }) + ] + } +}