Meet TheXTech: a full working cross-platform port of SMBX engine [1.3.5.3]

Description: General discussion regarding the current engine development.
Moderators: Semi-moderatos, Moderators

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #1by Wohlstand » 14 Mar 2020, 16:18

Hello everybody!

Image


Did you see that I have done little work in my public repositories during February and at the start of March 2020? So, I did a lot of work which I am going to present for you all: it's a full C++ port of the original SMBX engine which now works on multiple platforms (tested on Linux, Windows, macOS, Haiku, and Android), and it does accurately represent original gameplay with the rest of features and bugs!


Some screenshots
Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

How I made it?
Since February 2, SMBX's original source code is now open. This fact gave me a lot of helpful material which will help me to make the Moondust Engine better and faster! However, dealing with the VB6 environment is not convenient, and at the same time, it's not stable on Linux (because of the graphical engine and risk of VB6 IDE's crash due to using external DLL libraries). So, to get it to work easier, I remembered my very old idea to port the whole SMBX code to C++. So, after a week of initial research, I began working. After a week and a half, I got a fully working (but buggy in some places) thing. Then, I spent time debugging it and making it usable by everyone. It's the full replica of SMBX 1.3 with the rest of its logical bugs (with some exceptions: I did fix several crash bugs that were a big annoyance while playing a game). It works on multiple platforms: it works on Windows both 32 and 64 bits, on Linux, on macOS, (also may work on Haiku and xBSD). Since version 1.3.5 has Android support!


Frequently Asking Questions
This paragraph contains a list of several questions you would to ask me, I'll give answers to most of them.
Frequently Asking Questions
What is this?
It's a port of an old VB6 engine, purely written in C++. It reproduces an old engine completely (except an Editor), includes lots of its logical bugs (crashy bugs where they were found and then fixed).


Why did you make it?
Why? I have several purposes for why I made it:
  • It's a very convenient life model for research I want to use in PGE Engine development.
  • To make it work without it being necessary to use Wine on non-Windows platforms and allow it to run on any other than x86 platforms.
  • To be able to optimize it to make it use fewer hardware resources than the original VB6-based build of a game.


You have PGE Engine, why you have spent over one month crafting this thing?
I need it for PGE Engine development directly, it's much easier to hack and inspect rather than deal with the old and inconvenient VB6 environment.


What's the future of Moondust Engine as TheXTech now exists?
I'll continue the development of the Moondust Engine as I still have to pass the second goal of the Moondust Project.
Since the foundation, Moondust Project had two goals: 1) save SMBX; 2) give a flexible toolkit for new platform games. Opening of SMBX sources and introducing TheXTech has solved the first goal: SMBX has been saved and now it's free and open-source cross-platform software. Moondust Engine will be used to pass the second goal - giving a toolkit for new games. Unlike TheXTech, Moondust Engine gives full flexibility that allows anyone to build something new from scratch without inheriting an old game base. However, TheXTech is needed for Moondust Engine as a working research model to develop a new engine. It will be similar to GZDoom and Chocolate Doom ports of the Doom game: GZDoom is a powerful and functional engine, the best choice of modders; a Chocolate Doom is an accurate port of the original game to a modern platform with a purpose to represent an original game including even bugs. The Moondust Engine intends to be like a GZDoom while TheXTech is an analog of Chocolate Doom to represent an original game on modern platforms.


Can LunaLua work on this?
No, LunaLua won't work: this project is binary-incompatible with LunaLua. This also means that SMBX2 content is incompatible.


How to use this?
Here are many ways to play games with it:
- there are some ready-for-use packages, just take and use as you did it with SMBX.
- [macOS users, skip this]: use by the same way as an original game: put an executable file into the game root folder with a "thextech.ini" that contains the next text:

Code: Select all

[Main]
force-portable = true

, music.ini, sounds.ini and additional "graphics/ui" folder. An important note: all default graphics must be converted into PNG, use the GIFs2PNG tool from PGE Project over your "graphics" folder with a "-d" switch. Don't use the "-r" switch to keep original GIFs together with new-made PNGs if you plan to continue the use of the original VB6-written SMBX.
- use it for debug mode: in your home directory, create the ".PGE_Project/thextech" folder (on macOS the "~/Library/Application Support/PGE Project/thextech") where you should put a full set of game resources and worlds stuff, this folder will work as a game root in the original game. This mode allows you to run an executable file from any folder location of your computer and use the same location of resources for all builds (except these are marked as portable by an INI file).


How to add custom episodes for the macOS version?
If you have a bundled build of TheXTech, all default resources are inside your .app: "Content/Resources/assets/". You can modify the content, but it's not recommended! Instead, after the first run of a game, in your home directory will appear the next directory:

Code: Select all

~/TheXTech Episodes

In this directory, you will find an empty "battle" and "worlds" folder to put your custom stuff. At the "~/Library/Application Support/PGE Project/thextech" path logs, settings, and game saves will be stored.
If you want to replace default assets with your own, you can modify the content of the app bundle or compile a new build by giving the necessary CMake arguments needed to pack your custom assets root and icon into the new bundle or make the assets-less build (if you give no arguments, the assets-less build will result). Therefore, you need to put the full content of the game root into the "~/Library/Application Support/PGE Project/thextech" folder, include default assets (graphics, music, sounds, intro and outro levels, default battle, and worlds folders).

How to develop episodes targeted to TheXTech?
This engine has full compatibility with almost all old episodes developed for SMBX 1.3 with some minor exceptions (if the certain level or episode do rely on the bug of the old game, you can add the "compat.ini" file at your level or episode to re-enable certain bugs which are required for level or episode to work normally).

You can use the same tools as you used to develop episodes for the original SMBX 1.3 (include the classic built-in editor of the old game). The engine doesn't include its own editor anymore, instead, you have two options to get the editor for this engine: do use the vanilla Editor and have all limits as SMBX 1.3, or do development in the modern Moondust Editor that will allow you to use brand-new features of the engine were inaccessible from the old editor.

You need to simply download the standalone Moondust (PGE Project) toolchain and take the latest "SMBX 1.3 Compatible" configuration package. Once you will start the PGE Editor, to get the direct level testing work, you should open (or create a new) any level file, open the Test->TheXTech menu, and choose the "Change path to TheXTech..." menu item. You should specify (or browse) the full path to the actual executable of the game, and press the Ok button. Once you set this properly, you can press the F5 key to start the level testing now.

You can save your level and world maps in LVLX and WLDX format, they are natively supported by TheXTech include the numerous unique features that came from Moondust and SMBX-38A standards, for example, the full ability to use the Z-Layer and Z-Offset, the warp enter the event, the custom "stars needed" message text, two-way warps, portal warps, vertical section wrap, support for more than 21 section, etc. On world maps, there are more than 5 credit lines available and the ability to set up the custom music file provided. The engine does the full support for PNG graphics and a lot of music and sound formats, customizable player hitbox calibration files (the same as for PGE Engine and SMBX2 being used).


What is different with this thing in comparison to the original VB6 build?
  • First off, it's written in C++ while original (as we already know) is written in VB6.
  • Doesn't have an Editor. Instead, in nearest future, it will have deep integration with PGE Editor that will allow to use it with the same functionality as in the original editor (the "magic hand" functionality was kept to allow real-time editing of the level while testing, it's needed to use IPC communication with PGE Editor to get the ability to use it better).
  • Full support of UTF-8 in filename paths and internal text data (original game had only 8bit ANSI support).
  • For graphics and controlling, it uses an SDL2 library while the original game has used WinAPI calls and GDI library.
  • It uses PGE-FL that has better file format support.
  • A support for WLDX world maps is allowing unlimited credits lines and custom music without it being necessary to use a music.ini for music replacements.
  • Some LVLX exclusive features now working: vertical section wrap, two-way warps, custom "star needed" message, warp enter the event, ability to disable stars printing in HUB episodes for specific doors, ability to disable interscene showing when going to another level through a warp.
  • Built-in support for the episode and level wide music.ini and sounds.ini to override default music and sound assets.
  • World maps now support a custom directory to store any specific resources like custom tiles/scenes/paths/levels and not spam the episode root folder with world map resources anymore.
  • Default config format is INI, old config.dat format is no longer supported, mainly because of incompatible key code values (SDL_Scancode versus VirtualKeys enum of Windows API).
  • Game saves now using the SAVX format instead of a classic SAV. However, if you already have an old game save, you still can resume your game by using a new engine now (the next gamesave attempt will result in a SAVX file, an old gamesave in SAV format will be kept untouched).
  • Built-in PNG support for custom and default graphics. Masked GIFs are still supported for backward compatibility, however, without making an unexpected auto-conversion as SMBX-38A does.
  • Checkpoints now have multi-points! You can use them in your levels multiple times without limits!
  • It does use a lazy-decompress algorithm to speed up the loading of a game and reduce memory usage.
  • For music and SFX, the MixerX library is used to give support for a wide amount of sound and music formats!
  • It doesn't embed any graphics: there are NO truly hardcoded graphics, everything is now represented by external graphics!
  • Some internal limits have been expanded.
  • Built-in GIF recorder by F11 key (F10 on macOS, F11 is reserved by system UI for a "show desktop" action)


How to build it?
You can read a guide on how to build this project from a source code which you can find here: https://github.com/Wohlstand/TheXTech/wiki/Building-the-game

To build it, you need to have the next things:
  • CMake
  • Ninja optionally (to speeds-up the build process)
  • Compatible C/C++ compiler (GCC, Clang, MSVC haven't been tested yet)
  • Git (required to pull submodules and clone source of dependent libraries to build them in place)
  • Mercurial (required to clone an official SDL2 repository to build it in place here)
  • Optionally: system-wide installed dependencies: SDL2, libFreeImageLite (a modded implementation of the FreeImage), MixerX sound library, AudioCodecs collection of libraries. Having them be installed in a system gives a major build speed up. However, it's possible to build all these dependencies in place here with the cost of extra build time being added.

The official TheXTech documentation
Image
- https://github.com/Wohlstand/TheXTech/wiki
Here you'll find a lot of guides and explanations for most of the TheXTech.


DOWNLOADS
Feel free to try it out in action now:
There are ready for use packages, equipped with original SMBX 1.3 assets and "The Invasion 2" episode.

Needed more episodes?
If you are looking for more episodes, please visit the archive of preserved SMBX episodes (You can browse these directories where episodes will be compatible: SMBX 1.3, SMBX 1.0 - 1.2, and TheXTech. All other directories will contain incompatible episodes that will not properly work, see details here).

Also, you can find some episodes at SMBX Episodes section of WohlSoft Forum, or browse the episodes sub-section at SMBX forum where you still can find any compatible episodes (which was originally targeted to SMBX 1.3).


Changes for 1.3.5.3
  • Fixed the vanilla crash: Attempting to freeze any Pokey segments when they have the "noiceball=0" option set will cause the out-of-range error with NPC-ID=-3 in a random moment. (https://github.com/Wohlstand/TheXTech/issues/220)
  • Changed the user directory location for macOS-built games into the "~/TheXTech Games/<bundle name without .app suffix>/" to avoid conflict between different games run on the same device.
  • Changed the debug assets location on macOS into "~/TheXTech Games/Debug Assets/" to simplify the debug environment installation.
  • Fixed BGO-65, Bowser III, and rail platforms compatibility with SMBX build version up to 30
  • Fixed the false positive that enables the Yoshi Mode of music when a player actually doesn't ride any Yoshi
  • Mario and Luigi will be only available at episodes built with SMBX older than build version 30 (the first version that introduces Peach, Toad, and Link)
  • Fixed the invalid vertical offset while drawing a playable character sprite
  • Resolved the old jittering problem when drawing a playable character while moving the camera (thanks to @ds-sloth for the fix)
  • Fixed the minor graphical distortion of a playable character that appears while flying up and down with a shoe.
  • The last played episode will be reminded and scrolled at the episode selection menu
  • Improved episodes menu control: added mouse wheel, page-up/page-down/home/end/delete, and left/right/alt-run/alt-jump/drop on controllers to scroll episodes lists
  • Fixed the vanilla bug: episodes list menu gets reset every attempt to go back from the character or the game save slot select menu
  • Fixed the soft-lock in an attempt to erase the gamesave using the two-player game menu
  • Order of episodes lists now alphabetical
  • Added the "compat.ini" option to require players to be on the ground to enter warps
  • On-screen elements such as HUD and other printing debug information will not shake with in-game happenings
  • Added screen fading effects at the world map and levels
  • Added support for different transition effects per every warp entry
  • Fixed the vanilla bug: The deadlock in the form of a looped message box showing will happen in the condition: the first NPC activates another NPC using recursive activation of all touching NPCs. And when the second NPC has an on-activation event trigger that hides its layer and shows a message box
  • Fixed the unexpected Wart's death sound spam

For Windows (XP/Vista/7/8/8.1/10+):
ImageImage
Downloads for Windows
- Download for 64-bit (modern platforms)
- Download for 32-bit (old platforms and 32-bit operating system installs)
- Download for ARM64 (for Windows-based tablets that use an ARM processor, or other compatible devices)
Note: To unpack 7z archives you need to use the 7-zip tool (it's free!). For ARM devices try this version of 7-zip.

For macOS (10.11 is minimal, if not works even on 10.11, report me please. The AppleSilicon version requires the macOS 11.0):
Image
Downloads for macOS
- Download DMG image, universal for both Intel and Apple Silicon
Note: because of macOS specifics, using the game here is different than other systems: after install, running a game,
and then, to add your custom episodes, look into your home directory and find the "TheXTech Episodes" folder, the "worlds" and "battle" inside is for your own stuff!
To replace default media, look inside the bundle and find the "Content/Resources/assets" folder!
Caution 1: bundle is unsigned, make sure you know how to deal with a Gatekeeper to make able to use this! On Catalina it may not start the first time after Gatekeeper's question, try to run the game again!
Caution 2: On Apple Silicon (M1) devices, you will need to run the xattr -rd com.apple.quarantine "Super Mario Bros. X.app" from your terminal at the applications directory to get the game work.

For Linux distros (x86_64 and i386):
ImageImage
Downloads for Linux
Portable archives
There are static portable builds that should work almost everywhere. If you run a different Linux distro than Ubuntu, you may use the Ubuntu 16.04 version for the game. The confirmed work on the Debian 10, on the OpenSUSE, on the Fedora, on the CentOS. Also, the game could work on ArchLinux and Monjaro. If all builds won't work on your distro, feel free to report to me and try to compile the game from the sources to get it to work on your side. Right now there are x86_64 and 32-bit x86 builds that were made, ARM wasn't built by the CI yet (probably I'll try to set up the CI to produce such builds).

Debian and Ubuntu-compatible packages
The game will be installed at system, default assets will appear at

Code: Select all

/usr/share/games/thextech/smb
x, and user directory for game saves, custom worlds, logs, screenshots will appear at

Code: Select all

~/.thextech-smbx
directory on the first launch.

AUR packages
There is an AUR package, maintained by YidaozhanYa. The game will be installed at system, default assets will appear at /usr/share/games/thextech-smbx, and user directory for game saves, custom worlds, logs, screenshots will appear at ~/.thextech-smbx directory.

Code: Select all

yay -Sua --batchinstall thextech-supermariobrosx



For Android:
Image
Downloads for Android
- Download for Android (Minimum version is 4.1)
Note: this is the plain runtime package that doesn't include any game assets. You should download the SMBX assets pack archive and unpack it into any convenient place. On the first run (or at the Settings), you should select the directory that contains your unpacked assets. That directory will serve the same as the SMBX game directory on the desktop versions. You can easily add more episodes to it by unpacking archives into the "worlds" directory in the same way as on desktop versions. At the Settings, you can switch between different game asset directories that allow you to play different games (such as "Adventures of Demo") by the same engine.

WebAssembly (Play game in the browser):
Image
Web version
- Play SMBX in the browser NOW! (Note, the game may work slow from some places like China, please ask people for any local mirrors, or get the self-hosted version below).
- Download the Self-hosted version of the game if you want to upload the game copy on your WEB-server and make the game get better availability.
Note: Adding custom episodes and replacing default music/sounds/graphics require you to build the game from the sources with giving of your assets directory. You can find the detailed manual on how to build the web version of the game here.

Plain desktop runtimes
ImageImageImage
There are packages that contain the runtime engine binary only. Use this to update your existing game without re-downloading game assets. Especially if you did your own remix of the assets and you don't want to re-remix them again.

Plain runtime downloads
Windows:
Image

Linux:
Image

macOS:
Image
This is the "Game template", the app bundle that contains no assets. You need to put the game assets into the "TheXTech.app/Content/Resources/assets" directory inside of the bundle, and then, edit "Content/Info.plist", and specify the value for the "CFBundeName" field to make it not be "Not named application" in the task manager.)



The full C++ source code repository:
Image
- https://github.com/Wohlstand/TheXTech

If you have any questions, problem reports, or suggestions, feel free to write to me!


Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #41by Wohlstand » 12 May 2020, 23:25

Olhi wrote:I found a bug on the Linux version that occurs when starting the Classics Collection version of The Great Empire 3:

https://streamable.com/x4iuoh
We had to discuss this and the fix in XMPP. I announcing that this problem has been completely resolved:
https://github.com/Wohlstand/TheXTech/commit/6edef830c0afa06f08ffa37007aa538e65883a82
All custom resources will be looked in a case insensitive manner even on a case-sensitive file system. This feature allows playing of even more episodes on non-Windows platforms without of problems of a case sensitivity crap in resources.

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #42by Olhi » 15 May 2020, 22:06

I made a test level to compare how checkpoints behave and learned that SMBX2 has three separate types:

npc-192, the midway gate from 1.3 which can only be included once.

npc-400, reusable midway gates whose activation will be tracked.

npc-430, reusable checkpoint flags that can be re-activated.

TheXTech includes only a npc-192, but changed it's behavior to be the same as SMBX2's npc-400. This creates the issue that it's impossible for a level with multiple checkpoints to be compatible with both engines. More than one npc-192 on SMBX2 will cause the Player to (in this example) respawn at the one closest to the exit, while npc-400 on TheXTech will turn into Goombas.

For the sake of consistency, I'd include a npc-400 in TheXTech and discourage the use of npc-192. Since the level would be incompatible with 1.3 either way, I don't think there's a disadvantage.
Attachments
npc400.lvl
(6.23 KiB) Downloaded 296 times
npc192.lvl
(6.23 KiB) Downloaded 301 times
TheXTech-SMBX2-Checkpoint-Test.png

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #43by Wohlstand » 17 May 2020, 1:43

TheXTech by default implements the SMBX64 standard with a small set of additions (I would call that as "SMBX64Ex").

Any items out of SMBX64 max type automatically turning into item-1 to prevent possible crashes. (SMBX 1.3 will just crash). NPC-400 is a 108+ out of range of SMBX64. "SMBX64Ex" means not adding more item types, but extending functionality of existing without of compatibility breackage.

When using old episodes, this doesn't matters because they all was built for old SMBX64 standard. XTech partially implements a PGE standard which intends to use LVLX/WLDX formats instead of classic LVL/WLD for using of new features.

Olhi wrote:npc-430, reusable checkpoint flags that can be re-activated.
I have an another idea to just add the special value that sets the mode of a check-point: by default, activates will be tracked, no re-appear on restart. Turning an option on will make this checkpoint re-appear back again. Adding ID-400 and ID-430 will mean extending the range of IDs which doesn't fit into SMBX64 standard:

P.S. There are already existing set of incompatible standards with different itemsets:
- SMBX-38A
- SMBX2
- recent NSMBX

The "conversion" between standards is possible by replacing IDs of items from one standard with IDs of items from the another. I.e. port episode from SMBX2 to SMBX-38A or opposite, will mean you need to replace all IDs of SMBX2 related items with IDs of SMBX-38A items. This is also may be lossy, because each standard has several exclusive item sets are not exist in other standards, OR, a different behaviour and setups also may distort desired behavior of the same item.

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #44by Olhi » 17 May 2020, 3:12

Wohlstand wrote:Any items out of SMBX64 max type automatically turning into item-1 to prevent possible crashes. (SMBX 1.3 will just crash). NPC-400 is a 108+ out of range of SMBX64. "SMBX64Ex" means not adding more item types, but extending functionality of existing without of compatibility breackage.

I see. If NPC's outside the range can be turned into item-1, wouldn't it be possible to have npc-400 turn into npc-192? That would solve the issue. Maybe SMBX2 could do the same in reverse. Turn npc-192 into npc-400.

Wohlstand wrote:I have an another idea to just add the special value that sets the mode of a check-point: by default, activates will be tracked, no re-appear on restart. Turning an option on will make this checkpoint re-appear back again. Adding ID-400 and ID-430 will mean extending the range of IDs which doesn't fit into SMBX64 standard:

I don't think npc-430 or it's function is needed in TheXTech. At least I'm not requesting it. I am merely speculating about how to deal with one seemingly minor incompatibility. The Checkpoint is the only one I'm aware of (in regards to TheXTech and SMBX2).

ListenFryderykChopin
ListenFryderykChopin

Editor

Post #45by ListenFryderykChopin » 5 Jun 2020, 22:28

Very cool and congratulations for this and I have problem. I can't find it. Is it included? :)
Last edited by ListenFryderykChopin on 5 Jun 2020, 22:49, edited 1 time in total.

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #46by Wohlstand » 5 Jun 2020, 22:46

P4VL0VSKEY wrote:Very cool and congratulations for this, because I have problem. I can't find it. Is it included?
All download links in the bottom of main post :acute:

ListenFryderykChopin
ListenFryderykChopin

Post #47by ListenFryderykChopin » 5 Jun 2020, 22:50

Wohlstand wrote:
P4VL0VSKEY wrote:Very cool and congratulations for this, because I have problem. I can't find it. Is it included?
All download links in the bottom of main post :acute:
Sorry and Thanks for help! :)

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #48by Olhi » 9 Jun 2020, 19:08

I found two bugs while playing Another Adventure:

Bubble Bug: https://i.imgur.com/jKcqsVb.mp4

AnotherAdventureBubbleBug.mp4
AnotherAdventureBubbleBug.mp4 (6.34 MiB) Viewed 385 times

Mirror Bug: https://i.imgur.com/bHbbopc.mp4

AnotherAdventureMirrorBug.mp4
AnotherAdventureMirrorBug.mp4 (4.56 MiB) Viewed 349 times

The Bubble Bug occurs on Linux-NSMBX, Linux-TheXTech and Wine-TheXTech, but not on SMBX2.

The Mirror Bug only happens on NSMBX.

Another thing I noticed: On my Linux build of TheXTech I can select every character, even though only Mario and Luigi should be available. On my NSMBX build and your executable from thextech-master archive, the others are blocked as intended.

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #49by Wohlstand » 10 Jun 2020, 11:34

Olhi wrote:Bubble Bug
Interesting thing... Gonna to check out the nature of this thing...

Olhi wrote:Mirror Bug
I should to post that in the necessary chat...

Added after 12 minutes 27 seconds:
Olhi wrote:Bubble Bug
He-he, it happens in SMBX-38A and PGE Engine too! :biggrin:
Should be here a problem in PGE-FL? Gonna to inspect...

Added after 4 minutes 10 seconds:
Anyway, this moment is still being inaccurate even in vanilla SMBX and SMBX2:
Снимок экрана_2020-06-10_11-48-48.png
Снимок экрана_2020-06-10_11-48-48.png (9.31 KiB) Viewed 15792 times

It graduately appears lefter than it was, and the reason why this "machine" is launching by an axe rather level-start because of inaccurate move inspected by an author of level. So, lemme try to make a better calibration of speeds with BPS feature I had to fix in Editor some time ago...

Added after 25 minutes:
Okay, I did an inspect and calibration, and I see that layer move system here had one extra move step that still being reproduced in vanilla SMBX, but gone from XTech and was never appeared in PGE Engine and SMBX-38A. The fact that my calibration thing I did in Editor, began to work correctly everywhere except of SMBX2 where it began to move uppier with every cycle.

popcade
Passerby
Passerby
popcade
Passerby
Passerby
Reputation: 0
Posts: 1
Joined: 10 Jun 2020

Post #50by popcade » 10 Jun 2020, 11:51

Hi,

I'm playing SMBX episodes since 2016, this is a big thing to me. Register the account here just to say this thing can be an full fledge game engine, very cool.

I have a issue with Logitech F710 games pad, when using 1.3.2, changing controls to game pad will soft lock the program, as it doesn't accept Keyboard then, but neither recognize the gamepad, I'm not sure is this the issue with my F710, OS(Win10), or program. As I know the F710 is XInput compatible and recognized as 360 pad in other games.

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #51by Wohlstand » 10 Jun 2020, 12:26

popcade wrote:I have a issue with Logitech F710 games pad, when using 1.3.2, changing controls to game pad will soft lock the program, as it doesn't accept Keyboard then, but neither recognize the gamepad, I'm not sure is this the issue with my F710, OS(Win10), or program. As I know the F710 is XInput compatible and recognized as 360 pad in other games.
Probably a small bug on SDL2 side, or a small mistake at me. I still have some task to polish the controllers support better (mainly allow mapping same action for multiple different keys, or, for example, to handle hat and axes together for a left/right/up/down commands, and some other things).

Added after 8 hours 11 minutes:
Olhi, buble bug has been fixed: https://github.com/Wohlstand/TheXTech/commit/a5e016b63fadaf6f2828cea321af7ef8722844af
The reason was an result of a rounding function that was giving a non-matching result. I had to re-implement a similar rounding function that works same as in VB6, then problem here is going away.

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #52by Olhi » 13 Jun 2020, 2:00

After noticing a visual bug in Yoshi's Archipelago's Mirage Manor, I learned that the Vanilla Engine makes sprites half-transparent when their m.gif is replaced by a White 1x1 Pixel. This is not taken into consideration by SMBX2, TheXTech and GIFs2PNG, which leads to the following result:

MirageManor.png


You can quickly confirm this for yourself by downloading my block-225m.gif and adding it to The Princess Cliche's Mario Pad.
Attachments
block-225m.gif.zip
(561 Bytes) Downloaded 260 times
MariosPadTransparent.png

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #53by Wohlstand » 13 Jun 2020, 2:25

Olhi wrote:I learned that the Vanilla Engine makes sprites half-transparent when their m.gif is replaced by a White 1x1 Pixel.
A very odd thing, and it wasn't used by GIFs2PNG algorithm that is used everywhere... Anyway, I think, I need to tune GIFs2PNG algorithm to make it work more accurate here. I see this trick a first time, and it looks being interesting and odd... Anyway, I know that the front is drawn by the "and" algorithm, and in result, it just mixed with a background, so, I have an idea how to proceed these pics when mask is smaller than a front...

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #54by Olhi » 14 Jun 2020, 2:07

Wohlstand wrote:GIFs2PNG algorithm: treat out-of-mask area as white pixels
✔️ Latest commit 0d94080 1 hour ago

Sprites will now look more transparent than on Vanilla.

Comparison.png


This creates some advantages and disadvantages:

ProCon.png


Personally I think this is fine and you can leave it as-is. :good:
___________________________________________________________________

EDIT: I found a new Bug on World 7 - Blazing Hot Inferno: https://i.imgur.com/5NQkDC0.mp4

World7BlazingHotInferno.png
World7BlazingHotInferno.png

It only occurs on my TheXTech build with the updated algorithm. On TheXTech 1.3.2, NSMBX and SMBX2 it works as intended.

EDIT 2: Here's the result for [a batch conversion with] GIFs2PNG from the updated PGE Lab Build: https://i.imgur.com/3uCMCth.mp4

World7-BHI- PGELab.png
World7-BHI- PGELab.png

EDIT 3: Only background2-30.gif is affected. It does not have a mask counterpart. When doing a single-file conversion with GIFs2PNG, the error does not occur.

EDIT 4: Another example: World 7 > Picante Pass > background2-24.gif. Here's the conversion, and here's the in-game result.

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #55by Wohlstand » 14 Jun 2020, 23:48

Olhi wrote:background glitch

That because of a silliness: the mask shouldn't be even used for background pictures which is a mistake, not related to algorithm itself. The bug didn't appeared because the mask algorithm wasn't shown this issue. Update of algorithm just now gave me a fact of REAL issue that wasn't fixed for a while - masks shouldn't be used ever for backgrounds. The true reason of this bug because a generic thing had a try to get the mask from a PNG background that was in a default stuff, which is a mistake.

Added after 1 minute 58 seconds:
What about GIFs2PNG, looks like I need to add an exception for all "background2-*" pictures and avoid any attempts to use masks for them.

Added after 8 minutes 57 seconds:
Fixed just now: https://github.com/Wohlstand/TheXTech/commit/8962b2977f336ff84f6cb4a5f779dbb684f439f3

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #56by Olhi » 28 Jun 2020, 19:35

I found a bug concerning Character Barriers in Luigi's Fight for the Mushroom Kingdom:

8-6 Restrained Volcano.gif
8-6 Restrained Volcano.gif

7-3 Poisonous Cave.gif
7-3 Poisonous Cave.gif

8-6 SMBX2.gif
8-6 SMBX2.gif

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #57by Wohlstand » 28 Jun 2020, 20:02

Olhi wrote:I found a bug concerning Character Barriers in Luigi's Fight for the Mushroom Kingdom:

It's a very old vanilla bug. Speaking about SMBX2, after making this fix, they had to provide the compatibility system to re-enable this bug again. Mainly because it's used in some tricky/kaizo levels and it's very important for them to work.

Added after 33 minutes 27 seconds:
btw, please use old LunaLua-SMBX for gameplay comparison:
http://wohlsoft.ru/LunaLua/_downloads/LunaLUA_0.7 ... ta_smbx13_sfx_mus_fullgame.zip
which is the same vanilla SMBX, but with minor technical side improvments and still work like vanilla SMBX by as-is.

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #58by Olhi » 28 Jun 2020, 22:19

Wohlstand wrote:Speaking about SMBX2, after making this fix, they had to provide the compatibility system to re-enable this bug again.

Oh, that's interesting. I didn't expect something like this to be the case.

Wohlstand wrote:btw, please use old LunaLua-SMBX for gameplay comparison:

Isn't stable for me sadly. No version based on LunaLua is, except for Beta 4. I'll have to use 1.3.0.1 with disabled sound. That seems to work fine.

Can you recommend a lightweight desktop recorder that's good for capturing a single window?

Wohlstand M
Topic author, Lead Developer
Lead Developer
Avatar
Wohlstand M
Topic author, Lead Developer
Lead Developer
Age: 30
Reputation: 474
Posts: 1719
Joined: 15 Feb 2014
Location: Moscow, Russia
Website Youtube channel URL Skype Tencent QQ

Post #59by Wohlstand » 28 Jun 2020, 22:25

Olhi wrote:Can you recommend a lightweight desktop recorder that's good for capturing a single window?
OBS Studio (Open Broadcasting Software), I use it for a while. Please configure it to record MKV videos.

Olhi
Contributor
Contributor
Avatar
Olhi
Contributor
Contributor
Reputation: 12
Posts: 39
Joined: 7 Apr 2020

Post #60by Olhi » 28 Jun 2020, 23:19

Wohlstand wrote:OBS Studio (Open Broadcasting Software), I use it for a while.

It's good for complicated set-ups, but too bloated for a simple window recording. I tried out a few others and vokoscreen looks like the best for the job. It's almost as convenient as the in-game recorder, and it supports mkv.


Return to “Engine Development”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest