Open ghost opened 3 years ago
The Super Pocket Tennis issue seems to be similar to the Def Jam issue... You need to accept pretty fast for it to work , and it will work only sometimes.
Vulcanus Seek And Destroy is japanese only isn't? how to get to multiplayer?
Edit: nevermind, found it Hmm.. it's strange, just trying to host it will get timeout, and it stuck with 0/0 FPS unable to cancel/go back to previous menu.
This is where the issue is starting: It first use blocking PdpRecv with infinite timeout on socket fd number 2 on thread "Thread" followed by non-bocking PdpRecv on socket fd number 1 (belonged to AdhocMatching) on thread "Thread"... if the thread supposed to be blocked it shouldn't be able to call another PdpRecv... unless it was a different thread but with the same name. Looked like an issue with blocking simulation or AdhocMatching (because current AdhocMatching is running on real thread instead of PSPThread)
Edit: That socket error 10014 seems to be the main issue, and it can be tricky as it's related to invalid buffer address or size. According to this https://stackoverflow.com/questions/861154/winsock-error-code-10014 Apparently Winsock doesn't like buffers to be located on the stack, there is also a possible issue related to memory address alignment.
Added another game : Gensan.
@ANR2ME was the problem with some games getting 0 FPS not a socket buffer size issue? Seeing as you talked about it here: https://github.com/hrydgard/ppsspp/issues/13648#issuecomment-727175047 Not talking about Vulcanus but the other ones here. They seem to get lower fps gradually until 0 FPS...
For Vulcanus, based on the logs the blocking socket simulation is behaving strange, it's an issue related to blocking socket simulation.
Most 0 FPS issue are probably because the game is waiting for something that takes a very long time (or endlessly) before it can update/render the frame, for example when loading some files.
The only game i know where FPS could dropped significantly due to socket buffer was Warriors Orochi 2, but it only dropped to 4/4 FPS at most, never reached 0/0 FPS. This game is the only game i know that have a strange netcode, it won't update the frame as long there is available data to be received in the buffer, so the game will try to repeatedly recv the data until there is no more sufficient data to be recved (about 700-736 bytes per recv) and then continue to render the frame, thus using a small buffer size will cause some incoming packets to be dropped (and need to be resent) but giving the receiver time to render the frame (due to 0 available data in buffer after the first recv), while using larger buffer will cause the game to render less frames per second (due to continuous incoming data being queued in buffer).
While the issue on PSP2/PSP2i that was related to buffer size were related to VPN (it seems some VPN doesn't worked well with small buffer size)
Why we can't see and fight each other on ppsspp latest dev apk multiplayer function Tekken 6 :( Im only using mobile data 😅 Any tips and guide? Sir @ANR2ME
Why we can't see and fight each other on ppsspp latest dev apk multiplayer function Tekken 6 :( Im only using mobile data 😅 Any tips and guide? Sir @ANR2ME
If this is happened recently, check your Port Offset value, the most recent update related to network is related to Port Offset (i think)
There are also other issue related to mobile: 1). If you're using mobile data without VPN it will most-likely to fail, as most mobile data provider doesn't allow port-forwarding. 2). If you're on Android there is a possibility of getting "incorrect port" issue, did you see any message saying this with orange color?
Why we can't see and fight each other on ppsspp latest dev apk multiplayer function Tekken 6 :( Im only using mobile data 😅 Any tips and guide? Sir @ANR2ME
If this is happened recently, check your Port Offset value, the most recent update related to network is related to Port Offset (i think)
There are also other issue related to mobile: 1). If you're using mobile data without VPN it will most-likely to fail, as most mobile data provider doesn't allow port-forwarding. 2). If you're on Android there is a possibility of getting "incorrect port" issue, did you see any message saying this with orange color?
Didn't see any incorrect port warning Here's my settings.
I tried also local lan multiplayer but also failed :(
Your friends will need to check their settings too, because if they use a different port offset or have a blocked port, you won't be able to connect to them.
I tried also local lan multiplayer but also failed :(
Nevermind this local lan multiplayer is working but super lag on both phones 🤣 unlike before when we play local lan multiplayer is smooth.
Your friends will need to check their settings too, because if they use a different port offset or have a blocked port, you won't be able to connect to them.
We have the same settings 😅
I tried also local lan multiplayer but also failed :(
Nevermind this local lan multiplayer is working but super lag on both phones 🤣 unlike before when we play local lan multiplayer is smooth.
I tested the latest dev build just now on localhost using the same settings on your screenshot on PC (my phone is full recently so i don't play game on it anymore) and it worked fine, full speed 60 FPS.
If it gets lag on recent builds, could you find out which revision was the last time it worked properly from https://buildbot.orphis.net/ppsspp/index.php?m=fulllist so that we can investigate which update causing it, because it shouldn't lag at least on LAN.
I had no issue with Tekken 6 locally either. Well in general i do get lower fps with multiple instances on the other instance. But that seems like a Windows scheduler/gpu scheduling issue that makes it lower on the non active window... I know that issue on another emulator already.
Local lan is now smooth just need to delete some files on my Redmi note 9 🤣
But online mobile net still failed 😭
Stick to LAN. I bet you get errors because of the port offset (needs to be higher then 1024) but even then the game is exteremly sensitive to lag and it makes the game not worth to bother with. It's the most sensitive to lag game I ever saw even on hardware (35-40 ms ping is slow).
Naruto Shippuden Ultimate Ninja Impact Lan Multiplayer Doesn't Work anymore :(
It worked fine on localhost, that error code 0 is strange, may be you weren't connected to AdhocServer? Did you see "Network initialized" message on screen? (which indicate that you're successfully connected to AdhocServer)
Well Hammerin Hero/Gensan seems to work: https://www.youtube.com/watch?v=0AcZMJpFOP0 And I tried it know and it worked but on my other PPSSPP folder. So it could be my main folder acting up again or something changed on the latest PPSSPP builds lol. The main folder issue is weird if its that tho.
Btw @MojoJojoDojo could you test Vulcanus Seek And Destroy on Linux and see whether it's generating similar issue (ie. the log filled with a lot of sceNetAdhocPdpRecv Errors) I might have a clue what's going on, at least on windows, not sure about other platform tho.
~And also, do you still remember which game was it, where i said the game couldn't handle partially received TCP/PTP data properly? I might have a clue about that too, but can't remember which game was it >.< i don't even remembered whether it was Adhoc game or Infrastructure game.~ It was CCCR - SF2, and the issue is the opposite of what i thought it was :( I might have a clue if the game couldn't handle partially received data, but it seems SF2 couldn't handle multiple TCP data being merged/combined, and i haven't found a clue how to separate those TCP data (other than reducing the buffer size that is, since we use larger buffer than what the game set)
Returning to the Hammerin Hero issue it seems like a regression on the latest builds. Latest stable build 1.11.2 seems to work fine with the game so maybe other games should play nice too. I will try Vulcanus and edit this post later. EDIT: Vulcanus at least seems to be able to host on Linux with one of the latest builds. I don't know about joining because I can never seem to get multiple instances to work on Linux lol. The log will show these messages on linux:
07:47:441 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2104 0=sceNetAdhocMatchingStart(1, 54, 7168, 54, 0, 56, 08bfab20) 07:47:473 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2006 443=sceKernelCreateThread(Thread, 08946908, 00000020, 4096, 00000000, 00000000) 07:47:474 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2104 0=sceKernelStartThread(443, 4, 08d44808) 08:56:465 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2322 sceKernelTerminateDeleteThread(443) 09:00:364 game I[SCEIO]: HLE/sceIo.cpp:1166 stdout: [i3NetworkContext::ConnectAdhoc] Start 09:00:434 game I[SCEIO]: HLE/sceIo.cpp:1166 stdout: [i3NetworkContext::CreateLobby] Start 09:00:434 game I[SCEIO]: HLE/sceIo.cpp:1166 stdout: [i3NetworkContext::CreateLobby] End 09:00:434 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2006 454=sceNetAdhocMatchingStart(1, 54, 7168, 54, 0, 56, 08bfab20) 09:00:434 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2104 0=sceNetAdhocMatchingStart(1, 54, 7168, 54, 0, 56, 08bfab20) 09:00:434 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2006 455=sceKernelCreateThread(Thread, 08946908, 00000020, 4096, 00000000, 00000000) 09:00:434 game I[SCEKERNEL]: HLE/sceKernelThread.cpp:2104 0=sceKernelStartThread(455, 4, 08d44808)
It seems like you will get an error if you try to run PPSSPP as sudo/admin:
I see, i had a feeling it's something that happen on windows only (ie. received data size not allowed to be initialized to -1 while it's okay on PSP apparently) Thanks for testing it.
Regarding Hammerin Hero, it would be nice if you know how to bisects it :) not even working on the earliest 1.11.3 ?
I see, i had a feeling it's something that happen on windows only (ie. received data size not allowed to be initialized to -1 while it's okay on PSP apparently) Thanks for testing it.
Regarding Hammerin Hero, it would be nice if you know how to bisects it :) not even working on the earliest 1.11.3 ?
I only checked for commits by you and the last one that worked was 1 commit before this one : https://github.com/hrydgard/ppsspp/pull/14466 Tested commit v1.11.3-669-g29ae351a5 .. didn't take a lot of time because you didn't have a lot of changes since stable lol.
Hmm.. that PR doesn't seems to do anything odd other than checking whether the socket is null or not during blocking-socket simulation, which could happen when the socket was deleted from a different PSPThread, thus avoid access violation.
Since the game worked before this crash fix, that means the socket never null on Hammerin Hero, thus never reached the code that returned ERROR_NET_ADHOC_SOCKET_DELETED, which mean that crash fix shouldn't affect Hammerin Hero.. so it's strange...
Is the issue persistant and can always be reproduced using the build with that crash fix? (v1.11.3-672-gf1bf596f5)
So v1.11.3-669-g29ae351a5 is the last working version?
Also, previously you said Hammerin Hero/Gensan worked with the latest version on another folder. I assume you're using default settings on this folder (ie. freshly extracted/installed)? So may be the issue is something related to some settings you've changed from default (either system/networking settings usually)? can also be some changes on compat.ini
Btw, regarding PPSSPP with sudo on Vulcanus, did you see any "failed to bind" error message with sudo? It would be nice if you can show the log when using sudo, so i can compare it with your previous log to see whether there are any difference or not.
Nah thats definitly a regression... I tried it on a fresh folder. I sm not sure its a adhoc change by you that made it regress though because later I tried some later builds and they still worked. It's somewhere between 672 and 742 , 742 was your change with HLE delays. Also it should be the reverse on linux - I should see a failed to bind error without sudo. But I used a high port offset either way and didnt get that error.
Ah wait @ANR2ME I just noticed the game is GameMode so the commit that caused it is from https://github.com/hrydgard/ppsspp/pull/14492 i couldn't notice its gamemode from logs because it didnt see it clearly from all the other logs lol. Maybe now its fixable? and maybe the other freezing games are GameMode too....
Ah man why I feel like i always kill responds in issues like that lol.
Vulcanus Seek and Destroy should be fixed by this PR https://github.com/hrydgard/ppsspp/pull/14849
Anything about the other games? Well updated that game for now. You know when I think about it someone could just patch out the game sending the all zero mac address first and the buffer size thing lol.
For Hammerin, The Host side seems to be alright, i can see "Initiating GameMode Scheduler"
While on the Guest side, i didn't see it :( So that's probably the main issue
PS: Those Kernel Warnings are spamming the logs way too much LOL
Because i heard that GameMode games connect simiarly to how Nintendo DS games are connecting and I also know how MelonDS with them I thought to uncap the frame rate of one instance while keeping the other on normal speed but it seems like it wont help here lol. For MelonDS you have to do it because its hard to keep up the sync between the instances when connecting. If someone wants a good game that works online (somewhat) on MelonDS then you got Medarot DS its a bit laggy online but somewhat works.
Even GBATEK is mentioning Master and Replica (called Slave here though) as terms , I saw the GameMode code mention UpdateMaster and UpdateReplica instead though (and is mentioning beacon frames as a way to announce wireless commuincation) : https://problemkaputt.de/gbatek.htm#dswirelesscommunications
The issue on Hammerin was, because the GameMode Scheduler (which is the one handling the syncing) is not running on the Guest side, thus they couldn't communicate, while the thread is being blocked for initial sync, thus frozen forever.
This PR https://github.com/hrydgard/ppsspp/pull/14852 should fix Hammerin' Hero, please try this on other GameMode games that were having freezing issue.
You could never know if games are GameMode sometimes until after you progress from the lobby so its a bit hard to know.
Rush seems like it's using AdhocMatching and it got something to do with sceNetAdhocMatchingGetPoolMaxAlloc() in the logs (?) its the same issue as hammerin hero but its not fixed.
WHO WANTS TO BE A MILLIONAIRE - PARTY EDITION seems like its no longer even runs on PPSSPP anymore might need a seperate issue for that one.
Super Pocket Tennis seems to be the same issue as Def Jam but I have no clue if its GameMode..
That's what I got with some of the logs on that game:
15:57:051 idle0 I[SCENET]: HLE\proAdhoc.cpp:437 Removing Friend Peer 00:02:02:02:02:02 [127.0.0.2] 16:02:326 user_main W[SCENET]: HLE\sceNetAdhoc.cpp:4402 UNTESTED sceNetAdhocMatchingStop(1) at 088572fc 16:02:330 user_main I[SCENET]: HLE\sceNetAdhoc.cpp:7331 InputLoop: End of InputLoop[1] Thread 16:02:337 user_main I[SCENET]: HLE\sceNetAdhoc.cpp:7064 EventLoop: End of EventLoop[1] Thread 16:02:338 user_main W[SCENET]: HLE\sceNetAdhoc.cpp:4475 UNTESTED sceNetAdhocMatchingDelete(1) at 08857314 16:02:338 user_main W[SCENET]: HLE\sceNetAdhoc.cpp:4519 UNTESTED sceNetAdhocMatchingTerm() at 08857400 16:02:338 user_main I[SCENET]: HLE\sceNetAdhoc.cpp:2342 Marked for Timedout Peer List (1) 16:02:338 user_main I[SCENET]: HLE\sceNetAdhoc.cpp:2378 00000000=sceNetAdhocctlDisconnect() at 088558d4 [group=] 16:02:342 user_main I[SCENET]: HLE\proAdhocServer.cpp:998 AdhocServer: PPSSPP (MAC: ec:84:97:0f:00:cd - IP: 127.0.0.1) left ULES00619 group
For games that have timing issue like Def Jam (where you can sometimes play multiplayer successfully) will be difficult to fix without knowing a better/more accurate timing, since changing the timing at will could cause regression on other games, so i won't be fixing it any time soon as it's too risky.
And yeah, in order to see GameMode in the log you usually need to start multiplayer game, some games also use AdhocMatching for the lobby and then initiate GameMode when the multiplayer mission started.
Regarding WHO WANTS TO BE A MILLIONAIRE - PARTY EDITION, if it can't even boot anymore you should open a new issue, it could be an important issue to be fixed.
OK got that millionaire party edition game to work.
I think it freezes for other reasons though on Ad-Hoc:
47:28:808 idle0 E[CPU]: core\core.cpp:479 BREAK! 47:28:809 idle0 E[CPU]: core\core.cpp:479 BREAK! 47:28:809 idle0 E[CPU]: core\core.cpp:479 BREAK! 47:28:809 idle0 E[CPU]: core\core.cpp:479 BREAK! 47:28:809 idle0 E[CPU]: core\core.cpp:479 BREAK!
47:28:808 idle0 E[CPU]: core\core.cpp:479 BREAK! 47:28:809 idle0 E[CPU]: core\core.cpp:479 BREAK! 47:28:809 idle0 E[CPU]: core\core.cpp:479 BREAK! 47:28:809 idle0 E[CPU]: core\core.cpp:479 BREAK!
I checked if this happens on single player too but seems to be a multiplayer only issue. Good thing you can also play that game with hotseat so you dont need ad-hoc.
You didn't comment on Rush which I have no idea whats its issue is because it never progressed past the lobby and the other player joining.
Seems to be about UNIMPL sceNetAdhocMatchingGetPoolMaxAlloc()
though.
Tried another GameMode game that didn't work after the regression but seems to work now at least (Hot Wheels).
"BREAK" happens in scenarios like this:
int result = sceNetDoSomething();
assert(result == 0);
It most likely means the game assumed something would happen some way and it went a different way.
-[Unknown]
On the 2nd window it showed the errors as ATRAC instead of idle0 too if I rembmer.
"BREAK" happens in scenarios like this:
int result = sceNetDoSomething(); assert(result == 0);
It most likely means the game assumed something would happen some way and it went a different way.
-[Unknown]
Btw, does BREAK supposed to appeared multiple times like that? usually CPU execution halted there until resumed isn't?
@MojoJojoDojo i'll check Rush and millionaire party edition later, may be tomorrow
If you have "ignore illegal memory access" enabled, then it also ignores BREAK.
-[Unknown]
Hmm.. I can't really tells what's wrong with Rush, since both side were able to communicate (send & recv) successfully, even when the screen looked frozen the game is still trying to sync their data, so it could be something to do with the content of the data being synced considered as invalid by the game, thus the game keep trying to sync it over and over and ended frozen (some games might shows a communication error dialog after a certain elapsed time in this case)
However, if i started from the Joining side first (instance 1 choose join and waited for a room to appear) and then Hosting on instance 2, and immediately join, and immediately accept the player, i was able to get into the game So there is a possibility that this game might have timing issue, may be there is a timestamp value in the data being synced.
Regarding Who Wants to be A Millionaire, it seems to be AdhocMatching issue..
The game is trying to compare the Optional Size/Length with sizeof(something), and it didn't matched :(
As i remembered the optional data is given by the game and appended at the end of the normal packet, not sure why it didn't matched..
That assert
might be occurred within AdhocMatching's callback/mipscall, this is going to be tricky to fix :( since the optional data were provided by the game, they should matched
PS: That UNIMPL sceKernelStopUnloadSelfModuleWithStatus
error is flooding the logs way too much :(
PPS: Disregard those HLE\sceNetAdhoc.cpp:1787 80410709=someHLEhere...
, that someHLEhere supposed to be sceNetAdhocPdpRecv
which is being called from a different real thread which ended appeared within another HLE on the Emu thread, thus hleLog...
is showing that HLE function instead of sceNetAdhocPdpRecv
, those AdhocMatching threads need to be moved into PSPThread to fix this logging issue.
Regarding Super Pocket Tennis, it seems to be AdhocMatching issue too, the game is trying to join twice in row and ended with an error
Hmm.. may be some of AdhocMatching HLE need to be blocking the thread until the callback/mipscall fully executed, this might also prevent the callback from getting the wrong optional data (on games that didn't checked the Event code within the callback handler)
Shame about the other games issues being complicated to solve.. Seems like it always either an AdhocMatching or GameMode issue but I would say that GameMode is in a kinda good spot now then before.
@ANR2ME was the problem with some games getting 0 FPS not a socket buffer size issue? Seeing as you talked about it here: #13648 (comment) Not talking about Vulcanus but the other ones here. They seem to get lower fps gradually until 0 FPS...
Just noticed i was actually right about this from the start lol (one of the few times I am).
Since we're close to release 1.12 i'll probably make one more PR which is to handle the "incorrect port" issue better on AdhocMatching and GameMode too, by keeping track of the new port being detected for replying data.
I'll probably try to move AdhocMatching threads to PSPThreads afterwards, probably not for 1.12 since it have a risk of breaking many AdhocMatching games, followed by testing whether some AdhocMatching HLE supposed to be blocking current thread or not.
LOL i haven't even had the chance to work on the infrastructure code yet, so i won't be able to make PR for it yet, since it have a risk of corrupting memory due to using socket id higher than 255 (which is probably why i often seeing invalid memory access while testing infrastructure)
If the moving to PSPThreads gonna break a lot of games maybe move it to a seperate option for people that want more stability on certain games. Shame about infrastructure not making it in though.
It's not supposed to be an option, because AdhocMatching threads were supposed to be running as PSPThread in the first place. It seems the first person who created it was porting it directly from pro-online plugin directly, thus threads that supposed to be running on PSP side ended running on the emulator side (PPSSPP).
Guess no matter what Android to PC issues gonna bother this emulator lol. The most common way to see it is in adhocmatching games that lets you invite players in 2 directions. Tried a game called Hokuto no Ken: Raoh Gaiden and couldnt even play with an Android user at all lol. Last time I tried this was a LAN issue as well though. I wonder why it happens after you choose a character there though... it just disconnets and saves the game, Just what it does after the character select that give it that result hmm... PC to PC is fine as always.
Whenever i had issue playing Android vs PC, usually having the slower one (in this case my Android is having slower performance than PC) as the Host/room creator, it will have higher chance to succeed, may be AdhocMatching syscalls really need to block the current thread so that it can at least waited for the packet & event before progressing too far, but there will be another issue, since AdhocMatching is using PDP/UDP in the case the packet got lost the one waiting may need to wait longer before it realized the packet was lost.
PS: since sceNetAdhocMatchingSelectTarget
is being called from user_main
which is usually the main thread which is used for rendering too, that thread is probably not being blocked to avoid the screen to look frozen, but it depend how the game developer design the netcode, as some games seems to prefer to froze the screen while waiting for packets.
Btw i tried Super Pocket Tennis on JPCSP+prx to find out what kind of error code should be returned from sceNetAdhocMatchingSelectTarget
but apparently it failed on the first attempt to join, with an undocumented error code (probably an internal error)
sceNetAdhocMatchingSelectTarget matchingId=0x1, macAddress=0x08B332BC(00:01:4a:b8:80:d0), optLen=0xBC, optData=0x09A77674
sceNetAdhocMatchingSelectTarget returning 0x9C8B44C
So i never know whether the game supposed to call sceNetAdhocMatchingSelectTarget
twice like what happen on PPSSPP or that syscall supposed to be blocking and only called once.
PS: with JPCSP HLE i couldn't even find the game room
After checking the logs on Super Pocket Tennis again, although the Joining side is showing a strange usage of sceNetAdhocMatchingSelectTarget
, but it seems the main issue is on the Host side :(
the game is kicking the joining player (by calling sceNetAdhocMatchingCancelTarget
) within the callback handler for some reason... something that happened between timestamp 21:744 and 21:773 (hmm.. 29ms.. that sounds familiar)
PS: AdhocMatchingCallback:
is indicating the start of a mipscall callback, while AfterMatchingMipsCall::run
is indicating the end of the callback
What happens?
Didn't wanna group them as one but also didn't want to have seperate issues. This is probably the last time I gonna report any issues for awhile though. Super Pocket Tennis - After the 2nd player joins the game disconnects. Rush- Game freezes after a 2nd player joins the game. WHO WANTS TO BE A MILLIONAIRE - PARTY EDITION - similar to Rush, freeze on both instances. Vulcanus: Seek & Destroy - Similar to Rush , but the game freezes when someone just hosts a game instead. Gensan - Similar to Rush , the game will freeze on both instances. Bomberman Panic Bomber - After the 2nd player joins the game disconnects. Shinseiki GPX Cyber Formula VS - disconnects after starting game. All tried locally by using "localhost" as IP. I remember trying with a higher timeout for some of the games but I don't remember if i did for all of them. The result was still the same though.
What are you using? What hardware / device and operating system? OS: Windows 10 CPU:Intel 8550U
What graphics card (GPU) or mobile phone model? GPU:Radeon 530
What PPSSPP version (standalone/official), and did it work before? Didn't notice but I dont think they worked on the latest stable release.
Which game or games?
Checklist