Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mekegi/70a3046fc161a69c2f10 to your computer and use it in GitHub Desktop.
Save mekegi/70a3046fc161a69c2f10 to your computer and use it in GitHub Desktop.
/*****************
* bossFight.js *
*****************
*
* NO FARTHER, DR. EVAL!!!!
* YOU WILL NOT GET OUT OF HERE ALIVE!!!!
* IT'S TIME YOU SEE MY TRUE FORM!!!!
* FACE MY ROBOT WRATH!!!!!
*/
function startLevel(map) {
map.defineObject('boss', {
'type': 'dynamic',
'symbol': '⊙',
'color': 'red',
'interval': 200,
'onCollision': function (player) {
player.killedBy('the boss');
},
'behavior': function (me) {
if (!me.direction) {
me.direction = 'right';
}
if (me.canMove(me.direction)) {
me.move(me.direction);
} else {
me.direction = (me.direction == 'right') ? 'left' : 'right';
}
if (Math.random() < 0.3) {
map.placeObject(me.getX(), me.getY() + 2, 'bullet');
}
},
'onDestroy': function (me) {
if (map.countObjects('boss') == 0) {
map.placeObject(me.getX(), me.getY(), 'theAlgorithm');
}
}
});
map.defineObject('bullet', {
'type': 'dynamic',
'symbol': '.',
'color': 'red',
'interval': 100,
'projectile': true,
'behavior': function (me) {
me.move('down');
}
});
map.placePlayer(0, map.getHeight() - 3);
map.placeObject(map.getWidth() - 1, map.getHeight() - 1, 'exit');
// Not so tough now, huh?
map.getPlayer().removeItem('phone');
map.placeObject(map.getWidth() - 1, map.getHeight() - 3, 'phone');
map.placeObject(0, map.getHeight() - 4, 'block');
map.placeObject(1, map.getHeight() - 4, 'block');
map.placeObject(2, map.getHeight() - 4, 'block');
map.placeObject(2, map.getHeight() - 3, 'block');
map.placeObject(map.getWidth() - 1, map.getHeight() - 4, 'block');
map.placeObject(map.getWidth() - 2, map.getHeight() - 4, 'block');
map.placeObject(map.getWidth() - 3, map.getHeight() - 4, 'block');
map.placeObject(map.getWidth() - 3, map.getHeight() - 3, 'block');
for (var x = 0; x < map.getWidth(); x++) {
map.placeObject(x, 4, 'block');
}
map.placeObject(9, 5, 'boss');
map.placeObject(11, 5, 'boss');
map.placeObject(13, 5, 'boss');
map.placeObject(15, 5, 'boss');
map.placeObject(17, 5, 'boss');
map.placeObject(19, 5, 'boss');
map.placeObject(21, 5, 'boss');
map.placeObject(23, 5, 'boss');
map.placeObject(25, 5, 'boss');
map.placeObject(27, 5, 'boss');
map.placeObject(29, 5, 'boss');
map.placeObject(31, 5, 'boss');
map.placeObject(10, 6, 'boss');
map.placeObject(12, 6, 'boss');
map.placeObject(14, 6, 'boss');
map.placeObject(16, 6, 'boss');
map.placeObject(18, 6, 'boss');
map.placeObject(20, 6, 'boss');
map.placeObject(22, 6, 'boss');
map.placeObject(24, 6, 'boss');
map.placeObject(26, 6, 'boss');
map.placeObject(28, 6, 'boss');
map.placeObject(30, 6, 'boss');
var player = map.getPlayer(),
moveDownBoss,
objs = map.getDynamicObjects();
moveDownBoss = function (objs) {
var i,
l = objs.length,
type;
for (i = l; i--; ) {
if (objs[i].getType() == 'boss') {
objs[i].move('down');
}
}
};
moveDownBoss(objs);
player.setPhoneCallback(function () {
var x = player.getX(),
y = player.getY();
map.placeObject(x, y + 1, 'bullet');
map.placeObject(x + 1, y + 1, 'bullet');
map.placeObject(x - 1, y + 1, 'bullet');
map.placeObject(x + 1, y, 'bullet');
map.placeObject(x - 1, y, 'bullet');
});
}
function validateLevel(map) {
// called at start of level and whenever a callback executes
map.validateAtMostXObjects(59, 'block');
map.validateAtMostXObjects(1, 'phone');
if (map.countObjects('theAlgorithm') > 0 && map.countObjects('boss') > 0) {
throw "The Algorithm can only be dropped by the boss!";
}
// only called at start of level
if (map.isStartOfLevel()) {
map.validateAtMostXDynamicObjects(23);
map.validateNoTimers();
}
}
function onExit(map) {
if (!map.getPlayer().hasItem('theAlgorithm')) {
map.writeStatus("You must take back the Algorithm!!");
return false;
} else if (!map.getPlayer().hasItem('phone')) {
map.writeStatus("We need the phone!");
return false;
} else {
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment