diff --git a/index.html b/index.html
index 64be082e..0c565e9e 100644
--- a/index.html
+++ b/index.html
@@ -13048,6 +13048,10 @@ onAddElementList = [];
function onAddElement(callback) {
onAddElementList.push(callback);
}
+validateMovesList = [];
+function validateMoves(callback) {
+ validateMovesList.push(callback);
+}
canvasLayers = {
// bg: document.createElement("canvas"),
pixels: document.createElement("canvas"),
@@ -13764,6 +13768,16 @@ function langKey(key,fallback,template) {
function tryMove(pixel,nx,ny,leaveBehind,force) {
if (pixel.drag && force !== true) { return true; }
if (pixel.del) { return false }
+ if (validateMovesList.length !== 0 && force !== true) {
+ for (let i = 0; i < validateMovesList.length; i++) {
+ const result = validateMovesList[i](pixel,nx,ny);
+ if (result === false) return false;
+ else if (Array.isArray(result)) {
+ nx = result[0];
+ ny = result[1];
+ }
+ }
+ }
var info = elements[pixel.element];
var oob = outOfBounds(nx,ny);
if (isEmpty(nx,ny,false,oob)) { // If coords is empty, move to coords
diff --git a/mods/gravity_test.js b/mods/gravity_test.js
new file mode 100644
index 00000000..3c90a653
--- /dev/null
+++ b/mods/gravity_test.js
@@ -0,0 +1,51 @@
+// validateMoves((pixel,nx,ny) => {
+// if (pixel.y-ny < 0) { //goes down usually
+// return false;
+// }
+// })
+
+validateMoves((pixel,nx,ny) => {
+ if (elements[pixel.element].isGas) return true;
+ if (true || pixel.y-ny < 0) { //goes down usually
+
+ nx = 0;
+ ny = 0;
+
+ const centerX = Math.floor(width/2);
+ const centerY = Math.floor(height/2);
+
+ let diffX = centerX-pixel.x;
+ let diffY = centerY-pixel.y;
+
+ let dirX = 0;
+ let dirY = 0;
+ if (Math.abs(diffX) > Math.abs(diffY)) {
+ dirX = Math.sign(diffX);
+ }
+ else {
+ dirY = Math.sign(diffY);
+ }
+
+ if (Math.random() < Math.abs(diffX)/100) diffX = Math.sign(diffX);
+ else diffX = 0;
+ if (Math.random() < Math.abs(diffY)/100) diffY = Math.sign(diffY);
+ else diffY = 0;
+
+ if ((diffX || diffY) && !isEmpty(pixel.x+diffX,pixel.y+diffY)) {
+ if (dirX !== 0) {
+ diffY = Math.random() < 0.5 ? 1 : -1;
+ }
+ else if (dirY !== 0) {
+ diffX = Math.random() < 0.5 ? 1 : -1;
+ }
+ }
+
+ // if (!(pixel.y-ny)) {
+ // diffX += pixel.y-ny;
+ // diffY += pixel.x-nx;
+ // }
+
+ return [pixel.x+diffX,pixel.y+diffY];
+
+ }
+})
\ No newline at end of file