games-engines/easyrpg-player: add 0.8

Signed-off-by: Lucio Sauer <watermanpaint@posteo.net>
This commit is contained in:
Lucio Sauer committed 2023-09-02 21:46:30 +02:00
1 parent 306fdd3862
commit a07495007a
11 files changed
+563 -10

No files matched your search

+1
View File
@@ -1 +1,2 @@
DIST easyrpg-player-0.7.0.tar.gz 6426198 BLAKE2B fc08962cab0842a53535472fbf348d3c46fb71108b14655cb98d7f04a3a0f441fae644ab109e34733f55ce834d524fbd424ea30e80585e5e4e7f69b15041fe63 SHA512 6c2a5cedbd2022517f2cfb2e3bebc9773addb93cbf3e897fb57f31baf94c644bf4437ceff5be578b3a564e8a5f72c448dd0391bc418658d517ca755cab5ec97f
DIST easyrpg-player-0.8.tar.xz 4966028 BLAKE2B ff445f831a879fe7562e98a4e5a0c973ef8d750236cd2c17bf65b21135f896ee7edd0f0137b88cf0ed417fcfd5729358a63d61b34d9ece017ba4fdc85efaa445 SHA512 b1caf45284e29706bdd885d132fe7605d1f2972a3b3e238ba2fbd40058ae1c31aac5277fced23bd216153feb9a440a2652ef696b6b310b907fbc3c1376aa03ad
@@ -0,0 +1,189 @@
# Copyright 2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake readme.gentoo-r1 xdg
DESCRIPTION="RPG Maker 2000/2003 and EasyRPG games interpreter"
HOMEPAGE="https://easyrpg.org/player/
https://github.com/EasyRPG/Player"
SRC_URI="https://easyrpg.org/downloads/player/${PV}/${P}.tar.xz"
# EasyRPG Player itself is GPLv3+.
# The program's logos are CC-BY-SA 4.0.
# --
# The program bundles several 3rd-party libraries.
#
# FMMidi files - licensed under the 3-clause BSD license.
# Since the files do not end up in the executable due to the configuration,
# we ignore it.
# - src/midisequencer.cpp
# - src/midisequencer.h
# - src/midisynth.cpp
# - src/midisynth.h
#
# dr_wav files - licensed under (public-domain or MIT-0):
# - src/external/dr_wav.h
# rang files - licensed under the Unlicense:
# - src/external/rang.hpp
# Note that both dr_wav and rang are un-bundled and replaced with versions
# provided by Gentoo packages. However, since these are header-only libraries,
# their licenses are still included in the LICENSE variable.
#
# PicoJSON is used only for Emscripten builds (and unbundled before build).
# --
# The program also uses a couple of 3rd-party fonts. Since these are not
# loaded at runtime, but rather baked into the executable at compile time,
# their licenses are also added to the License tag.
#
# Baekmuk files - licensed under the Baekmuk license:
# - resources/shinonome/korean/
#
# Shinonome files - released into the public domain:
# - resources/shinonome/
#
# ttyp0 files - licensed under the ttyp0 license,
# a variant of the MIT license:
# - resources/ttyp0/
#
# WenQuanYi files - licensed under
# GPLv2-or-later with Font Embedding Exception:
# - resources/wenquanyi/
#
#
# The upstream tarball contains also "Teenyicons", under the MIT license,
# but those are used only for Emscripten builds.
LICENSE="Baekmuk CC-BY-4.0 GPL-2+-with-font-exception GPL-3+ public-domain
TTYP0 Unlicense || ( MIT-0 public-domain )"
SLOT="0"
KEYWORDS="~amd64"
IUSE="doc fluidsynth harfbuzz +sound truetype +wildmidi"
REQUIRED_USE="
fluidsynth? ( sound )
harfbuzz? ( truetype )
wildmidi? ( sound )
"
PATCHES=(
"${FILESDIR}"/${P}-backport-unbundle-dr_wav.patch
"${FILESDIR}"/${P}-backport-unbundle-rang.patch
"${FILESDIR}"/${P}-backport-update-for-fmt10.patch
"${FILESDIR}"/${P}-unbundle-picojson.patch
)
DEPEND="
dev-cpp/rang
>=dev-games/liblcf-${PV}
dev-libs/libfmt:=
media-libs/libpng:=
>=media-libs/libsdl2-2.0.5[joystick,sound?,video]
sys-libs/zlib
x11-libs/pixman
harfbuzz? ( media-libs/harfbuzz:=[truetype] )
truetype? ( media-libs/freetype:= )
sound? (
media-libs/dr_wav
media-libs/libsndfile
media-libs/libvorbis
media-libs/opusfile
media-libs/speexdsp
media-sound/mpg123
media-libs/libxmp
fluidsynth? ( media-sound/fluidsynth )
wildmidi? ( media-sound/wildmidi )
!fluidsynth? ( !wildmidi? ( media-libs/alsa-lib ) )
)
"
RDEPEND="${DEPEND}
fluidsynth? ( media-sound/fluid-soundfont )
"
BDEPEND="virtual/pkgconfig
doc? ( app-doc/doxygen[dot] )
"
DOC_CONTENTS="
EasyRPG Player chooses its library for MIDI output in increasing order:
1. FluidSynth
2. WildMIDI
3. ALSA
With all three enabled, it first tries to send MIDI messages to FluidSynth. If
that fails it falls back to WildMIDI then to ALSA. Currently, the capability to
find and configure a suitable MIDI client through ALSA is limited. It is
recommended to enable one of the other backends, otherwise you are likely to
have no sound.
This package enables support for the ALSA backend only if the other two are
disabled.
For the requirements for suitable ALSA MIDI clients please reference the source
code at src/platform/linux/midiout_device_alsa.cpp
"
src_prepare() {
# Install prebuilt manpage instead of rebuilding it conditionally.
sed -i -e "s/if(ASCIIDOCTOR_EXECUTABLE)/if(FALSE)/" \
-e "s/SUPPORT_AUDIO=1/SUPPORT_AUDIO=$(usex sound 1 0)/" CMakeLists.txt || die
cmake_src_prepare
}
src_configure() {
local mycmakeargs=(
-DPLAYER_BUILD_LIBLCF=OFF
# Use the first default choice
-DPLAYER_WITH_SPEEXDSP=$(usex sound)
-DPLAYER_WITH_SAMPLERATE=no
-DPLAYER_WITH_MPG123=$(usex sound)
-DPLAYER_WITH_OGGVORBIS=$(usex sound)
-DPLAYER_WITH_OPUS=$(usex sound)
-DPLAYER_WITH_XMP=$(usex sound)
# Avoid vendoring, use FluidSynth or WildMIDI (or ALSA) instead
-DPLAYER_ENABLE_FMMIDI=no
-DPLAYER_WITH_FLUIDSYNTH=$(usex fluidsynth)
-DPLAYER_WITH_WILDMIDI=$(usex wildmidi)
-DPLAYER_WITH_NATIVE_MIDI=$(usex sound $(usex fluidsynth no $(usex wildmidi no yes)) no)
# Serves as fallback when FluidSynth isn't found
-DPLAYER_WITH_FLUIDLITE=no
# Enable dr_wav for faster WAV decoding, fall back to libsndfile
-DPLAYER_ENABLE_DRWAV=$(usex sound)
-DPLAYER_WITH_LIBSNDFILE=$(usex sound)
# The text shaping engine is strictly dependent on the availability
# of TrueType fonts
-DPLAYER_WITH_HARFBUZZ=$(usex harfbuzz)
-DPLAYER_WITH_FREETYPE=$(usex harfbuzz yes $(usex truetype))
)
cmake_src_configure
}
src_compile() {
cmake_src_compile
if use doc; then
einfo "Building the documentation might take a while..."
cmake_build doc
fi
}
src_test() {
cmake_build check
}
src_install() {
cmake_src_install
if use doc; then
docinto /usr/share/doc/${PF}/html
dodoc -r "${BUILD_DIR}"/doc/*
fi
readme.gentoo_create_doc
}
pkg_postinst() {
xdg_pkg_postinst
readme.gentoo_print_elog
}
@@ -0,0 +1,43 @@
commit d2e92225ad0af2d52e8884b64ba2bac1b6006377
Author: Ghabry <gabriel+github@mastergk.de>
Date: Thu May 4 16:32:42 2023 +0200
Do not vendor dr_wav header if there is a system header available
Fedora unbundles our dr_wav because they have a system header
--- a/src/decoder_drwav.cpp
+++ b/src/decoder_drwav.cpp
@@ -21,7 +21,13 @@
#ifdef WANT_DRWAV
#define DR_WAV_IMPLEMENTATION
-#include "external/dr_wav.h"
+// Use system dr_wav header if available
+#if __has_include(<dr_wav.h>)
+# include <dr_wav.h>
+#else
+# include "external/dr_wav.h"
+#endif
+
DrWavDecoder::DrWavDecoder() {
music_type = "wav";
--- a/src/decoder_drwav.h
+++ b/src/decoder_drwav.h
@@ -24,9 +24,12 @@
// Headers
#include "audio_decoder.h"
#define DR_WAV_NO_STDIO
-#include "external/dr_wav.h"
-#include <string>
-#include <memory>
+// Use system dr_wav header if available
+#if __has_include(<dr_wav.h>)
+# include <dr_wav.h>
+#else
+# include "external/dr_wav.h"
+#endif
/**
* Standalone audio decoder powered by dr_wav
@@ -0,0 +1,23 @@
commit 63029163d86224aa4f9da798c760b1836d73f62b
Author: Ghabry <gabriel+github@mastergk.de>
Date: Thu Jun 8 12:54:33 2023 +0200
rang: Use system header if available
--- a/src/output.cpp
+++ b/src/output.cpp
@@ -31,7 +31,13 @@
#elif defined(__vita__)
# include <psp2/kernel/processmgr.h>
#endif
-#include "external/rang.hpp"
+
+// Use system rang header if available
+#if __has_include(<rang.hpp>)
+# include <rang.hpp>
+#else
+# include "external/rang.hpp"
+#endif
#include "output.h"
#include "graphics.h"
@@ -0,0 +1,208 @@
commit a4672d2e30db4e4918c8f3580236faed3c9d04c1
Author: Ghabry <gabriel+github@mastergk.de>
Date: Sun May 14 14:41:13 2023 +0200
Fix building with fmtlib 10
to_string_view is a private API since fmt10.
The new API only works properly since fmt8.
Added casts to enum formating as they are not converted automatically anymore.
Fix #3002
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8507e5d1..28d595a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -345,6 +345,7 @@ add_library(${PROJECT_NAME} OBJECT
src/state.cpp
src/state.h
src/std_clock.h
+ src/string_view.cpp
src/string_view.h
src/system.h
src/teleport_target.h
diff --git a/Makefile.am b/Makefile.am
index bed1b219..4c477489 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -327,6 +327,7 @@ libeasyrpg_player_a_SOURCES = \
src/state.cpp \
src/state.h \
src/std_clock.h \
+ src/string_view.cpp \
src/string_view.h \
src/system.h \
src/teleport_target.h \
diff --git a/src/game_interpreter.cpp b/src/game_interpreter.cpp
index 7877d77f..7ae056cc 100644
--- a/src/game_interpreter.cpp
+++ b/src/game_interpreter.cpp
@@ -2187,7 +2187,7 @@ bool Game_Interpreter::CommandChangeVehicleGraphic(lcf::rpg::EventCommand const&
Game_Vehicle* vehicle = Game_Map::GetVehicle(vehicle_id);
if (!vehicle) {
- Output::Warning("ChangeVehicleGraphic: Invalid vehicle ID {}", vehicle_id);
+ Output::Warning("ChangeVehicleGraphic: Invalid vehicle ID {}", static_cast<int>(vehicle_id));
return true;
}
@@ -2261,7 +2261,7 @@ bool Game_Interpreter::CommandSetVehicleLocation(lcf::rpg::EventCommand const& c
// 0 because we adjust all vehicle IDs by +1 to match the lcf values
Output::Debug("SetVehicleLocation: Party referenced");
} else {
- Output::Warning("SetVehicleLocation: Invalid vehicle ID {}", vehicle_id);
+ Output::Warning("SetVehicleLocation: Invalid vehicle ID {}", static_cast<int>(vehicle_id));
return true;
}
}
@@ -3494,7 +3494,7 @@ bool Game_Interpreter::CommandConditionalBranch(lcf::rpg::EventCommand const& co
Game_Vehicle* vehicle = Game_Map::GetVehicle(vehicle_id);
if (!vehicle) {
- Output::Warning("ConditionalBranch: Invalid vehicle ID {}", vehicle_id);
+ Output::Warning("ConditionalBranch: Invalid vehicle ID {}", static_cast<int>(vehicle_id));
return true;
}
diff --git a/src/game_interpreter_map.cpp b/src/game_interpreter_map.cpp
index 6c193c2f..0b47a3db 100644
--- a/src/game_interpreter_map.cpp
+++ b/src/game_interpreter_map.cpp
@@ -345,7 +345,7 @@ bool Game_Interpreter_Map::CommandEndShop(lcf::rpg::EventCommand const& /* com *
bool Game_Interpreter_Map::CommandShowInn(lcf::rpg::EventCommand const& com) { // code 10730
int inn_type = com.parameters[0];
- auto inn_price = com.parameters[1];
+ int inn_price = com.parameters[1];
// Not used, but left here for documentation purposes
// bool has_inn_handlers = com.parameters[2] != 0;
diff --git a/src/output.h b/src/output.h
index 90e11189..78ff3c0c 100644
--- a/src/output.h
+++ b/src/output.h
@@ -22,17 +22,8 @@
#include <string>
#include <iosfwd>
#include <fmt/core.h>
-#include <lcf/dbstring.h>
-
#include "filesystem_stream.h"
-namespace lcf {
-// FIXME: liblcf doesn't depend on fmt, so we need to add this here to enable fmtlib support for lcf::DBString
-inline fmt::basic_string_view<char> to_string_view(const lcf::DBString& s) {
- return to_string_view(StringView(s));
-}
-}
-
enum class LogLevel {
Error,
Warning,
diff --git a/src/player.cpp b/src/player.cpp
index 0ed6bbb6..654d31e0 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -1240,7 +1240,7 @@ void Player::SetupBattleTest() {
}
Output::Debug("BattleTest Mode 2k3 troop=({}) background=({}) formation=({}) condition=({}) terrain=({})",
- args.troop_id, args.background.c_str(), args.formation, args.condition, args.terrain_id);
+ args.troop_id, args.background, static_cast<int>(args.formation), static_cast<int>(args.condition), args.terrain_id);
} else {
Output::Debug("BattleTest Mode 2k troop=({}) background=({})", args.troop_id, args.background);
}
diff --git a/src/string_view.cpp b/src/string_view.cpp
new file mode 100644
index 00000000..13a52650
--- /dev/null
+++ b/src/string_view.cpp
@@ -0,0 +1,34 @@
+/*
+ * This file is part of EasyRPG Player.
+ *
+ * EasyRPG Player is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * EasyRPG Player is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with EasyRPG Player. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "string_view.h"
+
+#if FMT_VERSION >= EP_FMT_MODERN_VERSION
+
+#include <fmt/format.h>
+
+auto fmt::formatter<lcf::DBString>::format(const lcf::DBString& s, format_context& ctx) const -> decltype(ctx.out()) {
+ string_view sv(s.data(), s.size());
+ return formatter<string_view>::format(sv, ctx);
+}
+
+auto fmt::formatter<lcf::StringView>::format(const lcf::StringView& s, format_context& ctx) const -> decltype(ctx.out()) {
+ string_view sv(s.data(), s.size());
+ return formatter<string_view>::format(sv, ctx);
+}
+
+#endif
diff --git a/src/string_view.h b/src/string_view.h
index 11e3550d..030bb09a 100644
--- a/src/string_view.h
+++ b/src/string_view.h
@@ -22,9 +22,9 @@
#include <lcf/dbstring.h>
#include <fmt/core.h>
-// FIXME: needed to allow building with fmt 5, older versions are untested.
+// Needed to allow building with fmt 5, older versions are untested.
#if FMT_VERSION < 60000
-#include <fmt/ostream.h>
+# include <fmt/ostream.h>
#endif
using StringView = lcf::StringView;
@@ -33,12 +33,33 @@ using U32StringView = lcf::U32StringView;
using lcf::ToString;
using lcf::ToStringView;
+// Version required to use the new formatting API
+#define EP_FMT_MODERN_VERSION 80000
+
// FIXME: liblcf doesn't depend on fmt, so we need to add this here to enable fmtlib support for our StringView.
+#if FMT_VERSION >= EP_FMT_MODERN_VERSION
+template<>
+struct fmt::formatter<lcf::StringView> : fmt::formatter<fmt::string_view> {
+ auto format(const lcf::StringView& s, format_context& ctx) const -> decltype(ctx.out());
+};
+
+template<>
+struct fmt::formatter<lcf::DBString> : formatter<string_view> {
+ auto format(const lcf::DBString& s, format_context& ctx) const -> decltype(ctx.out());
+};
+#else
namespace nonstd { namespace sv_lite {
template <typename C, typename T>
inline fmt::basic_string_view<C> to_string_view(basic_string_view<C,T> s) {
- return fmt::basic_string_view<C>(s.data(), s.size());
+ return fmt::basic_string_view<C>(s.data(), s.size());
}
} }
+namespace lcf {
+inline fmt::basic_string_view<char> to_string_view(const lcf::DBString& s) {
+ return to_string_view(StringView(s));
+}
+}
+#endif
+
#endif
@@ -0,0 +1,18 @@
Gentoo doesn't support Emscripten in any way shape or form yet.
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -758,14 +758,6 @@ if(APPLE)
target_link_libraries(${PROJECT_NAME} ${MACOSFOUNDATION} ${MACOSAUDIOUNIT} ${MACOSAUDIOTOOLBOX})
endif()
-if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
- option(PLAYER_JS_BUILD_SHELL "Build the Player executable as a shell file (.html) instead of a standalone javascript file (.js)" OFF)
- set(PLAYER_JS_GAME_URL "games/" CACHE STRING "Game URL/directory where the web player searches for games")
- set(PLAYER_JS_OUTPUT_NAME "easyrpg-player" CACHE STRING "Output name of the js, html and wasm files")
- set_property(SOURCE src/async_handler.cpp APPEND PROPERTY COMPILE_DEFINITIONS "EM_GAME_URL=\"${PLAYER_JS_GAME_URL}\"")
- target_sources(${PROJECT_NAME} PRIVATE src/external/picojson.h)
-endif()
-
# Endianess check
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.20)
if (CMAKE_CXX_BYTE_ORDER STREQUAL "BIG_ENDIAN")
+24 -9
View File
@@ -1,13 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<!-- maintainer-needed -->
<use>
<flag name="fluidsynth">Support FluidSynth as MIDI synth backend</flag>
<flag name="wildmidi">Support wildmidi as MIDI synth backend</flag>
</use>
<upstream>
<remote-id type="github">EasyRPG/Player</remote-id>
</upstream>
<maintainer type="person">
<email>watermanpaint@posteo.net</email>
<name>Lucio Sauer</name>
</maintainer>
<longdescription>
FluidSynth takes precedence over WildMIDI at runtime. If no external
MIDI synthesizer backend is enabled, EasyRPG Player falls back to ALSA
for native MIDI support.
At version 0.8, this will most likely result in no sound.
</longdescription>
<use>
<flag name="fluidsynth">
Support FluidSynth as a MIDI synthesizer backend.
Support the `--soundfont` command line option for custom soundfonts
</flag>
<flag name="harfbuzz">
Use <pkg>media-libs/harfbuzz</pkg> for Unicode text shaping.
Depends on external font support by means of the truetype USE flag
</flag>
<flag name="wildmidi">Support WildMIDI as a MIDI synthesizer backend</flag>
</use>
<upstream>
<remote-id type="github">EasyRPG/Player</remote-id>
</upstream>
</pkgmetadata>
+11
View File
@@ -0,0 +1,11 @@
Copyright (c) 1986-2002 Kim Jeong-Hwan
All rights reserved.
Permission to use, copy, modify and distribute this font is
hereby granted, provided that both the copyright notice and
this permission notice appear in all copies of the font,
derivative works or modified versions, and that the following
acknowledgement appear in supporting documentation:
Baekmuk Batang, Baekmuk Dotum, Baekmuk Gulim, and
Baekmuk Headline are registered trademarks owned by
Kim Jeong-Hwan.
+12
View File
@@ -0,0 +1,12 @@
As a special exception, if you create a document which uses this font,
and embed this font or unaltered portions of this font into the
document, this font does not by itself cause the resulting document to
be covered by the GNU General Public License. This exception does not
however invalidate any other reasons why the document might be covered
by the GNU General Public License. If you modify this font, you may
extend this exception to your version of the font, but you are not
obligated to do so. If you do not wish to do so, delete this exception
statement from your version.
GNU General Public License, version 2 or any later version.
See GPL-2+ for the full text of these licenses.
+29
View File
@@ -0,0 +1,29 @@
THE TTYP0 LICENSE
Permission is hereby granted, free of charge, to any person obtaining
a copy of this font software and associated files (the "Software"),
to deal in the Software without restriction, including without
limitation the rights to use, copy, modify, merge, publish,
distribute, embed, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
(1) The above copyright notice, this permission notice, and the
disclaimer below shall be included in all copies or substantial
portions of the Software.
(2) If the design of any glyphs in the fonts that are contained in the
Software or generated during the installation process is modified
or if additional glyphs are added to the fonts, the fonts
must be renamed. The new names may not contain the word "UW",
irrespective of capitalisation; the new names may contain the word
"ttyp0", irrespective of capitalisation, only if preceded by a
foundry name different from "UW".
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+5 -1
View File
@@ -1,8 +1,12 @@
# Copyright 1999-2022 Gentoo Authors
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# New entries go on top.
# Lucio Sauer<watermanpaint@posteo.net> (2023-09-01)
# Segfaults upon termination when run from inside a game folder.
~games-engines/easyrpg-player-0.8 fluidsynth
# Anna Vyalkova <cyber+gentoo@sysrq.in> (2023-06-17)
# Broken docs build.
dev-crystal/crikey doc