Frame 1
function init() {
gGridRows = 18;
gGridCols = 18;
gGridWidth = 20;
gGridHeight = 20;
SETUP = 1;
NORMAL = 2;
DIGGER = 5;
SOIL = 6;
BOULDER = 7;
JEWEL = 8;
EMPTY = 9;
DIE = 10;
MONSTER = 13;
OFFSTAGE = 14;
BORDER = 15;
CONCRETE = 16;
DOOR = 17;
TREASURE = 18;
ZOMBIE = 19;
DUAL = 20;
PRACTICE = 21;
COMPETITION = 22;
WAIT = 23;
SETUPLEVEL = 24;
gMoveInterval = 150;
gBoulderInterval = 50;
gMonsterInterval = 100;
gZombieInterval = 800;
gDieTime = 2000;
gBoulderSound = new Sound();
gJewelSound = new Sound();
gTreasureSound = new Sound();
gSquashSound = new Sound();
gDigSound = new Sound();
gDigSound.attachSound("dig_sound");
gPushSound = new Sound();
gMonsterSound = new Sound();
gZombieSound = new Sound();
gDoorSound = new Sound();
gHappySound = new Sound();
gDiggerDieSound = new Sound();
gJewelValue = 100;
gTreasureValue = 150;
gKeyDown = false;
gPrepareWaitForKey = true;
gWaitForKey = false;
gDiggerDieFrame = "";
gLevelName = new Array();
gLevelData = new Array();
gLevelName.push(" ");
gLevelData.push(" ");
gLevelName.push("hatching egg");
gLevelData.push("eeeeeeeeeeeeeeeeee.esssssssssssssssse.esssssbbbbssssssse.essssbbjbbbbssssse.esssbbbsbsjbssssse.esssbbssbsssbsssse.esssbbssjsssbsssse.essssbssssssssssse.essssssspsssssssse.esssssssssssssssse.esssjbssssbssbssse.esssbbbssbbsjbssse.esssbbtsjbbbbbssse.esssbbbbbbbbbsssse.essssbbbbbbbssssse.esssssssssssssssse.esssssssssssssssde.eeeeeeeeemeeeeeeee");
gLevelName.push("standoff");
gLevelData.push("eeeeeeeeeeeeeeeeee.esssjbbbssssssssse.essssbbbsssjbbbsse.esssssssssssbbbsse.esssssssssssssssse.esssssssssssssssje.esssbbbsssssssssse.esssbbbsssssssssse.essssssspsssssssse.ejsssssssdsssssssz.esssssssssssssssse.esssssssssbbbsssse.esbbbsssssbbbsssse.esbbbsssssssssssse.essjssssssssssssse.essssssssssssssjse.esssssssstssssssse.eeeezeeeeeeeeeeeee");
gLevelName.push("galaxy");
gLevelData.push("eeeeeeeeeeeeeemeee.esssssssbbjsssssse.esssssbbssssssssse.essssbsssssbbbbsse.ejsssbssssbssssbse.ebsssbssssssssssbe.ebssssssssssssssje.ebssssssssssssssse.esbsssssdpsssbbsse.essbbssssssssssbse.essssssssssssssbse.esssssbsssssssssbe.esssbbsssssbssssbe.ejbbsssssssbssssje.essssssssssbssssse.essssssssbbsssssse.essssjbbbsssssssse.eeeeeeeeeeezeeeeee");
gLevelName.push("reactor");
gLevelData.push("eeeeeeeeeeeeeeeeee.essssbbbbbbbbsssse.esssbbbbtjbbbbssse.essbbbbbbbbbbbbsse.essbbbbbbbbbbbbsse.essjbbbbbbbbbbjsse.essjbbbbbbbbbbjsse.esssssssssssssssse.essssssspsssssssse.esssssssssssssssse.esssceeeeeeeecssse.esssceeeeeemecssse.essscemeeeeeecssse.esssceeesdseecssse.esssceeejjjeecssse.essscccccsccccssse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("checkerboard");
gLevelData.push("eeeeeeeeeeeeeeeeee.esbcbsbsbsbsbsbsbe.ebdbjbcbjbcbjbcbte.esbsbsbsbsbcbsbsbe.ebsbsbsbsbsbsbsbse.esbsbsbsbsbjbsbsbe.ebsbsbsbsbsbsbsbse.esssssssssssssssse.essssssspsssssssse.esssssssssssssssse.esssssssssssssssse.esbsssbsssbsssbsse.ebsbsbsbsbsbjbsbse.ejssbssssssssssjbe.ebsbsbjbsbsbsbsbse.esbsbsbsssbsssbsse.ebsbsbsbsbjssbsbse.eeeeeeeeeeeeeeeeee");
gLevelName.push("robot");
gLevelData.push("eeeeeeeeeeeeeeeeee.esssssssssssssssse.msssssssssssssssse.esssjssbbsbbssjsse.essbccbbjbjbcccbsm.esssbsbbbbbbssbsse.esssssssbbbsssssse.esssssssssbsssssse.essssssspbssssssse.esssssbbbbbbbsssse.esssssbsssssbsssse.esscccbssdssbcccse.esssssbssjssbsssse.esssssbbbsbbbsssse.esssssbsssssbsssse.esssssbsssssbsssse.essssbjsssssjbssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("miner");
gLevelData.push("eeeeeeeeeeeeeeeeee.esssssssssssssssse.essssssssssssbssse.esssssbsssssbbbsse.essssbbbsssbbjbbse.esssbbtbbsbbbbbbbe.essbbjbbbbssssssse.esssssssssssssssbe.essssssspssbsssbde.esssssssssbbbsbbbe.esssbssssbbjbbssse.essbbbssbbbbbjbsse.esbjbbbsssssssssse.ebbbbbbbsjssssssse.esssssssbbbsssssse.essssssbbbbbssssse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("wanderer");
gLevelData.push("eeeeeeeeeeeeeeeeee.ebssssssdsssssssbe.esbssssssssssssbse.esjbssssssssssbsse.esbsssssssssssssbe.essssssbsbssssssse.ebjbsbsbsbsbsbsbje.ebjbsbsbsbsbsbsbje.esssbssspsssssssse.essbssssssssssssse.esbsssssssssssssse.esbbbbbbbbbbbbbbse.essssssssssssjbsse.essssssbsssssbssse.esbsssssbsssbsssse.ebsssssssbjbssssse.esssssjsssbsssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("maze journey");
gLevelData.push("eeeeeeeeeeeeeeeeee.ejssssssssssssbbje.eccbbbsssbsbscbbse.esssssbbsbsbsscsse.esssscbbsssbssssse.esjsscscssesssscse.essscsssssscssssse.esssscsssscsssssse.eccbbssspcssbsssse.essssssssssbbbssse.essssssbbbbbbbbbse.ebbssssssstsbssbse.ejsbssssssbbbbbbse.esssssssssbbdbbbje.essccsbscsbbcbbbce.escjsssbssssssssse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("temple");
gLevelData.push("eeeeeeeeeeeeeeeeee.ebbbbbbbbbbbbbbbbe.esbbbbbbbbbbbbbbse.esbsssbssssbsssbsm.esbjssbssssbssjbse.esbsssbssssbsssbse.esbsssbssssbsssbse.esbsssbssssbsssbse.esbssjbspssbjssbse.esbsssbssdsbsssbse.msbsssbssssbsssbse.esbsssbssssbsssbse.esbsssbssssbsssbse.esbsjsbssssbsjsbse.esbsssbjssjbsssbse.esbbbbbbbbbbbbbbse.ebbbbbbbbbbbbbbbbe.eeeeeeeeeeeeeeeeee");
gLevelName.push("autumn");
gLevelData.push("eeeeeeeeeeeeeezeee.esssssssssssssssse.esssssssbssjssssse.essjssssbsssssssse.essssssbjbssssbsse.esbsssbbsbbssbbsse.essbbbbsssbbbbbsse.essbbsssssssbbssse.esssbbsspsssbbssse.essssbbssssssbbbse.essbbsbbbbbbbsssse.essssssssbssssssse.essssssssbssssssjz.essssssssbssssssse.esssjssssbssssssse.essssssssdssssjsse.ejssssssssssssssse.eeeeeeeeeeeeemeeee");
gLevelName.push("bubbles");
gLevelData.push("eeeeeeeeeeeemeeeee.essssssssssbbbssse.essbbbsssbbsssbbse.esbsjsbssbssjssbse.essbbbsssbbsssbbse.essssssssssbbbssse.esssssbbbbbsssssse.essssbsssssbssssse.esssbssspsssbsssse.esssbssjdsssbsssse.ebsssbsssssbssssse.ejbsssbbbbbsssssse.esbssssssssssbbsse.ebssssssssssbsjbse.esssbbbbssssbjsbse.essbstssbssssbbsse.essbsjssbsssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("bull's eye");
gLevelData.push("eeeeeeeeemeeeeeeee.eeeeesssstssseeeee.eeesssssssssssseee.eessssjbbbbjssssee.essssbbssssbbsssse.esssbsssjssssbssse.essbsssbbbbsssbsse.essbssbssssbssbsse.ejsbssbspdsbssbsse.essbssbssssbssbsje.essbssbssssbssbsse.essbsssbbbbsssbsse.esssbssssjsssbssse.essssbbssssbbsssse.eeesssjbbbbjssseee.eeeesssssssssseeee.eeeeeesssssseeeeee.eemeeeeeeeeeeeeeee");
gLevelName.push("crosshair");
gLevelData.push("eeeeeeeeeeeeeeeeee.essssssjdjssssssse.esssssssbsssssssse.esssssssbsssssssse.esssssssbsssssssse.esssssssbsssssssse.esssssssbsssssssse.ejssssssssssssssje.ebbbbbbspsbbbbbbbe.ejssssssssssssssje.esssssssbssssssssm.msssssssbsssssssse.esssssssbsssssssse.esssssssbsssssssse.esssssssbsssssssse.esssssssbsssssssse.essssssjbjssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("revenge");
gLevelData.push("eeeemeeeeeeeeeeeee.etbjbjbjbjbjbjbjbe.ebsbsbsbsbsbsbsbse.esssssssssssssssse.msssssssssssssssse.esssssssssssssssse.esssssssssssssssse.essssssssssssssssm.essssssspdssssssse.esssssssssssssssse.esssssssssssssssse.esssssssssssssssse.esssssssssssssssse.esssssssssssssssse.esssssssssssssssse.esssssssssssssssse.esssssssssssssssse.eeeeeeeeeeeeeeemee");
gLevelName.push("exposed");
gLevelData.push("eeeeeeeeeeeeeeeeee.ejeebssseesssbeeje.eeeesssseessssezee.eeeessssjjssssseee.ezesssssssssssseee.eessssseeeesssssee.esbsseeeeeeeessbse.essssebssssbesssse.esssbesspsssebssse.essssessssssesssse.essssessjdssesssse.esssseeeeeeeesssse.eeeessseeeesssseee.eeeessbsbsbssseeee.eeeesssstssssszeee.ezeejssseesssjeeee.eeeesssseesssseeee.eeeeeeeeeeeeeeeeee");
gLevelName.push("running wild");
gLevelData.push("eeeeeeeeeeeemeeeee.ebssseeemeeeesssbe.ebjssssssssssssjbe.ebssssssssssssssbm.ebsssbsbsbsbsbssbe.ebssssssssssssssbe.ebssssssssssssssbe.esssssssdsssssssse.eesssssspsssssssee.eejsssbsbsbsbssjee.messssssssssssssee.eessssssssssssssee.esssssssssssssssse.esssssssssssssssse.esssssssjjssssssse.essssssseessssssse.etsssseeeeeesssste.eeeeeeeemeeeeeeeee");
gLevelName.push("smiley");
gLevelData.push("eeeeeeeeeeeeeeeeee.ejbbbssssssssbbbte.essssssssssssssssm.essssbssssssbsssse.esssbbbssssbbbssse.essbbjbbssbbjbbsse.esssbbbssssbbbssse.mssssbssssssbsssse.essssssspsssssssse.esssssbbbbbsssssse.esjssssbdbsssssjse.esbsssssbssssssbse.essbssssssssssbsse.esssbssssssssbssse.essjsbssssssbsjsse.esssssbbssbbssssse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("criss-cross");
gLevelData.push("eeeeeeeeeeeeeeeeee.ebjbsssssssssbjbse.esbsbsssssssbsbssm.essbsbsssssbsbssse.zsssbsbsssbsbsssse.essssbsbjbsbssssse.esssssbsbsbsssssse.essssssbsbssssssse.essssssspsssssssse.essssssbdbssssssse.esssssbsbsbsssssse.mssssbsbjbsbssssse.esssbsbsssbsbsssse.essbsbsssssbsbssse.esbsbsssssssbsbsse.ebjbssssjssssbjbse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("hodge podge");
gLevelData.push("eeeeeeeemeeeeeeeee.essssssssssssbssse.esbbbbbbbsssbjbsse.esbbbjbbsssbbsbbse.esbjssbbbssccsccse.esccsscccsssssssse.ebsssssssssbssssse.essssbbsssssbsssse.ebssssbbpssssssbje.ejbssssssssssssbje.esssssbbsssssssbje.esssbbjsbbssssbsse.essbssssssssssssse.essjbssssbbbbbssse.mssbsssssssjssssse.esbssssbbbssssssse.esssssssdsssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("serpent");
gLevelData.push("eeeeeemeeeeeeeeeee.essssssssssssbbsse.esssbssssssstbbtse.essbjbssssssbbbbbz.esbsssbsssbssbbsse.esbssssbbbsbsbssse.essbbsssssssbsssse.essssbsssssssssjse.esssssbspsssssssse.essbssbsssbbssssse.esbsbbsssbssbbssse.esbssjssbssjssbsse.essbsssbssssssbsse.esssbbbssssssssbse.esssssssdssssssbse.esssjssbssssssbsse.esssssssbbbbbbssse.eeeeeeeeeeeeeemeee");
gLevelName.push("up a tree");
gLevelData.push("eeeeeeeeeeeeeeemee.esssssssbsssssssse.essssccbbbcsssssse.esssbbbbbbbccsssse.essscbbbdbbbbbssse.esscbbbbjbbbbsssse.escbbbbbsbbbcsssse.esbbbbbbsbbbbbcsse.esjssssspssssjbsse.essscbbcscbbbcssse.esscbbbcscbbbbcsse.escbbbbcscbbbbbcse.ebbbbbbcscbbbbbbbe.esssssscscssssssse.esssjsjcscjsjsssse.essssssssssssssssm.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("pockets");
gLevelData.push("eeeeeeeeeeeeeemeee.msssssbdbsbsssjsse.essssssbjbssssssse.ejssssssssssssbsse.essssssssssssbsbse.esssssssssssssbsse.essssbsssssssbsbje.essbjbbsssssssbsse.esssbssspsssssssse.ebbbssssssssssssse.esssssssssssssssse.mbbssbbssssssbssse.essssssssbsssbsbse.essssssssssssjbsje.esssssssssssssbbbe.ejssssssssssssbbse.essssssssjsssssste.eeeeeeeeeeemeeeeee");
gLevelName.push("cave dweller");
gLevelData.push("eeeeeeeeeeeeeeemee.esssssssbsbsssssse.essssssbjbssssssse.esbsssbsbsssssssse.esbssbsbssjbssssse.esbsssbsssssbsssse.esssssssscdssccbse.essssbbbsscssbjbse.essssjsspssscbssbe.esccsssssssbssssse.ejcsseeeeeejesssse.escsseezeeeeesssse.esssseeeemeeesssse.esssssssssssssssse.essssjssssssssssse.esssssssssssssssse.esssssssssssstssse.eeeeeeeeeeeeeemeee");
gLevelName.push("swiss cheese");
gLevelData.push("eeeeezeeeeeeeeeeee.essssbbbbjeessssse.esseesssccseeessse.ejeeessssssszessse.essezsssbbbsseesse.esjsssssbbssssssse.eseeesssssseeessse.eseeessssssjezssse.esbssssspseeeessse.essssssssssssbssse.esssbssseeessbcsse.esssbbsseezssbcsse.esssbbbseeessscsse.esssssjssssezecsse.esseessssssedessse.eseeeessssseeessse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("entrapment");
gLevelData.push("eeeeezeeeeeeeeeeee.ejssssssjsssssssje.essssssssbsssbssse.esssssssssssssssse.eseeeeesbsbsbsbssz.eseeeeesssstssssse.eseeeeeeeeeeeeeeee.eseeeeesssssssssse.eseeeeespsssssssse.esssssssssssssssse.mjssbsssbsssssssse.essssssssssseeesse.esbssbsbssbeeeesse.essssstsssseeeesse.eeeeeeeeeeeeeeesse.essssssssssseeesje.esssjsssdssssssssm.eeeeeeeeeeeeeeeeee");
gLevelName.push("treasure hunt");
gLevelData.push("eeeeeeeeeeeeeeeeee.essssssbbbbbbbssse.essbsssccjdjbccsse.esbjbsbsbsbsbsssse.essbsssssbjbssssbe.esssssssssbssssbsm.esssssbsssssssbsse.essssbjbsssssssbbe.essssbbbpsssssssse.ebssssbssssssbssse.ejbsssssssssbbbsse.ebssssssbssbbjbbse.essssssbjbssbbbsse.essssbssbsssssbsbe.esssbjbssssssssbbe.mssssbsssbssssbtbe.esssssssbjbssssbse.eeeeeeeeeeeeeeeeee");
gLevelName.push("layers");
gLevelData.push("eeeeeeeemeeeeeeeee.essssjbbbbbjbbjbbe.ebbbbbbbbssjssbsse.ebbsssssbssssssjse.essbbbbbsbbbbbbbbe.esssssjsssssssssje.ebbbbbbbbbbbbbssse.ebsssssbssssssssse.esbbbbbspsssssssse.esssssssssbssssssz.esssssssssssssssse.ejsssssbbsssssssse.ebbbbbssssbbbbbbbe.essdssbbbssssjssse.essssssssssbbbssse.essssssssssssbbbse.esssssssssssssssse.eeeeeeeeemeeeeeeee");
gLevelName.push("boggled");
gLevelData.push("eeeeeeeeeeeeeeeeee.ejssssssjssssjssse.esssssemssbemsbsse.esbjsssbssssssbsse.esbsssbbssssssssse.essessssssssssssse.essmesssssembsssbe.essbbsssssssjbssbe.ejsssssspsssssssje.ebbssbsbssbsssssse.ejsssbbdbsbsssbbbe.esbbssssssbsssbbse.essssssssssssssjse.esssssssssssssssse.essmesssmesssemsse.esbsbsssbbsssbbbse.ejssssssstssssssje.eeeeeeeeeeeeeeeeee");
gLevelName.push("two caves");
gLevelData.push("eeeeeeeeeeeeeeeeee.esssssbssssbssssse.essbssssbsssssbsse.esssjsssjsssjsssse.essseeeeeeeeeeesse.essssmsbsbsbseesse.essssebsbtbsbsesse.essssesbsbsbsessse.essssssspbsseeeese.essssbsssssseemsse.esssbssssssssessse.essssssssssscsssse.esssssbsbbbbssssse.essssjcbbbbjssssse.esssssbbbbbsssssse.esssscccsccccsccse.esjsssssdsssssjsse.eeeeeeeeeeeeeeeeee");
gLevelName.push("dungeon");
gLevelData.push("eeeeeeeeeeeeeeemee.esssssssssssssssse.esbssbsbsjsjbccsse.esbsssssssssbsssse.esbsssbbbsjsseeese.esbsssssjeeeemeese.zsssssssseeeteeese.essssbbbseeeeeeese.essssssspscscscsse.ecccsssssssbbjssse.essssssssssjbbssse.essssssssssbbjssse.essssbbbbbssssssse.esssbssdssbsssssse.essbsjsssssbssssse.msbbbbbbbbbbbsssse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("vertical maze");
gLevelData.push("eeeeeeeeeeemeeeeee.esssjcsssssssbbbse.esssscssssssssjsse.esssscssbbssssccse.essbscssbbssssssse.essbscsbjscsssssse.essjscscscssssssse.msssscssssssssssse.esssscscpsbbssssse.essssbscsbbbssssse.essssbscsbjcssssse.esssscscsssbssssse.ejssscsscccsssssse.esssscsssssbbsssse.esssscsssssssbssse.esbbscssssssssbbse.ebdbsssssjsssssste.eeeeeeeeeeeeeeeeee");
gLevelName.push("guardians");
gLevelData.push("eeeeeeeeeeeeeeeeee.essssssssbbbbbbsse.esemebbsebbbbbbsse.eseeesbsssssssssse.esebssssjezeeeeese.esejssssssssbbbbbe.essbbbssssssssssse.essbbbsssssseeesse.essssssspsssseeese.eseessssssssssezje.esezesssssssseeese.esejeessssssdeesse.eseeeeseesssbsssse.esssssebbeesbseese.essssebjsmesbeeese.esssssbeeessjzesse.esssssssssssssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("landslide");
gLevelData.push("eeeeeeeeeeeeeeeeee.esssssssssssssssse.esssssbbbbbsssssse.essssbbbbbbbssssse.esssbbbbjbbbbsssse.essbbbbjtjbbbbssse.esbbbbbbsbbbbbbsse.esssscccscccssssse.essssssspsssssssse.esbbbbbbbbbbbbbsse.essssjssssssjsssse.esbbbbbbbbbbbbbsse.esssjsssjssssjssse.esssssssssssssssse.essssssbbbssssssse.essssssbjbssssssse.esssssjbdbjsssssse.eeeeeeeeeeeeeeeeee");
gLevelName.push("hourglass");
gLevelData.push("eeeeeeeeeeeeeeezee.esssssssjsssssssse.essbbbbbbbbbbbbsse.esssbbbbbbbbbbssse.essssbbbjjbbbsssse.esssssbbbbbbssssse.essssssbbbbsssssse.esssssssssssssssse.ejsssssspsssssssje.esssssssssssssssse.essssssbbbbsssssse.esssssbbdbbbssssse.essssbbbbbbbbsssse.esssbbbbbbbbbbssse.essbbjbbbbbbjbbsse.essssssstsssssssse.esssssssssssssssse.eeemeeeeeeeeeeeeee");
}
function frameLoop() {
if (gMode == SETUP) {
var j = 1;
while (j < (gGridCols - 1)) {
var lName = ("soil_" + gSoilLevel);
_root.soil_MCA.attachMovie("soil", lName, gSoilLevel);
var lSoil = _root.soil_MCA[lName];
lSoil.pRow = gRow;
lSoil.pCol = j;
lSoil.pEmpty = false;
lSoil.pType = SOIL;
place(lSoil);
var lSubtype = Math.ceil(Math.random() * 3);
lSoil.gotoAndStop(lSubtype);
gSoil.push(lSoil);
gPoint[gRow][j] = lSoil;
gSoilLevel++;
j++;
}
gRow++;
if (gRow >= (gGridRows - 1)) {
gMode = NORMAL;
setUpObjects();
placeOffstage(_root.setup_cover);
if (gPlayMode == COMPETITION) {
placeOffstage(_root.level_up_MC);
placeOffstage(_root.level_down_MC);
placeOffstage(_root.skip_level_MC);
} else {
var i = 1;
while (i < 4) {
var lName = ("life_" + i);
placeOffstage(_root[lName]);
i++;
}
}
gPrepareWaitForKey = true;
gWaitForKey = false;
}
} else if (gMode == NORMAL) {
if (gPrepareWaitForKey) {
gKeyPress = new Array();
gPrepareWaitForKey = false;
gWaitForKey = true;
_root.keychecker.gotoAndStop("active");
}
var lTime = getTimer();
if (gMoveTimer == 0) {
gMoveTimer = lTime;
gBoulderTimer = lTime;
gMonsterTimer = lTime;
gZombieTimer = lTime;
return(undefined);
}
if ((gMoveTimer + gMoveInterval) < lTime) {
gMoveTimer = lTime;
checkKeyQueue();
}
updateMonsters();
updateZombies();
updateBoulders();
checkBaddyKill();
checkPlayTimer();
} else if (gMode == DIE) {
} else if (gMode == WAIT) {
} else if (gMode == SETUPLEVEL) {
setUpNextLevel();
}
}
function playButtonSound() {
gHappySound.attachSound("happy_sound");
gHappySound.start();
}
function resetScore() {
score = 0;
scorecheck = "0";
_root.score_display = scorecheck;
}
function startGame() {
gLevel = 1;
gLastLevel = gLevelData.length - 1;
gLives = 3;
resetScore();
_root.level_display = gLevel;
setUpBoard();
}
function setPracticeMode() {
gPlayMode = PRACTICE;
}
function setCompetitionMode() {
gPlayMode = COMPETITION;
}
function quitGame() {
_root.gotoAndStop("startgame");
}
function playAgain() {
gMode = WAIT;
_root.gotoAndStop("startgame");
}
function restartLevel() {
if (gPlayMode == COMPETITION) {
gLives--;
updateLives();
if (gLives < 0) {
gotoAndStop (8);
} else {
nextLevel(0);
}
} else if (gPlayMode == PRACTICE) {
resetScore();
nextLevel(0);
}
}
function skipToLevel() {
var lWhich = Math.floor(Number(_root.skip_level_MC.skip_to_level));
if ((isNaN(lWhich) || (lWhich == undefined)) || (lWhich < 1)) {
lWhich = 1;
} else if (gLastLevel < lWhich) {
lWhich = gLastLevel;
}
_root.skip_level_MC.skip_to_level = lWhich;
resetScore();
_root.startLevel(lWhich);
}
function submitScore() {
if (gPlayMode == PRACTICE) {
return(undefined);
}
extra = extra + ("Level " + gLevel);
stats = stats + "";
loadMovie ((((((((((((("game.swf?score=" + score) + "&scorecheck=") + scorecheck) + "&extra=") + extra) + "&stats=") + stats) + "&scoremode=") + scoremode) + "&gamename=") + gamename) + "&textname=") + textname, _root);
}
function setUpBoard() {
gData = gLevelData[gLevel].split(".");
gMode = SETUP;
gPoint = new Array();
var i = 0;
while (i < gGridRows) {
gPoint[i] = new Array();
i++;
}
gSoilLevel = 1;
gSoil = new Array();
initObjects();
gRow = 1;
gDigger = _root.diggerMC;
gDoor = _root.doorMC;
_root.digger._x = 100;
gMoveTimer = 0;
gBoulderTimer = 0;
gMonsterTimer = 0;
gZombieTimer = 0;
gPlayTimer = 0;
}
function startLevel(vWhich) {
var lChange = (vWhich - gLevel);
nextLevel(lChange);
}
function nextLevel(vChange) {
if (vChange != 0) {
gLevel = gLevel + vChange;
_root.level_display = gLevel;
if (gLastLevel < gLevel) {
gotoAndStop (8);
return(undefined);
}
gData = gLevelData[gLevel].split(".");
}
placeOnstage(_root.setup_cover);
gMode = SETUPLEVEL;
gPrepareWaitForKey = true;
gWaitForKey = false;
_root.skip_level_MC.skip_to_level = "";
}
function initObjects() {
initJewels();
initTreasures();
initBoulders();
initConcrete();
initMonsters();
initZombies();
}
function setUpNextLevel() {
gMode = NORMAL;
gDoor.gotoAndStop("closed");
gDoor.pOpen = false;
var i = 0;
while (i < gGridRows) {
var j = 0;
while (j < gGridCols) {
gPoint[i][j] = undefined;
j++;
}
i++;
}
initObjects();
var i = 0;
while (i < gSoil.length) {
var s = gSoil[i];
gPoint[s.pRow][s.pCol] = gSoil[i];
s.pEmpty = false;
s.pStartEmpty = false;
place(s);
var lType = Math.ceil(Math.random() * 3);
s.gotoAndStop(lType);
i++;
}
setUpObjects();
placeOffstage(_root.setup_cover);
_root.keychecker.gotoAndStop("inactive");
gPrepareWaitForKey = true;
gWaitForKey = false;
}
function setUpObjects() {
var i = 0;
while (i < gData.length) {
var j = 0;
while (j < gData[i].length) {
var lCode = gData[i].charAt(j);
if (lCode == "b") {
setUpBoulder(i, j);
} else if (lCode == "j") {
setUpJewel(i, j);
} else if (lCode == "t") {
setUpTreasure(i, j);
} else if (lCode == "c") {
setUpConcrete(i, j);
} else if (lCode == "m") {
setUpMonster(i, j);
} else if (lCode == "z") {
setUpZombie(i, j);
} else if (lCode == "p") {
setUpDigger(i, j);
} else if (lCode == "d") {
setUpDoor(i, j);
} else if (lCode == "e") {
setUpSpace(i, j);
}
j++;
}
i++;
}
var i = 0;
while (i < gMonster.length) {
setMonsterDir(gMonster[i]);
i++;
}
}
function initBoulders() {
for (var lProp in /boulder_MCA) {
_root.boulder_MCA[lProp].removeMovieClip();
}
gBoulder = new Array();
gBoulderLevel = 1;
gCheckBoulderRow = new Array();
var i = 1;
while (i < (gGridRows - 1)) {
gCheckBoulderRow[i] = new Array();
i++;
}
}
function setUpBoulder(r, c) {
var lName = ("boulder_" + gBoulderLevel);
_root.boulder_MCA.attachMovie("boulder", lName, gBoulderLevel);
var lBoulder = _root.boulder_MCA[lName];
occupyPoint(lBoulder, r, c);
lBoulder.pDrop = false;
lBoulder.pType = BOULDER;
lBoulder.pBounceDir = 0;
lBoulder.pFreeFall = false;
lBoulder.pCheckMe = false;
lBoulder.pFalling = false;
lBoulder.id = gBoulderLevel;
gBoulder.push(lBoulder);
gBoulderLevel++;
}
function initJewels() {
for (var lProp in /jewel_MCA) {
_root.jewel_MCA[lProp].removeMovieClip();
}
gJewel = new Array();
gJewelLevel = 1;
}
function initTreasures() {
for (var lProp in /treasure_MCA) {
_root.treasure_MCA[lProp].removeMovieClip();
}
gTreasure = new Array();
gTreasureLevel = 1;
}
function setUpJewel(r, c) {
var lName = ("jewel_" + gJewelLevel);
_root.jewel_MCA.attachMovie("jewel", lName, gJewelLevel);
var lJewel = _root.jewel_MCA[lName];
occupyPoint(lJewel, r, c);
lJewel.pType = JEWEL;
gJewel.push(lJewel);
gJewelLevel++;
}
function setUpTreasure(r, c) {
var lName = ("treasure_" + gTreasureLevel);
_root.treasure_MCA.attachMovie("treasure", lName, gTreasureLevel);
var lTreasure = _root.treasure_MCA[lName];
occupyPoint(lTreasure, r, c);
lTreasure.pType = TREASURE;
gTreasure.push(lTreasure);
gTreasureLevel++;
}
function initConcrete() {
for (var lProp in /concrete_MCA) {
_root.concrete_MCA[lProp].removeMovieClip();
}
gConcrete = new Array();
gConcreteLevel = 1;
}
function setUpConcrete(r, c) {
var lName = ("concrete_" + gConcreteLevel);
_root.concrete_MCA.attachMovie("concrete", lName, gConcreteLevel);
var lConcrete = _root.concrete_MCA[lName];
occupyPoint(lConcrete, r, c);
lConcrete.pType = CONCRETE;
gConcrete.push(lConcrete);
gConcreteLevel++;
}
function initMonsters() {
for (var lProp in /monster_MCA) {
_root.monster_MCA[lProp].removeMovieClip();
}
gMonster = new Array();
gMonsterLevel = 1;
}
function setUpMonster(r, c) {
var lName = ("monster_" + gMonsterLevel);
_root.monster_MCA.attachMovie("monster", lName, gMonsterLevel);
var lMonster = _root.monster_MCA[lName];
occupyPoint(lMonster, r, c);
lMonster.pType = MONSTER;
lMonster.pHug = (2 * Math.floor(2 * Math.random())) - 1;
lMonster.pMode = NORMAL;
gMonster.push(lMonster);
gMonsterLevel++;
}
function initZombies() {
for (var lProp in /zombie_MCA) {
_root.zombie_MCA[lProp].removeMovieClip();
}
gZombie = new Array();
gZombieLevel = 1;
}
function setUpZombie(r, c) {
var lName = ("zombie_" + gZombieLevel);
_root.zombie_MCA.attachMovie("zombie", lName, gZombieLevel);
var lZombie = _root.zombie_MCA[lName];
occupyPoint(lZombie, r, c);
lZombie.pType = ZOMBIE;
lZombie.pMode = NORMAL;
gZombie.push(lZombie);
gZombieLevel++;
}
function setMonsterDir(vMonster) {
var lStart = Math.floor(4 * Math.random());
var i = 0;
while (i < 4) {
var lDir = turnDir(lStart, i);
var lOrtho = dirToOrtho(lDir);
var lType = typeAt(vMonster.pRow + lOrtho.r, vMonster.pCol + lOrtho.c);
if (lType == EMPTY) {
vMonster.pDir = lDir;
return;
}
i++;
}
}
function setUpDigger(r, c) {
gDigger.pType = DIGGER;
occupyPoint(gDigger, r, c);
gDigger.graphic.animation.gotoAndPlay(2);
trace("telling digger to play 2");
}
function setUpDoor(r, c) {
occupyPoint(gDoor, r, c);
gDoor.pType = DOOR;
gDoor.pOpen = false;
}
function setUpSpace(r, c) {
if (typeAt(r, c) == SOIL) {
gPoint[r][c].pEmpty = true;
}
if (typeAt(r, c) != EMPTY) {
placeOffstage(gPoint[r][c]);
}
gPoint[r][c] = undefined;
}
function diggerWins() {
updateScore(200);
gHappySound.attachSound("happy_sound");
gHappySound.start();
nextLevel(1);
}
function checkPlayTimer() {
if (gWaitForKey || (gPrepareWaitForKey)) {
return(undefined);
}
var lTime = getTimer();
if ((gPlayTimer + 5000) < lTime) {
updateScore(-1);
gPlayTimer = lTime;
}
}
function pressingKey() {
if (gKeyDown) {
return(undefined);
}
if (gMode == NORMAL) {
if (gPrepareWaitForKey) {
} else {
if (gWaitForKey) {
gKeyPress = new Array();
gWaitForKey = false;
gPlayTimer = getTimer();
}
checkKeyboard();
}
}
gKeyDown = true;
}
function releasedKey() {
gKeyDown = false;
}
function checkKeyboard() {
var lKeyCode = Key.getCode();
if (lKeyCode == 37) {
gKeyPress.push([0, -1]);
} else if (lKeyCode == 39) {
gKeyPress.push([0, 1]);
} else if (lKeyCode == 38) {
gKeyPress.push([-1, 0]);
} else if (lKeyCode == 40) {
gKeyPress.push([1, 0]);
}
}
function checkKeyQueue() {
if (0 < gKeyPress.length) {
var k = gKeyPress.shift();
moveDigger(k[0], k[1]);
}
}
function moveObject(vObj, vRows, vCols) {
var r = vObj.pRow;
var c = vObj.pCol;
if ((vObj.pType == MONSTER) && (typeAt(r, c) == DUAL)) {
var lZombie = gPoint[r][c].pOccupant[1];
gPoint[r][c] = lZombie;
} else {
gPoint[r][c] = undefined;
}
var lNewR = (vObj.pRow + vRows);
var lNewC = (vObj.pCol + vCols);
occupyPoint(vObj, lNewR, lNewC);
}
function moveDigger(vRows, vCols) {
if (vCols < 0) {
gDigger.graphic._xscale = -100;
} else if (0 < vCols) {
gDigger.graphic._xscale = 100;
}
var r = (gDigger.pRow + vRows);
var c = (gDigger.pCol + vCols);
var rOld = gDigger.pRow;
var cOld = gDigger.pCol;
if (!onStage(r, c)) {
return(undefined);
}
if (typeAt(r, c) == BOULDER) {
if (onStage(r, c + vCols) && (typeAt(r, c + vCols) == EMPTY)) {
checkAddBoulderAt(r, c);
moveObject(gPoint[r][c], vRows, vCols);
moveObject(gDigger, vRows, vCols);
gPushSound.attachSound("push_sound");
gPushSound.start();
// unexpected jump
}
return(undefined);
}
if (typeAt(r, c) == CONCRETE) {
return(undefined);
}
if (typeAt(r, c) == SOIL) {
moveObject(gDigger, vRows, vCols);
gDigSound.start();
} else if (typeAt(r, c) == EMPTY) {
moveObject(gDigger, vRows, vCols);
} else if (typeAt(r, c) == JEWEL) {
gJewelSound.attachSound("jewel_sound");
gJewelSound.start();
gHappySound.attachSound("happy_sound");
gHappySound.start();
updateScore(gJewelValue);
var lJewel = gPoint[r][c];
moveObject(gDigger, vRows, vCols);
var lIndex = getOne(gJewel, lJewel);
gJewel.splice(lIndex, 1);
if (gJewel.length == 0) {
openDoor();
}
} else if (typeAt(r, c) == TREASURE) {
gTreasureSound.attachSound("treasure_sound");
gTreasureSound.start();
gHappySound.attachSound("happy_sound");
gHappySound.start();
updateScore(gTreasureValue);
var lTreasure = gPoint[r][c];
moveObject(gDigger, vRows, vCols);
var lIndex = getOne(gTreasure, lTreasure);
gTreasure.splice(lIndex, 1);
} else {
if (typeAt(r, c) == DOOR) {
if (gDoor.pOpen) {
diggerWins();
// unexpected jump
}
return(undefined);
}
if (typeAt(r, c) == DUAL) {
return(undefined);
}
}
addBouldersToCheck(rOld, cOld, true);
gMoveTimer = getTimer();
}
function openDoor() {
gDoor.gotoAndPlay("open");
gDoor.pOpen = true;
gDoorSound.attachSound("door_sound");
gDoorSound.start();
}
function checkBaddyKill() {
var i = 0;
while (i < 4) {
var lOrtho = dirToOrtho(i);
var lType = typeAt(gDigger.pRow + lOrtho.r, gDigger.pCol + lOrtho.c);
if (((lType == MONSTER) || (lType == ZOMBIE)) || (lType == DUAL)) {
diggerDies(true);
}
i++;
}
}
function updateZombies() {
var lTime = getTimer();
if ((gZombieTimer + gZombieInterval) < lTime) {
var lPlaySound = false;
var i = (gZombie.length - 1);
for ( ; i >= 0 ; i--) {
if (gZombie[i].pMode == NORMAL) {
var dr = (gDigger.pRow - gZombie[i].pRow);
var dc = (gDigger.pCol - gZombie[i].pCol);
if (Math.abs(dr) >= Math.abs(dc)) {
var lMoveRow = (dr / Math.abs(dr));
var lType = typeAtExtended(gZombie[i].pRow + lMoveRow, gZombie[i].pCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], lMoveRow, 0);
lPlaySound = true;
continue;
}
if (dc != 0) {
var lMoveCol = (dc / Math.abs(dc));
var lType = typeAtExtended(gZombie[i].pRow, gZombie[i].pCol + lMoveCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], 0, lMoveCol);
lPlaySound = true;
continue;
}
} else {
// unexpected jump
var lMoveCol = (dc / Math.abs(dc));
var lType = typeAtExtended(gZombie[i].pRow, gZombie[i].pCol + lMoveCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], 0, lMoveCol);
lPlaySound = true;
} else if (dr != 0) {
var lMoveRow = (dr / Math.abs(dr));
var lType = typeAtExtended(gZombie[i].pRow + lMoveRow, gZombie[i].pCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], lMoveRow, 0);
lPlaySound = true;
continue;
}
} else {
var lFirstDir = Math.floor(Math.random() * 4);
var j = 0;
while (j < 4) {
var lDir = turnDir(lFirstDir, j);
var lOrtho = dirToOrtho(lDir);
var lRow = (gZombie[i].pRow + lOrtho.r);
var lCol = (gZombie[i].pCol + lOrtho.c);
var lType = typeAtExtended(lRow, lCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], lOrtho.r, lOrtho.c);
lPlaySound = true;
break;
}
j++;
}
lPlaySound = true;
continue;
if (gZombie[i].pMode == DIE) {
if ((gZombie[i].pTimer + gDieTime) < lTime) {
var lZombie = gZombie[i];
addBouldersToCheck(lZombie.pRow, lZombie.pCol, true);
gPoint[lZombie.pRow][lZombie.pcol] = undefined;
var lIndex = getOne(gZombie, lZombie);
gZombie.splice(lIndex, 1);
lZombie.removeMovieClip();
}
}
}
}
} else {
var lMoveCol = (dc / Math.abs(dc));
var lType = typeAtExtended(gZombie[i].pRow, gZombie[i].pCol + lMoveCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], 0, lMoveCol);
lPlaySound = true;
} else if (dr != 0) {
var lMoveRow = (dr / Math.abs(dr));
var lType = typeAtExtended(gZombie[i].pRow + lMoveRow, gZombie[i].pCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], lMoveRow, 0);
lPlaySound = true;
continue;
}
} else {
var lFirstDir = Math.floor(Math.random() * 4);
var j = 0;
while (j < 4) {
var lDir = turnDir(lFirstDir, j);
var lOrtho = dirToOrtho(lDir);
var lRow = (gZombie[i].pRow + lOrtho.r);
var lCol = (gZombie[i].pCol + lOrtho.c);
var lType = typeAtExtended(lRow, lCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], lOrtho.r, lOrtho.c);
lPlaySound = true;
break;
}
j++;
}
lPlaySound = true;
continue;
if (gZombie[i].pMode == DIE) {
if ((gZombie[i].pTimer + gDieTime) < lTime) {
var lZombie = gZombie[i];
addBouldersToCheck(lZombie.pRow, lZombie.pCol, true);
gPoint[lZombie.pRow][lZombie.pcol] = undefined;
var lIndex = getOne(gZombie, lZombie);
gZombie.splice(lIndex, 1);
lZombie.removeMovieClip();
}
}
}
}
var lFirstDir = Math.floor(Math.random() * 4);
var j = 0;
while (j < 4) {
var lDir = turnDir(lFirstDir, j);
var lOrtho = dirToOrtho(lDir);
var lRow = (gZombie[i].pRow + lOrtho.r);
var lCol = (gZombie[i].pCol + lOrtho.c);
var lType = typeAtExtended(lRow, lCol);
if (lType == EMPTY) {
addBouldersToCheck(gZombie[i].pRow, gZombie[i].pCol, true);
moveObject(gZombie[i], lOrtho.r, lOrtho.c);
lPlaySound = true;
break;
}
j++;
}
lPlaySound = true;
} else if (gZombie[i].pMode == DIE) {
if ((gZombie[i].pTimer + gDieTime) < lTime) {
var lZombie = gZombie[i];
addBouldersToCheck(lZombie.pRow, lZombie.pCol, true);
gPoint[lZombie.pRow][lZombie.pcol] = undefined;
var lIndex = getOne(gZombie, lZombie);
gZombie.splice(lIndex, 1);
lZombie.removeMovieClip();
}
}
}
if (lPlaySound) {
gZombieSound.attachSound("zombie_sound");
gZombieSound.start();
}
gZombieTimer = lTime;
}
}
function removeBaddy(vBaddy) {
addBouldersToCheck(vBaddy.pRow, vBaddy.pCol, true);
gPoint[vBaddy.pRow][vBaddy.pcol] = undefined;
if (vBaddy.pType == MONSTER) {
var lIndex = getOne(gMonster, vBaddy);
gMonster.splice(lIndex, 1);
} else if (vBaddy.pType == ZOMBIE) {
var lIndex = getOne(gZombie, vBaddy);
gZombie.splice(lIndex, 1);
}
vBaddy.removeMovieClip();
}
function updateMonsters() {
var lTime = getTimer();
if ((gMonsterTimer + gMonsterInterval) < lTime) {
var lPlaySound = false;
var i = (gMonster.length - 1);
while (i >= 0) {
if (gMonster[i].pMode == NORMAL) {
var lMove = new Array();
var lStuck = false;
var lHuggingBoundary = false;
var lOldDir = gMonster[i].pDir;
if ((20 * Math.random()) < 1) {
gMonster[i].pHug = gMonster[i].pHug * -1;
gMonster[i].pDir = turnDir(gMonster[i].pDir, 2);
}
var j = 0;
while (j < 4) {
var lDir = turnDir(gMonster[i].pDir, gMonster[i].pHug * (1 - j));
var lOrtho = dirToOrtho(lDir);
var lRow = (gMonster[i].pRow + lOrtho.r);
var lCol = (gMonster[i].pCol + lOrtho.c);
var lType = typeAtExtended(lRow, lCol);
if ((lType == EMPTY) || (lType == ZOMBIE)) {
lMove.push({dir:lDir, r:lOrtho.r, c:lOrtho.c});
if (j == 0) {
var lDiag = nextDir(lOrtho, gMonster[i].pHug);
var lDiagRow = (gMonster[i].pRow + lDiag.r);
var lDiagCol = (gMonster[i].pCol + lDiag.c);
var lType = typeAtExtended(lDiagRow, lDiagCol);
if ((lType == EMPTY) || (lType == ZOMBIE)) {
lStuck = true;
} else {
break;
}
} else if (!lStuck) {
break;
}
} else if ((lType == OFFSTAGE) && (j == 0)) {
lHuggingBoundary = true;
}
j++;
}
if (!lStuck) {
var lWhich = 0;
} else {
var lWhich = Math.floor(Math.random() * lMove.length);
}
gMonster[i].pDir = lMove[lWhich].dir;
addBouldersToCheck(gMonster[i].pRow, gMonster[i].pCol, true);
moveObject(gMonster[i], lMove[lWhich].r, lMove[lWhich].c);
if (typeAtExtended(gMonster[i].pRow + lMove[lWhich].r, gMonster[i].pCol + lMove[lWhich].c) == MONSTER) {
gMonster[i].pHug = gMonster[i].pHug * -1;
gMonster[i].pDir = turnDir(gMonster[i].pDir, 2);
} else if (lHuggingBoundary && (gMonster[i].pDir == lOldDir)) {
gMonster[i].pDir = turnDir(gMonster[i].pDir, 2);
}
lPlaySound = true;
} else if (gMonster[i].pMode == DIE) {
if ((gMonster[i].pTimer + gDieTime) < lTime) {
var lMonster = gMonster[i];
addBouldersToCheck(lMonster.pRow, lMonster.pCol, true);
gPoint[lMonster.pRow][lMonster.pcol] = undefined;
var lIndex = getOne(gMonster, lMonster);
gMonster.splice(lIndex, 1);
lMonster.removeMovieClip();
}
}
i--;
}
if (lPlaySound) {
gMonsterSound.attachSound("monster_sound");
gMonsterSound.start();
}
gMonsterTimer = lTime;
}
}
function typeAtExtended(r, c) {
if (!onStageMonster(r, c)) {
return(OFFSTAGE);
}
if (gPoint[r][c] == undefined) {
return(EMPTY);
}
return(gPoint[r][c].pType);
}
function typeAt(r, c) {
if (gPoint[r][c] == undefined) {
return(EMPTY);
}
return(gPoint[r][c].pType);
}
function turnDir(vDir, vChange) {
vDir = vDir + vChange;
while (vDir < 0) {
vDir = vDir + 4;
}
while (3 < vDir) {
vDir = vDir - 4;
}
return(vDir);
}
function dirToOrtho(vDir) {
if (vDir == 0) {
return({r:-1, c:0});
}
if (vDir == 1) {
return({r:0, c:1});
}
if (vDir == 2) {
return({r:1, c:0});
}
return({r:0, c:-1});
}
function boulderMove(vBoulder) {
var r = vBoulder.pRow;
var c = vBoulder.pCol;
var lChoice = new Array();
if (onStage(r + 1, c) && (typeAt(r + 1, c) == EMPTY)) {
return({r:1, c:0});
}
if (typeAt(r + 1, c) == BOULDER) {
if ((onStage(r + 1, c - 1) && (typeAt(r, c - 1) == EMPTY)) && (typeAt(r + 1, c - 1) == EMPTY)) {
lChoice.push({r:1, c:-1});
}
if ((onStage(r + 1, c + 1) && (typeAt(r, c + 1) == EMPTY)) && (typeAt(r + 1, c + 1) == EMPTY)) {
lChoice.push({r:1, c:1});
}
if (lChoice.length == 0) {
return(0);
}
if (lChoice.length == 1) {
return(lChoice[0]);
}
if (lChoice.length == 2) {
var lBounceDir = gPoint[r + 1][c].pBounceDir;
if (lBounceDir == 0) {
lBounceDir = (2 * Math.floor(Math.random() * 2)) - 1;
gPoint[r + 1][c].pBounceDir = lBounceDir;
} else {
gPoint[r + 1][c].pBounceDir = gPoint[r + 1][c].pBounceDir * -1;
}
var lIndex = ((gPoint[r + 1][c].pBounceDir + 1) / 2);
return(lChoice[lIndex]);
}
} else {
return(0);
}
}
function startBaddyDying(vBaddy) {
if (vBaddy.pMode == DIE) {
return(undefined);
}
vBaddy.pMode = DIE;
vBaddy.pTimer = getTimer();
gHappySound.attachSound("happy_sound");
gHappySound.start();
updateScore(250);
vBaddy.gotoAndPlay("squish");
}
function updateBoulders() {
var lTime = getTimer();
if ((gBoulderTimer + gBoulderInterval) < lTime) {
var lDiggerDies = false;
var lBoulderLands = false;
var i = (gGridRows - 2);
while (i >= 0) {
var k = (gCheckBoulderRow[i].length - 1);
while (k >= 0) {
var lBoulder = gCheckBoulderRow[i][k];
lBoulder.pFreeFall = false;
var lMove = boulderMove(lBoulder);
if (lMove != 0) {
if (i == (gGridRows - 3)) {
lBoulderLands = true;
} else {
lBoulder.pFalling = true;
}
if (lMove.c == 0) {
lBoulder.pFreeFall = true;
} else {
lBoulderLands = true;
}
addBouldersToCheck(i, lBoulder.pCol, false);
gCheckBoulderRow[i].splice(k, 1);
gCheckBoulderRow[i + 1].push(lBoulder);
moveObject(lBoulder, lMove.r, lMove.c);
var lBelow = typeAt(lBoulder.pRow + 1, lBoulder.pCol);
if (lBelow == DIGGER) {
lDiggerDies = true;
lBoulderLands = true;
} else if ((lBelow == MONSTER) || (lBelow == ZOMBIE)) {
startBaddyDying(gPoint[lBoulder.pRow + 1][lBoulder.pCol]);
lBoulderLands = true;
} else if (lBelow == DUAL) {
startBaddyDying(gPoint[lBoulder.pRow + 1][lBoulder.pCol].pOccupant[0]);
startBaddyDying(gPoint[lBoulder.pRow + 1][lBoulder.pCol].pOccupant[1]);
lBoulderLands = true;
} else if (!lBoulderLands) {
if ((lBelow == SOIL) || (lBelow == CONCRETE)) {
lBoulderLands = true;
}
}
} else {
if (lBoulder.pFalling) {
var lBelow = typeAt(lBoulder.pRow + 1, lBoulder.pCol);
if (lBelow == DIGGER) {
lDiggerDies = true;
} else if ((lBelow == MONSTER) || (lBelow == ZOMBIE)) {
startBaddyDying(gPoint[lBoulder.pRow + 1][lBoulder.pCol]);
} else if (lBelow == DUAL) {
startBaddyDying(gPoint[lBoulder.pRow + 1][lBoulder.pCol].pOccupant[0]);
startBaddyDying(gPoint[lBoulder.pRow + 1][lBoulder.pCol].pOccupant[1]);
}
}
gCheckBoulderRow[i].splice(k, 1);
lBoulder.pCheckMe = false;
lBoulder.pFalling = false;
}
k--;
}
i--;
}
if (lDiggerDies) {
diggerDies(false);
} else if (!lBoulderLands) {
var i = (gGridRows - 2);
while (i >= 0) {
var k = (gCheckBoulderRow[i].length - 1);
while (k >= 0) {
var lBoulder = gCheckBoulderRow[i][k];
if (lBoulder.pFreeFall) {
var lBelow = typeAt(lBoulder.pRow + 1, lBoulder.pCol);
if (lBelow != EMPTY) {
if (lBelow != BOULDER) {
lBoulderLands = true;
break;
}
if (!gPoint[lBoulder.pRow + 1][lBoulder.pCol].pFreeFall) {
lBoulderLands = true;
break;
}
}
}
if (lBoulderLands) {
break;
}
k--;
}
if (lBoulderLands) {
break;
}
i--;
}
}
if (lBoulderLands) {
gBoulderSound.attachSound("boulder_sound");
gBoulderSound.start();
}
}
gBoulderTimer = lTime;
}
function addBouldersToCheck(r, c, vOmni) {
var lCol = (c - 1);
while ((c + 1) >= lCol) {
checkAddBoulderAt(r - 1, lCol);
lCol++;
}
if (vOmni) {
checkAddBoulderAt(r, c - 1);
checkAddBoulderAt(r, c + 1);
}
}
function checkAddBoulderAt(r, c) {
if (typeAt(r, c) == BOULDER) {
var lBoulder = gPoint[r][c];
if (!lBoulder.pCheckMe) {
gCheckBoulderRow[r].push(lBoulder);
lBoulder.pCheckMe = true;
}
}
}
function dieDone() {
if (gPlayMode == COMPETITION) {
gLives--;
updateLives();
if (gLives < 0) {
gotoAndStop (8);
} else {
nextLevel(0);
}
} else if (gPlayMode == PRACTICE) {
resetScore();
nextLevel(0);
}
}
function updateLives() {
var i = 1;
while (i < 4) {
var lName = ("life_" + i);
if (gLives >= i) {
placeOnstage(_root[lName]);
} else {
placeOffstage(_root[lName]);
}
i++;
}
}
function diggerDies(vMonster) {
if (vMonster) {
gDiggerDieSound.attachSound("digger_die_sound");
gDiggerDieSound.start();
gDiggerDieFrame = "monster";
} else {
gSquashSound.attachSound("squash_sound");
gSquashSound.start();
gDiggerDieFrame = "squish";
}
gMode = DIE;
gDieTimer = getTimer();
}
function occupyPoint(vObj, r, c) {
var lDualFlag = false;
if (typeAt(r, c) != EMPTY) {
if (typeAt(r, c) == SOIL) {
gPoint[r][c].pEmpty = true;
}
if ((vObj.pType == MONSTER) && (typeAt(r, c) == ZOMBIE)) {
var lOccupant = gPoint[r][c];
gPoint[r][c] = {pType:DUAL, pOccupant:[vObj, lOccupant]};
lDualFlag = true;
} else {
placeOffstage(gPoint[r][c]);
}
}
if (!lDualFlag) {
gPoint[r][c] = vObj;
}
vObj.pRow = r;
vObj.pCol = c;
place(vObj);
}
function onStage(r, c) {
if ((r < 1) || (r >= (gGridRows - 1))) {
return(false);
}
if ((c < 1) || (c >= (gGridCols - 1))) {
return(false);
}
return(true);
}
function onStageMonster(r, c) {
if ((r < 0) || (r >= gGridRows)) {
return(false);
}
if ((c < 0) || (c >= gGridCols)) {
return(false);
}
return(true);
}
function place(vObj) {
vObj._x = vObj.pCol * gGridWidth;
vObj._y = vObj.pRow * gGridHeight;
if ((vObj == gDigger) || (vObj == gDoor)) {
vObj._x = vObj._x + _root.soil_MCA._x;
vObj._y = vObj._y + _root.soil_MCA._y;
}
}
function nextDir(vDir, vChange) {
var r0 = vDir.r;
var c0 = vDir.c;
var d = vChange;
if (r0 == -1) {
if (d == c0) {
return({r:0, c:c0});
}
var c1 = (c0 + d);
return({r:-1, c:c1});
}
if (r0 == 1) {
if (d == (-1 * c0)) {
return({r:0, c:c0});
}
var c1 = (c0 - d);
return({r:1, c:c1});
}
var r1 = (c0 * d);
return({r:r1, c:c0});
}
function updateScore(vChange) {
score = score + vChange;
scorecheck = String(Number(scorecheck) + vChange);
if (score < 0) {
score = 0;
scorecheck = "0";
}
_root.score_display = scorecheck;
}
function odd(x) {
var x2 = (x / 2);
if (x2 == Math.floor(x2)) {
return(false);
}
return(true);
}
function randomFromRange(vMin, vMax) {
if (vMin >= vMax) {
return(vMin);
}
return(vMin + (Math.random() * (vMax - vMin)));
}
function placeOffstage(vObj) {
with (vObj) {
if (_x >= 0) {
_x = _x - 1000;
}
}
}
function placeOnstage(vObj) {
with (vObj) {
if (_x < 0) {
_x = _x + 1000;
}
}
}
function getOne(array, x) {
var i = 0;
while (i < array.length) {
if (x == array[i]) {
return(i);
}
i++;
}
return(-1);
}
function debug() {
gLetFrameLoop = true;
}
init();
stop();
Instance of Symbol 63 MovieClip in Frame 1
onClipEvent (load) {
totalFileSize = _root.getBytesTotal();
startTime = getTimer();
startBytes = _root.getBytesLoaded();
this._xscale = 0;
}
onClipEvent (enterFrame) {
bytesLoaded = _root.getBytesLoaded();
amountLoaded = bytesLoaded / totalFileSize;
percentLoaded = int(100 * amountLoaded);
this._xscale = percentLoaded;
timeSoFar = getTimer() - startTime;
speed = bytesLoaded / timeSoFar;
bytesLeft = totalFileSize - bytesLoaded;
timeLeft = (bytesLeft / 1000) * (speed / 1000);
speed = int(10 * speed) / 10;
_root.timeMessage = int(timeLeft) + " seconds remaining";
if (amountLoaded >= 1) {
_root.gotoAndStop("startgame");
}
}
Instance of Symbol 108 MovieClip "keycheckerOLD" in Frame 4
/* no clip actions */
Instance of Symbol 111 MovieClip "framelooper" in Frame 4
onClipEvent (enterFrame) {
_root.frameLoop();
}
Frame 6
startGame();
stop();
Symbol 17 MovieClip [soil] Frame 1
stop();
Symbol 29 MovieClip [boulder] Frame 1
stop();
Symbol 38 MovieClip [monster] Frame 4
gotoAndPlay (1);
Symbol 38 MovieClip [monster] Frame 11
_root.removeBaddy(this);
stop();
Symbol 56 MovieClip [zombie] Frame 4
gotoAndPlay (1);
Symbol 56 MovieClip [zombie] Frame 10
_root.removeBaddy(this);
stop();
Symbol 72 Button
on (release) {
_root.playButtonSound();
_root.setPracticeMode();
_root.gotoAndStop("play");
}
Symbol 76 Button
on (release) {
_root.playButtonSound();
_root.setCompetitionMode();
_root.gotoAndStop("play");
}
Symbol 84 MovieClip Frame 1
stop();
Symbol 84 MovieClip Frame 7
stop();
Symbol 105 MovieClip Frame 1
stop();
Symbol 105 MovieClip Frame 6
if ((_root.gDiggerDieFrame == undefined) || (_root.gDiggerDieFrame == "")) {
gotoAndPlay (2);
} else {
gotoAndPlay(_root.gDiggerDieFrame);
_root.gDiggerDieFrame = "";
}
Symbol 105 MovieClip Frame 10
_root.dieDone();
stop();
Symbol 105 MovieClip Frame 19
_root.dieDone();
stop();
Instance of Symbol 105 MovieClip "animation" in Symbol 106 MovieClip Frame 1
/* no clip actions */
Symbol 110 MovieClip Frame 1
stop();
Instance of Symbol 109 MovieClip in Symbol 110 MovieClip Frame 4
onClipEvent (keyDown) {
_root.pressingKey();
}
onClipEvent (keyUp) {
_root.releasedKey();
}
Symbol 119 Button
on (release) {
_root.resetScore();
_root.playButtonSound();
_root.nextLevel(1);
}
Symbol 124 Button
on (release) {
_root.resetScore();
_root.playButtonSound();
_root.nextLevel(-1);
}
Symbol 130 Button
on (release) {
_root.playButtonSound();
_root.skipToLevel();
}
Symbol 138 Button
on (release) {
_root.playButtonSound();
_root.quitGame();
}
Symbol 145 Button
on (release) {
_root.playButtonSound();
_root.restartLevel();
}
Symbol 152 Button
on (release) {
_root.playButtonSound();
_root.playAgain();
}
Symbol 156 Button
on (release) {
_root.playButtonSound();
_root.submitScore();
}