diff --git a/data/ui/game/go.png b/data/ui/game/go.png index d5437aa9..373172b9 100644 Binary files a/data/ui/game/go.png and b/data/ui/game/go.png differ diff --git a/data/ui/game/numbers/0.png b/data/ui/game/numbers/0.png index ea95cd49..1341d069 100644 Binary files a/data/ui/game/numbers/0.png and b/data/ui/game/numbers/0.png differ diff --git a/data/ui/game/numbers/0_green.png b/data/ui/game/numbers/0_green.png new file mode 100644 index 00000000..4491beb5 Binary files /dev/null and b/data/ui/game/numbers/0_green.png differ diff --git a/data/ui/game/numbers/0_red.png b/data/ui/game/numbers/0_red.png new file mode 100644 index 00000000..41134589 Binary files /dev/null and b/data/ui/game/numbers/0_red.png differ diff --git a/data/ui/game/numbers/1.png b/data/ui/game/numbers/1.png index d4803afe..57fafe33 100644 Binary files a/data/ui/game/numbers/1.png and b/data/ui/game/numbers/1.png differ diff --git a/data/ui/game/numbers/1_green.png b/data/ui/game/numbers/1_green.png new file mode 100644 index 00000000..0777a387 Binary files /dev/null and b/data/ui/game/numbers/1_green.png differ diff --git a/data/ui/game/numbers/1_red.png b/data/ui/game/numbers/1_red.png new file mode 100644 index 00000000..7c39bb1e Binary files /dev/null and b/data/ui/game/numbers/1_red.png differ diff --git a/data/ui/game/numbers/2.png b/data/ui/game/numbers/2.png index c1811376..efcb6404 100644 Binary files a/data/ui/game/numbers/2.png and b/data/ui/game/numbers/2.png differ diff --git a/data/ui/game/numbers/2_green.png b/data/ui/game/numbers/2_green.png new file mode 100644 index 00000000..0995e5bf Binary files /dev/null and b/data/ui/game/numbers/2_green.png differ diff --git a/data/ui/game/numbers/2_red.png b/data/ui/game/numbers/2_red.png new file mode 100644 index 00000000..8c54cee3 Binary files /dev/null and b/data/ui/game/numbers/2_red.png differ diff --git a/data/ui/game/numbers/3.png b/data/ui/game/numbers/3.png index ae16e5a7..75cc6b9e 100644 Binary files a/data/ui/game/numbers/3.png and b/data/ui/game/numbers/3.png differ diff --git a/data/ui/game/numbers/3_green.png b/data/ui/game/numbers/3_green.png new file mode 100644 index 00000000..341e2f7d Binary files /dev/null and b/data/ui/game/numbers/3_green.png differ diff --git a/data/ui/game/numbers/3_red.png b/data/ui/game/numbers/3_red.png new file mode 100644 index 00000000..b1dbced0 Binary files /dev/null and b/data/ui/game/numbers/3_red.png differ diff --git a/data/ui/game/numbers/4.png b/data/ui/game/numbers/4.png index 521fa788..f56744b2 100644 Binary files a/data/ui/game/numbers/4.png and b/data/ui/game/numbers/4.png differ diff --git a/data/ui/game/numbers/4_green.png b/data/ui/game/numbers/4_green.png new file mode 100644 index 00000000..d8e32ab9 Binary files /dev/null and b/data/ui/game/numbers/4_green.png differ diff --git a/data/ui/game/numbers/4_red.png b/data/ui/game/numbers/4_red.png new file mode 100644 index 00000000..c4f39bdd Binary files /dev/null and b/data/ui/game/numbers/4_red.png differ diff --git a/data/ui/game/numbers/5.png b/data/ui/game/numbers/5.png index 9dda97f0..514e08af 100644 Binary files a/data/ui/game/numbers/5.png and b/data/ui/game/numbers/5.png differ diff --git a/data/ui/game/numbers/5_green.png b/data/ui/game/numbers/5_green.png new file mode 100644 index 00000000..3a6487d5 Binary files /dev/null and b/data/ui/game/numbers/5_green.png differ diff --git a/data/ui/game/numbers/5_red.png b/data/ui/game/numbers/5_red.png new file mode 100644 index 00000000..06184336 Binary files /dev/null and b/data/ui/game/numbers/5_red.png differ diff --git a/data/ui/game/numbers/6.png b/data/ui/game/numbers/6.png index a5749add..b5b10c70 100644 Binary files a/data/ui/game/numbers/6.png and b/data/ui/game/numbers/6.png differ diff --git a/data/ui/game/numbers/6_green.png b/data/ui/game/numbers/6_green.png new file mode 100644 index 00000000..6c64b078 Binary files /dev/null and b/data/ui/game/numbers/6_green.png differ diff --git a/data/ui/game/numbers/6_red.png b/data/ui/game/numbers/6_red.png new file mode 100644 index 00000000..200971b5 Binary files /dev/null and b/data/ui/game/numbers/6_red.png differ diff --git a/data/ui/game/numbers/7.png b/data/ui/game/numbers/7.png index 865e4e2c..87e0e53c 100644 Binary files a/data/ui/game/numbers/7.png and b/data/ui/game/numbers/7.png differ diff --git a/data/ui/game/numbers/7_green.png b/data/ui/game/numbers/7_green.png new file mode 100644 index 00000000..d086be06 Binary files /dev/null and b/data/ui/game/numbers/7_green.png differ diff --git a/data/ui/game/numbers/7_red.png b/data/ui/game/numbers/7_red.png new file mode 100644 index 00000000..d7a02add Binary files /dev/null and b/data/ui/game/numbers/7_red.png differ diff --git a/data/ui/game/numbers/8.png b/data/ui/game/numbers/8.png index 6a104903..13686274 100644 Binary files a/data/ui/game/numbers/8.png and b/data/ui/game/numbers/8.png differ diff --git a/data/ui/game/numbers/8_green.png b/data/ui/game/numbers/8_green.png new file mode 100644 index 00000000..7e74e994 Binary files /dev/null and b/data/ui/game/numbers/8_green.png differ diff --git a/data/ui/game/numbers/8_red.png b/data/ui/game/numbers/8_red.png new file mode 100644 index 00000000..df6f0982 Binary files /dev/null and b/data/ui/game/numbers/8_red.png differ diff --git a/data/ui/game/numbers/9.png b/data/ui/game/numbers/9.png index b05ae609..d6d848ad 100644 Binary files a/data/ui/game/numbers/9.png and b/data/ui/game/numbers/9.png differ diff --git a/data/ui/game/numbers/9_green.png b/data/ui/game/numbers/9_green.png new file mode 100644 index 00000000..d36d213a Binary files /dev/null and b/data/ui/game/numbers/9_green.png differ diff --git a/data/ui/game/numbers/9_red.png b/data/ui/game/numbers/9_red.png new file mode 100644 index 00000000..2b8cd942 Binary files /dev/null and b/data/ui/game/numbers/9_red.png differ diff --git a/data/ui/game/numbers/colon.png b/data/ui/game/numbers/colon.png index 9a1fa4b3..c6074e6f 100644 Binary files a/data/ui/game/numbers/colon.png and b/data/ui/game/numbers/colon.png differ diff --git a/data/ui/game/numbers/colon_green.png b/data/ui/game/numbers/colon_green.png new file mode 100644 index 00000000..b18ac81c Binary files /dev/null and b/data/ui/game/numbers/colon_green.png differ diff --git a/data/ui/game/numbers/colon_red.png b/data/ui/game/numbers/colon_red.png new file mode 100644 index 00000000..0ff9bc1b Binary files /dev/null and b/data/ui/game/numbers/colon_red.png differ diff --git a/data/ui/game/numbers/dash.png b/data/ui/game/numbers/dash.png index 616a47aa..15d15cd9 100644 Binary files a/data/ui/game/numbers/dash.png and b/data/ui/game/numbers/dash.png differ diff --git a/data/ui/game/numbers/point.png b/data/ui/game/numbers/point.png index d26202e9..1a9f844b 100644 Binary files a/data/ui/game/numbers/point.png and b/data/ui/game/numbers/point.png differ diff --git a/data/ui/game/numbers/point_green.png b/data/ui/game/numbers/point_green.png new file mode 100644 index 00000000..6d668fbd Binary files /dev/null and b/data/ui/game/numbers/point_green.png differ diff --git a/data/ui/game/numbers/point_red.png b/data/ui/game/numbers/point_red.png new file mode 100644 index 00000000..5789b28c Binary files /dev/null and b/data/ui/game/numbers/point_red.png differ diff --git a/data/ui/game/numbers/slash.png b/data/ui/game/numbers/slash.png index e9ad5a6c..24d0b557 100644 Binary files a/data/ui/game/numbers/slash.png and b/data/ui/game/numbers/slash.png differ diff --git a/data/ui/game/outofbounds.png b/data/ui/game/outofbounds.png index ff264f9c..7fc97a34 100644 Binary files a/data/ui/game/outofbounds.png and b/data/ui/game/outofbounds.png differ diff --git a/data/ui/game/powerup.png b/data/ui/game/powerup.png index cef3f8cc..22f9f877 100644 Binary files a/data/ui/game/powerup.png and b/data/ui/game/powerup.png differ diff --git a/data/ui/game/ready.png b/data/ui/game/ready.png index 0bb8f006..cb98e9e4 100644 Binary files a/data/ui/game/ready.png and b/data/ui/game/ready.png differ diff --git a/data/ui/game/set.png b/data/ui/game/set.png index 1de6df35..09a8d263 100644 Binary files a/data/ui/game/set.png and b/data/ui/game/set.png differ diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 38eae513..b8de9bd9 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -100,6 +100,8 @@ class MarbleWorld extends Scheduler { var endPadElement:MissionElementStaticShape; var endPad:EndPad; + var skyElement:MissionElementSky; + public var scene:Scene; public var scene2d:h2d.Scene; public var mission:Mission; @@ -172,7 +174,8 @@ class MarbleWorld extends Scheduler { MissionElementType.Item, MissionElementType.PathedInterior, MissionElementType.StaticShape, - MissionElementType.TSStatic + MissionElementType.TSStatic, + MissionElementType.Sky ].contains(element._type)) { // this.loadingState.total++; @@ -182,6 +185,10 @@ class MarbleWorld extends Scheduler { if (so.datablock.toLowerCase() == 'endpad') this.endPadElement = so; } + + if (element._type == Sky) { + this.skyElement = cast element; + } } else if (element._type == MissionElementType.SimGroup) { scanMission(cast element); } @@ -220,8 +227,6 @@ class MarbleWorld extends Scheduler { this.instanceManager = new InstanceManager(scene); this.particleManager = new ParticleManager(cast this); - // var skyElement:MissionElementSky = cast this.mission.root.elements.filter((element) -> element._type == MissionElementType.Sky)[0]; - var worker = new ResourceLoaderWorker(() -> { var renderer = cast(this.scene.renderer, h3d.scene.fwd.Renderer); @@ -269,7 +274,7 @@ class MarbleWorld extends Scheduler { this.sky = new Sky(); - sky.dmlPath = "data/skies/sky_day.dml"; + sky.dmlPath = ResourceLoader.getProperFilepath(skyElement.materiallist); worker.addTask(fwd -> sky.init(cast this, fwd)); worker.addTask(fwd -> { @@ -728,6 +733,7 @@ class MarbleWorld extends Scheduler { } else if (element.datablock == "HelpTrigger") { trigger = new HelpTrigger(element, cast this); } else { + onFinish(); return; } trigger.init(() -> { @@ -746,7 +752,8 @@ class MarbleWorld extends Scheduler { var tsShape = new DtsObject(); tsShape.useInstancing = true; - tsShape.dtsPath = shapeName.substring(index + 'data/'.length); + tsShape.dtsPath = 'data/' + shapeName.substring(index + 'data/'.length); + tsShape.identifier = shapeName; var shapePosition = MisParser.parseVector3(element.position); shapePosition.x = -shapePosition.x; diff --git a/src/Mission.hx b/src/Mission.hx index a77d6ecc..e529d05c 100644 --- a/src/Mission.hx +++ b/src/Mission.hx @@ -95,15 +95,26 @@ class Mission { } public function getDifPath(rawElementPath:String) { + if (StringTools.contains(rawElementPath, "$usermods")) { + rawElementPath = rawElementPath.split("@").slice(1).map(x -> { + var a = StringTools.trim(x); + a = a.substr(1, a.length - 2); + return a; + }).join(''); + } + var fname = rawElementPath.substring(rawElementPath.lastIndexOf('/') + 1); rawElementPath = rawElementPath.toLowerCase(); var path = StringTools.replace(rawElementPath.substring(rawElementPath.indexOf('data/')), "\"", ""); if (StringTools.contains(path, 'interiors_mbg/')) path = StringTools.replace(path, 'interiors_mbg/', 'interiors/'); + var dirpath = path.substring(0, path.lastIndexOf('/') + 1); #if (js || android) path = StringTools.replace(path, "data/", ""); #end if (ResourceLoader.fileSystem.exists(path)) return path; + if (ResourceLoader.fileSystem.exists(dirpath + fname)) + return dirpath + fname; return ""; } } diff --git a/src/ResourceLoader.hx b/src/ResourceLoader.hx index 38bac305..f538fae8 100644 --- a/src/ResourceLoader.hx +++ b/src/ResourceLoader.hx @@ -17,10 +17,11 @@ import hxd.fs.FileSystem; import hxd.res.Loader; import src.Resource; import src.ResourceLoaderWorker; +import fs.TorqueFileSystem; class ResourceLoader { #if (hl && !android) - public static var fileSystem:FileSystem = new LocalFileSystem(".", null); + public static var fileSystem:FileSystem = new TorqueFileSystem(".", null); #end #if (js || android) public static var fileSystem:FileSystem = null; @@ -203,6 +204,23 @@ class ResourceLoader { worker.run(); } + public static function getProperFilepath(rawElementPath:String) { + var fname = rawElementPath.substring(rawElementPath.lastIndexOf('/') + 1); + rawElementPath = rawElementPath.toLowerCase(); + var path = StringTools.replace(rawElementPath.substring(rawElementPath.indexOf('data/')), "\"", ""); + if (StringTools.contains(path, 'interiors_mbg/')) + path = StringTools.replace(path, 'interiors_mbg/', 'interiors/'); + var dirpath = path.substring(0, path.lastIndexOf('/') + 1); + #if (js || android) + path = StringTools.replace(path, "data/", ""); + #end + if (ResourceLoader.fileSystem.exists(path)) + return path; + if (ResourceLoader.fileSystem.exists(dirpath + fname)) + return dirpath + fname; + return ""; + } + public static function load(path:String) { #if hl if (!StringTools.startsWith(path, "data/")) @@ -232,9 +250,7 @@ class ResourceLoader { } public static function loadDts(path:String) { - #if (js || android) - path = StringTools.replace(path, "data/", ""); - #end + path = getProperFilepath(path); if (dtsResources.exists(path)) return dtsResources.get(path); else { diff --git a/src/fs/TorqueFileSystem.hx b/src/fs/TorqueFileSystem.hx new file mode 100644 index 00000000..215cc53c --- /dev/null +++ b/src/fs/TorqueFileSystem.hx @@ -0,0 +1,47 @@ +package fs; + +import hxd.fs.LocalFileSystem; + +class TorqueFileSystem extends LocalFileSystem { + override function checkPath(path:String) { + // make sure the file is loaded with correct case ! + var baseDir = new haxe.io.Path(path).dir; + var c = directoryCache.get(baseDir.toLowerCase()); + var isNew = false; + if (c == null) { + isNew = true; + c = new Map(); + for (f in try sys.FileSystem.readDirectory(baseDir) catch (e:Dynamic) []) + c.set(f.toLowerCase(), true); + directoryCache.set(baseDir.toLowerCase(), c); + } + if (!c.exists(path.substr(baseDir.length + 1).toLowerCase())) { + // added since then? + if (!isNew) { + directoryCache.remove(baseDir.toLowerCase()); + return checkPath(path); + } + return false; + } + return true; + } + + override function open(path:String, check = true) { + var r = fileCache.get(path.toLowerCase()); + if (r != null) + return r.r; + var e = null; + var f = sys.FileSystem.fullPath(baseDir + path); + if (f == null) + return null; + f = f.split("\\").join("/"); + if (!check || (sys.FileSystem.exists(f) && checkPath(f))) { + e = new LocalEntry(this, path.split("/").pop(), path, f); + convert.run(e); + if (e.file == null) + e = null; + } + fileCache.set(path.toLowerCase(), {r: e}); + return e; + } +}