Fix or Hack for persistent warning messages please
-
Can anyone tell me the cause and help me to fix it, or find a hack to prevent these error messages from being generated / written to the logs please?
They seem to happen suddenly and fill up the FLSpew log by the hundreds after the game has been running for a long time.
They also happen when the game is minimised (return to desktop whilst game is running).
I think this message swarm is what is causing some Freelancer.exe crashes:-
Msg 1:
WARNING:General:set_gamma_function() called outside of create_buffers/destroy_buffersMsg 2:
WARNING:General:set_material() called outside of create_buffers/destroy_buffersMsg 3:
WARNING:General:set_texture_stage_texture() called outside of create_buffers/destroy_buffersMsg 4:
WARNING:General:set_texture_stage_state() called outside of create_buffers/destroy_buffersMsg 5:
WARNING:General:set_render_state() called outside of create_buffers/destroy_buffersMsg 6:
WARNING:General:verify_state() called outside of create_buffers/destroy_buffersMsg 7:
WARNING:General:set_material() called outside of create_buffers/destroy_buffersAnd our old favourite if possible, which happens 2 times when we press F1 or load a character:
Msg 8:
WARNING: Failed to get start locationMany thanks guys.
And on a similar line, following from my problems with sur files - can anyone find a hidden buffer or log (not fl-server-errors.log) where error messages such as sur errors might be being generated or stored, that might be causing all of us random FLServer.exe crashes when there are hundreds or thousands of them?
-
rp8.dll 00D1FD B802->EB4D = disable "set_material() called outside of create_buffers/destroy_buffers" spew warning ~adoxa rp8.dll 00FA82 B802->EB4D = disable "set_render_state() called outside of create_buffers/destroy_buffers" spew warning ~adoxa rp8.dll 00FBE9 B802->EB4D = disable "set_texture_stage_state() called outside of create_buffers/destroy_buffers" spew warning ~adoxa rp8.dll 0100ED B802->EB4D = disable "set_texture_stage_texture() called outside of create_buffers/destroy_buffers" spew warning ~adoxa rp8.dll 01033C B802->EB4D = disable "verify_state() called outside of create_buffers/destroy_buffers" spew warning ~adoxa rp8.dll 015403 B802->EB5C = disable "set_gamma_function() called outside of create_buffers/destroy_buffers" spew warning ~adoxa freelancer.exe 03B348 74->EB = disable "Failed to get start location" spew warning ~adoxa ```I don't think there is any such buffer or log. If you can provide me with a crash address, I could have a look around.
-
Wow! That was so fast!
Very many thanks adoxa, very much appreciated.
Yes at 15401 I also see 75 66
At 15403 I see B8 02
Can you tell me how can I get you the crash address?
I can get the dump that would be sent to Microsoft when FLServer.exe crashes, is that useful?
-
Yes, it should have been 15403, not 15401; updated the patch.
Here are instructions I made earlier to get the crash address. The second window contains the exe/dll that caused the crash (ModName), with its file offset (Offset); the third window provides the address in memory (Address).
-
Hi adoxa.
Here’s a crash report from the sur problem, hope it gives us a clue.
And the dxdiag.txt file too.
I couldn’t copy the dump data from the dump window to upload it.
-
Ah, the old 124bd bugbear. I made a plugin to log and prevent the crash (14 downloads, but no one’s reported back).
Edit: Scratch that, already tracked it down to a collision problem. Note this is solely an MP issue; the code is not called in SP. Attached two plugins (both installed via dacomsrv.ini). GetRoot will log the crash and prevent it; GetCollisions will log the collision that causes the bad root (I think that’s how they work; it was a while ago and I made no comments). The logs are created in EXE, as *-bad.txt. Unfortunately, I don’t think the collisions log really provides any useful information. Try running with PacketLog as well, see if there’s any correlation with the timestamps (the IM conversation where this originated never got that far). At the time, I thought this might have been a legitimate bug (some sort of race condition, where the object is destroyed before the collision is applied), but if it’s only happening with generated surs and not vanilla surs, I guess not.
-
Good if it is familiar - can we link that to sur problems?
They only happen when I use the new surs I made with Sur Builder.
It would be great to find the cause in the sur file so we can avoid them.
-
Ok.
Clue - collision as in collision between 2 ships?
I am jumping to conclusions, but -
I am using a giant ship (the Midway, 1800m+ in length) as a base, the test fighters attack it, and it could be when a fighter with the problem sur collides with the base ship hull!
Hence why it is so intermittent, and why Sushi isn’t seeing the problem at all, he has set up the 2 fighter types attacking each other only.
That could very well be the problem, collision detection, not hit detection! Bounding boxes missing - if so then it is likely that all custom surs will fail when tested in this way for long periods!! Yay!
How can we prove this as the case or not?
Sushi can you set only 1 test ship type and make the faction hostile to your base so they attack it? It will need to be a big base to encourage collisions.
-
Is your big ship’s SUR built using the SUR builder and couldn’t that be the faulty one?
-
I built the big ship sur manually and used Sur splicer.
When I change the fighter sur for any vanilla one it runs clean for overnight.
It could be that having one good sur (the vanilla one with boundary boxes) in a collision enables the detection and stops the problem, and if both the base ship and the fighter are custom surs (no boundary boxes) then the collision detection error-crashes.
Collision detection (ship-to-ship) sounds right at the moment, not hit detection since the ships can be destroyed for many minutes in constant waves.
Need to find a way to prove it.
-
Like I mentioned earlier, all of my ships are made using surs built with the tool, I’ve bounced off a hell of a lot of them and not had a crash due to it. So I’d say ship to ship collisions are fine, but you’re talking about a collision with a custom solar sur, could the solar sur be the problem, not the ships.
Just for the hell of it, make an sur for the solar with the sur tool, then run the test again, see what happens. I know it will fit like crap but it’s a reasonable step to take for elimination.
-
The sur builder adds a collision box for every sur part it generates so it would have to be something else. If you can track it down exactly whats causing it there may be a way to fix it. Cant fix a problem if the problem isnt defined properly. I cant test them since my server worked fine with over 128 custom surs in it.
-
Well… ST’s base SUR wasn’t made with the SUR builder, so it obviously doesn’t have a collision box.
-
Sorry, ST, I think it was a munition collision. Perhaps logging all collisions might help, although it might generate a huge file. GetCollisions.dll, 00114E, 74->EB. Search for “crash” in GetCollisions-bad.txt and see what’s around it. And run PacketLog, too (hope you have a lot of free space). Use PacketDump on the packet log and correlate the times with the crash times from the collisions log. GetRoot-bad.txt shouldn’t be providing any relevant information, unless the addresses are different (i.e. they should all be the same address, but I don’t remember what that address was). Alternatively, if possible, put together a mini-mod for me to test myself.
-
Thanks guys, I’ll do it when I can get some free time and report back.
-
Adoxa - by munition collision, do you mean ammo, or a missile, hitting a ship?
Or do you mean ammo hitting ammo, like a missile being hit by a bullet?
This crash is so intermittent, it could be as bad as the second suggestion.
But what is against that is that when I replace the suspect .sur file only, with any of the vanilla surs, then the game runs clean. All the weapons and factions and ammo are the same. Only the sur is different.
Anway, which of the above do you mean?
-
Actually, perhaps it isn’t necessarily munition collision after all.
void PhySys::GenerateCollisions(CBeam *) void PhySys::GetCollisions(UINT,const PhySys::CollisionEvent * &,const PhySys::CollisionEvent * &) ```The server calls those two functions, then runs a loop, presumably testing each collision. The crash occurs due to an object apparently no longer existing. At least, that's what I thought was happening, but that would imply it would occur with vanilla surs, too. Since that doesn't seem to be the case, I guess it's something else. A look at the log files would help. But then, when you replace the sur file, do the object names in the sur still match the cmp? Perhaps the sur simply isn't being used in the same way.