Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/data/behavior_data.c
7854 views
1
#define OBJECT_FIELDS_INDEX_DIRECTLY
2
3
#include "sm64.h"
4
5
#include "object_constants.h"
6
#include "game/object_list_processor.h"
7
#include "game/interaction.h"
8
#include "game/behavior_actions.h"
9
#include "game/mario_actions_cutscene.h"
10
#include "game/mario_misc.h"
11
#include "game/object_helpers.h"
12
#include "game/debug.h"
13
#include "menu/file_select.h"
14
#include "engine/surface_load.h"
15
16
#include "actors/common0.h"
17
#include "actors/common1.h"
18
#include "actors/group1.h"
19
#include "actors/group2.h"
20
#include "actors/group3.h"
21
#include "actors/group4.h"
22
#include "actors/group5.h"
23
#include "actors/group6.h"
24
#include "actors/group7.h"
25
#include "actors/group8.h"
26
#include "actors/group9.h"
27
#include "actors/group10.h"
28
#include "actors/group11.h"
29
#include "actors/group12.h"
30
#include "actors/group13.h"
31
#include "actors/group14.h"
32
#include "actors/group15.h"
33
#include "actors/group16.h"
34
#include "actors/group17.h"
35
#include "levels/bbh/header.h"
36
#include "levels/castle_inside/header.h"
37
#include "levels/hmc/header.h"
38
#include "levels/ssl/header.h"
39
#include "levels/bob/header.h"
40
#include "levels/sl/header.h"
41
#include "levels/wdw/header.h"
42
#include "levels/jrb/header.h"
43
#include "levels/thi/header.h"
44
#include "levels/ttc/header.h"
45
#include "levels/rr/header.h"
46
#include "levels/castle_grounds/header.h"
47
#include "levels/bitdw/header.h"
48
#include "levels/lll/header.h"
49
#include "levels/sa/header.h"
50
#include "levels/bitfs/header.h"
51
#include "levels/ddd/header.h"
52
#include "levels/wf/header.h"
53
#include "levels/bowser_2/header.h"
54
#include "levels/ttm/header.h"
55
56
#include "make_const_nonconst.h"
57
#include "behavior_data.h"
58
59
#define BC_B(a) _SHIFTL(a, 24, 8)
60
#define BC_BB(a, b) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8))
61
#define BC_BBBB(a, b, c, d) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 8, 8) | _SHIFTL(d, 0, 8))
62
#define BC_BBH(a, b, c) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 0, 16))
63
#define BC_B0H(a, b) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 0, 16))
64
#define BC_H(a) _SHIFTL(a, 16, 16)
65
#define BC_HH(a, b) (_SHIFTL(a, 16, 16) | _SHIFTL(b, 0, 16))
66
#define BC_W(a) ((uintptr_t)(u32)(a))
67
#define BC_PTR(a) ((uintptr_t)(a))
68
69
70
// Defines the start of the behavior script as well as the object list the object belongs to.
71
// Has some special behavior for certain objects.
72
#define BEGIN(objList) \
73
BC_BB(0x00, objList)
74
75
// Delays the behavior script for a certain number of frames.
76
#define DELAY(num) \
77
BC_B0H(0x01, num)
78
79
// Jumps to a new behavior command and stores the return address in the object's stack.
80
#define CALL(addr) \
81
BC_B(0x02), \
82
BC_PTR(addr)
83
84
// Jumps back to the behavior command stored in the object's stack.
85
#define RETURN() \
86
BC_B(0x03)
87
88
// Jumps to a new behavior script without saving anything.
89
#define GOTO(addr) \
90
BC_B(0x04), \
91
BC_PTR(addr)
92
93
// Marks the start of a loop that will repeat a certain number of times.
94
#define BEGIN_REPEAT(count) \
95
BC_B0H(0x05, count)
96
97
// Marks the end of a repeating loop.
98
#define END_REPEAT() \
99
BC_B(0x06)
100
101
// Also marks the end of a repeating loop, but continues executing commands following the loop on the same frame.
102
#define END_REPEAT_CONTINUE() \
103
BC_B(0x07)
104
105
// Marks the beginning of an infinite loop.
106
#define BEGIN_LOOP() \
107
BC_B(0x08)
108
109
// Marks the end of an infinite loop.
110
#define END_LOOP() \
111
BC_B(0x09)
112
113
// Exits the behavior script.
114
// Often used to end behavior scripts that do not contain an infinite loop.
115
#define BREAK() \
116
BC_B(0x0A)
117
118
// Exits the behavior script, unused.
119
#define BREAK_UNUSED() \
120
BC_B(0x0B)
121
122
// Executes a native game function.
123
#define CALL_NATIVE(func) \
124
BC_B(0x0C), \
125
BC_PTR(func)
126
127
// Adds a float to the specified field.
128
#define ADD_FLOAT(field, value) \
129
BC_BBH(0x0D, field, value)
130
131
// Sets the specified field to a float.
132
#define SET_FLOAT(field, value) \
133
BC_BBH(0x0E, field, value)
134
135
// Adds an integer to the specified field.
136
#define ADD_INT(field, value) \
137
BC_BBH(0x0F, field, value)
138
139
// Sets the specified field to an integer.
140
#define SET_INT(field, value) \
141
BC_BBH(0x10, field, value)
142
143
// Performs a bitwise OR with the specified field and the given integer.
144
// Usually used to set an object's flags.
145
#define OR_INT(field, value) \
146
BC_BBH(0x11, field, value)
147
148
// Performs a bit clear with the specified short. Unused in favor of the 32-bit version.
149
#define BIT_CLEAR(field, value) \
150
BC_BBH(0x12, field, value)
151
152
// TODO: this one needs a better name / labelling
153
// Gets a random short, right shifts it the specified amount and adds min to it, then sets the specified field to that value.
154
#define SET_INT_RAND_RSHIFT(field, min, rshift) \
155
BC_BBH(0x13, field, min), \
156
BC_H(rshift)
157
158
// Sets the specified field to a random float in the given range.
159
#define SET_RANDOM_FLOAT(field, min, range) \
160
BC_BBH(0x14, field, min), \
161
BC_H(range)
162
163
// Sets the specified field to a random integer in the given range.
164
#define SET_RANDOM_INT(field, min, range) \
165
BC_BBH(0x15, field, min), \
166
BC_H(range)
167
168
// Adds a random float in the given range to the specified field.
169
#define ADD_RANDOM_FLOAT(field, min, range) \
170
BC_BBH(0x16, field, min), \
171
BC_H(range)
172
173
// TODO: better name (unused anyway)
174
// Gets a random short, right shifts it the specified amount and adds min to it, then adds the value to the specified field. Unused.
175
#define ADD_INT_RAND_RSHIFT(field, min, rshift) \
176
BC_BBH(0x17, field, min), \
177
BC_H(rshift)
178
179
// No operation. Unused.
180
#define CMD_NOP_1(field) \
181
BC_BB(0x18, field)
182
183
// No operation. Unused.
184
#define CMD_NOP_2(field) \
185
BC_BB(0x19, field)
186
187
// No operation. Unused.
188
#define CMD_NOP_3(field) \
189
BC_BB(0x1A, field)
190
191
// Sets the current model ID of the object.
192
#define SET_MODEL(modelID) \
193
BC_B0H(0x1B, modelID)
194
195
// Spawns a child object with the specified model and behavior.
196
#define SPAWN_CHILD(modelID, behavior) \
197
BC_B(0x1C), \
198
BC_W(modelID), \
199
BC_PTR(behavior)
200
201
// Exits the behavior script and despawns the object.
202
// Often used to end behavior scripts that do not contain an infinite loop.
203
#define DEACTIVATE() \
204
BC_B(0x1D)
205
206
// Finds the floor triangle directly under the object and moves the object down to it.
207
#define DROP_TO_FLOOR() \
208
BC_B(0x1E)
209
210
// Sets the destination float field to the sum of the values of the given float fields.
211
#define SUM_FLOAT(fieldDst, fieldSrc1, fieldSrc2) \
212
BC_BBBB(0x1F, fieldDst, fieldSrc1, fieldSrc2)
213
214
// Sets the destination integer field to the sum of the values of the given integer fields. Unused.
215
#define SUM_INT(fieldDst, fieldSrc1, fieldSrc2) \
216
BC_BBBB(0x20, fieldDst, fieldSrc1, fieldSrc2)
217
218
// Billboards the current object, making it always face the camera.
219
#define BILLBOARD() \
220
BC_B(0x21)
221
222
// Hides the current object.
223
#define HIDE() \
224
BC_B(0x22)
225
226
// Sets the size of the object's cylindrical hitbox.
227
#define SET_HITBOX(radius, height) \
228
BC_B(0x23), \
229
BC_HH(radius, height)
230
231
// No operation. Unused.
232
#define CMD_NOP_4(field, value) \
233
BC_BBH(0x24, field, value)
234
235
// Delays the behavior script for the number of frames given by the value of the specified field.
236
#define DELAY_VAR(field) \
237
BC_BB(0x25, field)
238
239
// Unused. Marks the start of a loop that will repeat a certain number of times.
240
// Uses a u8 as the argument, instead of a s16 like the other version does.
241
#define BEGIN_REPEAT_UNUSED(count) \
242
BC_BB(0x26, count)
243
244
// Loads the animations for the object. <field> is always set to oAnimations.
245
#define LOAD_ANIMATIONS(field, anims) \
246
BC_BB(0x27, field), \
247
BC_PTR(anims)
248
249
// Begins animation and sets the object's current animation index to the specified value.
250
#define ANIMATE(animIndex) \
251
BC_BB(0x28, animIndex)
252
253
// Spawns a child object with the specified model and behavior, plus a behavior param.
254
#define SPAWN_CHILD_WITH_PARAM(bhvParam, modelID, behavior) \
255
BC_B0H(0x29, bhvParam), \
256
BC_W(modelID), \
257
BC_PTR(behavior)
258
259
// Loads collision data for the object.
260
#define LOAD_COLLISION_DATA(collisionData) \
261
BC_B(0x2A), \
262
BC_PTR(collisionData)
263
264
// Sets the size of the object's cylindrical hitbox, and applies a downwards offset.
265
#define SET_HITBOX_WITH_OFFSET(radius, height, downOffset) \
266
BC_B(0x2B), \
267
BC_HH(radius, height), \
268
BC_H(downOffset)
269
270
// Spawns a new object with the specified model and behavior.
271
#define SPAWN_OBJ(modelID, behavior) \
272
BC_B(0x2C), \
273
BC_W(modelID), \
274
BC_PTR(behavior)
275
276
// Sets the home position of the object to its current position.
277
#define SET_HOME() \
278
BC_B(0x2D)
279
280
// Sets the size of the object's cylindrical hurtbox.
281
#define SET_HURTBOX(radius, height) \
282
BC_B(0x2E), \
283
BC_HH(radius, height)
284
285
// Sets the object's interaction type.
286
#define SET_INTERACT_TYPE(type) \
287
BC_B(0x2F), \
288
BC_W(type)
289
290
// Sets various parameters that the object uses for calculating physics.
291
#define SET_OBJ_PHYSICS(wallHitboxRadius, gravity, bounciness, dragStrength, friction, buoyancy, unused1, unused2) \
292
BC_B(0x30), \
293
BC_HH(wallHitboxRadius, gravity), \
294
BC_HH(bounciness, dragStrength), \
295
BC_HH(friction, buoyancy), \
296
BC_HH(unused1, unused2)
297
298
// Sets the object's interaction subtype. Unused.
299
#define SET_INTERACT_SUBTYPE(subtype) \
300
BC_B(0x31), \
301
BC_W(subtype)
302
303
// Sets the object's size to the specified percentage.
304
#define SCALE(unusedField, percent) \
305
BC_BBH(0x32, unusedField, percent)
306
307
// Performs a bit clear on the object's parent's field with the specified value.
308
// Used for clearing active particle flags fron Mario's object.
309
#define PARENT_BIT_CLEAR(field, flags) \
310
BC_BB(0x33, field), \
311
BC_W(flags)
312
313
// Animates an object using texture animation. <field> is always set to oAnimState.
314
#define ANIMATE_TEXTURE(field, rate) \
315
BC_BBH(0x34, field, rate)
316
317
// Disables rendering for the object.
318
#define DISABLE_RENDERING() \
319
BC_B(0x35)
320
321
// Unused. Sets the specified field to an integer. Wastes 4 bytes of space for no reason at all.
322
#define SET_INT_UNUSED(field, value) \
323
BC_BB(0x36, field), \
324
BC_HH(0, value)
325
326
// Spawns a water droplet with the given parameters.
327
#define SPAWN_WATER_DROPLET(dropletParams) \
328
BC_B(0x37), \
329
BC_PTR(dropletParams)
330
331
332
const BehaviorScript bhvStarDoor[] = {
333
BEGIN(OBJ_LIST_SURFACE),
334
SET_INT(oInteractType, INTERACT_DOOR),
335
LOAD_COLLISION_DATA(inside_castle_seg7_collision_star_door),
336
SET_INT(oInteractionSubtype, INT_SUBTYPE_STAR_DOOR),
337
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
338
SET_HITBOX(/*Radius*/ 80, /*Height*/ 100),
339
SET_HOME(),
340
SET_FLOAT(oDrawingDistance, 20000),
341
CALL_NATIVE(bhv_door_init),
342
SET_INT(oIntangibleTimer, 0),
343
BEGIN_LOOP(),
344
CALL_NATIVE(bhv_star_door_loop),
345
CALL_NATIVE(bhv_star_door_loop_2),
346
CALL_NATIVE(load_object_collision_model),
347
END_LOOP(),
348
};
349
350
const BehaviorScript bhvMrI[] = {
351
BEGIN(OBJ_LIST_GENACTOR),
352
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
353
SET_HOME(),
354
SPAWN_CHILD(/*Model*/ MODEL_MR_I_IRIS, /*Behavior*/ bhvMrIBody),
355
SET_MODEL(MODEL_MR_I),
356
BILLBOARD(),
357
CALL_NATIVE(bhv_init_room),
358
BEGIN_LOOP(),
359
CALL_NATIVE(bhv_mr_i_loop),
360
END_LOOP(),
361
};
362
363
const BehaviorScript bhvMrIBody[] = {
364
BEGIN(OBJ_LIST_DEFAULT),
365
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
366
CALL_NATIVE(bhv_init_room),
367
BEGIN_LOOP(),
368
CALL_NATIVE(bhv_mr_i_body_loop),
369
END_LOOP(),
370
};
371
372
const BehaviorScript bhvMrIParticle[] = {
373
BEGIN(OBJ_LIST_LEVEL),
374
BILLBOARD(),
375
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
376
SET_INT(oIntangibleTimer, 0),
377
SET_HITBOX(50, 50),
378
SET_INT(oDamageOrCoinValue, 1),
379
SET_INT(oInteractType, INTERACT_DAMAGE),
380
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
381
CALL_NATIVE(bhv_init_room),
382
BEGIN_LOOP(),
383
CALL_NATIVE(bhv_mr_i_particle_loop),
384
END_LOOP(),
385
};
386
387
const BehaviorScript bhvPurpleParticle[] = {
388
BEGIN(OBJ_LIST_UNIMPORTANT),
389
BILLBOARD(),
390
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
391
BEGIN_REPEAT(10),
392
CALL_NATIVE(bhv_piranha_particle_loop),
393
END_REPEAT(),
394
DEACTIVATE(),
395
};
396
397
const BehaviorScript bhvGiantPole[] = {
398
BEGIN(OBJ_LIST_POLELIKE),
399
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
400
SET_INT(oInteractType, INTERACT_POLE),
401
SET_HITBOX(/*Radius*/ 80, /*Height*/ 2100),
402
SET_HOME(),
403
SET_INT(oIntangibleTimer, 0),
404
BEGIN_LOOP(),
405
CALL_NATIVE(bhv_giant_pole_loop),
406
END_LOOP(),
407
};
408
409
const BehaviorScript bhvPoleGrabbing[] = {
410
BEGIN(OBJ_LIST_POLELIKE),
411
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
412
SET_INT(oInteractType, INTERACT_POLE),
413
SET_HITBOX(/*Radius*/ 80, /*Height*/ 1500),
414
CALL_NATIVE(bhv_pole_init),
415
SET_INT(oIntangibleTimer, 0),
416
BEGIN_LOOP(),
417
CALL_NATIVE(bhv_pole_base_loop),
418
END_LOOP(),
419
};
420
421
const BehaviorScript bhvThiHugeIslandTop[] = {
422
BEGIN(OBJ_LIST_SURFACE),
423
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
424
LOAD_COLLISION_DATA(thi_seg7_collision_top_trap),
425
BEGIN_LOOP(),
426
CALL_NATIVE(bhv_thi_huge_island_top_loop),
427
END_LOOP(),
428
};
429
430
const BehaviorScript bhvThiTinyIslandTop[] = {
431
BEGIN(OBJ_LIST_DEFAULT),
432
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
433
BEGIN_LOOP(),
434
CALL_NATIVE(bhv_thi_tiny_island_top_loop),
435
END_LOOP(),
436
};
437
438
const BehaviorScript bhvCapSwitchBase[] = {
439
BEGIN(OBJ_LIST_SURFACE),
440
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
441
LOAD_COLLISION_DATA(capswitch_collision_05003448),
442
BEGIN_LOOP(),
443
CALL_NATIVE(load_object_collision_model),
444
END_LOOP(),
445
};
446
447
const BehaviorScript bhvCapSwitch[] = {
448
BEGIN(OBJ_LIST_SURFACE),
449
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
450
LOAD_COLLISION_DATA(capswitch_collision_050033D0),
451
BEGIN_LOOP(),
452
CALL_NATIVE(bhv_cap_switch_loop),
453
CALL_NATIVE(load_object_collision_model),
454
END_LOOP(),
455
};
456
457
const BehaviorScript bhvKingBobomb[] = {
458
BEGIN(OBJ_LIST_GENACTOR),
459
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
460
LOAD_ANIMATIONS(oAnimations, king_bobomb_seg5_anims_0500FE30),
461
SET_INT(oInteractType, INTERACT_GRABBABLE),
462
SET_HITBOX(/*Radius*/ 100, /*Height*/ 100),
463
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
464
SET_INT(oIntangibleTimer, 0),
465
DROP_TO_FLOOR(),
466
SET_HOME(),
467
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBobombAnchorMario),
468
SET_INT(oHealth, 3),
469
SET_INT(oDamageOrCoinValue, 1),
470
BEGIN_LOOP(),
471
CALL_NATIVE(bhv_king_bobomb_loop),
472
END_LOOP(),
473
};
474
475
const BehaviorScript bhvBobombAnchorMario[] = {
476
BEGIN(OBJ_LIST_GENACTOR),
477
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
478
BILLBOARD(),
479
SET_FLOAT(oParentRelativePosX, 100),
480
SET_FLOAT(oParentRelativePosZ, 150),
481
BEGIN_LOOP(),
482
CALL_NATIVE(bhv_bobomb_anchor_mario_loop),
483
END_LOOP(),
484
};
485
486
const BehaviorScript bhvBetaChestBottom[] = {
487
BEGIN(OBJ_LIST_DEFAULT),
488
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
489
DROP_TO_FLOOR(),
490
CALL_NATIVE(bhv_beta_chest_bottom_init),
491
BEGIN_LOOP(),
492
CALL_NATIVE(bhv_beta_chest_bottom_loop),
493
END_LOOP(),
494
};
495
496
const BehaviorScript bhvBetaChestLid[] = {
497
BEGIN(OBJ_LIST_DEFAULT),
498
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
499
SET_HOME(),
500
BEGIN_LOOP(),
501
CALL_NATIVE(bhv_beta_chest_lid_loop),
502
END_LOOP(),
503
};
504
505
const BehaviorScript bhvBubbleParticleSpawner[] = {
506
BEGIN(OBJ_LIST_DEFAULT),
507
DISABLE_RENDERING(),
508
SET_RANDOM_INT(oWaterObjUnkF4, /*Minimum*/ 2, /*Range*/ 9),
509
DELAY_VAR(oWaterObjUnkF4),
510
SPAWN_CHILD(/*Model*/ MODEL_BUBBLE, /*Behavior*/ bhvSmallWaterWave),
511
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_BUBBLE),
512
DEACTIVATE(),
513
};
514
515
const BehaviorScript bhvBubbleMaybe[] = {
516
BEGIN(OBJ_LIST_UNIMPORTANT),
517
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
518
BILLBOARD(),
519
CALL_NATIVE(bhv_bubble_wave_init),
520
SET_RANDOM_FLOAT(oWaterObjUnkF4, /*Minimum*/ -75, /*Range*/ 150),
521
SET_RANDOM_FLOAT(oWaterObjUnkF8, /*Minimum*/ -75, /*Range*/ 150),
522
SET_RANDOM_FLOAT(oWaterObjUnkFC, /*Minimum*/ -75, /*Range*/ 150),
523
SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oWaterObjUnkF4),
524
SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oWaterObjUnkF8),
525
SUM_FLOAT(/*Dest*/ oPosY, /*Value 1*/ oPosY, /*Value 2*/ oWaterObjUnkFC),
526
SET_INT(oAnimState, -1),
527
BEGIN_REPEAT(60),
528
ADD_INT(oAnimState, 1),
529
CALL_NATIVE(bhv_bubble_maybe_loop),
530
END_REPEAT(),
531
DEACTIVATE(),
532
};
533
534
const BehaviorScript bhvSmallWaterWave[] = {
535
BEGIN(OBJ_LIST_UNIMPORTANT),
536
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
537
BILLBOARD(),
538
CALL_NATIVE(bhv_bubble_wave_init),
539
SET_RANDOM_FLOAT(oWaterObjUnkF4, /*Minimum*/ -50, /*Range*/ 100),
540
SET_RANDOM_FLOAT(oWaterObjUnkF8, /*Minimum*/ -50, /*Range*/ 100),
541
SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oWaterObjUnkF4),
542
SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oWaterObjUnkF8),
543
SET_RANDOM_FLOAT(oWaterObjUnkFC, /*Minimum*/ 0, /*Range*/ 50),
544
SUM_FLOAT(/*Dest*/ oPosY, /*Value 1*/ oPosY, /*Value 2*/ oWaterObjUnkFC),
545
SET_INT(oAnimState, -1),
546
CALL(bhvSmallWaterWave398),
547
BEGIN_REPEAT(60),
548
CALL(bhvSmallWaterWave398),
549
CALL_NATIVE(bhv_small_water_wave_loop),
550
END_REPEAT(),
551
DEACTIVATE(),
552
};
553
554
const BehaviorScript bhvSmallWaterWave398[] = {
555
ADD_INT(oAnimState, 1),
556
ADD_FLOAT(oPosY, 7),
557
SET_RANDOM_FLOAT(oWaterObjUnkF4, /*Minimum*/ -2, /*Range*/ 5),
558
SET_RANDOM_FLOAT(oWaterObjUnkF8, /*Minimum*/ -2, /*Range*/ 5),
559
SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oWaterObjUnkF4),
560
SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oWaterObjUnkF8),
561
RETURN(),
562
};
563
564
const BehaviorScript bhvWaterAirBubble[] = {
565
BEGIN(OBJ_LIST_LEVEL),
566
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
567
BILLBOARD(),
568
SET_HITBOX_WITH_OFFSET(/*Radius*/ 400, /*Height*/ 150, /*Downwards offset*/ -150),
569
SET_INT(oIntangibleTimer, 0),
570
SET_INTERACT_TYPE(INTERACT_WATER_RING),
571
SET_INT(oDamageOrCoinValue, 5),
572
CALL_NATIVE(bhv_water_air_bubble_init),
573
SET_INT(oAnimState, -1),
574
BEGIN_LOOP(),
575
CALL_NATIVE(bhv_water_air_bubble_loop),
576
END_LOOP(),
577
};
578
579
const BehaviorScript bhvSmallParticle[] = {
580
BEGIN(OBJ_LIST_UNIMPORTANT),
581
BILLBOARD(),
582
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
583
CALL_NATIVE(bhv_particle_init),
584
BEGIN_REPEAT(70),
585
CALL_NATIVE(bhv_particle_loop),
586
END_REPEAT(),
587
DEACTIVATE(),
588
};
589
590
const BehaviorScript bhvPlungeBubble[] = {
591
BEGIN(OBJ_LIST_DEFAULT),
592
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_PLUNGE_BUBBLE),
593
DISABLE_RENDERING(),
594
CALL_NATIVE(bhv_water_waves_init),
595
DEACTIVATE(),
596
};
597
598
const BehaviorScript bhvSmallParticleSnow[] = {
599
BEGIN(OBJ_LIST_UNIMPORTANT),
600
BILLBOARD(),
601
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
602
CALL_NATIVE(bhv_particle_init),
603
BEGIN_REPEAT(30),
604
CALL_NATIVE(bhv_particle_loop),
605
END_REPEAT(),
606
DEACTIVATE(),
607
};
608
609
const BehaviorScript bhvSmallParticleBubbles[] = {
610
BEGIN(OBJ_LIST_UNIMPORTANT),
611
BILLBOARD(),
612
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
613
CALL_NATIVE(bhv_particle_init),
614
BEGIN_REPEAT(70),
615
CALL_NATIVE(bhv_small_bubbles_loop),
616
END_REPEAT(),
617
DEACTIVATE(),
618
};
619
620
const BehaviorScript bhvFishGroup[] = {
621
BEGIN(OBJ_LIST_DEFAULT),
622
BEGIN_LOOP(),
623
CALL_NATIVE(bhv_fish_group_loop),
624
END_LOOP(),
625
};
626
627
const BehaviorScript bhvCannon[] = {
628
BEGIN(OBJ_LIST_LEVEL),
629
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
630
SPAWN_CHILD(/*Model*/ MODEL_CANNON_BARREL, /*Behavior*/ bhvCannonBarrel),
631
SET_INT(oInteractType, INTERACT_CANNON_BASE),
632
ADD_FLOAT(oPosY, -340),
633
SET_HOME(),
634
SET_HITBOX(/*Radius*/ 150, /*Height*/ 150),
635
SET_INT(oIntangibleTimer, 0),
636
BEGIN_LOOP(),
637
CALL_NATIVE(bhv_cannon_base_loop),
638
END_LOOP(),
639
};
640
641
const BehaviorScript bhvCannonBarrel[] = {
642
BEGIN(OBJ_LIST_DEFAULT),
643
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
644
DROP_TO_FLOOR(),
645
BEGIN_LOOP(),
646
CALL_NATIVE(bhv_cannon_barrel_loop),
647
END_LOOP(),
648
};
649
650
const BehaviorScript bhvCannonBaseUnused[] = {
651
BEGIN(OBJ_LIST_DEFAULT),
652
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
653
BILLBOARD(),
654
SET_INT(oAnimState, -1),
655
BEGIN_REPEAT(8),
656
CALL_NATIVE(bhv_cannon_base_unused_loop),
657
ADD_INT(oAnimState, 1),
658
END_REPEAT(),
659
DEACTIVATE(),
660
};
661
662
const BehaviorScript bhvChuckya[] = {
663
BEGIN(OBJ_LIST_GENACTOR),
664
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
665
LOAD_ANIMATIONS(oAnimations, chuckya_seg8_anims_0800C070),
666
ANIMATE(5),
667
SET_INT(oInteractType, INTERACT_GRABBABLE),
668
SET_HITBOX(/*Radius*/ 150, /*Height*/ 100),
669
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
670
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvChuckyaAnchorMario),
671
SET_INT(oNumLootCoins, 5),
672
SET_INT(oIntangibleTimer, 0),
673
SET_HOME(),
674
BEGIN_LOOP(),
675
CALL_NATIVE(bhv_chuckya_loop),
676
END_LOOP(),
677
};
678
679
const BehaviorScript bhvChuckyaAnchorMario[] = {
680
BEGIN(OBJ_LIST_GENACTOR),
681
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
682
BILLBOARD(),
683
SET_FLOAT(oParentRelativePosY, -60),
684
SET_FLOAT(oParentRelativePosZ, 150),
685
BEGIN_LOOP(),
686
CALL_NATIVE(bhv_chuckya_anchor_mario_loop),
687
END_LOOP(),
688
};
689
690
const BehaviorScript bhvUnused05A8[] = {
691
BEGIN(OBJ_LIST_DEFAULT),
692
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
693
BREAK(),
694
};
695
696
const BehaviorScript bhvRotatingPlatform[] = {
697
BEGIN(OBJ_LIST_SURFACE),
698
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
699
SET_HOME(),
700
BEGIN_LOOP(),
701
CALL_NATIVE(bhv_rotating_platform_loop),
702
CALL_NATIVE(load_object_collision_model),
703
END_LOOP(),
704
};
705
706
const BehaviorScript bhvTower[] = {
707
BEGIN(OBJ_LIST_SURFACE),
708
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
709
LOAD_COLLISION_DATA(wf_seg7_collision_tower),
710
SET_FLOAT(oCollisionDistance, 3000),
711
SET_FLOAT(oDrawingDistance, 20000),
712
BEGIN_LOOP(),
713
CALL_NATIVE(load_object_collision_model),
714
END_LOOP(),
715
};
716
717
const BehaviorScript bhvBulletBillCannon[] = {
718
BEGIN(OBJ_LIST_SURFACE),
719
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
720
LOAD_COLLISION_DATA(wf_seg7_collision_bullet_bill_cannon),
721
SET_FLOAT(oCollisionDistance, 300),
722
BEGIN_LOOP(),
723
CALL_NATIVE(load_object_collision_model),
724
END_LOOP(),
725
};
726
727
const BehaviorScript bhvWfBreakableWallRight[] = {
728
BEGIN(OBJ_LIST_SURFACE),
729
LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall),
730
GOTO(bhvWfBreakableWallLeft + 1 + 2),
731
};
732
733
const BehaviorScript bhvWfBreakableWallLeft[] = {
734
BEGIN(OBJ_LIST_SURFACE),
735
LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall_2),
736
// WF breakable walls - common:
737
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
738
SET_HITBOX(/*Radius*/ 300, /*Height*/ 400),
739
SET_INT(oIntangibleTimer, 0),
740
BEGIN_LOOP(),
741
CALL_NATIVE(bhv_wf_breakable_wall_loop),
742
CALL_NATIVE(load_object_collision_model),
743
END_LOOP(),
744
};
745
746
const BehaviorScript bhvKickableBoard[] = {
747
BEGIN(OBJ_LIST_SURFACE),
748
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
749
LOAD_COLLISION_DATA(wf_seg7_collision_kickable_board),
750
SET_HITBOX(/*Radius*/ 100, /*Height*/ 1200),
751
SET_HURTBOX(/*Radius*/ 1, /*Height*/ 1),
752
SET_FLOAT(oCollisionDistance, 1500),
753
SET_INT(oIntangibleTimer, 0),
754
BEGIN_LOOP(),
755
CALL_NATIVE(bhv_kickable_board_loop),
756
END_LOOP(),
757
};
758
759
const BehaviorScript bhvTowerDoor[] = {
760
BEGIN(OBJ_LIST_SURFACE),
761
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
762
LOAD_COLLISION_DATA(wf_seg7_collision_tower_door),
763
SET_HITBOX(/*Radius*/ 100, /*Height*/ 100),
764
SET_INT(oIntangibleTimer, 0),
765
BEGIN_LOOP(),
766
CALL_NATIVE(bhv_tower_door_loop),
767
CALL_NATIVE(load_object_collision_model),
768
END_LOOP(),
769
};
770
771
const BehaviorScript bhvRotatingCounterClockwise[] = {
772
BEGIN(OBJ_LIST_DEFAULT),
773
BREAK(),
774
};
775
776
const BehaviorScript bhvWfRotatingWoodenPlatform[] = {
777
BEGIN(OBJ_LIST_SURFACE),
778
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
779
LOAD_COLLISION_DATA(wf_seg7_collision_clocklike_rotation),
780
BEGIN_LOOP(),
781
CALL_NATIVE(bhv_wf_rotating_wooden_platform_loop),
782
CALL_NATIVE(load_object_collision_model),
783
END_LOOP(),
784
};
785
786
const BehaviorScript bhvKoopaShellUnderwater[] = {
787
BEGIN(OBJ_LIST_GENACTOR),
788
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
789
BEGIN_LOOP(),
790
CALL_NATIVE(bhv_koopa_shell_underwater_loop),
791
END_LOOP(),
792
};
793
794
const BehaviorScript bhvExitPodiumWarp[] = {
795
BEGIN(OBJ_LIST_SURFACE),
796
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
797
SET_INT(oInteractType, INTERACT_WARP),
798
DROP_TO_FLOOR(),
799
SET_FLOAT(oCollisionDistance, 8000),
800
LOAD_COLLISION_DATA(ttm_seg7_collision_podium_warp),
801
SET_INT(oIntangibleTimer, 0),
802
SET_HITBOX(/*Radius*/ 50, /*Height*/ 50),
803
BEGIN_LOOP(),
804
CALL_NATIVE(load_object_collision_model),
805
SET_INT(oInteractStatus, 0),
806
END_LOOP(),
807
};
808
809
const BehaviorScript bhvFadingWarp[] = {
810
BEGIN(OBJ_LIST_LEVEL),
811
SET_INT(oInteractionSubtype, INT_SUBTYPE_FADING_WARP),
812
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
813
SET_INT(oInteractType, INTERACT_WARP),
814
SET_INT(oIntangibleTimer, 0),
815
BEGIN_LOOP(),
816
CALL_NATIVE(bhv_fading_warp_loop),
817
END_LOOP(),
818
};
819
820
const BehaviorScript bhvWarp[] = {
821
BEGIN(OBJ_LIST_LEVEL),
822
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
823
SET_INT(oInteractType, INTERACT_WARP),
824
SET_INT(oIntangibleTimer, 0),
825
BEGIN_LOOP(),
826
CALL_NATIVE(bhv_warp_loop),
827
END_LOOP(),
828
};
829
830
const BehaviorScript bhvWarpPipe[] = {
831
BEGIN(OBJ_LIST_SURFACE),
832
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
833
SET_INT(oInteractType, INTERACT_WARP),
834
LOAD_COLLISION_DATA(warp_pipe_seg3_collision_03009AC8),
835
SET_FLOAT(oDrawingDistance, 16000),
836
SET_INT(oIntangibleTimer, 0),
837
SET_HITBOX(/*Radius*/ 70, /*Height*/ 50),
838
BEGIN_LOOP(),
839
CALL_NATIVE(bhv_warp_loop),
840
CALL_NATIVE(load_object_collision_model),
841
END_LOOP(),
842
};
843
844
const BehaviorScript bhvWhitePuffExplosion[] = {
845
BEGIN(OBJ_LIST_UNIMPORTANT),
846
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
847
BILLBOARD(),
848
BEGIN_LOOP(),
849
CALL_NATIVE(bhv_white_puff_exploding_loop),
850
END_LOOP(),
851
};
852
853
const BehaviorScript bhvSpawnedStar[] = {
854
BEGIN(OBJ_LIST_LEVEL),
855
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
856
SET_INT(oBehParams2ndByte, 1),
857
GOTO(bhvSpawnedStarNoLevelExit + 1 + 1),
858
};
859
860
const BehaviorScript bhvSpawnedStarNoLevelExit[] = {
861
BEGIN(OBJ_LIST_LEVEL),
862
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
863
// Spawned star - common:
864
SET_HOME(),
865
CALL_NATIVE(bhv_spawned_star_init),
866
BEGIN_LOOP(),
867
CALL_NATIVE(bhv_spawned_star_loop),
868
END_LOOP(),
869
};
870
871
const BehaviorScript bhvMrIBlueCoin[] = {
872
BEGIN(OBJ_LIST_LEVEL),
873
SET_INT(oInteractType, INTERACT_COIN),
874
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
875
BILLBOARD(),
876
SET_INT(oIntangibleTimer, 0),
877
SET_FLOAT(oMrIUnk110, 20),
878
SET_INT(oAnimState, -1),
879
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
880
CALL_NATIVE(bhv_coin_init),
881
SET_INT(oDamageOrCoinValue, 5),
882
SET_HITBOX(/*Radius*/ 120, /*Height*/ 64),
883
BEGIN_LOOP(),
884
CALL_NATIVE(bhv_coin_loop),
885
ADD_INT(oAnimState, 1),
886
END_LOOP(),
887
};
888
889
const BehaviorScript bhvCoinInsideBoo[] = {
890
BEGIN(OBJ_LIST_LEVEL),
891
SET_HITBOX(/*Radius*/ 100, /*Height*/ 64),
892
SET_INT(oInteractType, INTERACT_COIN),
893
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
894
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
895
BILLBOARD(),
896
CALL_NATIVE(bhv_init_room),
897
BEGIN_LOOP(),
898
CALL_NATIVE(bhv_coin_inside_boo_loop),
899
ADD_INT(oAnimState, 1),
900
END_LOOP(),
901
};
902
903
const BehaviorScript bhvCoinFormationSpawn[] = {
904
BEGIN(OBJ_LIST_LEVEL),
905
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
906
BILLBOARD(),
907
BEGIN_LOOP(),
908
CALL_NATIVE(bhv_coin_formation_spawn_loop),
909
END_LOOP(),
910
};
911
912
const BehaviorScript bhvCoinFormation[] = {
913
BEGIN(OBJ_LIST_SPAWNER),
914
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
915
CALL_NATIVE(bhv_coin_formation_init),
916
BEGIN_LOOP(),
917
CALL_NATIVE(bhv_coin_formation_loop),
918
END_LOOP(),
919
};
920
921
const BehaviorScript bhvOneCoin[] = {
922
BEGIN(OBJ_LIST_LEVEL),
923
SET_INT(oBehParams2ndByte, 1),
924
GOTO(bhvYellowCoin + 1),
925
};
926
927
const BehaviorScript bhvYellowCoin[] = {
928
BEGIN(OBJ_LIST_LEVEL),
929
// Yellow coin - common:
930
BILLBOARD(),
931
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
932
CALL_NATIVE(bhv_yellow_coin_init),
933
BEGIN_LOOP(),
934
CALL_NATIVE(bhv_yellow_coin_loop),
935
END_LOOP(),
936
};
937
938
const BehaviorScript bhvTemporaryYellowCoin[] = {
939
BEGIN(OBJ_LIST_LEVEL),
940
BILLBOARD(),
941
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
942
CALL_NATIVE(bhv_yellow_coin_init),
943
BEGIN_LOOP(),
944
CALL_NATIVE(bhv_temp_coin_loop),
945
END_LOOP(),
946
};
947
948
const BehaviorScript bhvThreeCoinsSpawn[] = {
949
BEGIN(OBJ_LIST_DEFAULT),
950
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
951
BEGIN_REPEAT(3),
952
SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvSingleCoinGetsSpawned),
953
END_REPEAT(),
954
DEACTIVATE(),
955
};
956
957
const BehaviorScript bhvTenCoinsSpawn[] = {
958
BEGIN(OBJ_LIST_DEFAULT),
959
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
960
BEGIN_REPEAT(10),
961
SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvSingleCoinGetsSpawned),
962
END_REPEAT(),
963
DEACTIVATE(),
964
};
965
966
const BehaviorScript bhvSingleCoinGetsSpawned[] = {
967
BEGIN(OBJ_LIST_LEVEL),
968
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
969
BILLBOARD(),
970
CALL_NATIVE(bhv_coin_init),
971
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
972
BEGIN_LOOP(),
973
CALL_NATIVE(bhv_coin_loop),
974
ADD_INT(oAnimState, 1),
975
END_LOOP(),
976
};
977
978
const BehaviorScript bhvCoinSparkles[] = {
979
BEGIN(OBJ_LIST_DEFAULT),
980
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
981
BILLBOARD(),
982
SET_FLOAT(oGraphYOffset, 25),
983
SET_INT(oAnimState, -1),
984
BEGIN_REPEAT(8),
985
ADD_INT(oAnimState, 1),
986
END_REPEAT(),
987
BEGIN_REPEAT(2),
988
CALL_NATIVE(bhv_coin_sparkles_loop),
989
END_REPEAT(),
990
DEACTIVATE(),
991
};
992
993
const BehaviorScript bhvGoldenCoinSparkles[] = {
994
BEGIN(OBJ_LIST_DEFAULT),
995
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
996
DISABLE_RENDERING(),
997
BEGIN_REPEAT(3),
998
CALL_NATIVE(bhv_golden_coin_sparkles_loop),
999
END_REPEAT(),
1000
DEACTIVATE(),
1001
};
1002
1003
const BehaviorScript bhvWallTinyStarParticle[] = {
1004
BEGIN(OBJ_LIST_UNIMPORTANT),
1005
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1006
BILLBOARD(),
1007
BEGIN_REPEAT(10),
1008
CALL_NATIVE(bhv_wall_tiny_star_particle_loop),
1009
END_REPEAT(),
1010
DEACTIVATE(),
1011
};
1012
1013
const BehaviorScript bhvVertStarParticleSpawner[] = {
1014
BEGIN(OBJ_LIST_DEFAULT),
1015
DISABLE_RENDERING(),
1016
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1017
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_V_STAR),
1018
CALL_NATIVE(bhv_tiny_star_particles_init),
1019
DELAY(1),
1020
DEACTIVATE(),
1021
};
1022
1023
const BehaviorScript bhvPoundTinyStarParticle[] = {
1024
BEGIN(OBJ_LIST_UNIMPORTANT),
1025
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1026
BILLBOARD(),
1027
BEGIN_REPEAT(10),
1028
CALL_NATIVE(bhv_pound_tiny_star_particle_loop),
1029
END_REPEAT(),
1030
DEACTIVATE(),
1031
};
1032
1033
const BehaviorScript bhvHorStarParticleSpawner[] = {
1034
BEGIN(OBJ_LIST_DEFAULT),
1035
DISABLE_RENDERING(),
1036
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1037
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_H_STAR),
1038
CALL_NATIVE(bhv_pound_tiny_star_particle_init),
1039
DELAY(1),
1040
DEACTIVATE(),
1041
};
1042
1043
const BehaviorScript bhvPunchTinyTriangle[] = {
1044
BEGIN(OBJ_LIST_UNIMPORTANT),
1045
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1046
BILLBOARD(),
1047
BEGIN_LOOP(),
1048
CALL_NATIVE(bhv_punch_tiny_triangle_loop),
1049
END_LOOP(),
1050
};
1051
1052
const BehaviorScript bhvTriangleParticleSpawner[] = {
1053
BEGIN(OBJ_LIST_DEFAULT),
1054
DISABLE_RENDERING(),
1055
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1056
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_TRIANGLE),
1057
CALL_NATIVE(bhv_punch_tiny_triangle_init),
1058
DELAY(1),
1059
DEACTIVATE(),
1060
};
1061
1062
const BehaviorScript bhvDoorWarp[] = {
1063
BEGIN(OBJ_LIST_SURFACE),
1064
SET_INT(oInteractType, INTERACT_WARP_DOOR),
1065
GOTO(bhvDoor + 1 + 1),
1066
};
1067
1068
const BehaviorScript bhvDoor[] = {
1069
BEGIN(OBJ_LIST_SURFACE),
1070
SET_INT(oInteractType, INTERACT_DOOR),
1071
// Door - common:
1072
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1073
LOAD_ANIMATIONS(oAnimations, door_seg3_anims_030156C0),
1074
ANIMATE(0),
1075
LOAD_COLLISION_DATA(door_seg3_collision_0301CE78),
1076
SET_HITBOX(/*Radius*/ 80, /*Height*/ 100),
1077
SET_INT(oIntangibleTimer, 0),
1078
SET_FLOAT(oCollisionDistance, 1000),
1079
SET_HOME(),
1080
CALL_NATIVE(bhv_door_init),
1081
BEGIN_LOOP(),
1082
CALL_NATIVE(bhv_door_loop),
1083
END_LOOP(),
1084
};
1085
1086
const BehaviorScript bhvGrindel[] = {
1087
BEGIN(OBJ_LIST_SURFACE),
1088
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1089
LOAD_COLLISION_DATA(ssl_seg7_collision_grindel),
1090
DROP_TO_FLOOR(),
1091
ADD_FLOAT(oPosY, 1),
1092
SET_HOME(),
1093
BEGIN_LOOP(),
1094
CALL_NATIVE(bhv_grindel_thwomp_loop),
1095
CALL_NATIVE(load_object_collision_model),
1096
END_LOOP(),
1097
};
1098
1099
const BehaviorScript bhvThwomp2[] = {
1100
BEGIN(OBJ_LIST_SURFACE),
1101
LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B92C),
1102
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1103
DROP_TO_FLOOR(),
1104
ADD_FLOAT(oPosY, 1),
1105
SET_HOME(),
1106
SCALE(/*Unused*/ 0, /*Field*/ 140),
1107
SET_FLOAT(oDrawingDistance, 4000),
1108
BEGIN_LOOP(),
1109
CALL_NATIVE(bhv_grindel_thwomp_loop),
1110
CALL_NATIVE(load_object_collision_model),
1111
END_LOOP(),
1112
};
1113
1114
const BehaviorScript bhvThwomp[] = {
1115
BEGIN(OBJ_LIST_SURFACE),
1116
LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B7D0),
1117
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1118
DROP_TO_FLOOR(),
1119
ADD_FLOAT(oPosY, 1),
1120
SCALE(/*Unused*/ 0, /*Field*/ 140),
1121
SET_HOME(),
1122
SET_FLOAT(oDrawingDistance, 4000),
1123
BEGIN_LOOP(),
1124
CALL_NATIVE(bhv_grindel_thwomp_loop),
1125
CALL_NATIVE(load_object_collision_model),
1126
END_LOOP(),
1127
};
1128
1129
const BehaviorScript bhvTumblingBridgePlatform[] = {
1130
BEGIN(OBJ_LIST_SURFACE),
1131
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1132
SET_FLOAT(oCollisionDistance, 300),
1133
BEGIN_LOOP(),
1134
CALL_NATIVE(bhv_tumbling_bridge_platform_loop),
1135
CALL_NATIVE(load_object_collision_model),
1136
END_LOOP(),
1137
};
1138
1139
const BehaviorScript bhvWfTumblingBridge[] = {
1140
BEGIN(OBJ_LIST_SPAWNER),
1141
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1142
SET_HOME(),
1143
BEGIN_LOOP(),
1144
CALL_NATIVE(bhv_tumbling_bridge_loop),
1145
END_LOOP(),
1146
};
1147
1148
const BehaviorScript bhvBbhTumblingBridge[] = {
1149
BEGIN(OBJ_LIST_SPAWNER),
1150
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1151
SET_HOME(),
1152
SET_INT(oBehParams2ndByte, 1),
1153
BEGIN_LOOP(),
1154
CALL_NATIVE(bhv_tumbling_bridge_loop),
1155
END_LOOP(),
1156
};
1157
1158
const BehaviorScript bhvLllTumblingBridge[] = {
1159
BEGIN(OBJ_LIST_SPAWNER),
1160
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1161
SET_HOME(),
1162
SET_INT(oBehParams2ndByte, 2),
1163
BEGIN_LOOP(),
1164
CALL_NATIVE(bhv_tumbling_bridge_loop),
1165
END_LOOP(),
1166
};
1167
1168
const BehaviorScript bhvFlame[] = {
1169
BEGIN(OBJ_LIST_LEVEL),
1170
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1171
BILLBOARD(),
1172
SET_HOME(),
1173
SCALE(/*Unused*/ 0, /*Field*/ 700),
1174
SET_INTERACT_TYPE(INTERACT_FLAME),
1175
SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 25, /*Downwards offset*/ 25),
1176
SET_INT(oIntangibleTimer, 0),
1177
CALL_NATIVE(bhv_init_room),
1178
BEGIN_LOOP(),
1179
SET_INT(oInteractStatus, 0),
1180
ANIMATE_TEXTURE(oAnimState, 2),
1181
END_LOOP(),
1182
};
1183
1184
const BehaviorScript bhvAnotherElavator[] = {
1185
BEGIN(OBJ_LIST_SURFACE),
1186
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1187
LOAD_COLLISION_DATA(hmc_seg7_collision_elevator),
1188
SET_HOME(),
1189
CALL_NATIVE(bhv_elevator_init),
1190
BEGIN_LOOP(),
1191
CALL_NATIVE(bhv_elevator_loop),
1192
CALL_NATIVE(load_object_collision_model),
1193
END_LOOP(),
1194
};
1195
1196
const BehaviorScript bhvRrElevatorPlatform[] = {
1197
BEGIN(OBJ_LIST_SURFACE),
1198
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1199
LOAD_COLLISION_DATA(rr_seg7_collision_elevator_platform),
1200
SET_HOME(),
1201
CALL_NATIVE(bhv_elevator_init),
1202
BEGIN_LOOP(),
1203
CALL_NATIVE(bhv_elevator_loop),
1204
CALL_NATIVE(load_object_collision_model),
1205
END_LOOP(),
1206
};
1207
1208
const BehaviorScript bhvHmcElevatorPlatform[] = {
1209
BEGIN(OBJ_LIST_SURFACE),
1210
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1211
LOAD_COLLISION_DATA(hmc_seg7_collision_elevator),
1212
SET_HOME(),
1213
CALL_NATIVE(bhv_elevator_init),
1214
CALL_NATIVE(bhv_init_room),
1215
BEGIN_LOOP(),
1216
CALL_NATIVE(bhv_elevator_loop),
1217
CALL_NATIVE(load_object_collision_model),
1218
END_LOOP(),
1219
};
1220
1221
const BehaviorScript bhvWaterMist[] = {
1222
BEGIN(OBJ_LIST_UNIMPORTANT),
1223
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1224
BILLBOARD(),
1225
SET_INT(oOpacity, 254),
1226
SET_FLOAT(oForwardVel, 20),
1227
SET_FLOAT(oVelY, -8),
1228
ADD_FLOAT(oPosY, 62),
1229
BEGIN_LOOP(),
1230
CALL_NATIVE(bhv_water_mist_loop),
1231
END_LOOP(),
1232
};
1233
1234
const BehaviorScript bhvBreathParticleSpawner[] = {
1235
BEGIN(OBJ_LIST_DEFAULT),
1236
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1237
BEGIN_REPEAT(8),
1238
CALL_NATIVE(bhv_water_mist_spawn_loop),
1239
END_REPEAT(),
1240
DEACTIVATE(),
1241
};
1242
1243
const BehaviorScript bhvBreakBoxTriangle[] = {
1244
BEGIN(OBJ_LIST_UNIMPORTANT),
1245
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1246
BEGIN_REPEAT(18),
1247
CALL_NATIVE(cur_obj_rotate_face_angle_using_vel),
1248
CALL_NATIVE(cur_obj_move_using_fvel_and_gravity),
1249
END_REPEAT(),
1250
DEACTIVATE(),
1251
};
1252
1253
const BehaviorScript bhvWaterMist2[] = {
1254
BEGIN(OBJ_LIST_DEFAULT),
1255
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1256
SET_HOME(),
1257
SET_INT(oFaceAnglePitch, 0xC000),
1258
SCALE(/*Unused*/ 0, /*Field*/ 2100),
1259
BEGIN_LOOP(),
1260
CALL_NATIVE(bhv_water_mist_2_loop),
1261
END_LOOP(),
1262
};
1263
1264
const BehaviorScript bhvUnused0DFC[] = {
1265
BEGIN(OBJ_LIST_DEFAULT),
1266
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1267
SET_INT(oAnimState, -1),
1268
SET_FLOAT(oFaceAnglePitch, 0),
1269
SET_FLOAT(oFaceAngleYaw, 0),
1270
SET_FLOAT(oFaceAngleRoll, 0),
1271
BEGIN_REPEAT(6),
1272
ADD_INT(oAnimState, 1),
1273
END_REPEAT(),
1274
DEACTIVATE(),
1275
};
1276
1277
const BehaviorScript bhvMistCircParticleSpawner[] = {
1278
BEGIN(OBJ_LIST_DEFAULT),
1279
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1280
CALL_NATIVE(bhv_pound_white_puffs_init),
1281
DELAY(1),
1282
DEACTIVATE(),
1283
};
1284
1285
const BehaviorScript bhvDirtParticleSpawner[] = {
1286
BEGIN(OBJ_LIST_DEFAULT),
1287
BEGIN(OBJ_LIST_DEFAULT),
1288
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1289
CALL_NATIVE(bhv_ground_sand_init),
1290
DELAY(1),
1291
DEACTIVATE(),
1292
};
1293
1294
const BehaviorScript bhvSnowParticleSpawner[] = {
1295
BEGIN(OBJ_LIST_DEFAULT),
1296
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1297
CALL_NATIVE(bhv_ground_snow_init),
1298
DELAY(1),
1299
DEACTIVATE(),
1300
};
1301
1302
const BehaviorScript bhvWind[] = {
1303
BEGIN(OBJ_LIST_UNIMPORTANT),
1304
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1305
BEGIN_LOOP(),
1306
CALL_NATIVE(bhv_wind_loop),
1307
END_LOOP(),
1308
};
1309
1310
const BehaviorScript bhvEndToad[] = {
1311
BEGIN(OBJ_LIST_DEFAULT),
1312
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1313
LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58),
1314
ANIMATE(0),
1315
BEGIN_LOOP(),
1316
CALL_NATIVE(bhv_end_toad_loop),
1317
END_LOOP(),
1318
};
1319
1320
const BehaviorScript bhvEndPeach[] = {
1321
BEGIN(OBJ_LIST_DEFAULT),
1322
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1323
LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C),
1324
ANIMATE(0),
1325
BEGIN_LOOP(),
1326
CALL_NATIVE(bhv_end_peach_loop),
1327
END_LOOP(),
1328
};
1329
1330
const BehaviorScript bhvUnusedParticleSpawn[] = {
1331
BEGIN(OBJ_LIST_GENACTOR),
1332
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1333
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1334
SET_INT(oIntangibleTimer, 0),
1335
SET_HITBOX(/*Radius*/ 40, /*Height*/ 40),
1336
BEGIN_LOOP(),
1337
CALL_NATIVE(bhv_unused_particle_spawn_loop),
1338
END_LOOP(),
1339
};
1340
1341
const BehaviorScript bhvUkiki[] = {
1342
BEGIN(OBJ_LIST_GENACTOR),
1343
GOTO(bhvMacroUkiki + 1),
1344
};
1345
1346
const BehaviorScript bhvUkikiCageChild[] = {
1347
BEGIN(OBJ_LIST_GENACTOR),
1348
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1349
SET_FLOAT(oPosX, 2560),
1350
SET_FLOAT(oPosY, 1457),
1351
SET_FLOAT(oPosZ, 1898),
1352
BREAK(),
1353
};
1354
1355
const BehaviorScript bhvUkikiCageStar[] = {
1356
BEGIN(OBJ_LIST_DEFAULT),
1357
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1358
SET_HOME(),
1359
BEGIN_LOOP(),
1360
CALL_NATIVE(bhv_ukiki_cage_star_loop),
1361
END_LOOP(),
1362
};
1363
1364
const BehaviorScript bhvUkikiCage[] = {
1365
BEGIN(OBJ_LIST_SURFACE),
1366
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1367
SET_HOME(),
1368
LOAD_COLLISION_DATA(ttm_seg7_collision_ukiki_cage),
1369
SPAWN_CHILD(/*Model*/ MODEL_STAR, /*Behavior*/ bhvUkikiCageStar),
1370
SPAWN_CHILD(/*Model*/ MODEL_NONE, /*Behavior*/ bhvUkikiCageChild),
1371
SET_FLOAT(oCollisionDistance, 20000),
1372
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1373
BEGIN_LOOP(),
1374
CALL_NATIVE(bhv_ukiki_cage_loop),
1375
END_LOOP(),
1376
};
1377
1378
const BehaviorScript bhvBitfsSinkingPlatforms[] = {
1379
BEGIN(OBJ_LIST_SURFACE),
1380
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1381
LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_platform),
1382
SET_HOME(),
1383
BEGIN_LOOP(),
1384
CALL_NATIVE(bhv_bitfs_sinking_platform_loop),
1385
CALL_NATIVE(load_object_collision_model),
1386
END_LOOP(),
1387
};
1388
1389
const BehaviorScript bhvBitfsSinkingCagePlatform[] = {
1390
BEGIN(OBJ_LIST_SURFACE),
1391
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1392
LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_cage_platform),
1393
SET_HOME(),
1394
SPAWN_CHILD(/*Model*/ MODEL_BITFS_BLUE_POLE, /*Behavior*/ bhvDddMovingPole),
1395
BEGIN_LOOP(),
1396
CALL_NATIVE(bhv_bitfs_sinking_cage_platform_loop),
1397
CALL_NATIVE(load_object_collision_model),
1398
END_LOOP(),
1399
};
1400
1401
const BehaviorScript bhvDddMovingPole[] = {
1402
BEGIN(OBJ_LIST_POLELIKE),
1403
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1404
SET_INT(oInteractType, INTERACT_POLE),
1405
SET_HITBOX(/*Radius*/ 80, /*Height*/ 710),
1406
SET_INT(oIntangibleTimer, 0),
1407
BEGIN_LOOP(),
1408
CALL_NATIVE(bhv_ddd_moving_pole_loop),
1409
CALL_NATIVE(bhv_pole_base_loop),
1410
END_LOOP(),
1411
};
1412
1413
const BehaviorScript bhvBitfsTiltingInvertedPyramid[] = {
1414
BEGIN(OBJ_LIST_SURFACE),
1415
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1416
LOAD_COLLISION_DATA(bitfs_seg7_collision_inverted_pyramid),
1417
SET_HOME(),
1418
CALL_NATIVE(bhv_platform_normals_init),
1419
BEGIN_LOOP(),
1420
CALL_NATIVE(bhv_tilting_inverted_pyramid_loop),
1421
CALL_NATIVE(load_object_collision_model),
1422
END_LOOP(),
1423
};
1424
1425
const BehaviorScript bhvSquishablePlatform[] = {
1426
BEGIN(OBJ_LIST_SURFACE),
1427
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1428
LOAD_COLLISION_DATA(bitfs_seg7_collision_squishable_platform),
1429
SET_FLOAT(oCollisionDistance, 10000),
1430
CALL_NATIVE(bhv_platform_normals_init),
1431
BEGIN_LOOP(),
1432
CALL_NATIVE(bhv_squishable_platform_loop),
1433
CALL_NATIVE(load_object_collision_model),
1434
END_LOOP(),
1435
};
1436
1437
const BehaviorScript bhvCutOutObject[] = {
1438
BEGIN(OBJ_LIST_GENACTOR),
1439
DISABLE_RENDERING(),
1440
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1441
BREAK(),
1442
};
1443
1444
const BehaviorScript bhvBetaMovingFlamesSpawn[] = {
1445
BEGIN_LOOP(),
1446
CALL_NATIVE(bhv_beta_moving_flames_spawn_loop),
1447
END_LOOP(),
1448
};
1449
1450
const BehaviorScript bhvBetaMovingFlames[] = {
1451
BEGIN(OBJ_LIST_LEVEL),
1452
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1453
BILLBOARD(),
1454
BEGIN_LOOP(),
1455
CALL_NATIVE(bhv_beta_moving_flames_loop),
1456
ADD_INT(oAnimState, 1),
1457
END_LOOP(),
1458
};
1459
1460
const BehaviorScript bhvRrRotatingBridgePlatform[] = {
1461
BEGIN(OBJ_LIST_SURFACE),
1462
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1463
LOAD_COLLISION_DATA(rr_seg7_collision_rotating_platform_with_fire),
1464
SET_FLOAT(oCollisionDistance, 1500),
1465
SET_HOME(),
1466
BEGIN_LOOP(),
1467
CALL_NATIVE(bhv_rr_rotating_bridge_platform_loop),
1468
CALL_NATIVE(load_object_collision_model),
1469
END_LOOP(),
1470
};
1471
1472
const BehaviorScript bhvFlamethrower[] = {
1473
BEGIN(OBJ_LIST_DEFAULT),
1474
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1475
SET_HOME(),
1476
BEGIN_LOOP(),
1477
CALL_NATIVE(bhv_flamethrower_loop),
1478
END_LOOP(),
1479
};
1480
1481
const BehaviorScript bhvFlamethrowerFlame[] = {
1482
BEGIN(OBJ_LIST_GENACTOR),
1483
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1484
SET_INTERACT_TYPE(INTERACT_FLAME),
1485
SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 25, /*Downwards offset*/ 25),
1486
BILLBOARD(),
1487
SET_HOME(),
1488
SET_INT(oIntangibleTimer, 0),
1489
CALL_NATIVE(bhv_init_room),
1490
BEGIN_LOOP(),
1491
CALL_NATIVE(bhv_flamethrower_flame_loop),
1492
ADD_INT(oAnimState, 1),
1493
END_LOOP(),
1494
};
1495
1496
const BehaviorScript bhvBouncingFireball[] = {
1497
BEGIN(OBJ_LIST_DEFAULT),
1498
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1499
DISABLE_RENDERING(),
1500
BEGIN_LOOP(),
1501
CALL_NATIVE(bhv_bouncing_fireball_loop),
1502
END_LOOP(),
1503
};
1504
1505
const BehaviorScript bhvBouncingFireballFlame[] = {
1506
BEGIN(OBJ_LIST_GENACTOR),
1507
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1508
SET_INTERACT_TYPE(INTERACT_FLAME),
1509
SET_FLOAT(oGraphYOffset, 30),
1510
SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 25, /*Downwards offset*/ 25),
1511
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1512
BILLBOARD(),
1513
BEGIN_LOOP(),
1514
CALL_NATIVE(bhv_bouncing_fireball_flame_loop),
1515
ADD_INT(oAnimState, 1),
1516
END_LOOP(),
1517
};
1518
1519
const BehaviorScript bhvBowserShockWave[] = {
1520
BEGIN(OBJ_LIST_DEFAULT),
1521
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1522
SET_INT(oOpacity, 255),
1523
BEGIN_LOOP(),
1524
CALL_NATIVE(bhv_bowser_shock_wave_loop),
1525
END_LOOP(),
1526
};
1527
1528
const BehaviorScript bhvFireParticleSpawner[] = {
1529
BEGIN(OBJ_LIST_DEFAULT),
1530
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1531
BILLBOARD(),
1532
SET_FLOAT(oGraphYOffset, 70),
1533
SET_INT(oAnimState, -1),
1534
BEGIN_LOOP(),
1535
ADD_INT(oAnimState, 1),
1536
CALL_NATIVE(bhv_flame_mario_loop),
1537
END_LOOP(),
1538
};
1539
1540
const BehaviorScript bhvBlackSmokeMario[] = {
1541
BEGIN(OBJ_LIST_UNIMPORTANT),
1542
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1543
BILLBOARD(),
1544
SET_INT(oAnimState, 4),
1545
SET_FLOAT(oGraphYOffset, 50),
1546
BEGIN_REPEAT(8),
1547
CALL_NATIVE(bhv_black_smoke_mario_loop),
1548
DELAY(1),
1549
CALL_NATIVE(bhv_black_smoke_mario_loop),
1550
DELAY(1),
1551
CALL_NATIVE(bhv_black_smoke_mario_loop),
1552
END_REPEAT(),
1553
DEACTIVATE(),
1554
};
1555
1556
const BehaviorScript bhvBlackSmokeBowser[] = {
1557
BEGIN(OBJ_LIST_UNIMPORTANT),
1558
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1559
BILLBOARD(),
1560
SET_FLOAT(oGraphYOffset, 0),
1561
BEGIN_REPEAT(8),
1562
CALL_NATIVE(bhv_black_smoke_bowser_loop),
1563
ANIMATE_TEXTURE(oAnimState, 4),
1564
END_REPEAT(),
1565
DEACTIVATE(),
1566
};
1567
1568
const BehaviorScript bhvBlackSmokeUpward[] = {
1569
BEGIN(OBJ_LIST_DEFAULT),
1570
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1571
BEGIN_REPEAT(4),
1572
CALL_NATIVE(bhv_black_smoke_upward_loop),
1573
END_REPEAT(),
1574
DEACTIVATE(),
1575
};
1576
1577
const BehaviorScript bhvBetaFishSplashSpawner[] = {
1578
BEGIN(OBJ_LIST_DEFAULT),
1579
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1580
DISABLE_RENDERING(),
1581
BEGIN_LOOP(),
1582
CALL_NATIVE(bhv_beta_fish_splash_spawner_loop),
1583
END_LOOP(),
1584
};
1585
1586
const BehaviorScript bhvSpindrift[] = {
1587
BEGIN(OBJ_LIST_GENACTOR),
1588
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1589
LOAD_ANIMATIONS(oAnimations, spindrift_seg5_anims_05002D68),
1590
ANIMATE(0),
1591
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1592
SET_HOME(),
1593
SET_INT(oInteractionSubtype, INT_SUBTYPE_TWIRL_BOUNCE),
1594
BEGIN_LOOP(),
1595
CALL_NATIVE(bhv_spindrift_loop),
1596
END_LOOP(),
1597
};
1598
1599
const BehaviorScript bhvTowerPlatformGroup[] = {
1600
BEGIN(OBJ_LIST_SURFACE),
1601
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1602
DISABLE_RENDERING(),
1603
ADD_FLOAT(oPosY, 300),
1604
SET_HOME(),
1605
BEGIN_LOOP(),
1606
CALL_NATIVE(bhv_tower_platform_group_loop),
1607
END_LOOP(),
1608
};
1609
1610
const BehaviorScript bhvWfSlidingTowerPlatform[] = {
1611
BEGIN(OBJ_LIST_SURFACE),
1612
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1613
LOAD_COLLISION_DATA(wf_seg7_collision_platform),
1614
BEGIN_LOOP(),
1615
CALL_NATIVE(bhv_wf_sliding_tower_platform_loop),
1616
CALL_NATIVE(load_object_collision_model),
1617
END_LOOP(),
1618
};
1619
1620
const BehaviorScript bhvWfElevatorTowerPlatform[] = {
1621
BEGIN(OBJ_LIST_SURFACE),
1622
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1623
LOAD_COLLISION_DATA(wf_seg7_collision_platform),
1624
BEGIN_LOOP(),
1625
CALL_NATIVE(bhv_wf_elevator_tower_platform_loop),
1626
CALL_NATIVE(load_object_collision_model),
1627
END_LOOP(),
1628
};
1629
1630
const BehaviorScript bhvWfSolidTowerPlatform[] = {
1631
BEGIN(OBJ_LIST_SURFACE),
1632
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1633
LOAD_COLLISION_DATA(wf_seg7_collision_platform),
1634
BEGIN_LOOP(),
1635
CALL_NATIVE(bhv_wf_solid_tower_platform_loop),
1636
CALL_NATIVE(load_object_collision_model),
1637
END_LOOP(),
1638
};
1639
1640
const BehaviorScript bhvLeafParticleSpawner[] = {
1641
BEGIN(OBJ_LIST_DEFAULT),
1642
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1643
CALL_NATIVE(bhv_snow_leaf_particle_spawn_init),
1644
DELAY(1),
1645
DEACTIVATE(),
1646
};
1647
1648
const BehaviorScript bhvTreeSnow[] = {
1649
BEGIN(OBJ_LIST_UNIMPORTANT),
1650
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1651
BILLBOARD(),
1652
BEGIN_LOOP(),
1653
CALL_NATIVE(bhv_tree_snow_or_leaf_loop),
1654
END_LOOP(),
1655
};
1656
1657
const BehaviorScript bhvTreeLeaf[] = {
1658
BEGIN(OBJ_LIST_UNIMPORTANT),
1659
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1660
BEGIN_LOOP(),
1661
CALL_NATIVE(bhv_tree_snow_or_leaf_loop),
1662
END_LOOP(),
1663
};
1664
1665
const BehaviorScript bhvAnotherTiltingPlatform[] = {
1666
BEGIN(OBJ_LIST_SURFACE),
1667
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1668
SET_HOME(),
1669
CALL_NATIVE(bhv_platform_normals_init),
1670
BEGIN_LOOP(),
1671
CALL_NATIVE(bhv_tilting_inverted_pyramid_loop),
1672
CALL_NATIVE(load_object_collision_model),
1673
END_LOOP(),
1674
};
1675
1676
const BehaviorScript bhvSquarishPathMoving[] = {
1677
BEGIN(OBJ_LIST_SURFACE),
1678
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1679
LOAD_COLLISION_DATA(bitdw_seg7_collision_moving_pyramid),
1680
SET_HOME(),
1681
BEGIN_LOOP(),
1682
CALL_NATIVE(bhv_squarish_path_moving_loop),
1683
END_LOOP(),
1684
};
1685
1686
const BehaviorScript bhvPiranhaPlantBubble[] = {
1687
BEGIN(OBJ_LIST_UNIMPORTANT),
1688
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1689
BILLBOARD(),
1690
BEGIN_LOOP(),
1691
CALL_NATIVE(bhv_piranha_plant_bubble_loop),
1692
END_LOOP(),
1693
};
1694
1695
const BehaviorScript bhvPiranhaPlantWakingBubbles[] = {
1696
BEGIN(OBJ_LIST_UNIMPORTANT),
1697
BILLBOARD(),
1698
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1699
BEGIN_REPEAT(10),
1700
CALL_NATIVE(bhv_piranha_plant_waking_bubbles_loop),
1701
END_REPEAT(),
1702
DEACTIVATE(),
1703
};
1704
1705
const BehaviorScript bhvFloorSwitchAnimatesObject[] = {
1706
BEGIN(OBJ_LIST_SURFACE),
1707
SET_INT(oBehParams2ndByte, 1),
1708
GOTO(bhvFloorSwitchHardcodedModel + 1),
1709
};
1710
1711
const BehaviorScript bhvFloorSwitchGrills[] = {
1712
BEGIN(OBJ_LIST_SURFACE),
1713
GOTO(bhvFloorSwitchHardcodedModel + 1),
1714
};
1715
1716
const BehaviorScript bhvFloorSwitchHardcodedModel[] = {
1717
BEGIN(OBJ_LIST_SURFACE),
1718
// Floor switch - common:
1719
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1720
LOAD_COLLISION_DATA(purple_switch_seg8_collision_0800C7A8),
1721
BEGIN_LOOP(),
1722
CALL_NATIVE(bhv_purple_switch_loop),
1723
CALL_NATIVE(load_object_collision_model),
1724
END_LOOP(),
1725
};
1726
1727
const BehaviorScript bhvFloorSwitchHiddenObjects[] = {
1728
BEGIN(OBJ_LIST_SURFACE),
1729
SET_INT(oBehParams2ndByte, 2),
1730
GOTO(bhvFloorSwitchHardcodedModel + 1),
1731
};
1732
1733
const BehaviorScript bhvHiddenObject[] = {
1734
BEGIN(OBJ_LIST_SURFACE),
1735
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1736
LOAD_COLLISION_DATA(breakable_box_seg8_collision_08012D70),
1737
SET_FLOAT(oCollisionDistance, 300),
1738
BEGIN_LOOP(),
1739
CALL_NATIVE(bhv_hidden_object_loop),
1740
END_LOOP(),
1741
};
1742
1743
const BehaviorScript bhvBreakableBox[] = {
1744
BEGIN(OBJ_LIST_SURFACE),
1745
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1746
LOAD_COLLISION_DATA(breakable_box_seg8_collision_08012D70),
1747
SET_FLOAT(oCollisionDistance, 500),
1748
CALL_NATIVE(bhv_init_room),
1749
BEGIN_LOOP(),
1750
CALL_NATIVE(bhv_breakable_box_loop),
1751
CALL_NATIVE(load_object_collision_model),
1752
END_LOOP(),
1753
BREAK(),
1754
};
1755
1756
const BehaviorScript bhvPushableMetalBox[] = {
1757
BEGIN(OBJ_LIST_SURFACE),
1758
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1759
LOAD_COLLISION_DATA(metal_box_seg8_collision_08024C28),
1760
SET_FLOAT(oCollisionDistance, 500),
1761
SET_HOME(),
1762
BEGIN_LOOP(),
1763
CALL_NATIVE(bhv_pushable_loop),
1764
CALL_NATIVE(load_object_collision_model),
1765
END_LOOP(),
1766
};
1767
1768
const BehaviorScript bhvHeaveHo[] = {
1769
BEGIN(OBJ_LIST_GENACTOR),
1770
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1771
LOAD_ANIMATIONS(oAnimations, heave_ho_seg5_anims_0501534C),
1772
ANIMATE(0),
1773
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 200, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0),
1774
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvHeaveHoThrowMario),
1775
SET_INT(oInteractType, INTERACT_GRABBABLE),
1776
SET_INT(oInteractionSubtype, INT_SUBTYPE_NOT_GRABBABLE | INT_SUBTYPE_GRABS_MARIO),
1777
SET_HITBOX(/*Radius*/ 120, /*Height*/ 100),
1778
SET_HOME(),
1779
SET_INT(oIntangibleTimer, 0),
1780
BEGIN_LOOP(),
1781
CALL_NATIVE(bhv_heave_ho_loop),
1782
END_LOOP(),
1783
};
1784
1785
const BehaviorScript bhvHeaveHoThrowMario[] = {
1786
BEGIN(OBJ_LIST_GENACTOR),
1787
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1788
BILLBOARD(),
1789
BEGIN_LOOP(),
1790
CALL_NATIVE(bhv_heave_ho_throw_mario_loop),
1791
END_LOOP(),
1792
};
1793
1794
const BehaviorScript bhvCcmTouchedStarSpawn[] = {
1795
BEGIN(OBJ_LIST_LEVEL),
1796
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1797
SET_HITBOX(/*Radius*/ 500, /*Height*/ 500),
1798
SET_INT(oIntangibleTimer, 0),
1799
BEGIN_LOOP(),
1800
CALL_NATIVE(bhv_ccm_touched_star_spawn_loop),
1801
END_LOOP(),
1802
};
1803
1804
const BehaviorScript bhvUnusedPoundablePlatform[] = {
1805
BEGIN(OBJ_LIST_SURFACE),
1806
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1807
LOAD_COLLISION_DATA(sl_seg7_collision_pound_explodes),
1808
SET_HOME(),
1809
BEGIN_LOOP(),
1810
CALL_NATIVE(bhv_unused_poundable_platform),
1811
END_LOOP(),
1812
};
1813
1814
const BehaviorScript bhvBetaTrampolineTop[] = {
1815
BEGIN(OBJ_LIST_SURFACE),
1816
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1817
LOAD_COLLISION_DATA(springboard_collision_05001A28),
1818
SET_HOME(),
1819
BEGIN_LOOP(),
1820
CALL_NATIVE(bhv_beta_trampoline_top_loop),
1821
CALL_NATIVE(load_object_collision_model),
1822
END_LOOP(),
1823
};
1824
1825
const BehaviorScript bhvBetaTrampolineSpring[] = {
1826
BEGIN(OBJ_LIST_DEFAULT),
1827
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1828
SET_HOME(),
1829
BEGIN_LOOP(),
1830
CALL_NATIVE(bhv_beta_trampoline_spring_loop),
1831
END_LOOP(),
1832
};
1833
1834
const BehaviorScript bhvJumpingBox[] = {
1835
BEGIN(OBJ_LIST_GENACTOR),
1836
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1837
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0),
1838
BEGIN_LOOP(),
1839
CALL_NATIVE(bhv_jumping_box_loop),
1840
END_LOOP(),
1841
};
1842
1843
const BehaviorScript bhvBooCage[] = {
1844
BEGIN(OBJ_LIST_GENACTOR),
1845
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1846
SET_FLOAT(oGraphYOffset, 10),
1847
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1848
BEGIN_LOOP(),
1849
CALL_NATIVE(bhv_boo_cage_loop),
1850
END_LOOP(),
1851
};
1852
1853
const BehaviorScript bhvStub[] = {
1854
BEGIN(OBJ_LIST_DEFAULT),
1855
DISABLE_RENDERING(),
1856
BREAK(),
1857
};
1858
1859
const BehaviorScript bhvIgloo[] = {
1860
BEGIN(OBJ_LIST_LEVEL),
1861
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1862
SET_INTERACT_TYPE(INTERACT_IGLOO_BARRIER),
1863
SET_HITBOX(/*Radius*/ 100, /*Height*/ 200),
1864
SET_INT(oIntangibleTimer, 0),
1865
SET_HOME(),
1866
BEGIN_LOOP(),
1867
SET_INT(oInteractStatus, 0),
1868
END_LOOP(),
1869
};
1870
1871
const BehaviorScript bhvBowserKey[] = {
1872
BEGIN(OBJ_LIST_LEVEL),
1873
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1874
SET_HOME(),
1875
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1876
BEGIN_LOOP(),
1877
CALL_NATIVE(bhv_bowser_key_loop),
1878
END_LOOP(),
1879
};
1880
1881
const BehaviorScript bhvGrandStar[] = {
1882
BEGIN(OBJ_LIST_LEVEL),
1883
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1884
SET_INTERACT_TYPE(INTERACT_STAR_OR_KEY),
1885
SET_INT(oInteractionSubtype, INT_SUBTYPE_GRAND_STAR),
1886
SET_HITBOX(/*Radius*/ 160, /*Height*/ 100),
1887
SET_HOME(),
1888
BEGIN_LOOP(),
1889
CALL_NATIVE(bhv_grand_star_loop),
1890
END_LOOP(),
1891
};
1892
1893
const BehaviorScript bhvBetaBooKey[] = {
1894
BEGIN(OBJ_LIST_LEVEL),
1895
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1896
SET_HITBOX(/*Radius*/ 32, /*Height*/ 64),
1897
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1898
BEGIN_LOOP(),
1899
CALL_NATIVE(bhv_beta_boo_key_loop),
1900
END_LOOP(),
1901
};
1902
1903
const BehaviorScript bhvAlphaBooKey[] = {
1904
BEGIN(OBJ_LIST_LEVEL),
1905
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1906
SET_HITBOX(/*Radius*/ 32, /*Height*/ 64),
1907
SET_INT(oIntangibleTimer, 0),
1908
BEGIN_LOOP(),
1909
CALL_NATIVE(bhv_alpha_boo_key_loop),
1910
END_LOOP(),
1911
};
1912
1913
const BehaviorScript bhvBulletBill[] = {
1914
BEGIN(OBJ_LIST_GENACTOR),
1915
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1916
SET_HOME(),
1917
SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 50, /*Downwards offset*/ 50),
1918
SET_INTERACT_TYPE(INTERACT_DAMAGE),
1919
SET_INT(oDamageOrCoinValue, 3),
1920
SCALE(/*Unused*/ 0, /*Field*/ 40),
1921
SET_INT(oIntangibleTimer, 0),
1922
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
1923
CALL_NATIVE(bhv_bullet_bill_init),
1924
BEGIN_LOOP(),
1925
CALL_NATIVE(bhv_bullet_bill_loop),
1926
END_LOOP(),
1927
};
1928
1929
const BehaviorScript bhvWhitePuffSmoke[] = {
1930
BEGIN(OBJ_LIST_DEFAULT),
1931
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1932
BILLBOARD(),
1933
ADD_FLOAT(oPosY, -100),
1934
CALL_NATIVE(bhv_white_puff_smoke_init),
1935
SET_INT(oAnimState, -1),
1936
BEGIN_REPEAT(10),
1937
ADD_INT(oAnimState, 1),
1938
END_REPEAT(),
1939
DEACTIVATE(),
1940
};
1941
1942
const BehaviorScript bhvUnused1820[] = {
1943
BEGIN(OBJ_LIST_DEFAULT),
1944
BREAK(),
1945
};
1946
1947
const BehaviorScript bhvBowserTailAnchor[] = {
1948
BEGIN(OBJ_LIST_GENACTOR),
1949
SET_HITBOX_WITH_OFFSET(/*Radius*/ 100, /*Height*/ 50, /*Downwards offset*/ -50),
1950
SET_INT(oIntangibleTimer, 0),
1951
DISABLE_RENDERING(),
1952
BEGIN_LOOP(),
1953
CALL_NATIVE(bhv_bowser_tail_anchor_loop),
1954
END_LOOP(),
1955
};
1956
1957
const BehaviorScript bhvBowser[] = {
1958
BEGIN(OBJ_LIST_GENACTOR),
1959
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
1960
SET_INT(oInteractType, INTERACT_GRABBABLE),
1961
SET_HITBOX(/*Radius*/ 400, /*Height*/ 400),
1962
DROP_TO_FLOOR(),
1963
SET_HOME(),
1964
LOAD_ANIMATIONS(oAnimations, bowser_seg6_anims_06057690),
1965
SPAWN_CHILD(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBowserBodyAnchor),
1966
SPAWN_CHILD(/*Model*/ MODEL_BOWSER_BOMB_CHILD_OBJ, /*Behavior*/ bhvBowserFlameSpawn),
1967
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBowserTailAnchor),
1968
// Beta leftover that spawn 50 coins when Bowser is defeated
1969
SET_INT(oNumLootCoins, 50),
1970
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
1971
SET_HOME(),
1972
CALL_NATIVE(bhv_bowser_init),
1973
BEGIN_LOOP(),
1974
CALL_NATIVE(bhv_bowser_loop),
1975
END_LOOP(),
1976
};
1977
1978
const BehaviorScript bhvBowserBodyAnchor[] = {
1979
BEGIN(OBJ_LIST_GENACTOR),
1980
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1981
SET_HITBOX(/*Radius*/ 100, /*Height*/ 300),
1982
SET_INTERACT_TYPE(INTERACT_DAMAGE),
1983
SET_INT(oInteractionSubtype, INT_SUBTYPE_BIG_KNOCKBACK),
1984
DISABLE_RENDERING(),
1985
SET_INT(oDamageOrCoinValue, 2),
1986
SET_INT(oIntangibleTimer, 0),
1987
BEGIN_LOOP(),
1988
CALL_NATIVE(bhv_bowser_body_anchor_loop),
1989
END_LOOP(),
1990
};
1991
1992
const BehaviorScript bhvBowserFlameSpawn[] = {
1993
BEGIN(OBJ_LIST_DEFAULT),
1994
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
1995
SET_MODEL(MODEL_NONE),
1996
BEGIN_LOOP(),
1997
CALL_NATIVE(bhv_bowser_flame_spawn_loop),
1998
END_LOOP(),
1999
};
2000
2001
const BehaviorScript bhvTiltingBowserLavaPlatform[] = {
2002
BEGIN(OBJ_LIST_SURFACE),
2003
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2004
LOAD_COLLISION_DATA(bowser_2_seg7_collision_tilting_platform),
2005
SET_FLOAT(oDrawingDistance, 20000),
2006
SET_FLOAT(oCollisionDistance, 20000),
2007
SET_INT(oFaceAngleYaw, 0),
2008
SET_HOME(),
2009
BEGIN_LOOP(),
2010
CALL_NATIVE(cur_obj_rotate_face_angle_using_vel),
2011
CALL_NATIVE(load_object_collision_model),
2012
END_LOOP(),
2013
};
2014
2015
const BehaviorScript bhvFallingBowserPlatform[] = {
2016
BEGIN(OBJ_LIST_SURFACE),
2017
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2018
SET_FLOAT(oDrawingDistance, 20000),
2019
SET_FLOAT(oCollisionDistance, 20000),
2020
SET_HOME(),
2021
BEGIN_LOOP(),
2022
CALL_NATIVE(bhv_falling_bowser_platform_loop),
2023
CALL_NATIVE(load_object_collision_model),
2024
END_LOOP(),
2025
};
2026
2027
const BehaviorScript bhvBlueBowserFlame[] = {
2028
BEGIN(OBJ_LIST_LEVEL),
2029
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2030
SET_INTERACT_TYPE(INTERACT_FLAME),
2031
BILLBOARD(),
2032
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2033
CALL_NATIVE(bhv_blue_bowser_flame_init),
2034
BEGIN_LOOP(),
2035
CALL_NATIVE(bhv_blue_bowser_flame_loop),
2036
ANIMATE_TEXTURE(oAnimState, 2),
2037
END_LOOP(),
2038
};
2039
2040
const BehaviorScript bhvFlameFloatingLanding[] = {
2041
BEGIN(OBJ_LIST_LEVEL),
2042
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2043
SET_INTERACT_TYPE(INTERACT_FLAME),
2044
BILLBOARD(),
2045
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2046
CALL_NATIVE(bhv_flame_floating_landing_init),
2047
BEGIN_LOOP(),
2048
CALL_NATIVE(bhv_flame_floating_landing_loop),
2049
ANIMATE_TEXTURE(oAnimState, 2),
2050
END_LOOP(),
2051
};
2052
2053
const BehaviorScript bhvBlueFlamesGroup[] = {
2054
BEGIN(OBJ_LIST_LEVEL),
2055
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2056
SET_INTERACT_TYPE(INTERACT_FLAME),
2057
BILLBOARD(),
2058
BEGIN_LOOP(),
2059
CALL_NATIVE(bhv_blue_flames_group_loop),
2060
END_LOOP(),
2061
};
2062
2063
const BehaviorScript bhvFlameBouncing[] = {
2064
BEGIN(OBJ_LIST_LEVEL),
2065
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2066
SET_INTERACT_TYPE(INTERACT_FLAME),
2067
BILLBOARD(),
2068
CALL_NATIVE(bhv_flame_bouncing_init),
2069
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2070
BEGIN_LOOP(),
2071
CALL_NATIVE(bhv_flame_bouncing_loop),
2072
ANIMATE_TEXTURE(oAnimState, 2),
2073
END_LOOP(),
2074
};
2075
2076
const BehaviorScript bhvFlameMovingForwardGrowing[] = {
2077
BEGIN(OBJ_LIST_LEVEL),
2078
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2079
SET_INTERACT_TYPE(INTERACT_FLAME),
2080
BILLBOARD(),
2081
CALL_NATIVE(bhv_flame_moving_forward_growing_init),
2082
BEGIN_LOOP(),
2083
CALL_NATIVE(bhv_flame_moving_forward_growing_loop),
2084
ANIMATE_TEXTURE(oAnimState, 2),
2085
END_LOOP(),
2086
};
2087
2088
const BehaviorScript bhvFlameBowser[] = {
2089
BEGIN(OBJ_LIST_LEVEL),
2090
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2091
SET_INTERACT_TYPE(INTERACT_FLAME),
2092
BILLBOARD(),
2093
CALL_NATIVE(bhv_flame_bowser_init),
2094
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2095
BEGIN_LOOP(),
2096
CALL_NATIVE(bhv_flame_bowser_loop),
2097
ANIMATE_TEXTURE(oAnimState, 2),
2098
END_LOOP(),
2099
};
2100
2101
const BehaviorScript bhvFlameLargeBurningOut[] = {
2102
BEGIN(OBJ_LIST_LEVEL),
2103
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2104
SET_INTERACT_TYPE(INTERACT_FLAME),
2105
BILLBOARD(),
2106
CALL_NATIVE(bhv_flame_large_burning_out_init),
2107
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2108
BEGIN_LOOP(),
2109
CALL_NATIVE(bhv_flame_bowser_loop),
2110
ANIMATE_TEXTURE(oAnimState, 2),
2111
END_LOOP(),
2112
};
2113
2114
const BehaviorScript bhvBlueFish[] = {
2115
BEGIN(OBJ_LIST_DEFAULT),
2116
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2117
SET_HOME(),
2118
LOAD_ANIMATIONS(oAnimations, blue_fish_seg3_anims_0301C2B0),
2119
ANIMATE(0),
2120
BEGIN_LOOP(),
2121
CALL_NATIVE(bhv_blue_fish_movement_loop),
2122
END_LOOP(),
2123
};
2124
2125
const BehaviorScript bhvTankFishGroup[] = {
2126
BEGIN(OBJ_LIST_DEFAULT),
2127
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2128
SET_HOME(),
2129
BEGIN_LOOP(),
2130
CALL_NATIVE(bhv_tank_fish_group_loop),
2131
END_LOOP(),
2132
};
2133
2134
const BehaviorScript bhvCheckerboardElevatorGroup[] = {
2135
BEGIN(OBJ_LIST_SPAWNER),
2136
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2137
CALL_NATIVE(bhv_checkerboard_elevator_group_init),
2138
DELAY(1),
2139
DEACTIVATE(),
2140
};
2141
2142
const BehaviorScript bhvCheckerboardPlatformSub[] = {
2143
BEGIN(OBJ_LIST_SURFACE),
2144
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2145
LOAD_COLLISION_DATA(checkerboard_platform_seg8_collision_0800D710),
2146
CALL_NATIVE(bhv_checkerboard_platform_init),
2147
SET_HOME(),
2148
BEGIN_LOOP(),
2149
CALL_NATIVE(bhv_checkerboard_platform_loop),
2150
END_LOOP(),
2151
};
2152
2153
const BehaviorScript bhvBowserKeyUnlockDoor[] = {
2154
BEGIN(OBJ_LIST_DEFAULT),
2155
LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list),
2156
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2157
BEGIN_LOOP(),
2158
CALL_NATIVE(bhv_bowser_key_unlock_door_loop),
2159
END_LOOP(),
2160
};
2161
2162
const BehaviorScript bhvBowserKeyCourseExit[] = {
2163
BEGIN(OBJ_LIST_DEFAULT),
2164
LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list),
2165
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2166
BEGIN_LOOP(),
2167
CALL_NATIVE(bhv_bowser_key_course_exit_loop),
2168
END_LOOP(),
2169
};
2170
2171
const BehaviorScript bhvInvisibleObjectsUnderBridge[] = {
2172
BEGIN(OBJ_LIST_DEFAULT),
2173
CALL_NATIVE(bhv_invisible_objects_under_bridge_init),
2174
BREAK(),
2175
};
2176
2177
const BehaviorScript bhvWaterLevelPillar[] = {
2178
BEGIN(OBJ_LIST_SURFACE),
2179
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2180
LOAD_COLLISION_DATA(inside_castle_seg7_collision_water_level_pillar),
2181
CALL_NATIVE(bhv_water_level_pillar_init),
2182
BEGIN_LOOP(),
2183
CALL_NATIVE(bhv_water_level_pillar_loop),
2184
CALL_NATIVE(load_object_collision_model),
2185
END_LOOP(),
2186
};
2187
2188
const BehaviorScript bhvDddWarp[] = {
2189
BEGIN(OBJ_LIST_SURFACE),
2190
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2191
SET_FLOAT(oCollisionDistance, 30000),
2192
BEGIN_LOOP(),
2193
CALL_NATIVE(bhv_ddd_warp_loop),
2194
CALL_NATIVE(load_object_collision_model),
2195
END_LOOP(),
2196
};
2197
2198
const BehaviorScript bhvMoatGrills[] = {
2199
BEGIN(OBJ_LIST_SURFACE),
2200
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2201
LOAD_COLLISION_DATA(castle_grounds_seg7_collision_moat_grills),
2202
SET_FLOAT(oCollisionDistance, 30000),
2203
BEGIN_LOOP(),
2204
CALL_NATIVE(bhv_moat_grills_loop),
2205
END_LOOP(),
2206
};
2207
2208
const BehaviorScript bhvClockMinuteHand[] = {
2209
BEGIN(OBJ_LIST_DEFAULT),
2210
SET_INT(oAngleVelRoll, -0x180),
2211
GOTO(bhvClockHourHand + 1 + 1),
2212
};
2213
2214
const BehaviorScript bhvClockHourHand[] = {
2215
BEGIN(OBJ_LIST_DEFAULT),
2216
SET_INT(oAngleVelRoll, -0x20),
2217
// Clock hand - common:
2218
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2219
CALL_NATIVE(bhv_init_room),
2220
BEGIN_LOOP(),
2221
CALL_NATIVE(bhv_rotating_clock_arm_loop),
2222
END_LOOP(),
2223
};
2224
2225
const BehaviorScript bhvMacroUkiki[] = {
2226
BEGIN(OBJ_LIST_GENACTOR),
2227
// Ukiki - common:
2228
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2229
SET_INT(oInteractType, INTERACT_GRABBABLE),
2230
SET_INT(oInteractionSubtype, INT_SUBTYPE_HOLDABLE_NPC),
2231
SET_HITBOX(/*Radius*/ 40, /*Height*/ 40),
2232
SET_INT(oIntangibleTimer, 0),
2233
DROP_TO_FLOOR(),
2234
LOAD_ANIMATIONS(oAnimations, ukiki_seg5_anims_05015784),
2235
ANIMATE(0),
2236
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2237
SET_HOME(),
2238
CALL_NATIVE(bhv_ukiki_init),
2239
BEGIN_LOOP(),
2240
CALL_NATIVE(bhv_ukiki_loop),
2241
END_LOOP(),
2242
};
2243
2244
const BehaviorScript bhvStub1D0C[] = {
2245
BEGIN(OBJ_LIST_DEFAULT),
2246
DEACTIVATE(),
2247
};
2248
2249
const BehaviorScript bhvLllRotatingHexagonalPlatform[] = {
2250
BEGIN(OBJ_LIST_SURFACE),
2251
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2252
LOAD_COLLISION_DATA(lll_seg7_collision_hexagonal_platform),
2253
SET_HOME(),
2254
BEGIN_LOOP(),
2255
SET_INT(oAngleVelYaw, 0x100),
2256
ADD_INT(oMoveAngleYaw, 0x100),
2257
CALL_NATIVE(load_object_collision_model),
2258
END_LOOP(),
2259
};
2260
2261
const BehaviorScript bhvLllSinkingRockBlock[] = {
2262
BEGIN(OBJ_LIST_SURFACE),
2263
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2264
LOAD_COLLISION_DATA(lll_seg7_collision_floating_block),
2265
ADD_FLOAT(oPosY, -50),
2266
SET_HOME(),
2267
BEGIN_LOOP(),
2268
CALL_NATIVE(bhv_lll_sinking_rock_block_loop),
2269
CALL_NATIVE(load_object_collision_model),
2270
END_LOOP(),
2271
};
2272
2273
const BehaviorScript bhvStub1D70[] = {
2274
BEGIN(OBJ_LIST_DEFAULT),
2275
BREAK(),
2276
};
2277
2278
const BehaviorScript bhvLllMovingOctagonalMeshPlatform[] = {
2279
BEGIN(OBJ_LIST_SURFACE),
2280
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2281
ADD_FLOAT(oPosY, -50),
2282
LOAD_COLLISION_DATA(lll_seg7_collision_octagonal_moving_platform),
2283
BEGIN_LOOP(),
2284
CALL_NATIVE(bhv_lll_moving_octagonal_mesh_platform_loop),
2285
CALL_NATIVE(load_object_collision_model),
2286
END_LOOP(),
2287
};
2288
2289
const BehaviorScript bhvSnowBall[] = {
2290
BREAK(),
2291
};
2292
2293
const BehaviorScript bhvLllRotatingBlockWithFireBars[] = {
2294
BEGIN(OBJ_LIST_SURFACE),
2295
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2296
LOAD_COLLISION_DATA(lll_seg7_collision_rotating_fire_bars),
2297
SET_FLOAT(oCollisionDistance, 4000),
2298
BEGIN_LOOP(),
2299
CALL_NATIVE(bhv_lll_rotating_block_fire_bars_loop),
2300
END_LOOP(),
2301
};
2302
2303
const BehaviorScript bhvLllRotatingHexFlame[] = {
2304
BEGIN(OBJ_LIST_LEVEL),
2305
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2306
SET_INTERACT_TYPE(INTERACT_FLAME),
2307
SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 100, /*Downwards offset*/ 50),
2308
SET_INT(oIntangibleTimer, 0),
2309
BILLBOARD(),
2310
BEGIN_LOOP(),
2311
CALL_NATIVE(bhv_lll_rotating_hex_flame_loop),
2312
ADD_INT(oAnimState, 1),
2313
END_LOOP(),
2314
};
2315
2316
const BehaviorScript bhvLllWoodPiece[] = {
2317
BEGIN(OBJ_LIST_SURFACE),
2318
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2319
LOAD_COLLISION_DATA(lll_seg7_collision_wood_piece),
2320
SET_HOME(),
2321
BEGIN_LOOP(),
2322
CALL_NATIVE(bhv_lll_wood_piece_loop),
2323
CALL_NATIVE(load_object_collision_model),
2324
END_LOOP(),
2325
};
2326
2327
const BehaviorScript bhvLllFloatingWoodBridge[] = {
2328
BEGIN(OBJ_LIST_DEFAULT),
2329
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2330
SET_MODEL(MODEL_NONE),
2331
BEGIN_LOOP(),
2332
CALL_NATIVE(bhv_lll_floating_wood_bridge_loop),
2333
END_LOOP(),
2334
};
2335
2336
const BehaviorScript bhvVolcanoFlames[] = {
2337
BEGIN(OBJ_LIST_UNIMPORTANT),
2338
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2339
BILLBOARD(),
2340
BEGIN_LOOP(),
2341
ADD_INT(oAnimState, 1),
2342
CALL_NATIVE(bhv_volcano_flames_loop),
2343
END_LOOP(),
2344
};
2345
2346
const BehaviorScript bhvLllRotatingHexagonalRing[] = {
2347
BEGIN(OBJ_LIST_SURFACE),
2348
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2349
LOAD_COLLISION_DATA(lll_seg7_collision_rotating_platform),
2350
BEGIN_LOOP(),
2351
CALL_NATIVE(bhv_lll_rotating_hexagonal_ring_loop),
2352
CALL_NATIVE(load_object_collision_model),
2353
END_LOOP(),
2354
};
2355
2356
const BehaviorScript bhvLllSinkingRectangularPlatform[] = {
2357
BEGIN(OBJ_LIST_SURFACE),
2358
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2359
LOAD_COLLISION_DATA(lll_seg7_collision_slow_tilting_platform),
2360
SET_FLOAT(oCollisionDistance, 2000),
2361
SET_HOME(),
2362
BEGIN_LOOP(),
2363
CALL_NATIVE(bhv_lll_sinking_rectangular_platform_loop),
2364
CALL_NATIVE(load_object_collision_model),
2365
END_LOOP(),
2366
};
2367
2368
const BehaviorScript bhvLllSinkingSquarePlatforms[] = {
2369
BEGIN(OBJ_LIST_SURFACE),
2370
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2371
LOAD_COLLISION_DATA(lll_seg7_collision_sinking_pyramids),
2372
ADD_FLOAT(oPosY, 5),
2373
SET_FLOAT(oCollisionDistance, 2000),
2374
SET_HOME(),
2375
BEGIN_LOOP(),
2376
CALL_NATIVE(bhv_lll_sinking_square_platforms_loop),
2377
CALL_NATIVE(load_object_collision_model),
2378
END_LOOP(),
2379
};
2380
2381
const BehaviorScript bhvLllTiltingInvertedPyramid[] = {
2382
BEGIN(OBJ_LIST_SURFACE),
2383
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2384
LOAD_COLLISION_DATA(lll_seg7_collision_inverted_pyramid),
2385
ADD_FLOAT(oPosY, 5),
2386
SET_HOME(),
2387
CALL_NATIVE(bhv_platform_normals_init),
2388
BEGIN_LOOP(),
2389
CALL_NATIVE(bhv_tilting_inverted_pyramid_loop),
2390
CALL_NATIVE(load_object_collision_model),
2391
END_LOOP(),
2392
};
2393
2394
const BehaviorScript bhvUnused1F30[] = {
2395
BEGIN(OBJ_LIST_DEFAULT),
2396
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2397
BREAK(),
2398
};
2399
2400
const BehaviorScript bhvKoopaShell[] = {
2401
BEGIN(OBJ_LIST_LEVEL),
2402
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2403
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2404
BEGIN_LOOP(),
2405
CALL_NATIVE(bhv_koopa_shell_loop),
2406
END_LOOP(),
2407
};
2408
2409
const BehaviorScript bhvKoopaShellFlame[] = {
2410
BEGIN(OBJ_LIST_UNIMPORTANT),
2411
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2412
SET_INTERACT_TYPE(INTERACT_FLAME),
2413
BILLBOARD(),
2414
BEGIN_LOOP(),
2415
CALL_NATIVE(bhv_koopa_shell_flame_loop),
2416
ANIMATE_TEXTURE(oAnimState, 2),
2417
END_LOOP(),
2418
};
2419
2420
const BehaviorScript bhvToxBox[] = {
2421
BEGIN(OBJ_LIST_SURFACE),
2422
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2423
LOAD_COLLISION_DATA(ssl_seg7_collision_tox_box),
2424
ADD_FLOAT(oPosY, 256),
2425
SET_FLOAT(oDrawingDistance, 8000),
2426
SET_HOME(),
2427
BEGIN_LOOP(),
2428
CALL_NATIVE(bhv_tox_box_loop),
2429
END_LOOP(),
2430
};
2431
2432
const BehaviorScript bhvPiranhaPlant[] = {
2433
BEGIN(OBJ_LIST_GENACTOR),
2434
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2435
LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C),
2436
ANIMATE(0),
2437
SET_INTERACT_TYPE(INTERACT_DAMAGE),
2438
SET_HITBOX(/*Radius*/ 100, /*Height*/ 200),
2439
SET_HURTBOX(/*Radius*/ 50, /*Height*/ 200),
2440
SET_INT(oIntangibleTimer, 0),
2441
SET_INT(oDamageOrCoinValue, 3),
2442
SET_INT(oNumLootCoins, 5),
2443
SPAWN_CHILD(/*Model*/ MODEL_BUBBLE, /*Behavior*/ bhvPiranhaPlantBubble),
2444
SET_FLOAT(oDrawingDistance, 2000),
2445
SET_HOME(),
2446
BEGIN_LOOP(),
2447
CALL_NATIVE(bhv_piranha_plant_loop),
2448
END_LOOP(),
2449
};
2450
2451
const BehaviorScript bhvLllHexagonalMesh[] = {
2452
BEGIN(OBJ_LIST_SURFACE),
2453
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2454
LOAD_COLLISION_DATA(lll_hexagonal_mesh_seg3_collision_0301CECC),
2455
BEGIN_LOOP(),
2456
CALL_NATIVE(load_object_collision_model),
2457
END_LOOP(),
2458
};
2459
2460
const BehaviorScript bhvLllBowserPuzzlePiece[] = {
2461
BEGIN(OBJ_LIST_SURFACE),
2462
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2463
LOAD_COLLISION_DATA(lll_seg7_collision_puzzle_piece),
2464
SET_HOME(),
2465
SET_FLOAT(oCollisionDistance, 3000),
2466
BEGIN_LOOP(),
2467
CALL_NATIVE(bhv_lll_bowser_puzzle_piece_loop),
2468
CALL_NATIVE(load_object_collision_model),
2469
END_LOOP(),
2470
};
2471
2472
const BehaviorScript bhvLllBowserPuzzle[] = {
2473
BEGIN(OBJ_LIST_SPAWNER),
2474
DISABLE_RENDERING(),
2475
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2476
ADD_FLOAT(oPosZ, -50),
2477
BEGIN_LOOP(),
2478
CALL_NATIVE(bhv_lll_bowser_puzzle_loop),
2479
END_LOOP(),
2480
};
2481
2482
const BehaviorScript bhvTuxiesMother[] = {
2483
BEGIN(OBJ_LIST_GENACTOR),
2484
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2485
LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
2486
ANIMATE(3),
2487
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
2488
SET_HOME(),
2489
SET_INTERACT_TYPE(INTERACT_TEXT),
2490
SET_HITBOX(/*Radius*/ 200, /*Height*/ 300),
2491
SET_INT(oIntangibleTimer, 0),
2492
BEGIN_LOOP(),
2493
CALL_NATIVE(bhv_tuxies_mother_loop),
2494
END_LOOP(),
2495
};
2496
2497
const BehaviorScript bhvPenguinBaby[] = {
2498
BEGIN(OBJ_LIST_GENACTOR),
2499
BREAK(),
2500
};
2501
2502
const BehaviorScript bhvUnused20E0[] = {
2503
BEGIN(OBJ_LIST_GENACTOR),
2504
BREAK(),
2505
};
2506
2507
const BehaviorScript bhvSmallPenguin[] = {
2508
BEGIN(OBJ_LIST_GENACTOR),
2509
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2510
DROP_TO_FLOOR(),
2511
LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
2512
ANIMATE(0),
2513
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2514
SET_INT(oInteractType, INTERACT_GRABBABLE),
2515
SET_INT(oInteractionSubtype, INT_SUBTYPE_HOLDABLE_NPC),
2516
SET_INT(oIntangibleTimer, 0),
2517
SET_HITBOX(/*Radius*/ 40, /*Height*/ 40),
2518
SET_HOME(),
2519
BEGIN_LOOP(),
2520
CALL_NATIVE(bhv_small_penguin_loop),
2521
END_LOOP(),
2522
};
2523
2524
const BehaviorScript bhvManyBlueFishSpawner[] = {
2525
BEGIN(OBJ_LIST_DEFAULT),
2526
SET_INT(oBehParams2ndByte, 0),
2527
GOTO(bhvFishSpawner + 1),
2528
};
2529
2530
const BehaviorScript bhvFewBlueFishSpawner[] = {
2531
BEGIN(OBJ_LIST_DEFAULT),
2532
SET_INT(oBehParams2ndByte, 1),
2533
GOTO(bhvFishSpawner + 1),
2534
};
2535
2536
const BehaviorScript bhvFishSpawner[] = {
2537
BEGIN(OBJ_LIST_DEFAULT),
2538
// Fish Spawner - common:
2539
DISABLE_RENDERING(),
2540
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2541
BEGIN_LOOP(),
2542
CALL_NATIVE(bhv_fish_spawner_loop),
2543
END_LOOP(),
2544
};
2545
2546
const BehaviorScript bhvFish[] = {
2547
BEGIN(OBJ_LIST_DEFAULT),
2548
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2549
SET_HOME(),
2550
BEGIN_LOOP(),
2551
CALL_NATIVE(bhv_fish_loop),
2552
END_LOOP(),
2553
};
2554
2555
const BehaviorScript bhvWdwExpressElevator[] = {
2556
BEGIN(OBJ_LIST_SURFACE),
2557
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2558
LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform),
2559
SET_HOME(),
2560
BEGIN_LOOP(),
2561
CALL_NATIVE(bhv_wdw_express_elevator_loop),
2562
CALL_NATIVE(load_object_collision_model),
2563
END_LOOP(),
2564
};
2565
2566
const BehaviorScript bhvWdwExpressElevatorPlatform[] = {
2567
BEGIN(OBJ_LIST_SURFACE),
2568
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2569
LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform),
2570
SET_HOME(),
2571
BEGIN_LOOP(),
2572
CALL_NATIVE(load_object_collision_model),
2573
END_LOOP(),
2574
};
2575
2576
const BehaviorScript bhvChirpChirp[] = {
2577
BEGIN(OBJ_LIST_DEFAULT),
2578
SET_INT(oBirdChirpChirpUnkF4, 1),
2579
GOTO(bhvChirpChirpUnused),
2580
};
2581
2582
const BehaviorScript bhvChirpChirpUnused[] = {
2583
DISABLE_RENDERING(),
2584
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2585
BEGIN_LOOP(),
2586
CALL_NATIVE(bhv_bub_spawner_loop),
2587
END_LOOP(),
2588
};
2589
2590
const BehaviorScript bhvBub[] = {
2591
BEGIN(OBJ_LIST_GENACTOR),
2592
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2593
LOAD_ANIMATIONS(oAnimations, bub_seg6_anims_06012354),
2594
ANIMATE(0),
2595
SET_HITBOX_WITH_OFFSET(/*Radius*/ 20, /*Height*/ 10, /*Downwards offset*/ 10),
2596
SET_INTERACT_TYPE(INTERACT_DAMAGE),
2597
SET_INT(oDamageOrCoinValue, 1),
2598
SET_HOME(),
2599
SET_INT(oIntangibleTimer, 0),
2600
BEGIN_LOOP(),
2601
CALL_NATIVE(bhv_bub_loop),
2602
END_LOOP(),
2603
};
2604
2605
const BehaviorScript bhvExclamationBox[] = {
2606
BEGIN(OBJ_LIST_SURFACE),
2607
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2608
LOAD_COLLISION_DATA(exclamation_box_outline_seg8_collision_08025F78),
2609
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2610
SET_FLOAT(oCollisionDistance, 300),
2611
SET_HOME(),
2612
BEGIN_LOOP(),
2613
CALL_NATIVE(bhv_exclamation_box_loop),
2614
END_LOOP(),
2615
};
2616
2617
const BehaviorScript bhvRotatingExclamationMark[] = {
2618
BEGIN(OBJ_LIST_DEFAULT),
2619
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2620
SCALE(/*Unused*/ 0, /*Field*/ 200),
2621
BEGIN_LOOP(),
2622
CALL_NATIVE(bhv_rotating_exclamation_box_loop),
2623
ADD_INT(oMoveAngleYaw, 0x800),
2624
END_LOOP(),
2625
};
2626
2627
const BehaviorScript bhvSoundSpawner[] = {
2628
BEGIN(OBJ_LIST_UNIMPORTANT),
2629
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2630
DELAY(3),
2631
CALL_NATIVE(bhv_sound_spawner_init),
2632
DELAY(30),
2633
DEACTIVATE(),
2634
};
2635
2636
const BehaviorScript bhvRockSolid[] = {
2637
BEGIN(OBJ_LIST_SURFACE),
2638
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2639
LOAD_COLLISION_DATA(jrb_seg7_collision_rock_solid),
2640
BEGIN_LOOP(),
2641
CALL_NATIVE(load_object_collision_model),
2642
END_LOOP(),
2643
};
2644
2645
const BehaviorScript bhvBowserSubDoor[] = {
2646
BEGIN(OBJ_LIST_SURFACE),
2647
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2648
LOAD_COLLISION_DATA(ddd_seg7_collision_bowser_sub_door),
2649
SET_FLOAT(oDrawingDistance, 20000),
2650
SET_FLOAT(oCollisionDistance, 20000),
2651
BEGIN_LOOP(),
2652
CALL_NATIVE(bhv_bowsers_sub_loop),
2653
CALL_NATIVE(load_object_collision_model),
2654
END_LOOP(),
2655
};
2656
2657
const BehaviorScript bhvBowsersSub[] = {
2658
BEGIN(OBJ_LIST_SURFACE),
2659
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2660
SET_FLOAT(oDrawingDistance, 20000),
2661
SET_FLOAT(oCollisionDistance, 20000),
2662
LOAD_COLLISION_DATA(ddd_seg7_collision_submarine),
2663
BEGIN_LOOP(),
2664
CALL_NATIVE(bhv_bowsers_sub_loop),
2665
CALL_NATIVE(load_object_collision_model),
2666
END_LOOP(),
2667
};
2668
2669
const BehaviorScript bhvSushiShark[] = {
2670
BEGIN(OBJ_LIST_GENACTOR),
2671
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2672
LOAD_ANIMATIONS(oAnimations, sushi_seg5_anims_0500AE54),
2673
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvSushiSharkCollisionChild),
2674
SET_HITBOX_WITH_OFFSET(/*Radius*/ 100, /*Height*/ 50, /*Downwards offset*/ 50),
2675
SET_INTERACT_TYPE(INTERACT_DAMAGE),
2676
SET_INT(oDamageOrCoinValue, 3),
2677
SET_HOME(),
2678
ANIMATE(0),
2679
SET_INT(oIntangibleTimer, 0),
2680
BEGIN_LOOP(),
2681
CALL_NATIVE(bhv_sushi_shark_loop),
2682
END_LOOP(),
2683
};
2684
2685
const BehaviorScript bhvSushiSharkCollisionChild[] = {
2686
BEGIN(OBJ_LIST_GENACTOR),
2687
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2688
DISABLE_RENDERING(),
2689
BEGIN_LOOP(),
2690
CALL_NATIVE(bhv_sushi_shark_collision_loop),
2691
END_LOOP(),
2692
};
2693
2694
const BehaviorScript bhvJrbSlidingBox[] = {
2695
BEGIN(OBJ_LIST_SURFACE),
2696
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2697
LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box),
2698
SET_HOME(),
2699
BEGIN_LOOP(),
2700
CALL_NATIVE(bhv_jrb_sliding_box_loop),
2701
CALL_NATIVE(load_object_collision_model),
2702
END_LOOP(),
2703
};
2704
2705
const BehaviorScript bhvShipPart3[] = {
2706
BEGIN(OBJ_LIST_DEFAULT),
2707
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2708
SET_HOME(),
2709
BEGIN_LOOP(),
2710
CALL_NATIVE(bhv_ship_part_3_loop),
2711
END_LOOP(),
2712
};
2713
2714
const BehaviorScript bhvInSunkenShip3[] = {
2715
BEGIN(OBJ_LIST_SURFACE),
2716
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2717
LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_3),
2718
SET_HOME(),
2719
SET_FLOAT(oCollisionDistance, 4000),
2720
BEGIN_LOOP(),
2721
CALL_NATIVE(bhv_ship_part_3_loop),
2722
CALL_NATIVE(load_object_collision_model),
2723
END_LOOP(),
2724
};
2725
2726
const BehaviorScript bhvSunkenShipPart[] = {
2727
BEGIN(OBJ_LIST_DEFAULT),
2728
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2729
SCALE(/*Unused*/ 0, /*Field*/ 50),
2730
SET_HOME(),
2731
BEGIN_LOOP(),
2732
CALL_NATIVE(bhv_sunken_ship_part_loop),
2733
END_LOOP(),
2734
};
2735
2736
const BehaviorScript bhvSunkenShipSetRotation[] = {
2737
SET_INT(oFaceAnglePitch, 0xE958),
2738
SET_INT(oFaceAngleYaw, 0xEE6C),
2739
SET_INT(oFaceAngleRoll, 0x0C80),
2740
RETURN(),
2741
};
2742
2743
const BehaviorScript bhvSunkenShipPart2[] = {
2744
BEGIN(OBJ_LIST_DEFAULT),
2745
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2746
SCALE(/*Unused*/ 0, /*Field*/ 100),
2747
SET_FLOAT(oDrawingDistance, 6000),
2748
SET_HOME(),
2749
CALL(bhvSunkenShipSetRotation),
2750
BREAK(),
2751
};
2752
2753
const BehaviorScript bhvInSunkenShip[] = {
2754
BEGIN(OBJ_LIST_SURFACE),
2755
LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship),
2756
GOTO(bhvInSunkenShip2 + 1 + 2),
2757
};
2758
2759
const BehaviorScript bhvInSunkenShip2[] = {
2760
BEGIN(OBJ_LIST_SURFACE),
2761
LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_2),
2762
// Sunken ship - common:
2763
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2764
SET_FLOAT(oCollisionDistance, 4000),
2765
CALL(bhvSunkenShipSetRotation),
2766
BEGIN_LOOP(),
2767
CALL_NATIVE(load_object_collision_model),
2768
END_LOOP(),
2769
};
2770
2771
const BehaviorScript bhvMistParticleSpawner[] = {
2772
BEGIN(OBJ_LIST_DEFAULT),
2773
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_DUST),
2774
DISABLE_RENDERING(),
2775
SPAWN_CHILD(/*Model*/ MODEL_MIST, /*Behavior*/ bhvWhitePuff1),
2776
SPAWN_CHILD(/*Model*/ MODEL_SMOKE, /*Behavior*/ bhvWhitePuff2),
2777
DELAY(1),
2778
DEACTIVATE(),
2779
};
2780
2781
const BehaviorScript bhvWhitePuff1[] = {
2782
BEGIN(OBJ_LIST_DEFAULT),
2783
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_DUST),
2784
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2785
BILLBOARD(),
2786
BEGIN_LOOP(),
2787
CALL_NATIVE(bhv_white_puff_1_loop),
2788
END_LOOP(),
2789
};
2790
2791
const BehaviorScript bhvWhitePuff2[] = {
2792
BEGIN(OBJ_LIST_UNIMPORTANT),
2793
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2794
BILLBOARD(),
2795
SET_INT(oAnimState, -1),
2796
BEGIN_REPEAT(7),
2797
CALL_NATIVE(bhv_white_puff_2_loop),
2798
ADD_INT(oAnimState, 1),
2799
END_REPEAT(),
2800
DEACTIVATE(),
2801
};
2802
2803
const BehaviorScript bhvWhitePuffSmoke2[] = {
2804
BEGIN(OBJ_LIST_UNIMPORTANT),
2805
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2806
BILLBOARD(),
2807
SET_INT(oAnimState, -1),
2808
BEGIN_REPEAT(7),
2809
CALL_NATIVE(bhv_white_puff_2_loop),
2810
CALL_NATIVE(cur_obj_move_using_fvel_and_gravity),
2811
ADD_INT(oAnimState, 1),
2812
END_REPEAT(),
2813
DEACTIVATE(),
2814
};
2815
2816
const BehaviorScript bhvPurpleSwitchHiddenBoxes[] = {
2817
BEGIN(OBJ_LIST_SURFACE),
2818
SET_INT(oBehParams2ndByte, 2),
2819
GOTO(bhvFloorSwitchHardcodedModel + 1),
2820
};
2821
2822
const BehaviorScript bhvBlueCoinSwitch[] = {
2823
BEGIN(OBJ_LIST_SURFACE),
2824
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2825
LOAD_COLLISION_DATA(blue_coin_switch_seg8_collision_08000E98),
2826
BEGIN_LOOP(),
2827
CALL_NATIVE(bhv_blue_coin_switch_loop),
2828
END_LOOP(),
2829
};
2830
2831
const BehaviorScript bhvHiddenBlueCoin[] = {
2832
BEGIN(OBJ_LIST_LEVEL),
2833
SET_INT(oInteractType, INTERACT_COIN),
2834
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2835
BILLBOARD(),
2836
SET_HITBOX(/*Radius*/ 100, /*Height*/ 64),
2837
SET_INT(oDamageOrCoinValue, 5),
2838
SET_INT(oIntangibleTimer, 0),
2839
SET_INT(oAnimState, -1),
2840
BEGIN_LOOP(),
2841
CALL_NATIVE(bhv_hidden_blue_coin_loop),
2842
ADD_INT(oAnimState, 1),
2843
END_LOOP(),
2844
};
2845
2846
const BehaviorScript bhvOpenableCageDoor[] = {
2847
BEGIN(OBJ_LIST_SURFACE),
2848
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2849
BEGIN_LOOP(),
2850
CALL_NATIVE(bhv_openable_cage_door_loop),
2851
CALL_NATIVE(load_object_collision_model),
2852
END_LOOP(),
2853
};
2854
2855
const BehaviorScript bhvOpenableGrill[] = {
2856
BEGIN(OBJ_LIST_DEFAULT),
2857
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2858
BEGIN_LOOP(),
2859
CALL_NATIVE(bhv_openable_grill_loop),
2860
END_LOOP(),
2861
};
2862
2863
const BehaviorScript bhvWaterLevelDiamond[] = {
2864
BEGIN(OBJ_LIST_SURFACE),
2865
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2866
SET_HITBOX(/*Radius*/ 70, /*Height*/ 30),
2867
SET_FLOAT(oCollisionDistance, 200),
2868
SET_INT(oIntangibleTimer, 0),
2869
BEGIN_LOOP(),
2870
CALL_NATIVE(bhv_water_level_diamond_loop),
2871
END_LOOP(),
2872
};
2873
2874
const BehaviorScript bhvInitializeChangingWaterLevel[] = {
2875
BEGIN(OBJ_LIST_DEFAULT),
2876
BEGIN_LOOP(),
2877
CALL_NATIVE(bhv_init_changing_water_level_loop),
2878
END_LOOP(),
2879
};
2880
2881
const BehaviorScript bhvTweesterSandParticle[] = {
2882
BEGIN(OBJ_LIST_UNIMPORTANT),
2883
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2884
BILLBOARD(),
2885
BEGIN_LOOP(),
2886
CALL_NATIVE(bhv_tweester_sand_particle_loop),
2887
END_LOOP(),
2888
};
2889
2890
const BehaviorScript bhvTweester[] = {
2891
BEGIN(OBJ_LIST_POLELIKE),
2892
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2893
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2894
DROP_TO_FLOOR(),
2895
SET_HOME(),
2896
BEGIN_LOOP(),
2897
CALL_NATIVE(bhv_tweester_loop),
2898
END_LOOP(),
2899
};
2900
2901
const BehaviorScript bhvMerryGoRoundBooManager[] = {
2902
BEGIN(OBJ_LIST_DEFAULT),
2903
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2904
BEGIN_LOOP(),
2905
CALL_NATIVE(bhv_merry_go_round_boo_manager_loop),
2906
END_LOOP(),
2907
};
2908
2909
const BehaviorScript bhvAnimatedTexture[] = {
2910
BEGIN(OBJ_LIST_GENACTOR),
2911
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
2912
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2913
BILLBOARD(),
2914
BEGIN_LOOP(),
2915
CALL_NATIVE(bhv_animated_texture_loop),
2916
ADD_INT(oAnimState, 1),
2917
ANIMATE_TEXTURE(oAnimState, 2),
2918
END_LOOP(),
2919
};
2920
2921
const BehaviorScript bhvBooInCastle[] = {
2922
BEGIN(OBJ_LIST_DEFAULT),
2923
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2924
SET_HOME(),
2925
SET_FLOAT(oGraphYOffset, 60),
2926
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2927
CALL_NATIVE(bhv_init_room),
2928
BEGIN_LOOP(),
2929
CALL_NATIVE(bhv_boo_in_castle_loop),
2930
END_LOOP(),
2931
};
2932
2933
const BehaviorScript bhvBooWithCage[] = {
2934
BEGIN(OBJ_LIST_GENACTOR),
2935
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2936
SET_HOME(),
2937
SET_INT(oDamageOrCoinValue, 3),
2938
SET_HURTBOX(/*Radius*/ 80, /*Height*/ 120),
2939
SET_HITBOX(/*Radius*/ 180, /*Height*/ 140),
2940
SET_FLOAT(oGraphYOffset, 60),
2941
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2942
CALL_NATIVE(bhv_boo_with_cage_init),
2943
CALL_NATIVE(bhv_init_room),
2944
BEGIN_LOOP(),
2945
CALL_NATIVE(bhv_boo_with_cage_loop),
2946
END_LOOP(),
2947
};
2948
2949
const BehaviorScript bhvBalconyBigBoo[] = {
2950
BEGIN(OBJ_LIST_GENACTOR),
2951
SET_INT(oBehParams2ndByte, 2),
2952
SET_INT(oBigBooNumMinionBoosKilled, 10),
2953
GOTO(bhvGhostHuntBigBoo + 1),
2954
};
2955
2956
const BehaviorScript bhvMerryGoRoundBigBoo[] = {
2957
BEGIN(OBJ_LIST_GENACTOR),
2958
SET_INT(oBehParams2ndByte, 1),
2959
// Set number of minion boos killed to 10, which is greater than 5 so that the boo always loads without needing to kill any boos.
2960
SET_INT(oBigBooNumMinionBoosKilled, 10),
2961
GOTO(bhvGhostHuntBigBoo + 1),
2962
};
2963
2964
const BehaviorScript bhvGhostHuntBigBoo[] = {
2965
BEGIN(OBJ_LIST_GENACTOR),
2966
// Big boo - common:
2967
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
2968
SET_HOME(),
2969
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
2970
CALL_NATIVE(bhv_init_room),
2971
CALL_NATIVE(bhv_boo_init),
2972
BEGIN_LOOP(),
2973
CALL_NATIVE(bhv_big_boo_loop),
2974
END_LOOP(),
2975
};
2976
2977
const BehaviorScript bhvCourtyardBooTriplet[] = {
2978
BEGIN(OBJ_LIST_DEFAULT),
2979
DISABLE_RENDERING(),
2980
CALL_NATIVE(bhv_courtyard_boo_triplet_init),
2981
DEACTIVATE(),
2982
};
2983
2984
const BehaviorScript bhvBoo[] = {
2985
BEGIN(OBJ_LIST_GENACTOR),
2986
SET_INT(oBehParams2ndByte, 1),
2987
GOTO(bhvGhostHuntBoo + 1),
2988
};
2989
2990
const BehaviorScript bhvMerryGoRoundBoo[] = {
2991
BEGIN(OBJ_LIST_GENACTOR),
2992
SET_INT(oBehParams2ndByte, 2),
2993
GOTO(bhvGhostHuntBoo + 1),
2994
};
2995
2996
const BehaviorScript bhvGhostHuntBoo[] = {
2997
BEGIN(OBJ_LIST_GENACTOR),
2998
// Boo - common:
2999
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3000
SET_INT(oIntangibleTimer, 0),
3001
SET_HOME(),
3002
SET_INT(oDamageOrCoinValue, 2),
3003
SET_HITBOX(/*Radius*/ 140, /*Height*/ 80),
3004
SET_HURTBOX(/*Radius*/ 40, /*Height*/ 60),
3005
SET_FLOAT(oGraphYOffset, 30),
3006
CALL_NATIVE(bhv_init_room),
3007
SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvCoinInsideBoo),
3008
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
3009
CALL_NATIVE(bhv_boo_init),
3010
BEGIN_LOOP(),
3011
CALL_NATIVE(bhv_boo_loop),
3012
END_LOOP(),
3013
};
3014
3015
const BehaviorScript bhvHiddenStaircaseStep[] = {
3016
BEGIN(OBJ_LIST_SURFACE),
3017
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3018
LOAD_COLLISION_DATA(bbh_seg7_collision_staircase_step),
3019
SET_INT(oRoom, 1),
3020
SET_FLOAT(oCollisionDistance, 1000),
3021
SET_HOME(),
3022
BEGIN_LOOP(),
3023
CALL_NATIVE(load_object_collision_model),
3024
END_LOOP(),
3025
};
3026
3027
const BehaviorScript bhvBooStaircase[] = {
3028
BEGIN(OBJ_LIST_SURFACE),
3029
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3030
LOAD_COLLISION_DATA(bbh_seg7_collision_staircase_step),
3031
SET_INT(oRoom, 1),
3032
SET_FLOAT(oCollisionDistance, 1000),
3033
SET_HOME(),
3034
BEGIN_LOOP(),
3035
CALL_NATIVE(bhv_boo_staircase),
3036
CALL_NATIVE(load_object_collision_model),
3037
END_LOOP(),
3038
};
3039
3040
const BehaviorScript bhvBbhTiltingTrapPlatform[] = {
3041
BEGIN(OBJ_LIST_SURFACE),
3042
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3043
LOAD_COLLISION_DATA(bbh_seg7_collision_tilt_floor_platform),
3044
SET_HOME(),
3045
SET_INT(oRoom, 2),
3046
BEGIN_LOOP(),
3047
CALL_NATIVE(bhv_bbh_tilting_trap_platform_loop),
3048
CALL_NATIVE(load_object_collision_model),
3049
END_LOOP(),
3050
};
3051
3052
const BehaviorScript bhvHauntedBookshelf[] = {
3053
BEGIN(OBJ_LIST_SURFACE),
3054
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3055
LOAD_COLLISION_DATA(bbh_seg7_collision_haunted_bookshelf),
3056
SET_HOME(),
3057
SET_INT(oRoom, 6),
3058
BEGIN_LOOP(),
3059
CALL_NATIVE(bhv_haunted_bookshelf_loop),
3060
CALL_NATIVE(load_object_collision_model),
3061
END_LOOP(),
3062
};
3063
3064
const BehaviorScript bhvMeshElevator[] = {
3065
BEGIN(OBJ_LIST_SURFACE),
3066
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3067
LOAD_COLLISION_DATA(bbh_seg7_collision_mesh_elevator),
3068
SET_HOME(),
3069
SET_INT(oRoom, 12),
3070
SET_INT(oBehParams2ndByte, 4),
3071
CALL_NATIVE(bhv_elevator_init),
3072
BEGIN_LOOP(),
3073
CALL_NATIVE(bhv_elevator_loop),
3074
CALL_NATIVE(load_object_collision_model),
3075
END_LOOP(),
3076
};
3077
3078
const BehaviorScript bhvMerryGoRound[] = {
3079
BEGIN(OBJ_LIST_SURFACE),
3080
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3081
LOAD_COLLISION_DATA(bbh_seg7_collision_merry_go_round),
3082
SET_FLOAT(oCollisionDistance, 2000),
3083
SET_INT(oRoom, 10),
3084
BEGIN_LOOP(),
3085
CALL_NATIVE(bhv_merry_go_round_loop),
3086
CALL_NATIVE(load_object_collision_model),
3087
END_LOOP(),
3088
};
3089
3090
#ifndef VERSION_JP
3091
const BehaviorScript bhvPlaysMusicTrackWhenTouched[] = {
3092
BEGIN(OBJ_LIST_DEFAULT),
3093
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3094
BEGIN_LOOP(),
3095
CALL_NATIVE(bhv_play_music_track_when_touched_loop),
3096
END_LOOP(),
3097
};
3098
#endif
3099
3100
const BehaviorScript bhvInsideCannon[] = {
3101
BREAK(),
3102
};
3103
3104
const BehaviorScript bhvBetaBowserAnchor[] = {
3105
BEGIN(OBJ_LIST_DESTRUCTIVE),
3106
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3107
BILLBOARD(),
3108
SET_HOME(),
3109
SET_HITBOX(/*Radius*/ 100, /*Height*/ 300),
3110
SET_INT(oIntangibleTimer, 0),
3111
BEGIN_LOOP(),
3112
ADD_INT(oAnimState, 1),
3113
CALL_NATIVE(bhv_beta_bowser_anchor_loop),
3114
END_LOOP(),
3115
};
3116
3117
const BehaviorScript bhvStaticCheckeredPlatform[] = {
3118
BEGIN(OBJ_LIST_SURFACE),
3119
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3120
LOAD_COLLISION_DATA(checkerboard_platform_seg8_collision_0800D710),
3121
SET_HOME(),
3122
BEGIN_LOOP(),
3123
CALL_NATIVE(bhv_static_checkered_platform_loop),
3124
CALL_NATIVE(load_object_collision_model),
3125
END_LOOP(),
3126
};
3127
3128
const BehaviorScript bhvUnused2A10[] = {
3129
BEGIN(OBJ_LIST_DEFAULT),
3130
BILLBOARD(),
3131
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3132
BREAK(),
3133
};
3134
3135
const BehaviorScript bhvUnusedFakeStar[] = {
3136
BEGIN(OBJ_LIST_DEFAULT),
3137
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3138
BEGIN_LOOP(),
3139
ADD_INT(oFaceAnglePitch, 0x100),
3140
ADD_INT(oFaceAngleYaw, 0x100),
3141
END_LOOP(),
3142
};
3143
3144
// What is this?
3145
UNUSED static const BehaviorScript unused_1[] = {
3146
BREAK(),
3147
BREAK(),
3148
BREAK(),
3149
BREAK(),
3150
};
3151
3152
const BehaviorScript bhvStaticObject[] = {
3153
BEGIN(OBJ_LIST_DEFAULT),
3154
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3155
BREAK(),
3156
};
3157
3158
const BehaviorScript bhvUnused2A54[] = {
3159
BEGIN(OBJ_LIST_DEFAULT),
3160
BREAK(),
3161
};
3162
3163
const BehaviorScript bhvCastleFloorTrap[] = {
3164
BEGIN(OBJ_LIST_DEFAULT),
3165
DISABLE_RENDERING(),
3166
CALL_NATIVE(bhv_castle_floor_trap_init),
3167
BEGIN_LOOP(),
3168
CALL_NATIVE(bhv_castle_floor_trap_loop),
3169
END_LOOP(),
3170
};
3171
3172
const BehaviorScript bhvFloorTrapInCastle[] = {
3173
BEGIN(OBJ_LIST_SURFACE),
3174
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3175
LOAD_COLLISION_DATA(inside_castle_seg7_collision_floor_trap),
3176
BEGIN_LOOP(),
3177
CALL_NATIVE(bhv_floor_trap_in_castle_loop),
3178
CALL_NATIVE(load_object_collision_model),
3179
END_LOOP(),
3180
};
3181
3182
const BehaviorScript bhvTree[] = {
3183
BEGIN(OBJ_LIST_POLELIKE),
3184
BILLBOARD(),
3185
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3186
SET_INT(oInteractType, INTERACT_POLE),
3187
SET_HITBOX(/*Radius*/ 80, /*Height*/ 500),
3188
SET_INT(oIntangibleTimer, 0),
3189
BEGIN_LOOP(),
3190
CALL_NATIVE(bhv_pole_base_loop),
3191
END_LOOP(),
3192
};
3193
3194
const BehaviorScript bhvSparkle[] = {
3195
BEGIN(OBJ_LIST_UNIMPORTANT),
3196
BILLBOARD(),
3197
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3198
SET_INT(oAnimState, -1),
3199
BEGIN_REPEAT(9),
3200
ADD_INT(oAnimState, 1),
3201
END_REPEAT(),
3202
DEACTIVATE(),
3203
};
3204
3205
const BehaviorScript bhvSparkleSpawn[] = {
3206
BEGIN(OBJ_LIST_UNIMPORTANT),
3207
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3208
BEGIN_LOOP(),
3209
CALL_NATIVE(bhv_sparkle_spawn_loop),
3210
END_LOOP(),
3211
};
3212
3213
const BehaviorScript bhvSparkleParticleSpawner[] = {
3214
BEGIN(OBJ_LIST_DEFAULT),
3215
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_SPARKLES),
3216
BEGIN(OBJ_LIST_UNIMPORTANT),
3217
BILLBOARD(),
3218
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3219
SET_FLOAT(oGraphYOffset, 25),
3220
SET_RANDOM_FLOAT(oMarioParticleFlags, /*Minimum*/ -50, /*Range*/ 100),
3221
SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oMarioParticleFlags),
3222
SET_RANDOM_FLOAT(oMarioParticleFlags, /*Minimum*/ -50, /*Range*/ 100),
3223
SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oMarioParticleFlags),
3224
SET_RANDOM_FLOAT(oMarioParticleFlags, /*Minimum*/ -50, /*Range*/ 100),
3225
SUM_FLOAT(/*Dest*/ oPosY, /*Value 1*/ oPosY, /*Value 2*/ oMarioParticleFlags),
3226
SET_INT(oAnimState, -1),
3227
BEGIN_REPEAT(12),
3228
ADD_INT(oAnimState, 1),
3229
END_REPEAT(),
3230
DEACTIVATE(),
3231
};
3232
3233
const BehaviorScript bhvScuttlebug[] = {
3234
BEGIN(OBJ_LIST_GENACTOR),
3235
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3236
LOAD_ANIMATIONS(oAnimations, scuttlebug_seg6_anims_06015064),
3237
ANIMATE(0),
3238
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 80, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
3239
SET_HOME(),
3240
CALL_NATIVE(bhv_init_room),
3241
BEGIN_LOOP(),
3242
CALL_NATIVE(bhv_scuttlebug_loop),
3243
END_LOOP(),
3244
};
3245
3246
const BehaviorScript bhvScuttlebugSpawn[] = {
3247
BEGIN(OBJ_LIST_SPAWNER),
3248
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3249
BEGIN_LOOP(),
3250
CALL_NATIVE(bhv_scuttlebug_spawn_loop),
3251
END_LOOP(),
3252
};
3253
3254
const BehaviorScript bhvWhompKingBoss[] = {
3255
BEGIN(OBJ_LIST_SURFACE),
3256
SET_INT(oBehParams2ndByte, 1),
3257
SET_INT(oHealth, 3),
3258
GOTO(bhvSmallWhomp + 1 + 1),
3259
};
3260
3261
const BehaviorScript bhvSmallWhomp[] = {
3262
BEGIN(OBJ_LIST_SURFACE),
3263
SET_INT(oNumLootCoins, 5),
3264
// Whomp - common:
3265
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3266
LOAD_ANIMATIONS(oAnimations, whomp_seg6_anims_06020A04),
3267
LOAD_COLLISION_DATA(whomp_seg6_collision_06020A0C),
3268
ANIMATE(0),
3269
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
3270
SET_HOME(),
3271
BEGIN_LOOP(),
3272
CALL_NATIVE(bhv_whomp_loop),
3273
END_LOOP(),
3274
};
3275
3276
// The large splash Mario makes when he jumps into a pool of water.
3277
const BehaviorScript bhvWaterSplash[] = {
3278
BEGIN(OBJ_LIST_DEFAULT),
3279
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3280
BILLBOARD(),
3281
SET_INT(oAnimState, -1),
3282
BEGIN_REPEAT(3),
3283
ADD_INT(oAnimState, 1),
3284
CALL_NATIVE(bhv_water_splash_spawn_droplets),
3285
DELAY(1),
3286
CALL_NATIVE(bhv_water_splash_spawn_droplets),
3287
END_REPEAT(),
3288
BEGIN_REPEAT(5),
3289
ADD_INT(oAnimState, 1),
3290
DELAY(1),
3291
END_REPEAT(),
3292
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_WATER_SPLASH),
3293
DEACTIVATE(),
3294
};
3295
3296
// Droplets of water that spawn as a result of various water splashes.
3297
const BehaviorScript bhvWaterDroplet[] = {
3298
BEGIN(OBJ_LIST_UNIMPORTANT),
3299
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3300
BILLBOARD(),
3301
BEGIN_LOOP(),
3302
CALL_NATIVE(bhv_water_droplet_loop),
3303
END_LOOP(),
3304
};
3305
3306
// Small splashes that are seen when a water droplet lands back into the water.
3307
const BehaviorScript bhvWaterDropletSplash[] = {
3308
BEGIN(OBJ_LIST_DEFAULT),
3309
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3310
#ifndef VERSION_JP
3311
SET_INT(oFaceAnglePitch, 0),
3312
SET_INT(oFaceAngleYaw, 0),
3313
SET_INT(oFaceAngleRoll, 0),
3314
#endif
3315
CALL_NATIVE(bhv_water_droplet_splash_init),
3316
ADD_FLOAT(oPosY, 5),
3317
SET_INT(oAnimState, -1),
3318
BEGIN_REPEAT(6),
3319
ADD_INT(oAnimState, 1),
3320
END_REPEAT(),
3321
DEACTIVATE(),
3322
};
3323
3324
// The splash created when an air bubble hits the surface of the water.
3325
const BehaviorScript bhvBubbleSplash[] = {
3326
BEGIN(OBJ_LIST_DEFAULT),
3327
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3328
#ifdef VERSION_JP
3329
SET_FLOAT(oFaceAnglePitch, 0),
3330
SET_FLOAT(oFaceAngleYaw, 0),
3331
SET_FLOAT(oFaceAngleRoll, 0),
3332
#endif
3333
#ifndef VERSION_JP
3334
SET_INT(oFaceAnglePitch, 0),
3335
SET_INT(oFaceAngleYaw, 0),
3336
SET_INT(oFaceAngleRoll, 0),
3337
#endif
3338
SET_INT(oAnimState, -1),
3339
CALL_NATIVE(bhv_bubble_splash_init),
3340
BEGIN_REPEAT(6),
3341
ADD_INT(oAnimState, 1),
3342
END_REPEAT(),
3343
DEACTIVATE(),
3344
};
3345
3346
// The water wave surrounding Mario when he is idle in a pool of water.
3347
const BehaviorScript bhvIdleWaterWave[] = {
3348
BEGIN(OBJ_LIST_DEFAULT),
3349
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3350
#ifdef VERSION_JP
3351
SET_FLOAT(oFaceAnglePitch, 0),
3352
SET_FLOAT(oFaceAngleYaw, 0),
3353
SET_FLOAT(oFaceAngleRoll, 0),
3354
#endif
3355
#ifndef VERSION_JP
3356
SET_INT(oFaceAnglePitch, 0),
3357
SET_INT(oFaceAngleYaw, 0),
3358
SET_INT(oFaceAngleRoll, 0),
3359
#endif
3360
SET_INT(oAnimState, -1),
3361
ADD_INT(oAnimState, 1),
3362
BEGIN_LOOP(),
3363
CALL_NATIVE(bhv_idle_water_wave_loop),
3364
ADD_INT(oAnimState, 1),
3365
BEGIN_REPEAT(6),
3366
CALL_NATIVE(bhv_idle_water_wave_loop),
3367
END_REPEAT(),
3368
CALL_NATIVE(bhv_idle_water_wave_loop),
3369
END_LOOP(),
3370
};
3371
3372
// Water splashes similar to the splashes created by water droplets, but are created by other objects.
3373
// Unlike water droplet splashes, they are unimportant objects.
3374
const BehaviorScript bhvObjectWaterSplash[] = {
3375
BEGIN(OBJ_LIST_UNIMPORTANT),
3376
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3377
#ifdef VERSION_JP
3378
SET_FLOAT(oFaceAnglePitch, 0),
3379
SET_FLOAT(oFaceAngleYaw, 0),
3380
SET_FLOAT(oFaceAngleRoll, 0),
3381
#endif
3382
#ifndef VERSION_JP
3383
SET_INT(oFaceAnglePitch, 0),
3384
SET_INT(oFaceAngleYaw, 0),
3385
SET_INT(oFaceAngleRoll, 0),
3386
#endif
3387
SET_INT(oAnimState, -1),
3388
BEGIN_REPEAT(6),
3389
ADD_INT(oAnimState, 1),
3390
END_REPEAT(),
3391
DEACTIVATE(),
3392
};
3393
3394
// Waves that are generated when running in shallow water.
3395
const BehaviorScript bhvShallowWaterWave[] = {
3396
BEGIN(OBJ_LIST_DEFAULT),
3397
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3398
DISABLE_RENDERING(),
3399
BEGIN_REPEAT(5),
3400
SPAWN_WATER_DROPLET(&gShallowWaterWaveDropletParams),
3401
END_REPEAT_CONTINUE(),
3402
DELAY(1),
3403
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_SHALLOW_WATER_WAVE),
3404
DEACTIVATE(),
3405
};
3406
3407
// A small water splash that occurs when jumping in and out of shallow water.
3408
// Unlike the larger water splash it has no visible model of its own.
3409
// It has a 1 in 256 chance of spawning the fish particle easter egg.
3410
const BehaviorScript bhvShallowWaterSplash[] = {
3411
BEGIN(OBJ_LIST_DEFAULT),
3412
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3413
DISABLE_RENDERING(),
3414
BEGIN_REPEAT(18),
3415
SPAWN_WATER_DROPLET(&gShallowWaterSplashDropletParams),
3416
END_REPEAT_CONTINUE(),
3417
CALL_NATIVE(bhv_shallow_water_splash_init),
3418
DELAY(1),
3419
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_SHALLOW_WATER_SPLASH),
3420
DEACTIVATE(),
3421
};
3422
3423
// Waves created by other objects along the water's surface, specifically the koopa shell and Sushi.
3424
// Unlike Mario's waves, they are unimportant objects.
3425
const BehaviorScript bhvObjectWaveTrail[] = {
3426
BEGIN(OBJ_LIST_UNIMPORTANT),
3427
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3428
GOTO(bhvWaveTrail + 1 + 1 + 2), // Wave trail - common
3429
};
3430
3431
// The waves created by Mario while he is swimming.
3432
const BehaviorScript bhvWaveTrail[] = {
3433
BEGIN(OBJ_LIST_DEFAULT),
3434
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3435
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_WAVE_TRAIL),
3436
// Wave trail - common:
3437
SET_FLOAT(oFaceAnglePitch, 0),
3438
SET_FLOAT(oFaceAngleYaw, 0),
3439
SET_FLOAT(oFaceAngleRoll, 0),
3440
SET_INT(oAnimState, -1),
3441
BEGIN_REPEAT(8),
3442
ADD_INT(oAnimState, 1),
3443
CALL_NATIVE(bhv_wave_trail_shrink),
3444
DELAY(1),
3445
CALL_NATIVE(bhv_wave_trail_shrink),
3446
END_REPEAT(),
3447
DEACTIVATE(),
3448
};
3449
3450
// Tiny wind particles that provide aesthetics to the strong winds generated by the Snowman and Fwoosh.
3451
// As they are unimportant objects, they don't have collision with Mario.
3452
const BehaviorScript bhvTinyStrongWindParticle[] = {
3453
BEGIN(OBJ_LIST_UNIMPORTANT),
3454
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3455
BILLBOARD(),
3456
BEGIN_LOOP(),
3457
CALL_NATIVE(bhv_strong_wind_particle_loop),
3458
END_LOOP(),
3459
};
3460
3461
// Strong wind particles generated by the Snowman and Fwoosh that blow Mario back and knock his cap off.
3462
const BehaviorScript bhvStrongWindParticle[] = {
3463
BEGIN(OBJ_LIST_POLELIKE),
3464
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3465
BILLBOARD(),
3466
BEGIN_LOOP(),
3467
CALL_NATIVE(bhv_strong_wind_particle_loop),
3468
END_LOOP(),
3469
};
3470
3471
// The handler for the strong wind blown by the Snowman in SL. Triggers dialog and then aims towards Mario.
3472
const BehaviorScript bhvSLSnowmanWind[] = {
3473
BEGIN(OBJ_LIST_DEFAULT),
3474
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3475
SET_HOME(),
3476
BEGIN_LOOP(),
3477
CALL_NATIVE(bhv_sl_snowman_wind_loop),
3478
END_LOOP(),
3479
};
3480
3481
// The penguin that walks erratically along the ice bridge in front of the Snowman in SL.
3482
// Blocks strong wind particles, allowing Mario to walk behind it.
3483
const BehaviorScript bhvSLWalkingPenguin[] = {
3484
BEGIN(OBJ_LIST_SURFACE),
3485
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3486
LOAD_COLLISION_DATA(penguin_seg5_collision_05008B88),
3487
LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
3488
ANIMATE(0),
3489
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
3490
SCALE(/*Unused*/ 0, /*Field*/ 600),
3491
SET_HOME(),
3492
BEGIN_LOOP(),
3493
CALL_NATIVE(bhv_sl_walking_penguin_loop),
3494
CALL_NATIVE(load_object_collision_model),
3495
END_LOOP(),
3496
};
3497
3498
const BehaviorScript bhvYellowBall[] = {
3499
BEGIN(OBJ_LIST_DEFAULT),
3500
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3501
BILLBOARD(),
3502
BREAK(),
3503
};
3504
3505
UNUSED static const u64 behavior_data_unused_0 = 0;
3506
const BehaviorScript bhvMario[] = {
3507
BEGIN(OBJ_LIST_PLAYER),
3508
SET_INT(oIntangibleTimer, 0),
3509
OR_INT(oFlags, OBJ_FLAG_0100),
3510
OR_INT(oUnk94, 0x0001),
3511
SET_HITBOX(/*Radius*/ 37, /*Height*/ 160),
3512
BEGIN_LOOP(),
3513
CALL_NATIVE(try_print_debug_mario_level_info),
3514
CALL_NATIVE(bhv_mario_update),
3515
CALL_NATIVE(try_do_mario_debug_object_spawn),
3516
END_LOOP(),
3517
};
3518
3519
const BehaviorScript bhvToadMessage[] = {
3520
BEGIN(OBJ_LIST_GENACTOR),
3521
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3522
LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58),
3523
ANIMATE(6),
3524
SET_INTERACT_TYPE(INTERACT_TEXT),
3525
SET_HITBOX(/*Radius*/ 80, /*Height*/ 100),
3526
SET_INT(oIntangibleTimer, 0),
3527
CALL_NATIVE(bhv_init_room),
3528
CALL_NATIVE(bhv_toad_message_init),
3529
BEGIN_LOOP(),
3530
CALL_NATIVE(bhv_toad_message_loop),
3531
END_LOOP(),
3532
};
3533
3534
const BehaviorScript bhvUnlockDoorStar[] = {
3535
BEGIN(OBJ_LIST_LEVEL),
3536
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3537
CALL_NATIVE(bhv_unlock_door_star_init),
3538
BEGIN_LOOP(),
3539
CALL_NATIVE(bhv_unlock_door_star_loop),
3540
END_LOOP(),
3541
};
3542
3543
const BehaviorScript bhvInstantActiveWarp[] = {
3544
BREAK(),
3545
};
3546
3547
const BehaviorScript bhvAirborneWarp[] = {
3548
BREAK(),
3549
};
3550
3551
const BehaviorScript bhvHardAirKnockBackWarp[] = {
3552
BREAK(),
3553
};
3554
3555
const BehaviorScript bhvSpinAirborneCircleWarp[] = {
3556
BREAK(),
3557
};
3558
3559
const BehaviorScript bhvDeathWarp[] = {
3560
BREAK(),
3561
};
3562
3563
const BehaviorScript bhvSpinAirborneWarp[] = {
3564
BREAK(),
3565
};
3566
3567
const BehaviorScript bhvFlyingWarp[] = {
3568
BREAK(),
3569
};
3570
3571
const BehaviorScript bhvPaintingStarCollectWarp[] = {
3572
BREAK(),
3573
};
3574
3575
const BehaviorScript bhvPaintingDeathWarp[] = {
3576
BREAK(),
3577
};
3578
3579
const BehaviorScript bhvAirborneDeathWarp[] = {
3580
BREAK(),
3581
};
3582
3583
const BehaviorScript bhvAirborneStarCollectWarp[] = {
3584
BREAK(),
3585
};
3586
3587
const BehaviorScript bhvLaunchStarCollectWarp[] = {
3588
BREAK(),
3589
};
3590
3591
const BehaviorScript bhvLaunchDeathWarp[] = {
3592
BREAK(),
3593
};
3594
3595
const BehaviorScript bhvSwimmingWarp[] = {
3596
BREAK(),
3597
};
3598
3599
UNUSED static const u64 behavior_data_unused_1 = 0;
3600
const BehaviorScript bhvRandomAnimatedTexture[] = {
3601
BEGIN(OBJ_LIST_LEVEL),
3602
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3603
SET_FLOAT(oGraphYOffset, -16),
3604
BILLBOARD(),
3605
SET_INT(oAnimState, -1),
3606
BEGIN_LOOP(),
3607
ADD_INT(oAnimState, 1),
3608
END_LOOP(),
3609
};
3610
3611
const BehaviorScript bhvYellowBackgroundInMenu[] = {
3612
BEGIN(OBJ_LIST_LEVEL),
3613
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3614
CALL_NATIVE(beh_yellow_background_menu_init),
3615
BEGIN_LOOP(),
3616
SET_INT(oIntangibleTimer, 0),
3617
CALL_NATIVE(beh_yellow_background_menu_loop),
3618
END_LOOP(),
3619
};
3620
3621
const BehaviorScript bhvMenuButton[] = {
3622
BEGIN(OBJ_LIST_LEVEL),
3623
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3624
CALL_NATIVE(bhv_menu_button_init),
3625
BEGIN_LOOP(),
3626
SET_INT(oIntangibleTimer, 0),
3627
CALL_NATIVE(bhv_menu_button_loop),
3628
END_LOOP(),
3629
};
3630
3631
const BehaviorScript bhvMenuButtonManager[] = {
3632
BEGIN(OBJ_LIST_LEVEL),
3633
OR_INT(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_0020 | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3634
CALL_NATIVE(bhv_menu_button_manager_init),
3635
BEGIN_LOOP(),
3636
SET_INT(oIntangibleTimer, 0),
3637
CALL_NATIVE(bhv_menu_button_manager_loop),
3638
END_LOOP(),
3639
};
3640
3641
const BehaviorScript bhvActSelectorStarType[] = {
3642
BEGIN(OBJ_LIST_DEFAULT),
3643
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3644
SET_HOME(),
3645
BEGIN_LOOP(),
3646
CALL_NATIVE(bhv_act_selector_star_type_loop),
3647
END_LOOP(),
3648
};
3649
3650
const BehaviorScript bhvActSelector[] = {
3651
BEGIN(OBJ_LIST_DEFAULT),
3652
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3653
CALL_NATIVE(bhv_act_selector_init),
3654
BEGIN_LOOP(),
3655
CALL_NATIVE(bhv_act_selector_loop),
3656
END_LOOP(),
3657
};
3658
3659
const BehaviorScript bhvMovingYellowCoin[] = {
3660
BEGIN(OBJ_LIST_LEVEL),
3661
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3662
BILLBOARD(),
3663
SET_HITBOX(/*Radius*/ 100, /*Height*/ 64),
3664
SET_INT(oInteractType, INTERACT_COIN),
3665
SET_INT(oIntangibleTimer, 0),
3666
SET_INT(oAnimState, -1),
3667
CALL_NATIVE(bhv_moving_yellow_coin_init),
3668
BEGIN_LOOP(),
3669
CALL_NATIVE(bhv_moving_yellow_coin_loop),
3670
ADD_INT(oAnimState, 1),
3671
END_LOOP(),
3672
};
3673
3674
const BehaviorScript bhvMovingBlueCoin[] = {
3675
BEGIN(OBJ_LIST_LEVEL),
3676
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3677
BILLBOARD(),
3678
SET_INT(oIntangibleTimer, 0),
3679
SET_INT(oAnimState, -1),
3680
CALL_NATIVE(bhv_moving_blue_coin_init),
3681
BEGIN_LOOP(),
3682
CALL_NATIVE(bhv_moving_blue_coin_loop),
3683
ADD_INT(oAnimState, 1),
3684
END_LOOP(),
3685
};
3686
3687
const BehaviorScript bhvBlueCoinSliding[] = {
3688
BEGIN(OBJ_LIST_GENACTOR),
3689
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3690
BILLBOARD(),
3691
SET_INT(oIntangibleTimer, 0),
3692
SET_INT(oAnimState, -1),
3693
CALL_NATIVE(bhv_blue_coin_sliding_jumping_init),
3694
BEGIN_LOOP(),
3695
CALL_NATIVE(bhv_blue_coin_sliding_loop),
3696
ADD_INT(oAnimState, 1),
3697
END_LOOP(),
3698
};
3699
3700
const BehaviorScript bhvBlueCoinJumping[] = {
3701
BEGIN(OBJ_LIST_GENACTOR),
3702
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3703
BILLBOARD(),
3704
SET_INT(oIntangibleTimer, 0),
3705
SET_INT(oAnimState, -1),
3706
CALL_NATIVE(bhv_blue_coin_sliding_jumping_init),
3707
BEGIN_LOOP(),
3708
CALL_NATIVE(bhv_blue_coin_jumping_loop),
3709
ADD_INT(oAnimState, 1),
3710
END_LOOP(),
3711
};
3712
3713
const BehaviorScript bhvSeaweed[] = {
3714
BEGIN(OBJ_LIST_LEVEL),
3715
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3716
LOAD_ANIMATIONS(oAnimations, seaweed_seg6_anims_0600A4D4),
3717
ANIMATE(0),
3718
CALL_NATIVE(bhv_seaweed_init),
3719
BEGIN_LOOP(),
3720
END_LOOP(),
3721
};
3722
3723
const BehaviorScript bhvSeaweedBundle[] = {
3724
BEGIN(OBJ_LIST_LEVEL),
3725
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3726
DROP_TO_FLOOR(),
3727
CALL_NATIVE(bhv_seaweed_bundle_init),
3728
BEGIN_LOOP(),
3729
END_LOOP(),
3730
};
3731
3732
const BehaviorScript bhvBobomb[] = {
3733
BEGIN(OBJ_LIST_DESTRUCTIVE),
3734
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3735
LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C),
3736
DROP_TO_FLOOR(),
3737
ANIMATE(0),
3738
SET_INT(oIntangibleTimer, 0),
3739
SET_HOME(),
3740
CALL_NATIVE(bhv_bobomb_init),
3741
BEGIN_LOOP(),
3742
CALL_NATIVE(bhv_bobomb_loop),
3743
END_LOOP(),
3744
};
3745
3746
const BehaviorScript bhvBobombFuseSmoke[] = {
3747
BEGIN(OBJ_LIST_DEFAULT),
3748
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3749
BILLBOARD(),
3750
SET_INT(oAnimState, -1),
3751
CALL_NATIVE(bhv_bobomb_fuse_smoke_init),
3752
DELAY(1),
3753
BEGIN_LOOP(),
3754
CALL_NATIVE(bhv_dust_smoke_loop),
3755
ADD_INT(oAnimState, 1),
3756
END_LOOP(),
3757
};
3758
3759
const BehaviorScript bhvBobombBuddy[] = {
3760
BEGIN(OBJ_LIST_GENACTOR),
3761
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3762
LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C),
3763
SET_INTERACT_TYPE(INTERACT_TEXT),
3764
DROP_TO_FLOOR(),
3765
SET_HITBOX(/*Radius*/ 100, /*Height*/ 60),
3766
ANIMATE(0),
3767
SET_INT(oBobombBuddyRole, 0),
3768
SET_HOME(),
3769
CALL_NATIVE(bhv_bobomb_buddy_init),
3770
BEGIN_LOOP(),
3771
SET_INT(oIntangibleTimer, 0),
3772
CALL_NATIVE(bhv_bobomb_buddy_loop),
3773
END_LOOP(),
3774
};
3775
3776
// The only difference between this and the previous behavior are what oFlags and oBobombBuddyRole are set to, why didn't they just use a jump?
3777
const BehaviorScript bhvBobombBuddyOpensCannon[] = {
3778
BEGIN(OBJ_LIST_GENACTOR),
3779
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3780
LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C),
3781
SET_INTERACT_TYPE(INTERACT_TEXT),
3782
DROP_TO_FLOOR(),
3783
SET_HITBOX(/*Radius*/ 100, /*Height*/ 60),
3784
ANIMATE(0),
3785
SET_INT(oBobombBuddyRole, 1),
3786
SET_HOME(),
3787
CALL_NATIVE(bhv_bobomb_buddy_init),
3788
BEGIN_LOOP(),
3789
SET_INT(oIntangibleTimer, 0),
3790
CALL_NATIVE(bhv_bobomb_buddy_loop),
3791
END_LOOP(),
3792
};
3793
3794
const BehaviorScript bhvCannonClosed[] = {
3795
BEGIN(OBJ_LIST_SURFACE),
3796
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3797
LOAD_COLLISION_DATA(cannon_lid_seg8_collision_08004950),
3798
SET_HOME(),
3799
CALL_NATIVE(bhv_cannon_closed_init),
3800
BEGIN_LOOP(),
3801
CALL_NATIVE(bhv_cannon_closed_loop),
3802
CALL_NATIVE(load_object_collision_model),
3803
END_LOOP(),
3804
};
3805
3806
const BehaviorScript bhvWhirlpool[] = {
3807
BEGIN(OBJ_LIST_POLELIKE),
3808
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3809
CALL_NATIVE(bhv_whirlpool_init),
3810
BEGIN_LOOP(),
3811
CALL_NATIVE(bhv_whirlpool_loop),
3812
END_LOOP(),
3813
};
3814
3815
const BehaviorScript bhvJetStream[] = {
3816
BEGIN(OBJ_LIST_DEFAULT),
3817
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3818
BEGIN_LOOP(),
3819
CALL_NATIVE(bhv_jet_stream_loop),
3820
END_LOOP(),
3821
};
3822
3823
const BehaviorScript bhvMessagePanel[] = {
3824
BEGIN(OBJ_LIST_SURFACE),
3825
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3826
LOAD_COLLISION_DATA(wooden_signpost_seg3_collision_0302DD80),
3827
SET_INTERACT_TYPE(INTERACT_TEXT),
3828
SET_INT(oInteractionSubtype, INT_SUBTYPE_SIGN),
3829
DROP_TO_FLOOR(),
3830
SET_HITBOX(/*Radius*/ 150, /*Height*/ 80),
3831
SET_INT(oWoodenPostTotalMarioAngle, 0),
3832
BEGIN_LOOP(),
3833
SET_INT(oIntangibleTimer, 0),
3834
CALL_NATIVE(load_object_collision_model),
3835
SET_INT(oInteractStatus, 0),
3836
END_LOOP(),
3837
};
3838
3839
const BehaviorScript bhvSignOnWall[] = {
3840
BEGIN(OBJ_LIST_SURFACE),
3841
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3842
SET_INTERACT_TYPE(INTERACT_TEXT),
3843
SET_INT(oInteractionSubtype, INT_SUBTYPE_SIGN),
3844
SET_HITBOX(/*Radius*/ 150, /*Height*/ 80),
3845
SET_INT(oWoodenPostTotalMarioAngle, 0),
3846
BEGIN_LOOP(),
3847
SET_INT(oIntangibleTimer, 0),
3848
SET_INT(oInteractStatus, 0),
3849
END_LOOP(),
3850
};
3851
3852
const BehaviorScript bhvHomingAmp[] = {
3853
BEGIN(OBJ_LIST_GENACTOR),
3854
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3855
LOAD_ANIMATIONS(oAnimations, dAmpAnimsList),
3856
ANIMATE(0),
3857
SET_FLOAT(oGraphYOffset, 40),
3858
SET_INT(oIntangibleTimer, 0),
3859
CALL_NATIVE(bhv_homing_amp_init),
3860
BEGIN_LOOP(),
3861
CALL_NATIVE(bhv_homing_amp_loop),
3862
END_LOOP(),
3863
};
3864
3865
const BehaviorScript bhvCirclingAmp[] = {
3866
BEGIN(OBJ_LIST_GENACTOR),
3867
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3868
LOAD_ANIMATIONS(oAnimations, dAmpAnimsList),
3869
ANIMATE(0),
3870
SET_FLOAT(oGraphYOffset, 40),
3871
SET_INT(oIntangibleTimer, 0),
3872
CALL_NATIVE(bhv_circling_amp_init),
3873
BEGIN_LOOP(),
3874
CALL_NATIVE(bhv_circling_amp_loop),
3875
END_LOOP(),
3876
};
3877
3878
const BehaviorScript bhvButterfly[] = {
3879
BEGIN(OBJ_LIST_DEFAULT),
3880
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3881
LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0),
3882
DROP_TO_FLOOR(),
3883
SET_FLOAT(oGraphYOffset, 5),
3884
CALL_NATIVE(bhv_butterfly_init),
3885
BEGIN_LOOP(),
3886
CALL_NATIVE(bhv_butterfly_loop),
3887
END_LOOP(),
3888
};
3889
3890
const BehaviorScript bhvHoot[] = {
3891
BEGIN(OBJ_LIST_POLELIKE),
3892
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3893
LOAD_ANIMATIONS(oAnimations, hoot_seg5_anims_05005768),
3894
SET_INT(oInteractType, INTERACT_HOOT),
3895
SET_HITBOX(/*Radius*/ 75, /*Height*/ 75),
3896
CALL_NATIVE(bhv_hoot_init),
3897
BEGIN_LOOP(),
3898
CALL_NATIVE(bhv_hoot_loop),
3899
END_LOOP(),
3900
};
3901
3902
const BehaviorScript bhvBetaHoldableObject[] = {
3903
BEGIN(OBJ_LIST_GENACTOR),
3904
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3905
SET_INT(oInteractType, INTERACT_GRABBABLE),
3906
DROP_TO_FLOOR(),
3907
SET_HITBOX(/*Radius*/ 40, /*Height*/ 50),
3908
CALL_NATIVE(bhv_beta_holdable_object_init),
3909
BEGIN_LOOP(),
3910
SET_INT(oIntangibleTimer, 0),
3911
CALL_NATIVE(bhv_beta_holdable_object_loop),
3912
END_LOOP(),
3913
};
3914
3915
const BehaviorScript bhvCarrySomething1[] = {
3916
BEGIN(OBJ_LIST_DEFAULT),
3917
BREAK(),
3918
};
3919
3920
const BehaviorScript bhvCarrySomething2[] = {
3921
BEGIN(OBJ_LIST_DEFAULT),
3922
BREAK(),
3923
};
3924
3925
const BehaviorScript bhvCarrySomething3[] = {
3926
BEGIN(OBJ_LIST_DEFAULT),
3927
BREAK(),
3928
};
3929
3930
const BehaviorScript bhvCarrySomething4[] = {
3931
BEGIN(OBJ_LIST_DEFAULT),
3932
BREAK(),
3933
};
3934
3935
const BehaviorScript bhvCarrySomething5[] = {
3936
BEGIN(OBJ_LIST_DEFAULT),
3937
BREAK(),
3938
};
3939
3940
const BehaviorScript bhvCarrySomething6[] = {
3941
BEGIN(OBJ_LIST_DEFAULT),
3942
BREAK(),
3943
};
3944
3945
const BehaviorScript bhvObjectBubble[] = {
3946
BEGIN(OBJ_LIST_UNIMPORTANT),
3947
OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3948
BILLBOARD(),
3949
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3950
SET_INT(oAnimState, -1),
3951
CALL_NATIVE(bhv_object_bubble_init),
3952
SET_RANDOM_FLOAT(oVelY, /*Minimum*/ 3, /*Range*/ 6),
3953
SET_INT_RAND_RSHIFT(oMoveAngleYaw, /*Minimum*/ 0, /*Right shift*/ 0),
3954
DELAY(1),
3955
BEGIN_LOOP(),
3956
CALL_NATIVE(bhv_object_bubble_loop),
3957
END_LOOP(),
3958
};
3959
3960
const BehaviorScript bhvObjectWaterWave[] = {
3961
BEGIN(OBJ_LIST_UNIMPORTANT),
3962
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
3963
SET_FLOAT(oFaceAnglePitch, 0),
3964
SET_FLOAT(oFaceAngleYaw, 0),
3965
SET_FLOAT(oFaceAngleRoll, 0),
3966
SET_INT(oAnimState, -1),
3967
CALL_NATIVE(bhv_object_water_wave_init),
3968
ADD_INT(oAnimState, 1),
3969
DELAY(6),
3970
BEGIN_LOOP(),
3971
CALL_NATIVE(bhv_object_water_wave_loop),
3972
ADD_INT(oAnimState, 1),
3973
BEGIN_REPEAT(6),
3974
CALL_NATIVE(bhv_object_water_wave_loop),
3975
END_REPEAT(),
3976
END_LOOP(),
3977
};
3978
3979
const BehaviorScript bhvExplosion[] = {
3980
BEGIN(OBJ_LIST_DESTRUCTIVE),
3981
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3982
BILLBOARD(),
3983
SET_INTERACT_TYPE(INTERACT_DAMAGE),
3984
SET_INT(oDamageOrCoinValue, 2),
3985
SET_INT(oIntangibleTimer, 0),
3986
SET_HITBOX_WITH_OFFSET(/*Radius*/ 150, /*Height*/ 150, /*Downwards offset*/ 150),
3987
SET_INT(oAnimState, -1),
3988
CALL_NATIVE(bhv_explosion_init),
3989
BEGIN_LOOP(),
3990
CALL_NATIVE(bhv_explosion_loop),
3991
ADD_INT(oAnimState, 1),
3992
END_LOOP(),
3993
};
3994
3995
const BehaviorScript bhvBobombBullyDeathSmoke[] = {
3996
BEGIN(OBJ_LIST_UNIMPORTANT),
3997
OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
3998
BILLBOARD(),
3999
SET_INT(oAnimState, -1),
4000
CALL_NATIVE(bhv_bobomb_bully_death_smoke_init),
4001
DELAY(1),
4002
BEGIN_LOOP(),
4003
CALL_NATIVE(bhv_dust_smoke_loop),
4004
ADD_INT(oAnimState, 1),
4005
END_LOOP(),
4006
};
4007
4008
const BehaviorScript bhvSmoke[] = {
4009
BEGIN(OBJ_LIST_UNIMPORTANT),
4010
OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4011
BILLBOARD(),
4012
SET_INT(oAnimState, -1),
4013
DELAY(1),
4014
BEGIN_LOOP(),
4015
CALL_NATIVE(bhv_dust_smoke_loop),
4016
ADD_INT(oAnimState, 1),
4017
END_LOOP(),
4018
};
4019
4020
const BehaviorScript bhvBobombExplosionBubble[] = {
4021
BEGIN(OBJ_LIST_DEFAULT),
4022
BILLBOARD(),
4023
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4024
CALL_NATIVE(bhv_bobomb_explosion_bubble_init),
4025
ADD_RANDOM_FLOAT(oPosX, /*Minimum*/ -50, /*Range*/ 100),
4026
ADD_RANDOM_FLOAT(oPosY, /*Minimum*/ -50, /*Range*/ 100),
4027
ADD_RANDOM_FLOAT(oPosZ, /*Minimum*/ -50, /*Range*/ 100),
4028
CALL(bhvBobombExplosionBubble3600),
4029
DELAY(1),
4030
BEGIN_LOOP(),
4031
CALL(bhvBobombExplosionBubble3600),
4032
CALL_NATIVE(bhv_bobomb_explosion_bubble_loop),
4033
END_LOOP(),
4034
};
4035
4036
const BehaviorScript bhvBobombExplosionBubble3600[] = {
4037
ADD_RANDOM_FLOAT(oPosX, /*Minimum*/ -2, /*Range*/ 4),
4038
ADD_RANDOM_FLOAT(oPosZ, /*Minimum*/ -2, /*Range*/ 4),
4039
RETURN(),
4040
};
4041
4042
const BehaviorScript bhvRespawner[] = {
4043
BEGIN(OBJ_LIST_DEFAULT),
4044
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4045
BEGIN_LOOP(),
4046
CALL_NATIVE(bhv_respawner_loop),
4047
END_LOOP(),
4048
};
4049
4050
const BehaviorScript bhvSmallBully[] = {
4051
BEGIN(OBJ_LIST_GENACTOR),
4052
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4053
LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C),
4054
DROP_TO_FLOOR(),
4055
SET_HOME(),
4056
CALL_NATIVE(bhv_small_bully_init),
4057
BEGIN_LOOP(),
4058
SET_INT(oIntangibleTimer, 0),
4059
CALL_NATIVE(bhv_bully_loop),
4060
END_LOOP(),
4061
};
4062
4063
const BehaviorScript bhvBigBully[] = {
4064
BEGIN(OBJ_LIST_GENACTOR),
4065
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4066
LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C),
4067
DROP_TO_FLOOR(),
4068
SET_HOME(),
4069
CALL_NATIVE(bhv_big_bully_init),
4070
BEGIN_LOOP(),
4071
SET_INT(oIntangibleTimer, 0),
4072
CALL_NATIVE(bhv_bully_loop),
4073
END_LOOP(),
4074
};
4075
4076
const BehaviorScript bhvBigBullyWithMinions[] = {
4077
BEGIN(OBJ_LIST_GENACTOR),
4078
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4079
LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C),
4080
SET_HOME(),
4081
CALL_NATIVE(bhv_big_bully_init),
4082
CALL_NATIVE(bhv_big_bully_with_minions_init),
4083
BEGIN_LOOP(),
4084
CALL_NATIVE(bhv_big_bully_with_minions_loop),
4085
END_LOOP(),
4086
};
4087
4088
const BehaviorScript bhvSmallChillBully[] = {
4089
BEGIN(OBJ_LIST_GENACTOR),
4090
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4091
LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994),
4092
DROP_TO_FLOOR(),
4093
SET_HOME(),
4094
SET_INT(oBullySubtype, 0x0010),
4095
CALL_NATIVE(bhv_small_bully_init),
4096
BEGIN_LOOP(),
4097
SET_INT(oIntangibleTimer, 0),
4098
CALL_NATIVE(bhv_bully_loop),
4099
END_LOOP(),
4100
};
4101
4102
const BehaviorScript bhvBigChillBully[] = {
4103
BEGIN(OBJ_LIST_GENACTOR),
4104
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4105
LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994),
4106
DROP_TO_FLOOR(),
4107
SET_HOME(),
4108
SET_INT(oBullySubtype, 0x0010),
4109
CALL_NATIVE(bhv_big_bully_init),
4110
BEGIN_LOOP(),
4111
SET_INT(oIntangibleTimer, 0),
4112
CALL_NATIVE(bhv_bully_loop),
4113
END_LOOP(),
4114
};
4115
4116
const BehaviorScript bhvJetStreamRingSpawner[] = {
4117
BEGIN(OBJ_LIST_DEFAULT),
4118
HIDE(),
4119
BEGIN_LOOP(),
4120
CALL_NATIVE(bhv_jet_stream_ring_spawner_loop),
4121
END_LOOP(),
4122
};
4123
4124
const BehaviorScript bhvJetStreamWaterRing[] = {
4125
BEGIN(OBJ_LIST_LEVEL),
4126
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4127
LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C),
4128
SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20),
4129
SET_INTERACT_TYPE(INTERACT_WATER_RING),
4130
SET_INT(oDamageOrCoinValue, 2),
4131
SET_INT(oIntangibleTimer, 0),
4132
CALL_NATIVE(bhv_jet_stream_water_ring_init),
4133
BEGIN_LOOP(),
4134
SET_INT(oIntangibleTimer, 0),
4135
CALL_NATIVE(bhv_jet_stream_water_ring_loop),
4136
END_LOOP(),
4137
};
4138
4139
const BehaviorScript bhvMantaRayWaterRing[] = {
4140
BEGIN(OBJ_LIST_LEVEL),
4141
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4142
LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C),
4143
SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20),
4144
SET_INTERACT_TYPE(INTERACT_WATER_RING),
4145
SET_INT(oDamageOrCoinValue, 2),
4146
SET_INT(oIntangibleTimer, 0),
4147
CALL_NATIVE(bhv_manta_ray_water_ring_init),
4148
BEGIN_LOOP(),
4149
SET_INT(oIntangibleTimer, 0),
4150
CALL_NATIVE(bhv_manta_ray_water_ring_loop),
4151
END_LOOP(),
4152
};
4153
4154
const BehaviorScript bhvMantaRayRingManager[] = {
4155
BEGIN(OBJ_LIST_DEFAULT),
4156
BEGIN_LOOP(),
4157
END_LOOP(),
4158
};
4159
4160
const BehaviorScript bhvBowserBomb[] = {
4161
BEGIN(OBJ_LIST_GENACTOR),
4162
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4163
SET_INT(oIntangibleTimer, 0),
4164
SET_HITBOX_WITH_OFFSET(/*Radius*/ 40, /*Height*/ 40, /*Downwards offset*/ 40),
4165
DELAY(1),
4166
BEGIN_LOOP(),
4167
SET_INT(oIntangibleTimer, 0),
4168
CALL_NATIVE(bhv_bowser_bomb_loop),
4169
END_LOOP(),
4170
};
4171
4172
const BehaviorScript bhvBowserBombExplosion[] = {
4173
BEGIN(OBJ_LIST_DEFAULT),
4174
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4175
BILLBOARD(),
4176
SET_FLOAT(oGraphYOffset, -288),
4177
SET_INT(oAnimState, -1),
4178
BEGIN_LOOP(),
4179
CALL_NATIVE(bhv_bowser_bomb_explosion_loop),
4180
END_LOOP(),
4181
};
4182
4183
const BehaviorScript bhvBowserBombSmoke[] = {
4184
BEGIN(OBJ_LIST_DEFAULT),
4185
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4186
BILLBOARD(),
4187
SET_FLOAT(oGraphYOffset, -288),
4188
SET_INT(oOpacity, 255),
4189
SET_INT(oAnimState, -1),
4190
BEGIN_LOOP(),
4191
CALL_NATIVE(bhv_bowser_bomb_smoke_loop),
4192
END_LOOP(),
4193
};
4194
4195
const BehaviorScript bhvCelebrationStar[] = {
4196
BEGIN(OBJ_LIST_LEVEL),
4197
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4198
CALL_NATIVE(bhv_celebration_star_init),
4199
BEGIN_LOOP(),
4200
CALL_NATIVE(bhv_celebration_star_loop),
4201
END_LOOP(),
4202
};
4203
4204
const BehaviorScript bhvCelebrationStarSparkle[] = {
4205
BEGIN(OBJ_LIST_UNIMPORTANT),
4206
BILLBOARD(),
4207
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4208
SET_FLOAT(oGraphYOffset, 25),
4209
SET_INT(oAnimState, -1),
4210
BEGIN_LOOP(),
4211
ADD_INT(oAnimState, 1),
4212
CALL_NATIVE(bhv_celebration_star_sparkle_loop),
4213
END_LOOP(),
4214
};
4215
4216
const BehaviorScript bhvStarKeyCollectionPuffSpawner[] = {
4217
BEGIN(OBJ_LIST_DEFAULT),
4218
BILLBOARD(),
4219
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4220
SET_INT(oAnimState, -1),
4221
BEGIN_LOOP(),
4222
CALL_NATIVE(bhv_star_key_collection_puff_spawner_loop),
4223
END_LOOP(),
4224
};
4225
4226
const BehaviorScript bhvLllDrawbridgeSpawner[] = {
4227
BEGIN(OBJ_LIST_DEFAULT),
4228
HIDE(),
4229
BEGIN_LOOP(),
4230
CALL_NATIVE(bhv_lll_drawbridge_spawner_loop),
4231
END_LOOP(),
4232
};
4233
4234
const BehaviorScript bhvLllDrawbridge[] = {
4235
BEGIN(OBJ_LIST_SURFACE),
4236
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4237
LOAD_COLLISION_DATA(lll_seg7_collision_drawbridge),
4238
BEGIN_LOOP(),
4239
CALL_NATIVE(bhv_lll_drawbridge_loop),
4240
CALL_NATIVE(load_object_collision_model),
4241
END_LOOP(),
4242
};
4243
4244
const BehaviorScript bhvSmallBomp[] = {
4245
BEGIN(OBJ_LIST_SURFACE),
4246
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4247
LOAD_COLLISION_DATA(wf_seg7_collision_small_bomp),
4248
CALL_NATIVE(bhv_small_bomp_init),
4249
BEGIN_LOOP(),
4250
CALL_NATIVE(bhv_small_bomp_loop),
4251
CALL_NATIVE(load_object_collision_model),
4252
END_LOOP(),
4253
};
4254
4255
const BehaviorScript bhvLargeBomp[] = {
4256
BEGIN(OBJ_LIST_SURFACE),
4257
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4258
LOAD_COLLISION_DATA(wf_seg7_collision_large_bomp),
4259
CALL_NATIVE(bhv_large_bomp_init),
4260
BEGIN_LOOP(),
4261
CALL_NATIVE(bhv_large_bomp_loop),
4262
CALL_NATIVE(load_object_collision_model),
4263
END_LOOP(),
4264
};
4265
4266
const BehaviorScript bhvWfSlidingPlatform[] = {
4267
BEGIN(OBJ_LIST_SURFACE),
4268
OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4269
LOAD_COLLISION_DATA(wf_seg7_collision_sliding_brick_platform),
4270
CALL_NATIVE(bhv_wf_sliding_platform_init),
4271
BEGIN_LOOP(),
4272
CALL_NATIVE(bhv_wf_sliding_platform_loop),
4273
CALL_NATIVE(load_object_collision_model),
4274
END_LOOP(),
4275
};
4276
4277
const BehaviorScript bhvMoneybag[] = {
4278
BEGIN(OBJ_LIST_GENACTOR),
4279
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4280
LOAD_ANIMATIONS(oAnimations, moneybag_seg6_anims_06005E5C),
4281
DROP_TO_FLOOR(),
4282
SET_HOME(),
4283
SET_INT(oIntangibleTimer, -1),
4284
CALL_NATIVE(bhv_moneybag_init),
4285
BEGIN_LOOP(),
4286
CALL_NATIVE(bhv_moneybag_loop),
4287
END_LOOP(),
4288
};
4289
4290
const BehaviorScript bhvMoneybagHidden[] = {
4291
BEGIN(OBJ_LIST_LEVEL),
4292
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4293
SET_FLOAT(oGraphYOffset, 27),
4294
BILLBOARD(),
4295
SET_HITBOX(/*Radius*/ 110, /*Height*/ 100),
4296
SET_INT(oIntangibleTimer, 0),
4297
SET_INT(oAnimState, -1),
4298
BEGIN_LOOP(),
4299
ADD_INT(oAnimState, 1),
4300
CALL_NATIVE(bhv_moneybag_hidden_loop),
4301
END_LOOP(),
4302
};
4303
4304
const BehaviorScript bhvPitBowlingBall[] = {
4305
BEGIN(OBJ_LIST_GENACTOR),
4306
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4307
BILLBOARD(),
4308
SET_FLOAT(oGraphYOffset, 130),
4309
CALL_NATIVE(bhv_bob_pit_bowling_ball_init),
4310
BEGIN_LOOP(),
4311
CALL_NATIVE(bhv_bob_pit_bowling_ball_loop),
4312
END_LOOP(),
4313
};
4314
4315
const BehaviorScript bhvFreeBowlingBall[] = {
4316
BEGIN(OBJ_LIST_GENACTOR),
4317
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4318
BILLBOARD(),
4319
SET_FLOAT(oGraphYOffset, 130),
4320
CALL_NATIVE(bhv_free_bowling_ball_init),
4321
BEGIN_LOOP(),
4322
CALL_NATIVE(bhv_free_bowling_ball_loop),
4323
END_LOOP(),
4324
};
4325
4326
const BehaviorScript bhvBowlingBall[] = {
4327
BEGIN(OBJ_LIST_GENACTOR),
4328
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4329
BILLBOARD(),
4330
SET_FLOAT(oGraphYOffset, 130),
4331
CALL_NATIVE(bhv_bowling_ball_init),
4332
BEGIN_LOOP(),
4333
CALL_NATIVE(bhv_bowling_ball_loop),
4334
END_LOOP(),
4335
};
4336
4337
const BehaviorScript bhvTtmBowlingBallSpawner[] = {
4338
BEGIN(OBJ_LIST_GENACTOR),
4339
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4340
SET_INT(oBBallSpawnerPeriodMinus1, 63),
4341
CALL_NATIVE(bhv_generic_bowling_ball_spawner_init),
4342
BEGIN_LOOP(),
4343
CALL_NATIVE(bhv_generic_bowling_ball_spawner_loop),
4344
END_LOOP(),
4345
};
4346
4347
const BehaviorScript bhvBobBowlingBallSpawner[] = {
4348
BEGIN(OBJ_LIST_GENACTOR),
4349
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4350
SET_INT(oBBallSpawnerPeriodMinus1, 127),
4351
CALL_NATIVE(bhv_generic_bowling_ball_spawner_init),
4352
BEGIN_LOOP(),
4353
CALL_NATIVE(bhv_generic_bowling_ball_spawner_loop),
4354
END_LOOP(),
4355
};
4356
4357
const BehaviorScript bhvThiBowlingBallSpawner[] = {
4358
BEGIN(OBJ_LIST_GENACTOR),
4359
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4360
BEGIN_LOOP(),
4361
CALL_NATIVE(bhv_thi_bowling_ball_spawner_loop),
4362
END_LOOP(),
4363
};
4364
4365
const BehaviorScript bhvRrCruiserWing[] = {
4366
BEGIN(OBJ_LIST_DEFAULT),
4367
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4368
CALL_NATIVE(bhv_rr_cruiser_wing_init),
4369
BEGIN_LOOP(),
4370
CALL_NATIVE(bhv_rr_cruiser_wing_loop),
4371
END_LOOP(),
4372
};
4373
4374
const BehaviorScript bhvSpindel[] = {
4375
BEGIN(OBJ_LIST_SURFACE),
4376
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4377
LOAD_COLLISION_DATA(ssl_seg7_collision_spindel),
4378
CALL_NATIVE(bhv_spindel_init),
4379
BEGIN_LOOP(),
4380
CALL_NATIVE(bhv_spindel_loop),
4381
CALL_NATIVE(load_object_collision_model),
4382
END_LOOP(),
4383
};
4384
4385
const BehaviorScript bhvSslMovingPyramidWall[] = {
4386
BEGIN(OBJ_LIST_SURFACE),
4387
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4388
LOAD_COLLISION_DATA(ssl_seg7_collision_0702808C),
4389
CALL_NATIVE(bhv_ssl_moving_pyramid_wall_init),
4390
BEGIN_LOOP(),
4391
CALL_NATIVE(bhv_ssl_moving_pyramid_wall_loop),
4392
CALL_NATIVE(load_object_collision_model),
4393
END_LOOP(),
4394
};
4395
4396
const BehaviorScript bhvPyramidElevator[] = {
4397
BEGIN(OBJ_LIST_SURFACE),
4398
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4399
LOAD_COLLISION_DATA(ssl_seg7_collision_pyramid_elevator),
4400
SET_HOME(),
4401
SET_FLOAT(oCollisionDistance, 20000),
4402
CALL_NATIVE(bhv_pyramid_elevator_init),
4403
BEGIN_LOOP(),
4404
CALL_NATIVE(bhv_pyramid_elevator_loop),
4405
CALL_NATIVE(load_object_collision_model),
4406
END_LOOP(),
4407
};
4408
4409
const BehaviorScript bhvPyramidElevatorTrajectoryMarkerBall[] = {
4410
BEGIN(OBJ_LIST_DEFAULT),
4411
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4412
BILLBOARD(),
4413
BEGIN_LOOP(),
4414
CALL_NATIVE(bhv_pyramid_elevator_trajectory_marker_ball_loop),
4415
END_LOOP(),
4416
};
4417
4418
const BehaviorScript bhvPyramidTop[] = {
4419
BEGIN(OBJ_LIST_SURFACE),
4420
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4421
LOAD_COLLISION_DATA(ssl_seg7_collision_pyramid_top),
4422
SET_HOME(),
4423
SET_FLOAT(oCollisionDistance, 20000),
4424
CALL_NATIVE(bhv_pyramid_top_init),
4425
BEGIN_LOOP(),
4426
CALL_NATIVE(bhv_pyramid_top_loop),
4427
CALL_NATIVE(load_object_collision_model),
4428
END_LOOP(),
4429
};
4430
4431
const BehaviorScript bhvPyramidTopFragment[] = {
4432
BEGIN(OBJ_LIST_DEFAULT),
4433
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4434
CALL_NATIVE(bhv_pyramid_top_fragment_init),
4435
BEGIN_LOOP(),
4436
CALL_NATIVE(bhv_pyramid_top_fragment_loop),
4437
END_LOOP(),
4438
};
4439
4440
const BehaviorScript bhvPyramidPillarTouchDetector[] = {
4441
BEGIN(OBJ_LIST_LEVEL),
4442
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4443
SET_HITBOX(/*Radius*/ 50, /*Height*/ 50),
4444
SET_INT(oIntangibleTimer, 0),
4445
BEGIN_LOOP(),
4446
CALL_NATIVE(bhv_pyramid_pillar_touch_detector_loop),
4447
END_LOOP(),
4448
};
4449
4450
const BehaviorScript bhvWaterfallSoundLoop[] = {
4451
BEGIN(OBJ_LIST_DEFAULT),
4452
BEGIN_LOOP(),
4453
CALL_NATIVE(bhv_waterfall_sound_loop),
4454
END_LOOP(),
4455
};
4456
4457
const BehaviorScript bhvVolcanoSoundLoop[] = {
4458
BEGIN(OBJ_LIST_DEFAULT),
4459
BEGIN_LOOP(),
4460
CALL_NATIVE(bhv_volcano_sound_loop),
4461
END_LOOP(),
4462
};
4463
4464
const BehaviorScript bhvCastleFlagWaving[] = {
4465
BEGIN(OBJ_LIST_DEFAULT),
4466
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4467
LOAD_ANIMATIONS(oAnimations, castle_grounds_seg7_anims_flags),
4468
ANIMATE(0),
4469
CALL_NATIVE(bhv_castle_flag_init),
4470
BEGIN_LOOP(),
4471
END_LOOP(),
4472
};
4473
4474
const BehaviorScript bhvBirdsSoundLoop[] = {
4475
BEGIN(OBJ_LIST_DEFAULT),
4476
BEGIN_LOOP(),
4477
CALL_NATIVE(bhv_birds_sound_loop),
4478
END_LOOP(),
4479
};
4480
4481
const BehaviorScript bhvAmbientSounds[] = {
4482
BEGIN(OBJ_LIST_DEFAULT),
4483
CALL_NATIVE(bhv_ambient_sounds_init),
4484
BEGIN_LOOP(),
4485
END_LOOP(),
4486
};
4487
4488
const BehaviorScript bhvSandSoundLoop[] = {
4489
BEGIN(OBJ_LIST_DEFAULT),
4490
BEGIN_LOOP(),
4491
CALL_NATIVE(bhv_sand_sound_loop),
4492
END_LOOP(),
4493
};
4494
4495
const BehaviorScript bhvHiddenAt120Stars[] = {
4496
BEGIN(OBJ_LIST_SURFACE),
4497
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4498
LOAD_COLLISION_DATA(castle_grounds_seg7_collision_cannon_grill),
4499
SET_FLOAT(oCollisionDistance, 4000),
4500
CALL_NATIVE(bhv_castle_cannon_grate_init),
4501
BEGIN_LOOP(),
4502
CALL_NATIVE(load_object_collision_model),
4503
END_LOOP(),
4504
};
4505
4506
const BehaviorScript bhvSnowmansBottom[] = {
4507
BEGIN(OBJ_LIST_GENACTOR),
4508
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4509
DROP_TO_FLOOR(),
4510
SET_INT(oIntangibleTimer, 0),
4511
CALL_NATIVE(bhv_snowmans_bottom_init),
4512
BEGIN_LOOP(),
4513
CALL_NATIVE(bhv_snowmans_bottom_loop),
4514
END_LOOP(),
4515
};
4516
4517
const BehaviorScript bhvSnowmansHead[] = {
4518
BEGIN(OBJ_LIST_DEFAULT),
4519
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4520
DROP_TO_FLOOR(),
4521
SET_FLOAT(oGraphYOffset, 110),
4522
CALL_NATIVE(bhv_snowmans_head_init),
4523
BEGIN_LOOP(),
4524
CALL_NATIVE(bhv_snowmans_head_loop),
4525
END_LOOP(),
4526
};
4527
4528
const BehaviorScript bhvSnowmansBodyCheckpoint[] = {
4529
BEGIN(OBJ_LIST_DEFAULT),
4530
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4531
BEGIN_LOOP(),
4532
CALL_NATIVE(bhv_snowmans_body_checkpoint_loop),
4533
END_LOOP(),
4534
};
4535
4536
const BehaviorScript bhvBigSnowmanWhole[] = {
4537
BEGIN(OBJ_LIST_GENACTOR),
4538
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4539
SET_FLOAT(oGraphYOffset, 180),
4540
SET_INTERACT_TYPE(INTERACT_TEXT),
4541
SET_HITBOX(/*Radius*/ 210, /*Height*/ 550),
4542
BEGIN_LOOP(),
4543
SET_INT(oIntangibleTimer, 0),
4544
END_LOOP(),
4545
};
4546
4547
const BehaviorScript bhvBigBoulder[] = {
4548
BEGIN(OBJ_LIST_GENACTOR),
4549
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4550
SET_FLOAT(oGraphYOffset, 180),
4551
CALL_NATIVE(bhv_big_boulder_init),
4552
SET_FLOAT(oCollisionDistance, 20000),
4553
BEGIN_LOOP(),
4554
SET_INT(oIntangibleTimer, 0),
4555
CALL_NATIVE(bhv_big_boulder_loop),
4556
END_LOOP(),
4557
};
4558
4559
const BehaviorScript bhvBigBoulderGenerator[] = {
4560
BEGIN(OBJ_LIST_DEFAULT),
4561
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4562
BEGIN_LOOP(),
4563
CALL_NATIVE(bhv_big_boulder_generator_loop),
4564
END_LOOP(),
4565
};
4566
4567
const BehaviorScript bhvWingCap[] = {
4568
BEGIN(OBJ_LIST_LEVEL),
4569
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4570
CALL_NATIVE(bhv_wing_cap_init),
4571
BEGIN_LOOP(),
4572
CALL_NATIVE(bhv_wing_vanish_cap_loop),
4573
END_LOOP(),
4574
};
4575
4576
const BehaviorScript bhvMetalCap[] = {
4577
BEGIN(OBJ_LIST_LEVEL),
4578
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4579
CALL_NATIVE(bhv_metal_cap_init),
4580
BEGIN_LOOP(),
4581
CALL_NATIVE(bhv_metal_cap_loop),
4582
END_LOOP(),
4583
};
4584
4585
const BehaviorScript bhvNormalCap[] = {
4586
BEGIN(OBJ_LIST_LEVEL),
4587
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4588
CALL_NATIVE(bhv_normal_cap_init),
4589
BEGIN_LOOP(),
4590
SET_INT(oIntangibleTimer, 0),
4591
CALL_NATIVE(bhv_normal_cap_loop),
4592
END_LOOP(),
4593
};
4594
4595
const BehaviorScript bhvVanishCap[] = {
4596
BEGIN(OBJ_LIST_LEVEL),
4597
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4598
CALL_NATIVE(bhv_vanish_cap_init),
4599
BEGIN_LOOP(),
4600
CALL_NATIVE(bhv_wing_vanish_cap_loop),
4601
END_LOOP(),
4602
};
4603
4604
const BehaviorScript bhvStar[] = {
4605
BEGIN(OBJ_LIST_LEVEL),
4606
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4607
CALL_NATIVE(bhv_init_room),
4608
CALL_NATIVE(bhv_collect_star_init),
4609
BEGIN_LOOP(),
4610
CALL_NATIVE(bhv_collect_star_loop),
4611
END_LOOP(),
4612
};
4613
4614
const BehaviorScript bhvStarSpawnCoordinates[] = {
4615
BEGIN(OBJ_LIST_LEVEL),
4616
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4617
CALL_NATIVE(bhv_collect_star_init),
4618
CALL_NATIVE(bhv_star_spawn_init),
4619
BEGIN_LOOP(),
4620
CALL_NATIVE(bhv_star_spawn_loop),
4621
END_LOOP(),
4622
};
4623
4624
const BehaviorScript bhvHiddenRedCoinStar[] = {
4625
BEGIN(OBJ_LIST_LEVEL),
4626
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4627
CALL_NATIVE(bhv_hidden_red_coin_star_init),
4628
BEGIN_LOOP(),
4629
CALL_NATIVE(bhv_hidden_red_coin_star_loop),
4630
END_LOOP(),
4631
};
4632
4633
const BehaviorScript bhvRedCoin[] = {
4634
BEGIN(OBJ_LIST_LEVEL),
4635
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4636
BILLBOARD(),
4637
SET_INT(oIntangibleTimer, 0),
4638
SET_INT(oAnimState, -1),
4639
CALL_NATIVE(bhv_init_room),
4640
CALL_NATIVE(bhv_red_coin_init),
4641
BEGIN_LOOP(),
4642
CALL_NATIVE(bhv_red_coin_loop),
4643
ADD_INT(oAnimState, 1),
4644
END_LOOP(),
4645
};
4646
4647
const BehaviorScript bhvBowserCourseRedCoinStar[] = {
4648
BEGIN(OBJ_LIST_LEVEL),
4649
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4650
BEGIN_LOOP(),
4651
CALL_NATIVE(bhv_bowser_course_red_coin_star_loop),
4652
END_LOOP(),
4653
};
4654
4655
const BehaviorScript bhvHiddenStar[] = {
4656
BEGIN(OBJ_LIST_LEVEL),
4657
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4658
CALL_NATIVE(bhv_hidden_star_init),
4659
BEGIN_LOOP(),
4660
CALL_NATIVE(bhv_hidden_star_loop),
4661
END_LOOP(),
4662
};
4663
4664
const BehaviorScript bhvHiddenStarTrigger[] = {
4665
BEGIN(OBJ_LIST_LEVEL),
4666
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4667
SET_HITBOX(/*Radius*/ 100, /*Height*/ 100),
4668
SET_INT(oIntangibleTimer, 0),
4669
BEGIN_LOOP(),
4670
CALL_NATIVE(bhv_hidden_star_trigger_loop),
4671
END_LOOP(),
4672
};
4673
4674
const BehaviorScript bhvTtmRollingLog[] = {
4675
BEGIN(OBJ_LIST_SURFACE),
4676
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4677
LOAD_COLLISION_DATA(ttm_seg7_collision_pitoune_2),
4678
SET_HOME(),
4679
SET_FLOAT(oCollisionDistance, 2000),
4680
CALL_NATIVE(bhv_ttm_rolling_log_init),
4681
BEGIN_LOOP(),
4682
CALL_NATIVE(bhv_rolling_log_loop),
4683
CALL_NATIVE(load_object_collision_model),
4684
END_LOOP(),
4685
};
4686
4687
const BehaviorScript bhvLllVolcanoFallingTrap[] = {
4688
BEGIN(OBJ_LIST_SURFACE),
4689
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4690
LOAD_COLLISION_DATA(lll_seg7_collision_falling_wall),
4691
SET_HOME(),
4692
BEGIN_LOOP(),
4693
CALL_NATIVE(bhv_volcano_trap_loop),
4694
CALL_NATIVE(load_object_collision_model),
4695
END_LOOP(),
4696
};
4697
4698
const BehaviorScript bhvLllRollingLog[] = {
4699
BEGIN(OBJ_LIST_SURFACE),
4700
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4701
LOAD_COLLISION_DATA(lll_seg7_collision_pitoune),
4702
SET_HOME(),
4703
SET_FLOAT(oCollisionDistance, 2000),
4704
CALL_NATIVE(bhv_lll_rolling_log_init),
4705
BEGIN_LOOP(),
4706
CALL_NATIVE(bhv_rolling_log_loop),
4707
CALL_NATIVE(load_object_collision_model),
4708
END_LOOP(),
4709
};
4710
4711
const BehaviorScript bhv1upWalking[] = {
4712
BEGIN(OBJ_LIST_LEVEL),
4713
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4714
BILLBOARD(),
4715
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4716
SET_FLOAT(oGraphYOffset, 30),
4717
CALL_NATIVE(bhv_1up_common_init),
4718
BEGIN_LOOP(),
4719
CALL_NATIVE(bhv_1up_walking_loop),
4720
END_LOOP(),
4721
};
4722
4723
const BehaviorScript bhv1upRunningAway[] = {
4724
BEGIN(OBJ_LIST_LEVEL),
4725
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4726
BILLBOARD(),
4727
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4728
SET_FLOAT(oGraphYOffset, 30),
4729
CALL_NATIVE(bhv_1up_common_init),
4730
BEGIN_LOOP(),
4731
CALL_NATIVE(bhv_1up_running_away_loop),
4732
END_LOOP(),
4733
};
4734
4735
const BehaviorScript bhv1upSliding[] = {
4736
BEGIN(OBJ_LIST_LEVEL),
4737
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4738
BILLBOARD(),
4739
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4740
SET_FLOAT(oGraphYOffset, 30),
4741
CALL_NATIVE(bhv_1up_common_init),
4742
BEGIN_LOOP(),
4743
SET_INT(oIntangibleTimer, 0),
4744
CALL_NATIVE(bhv_1up_sliding_loop),
4745
END_LOOP(),
4746
};
4747
4748
const BehaviorScript bhv1Up[] = {
4749
BEGIN(OBJ_LIST_LEVEL),
4750
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4751
BILLBOARD(),
4752
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4753
SET_FLOAT(oGraphYOffset, 30),
4754
CALL_NATIVE(bhv_1up_init),
4755
BEGIN_LOOP(),
4756
SET_INT(oIntangibleTimer, 0),
4757
CALL_NATIVE(bhv_1up_loop),
4758
END_LOOP(),
4759
};
4760
4761
const BehaviorScript bhv1upJumpOnApproach[] = {
4762
BEGIN(OBJ_LIST_LEVEL),
4763
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4764
BILLBOARD(),
4765
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4766
SET_FLOAT(oGraphYOffset, 30),
4767
CALL_NATIVE(bhv_1up_common_init),
4768
BEGIN_LOOP(),
4769
SET_INT(oIntangibleTimer, 0),
4770
CALL_NATIVE(bhv_1up_jump_on_approach_loop),
4771
END_LOOP(),
4772
};
4773
4774
const BehaviorScript bhvHidden1up[] = {
4775
BEGIN(OBJ_LIST_LEVEL),
4776
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4777
BILLBOARD(),
4778
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4779
SET_FLOAT(oGraphYOffset, 30),
4780
CALL_NATIVE(bhv_1up_common_init),
4781
BEGIN_LOOP(),
4782
SET_INT(oIntangibleTimer, 0),
4783
CALL_NATIVE(bhv_1up_hidden_loop),
4784
END_LOOP(),
4785
};
4786
4787
const BehaviorScript bhvHidden1upTrigger[] = {
4788
BEGIN(OBJ_LIST_LEVEL),
4789
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4790
SET_HITBOX(/*Radius*/ 100, /*Height*/ 100),
4791
SET_INT(oIntangibleTimer, 0),
4792
BEGIN_LOOP(),
4793
CALL_NATIVE(bhv_1up_hidden_trigger_loop),
4794
END_LOOP(),
4795
};
4796
4797
const BehaviorScript bhvHidden1upInPole[] = {
4798
BEGIN(OBJ_LIST_LEVEL),
4799
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4800
BILLBOARD(),
4801
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4802
SET_FLOAT(oGraphYOffset, 30),
4803
CALL_NATIVE(bhv_1up_common_init),
4804
BEGIN_LOOP(),
4805
SET_INT(oIntangibleTimer, 0),
4806
CALL_NATIVE(bhv_1up_hidden_in_pole_loop),
4807
END_LOOP(),
4808
};
4809
4810
const BehaviorScript bhvGreenDemon[] = {
4811
BEGIN(OBJ_LIST_LEVEL),
4812
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4813
BILLBOARD(),
4814
SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0),
4815
SET_FLOAT(oGraphYOffset, 30),
4816
CALL_NATIVE(bhv_1up_common_init),
4817
BEGIN_LOOP(),
4818
SET_INT(oIntangibleTimer, 0),
4819
CALL_NATIVE(bhv_1up_green_demon_loop),
4820
END_LOOP(),
4821
};
4822
4823
const BehaviorScript bhvHidden1upInPoleTrigger[] = {
4824
BEGIN(OBJ_LIST_LEVEL),
4825
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4826
SET_HITBOX(/*Radius*/ 100, /*Height*/ 100),
4827
SET_INT(oIntangibleTimer, 0),
4828
BEGIN_LOOP(),
4829
CALL_NATIVE(bhv_1up_hidden_in_pole_trigger_loop),
4830
END_LOOP(),
4831
};
4832
4833
const BehaviorScript bhvHidden1upInPoleSpawner[] = {
4834
BEGIN(OBJ_LIST_LEVEL),
4835
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4836
BEGIN_LOOP(),
4837
CALL_NATIVE(bhv_1up_hidden_in_pole_spawner_loop),
4838
END_LOOP(),
4839
};
4840
4841
const BehaviorScript bhvControllablePlatform[] = {
4842
BEGIN(OBJ_LIST_SURFACE),
4843
OR_INT(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_0020 | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4844
LOAD_COLLISION_DATA(hmc_seg7_collision_controllable_platform),
4845
SET_HOME(),
4846
CALL_NATIVE(bhv_controllable_platform_init),
4847
BEGIN_LOOP(),
4848
CALL_NATIVE(bhv_controllable_platform_loop),
4849
CALL_NATIVE(load_object_collision_model),
4850
END_LOOP(),
4851
};
4852
4853
const BehaviorScript bhvControllablePlatformSub[] = {
4854
BEGIN(OBJ_LIST_SURFACE),
4855
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4856
LOAD_COLLISION_DATA(hmc_seg7_collision_controllable_platform_sub),
4857
BEGIN_LOOP(),
4858
CALL_NATIVE(bhv_controllable_platform_sub_loop),
4859
CALL_NATIVE(load_object_collision_model),
4860
END_LOOP(),
4861
};
4862
4863
const BehaviorScript bhvBreakableBoxSmall[] = {
4864
BEGIN(OBJ_LIST_DESTRUCTIVE),
4865
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4866
DROP_TO_FLOOR(),
4867
SET_HOME(),
4868
CALL_NATIVE(bhv_breakable_box_small_init),
4869
BEGIN_LOOP(),
4870
SET_INT(oIntangibleTimer, 0),
4871
CALL_NATIVE(bhv_breakable_box_small_loop),
4872
END_LOOP(),
4873
};
4874
4875
const BehaviorScript bhvSlidingSnowMound[] = {
4876
BEGIN(OBJ_LIST_SURFACE),
4877
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4878
LOAD_COLLISION_DATA(sl_seg7_collision_sliding_snow_mound),
4879
SET_HOME(),
4880
BEGIN_LOOP(),
4881
CALL_NATIVE(bhv_sliding_snow_mound_loop),
4882
CALL_NATIVE(load_object_collision_model),
4883
END_LOOP(),
4884
};
4885
4886
const BehaviorScript bhvSnowMoundSpawn[] = {
4887
BEGIN(OBJ_LIST_DEFAULT),
4888
BEGIN_LOOP(),
4889
CALL_NATIVE(bhv_snow_mound_spawn_loop),
4890
END_LOOP(),
4891
};
4892
4893
const BehaviorScript bhvWdwSquareFloatingPlatform[] = {
4894
BEGIN(OBJ_LIST_SURFACE),
4895
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4896
LOAD_COLLISION_DATA(wdw_seg7_collision_square_floating_platform),
4897
SET_FLOAT(oFloatingPlatformUnkFC, 64),
4898
SET_HOME(),
4899
BEGIN_LOOP(),
4900
CALL_NATIVE(bhv_floating_platform_loop),
4901
CALL_NATIVE(load_object_collision_model),
4902
END_LOOP(),
4903
};
4904
4905
const BehaviorScript bhvWdwRectangularFloatingPlatform[] = {
4906
BEGIN(OBJ_LIST_SURFACE),
4907
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4908
LOAD_COLLISION_DATA(wdw_seg7_collision_rect_floating_platform),
4909
SET_FLOAT(oFloatingPlatformUnkFC, 64),
4910
SET_HOME(),
4911
BEGIN_LOOP(),
4912
CALL_NATIVE(bhv_floating_platform_loop),
4913
CALL_NATIVE(load_object_collision_model),
4914
END_LOOP(),
4915
};
4916
4917
const BehaviorScript bhvJrbFloatingPlatform[] = {
4918
BEGIN(OBJ_LIST_SURFACE),
4919
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4920
LOAD_COLLISION_DATA(jrb_seg7_collision_floating_platform),
4921
SET_FLOAT(oFloatingPlatformUnkFC, 64),
4922
SET_HOME(),
4923
BEGIN_LOOP(),
4924
CALL_NATIVE(bhv_floating_platform_loop),
4925
CALL_NATIVE(load_object_collision_model),
4926
END_LOOP(),
4927
};
4928
4929
const BehaviorScript bhvArrowLift[] = {
4930
BEGIN(OBJ_LIST_SURFACE),
4931
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4932
LOAD_COLLISION_DATA(wdw_seg7_collision_arrow_lift),
4933
SET_INT_RAND_RSHIFT(oArrowLiftUnk100, /*Minimum*/ 1, /*Right shift*/ 32),
4934
SET_HOME(),
4935
BEGIN_LOOP(),
4936
CALL_NATIVE(bhv_arrow_lift_loop),
4937
CALL_NATIVE(load_object_collision_model),
4938
END_LOOP(),
4939
};
4940
4941
const BehaviorScript bhvOrangeNumber[] = {
4942
BEGIN(OBJ_LIST_LEVEL),
4943
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4944
BILLBOARD(),
4945
SET_HOME(),
4946
CALL_NATIVE(bhv_orange_number_init),
4947
BEGIN_LOOP(),
4948
CALL_NATIVE(bhv_orange_number_loop),
4949
END_LOOP(),
4950
};
4951
4952
const BehaviorScript bhvMantaRay[] = {
4953
BEGIN(OBJ_LIST_GENACTOR),
4954
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4955
LOAD_ANIMATIONS(oAnimations, manta_seg5_anims_05008EB4),
4956
ANIMATE(0),
4957
CALL_NATIVE(bhv_manta_ray_init),
4958
BEGIN_LOOP(),
4959
SET_INT(oIntangibleTimer, 0),
4960
CALL_NATIVE(bhv_manta_ray_loop),
4961
END_LOOP(),
4962
};
4963
4964
const BehaviorScript bhvFallingPillar[] = {
4965
BEGIN(OBJ_LIST_GENACTOR),
4966
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
4967
SET_HOME(),
4968
CALL_NATIVE(bhv_falling_pillar_init),
4969
BEGIN_LOOP(),
4970
CALL_NATIVE(bhv_falling_pillar_loop),
4971
END_LOOP(),
4972
};
4973
4974
const BehaviorScript bhvFallingPillarHitbox[] = {
4975
BEGIN(OBJ_LIST_GENACTOR),
4976
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4977
SET_HOME(),
4978
BEGIN_LOOP(),
4979
CALL_NATIVE(bhv_falling_pillar_hitbox_loop),
4980
END_LOOP(),
4981
};
4982
4983
const BehaviorScript bhvPillarBase[] = {
4984
BEGIN(OBJ_LIST_SURFACE),
4985
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4986
LOAD_COLLISION_DATA(jrb_seg7_collision_pillar_base),
4987
BEGIN_LOOP(),
4988
CALL_NATIVE(load_object_collision_model),
4989
END_LOOP(),
4990
};
4991
4992
const BehaviorScript bhvJrbFloatingBox[] = {
4993
BEGIN(OBJ_LIST_SURFACE),
4994
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
4995
LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box),
4996
SET_HOME(),
4997
BEGIN_LOOP(),
4998
CALL_NATIVE(bhv_jrb_floating_box_loop),
4999
CALL_NATIVE(load_object_collision_model),
5000
END_LOOP(),
5001
};
5002
5003
const BehaviorScript bhvDecorativePendulum[] = {
5004
BEGIN(OBJ_LIST_DEFAULT),
5005
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5006
CALL_NATIVE(bhv_decorative_pendulum_init),
5007
BEGIN_LOOP(),
5008
CALL_NATIVE(bhv_decorative_pendulum_loop),
5009
END_LOOP(),
5010
};
5011
5012
const BehaviorScript bhvTreasureChestsShip[] = {
5013
BEGIN(OBJ_LIST_DEFAULT),
5014
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5015
DROP_TO_FLOOR(),
5016
CALL_NATIVE(bhv_treasure_chest_ship_init),
5017
BEGIN_LOOP(),
5018
CALL_NATIVE(bhv_treasure_chest_ship_loop),
5019
END_LOOP(),
5020
};
5021
5022
const BehaviorScript bhvTreasureChestsJrb[] = {
5023
BEGIN(OBJ_LIST_DEFAULT),
5024
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5025
DROP_TO_FLOOR(),
5026
CALL_NATIVE(bhv_treasure_chest_jrb_init),
5027
BEGIN_LOOP(),
5028
CALL_NATIVE(bhv_treasure_chest_jrb_loop),
5029
END_LOOP(),
5030
};
5031
5032
const BehaviorScript bhvTreasureChests[] = {
5033
BEGIN(OBJ_LIST_DEFAULT),
5034
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5035
DROP_TO_FLOOR(),
5036
CALL_NATIVE(bhv_treasure_chest_init),
5037
BEGIN_LOOP(),
5038
CALL_NATIVE(bhv_treasure_chest_loop),
5039
END_LOOP(),
5040
};
5041
5042
const BehaviorScript bhvTreasureChestBottom[] = {
5043
BEGIN(OBJ_LIST_GENACTOR),
5044
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5045
DROP_TO_FLOOR(),
5046
CALL_NATIVE(bhv_treasure_chest_bottom_init),
5047
SET_INT(oIntangibleTimer, -1),
5048
BEGIN_LOOP(),
5049
CALL_NATIVE(bhv_treasure_chest_bottom_loop),
5050
END_LOOP(),
5051
};
5052
5053
const BehaviorScript bhvTreasureChestTop[] = {
5054
BEGIN(OBJ_LIST_DEFAULT),
5055
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5056
SET_HOME(),
5057
BEGIN_LOOP(),
5058
CALL_NATIVE(bhv_treasure_chest_top_loop),
5059
END_LOOP(),
5060
};
5061
5062
const BehaviorScript bhvMips[] = {
5063
BEGIN(OBJ_LIST_GENACTOR),
5064
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5065
LOAD_ANIMATIONS(oAnimations, mips_seg6_anims_06015634),
5066
SET_INT(oInteractType, INTERACT_GRABBABLE),
5067
DROP_TO_FLOOR(),
5068
SET_HITBOX(/*Radius*/ 50, /*Height*/ 75),
5069
SET_INT(oIntangibleTimer, 0),
5070
CALL_NATIVE(bhv_mips_init),
5071
BEGIN_LOOP(),
5072
CALL_NATIVE(bhv_mips_loop),
5073
END_LOOP(),
5074
};
5075
5076
const BehaviorScript bhvYoshi[] = {
5077
BEGIN(OBJ_LIST_GENACTOR),
5078
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5079
LOAD_ANIMATIONS(oAnimations, yoshi_seg5_anims_05024100),
5080
SET_INTERACT_TYPE(INTERACT_TEXT),
5081
DROP_TO_FLOOR(),
5082
SET_HITBOX(/*Radius*/ 160, /*Height*/ 150),
5083
ANIMATE(0),
5084
SET_HOME(),
5085
CALL_NATIVE(bhv_yoshi_init),
5086
BEGIN_LOOP(),
5087
SET_INT(oIntangibleTimer, 0),
5088
CALL_NATIVE(bhv_yoshi_loop),
5089
END_LOOP(),
5090
};
5091
5092
const BehaviorScript bhvKoopa[] = {
5093
BEGIN(OBJ_LIST_PUSHABLE),
5094
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5095
DROP_TO_FLOOR(),
5096
LOAD_ANIMATIONS(oAnimations, koopa_seg6_anims_06011364),
5097
ANIMATE(9),
5098
SET_HOME(),
5099
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5100
SCALE(/*Unused*/ 0, /*Field*/ 150),
5101
SET_FLOAT(oKoopaAgility, 1),
5102
CALL_NATIVE(bhv_koopa_init),
5103
BEGIN_LOOP(),
5104
CALL_NATIVE(bhv_koopa_update),
5105
END_LOOP(),
5106
};
5107
5108
const BehaviorScript bhvKoopaRaceEndpoint[] = {
5109
BEGIN(OBJ_LIST_DEFAULT),
5110
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5111
DROP_TO_FLOOR(),
5112
SPAWN_CHILD_WITH_PARAM(/*Bhv param*/ 0, /*Model*/ MODEL_KOOPA_FLAG, /*Behavior*/ bhvKoopaFlag),
5113
BEGIN_LOOP(),
5114
CALL_NATIVE(bhv_koopa_race_endpoint_update),
5115
END_LOOP(),
5116
};
5117
5118
const BehaviorScript bhvKoopaFlag[] = {
5119
BEGIN(OBJ_LIST_POLELIKE),
5120
SET_INTERACT_TYPE(INTERACT_POLE),
5121
SET_HITBOX(/*Radius*/ 80, /*Height*/ 700),
5122
SET_INT(oIntangibleTimer, 0),
5123
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5124
DROP_TO_FLOOR(),
5125
LOAD_ANIMATIONS(oAnimations, koopa_flag_seg6_anims_06001028),
5126
ANIMATE(0),
5127
BEGIN_LOOP(),
5128
CALL_NATIVE(bhv_pole_base_loop),
5129
END_LOOP(),
5130
};
5131
5132
const BehaviorScript bhvPokey[] = {
5133
BEGIN(OBJ_LIST_GENACTOR),
5134
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5135
DROP_TO_FLOOR(),
5136
SET_HOME(),
5137
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5138
BEGIN_LOOP(),
5139
CALL_NATIVE(bhv_pokey_update),
5140
END_LOOP(),
5141
};
5142
5143
const BehaviorScript bhvPokeyBodyPart[] = {
5144
BEGIN(OBJ_LIST_GENACTOR),
5145
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5146
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5147
BILLBOARD(),
5148
BEGIN_LOOP(),
5149
CALL_NATIVE(bhv_pokey_body_part_update),
5150
END_LOOP(),
5151
};
5152
5153
const BehaviorScript bhvSwoop[] = {
5154
BEGIN(OBJ_LIST_GENACTOR),
5155
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5156
LOAD_ANIMATIONS(oAnimations, swoop_seg6_anims_060070D0),
5157
SET_HOME(),
5158
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
5159
CALL_NATIVE(bhv_init_room),
5160
SCALE(/*Unused*/ 0, /*Field*/ 0),
5161
BEGIN_LOOP(),
5162
CALL_NATIVE(bhv_swoop_update),
5163
END_LOOP(),
5164
};
5165
5166
const BehaviorScript bhvFlyGuy[] = {
5167
BEGIN(OBJ_LIST_GENACTOR),
5168
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5169
LOAD_ANIMATIONS(oAnimations, flyguy_seg8_anims_08011A64),
5170
ANIMATE(0),
5171
SET_HOME(),
5172
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0),
5173
CALL_NATIVE(bhv_init_room),
5174
SET_INT(oInteractionSubtype, INT_SUBTYPE_TWIRL_BOUNCE),
5175
SET_FLOAT(oGraphYOffset, 30),
5176
SCALE(/*Unused*/ 0, /*Field*/ 150),
5177
BEGIN_LOOP(),
5178
CALL_NATIVE(bhv_fly_guy_update),
5179
END_LOOP(),
5180
};
5181
5182
const BehaviorScript bhvGoomba[] = {
5183
BEGIN(OBJ_LIST_PUSHABLE),
5184
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5185
DROP_TO_FLOOR(),
5186
LOAD_ANIMATIONS(oAnimations, goomba_seg8_anims_0801DA4C),
5187
SET_HOME(),
5188
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
5189
CALL_NATIVE(bhv_goomba_init),
5190
BEGIN_LOOP(),
5191
CALL_NATIVE(bhv_goomba_update),
5192
END_LOOP(),
5193
};
5194
5195
const BehaviorScript bhvGoombaTripletSpawner[] = {
5196
BEGIN(OBJ_LIST_PUSHABLE),
5197
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5198
DROP_TO_FLOOR(),
5199
BEGIN_LOOP(),
5200
CALL_NATIVE(bhv_goomba_triplet_spawner_update),
5201
END_LOOP(),
5202
};
5203
5204
const BehaviorScript bhvChainChomp[] = {
5205
BEGIN(OBJ_LIST_GENACTOR),
5206
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5207
DROP_TO_FLOOR(),
5208
LOAD_ANIMATIONS(oAnimations, chain_chomp_seg6_anims_06025178),
5209
ANIMATE(0),
5210
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5211
HIDE(),
5212
SET_HOME(),
5213
SET_FLOAT(oGraphYOffset, 240),
5214
SCALE(/*Unused*/ 0, /*Field*/ 200),
5215
SPAWN_CHILD_WITH_PARAM(/*Bhv param*/ 0, /*Model*/ MODEL_WOODEN_POST, /*Behavior*/ bhvWoodenPost),
5216
BEGIN_LOOP(),
5217
CALL_NATIVE(bhv_chain_chomp_update),
5218
END_LOOP(),
5219
};
5220
5221
const BehaviorScript bhvChainChompChainPart[] = {
5222
BEGIN(OBJ_LIST_GENACTOR),
5223
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5224
BILLBOARD(),
5225
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5226
SET_FLOAT(oGraphYOffset, 40),
5227
SCALE(/*Unused*/ 0, /*Field*/ 200),
5228
BEGIN_LOOP(),
5229
CALL_NATIVE(bhv_chain_chomp_chain_part_update),
5230
END_LOOP(),
5231
};
5232
5233
const BehaviorScript bhvWoodenPost[] = {
5234
BEGIN(OBJ_LIST_SURFACE),
5235
LOAD_COLLISION_DATA(poundable_pole_collision_06002490),
5236
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5237
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5238
SET_INT(oNumLootCoins, 5),
5239
DROP_TO_FLOOR(),
5240
SET_HOME(),
5241
SCALE(/*Unused*/ 0, /*Field*/ 50),
5242
BEGIN_LOOP(),
5243
CALL_NATIVE(bhv_wooden_post_update),
5244
CALL_NATIVE(load_object_collision_model),
5245
END_LOOP(),
5246
};
5247
5248
const BehaviorScript bhvChainChompGate[] = {
5249
BEGIN(OBJ_LIST_SURFACE),
5250
LOAD_COLLISION_DATA(bob_seg7_collision_chain_chomp_gate),
5251
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5252
CALL_NATIVE(bhv_chain_chomp_gate_init),
5253
BEGIN_LOOP(),
5254
CALL_NATIVE(bhv_chain_chomp_gate_update),
5255
CALL_NATIVE(load_object_collision_model),
5256
END_LOOP(),
5257
};
5258
5259
const BehaviorScript bhvWigglerHead[] = {
5260
BEGIN(OBJ_LIST_GENACTOR),
5261
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5262
DROP_TO_FLOOR(),
5263
LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500EC8C),
5264
SET_HOME(),
5265
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5266
HIDE(),
5267
SCALE(/*Unused*/ 0, /*Field*/ 400),
5268
SET_FLOAT(oWigglerFallThroughFloorsHeight, 5000),
5269
BEGIN_LOOP(),
5270
CALL_NATIVE(bhv_wiggler_update),
5271
END_LOOP(),
5272
};
5273
5274
const BehaviorScript bhvWigglerBody[] = {
5275
BEGIN(OBJ_LIST_GENACTOR),
5276
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5277
LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500C874),
5278
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5279
SCALE(/*Unused*/ 0, /*Field*/ 400),
5280
BEGIN_LOOP(),
5281
CALL_NATIVE(bhv_wiggler_body_part_update),
5282
END_LOOP(),
5283
};
5284
5285
const BehaviorScript bhvEnemyLakitu[] = {
5286
BEGIN(OBJ_LIST_PUSHABLE),
5287
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5288
LOAD_ANIMATIONS(oAnimations, lakitu_enemy_seg5_anims_050144D4),
5289
ANIMATE(0),
5290
SET_HOME(),
5291
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5292
BEGIN_LOOP(),
5293
CALL_NATIVE(bhv_enemy_lakitu_update),
5294
END_LOOP(),
5295
};
5296
5297
const BehaviorScript bhvCameraLakitu[] = {
5298
BEGIN(OBJ_LIST_DEFAULT),
5299
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5300
LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8),
5301
ANIMATE(0),
5302
CALL_NATIVE(bhv_init_room),
5303
CALL_NATIVE(bhv_camera_lakitu_init),
5304
BEGIN_LOOP(),
5305
CALL_NATIVE(bhv_camera_lakitu_update),
5306
END_LOOP(),
5307
};
5308
5309
const BehaviorScript bhvCloud[] = {
5310
BEGIN(OBJ_LIST_DEFAULT),
5311
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5312
BILLBOARD(),
5313
SET_HOME(),
5314
SET_INT(oOpacity, 240),
5315
BEGIN_LOOP(),
5316
CALL_NATIVE(bhv_cloud_update),
5317
END_LOOP(),
5318
};
5319
5320
const BehaviorScript bhvCloudPart[] = {
5321
BEGIN(OBJ_LIST_DEFAULT),
5322
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5323
SET_INT(oOpacity, 240),
5324
BEGIN_LOOP(),
5325
CALL_NATIVE(bhv_cloud_part_update),
5326
END_LOOP(),
5327
};
5328
5329
const BehaviorScript bhvSpiny[] = {
5330
BEGIN(OBJ_LIST_PUSHABLE),
5331
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5332
LOAD_ANIMATIONS(oAnimations, spiny_seg5_anims_05016EAC),
5333
ANIMATE(0),
5334
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5335
BEGIN_LOOP(),
5336
CALL_NATIVE(bhv_spiny_update),
5337
END_LOOP(),
5338
};
5339
5340
const BehaviorScript bhvMontyMole[] = {
5341
BEGIN(OBJ_LIST_GENACTOR),
5342
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5343
DROP_TO_FLOOR(),
5344
LOAD_ANIMATIONS(oAnimations, monty_mole_seg5_anims_05007248),
5345
ANIMATE(3),
5346
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5347
HIDE(),
5348
SET_INT(oIntangibleTimer, -1),
5349
SET_FLOAT(oGraphYOffset, -60),
5350
SCALE(/*Unused*/ 0, /*Field*/ 150),
5351
DELAY(1),
5352
CALL_NATIVE(bhv_monty_mole_init),
5353
BEGIN_LOOP(),
5354
CALL_NATIVE(bhv_monty_mole_update),
5355
END_LOOP(),
5356
};
5357
5358
const BehaviorScript bhvMontyMoleHole[] = {
5359
BEGIN(OBJ_LIST_DEFAULT),
5360
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5361
DROP_TO_FLOOR(),
5362
SCALE(/*Unused*/ 0, /*Field*/ 150),
5363
BEGIN_LOOP(),
5364
CALL_NATIVE(bhv_monty_mole_hole_update),
5365
END_LOOP(),
5366
};
5367
5368
const BehaviorScript bhvMontyMoleRock[] = {
5369
BEGIN(OBJ_LIST_GENACTOR),
5370
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5371
BILLBOARD(),
5372
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5373
SET_FLOAT(oGraphYOffset, 10),
5374
SCALE(/*Unused*/ 0, /*Field*/ 200),
5375
BEGIN_LOOP(),
5376
CALL_NATIVE(bhv_monty_mole_rock_update),
5377
END_LOOP(),
5378
};
5379
5380
const BehaviorScript bhvPlatformOnTrack[] = {
5381
BEGIN(OBJ_LIST_SURFACE),
5382
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5383
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ -100, /*Bounciness*/ -50, /*Drag strength*/ 100, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5384
CALL_NATIVE(bhv_init_room),
5385
CALL_NATIVE(bhv_platform_on_track_init),
5386
BEGIN_LOOP(),
5387
CALL_NATIVE(bhv_platform_on_track_update),
5388
CALL_NATIVE(load_object_collision_model),
5389
END_LOOP(),
5390
};
5391
5392
const BehaviorScript bhvTrackBall[] = {
5393
BEGIN(OBJ_LIST_SURFACE),
5394
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5395
BILLBOARD(),
5396
CALL_NATIVE(bhv_init_room),
5397
SCALE(/*Unused*/ 0, /*Field*/ 15),
5398
BEGIN_LOOP(),
5399
CALL_NATIVE(bhv_track_ball_update),
5400
END_LOOP(),
5401
};
5402
5403
const BehaviorScript bhvSeesawPlatform[] = {
5404
BEGIN(OBJ_LIST_SURFACE),
5405
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5406
CALL_NATIVE(bhv_seesaw_platform_init),
5407
BEGIN_LOOP(),
5408
CALL_NATIVE(bhv_seesaw_platform_update),
5409
CALL_NATIVE(load_object_collision_model),
5410
END_LOOP(),
5411
};
5412
5413
const BehaviorScript bhvFerrisWheelAxle[] = {
5414
BEGIN(OBJ_LIST_SURFACE),
5415
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5416
ADD_INT(oMoveAngleYaw, 0x4000),
5417
CALL_NATIVE(bhv_ferris_wheel_axle_init),
5418
BEGIN_LOOP(),
5419
ADD_INT(oFaceAngleRoll, 400),
5420
CALL_NATIVE(load_object_collision_model),
5421
END_LOOP(),
5422
};
5423
5424
const BehaviorScript bhvFerrisWheelPlatform[] = {
5425
BEGIN(OBJ_LIST_SURFACE),
5426
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5427
BEGIN_LOOP(),
5428
CALL_NATIVE(bhv_ferris_wheel_platform_update),
5429
CALL_NATIVE(load_object_collision_model),
5430
END_LOOP(),
5431
};
5432
5433
const BehaviorScript bhvWaterBombSpawner[] = {
5434
BEGIN(OBJ_LIST_GENACTOR),
5435
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5436
DROP_TO_FLOOR(),
5437
BEGIN_LOOP(),
5438
CALL_NATIVE(bhv_water_bomb_spawner_update),
5439
END_LOOP(),
5440
};
5441
5442
const BehaviorScript bhvWaterBomb[] = {
5443
BEGIN(OBJ_LIST_GENACTOR),
5444
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5445
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 120, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5446
BEGIN_LOOP(),
5447
CALL_NATIVE(bhv_water_bomb_update),
5448
END_LOOP(),
5449
};
5450
5451
const BehaviorScript bhvWaterBombShadow[] = {
5452
BEGIN(OBJ_LIST_GENACTOR),
5453
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5454
SCALE(/*Unused*/ 0, /*Field*/ 150),
5455
BEGIN_LOOP(),
5456
CALL_NATIVE(bhv_water_bomb_shadow_update),
5457
END_LOOP(),
5458
};
5459
5460
const BehaviorScript bhvTTCRotatingSolid[] = {
5461
BEGIN(OBJ_LIST_SURFACE),
5462
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5463
SET_HOME(),
5464
SET_FLOAT(oCollisionDistance, 450),
5465
CALL_NATIVE(bhv_ttc_rotating_solid_init),
5466
SET_INT(oTTCRotatingSolidNumTurns, 1),
5467
BEGIN_LOOP(),
5468
CALL_NATIVE(bhv_ttc_rotating_solid_update),
5469
CALL_NATIVE(load_object_collision_model),
5470
END_LOOP(),
5471
};
5472
5473
const BehaviorScript bhvTTCPendulum[] = {
5474
BEGIN(OBJ_LIST_SURFACE),
5475
LOAD_COLLISION_DATA(ttc_seg7_collision_clock_pendulum),
5476
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5477
SET_FLOAT(oCollisionDistance, 1500),
5478
CALL_NATIVE(bhv_ttc_pendulum_init),
5479
SET_FLOAT(oTTCPendulumAccelDir, 1),
5480
BEGIN_LOOP(),
5481
CALL_NATIVE(bhv_ttc_pendulum_update),
5482
CALL_NATIVE(load_object_collision_model),
5483
END_LOOP(),
5484
};
5485
5486
const BehaviorScript bhvTTCTreadmill[] = {
5487
BEGIN(OBJ_LIST_SURFACE),
5488
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5489
SET_FLOAT(oCollisionDistance, 750),
5490
CALL_NATIVE(bhv_ttc_treadmill_init),
5491
DELAY(1),
5492
BEGIN_LOOP(),
5493
CALL_NATIVE(bhv_ttc_treadmill_update),
5494
CALL_NATIVE(cur_obj_compute_vel_xz),
5495
CALL_NATIVE(load_object_collision_model),
5496
END_LOOP(),
5497
};
5498
5499
const BehaviorScript bhvTTCMovingBar[] = {
5500
BEGIN(OBJ_LIST_SURFACE),
5501
LOAD_COLLISION_DATA(ttc_seg7_collision_sliding_surface),
5502
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5503
SET_HOME(),
5504
SET_FLOAT(oCollisionDistance, 550),
5505
CALL_NATIVE(bhv_ttc_moving_bar_init),
5506
BEGIN_LOOP(),
5507
CALL_NATIVE(bhv_ttc_moving_bar_update),
5508
CALL_NATIVE(load_object_collision_model),
5509
END_LOOP(),
5510
};
5511
5512
const BehaviorScript bhvTTCCog[] = {
5513
BEGIN(OBJ_LIST_SURFACE),
5514
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5515
SET_FLOAT(oCollisionDistance, 400),
5516
CALL_NATIVE(bhv_ttc_cog_init),
5517
BEGIN_LOOP(),
5518
CALL_NATIVE(bhv_ttc_cog_update),
5519
CALL_NATIVE(load_object_collision_model),
5520
END_LOOP(),
5521
};
5522
5523
const BehaviorScript bhvTTCPitBlock[] = {
5524
BEGIN(OBJ_LIST_SURFACE),
5525
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5526
SET_HOME(),
5527
SET_FLOAT(oCollisionDistance, 350),
5528
CALL_NATIVE(bhv_ttc_pit_block_init),
5529
BEGIN_LOOP(),
5530
CALL_NATIVE(bhv_ttc_pit_block_update),
5531
CALL_NATIVE(load_object_collision_model),
5532
END_LOOP(),
5533
};
5534
5535
const BehaviorScript bhvTTCElevator[] = {
5536
BEGIN(OBJ_LIST_SURFACE),
5537
LOAD_COLLISION_DATA(ttc_seg7_collision_clock_platform),
5538
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5539
SET_HOME(),
5540
SET_FLOAT(oCollisionDistance, 400),
5541
CALL_NATIVE(bhv_ttc_elevator_init),
5542
SET_FLOAT(oTTCElevatorDir, 1),
5543
BEGIN_LOOP(),
5544
CALL_NATIVE(bhv_ttc_elevator_update),
5545
CALL_NATIVE(load_object_collision_model),
5546
END_LOOP(),
5547
};
5548
5549
const BehaviorScript bhvTTC2DRotator[] = {
5550
BEGIN(OBJ_LIST_SURFACE),
5551
LOAD_COLLISION_DATA(ttc_seg7_collision_clock_main_rotation),
5552
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5553
SET_FLOAT(oCollisionDistance, 1800),
5554
CALL_NATIVE(bhv_ttc_2d_rotator_init),
5555
BEGIN_LOOP(),
5556
CALL_NATIVE(bhv_ttc_2d_rotator_update),
5557
END_LOOP(),
5558
};
5559
5560
const BehaviorScript bhvTTCSpinner[] = {
5561
BEGIN(OBJ_LIST_SURFACE),
5562
LOAD_COLLISION_DATA(ttc_seg7_collision_rotating_clock_platform2),
5563
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5564
SET_FLOAT(oCollisionDistance, 450),
5565
BEGIN_LOOP(),
5566
CALL_NATIVE(bhv_ttc_spinner_update),
5567
CALL_NATIVE(load_object_collision_model),
5568
END_LOOP(),
5569
};
5570
5571
const BehaviorScript bhvMrBlizzard[] = {
5572
BEGIN(OBJ_LIST_GENACTOR),
5573
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5574
DROP_TO_FLOOR(),
5575
LOAD_ANIMATIONS(oAnimations, snowman_seg5_anims_0500D118),
5576
ANIMATE(0),
5577
SET_HOME(),
5578
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5579
CALL_NATIVE(bhv_mr_blizzard_init),
5580
SET_FLOAT(oMrBlizzardScale, 1),
5581
BEGIN_LOOP(),
5582
CALL_NATIVE(bhv_mr_blizzard_update),
5583
END_LOOP(),
5584
};
5585
5586
const BehaviorScript bhvMrBlizzardSnowball[] = {
5587
BEGIN(OBJ_LIST_GENACTOR),
5588
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5589
BILLBOARD(),
5590
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -300, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5591
SCALE(/*Unused*/ 0, /*Field*/ 200),
5592
ADD_INT(oMoveAngleYaw, -0x5B58),
5593
SET_FLOAT(oForwardVel, 5),
5594
SET_FLOAT(oVelY, -1),
5595
SET_FLOAT(oGraphYOffset, 10),
5596
BEGIN_LOOP(),
5597
CALL_NATIVE(bhv_mr_blizzard_snowball),
5598
END_LOOP(),
5599
};
5600
5601
const BehaviorScript bhvSlidingPlatform2[] = {
5602
BEGIN(OBJ_LIST_SURFACE),
5603
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5604
SET_HOME(),
5605
CALL_NATIVE(bhv_sliding_plat_2_init),
5606
BEGIN_LOOP(),
5607
CALL_NATIVE(bhv_sliding_plat_2_loop),
5608
CALL_NATIVE(load_object_collision_model),
5609
END_LOOP(),
5610
};
5611
5612
const BehaviorScript bhvOctagonalPlatformRotating[] = {
5613
BEGIN(OBJ_LIST_SURFACE),
5614
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5615
CALL_NATIVE(bhv_rotating_octagonal_plat_init),
5616
BEGIN_LOOP(),
5617
CALL_NATIVE(bhv_rotating_octagonal_plat_loop),
5618
CALL_NATIVE(load_object_collision_model),
5619
END_LOOP(),
5620
};
5621
5622
const BehaviorScript bhvAnimatesOnFloorSwitchPress[] = {
5623
BEGIN(OBJ_LIST_SURFACE),
5624
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5625
SET_FLOAT(oCollisionDistance, 8000),
5626
CALL_NATIVE(bhv_animates_on_floor_switch_press_init),
5627
BEGIN_LOOP(),
5628
CALL_NATIVE(bhv_animates_on_floor_switch_press_loop),
5629
CALL_NATIVE(load_object_collision_model),
5630
END_LOOP(),
5631
};
5632
5633
const BehaviorScript bhvActivatedBackAndForthPlatform[] = {
5634
BEGIN(OBJ_LIST_SURFACE),
5635
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5636
SET_HOME(),
5637
CALL_NATIVE(bhv_activated_back_and_forth_platform_init),
5638
BEGIN_LOOP(),
5639
CALL_NATIVE(bhv_activated_back_and_forth_platform_update),
5640
CALL_NATIVE(load_object_collision_model),
5641
END_LOOP(),
5642
};
5643
5644
const BehaviorScript bhvRecoveryHeart[] = {
5645
BEGIN(OBJ_LIST_LEVEL),
5646
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5647
BEGIN_LOOP(),
5648
CALL_NATIVE(bhv_recovery_heart_loop),
5649
END_LOOP(),
5650
};
5651
5652
const BehaviorScript bhvWaterBombCannon[] = {
5653
BEGIN(OBJ_LIST_DEFAULT),
5654
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5655
BEGIN_LOOP(),
5656
CALL_NATIVE(bhv_water_bomb_cannon_loop),
5657
END_LOOP(),
5658
};
5659
5660
const BehaviorScript bhvCannonBarrelBubbles[] = {
5661
BEGIN(OBJ_LIST_DEFAULT),
5662
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5663
BEGIN_LOOP(),
5664
CALL_NATIVE(bhv_bubble_cannon_barrel_loop),
5665
END_LOOP(),
5666
};
5667
5668
const BehaviorScript bhvUnagi[] = {
5669
BEGIN(OBJ_LIST_GENACTOR),
5670
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5671
LOAD_ANIMATIONS(oAnimations, unagi_seg5_anims_05012824),
5672
ANIMATE(6),
5673
SET_HOME(),
5674
SCALE(/*Unused*/ 0, /*Field*/ 300),
5675
SET_FLOAT(oDrawingDistance, 6000),
5676
CALL_NATIVE(bhv_unagi_init),
5677
BEGIN_LOOP(),
5678
CALL_NATIVE(bhv_unagi_loop),
5679
END_LOOP(),
5680
};
5681
5682
const BehaviorScript bhvUnagiSubobject[] = {
5683
BEGIN(OBJ_LIST_GENACTOR),
5684
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5685
BEGIN_LOOP(),
5686
CALL_NATIVE(bhv_unagi_subobject_loop),
5687
END_LOOP(),
5688
};
5689
5690
const BehaviorScript bhvDorrie[] = {
5691
BEGIN(OBJ_LIST_SURFACE),
5692
LOAD_COLLISION_DATA(dorrie_seg6_collision_0600F644),
5693
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5694
LOAD_ANIMATIONS(oAnimations, dorrie_seg6_anims_0600F638),
5695
SET_HOME(),
5696
SET_FLOAT(oCollisionDistance, 30000),
5697
ADD_FLOAT(oPosX, 2000),
5698
CALL_NATIVE(bhv_init_room),
5699
BEGIN_LOOP(),
5700
CALL_NATIVE(bhv_dorrie_update),
5701
CALL_NATIVE(load_object_collision_model),
5702
END_LOOP(),
5703
};
5704
5705
const BehaviorScript bhvHauntedChair[] = {
5706
BEGIN(OBJ_LIST_GENACTOR),
5707
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5708
DROP_TO_FLOOR(),
5709
LOAD_ANIMATIONS(oAnimations, chair_seg5_anims_05005784),
5710
ANIMATE(0),
5711
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5712
SET_HOME(),
5713
CALL_NATIVE(bhv_init_room),
5714
CALL_NATIVE(bhv_haunted_chair_init),
5715
BEGIN_LOOP(),
5716
CALL_NATIVE(bhv_haunted_chair_loop),
5717
END_LOOP(),
5718
};
5719
5720
const BehaviorScript bhvMadPiano[] = {
5721
BEGIN(OBJ_LIST_GENACTOR),
5722
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5723
DROP_TO_FLOOR(),
5724
LOAD_ANIMATIONS(oAnimations, mad_piano_seg5_anims_05009B14),
5725
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5726
SET_HOME(),
5727
ADD_INT(oMoveAngleYaw, 0x4000),
5728
CALL_NATIVE(bhv_init_room),
5729
BEGIN_LOOP(),
5730
CALL_NATIVE(bhv_mad_piano_update),
5731
END_LOOP(),
5732
};
5733
5734
const BehaviorScript bhvFlyingBookend[] = {
5735
BEGIN(OBJ_LIST_GENACTOR),
5736
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5737
LOAD_ANIMATIONS(oAnimations, bookend_seg5_anims_05002540),
5738
ANIMATE(0),
5739
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5740
SET_INT(oMoveFlags, 0),
5741
SCALE(/*Unused*/ 0, /*Field*/ 70),
5742
CALL_NATIVE(bhv_init_room),
5743
BEGIN_LOOP(),
5744
CALL_NATIVE(bhv_flying_bookend_loop),
5745
END_LOOP(),
5746
};
5747
5748
const BehaviorScript bhvBookendSpawn[] = {
5749
BEGIN(OBJ_LIST_GENACTOR),
5750
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5751
CALL_NATIVE(bhv_init_room),
5752
BEGIN_LOOP(),
5753
CALL_NATIVE(bhv_bookend_spawn_loop),
5754
END_LOOP(),
5755
};
5756
5757
const BehaviorScript bhvHauntedBookshelfManager[] = {
5758
BEGIN(OBJ_LIST_GENACTOR),
5759
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5760
CALL_NATIVE(bhv_init_room),
5761
BEGIN_LOOP(),
5762
CALL_NATIVE(bhv_haunted_bookshelf_manager_loop),
5763
END_LOOP(),
5764
};
5765
5766
const BehaviorScript bhvBookSwitch[] = {
5767
BEGIN(OBJ_LIST_GENACTOR),
5768
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5769
SET_HOME(),
5770
SET_FLOAT(oGraphYOffset, 30),
5771
ADD_INT(oMoveAngleYaw, 0x4000),
5772
CALL_NATIVE(bhv_init_room),
5773
BEGIN_LOOP(),
5774
CALL_NATIVE(bhv_book_switch_loop),
5775
END_LOOP(),
5776
};
5777
5778
const BehaviorScript bhvFirePiranhaPlant[] = {
5779
BEGIN(OBJ_LIST_GENACTOR),
5780
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5781
DROP_TO_FLOOR(),
5782
LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C),
5783
ANIMATE(0),
5784
SET_HOME(),
5785
HIDE(),
5786
CALL_NATIVE(bhv_fire_piranha_plant_init),
5787
BEGIN_LOOP(),
5788
CALL_NATIVE(bhv_fire_piranha_plant_update),
5789
END_LOOP(),
5790
};
5791
5792
const BehaviorScript bhvSmallPiranhaFlame[] = {
5793
BEGIN(OBJ_LIST_GENACTOR),
5794
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5795
BILLBOARD(),
5796
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5797
BEGIN_LOOP(),
5798
CALL_NATIVE(bhv_small_piranha_flame_loop),
5799
ADD_INT(oAnimState, 1),
5800
END_LOOP(),
5801
};
5802
5803
const BehaviorScript bhvFireSpitter[] = {
5804
BEGIN(OBJ_LIST_GENACTOR),
5805
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5806
BILLBOARD(),
5807
SCALE(/*Unused*/ 0, /*Field*/ 40),
5808
BEGIN_LOOP(),
5809
CALL_NATIVE(bhv_fire_spitter_update),
5810
END_LOOP(),
5811
};
5812
5813
const BehaviorScript bhvFlyguyFlame[] = {
5814
BEGIN(OBJ_LIST_UNIMPORTANT),
5815
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5816
BILLBOARD(),
5817
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ 200, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5818
BEGIN_LOOP(),
5819
CALL_NATIVE(bhv_fly_guy_flame_loop),
5820
ADD_INT(oAnimState, 1),
5821
END_LOOP(),
5822
};
5823
5824
const BehaviorScript bhvSnufit[] = {
5825
BEGIN(OBJ_LIST_GENACTOR),
5826
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5827
SET_HOME(),
5828
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
5829
CALL_NATIVE(bhv_init_room),
5830
BEGIN_LOOP(),
5831
SET_INT(oSnufitRecoil, 0),
5832
CALL_NATIVE(bhv_snufit_loop),
5833
END_LOOP(),
5834
};
5835
5836
const BehaviorScript bhvSnufitBalls[] = {
5837
BEGIN(OBJ_LIST_GENACTOR),
5838
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5839
BILLBOARD(),
5840
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 10, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5841
CALL_NATIVE(bhv_init_room),
5842
SET_FLOAT(oGraphYOffset, 10),
5843
SCALE(/*Unused*/ 0, /*Field*/ 10),
5844
BEGIN_LOOP(),
5845
CALL_NATIVE(bhv_snufit_balls_loop),
5846
END_LOOP(),
5847
};
5848
5849
const BehaviorScript bhvHorizontalGrindel[] = {
5850
BEGIN(OBJ_LIST_SURFACE),
5851
LOAD_COLLISION_DATA(ssl_seg7_collision_grindel),
5852
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5853
DROP_TO_FLOOR(),
5854
SET_HOME(),
5855
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5856
SCALE(/*Unused*/ 0, /*Field*/ 90),
5857
CALL_NATIVE(bhv_horizontal_grindel_init),
5858
BEGIN_LOOP(),
5859
CALL_NATIVE(cur_obj_update_floor_and_walls),
5860
CALL_NATIVE(bhv_horizontal_grindel_update),
5861
CALL_NATIVE(load_object_collision_model),
5862
END_LOOP(),
5863
};
5864
5865
const BehaviorScript bhvEyerokBoss[] = {
5866
BEGIN(OBJ_LIST_GENACTOR),
5867
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5868
SET_HOME(),
5869
BEGIN_LOOP(),
5870
CALL_NATIVE(bhv_eyerok_boss_loop),
5871
END_LOOP(),
5872
};
5873
5874
const BehaviorScript bhvEyerokHand[] = {
5875
BEGIN(OBJ_LIST_SURFACE),
5876
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5877
LOAD_ANIMATIONS(oAnimations, eyerok_seg5_anims_050116E4),
5878
ANIMATE(6),
5879
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 150, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5880
SET_HOME(),
5881
SET_INT(oAnimState, 3),
5882
BEGIN_LOOP(),
5883
CALL_NATIVE(bhv_eyerok_hand_loop),
5884
END_LOOP(),
5885
};
5886
5887
const BehaviorScript bhvKlepto[] = {
5888
BEGIN(OBJ_LIST_GENACTOR),
5889
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5890
LOAD_ANIMATIONS(oAnimations, klepto_seg5_anims_05008CFC),
5891
ANIMATE(0),
5892
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 100, /*Gravity*/ 0, /*Bounciness*/ -20, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
5893
SET_HOME(),
5894
CALL_NATIVE(bhv_klepto_init),
5895
BEGIN_LOOP(),
5896
CALL_NATIVE(bhv_klepto_update),
5897
END_LOOP(),
5898
};
5899
5900
const BehaviorScript bhvBird[] = {
5901
BEGIN(OBJ_LIST_DEFAULT),
5902
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5903
LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8),
5904
ANIMATE(0),
5905
HIDE(),
5906
SCALE(/*Unused*/ 0, /*Field*/ 70),
5907
BEGIN_LOOP(),
5908
CALL_NATIVE(bhv_bird_update),
5909
END_LOOP(),
5910
};
5911
5912
const BehaviorScript bhvRacingPenguin[] = {
5913
BEGIN(OBJ_LIST_GENACTOR),
5914
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5915
LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
5916
ANIMATE(3),
5917
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 300, /*Gravity*/ -800, /*Bounciness*/ -5, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
5918
SCALE(/*Unused*/ 0, /*Field*/ 400),
5919
CALL_NATIVE(bhv_racing_penguin_init),
5920
BEGIN_LOOP(),
5921
CALL_NATIVE(bhv_racing_penguin_update),
5922
END_LOOP(),
5923
};
5924
5925
const BehaviorScript bhvPenguinRaceFinishLine[] = {
5926
BEGIN(OBJ_LIST_DEFAULT),
5927
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5928
BEGIN_LOOP(),
5929
CALL_NATIVE(bhv_penguin_race_finish_line_update),
5930
END_LOOP(),
5931
};
5932
5933
const BehaviorScript bhvPenguinRaceShortcutCheck[] = {
5934
BEGIN(OBJ_LIST_DEFAULT),
5935
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5936
BEGIN_LOOP(),
5937
CALL_NATIVE(bhv_penguin_race_shortcut_check_update),
5938
END_LOOP(),
5939
};
5940
5941
const BehaviorScript bhvCoffinSpawner[] = {
5942
BEGIN(OBJ_LIST_SURFACE),
5943
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5944
CALL_NATIVE(bhv_init_room),
5945
BEGIN_LOOP(),
5946
CALL_NATIVE(bhv_coffin_spawner_loop),
5947
END_LOOP(),
5948
};
5949
5950
const BehaviorScript bhvCoffin[] = {
5951
BEGIN(OBJ_LIST_SURFACE),
5952
LOAD_COLLISION_DATA(bbh_seg7_collision_coffin),
5953
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5954
SET_HOME(),
5955
CALL_NATIVE(bhv_init_room),
5956
BEGIN_LOOP(),
5957
CALL_NATIVE(bhv_coffin_loop),
5958
END_LOOP(),
5959
};
5960
5961
const BehaviorScript bhvClamShell[] = {
5962
BEGIN(OBJ_LIST_GENACTOR),
5963
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5964
DROP_TO_FLOOR(),
5965
LOAD_ANIMATIONS(oAnimations, clam_shell_seg5_anims_05001744),
5966
SET_FLOAT(oGraphYOffset, 10),
5967
BEGIN_LOOP(),
5968
CALL_NATIVE(bhv_clam_loop),
5969
END_LOOP(),
5970
};
5971
5972
const BehaviorScript bhvSkeeter[] = {
5973
BEGIN(OBJ_LIST_GENACTOR),
5974
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
5975
LOAD_ANIMATIONS(oAnimations, skeeter_seg6_anims_06007DE0),
5976
SET_HOME(),
5977
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 180, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 1200, /*Unused*/ 0, 0),
5978
BEGIN_LOOP(),
5979
CALL_NATIVE(bhv_skeeter_update),
5980
END_LOOP(),
5981
};
5982
5983
const BehaviorScript bhvSkeeterWave[] = {
5984
BEGIN(OBJ_LIST_UNIMPORTANT),
5985
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5986
BEGIN_LOOP(),
5987
CALL_NATIVE(bhv_skeeter_wave_update),
5988
END_LOOP(),
5989
};
5990
5991
const BehaviorScript bhvSwingPlatform[] = {
5992
BEGIN(OBJ_LIST_SURFACE),
5993
LOAD_COLLISION_DATA(rr_seg7_collision_pendulum),
5994
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
5995
SET_FLOAT(oCollisionDistance, 2000),
5996
CALL_NATIVE(bhv_swing_platform_init),
5997
BEGIN_LOOP(),
5998
CALL_NATIVE(bhv_swing_platform_update),
5999
CALL_NATIVE(load_object_collision_model),
6000
END_LOOP(),
6001
};
6002
6003
const BehaviorScript bhvDonutPlatformSpawner[] = {
6004
BEGIN(OBJ_LIST_SPAWNER),
6005
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
6006
BEGIN_LOOP(),
6007
CALL_NATIVE(bhv_donut_platform_spawner_update),
6008
END_LOOP(),
6009
};
6010
6011
const BehaviorScript bhvDonutPlatform[] = {
6012
BEGIN(OBJ_LIST_SURFACE),
6013
LOAD_COLLISION_DATA(rr_seg7_collision_donut_platform),
6014
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
6015
SET_HOME(),
6016
BEGIN_LOOP(),
6017
CALL_NATIVE(bhv_donut_platform_update),
6018
END_LOOP(),
6019
};
6020
6021
const BehaviorScript bhvDDDPole[] = {
6022
BEGIN(OBJ_LIST_POLELIKE),
6023
SET_INTERACT_TYPE(INTERACT_POLE),
6024
SET_HITBOX(/*Radius*/ 80, /*Height*/ 800),
6025
SET_INT(oIntangibleTimer, 0),
6026
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
6027
SET_HOME(),
6028
CALL_NATIVE(bhv_ddd_pole_init),
6029
SET_FLOAT(oDDDPoleVel, 10),
6030
BEGIN_LOOP(),
6031
CALL_NATIVE(bhv_ddd_pole_update),
6032
CALL_NATIVE(bhv_pole_base_loop),
6033
END_LOOP(),
6034
};
6035
6036
const BehaviorScript bhvRedCoinStarMarker[] = {
6037
BEGIN(OBJ_LIST_DEFAULT),
6038
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
6039
DROP_TO_FLOOR(),
6040
SCALE(/*Unused*/ 0, /*Field*/ 150),
6041
SET_INT(oFaceAnglePitch, 0x4000),
6042
ADD_FLOAT(oPosY, 60),
6043
CALL_NATIVE(bhv_red_coin_star_marker_init),
6044
BEGIN_LOOP(),
6045
ADD_INT(oFaceAngleYaw, 0x100),
6046
END_LOOP(),
6047
};
6048
6049
const BehaviorScript bhvTripletButterfly[] = {
6050
BEGIN(OBJ_LIST_GENACTOR),
6051
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
6052
LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0),
6053
ANIMATE(0),
6054
HIDE(),
6055
SET_HOME(),
6056
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
6057
SET_FLOAT(oTripletButterflyScale, 1),
6058
BEGIN_LOOP(),
6059
CALL_NATIVE(bhv_triplet_butterfly_update),
6060
END_LOOP(),
6061
};
6062
6063
const BehaviorScript bhvBubba[] = {
6064
BEGIN(OBJ_LIST_GENACTOR),
6065
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
6066
SET_HOME(),
6067
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 200, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
6068
SCALE(/*Unused*/ 0, /*Field*/ 50),
6069
BEGIN_LOOP(),
6070
CALL_NATIVE(bhv_bubba_loop),
6071
END_LOOP(),
6072
};
6073
6074
const BehaviorScript bhvBeginningLakitu[] = {
6075
BEGIN(OBJ_LIST_DEFAULT),
6076
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
6077
LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8),
6078
ANIMATE(0),
6079
SET_FLOAT(oOpacity, 0),
6080
BEGIN_LOOP(),
6081
CALL_NATIVE(bhv_intro_lakitu_loop),
6082
END_LOOP(),
6083
};
6084
6085
const BehaviorScript bhvBeginningPeach[] = {
6086
BEGIN(OBJ_LIST_DEFAULT),
6087
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
6088
LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C),
6089
ANIMATE(0),
6090
BEGIN_LOOP(),
6091
CALL_NATIVE(bhv_intro_peach_loop),
6092
END_LOOP(),
6093
};
6094
6095
const BehaviorScript bhvEndBirds1[] = {
6096
BEGIN(OBJ_LIST_DEFAULT),
6097
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
6098
LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8),
6099
ANIMATE(0),
6100
BEGIN_LOOP(),
6101
CALL_NATIVE(bhv_end_birds_1_loop),
6102
END_LOOP(),
6103
};
6104
6105
const BehaviorScript bhvEndBirds2[] = {
6106
BEGIN(OBJ_LIST_DEFAULT),
6107
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
6108
LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8),
6109
ANIMATE(0),
6110
BEGIN_LOOP(),
6111
CALL_NATIVE(bhv_end_birds_2_loop),
6112
END_LOOP(),
6113
};
6114
6115
const BehaviorScript bhvIntroScene[] = {
6116
BEGIN(OBJ_LIST_DEFAULT),
6117
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
6118
BEGIN_LOOP(),
6119
CALL_NATIVE(bhv_intro_scene_loop),
6120
END_LOOP(),
6121
};
6122