summaryrefslogtreecommitdiff
path: root/src/networking
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-08-27 21:00:44 -0600
committerGitHub <noreply@github.com>2024-08-27 21:00:44 -0600
commit76f19c6de33e1220997a70cf300b499f9c6ea2b7 (patch)
tree9eba5d8c06cf8a8ccb1e046ac87afe3e34817d68 /src/networking
parenta1f0d32d666c07d0754d97f107a5be59153768fd (diff)
Networking Update & Fix (#66)
* Update start_game.c * Update networking.c * Update networking.h * Create MultiplayerWindow.cpp * Create MultiplayerWindow.h * Update start_game.c * Update render_player.c
Diffstat (limited to 'src/networking')
-rw-r--r--src/networking/networking.c6
-rw-r--r--src/networking/networking.h8
-rw-r--r--src/networking/start_game.c126
3 files changed, 78 insertions, 62 deletions
diff --git a/src/networking/networking.c b/src/networking/networking.c
index 0c0ffd777..54f5fd585 100644
--- a/src/networking/networking.c
+++ b/src/networking/networking.c
@@ -200,7 +200,7 @@ void handleReceivedData(const char* buffer, size_t bufSize) {
case PACKET_PLAYER:
replicate_player(data);
break;
- case PACKET_COURSE:
+ case PACKET_SET_COURSE:
set_course(data);
break;
case PACKET_PLAYER_ASSIGN_SLOTS:
@@ -223,3 +223,7 @@ void networking_cleanup(SDLNet_SocketSet socketSet) {
SDLNet_Quit();
SDL_Quit;
}
+
+void networking_disconnect(void) {
+ networking_cleanup(gNetwork.tcpSocket);
+}
diff --git a/src/networking/networking.h b/src/networking/networking.h
index 95de42002..2a7634d66 100644
--- a/src/networking/networking.h
+++ b/src/networking/networking.h
@@ -15,7 +15,8 @@ enum {
PACKET_LOADED,
PACKET_READY_UP,
PACKET_SET_CHARACTER,
- PACKET_COURSE,
+ PACKET_COURSE_VOTE,
+ PACKET_SET_COURSE,
PACKET_PLAYER_ASSIGN_SLOTS,
PACKET_START_SESSION,
PACKET_PLAYER,
@@ -32,6 +33,8 @@ typedef struct {
bool loaded;
bool playersLoaded; // Are all players loaded?
bool gameStarted;
+ uint32_t cupVote;
+ uint32_t character;
} Network;
extern Network gNetwork;
@@ -58,6 +61,9 @@ void networking_cleanup(SDLNet_SocketSet);
int networking_loop(void*);
void handleReceivedData(const char*, size_t);
void set_username(const char* username);
+void network_character_vote(uint32_t course);
+void network_cup_vote(uint32_t course);
+void networking_disconnect(void);
/* Start Game */
void spawn_network_players(f32*, f32*, f32);
diff --git a/src/networking/start_game.c b/src/networking/start_game.c
index 483b2b80f..6fc7dbb3d 100644
--- a/src/networking/start_game.c
+++ b/src/networking/start_game.c
@@ -25,6 +25,11 @@ void assign_player_control_types(void) {
if (clients[i].isAI) {
gPlayers[playerIndex].nControlFlags = 0;
} else if (clients[i].hasAuthority) {
+ //printf("PLAYER SLOT %d, INDEX %d\n", clients[i].slot, clients[i].character);
+
+ // Set player to the camera
+ //cameras[0].playerId = clients[i].slot;
+ //D_800DC5EC->player = &gPlayers[clients[i].slot];
// printf("PLAYER SLOT %d, INDEX %d\n", clients[i].slot, clients[i].character);
gPlayers[playerIndex].nControlFlags =
PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE; // Requires server replication to move.
@@ -37,9 +42,19 @@ void assign_player_control_types(void) {
// gNetwork.localPlayer = &gPlayers[i];
}
+void network_character_vote(uint32_t course) {
+ send_int_packet(gNetwork.tcpSocket, PACKET_SET_CHARACTER, course, sizeof(uint32_t));
+}
+
+void network_cup_vote(uint32_t course) {
+ send_int_packet(gNetwork.tcpSocket, PACKET_COURSE_VOTE, course, sizeof(uint32_t));
+}
+
+
void set_course(const char* data) {
if (data != NULL) {
- gCurrentCourseId = 8; //*(s16 *) data;
+ gCupSelection = data[0];
+ gCurrentCourseId = gCupCourseOrder[gCupSelection][CUP_COURSE_ONE];
}
}
@@ -106,12 +121,12 @@ void networking_start_session(const char* data) {
gGotoMode = RACING; // Enter race state
gGamestateNext = RACING;
gCCSelection = CC_150;
- gCupSelection = FLOWER_CUP;
- gCupCourseSelection = CUP_COURSE_FOUR;
+ //gCupSelection = FLOWER_CUP;
+ gCupCourseSelection = CUP_COURSE_ONE;
gScreenModeSelection = SCREEN_MODE_1P;
gModeSelection = GRAND_PRIX;
gPlayerCount = 1;
- gCurrentCourseId = 8;
+ //gCurrentCourseId = 8;
gDebugMenuSelection = DEBUG_MENU_EXITED;
func_8009E1C0();
func_800CA330(0x19);
@@ -150,64 +165,55 @@ void spawn_network_players(f32* arg0, f32* arg1, f32 arg2) {
u32 pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
printf("----- Spawn Players ------\n");
- // for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) {
- // s32 playerIndex = clients[i].slot;
- // printf("Spawned %s, in slot %d as char %d with flags 0x%X", clients[i].username, clients[i].slot,
- // gPlayers[playerIndex].nCharacter, gPlayers[playerIndex].nControlFlags);
-
- // if (gPlayers[playerIndex].nCharacter == -1) {
- // printf("\n\nCORRUPT PLAYER DATA\n\n");
- // } else {
- // printf(" X: %d, Z: %d\n", arg0[D_80165270[posX[playerIndex]]], arg1[D_80165270[posZ[playerIndex]]] + 250.0f) ;
- // spawn_player(&gPlayers[clients[i].slot], clients[i].slot, arg0[D_80165270[posX[clients[i].slot]]],
- // arg1[D_80165270[posZ[clients[i].slot]]] + 250.0f, arg2, 32768.0f, clients[i].character,
- // gPlayers[playerIndex].nControlFlags);
- // }
- // This index isn't right like this ^
-
- // if localClient.Slots
-
- spawn_player(&gPlayers[clients[0].slot], clients[0].slot, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, arg2,
- 32768.0f, clients[0].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
- spawn_player(&gPlayers[clients[1].slot], clients[1].slot, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2,
- 32768.0f, clients[1].character,
- PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- spawn_player(&gPlayers[clients[2].slot], clients[2].slot, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2,
- 32768.0f, clients[2].character,
- PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- spawn_player(&gPlayers[clients[3].slot], clients[3].slot, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2,
- 32768.0f, clients[3].character,
- PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- spawn_player(&gPlayers[clients[4].slot], clients[4].slot, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2,
- 32768.0f, clients[4].character,
- PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- spawn_player(&gPlayers[clients[5].slot], clients[5].slot, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2,
- 32768.0f, clients[5].character,
- PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- spawn_player(&gPlayers[clients[6].slot], clients[6].slot, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2,
- 32768.0f, clients[6].character,
- PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- spawn_player(&gPlayers[clients[7].slot], clients[7].slot, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2,
- 32768.0f, clients[7].character,
- PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ //for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) {
+ //s32 playerIndex = clients[i].slot;
+ //printf("Spawned %s, in slot %d as char %d with flags 0x%X", clients[i].username, clients[i].slot, gPlayers[playerIndex].nCharacter, gPlayers[playerIndex].nControlFlags);
+
+
+ //if (gPlayers[playerIndex].nCharacter == -1) {
+ // printf("\n\nCORRUPT PLAYER DATA\n\n");
+ //} else {
+ //printf(" X: %d, Z: %d\n", arg0[D_80165270[posX[playerIndex]]], arg1[D_80165270[posZ[playerIndex]]] + 250.0f) ;
+ //spawn_player(&gPlayers[clients[i].slot], clients[i].slot, arg0[D_80165270[posX[clients[i].slot]]], arg1[D_80165270[posZ[clients[i].slot]]] + 250.0f, arg2, 32768.0f, clients[i].character, gPlayers[playerIndex].nControlFlags);
+ //}
+ // This index isn't right like this ^
+
+ //if localClient.Slots
+
+ for (size_t i = 0; i < 8; i++) {
+ printf("a %d, %d\n", clients[i].slot, clients[i].character);
+ }
+
+ for (size_t i = 0; i < NETWORK_MAX_PLAYERS; i++) {
+ if (clients[i].hasAuthority) {
+ spawn_player(&gPlayers[0], i, arg0[clients[i].slot], arg1[clients[i].slot] + 250.0f, arg2, 32768.0f, clients[i].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
+ }
+ }
+
+ for (size_t i = 0; i < NETWORK_MAX_PLAYERS - 1; i++) {
+ if (!clients[i].hasAuthority) {
+ spawn_player(&gPlayers[clients[i].slot], i, arg0[clients[i].slot], arg1[clients[i].slot] + 250.0f, arg2, 32768.0f, clients[i].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ }
+ }
+
+ // spawn_player(&gPlayers[clients[0].slot], 0, arg0[clients[0].slot], arg1[clients[0].slot] + 250.0f, arg2, 32768.0f, clients[0].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
+ // spawn_player(&gPlayers[clients[1].slot], 1, arg0[clients[1].slot], arg1[clients[1].slot] + 250.0f, arg2, 32768.0f, clients[1].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[2].slot], 2, arg0[clients[2].slot], arg1[clients[2].slot] + 250.0f, arg2, 32768.0f, clients[2].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[3].slot], 3, arg0[clients[3].slot], arg1[clients[3].slot] + 250.0f, arg2, 32768.0f, clients[3].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[4].slot], 4, arg0[clients[4].slot], arg1[clients[4].slot] + 250.0f, arg2, 32768.0f, clients[4].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[5].slot], 5, arg0[clients[5].slot], arg1[clients[5].slot] + 250.0f, arg2, 32768.0f, clients[5].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[6].slot], 6, arg0[clients[6].slot], arg1[clients[6].slot] + 250.0f, arg2, 32768.0f, clients[6].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[7].slot], 7, arg0[clients[7].slot], arg1[clients[7].slot] + 250.0f, arg2, 32768.0f, clients[7].character, PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
//}
printf("--------------------------\n");
// gPlayers[i].nControlFlags
- // spawn_player(&gPlayers[clients[0].slot], clients[0].slot, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f,
- // arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
- // spawn_player(&gPlayers[clients[1].slot], clients[1].slot, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f,
- // arg2, 32768.0f, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- // spawn_player(&gPlayers[clients[2].slot], clients[2].slot, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f,
- // arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- // spawn_player(&gPlayers[clients[3].slot], clients[3].slot, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f,
- // arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- // spawn_player(&gPlayers[clients[4].slot], clients[4].slot, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f,
- // arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- // spawn_player(&gPlayers[clients[5].slot], clients[5].slot, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f,
- // arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- // spawn_player(&gPlayers[clients[6].slot], clients[6].slot, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f,
- // arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
- // spawn_player(&gPlayers[clients[7].slot], clients[7].slot, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f,
- // arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[0].slot], clients[0].slot, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
+ // spawn_player(&gPlayers[clients[1].slot], clients[1].slot, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[2].slot], clients[2].slot, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[3].slot], clients[3].slot, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[4].slot], clients[4].slot, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[5].slot], clients[5].slot, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[6].slot], clients[6].slot, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
+ // spawn_player(&gPlayers[clients[7].slot], clients[7].slot, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
}