|
|
|
@ -1,3 +1,6 @@ |
|
|
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
|
|
|
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
@ -80,6 +83,7 @@ static void PrintHelp(const char* argv0) { |
|
|
|
" Nickname, password, address and port for multiplayer\n" |
|
|
|
"-p, --program Pass following string as arguments to executable\n" |
|
|
|
"-u, --user Select a specific user profile from 0 to 7\n" |
|
|
|
"-d, --debug Run the GDB stub on a port from 1 to 65535\n" |
|
|
|
"-v, --version Output version information and exit\n"; |
|
|
|
} |
|
|
|
|
|
|
|
@ -162,24 +166,22 @@ static void OnMessageReceived(const Network::ChatEntry& msg) { |
|
|
|
} |
|
|
|
|
|
|
|
static void OnStatusMessageReceived(const Network::StatusMessageEntry& msg) { |
|
|
|
std::string message; |
|
|
|
std::string message = [&]() { |
|
|
|
switch (msg.type) { |
|
|
|
case Network::IdMemberJoin: |
|
|
|
message = fmt::format("{} has joined", msg.nickname); |
|
|
|
break; |
|
|
|
return fmt::format("{} has joined", msg.nickname); |
|
|
|
case Network::IdMemberLeave: |
|
|
|
message = fmt::format("{} has left", msg.nickname); |
|
|
|
break; |
|
|
|
return fmt::format("{} has left", msg.nickname); |
|
|
|
case Network::IdMemberKicked: |
|
|
|
message = fmt::format("{} has been kicked", msg.nickname); |
|
|
|
break; |
|
|
|
return fmt::format("{} has been kicked", msg.nickname); |
|
|
|
case Network::IdMemberBanned: |
|
|
|
message = fmt::format("{} has been banned", msg.nickname); |
|
|
|
break; |
|
|
|
return fmt::format("{} has been banned", msg.nickname); |
|
|
|
case Network::IdAddressUnbanned: |
|
|
|
message = fmt::format("{} has been unbanned", msg.nickname); |
|
|
|
break; |
|
|
|
return fmt::format("{} has been unbanned", msg.nickname); |
|
|
|
default: |
|
|
|
return std::string{}; |
|
|
|
} |
|
|
|
}(); |
|
|
|
if (!message.empty()) |
|
|
|
std::cout << std::endl << "* " << message << std::endl << std::endl; |
|
|
|
} |
|
|
|
@ -209,10 +211,10 @@ int main(int argc, char** argv) { |
|
|
|
} |
|
|
|
#endif
|
|
|
|
std::string filepath; |
|
|
|
std::optional<std::string> config_path; |
|
|
|
std::optional<std::string> config_path{}; |
|
|
|
std::string program_args; |
|
|
|
std::optional<int> selected_user; |
|
|
|
|
|
|
|
std::optional<int> selected_user{}; |
|
|
|
std::optional<u16> override_gdb_port{}; |
|
|
|
bool use_multiplayer = false; |
|
|
|
bool fullscreen = false; |
|
|
|
std::string nickname{}; |
|
|
|
@ -222,6 +224,7 @@ int main(int argc, char** argv) { |
|
|
|
|
|
|
|
static struct option long_options[] = { |
|
|
|
// clang-format off
|
|
|
|
{"debug", no_argument, 0, 'd'}, |
|
|
|
{"config", required_argument, 0, 'c'}, |
|
|
|
{"fullscreen", no_argument, 0, 'f'}, |
|
|
|
{"help", no_argument, 0, 'h'}, |
|
|
|
@ -235,9 +238,12 @@ int main(int argc, char** argv) { |
|
|
|
}; |
|
|
|
|
|
|
|
while (optind < argc) { |
|
|
|
int arg = getopt_long(argc, argv, "g:fhvp::c:u:", long_options, &option_index); |
|
|
|
int arg = getopt_long(argc, argv, "g:fhvp::c:u:d:", long_options, &option_index); |
|
|
|
if (arg != -1) { |
|
|
|
switch (static_cast<char>(arg)) { |
|
|
|
case 'd': |
|
|
|
override_gdb_port = static_cast<uint16_t>(atoi(optarg)); |
|
|
|
break; |
|
|
|
case 'c': |
|
|
|
config_path = optarg; |
|
|
|
break; |
|
|
|
@ -323,6 +329,11 @@ int main(int argc, char** argv) { |
|
|
|
Settings::values.current_user = std::clamp(*selected_user, 0, 7); |
|
|
|
} |
|
|
|
|
|
|
|
if (override_gdb_port.has_value()) { |
|
|
|
Settings::values.use_gdbstub = true; |
|
|
|
Settings::values.gdbstub_port = *override_gdb_port; |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
LocalFree(argv_w); |
|
|
|
#endif
|
|
|
|
|