Ticket #25 (new defect)

Opened 2 years ago

actor movement needs improvement

Reported by: WarpZone Owned by:
Priority: major Milestone:
Component: physicallayer Version:
Keywords: collision slide slope walls physics player movement Cc:

Description

Summary:

When using actor.py or startTest or any other movement that relies upon lintest (and I have been told by the people at #crystalspace that this is basically the only way to go using scripted movement,) the behavior is not realistic when the player hits a steep slope. Collision is good, but the reaction is bad.

If the goal of CS is to make it possible/easy to create games with no C++ programming, then the default movement scripts that ship with CS need to have good movement/collision/reaction.

The current default behavior is so unrealistic that it instantly marks any game made using CEL as amaturish. 3D games released over 10 years ago had better collision than this. Fortunately, the theory behind the proposed fix is very simple: make the player slide down the steep slopes instead of getting stuck on them.

This would also be great for monsters, dropped items, projectiles, debris, and basically anything that falls, deflects, or flies. If it moves, and it is acted upon by gravity, wind or another force, then it should slide, not stick, when it impacts a surface that would normally block it, if it's at a severe angle.

You might not want to limit these changes to player movement. While lintest is still useful for some things, I think it would be a good idea to create a new type of test (I.E. 'deflectiontest') and use it instead of lintest in the default collision scripts. The current behavior of dampening an object's position to the obstacle's topology is really only desirable for a limited sub-range of collision applications, such as decals, hitscan weapons, area trigger collisions, or projectiles which self-destruct when they strike a surface rather than bouncing, rolling, or deflecting. It is certianly not useful for player movement or general-purpose game physics.

Observed Behavior: - Walking across a terrain works fine as long as the slope is not too steep.

- Walking up a steep slope freezes the player. It does not merely prevent him from climbing the slope, but it also prevents him from *trying* to climb the slope. Strafing is impossible anywhere near a steep slope. To touch the slope is to become "stuck" until you move away from the slope. In a fast-paced game, it's easy to immagine a player dying because he touched the slope and couldn't move.

- Jumping onto a steep slope freezes the player. The player may then walk down the slope, but can not jump off of it or slide down to the ground easily. This is unrealistic and prevents use of slopes, slides or cutes in a game.

- Jumping at a 90-degree wall (perpendiular to the floor) while holding down the "move forward" button causes the player to "stick" to the wall, or to very slowly slide down it.

- Jumping is disabled while on a steep slope.

- The emergent gameplay experience caused by all of the above is, if the player falls from a great hright and lands on an extreme slope too steep to climb, he sticks to it, and must walk very slowly down towards the ground.

Expected behavior:

-Running along the foot of a steep slope should not freeze the player or inhibit his movement.

-Attempting to run diagonally up a steep slope should only result in the player running along the ground near the bottom of the slope, or at worst, starting to climb up one step and then sliding back down to the ground, while still moving along their intended trajectory. (or as close as possible while sliding down.)

-Jumping at a slope too steep to climb should result in the player sliding back down the slope to the ground.

-Jumping against a perfectly flat wall should be no different from jumping straight up and then falling back down again, no matter what movement is attempted.

-When the player is dropped onto a steep slope, he should slide down to the ground.

Thoughts on implementation:

- The hardcoded slope limit is good, but reaction when this limit is met/exceeded needs to be improved.

- Easiest way would be to make the player slide down a too-steep slope instead of sticking to it.

- Mapper overrides for "how steep is too steep" or a value to control friction on the "too-steep" slopes would be a nice bonus.

- If nothing else, a quick fix (next release?) would be to either remove the slope limit altogether until reaction is improved, or to allow the mapper/scripter to toggle the slope limit off.

Thank you and good luck!

Attachments

Add/Change #25 (actor movement needs improvement)

Author



Action
as new
 
Note: See TracTickets for help on using tickets.