// alert("hello world"); const tileSize = 16; // Sprites let baba_img; let tile_img, wall_img, rock_img, water_img, lava_img, flag_img; let win_img, you_img, move_img, stopText_img; let is_img; // Map let tileMap = [ ' ', 'wtwwwwwwwwwwwwww', 'wt ttttttt ttttw', 'wt itttttttitttw', 'wtt tt ttttttttw', 'wtttttttttt tttw', 'wt ttttttt ttttw', 'wt ttwtttt ttttw', 'wttt rtt llt ttw', 'wtt tttt ll ttfw', 'w tttaa ttwt ttw', 'wttt aatt wttttw', 'wttttttttttttttw', 'wt*i@ttttt^i#ttw', 'wtttttttt tttttw', 'wwwwwwwwwwwwwwww', ]; let rules = [ ["rock", "is", "push"], ["wall", "is", "stop"], ["water", "is", "sink"], ["lava", "is", "hot"] ] // CaracterMove let babaX = 0; let babaY = 0; // Sounds let bgm, winSound; let isPlaying = false; // Game State let isGameOver = false; let isWin = false; function preload(){ // BGM bgm = loadSound("/assets/Baba Is You OST - Baba Is You Theme.mp3"); // Spritesd baba_img = loadImage("/assets/Baba.webp"); tile_img = loadImage("/assets/Tile.webp"); wall_img = loadImage("/assets/Wall.webp"); rock_img = loadImage("/assets/Rock.webp"); water_img = loadImage("/assets/Water.webp"); lava_img = loadImage("/assets/Lava.webp"); flag_img = loadImage("/assets/Flag.webp"); is_img = loadImage("/assets/Text_IS.webp"); win_img = loadImage("/assets/Win.webp"); you_img = loadImage("/assets/You.webp"); move_img = loadImage("/assets/Move.webp"); stopText_img = loadImage("/assets/Stop.webp"); baba_text_img = loadImage("/assets/Text_BABA.webp"); flag_text_img = loadImage("/assets/Text_FLAG.webp"); } function setup(){ createCanvas(800, 400); new World(); background(51); textAlign(CENTER); // Floor - Tile let tile = new Group(); tile.img = tile_img; tile.collider = 'none'; tile.tile = "t"; tile.scale = tileSize/tile_img.width; // Flag let flag = new Group(); flag.img = flag_img; flag.collider = 'none'; flag.tile = "f"; flag.scale = tileSize/flag_img.width; // WALL let wall = new Group(); wall.img = wall_img; wall.collider = 'static'; wall.tile = "w"; wall.scale = tileSize/wall_img.width; // ROCK let rock = new Group(); rock.img = rock_img; rock.collider = 'dynamic'; rock.tile = "r"; rock.scale = tileSize/rock_img.width; // Water let water = new Group(); water.img = water_img; water.collider = 'none'; water.tile = 'a'; water.scale = tileSize/water_img.width; // Lava let lava = new Group(); lava.img = lava_img; lava.collider = 'none'; lava.tile = 'l'; lava.scale = tileSize/lava_img.width; // TEXTS // is let is = new Group(); is.img = is_img; is.collider = 'dyinamic'; is.tile = 'i'; is.scale = tileSize/is_img.width; // flag_text let flag_text = new Group(); flag_text.img = flag_text_img; flag_text.collider = 'dyinamic'; flag_text.tile = '^'; flag_text.scale = tileSize/flag_text_img.width; // baba_text let baba_text = new Group(); baba_text.img = baba_text_img; baba_text.collider = 'dyinamic'; baba_text.tile = '*'; baba_text.scale = tileSize/baba_text_img.width; // you let you = new Group(); you.img = you_img; you.collider = 'dyinamic'; you.tile = '@'; you.scale = tileSize/you_img.width; // win let win_text = new Group(); win_text.img = win_img; win_text.collider = 'dyinamic'; win_text.tile = '#'; win_text.scale = tileSize/win_img.width; new Tiles(tileMap, tileSize/2, tileSize/2, tileSize, tileSize); //BABA baba = new Sprite(tileSize/2, tileSize/2, tileSize, tileSize); baba.img = baba_img; baba.scale = tileSize / baba_img.width; baba.label = 'you'; } function draw(){ background(51); drawSprites(); if (isGameOver) { fill(255); textSize(32); text("Game Over! Press R to Restart", width / 4, height / 4); } if(isWin){ fill(255); textSize(32); text("Congratulations! Press R to Restart", width / 4, height / 4); } } // Background Music & Soundeffects function backgroundMusic(){ } function mousePressed(){ if (isPlaying) { bgm.pause(); isPlaying = false; } else { bgm.loop(); isPlaying = true; } } // Move ASDW function keyPressed(){ console.log(`key ${key} is pressed.`) if(isGameOver || isWin){ if(key=='r'||key=='R'){ resetGame(); } return; } const maxX = width - tileSize; const maxY = height - tileSize; if((key=='a'||key=='A') && isOpen(baba.x - tileSize, baba.y)) { if (baba.x - tileSize >= 0) { baba.x -= tileSize; console.log('Left'); } } if((key=='s'||key=='S') && isOpen(baba.x, baba.y + tileSize)) { if (baba.y + tileSize <= maxY) { baba.y += tileSize; console.log('Down'); } } if((key=='d'||key=='D') && isOpen(baba.x + tileSize, baba.y)) { if (baba.x + tileSize <= maxX) { baba.x += tileSize; console.log('Right'); } } if((key=='w'||key=='W') && isOpen(baba.x, baba.y - tileSize)) { if(baba.y - tileSize >= 0){ baba.y -= tileSize; console.log('Up'); } } } // move only to the opened place function isOpen(x,y){ let i = floor(x / tileSize); let j = floor(y / tileSize); if (j < 0 || j >= tileMap.length || i < 0 || i >= tileMap[0].length) { return false; } let tile = tileMap[j][i]; if (tile == ' ' || tile == 't'){ return true; } else if (tile == 'a'|| tile=='l'){ gameOver(); return true; } else if (tile == 'f'){ win(); return true; } else { console.log('blocked'); return false; } } function win(){ isWin = true; baba.remove(); } function gameOver(){ isGameOver = true; baba.remove(); } function resetGame(){ isGameOver = false; isWin = false; baba = new Sprite(tileSize/2, tileSize/2, tileSize, tileSize); baba.img = baba_img; baba.scale = tileSize / baba_img.width; baba.label = 'you'; }