Greetings everyone. Gpro and I have been working on a little project looking at the mechanics of the shield bump on Keyes. We're trying to figure out if there is a way to calculate the output location of the bump from given input coordinates. Initial tests have shown some interesting things, and Gpro has managed to isolate and define the boundaries for the Keyes bump area.
We wanted to make this data public, as it is our hope that this preliminary testing will aid and encourage future work in providing a better understanding of bumps in general so that in the future bumps can be predicted using only knowledge of polygon surfaces and coordinate locations. Understanding bump mechanics will hopefully help in the creation of a consistent belly-skip bump as well.
==================== Methods ====================
Gpro utilized Cheat engine to manipulate MC's position very precisely. He has produced three videos that provide input/output data for the shield bump. The videos were recorded in 60 fps. I've linked the one I extracted the co-ordinate data from directly below, and the other two videos are linked at the end of this post under "Resources", along with all other files used so far in this project.
To extract the coordinate data, I frame advanced the video and recorded the coordinate values the frame before the bump occurred and the frame after. I then wrote a matlab script to calculate the vectors from each bump (see below). If you do not have matlab you can still open the script in any plaintext editor to take a look if you feel so inclined.
==================== Results ====================
This image shows the vectors for all the bumps performed in the above video. You can see three unique clusters of bump locations, which can also be observed in the video. The largest magnitude bumps were seen between the X values of 46.16 and 46.17. The small lines that don't look like arrows that you see are the bumps that simply pushed Gpro out of the shield without giving him any height.
These two images show views of the X-Y and Z-X planes respectively. Its apparent that in the case of the keyes shield bump, with the set-up we used for this experiment, there is a negligable change in the X coordinate during the bump, with all of the movement occuring in the Z-Y plane (shown below).
The Z-Y plane provides us with an interesting discovery; no matter the magnitude of the bump, the slopes (dZ/dY) are fairly uniform for every bump at an average value of roughly 1.4824 which corresponds to an angle of approximately 56 degrees from horizontal. We also see here that in the case of the keyes shield bump the largest magnitude bump corresponds to a Y value between -102.09 and -102.0905, and an X value between 46.165 and 46.17.
The going hypothesis is that the direction of the bump vector is normal to the surface of the polygon being utilized for collision detection. This seems to make sense as that is generally how videogames prevent characters from walking through walls. A character will first actually penetrate the wall as they walk into it, and the game will realize this and calculate the appropriate collision response vector required to separate the collision models of the wall and character. This collision response vector is traditionally normal to the wall. In basic terms, this means that the bump direction could be predicted if the slope of the polygon used for collision is known.
Gpro suggested that the shield's collsion box doesn't instantaneously spawn along its entire volume. Instead he hypothesised that the collision box materializes upwards from the base of the shield. As a result, there is open space above the shield and a collision surface that is sub horizontal, resulting in a collision response vector that is normal to that surface (upwards and in the positive Y direction).
Gpro's work outlining the boundaries of the successful bump zone are shown in the picture below. One should note that the upper boundary on the X coordinate was found empirically, and the lower bound was just assumed to be symmetric about the shield origin.
=========================== Important Notes ===========================
A few important concepts have come up through testing in relation to the collision models and collision vectors. It is apparent that the important part of chief's collision model is the lower body only in many scenarios. Previous work by 00Svo has shown that chief's collision with marine's is roughly hip height; only slightly higher than the benches in the cafeteria on POA.
00Svo has also shown that when chief is standing on top of an elite, the collision between chief and the elite is the same regardless of whether or not chief is crouching or standing. The effect of crouching on MC's collision box has not been extensively tested at the time of this writing. Pulling the collision models from the game files may aid in this endeavour.
It is important to note that the collision response vectors that are responsible for bumping MC in Halo CE don't actually impart any momentum to the character model. This is at odds with the collision response vectors in Halo 2 and Halo 3, where glitches like superbouncing and DC launching rely on the momentum imparted by the collision response vector. Bumps in Halo CE appear to be more of a teleportation than continuous differentiable movement. Though they are different, it is theorized that the method dictating the magnitude of the collision response vector for Halo CE should be the same process that determines the speed of a DC launch in Halo 3 or the magnitude of a superbounce in Halo 2.
Lastly, there is a one frame window during which you can jump after a bump has been performed if the initial position for the bump was on the ground. The game will still allow you to jump as though you were on the ground, until it calculates collision for the new location and realizes you are not on the ground.
============================================ Reccommendations for Future Work ============================================
Moving forward, future research into this subject would do well to examine the mechanism by which the magnitude of the collision response vector is calculated. It is likely tied to how many collision checks are done per unit length of time before the response vector is actually applied to cheif. If this is the case it may be tied to frame-rate, or some other clock within the game itself. Just pray it isn't tied to something hardware related. Pulling the actual collision models for cheif and the shield from the game files may be useful in this endevor.
In addition, it would be useful to find a way to test the theory that collision response vectors have orthagonal slopes to their polygon surface. If slopes of polygons can be calculated or observed in a bsp or model viewer such as Entity, a theoretical bump direction could be calculated and then tested to see if the theory holds.
=================== Resources ===================
The Coordinate files, Pictures, Matlab script, and original document can be found here: Resources and Files