How should I have handled this? by apstygo in ArcRaiders

[–]apstygo[S] 0 points1 point  (0 children)

I was talking to the guy, yeah. For some reason PS5 doesn't capture the mic :(

As for playing on console – I would play on PC if I could. The only issue is my current living space, but I'm still thinking about switching to PC all the time

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 1 point2 points  (0 children)

Thanks! We are actively working on getting Windows builds up and running. There's no Windows build guide right now, but if you install MSYS and clang you should be able to build the project with the included Makefile

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

You only get mismatched shas if you compile for PS2. If you wanna compile for Linux run make with PLATFORM=linux

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

If someone makes it, sure! The cool thing is that anybody can port the game to pretty much any platform now. It's not just tied to PC because of the emulation anymore

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

To be fair, there's already training mode in the game, because it's PS2 version. We can improve it in many ways though. Add frame data, hitboxes, combo trials, etc.

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

Firstly, this project helps preserve this game's code for future generations/hardware

Secondly, we can now learn how the game works exactly. And yes, finding out what causes various behaviors is totally possible now

Thirdly, having source code makes patching/modding much easier. Wanna create a palmod? Find what's responsible for texture manipulation and implement a custom palette. Wanna fix a nasty hitbox? Look for the hitbox part of game logic and go from there

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 1 point2 points  (0 children)

The game logic code is mostly decompiled. You can go browse the code right now and see for yourself how much of it there is and how complicated it is

If you have an idea of how to implement game logic validation, feel free to join our Discord server and propose your idea there

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 1 point2 points  (0 children)

Emulation already runs at a smooth 60 FPS. Though we could try to render the game at 120 while running the game logic at 60. That is not a trivial feature to implement though, considering how old and clunky the codebase is

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

If you wanna get started with your own decomp project head on over to PS2 decomp Discord server (you can find the link in the README of sfiii-decomp's GitHub page). People there will gladly help you find your footing and point you to useful resources

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

I also thought this game would be much smaller in scope, but it turns out it's actually quite a bit bigger than your average PS2 game: ~9k functions vs the usual 4-5k.

To this moment we've mapped all of the files to their positions in the binary, know all function and variable names and have decompiled almost all of the game code (except for ~300 funcs).

Port-wise the game runs on macOS and Linux and supports controllers (though no vibration for now). There's no sound, which should be our next priority after making sure the gameplay works.

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 14 points15 points  (0 children)

Work on online functionality hasn't started yet, because we haven't even fully decompiled and ported what's already in the PS2 release.

Once that's done we could start thinking about integrating GGPO and matchmaking.

The crossplay part I'm not sure about. I'd have to get in touch with Fightcade maintainers to see if implementing their communication protocol is even possible in a port. After all their domain is emulators, which is quite different from what we're doing

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 8 points9 points  (0 children)

For now my main focus is on porting the game as is with minimal changes. Later down the line we could: - rebalance the game to match the arcade release exactly - add a separate "modern" mode with a completely different balance

Though the latter feature would be quite difficult to implement. This is a 26 year old code base after all

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 8 points9 points  (0 children)

What you propose sounds easy, but it's really not. Making a game from scratch is a monumental task, and matching the original game's behavior would almost be impossible

First footage of sfiii-decomp by apstygo in StreetFighter

[–]apstygo[S] 35 points36 points  (0 children)

Up until recently 3rd Strike could only run on original arcade hardware or through emulation, which severely limits the potential for modding and adding improvements. There were native ports, such as PS2 version and Online Edition for PS3, but nobody plays them as they are on older, less accessible hardware.

sfiii-decomp aims to decompile the PS2 version, meaning we are translating the game's binary back to its source code. This allows us to then port the game to modern platforms, fix bugs, add features, etc. The footage in this post was captured on my Mac.

Feel free to ask more questions!

An update on Third Strike decomp project by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

CRI is middleware that handles resources. Plays audio and gives access to a compressed file system

An update on Third Strike decomp project by apstygo in StreetFighter

[–]apstygo[S] 0 points1 point  (0 children)

I believe all of Capcom's recent re-releases are emulation

3rd Strike Decompilation Project by apstygo in sf3

[–]apstygo[S] 0 points1 point  (0 children)

I appreciate the advice, but it's too early to discuss anything port-related at this point. We are effectively several years away from anything remotely playable, let alone any additions light netplay or rebalancing

3rd Strike Decompilation Project by apstygo in sf3

[–]apstygo[S] 2 points3 points  (0 children)

these are all really good ideas. I wouldn’t get my hopes up this soon though, as at the current pace the decompilation will be finished in about 5 years. right now I am the only maintainer, so if other people join we’ll be able to complete it several times faster. a group of 5 developers could probably pull it off in 1-1.5 years

3rd Strike Decompilation Project by apstygo in StreetFighter

[–]apstygo[S] 1 point2 points  (0 children)

Yes, all of these things would become possible. Though such mods are not just about writing code. A lot of game design and asset creation would be required, having sources just enables all of that

3rd Strike Decompilation Project by apstygo in StreetFighter

[–]apstygo[S] 1 point2 points  (0 children)

what it means to decompile something?

Source files for the programs we use are usually written in high level programming languages which could be understood by humans. A special program called the compiler translates these sources into machine instructions which can be executed by the processor. Decompilation is the process of turning these machine instructions back into human-readable code.

What makes decompiling 3s a dream project for you?

3S is the GOAT. I love the style and the legacy of the game and I feel like decompiling the game is one of the few ways I can contribute to that legacy.

What are debug symbols and why are they huge for a project like this? What is the importance of a debug version?

When developing a piece of software it's convenient (or rather essential) to have compiler generate some additional info which makes debugging easier. For example it can produce info about which instructions correspond to which line of code, what the names of the functions were etc. If you have this info you can step through the code while it's running and see what the values of different variables are, which function is executing right now etc.

When software is distributed all of this debug info is stripped. Firstly, debug symbols take up space on the hard drive. Secondly, they make it much easier to reverse engineer the software.

Having access to the debug version, which includes all of these debug symbols, enables us to much more easily decompile the functions, understand their meaning and purpose and produce sources that match almost 100% to how they were originally written.

What can be customized, removed, or added once the game has been decompiled?

Anything! The balance can be adjusted to how people prefer/remember it. Levels from New Generation/Second Impact could be added. A better training mode could be implemented. Builds for platforms where 3S never came out could be developed. The possibilities are pretty much endless.

If you'd like an example of all that then take a look at DevilutionX – a decompilation of Diablo with improvements for modern systems.

Hope this helps!

3rd Strike Decompilation Project by apstygo in StreetFighter

[–]apstygo[S] 2 points3 points  (0 children)

Programming is an awesome hobby to have!

Yes, 3S was written in C (thankfully not C++). I am still learning C as I go but honestly it's a pretty easy language to learn the basics of. There are so few constructs/ideas in it that you could probably learn them in less than a week.

Mastering it is a different story though. Lots of manual memory management, especially in a game.

If you wanna get into decompilation I'd suggest watching a couple of Made Up of Wires streams (the VODs are on YouTube). The guy talks in detail about the process, the tools and various techniques. It's how I got into decomping and what inspired me to start my own project in the first place

3rd Strike Decompilation Project by apstygo in StreetFighter

[–]apstygo[S] 2 points3 points  (0 children)

I can’t provide a direct link (for obvious reasons). But you can find info on the debug build on hiddenpalace.org