ChaiLove – Another Take on 2D Game Development

Whale from the Love2D logoWhen it comes to 2D game development frameworks, there are many options out there for indie game developers. Every framework has its own pros and cons, and its own use cases. Today, let’s talk about LÖVE, baby.

LÖVE is an awesome framework to make 2D games in Lua. With some modification, these games can be brought to libretro though Lutro. With the advent of C++14, are there tools and features we can bring in to improve the scripting experience behind developing 2D games?

Love2D ChaiScript ChaiLove

Continue reading “ChaiLove – Another Take on 2D Game Development”

RetroArch 1.7.0 -Released!

RetroArch 1.7.0 has just been released! Grab it here.

This latest version has also been uploaded to the Google Play Store.

We here at RetroArch/Libretro wish you a Merry Christmas and a Happy New Year!

If you’d like to show your support, consider donating to us. Check here in order to learn more.

General changelog

– CHEEVOS: Add badges for achievements, shows thumbnail images of achievements.
– CHEEVOS: Leaderboard support.
– CHEEVOS: Only disable savestates on hardcore mode if achievements are not available.
– COMMANDLINE: Fix fullscreen toggle switch.
– COMMON: Add ‘Automatically Load Content To Playlist’ feature, enabled by default.
– COMMON: Fix slowmotion ratio always being reset back to 1.
– COMMON: Optimized NBIO implementations now for Apple, Windows, and Linux. Uses mmap for Linux/Windows/BSD if/when available. File I/O should now be much faster for loading images inside the menu.
– COMMON: Native Blissbox support now for latest firmware as of writing (2.0). Implementation through libusb and/or native Windows HID.
– COMMON: New lightgun API.
– COMMON: New VFS (Virtual File System) API.
– COMMON: Fixed some playlist bugs.
– COMMON: New snow shader.
– COMMON: Fix Quick Menu title, no longer shows ‘Select File’.
– COMMON: Fix loading cores that require no content one after another.
– COMMON: Map Delete key to Y button for non-unified menu keyboard controls.
– COMMON: Fix for relative paths being normalised and generating a duplicate history entry.
– EMSCRIPTEN: Fix references to browserfs.
– FREEBSD: Support libusb HID input driver.
– HAIKU: Buildfix.
– INPUT: Map clear button to DEL key.
– LINUX/X11: Add RetroArch logo to window title bar.
– LINUX/X11: Input driver now supports new lightgun code.
– LINUX/X11: Support window transparency (requires a compositing window manager).
– LOBBIES: Fix for crash on join netplay rooms via touch / glui.
– LOCALIZATION: Update Italian translation.
– LOCALIZATION: Update Japanese translation.
– LOCALIZATION: Update Portuguese-Brazilian translation.
– LOCALIZATION: Update Polish translation.
– LOCALIZATION: Update Russian translation.
– MENU: Snowflake menu shader effect.
– OSX/PPC: Fix the GL2 renderchain, had to use EXT versions of framebuffer/renderbuffer functions.
– PSP: Make it work with Vita’s Adrenaline.
– PSP: Fix audio sync.
– PSP: Fix content loading, port should be functional again.
– PSP: Use 64MB when available.
– SCANNER: Fix crash from Windows-incompatible format string.
– VITA: Improve packaging, installation times.
– WIIU: Disabled the controller patcher for now since it was the source of many stability issues.
– VULKAN: Various stability fixes for WSI.
– WINDOWS: Add MSVC 2017 solution.
– WINDOWS: Get rid of the empty console window in MSVC 2010 builds.
– WINDOWS: Raw input driver now supports new lightgun code.
– WINDOWS: Use configured OSD/text message color on GDI driver.
– WINDOWS/XINPUT: Populate XInput VID/PID from DInput so autoconfig doesn’t rely solely on joypad names
– WINDOWS/XINPUT: Fix crash that occurs in some situations with Steam running and a Steam Controller plugged in.
– WINDOWS: Improve version reporting under System Information.
– WINDOWS: Support window transparency.
– WINDOWS: Correct usage of GetWindowPlacement per MS docs, fixes game window position on Win95/98.
– WINDOWS: Added Visual Studio 2017 support.

Highlights

Integrated Bliss-box support

Grab the newest firmware for this device and you can enjoy out-of-the-box Blissbox support with RetroArch on the following platforms:

  • Linux
  • Windows

For more information, read this separate article here.

This is a legit game changer. This peripheral will allow you to use real physical gamepads from all sorts of different game consoles through one interface.

Right now, only one of these devices is supported.

Badges for achievements

Improved lightgun support

Lightgun and mouse support has been added to both Beetle PSX and Beetle/Mednafen Saturn.

In other input-related news, mouse support has also been added to Beetle/Mednafen PCFX.

Windows 95/Windows 98 (non-SE) support

In a time and era where big companies get lazy and just throw away 32bit support for anything from drivers to operating systems, we have gone to the complete opposite side of the spectrum and started adding even more ancient/obsolete systems instead.

We already had a Windows 98 Second Edition/Millennium Edition/Windows 2000 version of RetroArch. But now, we go back even further in time! The MSVC 2003 version is a version of RetroArch that works on Windows 95 and Windows 98 (the First Version, before Second Edition).

Some things you should know about this version:

  • Rough around the edges, has been mainly tested so far on VMs (Virtual Machines) instead of real hardware.
  • Uses GDI as the default video driver. Our Direct3D driver so far requires DirectX 9 and Cg. It will take some work to make it backwards compatible with DirectX8.
  • We omitted the Windows NT 3.51/4 versions for now. The main issue with these versions is that they do not support DirectInput, so we have no real input drivers available for them.

Right out of the gate, there are 21 cores available for the Windows 95/98 version. Not too shabby, eh?

For more information, read this separate article here.

PSP port works again

Wii U port works again

Wii U port should work fine again after some issues in previous versions.

Automatic scanning of content

This new option, when enabled, will add any new content you load from the file browser (Load Content) to your playlists. If a playlist does not already exist for the specific core and/or game, one will be created on-the-fly. This option is disabled by default, so watch the video if you’d like to learn how to enable it.

There’s more

There’s a ton more that we have properly not covered in this blog article, but we leave it up to the user to discover that for themselves.

What’s coming next for RetroArch

We will have a separate blog post on this soon, as well as more separate blog articles detailing some of the other progress that has been made on the cores front.

RetroArch 1.6.9 -Released!

RetroArch 1.6.9 has just been released! Grab it here.

This latest version has also been uploaded to the Google Play Store.

General changelog

– Audio: Fix the Audio DSP picker
– CHEEVOS: Add support for Atari Lynx cheevos.
– CHEEVOS: Add support for RetroAchievements Leaderboards.
– GUI: (MaterialUI) Fix crash that happened on context reset with Vulkan.
– GUI: (MaterialUI) Skip querying and drawing items that are not visible; Cache content height and bbox calculation.
– GUI: (MaterialUI) Fix entry box highlight calculation.
– GUI: (XMB) Skip drawing the fading list when it is already transparent. Optimization.
– GUI: (XMB) Comment out visible item calculation in xmb_draw_items().
– GUI: (RGUI) Prevent crashes when using a non-English language reliant on UTF8.
– GUI: Add menu option for OSD background color.
– GUI: Add menu option for OSD text color.
– GUI: Add menu option to remove frame count from OSD.
– GUI: Allow wraparound of int/float settings when pressing the left key
– INPUT/LIBRETRO: Add support for more mouse buttons (buttons 4/5)
– INPUT/LIBRETRO: Add support for analog buttons
– INPUT: Always show the controls menu even if descriptors are not set
– INPUT: Fix input descriptors not being set on cores that don’t implement the controllers interface
– INPUT: Apply descriptors only for the amount of cores the core supports
– INPUT: Implement keyboard to gamepad input remapping (limited to one gamepad device for now)
– INPUT: Fix absolute mouse move handling on the winraw driver
– INPUT: Ignore keyboard input if window is not active on udev driver
– INPUT: Sanitize the filenames of autoconfig profiles before saving
– LOBBIES: Fix crash on navigating left / right from the lobby menu
– LOCALIZATION: Update Dutch translation
– LOCALIZATION: Update Italian translation.
– LOCALIZATION: Update Japanese translation.
– LOCALIZATION: Update Portuguese-Brazilian translation.
– LOCALIZATION: Update Russian translation.
– LINUX/ARMHF: Set buildbot updater URL to armhf location instead of blank string
– LINUX/PI: Broadcom VC4: Add Videocore config option
– LINUX/UDEV: Fix – RetroArch reads keyboard input when not focused with the udev input driver.
– NETPLAY: Fix disconnection not fully deinitializing Netplay.
– NETPLAY: Fix lan rooms when there is more than one room
– NETPLAY: Fix lan rooms on systems where all addresses are treated as IPv6
– COMMON: Fix clear/free loop conditionals in playlists.
– WINDOWS/GDI: Fix flickering of text.
– WINDOWS/GDI: Fix graphics corruption on Windows 98
– WINDOWS/GDI: Allow compiling without DirectInput8 for NT support
– WINDOWS/WGL: Try to use wglSwapLayerBuffers instead of SwapBuffers if possible (for more optimal performance).
– WINDOWS: Fix menubar text corruption on Japanese locale systems
– WINDOWS: Support Unicode file I/O (can now display CJK characters in file browser for example).
– WINDOWS: Support Windows 95, NT3.51, NT4
– WINDOWS: add Makefile.griffin targets for msvc6,2003,2005,2010,2012,2013
– WII: Use custom, embedded libogc SDK.
– WIIU: Initial touchscreen support for WiiU gamepad.
– WIIU: Add Cheevos support.
– SCANNER: Fix archive scanning.
– SCANNER: Support CHD files.
– SCANNER: Support Gamecube ISO scanning.
– SCANNER: Use primary data track of disc images for CRC lookups rather than cue files. This is slower but finds matches more reliably, and is necessary for CHD files to work at all. Update your databases!
– SCANNER: Fall back on looking inside archives when matching MAME/FBA content (most recent cores only). If you had difficulty with content being detected before, you may have better luck now. Update your databases and core info!

Highlights

Scanner system supports more formats

CHD and Gamecube ISO files can now be scanned. A lot of libretro cores have gained the ability to use CHD image files, some of them being all the Mednafen-derived cores (also known as Beetle cores). There is also a new fallback used for scanning MAME/FBA content which looks inside an archive for matching files. If you had trouble having the scanner detect your content before, you might be more usccessful now.

Retro Achievements – Leaderboard support

Unicode support for Windows users

Unicode is now supported for file I/O (Input/Output). What this means, is that game content that uses CJK characters and/or other non-ASCII characters can now be read by RetroArch. These files will also show up from within the filebrowser. Useful for our Japanese users.

NOTE: MaterialUI (the default UI on Android) might still exhibit issues displaying Japanese on Android. This is due to a font renderer that will need to be improved in a future version in order to display these extra characters properly.

Kiosk Mode and more


You can now tailor RetroArch’s UI even more to your own personal preferences. You can choose which submenus to hide, and which to show.

There’s also a special mode called ‘Kiosk Mode’. When enabled, you won’t be able to access any settings, and/or install/upgrade any cores. The guy who implemented this feature likely intended it as a parental control feature to make sure that kids don’t get to mess with any of the internal settings by accident that could end up breaking something. There’s also a password lock you can enable so that any access to settings can still be curtailed.

See the PDF article here for a more detailed breakdown of Kiosk Mode –

https://github.com/libretro/RetroArch/files/1320429/RetroArch.Kiosk.Mode.v4.pdf

Input enhancements


The libretro API has been enhanced by David Walters in the following ways:

  • Button input was previously all-digital, now button input can be analog as well. As a proof of concept, this has already been implemented for the Beetle Saturn core. Analog triggers now work as expected. This feature will be necessary for future systems like PlayStation2, where each face button on the gamepad was an analogue button.
  • Mouse buttons 4 and 5 were added. A proof of concept has already been implemented for Beetle Saturn. The mouse on the Sega Saturn had at least 5 buttons instead of the PlayStation mouse’s 2.


Mouse support and lightgun support has also been added to Beetle PSX, a much-requested feature. There are also some proposals on how to improve lightgun support in libretro so that it is more conducive to non-mouse based lightgun solutions. As ever, additions to the libretro API have to be backwards compatible and they should not break ABI, so that existing frontends will not be adversely affected but at the same time new frontends can reap the benefits of these new features all the same.

What’s coming next for RetroArch

We will have a separate blog post on this soon.

In the meantime, check out the addendum to this post –

https://www.libretro.com/index.php/core-updates-since-last-release/

This details all of the changes to the cores that have happened since the last release.

Core Updates Since Last Release (v1.6.7)

In anticipation of RetroArch 1.6.8, let’s detail all the work that has been performed on the libretro cores since the last frontend release (1.6.7).

higan

Themaister came out of retirement to collaborate with byuu on an upstream-friendly libretro-ization of higan. Currently, only the SNES emulator is available, but we hope to extend this to include all of his suite of emulators. Only the mainline ‘accuracy’ profile is available from the Online Updater currently, but we hope to add hex_usr’s ‘balanced’ profile soon. In the meantime, you can get it pre-compiled for Windows from his nSide github repo.
Notably, the higan core includes Super Game Boy support, including all special features, such as borders and music. Instructions for setting it up are here.

Yabause

raelgc has backported many commits from upstream, including a ton of accuracy and performance improvements.

Citra

j-selby has been keeping the libretro core up-to-date with upstream’s amazing progress. The version available in the online updater is lagging behind these updates a bit, since the buildbot is having trouble building it lately, but we hope to have this resolved soon. We also hope to get the recently announced network support hooked up to the libretro core, but no promises there.

PicoDrive

notaz provided a massive update to bring the libretro core up to date with upstream. This update included many accuracy improvements, along with some nice features like 68k overclocking.

mGBA

sergiobenrocha2 did the legwork to merge/update mgba-libretro to match the upstream 0.6.1 release, including a big pile of accuracy fixes from endrift.

Snes9x-git

hunterk backported qwertymodo’s MSU1 fixes, which should alleviate the crackling that some users reported, especially on Android devices, and he also added RTC support for the recently completed Tengai Makyo Zero (Far East of Eden: Zero) translation.

In addition to this, a hack got backported from Snes9x2010 which should prevent an annoying resolution flicker which occurs when switching from field mode to battle mode in the game Chrono Trigger.

Snes9x2010

Upstream Snes9x dev OV2 provided a patch to check for invalid VRAM access, which makes Hook work without massive artifacting.

ParaLLEl-N64

Massive amount of work from mudlord, AIO, bparker and Twinaphex to get the threaded angrylion RDP integrated. It started as a port of the angrylion-plus-rdp plugin, but the libretro version is now quite different, including being a true software renderer (that is, compatible with all video driver backends, including d3d). This plugin is very fast in Windows, reaching full speed on relatively modest CPUs, while Linux is only slightly faster than non-threaded angrylion. We hope to identify what’s holding back performance on non-MSVC compilers in the near future.

Beetle-Saturn

hiddenasbestos brought the libretro port up to parity with upstream v0.9.47 v0.9.48, which gives a few ton of nice accuracy improvements and the much-awaited savestate support (savestates made with the v0.9.47 version are not compatible with the v0.9.48 update, so beware if you made a bunch of states in the short time between updates). Tatsuya79 and retro-wertz provided a number of improvements to the overscan and cropping behavior.

Beetle-PSX

bkoropoff and simias did a lot of work on the CD reading code, including reduced stuttering during reading and a core option for increased CD loading speed. This *greatly* reduces the loading times on games, from the standard 15-30 seconds down to as low as 2-3 seconds. Do note that this is very much an experimental feature though, and it won’t work correctly for all games. r5 also added the ability to use unsupported BIOS files, which should make the core a little less picky about BIOSes. simias also backported new and improved triangle code from upstream, which unfortunately causes some issues with the PGXP features in some games. Zapeth also added support for CHD files.

Beetle-SuperGrafx

retro-wertz aded support for cheevos/RetroAchievements.

MAME

r-type continued his fantastic stewardship of the up-to-date MAME core, keeping it in lockstep with upstream releases.

MAME2016

Oggom backported support for the awesome sidescrolling Cave shmup Akai Katana, support for which was just added to upstream mainline MAME.

MAME2003

gamez-fan has been backporting dozens of patches and drivers from later versions of MAME to make more games work (or work better) with this core. markwkidd also fixed up a lot of the core’s reporting to correctly distinguish between working and nonworking games.

MAME2003_Midway

gamez-fan added in some speedhacks and fixed Rampage World Tour for this low-power spinoff of mame2003.

Final Burn Alpha

barbudreadmon continued his stewardship of Final Burn Alpha, bringing in many fixes from upstream and fine-tuning controls for specific problematic games.

FBAlpha2012

sergiobenrocha2 backported many fixes from the mainline FBA core for this low-power spinoff.

VICE

tschak909 added support for loading VIC-20 games. r-type improved screen resizing and handling for PAL/NTSC regions.

MrBoom

frranck greatly improved the AI in MrBoom, making it possibly the most advanced Bomberman AI in existence.

blueMSX

meepingsnesroms added disk swapping and, along with Tatsuya79, provided some nice quality of life improvements for this core, including machine auto-selection.

NP2Kai

AZO234 added a number of improvements to this core, including support for more disk formats (floppy and SCSI HDD), sound fixes and new soundcards and better savestate support.

Genesis Plus GX

nukeykt added a fantastic, cycle-accurate sound core. The older, MAME-derived core is still available for low-power devices. bkoropoff also added support for overclocking and the ability to remove per-line sprite limits (i.e., the cause of sprite-flickering).

gw-libretro

leiradel fixed some issues with high scores not updating properly and controller popups appearing behind game sprites.

FCEUmm

retro-wertz continued his work on this core, providing many fixes and updates for the mapper code, as well as greatly improving the Zapper functionality.

SameBoy

radius worked with LIJI32 to get the libretro-ization upstreamed in this extremely accurate Game Boy emulator. radius also hooked up savestates and SRAM/in-game saves, along with a variety of options that weren’t previously exposed to the libretro port, such as audio and video tweaks and rumble, while leiradel added cheevos/RetroAchievements support.

melonDS

radius worked to keep this core in lockstep with upstream. hunterk fixed an issue that was causing the red and blue color channels to be swapped and also closed a significant memory leak.

DeSmuME

moose65468 fixed loading Dragon Quest 5.

Nestopia

meepingsnesroms added support for 2x overclocking, while rdanbrook added preliminary Famicom Mic support (get ready to yell at those Pols Voices) and Tatsuya79 provided some edge-case fixes for Zapper functionality.

Atari800

nanoant fixed building on Android and made the core look for BIOS ROMs in the libretro ‘system’ directory, which puts this core more in-line with good libretro behavior. Meanwhile, r-type added support for more keys.

PPSSPP

Twinaphex collaborated with hrydgard to get an updated PPSSPP core ported over and to upstream a few things that should make it easier for the libretro port to stay up-to-date.

PCSX-ReARMed

meepingsnesroms fixed some polygon issues and radius fixed building this core for Windows. However, it’s still not something people should use on non-ARM hardware for general purposes.

DOSBox

Tatsuya79 fixed an annoying key-repeat bug.

Across many cores, bparker added support for Travis continuous integration, so we can better determine whether commits will break building on the many platforms we support, yoshisuga added support for arm64 builds on iOS targets and radius added support for mapping cores’ keyboard keys to the retropad, which is very useful for classic computing cores. Also, retro-wertz fixed a bug that prevented the beetle-* cores from cleaning up after themselves when loading zipped ROMs.

Parallel N64 Multithreaded Angrylion update

Here is a quick update on some new patches we have pushed to the Parallel N64 core –

1 – You can now get anywhere from a 6fps (conservative) to a 10fps or more performance boost with multithreaded Angrylion core by enabling a new option called ‘Send Audio Lists To RSP HLE’. Instead of sending audio lists to the low-level RSP plugin (cxd4), it will instead send these to the HLE (High-Level Emulated) RSP plugin instead. Note: If a game does not use the RSP for audio processing, you will not notice a speedup by enabling this. Nevertheless – many games benefit from this already.

NOTE: Indiana Jones and the Infernal Machine might have bad audio with this option enabled, my guess is that the MusyX HLE audio code is still not perfect or we need to have something backported still to make it so. Will look into that tomorrow.

2 – We followed the advice of ata8 (the original Angrylion RDP Plus plugin) and refactored some of the RDRAM code. As a result we are getting a very minor performance boost now on Linux. It’s still not anywhere near it should be compared to the Windows version but it is an improvement nonetheless –

Mario 64 – VI overlay on – 77fps (after) instead of 72fps (before)
Mario 64 – VI overlay off – 87fps (after) instead of 84fps (before)

Hope you enjoy these low-hanging fruit performance gains. Back to getting RetroArch 1.6.8 ready!