UE2 - UT2kX PHYS_Falling + hugging the wall ~ cancels velocity

  • Two Factor Authentication is now available on BeyondUnreal Forums. To configure it, visit your Profile and look for the "Two Step Verification" option on the left side. We can send codes via email (may be slower) or you can set up any TOTP Authenticator app on your phone (Authy, Google Authenticator, etc) to deliver codes. It is highly recommended that you configure this to keep your account safe.

rejecht

Attention Micronians
Jun 15, 2009
511
0
16
.no
sites.google.com
Problem:

A pawn might stop ascending :tup: or descending :tdown: when it hugs the wall "the right way" while in PHYS_Falling; ie a jumppad making a player hug the wall.

This happens often during netplay games, where an ascent is abruptly cancelled because a pawn hugged the wall while in ascent -> pawn falls down -> pawn sent up by jumppad again until eventually reaching the jumpspot.


This behaviour is found with maps that use a JumpPad to send a pawn flying up in front of a wall.

Obvervations:
- The behaviour differs in netplay games.
-- In netplay games, it seems to be impossible to provoke this bug when the pawn is descending/falling (IIRC), but it happens almost all the time on ascent, when hugging the wall "the right way." Another difference in netplay games is that the pawn falls according to gravity after having its velocity cancelled, but in offline/local games, the pawn might fall slowly, gliding down the wall.

Example map:
DM-Campgrounds2004-G1E

Location:
The center area utjumppad where the UDamage is, but the other area with the pillars demonstrates the same issue.

Once a pawn hugs the wall "the right way," the ascent or descent is cancelled. Again, the pawn might descend slowly in offline games, or according to gravity in netplay games (I haven't seen evidence of anything else).

attachment.php


Local/offline game: In the screenshot above, the pawn was thrown up in the air by the UTJumpPad. I moved the pawn towards the wall, either during ascent or descent. The original velocity is abruptly reset by the hit, and the pawn usually starts falling slowly, as if gliding down the wall, sometimes in small bursts.

The following is observed (player showdebug):
- Velocity: X is always 0, while Y and Z values fluctuate, and no movement keys are used at this point.
- Acceleration: always 0.
- Location: Rotation: The third rotation value seems to fluctuate as well.
- No need to move towards the wall once caught in this anomaly; the pawn can be left alone.

It might take a couple of tries to reproduce it. Just move against the wall at some angle. Sometimes you don't have to do anything; ie have the pawn fall on the jumppad, and the angle will throw the pawn at the wall "the right way," and the velocity gets cancelled.


Is this solvable in UnrealScript, or is there some mapping trick? (Note that the BlockingVolume in the example map doesn't fix this.)

PS: I tried reproducing this bug in the latest UDK build (to see if it had been carried over), using the standard scripts, but it seems to work as it should there; no velocity cancelling on hugging the wall while in ascent or descent.
 

brold9999

New Member
Apr 5, 2009
142
0
0
I notice you use the term "the right way" repeatedly. What is "the right way" to hug a wall?
 

rejecht

Attention Micronians
Jun 15, 2009
511
0
16
.no
sites.google.com
"The right way" represents the exact conditions that kick in to have the velocity cancelled (because hugging the wall while ascending or descending doesn't always invoke the velocity cancelling--it does happen often enough, so the exact knowledge of "the right way" is not necessary to reproduce the error.)
 

.:..:

New Member
Apr 11, 2006
61
0
0
Finland
Happens between BSP cuts of the wall (or polygons on static meshes), best way to go would be to cover the wall face with a thin layer of blocking volume as it won't have any cuts.
 

rejecht

Attention Micronians
Jun 15, 2009
511
0
16
.no
sites.google.com
Happens between BSP cuts of the wall (or polygons on static meshes), best way to go would be to cover the wall face with a thin layer of blocking volume as it won't have any cuts.
Except: "(Note that the BlockingVolume in the example map doesn't fix this.)"

I've tried a number of these variations with my own maps as well, and I've seen other maps trying that approach, but still, it doesn't work.


Another brush collision problem that is prevalent: Take a look at the lower platform on the left in the screen shot. It's 1024x512y. It has two brushes stacked on top of each other. The top brush is 16z, IIRC.

[screenshot]http://i739.photobucket.com/albums/xx39/unrealjecht/DM-BurnBaby-Beta1/Shot00458.jpg[/screenshot]

If a pawn was hugging it and trying to jump up, it would -sometimes- collide with the top brush; but once it did collide, it kept on colliding. (Of course, the platform on the right had to have a BlockingVolume.) Changing brush order around did nothing. Wrapping them all inside a BlockingVolume did nothing -until- I tried padding the BlockingVolume with, say +4 units on X and Y; then it solved the bumping issue. I haven't tested this with the UDK version of UE3, though, but I suspect they've fixed it, if not in unrealscript, some other place. Still, would be nice if these errors were fixable from unrealscript.
 

JohnnySix

Caffienated Haemoglobin
Apr 6, 2002
406
0
16
England
planetunreal.com
You could maybe attach an invisible actor to the playermodel, with a slightly larger collision radius, that activates collision if traveling at a certain speed (faster than running speed perhaps?)

I wanted to do something similar for my UT99 w00t server, as I have exactly the same issue on some of my maps.

Could test for if it is colliding with bsp at an approximate 90* vector to the velocity vector on the z plane (assuming z is up/down axis) then maybe push them a little away from that hit location, so the player's collision doesn't actually get to touch the wall?
 

brold9999

New Member
Apr 5, 2009
142
0
0
I have taken a moment to test this out and was able to reproduce the behaviour reliably. I took a look at your blocking volume and noticed that it is a wedge shape, and most of the triangle is behind the wall. The blocking volume has to be in front of the wall for it to work. I replaced the blocking volume with a rectangular one 864 x 8 x 256 and the problem no longer occurs.

There may be ways of dealing with this issue in script, but that would be far more work. Why do you want an Unrealscript way of doing it?
 

rejecht

Attention Micronians
Jun 15, 2009
511
0
16
.no
sites.google.com
You could maybe attach an invisible actor to the playermodel, with a slightly larger collision radius, that activates collision if traveling at a certain speed (faster than running speed perhaps?)

I wanted to do something similar for my UT99 w00t server, as I have exactly the same issue on some of my maps.

Could test for if it is colliding with bsp at an approximate 90* vector to the velocity vector on the z plane (assuming z is up/down axis) then maybe push them a little away from that hit location, so the player's collision doesn't actually get to touch the wall?
Sounds interesting. A collision aura that kicks in under certain conditions.

What about intercepting the collision somehow? The *HitWall functions seem like logical candidates, but I don't know their role in the scheme of things, and these functions are most likely called after the engine already messed up the collision, meaning one would have to keep a history of vector changes for comparison, to see if the change was anomalous when "the right way" is triggered.

I have taken a moment to test this out and was able to reproduce the behaviour reliably. I took a look at your blocking volume and noticed that it is a wedge shape, and most of the triangle is behind the wall. The blocking volume has to be in front of the wall for it to work. I replaced the blocking volume with a rectangular one 864 x 8 x 256 and the problem no longer occurs.

(The campgrounds remake is not mine.) Confirmed. I tried your approach with that map, and it worked consistently. The original BlockingVolume was also in subtracted space, however, but at an angle. Anyway, my hope is renewed, and my apologies to .:..:, but I did test having a BlockingVolume in front of the BSP with my problem map, without a slanted angle, which is why I dismissed it so quickly since it didn't work there--will try a wider BlockingVolume to see if that fixes it.

There may be ways of dealing with this issue in script, but that would be far more work. Why do you want an Unrealscript way of doing it?
The issue is not only prevalent when ascending--descending and hugging a wall will also provoke this issue. Statistically, however, it will happen more often where there are utjumppads infront of walls.
 

brold9999

New Member
Apr 5, 2009
142
0
0
Ultimately it is the mapper's responsibility to prevent this sort of thing from happening. It may be possible to create a mutator that works around the behaviour but it seems like most workarounds are going to be both a lot of work and have a lot of unexpected bugs.