mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
better /warp dev command
no need to provide act and area, it will default to area 1 act 0 added alternate level abbreviations that have been used commonly in some mods (to avoid typing long level names)
This commit is contained in:
parent
b1af1ade33
commit
aa21b4feea
1 changed files with 72 additions and 16 deletions
|
|
@ -9,6 +9,7 @@
|
||||||
#include "pc/debuglog.h"
|
#include "pc/debuglog.h"
|
||||||
#include "pc/lua/utils/smlua_level_utils.h"
|
#include "pc/lua/utils/smlua_level_utils.h"
|
||||||
#include "level_table.h"
|
#include "level_table.h"
|
||||||
|
#include "game/save_file.h"
|
||||||
|
|
||||||
#ifdef DEVELOPMENT
|
#ifdef DEVELOPMENT
|
||||||
|
|
||||||
|
|
@ -16,6 +17,57 @@ static bool str_starts_with(const char* pre, char* str) {
|
||||||
return strncmp(pre, str, strlen(pre)) == 0;
|
return strncmp(pre, str, strlen(pre)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For case insensitivity
|
||||||
|
static const char *upper(char *str) {
|
||||||
|
static char buffer[50];
|
||||||
|
if (strlen(str) > 50) { return NULL; }
|
||||||
|
memset(buffer, 0, 50);
|
||||||
|
s16 i = 0;
|
||||||
|
while (str[i] != '\0' && i < 49) {
|
||||||
|
buffer[i] = toupper((unsigned char) str[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
buffer[i] = '\0';
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
static s32 get_level_abbreviation_alt(const char *str) {
|
||||||
|
|
||||||
|
// c + course number translates to that level
|
||||||
|
// e.g. c11 is wdw
|
||||||
|
if (str[0] == 'C' && strlen(str) > 1) {
|
||||||
|
s32 course = -1;
|
||||||
|
if (sscanf(&str[1], "%d", &course) > 0) {
|
||||||
|
s32 level = get_level_num_from_course_num(course);
|
||||||
|
if (level == LEVEL_NONE) { return -1; } // Failed!
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(str, "S1") == 0) { return LEVEL_PSS; }
|
||||||
|
if (strcmp(str, "S2") == 0) { return LEVEL_WMOTR; }
|
||||||
|
if (strcmp(str, "S3") == 0) { return LEVEL_SA; }
|
||||||
|
if (strcmp(str, "S4") == 0) { return LEVEL_ENDING; }
|
||||||
|
|
||||||
|
if (strcmp(str, "WC") == 0) { return LEVEL_TOTWC; }
|
||||||
|
if (strcmp(str, "VC") == 0) { return LEVEL_VCUTM; }
|
||||||
|
if (strcmp(str, "MC") == 0) { return LEVEL_COTMC; }
|
||||||
|
|
||||||
|
if (strcmp(str, "B1") == 0) { return LEVEL_BITDW; }
|
||||||
|
if (strcmp(str, "B2") == 0) { return LEVEL_BITFS; }
|
||||||
|
if (strcmp(str, "B3") == 0) { return LEVEL_BITS; }
|
||||||
|
|
||||||
|
if (strcmp(str, "B1F") == 0) { return LEVEL_BOWSER_1; }
|
||||||
|
if (strcmp(str, "B2F") == 0) { return LEVEL_BOWSER_2; }
|
||||||
|
if (strcmp(str, "B3F") == 0) { return LEVEL_BOWSER_3; }
|
||||||
|
|
||||||
|
if (strcmp(str, "OW1") == 0) { return LEVEL_CASTLE_GROUNDS; }
|
||||||
|
if (strcmp(str, "OW2") == 0) { return LEVEL_CASTLE; }
|
||||||
|
if (strcmp(str, "OW3") == 0) { return LEVEL_CASTLE_COURTYARD; }
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
bool exec_dev_chat_command(char* command) {
|
bool exec_dev_chat_command(char* command) {
|
||||||
if (strcmp("/warp", command) == 0) {
|
if (strcmp("/warp", command) == 0) {
|
||||||
djui_chat_message_create("Missing parameters: [LEVEL] [AREA] [ACT]");
|
djui_chat_message_create("Missing parameters: [LEVEL] [AREA] [ACT]");
|
||||||
|
|
@ -32,25 +84,28 @@ bool exec_dev_chat_command(char* command) {
|
||||||
#undef STUB_LEVEL
|
#undef STUB_LEVEL
|
||||||
#undef DEFINE_LEVEL
|
#undef DEFINE_LEVEL
|
||||||
};
|
};
|
||||||
|
s32 area = 1;
|
||||||
|
s32 act = 0;
|
||||||
|
|
||||||
// Params
|
// Params
|
||||||
char *paramLevel = command + 6;
|
char *paramLevel = command + 6;
|
||||||
if (*paramLevel == 0 || *paramLevel == ' ') {
|
if (*paramLevel == 0 || *paramLevel == ' ') {
|
||||||
djui_chat_message_create("Missing parameters: [LEVEL] [AREA] [ACT]");
|
djui_chat_message_create("Missing parameters: [LEVEL]");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
char *paramArea = strchr(paramLevel, ' ');
|
char *paramArea = strchr(paramLevel, ' ');
|
||||||
|
char *paramAct = NULL;
|
||||||
if (paramArea++ == NULL || *paramArea == 0 || *paramArea == ' ') {
|
if (paramArea++ == NULL || *paramArea == 0 || *paramArea == ' ') {
|
||||||
djui_chat_message_create("Missing parameters: [AREA] [ACT]");
|
paramArea = NULL;
|
||||||
return true;
|
} else {
|
||||||
|
*(paramArea - 1) = 0;
|
||||||
|
paramAct = strchr(paramArea, ' ');
|
||||||
|
if (paramAct++ == NULL || *paramAct == 0 || *paramAct == ' ') {
|
||||||
|
paramAct = NULL;
|
||||||
|
} else {
|
||||||
|
*(paramAct - 1) = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
char *paramAct = strchr(paramArea, ' ');
|
|
||||||
if (paramAct++ == NULL || *paramAct == 0 || *paramAct == ' ') {
|
|
||||||
djui_chat_message_create("Missing parameters: [ACT]");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
*(paramArea - 1) = 0;
|
|
||||||
*(paramAct - 1) = 0;
|
|
||||||
|
|
||||||
// Level
|
// Level
|
||||||
s32 level = -1;
|
s32 level = -1;
|
||||||
|
|
@ -67,6 +122,9 @@ bool exec_dev_chat_command(char* command) {
|
||||||
level = info->levelNum;
|
level = info->levelNum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (level == -1) {
|
||||||
|
level = get_level_abbreviation_alt(upper(paramLevel));
|
||||||
|
}
|
||||||
if (level == -1) {
|
if (level == -1) {
|
||||||
char message[256];
|
char message[256];
|
||||||
snprintf(message, 256, "Invalid [LEVEL] parameter: %s", paramLevel);
|
snprintf(message, 256, "Invalid [LEVEL] parameter: %s", paramLevel);
|
||||||
|
|
@ -76,8 +134,7 @@ bool exec_dev_chat_command(char* command) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Area
|
// Area
|
||||||
s32 area = 1;
|
if (paramArea && sscanf(paramArea, "%d", &area) <= 0) {
|
||||||
if (sscanf(paramArea, "%d", &area) <= 0) {
|
|
||||||
char message[256];
|
char message[256];
|
||||||
snprintf(message, 256, "Invalid [AREA] parameter: %s", paramArea);
|
snprintf(message, 256, "Invalid [AREA] parameter: %s", paramArea);
|
||||||
djui_chat_message_create(message);
|
djui_chat_message_create(message);
|
||||||
|
|
@ -85,8 +142,7 @@ bool exec_dev_chat_command(char* command) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
s32 act = 1;
|
if (paramAct && sscanf(paramAct, "%d", &act) <= 0) {
|
||||||
if (sscanf(paramAct, "%d", &act) <= 0) {
|
|
||||||
char message[256];
|
char message[256];
|
||||||
snprintf(message, 256, "Invalid [ACT] parameter: %s", paramAct);
|
snprintf(message, 256, "Invalid [ACT] parameter: %s", paramAct);
|
||||||
djui_chat_message_create(message);
|
djui_chat_message_create(message);
|
||||||
|
|
@ -96,14 +152,14 @@ bool exec_dev_chat_command(char* command) {
|
||||||
// Warp
|
// Warp
|
||||||
if (!dynos_warp_to_level(level, area, act)) {
|
if (!dynos_warp_to_level(level, area, act)) {
|
||||||
char message[256];
|
char message[256];
|
||||||
snprintf(message, 256, "Unable to warp to: %s %s %s", paramLevel, paramArea, paramAct);
|
snprintf(message, 256, "Unable to warp to: %s %d %d", paramLevel, area, act);
|
||||||
djui_chat_message_create(message);
|
djui_chat_message_create(message);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OK
|
// OK
|
||||||
char message[256];
|
char message[256];
|
||||||
snprintf(message, 256, "Warping to: %s %s %s...", paramLevel, paramArea, paramAct);
|
snprintf(message, 256, "Warping to: %s %d %d...", paramLevel, area, act);
|
||||||
djui_chat_message_create(message);
|
djui_chat_message_create(message);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue