From 13d504a953d6949d0d9c33855bc1661fe9e377c1 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 4 Jul 2021 22:40:04 -0700 Subject: [PATCH] Replaced old host/join menu with new DJUI menu system --- developer/debug.sh | 4 ++-- levels/entry.c | 22 +++++++++---------- src/game/mario.c | 2 +- src/game/obj_behaviors.c | 2 ++ src/game/spawn_object.c | 2 +- src/pc/djui/djui_panel.c | 3 ++- src/pc/djui/djui_panel_host_message.c | 20 ++++++++++++++++- src/pc/djui/djui_panel_join.c | 9 +++++++- src/pc/djui/djui_panel_main.c | 6 ----- src/pc/network/packets/packet_join.c | 4 +++- .../packets/packet_level_respawn_info.c | 2 ++ src/pc/network/packets/packet_object.c | 2 ++ 12 files changed, 53 insertions(+), 25 deletions(-) diff --git a/developer/debug.sh b/developer/debug.sh index 34fe6f85..0ee77b17 100644 --- a/developer/debug.sh +++ b/developer/debug.sh @@ -1,3 +1,3 @@ #!/bin/bash -#make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 DEVELOPMENT=1 STRICT=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here' -make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 DEVELOPMENT=1 STRICT=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here' -ex 'run --server 27015 --configfile sm64config_server.txt' +make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 DEVELOPMENT=1 STRICT=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here' +#make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 DEVELOPMENT=1 STRICT=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here' -ex 'run --server 27015 --configfile sm64config_server.txt' diff --git a/levels/entry.c b/levels/entry.c index 8d7de5df..0f1648ce 100644 --- a/levels/entry.c +++ b/levels/entry.c @@ -5,6 +5,7 @@ #ifdef IMMEDIATELOAD #include "levels/menu/header.h" +#include "levels/scripts.h" #else #include "levels/intro/header.h" #endif @@ -12,15 +13,14 @@ #include "make_const_nonconst.h" const LevelScript level_script_entry[] = { - INIT_LEVEL(), - SLEEP(/*frames*/ 2), - BLACKOUT(/*active*/ FALSE), - SET_REG(/*value*/ 0), -#ifdef IMMEDIATELOAD - EXECUTE(/*seg*/ 0x14, /*script*/ _introSegmentRomStart, /*scriptEnd*/ _introSegmentRomEnd, /*entry*/ level_main_menu_entry_1), - JUMP(/*target*/ level_main_menu_entry_1), -#else - EXECUTE(/*seg*/ 0x14, /*script*/ _introSegmentRomStart, /*scriptEnd*/ _introSegmentRomEnd, /*entry*/ level_intro_entry_1), - JUMP(/*target*/ level_script_entry), -#endif + SET_REG(/*value*/ LEVEL_CASTLE_GROUNDS), + JUMP(/*target*/ level_main_scripts_entry), + + // old behavior (intro) + //INIT_LEVEL(), + //SLEEP(/*frames*/ 2), + //BLACKOUT(/*active*/ FALSE), + //SET_REG(/*value*/ 0), + //EXECUTE(/*seg*/ 0x14, /*script*/ _introSegmentRomStart, /*scriptEnd*/ _introSegmentRomEnd, /*entry*/ level_intro_entry_1), + //JUMP(/*target*/ level_script_entry), }; diff --git a/src/game/mario.c b/src/game/mario.c index ab15bb4a..ba48f92d 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -1867,7 +1867,7 @@ s32 execute_mario_action(UNUSED struct Object *o) { s32 inLoop = TRUE; // hide inactive players struct NetworkPlayer* np = &gNetworkPlayers[gMarioState->playerIndex]; - if (np->type != NPT_LOCAL) { + if (gMarioState->playerIndex != 0) { bool levelAreaMismatch = (np->currCourseNum != gCurrCourseNum || np->currActNum != gCurrActNum diff --git a/src/game/obj_behaviors.c b/src/game/obj_behaviors.c index aaca0d84..1c66b5c1 100644 --- a/src/game/obj_behaviors.c +++ b/src/game/obj_behaviors.c @@ -514,6 +514,8 @@ s32 is_point_within_radius_of_mario(f32 x, f32 y, f32 z, s32 dist) { } u8 is_player_active(struct MarioState* m) { + if (gNetworkType == NT_NONE && m == &gMarioStates[0]) { return TRUE; } + if (m->action == ACT_BUBBLED) { return FALSE; } struct NetworkPlayer* np = &gNetworkPlayers[m->playerIndex]; if (np->type != NPT_LOCAL) { diff --git a/src/game/spawn_object.c b/src/game/spawn_object.c index b577d88f..055c33ac 100644 --- a/src/game/spawn_object.c +++ b/src/game/spawn_object.c @@ -199,7 +199,7 @@ void unload_object(struct Object *obj) { obj->header.gfx.node.flags &= ~GRAPH_RENDER_CYLBOARD; obj->header.gfx.node.flags &= ~GRAPH_RENDER_ACTIVE; - if (obj->oSyncID != 0) { + if (obj->oSyncID != 0 && gNetworkType != NT_NONE) { if (gSyncObjects[obj->oSyncID].syncDeathEvent) { network_send_object(obj); } else { diff --git a/src/pc/djui/djui_panel.c b/src/pc/djui/djui_panel.c index b31f1779..1b9a3765 100644 --- a/src/pc/djui/djui_panel.c +++ b/src/pc/djui/djui_panel.c @@ -129,5 +129,6 @@ void djui_panel_shutdown(void) { sPanelList = NULL; sPanelRemoving = NULL; sMoveAmount = 0; - + gInteractableOverridePad = false; + djui_cursor_set_visible(false); } \ No newline at end of file diff --git a/src/pc/djui/djui_panel_host_message.c b/src/pc/djui/djui_panel_host_message.c index 07c3adf8..5a4d6d9d 100644 --- a/src/pc/djui/djui_panel_host_message.c +++ b/src/pc/djui/djui_panel_host_message.c @@ -1,5 +1,6 @@ #include #include "djui.h" +#include "src/pc/network/network.h" #include "src/pc/utils/misc.h" #include "src/pc/configfile.h" @@ -18,6 +19,23 @@ Direct connections \\#ffa0a0\\require you\\#c8c8c8\\ to configure port forwardin Forward port '\\#d0d0ff\\%d\\#c8c8c8\\' for UDP.\ "; +void djui_panel_host_message_do_host(struct DjuiBase* caller) { + djui_panel_shutdown(); +#ifndef DISCORD_SDK + configNetworkSystem = 1; + network_set_system(NS_SOCKET); +#else + if (configNetworkSystem == 0) { + network_set_system(NS_DISCORD); + } else { + network_set_system(NS_SOCKET); + } +#endif + network_init(NT_SERVER); + extern s16 gChangeLevel; + gChangeLevel = 16; +} + void djui_panel_host_message_create(struct DjuiBase* caller) { f32 warningLines = 0; char* warningMessage = NULL; @@ -62,7 +80,7 @@ void djui_panel_host_message_create(struct DjuiBase* caller) { djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); djui_base_set_size(&button2->base, 0.485f, 64); djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_menu_back); + djui_interactable_hook_click(&button2->base, djui_panel_host_message_do_host); defaultBase = &button2->base; } } diff --git a/src/pc/djui/djui_panel_join.c b/src/pc/djui/djui_panel_join.c index 08ea4238..4d442499 100644 --- a/src/pc/djui/djui_panel_join.c +++ b/src/pc/djui/djui_panel_join.c @@ -1,4 +1,5 @@ #include "djui.h" +#include "src/pc/network/network.h" #include "src/pc/utils/misc.h" #include "src/pc/configfile.h" @@ -14,6 +15,12 @@ static char* sJoiningDirect = "\ Enter \\#d0d0ff\\direct connection\\#c8c8c8\\ IP and port:\ "; +void djui_panel_join_do_join(struct DjuiBase* caller) { + djui_panel_shutdown(); + network_set_system(NS_SOCKET); + network_init(NT_CLIENT); +} + void djui_panel_join_create(struct DjuiBase* caller) { f32 bodyHeight = 2 + 32 + 16 * 2 + 64; @@ -69,7 +76,7 @@ void djui_panel_join_create(struct DjuiBase* caller) { djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); djui_base_set_size(&button2->base, 0.485f, 64); djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_menu_back); + djui_interactable_hook_click(&button2->base, djui_panel_join_do_join); defaultBase = &button2->base; } } diff --git a/src/pc/djui/djui_panel_main.c b/src/pc/djui/djui_panel_main.c index 4ab47d83..795a0e13 100644 --- a/src/pc/djui/djui_panel_main.c +++ b/src/pc/djui/djui_panel_main.c @@ -1,12 +1,6 @@ #include "djui.h" #include "src/pc/controller/controller_sdl.h" -static void djui_panel_main_close(struct DjuiBase* caller) { - gInteractableOverridePad = false; - djui_panel_shutdown(); - djui_cursor_set_visible(false); -} - void djui_panel_main_create(struct DjuiBase* caller) { f32 bodyHeight = 64 * 4 + 16 * 3; diff --git a/src/pc/network/packets/packet_join.c b/src/pc/network/packets/packet_join.c index 704ba04f..84754ec2 100644 --- a/src/pc/network/packets/packet_join.c +++ b/src/pc/network/packets/packet_join.c @@ -152,5 +152,7 @@ void network_receive_join(struct Packet* p) { network_player_connected(NPT_LOCAL, myGlobalIndex); save_file_load_all(TRUE); - //custom_menu_goto_game(gCurrSaveFileNum); + + extern s16 gChangeLevel; + gChangeLevel = 16; } diff --git a/src/pc/network/packets/packet_level_respawn_info.c b/src/pc/network/packets/packet_level_respawn_info.c index a79e1b74..2506c676 100644 --- a/src/pc/network/packets/packet_level_respawn_info.c +++ b/src/pc/network/packets/packet_level_respawn_info.c @@ -93,6 +93,8 @@ static u16 get_spawn_info_index_of_object(struct Object* o) { //// void network_send_level_respawn_info(struct Object* o, u8 respawnInfoBits) { + if (gNetworkType == NT_NONE) { return; } + // make sure our area is valid if (!gNetworkPlayerLocal->currAreaSyncValid) { LOG_ERROR("my area is invalid"); diff --git a/src/pc/network/packets/packet_object.c b/src/pc/network/packets/packet_object.c index 54fea2b4..93aa55cf 100644 --- a/src/pc/network/packets/packet_object.c +++ b/src/pc/network/packets/packet_object.c @@ -383,6 +383,8 @@ static void packet_read_object_only_death(struct Packet* p, struct Object* o) { // ----- main send/receive ----- // void network_send_object(struct Object* o) { + if (gNetworkType == NT_NONE) { return; } + // sanity check SyncObject if (!network_sync_object_initialized(o)) { return; } if (o->behavior == bhvRespawner) { return; }