EasyRPG Player 0.5.4 “Antidote”

This release took us far longer than we expected last year and as you can see the changelog is a bit short for 1 year and a few days of development time. We are always critical low on developers and this year we all had a serious lack of time and other personal issues. Though don’t worry we can still provide you with some cool additions that will improve playing a lot of games.

There are tons of battle fixes in the queue but due to there sheer complexity we decided to delay them for the upcoming 0.6 release, hopefully also in 2018. Sorry!

Why you should use EasyRPG Player

A few hours ago we were notified that the author of Deep 8, Independent Art, created a video for us which lists all the advantages of EasyRPG Player over RPG_RT. Thanks for this nice video, it is really a great summary!

Watch the Video (Link goes to Youtube)

Regressions fixed

Due to a change in our shutdown code the Player crashed when closing the Player while in a battle (#1298).

Technically this was not our fault, but because of a bug in the libpng library we used on Android the loading of some graphics failed in Violated Heroine ( ͡° ͜ʖ ͡°) (#1311).

The support for RPG Maker 2000 1.61 placeholders erroneously prefixed the “Critical Hit” message with the name of the actor in older RPG Maker 2000 versions (#1291).


All missing transition effects are now implemented (#900). This includes:

  • Random Blocks
  • Random Blocks Up/Down
  • Zoom
  • Mosaic
  • Wave effect

Furthermore Transitions are now implemented as “Drawables” (Graphics rendered by our engine) which means frameskip and fast-forward works now as expected while a transition is active (#1094). The timing of transitions is now also adjusted, e.g. the Game Over scene has slow ones but menu to map is fast.

As in RPG Maker when a battle starts the screen flashes now twice and then a zoom effect onto the actor happens (#1369).

We would like to thank our new developer Sormat for this significant contribution.


The Tone effect performance was significantly improved and is now 50% faster for single effects (Tone or saturation) and 100% faster when both are enabled at the same time (#1380). This change is mostly noticeable on our CPU constrained ports (3DS).


All sound effects are now stopped when the sound “(OFF)” is played. As a bonus this also applies to inofficial translations where this string was translated to e.g. “(Brak)” or “(Kein Sound)” (#1120).


Monsters with the “flying” attribute move now up and down in the RPG Maker 2003 battle system (#1220).

Flying enemies are now really flying

A bug in the alpha channel handling in the Tone Blit code resulted in strange looking weather effects and colored boxes when a battler had an effect in the RPG Maker 2003 battle system (#1225).

Due to a bogus check fleeing from random encounters was not possible in RPG Maker 2000 battles (#1350).

The placement for party members was incorrect in RPG Maker 2003 battles (#1399).

The RPG Maker 2000 battle system reported hidden enemies in the initial enemy appearance message (#1370).

Turning a switch OFF after an enemy action contained a bug and turned the switch ON instead. The switch toggling was also broken for some types of enemy actions (#1419).

The turn counter for RPG Maker 2000 battles did not increment before determining the enemy actions. This means all enemy actions that depended on the turn counter were executed one turn too late. Together with the previous bug this fixes the battles in Heaven and Hell Episode 3 (#1419).

Our Player crashed when using Switch Skills in 2k battle, when there was no target. Now we show “???”, like RPG_RT does (#1440). This only affected games made with the English RM2k release.

Map and interpreter

The game COLORS: Lost Memories uses a modified database with actors of level 0 (normally the minimum level is 1). This corner case is now supported though the game is still unplayable due to interpreter timing issues (#1248).

In Razas standing characters were shown with the incorrect movement frame “left” instead of “center” (#1198).

When a move route was active while boarding the Airship, the shadow of the Airship already moved with the route while the ship itself was still playing the ascend animation (#1268).

Battle commands were incorrectly loaded from RPG_RT save files and the handling of classes was updated (once again) because we figured out that one field in the save game is not “class_changed” but “battle_commands_changed” (#1287).

The “Change Class” and “Change Battle Command” event commands support now range based operations on multiple actors. This is an undocumented feature not exposed by the RPG Maker editor interface (#1288).

The charset animation frame was not reset to “Middle” when a Jump happens or “Stop Animation” is used (#1289).

Pictures with “Scrolls with Map” setting were rendered at the wrong position after a savegame was loaded (#1296) and the last picture of a savegame was not restored at all (#1299).

The viewport got misaligned by 2 pixels when the map reached the map border (#1300). This is a strange bug which we already fixed twice before but it reappears under different circumstances.

After the strange “Set Vehicle Location” behavior encountered last time which allows moving the party when outside of vehicles (#1257) we got another report. The game 呪いのこうもりさん uses this command for changing maps. This usually crashed RPG_RT but when the event ID is valid on the new map it will magically work. Our Player emulates this now with a teleport, this doesn’t fully match RPG_RT behaviour but is close enough (#1303).

A black screen occurred after using the Portable Portal given by the Witch in Violated Heroine. This was a timing issue caused by the use of “SetMoveRoute” with an empty route. An empty route was processed like a normal move route, therefore the interpreter was off-by-one frame and this race condition broke the code. Empty move routes clear now existing move routes and result in a delay of 0 frames (#1308).

Spritesheets (a new RPG Maker 1.12 feature) were broken and only worked once (#1331).

For implementing screen shake, tiles that were outside of the map were rendered black to avoid graphical glitches, but Frozen Triggers uses a modified 1×1 tile map, therefore the whole screen was drawn black. The implementation was changed and combined with the previous fix the game is now fully playable!

Frozen Triggers went from completely unplayable to fully playable. The scripting in this game is insane, a must play!

Here a longer gameplay video, they are desynched, which can have various reasons, but you see the difference ;).

In Touhou Mother party members became solid after battles or scene transitions. The issue was that the max_stop_count (used to measure how long to wait between move commands) was overwritten on event page changes even when a custom route was executed by an event command  (#1344).

In Witch’s Heart the Hero was moved to the top-left corner when landing while on the broom. The broom is implemented as the airship vehicle and the Player reported “Not in Vehicle” already while the airship was still descending which caused timing issues (#1349).

Play Memorized BGM did not work after a BGM fade-out (remained silent, #1354). This is the 2nd bug fixed in Witch’s Heart.

When a new map loads all events have one frame of execution time before the fade-in happens. This behaviour was already implemented but event sprites were not being updated, resulting in visual issues like e.g. instant visual changes after the transition is finished (#1358). This is the 3rd bug fixed in Witch’s Heart.

Message substitutions of e.g. \n[1] with a hero of name \n[1] resulted in an endless recursion/hang (#1379).

Terrain damage is supported now. Furthermore when the party steps on dangerous terrain a red flash appears now when the receive damage (#1389, #1393). Items that prevent terrain damage are also supported. Therefore you get the full game experience now when you walk in the desert of Vampires Dawn without sun protection.

When a vehicle is entered and no further movement happens, the vehicle still faces to the left but the hero actually faces forward. The facing of the vehicle is now updated to match the hero facing direction. This change does not match the RPG_RT behaviour but slightly improves the user experience and has no possible regressions (#1403).

When the boat or ship is on walkable terrain (usually not the case for water) the airship can land on the boat or ship. This seems like an RPG_RT bug and we don’t know a single game that depends on this feature (#1404).

Calling the menu is disabled now while the player has an active move route (#1404).

Events with “Same as character” layer priority can’t move through boats and ships anymore (#1404).

Two handed weapons are now fully supported in the equipment scene and by the “Change equipment” event command (#1397).

When a monster rapes the heroine in Shitigadianzu the progress bar is now filling up. This was due touch events not triggering while a move route was active. For this change we will not provide a video, because we would need to censor three quarter of the screen and disable the sound (#1412).

The movement was glitchy in the currently unreleased game Super Crystal Hunter because “Fixed direction” movements were not handled correctly (#1413).

Using the computer multiple times in log.[in] does not result in a black screen anymore (#1416). Our interpreter executed the wrong event commands after “Show/Hide screen”.


All our ports support now all music formats and libraries, however, 3DS may have performance issues with some formats (#1332, #1339).

The 3DS was migrated from the deprecated graphic library sf2dlib to the official library citro3d. This fixes flickering issues and gives a minor speedup (#1422).

You can play now the most memory hungry game on PS Vita: Hero’s Realm (#1340).

The Player runs now as homebrew on the Nintendo Switch  (#1337). See the previous blog post for more information.

BSzili ported the Player to MorphOS and AmigaOS4 (#1415). Check out his website for obtaining the Player.


The Player checks the dimensions of assets and issues a debug log in the console/log file when they don’t match the expected dimensions. To reduce the amount of useless debug output this check was disabled for Monsters, Panoramas and Pictures (#1333).

The name input scene supports now Traditional Chinese (#1307).

Traditional Chinese in the Name Input Scene

Loading of custom ExFont files is supported now. ExFont is an embedded resource in RPG_RT and is substituted when using the strings $a-$z and $A-$Z in messages. When an ExFont.bmp/png/xyz is in the game directory, EasyRPG Player will load now this file. Vgperson already bundles a ExFont in their game translations (e.g. The Grey Garden, Witch’s Heart and Wadanohara), we hope other game creators/translators will join soon ? (#1352).

Witch’s Heart uses a custom ExFont around the actor names
The dead skull was before highly misleading
By far the worst: The font of Mr. Saturn is completely unreadable. This game bundles currently no ExFont, you have to provide it by your own!

The Skill Menu of a character can’t be accessed anymore when they have a “Do Nothing” restriction (#1395).

When a skill is used in the menu the first sound effect of the corresponding battle animation is now played (#1397).

The actor target scene used to select a skill target did not render the skill costs correctly (#1397).

The hero class is now checked when determining if an item is usable (#1397).

When accessing LCF data structures, sanity checks were added to ensure that no invalid objects are referenced which result in crashes. Most of these checks won’t be ever encountered, because otherwise games in RPG_RT would simply fail in most cases. We do not recommend running games from untrusted sources in EasyRPG Player but this change should reduce the exploitable attack surface a lot (#1259, #1345).

Due to multiple bugs in the SDL2 library concerning fullscreen mode, the Player starts now always in windowed mode and immediately toggles fullscreen mode. This fixes missing title bar icons under Windows and incorrect/pixelated graphics when switching back to windowed mode under macOS. Additionally, the zoom hotkey determines now the desktop resolution which allows higher zooming levels (#1364, #1406).

Two new System database chunks have been identified. One can be neglected, but the other can be used for the equipment usage in 2k3 mode (#252).

For developers

The CMake build scripts for Player, liblcf and the Tools were completely rewritten to use modern CMake. These scripts support now compiling for all major platforms (Windows, Linux and macOS). We slowly plan to migrate most of our targets to CMake to reduce the maintenance burden. This includes deleting the Visual Studio project files and most of the platform dependent Makefiles (#1365).

The SDL UI class was refactored and split into separate files for both legacy SDL and SDL2. This makes the SDL2 UI code much cleaner, because we have lots of workarounds in the legacy SDL code which were not needed anymore in the newer versions (#1327).

Building against SDL2 mixer version 2.0.2 is supported (also recommended because of better mp3 support) now (#1297).

Compiling on platforms that do not have a “d_type” field in the directory entry structure is supported now (#1334).

Our App works now with “targetSdkversion=26” on Android. All apps updated after October 2018 must support this (#1323).

Compiling on platforms where int32_t is not defined as int (but for example as long int) is supported now in both liblcf and Player (#1326).

liblcf (mostly for developers)

Our data access library (liblcf) can now better decide which fields and flags it needs to write for different database versions (#237, #240).

Bugs in the writing of RPG::Actor chunks were resolved  which increases the compatibility with RPG_RT (#235). There are further works in progress which will result in perfect reading and writing of all LCF files but we were afraid of regressions, therefore this must wait until the next release, sorry. :)

The defaults for the terrain grid values were fixed, this should solve some overlapping battler issues which occured in RPG Maker 2003 games (#247).

All enumerations provide now a string representation (#241).

EasyRPG Player now available as Nintendo Switch Homebrew

Another homebrew target, another port: This time for Nintendo Switch. The Switch is a very young platform for homebrew and we are happy to be one of the first available homebrews for it. As usual thanks to Rinnegatamante who also made the initial ports for 3DS and Vita.

Compared to other homebrew platforms we support the Switch has a powerful CPU and playing RPG Maker games will be a very smooth experience on it.

As usual for such ports you need a console with homebrew support to launch it. You can get the zip with all required files in the Download section (Continuous builds Other).


Extract the zip into switch folder on your SD card.

Games are searched in the same folder as the nro. Which means for the default install this is /switch/easyrpg-player. Place the game (the folder with the RPG_RT.ldb) directly in the nro folder to launch the game standalone otherwise place the games in subdirectories to use the game browser.

The RTP (RPG Maker 2000/2003 Runtime Package) should be placed in /switch/easyrpg-player/rtp/2000 and /switch/easyrpg-player/rtp/2003.

Button mapping

Use the digital pad for walking.

  • A: Confirm
  • B, X and Plus: Cancel
  • Y: Shift
  • Minus: Reset game
  • L: Toggle FPS display
  • R: Fast forward

A touch ui is available in the corners for using the extra numpad buttons like 0-9 and Plus. These are used by some games (e.g. Yume Nikki).

ZL toggles between 3 display modes:

  1. 4:3 with touch ui visible
  2. 4:3 without touch ui
  3. 16:9 stretched without touch ui

The touch works independend of the touch mode. When you are afraid of screen burn-in use mode 2 or 3.

Known issues

In some cases the audio playback will break. When this happens you have to restart the homebrew. We are one of the first homebrews that support audio and the API in libnx is not mature yet.

Reporting bugs

This is a community provided port without official support. If you think you found a bug please verify first that it also occurs in the official versions (e.g. on Windows or Linux). If this is the case please report an issue. We also track switch-only bugs there but don’t expect them to be fixed soon because we have no Switch for hardware tests.

You want to port to a platform that isn’t supported by Player yet? Contact us!


EasyRPG Player 0.5.3 “Stimulant”

We continue our one release per quarter-cycle and release “Stimulant”. Besides initial RPG Maker 2003 1.12 support this is a pure bugfix release.

Unfortunately most of the issues cannot be illustrated this time, expect a less visual blog post than usual :(.

Regressions fixed

Listed here are bugs that were introduced between 0.5.1 and 0.5.2 and have been fixed in 0.5.3.

  • The Player crashes when attempting to use a healing item outside of the battle (#1221).
  • The last-minute “battle encounters based on terrain tag” patch in 0.5.2 contained a bug for the default case: When the terrain tag array is shorter than the current terrain ID, it defaults to true instead of false. This broke battle encounters in Vampires Dawn completely (#1218).
  • A change in the logic whether characters or tiles are drawn for events resulted in a rendering error in Yume 2kki: It uses event tiles with no name. They were rendered as black boxes but must be rendered transparently instead (#1228).
  • The \N[X] actor name function didn’t work correctly anymore (#1229).
  • We reworked the name input scene to match the RPG_RT behaviour and only show two pages per language, e.g. Hiragana and Katakana for Japanese and Latin alphabet and ExFont for Western Europe. Unfortunately this broke a riddle in Ib, because the English translation by vgperson was auto-detected as Japanese and this made it impossible to input the solution (#1272).
  • Battlers are affected by screen shake again (#1280).

A few hours before release another regression was noticed which was introduced in 0.5.2 when placeholder support for the official RPG Maker 2000 English version was implemented: The actor name is shown by default in “critical hit” messages which causes grammatical errors. Because this is only a cosmetic bug and we are already in code freeze we decided to delay a fix to the next release.

RPG Maker 2003 1.12

A few weeks ago a new version of RPG Maker 2003 was released which heavily extends ShowPicture with new functionality like spritesheets and pictures in battle.

EasyRPG Player already implements most of the new picture features except pictures in battle and affected by Tone, shake or flash (#1273).

Additionally “This Event” can be used in Common events now. We support this now for all versions of the engine except for “Erase Event” because this event command results in a no-op instead of an error. We had to keep it disabled for old engine versions because this breaks games otherwise (#1265).

A look in the future

In an attempt to make the Player more stable, all RPG Maker data will be sanitized to detect out of bounds access and invalid data. The main motivation for this is to catch new game bugs more easily but as a side-effect it will also make the Player more exploit-safe.

EasyRPG Player will come to two additional platforms: iOS and ChromeOS through a Chrome App. The Chrome app is mostly finished and the iOS app still lacks some parts of the GUI, especially the layout editor. We will announce when any of the apps is ready but do not expect the iOS app to be submitted to the App Store because the yearly fee is expensive and Apple will very likely reject us.

A virtual filesystem is under development, this allows e.g. running games from ZIP archives or games that are embedded in the Android APK. Together with the optional dependency PhysFS, more archive formats like 7zip will be supported, too. But due to solid compression (full decompression of one file requires decompression of additional files) RAR and 7zip will usually be too slow.


A visual error in El Heredero del Rey was caused by handling the character orientation after a page change incorrectly: When both pages contain the same default direction the current direction of the actor is not altered (#1226).

Correct character shown in EHR

Battle2 animations (the large ones) were handled incorrectly. The original logic looked for a normal battle animation and afterwards for a large one but there is a field in the database which indicates if the large battle animation is to be used. This fixes a visual error after defeating the knife-monkeys in El Heredero del Rey and simplifies the code (#1234).

The elevator in HOME was not working. A workaround was to smash the enter button but the proper fix was to disable action events when an autostart event is pending (#1109).

Key Input handling had two bugs (#1217):

  • When “Wait for input” was active the variable that contains the time until the input happened was not reset to 0 at the beginning.
  • When key input was non-blocking the time variable was still reset to 0 instead of ignoring it.

The Violated Heroine became stuck when walking through the East Gate. This was caused by another timing issue: An event with a lower ID than the last running event started in the same frame instead of the next one (#1132).

Aurora Wing: did not continue after the first enemy turn.  Intro has a skippable hang and first battle gets stuck after enemy turn. The game checks if a variable contains 999,999 which is the maximum variable value in RPG Maker 2000. Unfortunately, our Player defaulted to the RPG Maker 2003 maximum 9,999,999. Resulting in the variable being higher than the game expected (#1002).

In the dungeon crawler 題名のない竜退治 the interpreter got stuck after collecting an item. This was caused by an “Erase Event” call in a map event that was called by a parallel process. The interpreter continues now correctly after this case (#1243).

Celestial Silfade Story (シルフェイド幻想譚) froze sometimes after using an attack command in the custom battle system. This was caused by a misalignment of the screen which was off by 2 pixels (#1064).

Additionally, this game uses timers to show the current time of the day. The rendering was off by one frame resulting in heavy flickering (#1245).

When the Teleport or Escape skills target an area instead of a map the area is replaced with the map it belongs to. This fixes the game DQ2悪霊の勇者・製品版ver1.50 (#1253).

We found a game that abuses an implementation detail in the event comment “Set Vehicle Position”: When the party is not in a vehicle the vehicle ID of the party is -1. When -1 is used as the vehicle to move the party is moved around instead (#1257). Furthermore an intended behaviour was not implemented: When the party is in a vehicle the party is moved to together with the vehicle.

The interpreter was not refreshed when a move route altered a switch. This fixes a cutscene in Desolate City (#1232).


The hero name input scene supports now Simplified Chinese (#1239) and Russian (#1278). Additionally, the name input scene code was modified in order to always show the Latin alphabet and ExFont pages (#1284).

Chinese name input
Russian name input

Sound effects stop now when the Player returns to the title screen (#1147).

The background for battles started with the “Start Battle” event command were wrong when a random encounter happened before. This was caused by an incomplete variable reset when the former battle ended (#1224).

All RPG Maker 2003 backgrounds filled the log with “Image size out of bounds” messages because the check used RPG Maker 2000 background sizes which are smaller (#1223).

When switching back to Window mode under Linux the Window sometimes stayed fullscreen with the window rendered in a corner. This was fixed for the F4 and F5 case, but using your window manager to go to fullscreen and back still may not work as expected (#383).


When the screen was rotated while the Player was running in the background the viewport was partly offscreen after returning. This was fixed by updating to the latest version of SDL2 (#1185).

Deprecation of the Windows RT port

To make the Windows maintenance easier, we are going to switch to the vcpkg tool for compiling our dependencies after this release. This tool does not support ARM Desktop Apps which were required for the unsuccessful Windows RT. Therefore this will be the last version of EasyRPG Player that runs on the Windows RT platform.

UWP for ARM is supported by vcpkg, so if we ever release a Windows Store version of the Player, it will run on ARM, too.


The new RPG Maker 2003 1.12 picture chunks were added to liblcf (#213).

The system graphic stretch setting (tiled or stretched) was not correctly restored from savegames created by RPG_RT (#214).

A bug in liblcf was fixed which resulted in corrupted LDB files (Stream read error). The error was quite trivial: We wrote one zero-byte too much at the end of the file… Now lcf2xml can finally be used to modify databases properly (#209).

The input/output API uses now C++ iostreams instead of filenames. This makes the library suitable for the planned Player VFS and will fix unicode related problems under Windows (#206).

The liblcf code generator uses now Jinja2. This will make extending liblcf easier (#202).