mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-01-09 08:22:26 +00:00
Added ability for Lua to spawn non-synchronized objects
This commit is contained in:
parent
3641d5404e
commit
d03aacc144
67 changed files with 526 additions and 371 deletions
|
|
@ -66,7 +66,7 @@ override_field_immutable = {
|
|||
"Character": [ "*" ],
|
||||
"NetworkPlayer": [ "*" ],
|
||||
"TextureInfo": [ "*" ],
|
||||
"Object": ["oSyncID", "createdThroughNetwork"],
|
||||
"Object": ["oSyncID", "coopFlags"],
|
||||
"GlobalObjectAnimations": [ "*"],
|
||||
"SpawnParticlesInfo": [ "model" ],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2685,6 +2685,9 @@
|
|||
- ANIM_FLAG_HOR_TRANS
|
||||
- ANIM_FLAG_NOLOOP
|
||||
- ANIM_FLAG_VERT_TRANS
|
||||
- COOP_OBJ_FLAG_LUA
|
||||
- COOP_OBJ_FLAG_NETWORK
|
||||
- COOP_OBJ_FLAG_NON_SYNC
|
||||
- MAX_PLAYERS
|
||||
- PLAY_MODE_CHANGE_AREA
|
||||
- PLAY_MODE_CHANGE_LEVEL
|
||||
|
|
|
|||
|
|
@ -636,6 +636,7 @@
|
|||
- [obj_has_behavior_id](#obj_has_behavior_id)
|
||||
- [obj_has_model_extended](#obj_has_model_extended)
|
||||
- [obj_set_model_extended](#obj_set_model_extended)
|
||||
- [spawn_non_sync_object](#spawn_non_sync_object)
|
||||
- [spawn_sync_object](#spawn_sync_object)
|
||||
|
||||
<br />
|
||||
|
|
@ -11698,6 +11699,31 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
|
|||
|
||||
<br />
|
||||
|
||||
## [spawn_non_sync_object](#spawn_non_sync_object)
|
||||
|
||||
### Lua Example
|
||||
`local ObjectValue = spawn_non_sync_object(behaviorId, modelId, x, y, z, objSetupFunction)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| behaviorId | [enum BehaviorId](constants.md#enum-BehaviorId) |
|
||||
| modelId | [enum ModelExtendedId](constants.md#enum-ModelExtendedId) |
|
||||
| x | `number` |
|
||||
| y | `number` |
|
||||
| z | `number` |
|
||||
| objSetupFunction | `Lua Function` () |
|
||||
|
||||
### Returns
|
||||
[Object](structs.md#Object)
|
||||
|
||||
### C Prototype
|
||||
`struct Object* spawn_non_sync_object(enum BehaviorId behaviorId, enum ModelExtendedId modelId, f32 x, f32 y, f32 z, LuaFunction objSetupFunction);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [spawn_sync_object](#spawn_sync_object)
|
||||
|
||||
### Lua Example
|
||||
|
|
|
|||
|
|
@ -747,7 +747,7 @@
|
|||
| bhvDelayTimer | `integer` | |
|
||||
| bhvStackIndex | `integer` | |
|
||||
| collidedObjInteractTypes | `integer` | |
|
||||
| createdThroughNetwork | `integer` | read-only |
|
||||
| coopFlags | `integer` | read-only |
|
||||
| curBhvCommand | `Pointer` <`BehaviorScript`> | read-only |
|
||||
| globalPlayerIndex | `integer` | |
|
||||
| header | [ObjectNode](structs.md#ObjectNode) | read-only |
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
#define BAD_RETURN(cmd) cmd
|
||||
#endif
|
||||
|
||||
|
||||
struct Controller
|
||||
{
|
||||
/*0x00*/ s16 rawStickX; //
|
||||
|
|
@ -224,7 +223,7 @@ struct Object
|
|||
/*0x218*/ void *collisionData;
|
||||
/*0x21C*/ Mat4 transform;
|
||||
/*0x25C*/ void *respawnInfo;
|
||||
/*?????*/ u8 createdThroughNetwork;
|
||||
/*?????*/ u8 coopFlags;
|
||||
/*?????*/ enum AreaTimerType areaTimerType;
|
||||
/*?????*/ u32 areaTimer;
|
||||
/*?????*/ u32 areaTimerDuration;
|
||||
|
|
@ -410,6 +409,10 @@ struct TextureInfo
|
|||
|
||||
#define MAX_PLAYERS 16
|
||||
|
||||
#define COOP_OBJ_FLAG_NETWORK (1 << 0)
|
||||
#define COOP_OBJ_FLAG_LUA (1 << 1)
|
||||
#define COOP_OBJ_FLAG_NON_SYNC (1 << 2)
|
||||
|
||||
#include "src/game/characters.h"
|
||||
|
||||
#endif // _SM64_TYPES_H_
|
||||
|
|
|
|||
|
|
@ -785,7 +785,7 @@ static s32 bhv_cmd_load_collision_data(void) {
|
|||
// Command 0x2D: Sets the home position of the object to its current position.
|
||||
// Usage: SET_HOME()
|
||||
static s32 bhv_cmd_set_home(void) {
|
||||
if (!gCurrentObject->createdThroughNetwork) {
|
||||
if (!(gCurrentObject->coopFlags & (COOP_OBJ_FLAG_LUA | COOP_OBJ_FLAG_NETWORK))) {
|
||||
gCurrentObject->oHomeX = gCurrentObject->oPosX;
|
||||
gCurrentObject->oHomeY = gCurrentObject->oPosY;
|
||||
gCurrentObject->oHomeZ = gCurrentObject->oPosZ;
|
||||
|
|
|
|||
|
|
@ -41,9 +41,7 @@ void bobomb_act_explode(void) {
|
|||
}
|
||||
|
||||
bobomb_spawn_coin();
|
||||
if (!o->createdThroughNetwork) {
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
}
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
}
|
||||
}
|
||||
|
|
@ -133,15 +131,13 @@ void generic_bobomb_free_loop(void) {
|
|||
break;
|
||||
|
||||
case BOBOMB_ACT_LAVA_DEATH:
|
||||
if (obj_lava_death() == 1 && !o->createdThroughNetwork)
|
||||
if (obj_lava_death() == 1)
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
break;
|
||||
|
||||
case BOBOMB_ACT_DEATH_PLANE_DEATH:
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
if (!o->createdThroughNetwork) {
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
}
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -162,15 +158,13 @@ void stationary_bobomb_free_loop(void) {
|
|||
break;
|
||||
|
||||
case BOBOMB_ACT_LAVA_DEATH:
|
||||
if (obj_lava_death() == 1 && !o->createdThroughNetwork)
|
||||
if (obj_lava_death() == 1)
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
break;
|
||||
|
||||
case BOBOMB_ACT_DEATH_PLANE_DEATH:
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
if (!o->createdThroughNetwork) {
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
}
|
||||
create_respawner(MODEL_BLACK_BOBOMB, bhvBobomb, 3000);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ static u8 boo_ignore_update(void) {
|
|||
|
||||
struct SyncObject* boo_network_init_object(void) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
if (so == NULL) { return NULL; }
|
||||
so->ignore_if_true = boo_ignore_update;
|
||||
network_init_object_field(o, &o->oBooBaseScale);
|
||||
network_init_object_field(o, &o->oBooNegatedAggressiveness);
|
||||
|
|
@ -536,7 +537,7 @@ void bhv_boo_loop(void) {
|
|||
if (o->oAction < 3) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = boo_network_init_object();
|
||||
so->syncDeathEvent = FALSE;
|
||||
if (so) { so->syncDeathEvent = FALSE; }
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
@ -764,9 +765,11 @@ void bhv_big_boo_loop(void) {
|
|||
if (!network_sync_object_initialized(o)) {
|
||||
bigBooActivated = FALSE;
|
||||
struct SyncObject* so = boo_network_init_object();
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->ignore_if_true = big_boo_ignore_update;
|
||||
so->on_forget = big_boo_on_forget;
|
||||
if (so) {
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->ignore_if_true = big_boo_ignore_update;
|
||||
so->on_forget = big_boo_on_forget;
|
||||
}
|
||||
}
|
||||
} else if (o->oHealth <= 0) {
|
||||
if (network_sync_object_initialized(o)) {
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ static void bhv_boo_cage_on_received_post(UNUSED u8 localIndex) {
|
|||
|
||||
void bhv_boo_cage_init(void) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
if (so == NULL) { return; }
|
||||
so->on_received_post = bhv_boo_cage_on_received_post;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
|
|
|
|||
|
|
@ -35,10 +35,12 @@ void bhv_bouncing_fireball_override_ownership(u8* shouldOverride, u8* shouldOwn)
|
|||
void bhv_bouncing_fireball_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->override_ownership = bhv_bouncing_fireball_override_ownership;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
if (so) {
|
||||
so->override_ownership = bhv_bouncing_fireball_override_ownership;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
}
|
||||
}
|
||||
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
|
|
|
|||
|
|
@ -254,7 +254,9 @@ void bhv_bob_pit_bowling_ball_init(void) {
|
|||
o->oBuoyancy = 2.0f;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 5000.0f);
|
||||
so->maxUpdateRate = 5.0f;
|
||||
if (so) {
|
||||
so->maxUpdateRate = 5.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void bhv_bob_pit_bowling_ball_loop(void) {
|
||||
|
|
|
|||
|
|
@ -1352,12 +1352,14 @@ void bhv_bowser_init(void) {
|
|||
o->oBowserEyesShut = 0;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 8000.0f);
|
||||
so->override_ownership = bhv_bowser_override_ownership;
|
||||
so->ignore_if_true = bhv_bowser_ignore_if_true;
|
||||
so->fullObjectSync = TRUE;
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
network_init_object_field(o, &networkBowserAnimationIndex);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
if (so) {
|
||||
so->override_ownership = bhv_bowser_override_ownership;
|
||||
so->ignore_if_true = bhv_bowser_ignore_if_true;
|
||||
so->fullObjectSync = TRUE;
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
network_init_object_field(o, &networkBowserAnimationIndex);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
}
|
||||
}
|
||||
|
||||
#undef BITDW
|
||||
|
|
@ -1591,10 +1593,12 @@ u8 bhv_falling_bowser_platform_ignore_if_true(void) {
|
|||
void bhv_falling_bowser_platform_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->ignore_if_true = bhv_falling_bowser_platform_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_falling_bowser_platform_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
}
|
||||
}
|
||||
|
||||
cur_obj_call_action_function(sFallingBowserPlatformActions);
|
||||
|
|
|
|||
|
|
@ -31,8 +31,10 @@ void bhv_bowser_bomb_loop(void) {
|
|||
if (!network_sync_object_initialized(o)) {
|
||||
networkBowserBombHit = 0;
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->syncDeathEvent = FALSE;
|
||||
network_init_object_field(o, &networkBowserBombHit);
|
||||
if (so) {
|
||||
so->syncDeathEvent = FALSE;
|
||||
network_init_object_field(o, &networkBowserBombHit);
|
||||
}
|
||||
}
|
||||
|
||||
struct MarioState* marioState = nearest_mario_state_to_object(o);
|
||||
|
|
|
|||
|
|
@ -73,9 +73,7 @@ void breakable_box_small_released_loop(void) {
|
|||
|
||||
// Despawn, and create a corkbox respawner
|
||||
if (o->oBreakableBoxSmallFramesSinceReleased > 900) {
|
||||
if (!o->createdThroughNetwork) {
|
||||
create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);
|
||||
}
|
||||
create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
}
|
||||
}
|
||||
|
|
@ -92,9 +90,7 @@ void breakable_box_small_idle_loop(void) {
|
|||
|
||||
case 101:
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
if (!o->createdThroughNetwork) {
|
||||
create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);
|
||||
}
|
||||
create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,16 +39,18 @@ static void bhv_bully_override_ownership(u8* shouldOverride, u8* shouldOwn) {
|
|||
|
||||
static void bhv_bully_network_init(void) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
network_init_object_field(o, &o->oBullyKBTimerAndMinionKOCounter);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oBullyPrevX);
|
||||
network_init_object_field(o, &o->oBullyPrevY);
|
||||
network_init_object_field(o, &o->oBullyPrevZ);
|
||||
network_init_object_field(o, &o->oBullyMarioCollisionAngle);
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->ignore_if_true = bhv_bully_ignore_if_true;
|
||||
so->override_ownership = bhv_bully_override_ownership;
|
||||
if (so) {
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
network_init_object_field(o, &o->oBullyKBTimerAndMinionKOCounter);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oBullyPrevX);
|
||||
network_init_object_field(o, &o->oBullyPrevY);
|
||||
network_init_object_field(o, &o->oBullyPrevZ);
|
||||
network_init_object_field(o, &o->oBullyMarioCollisionAngle);
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->ignore_if_true = bhv_bully_ignore_if_true;
|
||||
so->override_ownership = bhv_bully_override_ownership;
|
||||
}
|
||||
}
|
||||
|
||||
void bhv_small_bully_init(void) {
|
||||
|
|
|
|||
|
|
@ -40,17 +40,19 @@ void bhv_camera_lakitu_init(void) {
|
|||
lakituTargetLocalIndex = UNKNOWN_LOCAL_INDEX;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->ignore_if_true = bhv_camera_lakitu_ignore_if_true;
|
||||
so->override_ownership = bhv_camera_lakitu_override_ownership;
|
||||
so->on_received_post = bhv_camera_lakitu_on_received_post;
|
||||
network_init_object_field(o, &o->oAngleVelPitch);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oCameraLakituBlinkTimer);
|
||||
network_init_object_field(o, &o->oCameraLakituSpeed);
|
||||
network_init_object_field(o, &o->oCameraLakituCircleRadius);
|
||||
network_init_object_field(o, &o->oCameraLakituFinishedDialog);
|
||||
network_init_object_field(o, &o->oCameraLakituUnk104);
|
||||
network_init_object_field(o, &o->oCameraLakituPitchVel);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_camera_lakitu_ignore_if_true;
|
||||
so->override_ownership = bhv_camera_lakitu_override_ownership;
|
||||
so->on_received_post = bhv_camera_lakitu_on_received_post;
|
||||
network_init_object_field(o, &o->oAngleVelPitch);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oCameraLakituBlinkTimer);
|
||||
network_init_object_field(o, &o->oCameraLakituSpeed);
|
||||
network_init_object_field(o, &o->oCameraLakituCircleRadius);
|
||||
network_init_object_field(o, &o->oCameraLakituFinishedDialog);
|
||||
network_init_object_field(o, &o->oCameraLakituUnk104);
|
||||
network_init_object_field(o, &o->oCameraLakituPitchVel);
|
||||
}
|
||||
}
|
||||
|
||||
static u8 camera_lakitu_intro_act_trigger_cutscene_continue_dialog(void) {
|
||||
|
|
|
|||
|
|
@ -215,18 +215,20 @@ void bhv_cannon_override_ownership(u8* shouldOverride, u8* shouldOwn) {
|
|||
void bhv_cannon_base_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->on_received_post = cannon_on_received_post;
|
||||
so->override_ownership = bhv_cannon_override_ownership;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oCannonUnk10C);
|
||||
network_init_object_field(o, &o->oCannonUnk10C);
|
||||
network_init_object_field(o, &o->oCannonUnkF8);
|
||||
network_init_object_field(o, &o->oCannonUnkF4);
|
||||
if (so) {
|
||||
so->on_received_post = cannon_on_received_post;
|
||||
so->override_ownership = bhv_cannon_override_ownership;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oCannonUnk10C);
|
||||
network_init_object_field(o, &o->oCannonUnk10C);
|
||||
network_init_object_field(o, &o->oCannonUnkF8);
|
||||
network_init_object_field(o, &o->oCannonUnkF4);
|
||||
}
|
||||
}
|
||||
|
||||
bhv_cannon_base_sanity_check();
|
||||
|
|
|
|||
|
|
@ -464,9 +464,11 @@ static void chain_chomp_act_unload_chain(void) {
|
|||
void bhv_chain_chomp_update(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 1000.0f);
|
||||
so->syncDeathEvent = FALSE;
|
||||
network_init_object_field(o, &o->oChainChompUnk104);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
if (so) {
|
||||
so->syncDeathEvent = FALSE;
|
||||
network_init_object_field(o, &o->oChainChompUnk104);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
}
|
||||
}
|
||||
|
||||
switch (o->oAction) {
|
||||
|
|
|
|||
|
|
@ -56,6 +56,10 @@ void bhv_respawner_loop(void) {
|
|||
}
|
||||
|
||||
void create_respawner(s32 model, const BehaviorScript *behToSpawn, s32 minSpawnDist) {
|
||||
if (!(o->coopFlags & COOP_OBJ_FLAG_LUA)) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct Object *respawner = spawn_object_abs_with_rot(o, 0, MODEL_NONE, bhvRespawner, o->oHomeX,
|
||||
o->oHomeY, o->oHomeZ, 0, 0, 0);
|
||||
u8 syncID = o->oSyncID;
|
||||
|
|
|
|||
|
|
@ -165,13 +165,15 @@ void bhv_dorrie_update(void) {
|
|||
if (!network_sync_object_initialized(o)) {
|
||||
for (int i = 0; i < MAX_PLAYERS; i++) { dorrieLiftingPlayer[i] = FALSE; }
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->ignore_if_true = bhv_dorrie_ignore_if_true;
|
||||
network_init_object_field(o, &o->oDorrieOffsetY);
|
||||
network_init_object_field(o, &o->oDorrieVelY);
|
||||
network_init_object_field(o, &o->oDorrieYawVel);
|
||||
network_init_object_field(o, &o->oDorrieLiftingMario);
|
||||
network_init_object_field(o, &o->oDorrieNeckAngle);
|
||||
network_init_object_field(o, &o->oAngleVelYaw);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_dorrie_ignore_if_true;
|
||||
network_init_object_field(o, &o->oDorrieOffsetY);
|
||||
network_init_object_field(o, &o->oDorrieVelY);
|
||||
network_init_object_field(o, &o->oDorrieYawVel);
|
||||
network_init_object_field(o, &o->oDorrieLiftingMario);
|
||||
network_init_object_field(o, &o->oDorrieNeckAngle);
|
||||
network_init_object_field(o, &o->oAngleVelYaw);
|
||||
}
|
||||
}
|
||||
|
||||
f32 boundsShift;
|
||||
|
|
|
|||
|
|
@ -197,9 +197,11 @@ void (*sExclamationBoxActions[])(void) = { exclamation_box_act_0, exclamation_bo
|
|||
|
||||
void bhv_exclamation_box_init(void) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->syncDeathEvent = FALSE;
|
||||
network_init_object_field(o, &o->oExclamationBoxForce);
|
||||
network_init_object_field(o, &o->areaTimer);
|
||||
if (so) {
|
||||
so->syncDeathEvent = FALSE;
|
||||
network_init_object_field(o, &o->oExclamationBoxForce);
|
||||
network_init_object_field(o, &o->areaTimer);
|
||||
}
|
||||
|
||||
o->areaTimerType = AREA_TIMER_TYPE_MAXIMUM;
|
||||
o->areaTimer = 0;
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ void bhv_eyerok_boss_init(void) {
|
|||
hands[1] = eyerok_spawn_hand(1, MODEL_EYEROK_RIGHT_HAND, bhvEyerokHand);
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
if (!so) { return; }
|
||||
so->override_ownership = bhv_eyerok_boss_override_ownership;
|
||||
so->ignore_if_true = bhv_eyerok_boss_ignore_if_true;
|
||||
so->minUpdateRate = 1.0f;
|
||||
|
|
|
|||
|
|
@ -3,9 +3,11 @@
|
|||
void bhv_squishable_platform_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oPlatformTimer);
|
||||
network_init_object_field(o, &o->header.gfx.scale[1]);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oPlatformTimer);
|
||||
network_init_object_field(o, &o->header.gfx.scale[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if ((((o->oPlatformTimer / 0x80) % 300) == 0) && network_owns_object(o)) {
|
||||
|
|
@ -19,8 +21,10 @@ void bhv_squishable_platform_loop(void) {
|
|||
void bhv_bitfs_sinking_platform_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oPlatformTimer);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oPlatformTimer);
|
||||
}
|
||||
}
|
||||
|
||||
o->oPosY -=
|
||||
|
|
@ -37,8 +41,10 @@ void bhv_ddd_moving_pole_loop(void) {
|
|||
void bhv_bitfs_sinking_cage_platform_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oPlatformTimer);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oPlatformTimer);
|
||||
}
|
||||
}
|
||||
|
||||
if ((((o->oPlatformTimer / 0x100) % 60) == 0) && network_owns_object(o)) {
|
||||
|
|
|
|||
|
|
@ -45,9 +45,11 @@ void bhv_ferris_wheel_axle_init(void) {
|
|||
}
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 2000.0f);
|
||||
so->hasStandardFields = FALSE;
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
if (so) {
|
||||
so->hasStandardFields = FALSE;
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -46,14 +46,16 @@ static void bhv_fire_spitter_on_received_post(UNUSED u8 localIndex) {
|
|||
void bhv_fire_spitter_update(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->on_received_post = bhv_fire_spitter_on_received_post;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oFireSpitterScaleVel);
|
||||
network_init_object_field(o, &o->header.gfx.scale[0]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[1]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[2]);
|
||||
if (so) {
|
||||
so->on_received_post = bhv_fire_spitter_on_received_post;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oFireSpitterScaleVel);
|
||||
network_init_object_field(o, &o->header.gfx.scale[0]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[1]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[2]);
|
||||
}
|
||||
}
|
||||
|
||||
cur_obj_scale(o->header.gfx.scale[0]);
|
||||
|
|
|
|||
|
|
@ -265,16 +265,18 @@ static u8 bhv_haunted_bookshelf_manager_ignore_if_true(void) {
|
|||
void bhv_haunted_bookshelf_manager_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->override_ownership = bhv_haunted_bookshelf_manager_override_ownership;
|
||||
so->ignore_if_true = bhv_haunted_bookshelf_manager_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field(o, &o->oBookSwitchManagerUnkF8);
|
||||
network_init_object_field(o, &o->oBookSwitchManagerUnkF4);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
if (so) {
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->override_ownership = bhv_haunted_bookshelf_manager_override_ownership;
|
||||
so->ignore_if_true = bhv_haunted_bookshelf_manager_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field(o, &o->oBookSwitchManagerUnkF8);
|
||||
network_init_object_field(o, &o->oBookSwitchManagerUnkF4);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
}
|
||||
}
|
||||
|
||||
switch (o->oAction) {
|
||||
|
|
@ -299,15 +301,17 @@ void bhv_haunted_bookshelf_manager_loop(void) {
|
|||
void bhv_book_switch_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->override_ownership = bhv_haunted_bookshelf_manager_override_ownership;
|
||||
so->ignore_if_true = bhv_haunted_bookshelf_manager_ignore_if_true;
|
||||
if (so) {
|
||||
so->override_ownership = bhv_haunted_bookshelf_manager_override_ownership;
|
||||
so->ignore_if_true = bhv_haunted_bookshelf_manager_ignore_if_true;
|
||||
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oBookSwitchUnkF4);
|
||||
network_init_object_field(o, &o->oIntangibleTimer);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oBookSwitchUnkF4);
|
||||
network_init_object_field(o, &o->oIntangibleTimer);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
}
|
||||
}
|
||||
|
||||
s32 sp3C;
|
||||
|
|
|
|||
|
|
@ -18,10 +18,12 @@ void bhv_hoot_init(void) {
|
|||
localTalkToHoot = 0;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->ignore_if_true = bhv_hoot_ignore_if_true;
|
||||
network_init_object_field(o, &o->oHootAvailability);
|
||||
network_init_object_field(o, &o->oMoveAnglePitch);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_hoot_ignore_if_true;
|
||||
network_init_object_field(o, &o->oHootAvailability);
|
||||
network_init_object_field(o, &o->oMoveAnglePitch);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
}
|
||||
}
|
||||
|
||||
// sp28 = arg0
|
||||
|
|
|
|||
|
|
@ -23,10 +23,12 @@ void bhv_sunken_ship_part_loop(void) {
|
|||
void bhv_ship_part_3_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oShipPart3UnkF4);
|
||||
if (so) {
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oShipPart3UnkF4);
|
||||
}
|
||||
}
|
||||
|
||||
s16 sp1E = o->oFaceAnglePitch;
|
||||
|
|
@ -44,14 +46,16 @@ void bhv_ship_part_3_loop(void) {
|
|||
void bhv_jrb_sliding_box_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oJrbSlidingBoxUnkF8);
|
||||
network_init_object_field(o, &o->oJrbSlidingBoxUnkFC);
|
||||
network_init_object_field(o, &o->oParentRelativePosX);
|
||||
network_init_object_field(o, &o->oParentRelativePosY);
|
||||
network_init_object_field(o, &o->oParentRelativePosZ);
|
||||
if (so) {
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oJrbSlidingBoxUnkF8);
|
||||
network_init_object_field(o, &o->oJrbSlidingBoxUnkFC);
|
||||
network_init_object_field(o, &o->oParentRelativePosX);
|
||||
network_init_object_field(o, &o->oParentRelativePosY);
|
||||
network_init_object_field(o, &o->oParentRelativePosZ);
|
||||
}
|
||||
}
|
||||
|
||||
Mat4 sp60;
|
||||
|
|
|
|||
|
|
@ -364,11 +364,13 @@ u8 king_bobomb_ignore_if_true(void) {
|
|||
void bhv_king_bobomb_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->ignore_if_true = king_bobomb_ignore_if_true;
|
||||
network_init_object_field(o, &o->oKingBobombUnk88);
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
network_init_object_field(o, &o->oHealth);
|
||||
network_init_object_field(o, &o->oInteractStatus);
|
||||
if (so) {
|
||||
so->ignore_if_true = king_bobomb_ignore_if_true;
|
||||
network_init_object_field(o, &o->oKingBobombUnk88);
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
network_init_object_field(o, &o->oHealth);
|
||||
network_init_object_field(o, &o->oInteractStatus);
|
||||
}
|
||||
}
|
||||
|
||||
f32 sp34 = 20.0f;
|
||||
|
|
|
|||
|
|
@ -105,24 +105,26 @@ void bhv_klepto_init(void) {
|
|||
}
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->on_received_pre = bhv_klepto_on_received_pre;
|
||||
so->on_received_post = bhv_klepto_on_received_post;
|
||||
network_init_object_field(o, &o->oAnimState);
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
network_init_object_field(o, &o->oKleptoDistanceToTarget);
|
||||
network_init_object_field(o, &o->oKleptoUnkF8);
|
||||
network_init_object_field(o, &o->oKleptoUnkFC);
|
||||
network_init_object_field(o, &o->oKleptoSpeed);
|
||||
network_init_object_field(o, &o->oKleptoTimeUntilTargetChange);
|
||||
network_init_object_field(o, &o->oKleptoTargetNumber);
|
||||
network_init_object_field(o, &o->oKleptoUnk1B0);
|
||||
network_init_object_field(o, &o->oSoundStateID);
|
||||
network_init_object_field(o, &o->oHomeX);
|
||||
network_init_object_field(o, &o->oHomeY);
|
||||
network_init_object_field(o, &o->oHomeZ);
|
||||
network_init_object_field(o, &o->oMoveAnglePitch);
|
||||
network_init_object_field(o, &o->oGravity);
|
||||
network_init_object_field(o, &o->globalPlayerIndex);
|
||||
if (so) {
|
||||
so->on_received_pre = bhv_klepto_on_received_pre;
|
||||
so->on_received_post = bhv_klepto_on_received_post;
|
||||
network_init_object_field(o, &o->oAnimState);
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
network_init_object_field(o, &o->oKleptoDistanceToTarget);
|
||||
network_init_object_field(o, &o->oKleptoUnkF8);
|
||||
network_init_object_field(o, &o->oKleptoUnkFC);
|
||||
network_init_object_field(o, &o->oKleptoSpeed);
|
||||
network_init_object_field(o, &o->oKleptoTimeUntilTargetChange);
|
||||
network_init_object_field(o, &o->oKleptoTargetNumber);
|
||||
network_init_object_field(o, &o->oKleptoUnk1B0);
|
||||
network_init_object_field(o, &o->oSoundStateID);
|
||||
network_init_object_field(o, &o->oHomeX);
|
||||
network_init_object_field(o, &o->oHomeY);
|
||||
network_init_object_field(o, &o->oHomeZ);
|
||||
network_init_object_field(o, &o->oMoveAnglePitch);
|
||||
network_init_object_field(o, &o->oGravity);
|
||||
network_init_object_field(o, &o->globalPlayerIndex);
|
||||
}
|
||||
}
|
||||
|
||||
static void klepto_change_target(void) {
|
||||
|
|
|
|||
|
|
@ -116,31 +116,33 @@ void bhv_koopa_init(void) {
|
|||
// koopa the quick
|
||||
o->parentObj = cur_obj_nearest_object_with_behavior(bhvKoopaRaceEndpoint);
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->on_received_post = bhv_koopa_the_quick_on_received_post;
|
||||
so->on_sent_pre = bhv_koopa_the_quick_on_sent_pre;
|
||||
so->override_ownership = bhv_koopa_the_quick_override_ownership;
|
||||
network_init_object_field(o, &koopaPathedStartWaypoint);
|
||||
network_init_object_field(o, &koopaPathedPrevWaypoint);
|
||||
network_init_object_field(o, &koopaShotFromCannon);
|
||||
network_init_object_field(o, &o->oPathedPrevWaypointFlags);
|
||||
network_init_object_field(o, &o->oPathedTargetPitch);
|
||||
network_init_object_field(o, &o->oPathedTargetYaw);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oVelX);
|
||||
network_init_object_field(o, &o->oVelY);
|
||||
network_init_object_field(o, &o->oVelZ);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oSubAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oKoopaAgility);
|
||||
network_init_object_field(o, &o->parentObj->oKoopaRaceEndpointRaceBegun);
|
||||
network_init_object_field(o, &o->parentObj->oKoopaRaceEndpointRaceStatus);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oMoveAngleYaw);
|
||||
network_init_object_field(o, &o->areaTimer);
|
||||
if (so) {
|
||||
so->on_received_post = bhv_koopa_the_quick_on_received_post;
|
||||
so->on_sent_pre = bhv_koopa_the_quick_on_sent_pre;
|
||||
so->override_ownership = bhv_koopa_the_quick_override_ownership;
|
||||
network_init_object_field(o, &koopaPathedStartWaypoint);
|
||||
network_init_object_field(o, &koopaPathedPrevWaypoint);
|
||||
network_init_object_field(o, &koopaShotFromCannon);
|
||||
network_init_object_field(o, &o->oPathedPrevWaypointFlags);
|
||||
network_init_object_field(o, &o->oPathedTargetPitch);
|
||||
network_init_object_field(o, &o->oPathedTargetYaw);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oVelX);
|
||||
network_init_object_field(o, &o->oVelY);
|
||||
network_init_object_field(o, &o->oVelZ);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oSubAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oKoopaAgility);
|
||||
network_init_object_field(o, &o->parentObj->oKoopaRaceEndpointRaceBegun);
|
||||
network_init_object_field(o, &o->parentObj->oKoopaRaceEndpointRaceStatus);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oMoveAngleYaw);
|
||||
network_init_object_field(o, &o->areaTimer);
|
||||
}
|
||||
o->areaTimerType = AREA_TIMER_TYPE_MAXIMUM;
|
||||
o->areaTimer = 0;
|
||||
o->areaTimerDuration = 60;
|
||||
|
|
|
|||
|
|
@ -55,14 +55,16 @@ void bhv_mips_init(void) {
|
|||
cur_obj_init_animation(0);
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
network_init_object_field(o, &o->oMipsStartWaypointIndex);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oMipsStarStatus);
|
||||
network_init_object_field(o, &o->oBehParams2ndByte);
|
||||
network_init_object_field(o, &o->oHeldState);
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
so->on_received_pre = bhv_mips_on_received_pre;
|
||||
so->on_received_post = bhv_mips_on_received_post;
|
||||
if (so) {
|
||||
network_init_object_field(o, &o->oMipsStartWaypointIndex);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oMipsStarStatus);
|
||||
network_init_object_field(o, &o->oBehParams2ndByte);
|
||||
network_init_object_field(o, &o->oHeldState);
|
||||
network_init_object_field(o, &o->oFlags);
|
||||
so->on_received_pre = bhv_mips_on_received_pre;
|
||||
so->on_received_post = bhv_mips_on_received_post;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -169,16 +169,18 @@ void bhv_monty_mole_init(void) {
|
|||
o->oMontyMoleHoleZ = 0;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->on_received_post = bhv_monty_mole_on_received_post;
|
||||
network_init_object_field(o, &o->oMontyMoleHeightRelativeToFloor);
|
||||
network_init_object_field(o, &o->oMontyMoleHoleX);
|
||||
network_init_object_field(o, &o->oMontyMoleHoleY);
|
||||
network_init_object_field(o, &o->oMontyMoleHoleZ);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oGravity);
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
network_init_object_field(o, &o->oIntangibleTimer);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
if (so) {
|
||||
so->on_received_post = bhv_monty_mole_on_received_post;
|
||||
network_init_object_field(o, &o->oMontyMoleHeightRelativeToFloor);
|
||||
network_init_object_field(o, &o->oMontyMoleHoleX);
|
||||
network_init_object_field(o, &o->oMontyMoleHoleY);
|
||||
network_init_object_field(o, &o->oMontyMoleHoleZ);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oGravity);
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
network_init_object_field(o, &o->oIntangibleTimer);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -271,7 +271,9 @@ struct ObjectHitbox sMrIHitbox = {
|
|||
void bhv_mr_i_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->fullObjectSync = TRUE;
|
||||
if (so) {
|
||||
so->fullObjectSync = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
|
|
|
|||
|
|
@ -192,14 +192,16 @@ static void pokey_act_uninitialized(void) {
|
|||
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
network_init_object_field(o, &o->oPokeyAliveBodyPartFlags);
|
||||
network_init_object_field(o, &o->oPokeyNumAliveBodyParts);
|
||||
network_init_object_field(o, &o->oPokeyHeadWasKilled);
|
||||
network_init_object_field(o, &o->oPokeyTargetYaw);
|
||||
network_init_object_field(o, &o->oPokeyChangeTargetTimer);
|
||||
network_init_object_field(o, &o->oPokeyTurningAwayFromWall);
|
||||
so->on_received_pre = pokey_on_received_pre;
|
||||
so->on_received_post = pokey_on_received_post;
|
||||
if (so) {
|
||||
network_init_object_field(o, &o->oPokeyAliveBodyPartFlags);
|
||||
network_init_object_field(o, &o->oPokeyNumAliveBodyParts);
|
||||
network_init_object_field(o, &o->oPokeyHeadWasKilled);
|
||||
network_init_object_field(o, &o->oPokeyTargetYaw);
|
||||
network_init_object_field(o, &o->oPokeyChangeTargetTimer);
|
||||
network_init_object_field(o, &o->oPokeyTurningAwayFromWall);
|
||||
so->on_received_pre = pokey_on_received_pre;
|
||||
so->on_received_post = pokey_on_received_post;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,11 +24,13 @@ void bhv_pyramid_elevator_init(void) {
|
|||
}
|
||||
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->ignore_if_true = bhv_pyramid_elevator_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_pyramid_elevator_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
}
|
||||
}
|
||||
|
||||
void bhv_pyramid_elevator_loop(void) {
|
||||
|
|
|
|||
|
|
@ -101,10 +101,12 @@ static u8 bhv_pyramid_top_ignore_if_true(void) {
|
|||
void bhv_pyramid_top_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->ignore_if_true = bhv_pyramid_top_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_pyramid_top_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
}
|
||||
}
|
||||
switch (o->oAction) {
|
||||
case PYRAMID_TOP_ACT_CHECK_IF_SOLVED:
|
||||
|
|
|
|||
|
|
@ -50,30 +50,32 @@ void bhv_racing_penguin_init(void) {
|
|||
objShortcutCheck->parentObj = o;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->on_received_post = bhv_racing_penguin_the_quick_on_received_post;
|
||||
so->on_sent_pre = bhv_racing_penguin_the_quick_on_sent_pre;
|
||||
so->override_ownership = bhv_racing_penguin_the_quick_override_ownership;
|
||||
network_init_object_field(o, &penguinPathedStartWaypoint);
|
||||
network_init_object_field(o, &penguinPathedPrevWaypoint);
|
||||
network_init_object_field(o, &o->oPathedPrevWaypointFlags);
|
||||
network_init_object_field(o, &o->oPathedTargetPitch);
|
||||
network_init_object_field(o, &o->oPathedTargetYaw);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oVelX);
|
||||
network_init_object_field(o, &o->oVelY);
|
||||
network_init_object_field(o, &o->oVelZ);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oSubAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oMoveAngleYaw);
|
||||
network_init_object_field(o, &o->oRacingPenguinWeightedNewTargetSpeed);
|
||||
network_init_object_field(o, &o->oRacingPenguinMarioWon);
|
||||
network_init_object_field(o, &o->oRacingPenguinReachedBottom);
|
||||
network_init_object_field(o, &o->areaTimer);
|
||||
if (so) {
|
||||
so->on_received_post = bhv_racing_penguin_the_quick_on_received_post;
|
||||
so->on_sent_pre = bhv_racing_penguin_the_quick_on_sent_pre;
|
||||
so->override_ownership = bhv_racing_penguin_the_quick_override_ownership;
|
||||
network_init_object_field(o, &penguinPathedStartWaypoint);
|
||||
network_init_object_field(o, &penguinPathedPrevWaypoint);
|
||||
network_init_object_field(o, &o->oPathedPrevWaypointFlags);
|
||||
network_init_object_field(o, &o->oPathedTargetPitch);
|
||||
network_init_object_field(o, &o->oPathedTargetYaw);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
network_init_object_field(o, &o->oVelX);
|
||||
network_init_object_field(o, &o->oVelY);
|
||||
network_init_object_field(o, &o->oVelZ);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oSubAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oMoveAngleYaw);
|
||||
network_init_object_field(o, &o->oRacingPenguinWeightedNewTargetSpeed);
|
||||
network_init_object_field(o, &o->oRacingPenguinMarioWon);
|
||||
network_init_object_field(o, &o->oRacingPenguinReachedBottom);
|
||||
network_init_object_field(o, &o->areaTimer);
|
||||
}
|
||||
o->areaTimerType = AREA_TIMER_TYPE_MAXIMUM;
|
||||
o->areaTimer = 0;
|
||||
o->areaTimerDuration = 60;
|
||||
|
|
|
|||
|
|
@ -36,11 +36,13 @@ void bhv_sliding_plat_2_init(void) {
|
|||
void bhv_sliding_plat_2_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnkF4);
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnkF8);
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnkFC);
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnk100);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnkF4);
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnkF8);
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnkFC);
|
||||
network_init_object_field(o, &o->oBackAndForthPlatformUnk100);
|
||||
}
|
||||
}
|
||||
|
||||
if (o->oTimer > 10) {
|
||||
|
|
|
|||
|
|
@ -35,10 +35,12 @@ void bhv_snow_mound_spawn_loop(void) {
|
|||
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->override_ownership = bhv_snow_mound_spawn_override_ownership;
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
if (so) {
|
||||
so->override_ownership = bhv_snow_mound_spawn_override_ownership;
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 6000)
|
||||
|
|
|
|||
|
|
@ -104,9 +104,7 @@ void snowmans_bottom_act_2(void) {
|
|||
}
|
||||
|
||||
if (o->oTimer == 200) {
|
||||
if (!o->createdThroughNetwork) {
|
||||
create_respawner(MODEL_CCM_SNOWMAN_BASE, bhvSnowmansBottom, 3000);
|
||||
}
|
||||
create_respawner(MODEL_CCM_SNOWMAN_BASE, bhvSnowmansBottom, 3000);
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,20 +235,22 @@ void bhv_spiny_update(void) {
|
|||
// PARTIAL_UPDATE
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->on_received_post = bhv_spiny_on_received_post;
|
||||
so->on_sent_pre = bhv_spiny_on_sent_pre;
|
||||
so->override_ownership = bhv_spiny_override_ownership;
|
||||
if (so) {
|
||||
so->syncDeathEvent = FALSE;
|
||||
so->on_received_post = bhv_spiny_on_received_post;
|
||||
so->on_sent_pre = bhv_spiny_on_sent_pre;
|
||||
so->override_ownership = bhv_spiny_override_ownership;
|
||||
|
||||
network_init_object_field(o, &o->oGraphYOffset);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
network_init_object_field(o, &o->oSpinyTimeUntilTurn);
|
||||
network_init_object_field(o, &o->oSpinyTargetYaw);
|
||||
network_init_object_field(o, &o->oSpinyTurningAwayFromWall);
|
||||
network_init_object_field(o, &o->oMoveFlags);
|
||||
network_init_object_field(o, &o->oInteractType);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &spinyAnimCache);
|
||||
network_init_object_field(o, &o->oGraphYOffset);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
network_init_object_field(o, &o->oSpinyTimeUntilTurn);
|
||||
network_init_object_field(o, &o->oSpinyTargetYaw);
|
||||
network_init_object_field(o, &o->oSpinyTurningAwayFromWall);
|
||||
network_init_object_field(o, &o->oMoveFlags);
|
||||
network_init_object_field(o, &o->oInteractType);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &spinyAnimCache);
|
||||
}
|
||||
|
||||
|
||||
struct Object* lakitu = cur_obj_nearest_object_with_behavior(bhvEnemyLakitu);
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@ void bhv_squarish_path_parent_init(void) {
|
|||
o->oPosZ += radius;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 2000.0f);
|
||||
so->hasStandardFields = FALSE;
|
||||
so->maxUpdateRate = 5.0f;
|
||||
if (so) {
|
||||
so->hasStandardFields = FALSE;
|
||||
so->maxUpdateRate = 5.0f;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
s16 action = (i == 0) ? 1 : 3;
|
||||
|
|
|
|||
|
|
@ -3,11 +3,13 @@ void bhv_swing_platform_init(void) {
|
|||
o->oSwingPlatformAngle = 0x2000;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oSwingPlatformAngle);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oSwingPlatformSpeed);
|
||||
network_init_object_field(o, &o->oAngleVelRoll);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oSwingPlatformAngle);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oSwingPlatformSpeed);
|
||||
network_init_object_field(o, &o->oAngleVelRoll);
|
||||
}
|
||||
}
|
||||
|
||||
void bhv_swing_platform_update(void) {
|
||||
|
|
|
|||
|
|
@ -76,12 +76,14 @@ void (*sToxBoxActions[])(void) = { tox_box_act_0, tox_box_act_1, tox_box_act_2,
|
|||
void bhv_tox_box_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 3000.0f);
|
||||
so->maxUpdateRate = 10.0f;
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oUnkC0);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oToxBoxMovementStep);
|
||||
if (so) {
|
||||
so->maxUpdateRate = 10.0f;
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->oUnkC0);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->oToxBoxMovementStep);
|
||||
}
|
||||
}
|
||||
cur_obj_call_action_function(sToxBoxActions);
|
||||
load_object_collision_model();
|
||||
|
|
|
|||
|
|
@ -42,13 +42,15 @@ void bhv_ttc_2d_rotator_init(void) {
|
|||
o->oTTC2DRotatorIncrement = o->oTTC2DRotatorSpeed = sTTC2DRotatorSpeeds[o->oBehParams2ndByte];
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTC2DRotatorMinTimeUntilNextTurn);
|
||||
network_init_object_field(o, &o->oTTC2DRotatorTargetYaw);
|
||||
network_init_object_field(o, &o->oTTC2DRotatorIncrement);
|
||||
network_init_object_field(o, &o->oTTC2DRotatorRandomDirTimer);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
network_init_object_field(o, &o->oAngleVelYaw);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTC2DRotatorMinTimeUntilNextTurn);
|
||||
network_init_object_field(o, &o->oTTC2DRotatorTargetYaw);
|
||||
network_init_object_field(o, &o->oTTC2DRotatorIncrement);
|
||||
network_init_object_field(o, &o->oTTC2DRotatorRandomDirTimer);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
network_init_object_field(o, &o->oAngleVelYaw);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -31,11 +31,13 @@ void bhv_ttc_cog_init(void) {
|
|||
o->oTTCCogDir = sTTCCogDirections[o->oBehParams2ndByte & TTC_COG_BP_DIR_MASK];
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCCogSpeed);
|
||||
network_init_object_field(o, &o->oTTCCogTargetVel);
|
||||
network_init_object_field(o, &o->oAngleVelYaw);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCCogSpeed);
|
||||
network_init_object_field(o, &o->oTTCCogTargetVel);
|
||||
network_init_object_field(o, &o->oAngleVelYaw);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -25,9 +25,11 @@ void bhv_ttc_elevator_init(void) {
|
|||
o->oTTCElevatorPeakY = o->oPosY + peakOffset;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCElevatorDir);
|
||||
network_init_object_field(o, &o->oTTCElevatorMoveTime);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCElevatorDir);
|
||||
network_init_object_field(o, &o->oTTCElevatorMoveTime);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -35,12 +35,14 @@ void bhv_ttc_moving_bar_init(void) {
|
|||
o->oMoveAngleYaw = 0x4000 - o->oMoveAngleYaw;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCMovingBarDelay);
|
||||
network_init_object_field(o, &o->oTTCMovingBarStoppedTimer);
|
||||
network_init_object_field(o, &o->oTTCMovingBarOffset);
|
||||
network_init_object_field(o, &o->oTTCMovingBarSpeed);
|
||||
network_init_object_field(o, &o->oTTCMovingBarStartOffset);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCMovingBarDelay);
|
||||
network_init_object_field(o, &o->oTTCMovingBarStoppedTimer);
|
||||
network_init_object_field(o, &o->oTTCMovingBarOffset);
|
||||
network_init_object_field(o, &o->oTTCMovingBarSpeed);
|
||||
network_init_object_field(o, &o->oTTCMovingBarStartOffset);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -26,13 +26,15 @@ void bhv_ttc_pendulum_init(void) {
|
|||
}
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCPendulumAccelDir);
|
||||
network_init_object_field(o, &o->oTTCPendulumAngle);
|
||||
network_init_object_field(o, &o->oTTCPendulumAngleVel);
|
||||
network_init_object_field(o, &o->oTTCPendulumAngleAccel);
|
||||
network_init_object_field(o, &o->oTTCPendulumDelay);
|
||||
network_init_object_field(o, &o->oTTCPendulumSoundTimer);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCPendulumAccelDir);
|
||||
network_init_object_field(o, &o->oTTCPendulumAngle);
|
||||
network_init_object_field(o, &o->oTTCPendulumAngleVel);
|
||||
network_init_object_field(o, &o->oTTCPendulumAngleAccel);
|
||||
network_init_object_field(o, &o->oTTCPendulumDelay);
|
||||
network_init_object_field(o, &o->oTTCPendulumSoundTimer);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -46,9 +46,11 @@ void bhv_ttc_pit_block_init(void) {
|
|||
}
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCPitBlockDir);
|
||||
network_init_object_field(o, &o->oTTCPitBlockWaitTime);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCPitBlockDir);
|
||||
network_init_object_field(o, &o->oTTCPitBlockWaitTime);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -33,13 +33,15 @@ void bhv_ttc_rotating_solid_init(void) {
|
|||
o->oTTCRotatingSolidRotationDelay = sTTCRotatingSolidInitialDelays[gTTCSpeedSetting];
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCRotatingSolidNumTurns);
|
||||
network_init_object_field(o, &o->oTTCRotatingSolidRotationDelay);
|
||||
network_init_object_field(o, &o->oTTCRotatingSolidVelY);
|
||||
network_init_object_field(o, &o->oTTCChangeDirTimer);
|
||||
network_init_object_field(o, &o->oAngleVelRoll);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCRotatingSolidNumTurns);
|
||||
network_init_object_field(o, &o->oTTCRotatingSolidRotationDelay);
|
||||
network_init_object_field(o, &o->oTTCRotatingSolidVelY);
|
||||
network_init_object_field(o, &o->oTTCChangeDirTimer);
|
||||
network_init_object_field(o, &o->oAngleVelRoll);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -19,11 +19,13 @@ static s16 sTTCSpinnerSpeeds[] = {
|
|||
void bhv_ttc_spinner_update(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oAngleVelPitch);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oTTCSpinnerDir);
|
||||
network_init_object_field(o, &o->oTTCChangeDirTimer);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oAngleVelPitch);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oTTCSpinnerDir);
|
||||
network_init_object_field(o, &o->oTTCChangeDirTimer);
|
||||
}
|
||||
}
|
||||
|
||||
o->oAngleVelPitch = sTTCSpinnerSpeeds[gTTCSpeedSetting];
|
||||
|
|
|
|||
|
|
@ -35,10 +35,12 @@ void bhv_ttc_treadmill_init(void) {
|
|||
sMasterTreadmill = NULL;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCTreadmillSpeed);
|
||||
network_init_object_field(o, &o->oTTCTreadmillTargetSpeed);
|
||||
network_init_object_field(o, &o->oTTCTreadmillTimeUntilSwitch);
|
||||
if (so) {
|
||||
so->minUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oTTCTreadmillSpeed);
|
||||
network_init_object_field(o, &o->oTTCTreadmillTargetSpeed);
|
||||
network_init_object_field(o, &o->oTTCTreadmillTimeUntilSwitch);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -31,10 +31,12 @@ static struct ObjectHitbox sWaterBombHitbox = {
|
|||
void bhv_water_bomb_spawner_update(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->fullObjectSync = TRUE;
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oWaterBombSpawnerBombActive);
|
||||
network_init_object_field(o, &o->oWaterBombSpawnerTimeToSpawn);
|
||||
if (so) {
|
||||
so->fullObjectSync = TRUE;
|
||||
so->maxUpdateRate = 5.0f;
|
||||
network_init_object_field(o, &o->oWaterBombSpawnerBombActive);
|
||||
network_init_object_field(o, &o->oWaterBombSpawnerTimeToSpawn);
|
||||
}
|
||||
}
|
||||
|
||||
f32 latDistToMario = 9999;
|
||||
|
|
|
|||
|
|
@ -67,11 +67,13 @@ void bhv_water_level_pillar_init(void) {
|
|||
o->oWaterLevelPillarDrained = 1;
|
||||
|
||||
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
so->ignore_if_true = bhv_water_level_pillar_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oWaterLevelPillarDrained);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_water_level_pillar_ignore_if_true;
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
network_init_object_field(o, &o->oWaterLevelPillarDrained);
|
||||
}
|
||||
}
|
||||
|
||||
void bhv_water_level_pillar_loop(void) {
|
||||
|
|
|
|||
|
|
@ -438,21 +438,23 @@ void bhv_wiggler_update(void) {
|
|||
// PARTIAL_UPDATE
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||
so->ignore_if_true = bhv_wiggler_ignore_if_true;
|
||||
so->on_received_pre = bhv_wiggler_on_received_pre;
|
||||
so->on_received_post = bhv_wiggler_on_received_post;
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oWigglerFallThroughFloorsHeight);
|
||||
network_init_object_field(o, &o->oWigglerWalkAnimSpeed);
|
||||
network_init_object_field(o, &o->oWigglerSquishSpeed);
|
||||
network_init_object_field(o, &o->oWigglerTimeUntilRandomTurn);
|
||||
network_init_object_field(o, &o->oWigglerTargetYaw);
|
||||
network_init_object_field(o, &o->oWigglerWalkAwayFromWallTimer);
|
||||
network_init_object_field(o, &o->oHealth);
|
||||
network_init_object_field(o, &o->header.gfx.scale[0]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[1]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[2]);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
if (so) {
|
||||
so->ignore_if_true = bhv_wiggler_ignore_if_true;
|
||||
so->on_received_pre = bhv_wiggler_on_received_pre;
|
||||
so->on_received_post = bhv_wiggler_on_received_post;
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oWigglerFallThroughFloorsHeight);
|
||||
network_init_object_field(o, &o->oWigglerWalkAnimSpeed);
|
||||
network_init_object_field(o, &o->oWigglerSquishSpeed);
|
||||
network_init_object_field(o, &o->oWigglerTimeUntilRandomTurn);
|
||||
network_init_object_field(o, &o->oWigglerTargetYaw);
|
||||
network_init_object_field(o, &o->oWigglerWalkAwayFromWallTimer);
|
||||
network_init_object_field(o, &o->oHealth);
|
||||
network_init_object_field(o, &o->header.gfx.scale[0]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[1]);
|
||||
network_init_object_field(o, &o->header.gfx.scale[2]);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
}
|
||||
}
|
||||
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
|
|
|
|||
|
|
@ -50,9 +50,7 @@ void yoshi_walk_loop(void) {
|
|||
}
|
||||
|
||||
if (o->oPosY < 2100.0f) {
|
||||
if (!o->createdThroughNetwork) {
|
||||
create_respawner(MODEL_YOSHI, bhvYoshi, 3000);
|
||||
}
|
||||
create_respawner(MODEL_YOSHI, bhvYoshi, 3000);
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ struct Object *allocate_object(struct ObjectNode *objList) {
|
|||
obj->header.gfx.pos[2] = -10000.0f;
|
||||
obj->header.gfx.throwMatrix = NULL;
|
||||
|
||||
obj->createdThroughNetwork = false;
|
||||
obj->coopFlags = 0;
|
||||
|
||||
obj->areaTimerType = AREA_TIMER_TYPE_NONE;
|
||||
obj->areaTimer = 0;
|
||||
|
|
|
|||
|
|
@ -447,6 +447,7 @@ static CRASH_HANDLER_TYPE crash_handler(EXCEPTION_POINTERS *ExceptionInfo) {
|
|||
|
||||
crash_handler_add_info_int(&pText, 380, -4 + (8 * 0), "Id", (int)gPcDebug.id & 0xFF);
|
||||
crash_handler_add_info_int(&pText, 380, -4 + (8 * 1), "Ofs", (int)gPcDebug.bhvOffset & 0xFF);
|
||||
crash_handler_add_info_int(&pText, 315, -4 + (8 * 4), "Objs", gPrevFrameObjectCount);
|
||||
|
||||
int modCount = 0;
|
||||
for (int i = 0; i < gModTableCurrent->entryCount; i++) {
|
||||
|
|
|
|||
|
|
@ -585,7 +585,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = {
|
|||
{ "collidedObjInteractTypes", LVT_U32, offsetof(struct Object, collidedObjInteractTypes), false, LOT_NONE },
|
||||
// { "collidedObjs", LOT_???, offsetof(struct Object, collidedObjs), false, LOT_??? }, <--- UNIMPLEMENTED
|
||||
// { "collisionData", LVT_???, offsetof(struct Object, collisionData), false, LOT_??? }, <--- UNIMPLEMENTED
|
||||
{ "createdThroughNetwork", LVT_U8, offsetof(struct Object, createdThroughNetwork), true, LOT_NONE },
|
||||
{ "coopFlags", LVT_U8, offsetof(struct Object, coopFlags), true, LOT_NONE },
|
||||
{ "curBhvCommand", LVT_BEHAVIORSCRIPT_P, offsetof(struct Object, curBhvCommand), true, LOT_POINTER },
|
||||
{ "globalPlayerIndex", LVT_U8, offsetof(struct Object, globalPlayerIndex), false, LOT_NONE },
|
||||
{ "header", LVT_COBJECT, offsetof(struct Object, header), true, LOT_OBJECTNODE },
|
||||
|
|
|
|||
|
|
@ -2662,4 +2662,7 @@ char gSmluaConstants[] = ""
|
|||
"PLAY_MODE_CHANGE_LEVEL = 4\n"
|
||||
"PLAY_MODE_FRAME_ADVANCE = 5\n"
|
||||
"MAX_PLAYERS = 16\n"
|
||||
"COOP_OBJ_FLAG_NETWORK = (1 << 0)\n"
|
||||
"COOP_OBJ_FLAG_LUA = (1 << 1)\n"
|
||||
"COOP_OBJ_FLAG_NON_SYNC = (1 << 2)\n"
|
||||
;
|
||||
|
|
@ -7456,6 +7456,27 @@ int smlua_func_obj_set_model_extended(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_spawn_non_sync_object(lua_State* L) {
|
||||
if(!smlua_functions_valid_param_count(L, 6)) { return 0; }
|
||||
|
||||
int behaviorId = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { return 0; }
|
||||
int modelId = smlua_to_integer(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { return 0; }
|
||||
f32 x = smlua_to_number(L, 3);
|
||||
if (!gSmLuaConvertSuccess) { return 0; }
|
||||
f32 y = smlua_to_number(L, 4);
|
||||
if (!gSmLuaConvertSuccess) { return 0; }
|
||||
f32 z = smlua_to_number(L, 5);
|
||||
if (!gSmLuaConvertSuccess) { return 0; }
|
||||
LuaFunction objSetupFunction = smlua_to_lua_function(L, 6);
|
||||
if (!gSmLuaConvertSuccess) { return 0; }
|
||||
|
||||
smlua_push_object(L, LOT_OBJECT, spawn_non_sync_object(behaviorId, modelId, x, y, z, objSetupFunction));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_spawn_sync_object(lua_State* L) {
|
||||
if(!smlua_functions_valid_param_count(L, 6)) { return 0; }
|
||||
|
||||
|
|
@ -8544,6 +8565,7 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "obj_has_behavior_id", smlua_func_obj_has_behavior_id);
|
||||
smlua_bind_function(L, "obj_has_model_extended", smlua_func_obj_has_model_extended);
|
||||
smlua_bind_function(L, "obj_set_model_extended", smlua_func_obj_set_model_extended);
|
||||
smlua_bind_function(L, "spawn_non_sync_object", smlua_func_spawn_non_sync_object);
|
||||
smlua_bind_function(L, "spawn_sync_object", smlua_func_spawn_sync_object);
|
||||
|
||||
// sound_init.h
|
||||
|
|
|
|||
|
|
@ -44,7 +44,8 @@ static struct Object* spawn_object_internal(enum BehaviorId behaviorId, enum Mod
|
|||
obj->oHomeY = y;
|
||||
obj->oHomeZ = z;
|
||||
|
||||
obj->createdThroughNetwork = true;
|
||||
obj->coopFlags = COOP_OBJ_FLAG_LUA;
|
||||
if (!doSync) { obj->coopFlags |= COOP_OBJ_FLAG_NON_SYNC; }
|
||||
|
||||
if (objSetupFunction != 0) {
|
||||
lua_State* L = gLuaState;
|
||||
|
|
@ -73,9 +74,8 @@ struct Object* spawn_sync_object(enum BehaviorId behaviorId, enum ModelExtendedI
|
|||
spawn_object_internal(behaviorId, modelId, x, y, z, objSetupFunction, true);
|
||||
}
|
||||
|
||||
// this is too dangerous for now
|
||||
struct Object* spawn_non_sync_object(enum BehaviorId behaviorId, enum ModelExtendedId modelId, f32 x, f32 y, f32 z) {
|
||||
spawn_object_internal(behaviorId, modelId, x, y, z, 0, false);
|
||||
struct Object* spawn_non_sync_object(enum BehaviorId behaviorId, enum ModelExtendedId modelId, f32 x, f32 y, f32 z, LuaFunction objSetupFunction) {
|
||||
spawn_object_internal(behaviorId, modelId, x, y, z, objSetupFunction, false);
|
||||
}
|
||||
|
||||
s32 obj_has_behavior_id(struct Object *o, enum BehaviorId behaviorId) {
|
||||
|
|
|
|||
|
|
@ -6,9 +6,7 @@
|
|||
#include "game/object_list_processor.h"
|
||||
|
||||
struct Object* spawn_sync_object(enum BehaviorId behaviorId, enum ModelExtendedId modelId, f32 x, f32 y, f32 z, LuaFunction objSetupFunction);
|
||||
|
||||
// this is too dangerous for now
|
||||
//struct Object* spawn_non_sync_object(enum BehaviorId behaviorId, enum ModelExtendedId modelId, f32 x, f32 y, f32 z);
|
||||
struct Object* spawn_non_sync_object(enum BehaviorId behaviorId, enum ModelExtendedId modelId, f32 x, f32 y, f32 z, LuaFunction objSetupFunction);
|
||||
|
||||
s32 obj_has_behavior_id(struct Object *o, enum BehaviorId behaviorId);
|
||||
s32 obj_has_model_extended(struct Object *o, enum ModelExtendedId modelId);
|
||||
|
|
|
|||
|
|
@ -111,6 +111,10 @@ void network_override_object(u8 syncId, struct Object* o) {
|
|||
}
|
||||
|
||||
struct SyncObject* network_init_object(struct Object *o, float maxSyncDistance) {
|
||||
if (o->coopFlags & COOP_OBJ_FLAG_NON_SYNC) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool hadSyncId = (o->oSyncID != 0);
|
||||
// generate new sync ID
|
||||
if (!network_set_sync_id(o)) {
|
||||
|
|
@ -157,6 +161,7 @@ struct SyncObject* network_init_object(struct Object *o, float maxSyncDistance)
|
|||
}
|
||||
|
||||
void network_init_object_field(struct Object *o, void* field) {
|
||||
if (o->coopFlags & COOP_OBJ_FLAG_NON_SYNC) { return; }
|
||||
if (o->oSyncID == 0) { return; }
|
||||
|
||||
// remember to synchronize this extra field
|
||||
|
|
|
|||
|
|
@ -170,7 +170,8 @@ void network_receive_spawn_objects(struct Packet* p) {
|
|||
}
|
||||
|
||||
o->globalPlayerIndex = data.globalPlayerIndex;
|
||||
o->createdThroughNetwork = true;
|
||||
o->coopFlags |= COOP_OBJ_FLAG_NETWORK;
|
||||
|
||||
memcpy(o->rawData.asU32, data.rawData, sizeof(u32) * 80);
|
||||
|
||||
o->header.gfx.scale[0] = scale[0];
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue