diff --git a/compile.bat b/compile.bat new file mode 100644 index 00000000..2a7da2ed --- /dev/null +++ b/compile.bat @@ -0,0 +1 @@ +cl native\marblegame.c /Fe:marblegame.exe /Ox -I "D:\C Projects\Haxe\hl-1.11.0-win\include" -I native "D:\repos\Hashlink\hashlink\x64\Release\libhl.lib" "D:\repos\Hashlink\hashlink\x64\Release\fmt.lib" "D:\repos\Hashlink\hashlink\x64\Release\ui.lib" "D:\repos\Hashlink\hashlink\x64\Release\openal.lib" "D:\repos\Hashlink\hashlink\x64\Release\sdl.lib" \ No newline at end of file diff --git a/src/DifBuilder.hx b/src/DifBuilder.hx index 87c5f89f..acca5338 100644 --- a/src/DifBuilder.hx +++ b/src/DifBuilder.hx @@ -305,6 +305,7 @@ class DifBuilder { } else { material = Material.create(); } + material.shadows = false; // material.mainPass.addShader(new h3d.shader.pbr.PropsValues(1, 0, 0, 1)); // material.mainPass.wireframe = true; diff --git a/src/DtsObject.hx b/src/DtsObject.hx index d63a4b74..7ed262ac 100644 --- a/src/DtsObject.hx +++ b/src/DtsObject.hx @@ -366,14 +366,15 @@ class DtsObject extends GameObject { // // TODO TRANSPARENCY SHIT if (flags & 8 > 0) { material.blendMode = BlendMode.Add; - material.mainPass.setPassName("overlay"); + // material.mainPass.setPassName("overlay"); // material.textureShader.additive = true; } if (flags & 16 > 0) material.blendMode = BlendMode.Sub; if (flags & 32 > 0) { - material.mainPass.setPassName("overlay"); + material.mainPass.enableLights = false; + // material.mainPass.setPassName("overlay"); // var pbrprops = material.mainPass.getShader(h3d.shader.pbr.PropsValues); // pbrprops.emissiveValue = 1; // pbrprops.roughnessValue = 1; @@ -386,6 +387,8 @@ class DtsObject extends GameObject { // } // ((flags & 32) || environmentMaterial) ? new Materia + material.shadows = false; + // material.mainPass.addShader(new AlphaMult()); this.materials.push(material); diff --git a/src/ForceObject.hx b/src/ForceObject.hx index 323358cf..21069996 100644 --- a/src/ForceObject.hx +++ b/src/ForceObject.hx @@ -2,7 +2,6 @@ package src; import src.DtsObject; import h3d.Vector; -import h3d.scene.CustomObject; enum ForceType { NoForce; diff --git a/src/InstanceManager.hx b/src/InstanceManager.hx index 49d91191..528e4e78 100644 --- a/src/InstanceManager.hx +++ b/src/InstanceManager.hx @@ -41,6 +41,7 @@ class InstanceManager { for (instance in opaqueinstances) { // Draw the opaque shit first var transform = instance.emptyObj.getAbsPos().clone(); minfo.meshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name); + minfo.meshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights; minfo.meshbatch.setTransform(transform); minfo.meshbatch.emitInstance(); } @@ -52,8 +53,10 @@ class InstanceManager { var dtsShader = minfo.transparencymeshbatch.material.mainPass.getShader(h3d.shader.Texture); minfo.transparencymeshbatch.material.blendMode = Alpha; minfo.transparencymeshbatch.material.color.a = instance.gameObject.currentOpacity; - minfo.transparencymeshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name); + // minfo.transparencymeshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name); minfo.transparencymeshbatch.shadersChanged = true; + minfo.transparencymeshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights; + // minfo.transparencymeshbatch.material.mainPass.depthWrite = false; // if (dtsShader != null) { // dtsShader.currentOpacity = instance.gameObject.currentOpacity; // minfo.transparencymeshbatch.shadersChanged = true; diff --git a/src/Main.hx b/src/Main.hx index a4b1378c..b7f0f9e1 100644 --- a/src/Main.hx +++ b/src/Main.hx @@ -40,7 +40,7 @@ class Main extends hxd.App { } static function main() { - h3d.mat.PbrMaterialSetup.set(); + // h3d.mat.PbrMaterialSetup.set(); new Main(); } } diff --git a/src/Marble.hx b/src/Marble.hx index 365f0a6b..0d23d90c 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -1,5 +1,6 @@ package src; +import h3d.scene.Mesh; import h3d.col.Bounds; import collision.CollisionEntity; import shapes.StartPad; @@ -30,7 +31,6 @@ import h3d.col.ObjectCollider; import h3d.col.Collider.GroupCollider; import h3d.Vector; import h3d.mat.Material; -import h3d.scene.CustomObject; import h3d.prim.Sphere; import h3d.scene.Object; import src.CameraController; @@ -164,7 +164,8 @@ class Marble extends GameObject { geom.addUVs(); var marbleTexture = ResourceLoader.loader.load("data/shapes/balls/base.marble.png").toTexture(); var marbleMaterial = Material.create(marbleTexture); - var obj = new CustomObject(geom, marbleMaterial, this); + marbleMaterial.shadows = false; + var obj = new Mesh(geom, marbleMaterial, this); obj.scale(_radius); this.velocity = new Vector(); diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 6d2d2279..5014059f 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -4,7 +4,7 @@ import src.MarbleGame; import gui.EndGameGui; import sdl.Cursor; import src.ForceObject; -import h3d.scene.pbr.DirLight; +import h3d.scene.fwd.DirLight; import h3d.col.Bounds; import triggers.HelpTrigger; import triggers.InBoundsTrigger; @@ -54,7 +54,6 @@ import hxd.Key; import h3d.Vector; import src.InteriorObject; import h3d.scene.Scene; -import h3d.scene.CustomObject; import collision.CollisionWorld; import src.Marble; @@ -153,9 +152,9 @@ class MarbleWorld extends Scheduler { this.instanceManager = new InstanceManager(scene); this.particleManager = new ParticleManager(cast this); - var renderer = cast(this.scene.renderer, h3d.scene.pbr.Renderer); + // var renderer = cast(this.scene.renderer, h3d.scene.pbr.Renderer); - renderer.skyMode = Hide; + // renderer.skyMode = Hide; for (element in mission.root.elements) { if (element._type != MissionElementType.Sun) @@ -172,7 +171,7 @@ class MarbleWorld extends Scheduler { scene.lightSystem.ambientLight.load(ambientColor); var sunlight = new DirLight(sunDirection, scene); - sunlight.color = directionalColor.multiply(2); + sunlight.color = directionalColor; } // var skyElement:MissionElementSky = cast this.mission.root.elements.filter((element) -> element._type == MissionElementType.Sky)[0]; diff --git a/src/ParticleSystem.hx b/src/ParticleSystem.hx index 2386f811..e466e302 100644 --- a/src/ParticleSystem.hx +++ b/src/ParticleSystem.hx @@ -291,7 +291,8 @@ class ParticleManager { particleShader.scale = instance.scale; particleShader.rotation = instance.rotation; batch.meshBatch.material.blendMode = instance.o.blending; - batch.meshBatch.material.mainPass.setPassName("overlay"); + batch.meshBatch.material.mainPass.depthWrite = false; + // batch.meshBatch.material.mainPass.setPassName("overlay"); batch.meshBatch.material.color.load(instance.color); batch.meshBatch.shadersChanged = true; batch.meshBatch.setScale(instance.scale); @@ -324,8 +325,9 @@ class ParticleManager { var mat = Material.create(particleData.texture); // matshader.texture = mat.texture; mat.mainPass.enableLights = false; - mat.mainPass.setPassName("overlay"); + // mat.mainPass.setPassName("overlay"); // mat.mainPass.addShader(new h3d.shader.pbr.PropsValues(1, 0, 0, 1)); + mat.shadows = false; mat.texture.wrap = Wrap.Repeat; var billboardShader = new Billboard(); mat.mainPass.addShader(billboardShader); diff --git a/src/Sky.hx b/src/Sky.hx index 50d60fd0..04a756fe 100644 --- a/src/Sky.hx +++ b/src/Sky.hx @@ -33,11 +33,11 @@ class Sky extends Object { skyMesh.material.mainPass.enableLights = false; skyMesh.material.receiveShadows = false; skyMesh.material.blendMode = None; - var pbrprops = skyMesh.material.mainPass.getShader(PropsValues); - pbrprops.emissiveValue = 1; - pbrprops.roughnessValue = 0; - pbrprops.occlusionValue = 0; - pbrprops.metalnessValue = 1; + // var pbrprops = skyMesh.material.mainPass.getShader(PropsValues); + // pbrprops.emissiveValue = 1; + // pbrprops.roughnessValue = 0; + // pbrprops.occlusionValue = 0; + // pbrprops.metalnessValue = 1; skyMesh.scale(3500); var env = new Environment(texture); diff --git a/src/gui/EndGameGui.hx b/src/gui/EndGameGui.hx index 95ef93b9..91e7fa01 100644 --- a/src/gui/EndGameGui.hx +++ b/src/gui/EndGameGui.hx @@ -54,6 +54,17 @@ class EndGameGui extends GuiControl { var expo32 = new BitmapFont(expo32fontdata.entry); @:privateAccess expo32.loader = ResourceLoader.loader; + function mlFontLoader(text:String) { + switch (text) { + case "DomCasual32": + return domcasual32.toFont(); + case "Arial14": + return arial14.toFont(); + default: + return null; + } + } + var congrats = new GuiText(expo50); congrats.text.textColor = 0xffff00; congrats.text.text = "Final Time:"; @@ -71,9 +82,9 @@ class EndGameGui extends GuiControl { finishMessage.extent = new Vector(200, 100); pg.addChild(finishMessage); - var leftColumn = new GuiText(domcasual32); + var leftColumn = new GuiMLText(domcasual32, mlFontLoader); leftColumn.text.textColor = 0x000000; - leftColumn.text.text = "Qualify Time:\nGold Time:\nElapsed Time:\nBonus Time:"; + leftColumn.text.text = 'Qualify Time:
Gold Time:
Elapsed Time:
Bonus Time:

Best Times:
1. Nardo Polo
2. Nardo Polo
3. Nardo Polo'; leftColumn.text.filter = new DropShadow(1.414, 0.785, 0xffffff, 1, 0, 0.4, 1, true); leftColumn.position = new Vector(108, 103); leftColumn.extent = new Vector(208, 50); diff --git a/src/gui/PlayGui.hx b/src/gui/PlayGui.hx index 6bf2f53c..e9814c62 100644 --- a/src/gui/PlayGui.hx +++ b/src/gui/PlayGui.hx @@ -1,12 +1,13 @@ package gui; +import h3d.shader.AlphaMult; +import h3d.shader.ColorKey; import hxd.snd.WavData; import gui.GuiControl.HorizSizing; import src.TimeState; import format.gif.Data.Block; import hxd.res.BitmapFont; import h2d.Text; -import h3d.shader.pbr.PropsValues; import h3d.Vector; import hxd.fmt.hmd.Data.AnimationEvent; import h2d.Tile; @@ -201,8 +202,8 @@ class PlayGui { playGuiCtrl.addChild(gemCountNumbers[3]); this.gemImageScene = new h3d.scene.Scene(); - var gemImageRenderer = cast(this.gemImageScene.renderer, h3d.scene.pbr.Renderer); - gemImageRenderer.skyMode = Hide; + // var gemImageRenderer = cast(this.gemImageScene.renderer, h3d.scene.Renderer); + // gemImageRenderer.skyMode = Hide; gemImageSceneTarget = new Texture(60, 60, [Target]); gemImageSceneTarget.depthBuffer = new DepthBuffer(60, 60); @@ -210,6 +211,8 @@ class PlayGui { gemImageSceneTargetBitmap = new Bitmap(Tile.fromTexture(gemImageSceneTarget), scene2d); gemImageSceneTargetBitmap.x = -8; gemImageSceneTargetBitmap.y = -8; + // gemImageSceneTargetBitmap.blendMode = None; + // gemImageSceneTargetBitmap.addShader(new ColorKey()); gemImageObject = new DtsObject(); gemImageObject.dtsPath = "data/shapes/items/gem.dts"; @@ -220,7 +223,13 @@ class PlayGui { // ["base.gem"] = color + ".gem"; gemImageObject.init(null); for (mat in gemImageObject.materials) { - mat.mainPass.addShader(new PropsValues(1, 0, 0, 1)); + mat.mainPass.enableLights = false; + + // Huge hacks + if (mat.blendMode != Add) { + var alphaShader = new h3d.shader.AlphaChannel(); + mat.mainPass.addShader(alphaShader); + } } gemImageScene.addChild(gemImageObject); var gemImageCenter = gemImageObject.getBounds().getCenter(); @@ -237,8 +246,8 @@ class PlayGui { playGuiCtrl.addChild(powerupBox); this.powerupImageScene = new h3d.scene.Scene(); - var powerupImageRenderer = cast(this.powerupImageScene.renderer, h3d.scene.pbr.Renderer); - powerupImageRenderer.skyMode = Hide; + // var powerupImageRenderer = cast(this.powerupImageScene.renderer, h3d.scene.pbr.Renderer); + // powerupImageRenderer.skyMode = Hide; powerupImageSceneTarget = new Texture(68, 67, [Target]); powerupImageSceneTarget.depthBuffer = new DepthBuffer(68, 67); @@ -365,7 +374,7 @@ class PlayGui { powerupImageObject.showSequences = false; powerupImageObject.init(null); for (mat in powerupImageObject.materials) { - mat.mainPass.addShader(new PropsValues(1, 0, 0, 1)); + mat.mainPass.enableLights = false; } powerupImageScene.addChild(powerupImageObject); var powerupImageCenter = powerupImageObject.getBounds().getCenter();