Skip to content

Add onscreen interactive keypad overlay support#92

Merged
LibretroAdmin merged 40 commits intolibretro:masterfrom
jcarr71:master
Dec 6, 2025
Merged

Add onscreen interactive keypad overlay support#92
LibretroAdmin merged 40 commits intolibretro:masterfrom
jcarr71:master

Conversation

@jcarr71
Copy link
Contributor

@jcarr71 jcarr71 commented Nov 25, 2025

Description

This PR adds comprehensive support for onscreen interactive keypad overlays to the FreeIntv libretro core.

Features

  • Onscreen Interactive Overlays: Display custom controller graphics directly on screen
  • Multi-Platform Input:
    • Android: Native touchscreen support for overlay buttons
    • Windows/Linux: Mouse pointer support for overlay buttons
  • ROM-Specific Overlays: Support for game-specific overlay graphics (370×600 PNG files)
  • 12-Button Keypad: Full Intellivision keypad mapping (1-9, 0, *, #)
  • Backward Compatible: Traditional controller input fully preserved

Files Changed

  • README.md: Installation and usage instructions for overlay system
  • USER_GUIDE.md: Step-by-step RetroArch configuration guide
  • FreeIntv_libretro.info: Updated metadata and feature description

Installation

  1. Create system/freeintv_overlays/ folder in RetroArch system directory
  2. Place ROM-specific PNG overlays (filename matches ROM name, e.g., laser_blast.png)
  3. Enable the feature via RetroArch core options
  4. Launch game and use touch/mouse to interact with overlay buttons

Testing

  • Cross-platform testing performed on Android, Windows, and Linux
  • Overlay hotspot detection verified
  • Traditional controller input continues to work as expected

Fixes issue with Intellivision games requiring overlay-based input on mobile platforms.

jcarr71 and others added 30 commits October 28, 2025 20:29
This commit introduces the implementation of stb_image functions in a new source file, stb_image_impl.c. This file includes the necessary definitions to enable the functionality provided by the stb_image library. Only one C file should define STB_IMAGE_IMPLEMENTATION to avoid multiple definitions.
- Added comprehensive technical overview and visual reference documentation for the file browser feature.
- Added support for various platforms, ensuring consistent behavior across Windows, Linux, macOS, Android, Switch, and Vita.
- Included error handling strategies and performance considerations for efficient operation.
- Updated build configurations to include new source files for different architectures (arm64-v8a, armeabi-v7a, riscv64, x86, x86_64).
- Created dependency files for various source files including cart.c, controller.c, cp1610.c, and others.
- Updated dependencies for libretro-common components such as compat_posix_string.c, compat_snprintf.c, and file_path.c.
- Included necessary headers for each source file to ensure proper compilation.
- Enhanced project structure by organizing object files and their dependencies for better build management.
Added images and updated contributors section in README.
Added Ko-fi username for funding support.
…for change to core option from separate core
jcarr71 and others added 5 commits November 24, 2025 20:23
…splay name, supported extensions, and description
- Implement side-by-side dual-screen rendering (1074×600 workspace)
- Add touchscreen hotspot input detection for 12 keypad buttons
- Support ROM-specific PNG overlays (370×600 pixels)
- Add cross-platform input handling (Android, Windows, Linux)
- Include screen swap functionality
- Update documentation with setup and usage instructions
- Update core metadata and info file
- Remove debug logging infrastructure
- Maintain full backward compatibility
…erlays

Add Dual-Screen Touchscreen and Overlay Support to FreeIntv Core
…ced onscreen interactive keypad overlays and improved versioning
@msheehan79
Copy link
Contributor

Sorry I haven't been able to test this much yet, have a few home projects that are taking up most of my time this week but I wanted to give you some feedback based on some initial observations.

  • Compiled fine for me on Windows, and with the assets bundled in it rendered immediately so that is definitely a better initial experience
  • I did not see any new Core Options to enable/disable the overlays (You mention it in your PR Installation Step 3, did you put the toggle somewhere else? I am looking in the options defined in libretro_core_options.h)
  • I didn't see any notable performance hits like I saw on the previous PR - (In that build I had only seen the drop when I was in the fullscreen option which I didn't see in this version).
  • With the overlays active, when I press the "Show keypad" button the original virtual keypad isn't visible (maybe it is rendering but hidden behind the overlay image?). It would really cool if the virtual keypad from the original core design could be incorporated into your overlays/controller but at least if the core option is available to turn off the overlays that would make sure it doesn't remove current functionality for controller-only users.
  • The controller overlays seem to work well with mouse input, and setup seems very simple with the new structure.

Overall I really like the approach, I just want to make sure it can be toggled on or off so users can choose to enable it, especially if the virtual keypad is hidden for controller-only users as that would be a regression. Once the core option is there, I see no major issues with moving forward with this from a usability perspective at least. I did not have much time to look at the code itself at this point.

@jcarr71
Copy link
Contributor Author

jcarr71 commented Dec 4, 2025 via email

@msheehan79
Copy link
Contributor

msheehan79 commented Dec 4, 2025 via email

@jcarr71
Copy link
Contributor Author

jcarr71 commented Dec 4, 2025 via email

@jcarr71
Copy link
Contributor Author

jcarr71 commented Dec 4, 2025 via email

@msheehan79
Copy link
Contributor

Just tested and working as expected! Just a few small suggestions:

  • For the Core Option, it should indicate that a restart is required for the changes to take effect
  • It might be helpful to specify in the core option description that when using the interactive keypads a mouse or touch input is required to interact with the keypad (unless I've missed something where it is possible to use gamepad-only in this mode currently?)

I think with those changes in place there should be minimal risk of regressions and this is a great new feature that users can take advantage of.

@jcarr71
Copy link
Contributor Author

jcarr71 commented Dec 4, 2025 via email

@msheehan79
Copy link
Contributor

No worries! From my perspective, this looks good to merge.

@jcarr71
Copy link
Contributor Author

jcarr71 commented Dec 4, 2025 via email

@LibretroAdmin LibretroAdmin merged commit ac167a2 into libretro:master Dec 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants