From 59d08a90b9a8826e85e6dd1940a0b6c2d8d535f3 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 13 Jun 2021 17:47:58 -0700 Subject: [PATCH] Fixed how "levelAreaMustMatch" packets are sent/processed Instead of the server dropping them immediately, the server only drops the processing. This allows it to broadcast/send the packet to the correct client without the server processing it. Fixed how "static" level objects were detected. The old way was error prone and would consider spawned objects to be static anyway. Made ERROR_LOGs always show up, "disabling" logging only turns off INFO_LOGs now. --- src/game/behaviors/corkbox.inc.c | 2 +- src/game/obj_behaviors.c | 1 + src/game/obj_behaviors_2.c | 1 + src/pc/controller/controller_keyboard_debug.c | 2 +- src/pc/debuglog.h | 56 ++++++++++--------- src/pc/network/network.c | 17 ++++-- src/pc/network/network.h | 1 - src/pc/network/packets/packet.c | 15 +++++ src/pc/network/packets/packet.h | 4 ++ src/pc/network/packets/packet_area.c | 6 +- src/pc/network/packets/packet_area_request.c | 2 +- src/pc/network/packets/packet_change_area.c | 2 +- src/pc/network/packets/packet_change_level.c | 2 +- src/pc/network/packets/packet_level.c | 2 +- .../packets/packet_level_area_request.c | 2 +- src/pc/network/packets/packet_level_macro.c | 19 ++++++- src/pc/network/packets/packet_level_request.c | 2 +- .../packets/packet_level_respawn_info.c | 7 ++- src/pc/network/packets/packet_object.c | 5 +- src/pc/network/packets/packet_read_write.c | 39 ++++++------- src/pc/network/packets/packet_spawn_objects.c | 25 ++------- src/pc/network/packets/packet_sync_valid.c | 2 +- 22 files changed, 122 insertions(+), 92 deletions(-) diff --git a/src/game/behaviors/corkbox.inc.c b/src/game/behaviors/corkbox.inc.c index 9db8c0134..5e624848b 100644 --- a/src/game/behaviors/corkbox.inc.c +++ b/src/game/behaviors/corkbox.inc.c @@ -63,7 +63,7 @@ void create_respawner(s32 model, const BehaviorScript *behToSpawn, s32 minSpawnD respawner->oRespawnerBehaviorToRespawn = behToSpawn; respawner->oSyncID = syncID; - if (gSyncObjects[syncID].staticLevelSpawn) { + if (syncID < RESERVED_IDS_SYNC_OBJECT_OFFSET) { network_override_object(syncID, respawner); o->oSyncID = 0; o->oFlags |= OBJ_FLAG_PERSISTENT_RESPAWN; // pretty sure this is required diff --git a/src/game/obj_behaviors.c b/src/game/obj_behaviors.c index 1f5b960ed..aaca0d84d 100644 --- a/src/game/obj_behaviors.c +++ b/src/game/obj_behaviors.c @@ -32,6 +32,7 @@ #include "spawn_object.h" #include "spawn_sound.h" #include "pc/network/network.h" +#include "pc/network/reservation_area.h" #include "game/rng_position.h" /** diff --git a/src/game/obj_behaviors_2.c b/src/game/obj_behaviors_2.c index 00874eab2..82c000a78 100644 --- a/src/game/obj_behaviors_2.c +++ b/src/game/obj_behaviors_2.c @@ -45,6 +45,7 @@ #include "seq_ids.h" #include "spawn_sound.h" #include "pc/network/network.h" +#include "pc/network/reservation_area.h" #define POS_OP_SAVE_POSITION 0 #define POS_OP_COMPUTE_VELOCITY 1 diff --git a/src/pc/controller/controller_keyboard_debug.c b/src/pc/controller/controller_keyboard_debug.c index 97415e78c..57d91dccc 100644 --- a/src/pc/controller/controller_keyboard_debug.c +++ b/src/pc/controller/controller_keyboard_debug.c @@ -13,7 +13,7 @@ #ifdef DEBUG -static u8 warpToLevel = LEVEL_CCM; +static u8 warpToLevel = LEVEL_BOB; #define SCANCODE_0 0x0B #define SCANCODE_1 0x02 diff --git a/src/pc/debuglog.h b/src/pc/debuglog.h index c38a38eb5..46f689b65 100644 --- a/src/pc/debuglog.h +++ b/src/pc/debuglog.h @@ -2,39 +2,43 @@ #include #include "pc/network/network.h" -#if defined(DEBUG) && !defined(DISABLE_MODULE_LOG) - static void debuglog_print_timestamp(void) { - time_t ltime = time(NULL); - char* str = asctime(localtime(<ime)); - printf("%.*s", (int)strlen(str) - 1, str); +static void _debuglog_print_timestamp(void) { + time_t ltime = time(NULL); + char* str = asctime(localtime(<ime)); + printf("%.*s", (int)strlen(str) - 1, str); } - static void debuglog_print_network_type(void) { - printf(" [%02d] ", (gNetworkPlayerLocal != NULL) ? gNetworkPlayerLocal->globalIndex : -1); - } +static void _debuglog_print_network_type(void) { + printf(" [%02d] ", (gNetworkPlayerLocal != NULL) ? gNetworkPlayerLocal->globalIndex : -1); +} - static void debuglog_print_log_type(char* logType) { - printf("[%s] ", logType); - } +static void _debuglog_print_log_type(char* logType) { + printf("[%s] ", logType); +} - static void debuglog_print_short_filename(char* filename) { - char* last = strrchr(filename, '/'); - if (last != NULL) { - printf("%s: ", last + 1); - } else { - printf("???: "); - } +static void _debuglog_print_short_filename(char* filename) { + char* last = strrchr(filename, '/'); + if (last != NULL) { + printf("%s: ", last + 1); } - - static void debuglog_print_log(char* logType, char* filename) { - debuglog_print_timestamp(); - debuglog_print_network_type(); - debuglog_print_log_type(logType); - debuglog_print_short_filename(filename); + else { + printf("???: "); } +} - #define LOG_INFO(...) ( debuglog_print_log("INFO ", __FILE__), printf(__VA_ARGS__), printf("\n") ) - #define LOG_ERROR(...) ( debuglog_print_log("ERROR", __FILE__), printf(__VA_ARGS__), printf("\n") ) +static void _debuglog_print_log(char* logType, char* filename) { + _debuglog_print_timestamp(); + _debuglog_print_network_type(); + _debuglog_print_log_type(logType); + _debuglog_print_short_filename(filename); +} + +#if defined(DEBUG) && defined(DISABLE_MODULE_LOG) + #define LOG_INFO(...) + #define LOG_ERROR(...) ( _debuglog_print_log("ERROR", __FILE__), printf(__VA_ARGS__), printf("\n") ) +#elif defined(DEBUG) && !defined(DISABLE_MODULE_LOG) + #define LOG_INFO(...) ( _debuglog_print_log("INFO ", __FILE__), printf(__VA_ARGS__), printf("\n") ) + #define LOG_ERROR(...) ( _debuglog_print_log("ERROR", __FILE__), printf(__VA_ARGS__), printf("\n") ) #else #define LOG_INFO(...) #define LOG_ERROR(...) diff --git a/src/pc/network/network.c b/src/pc/network/network.c index d5015d267..a5b2ba4ec 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -95,11 +95,6 @@ void network_on_init_level(void) { } void network_on_loaded_level(void) { - // set all sync objects as staticLevelSpawn - for (int i = 0; i < MAX_SYNC_OBJECTS; i++) { - gSyncObjects[i].staticLevelSpawn = true; - } - // check for level change struct NetworkPlayer* np = gNetworkPlayerLocal; if (np != NULL) { @@ -174,7 +169,17 @@ void network_send(struct Packet* p) { } for (int i = 1; i < MAX_PLAYERS; i++) { - if (!gNetworkPlayers[i].connected) { continue; } + struct NetworkPlayer* np = &gNetworkPlayers[i]; + if (!np->connected) { continue; } + + // don't send a packet to a player that can't receive it + if (p->levelAreaMustMatch) { + if (p->courseNum != np->currCourseNum) { continue; } + if (p->actNum != np->currActNum) { continue; } + if (p->levelNum != np->currLevelNum) { continue; } + if (p->areaIndex != np->currAreaIndex) { continue; } + } + p->localIndex = i; network_send_to(i, p); } diff --git a/src/pc/network/network.h b/src/pc/network/network.h index bd5c2289e..fdaa127fa 100644 --- a/src/pc/network/network.h +++ b/src/pc/network/network.h @@ -45,7 +45,6 @@ struct SyncObject { struct Object* o; float maxSyncDistance; bool owned; - bool staticLevelSpawn; clock_t clockSinceUpdate; void* behavior; u16 txEventId; diff --git a/src/pc/network/packets/packet.c b/src/pc/network/packets/packet.c index a847c900e..c58fdab8a 100644 --- a/src/pc/network/packets/packet.c +++ b/src/pc/network/packets/packet.c @@ -3,6 +3,21 @@ #include "pc/debuglog.h" void packet_process(struct Packet* p) { + if (p->levelAreaMustMatch) { + extern s16 gCurrCourseNum, gCurrActNum, gCurrLevelNum, gCurrAreaIndex; + bool levelAreaMismatch = + (p->courseNum != gCurrCourseNum + || p->actNum != gCurrActNum + || p->levelNum != gCurrLevelNum + || p->areaIndex != gCurrAreaIndex); + // drop packet + if (levelAreaMismatch) { + LOG_INFO("dropping level mismatch packet %d", p->packetType); + LOG_INFO(" (%d, %d, %d, %d) != (%d, %d, %d, %d)", p->courseNum, p->actNum, p->levelNum, p->areaIndex, gCurrCourseNum, gCurrActNum, gCurrLevelNum, gCurrAreaIndex); + return; + } + } + switch (p->packetType) { case PACKET_ACK: network_receive_ack(p); break; case PACKET_PLAYER: network_receive_player(p); break; diff --git a/src/pc/network/packets/packet.h b/src/pc/network/packets/packet.h index fcd1a4195..7f5f5e50f 100644 --- a/src/pc/network/packets/packet.h +++ b/src/pc/network/packets/packet.h @@ -70,6 +70,10 @@ struct Packet { u8 orderedFromGlobalId; u8 orderedGroupId; u8 orderedSeqId; + u8 courseNum; + u8 actNum; + u8 levelNum; + u8 areaIndex; u8 buffer[PACKET_LENGTH]; }; diff --git a/src/pc/network/packets/packet_area.c b/src/pc/network/packets/packet_area.c index 2b08723b9..e289f8076 100644 --- a/src/pc/network/packets/packet_area.c +++ b/src/pc/network/packets/packet_area.c @@ -1,5 +1,6 @@ #include #include "../network.h" +#include "../reservation_area.h" #include "game/interaction.h" #include "game/level_update.h" #include "game/area.h" @@ -54,10 +55,9 @@ void network_send_area(struct NetworkPlayer* toNp) { network_send_to(toNp->localIndex, &p); // send non-static objects - for (int i = 0; i < MAX_SYNC_OBJECTS; i++) { + for (int i = RESERVED_IDS_SYNC_OBJECT_OFFSET; i < MAX_SYNC_OBJECTS; i++) { struct SyncObject* so = &gSyncObjects[i]; if (so == NULL || so->o == NULL || so->o->oSyncID != (u32)i) { continue; } - if (so->staticLevelSpawn) { continue; } if (so->o->behavior == bhvRespawner) { continue; } struct Object* spawn_objects[] = { so->o }; @@ -136,7 +136,7 @@ void network_receive_area(struct Packet* p) { struct SyncObject* so = &gSyncObjects[syncId]; LOG_INFO("rx respawner"); - if (so->staticLevelSpawn) { + if (syncId < RESERVED_IDS_SYNC_OBJECT_OFFSET) { struct Object* respawner = spawn_object_abs_with_rot(gMarioStates[0].marioObj, 0, MODEL_NONE, bhvRespawner, posX, posY, posZ, 0, 0, 0); respawner->parentObj = respawner; respawner->oBehParams = behParams; diff --git a/src/pc/network/packets/packet_area_request.c b/src/pc/network/packets/packet_area_request.c index 152bb88c4..8355d450b 100644 --- a/src/pc/network/packets/packet_area_request.c +++ b/src/pc/network/packets/packet_area_request.c @@ -1,6 +1,6 @@ #include #include "../network.h" -//#define DISABLE_MODULE_LOG 1 +#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" void network_send_area_request(struct NetworkPlayer* fromNp, struct NetworkPlayer* toNp) { diff --git a/src/pc/network/packets/packet_change_area.c b/src/pc/network/packets/packet_change_area.c index 921cb19b8..d7c692062 100644 --- a/src/pc/network/packets/packet_change_area.c +++ b/src/pc/network/packets/packet_change_area.c @@ -2,7 +2,7 @@ #include "../network.h" #include "../reservation_area.h" #include "level_table.h" -//#define DISABLE_MODULE_LOG 1 +#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" static void player_changed_area(struct NetworkPlayer* np, s16 courseNum, s16 actNum, s16 levelNum, s16 areaIndex) { diff --git a/src/pc/network/packets/packet_change_level.c b/src/pc/network/packets/packet_change_level.c index 95ca3f2ae..19fc7f612 100644 --- a/src/pc/network/packets/packet_change_level.c +++ b/src/pc/network/packets/packet_change_level.c @@ -2,7 +2,7 @@ #include "../network.h" #include "../reservation_area.h" #include "level_table.h" -//#define DISABLE_MODULE_LOG 1 +#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" static void player_changed_level(struct NetworkPlayer* np, s16 courseNum, s16 actNum, s16 levelNum, s16 areaIndex) { diff --git a/src/pc/network/packets/packet_level.c b/src/pc/network/packets/packet_level.c index 5bacb6ea9..e80813710 100644 --- a/src/pc/network/packets/packet_level.c +++ b/src/pc/network/packets/packet_level.c @@ -2,7 +2,7 @@ #include "../network.h" #include "game/interaction.h" #include "game/level_update.h" -//#define DISABLE_MODULE_LOG 1 +#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" void network_send_level(struct NetworkPlayer* toNp, bool sendArea) { diff --git a/src/pc/network/packets/packet_level_area_request.c b/src/pc/network/packets/packet_level_area_request.c index 81b1e63cc..73d1c8aff 100644 --- a/src/pc/network/packets/packet_level_area_request.c +++ b/src/pc/network/packets/packet_level_area_request.c @@ -1,6 +1,6 @@ #include #include "../network.h" -//#define DISABLE_MODULE_LOG 1 +#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" void network_send_level_area_request(struct NetworkPlayer* fromNp, struct NetworkPlayer* toNp) { diff --git a/src/pc/network/packets/packet_level_macro.c b/src/pc/network/packets/packet_level_macro.c index 0e28adeb5..41c3d07d0 100644 --- a/src/pc/network/packets/packet_level_macro.c +++ b/src/pc/network/packets/packet_level_macro.c @@ -11,7 +11,7 @@ #include "object_fields.h" #include "behavior_table.h" #include "model_ids.h" -#define DISABLE_MODULE_LOG 1 +//#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" // TODO: move to common utility location @@ -88,7 +88,7 @@ static void network_send_level_macro_area(struct NetworkPlayer* destNp, u8 areaI // check for special cases const BehaviorScript* behavior = MacroObjectPresets[presetID].behavior; - if (behavior == bhvCoinFormation && *respawnInfo != 0) { + if ((behavior == bhvCoinFormation || behavior == bhvGoombaTripletSpawner) && *respawnInfo != 0) { *macroSpecialCount = *macroSpecialCount + 1; u16 offset = respawnInfo - area->macroObjects; packet_write(&p, &offset, sizeof(u16)); @@ -197,6 +197,21 @@ void network_receive_level_macro(struct Packet* p) { } LOG_INFO("rx macro special: coin formation"); } + else if (behavior == bhvGoombaTripletSpawner) { + o->oBehParams = *respawnInfo; + u8 goombaParams = (o->oBehParams >> 8) & 0xFF; + + u8 childIndex = 0; + for (int i = 0; i < OBJECT_POOL_CAPACITY; i++) { + struct Object* o2 = &gObjectPool[i]; + if (o2->parentObj != o) { continue; } + if (o2 == o) { continue; } + if (goombaParams & (1 << childIndex++)) { + obj_mark_for_deletion(o2); + } + } + LOG_INFO("rx macro special: goomba triplet %d", *respawnInfo); + } } } } \ No newline at end of file diff --git a/src/pc/network/packets/packet_level_request.c b/src/pc/network/packets/packet_level_request.c index e18a7d47e..4a426355f 100644 --- a/src/pc/network/packets/packet_level_request.c +++ b/src/pc/network/packets/packet_level_request.c @@ -1,6 +1,6 @@ #include #include "../network.h" -//#define DISABLE_MODULE_LOG 1 +#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" void network_send_level_request(struct NetworkPlayer* fromNp, struct NetworkPlayer* toNp) { diff --git a/src/pc/network/packets/packet_level_respawn_info.c b/src/pc/network/packets/packet_level_respawn_info.c index c8f3e1554..e278a4997 100644 --- a/src/pc/network/packets/packet_level_respawn_info.c +++ b/src/pc/network/packets/packet_level_respawn_info.c @@ -10,7 +10,7 @@ #include "object_fields.h" #include "behavior_table.h" #include "model_ids.h" -#define DISABLE_MODULE_LOG 1 +//#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" #define ERR_COULD_NOT_FIND_OBJECT ((u16)-1) @@ -133,15 +133,16 @@ void network_send_level_respawn_info(struct Object* o, u8 respawnInfoBits) { if (np->currCourseNum != gCurrCourseNum) { continue; } if (np->currActNum != gCurrActNum) { continue; } if (np->currLevelNum != gCurrLevelNum) { continue; } + if (np == gNetworkPlayerLocal) { continue; } struct Packet p2; packet_duplicate(&p, &p2); network_send_to(np->localIndex, &p2); + LOG_INFO("tx level respawn info to %d", np->globalIndex); } } else { network_send_to(gNetworkPlayerServer->localIndex, &p); + LOG_INFO("tx level respawn info to %d", gNetworkPlayerServer->globalIndex); } - - LOG_INFO("tx level respawn info"); } void network_receive_level_respawn_info(struct Packet* p) { diff --git a/src/pc/network/packets/packet_object.c b/src/pc/network/packets/packet_object.c index 153a12172..989a485c3 100644 --- a/src/pc/network/packets/packet_object.c +++ b/src/pc/network/packets/packet_object.c @@ -69,7 +69,7 @@ void network_override_object(u8 syncId, struct Object* o) { struct SyncObject* network_init_object(struct Object *o, float maxSyncDistance) { // HACK: an odd way to detect if this entity was spawned from a staticLevel respawner - bool wasStaticRespawner = (o->oSyncID != 0 && gSyncObjects[o->oSyncID].o == o && gSyncObjects[o->oSyncID].staticLevelSpawn); + bool wasStaticRespawner = (o->oSyncID != 0 && gSyncObjects[o->oSyncID].o == o && o->oSyncID < RESERVED_IDS_SYNC_OBJECT_OFFSET); // generate new sync ID network_set_sync_id(o); @@ -96,7 +96,6 @@ struct SyncObject* network_init_object(struct Object *o, float maxSyncDistance) so->override_ownership = NULL; so->syncDeathEvent = true; so->randomSeed = (u16)(o->oSyncID * 7951); - so->staticLevelSpawn = wasStaticRespawner; memset(so->extraFields, 0, sizeof(void*) * MAX_SYNC_OBJECT_FIELDS); sLastSyncEntReliablePacket[o->oSyncID].error = true; @@ -512,7 +511,7 @@ void network_receive_object(struct Packet* p) { void network_forget_sync_object(struct SyncObject* so) { // invalidate last packet sent - if (so->staticLevelSpawn && so->o != NULL) { + if (so != NULL && so->o != NULL && so->o->oSyncID < RESERVED_IDS_SYNC_OBJECT_OFFSET) { u8 syncId = so->o->oSyncID; struct SyncObject* so2 = &gSyncObjects[syncId]; if (so == so2) { diff --git a/src/pc/network/packets/packet_read_write.c b/src/pc/network/packets/packet_read_write.c index b2df20d58..3fb2a7932 100644 --- a/src/pc/network/packets/packet_read_write.c +++ b/src/pc/network/packets/packet_read_write.c @@ -56,10 +56,14 @@ void packet_init(struct Packet* packet, enum PacketType packetType, bool reliabl // write location if (levelAreaMustMatch) { - packet_write(packet, &gCurrCourseNum, sizeof(s16)); - packet_write(packet, &gCurrActNum, sizeof(s16)); - packet_write(packet, &gCurrLevelNum, sizeof(s16)); - packet_write(packet, &gCurrAreaIndex, sizeof(s16)); + packet_write(packet, &gCurrCourseNum, sizeof(u8)); + packet_write(packet, &gCurrActNum, sizeof(u8)); + packet_write(packet, &gCurrLevelNum, sizeof(u8)); + packet_write(packet, &gCurrAreaIndex, sizeof(u8)); + packet->courseNum = gCurrCourseNum; + packet->actNum = gCurrActNum; + packet->levelNum = gCurrLevelNum; + packet->areaIndex = gCurrAreaIndex; } } @@ -75,6 +79,10 @@ void packet_duplicate(struct Packet* srcPacket, struct Packet* dstPacket) { dstPacket->sent = false; dstPacket->orderedGroupId = srcPacket->orderedGroupId; dstPacket->orderedSeqId = srcPacket->orderedSeqId; + dstPacket->courseNum = srcPacket->courseNum; + dstPacket->actNum = srcPacket->actNum; + dstPacket->levelNum = srcPacket->levelNum; + dstPacket->areaIndex = srcPacket->areaIndex; memcpy(&dstPacket->buffer[0], &srcPacket->buffer[0], srcPacket->dataLength); @@ -122,27 +130,20 @@ u8 packet_initial_read(struct Packet* packet) { // read destination packet_read(packet, &packet->destGlobalId, sizeof(u8)); - if (packet->levelAreaMustMatch) { - s16 currCourseNum, currActNum, currLevelNum, currAreaIndex; - packet_read(packet, &currCourseNum, sizeof(s16)); - packet_read(packet, &currActNum, sizeof(s16)); - packet_read(packet, &currLevelNum, sizeof(s16)); - packet_read(packet, &currAreaIndex, sizeof(s16)); - bool levelAreaMismatch = - (currCourseNum != gCurrCourseNum - || currActNum != gCurrActNum - || currLevelNum != gCurrLevelNum - || currAreaIndex != gCurrAreaIndex); - // drop packet - if (levelAreaMismatch) { return FALSE; } - } - // read ordered packet information if (packetIsOrdered) { packet_read(packet, &packet->orderedFromGlobalId, sizeof(u8)); packet_read(packet, &packet->orderedGroupId, sizeof(u8)); packet_read(packet, &packet->orderedSeqId, sizeof(u8)); } + + // read location + if (packet->levelAreaMustMatch) { + packet_read(packet, &packet->courseNum, sizeof(u8)); + packet_read(packet, &packet->actNum, sizeof(u8)); + packet_read(packet, &packet->levelNum, sizeof(u8)); + packet_read(packet, &packet->areaIndex, sizeof(u8)); + } // don't drop packet return TRUE; diff --git a/src/pc/network/packets/packet_spawn_objects.c b/src/pc/network/packets/packet_spawn_objects.c index 96673f27b..3b8544cfa 100644 --- a/src/pc/network/packets/packet_spawn_objects.c +++ b/src/pc/network/packets/packet_spawn_objects.c @@ -47,16 +47,10 @@ void network_send_spawn_objects(struct Object* objects[], u32 models[], u8 objec void network_send_spawn_objects_to(u8 sendToLocalIndex, struct Object* objects[], u32 models[], u8 objectCount) { assert(objectCount < MAX_SPAWN_OBJECTS_PER_PACKET); + if (sendToLocalIndex == gNetworkPlayerLocal->localIndex) { return; } struct Packet p; - packet_init(&p, PACKET_SPAWN_OBJECTS, true, false); - - // level location - extern s16 gCurrCourseNum, gCurrActNum, gCurrLevelNum, gCurrAreaIndex; - packet_write(&p, &gCurrCourseNum, sizeof(s16)); - packet_write(&p, &gCurrActNum, sizeof(s16)); - packet_write(&p, &gCurrLevelNum, sizeof(s16)); - packet_write(&p, &gCurrAreaIndex, sizeof(s16)); + packet_init(&p, PACKET_SPAWN_OBJECTS, true, true); // objects packet_write(&p, &objectCount, sizeof(u8)); @@ -78,24 +72,15 @@ void network_send_spawn_objects_to(u8 sendToLocalIndex, struct Object* objects[] if (sendToLocalIndex == PACKET_DESTINATION_BROADCAST) { network_send(&p); + LOG_INFO("tx spawn objects (BROADCAST)"); } else { network_send_to(sendToLocalIndex, &p); + LOG_INFO("tx spawn objects to %d", gNetworkPlayers[sendToLocalIndex].globalIndex); } } void network_receive_spawn_objects(struct Packet* p) { - // read level location - s16 courseNum, actNum, levelNum, areaIndex; - packet_read(p, &courseNum, sizeof(s16)); - packet_read(p, &actNum, sizeof(s16)); - packet_read(p, &levelNum, sizeof(s16)); - packet_read(p, &areaIndex, sizeof(s16)); - - extern s16 gCurrCourseNum, gCurrActNum, gCurrLevelNum, gCurrAreaIndex; - if (courseNum != gCurrCourseNum || actNum != gCurrActNum || levelNum != gCurrLevelNum || areaIndex != gCurrAreaIndex) { - LOG_ERROR("received an improper location"); - return; - } + LOG_INFO("rx spawn objects"); u8 objectCount = 0; packet_read(p, &objectCount, sizeof(u8)); diff --git a/src/pc/network/packets/packet_sync_valid.c b/src/pc/network/packets/packet_sync_valid.c index 427df3f3e..74aa602a6 100644 --- a/src/pc/network/packets/packet_sync_valid.c +++ b/src/pc/network/packets/packet_sync_valid.c @@ -1,6 +1,6 @@ #include #include "../network.h" -//#define DISABLE_MODULE_LOG 1 +#define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" void network_send_sync_valid(struct NetworkPlayer* toNp) {