NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
d_bc.hpp
1#pragma once
2
3#include <game/bases/d_rc.hpp>
4
5enum SensorFlags {
6 SENSOR_IS_POINT = 0,
7 SENSOR_IS_LINE = 1
8};
9
11 u32 mFlags;
12};
13
14/// @unofficial
16 operator const sBcSensorBase *() const { return &mBase; }
17
18 sBcSensorBase mBase;
19 int mX, mY;
20};
21
22/// @unofficial
24 operator const sBcSensorBase *() const { return &mBase; }
25
26 sBcSensorBase mBase;
27 int mLineA, mLineB;
28 int mDistanceFromCenter;
29};
30
31class dBg_ctr_c;
32
33class dBc_c {
34public:
35 enum Flag_e {
36 FLAG_0 = BIT_FLAG(0),
37 FLAG_1 = BIT_FLAG(1),
38 FLAG_2 = BIT_FLAG(2),
39 FLAG_3 = BIT_FLAG(3),
40 FLAG_4 = BIT_FLAG(4),
41 FLAG_5 = BIT_FLAG(5),
42 FLAG_6 = BIT_FLAG(6),
43 FLAG_7 = BIT_FLAG(7),
44 FLAG_8 = BIT_FLAG(8),
45 FLAG_9 = BIT_FLAG(9),
46 FLAG_10 = BIT_FLAG(10),
47 FLAG_11 = BIT_FLAG(11),
48 FLAG_12 = BIT_FLAG(12),
49 FLAG_13 = BIT_FLAG(13),
50 FLAG_14 = BIT_FLAG(14),
51 FLAG_15 = BIT_FLAG(15),
52 FLAG_16 = BIT_FLAG(16),
53 FLAG_17 = BIT_FLAG(17),
54 FLAG_18 = BIT_FLAG(18),
55 FLAG_19 = BIT_FLAG(19),
56 FLAG_20 = BIT_FLAG(20),
57 FLAG_21 = BIT_FLAG(21),
58 FLAG_22 = BIT_FLAG(22),
59 FLAG_23 = BIT_FLAG(23),
60 FLAG_24 = BIT_FLAG(24),
61 FLAG_25 = BIT_FLAG(25),
62 FLAG_26 = BIT_FLAG(26),
63 FLAG_27 = BIT_FLAG(27),
64 FLAG_28 = BIT_FLAG(28),
65 FLAG_29 = BIT_FLAG(29),
66
67 FLAG_WALL_R =
68 FLAG_0 | FLAG_2 | FLAG_4,
69 FLAG_WALL_L =
70 FLAG_1 | FLAG_3 | FLAG_5,
71 FLAG_FOOT =
72 FLAG_13 | FLAG_14 | FLAG_15 | FLAG_16 | FLAG_14 |
73 FLAG_15 | FLAG_16 | FLAG_17 | FLAG_18 | FLAG_19 |
74 FLAG_20,
75 FLAG_HEAD =
76 FLAG_26 | FLAG_27 | FLAG_28 | FLAG_29
77 };
78
79 enum WATER_TYPE_e {
80 WATER_CHECK_NONE,
81 WATER_CHECK_WATER,
82 WATER_CHECK_WATER_BUBBLE,
83 WATER_CHECK_YOGAN,
84 WATER_CHECK_POISON
85 };
86
87 dBc_c();
88 virtual ~dBc_c();
89
90 void set(dActor_c *, const sBcSensorBase *, const sBcSensorBase *, const sBcSensorBase *); ///< @unofficial
91
92 void checkLink();
93 bool checkRide();
94 bool checkHead(ulong);
95 s16 getSakaAngle(u8);
96 int getSakaMoveAngle(u8);
97 Flag_e checkWall(float *);
98 Flag_e checkWallEnm(float *);
99 Flag_e checkFoot();
100 Flag_e checkFootEnm();
101 u16 getFootAttr();
102
103 bool hasSensorFoot() { return mpSensorFoot != nullptr; }
104 bool hasSensorHead() { return mpSensorHead != nullptr; }
105 bool hasSensorWall() { return mpSensorWall != nullptr; }
106
107 dActor_c *mpOwner;
108 sBcSensorBase *mpSensorFoot;
109 sBcSensorBase *mpSensorHead;
110 sBcSensorBase *mpSensorWall;
111 mVec3_c *mpOwnerPos;
112 mVec3_c *mpOwnerLastPos;
113 mVec3_c *mpOwnerSpeed;
114 mVec3_c mPushForce;
115 mVec2_c mOwnerPosDelta;
116 mVec2_c m_34;
117 mVec2_c m_3c;
118 float m_44;
119 float m_48;
120 float m_4c;
121 dRc_c *mpRc;
122 dActor_c *mFriendActor;
123 dBg_ctr_c *mCollidedBelow;
124 dBg_ctr_c *mCollidedAbove;
125 dBg_ctr_c *mCollidedAdj;
126 dBg_ctr_c *mCollidedAdjForDirection[2];
127 dBc_c *mPrevTrigBelowSensor;
128 dBc_c *mPrevTrigAboveSensor;
129 dBc_c *mPrevTrigAdjSensor;
130 dBc_c *mPrevTrigAdjSensorForDirection[2];
131 dBg_ctr_c *mLinkW[2];
132 u32 mFlags;
133 u32 mPrevFlags;
134 char pad3[0x55];
135 u8 mAmiLine;
136 char pad4[0x2];
137 u8 *mpLayer;
138 u8 mLayer;
139
140 static int checkWaterDepth(float, float, u8, u8, float *);
141 static WATER_TYPE_e checkWater(float, float, u8, float *);
142
143 static u32 checkBg(float, float, u8, u8, unsigned long);
144 static u32 checkWireNet(float x, float y, unsigned char layer);
145 static u32 checkGround(const mVec3_c *, float *, u8, u8, signed char);
146 static u32 checkTenjou(const mVec3_c *, float *, u8, u8);
147 static u32 checkWall(const mVec3_c *, const mVec3_c *, float *, u8, u8, dActor_c **);
148
149 u32 isWallR() { return mFlags & FLAG_WALL_R; }
150 u32 isWallL() { return mFlags & FLAG_WALL_L; }
151 u32 isFoot(); // { return mFlags & FLAG_FOOT; }
152 u32 isHead() { return mFlags & FLAG_HEAD; }
153 u32 isCollision() { return mFlags & (FLAG_WALL_L | FLAG_WALL_R | FLAG_FOOT | FLAG_HEAD); }
154};
The minimum required implementation for a stage actor.
Definition d_actor.hpp:15
void set(dActor_c *, const sBcSensorBase *, const sBcSensorBase *, const sBcSensorBase *)