diff --git a/cat.html b/cat.html
index eedcde3..52af887 100644
--- a/cat.html
+++ b/cat.html
@@ -1632,7 +1632,9 @@ var game = {
},
genrandomlevel : function (lev) {
- var ngoals,i,pctleft;
+ var ngoals,i,n,pctleft;
+ var nbricks = 0,bricktype, xmin,ymin,xmax,ymax,totbricks = 0, wantbricks;
+ var gw,gh;
// set random seed based on level
game.setrndseed(lev+50);
@@ -1644,6 +1646,9 @@ var game = {
game.addlevel(lev, false);
}
+ gw = game.levels[lev].gridw;
+ gh = game.levels[lev].gridh;
+
// generate goals
pctleft = 100;
for (i = 0; i < ngoals; i++) {
@@ -1684,11 +1689,185 @@ console.log("genrandomlev() - lev " + lev + " goal " + i + " type=" + game.leve
if (count < 1) count = 1;
game.levels[lev].goals[i].count = count;
+ }
- // add forced things based on goals
+
+ // add random bricks - 66% chance
+ nbricks = 0;
+ brickpos = new Array();
+ bricktype = game.seedrnd(1,4);
+ //bricktype = 4;
+ if (game.seedrnd(1,3) > 1) {
+ wantbricks = true;
+ } else {
+ wantbricks = false;
+ }
+ //wantbricks = true;
+
+ if (wantbricks) {
+ switch (bricktype) {
+ case 1: // random
+ nbricks = game.seedrnd(1,8); // ie. max 8
+ xmin = 0;
+ ymin = 0;
+ xmax = gw-1;
+ ymax = gh-1;
+ break;
+ case 2: // vert flip
+ nbricks = game.seedrnd(1,4); // ie. max 8
+ xmin = 0;
+ ymin = 0;
+ xmax = gw-1;
+ if (gh % 2 == 0) {
+ ymax = Math.floor(gh/2)-1;
+ } else {
+ ymax = Math.floor(gh/2);
+ }
+ break;
+ case 3: // horz flip
+ nbricks = game.seedrnd(1,4); // ie. max 8
+ xmin = 0;
+ ymin = 0;
+ if (gw % 2 == 0) {
+ xmax = Math.floor(gw/2)-1;
+ } else {
+ xmax = Math.floor(gw/2);
+ }
+ ymax = gw-1;
+ break;
+ case 4: // quads
+ nbricks = game.seedrnd(1,3); // ie. max 12
+ xmin = 0;
+ ymin = 0;
+ if (gw % 2 == 0) {
+ xmax = Math.floor(gw/2)-1;
+ } else {
+ xmax = Math.floor(gw/2);
+ }
+ if (gh % 2 == 0) {
+ ymax = Math.floor(gh/2)-1;
+ } else {
+ ymax = Math.floor(gh/2);
+ }
+ break;
+ }
+ }
+// console.log("bricktype = " + bricktype + " nbricks = " + nbricks);
+
+ // generate coords
+ bricksleft = nbricks;
+ for (n = 0; n < nbricks; n++) {
+ var x,y,coord,found = true;
+ while (found) {
+ found = false;
+ // pick random x/y
+ x = game.seedrnd(0,xmax);
+ y = game.seedrnd(0,ymax);
+ // make sure its not used
+ for (i = 0; i < brickpos.length; i++) {
+ if ((brickpos[i].x == x) && (brickpos[i].y == y)){
+ found = true;
+ }
+ }
+ }
+ coord = new Object();
+ coord.x = x;
+ coord.y = y;
+ brickpos.push(coord);
+//console.log("--- brick at " + x + "," + y);
+ }
+//console.log("--- gw is " + gw + " gh is " + gh);
+
+ // place bricks
+ totbricks = 0;
+ for (i = 0; i < nbricks; i++) {
+ var newx, newy;
+
+ // add initial one
+ game.addlevelbricks(brickpos[i].x, brickpos[i].y);
+ totbricks++;
+
+ switch (bricktype) {
+ case 1: // normal
+ break;
+ case 2: // vert flip
+ newy = -1;
+ if (gh % 2 == 0) {
+ newy = (ymax+1) + (ymax - brickpos[i].y);
+ } else {
+ if (brickpos[i].y != ymax) { // don't flip on middle line
+ newy = ymax + (ymax - brickpos[i].y);
+ }
+ }
+ if (newy != -1) {
+console.log(" " + brickpos[i].x + "," + brickpos[i].y + " flipped to " + brickpos[i].x + "," + newy);
+ game.addlevelbricks(brickpos[i].x, newy);
+ totbricks++;
+ }
+ break;
+ case 3: // horz flip
+ newx = -1;
+ if (gw % 2 == 0) {
+ newx = (xmax+1) + (xmax - brickpos[i].x);
+ } else {
+ if (brickpos[i].x != xmax) { // don't flip on middle line
+ newx = xmax + (xmax - brickpos[i].x);
+ }
+ }
+ if (newx != -1) {
+ game.addlevelbricks(newx, brickpos[i].y);
+ totbricks++;
+ }
+ break;
+ case 4: // quads (ie. flip x, y, and both)
+
+ // flip y
+ newy = -1;
+ if (gh % 2 == 0) {
+ newy = (ymax+1) + (ymax - brickpos[i].y);
+ } else {
+ if (brickpos[i].y != ymax) { // don't flip on middle line
+ newy = (ymax) + (ymax - brickpos[i].y);
+ }
+ }
+ if (newy != -1) {
+ game.addlevelbricks(brickpos[i].x, newy);
+ totbricks++;
+ }
+
+ // flip x
+ newx = -1;
+ if (gw % 2 == 0) {
+ newx = ((xmax)+1) + (xmax - brickpos[i].x);
+ } else {
+ if (brickpos[i].x != xmax) { // don't flip on middle line
+ newx = (xmax) + (xmax - brickpos[i].x);
+ }
+ }
+ if (newx != -1) {
+ game.addlevelbricks(newx, brickpos[i].y);
+ totbricks++;
+ }
+
+ // flip x + y
+ if (newx == -1) newx = brickpos[i].x;
+ if (newy == -1) newy = brickpos[i].y;
+ if ((newx != brickpos[i].x) || (newy != brickpos[i].y)) {
+ game.addlevelbricks(newx, newy);
+ totbricks++;
+ }
+ break;
+ }
+ }
+
+ // add forced things based on goals
+ for (i = 0; i < ngoals; i++) {
switch (game.levels[lev].goals[i].type) {
case "brick":
- game.addlevelforcethings(game.levels[lev].goals[i].type, count);
+ if (totbricks < game.levels[lev].goals[i].count ) {
+ var extras = game.levels[lev].goals[i].count - totbricks;
+ game.addlevelforcethings(game.levels[lev].goals[i].type, extras);
+ }
break;
}
}
diff --git a/todo b/todo
index b958d5f..e27473d 100644
--- a/todo
+++ b/todo
@@ -9,22 +9,10 @@ https://www.smashingmagazine.com/2012/10/design-your-own-mobile-game/
--- check here for ios
-------------------
-*add starpoint cutoffs for bag, curtain, toad and sunlight goals
-*save level scores in json format to cope with randomised levels
-*lev 6 help references both llamas and alpacas
-*make goalbooster effect actualy work
-*tweak random goal numbers - too low - add a minimum cutoff
-*try to make height correct on android tablets
-*add happy birthday message
-
sometimes add random bricks
randoms:
add 1-4 bricks
- quads:
- pick quad
- add 1-2 bricks
- flip to others
vert flip
pick side
add 1-3 bricks
@@ -33,7 +21,10 @@ sometimes add random bricks
pick top/bottom
add 1-3 bricks
flip
-
+ quads:
+ pick quad
+ add 1-2 bricks
+ flip to others
new door fell down on top of new goat!!