Untitled
unknown
plain_text
2 years ago
4.8 kB
9
Indexable
import kaboom from "kaboom"
kaboom({
global: true,
fullscreen: true,
scale: 1,
debug: true,
background: [0, 0, 0]
})
const MOVE_SPEED = 120
loadRoot('https://i.imgur.com/')
loadSprite('link-going-left', '1Xq9biB.png')
loadSprite('link-going-right', 'yZIb8O2.png')
loadSprite('link-going-down', 'r377FIM.png')
loadSprite('link-going-up', 'UkV0we0.png')
loadSprite('left-wall', 'rfDoaa1.png')
loadSprite('top-wall', 'QA257Bj.png')
loadSprite('bottom-wall', 'vWJWmvb.png')
loadSprite('right-wall', 'SmHhgUn.png')
loadSprite('bottom-left-wall', 'awnTfNC.png')
loadSprite('bottom-right-wall', '84oyTFy.png')
loadSprite('top-left-wall', 'xlpUxIm.png')
loadSprite('top-right-wall', 'z0OmBd1.jpg')
loadSprite('top-door', 'U9nre4n.png')
loadSprite('fire-pot', 'I7xSp7w.png')
loadSprite('left-door', 'okdJNls.png')
loadSprite('lanterns', 'wiSiY09.png')
loadSprite('slicer', 'c6JFi5Z.png')
loadSprite('skeletor', 'Ei1VnX8.png')
loadSprite('kaboom', 'o9WizfI.png')
loadSprite('stairs', 'VghkL08.png')
loadSprite('bg', 'u4DVsx6.png')
scene("game", ({ level, score }) => {
layers(['bg', 'obj', 'ui'], 'obj')
const maps = [
[
'ycc)cc^ccw',
'a b',
'a * b',
'a ( b',
'% b',
'a ( b',
'a * b',
'a b',
'xdd)dd)ddz',
],
[
'yccccccccw',
'a b',
') )',
'a b',
'a b',
'a $ b',
') } )',
'a b',
'xddddddddz',
]
]
const levelCfg = {
width: 48,
height: 48,
'a': () => [sprite('left-wall'), solid(), 'wall', area()],
'b': () => [sprite('right-wall'), solid(), 'wall', area()],
'c': () => [sprite('top-wall'), solid(), 'wall', area()],
'd': () => [sprite('bottom-wall'), solid(), 'wall', area()],
'w': () => [sprite('top-right-wall'), solid(), 'wall', area()],
'x': () => [sprite('bottom-left-wall'), solid(), 'wall', area()],
'y': () => [sprite('top-left-wall'), solid(), 'wall', area()],
'z': () => [sprite('bottom-right-wall'), solid(), 'wall', area()],
'%': () => [sprite('left-door'), solid(), 'door', area()],
'^': () => [sprite('top-door'), 'next-level'],
'$': () => [sprite('stairs'), 'next-level'],
'*': () => [sprite('slicer'), 'slicer', { dir: -1 }, 'dangerous', solid(), area()],
'}': () => [sprite('skeletor'), 'dangerous', 'skeletor', { dir: -1, timer: 0 }],
')': () => [sprite('lanterns'), solid(), area()],
'(': () => [sprite('fire-pot'), solid(), area()],
}
addLevel(maps[level], levelCfg)
add([sprite('bg'), layer('bg')])
const scoreLabel = add([
text('0', { font: "sink" }),
pos(400, 450),
layer('ui'),
{
value: score,
},
scale(2)
])
add([text('level ' + parseInt(level + 1), { font: "sink" }), pos(400, 485), scale(2)])
const player = add([
sprite('link-going-right'),
pos(5, 190),
solid(),
area(),
{
dir: vec2(1, 0),
}
])
/*player.overlaps('next-level', () => {
go("game", {
level: (level + 1) % maps.length,
score: scoreLabel.value
})
})*/
keyDown('right', () => {
player.use(sprite('link-going-right'))
player.move(MOVE_SPEED, 0)
player.dir = vec2(1, 0)
})
keyDown('left', () => {
player.use(sprite('link-going-left'))
player.move(-MOVE_SPEED, 0)
player.dir = vec2(-1, 0)
})
keyDown('up', () => {
player.use(sprite('link-going-up'))
player.move(0, -MOVE_SPEED)
player.dir = vec2(0, -1)
})
keyDown('down', () => {
player.use(sprite('link-going-down'))
player.move(0, MOVE_SPEED)
player.dir = vec2(0, 1)
})
function spawnKaboom(p) {
const obj = add([sprite('kaboom'), pos(p), 'kaboom'])
wait(1, () => {
destroy(obj)
})
}
keyPress('space', () => {
spawnKaboom(player.pos.add(player.dir.scale(48)))
})
player.collides('door', (d) => {
destroy(d)
})
collides('kaboom', 'skeletor', (k, s) => {
camShake(4)
wait(1, () => {
destroy(k)
})
destroy(s)
scoreLabel.value++
scoreLabel.text = scoreLabel.value
})
const SLICER_SPEED = 100
action('slicer', (s) => {
s.move(s.dir * SLICER_SPEED, 0)
})
onCollide('slicer', 'wall', (s) => {
s.dir = -s.dir
})
const SKELETOR_SPEED = 60
action('skeletor', (s) => {
s.move(0, s.dir * SKELETOR_SPEED)
s.timer -= dt()
if (s.timer <= 0) {
s.dir = - s.dir
s.timer = rand(5)
}
})
collides('skeletor', 'wall', (s) => {
s.dir = -s.dir
})
player.collides('dangerous', () => {
go('lose', { score: scoreLabel.value })
})
})
scene("lose", ({ score }) => {
add([text(score , 32 ), origin('center'), pos(width() / 2, height() / 2)])
})
go("game", { level: 0, score: 0 })Editor is loading...