Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
foliage.hpp File Reference

Go to the source code of this file.

Data Structures

struct  FoliageModelList
 
struct  FoliageDrop
 
struct  FoliageDropList
 
struct  FoliageVectorList
 
struct  SearchBushConfig
 
struct  ShakeTreeConfig
 

Namespaces

namespace  foliage
 

Macros

#define DEFINE_BUSH(name, model, pos_macro)
 
#define DEFINE_BUSH_WITH_DROP(name, model, pos_macro, item, spawn_mode, pickup_flag, spawn_flag)
 
#define DEFINE_TREE(name, leaf_model, trunk_model, bomb_pos, bomb_diameter)
 
#define DEFINE_TREE_NO_LEAVES(name, trunk_model, bomb_pos, bomb_diameter)
 
#define DEFINE_TREE_WITH_FALLING_LEAVES(name, leaf_model, trunk_model, bomb_pos, bomb_diameter, falling_leaves)
 
#define DEFINE_TREE_WITH_DROP(name, leaf_model, trunk_model, bomb_pos, bomb_diameter, pos_macro, item, spawn_mode, spawn_flag)
 
#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)
 
#define BIND_BUSH(name, collider)
 
#define BIND_TREE(name, collider)
 

Data Structure Documentation

◆ FoliageModelList

struct FoliageModelList
Data Fields
s32 count
s32 models[VLA]
s32 * models

◆ FoliageDrop

struct FoliageDrop
Data Fields
s32 itemID
Vec3i pos
s32 spawnMode
Bytecode pickupFlag
Bytecode spawnFlag

◆ FoliageDropList

struct FoliageDropList
Data Fields
s32 count
struct FoliageDropList.drops drops[VLA]
FoliageDrop * drops

◆ FoliageVectorList

struct FoliageVectorList
Data Fields
s32 count
Vec3i vectors[VLA]
Vec3i * vectors

◆ SearchBushConfig

struct SearchBushConfig
Data Fields
FoliageModelList * bush
FoliageDropList * drops
FoliageVectorList * vectors
EvtScript * callback

◆ ShakeTreeConfig

struct ShakeTreeConfig
Data Fields
FoliageModelList * leaves
FoliageModelList * trunk
FoliageDropList * drops
FoliageVectorList * vectors
EvtScript * callback

Macro Definition Documentation

◆ DEFINE_BUSH

#define DEFINE_BUSH ( name,
model,
pos_macro )
Value:
namespace name { \
s32 BushModelsData[] = { model }; \
{ pos_macro }, \
}; \
.count = 1, \
.vectors = EffectsData, \
}; \
.drops = NULL, \
.vectors = &Effects, \
}; \
}; \
BSS s32 PopupMenu_SelectedIndex
FoliageModelList * bush

Definition at line 50 of file foliage.hpp.

50#define DEFINE_BUSH(name, model, pos_macro) \
51 namespace name { \
52 s32 BushModelsData[] = { model }; \
53 FoliageModelList BushModels = { .count = 1, .models = BushModelsData }; \
54 Vec3i EffectsData[] = { \
55 { pos_macro }, \
56 }; \
57 FoliageVectorList Effects = { \
58 .count = 1, \
59 .vectors = EffectsData, \
60 }; \
61 SearchBushConfig SearchBush = { \
62 .bush = &BushModels, \
63 .drops = NULL, \
64 .vectors = &Effects, \
65 }; \
66 }; \
67

◆ DEFINE_BUSH_WITH_DROP

#define DEFINE_BUSH_WITH_DROP ( name,
model,
pos_macro,
item,
spawn_mode,
pickup_flag,
spawn_flag )
Value:
namespace name { \
s32 BushModelsData[] = { model }; \
{ \
.itemID = item, \
.pos = { pos_macro }, \
.spawnMode = spawn_mode, \
.pickupFlag = pickup_flag, \
.spawnFlag = spawn_flag, \
}, \
}; \
.count = 1, \
.drops = DropsData, \
}; \
{ pos_macro }, \
}; \
.count = 1, \
.vectors = EffectsData, \
}; \
.drops = &Drops, \
.vectors = &Effects, \
}; \
}; \

Definition at line 68 of file foliage.hpp.

68#define DEFINE_BUSH_WITH_DROP(name, model, pos_macro, item, spawn_mode, pickup_flag, spawn_flag) \
69 namespace name { \
70 s32 BushModelsData[] = { model }; \
71 FoliageModelList BushModels = { .count = 1, .models = BushModelsData }; \
72 FoliageDrop DropsData[] = { \
73 { \
74 .itemID = item, \
75 .pos = { pos_macro }, \
76 .spawnMode = spawn_mode, \
77 .pickupFlag = pickup_flag, \
78 .spawnFlag = spawn_flag, \
79 }, \
80 }; \
81 FoliageDropList Drops = { \
82 .count = 1, \
83 .drops = DropsData, \
84 }; \
85 Vec3i EffectsData[] = { \
86 { pos_macro }, \
87 }; \
88 FoliageVectorList Effects = { \
89 .count = 1, \
90 .vectors = EffectsData, \
91 }; \
92 SearchBushConfig SearchBush = { \
93 .bush = &BushModels, \
94 .drops = &Drops, \
95 .vectors = &Effects, \
96 }; \
97 }; \
98

◆ DEFINE_TREE

#define DEFINE_TREE ( name,
leaf_model,
trunk_model,
bomb_pos,
bomb_diameter )
Value:
namespace name { \
s32 LeafModelsData[] = { leaf_model }; \
.trunk = &TrunkModels, \
.drops = NULL, \
}; \
.pos = { bomb_pos }, \
.diameter = bomb_diameter, \
}; \
}; \
FoliageModelList * leaves
#define ARRAY_COUNT(arr)
Definition macros.h:40

Definition at line 99 of file foliage.hpp.

99#define DEFINE_TREE(name, leaf_model, trunk_model, bomb_pos, bomb_diameter) \
100 namespace name { \
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, \
108 .drops = NULL, \
109 }; \
110 BombTrigger BombPos = { \
111 .pos = { bomb_pos }, \
112 .diameter = bomb_diameter, \
113 }; \
114 }; \
115

◆ DEFINE_TREE_NO_LEAVES

#define DEFINE_TREE_NO_LEAVES ( name,
trunk_model,
bomb_pos,
bomb_diameter )
Value:
namespace name { \
.leaves = NULL, \
.trunk = &TrunkModels, \
.drops = NULL, \
}; \
.pos = { bomb_pos }, \
.diameter = bomb_diameter, \
}; \
}; \

Definition at line 116 of file foliage.hpp.

116#define DEFINE_TREE_NO_LEAVES(name, trunk_model, bomb_pos, bomb_diameter) \
117 namespace name { \
118 s32 TrunkModelsData[] = { trunk_model }; \
119 FoliageModelList TrunkModels = { .count = 1, .models = TrunkModelsData }; \
120 ShakeTreeConfig ShakeTree = { \
121 .leaves = NULL, \
122 .trunk = &TrunkModels, \
123 .drops = NULL, \
124 }; \
125 BombTrigger BombPos = { \
126 .pos = { bomb_pos }, \
127 .diameter = bomb_diameter, \
128 }; \
129 }; \
130

◆ DEFINE_TREE_WITH_FALLING_LEAVES

#define DEFINE_TREE_WITH_FALLING_LEAVES ( name,
leaf_model,
trunk_model,
bomb_pos,
bomb_diameter,
falling_leaves )
Value:
namespace name { \
.vectors = falling_leaves, \
}; \
s32 LeafModelsData[] = { leaf_model }; \
.trunk = &TrunkModels, \
.drops = NULL, \
.vectors = &Vectors, \
}; \
.pos = { bomb_pos }, \
.diameter = bomb_diameter, \
}; \
}; \

Definition at line 131 of file foliage.hpp.

131#define DEFINE_TREE_WITH_FALLING_LEAVES(name, leaf_model, trunk_model, bomb_pos, bomb_diameter, falling_leaves) \
132 namespace name { \
133 FoliageVectorList Vectors = { \
134 .count = ARRAY_COUNT(falling_leaves), \
135 .vectors = falling_leaves, \
136 }; \
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, \
144 .drops = NULL, \
145 .vectors = &Vectors, \
146 }; \
147 BombTrigger BombPos = { \
148 .pos = { bomb_pos }, \
149 .diameter = bomb_diameter, \
150 }; \
151 }; \
152

◆ DEFINE_TREE_WITH_DROP

#define DEFINE_TREE_WITH_DROP ( name,
leaf_model,
trunk_model,
bomb_pos,
bomb_diameter,
pos_macro,
item,
spawn_mode,
spawn_flag )
Value:
namespace name { \
s32 LeafModelsData[] = { leaf_model }; \
{ \
.itemID = item, \
.pos = { pos_macro }, \
.spawnMode = spawn_mode, \
.spawnFlag = spawn_flag, \
}, \
}; \
.count = 1, \
.drops = DropsData, \
}; \
.trunk = &TrunkModels, \
.drops = &Drops, \
}; \
.pos = { bomb_pos }, \
.diameter = bomb_diameter, \
}; \
}; \

Definition at line 153 of file foliage.hpp.

153#define DEFINE_TREE_WITH_DROP(name, leaf_model, trunk_model, bomb_pos, bomb_diameter, pos_macro, item, spawn_mode, spawn_flag) \
154 namespace name { \
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[] = { \
160 { \
161 .itemID = item, \
162 .pos = { pos_macro }, \
163 .spawnMode = spawn_mode, \
164 .spawnFlag = spawn_flag, \
165 }, \
166 }; \
167 FoliageDropList Drops = { \
168 .count = 1, \
169 .drops = DropsData, \
170 }; \
171 ShakeTreeConfig ShakeTree = { \
172 .leaves = &LeafModels, \
173 .trunk = &TrunkModels, \
174 .drops = &Drops, \
175 }; \
176 BombTrigger BombPos = { \
177 .pos = { bomb_pos }, \
178 .diameter = bomb_diameter, \
179 }; \
180 }; \
181

◆ DEFINE_TREE_WITH_FALLING_LEAVES_WITH_DROP

#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 )
Parameters
falling_leavesarray of positions where leaves will fall from e.g. { { x, y, z }, { x, y, z } }

Definition at line 183 of file foliage.hpp.

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) \
184 namespace name { \
185 FoliageVectorList Vectors = { \
186 .count = ARRAY_COUNT(falling_leaves), \
187 .vectors = falling_leaves, \
188 }; \
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[] = { \
194 { \
195 .itemID = item, \
196 .pos = { pos_macro }, \
197 .spawnMode = spawn_mode, \
198 .spawnFlag = spawn_flag, \
199 }, \
200 }; \
201 FoliageDropList Drops = { \
202 .count = 1, \
203 .drops = DropsData, \
204 }; \
205 ShakeTreeConfig ShakeTree = { \
206 .leaves = &LeafModels, \
207 .trunk = &TrunkModels, \
208 .drops = &Drops, \
209 .vectors = &Vectors, \
210 }; \
211 BombTrigger BombPos = { \
212 .pos = { bomb_pos }, \
213 .diameter = bomb_diameter, \
214 }; \
215 }; \
216

◆ BIND_BUSH

#define BIND_BUSH ( name,
collider )
Value:
Set(LVar0, Ref(name::SearchBush)) \
@ TRIGGER_WALL_PRESS_A
Definition enums.h:2678
EvtScript EVS_SearchBush
Definition foliage.cpp:46
#define Ref(sym)
Address/pointer constant.
Definition macros.h:60
#define Set(VAR, INT_VALUE)
Sets the given variable to a given value casted to an integer.
Definition macros.h:365
#define LVar0
Definition macros.h:148

Definition at line 217 of file foliage.hpp.

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)

◆ BIND_TREE

#define BIND_TREE ( name,
collider )
Value:
Set(LVar0, Ref(name::ShakeTree)) \
@ TRIGGER_WALL_HAMMER
Definition enums.h:2682
@ TRIGGER_POINT_BOMB
Definition enums.h:2690
EvtScript EVS_ShakeTree
Definition foliage.cpp:118

Definition at line 221 of file foliage.hpp.

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)