diff --git a/Config.in b/Config.in index 8df7375e917b206584e48fda0c53eec1ba776f92..2c81f2ee02cbef1f80df41a43c17a1b156d62757 100644 --- a/Config.in +++ b/Config.in @@ -157,6 +157,7 @@ menu "Emulators" source "$BR2_EXTERNAL_RECALBOX_PATH/package/ti99sim/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/xroar/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/vvvvvv/Config.in" + source "$BR2_EXTERNAL_RECALBOX_PATH/package/ikemen/Config.in" if BR2_PACKAGE_RETROARCH menu "Libretro Cores" diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 4d88c3a29864b11fd164faa9919bfe95fba6d38a..2ccabb40ebfee13a5e8803dedd9cc63c8a80ef89 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -19,6 +19,7 @@ as release notes for end user on a Recalbox upgrade. - Add support customize iso from Raspberry Pi Imager (add sshkey, wifi, hostname and password) - Add manual script runnable from Recalbox interface - Add Tamagotchi (tamalibretro core) +- Add Ikemen-go (M.U.G.E.N) ### Improvements - Add gamelist decoration on the right side: regions flags, genre & players @@ -70,6 +71,14 @@ as release notes for end user on a Recalbox upgrade. - Bump libretro-ppsspp - Bump Kodi plugins +### Improvements +- Add gamelist decoration on the right side: regions flags, genre & players +- Add sort by playing time & sort by regions + +### Fixes +- Fix hidden and/or empty being shown after some user operations +>>>>>>> d423625eff (feat: add mugen) + ## Version 9.2.3-Pulstar diff --git a/configs/recalbox-rpi5_64_defconfig b/configs/recalbox-rpi5_64_defconfig index d71761c9048e460a777a4584c303c775d650d23d..23e0bd648b534aec9162a0a1c424d0a9da07abe5 100644 --- a/configs/recalbox-rpi5_64_defconfig +++ b/configs/recalbox-rpi5_64_defconfig @@ -365,3 +365,4 @@ BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recal BR2_PACKAGE_XPADNEO=y BR2_PACKAGE_VVVVVV=y BR2_PACKAGE_LIBRETRO_TAMALIBRETRO=y +BR2_PACKAGE_IKEMEN=y diff --git a/configs/recalbox-x86_64_defconfig b/configs/recalbox-x86_64_defconfig index a90241681a43f56c8b279733a35986a1d105756e..58052d61cf54f0bb8ba19cf1e096abb03675598c 100644 --- a/configs/recalbox-x86_64_defconfig +++ b/configs/recalbox-x86_64_defconfig @@ -403,3 +403,4 @@ BR2_PACKAGE_XPAD_NOONE=y BR2_PACKAGE_WII_U_GC_ADAPTER=y BR2_PACKAGE_VVVVVV=y BR2_PACKAGE_LIBRETRO_TAMALIBRETRO=y +BR2_PACKAGE_IKEMEN=y diff --git a/custom/list.hash b/custom/list.hash index e65c9f29714bc87c7ccb63a525e09847f308b8cf..dde32fb3e09f8b005601424ea2604c35148b1a0f 100644 --- a/custom/list.hash +++ b/custom/list.hash @@ -13,6 +13,7 @@ e18acb2d94df50bf67ca15ebc33ef590 package/Config.in c17b2548c35cffbd487ade70e272015c package/bcm2835/Config.in 5a9deb88e7e597a746ee333e858caaca package/binutils/binutils.mk da90ab5754ec8fcf94fb0dc8048ef344 package/bluez5_utils/bluez5_utils.mk +75ec374ea4c10c5bf779694b84670685 package/cairo/cairo.mk 139c28fb0a041898208f176f918bf135 package/dhcpcd/dhcpcd.mk c445390118f5d058dd372a8b2beb25a8 package/dropbear/S50dropbear f8f1d83caf51791602eeefd554506bdf package/ffmpeg/ffmpeg.mk diff --git a/custom/package/cairo/cairo.mk b/custom/package/cairo/cairo.mk new file mode 100644 index 0000000000000000000000000000000000000000..7bfb76780cba4c931eed95e03171258825e9b149 --- /dev/null +++ b/custom/package/cairo/cairo.mk @@ -0,0 +1,184 @@ +################################################################################ +# +# cairo +# +################################################################################ + +CAIRO_VERSION = 1.17.4 +CAIRO_SOURCE = cairo-$(CAIRO_VERSION).tar.xz +CAIRO_LICENSE = LGPL-2.1 or MPL-1.1 (library) +CAIRO_LICENSE_FILES = COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1 +CAIRO_CPE_ID_VENDOR = cairographics +CAIRO_SITE = http://cairographics.org/snapshots +CAIRO_INSTALL_STAGING = YES + +# 0001-_arc_max_angle_for_tolerance_normalized-fix-infinite.patch +CAIRO_IGNORE_CVES += CVE-2019-6462 +# 0002-Fix-mask-usage-in-image-compositor.patch +CAIRO_IGNORE_CVES += CVE-2020-35492 + +CAIRO_CONF_ENV = LIBS="$(CAIRO_LIBS)" + +# relocation truncated to fit: R_68K_GOT16O +ifeq ($(BR2_m68k_cf),y) +CAIRO_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -mxgot" +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS_NPTL),) +CAIRO_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -DCAIRO_NO_MUTEX=1" +endif + +# cairo can use C++11 atomics when available, so we need to link with +# libatomic for the architectures who need libatomic. +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +CAIRO_LIBS += -latomic +endif + +CAIRO_CONF_OPTS = \ + --enable-trace=no \ + --enable-interpreter=no + +CAIRO_DEPENDENCIES = host-pkgconf fontconfig pixman + +# Just the bare minimum to make other host-* packages happy +HOST_CAIRO_CONF_OPTS = \ + --enable-trace=no \ + --enable-interpreter=no \ + --disable-directfb \ + --enable-ft \ + --enable-gobject \ + --disable-glesv2 \ + --disable-vg \ + --disable-xlib \ + --disable-xcb \ + --without-x \ + --disable-xlib-xrender \ + --disable-ps \ + --enable-pdf \ + --enable-png \ + --enable-script \ + --disable-svg \ + --disable-tee \ + --disable-xml +HOST_CAIRO_DEPENDENCIES = \ + host-freetype \ + host-fontconfig \ + host-libglib2 \ + host-libpng \ + host-pixman \ + host-pkgconf + +# DirectFB svg support rely on Cairo and Cairo DirectFB support depends on +# DirectFB. Break circular dependency by disabling DirectFB support in Cairo +# (which is experimental) +ifeq ($(BR2_PACKAGE_DIRECTFB)x$(BR2_PACKAGE_DIRECTFB_SVG),yx) +CAIRO_CONF_OPTS += --enable-directfb +CAIRO_DEPENDENCIES += directfb +else +CAIRO_CONF_OPTS += --disable-directfb +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +CAIRO_CONF_OPTS += --enable-ft +CAIRO_DEPENDENCIES += freetype +else +CAIRO_CONF_OPTS += --disable-ft +endif + +ifeq ($(BR2_PACKAGE_LIBEXECINFO),y) +CAIRO_DEPENDENCIES += libexecinfo +CAIRO_LIBS += -lexecinfo +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +CAIRO_CONF_OPTS += --enable-gobject +CAIRO_DEPENDENCIES += libglib2 +else +CAIRO_CONF_OPTS += --disable-gobject +endif + +# Can use GL or GLESv2 but not both +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) +CAIRO_CONF_OPTS += --enable-gl --disable-glesv2 +CAIRO_DEPENDENCIES += libgl +else +ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y) +CAIRO_CONF_OPTS += --disable-gl --enable-glesv2 +CAIRO_DEPENDENCIES += libgles +else +CAIRO_CONF_OPTS += --disable-gl --disable-glesv2 +endif +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBOPENVG),y) +CAIRO_CONF_OPTS += --enable-vg +CAIRO_DEPENDENCIES += libopenvg +else +CAIRO_CONF_OPTS += --disable-vg +endif + +ifeq ($(BR2_PACKAGE_LZO),y) +CAIRO_DEPENDENCIES += lzo +endif + +ifeq ($(BR2_PACKAGE_XORG7),y) +CAIRO_CONF_OPTS += --enable-xlib --enable-xcb --with-x +CAIRO_DEPENDENCIES += xlib_libX11 xlib_libXext +else +CAIRO_CONF_OPTS += --disable-xlib --disable-xcb --without-x +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRENDER),y) +CAIRO_CONF_OPTS += --enable-xlib-xrender +CAIRO_DEPENDENCIES += xlib_libXrender +else +CAIRO_CONF_OPTS += --disable-xlib-xrender +endif + +ifeq ($(BR2_PACKAGE_CAIRO_PS),y) +CAIRO_CONF_OPTS += --enable-ps +CAIRO_DEPENDENCIES += zlib +else +CAIRO_CONF_OPTS += --disable-ps +endif + +ifeq ($(BR2_PACKAGE_CAIRO_PDF),y) +CAIRO_CONF_OPTS += --enable-pdf +CAIRO_DEPENDENCIES += zlib +else +CAIRO_CONF_OPTS += --disable-pdf +endif + +ifeq ($(BR2_PACKAGE_CAIRO_PNG),y) +CAIRO_CONF_OPTS += --enable-png +CAIRO_DEPENDENCIES += libpng +else +CAIRO_CONF_OPTS += --disable-png +endif + +ifeq ($(BR2_PACKAGE_CAIRO_SCRIPT),y) +CAIRO_CONF_OPTS += --enable-script +else +CAIRO_CONF_OPTS += --disable-script +endif + +ifeq ($(BR2_PACKAGE_CAIRO_SVG),y) +CAIRO_CONF_OPTS += --enable-svg +else +CAIRO_CONF_OPTS += --disable-svg +endif + +ifeq ($(BR2_PACKAGE_CAIRO_TEE),y) +CAIRO_CONF_OPTS += --enable-tee +else +CAIRO_CONF_OPTS += --disable-tee +endif + +ifeq ($(BR2_PACKAGE_CAIRO_XML),y) +CAIRO_CONF_OPTS += --enable-xml +else +CAIRO_CONF_OPTS += --disable-xml +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/custom/package/cairo/cairo.mk.patch b/custom/package/cairo/cairo.mk.patch new file mode 100644 index 0000000000000000000000000000000000000000..eb43e3a9d6166df84ef5c9623e64b976fe3c1487 --- /dev/null +++ b/custom/package/cairo/cairo.mk.patch @@ -0,0 +1,13 @@ +diff --git a/package/cairo/cairo.mk b/package/cairo/cairo.mk +index 4515b76075..7bfb76780c 100644 +--- a/package/cairo/cairo.mk ++++ b/package/cairo/cairo.mk +@@ -54,7 +54,7 @@ HOST_CAIRO_CONF_OPTS = \ + --without-x \ + --disable-xlib-xrender \ + --disable-ps \ +- --disable-pdf \ ++ --enable-pdf \ + --enable-png \ + --enable-script \ + --disable-svg \ diff --git a/package/ikemen/Config.in b/package/ikemen/Config.in new file mode 100644 index 0000000000000000000000000000000000000000..16f68da08d2dad80ee49d28c78fa687eb56472e5 --- /dev/null +++ b/package/ikemen/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_IKEMEN + bool "ikemen" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + select BR2_PACKAGE_MESA3D + select BR2_PACKAGE_LIBGTK3 + select BR2_PACKAGE_OPENAL + select BR2_PACKAGE_LIBGLFW + help + An open-source fighting game engine that + supports MUGEN resources. + + https://github.com/ikemen-engine/Ikemen-GO + +comment "ikemen needs a toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS diff --git a/package/ikemen/ikemen-rb b/package/ikemen/ikemen-rb new file mode 100644 index 0000000000000000000000000000000000000000..94321c5a0438310cd57883d739a1d4e06a4abd3a --- /dev/null +++ b/package/ikemen/ikemen-rb @@ -0,0 +1,3 @@ +#!/bin/bash +cd "$1" +MESA_GL_VERSION_OVERRIDE=2.1 /usr/bin/ikemen diff --git a/package/ikemen/ikemen.mk b/package/ikemen/ikemen.mk new file mode 100644 index 0000000000000000000000000000000000000000..e1389fe6c0e5a16de0008abe466ef47823b966fd --- /dev/null +++ b/package/ikemen/ikemen.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# ikemen +# +################################################################################ + +IKEMEN_VERSION = 5051a66312c11c99c279f2a3cdca33681a6dc0ca +IKEMEN_SITE = https://github.com/ikemen-engine/Ikemen-GO.git +IKEMEN_LICENSE = MIT +IKEMEN_LICENSE_FILES = License.txt +IKEMEN_SITE_METHOD = git +IKEMEN_GIT_SUBMODULES = YES + +IKEMEN_DEPENDENCIES = libgtk3 openal libglfw mesa3d + +define IKEMEN_BUILD_CMDS + $(HOST_GO_TARGET_ENV) $(MAKE) -C $(@D) -f Makefile Ikemen_GO_Linux +endef + +define IKEMEN_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/bin + $(INSTALL) -D -m 0755 $(@D)/bin/Ikemen_GO_Linux $(TARGET_DIR)/usr/bin/ikemen + $(INSTALL) -D -m 0755 $(IKEMEN_PKGDIR)/ikemen-rb $(TARGET_DIR)/usr/bin/ikemen-rb +endef + +$(eval $(golang-package)) diff --git a/package/recalbox-romfs2/systems/ikemen/init/roms/.keep b/package/recalbox-romfs2/systems/ikemen/init/roms/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/package/recalbox-romfs2/systems/ikemen/init/roms/.p2k.cfg b/package/recalbox-romfs2/systems/ikemen/init/roms/.p2k.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d9693e3b1786bc6a059ff6645c82962808e31b28 --- /dev/null +++ b/package/recalbox-romfs2/systems/ikemen/init/roms/.p2k.cfg @@ -0,0 +1,38 @@ +# Recalbox's Pad-to-Keyboard configuration +# IKEMEN + +0:up = up ;; Up +0:left = left ;; Left +0:right = right ;; Right +0:down = down ;; Down +0:j1up = up ;; Up +0:j1left = left ;; Left +0:j1right = right ;; Right +0:j1down = down ;; Down +0:start = enter ;; Enter +0:select = q ;; Select +0:+start = leftalt f4 ;; Quit +0:a = a ;; A +0:b = s ;; B +0:x = d ;; X +0:y = z ;; Y +0:l1 = x ;; L1 +0:r1 = c ;; R1 + +1:up = up ;; Up +1:left = left ;; Left +1:right = right ;; Right +1:down = down ;; Down +1:j1up = up ;; Up +1:j1left = left ;; Left +1:j1right = right ;; Right +1:j1down = down ;; Down +1:start = enter ;; Enter +1:select = q ;; Select +1:+start = leftalt f4 ;; Quit +1:a = a ;; A +1:b = s ;; B +1:x = d ;; X +1:y = z ;; Y +1:l1 = x ;; L1 +1:r1 = c ;; R1 diff --git a/package/recalbox-romfs2/systems/ikemen/system.ini b/package/recalbox-romfs2/systems/ikemen/system.ini new file mode 100644 index 0000000000000000000000000000000000000000..cd881e2a7ce309694ba57b3a4c149c36f3f451b7 --- /dev/null +++ b/package/recalbox-romfs2/systems/ikemen/system.ini @@ -0,0 +1,63 @@ +; =========================== +; ikemen +; =========================== + +; all keys can be overridden for a particular board using key. +; example: +; priority = 0 +; priority.rpi4 = 3 +; Complete sections may be overridden. In such cases, all key from the global section are ignored, +; you must redefine them all +; example +; [core.0] +; [core.0.rpi4] +; Board tags are defined by BR2_PACKAGE_RECALBOX_TARGET_ + +[system] +uuid = "c8ba5857-c871-4b05-92b3-3a8417b77881" +name = "ikemen" +fullname = "Ikemen" +theme.folder = "ikemen" +roms.folder = "%ROOT%/ikemen" +screenscraper.id = 0 +doc.link.fr = "https://wiki.recalbox.com/fr/engine/ikemen" +doc.link.en = "https://wiki.recalbox.com/en/engine/ikemen" +doc.link.es = "https://wiki.recalbox.com/es/engine/ikemen" +port = 0 +readonly = 0 +downloader = 0 +icon.unicode = $ +extension.types = "*=file" + + +[properties] +; Following properties can take the following values: arcade, console, handheld, computer, virtual, engine, port +type = engine +; Following properties can take the following values: no, optional, recommended, mandatory +device.pad = mandatory +device.keyboard = no +device.mouse = no +device.lightgun = no +; Release date Year-Month +release.date = "YYYY-MM" +manufacturer = "manufacturer" +; Retroachievements Support? +retroachievements = 0 +; CRT: 480i or 480p support? +crt.multiresolution = 0 +; CRT: Can choose between PAL and NTSC? +crt.multiregion = 0 + +; Use [core.X] to specify other cores +[core.0] +package = BR2_PACKAGE_IKEMEN +priority = 0 +emulator = "ikemen" +core = "ikemen" +extensions = ".mgn" +; 0 = no, 1 = yes +netplay = 0 +softpatching = 0 +compatibility = good +speed = high +video.backend.rpi5_64 = wayland diff --git a/package/recalbox-romfs2/systems/ikemen/upgrade/roms/.readme.placeholder b/package/recalbox-romfs2/systems/ikemen/upgrade/roms/.readme.placeholder new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/projects/configgen/configgen/emulatorlauncher.py b/projects/configgen/configgen/emulatorlauncher.py index da08fe5742caf803a8470b7dbcd127f479c6e06c..0770597f3b3269878ade32c373bbd466d26bd936 100644 --- a/projects/configgen/configgen/emulatorlauncher.py +++ b/projects/configgen/configgen/emulatorlauncher.py @@ -145,6 +145,10 @@ def getGenerator(emulator): module = __import__("configgen.generators.vvvvvv.vvvvvvGenerator", fromlist=["VvvvvvGenerator"]) generatorClass = getattr(module, "VvvvvvGenerator") return generatorClass() + elif emulator == "ikemen": + module = __import__("configgen.generators.ikemen.ikemenGenerator", fromlist=["IkemenGenerator"]) + generatorClass = getattr(module, "IkemenGenerator") + return generatorClass() else: print("Missing generator for {}".format(emulator)) raise ValueError diff --git a/projects/configgen/configgen/generators/ikemen/__init__.py b/projects/configgen/configgen/generators/ikemen/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/projects/configgen/configgen/generators/ikemen/ikemenGenerator.py b/projects/configgen/configgen/generators/ikemen/ikemenGenerator.py new file mode 100644 index 0000000000000000000000000000000000000000..a71412b885f17e38859033925de9bfb07eabfac6 --- /dev/null +++ b/projects/configgen/configgen/generators/ikemen/ikemenGenerator.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +from configgen.Command import Command +from configgen.Emulator import Emulator +from configgen.controllers.controller import Controller, ControllerPerPlayer +from configgen.generators.Generator import Generator +from configgen.settings.keyValueSettings import keyValueSettings +import configgen.recalboxFiles as recalboxFiles + + +class IkemenGenerator(Generator): + + # Main entry of the module + # Return scummvm command + def generate(self, system: Emulator, playersControllers: ControllerPerPlayer, recalboxOptions: keyValueSettings, args) -> Command: + + # Rom + arguments = [] + arguments.append(args.rom.split('.')[0]) + + commandArray = [recalboxFiles.recalboxBins[system.Emulator]] + commandArray.extend(arguments) + + if system.HasArgs: + commandArray.extend(system.Args) + + return Command(videomode=system.VideoMode, array=commandArray) diff --git a/projects/configgen/configgen/recalboxFiles.py b/projects/configgen/configgen/recalboxFiles.py index 1fb29b29ea3288ea30cebf321b4632584e54f43a..7223a57f55be5ed0a4d8b2f9ace86916d39cb3f7 100644 --- a/projects/configgen/configgen/recalboxFiles.py +++ b/projects/configgen/configgen/recalboxFiles.py @@ -34,6 +34,7 @@ recalboxBins =\ 'frotz' : '/usr/bin/sfrotz', 'gsplus' : '/usr/bin/GSplus', 'hatari' : '/usr/bin/hatari', + 'ikemen' : '/usr/bin/ikemen-rb', 'kodi' : '/recalbox/scripts/kodilauncher.sh', 'libretro' : '/usr/bin/retroarch', 'linapple' : '/usr/bin/linapple', diff --git a/projects/configgen/setup.py b/projects/configgen/setup.py index 9fd108789987620dbd38628774de11b007cb5d6a..021eaaae7771b370ef05c287e2cf57f3ff28e159 100644 --- a/projects/configgen/setup.py +++ b/projects/configgen/setup.py @@ -45,6 +45,7 @@ setup(name='recalbox-configgen', 'configgen.generators.rb5000', 'configgen.generators.sdlpop', 'configgen.generators.vvvvvv', + 'configgen.generators.ikemen', 'configgen.settings', 'configgen.utils'], scripts=['emulatorlauncher.py']