diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..4326b1fa --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,48 @@ +# 1.3.3 +This update addresses the following issues: +- FOV is now based on horizontal FOV instead of vertical, matching with- original MB. +- Fixed the marble getting stuck in the corners. +- Fixed black screen on opening the game for the first time on MacOS + +# 1.3.2 +This is the first build of MBHaxe Platinum that has Mac support. +- MBU interior shaders now match more closely to those of MBU in Xbox. +- Added Console for debug purposes. Press Tilde ~ to bring it up. +- Added replay browser for native. +- Reduced lag caused by end pad. +- Fixed inactive button hover sounds. +- Fixed OOB animation timings. +- Added HighDPI/Retina support. +- Fixed the color bugs regarding text input. +- Minor graphical changes to match original. +- Minor performance and physics improvements. +- Fixed tornado rendering. + +# 1.3.1 +This release fixes a lot of bugs that were reported and adds in minor improvements: +- Fixed Pad animations not working +- Fixed bugs relating to powerup pickup on respawn. +- Fixed marble not using the hitbox of the rotated hitbox for item pickups. +- Marble finish animation now matches more closely with the original. +- Fixed camera keys not working. +- Added keyboard shortcuts to certain buttons on certain dialog boxes. +- Timer now becomes green on finishing, to match original. +- Fixed double click sound on selecting level category. +- Hypercube now uses MBG gameplay logic. +- Added Time Travel Bonus messages to HUD. +- Fixed lag caused by GJK/Startpad/Endpad. +- Fixed being able to press the end game buttons while typing the name. The- input box will be focused. +- Fixed option sliders not updating values + +# 1.3.0 +- Added Marble Blast Ultra levels as per Platinum. +- Added Ultra Marbles as per Platinum and their shaders. +- Added shaders for Ultra levels closely matching original MBU. (This may- lag mobile devices) +- Fixed lot of marble physics bugs, they should now be smoother. +- Minor performance improvements. +- Added restart button to touch controls. + +# 1.2.0 +- Implemented most Marble Blast Platinum 1.7.42 (except Ultra) +- Marble reflections +- Optimized resource loading and performance diff --git a/data/ui/menu/changelog_d.png b/data/ui/menu/changelog_d.png new file mode 100644 index 00000000..c93f54d2 Binary files /dev/null and b/data/ui/menu/changelog_d.png differ diff --git a/data/ui/menu/changelog_h.png b/data/ui/menu/changelog_h.png new file mode 100644 index 00000000..208f70b7 Binary files /dev/null and b/data/ui/menu/changelog_h.png differ diff --git a/data/ui/menu/changelog_n.png b/data/ui/menu/changelog_n.png new file mode 100644 index 00000000..2c2d9912 Binary files /dev/null and b/data/ui/menu/changelog_n.png differ diff --git a/src/gui/MainMenuGui.hx b/src/gui/MainMenuGui.hx index 4cd36cb4..5e22cf38 100644 --- a/src/gui/MainMenuGui.hx +++ b/src/gui/MainMenuGui.hx @@ -50,14 +50,23 @@ class MainMenuGui extends GuiImage { siteButton.vertSizing = Top; siteButton.position = new Vector(363, 664); siteButton.extent = new Vector(400, 30); - siteButton.pressedAction = (sender) -> {} + siteButton.pressedAction = (sender) -> { + #if sys + hxd.System.openURL("https://marbleblast.com"); + #end + #if js + #end + } mainMenuContent.addChild(siteButton); - var motdButton = new GuiImage(ResourceLoader.getResource('data/ui/menu/totd_i.png', ResourceLoader.getImage, this.imageResources).toTile()); + var motdButton = new GuiButton(loadButtonImages('data/ui/menu/changelog')); motdButton.horizSizing = Left; motdButton.vertSizing = Top; motdButton.position = new Vector(706, 536); motdButton.extent = new Vector(191, 141); + motdButton.pressedAction = (sender) -> { + MarbleGame.canvas.pushDialog(new VersionGui()); + } mainMenuContent.addChild(motdButton); var playButton = new GuiButton(loadButtonImages("data/ui/menu/play")); diff --git a/src/gui/VersionGui.hx b/src/gui/VersionGui.hx new file mode 100644 index 00000000..b31e4261 --- /dev/null +++ b/src/gui/VersionGui.hx @@ -0,0 +1,85 @@ +package gui; + +import src.MarbleGame; +import hxd.res.BitmapFont; +import h3d.Vector; +import src.ResourceLoader; +import src.Settings; + +class VersionGui extends GuiImage { + public function new() { + var img = ResourceLoader.getImage("data/ui/motd/messagewindow.png"); + super(img.resource.toTile()); + this.horizSizing = Center; + this.vertSizing = Center; + this.position = new Vector(4, 12); + this.extent = new Vector(631, 455); + + function loadButtonImages(path:String) { + var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile(); + var hover = ResourceLoader.getResource('${path}_h.png', ResourceLoader.getImage, this.imageResources).toTile(); + var pressed = ResourceLoader.getResource('${path}_d.png', ResourceLoader.getImage, this.imageResources).toTile(); + return [normal, hover, pressed]; + } + + var noButton = new GuiButton(loadButtonImages("data/ui/loading/cancel")); + noButton.position = new Vector(400, 370); + noButton.extent = new Vector(88, 41); + noButton.vertSizing = Top; + noButton.accelerator = hxd.Key.ESCAPE; + noButton.gamepadAccelerator = ["B"]; + noButton.pressedAction = (sender) -> { + MarbleGame.canvas.popDialog(this); + } + this.addChild(noButton); + + var dlButton = new GuiButton(loadButtonImages("data/ui/motd/ok")); + dlButton.position = new Vector(500, 370); + dlButton.extent = new Vector(88, 41); + dlButton.vertSizing = Top; + dlButton.pressedAction = (sender) -> { + MarbleGame.canvas.popDialog(this); + } + this.addChild(dlButton); + + var scrollCtrl = new GuiScrollCtrl(ResourceLoader.getResource("data/ui/common/philscroll.png", ResourceLoader.getImage, this.imageResources).toTile()); + scrollCtrl.position = new Vector(31, 10); + scrollCtrl.extent = new Vector(568, 337); + this.addChild(scrollCtrl); + + var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt"); + var arial14b = new BitmapFont(arial14fontdata.entry); + @:privateAccess arial14b.loader = ResourceLoader.loader; + var arial14 = arial14b.toSdfFont(cast 14 * Settings.uiScale, MultiChannel); + + var markerFelt32fontdata = ResourceLoader.getFileEntry("data/font/MarkerFelt.fnt"); + var markerFelt32b = new BitmapFont(markerFelt32fontdata.entry); + @:privateAccess markerFelt32b.loader = ResourceLoader.loader; + var markerFelt32 = markerFelt32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel); + var markerFelt24 = markerFelt32b.toSdfFont(cast 18 * Settings.uiScale, MultiChannel); + var markerFelt18 = markerFelt32b.toSdfFont(cast 14 * Settings.uiScale, MultiChannel); + + function mlFontLoader(text:String) { + switch (text) { + case "MarkerFelt32": + return markerFelt32; + case "MarkerFelt24": + return markerFelt24; + case "MarkerFelt18": + return markerFelt18; + case "Arial16": + return arial14; + default: + return null; + } + } + + var changelogContent = new GuiMLText(arial14, mlFontLoader); + changelogContent.position = new Vector(0, 20); + changelogContent.extent = new Vector(566, 81); + changelogContent.text.textColor = 0; + changelogContent.scrollable = true; + changelogContent.text.text = "CHNAGELOG"; + scrollCtrl.addChild(changelogContent); + } +}