From 1154147739630df063eb66550d81898ede49978e Mon Sep 17 00:00:00 2001 From: Markus Scully Date: Sat, 20 Jul 2013 14:20:11 +0100 Subject: [PATCH] Version 0.3.4 Changed level design, colouring, added better borders, added ability for different sized actors but only multiples of 16 work, removed enemy, fixed particles being stuck above y 216 and removed their reflections. Added start of main menu. --- Sint.zip | Bin 0 -> 10968 bytes sint.js | 249 ++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 183 insertions(+), 66 deletions(-) create mode 100644 Sint.zip diff --git a/Sint.zip b/Sint.zip new file mode 100644 index 0000000000000000000000000000000000000000..5fc2c80192e62bb6ca118768c1fbf94cf2c0579d GIT binary patch literal 10968 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 F2LPi+2EYIS literal 0 HcmV?d00001 diff --git a/sint.js b/sint.js index 8e1e930..dfb5616 100644 --- a/sint.js +++ b/sint.js @@ -31,8 +31,8 @@ function reset(){ // Create arrays actors = []; controllers = []; - controllers = []; particles = []; + camera = []; ais = []; keys = []; test = []; @@ -44,26 +44,36 @@ function reset(){ sound = { shoot1: new Audio('sfx.wav') } - game = 'menu'; + //play(); + game = 'playing'; + play(); + ui = { + select : 0, + area : 0 + } + menu = [ + [ + ['Singleplayer', 2, true], + ['Multiplayer', 3, false], + ['Options', 1, false] + ], + [ + ['Music', 's', 0, 0, 100, false], + ['Sound', 's', 0, 0, 100, false], + ], + ['r', 'play'] + ] lastspeed = 0; - // Create 2 actors - actors[0] = new Actor(0, 'player', 200, 3, 80, 80); - //actors[1] = new Actor(1, 'player', 200, 3, 50, 5); - actors[1] = new Actor(6, 'all', 50, 3, 70, 80); + //controllers[1] = new Controller(actors[2], [[39, 'moveRight'], [37, 'moveLeft'], [38, 'jump'], [88, 'camera'], [78, 'bounce', 100]]); - // Create player key controllers. - controllers[0] = new Controller(actors[0], [[68, 'moveRight'], [65, 'moveLeft'], [87, 'jump'], [67, 'camera'], [77, 'dark', 100], [83, 'shoot']]); - //controllers[1] = new Controller(actors[1], [[39, 'moveRight'], [37, 'moveLeft'], [38, 'jump'], [88, 'camera'], [78, 'bounce', 100]]); - - ais[0] = new Ai(1, 'alphaBot'); + //ais[0] = new Ai(1, 'alphaBot'); // type, affiliation, lifespan, xpos, ypos, xvel, yvel particles[0] = new Particle('mouse', 0, 10000000000, 0, 0, 0, 0); - camera = [actors[0]]; // Set camera. - canvas.style.background = '#ddf'; // Set canvas style. - level = 0 // Set level + canvas.style.background = '#fff'; // Set canvas style + level = 2 // Set level canvas.style.display = 'block'; // Set up canvas canvas.style.border = '1px solid #ddd'; spritesheet = new Image(); // Define spritesheet @@ -74,19 +84,29 @@ function reset(){ animate(); } +function play(){ + // Create player and its key controller + actors[0] = new Actor(0, 'player', 200, 3, 80, 80, 16, 16); + controllers[0] = new Controller(actors[0], [[68, 'moveRight'], [65, 'moveLeft'], [87, 'jump'], [67, 'camera'], [77, 'dark', 100], [83, 'shoot']]); + + //actors[1] = new Actor(6, 'all', 50, 3, 60, 80); + + camera = [actors[0]]; // Set camera. +} + // Define the level. levels = [ [ '################################################' ,'################################################' - ,'##............................................##' - ,'##............................................##' - ,'##............................................##' - ,'##............................................##' - ,'##............................................##' - ,'##............................................##' - ,'##............................................##' - ,'##............................................##' + ,'##..............................................' + ,'##..............................................' + ,'##.............................##########.....##' + ,'##.............................##########.....##' + ,'##...................####.....................##' + ,'##...................####.....................##' + ,'##...........................####.............##' + ,'##...........................####.............##' ,'##............................................##' ,'##..###..##........####..............###########' ,'###########........#############################' @@ -97,6 +117,50 @@ levels = [ ,'################################################' ,'################################################' ,'################################################' + ], + [ + '#################################################' + ,'#################################################' + ,'#..............................................##' + ,'#..............................................##' + ,'##################.............................##' + ,'##################....#######..................##' + ,'#.....................#######..................##' + ,'#................................#####.........##' + ,'#................................#####.........##' + ,'#.....................########.................##' + ,'#.....................########.................##' + ,'#............######............................##' + ,'#............######............................##' + ,'#......###.....................................##' + ,'#.....####.....................................##' + ,'#....#####.....................................##' + ,'#...######xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx##' + ,'#..#######xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx##' + ,'#################################################' + ,'#################################################' + ], + [ + '..................................................................................................................' + ,'..................................................................................................................' + ,'..................................................................................................................' + ,'..................................................................................................................' + ,'..................................................................................................................' + ,'..................................................................................................................' + ,'..................................................................................................................' + ,'..................................................................................................................' + ,'........####......................................................................................................' + ,'........####......................................................................................................' + ,'........####......................................................................................................' + ,'##..............................................................................................................##' + ,'##...............###.............................................................###............................##' + ,'##...............###............................................................................................##' + ,'##...............#######........................................................................................##' + ,'##################################################.....###########################################################' + ,'##################################################################################################################' + ,'##################################################################################################################' + ,'##################################################################################################################' + ,'##################################################################################################################' ] ] @@ -217,7 +281,7 @@ function Ai(index, ai){ } // Actor class for all solid cubes -function Actor(image, type, health, power, xpos, ypos){ +function Actor(image, type, health, power, xpos, ypos, width, height){ this.image = image; this.group = type; this.health = health; @@ -229,7 +293,9 @@ function Actor(image, type, health, power, xpos, ypos){ this.left = false; this.x = xpos; this.y = ypos; - this.box = new Box(this.x, this.y, 16, 16, this.xvel, this.yvel, ['player', 'pacer']); // Set physics class for this actor + this.w = width; + this.h = height; + this.box = new Box(this.x, this.y, this.w, this.h, this.xvel, this.yvel, ['player', 'pacer'], true); // Set physics class for this actor this.oneactions = []; this.actionsturn = []; this.index = actors.length; @@ -295,15 +361,17 @@ function Actor(image, type, health, power, xpos, ypos){ this.y = this.box.y; this.xvel = this.box.xvel; this.yvel = this.box.yvel; - + if(this.health <= 0){ + this.health = 0; + } //this.xvel *= Math.pow(0.992, speed); } this.draw = function(){ var reflect = 100; // Depth reflection goes before fading completely - var drawx = r(this.x - lookx); + var drawx = r(this.x - lookx + this.xvel); var drawy = 200; - context.drawImage(spritesheet, this.image * 16, 16, 16, 16, drawx, r(this.y - 16 - looky), 16, 16); + context.drawImage(spritesheet, this.image * 16, 16, 16, 16, drawx, r(this.y - 16 - looky), this.w, this.h); context.globalAlpha = 1; //context.drawImage(spritesheet, this.image * 16, 16, 16, 16, drawx, r((216 - (this.y - 216)) - looky), 16, 16); // StartX, StartY, EndX, EndY @@ -331,6 +399,7 @@ function Particle(type, affiliation, lifespan, xpos, ypos, xvel, yvel){ var angle = Math.random() * 360; this.addx = Math.sin(angle) * ((particles.length + 200) / 5); this.addy = Math.cos(angle) * ((particles.length + 200) / 10); + this.box = new Box(this.x, this.y, this.size, this.size, this.xvel, this.yvel, [], false); this.draw = function(){ //context.beginPath(); @@ -373,16 +442,19 @@ function Particle(type, affiliation, lifespan, xpos, ypos, xvel, yvel){ context.lineWidth = 1; context.strokeStyle = '#000'; context.strokeRect(r(this.x - lookx) + 0.5, r(this.y - looky) + 0.5, 4, 4); + /* context.strokeStyle = '#aaa'; context.strokeRect(r(this.x - lookx) + 0.5, r(213 - (this.y - 216) - looky) + 0.5, 4, 4); context.globalAlpha = 1; + */ } } this.onGround = function(){ - return (this.y > 216 - this.size); + return false; } + this.simulate = function(){ switch(this.type){ case 'mouse': @@ -480,11 +552,20 @@ function Particle(type, affiliation, lifespan, xpos, ypos, xvel, yvel){ if(thisLoop > this.timeup){ this.deleteme = true; } + this.box.xvel = this.xvel; + this.box.yvel = this.yvel; + this.box.x = this.x; + this.box.y = this.y + 16; + this.box.run(); + this.x = this.box.x; + this.y = this.box.y - 16; + this.xvel = this.box.xvel; + this.yvel = this.box.yvel; } } // Collision detection class -function Box(x, y, w, h, xvel, yvel, colgroup){ +function Box(x, y, w, h, xvel, yvel, colgroup, gravity){ this.x = x; this.y = y; this.width = w; @@ -494,6 +575,7 @@ function Box(x, y, w, h, xvel, yvel, colgroup){ this.left = false; this.up = false; this.down = false; + this.gravity = gravity; this.reset = function(){ this.right = false; @@ -512,10 +594,14 @@ function Box(x, y, w, h, xvel, yvel, colgroup){ test = []; for(var hr = 0; hr < colareax; hr++){ for(var vr = 0; vr < colareay; vr++){ - var xcol = (((this.x - (hr == colareax - 1 ? 1 : 0)) >> 4) + hr); - var ycol = (((this.y - (vr == colareay - 1 ? 1 : 0)) >> 4) + vr); - if(lv[ycol - 1][xcol] == '#'){ - collision = true; + var xcol = (((this.x - (hr == colareax - 1 ? 1 + 16 - (((this.width - 1) % 16) + 1): 0)) >> 4) + hr); + var ycol = (((this.y - (vr == colareay - 1 ? 1 + 16 - (((this.height - 1) % 16) + 1) : 0)) >> 4) + vr); + if(ycol - 1 >= 0 && ycol <= lv.length){ + if(xcol >= 0 && xcol < lv[ycol].length){ + if(lv[ycol - 1][xcol] == '#'){ + collision = true; + } + } } } } @@ -537,12 +623,12 @@ function Box(x, y, w, h, xvel, yvel, colgroup){ this.down = false; this.x += this.xvel; if(this.collide() && Math.abs(this.xvel) > 0){ - this.x = ((this.x >> 4) << 4) + (this.xvel > 0 ? 0 : 16); + this.x = ((this.x >> 4) << 4) + (this.xvel > 0 ? 16 - (((this.width - 1) % 16) + 1) : 16); this.xvel = 0; } this.y += this.yvel; if(this.collide()){ - this.y = ((this.y >> 4) << 4) + (this.yvel > 0 ? 0 : 16); + this.y = ((this.y >> 4) << 4) + (this.yvel > 0 ? 16 - (((this.height - 1) % 16) + 1) : 16); if(this.yvel < 0){ this.down = true; } @@ -554,7 +640,7 @@ function Box(x, y, w, h, xvel, yvel, colgroup){ this.run = function(){ this.y += 1; - if(this.collide() == false){ + if(this.collide() == false && this.gravity){ this.yvel += 0.5; } this.y -= 1; @@ -577,12 +663,21 @@ function loopGame(){ context.clearRect(0, 0, 500, 350); lookx = looky = 0; looky = -0; + for(i in controllers){ + controllers[i].checkKeys(); + } + for(i in actors){ + actors[i].simulate(); + } for(i in camera){ - lookx += (camera[i] instanceof Array ? camera[i][0] : camera[i].x + camera[i].xvel) - 250; + lookx += (camera[i] instanceof Array ? camera[i][0] : camera[i].x + camera[i].xvel * 1) - 250; // looky += (camera[i] == instanceof Array ? camera[i][1] : camera[i].y) - 175; } lookx /= camera.length; looky /= camera.length; + for(i in actors){ + actors[i].draw(); + } /* if( instanceof Array){ lookx = camera[0]; @@ -592,32 +687,25 @@ function loopGame(){ looky = 0; } */ - for(i in controllers){ - controllers[i].checkKeys(); - } - for(i in actors){ - actors[i].simulate(); - actors[i].draw(); - } context.globalAlpha = 1; context.lineWidth = 1; - for(i in levels[level]){ - for(j in levels[level][i]){ - if(levels[level][i][j] == '#'){ - //context.fillStyle = ['#aaa', '#bbb', '#ccc', '#ddd', '#eee', '#fff'][Math.floor(Math.random() * 6)]; - context.fillStyle = '#7a7'; - if(i > 0){ - if(levels[level][i - 1][j] == '#'){ - context.fillStyle = '#ca4'; + for(i = 1; i < levels[level].length; i++){ + for(j = 1; j < levels[level][i].length; j++){ + if(levels[level][i][j] == '#' || levels[level][i][j] == 'x'){ + //#efefef + context.fillStyle = '#eee'; + if((j < levels[level][i].length && j > 0 && i < levels[level].length - 1 && i > 0)){ + if(levels[level][i][j + 1] != '#' || levels[level][i][j - 1] != '#'){ + context.fillStyle = '#ddd'; } + if(levels[level][i + 1][j] != '#' || levels[level][i - 1][j] != '#'){ + context.fillStyle = '#ddd'; + } + } + if(levels[level][i][j] == 'x'){ + context.fillStyle = '#d77'; } context.fillRect((j << 4) - r(lookx), i << 4, 16, 16); - if(context.fillStyle == '#ccaa44'){ - context.fillStyle = '#b93'; - for(k = 1; k <= 3; k++){ - context.fillRect((j << 4) - r(lookx) + (seed(j * i + k) * 14), (i << 4) + (seed(j * i / k) * 14), 2, 2); - } - } } } } @@ -629,16 +717,20 @@ function loopGame(){ context.fillStyle = "#444"; context.font = "10pt Arial"; context.textAlign = 'left'; - context.fillText('Health: ' + actors[0].health, 10, 290); - context.fillText('X: ' + r(actors[0].x), 10, 310); - context.fillText('Y: ' + r(actors[0].y), 70, 310); + if(game == 'playing'){ + context.fillText('Health: ' + camera[0].health, 10, 290); + context.fillText('X: ' + r(camera[0].x), 10, 310); + context.fillText('Y: ' + r(camera[0].y), 70, 310); + } lastspeed = (new Date() % 10 == 0 ? r(1000 / speed) : lastspeed); context.fillText('FPS: ' + lastspeed, 10, 20); context.textAlign = 'right'; - context.fillText('Sint version α 0.3.3', 490, 310); + context.fillText('Sint version α 0.3.4', 490, 310); context.fillText(test, 490, 290); - context.fillText('Actors: ' + actors.length, 490, 20); - context.fillText('Particles: ' + particles.length, 490, 40); + if(game == 'playing'){ + context.fillText('Actors: ' + actors.length, 490, 20); + context.fillText('Particles: ' + particles.length, 490, 40); + } for(i in ais){ ais[i].run(); } @@ -650,10 +742,35 @@ function loopGame(){ i--; } } + if(game == 'menu'){ + context.font = '40pt Helvetica'; + context.textAlign = 'center'; + context.fillStyle = '69d'; + context.fillText('Sint', 250, 100); + if(menu[ui.area][0] == 'r'){ + switch(menu[ui.area][1]){ + case 'play': + play(); + game = 'playing'; + break; + default: + ui.area = 0; + break; + } + }else{ + for(i in menu[ui.area]){ + context.fillStyle = (ui.select == i ? '#9bf' : '#cdf'); + context.fillRect(150, 150 + (30 * i), 200, 25); + context.font = '12pt Helvetica'; + context.fillStyle = (ui.select == i ? '#fff' : '#eef'); + context.fillText(menu[ui.area][i][0], 250, 168 + (30 * i)); + } + } + } // Slow down game to test low framerates /* for(var j=1; j < 10000000; j++){ j = j; - } - */ + }*/ + } \ No newline at end of file