Spaces:
Running
Running
#BEGIN_PROPERTIES# | |
{ | |
"version": "1.0", | |
"commandsIntroduced": | |
["object.passableFor", | |
"map.validateExactlyXManyObjects"], | |
"nextBonusLevel": "AB_5_PathOfDoom.jsx" | |
} | |
#END_PROPERTIES# | |
/**************************** | |
* BatAttack.js * | |
**************************** | |
* | |
* As you proceed into the cave | |
* you notice some creatures hiding in the darkness. | |
* They seem to be asleep... Proceed with care though, | |
* for they tend to sleep lightly. | |
* Sneaky or smart, you never truly had an option. | |
* | |
* Every traveller knows that the | |
* adventures never truly end. | |
*/ | |
function startLevel(map) { | |
#START_OF_START_LEVEL# | |
function wakeAndHunt(obj, type) { | |
var direction; | |
var target = obj.findNearest(type); | |
var leftDist = obj.getX() - target.x; | |
var upDist = obj.getY() - target.y; | |
if (Math.abs(upDist) < 4 && Math.abs(leftDist) < 8) { | |
if (upDist == 0 && leftDist == 0) { | |
return; | |
} if (upDist > 0 && upDist >= leftDist) { | |
direction = 'up'; | |
} else if (upDist < 0 && upDist < leftDist) { | |
direction = 'down'; | |
} else if (leftDist > 0 && leftDist >= upDist) { | |
direction = 'left'; | |
} else { | |
direction = 'right'; | |
} | |
obj.move(direction); | |
} | |
} | |
map.defineObject('bat', { | |
'type': 'dynamic', | |
'symbol': String.fromCharCode(0x03E1), | |
'color': 'purple', | |
'onCollision': function (player) { | |
player.killedBy('a bat'); | |
}, | |
'behavior': function (me) { | |
wakeAndHunt(me, 'player'); | |
} | |
}); | |
map.defineObject('boulder', { | |
'color' : '#5C1F00', | |
'symbol': String.fromCharCode(0x2617), | |
'impassable': true, | |
'passableFor': ['bat'] | |
}); | |
map.createFromGrid( | |
['##################################################', | |
'#################################### E#########', | |
'############# ############## #########', | |
'############ ############ #########', | |
'########## # ######### ################', | |
'######### #B# ###BBB### ################', | |
'####### #BBB# ######### ###############', | |
'######## ####### ###BBB### ##############', | |
'####### ######### ######### #############', | |
'######## ####### ######### ##############', | |
'####### ###BBB### ###BBB### #############', | |
'###BBB## ####### ######### ##############', | |
'####### ######### ######### #############', | |
'######## ##BBB## ######### ##############', | |
'####### ######### ##BBB#### #############', | |
'##BBB### ####### ######### ##############', | |
'####### ######### ######## ##############', | |
'######## ####### ####### ################', | |
'####### ###BBB### #BBB# #################', | |
'######## ####### #B# ##################', | |
'####### ########## # ###################', | |
'#### ######### ####################', | |
'#### ########### #####################', | |
'#### @ #######################################', | |
'##################################################'], | |
{ | |
'@': 'player', | |
'E': 'exit', | |
'#': 'boulder', | |
'B': 'bat', | |
}, 0, 0); | |
#BEGIN_EDITABLE# | |
#END_EDITABLE# | |
#END_OF_START_LEVEL# | |
} | |
function validateLevel(map) { | |
map.validateExactlyXManyObjects(1, 'exit'); | |
} | |