Kaboom Game Editor
Select game
Patrick Star
kaboom({ width: 1250, height: 1100, stretch: true, letterbox: true, background: [ 0, 0, 1], }) loadSprite("mainCharacter", "Images/Characters/MainCharacter/Freddy.png", { // The image contains 4 frames layed out horizontally, slice it into individual frames sliceX: 4, // Define animations anims: { "goDown": { // Starts from frame 0, ends at frame 1 from: 0, to: 0, }, "goLeft": { // Starts from frame 0, ends at frame 1 from: 1, to: 1, }, "goRight": { // Starts from frame 0, ends at frame 1 from: 2, to: 2, }, "goUp": { // Starts from frame 0, ends at frame 1 from: 3, to: 3, }, }, }) //enemies water loadSprite("enemy-0", "Images/Characters/Enemies/Water/Enemy_Water.png", { // The image contains 4 frames layed out horizontally, slice it into individual frames sliceX: 4, // Define animations anims: { "goDown": { // Starts from frame 0, ends at frame 1 from: 0, to: 0, }, "goLeft": { // Starts from frame 0, ends at frame 1 from: 1, to: 1, }, "goRight": { // Starts from frame 0, ends at frame 1 from: 2, to: 2, }, "goUp": { // Starts from frame 0, ends at frame 1 from: 3, to: 3, }, }, }) //enemies earth loadSprite("enemy-1", "Images/Characters/Enemies/Earth/Enemy_Earth.png", { // The image contains 4 frames layed out horizontally, slice it into individual frames sliceX: 4, // Define animations anims: { "goDown": { // Starts from frame 0, ends at frame 1 from: 0, to: 0, }, "goLeft": { // Starts from frame 0, ends at frame 1 from: 1, to: 1, }, "goRight": { // Starts from frame 0, ends at frame 1 from: 2, to: 2, }, "goUp": { // Starts from frame 0, ends at frame 1 from: 3, to: 3, }, }, }) //enemies fire loadSprite("enemy-2", "Images/Characters/Enemies/Fire/Enemy_Fire.png", { // The image contains 4 frames layed out horizontally, slice it into individual frames sliceX: 4, // Define animations anims: { "goDown": { // Starts from frame 0, ends at frame 1 from: 0, to: 0, }, "goLeft": { // Starts from frame 0, ends at frame 1 from: 1, to: 1, }, "goRight": { // Starts from frame 0, ends at frame 1 from: 2, to: 2, }, "goUp": { // Starts from frame 0, ends at frame 1 from: 3, to: 3, }, }, }) //Wall Water loadSprite("left-wall-0", "Images/Walls/Water/Water_Wall_Left.png") loadSprite("top-wall-0", "Images/Walls/Water/Water_Wall_Top.png") loadSprite("bottom-wall-0", "Images/Walls/Water/Water_Wall_Bottom.png") loadSprite("right-wall-0", "Images/Walls/Water/Water_Wall_Right.png") loadSprite("bottom-left-wall-0", "Images/Walls/Water/Water_Wall_BottomCorner_Left.png") loadSprite("bottom-right-wall-0", "Images/Walls/Water/Water_Wall_BottomCornerRight.png") loadSprite("top-left-wall-0", "Images/Walls/Water/Water_Wall_TopCornerLeft.png") loadSprite("top-right-wall-0", "Images/Walls/Water/Water_Wall_TopCornerRight.png") loadSprite("left-wall-withoutLayer-0", "Images/Walls/Water/Water_Wall_Left_WithoutLayer.png") loadSprite("top-wall-withoutLayer-0", "Images/Walls/Water/Water_Wall_Top_WithoutLayer.png") loadSprite("bottom-wall-withoutLayer-0", "Images/Walls/Water/Water_Wall_Bottom_WithoutLayer.png") loadSprite("right-wall-withoutLayer-0", "Images/Walls/Water/Water_Wall_Right _WithoutLayer.png") loadSprite("up-down-middle-wall-0", "Images/Walls/Water/Water_Middle_Wall_UD.png") loadSprite("left-right-middle-wall-0", "Images/Walls/Water/Water_Middle_Wall_LR.png") loadSprite("down-left-up-middle-wall-0", "Images/Walls/Water/Water_Middle_Wall_DLU.png") loadSprite("left-down-right-middle-wall-0", "Images/Walls/Water/Water_Middle_Wall_LDR.png") loadSprite("left-up-right-middle-wall-0", "Images/Walls/Water/Water_Middle_Wall_LUR.png") loadSprite("up-right-down-middle-wall-0", "Images/Walls/Water/Water_Middle_Wall_URD.png") loadSprite("middle-wall-center-0", "Images/Walls/Water/Water_Middle_Wall_center.png") //Wall Earth loadSprite("left-wall-1", "Images/Walls/Earth/Earth_Wall_Left.png") loadSprite("top-wall-1", "Images/Walls/Earth/Earth_Wall_Top.png") loadSprite("bottom-wall-1", "Images/Walls/Earth/Earth_Wall_Bottom.png") loadSprite("right-wall-1", "Images/Walls/Earth/Earth_Wall_Right.png") loadSprite("bottom-left-wall-1", "Images/Walls/Earth/Earth_Wall_BottomCorner_Left.png") loadSprite("bottom-right-wall-1", "Images/Walls/Earth/Earth_Wall_BottomCornerRight.png") loadSprite("top-left-wall-1", "Images/Walls/Earth/Earth_Wall_TopCornerLeft.png") loadSprite("top-right-wall-1", "Images/Walls/Earth/Earth_Wall_TopCornerRight.png") loadSprite("left-wall-withoutLayer-1", "Images/Walls/Earth/Earth_Wall_Left_WithoutLayer.png") loadSprite("top-wall-withoutLayer-1", "Images/Walls/Earth/Earth_Wall_Top_WithoutLayer.png") loadSprite("bottom-wall-withoutLayer-1", "Images/Walls/Earth/Earth_Wall_Bottom_WithoutLayer.png") loadSprite("right-wall-withoutLayer-1", "Images/Walls/Earth/Earth_Wall_Right _WithoutLayer.png") loadSprite("up-down-middle-wall-1", "Images/Walls/Earth/Earth_Middle_Wall_UD.png") loadSprite("left-right-middle-wall-1", "Images/Walls/Earth/Earth_Middle_Wall_LR.png") loadSprite("down-left-up-middle-wall-1", "Images/Walls/Earth/Earth_Middle_Wall_DLU.png") loadSprite("left-down-right-middle-wall-1", "Images/Walls/Earth/Earth_Middle_Wall_LDR.png") loadSprite("left-up-right-middle-wall-1", "Images/Walls/Earth/Earth_Middle_Wall_LUR.png") loadSprite("up-right-down-middle-wall-1", "Images/Walls/Earth/Earth_Middle_Wall_URD.png") loadSprite("middle-wall-center-1", "Images/Walls/Earth/Earth_Middle_Wall_center.png") //Wall Fire loadSprite("left-wall-2", "Images/Walls/Fire/Fire_Wall_Left.png") loadSprite("top-wall-2", "Images/Walls/Fire/Fire_Wall_Top.png") loadSprite("bottom-wall-2", "Images/Walls/Fire/Fire_Wall_Bottom.png") loadSprite("right-wall-2", "Images/Walls/Fire/Fire_Wall_Right.png") loadSprite("bottom-left-wall-2", "Images/Walls/Fire/Fire_Wall_BottomCorner_Left.png") loadSprite("bottom-right-wall-2", "Images/Walls/Fire/Fire_Wall_BottomCornerRight.png") loadSprite("top-left-wall-2", "Images/Walls/Fire/Fire_Wall_TopCornerLeft.png") loadSprite("top-right-wall-2", "Images/Walls/Fire/Fire_Wall_TopCornerRight.png") loadSprite("left-wall-withoutLayer-2", "Images/Walls/Fire/Fire_Wall_Left_WithoutLayer.png") loadSprite("top-wall-withoutLayer-2", "Images/Walls/Fire/Fire_Wall_Top_WithoutLayer.png") loadSprite("bottom-wall-withoutLayer-2", "Images/Walls/Fire/Fire_Wall_Bottom_WithoutLayer.png") loadSprite("right-wall-withoutLayer-2", "Images/Walls/Fire/Fire_Wall_Right _WithoutLayer.png") loadSprite("up-down-middle-wall-2", "Images/Walls/Fire/Fire_Middle_Wall_UD.png") loadSprite("left-right-middle-wall-2", "Images/Walls/Fire/Fire_Middle_Wall_LR.png") loadSprite("down-left-up-middle-wall-2", "Images/Walls/Fire/Fire_Middle_Wall_DLU.png") loadSprite("left-down-right-middle-wall-2", "Images/Walls/Fire/Fire_Middle_Wall_LDR.png") loadSprite("left-up-right-middle-wall-2", "Images/Walls/Fire/Fire_Middle_Wall_LUR.png") loadSprite("up-right-down-middle-wall-2", "Images/Walls/Fire/Fire_Middle_Wall_URD.png") loadSprite("middle-wall-center-2", "Images/Walls/Fire/Fire_Middle_Wall_center.png") loadSprite("door", "Images/Doors/Door.png") loadSprite("finalGoal", "Images/Doors/FinalGoal.png") loadSprite("bg", "Images/Background/BgTemp.png") loadSprite("collision", "Images/Walls/collision.png") loadSprite("life", "Images/UI/Life.png", { // The image contains 2 frames layed out horizontally, slice it into individual frames sliceX: 2, // Define animations anims: { "yLife": { // Starts from frame 0, ends at frame 0 from: 0, to: 0, }, "nLife": { // Starts from frame 1, ends at frame 1 from: 1, to: 1, }, }, }) loadSprite("lifeItem", "Images/Items/LifeItem.png", { // The image contains 4 frames layed out horizontally, slice it into individual frames sliceX: 4, // Define animations anims: { "lifeItemAnim": { // Starts from frame 0, ends at frame 3 from: 0, to: 3, "speed": 3, "loop": true }, }, }) loadSprite("moneyPot", "Images/Items/MoneyPot.png", { // The image contains 4 frames layed out horizontally, slice it into individual frames sliceX: 2, // Define animations anims: { "moneyPotAnim": { // Starts from frame 0, ends at frame 1 from: 0, to: 1, "speed": 3, "loop": true }, }, }) loadSprite("moneyPotUI", "Images/UI/MoneyPot_UI.png", { // The image contains 4 frames layed out horizontally, slice it into individual frames sliceX: 2, // Define animations anims: { "moneyPotUIN": { // Starts from frame 0, ends at frame 0 from: 0, to: 0, }, "moneyPotUIY": { // Starts from frame 1, ends at frame 1 from: 1, to: 1, }, }, }) ////Traps//// //Water loadSprite("Trap-Left-Right-0", "Images/Traps/Water/Laser_left_right.png") loadSprite("Trap-Top-Down-0", "Images/Traps/Water/Laser_top_down.png") loadSprite("Trap-Explosion-0", "Images/Traps/Water/Explosion.png") //Earth loadSprite("Trap-Left-Right-1", "Images/Traps/Earth/Laser_left_right.png") loadSprite("Trap-Top-Down-1", "Images/Traps/Earth/Laser_top_down.png") loadSprite("Trap-Explosion-1", "Images/Traps/Earth/Laser_top_down.png") //Fire loadSprite("Trap-Left-Right-2", "Images/Traps/Fire/Laser_left_right.png") loadSprite("Trap-Top-Down-2", "Images/Traps/Fire/Laser_top_down.png") loadSprite("Trap-Explosion-2", "Images/Traps/Fire/Explosion.png") ////SafePoint//// loadSprite("SafePoint", "Images/SafePoints/SafePoint.png") loadSprite("StartPoint", "Images/SafePoints/SafePoint.png") loadSprite("SafePointUI", "Images/UI/SafePoint.png", { // The image contains 2 frames layed out horizontally, slice it into individual frames sliceX: 2, // Define animations anims: { "SafePointUIY": { // Starts from frame 0, ends at frame 0 from: 0, to: 0, }, "SafePointUIN": { // Starts from frame 1, ends at frame 1 from: 1, to: 1, }, }, }) ////Forbiden Elfes Rules//// loadSprite("Rule1", "Images/Rules/ForbidenElfes_Rule1.png") loadSprite("Rule2", "Images/Rules/ForbidenElfes_Rule2.png") loadSprite("Rule3", "Images/Rules/ForbidenElfes_Rule3.png") loadSprite("Rule4", "Images/Rules/ForbidenElfes_Rule4.png") ////Forbiden Elfes You Lose Paper//// loadSprite("YouLose1", "Images/Lose/YouLoseWindow1.png") loadSprite("YouLose2", "Images/Lose/YouLoseWindow2.png") loadSprite("YouLose3", "Images/Lose/YouLoseWindow3.png") ////Forbiden Elfes You Lose Paper//// loadSprite("YouWin", "Images/Win/YouWinWindow.png") scene("intro", (page=0) => { add([ sprite("Rule1"), pos(width() / 2, height() / 2), origin("center"), "Rules" ]) onKeyPress("space",() => { onUpdate(page++) if (page === 1){ destroyAll("Rules") add([ sprite("Rule2"), pos(width() / 2, height() / 2), origin("center"), "Rules" ]) }else if (page === 2){ destroyAll("Rules") add([ sprite("Rule3"), pos(width() / 2, height() / 2), origin("center"), "Rules" ]) }else if (page === 3){ destroyAll("Rules") add([ sprite("Rule4"), pos(width() / 2, height() / 2), origin("center"), "Rules" ]) }else{ destroyAll("Rules") go("game", 0, 1, 0, 1, 2, 0.0); } }) }) scene("game", (levelIdx, lifes=1, PotItemsColected=0, actualTraps=1, showSafePoint=2, timer=0.0) => { const SPEED = 144 loop(0.1, () => { onUpdate(timer+=0.1) }) //walls const walls = [ [ "3tttttttttttTtttttttttt1", "l y | mr", "l | - - - - r", "l ---- ---- | r", "l 7 | - - - - -R", "l 8 7 6r", "l | r", "l ----1 | --------r", "l | | r", "l | m | >-- ---- r", "l | | r", "l 2---- | r", "l >------ --R", "l9 | r", "l 6 | r", "L- -!-------i-- ------R", "l | r", "l |7 yr", "l | r", "2bbbBddbbbbbbbbbbbbbbbb4", ], [ "3tttttTtttttttttttttttt1", "l | r", "l | --1 3 - - r", "l | | r", "L- ---i-- | r", "l | 3- --1 r", "l | | | | | | r", "l |m | | r", "L---------i---i----< r", "l | - r", "l | r", "l >------!-----!-----R", "l | | | |m r", "l r", "l m | r", "l | | | | r", "l | 2------i-----4 | r", "l | r", "l | r", "2bbbbbbbbbbbbbbbbbbb4ddr", ], [ "3ttttttttttttttttttTttt1", "ly | r", "l 3 | | r", "l --1 | --!-!--4 | r", "l | | |m| | --R", "l | >---4 2- | | r", "l | 3-4 | | r", "l -4 | | ---- | | r", "l | | | m| r", "l -!-4 --i------+--4 | r", "l | g| | r", "L- 2------------< 31 r", "l m| 24 2-R", "l 31 31 | | |y r", "l 24 24 | | 2---1 r", "lm | | r", "L--------4 ------1 | r", "l | | r", "lm| r", "2bBbbbbbbbbbbbbbbbbbbbb4", ], ] addLevel(walls[levelIdx], { width: 48, height: 48, pos: vec2(48, 48), "l": () => [sprite("left-wall-"+levelIdx), area(), solid(), "wall"], "L": () => [sprite("left-wall-withoutLayer-"+levelIdx), area(), solid(), "wall"], "r": () => [sprite("right-wall-"+levelIdx), area(), solid(), "wall"], "R": () => [sprite("right-wall-withoutLayer-"+levelIdx), area(), solid(), "wall"], "t": () => [sprite("top-wall-"+levelIdx), area(), solid(), "wall"], "T": () => [sprite("top-wall-withoutLayer-"+levelIdx), area(), solid(), "wall"], "b": () => [sprite("bottom-wall-"+levelIdx), area(), solid(), "wall"], "B": () => [sprite("bottom-wall-withoutLayer-"+levelIdx), area(), solid(), "wall"], "1": () => [sprite("top-right-wall-"+levelIdx), area(), solid(), "wall"], "2": () => [sprite("bottom-left-wall-"+levelIdx), area(), solid(), "wall"], "3": () => [sprite("top-left-wall-"+levelIdx), area(), solid(), "wall"], "4": () => [sprite("bottom-right-wall-"+levelIdx), area(), solid(), "wall"], "d": () => [sprite("door"), area(), solid(), "door"], "g": () => [sprite("finalGoal"), area(), solid(), "door"], "|": () => [sprite("up-down-middle-wall-"+levelIdx), area(), solid(), "wall"], "-": () => [sprite("left-right-middle-wall-"+levelIdx), area(), solid(), "wall"], "<": () => [sprite("down-left-up-middle-wall-"+levelIdx), area(), solid(), "wall"], "!": () => [sprite("left-down-right-middle-wall-"+levelIdx), area(), solid(), "wall"], "i": () => [sprite("left-up-right-middle-wall-"+levelIdx), area(), solid(), "wall"], ">": () => [sprite("up-right-down-middle-wall-"+levelIdx), area(), solid(), "wall"], "+": () => [sprite("middle-wall-center-"+levelIdx), area(), solid(), "wall"], "y": () => [sprite("lifeItem", {anim:"lifeItemAnim",}), area(), "lifeItem"], "m": () => [sprite("moneyPot", {anim:"moneyPotAnim",}), area(), "moneyPot"], }) //collisions / ennemies / player const collisions = [ [ "------------------------", "- - - -", "- - - -", "- --- -r l-", "- r - -", "-7e d re l-", "- -r el-", "- ----- - -", "- - - -", "- - - - -", "- - -r el-", "- ----- -re l-", "- --- -------", "-u e- -", "- l - -", "-- ------------ -------", "- - -", "- p -r el -", "- - -", "------------------------", ], [ "-----------r--------r---", "- - d7 d", "- p - --- -", "- - - -", "-r ------ - de e -", "7e 8 -- l-- -", "- - - - -", "u e-9e - - -", "---------l--l------- -", "- - -", "-r - ue -", "7e d-----------------l-", "- -r - - -", " e d -", " R 9 e- -", "- - - l- - -", "- -------------- - -", "u e - -", "- l - -", "------------------------", ], [ "-r---------- ---r-------", "7e 8 d -", "- d e e - p -", "- --- --- ----l - -", "- - - - ---", "- d ---r -- - -", "- - -l- 7e 8 - -", "- - - - --- - - -", "u e- - u e e 9e- -", "- -l- --------l---6 -", "- - g- R d -", "-r -------r------ -- - -", "7e d 8 -- ---", "- 9ee ee-", "- ---- - --- ----l -", "u e- - d -", "---------6 ---r-- - -", "- R u -", "- ue e -", "-------------------l----", ], ] addLevel(collisions[levelIdx], { width: 48, height: 48, pos: vec2(48, 48), "p": () => [sprite("mainCharacter", {width:48, height:48}), {life:lifes}, {mPotCaught:PotItemsColected}, {trapsNr:actualTraps} , {safePointUI:showSafePoint} , area({ scale: 0.5 }), origin("center"), solid(), "player"], "e": () => [sprite("enemy-"+levelIdx, {width:48, height:48}), area(), {x:-SPEED,y:0}, "enemy"], "l": () => [sprite("collision"), area(), "collisionLeft"], "r": () => [sprite("collision"), area(), "collisionRight"], "d": () => [sprite("collision"), area(), "collisionDown"], "u": () => [sprite("collision"), area(), "collisionUp"], "6": () => [sprite("collision"), area({width:28, height:28}), origin("topright"), "collisionLeft"], "7": () => [sprite("collision"), area({width:28, height:28}), "collisionRight"], "8": () => [sprite("collision"), area({width:28, height:28}), origin("topleft"), "collisionDown"], "9": () => [sprite("collision"), area({width:28, height:28}), origin("topright"), "collisionUp"], "R": () => [sprite("collision"), area({width:28, height:28}), origin("botright"), "collisionRight"], "L": () => [sprite("collision"), area({width:42, height:42}), origin("topright"), "collisionLeft"], }) // get the player game obj by tag const player = get("player")[0] // get the enemy game obj by tag //const enemy = get("enemy")[0] //////////////////// UI //////////////////// //Life// const life1 = add([ sprite("life"), origin("botleft"), pos(48 * (4), height() -24), ]) const life2 = add([ sprite("life"), origin("botleft"), pos(48 * (5), height() -24), ]) const life3 = add([ sprite("life"), origin("botleft"), pos(48 * (6), height() -24), ]) //Money Pots// const mPot1 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (9), height() -24), ]) const mPot2 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (10), height() -24), ]) const mPot3 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (11), height() -24), ]) const mPot4 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (12), height() -24), ]) const mPot5 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (13), height() -24), ]) const mPot6 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (14), height() -24), ]) const mPot7 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (15), height() -24), ]) const mPot8 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (16), height() -24), ]) const mPot9 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (17), height() -24), ]) const mPot10 = add([ sprite("moneyPotUI"), origin("botleft"), pos(48 * (18), height() -24), ]) //Activate safe points// const safePointUI = add([ sprite("SafePointUI"), origin("botleft"), area(), pos(48 * (21), height() -24), ]) //traps const traps = [ [ "xxxxxxxxxxxxxxxxxxxxxxxx", "x y x O o O o mx", "xO~~~~~~~~~~x §xlx§xlx x", "x-xxxx-xxxx-x § l § l x", "x¬¬¬¬¬¬¬¬¬¬ox-x-x-x-x-xx", "x | x", "x x x", "x xxxxx x--xxxxxxxxx", "x | x x x", "x x x xxx--xxxx--x", "x x | x x", "x xxxxx x x", "x xxxxxxx--xxx", "x x x", "xO~~~~~~~~~~x x", "xx-xxxxxxxxxxxx--xxxxxxx", "xsssx §o x", "xsssx §lmx", "xsssx Ol x", "xxxxxxxxxxxxxxxxxxxxxxxx", ], [ "xxxxxxxxxxxxxxxxxxxxxxxx", "xsssssx l | x", "xsssssx-xxx x~~~x | x x", "xsssssx l x § | l x", "xx-xxxxxx-x § | l x", "x x § xx-xxx l x", "x x~~~~~x x x x x l x", "x xm x x l x", "xxxxxxxxxxxxxxxxxxxx l x", "x |l§ §l§ §l§ §l§x x x", "x---xl§ §l§ §l§ §l§| x", "x xxxxxxxxxxxxxxxxxxxx", "x x x~~~~~~x¬¬¬¬¬x | x", "x | | | | x", "x | | | x x", "x x¬¬¬¬¬¬x~~~~~x x x", "x x xxxxxxxxxxxxxx x x", "x |§l§ ll §l§| x x", "x |§l§ ll §l§| x x", "xxxxxxxxxxxxxxxxxxxxxxxx", ], [ "xxxxxxxxxxxxxxxxxxxxxxxx", "x | xsssx", "x x~~~~~~~~~~~~~O xsssx", "x lxxx-x-xxxxxxxx xsssx", "x l| x x xmx | x-xxx", "x lx xxxxx-xx-x¬¬o x", "x lx xxx | x x x", "x ox x¬¬¬o xxxx x¬¬o x", "x | x¬¬¬o x x x", "x-xxxx-xxxxxxxxxxxxx-x-x", "x x gx x x", "xx-xOoxxxxoOoOxxx xx | x", "x §l |l§l§ x xx xxx", "x-xx§lxx-xl§l§x-xy x", "x-xx§lxx-xl§l§x-xxxxx x", "xm §l xl§l§ || x x", "xxxxOOOOOxl§xooooxx x x", "x | §§§§§ l§ llll x x x", "xmx §§§§§ l§ llll | | x", "xxxxxxxxxxxxxxxxxxxxxxxx", ], ] //////////////////// Traps //////////////////// setTimeout(trapTimer, 1000); function trapTimer(){ onUpdate(player.trapsNr++) if(player.trapsNr % 2 === 0)setTimeout(trapTimer, 3000); else setTimeout(trapTimer, 1500) } onUpdate(() => { if(player.trapsNr===1){ destroyAll("trap") addLevel(traps[levelIdx], { width: 48, height: 48, pos: vec2(72, 72), "~": () => [sprite("Trap-Left-Right-"+levelIdx), color(255,0,0), origin("center"), "trap"], "§": () => [sprite("Trap-Top-Down-"+levelIdx), color(255,0,0), origin("center"), "trap"], "O": () => [sprite("Trap-Explosion-"+levelIdx), color(255,0,0), origin("center"), "trap"], }) }else if(player.trapsNr===2){ destroyAll("trap") addLevel(traps[levelIdx], { width: 48, height: 48, pos: vec2(72, 72), "~": () => [sprite("Trap-Left-Right-"+levelIdx), area({width:48, height:24,}), origin("center"), "trap"], "§": () => [sprite("Trap-Top-Down-"+levelIdx), area({width:24, height:48}), origin("center"), "trap"], "O": () => [sprite("Trap-Explosion-"+levelIdx), area({ scale: 0.8 }), origin("center"), "trap"], }) }else if(player.trapsNr===3){ destroyAll("trap") addLevel(traps[levelIdx], { width: 48, height: 48, pos: vec2(72, 72), "¬": () => [sprite("Trap-Left-Right-"+levelIdx), color(255,0,0), origin("center"), "trap"], "l": () => [sprite("Trap-Top-Down-"+levelIdx), color(255,0,0), origin("center"), "trap"], "o": () => [sprite("Trap-Explosion-"+levelIdx), color(255,0,0), origin("center"), "trap"], }) }else if(player.trapsNr===4){ destroyAll("trap") addLevel(traps[levelIdx], { width: 48, height: 48, pos: vec2(72, 72), "¬": () => [sprite("Trap-Left-Right-"+levelIdx), area({width:48, height:24,}), origin("center"), "trap"], "l": () => [sprite("Trap-Top-Down-"+levelIdx), area({width:24, height:48}), origin("center"), "trap"], "o": () => [sprite("Trap-Explosion-"+levelIdx), area({ scale: 0.8 }), origin("center"), "trap"], }) }else if(player.trapsNr===5){ destroyAll("trap") addLevel(traps[levelIdx], { width: 48, height: 48, pos: vec2(72, 72), "-": () => [sprite("Trap-Left-Right-"+levelIdx), color(255,0,0), origin("center"), "trap"], "|": () => [sprite("Trap-Top-Down-"+levelIdx), color(255,0,0), origin("center"), "trap"], "0": () => [sprite("Trap-Explosion-"+levelIdx), color(255,0,0), origin("center"), "trap"], }) }else if(player.trapsNr===6){ destroyAll("trap") onUpdate(player.trapsNr=0) addLevel(traps[levelIdx], { width: 48, height: 48, pos: vec2(72, 72), "-": () => [sprite("Trap-Left-Right-"+levelIdx), area({width:48, height:24,}), origin("center"), "trap"], "|": () => [sprite("Trap-Top-Down-"+levelIdx), area({width:24, height:48}), origin("center"), "trap"], "0": () => [sprite("Trap-Explosion-"+levelIdx), area({ scale: 0.8 }), origin("center"), "trap"], }) } }) //////////////////////////////////////////////////////////// //safe points const safePoints = [ [ "xxxxxxxxxxxxxxxxxxxxxxxx", "xsssssssssssxsOsosOsosmx", "xO~~~~~~~~~~xs§xlx§xlxsx", "x-xxxx-xxxx-xs§sls§slssx", "x¬¬¬¬¬¬¬¬¬¬ox-x-x-x-x-xx", "xs s|s sx", "xs sssssss sxs sx", "xs sxxxxxs sx--xxxxxxxxx", "xs s|sssxs sxssssssssssx", "xs sxsssxs sxxx--xxxx--x", "xs sxsss|s sxs sx", "xs sxxxxxs sxs sx", "xs sssssss sxxxxxxx--xxx", "xs sxssssssssssx", "xO~~~~~~~~~~xssssssssssx", "xx-xxxxxxxxxxxx--xxxxxxx", "xhhhxsssssssssssssss§osx", "xh hxs §lsx", "xhhhxsssssssssssssssOlsx", "xxxxxxxxxxxxxxxxxxxxxxxx", ], [ "xxxxxxxxxxxxxxxxxxxxxxxx", "xhhhhhxslss s| x", "xh hx-xxx x~~~x s| x x", "xhhhhhxslsx §ssss s| l x", "xx-xxxxxx-x § s| l x", "x x § xx xxx l x", "x x~~~~~x x x xssssx l x", "x xm xssssx l x", "xxxxxxxxxxxxxxxxxxxx l x", "xsss|l§s§l§s§l§s§l§x x x", "x---xl§s§l§s§l§s§l§| x", "x xxxxxxxxxxxxxxxxxxxx", "x x x~~~~~~x¬¬¬¬¬xss|ssx", "x s | |ss|ssx", "x s | m |ssxssx", "x s x¬¬¬¬¬¬x~~~~~xssxssx", "x x xxxxxxxxxxxxxxssxssx", "x |§l§ssllss§l§|ssxssx", "xsss|§l§ssllss§l§|ssxssx", "xxxxxxxxxxxxxxxxxxxxxxxx", ], [ "xxxxxxxxxxxxxxxxxxxxxxxx", "x | xhhhx", "x x~~~~~~~~~~~~~O xh hx", "x lxxx-x-xxxxxxxx xhhhx", "x l|sx xsssxsxss| x-xxx", "x lx xxxxx-xx-x¬¬osssx", "x lx xxxs| x xsssx", "x ox x¬¬¬o xxxx x¬¬osssx", "x | x¬¬¬o x xsssx", "x-xxxx-xxxxxxxxxxxxx-x-x", "xssxsssssssssssgx xsx", "xx-xOoxxxxoOoOxxx xx |sx", "x §l |l§l§ x xx xxx", "x xx§lxx xl§l§x-xy ssx", "x xx§lxx xl§l§x-xxxxxssx", "xm §l xl§l§ || xssx", "xxxxOOOOOxl§xooooxx xssx", "xs| §§§§§ l§sllllsx xssx", "xsx §§§§§ l§ llll | |ssx", "xxxxxxxxxxxxxxxxxxxxxxxx", ], ] //////////////////// interaction with the safePoint botton //////////////////// safePointUI.onClick(() => { if (player.safePointUI=== 0) onUpdate(player.safePointUI=1); else onUpdate(player.safePointUI=0); setTimeout(showSafePoint, 500); function showSafePoint(){ onUpdate(player.safePointUI = 0) } }) onUpdate(() => { if(player.safePointUI === 0){ safePointUI.play("SafePointUIN") destroyAll("safePoint") }else if(player.safePointUI === 1){ safePointUI.play("SafePointUIY") addLevel(safePoints[levelIdx], { width: 48, height: 48, pos: vec2(48, 48), "s": () => [sprite("SafePoint"), area(), "safePoint"], }) }else if(player.safePointUI === 2){ safePointUI.play("SafePointUIY") addLevel(safePoints[levelIdx], { width: 48, height: 48, pos: vec2(48, 48), "h": () => [sprite("SafePoint"), area(), "safePoint"], }) wait(1, () => { player.safePointUI=0 }) } }) //////////////////////////////////////////////////////////// //////////////////// dialog function //////////////////// function addDialog() { const h = 100 const pad = 16 const bgDialog = add([ pos(0, height() - h), rect(width(), h), color(0, 0, 0), z(100), ]) const txt = add([ text("", { width: width(), }), pos(0 + pad, height() - h + pad), z(100), ]) bgDialog.hidden = true txt.hidden = true return { say(t) { txt.text = t bgDialog.hidden = false txt.hidden = false }, dismiss() { if (!this.active()) { return } txt.text = "" bgDialog.hidden = true txt.hidden = true }, active() { return !bgDialog.hidden }, destroy() { bgDialog.destroy() txt.destroy() }, } } const dialog = addDialog() //////////////////////////////////////////////////////////// //////////////////// traps interaction //////////////////// player.onCollide("trap", (trapCollide) => { onUpdate(player.life-=1) destroyAll(trapCollide) if (player.life === 0){ destroy(player) go("gameOver", 3, levelIdx) }else{ dialog.say("Sheeeesh! I got you! Life remain: " + player.life) } }) //////////////////// interaction with lifeItem //////////////////// player.onCollide("lifeItem", (lifeItem) => { if(player.life >= 3){ dialog.say("NOPPP, you already have the max amount of lifes!") }else{ destroy(lifeItem); onUpdate(player.life+=1) }}) //////////////////// interaction with money pot //////////////////// player.onCollide("moneyPot", (moneyPot) => { destroy(moneyPot); onUpdate(player.mPotCaught++) }) onUpdate(() => { if (player.mPotCaught >= 1)mPot1.play("moneyPotUIY") if (player.mPotCaught >= 2)mPot2.play("moneyPotUIY") if (player.mPotCaught >= 3)mPot3.play("moneyPotUIY") if (player.mPotCaught >= 4)mPot4.play("moneyPotUIY") if (player.mPotCaught >= 5)mPot5.play("moneyPotUIY") if (player.mPotCaught >= 6)mPot6.play("moneyPotUIY") if (player.mPotCaught >= 7)mPot7.play("moneyPotUIY") if (player.mPotCaught >= 8)mPot8.play("moneyPotUIY") if (player.mPotCaught >= 9)mPot9.play("moneyPotUIY") if (player.mPotCaught >= 10)mPot10.play("moneyPotUIY") }) //////////////////// interaction with the door //////////////////// player.onCollide("door", () => { if (levelIdx + 1 < walls.length) { go("game", levelIdx + 1, player.life, player.mPotCaught, actualTraps, 2, timer) } else { go("win", player.life, player.mPotCaught, timer) } }) //////////////////// interaction with the enemy //////////////////// player.onCollide("enemy", () => { onUpdate(player.life-=1) if (player.life === 0){ destroy(player) go("gameOver", 3, levelIdx) }else{ dialog.say("Sheeeesh! I got you! Life remain: " + player.life) } }) onUpdate(() => { if(player.life === 2){ life1.play("yLife") life2.play("yLife") life3.play("nLife") } else if(player.life === 1){ life2.play("nLife") life3.play("nLife") } else{ life1.play("yLife") life2.play("yLife") life3.play("yLife") } }) //////////////////////////////////////////////////////////// onUpdate("enemy", (e) => { e.move(e.x, e.y) //console.log(e.x, e.y, "move") }) onCollide("enemy","collisionLeft", (e) => { e.x = -SPEED e.y = 0 e.play("goLeft") //enemy.move(enemy.dir, SPEED) }) onCollide("enemy","collisionRight", (e) => { e.x = SPEED e.y = 0 e.play("goRight") //enemy.move(enemy.dir, SPEED) }) onCollide("enemy","collisionDown", (e) => { e.x = 0 e.y = SPEED e.play("goDown") //enemy.move(enemy.dir, SPEED) }) onCollide("enemy","collisionUp", (e) => { e.x = 0 e.y = -SPEED e.play("goUp") //enemy.move(enemy.dir, SPEED) }) //player movement const dirs = { "left": LEFT, "right": RIGHT, "up": UP, "down": DOWN, } for (const dir in dirs) { onKeyPress(dir, () => { dialog.dismiss() }) onKeyDown(dir, () => { player.move (dirs[dir].scale(SPEED))}) } onKeyDown("left", () => { player.play("goLeft") }) onKeyDown("right", () => { player.play("goRight") }) onKeyDown("down", () => { player.play("goDown") }) onKeyDown("up", () => { player.play("goUp") }) }) scene("win", (lifes, PotItemsColected, timer) => { add([ sprite("YouWin"), pos(width() / 2, height() / 2), origin("center"), "winPaper" ]) //Life// for (let i = 0; i < lifes; i++) { var j; if(lifes===1)j=0; else if(lifes===2)j=-0.5; else if(lifes>=3)j=-1; add([ sprite("life"), origin("center"), pos((width() / 2) + (48*(i+j)) , height() / 1.9), ]) } //Money Pots// for (let i = 0; i < PotItemsColected; i++) { var j; if(PotItemsColected===1)j=0; else if(PotItemsColected===2)j=-0.5; else if(PotItemsColected===3)j=-1; else if(PotItemsColected===4)j=-1.5; else if(PotItemsColected===5)j=-2; else if(PotItemsColected===6)j=-2.5; else if(PotItemsColected===7)j=-3; else if(PotItemsColected===8)j=-3.5; else if(PotItemsColected===9)j=-4; else if(PotItemsColected>=10)j=-4.5; add([ sprite("moneyPotUI", {anim: "moneyPotUIY",}), origin("center"), pos((width() / 2) + (48*(i+j)) , height() / 1.58), ]) } if(PotItemsColected===0){ add([ text("0",{size: 78}), origin("center"), pos((width() / 2) , height() / 1.58), ]) } //Timer// let finalTimer= timer.toFixed(2); add([ text(finalTimer,{size: 78}), origin("center"), pos((width() / 2) , height() / 1.35), ]) }) scene("gameOver", (restartGameTimer=3, levelIdx) => { if (levelIdx===0){ add([ sprite("YouLose1"), pos(width() / 2, height() / 2), origin("center"), "losePapers" ]) }else if (levelIdx===1){ add([ sprite("YouLose2"), pos(width() / 2, height() / 2), origin("center"), "losePapers" ]) }else if (levelIdx===2){ add([ sprite("YouLose3"), pos(width() / 2, height() / 2), origin("center"), "losePapers" ]) } setTimeout(restartGamefunction, 1000); function restartGamefunction(){ const timer = add([ text(restartGameTimer, {size: 98}), pos(width() / 2, height() / 1.35), origin("center"), ]) onUpdate(restartGameTimer--) if(restartGameTimer === 0){ wait(1, () => { go("game", 0, 1, 0, 2, 0.0); destroyAll("losePaper"); }) } else{wait(1, () => {destroy(timer)}); setTimeout(restartGamefunction, 1000);} } }) go("intro", 0);