After more than one year we are finally reporting back with a new release. This was a special year for all of us. Though it was not only the pandemic holding the release back. Instead the main issue was: Many of the new features / enhancements were under development for months and have been gradually integrated in our main code base. Therefore, the Player was quite unstable at times and making a new release was simply not feasible. We are only a small team of developers, so it was easier to wait until everything complicated was finished and then we could test and eliminate the last bugs. Now all bugs are removed (hopefully) and we can release.
Guess you want to know what is new? The major enhancements are:
- The RPG_RT patch Ineluki’s Key Patch is now supported
- Many of you asked us for Maniac Patch support. This is another major patch released a few years ago. While we do not plan to support the entire patch we decided to implement selected features.
- MIDI playback was significantly improved and games that use MIDI Ticks for timing work perfectly now
- The movement system (Move routes) was completely rewritten. This solved most of the remaining bugs in our map interpreter.
- The RPG Maker 2003 battle system is now almost feature complete and we verified that all algorithms behave properly
- All file operations go now through a Virtual Filesystem (VFS) layer. This gives us much more flexibility, e.g. it is now possible to launch games that are inside of ZIP archives.
- We invented a new way to translate games. See this article for more information.
One feature that did not make the cut for 0.7 is a settings scene and input remapping for game controllers. The code for the configuration dialog and for managing the config file is still missing. Expect this feature in 0.7.1.
If you ignore unofficial RPG_RT patches one can say that our work is finished by 99%. The major missing features are some item animations in battle, the dungeon generator and movie playback (and the last one is unlikely because all games use different video codecs, making this a mess). Well, … and of course the never-ending amount of edge-cases we missed. :)
Why Codename Sword? Because item animations in the RPG Maker 2003 battle system was one of the longest standing issues and nobody wanted to implement them. But a fearless new developer joined and implemented them for us.
The Player crashed when an enemy killed themselves due to a reflected spell in battle. (#2394)
Yume2kki (ゆめ2っき) sometimes uses an Instant Scroll feature by using a patched Pan Screen event command with a very high speed number. This crashed on certain Android devices due to a divide by 0. The Yume2kki developers really love abusing undefined RPG_RT behaviours. We already fixed so many of them over the last years…
When using a Speicherstein item (saves the game) in Vampires Dawn 2 an endless loop of save dialogs occurred, because the save count was not updated anymore. (#2450)
When using a healing spell in Vampires Dawn 2, it was impossible to tell which actor is currently targeted. (#2479)
When the state Death is configured as Ends after Battle, the state was removed but the HP were not increased to 1 anymore. Resulting in an instant game over still. (#2521)
RPG_RT is infamously known for the huge amount of custom patches applied to it in order to get custom functionality.
EasyRPG Player cannot support all of them because many are game specific or launch other programs on Windows but we add support for the most common ones such as the Pic Pointer Patch.
Ineluki’s Key Patch
In 0.7 we added support for a popular patch in the German community: Ineluki’s Key Patch: This patch is a replacement for Harmony.dll (the sound engine used by RPG Maker 2000/2003) that allows running scripts by “playing” music and reading the return values through the GetMidiTicks function. The major additions are full keyboard and mouse support. (#1181)
Harvest Moon – A new Life and likely other games invoke a program called LS.dat through Ineluki’s Key Patch. This program puts a script in the Sound directory that contains the current save count. The games use this in custom title scene to decide whether load shall be displayed. This functionality is now emulated. (#1367)
Games that use the mouse like Jumping cubes are playable now but for new games better use the mouse functionality of Maniac Patch because it has a better integration through event commands.
Even more complex than Inelukis Patch is a plugin system by Cherry called DynRPG. DynRPG provides a C++ API for accessing and modifying RPG_RT behavior. This is highly RPG_RT specific and we will never be able to support this properly, but we added a parser for DynRPG commands. This means we can now reimplement the most popular plugins and integrate them directly in the Player but as of now the parser is useless for users, except for better error reporting that the game will likely not run properly. (#2282) Currently planned for a later release of Player are DynTextPlugin and DynPEC.
In August 2018 a user called BingShan from the Japanese community released the first version of Maniac Patch. This is the first major patch for the official English RPG Maker 2003 release and it extended certain event commands and added new commands. The patch was extended over the years and recently BingShan released an entire new RPG Maker 2003 compatible engine. We can already say that we do not intend to implement all of the patch functionality, especially not TPC (That is a built in script engine that generates event commands). We will cherry-pick the features based on demand.
Right now EasyRPG Player detects the patch and warns in most cases about unsupported commands. (#2486)
Though we started to implement some functionality:
- The unarmed battle animation for enemies can now be configured (#2498)
- The new event commands Load, Save, Get Save Info and Get Mouse Position are supported (#2623)
- The Key Input Proc event command learned how to read from mouse buttons (#2623)
- Show Picture, Move Picture and Erase Picture event commands were enhanced with Maniac Patch functionality. This includes features like Blend Mode and Flip (#2628)
- Certain event commands gained the functionality, besides constant value and Variable, to read indirectly through a variable, e.g. when in Var 1 is a 5 the value in Variable number 5 is used. Because all event commands go through the same lookup logic here and Maniac Patch sometimes differ from it we cannot give a full list where it works.
Launching protected games
Some games use patched files to ensure that it is not easily possible to view them in the editor.
The most simple protection we defeat since a decade is replacing the header of the files, e.g. instead of LcfDataBase the LDB uses a custom string such as EasyGameABC.
More sophisticated is changing all file extensions. Laxius Power e.g. changes:
- RPG_RT.ldb to RPG_RT.set
- RPG_RT.lmt to RPG_RT.lxb
- MapXXXX.lmu to MapXXXX.ont
This protection is now defeated by EasyRPG Player and the game launches: The LDB and the LMT is determined based on the size (the database is larger) and the maps based on the Map-prefix. (#1920, #2271)
Sometimes you will encounter games that only consist of a single RPG_RT.exe: These are usually protected by Molebox or Enigma. EasyRPG Player is unable to run them directly but there are unpackers available in the internet.
It is now possible to translate certain, until now untranslatable terms. These are implemented in terms of new database chunks. Unfortunately our editor is not ready yet so editing them requires a tool like lcf2xml. (#2362, #2473). Also see the related liblcf commits. (#414, #419)
The now translatable terms include:
- Status Scene: Name, Class, Title, Condition, Front, Back, Confirm, Redo
- In RPG Maker 2003 battle the messages displayed when monsters to Double Attack, Defend, Observe, Charge, Self-Destruct and Escape
In 0.7 we replaced all chunks of code that were responsible for reading files with an abstraction layer called VFS (Virtual Filesystem). We wanted to do this since years and it was a huge amount of work.
Basically this works through Filesystem classes that offer functions like File exists, Open & Read file or List directory and all Input/Output goes through this abstraction layer.
In 0.7 their is one new feature powered by VFS which also proofs that it works: The Player can now launch games directly from ZIP archives! Only archives with compression method Store or Deflate (not Deflate64) are supported. When you use this feature the savegame is put in a folder next to the ZIP archive. You can either launch them through our Game Browser (who learned to navigate into subdirectories by now) or by providing them as --project-path on the command line. As for games the encoding of the ZIP archive is auto-detected, so if you are unable to extract a ZIP on Windows: Try launching it through EasyRPG Player instead. (#1085, #2562)
The main motivation for this change however was supporting platforms where normal input/output functions by the standard library are unusable. This affects Windows Store Apps (UWP) where the security model forbids normal file access outside of the app directory and as of November 2021 also Android: All updated apps must use the Storage Access Framework (SAF), this also enforces such security checks.
By now UWP or SAF are not supported by us but our VFS code makes it very easy for us to hook them in later.
Also we are asked alot about offering RPG Maker games directly in the Play store: We are very close to supporting this use case (Game files directly in the APK and launching them without using the Game browser). Please wait for our announcement!
MIDI is not like your typical audio format: Contrary to WAV or MP3 that encode a waveform, MIDI files are event based: They contain which instruments and notes are played. This also means that they sound different depending on the library used. Most of you are used to Windows MIDI (Roland General MIDI). Additionally RPG Maker 2000/2003 has special features for MIDI files:
- Pitch (playback speed) changes
- Volume changes
- Loop Event (Control Change with Event 111)
- Obtaining the current playback position (MIDI Ticks)
The first two features work by injecting MIDI events and for the Loop event case to send MIDI events from the start of the loop again.
Until recently we used SDL Mixer on Windows and macOS for this and on all other platforms WildMidi or FmMidi. SDL Mixer ensured that we sound like RPG_RT by using the native API on Windows. Except for FmMidi, which is not very popular among users because it sounds “wrong” to them, none of these libraries allows injecting of events meaning that we were unable to implement the harmony.dll (The audio engine of RPG_RT) behaviour.
But with 0.7 this is finally solved! How does it work: Almost all MIDI libraries (except WildMidi, we will talk about this alter) support processing of external events and then converting them to audio.
For this we use the FmMidi sequencer to play all MIDI files. FmMidi is split into two parts: A sequencer that processes MIDI events and a synthesizer that converts these events into audio. Note that we use the sequencer here, so the component that handles events.
We forward these events to the native MIDI interface on Windows, Linux and macOS or to our libraries FluidSynth (to play SF2 files / soundfonts) and FmMidi (for the fans of electronical sounding music, it sounds like a Yamaha YM2608). Additionally for volume or pitch control we inject additional events (that we traced by observing harmony.dll). In short: This works excellent and all our MIDI problems are solved… except WildMidi.
WildMidi is a “fire-and-forget” library: You pass the MIDI file and it plays it. No way to control the behaviour. To ensure that everything still works we count how many samples WildMidi must have played by now relative to the MIDI tempo and this way we still got MIDI ticks and looping to work. It feels like a giant hack but it is not stupid when it works. Unfortunately getting the Pitch right is impossible, this will still sound incorrect.
Why so many MIDI libraries? Well, MIDI are special: Everybody likes them different. Some like the Windows default MIDI (known from RPG_RT), some have a favourite soundfont (FluidSynth), others want GUS patches (Wildmidi) and others love the electronical version offered by FmMidi.
Problems solved by our new MIDI interface:
- Embric of Wulfhammer’s Castle: Sound effect repeating incorrectly (MIDI loop point) (#834)
- MIDI synth restarts every time the music changes, giving a short lag on some systems (#951)
- FluidSynth/FluidLite MIDI playback support (SF2/SF3 files) (#1322)
- Improve consistency in MIDI sound (#1434)
- Helen’s Mysterious Castle had inaccurate BGM playback (#1556, #2587)
- Return of Touhou Mother: MIDI-Tick Regression (#1733). This game uses a MIDI-tick based combo system meaning this never worked correctly anywhere except when using FmMidi.
- Tempo changes the Tone of MIDI songs (#2029). This bug is not solvable in WildMidi but it works for all other libraries.
- Dの冒険Ⅶ: Hang after investigating the grave (#2106). Needed MIDI tick support.
- Implement Ticks for: libsndfile, FmMidi and Wildmidi (#2118)
- Return of Touhou Mother softlocked in the Battle System on Android (#2241)
- FmMidi: naive harmony-like loop support (#2245)
- Improve MIDI playback accuracy (#2478)
- RTP Shop 3.mid plays noisy (#2588)
But all this was at a cost: Before our MIDI fix the vending machine in the Bathhouse of Yume2kki (ゆめ2っき) only gave you tasty chocolate milk. Now you can also get boring whole milk (3.5% fat) and skimmed milk (1.5% fat) besides tasty chocolate milk. How sad!
We are not completely finished here: We plan to offer an interface to configure MIDI in 0.7.1. The soundfont used by FluidSynth is not configurable right now. Currently a easyrpg.soundfont in the game directory is used.
More Audio improvements
Because RPG_RT uses DirectSound it uses a logarithmic volume scale instead of a linear volume scale. This means until now all sound effects and most music were played too loud compared to RPG_RT. This is now fixed.(#2236, #2551)
For certain platforms we used a custom implementation to play WAV files because libsndfile was too slow on them. Our custom implementation was severely limited and we finally replaced it with dr_wav. dr_wav is a single-file-library that can be directly embedded and it supports all relevant WAV formats. dr_wav is now the default for all platforms. The only issue we found is that dr_wav crashes when playing certain sound effects on the Wii but we were able to solve this. (#2571)
The quasi-standard for looping in OGG and OPUS files are the tags LOOPSTART and LOOPEND or how RPG Maker VX calls them: LOOPSTART and LOOPLENGTH. After implementing looping for MIDI we knew about all technical difficulties, making it easy for us to add this functionality. (#2618)
The vehicle is not rendered in the custom battle of Dragon Fantasy II anymore. Fix unclear, but it works. (#2235)
The vehicle is disembarked when a Teleport or Escape skill is invoked. (#2316)
Wadanohara does not display warnings about invalid equipment anymore on startup. The invalid equipment is now removed silently. (#2506)
Multiple bugfixes for Key Input Proc:
- In the legacy Steam version (not the Unity port) of Ara Fell crouching with Shift was not working because we forgot to enable the “Engine is updated” flag when enabling the features for RPG Maker 2003 English release. This update flag is used in Key Input for certain keys. (#2531)
- In Zelda LA it was impossible to input a name because the direction keys were not working. This game uses the RPG Maker 2003 translation by RPG advocate. Such old versions only supported “All Directions” for Key Input. This is now properly handled. (#2546)
Movement / Move Routes (#2208)
Another huge refactor was the behavior in terms of character movement and move routes. This fixed again tons of edge cases where we were previously clueless what was going on here. We are even bug compatible now. You can decide if this is good or not but it is needed for perfect game compatibility.
- Multiple accuracy improvements for Move Type Random (#1638)
- Boarding an airship is a few frames slower when it has a move route assigned. Do not ask us why. (#1645)
- Support for some funny vehicle glitches. (#1852)
- When talking to a character in Saint Seiya -Il Mito- it disappeared. This was caused by incorrect handling of diagonal movement. (#2196)
- Barrels did not roll in the Donkey Kong minigame available in Saint Seiya -Il Mito-: When changing between move routes that have exactly the same move commands the new move route continues at the exact same position instead of restarting. (#2197)
- Incorrect handling of move routes when a switch disabled the route. (#2255)
- A Change Graphic event will change the vehicle instead of the player when boarded. (#2286)
After refactoring most of the RPG Maker 2000 battle system, the RPG Maker 2003 battle system received the same treatment: Almost everything should work now, even the enemies attack you now while you navigate the menu (ATB / Active Time Battle). Some of us hate this, but it is how RPG Maker 2003 does it. (#2399)
This was again a fairly complex change so it is hard to write it down. Just try it and you will see what we are talking about.
This fixes the following issues:
- Correct placement of battlers in their specific battle row. (#278)
- The Row battle command is now implemented (#680). This command is pretty useless, it changes the defense multiplier of the actors and that’s it.
- Minor battle bugs in OFF (#1277). The message Purification in progress was not displayed.
- Final Tear 3: Multiple minor bugs in the battle system (#1314). This game had multiple graphical issues, e.g. wrong background graphic and the battler placement was wrong.
- New feature: The editor of RPG Maker 2003 English release allows specifying of negative E rate values but this was never implemented in RPG_RT. We added this feature (#1391)
- Mother: Cognitive Dissonance (#1414). Multiple rendering issues and Dual Wield (using two weapons) was not supported (#1727).
- Support for special battle types in RPG Maker 2003 (Surprise, Back, Pincer and Surround attack) (#1454)
- The battle animations in Alter A.I.L.A. Genesis work (#1496)
- Assets are now flipped to ensure they always look at the hero/the enemy (#1564)
- Death animations were rendered incorrectly (#1681)
- The game Memory of Moshimo uses a modified database with a Monster called Turn End Processing (ターン終了処理) that has 0 HP and is used for scripting. This quirk is now supported. (#2153)
- Legend of Tank: Fix softlock in the battle against Battleship Mikasa (戦艦三笠) (#2154)
- The behavior when an actor receives a state that results in provoke is now correct (#2169)
- Actors that are killed and revived in the same turn do not execute their battle action anymore (#2169)
- Reflecting of spells is now properly implemented (#2251)
- It is possible to alter the color of monsters. In some cases the calculation was incorrect. (#2266)
- Flipped battle animations are now supported (#2310)
- Many UI improvements to ensure we are pixel perfect when compared to RPG_RT (#2354, #2483)
- The Battle start message is now supported (#2357)
- Proper timing and wait frames between actions (#2357)
- Support for ATB active mode (#2360)
- The Change Monster HP event command has an option that decides whether the HP reduction can be lethal (#2370)
- Monster sprites were not rendered anymore after revive (#2372)
- Fix Skill and Item usability (#2380)
- The runaway animation is now supported ( #2383)
- When a battler receives a restriction such as sleep the current action is now cancelled. Before it was possible to sleep and revive the battler in the same turn and still doing an action. (#2385)
- Enemies do not flash anymore when it is time for a turn but they have a no move restriction such as sleep. (#2388)
- Support for simultaneous battle animations on enemies and actors (#2409)
- Battlers were incorrectly positioned when the party was changed through an event command. (#2418)
- The Gauge is not rendered as full anymore when the maximum SP value is 0. (Reported for Shyouzen 2, #2443)
- Death animations do not loop anymore. (#2481)
- Sprites are rendered at the correct position and support flipping. (#2482)
- When highlighting an enemy in battle, up to five active states are displayed in the help box, until now we only displayed one. Ara Fell uses this a lot in boss battles. (#2487)
- Flash and shake effects are now properly handled for battle animation sprites (#2505)
- In Grimm’s Hollow the damage is decided based on the position of a swing meter you have to stop at the right moment. This was appearing even when no attack was executed. (#2535)
- In battle RPG_RT is more tolerant than on the map: When an image is missing the battle will continue without showing the image. This is fixed now because it broke the final battle in Unterwegs in Düsterburg: The pictures were deleted and instead integrated into the backdrop (stuff like Left Hand, Right Hand, Main Part of the boss…). In our Player the missing pictures rendered as lots of checkerboards. (#2561)
- The small battle system of RPG Maker 2003 is now supported (#2575)
Another feature of the RPG Maker 2003 battle system is Character Battle Animation or CBA. With CBA actors can swing swords and throw spears or boomerangs. Additionally an Afterimage can be configured (the previous movement frames are shown with increased transparency) and the attack behavior of weapons can be altered. CBA is fully supported, except for the following Ranged attacks: Boomerang (this is just visual) and Attack in Sequence (this means such attacks deal less damage). But we are happy that one of our longest standing issues is almost resolved.
- Dragon Ball Z: The Legend of Z: Wrong pose displayed for CBA skill animations (#1708)
- Enemies in OFF did not charge at the heroes (#1277)
- Afterimage not displayed in Final Fantasy: Blackmoon Prophecy (#2538)
- This affected many, many more games but we did not track bugs for all of them
In short: The algorithms are now perfect or close to perfect.
- RPG_RT Autobattle algorithm is now supported properly (#1586). Previously we used a very naive algorithm: Attack a random chosen monster with a normal attack but this broke many scripted battle systems that relied on Autobattle behaviour.
- The Agility calculation for the attack order in RPG Maker 2003 was incorrect (Reported for King of Grayscale, #1820)
- The enemy AI algorithm is now compatible with RPG_RT. Games that heavily really on a certain AI behaviour work now properly. (#1831)
- Correct escape chance calculation (#2150)
- Proper variance calculation for damage (#2157)
- Correct hit rate calculation (#2320)
- Support for the row command and the implications on the damage based on the row of the battler (#2321, #2322)
- Support for negative attribute modifiers (#2329)
- Fixes for skills that do Absorb when the target is killed by it (#2351)
- Hidden enemies are not targeted anymore by skills that target the entire party (#2373)
- When both ally and enemy have the same agility the enemy gets the turn first (#2382)
In some cases the Player failed to correctly load picture and spritesheet data. (Reported for La Leyenda Heroen, #2262)
When saving and loading in LunarLux the Player was not visible anymore. (#2419)
When saving on the Shogi Board map in Yume2kki (ゆめ2っき) and loading this save in RPG_RT the events looked glitched. (#2207) Note that saving here is only possible through the debug save functionality of EasyRPG Player.
Hero transparency was not saved or loaded properly. (#2224)
For better savegame compatibility the scene ID is now saved as part of the savegame. This value is not used at all by RPG_RT or the Player when loading. (#2298)
Scenes and Windows
The game data was not properly reset when returning to the title screen with F12. (#1524)
Window and Message timing were improved even further to match RPG_RT. This is too complex to fully explain it in a blog post, see the linked pull request for more information. (#2026)
The encoding detection (guessing how the filenames of a certain game are encoded to ensure it starts properly) was improved (#2641) and even supports now problematic games like the English translation of .flow (#2554). It still uses Japanese filenames but contains English strings, so the game was incorrectly detected as Western European and the assets failed to load.
RPG_RT supports animated down and up arrows on windows to indicate that the window can scroll. The debug scene got now left and right arrows to indicate that the pages are scrollable this way. (#2248)
When states were above 1000 (because of equipment) the rendering was incorrect: They must be clamped to 999. This also affected the shop scene: An equipment that resulted in 1050 was considered equal to equipment that resulted in 1040. (#2453)
The system graphic of the load scene is not replaced anymore right after loading a savegame. (#2456)
It is not possible anymore to buy more items than would fit in the inventory. (#2464)
The ExFont (Symbol font) of Grimm’s Hollow was incorrectly rendered. (#2512)
When the equipment is not changeable (fixed) the equipment scene does not display the other available equipment in the inventory anymore. (#2576)
When equipping an accessory in Monster World RPG everything else was unequipped. Even for non-weapons the two handed flag was considered. This is now fixed. (#2603)
The transparency of the message window was not perfect. (#2626)
Negative terrain damage is now supported. (#2632)
The menu cursor scrolling speed is now closer to RPG_RT. (#2634)
The window does now a smooth scrolling when the cursor scrolls the text in a window. (#2659)
In Test Play Mode the Abort Event hotkey (F10) is now supported. This hotkey cancels the current event and active move routes. Very useful if the game hangs due to a bug. The Screenshot hotkey was moved to F7. (#2660)
When launching a battle through the debug scene pictures and weather effects were not shown. (#2120)
When a rotation is cancelled the rotation will continue until it reaches the normal position. Reported for Saint Seiya -Il Mito- (#2198)
Yume2kki (ゆめ2っき) is known for abusing RPG_RT implementation specific behaviour that is not exposed through the editor. This time they used Show Picture to display a picture with an empty filename. In this case RPG_RT will preserve the old image but overwrite all options with the new ones. This was used to achieve a transparency effect. Do not ask us why they did not use Move Picture for this like normal people do (#2523)
On Android 11 accessing games is possible again. Though starting November 2021 Google requires the usage of a new API for file access (Storage Access Framework, SAF). To submit any further updates to the Play Store we must rewrite our app first. Very annoying… (#2415)
The support library was upgraded to AndroidX. This solves some visual issues in the game browser on newer versions of Android. (#2018)
When bundling a game with EasyRPG Player (so-called standalone mode) the audio was disabled after running the game once and there was no way to reenable it. Note that the standalone mode is experimental, please wait for an official announcement. (#2524)
Emscripten (EasyRPG Web Player)
The HTML shell file was updated to the latest release. (#804)
The format of index.json was updated to be more compact and it supports normalization of filenames. Depending on the operating system a file can appear to have the same characters but uses a different byte sequence. Normalization solves this issue. (#1729)
The Web Player does not freeze anymore when switching the tab. This was solved by updating SDL2 to the latest version. (#2228)
Basic touch input (Only Confirm and Cancel) was added (#2426).
The minification of the shell file was disabled because the result was invalid HTML. (#2446)
The character + is now URL encoded when it appears in filenames. When not encoded + is interpreted as a space and the files failed to download. (#2514)
RPG Maker 2003 English release, Maniac Patch and DynRPG are now automatically detected by the web player. This means spritesheets finally work without passing an engine parameter. The web player has a hard time with detections that involve scanning of the game directory because all files are downloaded on demand. (#2520, #2526)
libretro / RetroArch core
As a service for the community we offer now our own libretro cores for Windows and macOS. This includes continuous builds who will not be available on the libretro buildbot which means you will be able to profit from the latest developments (at your own risk). This will not replace the libretro buildbot, you will still be able to download 0.7.0 through the core updater on all supported platforms.
Some core options did not load because the configuration key contained spaces. (#2493)
The ending .easyrpg was added to the supported file extensions. You can put a file GAME_NAME.easyrpg in the game directory and have individual game options configured this way. Using RPG_RT.ldb did not work here because RetroArch maps configurations to filenames and they were the same for all games.
Unfortunately Nintendo messed up the filesystem driver making anything that contains e.g. umlauts or Japanese unable to be loaded. We cannot solve this but workaround it: Simply put the game in a ZIP archive and launch the ZIP through our game browser (see Support for games from ZIP archives) (#1747, #2205)
When you do not need the numpad you can turn now the bottom screen off by touching a button. (#2617)
VSync is now enabled by default. (#2507)
The on-screen numpad of our Switch port was ported over to the PS Vita. Now you can properly play Yume Nikki and other games. (#2635)
Finally a solution for laptops without a numpad: Both numpad and the normal number keys work now in key input. Additionally +, -, *, and / are now also mapped to additional keys. Though we do not know any game that uses them. (#1121, #2567)
Some games use increased limits for hp, mp, atk, def, exp… These games are still not supported but we added custom chunks to the database to support them in the future. (#1375)
The recording format used for --record-input was significantly improved. Playing back the old format is still supported. (#2301)
The key for x10 fast forward is changed from CTRL-+ to G. (#2544)
The licenses of our fonts are now mentioned in the Readme file (#2580).
Terminal output is now colored. (#2608)
A new command line option --rtp-path was added for specifying an additional RTP path (#2448)
We added support for certain new database settings that could be useful in your next game. Unfortunately setting them is hard until our editor is finished. If you are curious what they are click the issue links. (liblcf #421, #2564)
Do not forget to update liblcf to 0.7.
This is the last version supporting C++14. Right after this release we will move to C++17. The compiler support is good enough by now.
libfmt is a new required dependency that makes it much easier for us to fulfill all our text formatting needs. Every ancient version down to 5.0 will work. (#2181)
SDL2_mixer was removed and is not supported anymore because the API was too limited for our audio requirements.
libxmp (a recommended dependency for playing MOD/Tracker files) requires now 4.5.0 or newer because the previous versions did not support providing custom IO callback functions. (#2595)
For native MIDI playback on Linux (through a MIDI daemon) the recommended dependency ALSA/libasound is required.
For playing custom soundfonts (SF2) libfluidsynth is a new, recommended dependency.
Deprecation of Makefiles: Except for 3DS, Wii and Switch we build now all supported platforms using autotools or CMake. We will completely drop building through custom Makefiles with 0.7.1. We ask all maintainers using custom Makefiles to migrate to a supported buildsystem. Right now there are still some Makefiles e.g. for Amiga or Dingoo in the repository that are not maintained by us: These will be deleted before 0.7.1!
Further CMake improvements:
- The minimum supported CMake version was increased to 3.10 (#2532)
- The unit tests compile now when targeting Emscripten or macOS (#2303)
- The bash completion scripts were not installed on Linux when using CMake. (#2396)
- Multiple fixes for CMake to ensure the libretro core builds on all platforms. (#2400)
EasyRPG Player is now available on the snap store. This package is not maintained by us. Use at your own risk! (#2413)
liblcf (RPG Maker File parser)
Parsing LCF files is now much faster and takes less memory. This means games start faster and on devices with limited memory (handhelds, old smartphones, etc.) more games launch.
|Game||Database size||Memory usage in 0.6.2.3||Optimized memory usage|
|HH3||16 MB||135.7 MB||68.5 MB|
|Hero’s Realm||27 MB||301.6 MB||143.3 MB|
|Violated Heroine||11 MB||75.9 MB||40.6 MB|
|Yume 2kki||1.4 MB||8.0 MB||4.8 MB|
The database size is just for information and does not always correlate with the memory usage. The database is smaller because all data is stored in a compact way that is not efficient to read from when running the game. The largest amount of memory is consumed by battle and common events. As you can see we were able to (almost) half the memory usage. (#379, #390) More optimizations are planned to reduce the memory usage even further.
New features in C++17 and C++20 are std::string_view and std::span. std::string_view reduces the amount of copying required when using a string and span does the same for vectors and other types of containers. We implemented these classes for our compiler version (C++14) and this gives nice, small speedups everywhere. (#384)
lcf2xml, a tool to convert LCF binary files to XML and back was moved from our Tools repository to the liblcf repository. (#302)
All data can now be printed on the terminal for debug purposes. (#368)
When you modify liblcf code the whitespace configuration (tabs vs. spaces) is now correct because we added a .editorconfig file. (#376)
More Maniac Patch event commands and chunks were added. This is just for documentation or later use in Player and does not improve compatibility. (#381, #417, #432). Note that how we save flip and blend mode of pictures is incompatible with Maniac Patch because the patch recycled an unrelated chunk (bottom transparency) for this. We decided to implement this in a cleaner way. (#434)
A new feature called ForEachString was added that makes it possible to enumerate through all strings in the database. This is used by the translation feature. (#388)
Database and MapTree are not stored as global data anymore. This makes it possible now to load multiple database and map trees at once – useful for the editor. (#405)
The entire liblcf repository was restructured and everything moved into namespaces. E.g. instead of Actor the class is now called lcf::rpg::Actor. This also improves the error reporting because you can see directly where the error occured from. (#342, #361)
The GNU compiler extensions are enabled now if supported. These are required by certain ports such as AmigaOS. (#366)
Building with gcc5 works again. (#374)
Expat 2.2.10 and newer are now supported by the CMake build system (#385)
The supported versions of CMake are now 3.10 and newer (#422)
Using liblcf from CMake does not require pkg-config anymore. (#431)