50#define DEFINE_BUSH(name, model, pos_macro) \
52 s32 BushModelsData[] = { model }; \
53 FoliageModelList BushModels = { .count = 1, .models = BushModelsData }; \
54 Vec3i EffectsData[] = { \
57 FoliageVectorList Effects = { \
59 .vectors = EffectsData, \
61 SearchBushConfig SearchBush = { \
62 .bush = &BushModels, \
64 .vectors = &Effects, \
68#define DEFINE_BUSH_WITH_DROP(name, model, pos_macro, item, spawn_mode, pickup_flag, spawn_flag) \
70 s32 BushModelsData[] = { model }; \
71 FoliageModelList BushModels = { .count = 1, .models = BushModelsData }; \
72 FoliageDrop DropsData[] = { \
75 .pos = { pos_macro }, \
76 .spawnMode = spawn_mode, \
77 .pickupFlag = pickup_flag, \
78 .spawnFlag = spawn_flag, \
81 FoliageDropList Drops = { \
85 Vec3i EffectsData[] = { \
88 FoliageVectorList Effects = { \
90 .vectors = EffectsData, \
92 SearchBushConfig SearchBush = { \
93 .bush = &BushModels, \
95 .vectors = &Effects, \
99#define DEFINE_TREE(name, leaf_model, trunk_model, bomb_pos, bomb_diameter) \
101 s32 LeafModelsData[] = { leaf_model }; \
102 FoliageModelList LeafModels = { .count = ARRAY_COUNT(LeafModelsData), .models = LeafModelsData }; \
103 s32 TrunkModelsData[] = { trunk_model }; \
104 FoliageModelList TrunkModels = { .count = ARRAY_COUNT(TrunkModelsData), .models = TrunkModelsData }; \
105 ShakeTreeConfig ShakeTree = { \
106 .leaves = &LeafModels, \
107 .trunk = &TrunkModels, \
110 BombTrigger BombPos = { \
111 .pos = { bomb_pos }, \
112 .diameter = bomb_diameter, \
116#define DEFINE_TREE_NO_LEAVES(name, trunk_model, bomb_pos, bomb_diameter) \
118 s32 TrunkModelsData[] = { trunk_model }; \
119 FoliageModelList TrunkModels = { .count = 1, .models = TrunkModelsData }; \
120 ShakeTreeConfig ShakeTree = { \
122 .trunk = &TrunkModels, \
125 BombTrigger BombPos = { \
126 .pos = { bomb_pos }, \
127 .diameter = bomb_diameter, \
131#define DEFINE_TREE_WITH_FALLING_LEAVES(name, leaf_model, trunk_model, bomb_pos, bomb_diameter, falling_leaves) \
133 FoliageVectorList Vectors = { \
134 .count = ARRAY_COUNT(falling_leaves), \
135 .vectors = falling_leaves, \
137 s32 LeafModelsData[] = { leaf_model }; \
138 FoliageModelList LeafModels = { .count = 1, .models = LeafModelsData }; \
139 s32 TrunkModelsData[] = { trunk_model }; \
140 FoliageModelList TrunkModels = { .count = 1, .models = TrunkModelsData }; \
141 ShakeTreeConfig ShakeTree = { \
142 .leaves = &LeafModels, \
143 .trunk = &TrunkModels, \
145 .vectors = &Vectors, \
147 BombTrigger BombPos = { \
148 .pos = { bomb_pos }, \
149 .diameter = bomb_diameter, \
153#define DEFINE_TREE_WITH_DROP(name, leaf_model, trunk_model, bomb_pos, bomb_diameter, pos_macro, item, spawn_mode, spawn_flag) \
155 s32 LeafModelsData[] = { leaf_model }; \
156 FoliageModelList LeafModels = { .count = 1, .models = LeafModelsData }; \
157 s32 TrunkModelsData[] = { trunk_model }; \
158 FoliageModelList TrunkModels = { .count = 1, .models = TrunkModelsData }; \
159 FoliageDrop DropsData[] = { \
162 .pos = { pos_macro }, \
163 .spawnMode = spawn_mode, \
164 .spawnFlag = spawn_flag, \
167 FoliageDropList Drops = { \
169 .drops = DropsData, \
171 ShakeTreeConfig ShakeTree = { \
172 .leaves = &LeafModels, \
173 .trunk = &TrunkModels, \
176 BombTrigger BombPos = { \
177 .pos = { bomb_pos }, \
178 .diameter = bomb_diameter, \
183#define DEFINE_TREE_WITH_FALLING_LEAVES_WITH_DROP(name, leaf_model, trunk_model, bomb_pos, bomb_diameter, falling_leaves, pos_macro, item, spawn_mode, spawn_flag) \
185 FoliageVectorList Vectors = { \
186 .count = ARRAY_COUNT(falling_leaves), \
187 .vectors = falling_leaves, \
189 s32 LeafModelsData[] = { leaf_model }; \
190 FoliageModelList LeafModels = { .count = 1, .models = LeafModelsData }; \
191 s32 TrunkModelsData[] = { trunk_model }; \
192 FoliageModelList TrunkModels = { .count = 1, .models = TrunkModelsData }; \
193 FoliageDrop DropsData[] = { \
196 .pos = { pos_macro }, \
197 .spawnMode = spawn_mode, \
198 .spawnFlag = spawn_flag, \
201 FoliageDropList Drops = { \
203 .drops = DropsData, \
205 ShakeTreeConfig ShakeTree = { \
206 .leaves = &LeafModels, \
207 .trunk = &TrunkModels, \
209 .vectors = &Vectors, \
211 BombTrigger BombPos = { \
212 .pos = { bomb_pos }, \
213 .diameter = bomb_diameter, \
217#define BIND_BUSH(name, collider) \
218 Set(LVar0, Ref(name::SearchBush)) \
219 BindTrigger(Ref(foliage::EVS_SearchBush), TRIGGER_WALL_PRESS_A, collider, 1, 0)
221#define BIND_TREE(name, collider) \
222 Set(LVar0, Ref(name::ShakeTree)) \
223 BindTrigger(Ref(foliage::EVS_ShakeTree), TRIGGER_WALL_HAMMER, collider, 1, 0) \
224 BindTrigger(Ref(foliage::EVS_ShakeTree), TRIGGER_POINT_BOMB, Ref(name::BombPos), 1, 0)
FoliageVectorList * vectors
FoliageVectorList * vectors
FoliageModelList * leaves