mirror of https://github.com/sm64pc/sm64pc.git
Implement GameShark system, improved CC editor
This commit is contained in:
parent
95bf35b275
commit
611f62abf3
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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
|
Loading…
Reference in New Issue