EasyRPG Player 0.5.1 “Magic Water”

Half a year after the 0.5 release we provide the first bugfix release which brings interpreter fixes (as usual), a few new features and resolves a crash we encountered in 0.5.

Crashes fixed

Unfortunately our Tone performace improvements had a bug which resulted in a crash when the ChipSet is smaller than the default size and the tone is changed. This broke at least Aëdemphia and Mystic Star (#1037, #1048).

Audio changes

This time the audio subsystem changes are not as significant as for 0.5.0. For the normal user basicly nothing changed. The audio system uses now a generic code which handles all the mixing of music and sound effects. This allows us to heavily simplify the code of our ports.

SDL mixer is now an optional dependency. For the Wii version we dropped SDL mixer completely, the same will happen soon for the Android version. The 3DS and Vita code were improved and the 3DS version finally supports MIDI playback and all noise-bugs when playing sound effects should be gone. The new Vita audio code results in a much better performance and less lag (#968, #1100).

Map interpreter

Screen shake, a very elementary feature of RPG Maker, got implemented. Besides Video playback this was the last event command that wasn’t supported (#565). You can see a screen shake in the video below.

The move command “Change graphic” incorrectly changed the current movement frame to “middle”. The frame is now untouched which fixes a visual issue in the intro scene with the red haired woman in Velsabor (#658) and a glitchy door open animation in Deep 8 (#1114).

The PicPointer patch got implemented (#1033). This is a quite popular modification of RPG_RT which allows using Variables to point at pictures. This fixes the games Aëdemphia, Sternenkindsaga and probably many more.

The ship in Dunkle Schatten never arrived to rescue the party. Movement event commands for vehicles were simply not working (#1050).

The method “Remove all equipment” of event command “Change Equipment” was not implemented. (#1050).

Picture rotations and sine wave effects were not stopping when a “Move Picture” command didn’t contain any effect. Additionally rotations take care of the remaining rotation time now and stop the image always when it is at the initial position, if there is not enough time left for another full rotation. (#1046, #1063)

The custom battles in Razas did not start because they are invoked through a parallel event which does a teleport followed by a transition. Parallel events of old maps stop executing forever when they are interrupted, which was the case for transitions. We fixed this behaviour (#1032).

Due to a bug in our performance improvement code of 0.5 we broke the transparency when rotating images that had no alpha channel. This affected the UFOs in Yume Nikki (#1077).

UFOs in Yume Nikki fixed in 0.5.1

The room “SH1” in HOME hanged our Player, because the code to move events away lacked a sanity check and this room contained more then 10 cows which push each other (#1082).

The boat minigame in Wolfenhain did not start because boarding of vehicles during a teleport resulted in a hang (#1079).

When the hero is placed directly on a “Same level as hero” touch event the event is not executed anymore. This fixes a softlock in Rip-The-Blood’s Ford in Space Funeral (#1084) and allows further progress in the game Sternenkindsaga (#1086).

Touhou Alive (東方ALIVE) did a huge amount of out-of-bounds reads in the variable array. This array is dynamically resized but our code was not optimized for this many resizes resulting in a significant framedrop (#920).

Events that are above or below the hero and have start condition “Hero Touch” don’t trigger anymore while a move route is executed. This fixes incorrect teleports into cities while travelling with the airship (which is a scripted airship, not a vehicle) in Mystic Star (#1051).

The event command “Change Event Location” supports now changing of the facing direction for the “Constant location”-case (#1118).

The tutorial of The Huntress of the Hollow was impossible to continue because a bug in the handling of “Change Class” resulted in the Scout skill being removed, which must be invoked once to proceed in the tutorial battle (#1131). Additionally we fixed the “level up” and “skill learned” message box behaviour when using “Change Class” to match RPG_RT.

Battle interpreter

The “Enable Combo” battle command was implemented (#945). Skill reflection and Skill (de)buff are supported now by the battle system (#1069).

A really annoying bug in our RPG Maker 2000 battle system resulted in actors executing multiple attacks per turn. We were aware of this bug since a year but had no idea what was causing it. In the end the cause was that we removed actions from the wrong side of the action list (#933).

The hit rate calculation for normal attacks and the calculation of fatigue were incorrect (#1055). The escape algorithm was fixed, escaping is much more unlikely and escape correctly plays a sound effect now (#1103).

The skill “Eule” was not working in Wolfenhain due to a bug in the check for “BattleCommand used” (#1080).

Two additional game breaking bugs in The Huntress of the Hollow were fixed. We didn’t handle the “Abort Battle” command correctly and executed the Victory handler instead which resulted in an incorrect cutscene (#1127). The battle interpreter halts now immediately when any battle end condition (Victory or Lose) is fulfilled. This game called a common event after killing all enemies and this event hanged the interpreter. Now the event is not called anymore because killing of the enemies is a victory condition (#1129). Note that this is actually a game bug… ;-)

The “Preemptive Attack” setting is now respected when starting battles in RPG Maker 2000 (#1137).

Other improvements

Our built-in font Shinonome got a proper Wave dash (〜) for japanese and missing glyphs are now indicated by a replacement glyph. Additionally some glyphs were visually improved (#1045, #1047).

Here you can see the replacement glyph � and the correct wavedash.
Here you can see the replacement glyph � and the correct wavedash.
Visual improvements to the glyphs
Visual improvements to the glyphs

The WenQuanYi font was added to Shinonome. This allows proper rendering of most chinese glyphs (#1058).

Chinese glyphs are now available in our embedded Shinonome font
Chinese glyphs are now available in our embedded Shinonome font

The FPS counter got a semi-transparent background to make it easier readable on bright backgrounds (#1049).

The keys Page Up and Page Down are supported now in single column selections (like the game browser or the menu). This makes scrolling in long lists more convenient (#1049).

When the map was looping, event tiles appeared half a tile too late (#716).

Due to an error in our rendering code, parallax backgrounds jumped sometimes (#761). The same issue resulted in an incorrect background in the designer room in Embric of Wulfhammer’s Castle (#961).

The rendering order of Pictures and Battle Animations depends on the version of RPG Maker used. Currently EasyRPG renders battle animations behind pictures but since RPG Maker 2003 1.05 and RPG Maker 2000 1.50 the order was swapped. We added additional heuristic to handle this edge case (#1031). This is mostly noticable in the battle system of Live Together.

The monster (which is a picture) is correctly rendered behind the menu (which is a battle animation)
The monster (which is a picture) is correctly rendered behind the menu (which is a battle animation)

VX-Ace like charset behaviour (width and height are calculated based on the image proportions) can be enabled now by prefixing the filename with a $ (#1067). This is just a visual change, the Player won’t adjust the rendering order for too large CharSets.

Support for large charsets in 0.5.1

The “redo” function in the infamous reordering scene was broken and cancel correctly removes the last selected actor now (#1072).

The calculation of the string length when writing LSD files was incorrect when the strings contained non-ascii characters. This was no problem for our Player, but RPG_RT refused to read these savegames and reported “Stream read error” (#1090).

A very rudimentary input record and replay functionality was implemented. This functionality is not useful for general use yet and is used for testing purposes (#1096).

The random number generator (RNG) uses modern C++11 random APIs now which should improve the randomness and the RNG is now portable which means you get the same sequence of random numbers on any platform. This is important to get deterministic replays (#1104).

The item usage count (for items with more then one use) was handled incorrectly which resulted in infinitely usable items when loading a RPG_RT savegame (#1087).

It is now possible to speed up the game (3x) by pressing “F” or through a new touch button on Android (#1010). Because the music speed stays normal this can break a very small amount of games which use the music position in events.

Shop merchants payed the full price when selling items. The deal is now more in the interest of the merchant: The price is halved (#1110).

Event IDs were not correctly restored when loading a savegame. This resulted sometimes in the warning “Event ID 10005 is invalid” because ID 10005 refers to the current event and for this lookup you need a proper event ID. This resulted in minor issues in Yume 2kki that were fixable by leaving the virtual computer (#1131).

Panoramas were not correctly rendered when a savegame created by RPG_RT was loaded (#1071).

Improvements to RTP handling (#1139):

  • The environment variables for adding RTP paths support now multiple directories (delimited by “;” on Windows and “:” everywhere else).
  • The official English RPG Maker 2000 RTP is now supported.
  • Our EasyRPG RTP is now supported (though, still quite incomplete).

Basic support for mouse and touch input was added. This is currently opt-in and must be enabled through the command line arguments “enable-mouse” and “enable-touch”. These features are the first step for a multi-platform touch UI (#1057).

Android

The Android game browser supports displaying of title images in XYZ format now (#1074).

Our Android gamebrowser with XYZ-image support. Ara Fell uses the "Skip title scene" feature of newer RPG Maker versions and has no image in the title folder at all.
Our Android gamebrowser with XYZ-image support. Ara Fell uses the “Skip title scene” feature of newer RPG Maker versions and has no image in the title folder at all.

The “Report a bug” function crashed on Android 7 due to changes in the security model (#1105).

Wii

The Wii version finally supports automatic encoding detection through the ICU library. The Wii version was the only one that lacked ICU, due to the CPU of the Wii which is a PowerPC. PowerPC is “Big endian” and most other platforms (like PC or Android) are “Little Endian”. The endianess influences how bytes are stored, e.g. Big stores as AA BB CC DD and Little as DD CC BB AA, so you have to swap the data (we do this when reading LDB and other files). To compile for Wii we “cross compile”, that means we use a compiler on our PC, that generates PowerPC code for the Wii (that’s faster and more convenient), but ICU doesn’t support mixed endian builds (because their build system involves running some tools on the PC which don’t support byte swapping). But we were finally able to find the bug in the ICU build system and now have a working version for the Wii (#1095).

PSVita

The Vita version supports now shaders. To toggle them you have to use the 4 corners of the screen. This may not be very intuitive but we still lack a generic settings Ui :). The rendering runs now in an extra render thread, this means the framerate slightly improves and shader effects will not slow down the Player at all (#1078).

liblcf

A heap corruption bug in “ReadString” was fixed (#194). The usual safety rule apply: Don’t run content from untrusted sources through liblcf or in EasyRPG Player. The Player is probably easy to exploit using a malformed file but we try to keep liblcf safe :).

The calculation of the event size for non-ascii strings was wrong. This was the same bug as in the Player but in this case it fixes the problem in other tools like xml2lcf (#196).

The XML converter for LMU (Map) files doesn’t write an empty ID field anymore (#186), which was never intended to be used anyway and caused confusion.

A Chinese translation of Wadanohara was detected as encoding GB18030 which is not included in the ICU version used by most of our ports and resulted in an error. This encoding is now handled as Simplified Chinese (codepage 936) (#187). This game is a really bad mojibake-offender: To get correct filenames you have to extract the japanese Wadanohara archive with a Simplified Chinese encoding.

liblcf doesn’t update the timestamp value of savegames anymore. This was problematic because lcf2xml wrote a new timestamp each time the files were converted instead of using the original one. EasyRPG Player sets the timestamp correcty during save now (#195).

The default value for a Battle2 animation_id is now “1”. This fixes an invalid animation error (e.g. in Space Funeral: Legend of Earth Birth) when the first animation is used as Battle 2 (#193).