Action: Difference between revisions

Jump to navigation Jump to search
886 bytes added ,  2 June 2023
Expand on interactions
(Describe what happens when execute_mario_action is done as a sanity check for the Idle page)
(Expand on interactions)
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:


An '''action''' is a particular state that Mario can be in. [[Long Jump|Long jumping]], [[crouching]], and [[walking]] are examples of actions. Each action has code controlling high-level behavior such as Mario's movement while in the action, as well as transitions to other actions.
An '''action''' is a particular state that Mario can be in. [[Long Jump|Long jumping]], [[crouching]], and [[walking]] are examples of actions. Each action has code controlling high-level behavior such as Mario's movement while in the action, as well as transitions to other actions. Mario can only be in one action at a time.


It is likely the game developers referred to actions as "states", as evidenced by the "STA" label on one of the debug menus. The name "action" was chosen by the community as a less ambiguous alternative.
It is likely the game developers referred to actions as "states", as evidenced by the "STA" label on one of the debug menus. The name "action" was chosen by the community as a less ambiguous alternative.
Line 79: Line 79:
|}
|}
Note that the first three flags have the same name as the first three action groups. While most actions in these groups have the corresponding flag set, the converse is typically not true. Actions in the cutscene group, for example, may have the airborne flag set if they take place while Mario is in the air. There also exist unintuitive cases, such as action 0x036, [[Air Throw Land|air throw landing]], which has the airborne flag set despite being a grounded stationary action, leading to strange behavior in some circumstances.<ref>[https://www.youtube.com/watch?v=c8iD58RQ1nw "Air Throw Landing (Commentated)" by bad_boot]</ref>
Note that the first three flags have the same name as the first three action groups. While most actions in these groups have the corresponding flag set, the converse is typically not true. Actions in the cutscene group, for example, may have the airborne flag set if they take place while Mario is in the air. There also exist unintuitive cases, such as action 0x036, [[Air Throw Land|air throw landing]], which has the airborne flag set despite being a grounded stationary action, leading to strange behavior in some circumstances.<ref>[https://www.youtube.com/watch?v=c8iD58RQ1nw "Air Throw Landing (Commentated)" by bad_boot]</ref>
== Frame ==
== Frame ==
Whenever within a frame, <code>execute_mario_action</code> is called, and Mario's action is not "uninitialized", the following happens:
Whenever within a frame, <code>execute_mario_action</code> is called, and Mario's action is not "uninitialized", the following happens:
# Reset Mario's model. The model animation will be updated within the action.
# Reset Mario's model. The model animation will be updated within the action.
# Why is so <code>update_mario_inputs</code> so complicated? Not even going into that.
# Why is so <code>update_mario_inputs</code> so complicated? Not even going into that.
Line 90: Line 88:
# If Mario's action does not have the (11) air or (13) swimming flags, the floor is SURFACE_BURNING (lava?), and Mario is not riding a shell and mario's is less than 10 units above the floor.
# If Mario's action does not have the (11) air or (13) swimming flags, the floor is SURFACE_BURNING (lava?), and Mario is not riding a shell and mario's is less than 10 units above the floor.
## Damage if not wearing metal cap, and set action to [[Lava Boost]].
## Damage if not wearing metal cap, and set action to [[Lava Boost]].
# <code>mario_process_interactions</code>
# <code>mario_process_interactions</code> '''This can change mario's action'''.
## First, loop over every object's interaction handlers.
### If the interactType of the handler is one of the types Mario can currently collide with...
#### Unset that type. ''(Basically Mario cannot interact with two objects of the same interaction type.)''
#### If the object's interaction status is not INT_STATUS_INTERACTED, ''call the handler''
## Decrement the invincibility timer
## Call <code>check_kick_or_punch_wall</code>. ''(Basically, Mario still gets speed from kicking, punching, or "tripping" (idk what this flag name means) a wall, even if the action changes.)''
## Remove the punching, kicking, and tripping flags from Mario.
## If (not interacting with door) sDisplayingDoorText = FALSE
## If (not interacting with warp) sJustTeleported = FALSE
# '''Loop: Call the function that executes Mario's current action'''. Each action has associated code as stated above. Whenever the function is called, it can return <code>TRUE</code>, continuing the loop. Actions often call <code>set_mario_action</code>, which returns TRUE and processes yet another action. Theoretically, this could cause an infinite loop, however such a subframe transition sequence has not been found.<ref>https://github.com/n64decomp/sm64/blob/66018e9f3caaa67399218971d61366cb3f7ba7d7/src/game/mario.c#L1717-L1747</ref>
# '''Loop: Call the function that executes Mario's current action'''. Each action has associated code as stated above. Whenever the function is called, it can return <code>TRUE</code>, continuing the loop. Actions often call <code>set_mario_action</code>, which returns TRUE and processes yet another action. Theoretically, this could cause an infinite loop, however such a subframe transition sequence has not been found.<ref>https://github.com/n64decomp/sm64/blob/66018e9f3caaa67399218971d61366cb3f7ba7d7/src/game/mario.c#L1717-L1747</ref>
# Adjust Mario's model for quicksand and squishing, adjust the camera, when submerged adjust the camera and spawn bubbles, update health, update cap hitbox and model, process wind and infinite stairs music.
# Adjust Mario's model for quicksand and squishing, adjust the camera, when submerged adjust the camera and spawn bubbles, update health, update cap hitbox and model, process wind and infinite stairs music.
 
# Set <code>oInteractionStatus</code> to 0.
== References ==
== References ==
<references/>
<references/>
{{actions}}
{{actions}}
[[Category:Action Mechanics]]
[[Category:Action Mechanics]]
188

edits

Navigation menu