Adding feature: curtains.

This commit is contained in:
Rob Pearce 2016-09-02 13:42:47 +10:00
parent e65504184f
commit 9f2c38f48f
3 changed files with 97 additions and 39 deletions

View File

@ -593,14 +593,14 @@ function isvalidpath(mypath) {
if (!gcount) {
return false;
}
} else if ((thisone.type == "curtain") && (dirtonext == 0)) {
// upwards from a curtain is okay.
} else if (thisone.type == "curtain") {
// anywhere from a curtain is okay. (direction checked in canextendpath())
} else if ((i == 0) && (thisone.type == "cat") && (nextone.type == "food")) {
// first cat -> food is ok
} else if ((i == 0) && (thisone.type == "cat") && (nextone.type == "toad")) {
// first cat -> toad is ok
} else if ((i == 0) && (thisone.type == "cat") && (nextone.type == "curtain") && (dirtonext == 0)) {
// first cat -> curtain is ok if we're going UP only
} else if ((i == 0) && (thisone.type == "cat") && (nextone.type == "curtain")) {
// first cat -> curtain is ok if we're going UP/DOWN only
} else if ((i == 0) && (thisone.type == "cat") && (nextone.type == "whitecat")) {
// first cat -> whitecat is ok
} else if ((i != 0) && firstcat && (ccount == 0) && (thisone.type == "food") && (nextone.type == "food")) {
@ -1861,7 +1861,7 @@ console.log("lev " + lev + " newwid " + newwid + " ratio " + ratio);
this.addlevelgoals("food", 25);
this.addlevel(21, false); // oooooooooooo
this.addlevelallowedthings("cat", "food");
this.addlevelallowedthings("curtain");
this.addlevelforcethings("curtain", 2);
this.addlevelgoals("curtain", 2);
this.addlevelgoals("cat", 30);
@ -2066,6 +2066,10 @@ console.log("lev " + lev + " newwid " + newwid + " ratio " + ratio);
col = "#00ff00";
texttodraw = "CAT PARADE!";
break;
case "climb":
col = "#00ff00";
texttodraw = "Climb";
break;
case "chomp":
col = "#00cc00";
texttodraw = "Chomp!";
@ -5118,7 +5122,7 @@ console.log("lev " + lev + " newwid " + newwid + " ratio " + ratio);
'cat1', 'catfull1', 'catscared1',
'llama', 'cheese', 'title',
'goat', 'lock','catwalkl','catwalkr','goatwalkl','goatwalkr',
'starfull','starempty', 'curtain','curtainshred',
'starfull','starempty', 'curtain','curtainshred', 'curtainfall',
'door', 'sunlight', 'toad', 'whitecat', // special things
'brick', // obstacles
'bag', 'bagpop', 'fez', 'pow', 'brickpop', // effects
@ -5274,6 +5278,19 @@ console.log("lev " + lev + " newwid " + newwid + " ratio " + ratio);
curtaindie = true;
}
}
// first cat swaps places with last object
curpath[0].pushpath(curpath[curpath.length-1].x, curpath[curpath.length-1].y);
curpath[0].state = "swapping";
curpath[0].counter = 1;
// ...then becomes sleepy
curpath[0].sleepy = true;
curpath[curpath.length-1].pushpath(curpath[0].x, curpath[0].y);
curpath[curpath.length-1].state = "swapping";
if (curtaindie) {
// if any curtains died, _all_ curtains die
for (i = 1; i < curpath.length-1; i++) {
@ -5281,16 +5298,6 @@ console.log("lev " + lev + " newwid " + newwid + " ratio " + ratio);
curpath[i].losehp();
}
}
// move cat up so it'll fall
curpath[0].setgridxy(curpath[curpath.length-2].gridx, curpath[curpath.length-2].gridy);
} else {
// first cat swaps places with last object
curpath[0].pushpath(curpath[curpath.length-1].x, curpath[curpath.length-1].y);
curpath[0].state = "swapping";
curpath[0].counter = 1;
curpath[curpath.length-1].pushpath(curpath[0].x, curpath[0].y);
curpath[curpath.length-1].state = "swapping";
}
break;
case "slap": // toad drops down.
@ -5450,7 +5457,7 @@ function collectprize(bag) {
case "tissues": // all sleepy cats wake up
for (i = 0; i < things.length; i++) {
if (things[i].type == "cat") {
things[i].eaten = false;
things[i].sleepy = false;
}
}
break;
@ -5525,6 +5532,7 @@ function getrandomtype() {
if (dodb) console.log("specials are possible");
thinglist.push({ type: 'special', pct: 5 } );
}
if (!game.isbanned(curlevel, 'curtain')) thinglist.push({ type: 'curtain', pct: 5 } );
if (!game.isbanned(curlevel, 'goat')) thinglist.push({ type: 'goat', pct: 10 } );
if (!game.isbanned(curlevel, 'llama')) thinglist.push({ type: 'llama', pct: 10 } );
if (!game.isbanned(curlevel, 'food')) thinglist.push({ type: 'food', pct: 40 } );
@ -5749,6 +5757,9 @@ function thing(gridx, gridy, type, text, col) {
if (this.type == "bagpop") {
this.yspeed = 0 - rndfloat(8);
this.xspeed = 0 - rndfloat(16) - 1;
} else if (this.type == "curtainfall") {
this.yspeed = 0 - rndfloat(8);
this.xspeed = rndfloat(8) - 4;
} else if (this.type == "brickpop") {
this.yspeed = 0 - rndfloat(8);
this.xspeed = rndfloat(32) - 16;
@ -5769,7 +5780,7 @@ function thing(gridx, gridy, type, text, col) {
this.path = [];
this.pathspeed = PARADESPEED;
this.eaten = false;
this.sleepy = false;
if (this.type == "text" ) {
this.x = gridx * GRIDSIZE + (GRIDSIZE/2);
@ -5793,7 +5804,7 @@ function thing(gridx, gridy, type, text, col) {
this.issleepy = function() {
if (this.type == "cat") {
if (this.eaten == true) {
if (this.sleepy == true) {
return true;
} else if (isadjacenttotype(this, "sunlight")) {
return true;
@ -6176,7 +6187,7 @@ function thing(gridx, gridy, type, text, col) {
} else {
ctx.fillStyle = "black";
ctx.fillText(this.name, BOARDX + this.x + 10, BOARDY + this.y + (THINGSIZE/2));
ctx.fillText(this.eaten ? "FULL" : "", BOARDX + this.x + 10, BOARDY + this.y + (THINGSIZE/2) + 10);
ctx.fillText(this.sleepy ? "FULL" : "", BOARDX + this.x + 10, BOARDY + this.y + (THINGSIZE/2) + 10);
}
*/
@ -6240,11 +6251,26 @@ function thing(gridx, gridy, type, text, col) {
}
this.getstoppedbelowthing = function() {
var bt;
var bt,i;
bt = getgridthing(this.gridx, this.gridy + 1);
if (bt && bt.state != "fall") {
return bt;
}
// look for things movng to the place below.
for (i = 0; i < things.length; i += 1) {
if (things[i] != this && things[i].state == "swapping" && things[i].path != undefined) {
var n;
for (n = 0; n < things[i].path.length; n++) {
var gx,gy;
gx = Math.floor(things[i].path[n].x / GRIDSIZE);
gy = Math.floor(things[i].path[n].y / GRIDSIZE);
// get grid coords
if (gx == this.gridx && gy == this.gridy + 1) {
return things[i];
}
}
}
}
return null;
}
@ -6353,7 +6379,7 @@ function thing(gridx, gridy, type, text, col) {
food.startexplode("chomp");
// mark that we've eaten something
this.eaten = true;
this.sleepy = true;
console.log("chomp");
}
@ -6363,12 +6389,24 @@ function thing(gridx, gridy, type, text, col) {
if (this.type == "firework") return true;
if (this.type == "bagpop") return true;
if (this.type == "brickpop") return true;
if (this.type == "curtainfall") return true;
if (this.state == "explode") return true;
if (this.state == "shrink") return true;
if (this.state == "parade") return true;
return false;
}
this.shredcurtain = function() {
var i,nshards = 7;
for (i = 0; i < nshards; i++) {
things.push(new thing(this.gridx, this.gridy, "curtainfall"));
}
this.givepoints();
this.addabove();
this.kill();
}
this.breakbrick = function() {
var i,nshards = 7;
for (i = 0; i < nshards; i++) {
@ -6388,8 +6426,7 @@ function thing(gridx, gridy, type, text, col) {
if (this.type == "brick") {
this.breakbrick();
} else {
this.addabove();
this.startexplode();
this.shredcurtain();
}
} else {
// add a slash from a random x/y to a random x/y
@ -6475,7 +6512,7 @@ function thing(gridx, gridy, type, text, col) {
if (this.type == "firework" && this.delay > 0) {
this.delay--;
} else if ((this.type == "bagpop") || (this.type == "brickpop") || (this.type == "firework")) {
} else if ((this.type == "bagpop") || (this.type == "brickpop") || (this.type == "firework") || (this.type == "curtainfall")) {
game.dirty = true; // need to redraw
// regular gravity

BIN
images/curtainfall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

49
todo
View File

@ -1,10 +1,5 @@
http://www.w3schools.com/games/tryit.asp?filename=trygame_default_gravity
*don't draw fireworks on gameover screen.
*randomised goat on title screen.
phone fixes as per http://www.html5rocks.com/en/mobile/touch/
----------------------------
@ -15,6 +10,8 @@ https://www.smashingmagazine.com/2012/10/design-your-own-mobile-game/
-------------------
*things shouldn't all if something is swapping to underneath them!.
new door fell down on top of new goat!!
(or the other way around ??)
check code for doors falling when off the top of the screen.
@ -23,26 +20,50 @@ new door fell down on top of new goat!!
change 'thing' to have a constructor!!
then remove dupe hp code
curtain
*can only drag a cat UP onto a curtain.
*cat UP onto curtain = lose 1 hp
*clime multi curtain
*if ANY curtains are shredded, all are.
*shred all curtains climed
normal chance for curtain (5% ???)
curtain shred explosion
curtain
*normal chance for curtain (5%)
*allowing climbing over to curtain from any dir
*becomesleepy after climb
*curtain shred explosion
help (lev21)
cats can climb across curtains in any direction.
this damages the curtains, and swaps places with
something else.
------->
ca CU CU ch
to
------------|
| V
ch CU- CU- ca
^ |
-------------
After being climbed twice, curtains are shredded.
ch ca
CU- ----> POP ----> ca
ca ch ch
remaining levels.
*19/20 - more with brick patterns
22/23/24 - curtains
22/23/24 - curtains (shred 2, 4, 6)
24/25/26 - boxes
26/27/28 - cat toys
29/30 - ???
goal: x parades of y length!!!
random levels.