RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login

    I.K.E.M.E.N GO on Raspberry Pi 4 [Now with an Install Guide!]

    Scheduled Pinned Locked Moved Ideas and Development
    golangikemenikemen gomugentutorial
    152 Posts 20 Posters 53.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • SuperFromNDS
      SuperFromND @zerojay
      last edited by SuperFromND

      @zerojay I think you're on to something, but I suspect that's only part of the story since it only crashes on 32-bit Raspian/RasPiOS (and since it can crash in two different spots, as i found out with my palette test characters). Unless 64-bit RasPiOS has a file system with case insensitivity, anyways.

      Nonetheless, good idea!

      ▲▼▲▼▲▼▲▼▲▼
      IKEMEN Go
      SRB2Kart
      ▼▲▼▲▼▲▼▲▼▲

      1 Reply Last reply Reply Quote 0
      • SuperFromNDS
        SuperFromND
        last edited by SuperFromND

        I was looking more at the log and noticed quite a lot of lines referred to parts of bytecode.go. The highest bytecode.go line reported in the file is line 888:

        		case OC_float:
        			sys.bcStack.PushF(*(*float32)(unsafe.Pointer(&be[i]))) // <-- line 888
        			i += 4
        

        This is part of a function that reads:

        func (be BytecodeExp) run(c *Char) BytecodeValue {
        

        There's also line 1577, which reads:

        func (be BytecodeExp) evalF(c *Char) float32 {
        	return be.run(c).ToF() // <-- line 1577
        }
        

        So my current best guess is that, since the bytecode.go calls occur above two char.go calls, and given the arguments in the function along with the behavior of the palette test chars I mentioned earlier, IKEMEN actually is loading everything correctly, and is just failing when it comes to running some character-related code that makes use of floating point numbers.

        This is further evidenced by the two char.go calls in question:

        // line 4185
        c.ss.sb.run(c) 
        // part of the function "func (c *Char) action() {"
        
        // line 4638
        cl.runOrder[i].action() 
        // part of the function "func (cl *CharList) action(x float32, cvmin, cvmax, highest, lowest, leftest, rightest *float32) {"
        

        This would definetly explain why it crashes on only 32-bit, and (at least somewhat) explains why it crashes at the point in a match where players gain control (my assumption being that part of the code that does that also runs character code that involves floating-point, and thus causes problems).

        I still haven't made any progress on figuring out the palette corruption thing, but now that we know it's likely floating point causing crashes, it's possible some other floating-point-related quirk is the root cause of that bug too.

        I should note that I joined an IKEMEN Discord server and brought up this "IKEMEN GO on Pi 4" thing, and caught the attention of Windblade. He said that, since he doesn't own a Pi 4, he'll try to find a way to emulate one via QEMU and see what exactly's causing problems. While this will probably be a rather low priority for him, it's at least nice to know someone else (let alone one of IKEMEN GO's main developers) is considering digging into this.

        I also recieved plenty of encouragement and good luck wishes from various community members in that server (and was informed that, while I'm not the first to come up with with this idea, I'm apparently one of the first to actually put in some effort into getting it to work), so I'd just like to quickly say a thank you to anyone who has had interest in this project. Even if I ultimately end up empty-handed, it's been really fun toying around with one of my all-time favorite freeware games again. :)

        ADDENDUM: So just to recap everything so far:

        🔷 Windblade-GR01 fork

        Issue: crashes immediately on start
        Affects: 32-bit and 64-bit Raspbian
        Cause: unknown

        🔷 LucasFebaits fork

        Issue: crashes upon execution of character code (or when "FIGHT!" is spoken, depending on your character)
        Affects: 32-bit Raspbian
        Cause: most likely, something involving floating-point numbers and character states

        Issue: indexed palettes are corrupted/colors get duplicated or truncated seemingly at random
        Affects: 32-bit and 64-bit Raspbian
        Cause: unknown

        ▲▼▲▼▲▼▲▼▲▼
        IKEMEN Go
        SRB2Kart
        ▼▲▼▲▼▲▼▲▼▲

        1 Reply Last reply Reply Quote 1
        • SuperFromNDS
          SuperFromND
          last edited by SuperFromND

          Hm, strange little issue I just encountered today:

          Windblade's fork just got updated to 0.96, and I tried to compile that on the Pi 4, just to see if it worked at all. Instead, I got a whole-new set of errors during compilation, all having to do with what appears to be a dependency repository, and nothing to do with IKEMEN GO itself:

          # github.com/Windblade-GR01/go-openal/openal
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:88:142: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcGetError
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:127:100: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcCloseDevice
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:133:107: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcCreateContext
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:139:110: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_walcGetIntegerv
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:144:156: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_walcGetInteger
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:165:114: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcCaptureCloseDevice
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:173:88: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcCaptureStart
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:177:86: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcCaptureStop
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:181:179: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcCaptureSamples
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:185:179: cannot use _cgo0 (type *_Ctype_struct_ALCdevice) as type *_Ctype_struct_ALCdevice_struct in argument to _Cfunc_alcCaptureSamples
          /home/pi/go/pkg/mod/github.com/!windblade-!g!r01/go-openal@v0.0.0-20200929222908-702203e028e0/openal/alcCore.go:185:179: too many errors
          chmod: cannot access './bin/Ikemen_GO': No such file or directory
          cp: cannot create regular file './bin/Ikemen_GO.command': Permission denied
          cp: cannot stat './script/': No such file or directory
          cp: cannot create directory './bin/data/data': Permission denied
          

          Looking at the repository in question, it looks like just one commit was made... in late September, well before I started trying to compile IKEMEN GO, and before this error started to appear on compilation (I never encountered it the first time I tried to compile this fork, as detailed in the initial post of this thread). So honestly, no idea what's causing this.

          Sadly, I haven't been able to make any progress with the LucasFebaits fork either (hence why I haven't replied to this thread since late October). I've tried a few random things like messing with compilation flags (specifically the GOARCH and GOARM flags), installing different versions of golang, and even attempting to run the x86 versions of IKEMEN GO using Box86, all to no avail or even a difference in error messages.

          I'm sure that this shouldn't be all that hard to get running, but the main thing holding this back seems to be my own lack of experience in regards to Golang and IKEMEN GO's codebase (and possibly the nature of 32-bit ARM, since the "game can't run fights" bug seems to stem from floating-points going awry on 32-bit but NOT 64-bit RasPi OS, and the palette corruption bug which I still can't figure out the cause of). The fact that there doesn't seem to be any Go debugger that can run on the Pi doesn't help either.

          I'd really appreciate if someone more knowledgable with this sort of thing would chime in, because I've exhausted just about everything I can reasonably attempt.

          ▲▼▲▼▲▼▲▼▲▼
          IKEMEN Go
          SRB2Kart
          ▼▲▼▲▼▲▼▲▼▲

          1 Reply Last reply Reply Quote 0
          • SuperFromNDS
            SuperFromND
            last edited by

            Sadly, I've still made no progress on this project, and quite frankly I don't think I will for the forseeable future. My skillset and understanding of IKEMEN is simply not good enough to figure out the cause of, and fix, these bugs.

            Semi-related, however, I have released this early version of a tool that can generate IKEMEN's movelist.dat for characters, from existing .cmd files. Movelist.dat's are used to display in-game command inputs for special and super moves, for the sake of quality-of-life, so this is very nice to have.

            ▲▼▲▼▲▼▲▼▲▼
            IKEMEN Go
            SRB2Kart
            ▼▲▼▲▼▲▼▲▼▲

            1 Reply Last reply Reply Quote 0
            • SuperFromNDS
              SuperFromND
              last edited by

              Good news: turns out the OpenAL error can be solved by just using a different build file, build_cmpt.sh instead of just build.sh.

              Bad news: Still crashes on startup. Same errors as before. I suspect it has something to do with the oto repository for sound that's mentioned in the crash logs, or something OpenAL is doing that the Pi 4 doesn't support.

              ▲▼▲▼▲▼▲▼▲▼
              IKEMEN Go
              SRB2Kart
              ▼▲▼▲▼▲▼▲▼▲

              1 Reply Last reply Reply Quote 0
              • SuperFromNDS
                SuperFromND
                last edited by

                Been a while since I've messed with this (and not a whole lot has happened since January), but here's a recap of the past five months of this project's progress:

                • Sometime in February: One of IKEMEN GO's lead developers, Gacel (otherwise known as Windblade-GR01) acquired a Raspberry Pi 4 and stated that they would look into it at some point in the future; they stated this back in February and I haven't heard anything about it since then (presumably they've been focused on the engine itself before looking into supporting an admittedly niche platform like the Pi).

                • Later in February: It appears that the build scripts for Linux builds of IKEMEN GO in general were a bit scuffed, as multiple users in the IKEMEN GO Discord server as well as at least one guy on GitHub reported issues trying to compile from source (specifically the cp -r /external/icons issue in the OP, as well as pointing out that you need screenpack files from an entirely different repo to get the engine to boot at all).

                • Just this morning: I tried to compile IKEMEN from Windblade's fork again, from a completely fresh install of Raspbian, and this time I got a brand new error, seemingly independent from IKEMEN itself and more to do with the ARM Golang compiler tools itself:

                pi@raspberrypi:~/Desktop/Stuff/Ikemen-GO/build $ sudo ./build_cmpt.sh 
                # github.com/Windblade-GR01/Ikemen_GO/src/src
                /usr/lib/go-1.11/pkg/tool/linux_arm/link: running gcc failed: exit status 1
                /tmp/go-link-774418994/000000.o: file not recognized: file format not recognized
                collect2: error: ld returned 1 exit status
                

                (Excerpt courtesy of XKCD #2259):
                An image depicting stick figure having complications with technology.  Someone asks the figure "Are you sure you're okay?", to which the figure responds "I'm fine and I believe in ghosts now!"

                Other than that, nothing much has happened sadly.

                ▲▼▲▼▲▼▲▼▲▼
                IKEMEN Go
                SRB2Kart
                ▼▲▼▲▼▲▼▲▼▲

                1 Reply Last reply Reply Quote 1
                • SuperFromNDS
                  SuperFromND
                  last edited by

                  Gacel responded, and he stated the main reason that his fork can't compile on Pi seems to be certain dependencies, written with platform-specific C++ code that can't be compiled on the Pi.

                  Ouch.

                  ▲▼▲▼▲▼▲▼▲▼
                  IKEMEN Go
                  SRB2Kart
                  ▼▲▼▲▼▲▼▲▼▲

                  SuperFromNDS 1 Reply Last reply Reply Quote 0
                  • SuperFromNDS
                    SuperFromND @SuperFromND
                    last edited by

                    That mysterious compilation error from last time seems to have been a fluke, as I just re-cloned the repository and was able to successfully compile an executable again. After cloning the default screenpack I gave it a test, but unfortunately it still crashes. At least we're back to this crash log (welcome back, devil-I-know):

                    pi@raspberrypi:~/Desktop/Stuff/Ikemen-GO/bin $ sudo ./Ikemen_GO_linux 
                    fatal error: unexpected signal during runtime execution
                    [signal SIGSEGV: segmentation violation code=0x1 addr=0x6d610071 pc=0xb5f9ce44]
                     
                    runtime stack:
                    runtime.throw(0x58b2ec, 0x2a)
                    	/usr/lib/go-1.11/src/runtime/panic.go:608 +0x5c
                    runtime.sigpanic()
                    	/usr/lib/go-1.11/src/runtime/signal_unix.go:374 +0x22c
                     
                    goroutine 1 [syscall, locked to thread]:
                    runtime.cgocall(0x49e040, 0x4e7fbac, 0x15e6160)
                    	/usr/lib/go-1.11/src/runtime/cgocall.go:128 +0x5c fp=0x4e7fb90 sp=0x4e7fb78 pc=0x51688
                    github.com/sqweek/dialog._Cfunc_msgdlg(0x0, 0x0, 0x3, 0x1, 0x8c152cf0, 0x0)
                    	_cgo_gotypes.go:397 +0x38 fp=0x4e7fba8 sp=0x4e7fb90 pc=0x21d4e8
                    github.com/sqweek/dialog.runMsgDlg(0x56daf1, 0x5, 0x0, 0x3, 0x1, 0x14b1d80, 0x0)
                    	/root/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:34 +0x80 fp=0x4e7fbe0 sp=0x4e7fba8 pc=0x21d73c
                    github.com/sqweek/dialog.(*MsgBuilder).error(0x14b1d80)
                    	/root/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:51 +0x44 fp=0x4e7fc00 sp=0x4e7fbe0 pc=0x21d8a0
                    github.com/sqweek/dialog.(*MsgBuilder).Error(0x14b1d80)
                    	/root/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs.go:61 +0x1c fp=0x4e7fc08 sp=0x4e7fc00 pc=0x21d074
                    main.main()
                    	/home/pi/Desktop/Stuff/Ikemen-GO/src/main.go:94 +0x53c fp=0x4e7ffc4 sp=0x4e7fc08 pc=0x375654
                    runtime.main()
                    	/usr/lib/go-1.11/src/runtime/proc.go:201 +0x204 fp=0x4e7ffe4 sp=0x4e7ffc4 pc=0x7b56c
                    runtime.goexit()
                    	/usr/lib/go-1.11/src/runtime/asm_arm.s:867 +0x4 fp=0x4e7ffe4 sp=0x4e7ffe4 pc=0xa4970
                     
                    goroutine 34 [sleep]:
                    time.Sleep(0x989680, 0x0)
                    	/usr/lib/go-1.11/src/runtime/time.go:105 +0x14c
                    main.(*System).soundWrite(0x8bb2a0)
                    	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:661 +0x330
                    created by main.(*System).audioOpen
                    	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:649 +0xc4
                     
                    goroutine 36 [syscall]:
                    github.com/hajimehoshi/oto._Cfunc_snd_pcm_writei(0x9c5fb7a8, 0x4aa1a80, 0x5be, 0x0)
                    	_cgo_gotypes.go:173 +0x38
                    github.com/hajimehoshi/oto.(*driver).TryWrite.func1(0xc73260, 0x9c5fb7a8, 0x4aa1a80, 0x5be, 0x0)
                    	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/driver_linux.go:143 +0xcc
                    github.com/hajimehoshi/oto.(*driver).TryWrite(0xc73260, 0xde8010, 0xf0, 0x7ff0, 0x0, 0x0, 0x0)
                    	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/driver_linux.go:143 +0x1a0
                    github.com/hajimehoshi/oto.(*driverWriter).Write(0xcc46e0, 0xde8000, 0x100, 0x8000, 0x0, 0x0, 0x0)
                    	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:148 +0xd4
                    io.copyBuffer(0x629030, 0xcc46e0, 0x629048, 0xd54330, 0xde8000, 0x8000, 0x8000, 0x0, 0x0, 0x0, ...)
                    	/usr/lib/go-1.11/src/io/io.go:404 +0x1b0
                    io.Copy(0x629030, 0xcc46e0, 0x629048, 0xd54330, 0x0, 0x0, 0x0, 0x0)
                    	/usr/lib/go-1.11/src/io/io.go:364 +0x48
                    github.com/hajimehoshi/oto.NewContext.func1(0xcf2520)
                    	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:85 +0x38
                    created by github.com/hajimehoshi/oto.NewContext
                    	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:84 +0x18c
                     
                    goroutine 37 [select]:
                    io.(*pipe).Write(0xd54360, 0xdb20f0, 0x43f8, 0x43f8, 0xf0, 0x0, 0x0)
                    	/usr/lib/go-1.11/src/io/pipe.go:87 +0x14c
                    io.(*PipeWriter).Write(0xcc2bb0, 0xdb2000, 0x44e8, 0x44e8, 0x0, 0xdb0000, 0x4e10000)
                    	/usr/lib/go-1.11/src/io/pipe.go:153 +0x38
                    github.com/hajimehoshi/oto.(*Player).Write(0xcc4720, 0xdb2000, 0x44e8, 0x44e8, 0x113a, 0x1, 0x0)
                    	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/player.go:60 +0x40
                    github.com/faiface/beep/speaker.update()
                    	/root/go/pkg/mod/github.com/faiface/beep@v1.0.2/speaker/speaker.go:129 +0x184
                    github.com/faiface/beep/speaker.Init.func1()
                    	/root/go/pkg/mod/github.com/faiface/beep@v1.0.2/speaker/speaker.go:52 +0x18
                    created by github.com/faiface/beep/speaker.Init
                    	/root/go/pkg/mod/github.com/faiface/beep@v1.0.2/speaker/speaker.go:48 +0x1d8
                     
                    goroutine 20 [syscall]:
                    syscall.Syscall(0x3, 0x0, 0xed0000, 0x1000, 0x0, 0x59501, 0xfa940)
                    	/usr/lib/go-1.11/src/syscall/asm_linux_arm.s:14 +0x8
                    syscall.read(0x0, 0xed0000, 0x1000, 0x1000, 0xed2001, 0x0, 0x0)
                    	/usr/lib/go-1.11/src/syscall/zsyscall_linux_arm.go:732 +0x40
                    syscall.Read(0x0, 0xed0000, 0x1000, 0x1000, 0x0, 0x1, 0x1)
                    	/usr/lib/go-1.11/src/syscall/syscall_unix.go:172 +0x34
                    internal/poll.(*FD).Read(0xc84000, 0xed0000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
                    	/usr/lib/go-1.11/src/internal/poll/fd_unix.go:165 +0xf0
                    os.(*File).read(0xc70130, 0xed0000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
                    	/usr/lib/go-1.11/src/os/file_unix.go:249 +0x3c
                    os.(*File).Read(0xc70130, 0xed0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0)
                    	/usr/lib/go-1.11/src/os/file.go:108 +0x4c
                    bufio.(*Scanner).Scan(0xc20fa4, 0x0)
                    	/usr/lib/go-1.11/src/bufio/scan.go:213 +0x88
                    main.(*System).init.func1(0x8bb2a0)
                    	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:546 +0xac
                    created by main.(*System).init
                    	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:544 +0x684
                    pi@raspberrypi:~/Desktop/Stuff/Ikemen-GO/bin $ 
                    

                    Side note: one of the fellows in the IKEMEN Discord by the name of MangeX pointed out that the OpenAL issues may have been caused by a missing folder, include/AL from the main OpenAL repository, that wasn't in Windblade's OpenAL fork. This ultimately proved to be redundant information since the issue seemingly fixed itself if my most-recent compilation test is any indication, but if it crops up again at least I have some sort of scapegoat to blame cause to troubleshoot,

                    ▲▼▲▼▲▼▲▼▲▼
                    IKEMEN Go
                    SRB2Kart
                    ▼▲▼▲▼▲▼▲▼▲

                    SuperFromNDS 1 Reply Last reply Reply Quote 0
                    • SuperFromNDS
                      SuperFromND @SuperFromND
                      last edited by SuperFromND

                      So a few hours after I made my last post, Gacel pointed out that I was compiling using Go 1.11, since that's the version of Go that you get when using apt-get install. However, it turns out the latest version of Go is 1.16, so he suggested I install that instead. After a tiny bit of fiddling around with Linux (and a slight modification to the build_cmpt.sh script since, for some reason, shell scripts didn't acknowledge my manual Golang installation) I compiled the executable again and... it crashed. But it crashed slightly differently than before:

                      pi@raspberrypi:~/Desktop/Stuff/Ikemen-GO/bin $ sudo ./Ikemen_GO_linux 
                      fatal error: unexpected signal during runtime execution
                      [signal SIGSEGV: segmentation violation code=0x1 addr=0x6d610071 pc=0xb600be44]
                       
                      runtime stack:
                      runtime.throw(0x542794, 0x2a)
                      	/usr/local/go/src/runtime/panic.go:1117 +0x5c
                      runtime.sigpanic()
                      	/usr/local/go/src/runtime/signal_unix.go:718 +0x224
                       
                      goroutine 1 [syscall, locked to thread]:
                      runtime.cgocall(0x4a2c90, 0x2aedb90, 0x289bfb0)
                      	/usr/local/go/src/runtime/cgocall.go:154 +0x5c fp=0x2aedb78 sp=0x2aedb60 pc=0x52490
                      github.com/sqweek/dialog._Cfunc_msgdlg(0x0, 0x0, 0x3, 0x1, 0x8d2ad550, 0x0)
                      	_cgo_gotypes.go:404 +0x34 fp=0x2aedb8c sp=0x2aedb78 pc=0x228db8
                      github.com/sqweek/dialog.runMsgDlg(0x52426f, 0x5, 0x0, 0x3, 0x1, 0x2aeddcc, 0x0)
                      	/root/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:34 +0x90 fp=0x2aedbd8 sp=0x2aedb8c pc=0x228fe8
                      github.com/sqweek/dialog.(*MsgBuilder).error(...)
                      	/root/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:51
                      github.com/sqweek/dialog.(*MsgBuilder).Error(...)
                      	/root/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs.go:61
                      main.main()
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/main.go:94 +0x58c fp=0x2aedfb8 sp=0x2aedbd8 pc=0x377750
                      runtime.main()
                      	/usr/local/go/src/runtime/proc.go:225 +0x26c fp=0x2aedfe4 sp=0x2aedfb8 pc=0x8766c
                      runtime.goexit()
                      	/usr/local/go/src/runtime/asm_arm.s:841 +0x4 fp=0x2aedfe4 sp=0x2aedfe4 pc=0xb7cbc
                       
                      goroutine 4 [sleep]:
                      time.Sleep(0x989680, 0x0)
                      	/usr/local/go/src/runtime/time.go:193 +0x100
                      main.(*System).soundWrite(0x7af798)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:661 +0x354
                      created by main.(*System).audioOpen
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:649 +0xc4
                       
                      goroutine 20 [syscall]:
                      github.com/hajimehoshi/oto._Cfunc_snd_pcm_writei(0x9c8836a8, 0x35a8000, 0x5be, 0x0)
                      	_cgo_gotypes.go:173 +0x34
                      github.com/hajimehoshi/oto.(*driver).TryWrite.func1(0x208e300, 0x2208000)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/driver_linux.go:143 +0xb4
                      github.com/hajimehoshi/oto.(*driver).TryWrite(0x208e300, 0x22080a8, 0x58, 0x7f58, 0x0, 0x0, 0x0)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/driver_linux.go:143 +0x15c
                      github.com/hajimehoshi/oto.(*driverWriter).Write(0x20d2060, 0x2208000, 0x100, 0x8000, 0x0, 0x0, 0x0)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:148 +0xe0
                      io.copyBuffer(0x5cecd8, 0x20d2060, 0x5cecec, 0x2092300, 0x2208000, 0x8000, 0x8000, 0x0, 0x0, 0x0, ...)
                      	/usr/local/go/src/io/io.go:425 +0x1c0
                      io.Copy(...)
                      	/usr/local/go/src/io/io.go:382
                      github.com/hajimehoshi/oto.NewContext.func1(0x20d04e0)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:85 +0x58
                      created by github.com/hajimehoshi/oto.NewContext
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:84 +0x1e8
                       
                      goroutine 21 [select]:
                      io.(*pipe).Write(0x2090240, 0x21dce48, 0x16a0, 0x16a0, 0x2e48, 0x0, 0x0)
                      	/usr/local/go/src/io/pipe.go:94 +0x148
                      io.(*PipeWriter).Write(0x21c62c8, 0x21da000, 0x44e8, 0x44e8, 0x113a, 0x1, 0x0)
                      	/usr/local/go/src/io/pipe.go:163 +0x38
                      github.com/hajimehoshi/oto.(*Player).Write(...)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/player.go:60
                      github.com/faiface/beep/speaker.update()
                      	/root/go/pkg/mod/github.com/faiface/beep@v1.0.2/speaker/speaker.go:129 +0x190
                      github.com/faiface/beep/speaker.Init.func1()
                      	/root/go/pkg/mod/github.com/faiface/beep@v1.0.2/speaker/speaker.go:52 +0x18
                      created by github.com/faiface/beep/speaker.Init
                      	/root/go/pkg/mod/github.com/faiface/beep@v1.0.2/speaker/speaker.go:48 +0x1d4
                       
                      goroutine 22 [syscall]:
                      syscall.Syscall(0x3, 0x0, 0x213a000, 0x1000, 0x1154ec, 0xff800000, 0x7ff)
                      	/usr/local/go/src/syscall/asm_linux_arm.s:14 +0x8
                      syscall.read(0x0, 0x213a000, 0x1000, 0x1000, 0x0, 0x1, 0x1)
                      	/usr/local/go/src/syscall/zsyscall_linux_arm.go:686 +0x40
                      syscall.Read(...)
                      	/usr/local/go/src/syscall/syscall_unix.go:187
                      internal/poll.ignoringEINTRIO(...)
                      	/usr/local/go/src/internal/poll/fd_unix.go:581
                      internal/poll.(*FD).Read(0x2070000, 0x213a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
                      	/usr/local/go/src/internal/poll/fd_unix.go:162 +0x118
                      os.(*File).read(...)
                      	/usr/local/go/src/os/file_posix.go:31
                      os.(*File).Read(0x2010178, 0x213a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
                      	/usr/local/go/src/os/file.go:117 +0x5c
                      bufio.(*Scanner).Scan(0x20287a4, 0x0)
                      	/usr/local/go/src/bufio/scan.go:214 +0x88
                      main.(*System).init.func1(0x7af798)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:546 +0x9c
                      created by main.(*System).init
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:544 +0x5c4
                      

                      Just parsing the log, I noticed the difference (aside from some hex values and routine numbers) was from a section mentioning the intro, so I assumed the problem was related to IKEMEN's intro cutscene included in the default motif. Another fellow in the IKEMEN Discord named Amavect chimed in and told me to check Ikemen.log, thinking that it might be a problem with the LUA code that IKEMEN also uses. After opening the log, this is what I saw:

                      failed to compile #version 150 core
                      
                      //vertex position
                      in vec2 vert;
                      
                      //pass through to fragTexCoord
                      in vec2 vertTexCoord;
                      
                      //window res
                      uniform vec2 resolution;
                      
                      //pass to frag
                      out vec2 fragTexCoord;
                      
                      void main() {
                         // convert the rectangle from pixels to 0.0 to 1.0
                         vec2 zeroToOne = vert / resolution;
                      
                         // convert from 0->1 to 0->2
                         vec2 zeroToTwo = zeroToOne * 2.0;
                      
                         // convert from 0->2 to -1->+1 (clipspace)
                         vec2 clipSpace = zeroToTwo - 1.0;
                      
                         fragTexCoord = vertTexCoord;
                      
                         gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);
                      } : 0:1(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.00 ES, and 3.00 ES
                        
                      goroutine 1 [running, locked to thread]:
                      github.com/yuin/gopher-lua.(*LState).PCall.func1(0x54a358, 0x1e16000, 0x2cb5bd0, 0x0, 0x0, 0x0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:1980 +0x4fc
                      panic(0x4d81b8, 0x2280778)
                      	/usr/local/go/src/runtime/panic.go:965 +0x174
                      github.com/Windblade-GR01/glfont.LoadFont(0x2ca4c60, 0x23, 0x1b, 0x140, 0xf0, 0x0, 0x0, 0x0)
                      	/root/go/pkg/mod/github.com/!windblade-!g!r01/glfont@v0.0.0-20200825224555-fc4d8149c6a0/font.go:48 +0x2f4
                      main.loadFntTtf(0x2a38c30, 0x2261f98, 0x12, 0x2a504c2, 0x1e, 0x1b)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/font.go:340 +0x120
                      main.loadDefInfo(0x2a38c30, 0x2261f98, 0x12, 0x2cb5728, 0xffffffff)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/font.go:314 +0x370
                      main.loadFntV2(0x2261f98, 0x12, 0xffffffff, 0x0, 0x24b2480, 0xcaa4c)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/font.go:275 +0x25c
                      main.loadFnt(0x24c9f90, 0xd, 0xffffffff, 0xd, 0x8, 0x4d3110)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/font.go:49 +0x70
                      main.systemScriptInit.func53(0x1e16000, 0x2)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/script.go:766 +0x6c
                      github.com/yuin/gopher-lua.callGFunction(0x1e16000, 0x0, 0x1e69460)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:202 +0x30
                      github.com/yuin/gopher-lua.init.3.func26(0x1e16000, 0x7c100403, 0x1e18050, 0x0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:817 +0x330
                      github.com/yuin/gopher-lua.mainLoop(0x1e16000, 0x1e18050)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:31 +0xdc
                      github.com/yuin/gopher-lua.(*LState).callR(0x1e16000, 0x1, 0x1, 0x17)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:1203 +0x1b8
                      github.com/yuin/gopher-lua.(*LState).Call(...)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:1959
                      github.com/yuin/gopher-lua.loRequire(0x1e16000, 0x2a)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/baselib.go:559 +0x46c
                      github.com/yuin/gopher-lua.callGFunction(0x1e16000, 0x0, 0x1e13d20)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:202 +0x30
                      github.com/yuin/gopher-lua.init.3.func26(0x1e16000, 0x7c500402, 0x1e18000, 0x0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:817 +0x330
                      github.com/yuin/gopher-lua.mainLoop(0x1e16000, 0x1e18000)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:31 +0xdc
                      github.com/yuin/gopher-lua.(*LState).callR(0x1e16000, 0x0, 0xffffffff, 0x0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:1203 +0x1b8
                      github.com/yuin/gopher-lua.(*LState).Call(...)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:1959
                      github.com/yuin/gopher-lua.(*LState).PCall(0x1e16000, 0x0, 0xffffffff, 0x0, 0x5ced50, 0x311e0a0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:2022 +0xec
                      github.com/yuin/gopher-lua.(*LState).DoFile(0x1e16000, 0x1cb65b8, 0x18, 0x1e16000, 0xf)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/auxlib.go:396 +0x94
                      main.main()
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/main.go:87 +0x150
                      
                      stack traceback:
                      	[G]: in function 'fontNew'
                      	external/script/main.lua:400: in function <external/script/main.lua:375>
                      	(tailcall): ?
                      	./external/script/menu.lua:374: in function <./external/script/menu.lua:0>
                      	[G]: in function 'require'
                      	external/script/main.lua:2123: in main chunk
                      	[G]: ?
                      

                      While that last bit does mention LUA, the error at the very top of the log got me intrigued, so I searched for it on the IKEMEN-GO issues repository, which lead me to discover this issue, and a surprisingly detailed explanation and workaround posted by EVILEDLIBRE (great username by the way!), so I decided to give that workaround a try, and...

                      Windblade-GR01-IKEMEN GO on Pi 4.jpg

                      It got to the main menu, holy $#!&.

                      Interestingly, the issues that were present in LucasFebaits's fork are all here: the crashing on 32-bit Raspbian, the palette corruption, and even a brand new bug where inputs are seemingly triggering eachother (so for example, pressing down would also trigger a button press, making it impossible to navigate the menu).

                      But even in this largely nonfunctional, highly broken state, this is a GIGANTIC break from the constant no-hoper crash logs I kept running into, and definetly motivates me to keep pursuing this.

                      Addendum

                      Here's a quick summary of what does and does not work on Windblade's fork on a 32-bit-OS Pi 4, now that I've gotten it to compile:

                      • Screenpack audio appears to be working just fine, surprisingly
                      • On my wireless USB keyboard, inputs were registering eachother for some reason; on my Rock Candy X360 pad, this overlap did not occur but IKEMEN refused to read most of the buttons (the D-pad buttons were rotated 90 degrees and Left didn't work at all, but A and B seemed to work perfectly fine; it's worth noting that IKEMEN's input system experiences strange behavior even on Windows and a rewrite of that has been planned for a while)
                      • Trying to start a fight crashes with the following log:
                      unexpected fault address 0x0
                      fatal error: fault
                      [signal SIGBUS: bus error code=0x1 addr=0x0 pc=0x2ae630]
                      
                      goroutine 1 [running, locked to thread]:
                      runtime.throw(0x5243e6, 0x5)
                      	/usr/local/go/src/runtime/panic.go:1117 +0x5c fp=0x2adb430 sp=0x2adb41c pc=0x84d48
                      runtime.sigpanic()
                      	/usr/local/go/src/runtime/signal_unix.go:731 +0x210 fp=0x2adb448 sp=0x2adb430 pc=0x9bfc8
                      main.(*BytecodeStack).PushF(...)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:566
                      main.BytecodeExp.run(0x39ab3a8, 0x5, 0x38, 0x35e2000, 0x1c, 0xa, 0x35e2000)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:965 +0x7dc fp=0x2adb6b8 sp=0x2adb44c pc=0x2ae630
                      main.BytecodeExp.evalF(...)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:1858
                      main.mapSet.Run.func1(0x4d5201, 0x281e000, 0x1, 0x1, 0x3cc2201)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:6709 +0xd4 fp=0x2adb6e8 sp=0x2adb6b8 pc=0x3bf45c
                      main.StateControllerBase.run(0x39ab380, 0x35, 0x60, 0x35e2000, 0x2adb738)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:2064 +0x11c fp=0x2adb70c sp=0x2adb6e8 pc=0x2c6c80
                      main.mapSet.Run(0x39ab380, 0x35, 0x60, 0x35e2000, 0x0, 0x0, 0x0, 0x3ff00000)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:6704 +0x9c fp=0x2adb750 sp=0x2adb70c pc=0x2d0d88
                      main.(*mapSet).Run(0x295e6c0, 0x35e2000, 0x0, 0x0, 0x0, 0x7ec1e0)
                      	<autogenerated>:1 +0x64 fp=0x2adb774 sp=0x2adb750 pc=0x424608
                      main.StateBlock.Run(0x1, 0xffffffff, 0xfffffffe, 0x0, 0x3848c10, 0x4, 0x8, 0x3c608d0, 0x30fd300, 0x9, ...)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:1978 +0x188 fp=0x2adb7f0 sp=0x2adb774 pc=0x2c6468
                      main.StateBlock.Run(0x1, 0xffffffff, 0xffffffff, 0x0, 0x3848600, 0x6, 0x8, 0x3c608a0, 0x283d320, 0x1, ...)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:1966 +0x23c fp=0x2adb86c sp=0x2adb7f0 pc=0x2c651c
                      main.StateBlock.Run(0x1, 0xffffffff, 0xffffffff, 0x0, 0x3848560, 0xe, 0x10, 0x3c60780, 0x0, 0x0, ...)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:1966 +0x23c fp=0x2adb8e8 sp=0x2adb86c pc=0x2c651c
                      main.(*StateBlock).Run(0x3c611d0, 0x35e2000, 0x0, 0x0, 0x0, 0x8ae70500)
                      	<autogenerated>:1 +0x60 fp=0x2adb958 sp=0x2adb8e8 pc=0x41f1a4
                      main.StateBlock.Run(0x1, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37a7d00, 0x7, ...)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:1978 +0x188 fp=0x2adb9d4 sp=0x2adb958 pc=0x2c6468
                      main.(*StateBytecode).run(0x2fc6000, 0x35e2000, 0xfffffffc)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/bytecode.go:7299 +0xac fp=0x2adba68 sp=0x2adb9d4 pc=0x2d1c64
                      main.(*Char).action(0x35e2000)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/char.go:5157 +0xe44 fp=0x2adbbd8 sp=0x2adba68 pc=0x2f2890
                      main.(*CharList).action(0x7b70b8, 0x0, 0x2adbc58, 0x2adbc5c, 0x2adbc54, 0x2adbc40, 0x2adf90c, 0x2adf910)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/char.go:5695 +0x80 fp=0x2adbc00 sp=0x2adbbd8 pc=0x2f6570
                      main.(*System).action(0x7af798, 0x2adf970, 0x2adf96c, 0x3f800000, 0x0, 0x0, 0x0)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:1196 +0x410 fp=0x2adf8f8 sp=0x2adbc00 pc=0x398764
                      main.(*System).fight(0x7af798, 0x3374000)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:2148 +0x10b8 fp=0x2ae1114 sp=0x2adf8f8 pc=0x39ce94
                      main.systemScriptInit.func54.2(0xc, 0x54a490, 0x7af798)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/script.go:878 +0x46c fp=0x2ae1808 sp=0x2ae1114 pc=0x3f2470
                      main.systemScriptInit.func54(0x2112240, 0x0)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/script.go:921 +0x328 fp=0x2ae1a1c sp=0x2ae1808 pc=0x3f2d84
                      github.com/yuin/gopher-lua.callGFunction(0x2112240, 0x0, 0x2288700)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:202 +0x30 fp=0x2ae1a4c sp=0x2ae1a1c pc=0x2772d8
                      github.com/yuin/gopher-lua.init.3.func26(0x2112240, 0x7c080601, 0x2252000, 0x0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:817 +0x330 fp=0x2ae1af8 sp=0x2ae1a4c pc=0x27cc3c
                      github.com/yuin/gopher-lua.mainLoop(0x2112240, 0x2252000)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/vm.go:31 +0xdc fp=0x2ae1b0c sp=0x2ae1af8 pc=0x276e58
                      github.com/yuin/gopher-lua.(*LState).callR(0x2112240, 0x0, 0xffffffff, 0x0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:1203 +0x1b8 fp=0x2ae1b80 sp=0x2ae1b0c pc=0x269164
                      github.com/yuin/gopher-lua.(*LState).Call(...)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:1959
                      github.com/yuin/gopher-lua.(*LState).PCall(0x2112240, 0x0, 0xffffffff, 0x0, 0x0, 0x0)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/state.go:2022 +0xec fp=0x2ae1bbc sp=0x2ae1b80 pc=0x26cbc4
                      github.com/yuin/gopher-lua.(*LState).DoFile(0x2112240, 0x2014720, 0x18, 0x2112240, 0xf)
                      	/root/go/pkg/mod/github.com/yuin/gopher-lua@v0.0.0-20200816102855-ee81675732da/auxlib.go:396 +0x94 fp=0x2ae1bd8 sp=0x2ae1bbc pc=0x23f834
                      main.main()
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/main.go:87 +0x150 fp=0x2ae1fb8 sp=0x2ae1bd8 pc=0x377314
                      runtime.main()
                      	/usr/local/go/src/runtime/proc.go:225 +0x26c fp=0x2ae1fe4 sp=0x2ae1fb8 pc=0x8766c
                      runtime.goexit()
                      	/usr/local/go/src/runtime/asm_arm.s:841 +0x4 fp=0x2ae1fe4 sp=0x2ae1fe4 pc=0xb7cbc
                      
                      goroutine 18 [sleep]:
                      time.Sleep(0x989680, 0x0)
                      	/usr/local/go/src/runtime/time.go:193 +0x100
                      main.(*System).soundWrite(0x7af798)
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:661 +0x354
                      created by main.(*System).audioOpen
                      	/home/pi/Desktop/Stuff/Ikemen-GO/src/system.go:649 +0xc4
                      
                      goroutine 6 [runnable]:
                      github.com/hajimehoshi/oto._Cfunc_snd_pcm_writei(0x9c6f9b98, 0x2a98000, 0x5be, 0x5be)
                      	_cgo_gotypes.go:173 +0x34
                      github.com/hajimehoshi/oto.(*driver).TryWrite.func1(0x200d200, 0x209e000)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/driver_linux.go:143 +0xb4
                      github.com/hajimehoshi/oto.(*driver).TryWrite(0x200d200, 0x209e028, 0xd8, 0x7fd8, 0x0, 0x0, 0x0)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/driver_linux.go:143 +0x15c
                      github.com/hajimehoshi/oto.(*driverWriter).Write(0x207c300, 0x209e000, 0x100, 0x8000, 0x0, 0x0, 0x0)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:148 +0xe0
                      io.copyBuffer(0x5cecd8, 0x207c300, 0x5cecec, 0x205e5a0, 0x209e000, 0x8000, 0x8000, 0x0, 0x0, 0x0, ...)
                      	/usr/local/go/src/io/io.go:425 +0x1c0
                      io.Copy(...)
                      	/usr/local/go/src/io/io.go:382
                      github.com/hajimehoshi/oto.NewContext.func1(0x200e8e0)
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:85 +0x58
                      created by github.com/hajimehoshi/oto.NewContext
                      	/root/go/pkg/mod/github.com/hajimehoshi/oto@v0.5.4/context.go:84 +0x1e8
                      
                      goroutine 7 [select]:
                      io.(*pipe).Write(0x2054340, 0x22400d8, 0x4410, 0x4410, 0xd8, 0x0, 0x0)
                      	/usr/local/go/src/io/pipe.go:94 +0x148
                      io.(*PipeWriter).Write(0x2161338, 0x2240000, 0x44e8, 0x44e8, 0x113a, 0x1, 0x0)
                      	/usr/local/go/src/io/pipe.go:163 +0x38
                      ... (32 lines left)
                      
                      • The palette corruption described in the OP regarding LucasFebaits's fork is also in effect here
                      • Fullscreen works, but does not revert to normal resolution on exit and crashes outright on composite-output mode

                      And the two major ingredients (it seems) to getting Windblade's IKEMEN GO to compile on the Pi 4 are:

                      • Using Go 1.16.4 instead of apt-get install's 1.11. No idea how this would be accomplished using a RetroPie script module (as I've never seen a scenario where a dependency like go was obtained through anything other than apt-get install)
                      • Forcing the executable to be ran with MESA_GL_VERSION_OVERRIDE=4.3, as IKEMEN GO was designed with GL 2.1 features, and the default version of GLES ran seems to cause compatiability issues with it; this could be accomplished very easily in a shellscript:
                      #!/bin/sh
                      MESA_GL_VERSION_OVERRIDE=4.3 ./Ikemen_GO_linux
                      

                      ▲▼▲▼▲▼▲▼▲▼
                      IKEMEN Go
                      SRB2Kart
                      ▼▲▼▲▼▲▼▲▼▲

                      T 1 Reply Last reply Reply Quote 0
                      • M
                        MrRussellgro
                        last edited by

                        This looks like some sweet progress. Hope it works well! I'm stoked to see how I.K.E.M.E.N looks like on RetroPie.

                        1 Reply Last reply Reply Quote 0
                        • T
                          Troopaking @SuperFromND
                          last edited by

                          @superfromnd
                          Hello so I have been working on getting mugen to run on pi 4 . I have a had really good success using box86/wine and Lutris on TwisterOS .
                          Will be releasing a precompliled mugen image titled M.I.M.P (mimp is mugen pi) semi soon. Hopefully launching multiple mugens from emulationstation or pegasus frontend.
                          Glad to see others with similar ideas .
                          Good luck I have been trying since day one of owning a pi 4 . Just now made good progress.

                          M 1 Reply Last reply Reply Quote 2
                          • M
                            MrRussellgro @Troopaking
                            last edited by

                            @troopaking That's awesome! I am pleased to hear you got something going on as well.

                            1 Reply Last reply Reply Quote 0
                            • SuperFromNDS
                              SuperFromND
                              last edited by

                              Haven't made any progress on this, but I'm posting because it turns out that a fellow on Reddit managed to get MUGEN running using Box86 and Wine, not unlike Troopaking's post above.

                              This isn't really helping IKEMEN GO's case at all, but I thought it was worth mentioning at least. :D

                              ▲▼▲▼▲▼▲▼▲▼
                              IKEMEN Go
                              SRB2Kart
                              ▼▲▼▲▼▲▼▲▼▲

                              T 1 Reply Last reply Reply Quote 0
                              • T
                                Troopaking @SuperFromND
                                last edited by

                                @superfromnd
                                Check this
                                https://retropie.org.uk/forum/topic/28528/box86-and-wine-on-rpi4/333

                                We've been working hard and have a how to add to any build in it . All old windows games ikemen would work loaded over 30 mugens and tested already

                                1 Reply Last reply Reply Quote 0
                                • J
                                  joamjoamjoam
                                  last edited by

                                  @SuperFromND Hey I just found out about Mugen last week and I need more of it lol. I think Ikemen and Retropie are a perfect match and so I wanted to step in and help as much as I can. Ive been trying to port Ikemen to the pi over the past couple days and i ran across this gem of a thread and i wanted to add my progress and hopefully we can get this thing built into retropie at some point.

                                  Anyways Using the LucasFebatis branch of Ikemen-Go-Plus I was able to compile and run a match using the Retropie prebuilt 32-bit image.

                                  I was getting the infamous SIGBUS error which is because some of the OPCodes (mainly just OC_float) in bytecode.go:run() is trying to convert some bytes from the stack into an address but this address is not valid hence the SIGBUS. To get around this i replaced the line:

                                  sys.bcStack.PushF(*(*float32)(unsafe.Pointer(&be[i])))

                                  with

                                  sys.bcStack.PushF(0);

                                  This fixed the sigbus error on match load and got me into matches. Where to my surprise i found no pallette bug. I wasn't able to find the pallette character you were using but i did try to fight with the one and only Ronald Mcdonald to produce the below screenshot.
                                  No Pallette Error.png

                                  The only bug i ran into now is that because the OC_Float opcode is used to convert float numbers in the boolean expressions that move characters from state to state in their .def file, by hard coding the address of 0 the characters get stuck in states that they cannot get out of. This leads to issues like KFM looks like he's falling forever and cant be hit since that state ignores hits. So if we can see why these addresses are coming up wrong when read in the OC_float case in bytecode.go:run() we should be able to actually play matches.

                                  If you'd like me to send anything of what I have so far let me know ill keep monitoring this thread.

                                  1 Reply Last reply Reply Quote 1
                                  • J
                                    joamjoamjoam
                                    last edited by

                                    Oh and some stats about what I'm using night help recreate my results:

                                    GO version (default installed from apt-get)
                                    go 1.11.6 linux/arm

                                    Pi Model (from /proc/cpuinfo):
                                    Raspberry Pi 4 Model B Rev 1.1

                                    Retropie version 4.6:

                                    my Run.sh

                                    #!/bin/sh
                                    export GOPATH=$PWD/go
                                    export DISPLAY=192.168.0.106:2.0
                                    echo Using Display $DISPLAY
                                    go fmt ./src/.go
                                    MESA_GL_VERSION_OVERRIDE=4.3 go run ./src/
                                    .go

                                    1 Reply Last reply Reply Quote 0
                                    • J
                                      joamjoamjoam
                                      last edited by joamjoamjoam

                                      So a little more digging into the issue led me to the fact that there is a byte alignment issue with the bcStack.

                                      The address of be[i] when processing the OC_float op code is misaligned sometimes meaning its not a multiple of 4 like a pointer address needs to be. Not sure yet if this is related to a go unsafe pointer quirk or if we need to fix the alignment in the struct definitions.

                                      This would be the reason why the 64bit OS doesn't have this SigBus Issue. The good news is that if i ported the code i have over to raspbianx64 this should be fully functioning now. Ill have to verify this still but with these alignment quirks caused by the use of 64 bit types (especially float64) on a 32bit opearting system the sigbus should sort itself out.

                                      alignemntError.png

                                      1 Reply Last reply Reply Quote 1
                                      • SuperFromNDS
                                        SuperFromND
                                        last edited by

                                        Woahhh, stellar work joam! This was a very pleasant thing to wake up to this morning :D

                                        I can't really help out too much on this specifically since low-level instructions and byte-alignment stuff is far out of my realm of expertis, but if you do need me for anything else (testing stuff, etc.) then let me know!

                                        (oh, and the character I was using was the original Donald by Kishio, which can be found here; not that you'll really need it seeing as the palette issues apparently didn't occur for you at all.)

                                        ▲▼▲▼▲▼▲▼▲▼
                                        IKEMEN Go
                                        SRB2Kart
                                        ▼▲▼▲▼▲▼▲▼▲

                                        1 Reply Last reply Reply Quote 0
                                        • SuperFromNDS
                                          SuperFromND
                                          last edited by

                                          I just forwarded these posts to the IKEMEN devs over on the Discord (which is probably a good idea for you join, by the way; it'll probably help being able to talk with the devs directly), and Gacel stated he's gonna look into adding these changes into the main IKEMEN GO fork (that's the Windblade-GR01 fork, not the LucasFebaits one you seem to be using).

                                          Since I know how to compile and run that fork now, that would theoretically make it possible to compile directly from the main IKEMEN GO fork, meaning we'd always have the newest version of IKEMEN GO available for folks to compile!

                                          If the changes are made and it turns out to work, I could probably (finally) start working on a scriptmodule for this. :D

                                          ▲▼▲▼▲▼▲▼▲▼
                                          IKEMEN Go
                                          SRB2Kart
                                          ▼▲▼▲▼▲▼▲▼▲

                                          1 Reply Last reply Reply Quote 0
                                          • J
                                            joamjoamjoam
                                            last edited by

                                            Glad i can help. I joined the discord and ill start getting acquainted with everyone this week. I think Gacel's could be invaluable in helping to align the structures. Luckily Alignment issues usually only affect ARM based systems (other compilers/arch are good at padding things for you) so in theory the padding should only affect these devices.

                                            I gave it a go for like 6 hours last night trying to figure out what needed to be aligned but couldn't get a working build though my results mentioned below with the 64 bit Raspbian tell me that the structures are properly 8-Byte Aligned when using the 64 bit types. So that just means its really close already.

                                            Thanks for the character ill load that one in just to make sure its not that character causing issues and i just got lucky with my character choice.

                                            Also i started with the LucasFebatis repo cause you seemed to be having better results with it but i see that its a little over 1000 commits behind so before we start to byte align things for the 32 bit OS ill migrate up to that version.

                                            Good News! I was waiting on an SD Card to load the 64 bit OS which arrived today and i was able to verify that on the 64bit Beta Raspbian I was able to play the game without any crashes. As far as i can see everything works. Also the performance was pretty good.

                                            Unfortunately I did notice however that when using the X server on the Pi itself i saw the pallette issue but using the external xserver on my PC everything drew up just fine. this makes me think that the Xserver is to blame here. Though it is possible that the rendering is done on the PC side and replaces whatever bugs may on the pi side.

                                            I think the byte alignment issue is a technicality so it shoouldnt be a showstopper on getting Ikemen on the Pi, it will just take some to sort out.

                                            The pallette bug on the other hand seems like it demands attention so i think ill continue my testing on the 64 bit Raspbian and try to see if i can figure that one out but I think ole Lucas was onto what i saw also. He mentions that the XServer may have issues processing gamma ramp so i may start with finding an alternative XServer.

                                            "For Got b'X11: RandR gamma ramp support seems broken"

                                            TLDR

                                            Current State: (Lucas Febatis)
                                            32 bit Retropie OS:
                                            Menus work good
                                            Crashes in Match due to an Alignment Trap processing OC_float in bytecode.go (be[i] is not 2, 4, or 8 byte aligned)
                                            When using an External X Server on PC palletes show correctly
                                            Using Pi as the XServer the palette bug exists.

                                            64 bit Raspbian OS:
                                            Everything works except for the palette bug when using pi as the XServer
                                            When using an External X Server on PC palettes show correctly.

                                            1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

                                            Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.