In 2012 as a promotion for Wreck-It Ralph, Disney commissioned the company Code Mystics to recreate the game Fix-It Felix Jr. for use in promotional arcade cabinets. Until relatively recently, the only way to play this game outside of owning one of these cabinets was through a leaked alpha test build of the game for Windows. This version is very incomplete feature-wise, lacking high-score saving, remappable keys, reliable fullscreen, and a variety of other issues as well as likely not perfectly reflecting the final version's gameplay. However, in 2019, Code Mystics got permission from Disney to license the game for inclusion in their ARM-based home arcade cabinets and plug-n-play systems. After multiple days of searching and research, I was able to learn that this version is compiled in the form of a standard libretro core, built as a 32-bit ARMv8 Linux ELF binary.
It took a hell of a lot of work, but I was able to get Debian Testing ARM64 installed onto a fully functioning qemu-system-aarch64 virtual machine (difficult due to highly unstable package management forcing constant manual repairs, among various other display and input issues), add the armhf platform to my multiarch configuration, install the armhf version of the Ludo libretro frontend (RetroArch segfaults when trying to use fif_libretro.so), and get the game working. A friend of mine who's way better at software shit than me was able to examine the executable, and it only ever makes a few calls to libc and libm, not even using any hardware acceleration, so this should work on the Raspberry Pi as well. I won't get into a full tutorial on how I got the QEMU VM working since it was a gigantic mess, involved a lot of random testing and arguments that I didn't fully understand, and just generally wasn't a step-by-step process, but here's the launch command I ended up with as a starting point:
Code:
qemu-system-aarch64 -machine virt,gic-version=max -m 4G -cpu cortex-a53 -smp 4 -netdev user,id=vnet,hostfwd=:127.0.0.1:0-:22 -device virtio-net-pci,netdev=vnet -drive file=harddisk.qcow2,if=none,id=drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 -drive file=flash0.img,format=raw,if=pflash -drive file=flash1.img,format=raw,if=pflash -device virtio-gpu-pci -device qemu-xhci -device usb-kbd -device usb-tablet -display sdl,show-cursor=on -accel tcg,thread=multi -device usb-audio
Beyond the fact that this is the release version of Fix-It Felix Jr. and thus has more authenticity, using the libretro core allows you to also have savestates, video filters, remappable controls, and all the other benefits that the leaked alpha build can't provide without (or even with) a janky wrapper program. Although the core itself is still janky- it comes in the form of the core itself, which contains all the game logic, and an assets folder with a dummy text file named fif.rom in it. You point the core at fif.rom, and it loads all the image and sound assets from the folder that contains fif.rom, rather than packing everything into a zip file or something. Here's the hashsums of all the relevant files, although you'll need to find them yourself:
Code:
SHA-1:
709f2f1a9147d9987a00c2c86ad1beced4ed4b75 ./fif_libretro.so
7a40f13a4f3cab9348f71cef4f3cbe155eadcb4f ./res_fif/controls.log
2314358705f32d68c8709a990e724ecef3ed7b4c ./res_fif/fif.rom
74f346a151e16e479de68e7ede99f6077749971a ./res_fif/fif.rom.l.png
1f764f5f5b4387dd7853719b707aa5e852672108 ./res_fif/fif.rom.png
3fac5a8704d8f97e378152132e7e6ceb3288940f ./res_fif/fif.rom.s.png
34a5dca2810f31ea7336b167b2e89dfba953db94 ./res_fif/sound0.wav
c9e41e0a3ef7b8b99bc04922135d4d9e772e0b8c ./res_fif/sound1.wav
fb0fcd30c2736faec27cb2e6ae392c0ba997204f ./res_fif/sound10.wav
f4fe6d07446e633d327fa0b5e8f77b51812236d9 ./res_fif/sound11.wav
c30eab4db02adf7be7fe4f1fc8bffd5b949e292c ./res_fif/sound12.wav
c60445a5afc41fa1c7306e494de3d977c1860054 ./res_fif/sound13.wav
43619830a69d1541c432afcb27937ee928668e79 ./res_fif/sound14.wav
393f02665bccc12c71d78c8b406a81b623ff660d ./res_fif/sound15.wav
9f3146264532fe42083fdfc5beef902046a91d20 ./res_fif/sound16.wav
56aa52bb0032aaa9edcdfe476b7af853b0a873d7 ./res_fif/sound17.wav
dba72e4253047894170d7b1b4fa48ea7f9b74f32 ./res_fif/sound18.wav
3517443234d3d75e485e23607fc34b699d5700d1 ./res_fif/sound19.wav
d296e8eef2059c6d2b00a49f78ada9828e6fb395 ./res_fif/sound2.wav
3bbd8ca70019b2123143d6397732b5877c5fc304 ./res_fif/sound20.wav
022138961a374d4eda7a133796b476edf87cb3b7 ./res_fif/sound21.wav
a89280408c43b5624b2ff4c84cbe66f1d83ddd18 ./res_fif/sound22.wav
8401b37e7bcaa4eef7caac2c3ef05a47c0f29847 ./res_fif/sound23.wav
2798b239ce23a22847cda2936cdfbb00e280b395 ./res_fif/sound24.wav
2bed76ffe0e3aa7137b4611b10dac1296dc6ffee ./res_fif/sound25.wav
a93a3593b729444591f616afb981f454e2177a0c ./res_fif/sound26.wav
5effb7b0fd79033973d7a66601cfe589a65893c2 ./res_fif/sound27.wav
0f0043be3fb2b97e207ee15684d8fb1f12fa9f3d ./res_fif/sound28.wav
63a43994cc3a8fd92011e5a3b5d1ba8d501d07a5 ./res_fif/sound29.wav
404de5cb7d6a56ab9a17405e9241494693f79021 ./res_fif/sound3.wav
8f75836a9ba115b77c1e1002560b2896c62b61af ./res_fif/sound30.wav
672ba3d47cdd654f82b8ee6c84572ee20ae7117c ./res_fif/sound31.wav
a44af75d16a9e2f79d1dcead24dba35001913b09 ./res_fif/sound4.wav
6ecb91ac9534eaaa4069a043661c9c16e21942d2 ./res_fif/sound5.wav
66365bd6dc650d714547cfd46278da692b40fe22 ./res_fif/sound6.wav
ed09b930615429362628cde3713ec31cd2ce1a31 ./res_fif/sound7.wav
e21920b85c2edae9e7614251e0cf90b808de0072 ./res_fif/sound8.wav
1bd8cb6c168db29ecfa73e6e776277af21166579 ./res_fif/sound9.wav
3bd2ad5d0d481b813b00024cb0e290133238c5ba ./res_fif/texture2.bmp
EDIT:
I was able to get the core working on RetroArch by compiling RetroArch 1.9.0 on Debian armhf, meaning that you can now use all of the actual RetroArch features, and as a bonus, there isn't any ugly blurring artifacts like happens in Ludo for some reason. I had to disable ffmpeg in the build due to an apparent breaking library change between when 1.9.0 released and now, but otherwise the build is unmodified.
EDIT 2: Further testing has determined that the latest working version of RetroArch for this core is v1.10.3, which has the additional added benefit of not needing to disable ffmpeg in the compile. Going to proceed with native hardware testing on my Raspberry Pi in the near future
Last edited by Technoturnovers,