game-compatibility
game-compatibility copied to clipboard
545107E1 - Avatar: The Last Airbender - The Burning Earth
Tested this with both DirectX and Vulkan versions (Latest Versions as of this post). The game crashes to the desktop with no error messages before the title screen on both branches. Here is a log... Vulkan Log: xenia.log
DirectX12 Log: xenia.log
Specs: Ryzen 7 2700X 4.1Ghz, NVidia RTX 2070, 16 GB RAM
Tested on https://github.com/xenia-project/xenia/commit/9418f3f2c5fb3b98421cca7f71506bc02fa48735
Booted game. Xenia closes immediately.
state-crash-host | regression | KeSetCurrentStackPointers
Title ID should be 545107E1.
Tested on https://github.com/xenia-project/xenia/commit/99024aec3294f5db423d30450218040abfa5f00b
Completed Chapter 1. 30-60FPS with shaders cached. Saves work. Probably Playable.
⚠️You must set disassemble_functions=true
!
More Screenshots
state-gameplay
Seems the disassemble_functions=true
fix works because with that set, PPCHIRBuilder::AnnotateLabel
is used to set Label::name
field to a string of the form loc_{address}
, but when disassemble_functions
isn't set AnnotateLabel is never called, instead name gets set in FinalizationPass::Run
, which sets it to _label{id}
based on Label::id
field
Only 4 chars are allocated for that though making it limited to 0-9999 (the ID is checked for <=9999 with assert_true too), seems this title and maybe others that disassemble_functions
helped with have Labels with id set to more than 9999 though, triggering that assert.
If assert is skipped it seems to make Xbyak freak out and crash, I guess because different labels end up sharing the same name or something.
Editing FinalizationPass::Run
so it can use 5 chars for the label name (changing label_len = 6 + 4
to label_len = 6 + 5
, expanding it to range 0-99999) & updating the assert_true seems to let it work fine without needing disassemble_functions
. I'm not sure if this is actually the main issue here though, or if maybe the problem is with whatever is creating 9999+ Labels?
Runs on the Steam Deck w/ Windows 11 with --disassemble_functions=true. There appears to be a lot of missing graphical effects when attacking. I'm using the latest Canary at the time of this post.