From ba4fa3eb37f3237f7101183407e77773a2081f4e Mon Sep 17 00:00:00 2001 From: "Kacper Kostka (aider)" Date: Sat, 5 Apr 2025 16:17:02 +0200 Subject: [PATCH] feat: Increase gravity strength for falling elements --- js/elements/basic.js | 65 ++++++++++++++++++++++++++++++++++--------- js/elements/plants.js | 46 ++++++++++++++++++++++++------ js/elements/trees.js | 24 ++++++++++++---- 3 files changed, 108 insertions(+), 27 deletions(-) diff --git a/js/elements/basic.js b/js/elements/basic.js index e9b531e..c23103f 100644 --- a/js/elements/basic.js +++ b/js/elements/basic.js @@ -1,11 +1,24 @@ // Basic element behaviors (sand, water, dirt) function updateSand(x, y) { - // Try to move down - if (getPixel(x, y + 1) === EMPTY) { + // Try to move down with stronger gravity (up to 3 pixels at once) + let maxFall = 3; + let newY = y; + + // Check how far down we can fall + for (let i = 1; i <= maxFall; i++) { + if (getPixel(x, y + i) === EMPTY) { + newY = y + i; + } else { + break; + } + } + + if (newY > y) { + // Fall straight down as far as possible setPixel(x, y, EMPTY); - setPixel(x, y + 1, SAND); + setPixel(x, newY, SAND); return true; - } + } // Try to move down-left or down-right else if (getPixel(x - 1, y + 1) === EMPTY) { setPixel(x, y, EMPTY); @@ -49,13 +62,26 @@ function updateWater(x, y) { setMetadata(x, y, metadata); } - // Try to move down - if (getPixel(x, y + 1) === EMPTY) { + // Try to move down with stronger gravity (up to 2 pixels at once) + let maxFall = 2; + let newY = y; + + // Check how far down we can fall + for (let i = 1; i <= maxFall; i++) { + if (getPixel(x, y + i) === EMPTY) { + newY = y + i; + } else { + break; + } + } + + if (newY > y) { + // Fall straight down as far as possible setPixel(x, y, EMPTY); - setPixel(x, y + 1, WATER); - moveMetadata(x, y, x, y + 1); + setPixel(x, newY, WATER); + moveMetadata(x, y, x, newY); return true; - } + } // Try to move down-left or down-right else if (getPixel(x - 1, y + 1) === EMPTY) { setPixel(x, y, EMPTY); @@ -128,12 +154,25 @@ function updateWater(x, y) { } function updateDirt(x, y) { - // Try to move down - if (getPixel(x, y + 1) === EMPTY) { + // Try to move down with stronger gravity (up to 3 pixels at once) + let maxFall = 3; + let newY = y; + + // Check how far down we can fall + for (let i = 1; i <= maxFall; i++) { + if (getPixel(x, y + i) === EMPTY) { + newY = y + i; + } else { + break; + } + } + + if (newY > y) { + // Fall straight down as far as possible setPixel(x, y, EMPTY); - setPixel(x, y + 1, DIRT); + setPixel(x, newY, DIRT); return true; - } + } // Try to move down-left or down-right else if (getPixel(x - 1, y + 1) === EMPTY) { setPixel(x, y, EMPTY); diff --git a/js/elements/plants.js b/js/elements/plants.js index 3ae81ed..21d93c5 100644 --- a/js/elements/plants.js +++ b/js/elements/plants.js @@ -1,11 +1,25 @@ // Plant element behaviors (grass, seeds, trees) function updateGrass(x, y) { - // Grass behaves like dirt for physics - if (getPixel(x, y + 1) === EMPTY) { + // Grass behaves like dirt for physics with stronger gravity + let maxFall = 3; + let newY = y; + + // Check how far down we can fall + for (let i = 1; i <= maxFall; i++) { + if (getPixel(x, y + i) === EMPTY) { + newY = y + i; + } else { + break; + } + } + + if (newY > y) { + // Fall straight down as far as possible setPixel(x, y, EMPTY); - setPixel(x, y + 1, GRASS); + setPixel(x, newY, GRASS); return true; - } + } + // Try to move down-left or down-right else if (getPixel(x - 1, y + 1) === EMPTY) { setPixel(x, y, EMPTY); setPixel(x - 1, y + 1, GRASS); @@ -46,13 +60,27 @@ function updateGrass(x, y) { } function updateSeed(x, y) { - // Seeds fall like sand - if (getPixel(x, y + 1) === EMPTY) { + // Seeds fall like sand with stronger gravity + let maxFall = 3; + let newY = y; + + // Check how far down we can fall + for (let i = 1; i <= maxFall; i++) { + if (getPixel(x, y + i) === EMPTY) { + newY = y + i; + } else { + break; + } + } + + if (newY > y) { + // Fall straight down as far as possible setPixel(x, y, EMPTY); - setPixel(x, y + 1, SEED); - moveMetadata(x, y, x, y + 1); + setPixel(x, newY, SEED); + moveMetadata(x, y, x, newY); return true; - } + } + // Try to move down-left or down-right else if (getPixel(x - 1, y + 1) === EMPTY) { setPixel(x, y, EMPTY); setPixel(x - 1, y + 1, SEED); diff --git a/js/elements/trees.js b/js/elements/trees.js index 5004924..9a5b97b 100644 --- a/js/elements/trees.js +++ b/js/elements/trees.js @@ -1,12 +1,26 @@ // Tree element behaviors function updateTreeSeed(x, y) { - // Tree seeds fall like other seeds - if (getPixel(x, y + 1) === EMPTY) { + // Tree seeds fall like other seeds with stronger gravity + let maxFall = 3; + let newY = y; + + // Check how far down we can fall + for (let i = 1; i <= maxFall; i++) { + if (getPixel(x, y + i) === EMPTY) { + newY = y + i; + } else { + break; + } + } + + if (newY > y) { + // Fall straight down as far as possible setPixel(x, y, EMPTY); - setPixel(x, y + 1, TREE_SEED); - moveMetadata(x, y, x, y + 1); + setPixel(x, newY, TREE_SEED); + moveMetadata(x, y, x, newY); return true; - } + } + // Try to move down-left or down-right else if (getPixel(x - 1, y + 1) === EMPTY) { setPixel(x, y, EMPTY); setPixel(x - 1, y + 1, TREE_SEED);