diff --git a/src/pc/network/packets/packet_collect_coin.c b/src/pc/network/packets/packet_collect_coin.c index aeb6dae6..b3e5231f 100644 --- a/src/pc/network/packets/packet_collect_coin.c +++ b/src/pc/network/packets/packet_collect_coin.c @@ -44,7 +44,7 @@ static struct Object* find_nearest_coin(const BehaviorScript *behavior, f32* pos } void network_send_collect_coin(struct Object* o) { - enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); + u16 behaviorId = get_id_from_behavior(o->behavior); struct Packet p; packet_init(&p, PACKET_COLLECT_COIN, true, true); @@ -57,7 +57,7 @@ void network_send_collect_coin(struct Object* o) { } void network_receive_collect_coin(struct Packet* p) { - enum BehaviorId behaviorId; + u16 behaviorId; f32 pos[3] = { 0 }; s16 numCoins = 0; s32 coinValue = 0; diff --git a/src/pc/network/packets/packet_collect_item.c b/src/pc/network/packets/packet_collect_item.c index d5a07558..f5b07b99 100644 --- a/src/pc/network/packets/packet_collect_item.c +++ b/src/pc/network/packets/packet_collect_item.c @@ -41,7 +41,7 @@ static struct Object* find_nearest_item(const BehaviorScript *behavior, f32* pos } void network_send_collect_item(struct Object* o) { - enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); + u16 behaviorId = get_id_from_behavior(o->behavior); struct Packet p; packet_init(&p, PACKET_COLLECT_ITEM, true, true); @@ -52,7 +52,7 @@ void network_send_collect_item(struct Object* o) { } void network_receive_collect_item(struct Packet* p) { - enum BehaviorId behaviorId; + u16 behaviorId; f32 pos[3] = { 0 }; packet_read(p, &behaviorId, sizeof(u16)); diff --git a/src/pc/network/packets/packet_collect_star.c b/src/pc/network/packets/packet_collect_star.c index 78bd656c..3f8e6d32 100644 --- a/src/pc/network/packets/packet_collect_star.c +++ b/src/pc/network/packets/packet_collect_star.c @@ -44,7 +44,7 @@ static struct Object* find_nearest_star(const BehaviorScript* behavior, f32* pos } void network_send_collect_star(struct Object* o, s16 coinScore, s16 starIndex) { - enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); + u16 behaviorId = get_id_from_behavior(o->behavior); struct Packet p; packet_init(&p, PACKET_COLLECT_STAR, true, false); @@ -61,7 +61,7 @@ void network_send_collect_star(struct Object* o, s16 coinScore, s16 starIndex) { void network_receive_collect_star(struct Packet* p) { f32 pos[3] = { 0 }; - enum BehaviorId behaviorId; + u16 behaviorId; s16 coinScore, starIndex; s16 lastSaveFileNum = gCurrSaveFileNum; s16 lastCourseNum = gCurrCourseNum; diff --git a/src/pc/network/packets/packet_kick.c b/src/pc/network/packets/packet_kick.c index 1593110b..21a0ef8b 100644 --- a/src/pc/network/packets/packet_kick.c +++ b/src/pc/network/packets/packet_kick.c @@ -4,9 +4,10 @@ #include "pc/debuglog.h" void network_send_kick(enum KickReasonType kickReason) { + u8 kickReasonType = kickReason; struct Packet p; packet_init(&p, PACKET_KICK, false, false); - packet_write(&p, &kickReason, sizeof(u8)); + packet_write(&p, &kickReasonType, sizeof(u8)); network_send_to(0, &p); } @@ -21,8 +22,10 @@ void network_receive_kick(struct Packet* p) { return; } - enum KickReasonType kickReason; - packet_read(p, &kickReason, sizeof(u8)); + u8 kickReasonType; + packet_read(p, &kickReasonType, sizeof(u8)); + enum KickReasonType kickReason = kickReasonType; + switch (kickReason) { case EKT_FULL_PARTY: custom_menu_error("The party is full."); break; default: custom_menu_error("Host has closed the connection."); break; diff --git a/src/pc/network/packets/packet_object.c b/src/pc/network/packets/packet_object.c index 579d4bf3..6fc58405 100644 --- a/src/pc/network/packets/packet_object.c +++ b/src/pc/network/packets/packet_object.c @@ -145,7 +145,7 @@ void network_set_sync_id(struct Object* o) { static void packet_write_object_header(struct Packet* p, struct Object* o) { struct SyncObject* so = &gSyncObjects[o->oSyncID]; - enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); + u16 behaviorId = get_id_from_behavior(o->behavior); packet_write(p, &gNetworkPlayerLocal->globalIndex, sizeof(u8)); packet_write(p, &o->oSyncID, sizeof(u32)); @@ -215,8 +215,9 @@ static struct SyncObject* packet_read_object_header(struct Packet* p, u8* fromLo packet_read(p, &so->randomSeed, sizeof(u16)); // make sure the behaviors match - enum BehaviorId behaviorId; + u16 behaviorId; packet_read(p, &behaviorId, sizeof(u16)); + BehaviorScript* behavior = (BehaviorScript*)get_behavior_from_id(behaviorId); if (behavior == NULL) { LOG_ERROR("unable to find behavior %04X for id %d", behaviorId, syncId); diff --git a/src/pc/network/packets/packet_read_write.c b/src/pc/network/packets/packet_read_write.c index 894891e1..4376b497 100644 --- a/src/pc/network/packets/packet_read_write.c +++ b/src/pc/network/packets/packet_read_write.c @@ -6,21 +6,25 @@ static u16 nextSeqNum = 1; void packet_init(struct Packet* packet, enum PacketType packetType, bool reliable, bool levelAreaMustMatch) { memset(packet->buffer, 0, PACKET_LENGTH); - packet->buffer[0] = (char)packetType; - if (reliable) { - memcpy(&packet->buffer[1], &nextSeqNum, 2); - packet->seqId = nextSeqNum; - nextSeqNum++; - if (nextSeqNum == 0) { nextSeqNum++; } - } - packet->dataLength = 3; - packet->cursor = 3; + packet->cursor = 0; + packet->dataLength = 0; packet->error = false; packet->reliable = reliable; packet->levelAreaMustMatch = levelAreaMustMatch; packet->requestBroadcast = false; packet->sent = false; + packet_write(packet, &packetType, sizeof(u8)); + if (reliable) { + packet_write(packet, &nextSeqNum, sizeof(u16)); + packet->seqId = nextSeqNum; + nextSeqNum++; + if (nextSeqNum == 0) { nextSeqNum++; } + } else { + u16 nullSeqNum = 0; + packet_write(packet, &nullSeqNum, sizeof(u16)); + } + // write packet flags u8 flags = 0; packet_write(packet, &flags, sizeof(u8)); // fill in the byte diff --git a/src/pc/network/packets/packet_spawn_objects.c b/src/pc/network/packets/packet_spawn_objects.c index 05c18b2c..8eccc166 100644 --- a/src/pc/network/packets/packet_spawn_objects.c +++ b/src/pc/network/packets/packet_spawn_objects.c @@ -19,7 +19,7 @@ static u8 onRemoteSpawnId = 0; struct SpawnObjectData { u8 parentId; u32 model; - enum BehaviorId behaviorId; + u16 behaviorId; s16 activeFlags; s32 rawData[80]; }; @@ -54,7 +54,7 @@ void network_send_spawn_objects(struct Object* objects[], u32 models[], u8 objec struct Object* o = objects[i]; u32 model = models[i]; u8 parentId = generate_parent_id(objects, i); - enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); + u16 behaviorId = get_id_from_behavior(o->behavior); packet_write(&p, &parentId, sizeof(u8)); packet_write(&p, &model, sizeof(u32)); packet_write(&p, &behaviorId, sizeof(u16));