From 9dd72272b6b1d6f90d6230535d315f3bb3b87476 Mon Sep 17 00:00:00 2001 From: genizy <185154684+genizy@users.noreply.github.com> Date: Fri, 1 May 2026 14:29:39 -0700 Subject: [PATCH 01/26] slope stuff --- assets/scripts/core/game-scene.js | 2 + assets/scripts/core/level.js | 30 +- assets/scripts/core/player.js | 104 +++++++ assets/scripts/game/allObjects.js | 438 +++++++++++++++--------------- 4 files changed, 350 insertions(+), 224 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 1f8dd88b..37658658 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -3877,6 +3877,8 @@ if (!this._state.isFlying && !this._state.isWave && !this._state.isUfo) { if (this._state.isBall) { const ballOnSurface = this._state.onGround || this._state.onCeiling; this._player.updateBallRoll(horizontalDelta, ballOnSurface); + } else if (this._state.isOnSlope || this._state.wasOnSlope) { + this._player.updateSlopeRotation(verticalDelta); } else if (this._state.onGround) { this._player.updateGroundRotation(verticalDelta); } else if (this._player.rotateActionActive) { diff --git a/assets/scripts/core/level.js b/assets/scripts/core/level.js index 51e3cfe3..07dd9914 100644 --- a/assets/scripts/core/level.js +++ b/assets/scripts/core/level.js @@ -11,6 +11,7 @@ class Collider { this.slopeDir = 1; this.slopeIsFilled = false; this.slopeFlipY = false; + this.slopeFloorTop = false; } getSlopeSurfaceY(worldX) { if (this.type !== slopeType) return null; @@ -1183,11 +1184,30 @@ window.LevelObject = class LevelObject { if (objectDef.type === solidType && objectDef.gridW > 0 && objectDef.gridH > 0) { let _0x10e5ae = objectDef.gridW * a; let _0x11e08d = objectDef.gridH * a; - let _0x4628ff = new Collider(solidType, worldX, worldY, _0x10e5ae, _0x11e08d, levelObj.rot || 0); - _0x4628ff.objid = levelObj.id; - _registerCollider(_0x4628ff); - this.objects.push(_0x4628ff); - this._addCollisionToSection(_0x4628ff); + if (_SLOPE_DATA[levelObj.id]) { + let _fx = levelObj.flipX || false; + let _fy = levelObj.flipY || false; + const _nr = ((Math.round(levelObj.rot || 0) % 360) + 360) % 360; + if (_nr === 90) { const _t = _fx; _fx = !_fy; _fy = _t; } + else if (_nr === 180) { _fx = !_fx; _fy = !_fy; } + else if (_nr === 270) { const _t = _fx; _fx = _fy; _fy = !_t; } + let _slopeCol = new Collider(slopeType, worldX, worldY, _0x10e5ae, _0x11e08d, levelObj.rot || 0); + _slopeCol.slopeDir = _fx ? -1 : 1; + _slopeCol.slopeFlipY = _fy; + _slopeCol.slopeFloorTop = _fy; + _slopeCol.slopeAngleDeg = _SLOPE_DATA[levelObj.id].angle || 45; + _slopeCol.slopeIsFilled = _SLOPE_DATA[levelObj.id].sq || false; + _slopeCol.objid = levelObj.id; + _registerCollider(_slopeCol); + this.objects.push(_slopeCol); + this._addCollisionToSection(_slopeCol); + } else { + let _0x4628ff = new Collider(solidType, worldX, worldY, _0x10e5ae, _0x11e08d, levelObj.rot || 0); + _0x4628ff.objid = levelObj.id; + _registerCollider(_0x4628ff); + this.objects.push(_0x4628ff); + this._addCollisionToSection(_0x4628ff); + } } else if (objectDef.type === hazardType) { let _0x3f8c4f = 0; let _0x2a123d = 0; diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index 63ca8d9e..29ba3900 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -35,6 +35,11 @@ class PlayerState { this.isDashing = false; this.dashYVelocity = 0; this.isDual = false; + this.isOnSlope = false; + this.wasOnSlope = false; + this.slopeVelocity = 0; + this.currentSlopeAngle = 0; + this.currentSlopeDir = 1; } } @@ -1625,6 +1630,15 @@ if (this.p.isFlying || this.p.isUfo) { let _0x17a9a6 = Math.min(_0x5c24f7 * 1, _0x108955 * _0x5c24f7); this._rotation = this.slerp2D(this._rotation, _0x183c2a, _0x17a9a6); } + updateSlopeRotation(dt) { + if (this.p.isBall || this.p.isWave || this.p.isSpider) { + return; + } + const _flipMod = this.p.gravityFlipped ? -1 : 1; + const _targetRad = -this.p.currentSlopeDir * (this.p.currentSlopeAngle || 0) * _flipMod; + const _t = Math.min(dt, 0.47250000000000003 * dt); + this._rotation = this.slerp2D(this._rotation, _targetRad, _t); + } updateBallRoll(_0x1dd8af, onSurface) { const _0x136f29 = this.p.gravityFlipped ? -1 : 1; const speedFactor = onSurface ? 0.5 : 0.35; @@ -1678,6 +1692,18 @@ if (this.p.isFlying || this.p.isUfo) { this.p.upKeyPressed = false; this.p.queuedHold = false; this.p.yVelocity = this.flipMod() * 22.360064; + if (this.p.wasOnSlope || this.p.isOnSlope) { + const _sv = this.p.slopeVelocity; + if (_sv * this.flipMod() > 0) { + const _velCap = this.p.yVelocity * 1.4; + this.p.yVelocity += _sv * 0.25; + if (this.p.gravityFlipped) { + this.p.yVelocity = Math.max(this.p.yVelocity, _velCap); + } else { + this.p.yVelocity = Math.min(this.p.yVelocity, _velCap); + } + } + } this.runRotateAction(); } else if (this.p.isJumping) { const _miniGrav = this.p.isMini ? 1.4 : 1; @@ -1892,6 +1918,8 @@ _updateBallJump(_0x2fe319) { checkCollisions(_0x2f5078) { this.noclipStats.totalFrames++; this.p.diedThisFrame = false; + this.p.wasOnSlope = this.p.isOnSlope; + this.p.isOnSlope = false; const playerSize = this.p.isMini ? 18 : 30; const waveHitSize = this.p.isMini ? 6 : 9; const pieceWidth = _0x2f5078 + centerX; @@ -2428,6 +2456,61 @@ _updateBallJump(_0x2fe319) { continue; } } + } else if (_colType === slopeType) { + if (pieceWidth + playerSize - 5 > left && pieceWidth - playerSize + 5 < right) { + const _surfY = gameObj.getSlopeSurfaceY(pieceWidth); + if (_surfY === null) continue; + const _slopeAngleRad = (gameObj.slopeAngleDeg || 45) * Math.PI / 180; + const _playerRadOnSlope = playerSize / Math.cos(_slopeAngleRad); + const _slopeFloorTop = gameObj.slopeFlipY || false; + const _upsideDown = this.p.gravityFlipped; + const _slopeUpsideDown = _upsideDown !== _slopeFloorTop; + if (!_slopeUpsideDown) { + const _playerBot = playersY - _playerRadOnSlope + gamemodeAddition; + const _lastBot = playersLastY - _playerRadOnSlope + gamemodeAddition; + if ((_playerBot >= _surfY || _lastBot >= _surfY) && (this.p.yVelocity <= 0 || this.p.onGround)) { + this.p.y = _surfY + _playerRadOnSlope; + const _oldVel = this.p.yVelocity; + this.hitGround(); + _0x30410f = true; + this.p.collideBottom = _surfY; + this.p.isOnSlope = true; + this.p.currentSlopeAngle = _slopeAngleRad; + this.p.currentSlopeDir = gameObj.slopeDir || 1; + const _slopeYVel = (gameObj.h * playerSpeed) / gameObj.w; + const _slopeVelMult = Math.min(1.12 / Math.max(_slopeAngleRad, 0.01), 1.54); + const _slopeDir = gameObj.slopeDir || 1; + const _playerUphill = _slopeDir < 0; + this.p.slopeVelocity = _slopeVelMult * _slopeYVel * this.flipMod() * (_playerUphill ? -1 : 1); + if (!this.p.isFlying) this._checkSnapJump(gameObj); + continue; + } + } else { + const _playerTop = playersY + _playerRadOnSlope - gamemodeAddition; + const _lastTop = playersLastY + _playerRadOnSlope - gamemodeAddition; + if ((_playerTop <= _surfY || _lastTop <= _surfY) && (this.p.yVelocity >= 0 || this.p.onGround)) { + this.p.y = _surfY - _playerRadOnSlope; + this.hitGround(); + _0x30410f = true; + this.p.onCeiling = true; + this.p.collideTop = _surfY; + this.p.isOnSlope = true; + this.p.currentSlopeAngle = _slopeAngleRad; + this.p.currentSlopeDir = gameObj.slopeDir || 1; + if (!this.p.isFlying) this._checkSnapJump(gameObj); + continue; + } + } + const _inX = pieceWidth + 9 > left && pieceWidth - 9 < right; + const _inY = playersY + 9 > top && playersY - 9 < bottom; + if (_inX && _inY && !this.p.isOnSlope && !this.p.onGround) { + const _inside = _slopeUpsideDown ? (playersY + 9 > _surfY) : (playersY - 9 < _surfY); + if (_inside) { + if (window.noClip) { this.p.diedThisFrame = true; continue; } + if (gameObj.objid !== 143) { this.killPlayer(); return; } + } + } + } } } } @@ -2562,6 +2645,27 @@ _updateBallJump(_0x2fe319) { graphics.lineStyle(2, hitboxColor, 0.7); if (nearObject.hitbox_radius !== undefined && nearObject.hitbox_radius !== null) { graphics.strokeCircle(xPos, objYCenter, nearObject.hitbox_radius); + } else if (nearObject.type === slopeType) { + const _hw = nearObject.w / 2; + const _hh = nearObject.h / 2; + const _sd = nearObject.slopeDir || 1; + const _sfy = nearObject.slopeFlipY || false; + let _cx0, _cy0, _cx1, _cy1, _cx2, _cy2; + if (!_sfy) { + _cx0 = xPos + (_sd > 0 ? -_hw : _hw); _cy0 = objYCenter + _hh; + _cx1 = xPos + (_sd > 0 ? _hw : -_hw); _cy1 = objYCenter + _hh; + _cx2 = xPos + (_sd > 0 ? _hw : -_hw); _cy2 = objYCenter - _hh; + } else { + _cx0 = xPos + (_sd > 0 ? -_hw : _hw); _cy0 = objYCenter - _hh; + _cx1 = xPos + (_sd > 0 ? _hw : -_hw); _cy1 = objYCenter - _hh; + _cx2 = xPos + (_sd > 0 ? _hw : -_hw); _cy2 = objYCenter + _hh; + } + graphics.beginPath(); + graphics.moveTo(_cx0, _cy0); + graphics.lineTo(_cx1, _cy1); + graphics.lineTo(_cx2, _cy2); + graphics.closePath(); + graphics.strokePath(); } else { let rot = Phaser.Math.DegToRad(nearObject.rotationDegrees); let cos = Math.cos(rot); diff --git a/assets/scripts/game/allObjects.js b/assets/scripts/game/allObjects.js index 3b893405..23389bb5 100644 --- a/assets/scripts/game/allObjects.js +++ b/assets/scripts/game/allObjects.js @@ -4274,7 +4274,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4296,7 +4296,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4318,7 +4318,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4340,7 +4340,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4364,7 +4364,7 @@ window.allobjects = function() { "gridH": 0.4333333373069763, "gridW": 0.36666667461395264, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4388,7 +4388,7 @@ window.allobjects = function() { "gridH": 0.44999998807907104, "gridW": 0.9666666388511658, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4410,7 +4410,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4432,7 +4432,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4498,7 +4498,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4520,7 +4520,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4542,7 +4542,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4564,7 +4564,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4586,7 +4586,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4608,7 +4608,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4622,7 +4622,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -4636,7 +4636,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -4650,7 +4650,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4664,7 +4664,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4715,7 +4715,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4737,7 +4737,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4759,7 +4759,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4781,7 +4781,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4803,7 +4803,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4825,7 +4825,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4891,7 +4891,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4913,7 +4913,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -4926,7 +4926,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -4950,7 +4950,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -4974,7 +4974,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -5014,7 +5014,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -5038,7 +5038,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -5126,7 +5126,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -5154,7 +5154,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -6367,7 +6367,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -6395,7 +6395,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -6577,7 +6577,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -6605,7 +6605,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -10813,7 +10813,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -10841,7 +10841,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -11023,7 +11023,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 3, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -11037,7 +11037,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 3, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -11277,7 +11277,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11291,7 +11291,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11305,7 +11305,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11319,7 +11319,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11333,7 +11333,7 @@ window.allobjects = function() { "gridH": 0.8500000238418579, "gridW": 0.8500000238418579, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11347,7 +11347,7 @@ window.allobjects = function() { "gridH": 0.9333333373069763, "gridW": 1.850000023841858, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11363,7 +11363,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 10, "default_detail_color_channel": -1, "default_z_layer": 3, @@ -11379,7 +11379,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 10, "default_detail_color_channel": -1, "default_z_layer": 3, @@ -11393,7 +11393,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11407,7 +11407,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11421,7 +11421,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11435,7 +11435,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11449,7 +11449,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11463,7 +11463,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11477,7 +11477,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11491,7 +11491,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11505,7 +11505,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11519,7 +11519,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11533,7 +11533,7 @@ window.allobjects = function() { "gridH": 0.8500000238418579, "gridW": 0.8500000238418579, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11547,7 +11547,7 @@ window.allobjects = function() { "gridH": 0.9333333373069763, "gridW": 1.850000023841858, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11561,7 +11561,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11575,7 +11575,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11598,7 +11598,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -11620,7 +11620,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -11642,7 +11642,7 @@ window.allobjects = function() { "gridH": 0.7666666507720947, "gridW": 0.7666666507720947, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -11664,7 +11664,7 @@ window.allobjects = function() { "gridH": 0.8833333253860474, "gridW": 1.7333333492279053, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -11686,7 +11686,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -11708,7 +11708,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -11729,7 +11729,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -11751,7 +11751,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -11773,7 +11773,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -11795,7 +11795,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -11809,7 +11809,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11823,7 +11823,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11837,7 +11837,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11851,7 +11851,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -11973,7 +11973,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -11995,7 +11995,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -12017,7 +12017,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -12039,7 +12039,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -12053,7 +12053,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -12067,7 +12067,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -12081,7 +12081,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -12095,7 +12095,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -12529,7 +12529,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12551,7 +12551,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2833333015441895, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12573,7 +12573,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12595,7 +12595,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12608,7 +12608,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -12705,7 +12705,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12727,7 +12727,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2833333015441895, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12749,7 +12749,7 @@ window.allobjects = function() { "gridH": 0.8166666626930237, "gridW": 0.8999999761581421, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12771,7 +12771,7 @@ window.allobjects = function() { "gridH": 0.8500000238418579, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -12784,7 +12784,7 @@ window.allobjects = function() { "gridH": 0.3499999940395355, "gridW": 0.8666666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -13379,7 +13379,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -13409,7 +13409,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -13445,7 +13445,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -13481,7 +13481,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -13511,7 +13511,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -13541,7 +13541,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -13571,7 +13571,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -13601,7 +13601,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -14237,7 +14237,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -14259,7 +14259,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -14419,7 +14419,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -14447,7 +14447,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -14469,7 +14469,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -14491,7 +14491,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -14601,7 +14601,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -14623,7 +14623,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -15798,7 +15798,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -15820,7 +15820,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2833333015441895, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -15842,7 +15842,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -15864,7 +15864,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -15877,7 +15877,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -15944,7 +15944,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -15966,7 +15966,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2833333015441895, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -15988,7 +15988,7 @@ window.allobjects = function() { "gridH": 0.8166666626930237, "gridW": 0.8999999761581421, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -16010,7 +16010,7 @@ window.allobjects = function() { "gridH": 0.8500000238418579, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -16023,7 +16023,7 @@ window.allobjects = function() { "gridH": 0.3499999940395355, "gridW": 0.8666666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -16836,7 +16836,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -16850,7 +16850,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -16864,7 +16864,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -16878,7 +16878,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1.0083333253860474, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -16892,7 +16892,7 @@ window.allobjects = function() { "gridH": 0.5166666507720947, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -17385,7 +17385,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17407,7 +17407,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2833333015441895, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17429,7 +17429,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17451,7 +17451,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17473,7 +17473,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17495,7 +17495,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2833333015441895, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17517,7 +17517,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17539,7 +17539,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -17552,7 +17552,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -17566,7 +17566,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -17580,7 +17580,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -17594,7 +17594,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -18714,7 +18714,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -18736,7 +18736,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -18758,7 +18758,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -18780,7 +18780,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -19021,7 +19021,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -8, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -20366,7 +20366,7 @@ window.allobjects = function() { "gridH": 0.7666666507720947, "gridW": 0.7666666507720947, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -20388,7 +20388,7 @@ window.allobjects = function() { "gridH": 0.7666666507720947, "gridW": 1.5166666507720947, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -20410,7 +20410,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -20432,7 +20432,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -20551,7 +20551,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 10, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -20565,7 +20565,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 10, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -20579,7 +20579,7 @@ window.allobjects = function() { "gridH": 0.2666666805744171, "gridW": 0.2666666805744171, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 10, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -20593,7 +20593,7 @@ window.allobjects = function() { "gridH": 0.2666666805744171, "gridW": 0.5166666507720947, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 10, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -21914,7 +21914,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -21942,7 +21942,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -21970,7 +21970,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -21998,7 +21998,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -23144,7 +23144,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -23166,7 +23166,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2999999523162842, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -23188,7 +23188,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 0.6833333373069763, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -23210,7 +23210,7 @@ window.allobjects = function() { "gridH": 0.6166666746139526, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -23223,7 +23223,7 @@ window.allobjects = function() { "gridH": 0.11666666716337204, "gridW": 0.2666666805744171, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -23321,7 +23321,7 @@ window.allobjects = function() { "gridH": 0.5833333134651184, "gridW": 0.6166666746139526, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -23335,7 +23335,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 1.2999999523162842, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -23349,7 +23349,7 @@ window.allobjects = function() { "gridH": 0.6000000238418579, "gridW": 0.6833333373069763, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -23363,7 +23363,7 @@ window.allobjects = function() { "gridH": 0.6166666746139526, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -23377,7 +23377,7 @@ window.allobjects = function() { "gridH": 0.11666666716337204, "gridW": 0.2666666805744171, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -23422,7 +23422,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -23444,7 +23444,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -23509,7 +23509,7 @@ window.allobjects = function() { "default_z_layer": 5, "default_z_order": 10, "portalParticle": true, - "portalParticleColor": 0x00ffff + "portalParticleColor": 65535 }, "1332": { "type": "pad", @@ -23559,7 +23559,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 3, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -23581,7 +23581,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 3, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -23617,7 +23617,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -23639,7 +23639,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -23675,7 +23675,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -23697,7 +23697,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29224,7 +29224,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29246,7 +29246,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29324,7 +29324,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29346,7 +29346,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 1, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29683,7 +29683,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29705,7 +29705,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29727,7 +29727,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29749,7 +29749,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29773,7 +29773,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29797,7 +29797,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29819,7 +29819,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29841,7 +29841,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_detail_color_channel": -1, "default_z_layer": 5, @@ -29964,7 +29964,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -29986,7 +29986,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30008,7 +30008,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30030,7 +30030,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30052,7 +30052,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30074,7 +30074,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30233,7 +30233,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -30265,7 +30265,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -30297,7 +30297,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -30322,7 +30322,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30492,7 +30492,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30518,7 +30518,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30544,7 +30544,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30570,7 +30570,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_detail_color_channel": -1, "default_z_layer": 1, @@ -30603,7 +30603,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -30635,7 +30635,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -30667,7 +30667,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -30699,7 +30699,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -30753,7 +30753,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -30799,7 +30799,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -30846,7 +30846,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 3, @@ -30901,7 +30901,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -30955,7 +30955,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -31009,7 +31009,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -31063,7 +31063,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -31117,7 +31117,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -7, "default_z_layer": 1, "default_z_order": -7 @@ -31171,7 +31171,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": -9, "default_z_layer": 1, "default_z_order": -9 @@ -32916,7 +32916,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 3, @@ -32938,7 +32938,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 3, @@ -32952,7 +32952,7 @@ window.allobjects = function() { "gridH": 0.4333333373069763, "gridW": 0.36666667461395264, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 3, @@ -32966,7 +32966,7 @@ window.allobjects = function() { "gridH": 0.44999998807907104, "gridW": 0.9666666388511658, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 9, "default_detail_color_channel": -1, "default_z_layer": 3, @@ -33061,7 +33061,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 1, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 @@ -33089,7 +33089,7 @@ window.allobjects = function() { "gridH": 1, "gridW": 2, "spritesheet": "GJ_GameSheet-uhd", - "type": "deco", + "type": "solid", "z": 2, "default_z_layer": 5, "default_z_order": 2 From 0210b1d8e72be7694cb99fc24b1be6efc1ee8da6 Mon Sep 17 00:00:00 2001 From: Ishan Arun Date: Tue, 19 May 2026 21:03:32 -0500 Subject: [PATCH 02/26] Improve Geometrical Dominator slope handling --- assets/scripts/core/level.js | 32 ++++++++++----- assets/scripts/core/player.js | 74 +++++++++++++++++++++++----------- assets/scripts/utils/config.js | 1 + index.html | 6 +-- 4 files changed, 76 insertions(+), 37 deletions(-) diff --git a/assets/scripts/core/level.js b/assets/scripts/core/level.js index 07dd9914..693e3c23 100644 --- a/assets/scripts/core/level.js +++ b/assets/scripts/core/level.js @@ -1191,16 +1191,28 @@ window.LevelObject = class LevelObject { if (_nr === 90) { const _t = _fx; _fx = !_fy; _fy = _t; } else if (_nr === 180) { _fx = !_fx; _fy = !_fy; } else if (_nr === 270) { const _t = _fx; _fx = _fy; _fy = !_t; } - let _slopeCol = new Collider(slopeType, worldX, worldY, _0x10e5ae, _0x11e08d, levelObj.rot || 0); - _slopeCol.slopeDir = _fx ? -1 : 1; - _slopeCol.slopeFlipY = _fy; - _slopeCol.slopeFloorTop = _fy; - _slopeCol.slopeAngleDeg = _SLOPE_DATA[levelObj.id].angle || 45; - _slopeCol.slopeIsFilled = _SLOPE_DATA[levelObj.id].sq || false; - _slopeCol.objid = levelObj.id; - _registerCollider(_slopeCol); - this.objects.push(_slopeCol); - this._addCollisionToSection(_slopeCol); + const _slopeDir = _fx ? -1 : 1; + const _coveredBySlope = this.objects.some(col => + col.type === slopeType && + Math.abs(col.x - worldX) < 0.01 && + Math.abs(col.y - worldY) < 0.01 && + col.slopeDir === _slopeDir && + col.slopeFlipY === _fy && + col.w >= _0x10e5ae - 1 && + col.h >= _0x11e08d - 1 + ); + if (!_coveredBySlope) { + let _slopeCol = new Collider(slopeType, worldX, worldY, _0x10e5ae, _0x11e08d, levelObj.rot || 0); + _slopeCol.slopeDir = _slopeDir; + _slopeCol.slopeFlipY = _fy; + _slopeCol.slopeFloorTop = _fy; + _slopeCol.slopeAngleDeg = _SLOPE_DATA[levelObj.id].angle || 45; + _slopeCol.slopeIsFilled = _SLOPE_DATA[levelObj.id].sq || false; + _slopeCol.objid = levelObj.id; + _registerCollider(_slopeCol); + this.objects.push(_slopeCol); + this._addCollisionToSection(_slopeCol); + } } else { let _0x4628ff = new Collider(solidType, worldX, worldY, _0x10e5ae, _0x11e08d, levelObj.rot || 0); _0x4628ff.objid = levelObj.id; diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index 29ba3900..1194a621 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -1186,6 +1186,9 @@ if (this.p.isFlying || this.p.isUfo) { if (this.p.isDead) { return; } + if (window.debugCollisions && this._lastDeathReason) { + console.log("death reason", this._lastDeathReason); + } this.p.isDead = true; this._scene.toggleGlitter(false); this._particleEmitter.stop(); @@ -1933,6 +1936,9 @@ _updateBallJump(_0x2fe319) { let _0x30410f = false; let _boostedThisStep = false; const _0x198534 = this._gameLayer.getNearbySectionObjects(pieceWidth); + let _floorSlopeHit = null; + let _ceilingSlopeHit = null; + let _slopeDeath = null; for (let gameObj of _0x198534) { let left = gameObj.x - gameObj.w / 2; let right = gameObj.x + gameObj.w / 2; @@ -2360,6 +2366,7 @@ _updateBallJump(_0x2fe319) { const _hMinDist = gameObj.hitbox_radius + (this.p.isWave ? waveHitSize : playerSize); if (_hDistSq > _hMinDist * _hMinDist) continue; } + this._lastDeathReason = { reason: "hazard", objid: gameObj.objid, type: gameObj.type, playerX: pieceWidth, playerY: playersY, objX: gameObj.x, objY: gameObj.y }; this.killPlayer(); return; } else if (_colType === solidType) { @@ -2387,7 +2394,9 @@ _updateBallJump(_0x2fe319) { const isstandingOnAPlatform = this.p.gravityFlipped ? _0xLandTop : _0xLandBot; if (iscolliding && !isstandingOnAPlatform) { if (window.noClip) this.p.diedThisFrame = true; + if (gameObj.h <= 4 || gameObj.w <= 4) continue; if (window.noClip || gameObj.objid === 143) continue + this._lastDeathReason = { reason: "solid-side", objid: gameObj.objid, type: gameObj.type, playerX: pieceWidth, playerY: playersY, objX: gameObj.x, objY: gameObj.y, left, right, top, bottom }; this.killPlayer(); return; } @@ -2442,6 +2451,7 @@ _updateBallJump(_0x2fe319) { if (iscolliding) { if (window.noClip) this.p.diedThisFrame = true; if (window.noClip || gameObj.objid === 143) continue; + this._lastDeathReason = { reason: "solid-head", objid: gameObj.objid, type: gameObj.type, playerX: pieceWidth, playerY: playersY, objX: gameObj.x, objY: gameObj.y, left, right, top, bottom }; this.killPlayer(); return; } @@ -2469,35 +2479,18 @@ _updateBallJump(_0x2fe319) { const _playerBot = playersY - _playerRadOnSlope + gamemodeAddition; const _lastBot = playersLastY - _playerRadOnSlope + gamemodeAddition; if ((_playerBot >= _surfY || _lastBot >= _surfY) && (this.p.yVelocity <= 0 || this.p.onGround)) { - this.p.y = _surfY + _playerRadOnSlope; - const _oldVel = this.p.yVelocity; - this.hitGround(); - _0x30410f = true; - this.p.collideBottom = _surfY; - this.p.isOnSlope = true; - this.p.currentSlopeAngle = _slopeAngleRad; - this.p.currentSlopeDir = gameObj.slopeDir || 1; - const _slopeYVel = (gameObj.h * playerSpeed) / gameObj.w; - const _slopeVelMult = Math.min(1.12 / Math.max(_slopeAngleRad, 0.01), 1.54); - const _slopeDir = gameObj.slopeDir || 1; - const _playerUphill = _slopeDir < 0; - this.p.slopeVelocity = _slopeVelMult * _slopeYVel * this.flipMod() * (_playerUphill ? -1 : 1); - if (!this.p.isFlying) this._checkSnapJump(gameObj); + if (!_floorSlopeHit || _surfY > _floorSlopeHit.surfY) { + _floorSlopeHit = { obj: gameObj, surfY: _surfY, playerRad: _playerRadOnSlope, angle: _slopeAngleRad }; + } continue; } } else { const _playerTop = playersY + _playerRadOnSlope - gamemodeAddition; const _lastTop = playersLastY + _playerRadOnSlope - gamemodeAddition; if ((_playerTop <= _surfY || _lastTop <= _surfY) && (this.p.yVelocity >= 0 || this.p.onGround)) { - this.p.y = _surfY - _playerRadOnSlope; - this.hitGround(); - _0x30410f = true; - this.p.onCeiling = true; - this.p.collideTop = _surfY; - this.p.isOnSlope = true; - this.p.currentSlopeAngle = _slopeAngleRad; - this.p.currentSlopeDir = gameObj.slopeDir || 1; - if (!this.p.isFlying) this._checkSnapJump(gameObj); + if (!_ceilingSlopeHit || _surfY < _ceilingSlopeHit.surfY) { + _ceilingSlopeHit = { obj: gameObj, surfY: _surfY, playerRad: _playerRadOnSlope, angle: _slopeAngleRad }; + } continue; } } @@ -2507,13 +2500,46 @@ _updateBallJump(_0x2fe319) { const _inside = _slopeUpsideDown ? (playersY + 9 > _surfY) : (playersY - 9 < _surfY); if (_inside) { if (window.noClip) { this.p.diedThisFrame = true; continue; } - if (gameObj.objid !== 143) { this.killPlayer(); return; } + if (gameObj.objid !== 143) { + _slopeDeath = { reason: "slope-inside", objid: gameObj.objid, type: gameObj.type, playerX: pieceWidth, playerY: playersY, objX: gameObj.x, objY: gameObj.y, left, right, top, bottom, surfY: _surfY }; + } } } } } } } + if (_floorSlopeHit) { + const gameObj = _floorSlopeHit.obj; + this.p.y = _floorSlopeHit.surfY + _floorSlopeHit.playerRad; + this.hitGround(); + _0x30410f = true; + this.p.collideBottom = _floorSlopeHit.surfY; + this.p.isOnSlope = true; + this.p.currentSlopeAngle = _floorSlopeHit.angle; + this.p.currentSlopeDir = gameObj.slopeDir || 1; + const _slopeYVel = (gameObj.h * playerSpeed) / gameObj.w; + const _slopeVelMult = Math.min(1.12 / Math.max(_floorSlopeHit.angle, 0.01), 1.54); + const _slopeDir = gameObj.slopeDir || 1; + const _playerUphill = _slopeDir < 0; + this.p.slopeVelocity = _slopeVelMult * _slopeYVel * this.flipMod() * (_playerUphill ? -1 : 1); + if (!this.p.isFlying) this._checkSnapJump(gameObj); + } else if (_ceilingSlopeHit) { + const gameObj = _ceilingSlopeHit.obj; + this.p.y = _ceilingSlopeHit.surfY - _ceilingSlopeHit.playerRad; + this.hitGround(); + _0x30410f = true; + this.p.onCeiling = true; + this.p.collideTop = _ceilingSlopeHit.surfY; + this.p.isOnSlope = true; + this.p.currentSlopeAngle = _ceilingSlopeHit.angle; + this.p.currentSlopeDir = gameObj.slopeDir || 1; + if (!this.p.isFlying) this._checkSnapJump(gameObj); + } else if (_slopeDeath) { + this._lastDeathReason = _slopeDeath; + this.killPlayer(); + return; + } if (this.p.collideTop !== 0 && this.p.collideBottom !== 0) { if (Math.abs(this.p.collideTop - this.p.collideBottom) < 48) { if (window.noClip) this.p.diedThisFrame = true; diff --git a/assets/scripts/utils/config.js b/assets/scripts/utils/config.js index 745224c3..21712551 100644 --- a/assets/scripts/utils/config.js +++ b/assets/scripts/utils/config.js @@ -23,6 +23,7 @@ window.orbClickShrinkTime = 250; window.orbParticleSize = 3.5; const urlParams = new URLSearchParams(window.location.search); +window.debugCollisions = urlParams.has("debugCollisions"); if (urlParams.has('id')) { window.levelID = urlParams.get('id'); } diff --git a/index.html b/index.html index 95943b87..7a03e750 100644 --- a/index.html +++ b/index.html @@ -29,10 +29,10 @@ - + - - + + From 5f9a9903640f35a635138788b679b3d3d8898f40 Mon Sep 17 00:00:00 2001 From: Ishan Arun Date: Wed, 20 May 2026 17:32:02 -0500 Subject: [PATCH 03/26] Smooth Geometrical Dominator slope rotation --- assets/scripts/core/game-scene.js | 2 +- assets/scripts/core/player.js | 7 +++++-- index.html | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 37658658..59954e09 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -3877,7 +3877,7 @@ if (!this._state.isFlying && !this._state.isWave && !this._state.isUfo) { if (this._state.isBall) { const ballOnSurface = this._state.onGround || this._state.onCeiling; this._player.updateBallRoll(horizontalDelta, ballOnSurface); - } else if (this._state.isOnSlope || this._state.wasOnSlope) { + } else if (this._state.isOnSlope) { this._player.updateSlopeRotation(verticalDelta); } else if (this._state.onGround) { this._player.updateGroundRotation(verticalDelta); diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index 1194a621..bd1d8f65 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -1639,8 +1639,9 @@ if (this.p.isFlying || this.p.isUfo) { } const _flipMod = this.p.gravityFlipped ? -1 : 1; const _targetRad = -this.p.currentSlopeDir * (this.p.currentSlopeAngle || 0) * _flipMod; - const _t = Math.min(dt, 0.47250000000000003 * dt); - this._rotation = this.slerp2D(this._rotation, _targetRad, _t); + const _angleDiff = Math.atan2(Math.sin(_targetRad - this._rotation), Math.cos(_targetRad - this._rotation)); + const _maxStep = Math.max(0.035, dt * 12); + this._rotation += Math.max(-_maxStep, Math.min(_maxStep, _angleDiff)); } updateBallRoll(_0x1dd8af, onSurface) { const _0x136f29 = this.p.gravityFlipped ? -1 : 1; @@ -2523,6 +2524,7 @@ _updateBallJump(_0x2fe319) { const _slopeDir = gameObj.slopeDir || 1; const _playerUphill = _slopeDir < 0; this.p.slopeVelocity = _slopeVelMult * _slopeYVel * this.flipMod() * (_playerUphill ? -1 : 1); + this.stopRotation(); if (!this.p.isFlying) this._checkSnapJump(gameObj); } else if (_ceilingSlopeHit) { const gameObj = _ceilingSlopeHit.obj; @@ -2534,6 +2536,7 @@ _updateBallJump(_0x2fe319) { this.p.isOnSlope = true; this.p.currentSlopeAngle = _ceilingSlopeHit.angle; this.p.currentSlopeDir = gameObj.slopeDir || 1; + this.stopRotation(); if (!this.p.isFlying) this._checkSnapJump(gameObj); } else if (_slopeDeath) { this._lastDeathReason = _slopeDeath; diff --git a/index.html b/index.html index 7a03e750..d94fb3fd 100644 --- a/index.html +++ b/index.html @@ -32,10 +32,10 @@ - + - + - + - + - + From e5cd3f91931e897ed261223b42e0e635dc130425 Mon Sep 17 00:00:00 2001 From: Ishan Arun Date: Thu, 21 May 2026 19:45:27 -0500 Subject: [PATCH 06/26] Prefer nearest slope surface for big slopes --- assets/scripts/core/player.js | 23 +++++++++-------------- index.html | 2 +- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index b7f06b8d..6070104d 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -1944,16 +1944,7 @@ _updateBallJump(_0x2fe319) { const playerSize = this.p.isMini ? 18 : 30; const waveHitSize = this.p.isMini ? 6 : 9; const iscube = !this.p.isFlying && !this.p.isBall && !this.p.isWave && !this.p.isUfo && !this.p.isSpider; - let _dynamicSize = playerSize; - if (iscube) { - if (this.p.wasOnSlope || Math.abs(this._rotation) > 0.01) { - const _lastSlopeAngle = this.p.lastSlopeAngle || (45 * Math.PI / 180); - const _maxSlopeRad = playerSize / Math.cos(_lastSlopeAngle); - const _diff = Math.min(_lastSlopeAngle, Math.abs(this._rotation)); - const _alignment = _lastSlopeAngle > 0.01 ? (_diff / _lastSlopeAngle) : 0; - _dynamicSize = playerSize + (_maxSlopeRad - playerSize) * _alignment; - } - } + const _dynamicSize = playerSize; const pieceWidth = _0x2f5078 + centerX; const playersY = this.p.y; const playersLastY = this.p.lastY; @@ -2508,8 +2499,10 @@ _updateBallJump(_0x2fe319) { const _playerBot = playersY - _playerRadOnSlope + gamemodeAddition; const _lastBot = playersLastY - _playerRadOnSlope + gamemodeAddition; if ((_playerBot >= _surfY || _lastBot >= _surfY) && (this.p.yVelocity <= 0 || this.p.onGround)) { - if (!_floorSlopeHit || _surfY > _floorSlopeHit.surfY) { - _floorSlopeHit = { obj: gameObj, surfY: _surfY, playerRad: _playerRadOnSlope, angle: _slopeAngleRad }; + const _targetY = _surfY + _playerRadOnSlope; + const _distY = Math.abs(_targetY - playersY); + if (!_floorSlopeHit || _distY < _floorSlopeHit.distY || (_distY === _floorSlopeHit.distY && _surfY > _floorSlopeHit.surfY)) { + _floorSlopeHit = { obj: gameObj, surfY: _surfY, playerRad: _playerRadOnSlope, angle: _slopeAngleRad, distY: _distY }; } continue; } @@ -2517,8 +2510,10 @@ _updateBallJump(_0x2fe319) { const _playerTop = playersY + _playerRadOnSlope - gamemodeAddition; const _lastTop = playersLastY + _playerRadOnSlope - gamemodeAddition; if ((_playerTop <= _surfY || _lastTop <= _surfY) && (this.p.yVelocity >= 0 || this.p.onGround)) { - if (!_ceilingSlopeHit || _surfY < _ceilingSlopeHit.surfY) { - _ceilingSlopeHit = { obj: gameObj, surfY: _surfY, playerRad: _playerRadOnSlope, angle: _slopeAngleRad }; + const _targetY = _surfY - _playerRadOnSlope; + const _distY = Math.abs(_targetY - playersY); + if (!_ceilingSlopeHit || _distY < _ceilingSlopeHit.distY || (_distY === _ceilingSlopeHit.distY && _surfY < _ceilingSlopeHit.surfY)) { + _ceilingSlopeHit = { obj: gameObj, surfY: _surfY, playerRad: _playerRadOnSlope, angle: _slopeAngleRad, distY: _distY }; } continue; } diff --git a/index.html b/index.html index c551f3d0..376d1712 100644 --- a/index.html +++ b/index.html @@ -32,7 +32,7 @@ - + From 9f9b19e8dcef79f83262f0cb8be1fab6a5dc1b88 Mon Sep 17 00:00:00 2001 From: Ishan Arun Date: Thu, 21 May 2026 19:49:49 -0500 Subject: [PATCH 07/26] Slow slope rotation smoothing --- assets/scripts/core/player.js | 8 +++----- index.html | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index 6070104d..b665bf1a 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -1641,10 +1641,8 @@ if (this.p.isFlying || this.p.isUfo) { const _flipMod = this.p.gravityFlipped ? -1 : 1; const _targetRad = -this.p.currentSlopeDir * (this.p.currentSlopeAngle || 0) * _flipMod; const _angleDiff = Math.atan2(Math.sin(_targetRad - this._rotation), Math.cos(_targetRad - this._rotation)); - // Smooth exponential interpolation for slope rotation. - // Uses a fast blend factor (1 - e^(-speed*dt)) so the rotation eases onto the slope - // surface without the angular "ramp" from the old linear clamp approach. - const _speed = 35; + // Smooth exponential interpolation for slope rotation without snapping ahead of long ramps. + const _speed = 14; const _blend = 1 - Math.exp(-_speed * Math.max(dt / 60, 0.00001)); this._rotation += _angleDiff * _blend; } @@ -1656,7 +1654,7 @@ if (this.p.isFlying || this.p.isUfo) { return; } const _angleDiff = Math.atan2(Math.sin(-this._rotation), Math.cos(-this._rotation)); - const _speed = 35; + const _speed = 8; const _blend = 1 - Math.exp(-_speed * Math.max(dt / 60, 0.00001)); this._rotation += _angleDiff * _blend; } diff --git a/index.html b/index.html index 376d1712..a21df242 100644 --- a/index.html +++ b/index.html @@ -32,7 +32,7 @@ - + From e33a87c2abc897bdab1be6a0b80786667231a395 Mon Sep 17 00:00:00 2001 From: Ishan Arun Date: Thu, 21 May 2026 19:54:03 -0500 Subject: [PATCH 08/26] Hold slope rotation through contact gaps --- assets/scripts/core/game-scene.js | 2 +- assets/scripts/core/player.js | 8 ++++++-- index.html | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index eb986de1..220fd410 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -3877,7 +3877,7 @@ if (!this._state.isFlying && !this._state.isWave && !this._state.isUfo) { if (this._state.isBall) { const ballOnSurface = this._state.onGround || this._state.onCeiling; this._player.updateBallRoll(horizontalDelta, ballOnSurface); - } else if (this._state.isOnSlope) { + } else if (this._state.isOnSlope || (this._state.wasOnSlope && this._state.onGround && this._state.slopeExitGrace > 0)) { this._player.updateSlopeRotation(verticalDelta); } else if (this._state.wasOnSlope && this._state.onGround && !this._state.isOnSlope) { // Just left a slope; ease rotation back to flat instead of snapping. diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index b665bf1a..da03384f 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -41,6 +41,7 @@ class PlayerState { this.currentSlopeAngle = 0; this.currentSlopeDir = 1; this.lastSlopeAngle = 0; + this.slopeExitGrace = 0; } } @@ -1641,8 +1642,7 @@ if (this.p.isFlying || this.p.isUfo) { const _flipMod = this.p.gravityFlipped ? -1 : 1; const _targetRad = -this.p.currentSlopeDir * (this.p.currentSlopeAngle || 0) * _flipMod; const _angleDiff = Math.atan2(Math.sin(_targetRad - this._rotation), Math.cos(_targetRad - this._rotation)); - // Smooth exponential interpolation for slope rotation without snapping ahead of long ramps. - const _speed = 14; + const _speed = 30; const _blend = 1 - Math.exp(-_speed * Math.max(dt / 60, 0.00001)); this._rotation += _angleDiff * _blend; } @@ -2541,6 +2541,7 @@ _updateBallJump(_0x2fe319) { this.p.currentSlopeAngle = _floorSlopeHit.angle; this.p.lastSlopeAngle = _floorSlopeHit.angle; this.p.currentSlopeDir = gameObj.slopeDir || 1; + this.p.slopeExitGrace = 3; const _slopeYVel = (gameObj.h * playerSpeed) / gameObj.w; const _slopeVelMult = Math.min(1.12 / Math.max(_floorSlopeHit.angle, 0.01), 1.54); const _slopeDir = gameObj.slopeDir || 1; @@ -2559,12 +2560,15 @@ _updateBallJump(_0x2fe319) { this.p.currentSlopeAngle = _ceilingSlopeHit.angle; this.p.lastSlopeAngle = _ceilingSlopeHit.angle; this.p.currentSlopeDir = gameObj.slopeDir || 1; + this.p.slopeExitGrace = 3; this.stopRotation(); if (!this.p.isFlying) this._checkSnapJump(gameObj); } else if (_slopeDeath) { this._lastDeathReason = _slopeDeath; this.killPlayer(); return; + } else if (this.p.wasOnSlope && this.p.slopeExitGrace > 0) { + this.p.slopeExitGrace--; } if (this.p.collideTop !== 0 && this.p.collideBottom !== 0) { if (Math.abs(this.p.collideTop - this.p.collideBottom) < 48) { diff --git a/index.html b/index.html index a21df242..11621cfb 100644 --- a/index.html +++ b/index.html @@ -32,10 +32,10 @@ - + - + - + From 5751843046a0ef26604fb09c3162387cde2c1c28 Mon Sep 17 00:00:00 2001 From: Ishan Arun Date: Thu, 21 May 2026 20:02:50 -0500 Subject: [PATCH 10/26] Lock cube rotation on slopes --- assets/scripts/core/game-scene.js | 2 +- assets/scripts/core/player.js | 5 +---- index.html | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 220fd410..eb986de1 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -3877,7 +3877,7 @@ if (!this._state.isFlying && !this._state.isWave && !this._state.isUfo) { if (this._state.isBall) { const ballOnSurface = this._state.onGround || this._state.onCeiling; this._player.updateBallRoll(horizontalDelta, ballOnSurface); - } else if (this._state.isOnSlope || (this._state.wasOnSlope && this._state.onGround && this._state.slopeExitGrace > 0)) { + } else if (this._state.isOnSlope) { this._player.updateSlopeRotation(verticalDelta); } else if (this._state.wasOnSlope && this._state.onGround && !this._state.isOnSlope) { // Just left a slope; ease rotation back to flat instead of snapping. diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index 11e48ce4..3d6bcee4 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -1641,10 +1641,7 @@ if (this.p.isFlying || this.p.isUfo) { } const _flipMod = this.p.gravityFlipped ? -1 : 1; const _targetRad = -this.p.currentSlopeDir * (this.p.currentSlopeAngle || 0) * _flipMod; - const _angleDiff = Math.atan2(Math.sin(_targetRad - this._rotation), Math.cos(_targetRad - this._rotation)); - const _speed = 30; - const _blend = 1 - Math.exp(-_speed * Math.max(dt / 60, 0.00001)); - this._rotation += _angleDiff * _blend; + this._rotation = _targetRad; } updateSlopeExitRotation(dt) { // Called the frame(s) after the player leaves a slope but is still on the ground. diff --git a/index.html b/index.html index 44540c7b..37f33f30 100644 --- a/index.html +++ b/index.html @@ -32,10 +32,10 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + From 4ac7228fa04ef4d6f519aaf581daca19e59b47cf Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Fri, 12 Jun 2026 14:04:23 -0500 Subject: [PATCH 26/26] Improve cube slope jump handling --- assets/scripts/core/player.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index 572b2edc..c5bead02 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -50,6 +50,7 @@ class PlayerState { this.holdSlopeExitRotation = false; this.suppressNextFallRotate = false; this.slopeExitJumpLandingDir = 0; + this.slopeExitJumpPaused = false; this.ignorePortals = false; } } @@ -1206,6 +1207,7 @@ if (this.p.isFlying || this.p.isUfo) { this.p.isJumping = false; this.p.queuedHold = false; this.p.suppressNextFallRotate = false; + this.p.slopeExitJumpPaused = false; if (this.p.slopeExitJumpLandingDir !== 0 && !this.p.isBall && !this.p.isWave && !this.p.isSpider) { const _sideStep = Math.PI / 2; const _scaledRotation = this._rotation / _sideStep; @@ -1619,6 +1621,12 @@ if (this.p.isFlying || this.p.isUfo) { this.p.onGround = false; this.p.canJump = false; } + pauseSlopeExitJump() { + const iscube = !this.p.isFlying && !this.p.isBall && !this.p.isWave && !this.p.isUfo && !this.p.isSpider && !this.p.isRobot && !this.p.isSwing && !this.p.isBird && !this.p.isDart; + if (iscube && (this.p.wasOnSlope || this.p.isOnSlope || this.p.slopeExitGrace > 0)) { + this.p.slopeExitJumpPaused = true; + } + } runRotateAction() { if (this.p.holdSlopeExitRotation && this.p.onGround) { this.p.suppressNextFallRotate = true; @@ -1810,6 +1818,7 @@ if (this.p.isFlying || this.p.isUfo) { } } } + this.pauseSlopeExitJump(); this.runRotateAction(); } else if (this.p.isJumping) { this.p.yVelocity -= p * _0x3d1c6f * this.flipMod(); @@ -2293,6 +2302,7 @@ _updateWaveJump() { if (_padNextTickVel !== null) { this.p.pendingVelocity = _padNextTickVel; } + this.pauseSlopeExitJump(); this.runRotateAction(); _boostedThisStep = true; } @@ -2326,6 +2336,7 @@ _updateWaveJump() { this.p.isJumping = false; this.p.upKeyPressed = false; this.p.queuedHold = false; + this.pauseSlopeExitJump(); this.runRotateAction(); _boostedThisStep = true; try { @@ -2365,6 +2376,7 @@ _updateWaveJump() { this.p.onGround = false; this.p.canJump = false; this.p.isJumping = false; + this.pauseSlopeExitJump(); this.runRotateAction(); _boostedThisStep = true; try { @@ -2461,6 +2473,7 @@ _updateWaveJump() { if (_orbId === 1330) { this.p.wasBoosted = false; } + this.pauseSlopeExitJump(); this.runRotateAction(); _boostedThisStep = true; if (_flipAfter) { @@ -2686,7 +2699,7 @@ _updateWaveJump() { const _playerBot = playersY - _playerRadOnSlope + gamemodeAddition; const _lastBot = playersLastY - _playerRadOnSlope + gamemodeAddition; const _flightEscapingFloorSlope = this.p.isFlying && this.p.upKeyDown && _playerBot < _surfY - 2 && _lastBot < _surfY - 2; - const _slopeStickyGrace = !_usesFlightSlopeResolve && this.p.slopeExitGrace > 0; + const _slopeStickyGrace = !_usesFlightSlopeResolve && this.p.slopeExitGrace > 0 && !this.p.slopeExitJumpPaused; if (_canSnapToSlope && !_flightEscapingFloorSlope && (_playerBot >= _surfY || _lastBot >= _surfY) && (this.p.yVelocity <= 0 || this.p.onGround || _usesFlightSlopeResolve || _slopeStickyGrace)) { const _targetY = _surfY + _playerRadOnSlope; const _distY = Math.abs(_targetY - playersY); @@ -2699,7 +2712,7 @@ _updateWaveJump() { const _playerTop = playersY + _playerRadOnSlope - gamemodeAddition; const _lastTop = playersLastY + _playerRadOnSlope - gamemodeAddition; const _flightEscapingCeilingSlope = this.p.isFlying && !this.p.upKeyDown && _playerTop > _surfY + 2 && _lastTop > _surfY + 2; - const _slopeStickyGrace = !_usesFlightSlopeResolve && this.p.slopeExitGrace > 0; + const _slopeStickyGrace = !_usesFlightSlopeResolve && this.p.slopeExitGrace > 0 && !this.p.slopeExitJumpPaused; if (_canSnapToSlope && !_flightEscapingCeilingSlope && (_playerTop <= _surfY || _lastTop <= _surfY) && (this.p.yVelocity >= 0 || this.p.onGround || _usesFlightSlopeResolve || _slopeStickyGrace)) { const _targetY = _surfY - _playerRadOnSlope; const _distY = Math.abs(_targetY - playersY); @@ -2804,9 +2817,9 @@ _updateWaveJump() { const _nearSlopeExit = this.p.mirrored ? pieceWidth < this.p.currentSlopeExitX + 18 : pieceWidth > this.p.currentSlopeExitX - 18; - if (this.p.slopeExitGrace === 20 && _nearSlopeExit && this.p.currentSlopeUphill && !this.p.isWave && !this.p.isUfo && !this.p.isSpider) { + if (this.p.slopeExitGrace === 20 && _nearSlopeExit && this.p.currentSlopeUphill && !this.p.slopeExitJumpPaused && !this.p.isWave && !this.p.isUfo && !this.p.isSpider) { const _slopeSteepness = Math.max(0.5, Math.min(1.6, (this.p.lastSlopeAngle || Math.PI / 4) / (Math.PI / 4))); - const _slopeExitBoost = this.p.isFlying ? 2.8 * _slopeSteepness : 15 * _slopeSteepness; + const _slopeExitBoost = this.p.isFlying ? 2.8 * _slopeSteepness : 13.5 * _slopeSteepness; const _boostVel = this.flipMod() * _slopeExitBoost; if (this.p.gravityFlipped) { this.p.yVelocity = Math.min(this.p.yVelocity, _boostVel);