diff --git a/data/multiplayer/hunt/intermediate/Marbleland.mis b/data/multiplayer/hunt/intermediate/Marbleland.mis index 194ab2d3..5a54b746 100644 --- a/data/multiplayer/hunt/intermediate/Marbleland.mis +++ b/data/multiplayer/hunt/intermediate/Marbleland.mis @@ -83,13 +83,6 @@ new SimGroup(MissionGroup) { interiorFile = "~/data/multiplayer/interiors/PlatinumQuest/Marbleland.dif"; showTerrainInside = "0"; }; - new InteriorInstance() { - position = "0 0 0"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - interiorFile = "~/data/multiplayer/interiors/PlatinumQuest/Marbleland2.dif"; - showTerrainInside = "0"; - }; new SimGroup(SpawnPointGroup) { new Trigger() { diff --git a/data/multiplayer/interiors/PlatinumQuest/DefaultSpec.png b/data/multiplayer/interiors/PlatinumQuest/DefaultSpec.png new file mode 100644 index 00000000..71237778 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/DefaultSpec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/Marbleland.dif b/data/multiplayer/interiors/PlatinumQuest/Marbleland.dif index d4cc21b1..e1841273 100644 Binary files a/data/multiplayer/interiors/PlatinumQuest/Marbleland.dif and b/data/multiplayer/interiors/PlatinumQuest/Marbleland.dif differ diff --git a/data/multiplayer/interiors/PlatinumQuest/Marbleland2.dif b/data/multiplayer/interiors/PlatinumQuest/Marbleland2.dif deleted file mode 100644 index 74949c02..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/Marbleland2.dif and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/MaximoCenter.dif b/data/multiplayer/interiors/PlatinumQuest/MaximoCenter.dif index d117f27f..b7b40c09 100644 Binary files a/data/multiplayer/interiors/PlatinumQuest/MaximoCenter.dif and b/data/multiplayer/interiors/PlatinumQuest/MaximoCenter.dif differ diff --git a/data/multiplayer/interiors/PlatinumQuest/ice.normal.png b/data/multiplayer/interiors/PlatinumQuest/ice.normal.png new file mode 100644 index 00000000..92cd7a30 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/ice.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/lupus.dif b/data/multiplayer/interiors/PlatinumQuest/lupus.dif index c337bf79..119b24cd 100644 Binary files a/data/multiplayer/interiors/PlatinumQuest/lupus.dif and b/data/multiplayer/interiors/PlatinumQuest/lupus.dif differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.jpg deleted file mode 100644 index f58cdd1d..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.normal.png new file mode 100644 index 00000000..e3578059 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.png new file mode 100644 index 00000000..40a0d903 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.spec.png new file mode 100644 index 00000000..14842481 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_1.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.jpg deleted file mode 100644 index a56cfa34..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.normal.png new file mode 100644 index 00000000..5ba49517 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.png new file mode 100644 index 00000000..77b4c943 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.spec.png new file mode 100644 index 00000000..72df0e9d Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_2.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.jpg deleted file mode 100644 index f0e0dbac..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.normal.png new file mode 100644 index 00000000..babab0c4 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.png new file mode 100644 index 00000000..ec7c36b8 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.spec.png new file mode 100644 index 00000000..97875929 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_3.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.jpg deleted file mode 100644 index 0ac0c2d9..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.normal.png new file mode 100644 index 00000000..b8cd5abc Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.png new file mode 100644 index 00000000..38f6d565 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.spec.png new file mode 100644 index 00000000..b725693e Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_4.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.jpg deleted file mode 100644 index 58a8f96c..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.normal.png new file mode 100644 index 00000000..ea87b986 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.png new file mode 100644 index 00000000..65acce71 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.spec.png new file mode 100644 index 00000000..ec51b5a3 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_5.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.jpg deleted file mode 100644 index 093190dd..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.normal.png new file mode 100644 index 00000000..40924ce8 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.png new file mode 100644 index 00000000..45baabed Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.spec.png new file mode 100644 index 00000000..861a9c01 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_6.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.jpg deleted file mode 100644 index c62d9823..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.normal.png new file mode 100644 index 00000000..6a62c85a Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.png new file mode 100644 index 00000000..e6586e3c Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.spec.png new file mode 100644 index 00000000..06724ad2 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_7.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.jpg deleted file mode 100644 index be7c0566..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.normal.png new file mode 100644 index 00000000..d4f38741 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.png new file mode 100644 index 00000000..8a9bb313 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.spec.png new file mode 100644 index 00000000..c36e5621 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_8.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.jpg deleted file mode 100644 index 05eb87bb..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.normal.png new file mode 100644 index 00000000..d26707cc Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.png new file mode 100644 index 00000000..684fc87f Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.spec.png new file mode 100644 index 00000000..de7a8c7c Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.jpg deleted file mode 100644 index af16abb4..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.normal.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.normal.png new file mode 100644 index 00000000..2f5b74cb Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.png new file mode 100644 index 00000000..bc77e196 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.spec.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.spec.png new file mode 100644 index 00000000..a2b8b3cf Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2.spec.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2_medium.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2_medium.jpg deleted file mode 100644 index 4ce8ee4d..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2_medium.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2_medium.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2_medium.png new file mode 100644 index 00000000..155797a7 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_2_medium.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_small.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_small.jpg deleted file mode 100644 index 78d48648..00000000 Binary files a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_small.jpg and /dev/null differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_small.png b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_small.png new file mode 100644 index 00000000..3af38ac0 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_ray_wall_combo_small.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/pq_rays_green_random.jpg b/data/multiplayer/interiors/PlatinumQuest/pq_rays_green_random.jpg new file mode 100644 index 00000000..a9a47566 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/pq_rays_green_random.jpg differ diff --git a/data/multiplayer/interiors/PlatinumQuest/tile.normal.png b/data/multiplayer/interiors/PlatinumQuest/tile.normal.png new file mode 100644 index 00000000..0dffcdcb Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/tile.normal.png differ diff --git a/data/multiplayer/interiors/PlatinumQuest/tile.spec.png b/data/multiplayer/interiors/PlatinumQuest/tile.spec.png new file mode 100644 index 00000000..8beba789 Binary files /dev/null and b/data/multiplayer/interiors/PlatinumQuest/tile.spec.png differ diff --git a/src/DifBuilder.hx b/src/DifBuilder.hx index 8aa68a68..2f134a81 100644 --- a/src/DifBuilder.hx +++ b/src/DifBuilder.hx @@ -1,5 +1,6 @@ package src; +import shaders.PQMaterial; import h3d.scene.MultiMaterial; import shaders.NormalMaterial; import shaders.NoiseTileMaterial; @@ -267,6 +268,23 @@ class DifBuilder { worker.run(); } + static function createPQMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, normalTexture:String, specularTexture:String, secondaryFactor:Float = 1) { + var worker = new ResourceLoaderWorker(() -> { + var diffuseTex = ResourceLoader.getTexture('data/multiplayer/interiors/platinumquest/${baseTexture}').resource; + var normalTex = ResourceLoader.getTexture('data/multiplayer/interiors/platinumquest/${normalTexture}').resource; + normalTex.wrap = Repeat; + var specularTex = ResourceLoader.getTexture('data/multiplayer/interiors/platinumquest/${specularTexture}').resource; + specularTex.wrap = Repeat; + var shader = new PQMaterial(diffuseTex, normalTex, 9.0, specularTex, MarbleGame.instance.world.ambient, MarbleGame.instance.world.dirLight, + MarbleGame.instance.world.dirLightDir, secondaryFactor); + onFinish(shader); + }); + worker.loadFile('data/multiplayer/interiors/platinumquest/${baseTexture}'); + worker.loadFile('data/multiplayer/interiors/platinumquest/${normalTexture}'); + worker.loadFile('data/multiplayer/interiors/platinumquest/${specularTexture}'); + worker.run(); + } + static var shaderMaterialDict:MapVoid)->Void> = [ 'interiors_mbu/plate_1' => (onFinish) -> createPhongMaterial(onFinish, 'plate.randomize.png', 'plate.normal.png', 8, new Vector(1, 1, 0.8, 1), 0.5), 'interiors_mbu/tile_beginner' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '', 40, new Vector(1, 1, 1, 1)), @@ -315,6 +333,52 @@ class DifBuilder { new Vector(0.15, 0.15, 0.16, 1.0)), 'interiors_mbu/stripe_caution' => (onFinish) -> createPhongMaterial(onFinish, 'stripe_caution.png', 'DefaultNormal.png', 12, new Vector(0.8, 0.8, 0.6, 1)), + 'multiplayer/interiors/platinumquest/pq_hot_1_med' => (onFinish) -> createPQMaterial(onFinish, 'pq_hot_1_med.jpg', 'tile.normal.png', 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_hot_2_light' => (onFinish) -> createPQMaterial(onFinish, 'pq_hot_2_light.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_hot_4_med' => (onFinish) -> createPQMaterial(onFinish, 'pq_hot_4_med.jpg', 'tile.normal.png', 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_rays_blue_med' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_blue_med.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_rays_green_dark' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_green_dark.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_rays_green_light' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_green_light.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_rays_green_med' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_green_med.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_rays_green_random' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_green_random.jpg', 'tile.normal.png', + 'tile.spec.png', 0.25), + 'multiplayer/interiors/platinumquest/pq_rays_red_light' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_red_light.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_rays_purple_light' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_purple_light.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_rays_purple_med' => (onFinish) -> createPQMaterial(onFinish, 'pq_rays_purple_med.jpg', 'tile.normal.png', + 'tile.spec.png'), + 'multiplayer/interiors/platinumquest/pq_friction_ice' => (onFinish) -> createPQMaterial(onFinish, 'pq_friction_ice.jpg', 'ice.normal.png', + 'DefaultSpec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_1' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_1.png', 'pq_ray_wall_1.normal.png', + 'pq_ray_wall_1.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_2' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_2.png', 'pq_ray_wall_2.normal.png', + 'pq_ray_wall_2.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_3' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_3.png', 'pq_ray_wall_3.normal.png', + 'pq_ray_wall_3.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_4' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_4.png', 'pq_ray_wall_4.normal.png', + 'pq_ray_wall_4.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_5' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_5.png', 'pq_ray_wall_5.normal.png', + 'pq_ray_wall_5.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_6' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_6.png', 'pq_ray_wall_6.normal.png', + 'pq_ray_wall_6.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_7' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_7.png', 'pq_ray_wall_7.normal.png', + 'pq_ray_wall_7.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_8' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_8.png', 'pq_ray_wall_8.normal.png', + 'pq_ray_wall_8.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_combo' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_combo.png', + 'pq_ray_wall_combo.normal.png', 'pq_ray_wall_combo.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_combo_2' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_combo_2.png', + 'pq_ray_wall_combo_2.normal.png', 'pq_ray_wall_combo_2.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_combo_2_medium' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_combo_2.png', + 'pq_ray_wall_combo_2.normal.png', 'pq_ray_wall_combo_2.spec.png'), + 'multiplayer/interiors/platinumquest/pq_ray_wall_combo_small' => (onFinish) -> createPQMaterial(onFinish, 'pq_ray_wall_combo.png', + 'pq_ray_wall_combo.normal.png', 'pq_ray_wall_combo.spec.png'), ]; public static function loadDif(path:String, itr:InteriorObject, onFinish:Void->Void, ?so:Int = -1) { diff --git a/src/InstanceManager.hx b/src/InstanceManager.hx index b7e1d618..67b3eba1 100644 --- a/src/InstanceManager.hx +++ b/src/InstanceManager.hx @@ -1,5 +1,6 @@ package src; +import shaders.PQMaterial; import h3d.mat.Material; import h3d.scene.MultiMaterial; import shaders.EnvMap; @@ -263,6 +264,13 @@ class InstanceManager { matclone.mainPass.addShader(nmapshdr); // minfo.meshbatch.material.mainPass.culling = mat.mainPass.culling; } + var pqshdr = mat.mainPass.getShader(PQMaterial); + if (pqshdr != null) { + matclone.mainPass.removeShader(matclone.textureShader); + matclone.mainPass.addShader(pqshdr); + // minfo.meshbatch.material.mainPass.culling = mat.mainPass.culling; + } + var cubemapshdr = mat.mainPass.getShader(EnvMap); if (cubemapshdr != null) { matclone.mainPass.addShader(cubemapshdr); diff --git a/src/Marble.hx b/src/Marble.hx index 20c95f4b..40a11de0 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -1139,15 +1139,15 @@ class Marble extends GameObject { function updateRollSound(time:TimeState, contactPct:Float, slipAmount:Float) { var rSpat = rollSound.getEffect(Spatialization); - rSpat.position = this.getAbsPos().getPosition(); + rSpat.position = this.collider.transform.getPosition(); if (this.rollMegaSound != null) { var rmspat = this.rollMegaSound.getEffect(Spatialization); - rmspat.position = this.getAbsPos().getPosition(); + rmspat.position = this.collider.transform.getPosition(); } var sSpat = slipSound.getEffect(Spatialization); - sSpat.position = this.getAbsPos().getPosition(); + sSpat.position = this.collider.transform.getPosition(); var rollVel = bestContact != null ? this.velocity.sub(bestContact.velocity) : this.velocity; var scale = rollVel.length(); diff --git a/src/shaders/PQMaterial.hx b/src/shaders/PQMaterial.hx new file mode 100644 index 00000000..7c6e2145 --- /dev/null +++ b/src/shaders/PQMaterial.hx @@ -0,0 +1,79 @@ +package shaders; + +class PQMaterial extends hxsl.Shader { + static var SRC = { + @param var diffuseMap:Sampler2D; + @param var normalMap:Sampler2D; + @param var shininess:Float; + @param var specularMap:Sampler2D; + @param var ambientLight:Vec3; + @param var dirLight:Vec3; + @param var dirLightDir:Vec3; + @param var secondaryUVMapFactor:Float; + @global var camera:{ + var position:Vec3; + @var var dir:Vec3; + }; + @global var global:{ + @perObject var modelView:Mat4; + @perObject var modelViewInverse:Mat4; + }; + @input var input:{ + var normal:Vec3; + var tangent:Vec3; + var uv:Vec2; + }; + var calculatedUV:Vec2; + var pixelColor:Vec4; + var specColor:Vec3; + var specPower:Float; + var transformedPosition:Vec3; + var transformedNormal:Vec3; + @var var transformedTangent:Vec4; + function __init__vertex() { + transformedTangent = vec4(input.tangent * global.modelView.mat3(), input.tangent.dot(input.tangent) > 0.5 ? 1. : -1.); + } + function vertex() { + calculatedUV = input.uv; + } + function fragment() { + // Diffuse part + var diffuse = diffuseMap.get(calculatedUV); + + var n = transformedNormal; + var nf = normalMap.get(calculatedUV * secondaryUVMapFactor) * 2.0 - 1.0; + var tanX = transformedTangent.xyz.normalize(); + var tanY = n.cross(tanX) * transformedTangent.w; + transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize(); + + var cosTheta = clamp(dot(transformedNormal, -dirLightDir), 0, 1); + var effectiveSun = dirLight * cosTheta + ambientLight; + effectiveSun = vec3(clamp(effectiveSun.r, 0, 1), clamp(effectiveSun.g, 0, 1), clamp(effectiveSun.b, 0, 1)); + + var outCol = vec4(diffuse.rgb * effectiveSun.rgb, 1); + + var specularColor = specularMap.get(calculatedUV * secondaryUVMapFactor); + var eyeVec = (camera.position - transformedPosition).normalize(); + var halfAng = (eyeVec - dirLightDir).normalize(); + var specValue = saturate(transformedNormal.dot(halfAng)); + var specular = specularColor * pow(specValue, shininess); + + outCol.rgb += specular.rgb * dirLight; + outCol.a = 1; + + pixelColor = outCol; + } + } + + public function new(diffuse, normal, shininess, specularMap, ambientLight, dirLight, dirLightDir, secondaryFactor = 1.0) { + super(); + this.diffuseMap = diffuse; + this.normalMap = normal; + this.shininess = shininess; + this.specularMap = specularMap; + this.ambientLight = ambientLight.clone(); + this.dirLight = dirLight.clone(); + this.dirLightDir = dirLightDir.clone(); + this.secondaryUVMapFactor = secondaryFactor; + } +}