Citra: Ever Oasis - freezes when creating a save file

Created on 23 Jun 2017  路  19Comments  路  Source: citra-emu/citra

Using: Citra Nightly, hash - cac1133 .

The game freezes up when creating a new save file. The screen turns white and throws unmapped Read32 errors.

How to reproduce: Load up the game, press A and then try to create a save file.

Specs: Intel Core i3-6100, Nvidia GeForce GTX 750 Ti, 6 GB RAM

Log file right here: https://pastebin.com/9snDKWs1

has-games-wiki-entry

Most helpful comment

Tested on canary 268
If u set the IPCDelayNanoseconds to 10000000 it loads correctly with all the triggers but the game runs super slow so i debug outputed the thread names and theres this weird Path: [Binary: 000000000000000000000000]_Server . If u only delay the Path: [Binary: 000000000000000000000000]_Server it runs smoothly without any errors

if(name == "Path: [Binary: 000000000000000000000000]_Server"){
    static constexpr u64 IPCDelayNanoseconds = 10000000;
    thread->WakeAfterDelay(IPCDelayNanoseconds);
} else {
    static constexpr u64 IPCDelayNanoseconds = 51140;
    thread->WakeAfterDelay(IPCDelayNanoseconds);
}

*Edit: Noob assumption (cuz im still trying to understand how 3ds&citra works) for sync requests involving the file system, the thread should be delayed proportionally with the file size ?

All 19 comments

tried adding a fresh system archive in case and tried several saves from a 3ds.
With a save it will always crash when loading said saves.

https://pastebin.com/YdkjVFVU

Any progress? Can someone give some love to this game? thank you.

New update from me drwhojan here, interesting..
https://gbatemp.net/threads/citra-unofficial-chinese-builds-discussion.431974/page-310#post-7658005

Core timing are "microseconds" Event ?

EDIT: Although if you close the emulator down just after starting a new save, and reset the save, speed triples.

Edit: seems to be some sort of Down Count.

@Hexagon12 test with #3091

Just tested it. The freeze doesn麓t seem to be fixed.

@FearlessTobi game region and citra region?

Europe and Europe. But why should that be important in any way?

freeze with europe/usa/jpn and auto, europe and usa, europe and jpn

Using the latest commit https://github.com/citra-emu/citra/pull/3091/commits/df7808c9e134343ada3e31c664759757e563f1fb from https://github.com/citra-emu/citra/pull/3091 fixes this freeze.

image

I tried loading the save from my 3ds to see how it works ingame: the screen is entirely black, but I can hear the game running in the background and my character moving when I press buttons. I'll test it some more later today.

Can confirm here it works too, though yeah you have to pause and unpause the game to see the screen. Strange bug.

It appear the game freeze again with same error after long unskippable intro.

It only freezes if you had an existing save and try to start the game with it. Delete the save before starting and it should work. Protip: disable vsync and framerate limit to get past the cutscene pretty fast.

Though it looks like many things don't trigger properly after the game starts (when you first go ingame a conversation should trigger before you can walk around, but that doesn't happen, and other things needed to continue don't work either) so it's impossible to progress.

Closed by #3091

This is not fixed in the current nightly, please re-open. Only https://github.com/citra-emu/citra/commit/df7808c9e134343ada3e31c664759757e563f1fb worked.

Tested on canary 268
If u set the IPCDelayNanoseconds to 10000000 it loads correctly with all the triggers but the game runs super slow so i debug outputed the thread names and theres this weird Path: [Binary: 000000000000000000000000]_Server . If u only delay the Path: [Binary: 000000000000000000000000]_Server it runs smoothly without any errors

if(name == "Path: [Binary: 000000000000000000000000]_Server"){
    static constexpr u64 IPCDelayNanoseconds = 10000000;
    thread->WakeAfterDelay(IPCDelayNanoseconds);
} else {
    static constexpr u64 IPCDelayNanoseconds = 51140;
    thread->WakeAfterDelay(IPCDelayNanoseconds);
}

*Edit: Noob assumption (cuz im still trying to understand how 3ds&citra works) for sync requests involving the file system, the thread should be delayed proportionally with the file size ?

Before I continue, let me start by saying that I have no idea what I'm doing.

I did some testing, and the only ServerSession that needs to be delayed is one created by Service::FS::File::Connect when the game opens its own RomFS (it has the name Path: [Binary: 000000000000000000000000]_Server as mentioned by @Senjosei). No others need to be delayed for the game to load properly in all cases I tested. The opened file is 890961920 bytes and the minimum delay I was able to use was 1500000 nanoseconds.

This is probably a stupid question, but isn't this just caused by file read delays being longer on hardware than on Citra?

@bakugo Indeed thats the issue. Same is probably true for some other file-IOs. Our plan is to "measure" how long HW takes for that operations and add a proper delay to just those functions.

Fixed by #3440

Was this page helpful?
0 / 5 - 0 ratings

Related issues

EddyHg80 picture EddyHg80  路  3Comments

kdex picture kdex  路  4Comments

animekai picture animekai  路  3Comments

FearlessTobi picture FearlessTobi  路  3Comments

ANTHENA-CITRA picture ANTHENA-CITRA  路  3Comments