When walking to the outer edge of an object with MF_SOLID and a large radius (around 128*FRACUNIT or larger), it suddenly jumps to the top of your head, causing you to fall under it. And you can continue you push it upwards in that same outer edge if you jump or fly or whatever.
This is absolutely infuriating to me, as it prevents me from creating large splat platforms that properly function as platforms in level design. Instead, they yoink themselves out from under your feet, making you unfairly fall into a pit.
Designs
Child items
...
Show closed items
Linked items
0
Link issues together to show that they're related.
Learn more.
This also happens with smaller objects - SRB2 just doesn't like when two solid objects (like your splats and the player) try to occupy the same space, forcing one of them to step up. The fact that your splats are bigger than a blockmap block and may not be aligned with or orthogonal to the blockmap itself may exacerbate the issue.
One way to prevent this step-up from happening is removing solidity from one of the colliding objects (preferably the panels) before making it move, then readding MF_SOLID when the movement is done.
Unfortunately, that won't work because I still want the player to be able to stand on the object, not just prevent the step up. I can prevent the step up just fine by doing either that or adding in MF_NOCLIPHEIGHT or a constant teleport to the correct position. But I'm not simply trying to prevent the step-up here, and that's where the issue lies.
This is almost certainly a blockmap limitation, since IIRC it is split up into 128x128 chunks (hence objects with radius > 64 having issues). I'm not familiar with the blockmap collision code but I would wager there's not much that can be done short of restructuring it entirely. Objects were never intended to work like this :(
Yeah, this issue is known all the way from Doom I believe ... the only way I can think of to fix it would be to port over some code from ZDoom or such that keeps track of mobjs that only partially touch each block. But I don't know how much work that would take exactly.
Are you guys sure it's a blockmap issue? Now, if I halve the radius of the platforms, it works just fine as expected...
But if I halve the player's scale as well, the issue starts happening again?
If my understanding of blockmaps is correct, halving the player's scale should not do anything as the size of the blockmaps themselves are always fixed. I think what's really going on here is wonky MF_SOLID on MF_SOLID collision. Remember, MT_PLAYERalso has MF_SOLID, which means solid objects can actually stand on top of a player (provided they aren't crushed first). My guess is that the collision code is for whatever reason prioritizing making the platform stand on the player instead of vice-versa.
Yeah I'm sure, blockmap blocks by no coincidence are 128x128 fracunit squares, and mobjs are only considered to be in a blockmap block if their centers are inside it.
Fun note, in case it helps: you can actually see the blockmap in devmode's automap, if you turn the grid on.
After some testing, I think I can firmly say it's a blockmap issue.
By placing the platform directly in the center of four blockmaps, collision in only top right one works properly. As soon as I walk into or past the center of any of the other blockmaps, the issue described occurs.
@MonsterIestyn I'm having the same issue with my papersprite door that I made that has a radius of 64FRACUNIT and a height of 128FRACUNIT, and it only happens when you are indeed touching the block partially so that is the best solution to fix this annoying issue without rewriting the entire collision code.