mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-10-19 03:32:41 +00:00
Specify sync object field size
This commit is contained in:
parent
ed53a5422c
commit
45286eb46e
16 changed files with 43 additions and 25 deletions
|
@ -1355,9 +1355,9 @@ void bhv_bowser_init(void) {
|
|||
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_with_size(o, &o->header.gfx.node.flags, 16);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.animInfo.animFrame, 16);
|
||||
network_init_object_field(o, &networkBowserAnimationIndex);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
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]);
|
||||
|
|
|
@ -455,7 +455,7 @@ void bhv_chain_chomp_update(void) {
|
|||
if (so) {
|
||||
so->syncDeathEvent = FALSE;
|
||||
network_init_object_field(o, &o->oChainChompUnk104);
|
||||
network_init_object_field(o, &o->header.gfx.animInfo.animFrame);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.animInfo.animFrame, 16);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,6 @@ void bhv_controllable_platform_init(void) {
|
|||
o->oControllablePlatformUnkFC = o->oPosY;
|
||||
|
||||
network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
network_init_object_field(o, &D_80331694);
|
||||
network_init_object_field(o, &o->oPosX);
|
||||
network_init_object_field(o, &o->oPosY);
|
||||
network_init_object_field(o, &o->oPosZ);
|
||||
|
@ -87,15 +86,15 @@ void bhv_controllable_platform_init(void) {
|
|||
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->activeFlags);
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
network_init_object_field_with_size(o, &D_80331694, 8);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.node.flags, 16);
|
||||
|
||||
network_init_object_field(o, &o->oControllablePlatformUnkF8);
|
||||
network_init_object_field(o, &o->oControllablePlatformUnkFC);
|
||||
network_init_object_field(o, &o->oControllablePlatformUnk100);
|
||||
network_init_object_field(o, &o->oFaceAnglePitch);
|
||||
network_init_object_field(o, &o->oFaceAngleRoll);
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (controllablePlatformSubs[i] == NULL) { continue; }
|
||||
network_init_object_field(o, &controllablePlatformSubs[i]->oAction);
|
||||
|
|
|
@ -269,8 +269,8 @@ void bhv_haunted_bookshelf_manager_loop(void) {
|
|||
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_with_size(o, &o->activeFlags, 16);
|
||||
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);
|
||||
|
|
|
@ -24,7 +24,7 @@ void bhv_grand_star_init(void) {
|
|||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject *so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
if (so) {
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oSubAction);
|
||||
|
|
|
@ -22,7 +22,7 @@ void bhv_hoot_init(void) {
|
|||
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);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.animInfo.animFrame, 16);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@ void bhv_klepto_init(void) {
|
|||
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);
|
||||
network_init_object_field_with_size(o, &o->globalPlayerIndex, 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -177,9 +177,9 @@ void bhv_monty_mole_init(void) {
|
|||
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);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.node.flags, 16);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -227,9 +227,9 @@ void bhv_1up_hidden_loop(void) {
|
|||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->o1UpHiddenUnkF4);
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field(o, &o->oIntangibleTimer);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.node.flags, 16);
|
||||
}
|
||||
|
||||
s16 sp26;
|
||||
|
@ -281,7 +281,7 @@ void bhv_1up_hidden_loop(void) {
|
|||
void bhv_1up_hidden_trigger_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
}
|
||||
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
|
@ -305,9 +305,9 @@ void bhv_1up_hidden_in_pole_loop(void) {
|
|||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oForwardVel);
|
||||
network_init_object_field(o, &o->o1UpHiddenUnkF4);
|
||||
network_init_object_field(o, &o->header.gfx.node.flags);
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field(o, &o->oIntangibleTimer);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.node.flags, 16);
|
||||
}
|
||||
|
||||
UNUSED s16 sp26;
|
||||
|
@ -352,7 +352,7 @@ void bhv_1up_hidden_in_pole_loop(void) {
|
|||
void bhv_1up_hidden_in_pole_trigger_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
}
|
||||
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
|
@ -370,7 +370,7 @@ void bhv_1up_hidden_in_pole_trigger_loop(void) {
|
|||
void bhv_1up_hidden_in_pole_spawner_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
}
|
||||
|
||||
if (gNetworkAreaSyncing || !gNetworkAreaLoaded) {
|
||||
|
|
|
@ -91,7 +91,7 @@ void bhv_pyramid_top_loop(void) {
|
|||
if (!network_sync_object_initialized(o)) {
|
||||
struct SyncObject *so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||
if (so) {
|
||||
network_init_object_field(o, &o->activeFlags);
|
||||
network_init_object_field_with_size(o, &o->activeFlags, 16);
|
||||
network_init_object_field(o, &o->oAction);
|
||||
network_init_object_field(o, &o->oPrevAction);
|
||||
network_init_object_field(o, &o->oTimer);
|
||||
|
|
|
@ -21,7 +21,7 @@ void bhv_thi_tiny_island_top_loop(void) {
|
|||
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->header.gfx.node.flags);
|
||||
network_init_object_field_with_size(o, &o->header.gfx.node.flags, 16);
|
||||
}
|
||||
|
||||
struct MarioState* marioState = nearest_mario_state_to_object(o);
|
||||
|
|
|
@ -655,7 +655,7 @@ void bhv_ukiki_init(void) {
|
|||
network_init_object_field(o, &o->oUkikiChaseFleeRange);
|
||||
network_init_object_field(o, &o->oUkikiCageSpinTimer);
|
||||
network_init_object_field(o, &o->oIntangibleTimer);
|
||||
network_init_object_field(o, &o->globalPlayerIndex);
|
||||
network_init_object_field_with_size(o, &o->globalPlayerIndex, 8);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -25,7 +25,7 @@ void bhv_water_level_diamond_loop(void) {
|
|||
network_init_object_field(o, &o->oWaterLevelTriggerTargetWaterLevel);
|
||||
network_init_object_field(o, &o->oAngleVelYaw);
|
||||
network_init_object_field(o, &o->oFaceAngleYaw);
|
||||
network_init_object_field(o, &gWDWWaterLevelChanging);
|
||||
network_init_object_field_with_size(o, &gWDWWaterLevelChanging, 16);
|
||||
}
|
||||
|
||||
if (gEnvironmentRegions != NULL) {
|
||||
|
|
|
@ -78,6 +78,7 @@ struct SyncObject {
|
|||
void (*override_ownership)(u8* shouldOverride, u8* shouldOwn);
|
||||
void (*on_forget)(void);
|
||||
void* extraFields[MAX_SYNC_OBJECT_FIELDS];
|
||||
u8 extraFieldsSize[MAX_SYNC_OBJECT_FIELDS];
|
||||
bool rememberLastReliablePacket;
|
||||
bool lastReliablePacketIsStale;
|
||||
u16 extendedModelId;
|
||||
|
|
|
@ -171,6 +171,7 @@ void forget_ent_reliable_packet(struct Object* o);
|
|||
void network_override_object(u8 syncId, struct Object* o);
|
||||
struct SyncObject* network_init_object(struct Object* object, float maxSyncDistance);
|
||||
void network_init_object_field(struct Object* o, void* field);
|
||||
void network_init_object_field_with_size(struct Object *o, void* field, u8 size);
|
||||
bool network_owns_object(struct Object* o);
|
||||
bool network_sync_object_initialized(struct Object* o);
|
||||
void network_clear_sync_objects(void);
|
||||
|
|
|
@ -154,6 +154,7 @@ struct SyncObject* network_init_object(struct Object *o, float maxSyncDistance)
|
|||
}
|
||||
so->randomSeed = (u16)(o->oSyncID * 7951);
|
||||
memset(so->extraFields, 0, sizeof(void*) * MAX_SYNC_OBJECT_FIELDS);
|
||||
memset(so->extraFieldsSize, 0, sizeof(u8) * MAX_SYNC_OBJECT_FIELDS);
|
||||
|
||||
sLastSyncEntReliablePacket[o->oSyncID].error = true;
|
||||
|
||||
|
@ -167,7 +168,23 @@ void network_init_object_field(struct Object *o, void* field) {
|
|||
// remember to synchronize this extra field
|
||||
struct SyncObject* so = &gSyncObjects[o->oSyncID];
|
||||
u8 index = so->extraFieldCount++;
|
||||
if (so->extraFieldCount >= MAX_SYNC_OBJECT_FIELDS) { return; }
|
||||
so->extraFields[index] = field;
|
||||
so->extraFieldsSize[index] = 32;
|
||||
}
|
||||
|
||||
void network_init_object_field_with_size(struct Object *o, void* field, u8 size) {
|
||||
if (o->coopFlags & COOP_OBJ_FLAG_NON_SYNC) { return; }
|
||||
if (o->oSyncID == 0) { return; }
|
||||
|
||||
SOFT_ASSERT(size == 8 || size == 16 || size == 32 || size == 64);
|
||||
|
||||
// remember to synchronize this extra field
|
||||
struct SyncObject* so = &gSyncObjects[o->oSyncID];
|
||||
u8 index = so->extraFieldCount++;
|
||||
if (so->extraFieldCount >= MAX_SYNC_OBJECT_FIELDS) { return; }
|
||||
so->extraFields[index] = field;
|
||||
so->extraFieldsSize[index] = size;
|
||||
}
|
||||
|
||||
bool network_owns_object(struct Object* o) {
|
||||
|
@ -427,7 +444,7 @@ static void packet_write_object_extra_fields(struct Packet* p, struct Object* o)
|
|||
// write the extra field
|
||||
for (u8 i = 0; i < so->extraFieldCount; i++) {
|
||||
SOFT_ASSERT(so->extraFields[i] != NULL);
|
||||
packet_write(p, so->extraFields[i], sizeof(u32));
|
||||
packet_write(p, so->extraFields[i], so->extraFieldsSize[i] / 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -445,7 +462,7 @@ static void packet_read_object_extra_fields(struct Packet* p, struct Object* o)
|
|||
// read the extra fields
|
||||
for (u8 i = 0; i < extraFieldsCount; i++) {
|
||||
SOFT_ASSERT(so->extraFields[i] != NULL);
|
||||
packet_read(p, so->extraFields[i], sizeof(u32));
|
||||
packet_read(p, so->extraFields[i], so->extraFieldsSize[i] / 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue