*bugfix :parade movement bounces up down!
*bugfix: another bug with anyvalidmoves() - offscreen things showing up as having moves *initial code to make grid size bigger on later levels
This commit is contained in:
parent
0d41c312ac
commit
2f5b575424
127
cat.html
127
cat.html
|
@ -62,6 +62,15 @@ var GOALVERB = {
|
||||||
var FULLSTAR = "\u2605";
|
var FULLSTAR = "\u2605";
|
||||||
var EMPTYSTAR = "\u2606";
|
var EMPTYSTAR = "\u2606";
|
||||||
|
|
||||||
|
var DEF_GRIDSIZE = 80;
|
||||||
|
var DEF_THINGSIZE = 64;
|
||||||
|
var DEF_GRIDW = 5;
|
||||||
|
var DEF_GRIDH = 5;
|
||||||
|
var GRIDSIZE = null;
|
||||||
|
var THINGSIZE = null;
|
||||||
|
var GRIDW = null;
|
||||||
|
var GRIDH = null;
|
||||||
|
|
||||||
var MAXDIRS = 4;
|
var MAXDIRS = 4;
|
||||||
var DIRXMOD = [ 0, 1, 0, -1 ];
|
var DIRXMOD = [ 0, 1, 0, -1 ];
|
||||||
var DIRYMOD = [ -1, 0, 1, 0 ];
|
var DIRYMOD = [ -1, 0, 1, 0 ];
|
||||||
|
@ -73,8 +82,6 @@ var SCREENW = 480;
|
||||||
var SCREENH = 640;
|
var SCREENH = 640;
|
||||||
|
|
||||||
var GRAVITY = 0.5;
|
var GRAVITY = 0.5;
|
||||||
var GRIDSIZE = 80;
|
|
||||||
var THINGSIZE = 64;
|
|
||||||
|
|
||||||
|
|
||||||
var TEXTSIZE = 16; // in points
|
var TEXTSIZE = 16; // in points
|
||||||
|
@ -112,20 +119,18 @@ var TAPBUTTONSIZE = 26; // game over button
|
||||||
var TAPBUTTONSIZEC = 20; // levcomplete button
|
var TAPBUTTONSIZEC = 20; // levcomplete button
|
||||||
var TAPBUTTONSIZESTAR = 26; // levcomplete button
|
var TAPBUTTONSIZESTAR = 26; // levcomplete button
|
||||||
|
|
||||||
var PARADESPEED=14;
|
var PARADESPEED=12;
|
||||||
|
|
||||||
var EXPLODETICKS=20;
|
var EXPLODETICKS=20;
|
||||||
var EXPLODEGAIN= (THINGSIZE*2) / EXPLODETICKS;
|
var EXPLODEGAIN= (DEF_THINGSIZE*2) / EXPLODETICKS;
|
||||||
var EXPLODEFADESPEED = 1.0 / EXPLODETICKS;
|
var EXPLODEFADESPEED = 1.0 / EXPLODETICKS;
|
||||||
|
|
||||||
var SHRINKTICKS=20;
|
var SHRINKTICKS=20;
|
||||||
var SHRINKLOSE= (THINGSIZE / SHRINKTICKS);
|
var SHRINKLOSE= (DEF_THINGSIZE / SHRINKTICKS);
|
||||||
|
|
||||||
var LINEWIDTH=2;
|
var LINEWIDTH=2;
|
||||||
var CROSSWIDTH=2;
|
var CROSSWIDTH=2;
|
||||||
|
|
||||||
var GRIDW = 5;
|
|
||||||
var GRIDH = 5;
|
|
||||||
|
|
||||||
var LEVSELGRIDW = 5;
|
var LEVSELGRIDW = 5;
|
||||||
var LEVSELGRIDH = 6;
|
var LEVSELGRIDH = 6;
|
||||||
|
@ -134,7 +139,7 @@ var PATHARROWSIZE = 10;
|
||||||
|
|
||||||
var PARADELENGTH = 3;
|
var PARADELENGTH = 3;
|
||||||
|
|
||||||
var BOARDX = (SCREENW - (GRIDW * GRIDSIZE)) / 2;
|
var BOARDX = (SCREENW - (DEF_GRIDW * DEF_GRIDSIZE)) / 2;
|
||||||
var BOARDY = 64;
|
var BOARDY = 64;
|
||||||
|
|
||||||
// 'tap to continue' button
|
// 'tap to continue' button
|
||||||
|
@ -142,9 +147,9 @@ var tapx,tapy,tapw,taph;
|
||||||
|
|
||||||
// back to title screen buton
|
// back to title screen buton
|
||||||
var levsel_contx = BOARDX;
|
var levsel_contx = BOARDX;
|
||||||
var levsel_conty = BOARDY + (GRIDSIZE*GRIDH) + GRIDSIZE + GRIDSIZE/4;
|
var levsel_conty = BOARDY + (DEF_GRIDSIZE*DEF_GRIDH) + DEF_GRIDSIZE + DEF_GRIDSIZE/4;
|
||||||
var levsel_contw = SCREENW - (BOARDX*2);
|
var levsel_contw = SCREENW - (BOARDX*2);
|
||||||
var levsel_conth = (GRIDSIZE/2);
|
var levsel_conth = (DEF_GRIDSIZE/2);
|
||||||
|
|
||||||
|
|
||||||
var FOODPOINTS = 10;
|
var FOODPOINTS = 10;
|
||||||
|
@ -948,6 +953,19 @@ var game = {
|
||||||
|
|
||||||
overdesc = "";
|
overdesc = "";
|
||||||
clearpath();
|
clearpath();
|
||||||
|
|
||||||
|
// set grid size
|
||||||
|
if (game.levels[curlevel].gridsize == undefined) {
|
||||||
|
GRIDSIZE = DEF_GRIDSIZE;
|
||||||
|
THINGSIZE = DEF_THINGSIZE;
|
||||||
|
GRIDW = DEF_GRIDW;
|
||||||
|
GRIDH = DEF_GRIDH;
|
||||||
|
} else {
|
||||||
|
GRIDSIZE = game.levels[curlevel].gridsize;
|
||||||
|
THINGSIZE = game.levels[curlevel].thingsize;
|
||||||
|
GRIDW = game.levels[curlevel].gridw;
|
||||||
|
GRIDH = game.levels[curlevel].gridh;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
addlevel : function (lev, hashelp) {
|
addlevel : function (lev, hashelp) {
|
||||||
|
@ -958,12 +976,28 @@ var game = {
|
||||||
mylevel.thinglist = new Array();
|
mylevel.thinglist = new Array();
|
||||||
mylevel.forcelist = new Array();
|
mylevel.forcelist = new Array();
|
||||||
mylevel.allowedthings = new Array();
|
mylevel.allowedthings = new Array();
|
||||||
|
mylevel.gridsize = DEF_GRIDSIZE;
|
||||||
|
mylevel.thingsize = DEF_THINGSIZE;
|
||||||
|
mylevel.gridw = DEF_GRIDW;
|
||||||
|
mylevel.gridh = DEF_GRIDH;
|
||||||
|
|
||||||
this.levels[lev] = mylevel;
|
this.levels[lev] = mylevel;
|
||||||
|
|
||||||
playerdata.levscore[lev] = 0;
|
playerdata.levscore[lev] = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// TODO: specify newwid instead of newgridsize
|
||||||
|
addlevelgridsize: function (lev, newgridsize) {
|
||||||
|
var ratio;
|
||||||
|
|
||||||
|
ratio = newgridsize / DEF_GRIDSIZE;
|
||||||
|
|
||||||
|
this.levels[lev].gridsize = newgridsize;
|
||||||
|
this.levels[lev].thingsize = DEF_THINGSIZE * ratio;
|
||||||
|
this.levels[lev].gridw = (DEF_GRIDW * DEF_GRIDSIZE) / newgridsize;
|
||||||
|
this.levels[lev].gridh = (DEF_GRIDH * DEF_GRIDSIZE) / newgridsize;
|
||||||
|
},
|
||||||
|
|
||||||
// thingtype pct
|
// thingtype pct
|
||||||
addlevelthings: function (lev) {
|
addlevelthings: function (lev) {
|
||||||
var i,idx;
|
var i,idx;
|
||||||
|
@ -1063,7 +1097,7 @@ var game = {
|
||||||
},
|
},
|
||||||
|
|
||||||
calcstarpoints : function( lev ) {
|
calcstarpoints : function( lev ) {
|
||||||
var i;
|
var i,num;
|
||||||
var min = 0,pointsgoal = false;
|
var min = 0,pointsgoal = false;
|
||||||
// calculate minimum points required to win
|
// calculate minimum points required to win
|
||||||
// first pass
|
// first pass
|
||||||
|
@ -1083,7 +1117,13 @@ var game = {
|
||||||
min += GOATPOINTS * this.levels[lev].goals[i].count;
|
min += GOATPOINTS * this.levels[lev].goals[i].count;
|
||||||
break;
|
break;
|
||||||
case "turns":
|
case "turns":
|
||||||
min += FOODPOINTS * this.levels[lev].goals[i].count;
|
// assume you'll get a parade on most turns.
|
||||||
|
num = (Math.min(CATPOINTS, SLEEPYCATPOINTS) * 3 * this.levels[lev].goals[i].count);
|
||||||
|
if (!game.isbanned(curlevel, "door")) {
|
||||||
|
num *= 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
min += num;
|
||||||
break;
|
break;
|
||||||
case "doors":
|
case "doors":
|
||||||
// double the value of a minimum-score parade
|
// double the value of a minimum-score parade
|
||||||
|
@ -1094,7 +1134,12 @@ var game = {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
// second pass - overrides
|
// second pass - overrides
|
||||||
|
/*
|
||||||
for (i = 0; i < this.levels[lev].goals.length; i++) {
|
for (i = 0; i < this.levels[lev].goals.length; i++) {
|
||||||
switch (this.levels[lev].goals[i].type) {
|
switch (this.levels[lev].goals[i].type) {
|
||||||
case "points":
|
case "points":
|
||||||
|
@ -1102,7 +1147,18 @@ var game = {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// adjust for level size
|
||||||
|
if (this.levels[lev].gridsize != DEF_GRIDSIZE) {
|
||||||
|
var ratio;
|
||||||
|
ratio = (this.levels[lev].gridw * this.levels[lev].gridh) /
|
||||||
|
(DEF_GRIDW * DEF_GRIDH) * 2;
|
||||||
|
|
||||||
|
min *= ratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
this.levels[lev].starpoints = new Array();
|
this.levels[lev].starpoints = new Array();
|
||||||
this.levels[lev].starpoints[0] = Math.floor(Math.max(min, pointsgoal));
|
this.levels[lev].starpoints[0] = Math.floor(Math.max(min, pointsgoal));
|
||||||
this.levels[lev].starpoints[1] = Math.floor(Math.max(min * 2, pointsgoal*1.5));
|
this.levels[lev].starpoints[1] = Math.floor(Math.max(min * 2, pointsgoal*1.5));
|
||||||
|
@ -1134,8 +1190,9 @@ var game = {
|
||||||
this.addlevelallowedthings(4, "cat", "food", "llama");
|
this.addlevelallowedthings(4, "cat", "food", "llama");
|
||||||
|
|
||||||
this.addlevel(5, false);
|
this.addlevel(5, false);
|
||||||
|
this.addlevelgridsize(5, 70);
|
||||||
this.addlevelgoals(5, "turns", 10);
|
this.addlevelgoals(5, "turns", 10);
|
||||||
this.addlevelgoals(5, "points", 600);
|
//this.addlevelgoals(5, "points", 600);
|
||||||
this.addlevelallowedthings(5, "cat", "food", "llama");
|
this.addlevelallowedthings(5, "cat", "food", "llama");
|
||||||
|
|
||||||
// introduce goats!
|
// introduce goats!
|
||||||
|
@ -1163,7 +1220,7 @@ var game = {
|
||||||
|
|
||||||
this.addlevel(10, false);
|
this.addlevel(10, false);
|
||||||
this.addlevelallowedthings(10,"goat", "cat", "food", "llama", "door");
|
this.addlevelallowedthings(10,"goat", "cat", "food", "llama", "door");
|
||||||
this.addlevelgoals(10, "points", 2000);
|
//this.addlevelgoals(10, "points", 2000);
|
||||||
this.addlevelgoals(10, "turns", 15);
|
this.addlevelgoals(10, "turns", 15);
|
||||||
|
|
||||||
// introduce sunlight
|
// introduce sunlight
|
||||||
|
@ -2996,6 +3053,12 @@ var game = {
|
||||||
this.winimgsize = 0.1;
|
this.winimgsize = 0.1;
|
||||||
//console.log("winimage is " + winimg.src);
|
//console.log("winimage is " + winimg.src);
|
||||||
} else if (newstate == "levselect") {
|
} else if (newstate == "levselect") {
|
||||||
|
// reset grid size
|
||||||
|
GRIDSIZE = DEF_GRIDSIZE;
|
||||||
|
THINGSIZE = DEF_THINGSIZE;
|
||||||
|
GRIDW = DEF_GRIDW;
|
||||||
|
GRIDH = DEF_GRIDH;
|
||||||
|
|
||||||
// count player stars
|
// count player stars
|
||||||
playerdata.settotstars(game.countplayerstars());
|
playerdata.settotstars(game.countplayerstars());
|
||||||
}
|
}
|
||||||
|
@ -3443,6 +3506,10 @@ function thing(gridx, gridy, type, text) {
|
||||||
this.hasvalidmoves = function() {
|
this.hasvalidmoves = function() {
|
||||||
var i,newx,newy;
|
var i,newx,newy;
|
||||||
|
|
||||||
|
if (this.gridy < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.isanimating()) {
|
if (this.isanimating()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -3574,7 +3641,9 @@ function thing(gridx, gridy, type, text) {
|
||||||
if (this.type == "cat") {
|
if (this.type == "cat") {
|
||||||
var myimage;
|
var myimage;
|
||||||
|
|
||||||
if (isadjacenttotype(this, "llama")) {
|
if (this.state == "parade") {
|
||||||
|
myimage = image['cat'];
|
||||||
|
} else if (isadjacenttotype(this, "llama")) {
|
||||||
myimage = image['catscared'];
|
myimage = image['catscared'];
|
||||||
} else if (this.issleepy() == true) {
|
} else if (this.issleepy() == true) {
|
||||||
myimage = image['catfull'];
|
myimage = image['catfull'];
|
||||||
|
@ -3679,11 +3748,11 @@ function thing(gridx, gridy, type, text) {
|
||||||
|
|
||||||
// return TRUE if we did something
|
// return TRUE if we did something
|
||||||
this.snaptogrid = function() {
|
this.snaptogrid = function() {
|
||||||
var snapto = this.gridy * GRIDSIZE + (GRIDSIZE/2) - (THINGSIZE/2);
|
var snapto = Math.floor(this.gridy * GRIDSIZE + (GRIDSIZE/2) - (THINGSIZE/2));
|
||||||
//var snapto = (GRIDSIZE + (GRIDSIZE/2) - (THINGSIZE/2);
|
//var snapto = (GRIDSIZE + (GRIDSIZE/2) - (THINGSIZE/2);
|
||||||
//if (this.y % (GRIDSIZE + (GRIDSIZE/2) - (THINGSIZE/2)) != 0) {
|
//if (this.y % (GRIDSIZE + (GRIDSIZE/2) - (THINGSIZE/2)) != 0) {
|
||||||
if (this.y % snapto != 0) {
|
if (this.y % snapto != 0) {
|
||||||
this.y = this.gridy * GRIDSIZE + (GRIDSIZE/2) - (THINGSIZE/2);
|
this.y = snapto;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -3927,13 +3996,23 @@ function thing(gridx, gridy, type, text) {
|
||||||
// move
|
// move
|
||||||
this.y += this.yspeed;
|
this.y += this.yspeed;
|
||||||
|
|
||||||
|
this.state = "fall";
|
||||||
|
|
||||||
// don't go below bottom of screen
|
// don't go below bottom of screen
|
||||||
this.hitBottom();
|
if (this.y > GRIDSIZE * GRIDH) {
|
||||||
|
//this.y = GRIDSIZE * GRIDH;
|
||||||
|
atbottom = true;
|
||||||
|
this.state = "stop";
|
||||||
|
}
|
||||||
|
|
||||||
// calc new gridx / gridy
|
// calc new gridx / gridy
|
||||||
this.calcgridxy();
|
this.calcgridxy();
|
||||||
|
|
||||||
|
if ((this.gridy >= GRIDH-1)) {
|
||||||
|
atbottom = true;
|
||||||
|
this.state = "stop";
|
||||||
|
}
|
||||||
|
|
||||||
this.state = "fall";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// hit something?
|
// hit something?
|
||||||
|
@ -3952,14 +4031,6 @@ function thing(gridx, gridy, type, text) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hitBottom = function() {
|
|
||||||
var rockbottom = GRIDSIZE * GRIDH;
|
|
||||||
if (this.y > rockbottom) {
|
|
||||||
this.y = rockbottom;
|
|
||||||
this.yspeed = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function mainloop() {
|
function mainloop() {
|
||||||
|
|
36
todo
36
todo
|
@ -30,23 +30,21 @@ phone fixes as per http://www.html5rocks.com/en/mobile/touch/
|
||||||
|
|
||||||
https://www.smashingmagazine.com/2012/10/design-your-own-mobile-game/
|
https://www.smashingmagazine.com/2012/10/design-your-own-mobile-game/
|
||||||
|
|
||||||
*make forcethings actually work
|
*bugfix :parade movement bounces up down!
|
||||||
|
*bugfix: another bug with anyvalidmoves() - offscreen things showing up as having moves
|
||||||
replace points goal with 'survive x turns'
|
*initial code to make grid size bigger on later levels
|
||||||
|
|
||||||
*doors -
|
|
||||||
*sunlight
|
allow specifying gridw instead of gridsize
|
||||||
* - makes nearby cats sleepy
|
|
||||||
* - swaps with thing below each turn.
|
make levels default to gridsize of previous one
|
||||||
* - then disappears off the bottom
|
|
||||||
|
getting cats with x not aligned to gridx!
|
||||||
parademovement bounces up down!
|
|
||||||
slow down parades to test.
|
finishing a level with no stars should be gameover ???
|
||||||
|
|
||||||
|
|
||||||
still bugs in getarndomtype() ?
|
|
||||||
|
|
||||||
bug with 2 suns above each other
|
|
||||||
|
|
||||||
special things - 5% chance of any
|
special things - 5% chance of any
|
||||||
{
|
{
|
||||||
|
@ -56,10 +54,14 @@ special things - 5% chance of any
|
||||||
destroy 9 in a block around.
|
destroy 9 in a block around.
|
||||||
pow pow cloud.
|
pow pow cloud.
|
||||||
|
|
||||||
|
|
||||||
doona - hide under it in the cold ?
|
|
||||||
|
|
||||||
mouse toy - match 3 to explode everything ?
|
mouse toy - match 3 to explode everything ?
|
||||||
|
|
||||||
|
special food that lets you turn corners?
|
||||||
|
|
||||||
|
brush -
|
||||||
|
|
||||||
|
doona - hide under it to avoid llama /sun effects ?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
more goals:
|
more goals:
|
||||||
|
|
Loading…
Reference in New Issue