Giter Site home page Giter Site logo

easyrpg / player Goto Github PK

View Code? Open in Web Editor NEW
942.0 61.0 182.0 39 MB

RPG Maker 2000/2003 and EasyRPG games interpreter

Home Page: https://easyrpg.org/player/

License: GNU General Public License v3.0

CMake 2.81% Makefile 0.47% C++ 90.93% Java 4.33% Shell 0.19% Ruby 0.27% JavaScript 0.13% HTML 0.22% PHP 0.03% M4 0.29% Batchfile 0.04% Python 0.21% Perl 0.05% Objective-C++ 0.04%
rpg-maker game-interpreter cross-platform game-engine rpg-engine game-development game-2d wii-homebrew 3ds-homebrew psvita

player's Introduction

EasyRPG Player

EasyRPG Player is a game interpreter to play RPG Maker 2000, 2003 and EasyRPG games. It uses the LCF parser library (liblcf) to read RPG Maker game data.

EasyRPG Player is part of the EasyRPG Project. More information is available at the project website: https://easyrpg.org/

Documentation

Documentation is available at the documentation wiki: https://wiki.easyrpg.org

Requirements

minimal / required

  • liblcf for RPG Maker data reading.
  • SDL2 >= 2.0.5 for screen backend support.
  • Pixman for low level pixel manipulation.
  • libpng for PNG image support.
  • zlib for XYZ image and ZIP archive support.
  • fmtlib >= 6 for text formatting/coloring and interal logging.

extended / recommended

  • FreeType2 for external font support (+ HarfBuzz for Unicode text shaping).
  • mpg123 for MP3 audio support.
  • WildMIDI for MIDI audio support using GUS patches.
  • FluidSynth for MIDI audio support using soundfonts.
  • Libvorbis / Tremor for Ogg Vorbis audio support.
  • opusfile for Opus audio support.
  • libsndfile for better WAVE audio support.
  • libxmp for tracker music support.
  • SpeexDSP or libsamplerate for proper audio resampling.
  • lhasa for LHA (.lzh) archive support.

The older SDL version 1.2 is still supported, but deprecated. Please do not add new platform code for this library.

Daily builds

Up to date binaries for assorted platforms are available at our continuous integration service:

https://ci.easyrpg.org/view/Player/

Source code

EasyRPG Player development is hosted by GitHub, project files are available in this git repository:

https://github.com/EasyRPG/Player

Released versions are also available at our Download Archive:

https://easyrpg.org/downloads/player/

Building

See BUILDING document.

Running EasyRPG Player

Run the easyrpg-player executable from a RPG Maker 2000 or 2003 game project folder (same place as RPG_RT.exe).

Bug reporting

Available options:

License

EasyRPG Player is free software available under the GPLv3 license. See the file COPYING for license conditions. For Author information see AUTHORS document.

EasyRPG Logo and Logo2 are licensed under the CC-BY-SA 4.0 license.

3rd party software

EasyRPG Player makes use of the following 3rd party software:

  • FMMidi YM2608 FM synthesizer emulator - Copyright (c) 2003-2006 yuno (Yoshio Uno), provided under the (3-clause) BSD license
  • dr_wav WAV audio loader and writer - Copyright (c) David Reid, provided under public domain or MIT-0
  • PicoJSON JSON parser/serializer - Copyright (c) 2009-2010 Cybozu Labs, Inc. Copyright (c) 2011-2015 Kazuho Oku, provided under the (2-clause) BSD license

3rd party resources

  • Baekmuk font family (Korean) - Copyright (c) 1986-2002 Kim Jeong-Hwan, provided under the Baekmuk License
  • Shinonome font family (Japanese) - Copyright (c) 1999-2000 Yasuyuki Furukawa and contributors, provided under public domain. Glyphs were added and modified for use in EasyRPG Player, all changes under public domain.
  • ttyp0 font family - Copyright (c) 2012-2015 Uwe Waldmann, provided under ttyp0 license
  • WenQuanYi font family (CJK) - Copyright (c) 2004-2010 WenQuanYi Project Contributors provided under the GPLv2 or later with Font Exception
  • Teenyicons Tiny minimal 1px icons - Copyright (c) 2020 Anja van Staden, provided under the MIT license (only used by the Emscripten web shell)

player's People

Contributors

20kdc avatar albeleon avatar blisterb avatar bszili avatar carstene1ns avatar christianbreitwieser avatar dblobster avatar enewey avatar fdelapena avatar fmatthew5876 avatar ghabry avatar glynnc avatar jetrotal avatar johannschopplich avatar kakurasan avatar lobomon avatar lotharsm avatar marianognu avatar mikuchan03 avatar rikku2000 avatar rinnegatamante avatar rohkea avatar scurest avatar shin-nil avatar sorlok avatar take-cheeze avatar tondorian avatar tyrone-sudeium avatar vgvgf avatar zegeri avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

player's Issues

Data not reset when returning to Title Scene

Resuming an old scene on the stack causes the Start()-Function not to be called (thats on purpose).
But the Title Scene uses the Start-Function to Reset the Data on a game reset. So the Data is never cleared. Thats bad because switches and variables are not reset e.g.

Two ways to fix this:
Clear the stuff in function resume (but this is called after TransitionIn, is this a problem?) or introduce a new function that is called on a Scene resume before TransitionIn (any suggestion for naming?).
2nd one is better imo. Maybe there are other scenes too that want to do stuff on Resume before fading in. How about "Continue"?

Reported by Blathers, thx.

Events commands order is not right

In map 1, create an event that teleport to map2 and then displays the text “priority test”.

RM2K behavior :

  • The player is teleported to map2 and then the text “priority test” is displayed.

EasyRPG behavior :

  • The text “priority test” is displayed and then the player is teleported to map2.

Improve autotools

  • Fix library linking configuration and remove forced --no-as-needed (#136)
  • Fix readers library path without setting --with-readers prefix (when the user made install for readers without prefix)
    xygen for optional Doxygen docs generation

Pictures attached to map don't work

there is a feature in 2k3 of Show Picture that let you fix the image to a map,
so the picture don't move with the hero, and its nice for make light effects and shadow

in easyrpg player this don't work and the picture move with the hero

Autotiles ignore transparency

This happens in the "door selection room" after entering the dream in Yumme Nikki.

It's reported that this also happens in other games like "Dragon Slayer Gaiden"

Possible that its not only related to tilesets, but havnt seen this yet with other graphics.

This is not caused by a "file not found" issue. Player terminates since 0.1 when an image is missing.

Use FluidSynth instead of internal timidity from SDL_Mixer

FluidSynth

SDL_Mixer supports FluidSynth since version 1.2.12.
FluidSynth has better MIDI support than the forked version of Timidity used in SDL_Mixer.

We need it to support some MIDI effects made in RPG Maker, not supported by the basic Timidity:

  • Seeking support (there is a command in RPG Maker to memorize MIDI position).
  • Possibility to configure loop on event 111 (used by RTP songs).
  • Change speed support.

SoundFont support

Furthermore, FluidSynth supports SoundFonts, internal timidity only supports GUS Patches (.pat) and freepats package is incomplete and heavy. We can use a lighter, more complete, SoundFont. There is a enough good free SoundFont on major GNU/Linux distributions: TimGM6mb.sf2, from the musescore-soundfont-gm package, used by the great MuseScore music notation editor. Soundfont is 6 MB only, several times smaller than the incomplete freepats.

Performance tuning

Fluidsynth command line parameters for less CPU and RAM usage:

  • Disable chorus and reverb for less CPU usage.
  • Increase buffer size for less CPU usage.
  • Reduce buffer count for less RAM usage.

Miscellaneous player tweaks:

  • Disable real time priority, prevents warning.
  • Disable MIDI in, not needed for playing.
  • Disable shell, not needed for playing.

Command line example:

fluidsynth \
    --audio-bufcount 3 \
    --audio-bufsize 8192 \
    --audio-driver alsa \
    --chorus no \
    --reverb no \
    -o audio.realtime-prio=0 \
    --no-shell \
    --no-midi-in \
    /usr/share/sounds/sf2/TimGM6mb.sf2 \
    Music/Battle1.mid

Results:

  • FluidSynth application RAM usage: About 18 MB.
  • CPU usage: 15-25% on a 800 MHz CPU.

Show Choice Command broken

The Show Choice command always only detects if the first option was selected.
If another option was select

Bug is in:
Game_Interpreter::ContinuationChoices
Seams to be related to the which-variable.

To test it try just open a choice Dialog and select the 2nd option. The Choice Dialog will reopen...

(assign to me)

Implement project browser / loader

When player executable is not in a game folder, allow to browse and load different games from the same executable, like ScummVM does.

This is important for systems without easy to edit file browser, like embedded devices.

A GUI design and a cross file system capable file browser implementation will be needed.

Picture magnification lag

Detected a bug that decrease the FPS a lot:

Map without pictures: 60FPS
Map with a picture with 50 of magnification: 60FPS
Map with a picture with 100 of magnification: 60FPS
Map with a picture with 120 of magnification: 17FPS
Map with a picture with 200 of magnification: 7FPS
Map with a picture with 300 of magnification: 3FPS

Player crashes when pushing decision button on top or bottom map borders

You need to have player sprite orientation to the border. It looks like counter flag check gets some unexpected value.

In any case this check should be triggered because there is no events out of the map.
Output:

easyrpg-player: game_map.cpp:348: bool Game_Map::IsCounter(int, int): Assertion `tile_id >= 10000' failed.

RMG2000.fon corrupts heap

When using RMG2000.fon (the 2nd font installed by the RPG Maker, RM2000.fon works fine) the Visual Studio Debugger reports a heap corruption.

Edit: This also happens when I move RM2000.fon in the Font folder, loading from C:\Windows\Fonts works fine. Maybe also file finder related?

Call stack:

PlayerD.exe!_CrtIsValidHeapPointer(const void * pUserData) Line 2036
PlayerD.exe!_free_dbg_nolock(void * pUserData, int nBlockUse) Line 1322
PlayerD.exe!_free_dbg(void * pUserData, int nBlockUse) Line 1265
PlayerD.exe!free(void * pUserData) Line 49
PlayerD.exe!pixman_image_unref(RPG::MoveRoute * image, int common, Game_Interpreter *) Line 210
PlayerD.exe!PixmanBitmap::~PixmanBitmap() Line 280
PlayerD.exe!PixmanBitmap::`scalar deleting destructor'(unsigned int)
PlayerD.exe!Text::Draw(Surface * dest, int x, int y, int color, std::basic_string<wchar_t, [...]> wtext, Surface::TextAlignment align) Line 160
PlayerD.exe!Surface::TextDraw(int x, int y, int color, std::basic_string<wchar_t, [...]> wtext, Surface::TextAlignment align) Line 800
PlayerD.exe!Surface::TextDraw(int x, int y, int color, std::basic_string<char, [...]> text, Surface::TextAlignment align) Line 806
PlayerD.exe!Window_Command::DrawItem(int index, Font::SystemColor color) Line 52
PlayerD.exe!Window_Command::Refresh() Line 45
PlayerD.exe!Window_Command::Window_Command(std::vectorstd::basic_string<char,[...]> commands, int width, int max_item) Line 38
PlayerD.exe!Scene_Title::CreateCommandWindow() Line 212
PlayerD.exe!Scene_Title::Start() Line 89
PlayerD.exe!Scene::MainFunction() Line 69
PlayerD.exe!Player::Run() Line 131
PlayerD.exe!SDL_main(int argc, char * * argv) Line 38

Allow to set picture transparency after bitmap cache

Current design caches images and enables or disables image transparency from image type. However there are commands like show picture that allows to enable or disable this transparency after cache:

  • Redesign cache mechanism to allow pictures setting transparency.
  • Update show picture command interpretetation to show right image transparency setting.

Text Rendering is Slow

We simulate RPG_RT rendering by drawing glyph by glyph to get monospace for any font. This makes it easier to draw the system gradient and font shadow and you can calculate position of exfont easily.
But this approach is ultra slow.
Not noticable in Release Builds, but debug builds run extreme slow.

Maybe improve this by using a Cache?!

[assign to me]

Name Input: Katakana and Hiragana

Blathers was so kind to provide a list of the glyphs used in the japanese RPG Maker input dialog:
http://i.imgur.com/LJB4q.png

Katakana:
ア イ ウ エ オ        ガ ギ グ ゲ ゴ
カ キ ク ケ コ        ザ ジ ズ ゼ ゾ
サ シ ス セ ソ        ダ ヂ ヅ デ ド
タ チ ツ テ ト        バ ビ ブ ベ ボ
ナ ニ ヌ ネ ノ        パ ピ プ ペ ポ
ハ ヒ フ ヘ ホ        ァ ィ ゥ ェ ォ
マ ミ ム メ モ        ッ ャ ュ ョ ヮ
ヤ ユ ヨ ワ ン        ー ~ ・ ゠ ☆
ラ リ ル レ ロ        ヴ

Hiragana:
あ い う え お        が ぎ ぐ げ ご
か き く け こ        ざ じ ず ぜ ぞ
さ し す せ そ        だ ぢ づ で ど
た ち つ て と        ば び ぶ べ ぼ
な に ぬ ね の        ぱ ぴ ぷ ぺ ぽ
は ひ ふ へ ほ        ぁ ぃ ぅ ぇ ぉ
ま み む め も        っ ゃ ゅ ょ ゎ
や ゆ よ わ ん        ー ~ ・ ゠ ☆
ら り る れ ろ         ヴ

Use "git describe" to display a nice rev-number

After creating our first tag (0.1) "git describe" can be used to get a more readable revision number 0.1-### (where ### is the number of commits since 0.1).

The output of "git describe" should be written in some header file and then be included by player and e.g. displayed in the title bar.

This makes it easier for us to figure out which version somebody uses (Maybe also write it in the PNG-tEXT chunk under "Software" if he used our screenshot function and we cant see the title bar). And to detect if somebody made local changes (e.g. by adding an 'M' after the rev number)

Fix Title scene

Title scene has some issues as seen in several games:

  • Menu width is not being calculated properly
  • Menu position is not OK
  • Menu position for HideTitle is not OK
  • Hide background with HideTitle and show BackColor instead
  • Fix transition (fade in, fade out) and window animation timing

Parallel/automatic common event don't work

1)Create a new game
2)Add a common event starting automaticly or in parallel
3)In this event, place the message “test”.

Expected behavior:
The message “test” should repeat endlessly.

Player.exe behavior:
No message is displayed.

NPC animation without move

If there is an NPC with the option of "move without walk" (as the npcs in FF4 for example)
the npcs appear fixed and don't make any move

Picture color RGB issue

When you show a picture with
color:
red:0
green:0
blue:0
the final picture appear as if these values was 100

Jump for an event

If you put an event to jump with this

stop animation
don't move direction
move character
start jump
up
up
down
down
stop jump

in 2k3, the event jump and make well the animation.
in easy the event move up 2 tiles, and go down 2 tiles, like if no
"stop animation" "don't move direction" "start jump" existed

Battle System

We already have a battle system by glynnc but it doesnt work well for RPG2k (has many bugs).

Use unobtrusive notification stack on top of the screen for warning messages

The motivation of this is to stop annoying "press any key to continue" for every missing file.

Use shaded font to be readable on lighter scenes.

This feature should not be applied for error messages (with application exiting), use native message box where available to match RPG_RT behavior. On systems without native message boxes, use some readable text and press key before exit.

Show game title on window manager

Current behavior:

EasyRPG Player - XX FPS

It should be:

Game Title - EasyRPG Player - XX FPS
Or maybe:
Game Title - XX FPS - EasyRPG Player
Toggle FPS hotkey is F2

Game title could be placed into application bar name if not being used, not only in window manager caption.

Game title is retrieved from GameTitle key from [executable name].ini, title on RPG_RT.lmt root node should be ignored.

Referencing deleted move events crashes

Simple Example script:

Teleport to Map0002
Move Event: EV0001 (on Map0001)

Result:
RPG2k: Error message invalid event
EasyRPG: Crash (should be warning message with information about event)

FileFinder crashes when files are missing

There is some strange problem in the FileFinder. It crashes the player when Save01.lsd is missing.
The same happens when the database is missing so this seams to be a general problem with the finder?

label problem

If in rpg maker 2003 exist this in an event in parallel process

Label 1
Call to label 1

The game works fine (maybe is no good to use but don't appear any problem)

If in easyrpg player this appear all freeze and you need close the player

Sound tempo variation bug

If a sound have a 110% of pitch, it sounds in easyrpg player as 130%-140% of pitch,

If a sound have a 100% of pitch, it sounds in easyrpg player as 140% of pitch,
If a sound have a 80% of pitch, it sounds in easyrpg player as 140% of pitch,

step bug

When you're walking in rpg maker 2003, in every step it show "right frame and center frame" "left frame and center frame" etc, in easy rpg every step show every frame alone,

for example in 2k3
step 1- left frame and center frame
step 2- right frame and center frame
step 3- left frame and center frame

in easy
step 1- left frame
step 2- center frame
step 3- right frame

Font fallback mechanism

The player only loads the first font it finds via the file finder.
Maybe it would be useful to load the other fonts too so you can get proper japanese rendering when the first loaded font does not contain any japanese glyphs. ;)

Not sure if Freetype has a fallback already implemented but its likely that it has one...

Refactor code comments to make them compatible with default doxygen settings

Doxygen is not parsing well comments like this:

/////////////////////////////////////////////////////////////////////////////

Because at least /// triggers Doxygen.

RGSS does:

#==============================================================================
# ** Class_Name
#------------------------------------------------------------------------------
#  This class does something,
#  etc. Refer to "$class_name" for the instance of this class.
#==============================================================================

class Class_Name
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------

We should go as we already made for Readers:

/*
 * License header
 */
// Non-doxygen comments
/** one line doxygen comments (for vars and enum members) */
/**
 * Multi-line doxygen comment
 *
 * @param foo bar
 * @param bar baz
 */

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.