sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

interaction.h (5756B)


      1 #ifndef INTERACTION_H
      2 #define INTERACTION_H
      3 
      4 #include <PR/ultratypes.h>
      5 
      6 #include "types.h"
      7 
      8 #define INTERACT_HOOT           /* 0x00000001 */ (1 <<  0)
      9 #define INTERACT_GRABBABLE      /* 0x00000002 */ (1 <<  1)
     10 #define INTERACT_DOOR           /* 0x00000004 */ (1 <<  2)
     11 #define INTERACT_DAMAGE         /* 0x00000008 */ (1 <<  3)
     12 #define INTERACT_COIN           /* 0x00000010 */ (1 <<  4)
     13 #define INTERACT_CAP            /* 0x00000020 */ (1 <<  5)
     14 #define INTERACT_POLE           /* 0x00000040 */ (1 <<  6)
     15 #define INTERACT_KOOPA          /* 0x00000080 */ (1 <<  7)
     16 #define INTERACT_UNKNOWN_08     /* 0x00000100 */ (1 <<  8)
     17 #define INTERACT_BREAKABLE      /* 0x00000200 */ (1 <<  9)
     18 #define INTERACT_STRONG_WIND    /* 0x00000400 */ (1 << 10)
     19 #define INTERACT_WARP_DOOR      /* 0x00000800 */ (1 << 11)
     20 #define INTERACT_STAR_OR_KEY    /* 0x00001000 */ (1 << 12)
     21 #define INTERACT_WARP           /* 0x00002000 */ (1 << 13)
     22 #define INTERACT_CANNON_BASE    /* 0x00004000 */ (1 << 14)
     23 #define INTERACT_BOUNCE_TOP     /* 0x00008000 */ (1 << 15)
     24 #define INTERACT_WATER_RING     /* 0x00010000 */ (1 << 16)
     25 #define INTERACT_BULLY          /* 0x00020000 */ (1 << 17)
     26 #define INTERACT_FLAME          /* 0x00040000 */ (1 << 18)
     27 #define INTERACT_KOOPA_SHELL    /* 0x00080000 */ (1 << 19)
     28 #define INTERACT_BOUNCE_TOP2    /* 0x00100000 */ (1 << 20)
     29 #define INTERACT_MR_BLIZZARD    /* 0x00200000 */ (1 << 21)
     30 #define INTERACT_HIT_FROM_BELOW /* 0x00400000 */ (1 << 22)
     31 #define INTERACT_TEXT           /* 0x00800000 */ (1 << 23)
     32 #define INTERACT_TORNADO        /* 0x01000000 */ (1 << 24)
     33 #define INTERACT_WHIRLPOOL      /* 0x02000000 */ (1 << 25)
     34 #define INTERACT_CLAM_OR_BUBBA  /* 0x04000000 */ (1 << 26)
     35 #define INTERACT_BBH_ENTRANCE   /* 0x08000000 */ (1 << 27)
     36 #define INTERACT_SNUFIT_BULLET  /* 0x10000000 */ (1 << 28)
     37 #define INTERACT_SHOCK          /* 0x20000000 */ (1 << 29)
     38 #define INTERACT_IGLOO_BARRIER  /* 0x40000000 */ (1 << 30)
     39 #define INTERACT_UNKNOWN_31     /* 0x80000000 */ (1 << 31)
     40 
     41 
     42 // INTERACT_WARP
     43 #define INT_SUBTYPE_FADING_WARP 0x00000001
     44 
     45 // Damaging interactions
     46 #define INT_SUBTYPE_DELAY_INVINCIBILITY 0x00000002
     47 #define INT_SUBTYPE_BIG_KNOCKBACK 0x00000008 /* Used by Bowser, sets Mario's forward velocity to 40 on hit */
     48 
     49 // INTERACT_GRABBABLE
     50 #define INT_SUBTYPE_GRABS_MARIO 0x00000004 /* Also makes the object heavy */
     51 #define INT_SUBTYPE_HOLDABLE_NPC 0x00000010 /* Allows the object to be gently dropped, and sets vertical speed to 0 when dropped with no forwards velocity */
     52 #define INT_SUBTYPE_DROP_IMMEDIATELY 0x00000040 /* This gets set by grabbable NPCs that talk to Mario to make him drop them after the dialog is finished */
     53 #define INT_SUBTYPE_KICKABLE 0x00000100
     54 #define INT_SUBTYPE_NOT_GRABBABLE 0x00000200 /* Used by Heavy-Ho to allow it to throw Mario, without Mario being able to pick it up */
     55 
     56 // INTERACT_DOOR
     57 #define INT_SUBTYPE_STAR_DOOR 0x00000020
     58 
     59 //INTERACT_BOUNCE_TOP
     60 #define INT_SUBTYPE_TWIRL_BOUNCE 0x00000080
     61 
     62 // INTERACT_STAR_OR_KEY
     63 #define INT_SUBTYPE_NO_EXIT 0x00000400
     64 #define INT_SUBTYPE_GRAND_STAR 0x00000800
     65 
     66 // INTERACT_TEXT
     67 #define INT_SUBTYPE_SIGN 0x00001000
     68 #define INT_SUBTYPE_NPC 0x00004000
     69 
     70 // INTERACT_CLAM_OR_BUBBA
     71 #define INT_SUBTYPE_EATS_MARIO 0x00002000
     72 
     73 
     74 #define ATTACK_PUNCH                 1
     75 #define ATTACK_KICK_OR_TRIP          2
     76 #define ATTACK_FROM_ABOVE            3
     77 #define ATTACK_GROUND_POUND_OR_TWIRL 4
     78 #define ATTACK_FAST_ATTACK           5
     79 #define ATTACK_FROM_BELOW            6
     80 
     81 #define INT_STATUS_ATTACK_MASK 0x000000FF
     82 
     83 // Mario Interaction Status
     84 #define INT_STATUS_MARIO_STUNNED         (1 <<  0) /* 0x00000001 */
     85 #define INT_STATUS_MARIO_KNOCKBACK_DMG   (1 <<  1) /* 0x00000002 */
     86 #define INT_STATUS_MARIO_UNK2            (1 <<  2) /* 0x00000004 */
     87 #define INT_STATUS_MARIO_DROP_OBJECT     (1 <<  3) /* 0x00000008 */
     88 #define INT_STATUS_MARIO_SHOCKWAVE       (1 <<  4) /* 0x00000010 */
     89 #define INT_STATUS_MARIO_UNK5            (1 <<  5) /* 0x00000020 */
     90 #define INT_STATUS_MARIO_UNK6            (1 <<  6) /* 0x00000040 */
     91 #define INT_STATUS_MARIO_UNK7            (1 <<  7) /* 0x00000080 */
     92 
     93 // Object Interaction Status
     94 #define INT_STATUS_GRABBED_MARIO         (1 << 11) /* 0x00000800 */
     95 #define INT_STATUS_ATTACKED_MARIO        (1 << 13) /* 0x00002000 */
     96 #define INT_STATUS_WAS_ATTACKED          (1 << 14) /* 0x00004000 */
     97 #define INT_STATUS_INTERACTED            (1 << 15) /* 0x00008000 */
     98 #define INT_STATUS_UNK16                 (1 << 16) /* 0x00010000 */
     99 #define INT_STATUS_UNK17                 (1 << 17) /* 0x00020000 */
    100 #define INT_STATUS_UNK18                 (1 << 18) /* 0x00040000 */
    101 #define INT_STATUS_UNK19                 (1 << 19) /* 0x00080000 */
    102 #define INT_STATUS_TRAP_TURN             (1 << 20) /* 0x00100000 */
    103 #define INT_STATUS_HIT_MINE              (1 << 21) /* 0x00200000 */
    104 #define INT_STATUS_STOP_RIDING           (1 << 22) /* 0x00400000 */
    105 #define INT_STATUS_TOUCHED_BOB_OMB       (1 << 23) /* 0x00800000 */
    106 
    107 
    108 s16 mario_obj_angle_to_object(struct MarioState *m, struct Object *o);
    109 void mario_stop_riding_object(struct MarioState *m);
    110 void mario_grab_used_object(struct MarioState *m);
    111 void mario_drop_held_object(struct MarioState *m);
    112 void mario_throw_held_object(struct MarioState *m);
    113 void mario_stop_riding_and_holding(struct MarioState *m);
    114 u32 does_mario_have_normal_cap_on_head(struct MarioState *m);
    115 void mario_blow_off_cap(struct MarioState *m, f32 capSpeed);
    116 u32 mario_lose_cap_to_enemy(u32 arg);
    117 void mario_retrieve_cap(void);
    118 struct Object *mario_get_collided_object(struct MarioState *m, u32 interactType);
    119 u32 mario_check_object_grab(struct MarioState *m);
    120 u32 get_door_save_file_flag(struct Object *door);
    121 void mario_process_interactions(struct MarioState *m);
    122 void mario_handle_special_floors(struct MarioState *m);
    123 
    124 #endif // INTERACTION_H