From 26ed1cb8209746aadf11c3230d114be9e2244c59 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sat, 6 Jul 2024 01:47:49 +0530 Subject: [PATCH] various bugfixes from testing --- src/InstanceManager.hx | 4 +++- src/Marble.hx | 20 +++++++++++++++++--- src/MarbleGame.hx | 2 ++ src/MarbleWorld.hx | 5 ++--- src/Mission.hx | 2 ++ src/gui/JoinServerGui.hx | 10 +++++----- src/net/ExplodablePredictionStore.hx | 1 + src/net/MasterServerClient.hx | 2 +- src/net/NetPacket.hx | 5 +++++ src/shapes/Explodable.hx | 7 ++++++- 10 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/InstanceManager.hx b/src/InstanceManager.hx index db69e8e3..b7e1d618 100644 --- a/src/InstanceManager.hx +++ b/src/InstanceManager.hx @@ -111,7 +111,9 @@ class InstanceManager { var renderFrustum = scene.camera.frustum; var doFrustumCheck = true; // This sucks holy shit - doFrustumCheck = MarbleGame.instance.world != null && MarbleGame.instance.world.marble.cubemapRenderer != null; + doFrustumCheck = MarbleGame.instance.world != null + && MarbleGame.instance.world.marble.cubemapRenderer != null + && @:privateAccess !MarbleGame.instance.world.marble.camera.spectate; var cameraFrustrums = doFrustumCheck ? MarbleGame.instance.world.marble.cubemapRenderer.getCameraFrustums() : null; for (meshes in objects) { diff --git a/src/Marble.hx b/src/Marble.hx index daa082ee..55dea133 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -387,6 +387,7 @@ class Marble extends GameObject { this.lastRenderPos = new Vector(); this.netSmoothOffset = new Vector(); this.netCorrected = false; + this.currentUp = new Vector(0, 0, 1); var marbleDts = new DtsObject(); var marbleShader = ""; @@ -772,8 +773,6 @@ class Marble extends GameObject { } function computeMoveForces(m:Move, aControl:Vector, desiredOmega:Vector) { - if (this.currentUp == null) - this.currentUp = new Vector(0, 0, 1); var currentGravityDir = this.currentUp.multiply(-1); var R = currentGravityDir.multiply(-this._radius); var rollVelocity = this.omega.cross(R); @@ -1971,7 +1970,8 @@ class Marble extends GameObject { this.shockAbsorberUseTick = p.shockAbsorberTick; this.serverUsePowerup = p.netFlags & MarbleNetFlags.UsePowerup > 0; // this.currentUp = p.gravityDirection; - this.level.setUp(cast this, p.gravityDirection, this.level.timeState); + if (p.gravityDirection != null) + this.level.setUp(cast this, p.gravityDirection, this.level.timeState); if (this.outOfBounds && !p.oob && this.controllable) @:privateAccess this.level.playGui.setCenterText(''); this.outOfBounds = p.oob; @@ -1993,6 +1993,14 @@ class Marble extends GameObject { @:privateAccess level.trapdoorPredictions.acknowledgeTrapdoorUpdate(tId, tTime); } } + if (p.netFlags & MarbleNetFlags.DoBlast > 0 && blastUseTick != 0 && !this.controllable) { + var ublast = p.netFlags & MarbleNetFlags.DoUltraBlast > 0; + this.level.particleManager.createEmitter(ublast ? blastMaxParticleOptions : blastParticleOptions, ublast ? blastMaxEmitterData : blastEmitterData, + this.getAbsPos().getPosition(), () -> { + this.getAbsPos().getPosition().add(this.currentUp.multiply(-this._radius * 0.4)); + }, + new Vector(1, 1, 1).add(new Vector(Math.abs(this.currentUp.x), Math.abs(this.currentUp.y), Math.abs(this.currentUp.z)).multiply(-0.8))); + } // if (Net.isClient && !this.controllable && (this.serverTicks - this.blastUseTick) < 12) { // var ticksSince = (this.serverTicks - this.blastUseTick); // if (ticksSince >= 0) { @@ -2424,6 +2432,12 @@ class Marble extends GameObject { } } } + if (Net.isHost) { + this.blastUseTick = timeState.ticks; + this.netFlags |= MarbleNetFlags.DoBlast; + if (blastAmt > 1) + this.netFlags |= MarbleNetFlags.DoUltraBlast; + } } else { if (this.blastAmount < 0.2 || this.level.game != "ultra") return; diff --git a/src/MarbleGame.hx b/src/MarbleGame.hx index 563ae5ba..ed685f89 100644 --- a/src/MarbleGame.hx +++ b/src/MarbleGame.hx @@ -1,5 +1,6 @@ package src; +import gui.JoinServerGui; import gui.MPPreGameDlg; import gui.MPExitGameDlg; import gui.GuiControl; @@ -253,6 +254,7 @@ class MarbleGame { quitMission(Net.isClient); if (Net.isMP && Net.isClient) { Net.disconnect(); + canvas.setContent(new JoinServerGui()); } }); } else { diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 7691f38f..b942bbb9 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -786,11 +786,10 @@ class MarbleWorld extends Scheduler { for (interior in this.interiors) interior.reset(); - this.setUp(this.marble, startquat.up, this.timeState, true); - this.deselectPowerUp(this.marble); - this.orientationChangeTime = -1e8; this.oldOrientationQuat = new Quat(); this.newOrientationQuat = new Quat(); + this.orientationChangeTime = -1e8; + this.setUp(this.marble, startquat.up, this.timeState, true); this.deselectPowerUp(this.marble); AudioManager.playSound(ResourceLoader.getResource('data/sound/spawn.wav', ResourceLoader.getAudio, this.soundResources)); diff --git a/src/Mission.hx b/src/Mission.hx index 389bcaf4..90b6957d 100644 --- a/src/Mission.hx +++ b/src/Mission.hx @@ -263,6 +263,8 @@ class Mission { alarmStart = 15; if (this.missionInfo.alarmstarttime != null) alarmStart = MisParser.parseNumber(this.missionInfo.alarmstarttime); + if (alarmStart == 0) + alarmStart = 15; return alarmStart; } alarmStart = 0; diff --git a/src/gui/JoinServerGui.hx b/src/gui/JoinServerGui.hx index eb06c04b..271cf4b3 100644 --- a/src/gui/JoinServerGui.hx +++ b/src/gui/JoinServerGui.hx @@ -221,11 +221,11 @@ class JoinServerGui extends GuiImage { var joinFunc = (password:String) -> { if (curSelection != -1) { var selectedServerVersion = ourServerList[curSelection].version; - // if (selectedServerVersion != MarbleGame.currentVersion) { - // var pup = new MessageBoxOkDlg("You are using a different version of the game than the server. Please update your game."); - // MarbleGame.canvas.pushDialog(pup); - // return; - // } + if (selectedServerVersion != MarbleGame.currentVersion) { + var pup = new MessageBoxOkDlg("You are using a different version of the game than the server. Please update your game."); + MarbleGame.canvas.pushDialog(pup); + return; + } MarbleGame.canvas.setContent(new MPMessageGui("Please Wait", "Connecting")); var failed = true; diff --git a/src/net/ExplodablePredictionStore.hx b/src/net/ExplodablePredictionStore.hx index a1d2d7ac..9a83401c 100644 --- a/src/net/ExplodablePredictionStore.hx +++ b/src/net/ExplodablePredictionStore.hx @@ -26,6 +26,7 @@ class ExplodablePredictionStore { predictions[packet.explodableId] = packet.serverTicks; if (!world.explodablesToTick.contains(packet.explodableId)) world.explodablesToTick.push(packet.explodableId); + world.explodables[packet.explodableId].playExplosionSound(); } public inline function reset() { diff --git a/src/net/MasterServerClient.hx b/src/net/MasterServerClient.hx index 677c5b06..2505035b 100644 --- a/src/net/MasterServerClient.hx +++ b/src/net/MasterServerClient.hx @@ -220,7 +220,7 @@ class MasterServerClient { password: serverInfo.password, state: serverInfo.state, platform: serverInfo.platform, - version: "MBP" // MarbleGame.currentVersion + version: MarbleGame.currentVersion })); } diff --git a/src/net/NetPacket.hx b/src/net/NetPacket.hx index 19d890aa..31a35293 100644 --- a/src/net/NetPacket.hx +++ b/src/net/NetPacket.hx @@ -50,6 +50,7 @@ enum abstract MarbleNetFlags(Int) from Int to Int { var GravityChange = 1 << 6; var UsePowerup = 1 << 7; var UpdateTrapdoor = 1 << 8; + var DoUltraBlast = 1 << 9; } @:publicFields @@ -95,6 +96,7 @@ class MarbleUpdatePacket implements NetPacket { b.writeInt(blastAmount, 11); if (netFlags & MarbleNetFlags.DoBlast > 0) { b.writeFlag(true); + b.writeFlag(netFlags & MarbleNetFlags.DoUltraBlast > 0); b.writeUInt16(blastTick); } else { b.writeFlag(false); @@ -173,6 +175,9 @@ class MarbleUpdatePacket implements NetPacket { blastAmount = b.readInt(11); this.netFlags = 0; if (b.readFlag()) { + if (b.readFlag()) { + this.netFlags |= MarbleNetFlags.DoUltraBlast; + } blastTick = b.readUInt16(); this.netFlags |= MarbleNetFlags.DoBlast; } diff --git a/src/shapes/Explodable.hx b/src/shapes/Explodable.hx index bbea5c8f..0757a3f8 100644 --- a/src/shapes/Explodable.hx +++ b/src/shapes/Explodable.hx @@ -79,6 +79,11 @@ abstract class Explodable extends DtsObject { }); } + public inline function playExplosionSound() { + if (!this.level.rewinding && !Net.isClient) + AudioManager.playSound(ResourceLoader.getResource(explodeSoundFile, ResourceLoader.getAudio, this.soundResources)); + } + override function onMarbleContact(marble:src.Marble, timeState:TimeState, ?contact:CollisionInfo) { if (this.isCollideable && !this.level.rewinding) { // marble.velocity = marble.velocity.add(vec); @@ -90,7 +95,7 @@ abstract class Explodable extends DtsObject { } this.setCollisionEnabled(false); - if (!this.level.rewinding && @:privateAccess !marble.isNetUpdate) + if (!this.level.rewinding && @:privateAccess !marble.isNetUpdate && !Net.isClient) AudioManager.playSound(ResourceLoader.getResource(explodeSoundFile, ResourceLoader.getAudio, this.soundResources)); if (@:privateAccess !marble.isNetUpdate) { emitter1 = this.level.particleManager.createEmitter(particle, particleData, this.getAbsPos().getPosition());