1,026
edits
Icecream17 (talk | contribs) (→Quarter-Frame Checks: make the effect of flags easier to look for) |
mNo edit summary |
||
(2 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
Typically, Mario's position is updated incrementally using his velocity. These increments are called '''steps''', and they behave differently when Mario is on the ground, in the air, in water, hanging, and climbing a pole. When on the ground or in the air, these steps typically occur four times per frame, and are commonly referred to as '''quarter steps''' or | Typically, Mario's position is updated incrementally using his velocity. These increments are called '''steps''', and they behave differently when Mario is on the ground, in the air, in water, hanging, and climbing a pole. When on the ground or in the air, these steps typically occur four times per frame, and are commonly referred to as '''quarter steps''' or colloquially '''quarter frames'''. | ||
Steps are also responsible for detecting collision with [[surfaces]], updating Mario's [[referenced surfaces]], and updating Mario's [[Water|water level]]. However, quarter steps don't detect object collisions or warps. | Steps are also responsible for detecting collision with [[surfaces]], updating Mario's [[referenced surfaces]], and updating Mario's [[Water|water level]]. However, quarter steps don't detect object collisions or warps. | ||
Line 19: | Line 19: | ||
## If the position is above OOB but below Mario's current floor height, Mario's height is changed to the floor height and he '''lands'''. | ## If the position is above OOB but below Mario's current floor height, Mario's height is changed to the floor height and he '''lands'''. | ||
## If the position is above OOB but not below Mario's current floor height, Mario's height is set to the new height and he '''hits a wall'''. | ## If the position is above OOB but not below Mario's current floor height, Mario's height is set to the new height and he '''hits a wall'''. | ||
## If the action has the <span style="green">"riding shell" flag</span> and the water level at the position is above the position's floor (up to 78 units above the position): | ## If the action has the <span style="color:green;">"riding shell" flag</span> and the water level at the position is above the position's floor (up to 78 units above the position): | ||
##* The floor height from here on is the water height. | ##* The floor height from here on is the water height. | ||
##* The floor from this point on is a "fake" floor on the surface of the water. | ##* The floor from this point on is a "fake" floor on the surface of the water. | ||
Line 33: | Line 33: | ||
## If the position's height is 160 units under, at, or above a ceiling and his vertical velocity is positive or zero: | ## If the position's height is 160 units under, at, or above a ceiling and his vertical velocity is positive or zero: | ||
##* Mario's vertical velocity is set to zero. | ##* Mario's vertical velocity is set to zero. | ||
##* If the ceiling above Mario is hangable and the air step has the <span style="green">"check hang" flag</span>, Mario '''hangs'''. (Since this did not use the new position's ceiling/location, this is potentially a [[Hangable Ceiling Upwarp|hangable-ceiling upwarp.]]) | ##* If the ceiling above Mario is hangable and the air step has the <span style="color:green;">"check hang" flag</span>, Mario '''hangs'''. (Since this did not use the new position's ceiling/location, this is potentially a [[Hangable Ceiling Upwarp|hangable-ceiling upwarp.]]) | ||
##* Otherwise, '''nothing happens'''. | ##* Otherwise, '''nothing happens'''. | ||
## If the position's height is 160 units under, at, or above a ceiling and his vertical velocity is negative: | ## If the position's height is 160 units under, at, or above a ceiling and his vertical velocity is negative: | ||
##* If the position's height is at or below Mario's floor height, Mario's height is set to the floor height, and he '''lands'''. | ##* If the position's height is at or below Mario's floor height, Mario's height is set to the floor height, and he '''lands'''. | ||
##* Otherwise, Mario's height is set to the new height and he '''hits a wall'''. | ##* Otherwise, Mario's height is set to the new height and he '''hits a wall'''. | ||
## If there is a wall 30 units above the position but not 150 units above the position and the air step has the <span style="green">"check ledge grab" flag</span>: | ## If there is a wall 30 units above the position but not 150 units above the position and the air step has the <span style="color:green;">"check ledge grab" flag</span>: | ||
##* If Mario's velocity is positive, Mario is pushed by the wall opposite the velocity direction, and there is a floor 60 units behind the wall within 238 units upward, Mario '''ledge grabs'''. (Potentially a [[GLG]]) | ##* If Mario's velocity is positive, Mario is pushed by the wall opposite the velocity direction, and there is a floor 60 units behind the wall within 238 units upward, Mario '''ledge grabs'''. (Potentially a [[GLG]]) | ||
##* Otherwise Mario's position is set to the new position, his floor and floor height are updated, and '''nothing happens'''. | ##* Otherwise Mario's position is set to the new position, his floor and floor height are updated, and '''nothing happens'''. | ||
Line 109: | Line 109: | ||
** The camera preset is set to the area's default preset. | ** The camera preset is set to the area's default preset. | ||
** Mario enters the [[Lava Boost|lava boost]] action while dropping any held objects and no longer riding a shell. | ** Mario enters the [[Lava Boost|lava boost]] action while dropping any held objects and no longer riding a shell. | ||
=== Common Air Knockback Step === | |||
Similar to Common Air Step, it uses the "exit" from Perform Air Step. This function takes in a '''''landing action''''', a '''''hard fall action''''', and a '''''speed'''''. | |||
Before calling Perform Air Step, it sets Mario's speed to '''''speed'''''. | |||
Common Air Knockback Step can cancel into [[Feet Stuck In Ground]], '''''landing action''''', and '''''hard fall action'''''. | |||
Mario cannot '''Hang''' or '''Ledge Grab'''. '''Nothing Happens''' and '''Lava Wall Boosts''' (contains cancel [[Lava Boost]]) are the same as for Perform Air Step. | |||
* '''Lands''' | |||
** If should get stuck in ground, drop and set action to [[Feet Stuck In Ground]] | |||
** If y-velocity less than negative 55 and floor is not lava, | |||
*** If fell more than 3000 units, shake camera, play MARIO_SOUND_ATTACKED, and drop and set mario action to the '''''hard fall action''''' with argument 4 | |||
*** Else if fell more than 1500 units and floor is not slippery | |||
**** Hurt counter += 8 if cap, else 12 | |||
**** Squish counter += 30 | |||
** If neither of the first two checks canceled, set action to '''''landing action''''' (not changing the action argument, though there are differences in the Japanese version where the [[Thrown Forward]] and [[Thrown Backward]] intermediate actions cause the landing action argument to be hurtCounter) | |||
* '''Hits a wall''' | |||
** Change to the background air kb Animation | |||
** If Mario's wall is not null | |||
*** Mario's facingAngle[1] = wallAngle - (s32)(facingAngle[1] - wallAngle) | |||
**** basically this step added two wallAngle | |||
*** play either METAL_BONK or BONK sound | |||
** else | |||
*** play HIT sound | |||
** facingAngle[1] += 0x8000 | |||
** Cap vel[1] to 0 | |||
** Set forward velocity to negative '''''speed''''' (and update slide and xz velocities to match) | |||
[[Category:Action Mechanics]] | [[Category:Action Mechanics]] |
edits