2,532 game.js

Large diffs are not rendered by default.

BIN -12 Bytes (100%) img/playerlife.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN +3.8 KB img/sidebar.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN +166 Bytes (100%) img/start.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -5,11 +5,11 @@
<link rel="stylesheet" href="style.css" />
</head>
<body>
<canvas id="canvas" width="240" height="320"></canvas>
<canvas id="canvas" width="426" height="320"></canvas>
<script>if(typeof module == 'object') window.module = module; module = undefined;</script>
<script src="zepto.js"></script>
<script src="howl.js"></script>
<script src="game.js"></script>
<script>initGame();</script>
<script>$(initGame);</script>
</body>
</html>
@@ -1,7 +1,7 @@
const electron = require('electron'), path = require('path'), url = require('url'), storage = require('electron-json-storage'), scale = 2;
let mainWindow;
const app = electron.app, browserWindow = electron.BrowserWindow,
winWidth = 240, winHeight = 320;
winWidth = 426, winHeight = 320;

createWindow = function(){
mainWindow = new browserWindow({
@@ -260,7 +260,7 @@ const bulletsEnemies = {
},

lunasaSpray(enemy){
const id = randomId(), angleDiff = .02, bulletSize = 10;
const id = randomId(), angleDiff = .015, bulletSize = 10;
const bulletObj = {
id: id,
image: img.bulletBlue,
@@ -1,4 +1,6 @@
const totalTime = 75 * 60;
const totalTime = 75 * 60, sidebarWidth = winWidth - gameWidth, sidebarX = gameWidth, chromeX = sidebarX + 7 + 8,
scoreX = chromeX + grid * 7 - 5;

// const totalTime = 120;

let bossData = false, timeLeft = totalTime, timeString = String(totalTime), savedScore = false, gotHighScore = false;
@@ -19,7 +21,7 @@ const chrome = {
minutesLeft = Math.floor(timeLeft / 60 / 60 % 60), processTime = input => {
return input < 10 ? '0' + String(input) : String(input);
}
millisecondsLeft = processTime(millisecondsLeft);
millisecondsLeft = processTime(millisecondsLeft).substring(1);
secondsLeft = processTime(secondsLeft);
minutesLeft = processTime(minutesLeft).substring(1);
timeString = minutesLeft + ':' + secondsLeft + ':' + millisecondsLeft;
@@ -43,23 +45,19 @@ const chrome = {
},

draw(){
const score = () => {
const y = 4;
utilities.drawString('score'.toUpperCase(), 6, 4, true);
utilities.drawString(chrome.processScore(currentScore), 6, 4 + grid);
const highStr = 'high'.toUpperCase(), scoreStr = chrome.processScore(highScore);
utilities.drawString(highStr, utilities.centerTextX(highStr), y, true);
utilities.drawString(scoreStr, utilities.centerTextX(scoreStr), y + grid);
}, boss = () => {
const height = 9, width = grid * 4, y = grid + 8, x = gameWidth - 8 - width;
let lifeNum = Math.round(width * (bossData.life / bossData.lifeMax));
if(lifeNum < 0) lifeNum = 0;
drawRect(x, y, width, height, colors.purple)
drawRect(x + (width - lifeNum), y, lifeNum, height, colors.red)
drawRect(x, y + height, width, 1, colors.dark)
const bg = () => {
drawImg(img.sidebar, sidebarX, 0)
}, score = () => {
const y = 12;
utilities.drawString('hiscore'.toUpperCase(), chromeX, y);
utilities.drawString('score'.toUpperCase(), chromeX, y + grid);
utilities.drawString(chrome.processScore(highScore), scoreX, y);
utilities.drawString(chrome.processScore(currentScore), scoreX, y + grid);
}, time = () => {
if(!timeString) timeString = '0:00:00';
utilities.drawString(timeString, gameWidth - grid * 3.5 - 8, 4)
const y = 12 + grid * 2.5;
utilities.drawString('time'.toUpperCase(), chromeX, y);
utilities.drawString(timeString, scoreX, y)
}, gameOverScreen = () => { drawImg(img.screen, 0, 0);
}, gameOverOverlay = () => {
const gameOverStr = finishedGame ? 'level over' : 'game over',
@@ -74,19 +72,37 @@ const chrome = {
utilities.drawString(scoreStr, utilities.centerTextX(scoreStr), scoreY + grid * 2);
}
}, lives = () => {
const y = grid * 3 + 8;
for(i = 0; i < player.data.lives - 1; i++) drawImg(img.playerlife, 8 + (grid + 2) * i, y);
const y = 12 + grid * 3.5;
utilities.drawString('player'.toUpperCase(), chromeX, y);
for(i = 0; i < player.data.lives - 1; i++) drawImg(img.playerlife, scoreX, y + 1);
}, power = () => {
const y = 12 + grid * 4.5;
let power = String(player.data.powerLevel) + '%';
if(player.data.powerLevel < 10) power = '0' + power;
utilities.drawString(power, 6, grid * 2 + 4);
}
if(gameOver) gameOverScreen();
if(player.data.powerLevel == 100) power = 'MAX';
utilities.drawString('power'.toUpperCase(), chromeX, y);
utilities.drawString(power, scoreX, y);
}, version = () => {
utilities.drawString('v' + versionNum.toUpperCase(), sidebarX + grid * 2 + 2, gameHeight - grid * 1.5 - 6, true);
}, boss = () => {
const height = 8, width = gameWidth - grid * 2, y = grid, x = grid;
let lifeNum = Math.round(width * (bossData.life / bossData.lifeMax));
if(lifeNum < 0) lifeNum = 0;
drawRect(x, y, width, height, colors.purple)
drawRect(x, y, lifeNum, height, colors.red)
drawRect(x, y + height, width, 1, colors.dark)
};

bg();
score();
time();
if(player.data.lives) lives();
power();
time();
version();


if(gameOver) gameOverScreen();
if(bossData) boss();
if(player.data.lives) lives();
if(gameOver) gameOverOverlay();

}
@@ -5,6 +5,7 @@ const collisions = {
playerPartitions: [],
playerShotPartitions: [],
dropPartitions: [],
shotPartitions: [],

get(section, element, arr, isDrop){
let leftX = element.x - collisions.size, rightX = element.x + element.width,
@@ -64,6 +65,7 @@ const collisions = {
collisions.playerPartitions = [];
collisions.playerShotPartitions = [];
collisions.dropPartitions = [];
collisions.shotPartitions = [];

collisions.dump.forEach(section => {
collisions.get(section, collisions.playerObj(), collisions.playerPartitions); // getting player
@@ -85,6 +87,11 @@ const collisions = {

const checkBulletsWithPlayer = () => {
let hitPlayer = false, hitGraze = false;
// whoa why is this not done




for(id in bulletsEnemies.dump){
bullet = bulletsEnemies.dump[id];
const bulletObj = {
@@ -95,7 +102,7 @@ const collisions = {
}, playerCollision = () => {
checkCollision(collisions.boundingBox(), bulletObj, () => {
hitPlayer = true;
explosions.spawn(bulletObj, {x: player.data.position.x, y: player.data.position.y, height: player.data.size.y, width: player.data.size.x});
explosions.spawn(bulletObj);
});
}
if(!bullet.grazed){
@@ -132,7 +139,7 @@ const collisions = {
enemy.health -= 1;
if(bossData) bossData.life -=1;
delete bulletsPlayer.dump[shotId];
explosions.spawn(shotObj, enemyObj);
explosions.spawn(shotObj);
});
}
});
@@ -148,10 +155,9 @@ const collisions = {
enemy.health -= 1 * healthMultiplier;
if(bossData) bossData.life -= 1 * healthMultiplier;
const enemyObj = {x: enemy.position.x, y: enemy.position.y, width: enemy.size.x, height: enemy.size.y};
const focusObj = {x: player.data.focusData.x - 12, y: enemyObj.y, width: player.data.focusData.width, height: enemyObj.height};
explosions.spawn(focusObj, enemyObj);
const focusObj = {x: player.data.focusData.x, y: enemyObj.y, width: player.data.focusData.width, height: enemyObj.height};
explosions.spawn(focusObj);
player.data.focusColliding = true;
// player.data.focusData.y = enemy.position.y + enemy.size.y;
} else if(player.data.focusColliding) player.data.focusColliding = false;

}
@@ -207,9 +213,11 @@ const collisions = {
drawRect(section.x, section.y, 1, collisions.size, 'green');
drawRect(section.x, section.y + collisions.size, collisions.size, 1, 'green');
}, drawPlayer = () => {
if(collisions.playerPartitions.indexOf(section.id) > -1) drawRect(section.x, section.y, collisions.size, collisions.size, 'red');
if(collisions.playerPartitions.indexOf(section.id) > -1) drawRect(section.x, section.y, collisions.size, collisions.size, colors.red);
}, drawPlayerShots = () => {
if(collisions.playerShotPartitions.indexOf(section.id) > -1) drawRect(section.x, section.y, collisions.size, collisions.size, 'red');
if(collisions.playerShotPartitions.indexOf(section.id) > -1) drawRect(section.x, section.y, collisions.size, collisions.size, colors.red);
}, drawShots = () => {
if(collisions.playerShotPartitions.indexOf(section.id) > -1) drawRect(section.x, section.y, collisions.size, collisions.size, colors.red);
};
context.save();
context.globalAlpha = 0.5;
@@ -1,12 +1,11 @@
let currentWave = 'one';
let currentWave = 'lunasa';

const enemies = {

dump: {},
data: {},
waves: {},
dump: {}, data: {}, waves: {},

spawn(enemy){
enemies.shown = false;
enemies.dump[enemy.id] = enemy;
},

@@ -15,8 +14,10 @@ const enemies = {
for(id in enemies.dump){
const enemy = enemies.dump[id];
enemy.update();
if(enemy.position.y + enemy.size.y < -enemy.size.y || enemy.position.y > gameHeight ||
enemy.position.x + enemy.size.x < -enemy.size.x || enemy.position.x > gameWidth) delete enemies.dump[id];
if(enemy.position.y + enemy.size.y >= 0 && enemy.position.x + enemy.size.y >= 0 &&
enemy.position.x <= gameWidth && !enemy.shown) enemy.shown = true;
if((enemy.position.y + enemy.size.y < -enemy.size.y || enemy.position.y > gameHeight || enemy.position.x + enemy.size.x < -enemy.size.x ||
enemy.position.x > gameWidth) && enemy.shown) delete enemies.dump[id];
if(enemy.health < 1){
currentScore += enemy.score;
drop.spawn(enemy);
@@ -2,23 +2,24 @@ enemies.data.lunasa = () => {
const id = randomId();
const enemyObj = {
id: id,
health: 220,
health: 350,
size: {x: 26, y: 60},
frames: true,
moving: {left: false, right: true},
direction: 0,
image: img.lunasa,
waveStarted: false,
speed: 1.25,
waveInterval: 60 * 4.4,
startSpeed: 2.6,
waveInterval: 60 * 5.5,
startSpeed: 4.85,
startSpeedDiff: 0.125,
clock: 0,
bobInterval: 90,
spine: {
size: {x: 2, y: 2},
shotInterval: 10,
secondShotInterval: 2,
speedMod: 2.5
shotInterval: 15,
secondShotInterval: 3,
speedMod: 2
},
spray: {
angle: 0,
@@ -94,14 +95,20 @@ enemies.data.lunasa = () => {
}
if(enemy.startSpeed > 0){
enemy.position.y += enemy.startSpeed;
enemy.startSpeed -= 0.03;
enemy.startSpeed -= enemy.startSpeedDiff;
} else {
enemy.spray.position.y = enemy.position.y;
checkMove();
const waveLimit = 2;
if(enemy.clock < enemy.waveInterval * waveLimit) spawns.spine();
else if(enemy.clock >= enemy.waveInterval * waveLimit && enemy.clock < enemy.waveInterval * (waveLimit * 2)) spawns.spray();
else if(enemy.clock >= enemy.waveInterval * (waveLimit * 2)){
const waveLimit = 1;
if(enemy.clock < enemy.waveInterval || enemy.clock >= enemy.waveInterval * 2 && enemy.clock < enemy.waveInterval * 3) spawns.spine();
else if(enemy.clock >= enemy.waveInterval && enemy.clock < enemy.waveInterval + 180) spawns.spray();

// if(enemy.clock < enemy.waveInterval * waveLimit ||
// (enemy.clock >= enemy.waveInterval * waveLimit * 2 &&
// enemy.clock < enemy.waveInterval * waveLimit * 3)) spawns.spine();
// else if(enemy.clock >= enemy.waveInterval * waveLimit && enemy.clock < enemy.waveInterval * (waveLimit * 2)) spawns.spray();

if(enemy.clock >= enemy.waveInterval * 4){
enemy.moving.right = false;
enemy.moving.left = false;
enemy.position.x -= enemy.speed;
@@ -116,6 +123,162 @@ enemies.data.lunasa = () => {
return enemyObj;
};

// enemies.data.lunasa = () => {
// const id = randomId();
// const enemyObj = {
// id: id,
// health: 220,
// size: {x: 26, y: 60},
// frames: true,
// image: img.lunasa,
// clock: 0,
// score: 20000,
// first: {
// angle: 0
// },
// waveTime: 300
// };
// enemyObj.position = {x: gameWidth / 2 - enemyObj.size.x / 2, y: grid * 3};
// bossData = {
// name: 'lunasa',
// life: enemyObj.health,
// lifeMax: enemyObj.health
// };
// const spawns = {
// first(enemy){
// if(enemy.clock % 3 == 0){
// const firstLimit = 50;
// if(enemy.clock % firstLimit < firstLimit / 5 * 2){
// const count = 12;
// for(i = 0; i < count; i++){
// bulletsEnemies.spawn('lunasaFirst', enemy, {angle: enemy.first.angle});
// bulletsEnemies.spawn('lunasaFirst', enemy, {angle: enemy.first.angle, opposite: true});
// enemy.first.angle += Math.PI / count * 2;
// }
// }
// else if(enemy.clock % firstLimit == firstLimit / 5 * 2) enemy.first.angle += Math.PI / 35
// }
// },
// second(enemy){
// if(enemy.clock % 6 == 0) bulletsEnemies.spawn('lunasaSecond', enemy);
// if(enemy.clock % 40 == 0) bulletsEnemies.spawn('lunasaSecondOrb', enemy);
// },
// third(enemy){
// if(enemy.clock % 5 == 0) bulletsEnemies.spawn('lunasaThird', enemy);
// }
// };
// enemyObj.update = () => {
// const enemy = enemies.dump[id];
// if(enemy.clock < enemy.waveTime) spawns.first(enemy);
// else if(enemy.clock >= enemy.waveTime) spawns.second(enemy);
// // spawns.second(enemy);
// enemy.clock++;
// };
// return enemyObj;
// };

bulletsEnemies.data.lunasaFirst = (enemy, opts) => {
const id = randomId(), bulletSize = 10;
return {
id: id,
image: img.bulletBlue,
size: {x: bulletSize, y: bulletSize},
position: {x: enemy.position.x + enemy.size.x / 2 - bulletSize / 2, y: enemy.position.y + enemy.size.y / 2 + bulletSize / 2},
speed: {x: 4, y: 4},
angle: 0,
update(){
const bullet = bulletsEnemies.dump[id], angleDiff = 0.025;
bullet.position.x += Math.cos(opts.angle + bullet.angle) * bullet.speed.x;
bullet.position.y += Math.sin(opts.angle + bullet.angle) * bullet.speed.x;
bullet.angle += opts.opposite ? angleDiff : -angleDiff;
}
}
};

bulletsEnemies.data.lunasaSecond = enemy => {
const id = randomId(), bulletSize = 16, bulletX = enemy.position.x + enemy.size.x / 2 - bulletSize / 2,
bulletY = enemy.position.y + enemy.size.y / 2 + bulletSize / 2;
const bulletObj = {
id: id,
image: img.bulletRedBig,
size: {x: bulletSize, y: bulletSize},
position: {x: bulletX, y: bulletY},
speed: 3.25,
update(){
const bullet = bulletsEnemies.dump[id];
bullet.position.x += -Math.cos(bullet.angle) * bullet.speed;
bullet.position.y += -Math.sin(bullet.angle) * bullet.speed;
}
};
bulletObj.angle = getAngle(bulletObj, player.data);
bulletObj.angle += Math.random() * 1.5 - 0.75;
return bulletObj;
};

bulletsEnemies.data.lunasaSecondOrb = enemy => {
const id = randomId(), bulletSize = 16;
const bulletObj = {
id: id,
image: img.bulletBlueBig,
size: {x: bulletSize, y: bulletSize},
position: {x: enemy.position.x + enemy.size.x / 2 - bulletSize / 2, y: enemy.position.y + enemy.size.y / 2 + bulletSize / 2},
speed: 5,
speedDiff: 0.15,
finished: false,
update(){
const bullet = bulletsEnemies.dump[id];
bullet.position.x += -Math.cos(bullet.angle) * bullet.speed;
bullet.position.y += -Math.sin(bullet.angle) * bullet.speed;
if(bullet.speed > 0) bullet.speed -= bullet.speedDiff;
else if(bullet.speed < 0) bullet.speed = 0;
else if(bullet.speed == 0 && !bullet.finished){
bullet.finished = true;
const timeDiff = 30, opts = {
angle: getAngle({
position:{x: bullet.position.x + bullet.size.x / 2, y: bullet.position.y + bullet.size.y / 2},
size: {x: 10, y: 10}
}, player.data)
};
bulletsEnemies.spawn('lunasaSecondRay', bullet, opts);
setTimeout(() => {bulletsEnemies.spawn('lunasaSecondRay', bullet, opts)}, timeDiff);
setTimeout(() => {bulletsEnemies.spawn('lunasaSecondRay', bullet, opts)}, timeDiff * 2);
setTimeout(() => {bulletsEnemies.spawn('lunasaSecondRay', bullet, opts);}, timeDiff * 3);
setTimeout(() => {bulletsEnemies.spawn('lunasaSecondRay', bullet, opts);}, timeDiff * 4);
// explosions.spawn(
// {},
// {x: player.data.position.x, y: player.data.position.y, height: player.data.size.y, width: player.data.size.x}
// );

delete bulletsEnemies.dump[id];
}
}
}, angleObj = {
position: {x: Math.floor(Math.random() * gameWidth) + 1, y: Math.floor(Math.random() * gameHeight / 3) + 1},
size: {x: 2, y: 2}
};
bulletObj.angle = getAngle(bulletObj, angleObj);
return bulletObj;
};

bulletsEnemies.data.lunasaSecondRay = (parent, opts) => {
const bulletSize = 10, id = randomId();
const bulletObj = {
id: id,
image: img.bulletBlue,
size: {x: bulletSize, y: bulletSize},
position: {x: parent.position.x + parent.size.x / 2, y: parent.position.y + parent.size.y / 2},
speed: -0.5,
speedDiff: 0.05,
update(){
const bullet = bulletsEnemies.dump[id];
bullet.position.x += -Math.cos(opts.angle) * bullet.speed;
bullet.position.y += -Math.sin(opts.angle) * bullet.speed;
bullet.speed += bullet.speedDiff;
}
};
return bulletObj;
};

enemies.waves.lunasa = () => {
enemies.spawn(enemies.data.lunasa());
currentWave = 'three';
@@ -10,7 +10,8 @@ enemies.data.lyrica = () => {
image: img.lyrica,
waveStarted: false,
speed: 1.25,
startSpeed: 2.6,
startSpeed: 4.85,
startSpeedDiff: 0.125,
waveInterval: 60 * 4.25,
clock: 0,
spray: {
@@ -89,7 +90,7 @@ enemies.data.lyrica = () => {
};
if(enemy.startSpeed > 0){
enemy.position.y += enemy.startSpeed;
enemy.startSpeed -= 0.03;
enemy.startSpeed -= enemy.startSpeedDiff;
} else {
checkMove();
const waveLimit = 2;
@@ -9,7 +9,8 @@ enemies.data.merlin = () => {
image: img.merlin,
waveStarted: false,
speed: 1.25,
startSpeed: 2.6,
startSpeed: 4.85,
startSpeedDiff: 0.125,
waveInterval: 60 * 10,
clock: 0,
bobInterval: 90,
@@ -82,7 +83,7 @@ enemies.data.merlin = () => {
}
if(enemy.startSpeed > 0){
enemy.position.y += enemy.startSpeed;
enemy.startSpeed -= 0.0325;
enemy.startSpeed -= enemy.startSpeedDiff;
} else {
if(enemy.clock % enemy.waveInterval < enemy.waveInterval / 2){
spawns.sprayBlue();
@@ -2,7 +2,7 @@ enemies.data.one = pos => {
const id = randomId();
const enemyObj = {
id: id,
isLeft: pos > gameWidth / 2,
isLeft: pos.x > gameWidth / 2,
size: {x: 18, y: 26},
destination: {
size: {x: player.data.size.x, y: player.data.size.y},
@@ -12,28 +12,34 @@ enemies.data.one = pos => {
finished: false,
angle: 0,
clock: 0,
health: 4,
speedMod: 0.025,
score: 1500
health: 5,
speedMod: 0.04,
score: 1500,
position: pos
};
enemyObj.speed = {x: enemyObj.isLeft ? -1 : 1, y: 1.25};
enemyObj.position = {x: pos, y: -enemyObj.size.y};
enemyObj.speed = {x: enemyObj.isLeft ? -1.35 : 1.35, y: 1.4};
enemyObj.position.x -= enemyObj.size.x / 2;
enemyObj.position.y -= enemyObj.size.y / 2;
if(!enemyObj.isLeft) enemyObj.speedMod = -enemyObj.speedMod;
enemyObj.update = () => {
const enemy = enemies.dump[id];
enemy.position.x += enemy.speed.x;
enemy.position.y += enemy.speed.y;
enemy.speed.x += enemyObj.speedMod;
if(enemy.clock == 30 && !enemy.finished){
enemy.finished = true;
modifiedAngle = 0;
bulletsEnemies.spawn('enemyOne', enemy);
bulletsEnemies.spawn('enemyOne', enemy);
bulletsEnemies.spawn('enemyOne', enemy);
bulletsEnemies.spawn('enemyOne', enemy);
spawnSound.bulletOne()
};
enemy.clock++;

if(enemy.shown){
enemy.position.x += enemy.speed.x;
enemy.speed.x += enemyObj.speedMod;
if(enemy.clock == 30 && !enemy.finished){
enemy.finished = true;
modifiedAngle = 0;
bulletsEnemies.spawn('enemyOne', enemy);
bulletsEnemies.spawn('enemyOne', enemy);
bulletsEnemies.spawn('enemyOne', enemy);
bulletsEnemies.spawn('enemyOne', enemy);
spawnSound.bulletOne()
};
enemy.clock++;
}

}
return enemyObj;
};
@@ -47,12 +53,13 @@ enemies.data.two = isRight => {
speed: 3.25,
speedMod: 0.04,
clock: 0,
health: 16,
health: 20,
finished: false,
sprayAngle: 0,
score: 5500
};
enemyObj.position = {x: isRight ? gameWidth - grid * 3 - enemyObj.size.x : grid * 3, y: -enemyObj.size.y};
if(isRight) enemyObj.position.y *= 2.5;
enemyObj.update = () => {
const enemy = enemies.dump[id];
enemy.position.y += enemy.speed;
@@ -80,26 +87,23 @@ enemies.data.two = isRight => {
};

enemies.waves.one = () => {
const offset = 4.5;
const lPos = grid * offset, rPos = gameWidth - grid * offset - 18, diff = 350;
enemies.spawn(enemies.data.one(lPos));
setTimeout(() => { enemies.spawn(enemies.data.one(lPos)); }, diff);
setTimeout(() => { enemies.spawn(enemies.data.one(lPos)); }, diff * 2);
setTimeout(() => { enemies.spawn(enemies.data.one(lPos)); }, diff * 3);
setTimeout(() => { enemies.spawn(enemies.data.one(rPos)); }, diff * 4);
setTimeout(() => { enemies.spawn(enemies.data.one(rPos)); }, diff * 5);
setTimeout(() => { enemies.spawn(enemies.data.one(rPos)); }, diff * 6);
setTimeout(() => {
enemies.spawn(enemies.data.one(rPos));
currentWave = 'two';
}, diff * 7);
const yOffset = grid * 8;
const lX = grid * 4.5, lY = -grid * 2, rX = gameWidth - lX - 18, rY = lY - yOffset, lYB = rY - yOffset;
enemies.spawn(enemies.data.one({x: lX, y: lY}));
enemies.spawn(enemies.data.one({x: lX, y: lY - grid * 2}));
enemies.spawn(enemies.data.one({x: lX, y: lY - grid * 4}));
enemies.spawn(enemies.data.one({x: rX, y: rY}));
enemies.spawn(enemies.data.one({x: rX, y: rY - grid * 2}));
enemies.spawn(enemies.data.one({x: rX, y: rY - grid * 4}));
enemies.spawn(enemies.data.one({x: lX, y: lYB}));
enemies.spawn(enemies.data.one({x: lX, y: lYB - grid * 2}));
enemies.spawn(enemies.data.one({x: lX, y: lYB - grid * 4}));
currentWave = 'two';
};

enemies.waves.two = () => {
const timeout = 350;
enemies.spawn(enemies.data.two());
setTimeout(() => {
enemies.spawn(enemies.data.two(true));
currentWave = 'lunasa';
}, timeout);
enemies.spawn(enemies.data.two(true));
currentWave = 'lunasa';
};
@@ -13,15 +13,11 @@ const explosions = {
}
},

spawn(bullet, enemy){
spawn(bullet){
if(explosions.spawnClock == 0){
const explosionObj = explosions.data();
explosionObj.x = (bullet.x + bullet.width / 2) - (explosionObj.size / 2);
explosionObj.y = (bullet.y + bullet.height / 2) - (explosionObj.size / 2);
if(enemy){
explosionObj.x += enemy.width / 2;
explosionObj.y += enemy.height / 2;
}
explosionObj.offset = -explosionObj.size;
explosions.dump.push(explosionObj);
explosions.spawnClock = 1;
@@ -13,8 +13,8 @@ const updateLoop = () => {
drawLoop = () => {
background.draw();
player.draw();
drop.draw();
bulletsPlayer.draw();
drop.draw();
bulletsEnemies.draw();
enemies.draw();
explosions.draw();
@@ -1,9 +1,14 @@
let gameClock = 0, logged = false, fpsStart = 0, fpsFrame = 0, currentFps = 0, gameOver = false, savedData = {}, finishedGame = false,
currentScore = 0, highScore = 0;

const canvas = document.getElementById('canvas'), canvasEl = $('canvas'), grid = 16, gameWidth = 240, gameHeight = 320, introTime = 0,
const canvas = document.getElementById('canvas'), canvasEl = $('canvas'), grid = 16, introTime = 0,
{app} = require('electron').remote, browserWindow = require('electron').remote, storage = require('electron-json-storage'),
context = canvas.getContext('2d'), mainWindow = browserWindow.getCurrentWindow(),
gameWidth = 240,
gameHeight = 320,
winWidth = 426,

versionNum = '0.03-redditaisai',

colors = {
purple: '#442434',
@@ -22,8 +27,8 @@ colors = {
},

getAspect = () => {
var newWidth = $(window).width(), newHeight = $(window).height(), remHeight = $(window).width() * (1 + 1 / 3),
remWidth = $(window).height() * 0.75;
var newWidth = $(window).width(), newHeight = $(window).height(), remHeight = $(window).width() * 0.75,
remWidth = $(window).height() * (1 + 1 / 3);
if(newWidth >= remWidth) newWidth = remWidth;
else if(newHeight > remHeight) newHeight = remHeight;
return {width: newWidth, height: newHeight};
@@ -178,7 +183,7 @@ utilities = {
},

centerTextX(str){
return gameWidth / 2 - str.length * 8 / 2;
return winWidth / 2 - str.length * 8 / 2;
}

};
@@ -28,3 +28,4 @@ addImage('startLogo', 'startlogo');
addImage('start', 'start');
addImage('explosion', 'explosions');
addImage('screen', 'screen');
addImage('sidebar', 'sidebar');
@@ -19,7 +19,7 @@ const player = {
speed: 3,
speedSlow: 1,
powerInterval: 140,
powerLevel: 100,
powerLevel: 0,
powerDiff: 3,
gameOverTime: false,
gameOverLimit: 60 * 10,
@@ -71,7 +71,8 @@ const player = {
else if(player.data.moving.right) xOffset = player.data.size.x * 2
context.drawImage(img.player, xOffset, 0, 28, 42, player.data.position.x, player.data.position.y, player.data.size.x, player.data.size.y);
yinYangs();
if(player.data.focus) focus();
// if(player.data.focus) focus();
focus();
}
}

@@ -9,7 +9,7 @@ const start = {
draw(){

const logo = () => {
const x = gameWidth / 2 - 192 / 2, y = grid * 1.5;
const x = winWidth / 2 - 192 / 2, y = grid * 1.5;
drawImg(img.startLogo, x, y);
}, prompt = () => {
const str = 'press shot', y = grid * 7;
@@ -20,18 +20,17 @@ const start = {
utilities.drawString(scoreStr, utilities.centerTextX(scoreStr), y + grid);
}, instructions = () => {
const strs = [
'stick: move 8 directions',
'pad a/x: shot',
'pad b/y: focus',
'start: Restart'
// 'F: Fullscreen'
'z: shot',
'x: focus',
'r: restart',
'f: fullscreen'
], y = grid * 11;
strs.forEach((str, i) => {
utilities.drawString(str.toUpperCase(), utilities.centerTextX(str), y + grid * i);
});
}, credit = () => {
const str = '2018 peace research'.toUpperCase(), y = gameHeight - grid * 3.5,
verStr = 'build 18.7.23-FUCN'.toUpperCase();
const str = '2018 t.boddy'.toUpperCase(), y = gameHeight - grid * 3.5,
verStr = 'TEST BUILD v' + versionNum.toUpperCase();
utilities.drawString(str, utilities.centerTextX(str), y, true);
utilities.drawString(verStr, utilities.centerTextX(verStr), y + grid, true);
};