Look what Alex found while treasure hunting: A new version of EasyRPG Player! (Animation by @Lord_Schoko, thanks!)
Here we go again. The forced home office gave us some time to do the final polishing and testing for the next minor release of EasyRPG Player. As promised it contains many accuracy improvements for the interpreter and move routes. Most games should work now (if they don’t use any patching, DynRPG, etc.).
Unfortunately we were not able to work a lot on the RPG Maker 2003 battle system: Many features are still buggy/unimplemented and you have to wait for another release. But the interpreter part should be fully working – Most limitations are visual.
RPG Maker 2000 has been released 20 years ago this month. And here we are, letting you run its games and saving its legacy for the future.
Get it from the Download page (or the Android Play Store), enjoy some RPG Maker games and #StayAtHome. :)
Crash fixes
Empty shops don’t crash any more. (#1844)
Fixed crashes when starting a battle in Home. When a battle event does an animation as the first command, which also triggers a flash effect on the first frame, the game crashed. (#1929, #1933)
Known regressions in this release
When a message with a face is shown there will be a short 1-frame flicker of the face when a new page is displayed. This is resolved as a part of another huge message code rewrite which we didn’t want to add to this release as it needs more testing.
Regressions fixed
Here you will find games that worked in older versions of the Player but were broken in newer releases of the Player.
Pictures disappeared after a flash effect when they had an alpha channel / transparency. (#1575)
Battlers with Battle Animations (RPG Maker 2003 only) were not displayed until they made an action. This affected Captain Novolin RPG and Vampires Dawn 2. (#1826)
The RPG Maker 2000 battle crashed when self destruct was used. (#1880)
The tilemap renderer optimisation invented for the 3DS was not handling a few edge cases resulting in black tiles being rendered: Lower layer tiles can be in some cases above Upper tiles (when they are tiles with star attribute). Most of the optimisations were disabled, in favour of correct rendering. Fixes the intro of Cumbound – The War against Gayass. (#1577, #1857, #1898)
A previous patch disabled resetting of text colour after a line break which is correct for messages but this broke the rendering of the Stay option in Inns when not having enough money. (#1904)
Performance
Because the compatibility of the Player is really good by now, we can focus on performance improvisations.
Much faster (2-3x) database parsing. Games load now much faster. This is a liblcf (our parser library) optimisation but this is so significant that we mention it here because it affects the Player. (liblcf#343)
This Player release received many significant performance improvements that speed up the start-up, the interpreter and the renderer. Furthermore the FPS handling was refined and recovers better from lag spikes. (#1780)
Common events are not reinitialized any more when they completed – Instead their index is only reset to 0 making common event restarts a very cheap and fast operation in common event heavy games. (#1764) A similar optimisation is available for Parallel processes. (#1884)
Faster text processing and rendering. (#1956, #1964)
The Player supports various pixel formats. Moving the most common formats (RGBA) to the start of the list gives a minor speedup in every drawing operation. (#1959)
Faster handling of Drawables (our abstraction for everything you see on the screen). (#1975)
Much faster reading of Switches/Variables and faster range operations. Single writes could not be optimized further. (#1984)
Slightly faster rendering and Flip blit is now noticeable faster (but flip is only used by the FaceSet, therefore not noticeable in real workloads). (#1990)
Optimized weather rendering. (#1991)
Optimized cache lookup. (#1993)
Intel VTune, a performance and gpu rendering profiler, is now supported. (#2021) Additionally benchmark programs such as #1987 were added that allow the detection of performance regressions easily.
The FPS logic was refactored and runs now much smoother in low FPS situations. Long freezes at 0 FPS are completely gone now. Additionally the FPS are not locked to 60 FPS any more, they can be changed to any arbitrary value or sync to the refresh rate of your display. (#2017)
Optimized tilemap rendering. (#2028)
Some math (e.g. square root) operations run now slightly faster because the compiler flags were tuned. (#2139)
Audio
When switching the audio source (e.g. from speaker to headphone) the audio playback stopped. This was a SDL2 bug fixed in a later release. (#1596)
Lime’s minigame in Witch’s Heart does not lag any more. To reduce slow disc reads sound effects were completely decoded, resampled and cached when being played for the first time. The problem here was that the SE file played is very long – Decoding it took 100 ms. Now the Player only decodes on load and resamples in the audio thread – The file loads now in 7 ms. (#1833, #2086)
The Forest World Music continued playing when returning to the Nexus in Yume Nikki. (#1874)
Playing Opus audio (not natively supported by RPG_RT, needs a custom patch) does not crash any more on Intel Celeron and Intel Pentium processors. The library was compiled with features (instruction set AVX) not supported on these CPUs. (#2059)
Event/Interpreter (#1707)
The accuracy of the interpreter was significantly improved resolving many bugs that were caused by minor timing issues. (#1707, #1871)
The interpreter state is now properly preserved in and restored from savegames. Before it was possible that the interpreter skipped a command after loading. (#757, #1740, #1742)
CommandChangeClass is now fully supported. RPG_RT has multiple bugs that we fixed: (#759)
- Unsetting the class combined with “Set level to 1” crashes with “Invalid Job specified”
- When the target class is the same with “Learn skills” enabled RPG_RT forgets to learn the skills available at level 1
The Change Tileset command was not updating the tileset of events. Fixes the look of the time gauge in the final battle of Seraphic Blue. (#1060)
Calling multiple scenes on the same frame has now the correct behaviour, e.g. a battle start will cancel a pending menu call. (#1642)
Death handlers are now supported in the RPG Maker 2003 battle system. (#1648)
The black screen after the Amusement Park Clown Hell Event and other events that force a wakeup in Yume2kki (ゆめ2っき) is fixed. (#1777)
Maybe you remember the obscure feature of Set Vehicle Location discussed in previous blog posts: You can do instant teleports, even across maps, when the vehicle ID -1 is used. By now we emulated this via a normal teleport but this was not enough for Yume2kki (ゆめ2っき): It needed a better emulation and this better emulation fixed many bugs (actually all we know about in this but feel free to find new ones). (#1782, #1861, #1862, #2043)
- The music room failed with “Unknown Event 10005” (#1778). Contrary to normal teleports, vehicle teleports don’t reset the event IDs. This means that This Event references were expected to still work.
- You can now save tracks as favourites. This was broken before because the game does a Vehicle Teleport to the main room and immediately teleports back. Before the Player incorrectly executed a clean up auto-start event. (#1864)
- The second music room you can enter from the first room works now. (#2049)
- The wallpaper selection was almost unusable because it auto-selected the first item automatically. (#1641)
Vehicle teleports from parallel events are now forbidden – In RPG_RT they fail with an error message. (#1877)
If both a common event and a map event are auto-start and can
run on the current frame, RPG_RT will push both of them onto
the stack and execute the interpreter. This is very similar to
as if the common event called the map event. (#1779)
Lufia V: For the Savior soft locked during the intro. (#1840)
Modifiers for ATK/DEF/etc. are now clamped correctly. Fixes distributing EXP in the Inn of Three Magic Girl (TMG). (#1865) Content warning: Hentai. The video was censored by us.
Fixed black screen after selecting Jehridan on the world map in Dhux’s Scar. (transition bug, #1913)
CommandStoreEventID always returns the highest ID – even when the event was deleted. (#1915)
Correct timing for waits during screen pan operations. (#1932)
The transparency option of Change Actor Graphic is now supported. (#2030)
Labels: Event/Interpreter, Patch available
Fix hang in 月藍傳奇2 after walking through a secret door. (#2038)
The key input in the scene selection of ケツアクメ120連発 ケツアヘ傑作選 (2012紅白No.016) was not working: The game is a RPG2k Value! game but the Key Input Processing command looked like a RPG2k3 command. Because 2k and 2k3 have incompatible Key Input Processing commands this failed. 2k3 key inputs are unsupported by 2k and were disabled for this engine. (#2126)
Fixed the key input in the “Improve” menu of Saint Seiya Densetsu. This is another type of strange Key Input Processing behaviour: The command was not processed like RPG2k3 <1.05 command but like as RPG2k Value! command. All strange edge cases of this command are now fully supported. This game also breaks the size record: The former leader was Äedemphia with 1.2 GB, this game has 1.6 GB. (#2140)
Setting the sail in Still Mate does not soft lock any more. Here we discovered a bug in the Change Variable event command, it is surprising that a bug in such a commonly known command went unnoticed for years: When a variable range is the target of the operation the result of the operation must be reevaluated for each element. This game generated random numbers through this command and waited until the numbers were different. Because our implementation only picked one random number and assigned it to all elements in the range this check failed forever. (#2155)
In 進めアレックス a treasure chest, that is actually a vehicle, appeared when fighting an enemy. We don’t know about the purpose of the vehicle but we found a bug in RPG Maker 2000: Events always have a Map ID of 0. This game stored location of the attacked monster and applied it to the vehicle. Because the map ID is 0 the vehicle should never appear on the map. (#2156)
Time Traveler continues at the end of chapter 6 when playing the piano. When and how this was fixed is unknown. But who cares, it is fixed :).
Move Routes
In Mondschein the kid will not run away from the mother any more (move speed too high). As with many resolved issues that is related to when events update depending on how a teleport was invoked. (#1261)
The soft lock in the dancing scene of Killer Bear is resolved. Repeating move routes were not properly marked as finished when the last move command was a non-move command such as Turn. (#1853)
Fixes for jumping:
- Turn commands are now ignored while jumping. (#1936)
- The height of the jump does not affect the sprite rendering order (#1937) or the position of battle animations any more. (#1938)
Battle
We planned to fix all the known bugs in the RPG Maker 2003 battle but we found no time for it. Sorry :(.
Battle animation can now shake the screen in RPG Maker 2003. (#1767)
Pictures and Weather are now fully supported in battle scenes (#1488, #2003). The picture support was the final step to fully supporting RPG Maker 2003 v1.12. (#1263)
The battle in DQ2 悪霊の勇者・製品版 didn’t end after defeating the Bomb Rock (#1875)
The Boss battle in Eternal Legends ended after the 1st phase. (#1998)
Correct interaction of battle end conditions with running events: RPG Maker 2000 finishes the current event, RPG Maker 2003 stops execution immediately. (#2001)
In すでに私たちは地獄のまっただ中でした hidden enemies were hit by attacks that target the entire party. This affected any game that used hidden enemies. (#2102)
Defend and Charge are now properly reset. Before they stayed persistent for the entire battle or when the action was cancelled. (#2107)
When party members were added or removed by an event during the battle turn the attack order is now correct. (#2123)
Savegames
Loading RPG_RT savegames sometimes resulted in a screen shake. This was caused by an incorrect interpretation of the shake continuous flag: The relevant one is actually shake time left that is initialized to 65336. This means a continuous shake ends after 18.2 seconds. (#1668)
Support for a bug to detect savegame loading via the Key Input Processing event command. This bug works by using a variable >255 as the target variable for Time until key input and saving the game. When saving, the field for storing this variable is too small causing an integer overflow. By checking whether the new variable reached via overflow is set to 0 after loading, the game can determine whether it was just loaded. (#1674)
RPG_RT compatible handling of Game System chunks. (#1842)
The title image was sometimes lost when resetting with F12. We are still aware of issues concerning incomplete clean-up. When you encounter issues after starting a new game simply restart the Player as a workaround. (#2023)
The Save window failed to render when party members had no face graphic (#2034)
RPG_RT compatible transition chunk values. (#2054)
RPG_RT compatible escape/teleport target values. (#2056)
When the savegame had a different system graphic than the title screen the new system graphic was already visible for a short moment while fading out from the load scene. (#2111)
Messages
In Ahriman’s Prophecy the text overlapped with the face graphic after a teleport. (#1781)
The text rendering in shops is now correct when a face is displayed. (#1844)
Improved message and window animation timings. (#1900)
Some choices were incorrectly displayed in Yume2kki (ゆめ2っき). (#2048)
Window/Scenes
The shop scene rendered Charsets incorrectly when the image file had non-default dimensions. (#1315)
The debug scene learned how to call common events. (#1832)
Control characters like newlines in messages are not processed anymore. They caused incorrect text rendering. They can be inserted by game developers by accident through copy-paste from a text editor. (#1873)
The Gold Window ignored message opacity settings. (#1908)
When a japanese game is executed the equipment scene shows a different arrow to match RPG_RT better. (#1918)
The fade delay for New Game / Load Game / Back to Title matches now RPG_RT. (#1939)
Pressing F12 will display a countdown before returning to the title screen. This solves issues in applications such as Steam that bind screenshots to F12. (#2010)
Scrollable windows display now animated up/down arrows. (#2109)
FileFinder
The Official “Traditional Chinese” RTP is now supported. (#1888)
Symbolic links are now valid project paths on Linux. (#1906)
The RTP search on Linux follows now the XDG standard. (#1924)
Faster start-up on Linux when Wine is installed and the registry scanned for RTPs. (#1916)
The RTP path contained trailing “/” which broke RTP loading on some platforms. (#2064)
The detection whether the operating system exposes the file type directly when enumerating directories was improved (initial start-up on macOS and BSD is now faster). (#2065)
Pictures (#1703)
Spritesheets use now a subimage of the original picture. This saves memory and is much faster because no copying is needed any more. This sounds like an obvious optimisation but the blocker was that other parts of the picture became visible before while rotating. (#1093)
Pictures are now updated before events. (#1125)
Pictures stop moving now while a message is visible except on RPG Maker 2003 English where non-blocking is the default. It is possible that this breaks games patched with the UnlockPicPatch. (#1168)
Support for the “affected by flash” picture setting. (#1362)
Pictures are correctly loaded from savegames. (#1582)
In Destined the boss picture moved upwards when damaged. This is solved by emulating a picture bug in old engine versions: Move Picture is ignored when the picture is fixed to the map. (#1741, #1969)
Use correct flash color. (#1944)
Picture wave effect is more accurate. (#1946, #1949)
The outdated bitmap format used by Aëdemphia is now supported. (#2016)
Weather
Sandstorm and Fog are now looking perfect. As you can see from all the linked issues this was a huge effort and the math behind it is worth another blog post. (#1737, #1945, #1992, #2011, #2114)
More accurate Rain and Snow effects. (#2005, #2069)
Transitions (#1715)
ShowScreen-Transitions are ignored when the screen is already visible. Instant transitions are now really instant. (#1600, #1931)
In RPG_RT transitions will execute in-place (code wise they execute a loop that will return when the transition is finished) but we can’t do it this way because some of our platforms – emscripten and libretro – require that we return from the main loop every frame otherwise they will hang. After a huge refactoring we can now simulate this behaviour through asynchronous transitions. What does this mean for you as a gamer? The compatibility took a huge step forward again, e.g. Amillusion (#1819) works now! (#1445, #1783, #1784, #1787, #1887)
Transitions look more correct when changing maps in COLORS: Lost Memories. (#1801)
Random blocks up/down were down/up. (#1947)
Transitions looked incorrectly when tiles on the tilemap had transparency. (#2117)
Animations
Battle animations are now frame accurate and saved in a RPG_RT compatible way. (#1372, #1757)
Battle animations that affect the entire map were rendered at the wrong position. (#1951)
Animations affecting the map were clipped when moving. (#2006)
Web Player (Emscripten)
The web player got a huge speed gain by switching to the new web technology web assembly (WASM). Contrary to asm.js which was always a bit experimental and had some limitations, WASM is an official web standard and is twice as fast in some games. (#1625, #1917)
The web player does not fail to start any more when the game name matches a directory in the virtual file system (bin, home, etc…) (#1255)
Newer Chrome versions prevent audio playback unless there is user interaction because of abuse by advertising companies. The audio initialisation is now delayed. (#1868)
Games with non-canonical paths (e.g. “../Pictures/PicFile”) are now supported. (#1896)
Other platforms
Android:
- We dropped the armeabi architecture and ship now x86_64 libraries. According to Google Play the device compatibility changed by 0, we only replaced an outdated architecture with an up-to-date one. (#1911)
- When the landscape orientation is forced in the settings both landscape orientations (as you know it from the Youtube app, #2121)
- The touch button labels were too large on some Android systems. (#2121)
Switch:
- Update to a newer libnx version, making it compatible with firmware 9.0.0. (#1894, #1994)
- Support for the left thumbstick (#2082)
- Due to a bug the B button was not working properly (#2082)
3DS:
- BGM does not play too fast any more. (#1275)
- Fix RTP loading. (#2063)
- Faster sound effect loading. (#2086)
For Developers
The namespace Game_Temp that contained various global variables was removed and the variables moved to more appropriate locations. (#1240, #1867, #2025)
We require now the C++ language standard C++14. The lowest GCC compiler supporting this fully is GCC5 (#1561, #1882). This allows optimisations such as #1960, #1963 and #1981. (constexpr)
File and Directory access code was refactored to make implementing IO for different platforms easier. (#1910, #2008)
The Windows toolchain was updated from Visual Studio 2017 to 2019. The latest version of the 2019 update is the only version we support. (#1965)
Many compiler warnings were resolved. (#1966)
Fixed linking against SDL 2.0.10 on Windows. (#1971)
The unit tests use now a single executable instead of individual executables per test set. This improves the linking speed significantly. (#1976)
Many short functions moved to header with inline attribute to avoid function calls. (#1977)
Fixed Windows Debug assertion failures. (#2045)
In an ongoing approach to get rid of all the auxiliary Makefiles to build all our different ports and to improve build times the additional platform files were reorganized in subdirectories. (#2160)
Other
Experimental feature: Multi-Game Save Importing (#1854, #1860). The Player supports now importing of savegames from other games directly through the title scene. For example Legion Saga and The Way accept the saves of there predecessors. To enable this feature you have to provide a easyrpg.ini in the game directory.
When an image is missing the amount of warnings reported was reduced. (#2092)
liblcf (RPG Maker File parser)
Support for Maniac Patch Event commands. These are just names that can be referenced in the Player later, it does not improve game compatibility. (#271)
Fixed incorrect defaults for savegame chunks: system (#333), event flash colors, vehicle sprites (#334), death handler (#338), pictures (#346) and transitions (#357).
As with Player the liblcf requires now at least a C++14 compatible compiler (GCC5, #339)
Much faster database parsing (#343)
I really like your blogposts. Thank you for your hard work!
Fyi — all videos are not working on iOS Devices (iPhone / iPad).
Thanks for noticing and sorry for the late reply… it seems WebKit merged AV1 video codec support some days ago, so we could use this new codec for future Safari versions. The AOMedia joint effort finally seemed to help, because Apple ignored VP8 and VP9 video codecs before.