Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/src/game/interaction.h
7858 views
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_TRAP_TURN (1 << 20) /* 0x00100000 */
99
#define INT_STATUS_HIT_MINE (1 << 21) /* 0x00200000 */
100
#define INT_STATUS_STOP_RIDING (1 << 22) /* 0x00400000 */
101
#define INT_STATUS_TOUCHED_BOB_OMB (1 << 23) /* 0x00800000 */
102
103
104
s16 mario_obj_angle_to_object(struct MarioState *m, struct Object *o);
105
void mario_stop_riding_object(struct MarioState *m);
106
void mario_grab_used_object(struct MarioState *m);
107
void mario_drop_held_object(struct MarioState *m);
108
void mario_throw_held_object(struct MarioState *m);
109
void mario_stop_riding_and_holding(struct MarioState *m);
110
u32 does_mario_have_normal_cap_on_head(struct MarioState *m);
111
void mario_blow_off_cap(struct MarioState *m, f32 capSpeed);
112
u32 mario_lose_cap_to_enemy(u32 arg);
113
void mario_retrieve_cap(void);
114
struct Object *mario_get_collided_object(struct MarioState *m, u32 interactType);
115
u32 mario_check_object_grab(struct MarioState *m);
116
u32 get_door_save_file_flag(struct Object *door);
117
void mario_process_interactions(struct MarioState *m);
118
void mario_handle_special_floors(struct MarioState *m);
119
120
#endif // INTERACTION_H
121
122