#USF4

2024-07-19

The build process for sf4e really, really sucks now that I'm on Linux, but it does at least function enough to continue working- bonus and combo notices are saved and loaded, although the semantics of the data is likely incorrect.

Kurt Kremitzkikkremitzki
2024-04-29

99% of the time you'd see Rufus' close fierce in used in a combo but there was something so satisfying about using it as a last-minute anti air to shut down crossups and control air directly above Rufus' head without needing the SRK input & meter for EX Snake Strike

Hitbox for a standing uppercut type punch by the character Rufus from Street Fighter 4
2024-02-23

Il OnePlus 12 è l’ultimo top di gamma dell’azienda cinese OnePlus. Smartphone che si posiziona nella fascia alta del mercato, offre specifiche tecniche di punta con lo Snapdragon 8 Gen 3 e il WiFi 7, un design raffinato, prestazioni fotografiche avanzate, un software ottimizzato e una batteria di lunga durata. Uscito in Cina a fine anno, da qualche […]

https://gomoot.com/oneplus-12-un-dispositivo-equilibrato-e-generoso/

oneplus 12OnePlus 12
2024-01-12

_FINALLY_ got CI cooking. It's not the way I want it to build- I'd rather distribute MSIs so that no one tries to run this out of the zip and wonders why it doesn't work- but at least I can distribute authoritative builds without my own host's filenames showing up.





A screenshot of the sf4e project dashboard on GitLab. The artifacts from a CI job are displayed. The file `sf4e-0.0.1-win32.zip` is prominently visible.
2023-08-09

Just played the inaugural game of rollback over the public internet. Some audio and visual glitches, but no desyncs as far as I can tell. I'm very tired and have a bunch of release engineering to do and a cat to attend to, but my brother's _immediate_ response within 10 seconds of the game ending:

"gimme another"

I think it works.

2023-07-27

WE COOK.

My strategy was always to only simulate the UI on forward simulation, but that breaks the KO hitstop and slowdown if a KO gets rolled back. Saving and loading the KO state means we need to save and load pretty much all the UI state to prevent jarring animations.

I didn't think this would be possible, but it is: SF4 does have an intermediary layer that has the current frame index which can be modified, copied, and restored.

2023-07-24

Well, that's a problem- SF4's training mode save states don't save inputs that occur exactly on the frame before saving.

2023-07-22

GGPO's delta encoding is pretty inefficient in pathological cases- pathological cases that can easily be generated if, for example, you're writing an automated tool to mash inputs as fast as possible to look for desyncs. It's so inefficient GGPO can overflow the memory allocated to input serialization, which is identified by an assert but halts the program- yikes.

Patch here, if anyone needs it: github.com/adanducci/ggpo/comm

2023-07-19

I wasn't even considering loads happening between update and rendering- there's no rollbacks there, sf4e calls `ggpo_idle()` before the update!

`ggpo_advance_frame()` not only saves a new state, but also frees old ones that are no longer necessary. Freeing a state in sf4e right now actually requires loading the victim state into the engine before freeing it, since freeing the state traverses pointers. So in order to save... we load.

2023-07-19

I think I figured out meter flickering for real. It wasn't until I remembered that SF4 has already had weird loading behavior, and sure enough...

It's a bug in SF4's load code. Similar to how loading a training state zeroes your inputs, it also tries to load state of the SC meter sprites. However, loading doesn't set their _position_- only the game update does. It works outside sf4e because loading never occurs between update and rendering.

2023-07-18

Offline, non-rollback reproduction conditions for the "flashing" UI. Makes it way easier to debug.

1. Be between 50% and 75% meter
2. Save state
3. Use one EX move
4. Disable HUD updates
5. Load state
6. Re-enable HUD updates

This is a contiguous clip- when Ryu teleports forward, I'm pressing the training-mode load key, but since HUD updates are disabled when I do it, the training mode load icon doesn't display.

2023-07-16

Flickering partially fixed- the edition indicators no longer pop positions, but the super bar still pops position _only_ when crossing a quarter-bar mark (when the EX animation is played).

Mashing the inputs to trigger rollbacks actually made me notice the clock desync from mastodon.social/@lulolwen/1105 is still in, and I _think_ I fixed that for real now, too.

Also, new desync discovered if you mash skip at round end.

2023-07-16

I wanted sf4e to have desync detection before publicly announcing it, because I can't be there to identify every problem. The strategy I used to do it is pretty silly, but it does work and is surprisingly less haunted than the GGPO code.

This demo is also running with network delay, which exposes one big weakness- the strategy I had for skipping the UI updates evidently results in a bunch of UI elements flickering.

2023-07-07

(so tired I forgot hashtags, so I figure I can at least include them here, sorry to anyone following the hashtags)

2023-07-02

No reason to not have USF4 on PC these days- it's currently going for less than $4 on Steam.

store.steampowered.com/app/457

2023-06-22

Got RNG seed control, so. That's nice.

I have a plan for desync detection that is not trade-secret encumbered and doesn't require modifying GGPO to do it, but I need to figure out exactly how GGPO manages save states internally. A save _should_ no longer be used if it's older than `NUM_PREDICTION_FRAMES` old (because it's no longer predictive)... but GGPO stores `NUM_PREDICTION_FRAMES + 2` save states?

2023-06-16

Going live with sf4e work at the usual place in a few minutes twitch.tv/runaway_ducky

2022-12-11

No-op'ing the "recollision" logic results in unintentional comedy. Infinites for everyone!

(Audio warning: I suggest having audio on for full effect, but it's loud and obnoxious.)

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst