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