Skip to content

Commit f88e9d0

Browse files
committed
YNO: Add server-synced variables
1 parent 2182406 commit f88e9d0

7 files changed

Lines changed: 99 additions & 5 deletions

File tree

CMakePresets.json

Lines changed: 57 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/game_config.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
# include "platform/libretro/ui.h"
3737
#endif
3838

39+
#include "multiplayer/game_multiplayer.h"
40+
3941
namespace {
4042
std::string config_path;
4143
std::string soundfont_path;
@@ -607,8 +609,13 @@ void Game_Config::LoadFromStream(Filesystem_Stream::InputStream& is) {
607609
}
608610

609611
/** AUDIO SECTION */
610-
audio.music_volume.FromIni(ini);
611-
audio.sound_volume.FromIni(ini);
612+
if (!GMI().settings.mute_audio) {
613+
audio.music_volume.FromIni(ini);
614+
audio.sound_volume.FromIni(ini);
615+
} else {
616+
audio.music_volume.Set(0);
617+
audio.sound_volume.Set(0);
618+
}
612619
audio.fluidsynth_midi.FromIni(ini);
613620
audio.wildmidi_midi.FromIni(ini);
614621
audio.native_midi.FromIni(ini);

src/multiplayer/game_multiplayer.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "../cache.h"
3838
#include "chatname.h"
3939
#include "drawable_list.h"
40+
#include "main_data.h"
4041
#include "playerother.h"
4142
#include "web_api.h"
4243
#include "yno_connection.h"
@@ -200,6 +201,10 @@ void Game_Multiplayer::InitConnection() {
200201
sync_vars.push_back(p.var_id);
201202
}
202203
});
204+
connection.RegisterHandler<SyncServerVariablePacket>("ssv", [this] (SyncServerVariablePacket& p) {
205+
if (!Player::IsCollectiveUnconscious()) return;
206+
map_server_variables[p.var_id] = p.value;
207+
});
203208
connection.RegisterHandler<SyncEventPacket>("sev", [this] (SyncEventPacket& p) {
204209
if (p.trigger_type != 1) {
205210
sync_events.push_back(p.event_id);
@@ -795,6 +800,13 @@ void Game_Multiplayer::UpdateGlobalVariables() {
795800
UpdateCUWeather();
796801
}
797802

803+
void Game_Multiplayer::UpdateServerVariables() {
804+
for (const auto& it : map_server_variables) {
805+
Main_Data::game_variables->Set(it.first, it.second);
806+
}
807+
map_server_variables.clear();
808+
}
809+
798810
void Game_Multiplayer::Update() {
799811
if (session_active) {
800812
if (last_flash_frame_index > -1 && frame_index > last_flash_frame_index) {
@@ -886,6 +898,7 @@ void Game_Multiplayer::Update() {
886898

887899
if (!switching_room && !switched_room) {
888900
switched_room = true;
901+
UpdateServerVariables();
889902
}
890903

891904
UpdateGlobalVariables();

src/multiplayer/game_multiplayer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class Game_Multiplayer {
5252
void UpdateCUTime();
5353
void UpdateCUWeather();
5454
void UpdateGlobalVariables();
55+
void UpdateServerVariables();
5556

5657
struct {
5758
bool enable_sounds{ true };
@@ -68,6 +69,7 @@ class Game_Multiplayer {
6869
std::string session_token; // non-null if the user has an ynoproject account logged in
6970
int room_id{-1};
7071
int frame_index{-1};
72+
std::map<int, int> map_server_variables;
7173

7274
enum class NametagMode {
7375
NONE,

src/multiplayer/messages.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ namespace S2C {
119119
facing(Decode<int>(v.at(1))) {}
120120
const int facing;
121121
};
122-
122+
123123
class SpeedPacket : public PlayerPacket {
124124
public:
125125
SpeedPacket(const PL& v)
@@ -149,7 +149,7 @@ namespace S2C {
149149
const int p;
150150
const int f;
151151
};
152-
152+
153153
class RepeatingFlashPacket : public FlashPacket {
154154
public:
155155
RepeatingFlashPacket(const PL& v)
@@ -313,6 +313,15 @@ namespace S2C {
313313
const int sync_type;
314314
};
315315

316+
class SyncServerVariablePacket : public S2CPacket {
317+
public:
318+
SyncServerVariablePacket(const PL& v)
319+
: var_id(Decode<int>(v.at(0))), value(Decode<int>(v.at(1))) {}
320+
321+
const int var_id;
322+
const int value;
323+
};
324+
316325
class SyncEventPacket : public S2CPacket {
317326
public:
318327
SyncEventPacket(const PL& v)

src/platform/emscripten/interface.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <lcf/lsd/reader.h>
2323
#include <sstream>
2424

25+
#include "scene_settings.h"
2526
#include "system.h"
2627
#include "async_handler.h"
2728
#include "baseui.h"
@@ -241,6 +242,10 @@ void Emscripten_Interface::PreloadFile(std::string dir, std::string path, bool g
241242
}
242243
}
243244

245+
void Emscripten_Interface::SaveConfig() {
246+
Scene_Settings::SaveConfig(true);
247+
}
248+
244249
// Binding code
245250
EMSCRIPTEN_BINDINGS(player_interface) {
246251
emscripten::class_<Emscripten_Interface>("api")
@@ -267,6 +272,7 @@ EMSCRIPTEN_BINDINGS(player_interface) {
267272
.class_function("setSessionToken", &Emscripten_Interface::SetSessionToken, emscripten::allow_raw_pointers())
268273
.class_function("resetCanvas", &Emscripten_Interface::ResetCanvas)
269274
.class_function("preloadFile", &Emscripten_Interface::PreloadFile, emscripten::allow_raw_pointers())
275+
.class_function("saveConfig", &Emscripten_Interface::SaveConfig)
270276
;
271277

272278
emscripten::class_<Emscripten_Interface_Private>("api_private")

src/platform/emscripten/interface.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class Emscripten_Interface {
4343
static bool ResetCanvas();
4444

4545
static void PreloadFile(std::string dir, std::string path, bool graphic);
46+
static void SaveConfig();
4647
};
4748

4849
class Emscripten_Interface_Private {

0 commit comments

Comments
 (0)