Implement GameShark system, improved CC editor

This commit is contained in:
Llennpie 2021-11-15 16:57:54 -05:00
parent 95bf35b275
commit 611f62abf3
3 changed files with 122 additions and 55 deletions

View File

@ -439,6 +439,8 @@ namespace MoonInternal {
ImGui::PopStyleColor();
}
static char cc_gameshark[1024 * 16] = "";
if (configImGui.s_machinima && show_menu_bar) {
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
ImGui::Begin("Machinima", NULL, ImGuiWindowFlags_None);
@ -536,6 +538,8 @@ namespace MoonInternal {
} else {
strcpy(bufname, cc_name.c_str());
}
strcpy(cc_gameshark, global_color_to_cc().c_str());
}
ImGui::End();
@ -545,33 +549,6 @@ namespace MoonInternal {
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
ImGui::Begin("Appearance", NULL, ImGuiWindowFlags_None);
ImGui::Text("Shirt/Cap");
ImGui::ColorEdit4("Hat Main", (float*)&uiHatColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Hat Shade", (float*)&uiHatShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Overalls");
ImGui::ColorEdit4("Overalls Main", (float*)&uiOverallsColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Overalls Shade", (float*)&uiOverallsShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Gloves");
ImGui::ColorEdit4("Gloves Main", (float*)&uiGlovesColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Gloves Shade", (float*)&uiGlovesShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Shoes");
ImGui::ColorEdit4("Shoes Main", (float*)&uiShoesColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Shoes Shade", (float*)&uiShoesShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Skin");
ImGui::ColorEdit4("Skin Main", (float*)&uiSkinColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Skin Shade", (float*)&uiSkinShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Hair");
ImGui::ColorEdit4("Hair Main", (float*)&uiHairColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Hair Shade", (float*)&uiHairShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Dummy(ImVec2(0, 5));
if (ImGui::Button("Apply CC")) {
apply_cc_from_editor();
}
ImGui::Dummy(ImVec2(0, 5));
ImGui::InputText(".gs", bufname, IM_ARRAYSIZE(bufname));
if (ImGui::Button("Save to File")) {
apply_cc_from_editor();
@ -587,6 +564,72 @@ namespace MoonInternal {
load_cc_directory();
}
if (ImGui::Button("Delete CC")) {
delete_cc_file(bufname);
} ImGui::SameLine(); HelpMarker(
"WARNING: This will delete the CC file as written above. This action is irreversible!");
ImGui::Dummy(ImVec2(0, 5));
if (ImGui::BeginTabBar("###cc_tabbar", ImGuiTabBarFlags_None)) {
if (ImGui::BeginTabItem("CC Editor")) {
ImGui::Text("Shirt/Cap");
ImGui::ColorEdit4("Hat Main", (float*)&uiHatColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Hat Shade", (float*)&uiHatShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Overalls");
ImGui::ColorEdit4("Overalls Main", (float*)&uiOverallsColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Overalls Shade", (float*)&uiOverallsShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Gloves");
ImGui::ColorEdit4("Gloves Main", (float*)&uiGlovesColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Gloves Shade", (float*)&uiGlovesShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Shoes");
ImGui::ColorEdit4("Shoes Main", (float*)&uiShoesColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Shoes Shade", (float*)&uiShoesShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Skin");
ImGui::ColorEdit4("Skin Main", (float*)&uiSkinColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Skin Shade", (float*)&uiSkinShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::Text("Hair");
ImGui::ColorEdit4("Hair Main", (float*)&uiHairColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::ColorEdit4("Hair Shade", (float*)&uiHairShadeColor, ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_NoLabel);
ImGui::EndTabItem();
ImGui::Dummy(ImVec2(0, 5));
if (ImGui::Button("Apply CC")) {
apply_cc_from_editor();
strcpy(cc_gameshark, global_color_to_cc().c_str());
}
}
if (ImGui::BeginTabItem("CC GameShark")) {
ImGui::InputTextMultiline("###gameshark", cc_gameshark, IM_ARRAYSIZE(cc_gameshark), ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 25), ImGuiInputTextFlags_CharsUppercase);
ImGui::Dummy(ImVec2(0, 5));
if (ImGui::Button("Paste GS Code")) {
std::string input = cc_gameshark;
load_cc_data(input);
uiHatColor = ImVec4(float(defaultColorHatRLight) / 255.0f, float(defaultColorHatGLight) / 255.0f, float(defaultColorHatBLight) / 255.0f, 255.0f / 255.0f);
uiHatShadeColor = ImVec4(float(defaultColorHatRDark) / 255.0f, float(defaultColorHatGDark) / 255.0f, float(defaultColorHatBDark) / 255.0f, 255.0f / 255.0f);
uiOverallsColor = ImVec4(float(defaultColorOverallsRLight) / 255.0f, float(defaultColorOverallsGLight) / 255.0f, float(defaultColorOverallsBLight) / 255.0f, 255.0f / 255.0f);
uiOverallsShadeColor = ImVec4(float(defaultColorOverallsRDark) / 255.0f, float(defaultColorOverallsGDark) / 255.0f, float(defaultColorOverallsBDark) / 255.0f, 255.0f / 255.0f);
uiGlovesColor = ImVec4(float(defaultColorGlovesRLight) / 255.0f, float(defaultColorGlovesGLight) / 255.0f, float(defaultColorGlovesBLight) / 255.0f, 255.0f / 255.0f);
uiGlovesShadeColor = ImVec4(float(defaultColorGlovesRDark) / 255.0f, float(defaultColorGlovesGDark) / 255.0f, float(defaultColorGlovesBDark) / 255.0f, 255.0f / 255.0f);
uiShoesColor = ImVec4(float(defaultColorShoesRLight) / 255.0f, float(defaultColorShoesGLight) / 255.0f, float(defaultColorShoesBLight) / 255.0f, 255.0f / 255.0f);
uiShoesShadeColor = ImVec4(float(defaultColorShoesRDark) / 255.0f, float(defaultColorShoesGDark) / 255.0f, float(defaultColorShoesBDark) / 255.0f, 255.0f / 255.0f);
uiSkinColor = ImVec4(float(defaultColorSkinRLight) / 255.0f, float(defaultColorSkinGLight) / 255.0f, float(defaultColorSkinBLight) / 255.0f, 255.0f / 255.0f);
uiSkinShadeColor = ImVec4(float(defaultColorSkinRDark) / 255.0f, float(defaultColorSkinGDark) / 255.0f, float(defaultColorSkinBDark) / 255.0f, 255.0f / 255.0f);
uiHairColor = ImVec4(float(defaultColorHairRLight) / 255.0f, float(defaultColorHairGLight) / 255.0f, float(defaultColorHairBLight) / 255.0f, 255.0f / 255.0f);
uiHairShadeColor = ImVec4(float(defaultColorHairRDark) / 255.0f, float(defaultColorHairGDark) / 255.0f, float(defaultColorHairBDark) / 255.0f, 255.0f / 255.0f);
strcpy(cc_gameshark, global_color_to_cc().c_str());
strcpy(bufname, "Sample");
}
ImGui::EndTabItem();
}
ImGui::EndTabBar();
}
ImGui::End();
ImGui::PopStyleColor();

View File

@ -88,10 +88,12 @@ namespace MoonInternal {
colorCodeDir = cwd.substr(0, cwd.find_last_of("/\\")) + "/addons/saturn/assets/colorcodes/";
#endif
for (const auto & entry : fs::directory_iterator(colorCodeDir))
cc_array.push_back(entry.path().filename().u8string());
//std::cout << cc_array[0] << std::endl;
for (const auto & entry : fs::directory_iterator(colorCodeDir)) {
// Only search for .gs files
if (entry.path().filename().u8string().find(".gs") != string::npos) {
cc_array.push_back(entry.path().filename().u8string());
}
}
}
void reset_cc_colors() {
@ -140,26 +142,7 @@ namespace MoonInternal {
enable_cap_logo = true;
}
void load_cc_file(string cc_filename) {
if (cc_filename == "Mario.gs") {
reset_cc_colors();
return;
}
std::ifstream file(colorCodeDir + cc_filename, std::ios::in | std::ios::binary);
// If the color code was previously deleted, reload the list and cancel.
if (!file.good()) {
load_cc_directory();
return;
}
const std::size_t& size = std::filesystem::file_size(colorCodeDir + cc_filename);
std::string content(size, '\0');
file.read(content.data(), size);
file.close();
void load_cc_data(string content) {
std::istringstream f(content);
std::string line;
@ -268,7 +251,7 @@ namespace MoonInternal {
}
}
void save_cc_file(std::string name) {
std::string global_color_to_cc() {
std::string gameshark;
char col1char[64];
@ -332,14 +315,52 @@ namespace MoonInternal {
gameshark += "8107ECA2 " + col11.substr(4, 2) + "00\n";
gameshark += "8107EC98 " + col12.substr(0, 2) + col12.substr(2, 2) + "\n";
gameshark += "8107EC9A " + col12.substr(4, 2) + "00";
//std::cout << gameshark << std::endl;
return gameshark;
}
void load_cc_file(string cc_filename) {
if (cc_filename == "Mario.gs") {
reset_cc_colors();
return;
}
std::ifstream file(colorCodeDir + cc_filename, std::ios::in | std::ios::binary);
// If the color code was previously deleted, reload the list and cancel.
if (!file.good()) {
load_cc_directory();
return;
}
const std::size_t& size = std::filesystem::file_size(colorCodeDir + cc_filename);
std::string content(size, '\0');
file.read(content.data(), size);
file.close();
load_cc_data(content);
}
void save_cc_file(std::string name) {
#ifdef __MINGW32__
std::ofstream file("addons\\saturn\\assets\\colorcodes\\" + name + ".gs");
#else
std::ofstream file("addons/saturn/assets/colorcodes/" + name + ".gs");
#endif
file << gameshark;
file << global_color_to_cc();
}
void delete_cc_file(std::string name) {
if (name == "Mario")
name = "Sample";
#ifdef __MINGW32__
string cc_path = "addons\\saturn\\assets\\colorcodes\\" + name + ".gs";
#else
string cc_path = "addons/saturn/assets/colorcodes/" + name + ".gs";
#endif
remove(cc_path.c_str());
load_cc_directory();
}
}

View File

@ -9,6 +9,9 @@ namespace MoonInternal {
void load_cc_directory(void);
void load_cc_file(std::string cc_path);
void save_cc_file(std::string name);
void delete_cc_file(std::string name);
std::string global_color_to_cc();
void load_cc_data(std::string content);
}
#endif