diff --git a/lang/Czech.ini b/lang/Czech.ini index 8152c4e42..afc8b18ea 100644 --- a/lang/Czech.ini +++ b/lang/Czech.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Ujistěte se, že je vaše brána firewall správně nakonfigurov HOST = "Hostovat" [HOST_MODS] -ROMHACKS = "ROMHACKY" MODS = "MODY" +CATEGORIES = "Kategorie" WARNING = "\\#ffffa0\\Varování:\\#dcdcdc\\ Máte povoleno 10 nebo více módů, vypněte prosím některé, abyste zabránili nestabilitě nebo zpoždění." +[HOST_MOD_CATEGORIES] +ALL = "Všechny" +MISC = "Různé" +ROMHACKS = "Romhacks" +GAMEMODES = "Herní režimy" +MOVESETS = "Sady pohybů" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "UKLADACI SLOT" ERASE_TITLE = "SMAZAT" @@ -220,7 +228,7 @@ PORT = "Port" PASSWORD = "Heslo" SAVE_SLOT = "Ukládací slot" SETTINGS = "Nastavení" -MODS = "Modifikace a herní módy" +MODS = "Modifikace" ROMHACKS = "Rom-Hacky" APPLY = "Použít" HOST = "Hostovat" diff --git a/lang/Dutch.ini b/lang/Dutch.ini index 2096c5c00..026050841 100644 --- a/lang/Dutch.ini +++ b/lang/Dutch.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Zorg ervoor dat uw firewall correct is geconfigureerd.\nDirecte v HOST = "Organisator" [HOST_MODS] -ROMHACKS = "ROMHACKS" MODS = "MODS" +CATEGORIES = "Categorieën" WARNING = "\\#ffffa0\\Waarschuwing:\\#dcdcdc\\ Je hebt 10 of meer mods ingeschakeld, schakel er een paar uit om instabiliteit of lag te voorkomen." +[HOST_MOD_CATEGORIES] +ALL = "Alle" +MISC = "Diverse" +ROMHACKS = "Romhacks" +GAMEMODES = "Spelmodi" +MOVESETS = "Bewegingssets" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "OPSLAAN" ERASE_TITLE = "VERWIJDEREN" @@ -220,7 +228,7 @@ PORT = "Port" PASSWORD = "Wachtwoord" SAVE_SLOT = "Opslag slot" SETTINGS = "Instellingen" -MODS = "Mods en gamemodi" +MODS = "Mods" ROMHACKS = "Rom-Hacks" APPLY = "Toepassen" HOST = "Organiseer" diff --git a/lang/English.ini b/lang/English.ini index 2950733c9..cfa1f8525 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Make sure your firewall is properly configured.\nDirect connectio HOST = "Host" [HOST_MODS] -ROMHACKS = "ROMHACKS" MODS = "MODS" +CATEGORIES = "Categories" WARNING = "\\#ffffa0\\Warning:\\#dcdcdc\\ You have 10 or more mods enabled, please disable some to prevent instability or lag." +[HOST_MOD_CATEGORIES] +ALL = "All" +MISC = "Misc" +ROMHACKS = "Romhacks" +GAMEMODES = "Gamemodes" +MOVESETS = "Movesets" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "SAVE" ERASE_TITLE = "ERASE" @@ -223,7 +231,7 @@ PORT = "Port" PASSWORD = "Password" SAVE_SLOT = "Save Slot" SETTINGS = "Settings" -MODS = "Mods & Gamemodes" +MODS = "Mods" ROMHACKS = "Rom-Hacks" APPLY = "Apply" HOST = "Host" diff --git a/lang/French.ini b/lang/French.ini index edbf1751a..8e8e2a39a 100644 --- a/lang/French.ini +++ b/lang/French.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Assurez-vous que votre pare-feu est correctement configuré.\nLes HOST = "Héberger" [HOST_MODS] -ROMHACKS = "ROM-HACKS" MODS = "MODS" +CATEGORIES = "Catégories" WARNING = "\\#ffffa0\\Avertissement :\\#dcdcdc\\ 10 mods ou plus sont activés, veuillez en désactiver certains pour éviter l'instabilité ou le lag." +[HOST_MOD_CATEGORIES] +ALL = "Tous" +MISC = "Autres" +ROMHACKS = "Romhacks" +GAMEMODES = "Modes de jeu" +MOVESETS = "Movesets" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "SAUVEGARDE" ERASE_TITLE = "EFFACER" @@ -220,7 +228,7 @@ PORT = "Port" PASSWORD = "Mot de Passe" SAVE_SLOT = "Sauvegarde" SETTINGS = "Paramètres" -MODS = "Mods et modes de jeu" +MODS = "Mods" ROMHACKS = "Rom-Hacks" APPLY = "Appliquer" HOST = "Héberger" diff --git a/lang/German.ini b/lang/German.ini index 2d33dd95d..6e1037035 100644 --- a/lang/German.ini +++ b/lang/German.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Stelle sicher, dass Deine Firewall ordnungsgemäß konfiguriert i HOST = "Hosten" [HOST_MODS] -ROMHACKS = "ROM-HACKS" MODS = "MODS" +CATEGORIES = "Kategorien" WARNING = "\\#ffffa0\\Warnung:\\#dcdcdc\\ Du hast 10 oder mehr Mods aktiviert, bitte deaktiviere einige, um Instabilität oder Lag zu vermeiden." +[HOST_MOD_CATEGORIES] +ALL = "Alle" +MISC = "Verschiedenes" +ROMHACKS = "Rom-Hacks" +GAMEMODES = "Spielmodi" +MOVESETS = "Bewegungssätze" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "SPEICHERN" ERASE_TITLE = "LÖSCHEN" @@ -220,7 +228,7 @@ PORT = "Port" PASSWORD = "Passwort" SAVE_SLOT = "Speicherplatz" SETTINGS = "Einstellungen" -MODS = "Mods & Spielmodi" +MODS = "Mods" ROMHACKS = "Rom-Hacks" APPLY = "Übernehmen" HOST = "Hosten" diff --git a/lang/Italian.ini b/lang/Italian.ini index 3c2f921b9..14251cad6 100644 --- a/lang/Italian.ini +++ b/lang/Italian.ini @@ -169,10 +169,18 @@ WARN_SOCKET = "Assicurati che il tuo firewall sia configurato correttamente.\nLe HOST = "Crea" [HOST_MODS] -ROMHACKS = "ROMHACKS" MODS = "MODS" +CATEGORIES = "Categorie" WARNING = "\\#ffffa0\\Attenzione:\\#dcdcdc\\ Sono state attivate 10 o più mod, disabilitarne alcune per evitare instabilità o lag." +[HOST_MOD_CATEGORIES] +ALL = "Tutti" +MISC = "Varie" +ROMHACKS = "Romhacks" +GAMEMODES = "Modalità di gioco" +MOVESETS = "Set di spostamenti" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "SALVATAGGIO" ERASE_TITLE = "CANCELLA" @@ -218,7 +226,7 @@ PORT = "Porta" PASSWORD = "Password" SAVE_SLOT = "Slot di Salvataggio" SETTINGS = "Opzioni" -MODS = "Mod e modalità di gioco" +MODS = "Mod" ROMHACKS = "Rom-Hacks" APPLY = "Applica" HOST = "Crea" diff --git a/lang/Polish.ini b/lang/Polish.ini index 75c7475ae..c523d903b 100644 --- a/lang/Polish.ini +++ b/lang/Polish.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Upewnij się, że twoja zapora jest poprawnie skonfigurowana.\nBe HOST = "Hostuj" [HOST_MODS] -ROMHACKS = "ROM-HACKI" MODS = "MODYFIKACJE" +CATEGORIES = "Kategorie" WARNING = "\\#ffffa0\\Ostrzeżenie:\\#dcdcdc\\ Masz włączonych 10 lub więcej Modyfikacji. Wyłącz niektóre, aby zapobiec niestabilności lub opóźnieniom." +[HOST_MOD_CATEGORIES] +ALL = "Wszystkie" +MISC = "Różne" +ROMHACKS = "Hacki do romów" +GAMEMODES = "Tryby gry" +MOVESETS = "Zestawy ruchów" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "ZAPISY" ERASE_TITLE = "KASOWANIE" @@ -220,7 +228,7 @@ PORT = "Port" PASSWORD = "Hasło" SAVE_SLOT = "Plik Zapisu" SETTINGS = "Ustawienia" -MODS = "Modyfikacje i Tryby Gry" +MODS = "Modyfikacje" ROMHACKS = "Rom-Hacki" APPLY = "Zastosuj" HOST = "Hostuj" diff --git a/lang/Portuguese.ini b/lang/Portuguese.ini index 38d1d7614..26125ee9c 100644 --- a/lang/Portuguese.ini +++ b/lang/Portuguese.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Verifique se o seu firewall está bem configurado.\nAo usar conex HOST = "Criar" [HOST_MODS] -ROMHACKS = "ROMHACKS" MODS = "MODS" +CATEGORIES = "Categorias" WARNING = "\\#ffffa0\\Aviso:\\#dcdcdc\\ Você tem 10 ou mais mods ativados, desative alguns para evitar instabilidade ou lag." +[HOST_MOD_CATEGORIES] +ALL = "Todos" +MISC = "Outros" +ROMHACKS = "Romhacks" +GAMEMODES = "Modos de jogo" +MOVESETS = "Movesets" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "ARQUIVO" ERASE_TITLE = "APAGAR ARQUIVO" @@ -220,7 +228,7 @@ PORT = "Porta" PASSWORD = "Senha" SAVE_SLOT = "Arquivo de salvamento" SETTINGS = "Configurações" -MODS = "Mods e modos de jogo" +MODS = "Mods" ROMHACKS = "Rom-Hacks" APPLY = "Aplicar" HOST = "Criar" diff --git a/lang/Russian.ini b/lang/Russian.ini index d32314629..7271b22b2 100644 --- a/lang/Russian.ini +++ b/lang/Russian.ini @@ -170,10 +170,18 @@ WARN_SOCKET = "Убедитесь, что ваш файрвол настроен HOST = "Хост" [HOST_MODS] -ROMHACKS = "ROMHACKS" MODS = "MODS" +CATEGORIES = "Категории" WARNING = "\\#ffffa0\\Внимание:\\#dcdcdc\\ У вас включено 10 или более модов, пожалуйста, отключите некоторые из них, чтобы предотвратить нестабильность или лаги." +[HOST_MOD_CATEGORIES] +ALL = "Все" +MISC = "Разное" +ROMHACKS = "Romhacks" +GAMEMODES = "Игровые режимы" +MOVESETS = "Наборы движений" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "SAVE" ERASE_TITLE = "ERASE" @@ -219,7 +227,7 @@ PORT = "Порт" PASSWORD = "Пароль" SAVE_SLOT = "Слот сохранения" SETTINGS = "Настройки" -MODS = "Моды и режимы игры" +MODS = "Моды" ROMHACKS = "ROM-Хаки" APPLY = "Применить" HOST = "Хост" diff --git a/lang/Spanish.ini b/lang/Spanish.ini index 153785b6a..61a897f11 100644 --- a/lang/Spanish.ini +++ b/lang/Spanish.ini @@ -171,10 +171,18 @@ WARN_SOCKET = "Asegúrate de que tu firewall esté configurado correctamente.\nL HOST = "Crear" [HOST_MODS] -ROMHACKS = "ROMHACKS" MODS = "MODS" +CATEGORIES = "Categorías" WARNING = "\\#ffffa0\\Advertencia:\\#dcdcdc\\ Tienes 10 o más mods activados, por favor desactiva algunos para prevenir inestabilidad o lag." +[HOST_MOD_CATEGORIES] +ALL = "Todos" +MISC = "Varios" +ROMHACKS = "Romhacks" +GAMEMODES = "Modos de juego" +MOVESETS = "Conjuntos de movimientos" +CHARACTER_SELECT = "Character Select" + [HOST_SAVE] SAVE_TITLE = "RANURAS DE\nGUARDADO" ERASE_TITLE = "BORRAR" @@ -220,7 +228,7 @@ PORT = "Puerto" PASSWORD = "Contraseña" SAVE_SLOT = "Ranuras" SETTINGS = "Ajustes" -MODS = "Mods y modos de juego" +MODS = "Mods" ROMHACKS = "Rom-Hacks" APPLY = "Aplicar" HOST = "Crear" diff --git a/mods/char-select-cjes-and-vl/main.lua b/mods/char-select-cjes-and-vl/main.lua index a455bae1f..aa537d2b7 100644 --- a/mods/char-select-cjes-and-vl/main.lua +++ b/mods/char-select-cjes-and-vl/main.lua @@ -1,5 +1,6 @@ -- name: [CS] VL-Tone & Cjes Luigi -- description: [CS] \\#00ff00\\VL-Tone \\#dcdcdc\\& \\#00ff00\\Cjes Luigi\n\\#dcdcdc\\By: Coop Deluxe Team\n\nReturn of TWO nostalgic Luigi's dating back to the 2000s!\n\n\\#00ff00\\Model Credits:\n\\#dcdcdc\\VL-Tone\nCJes\n\n\\#00ff00\\Model Porting:\n\\#dcdcdc\\AngelicMiracles "Yuyake"\nFluffaMario\nSonicDark +-- category: cs -- localize functions to improve performance local table_insert,play_sound,djui_hud_get_screen_width,maxf,math_sin,djui_hud_set_color,djui_hud_set_font,string_format,djui_hud_measure_text,djui_hud_print_text,djui_hud_set_resolution,min,math_min,math_max,djui_hud_set_rotation,djui_hud_render_rect = table.insert,play_sound,djui_hud_get_screen_width,maxf,math.sin,djui_hud_set_color,djui_hud_set_font,string.format,djui_hud_measure_text,djui_hud_print_text,djui_hud_set_resolution,min,math.min,math.max,djui_hud_set_rotation,djui_hud_render_rect diff --git a/mods/char-select-extra-chars/main.lua b/mods/char-select-extra-chars/main.lua index 179200f5a..a8c5db3ad 100644 --- a/mods/char-select-extra-chars/main.lua +++ b/mods/char-select-extra-chars/main.lua @@ -1,2 +1,3 @@ -- name: [CS] Extra Characters --- description: [CS] \\#fc03df\\Ext\\#ffc342\\ra \\#00ff00\\Chara\\#d60f6f\\cters\n\\#dcdcdc\\By Coop Deluxe Team\n\n\\#dcdcdc\\This Character Select pack adds other characters from the Mario series!\n\n\\#ff6868\\Model Credits:\n\\\#dcdcdc\\FluffaMario\nAngelicMiracles "Yuyake"\nMelzinoff\nThatGurlTilly\n\n\\#00ff00\\Voice Actors:\n\\#dcdcdc\\MelissaMekrose\nSuperKirbyLover\nMorphiGalaxi\nAngelicMiracles "Yuyake"\nRihannaDeleon\n\n\\#ff6868\\Requires \\00ff00\\Character Select \\#ff6868\\enabled! \ No newline at end of file +-- description: [CS] \\#fc03df\\Ext\\#ffc342\\ra \\#00ff00\\Chara\\#d60f6f\\cters\n\\#dcdcdc\\By Coop Deluxe Team\n\n\\#dcdcdc\\This Character Select pack adds other characters from the Mario series!\n\n\\#ff6868\\Model Credits:\n\\\#dcdcdc\\FluffaMario\nAngelicMiracles "Yuyake"\nMelzinoff\nThatGurlTilly\n\n\\#00ff00\\Voice Actors:\n\\#dcdcdc\\MelissaMekrose\nSuperKirbyLover\nMorphiGalaxi\nAngelicMiracles "Yuyake"\nRihannaDeleon\n\n\\#ff6868\\Requires \\00ff00\\Character Select \\#ff6868\\enabled! +-- category: cs \ No newline at end of file diff --git a/mods/character-select-coop/main.lua b/mods/character-select-coop/main.lua index 76b71afc3..4e3c084c0 100644 --- a/mods/character-select-coop/main.lua +++ b/mods/character-select-coop/main.lua @@ -494,7 +494,7 @@ local function mario_update(m) optionTable[i].optionBeingSet = false end end - + local offset = gPlayerSyncTable[m.playerIndex].offset if offset ~= 0 and offset ~= nil then if altOffsetActs[m.action] ~= false then @@ -710,7 +710,7 @@ local function on_hud_render() local textX = x * 0.5 djui_hud_print_text(TEXT_NAME, width - textX - djui_hud_measure_text(TEXT_NAME) * 0.3, 55, 0.6) djui_hud_set_font(FONT_TINY) - local creditScale = 0.6 + local creditScale = 0.6 creditScale = math.min(creditScale, 100/djui_hud_measure_text(TEXT_CREDIT)) djui_hud_print_text(TEXT_CREDIT, width - textX - djui_hud_measure_text(TEXT_CREDIT) * creditScale *0.5, 74, creditScale) djui_hud_set_font(FONT_ALIASED) @@ -961,7 +961,7 @@ local function on_hud_render() djui_hud_render_rect(widthHalf - 4 * widthScaleLimited, yOffset + 10 - 2 * widthScaleLimited, 8 * widthScaleLimited, 5 * widthScaleLimited) end - -- Options + -- Options for i = currOption - 2, currOption + 2 do if not (i < 1 or i > optionTableCount) then local toggleName = optionTable[i].name @@ -1295,7 +1295,7 @@ local function chat_command(msg) return true end - -- Stop Character checks if API disallows it + -- Stop Character checks if API disallows it if not menu_is_allowed() or charBeingSet then djui_chat_message_create("Character Cannot be Changed") return true diff --git a/src/pc/djui/djui_panel_host.c b/src/pc/djui/djui_panel_host.c index aaafa3187..7c01b8b95 100644 --- a/src/pc/djui/djui_panel_host.c +++ b/src/pc/djui/djui_panel_host.c @@ -182,12 +182,7 @@ void djui_panel_host_create(struct DjuiBase* caller) { } djui_button_create(body, DLANG(HOST, SETTINGS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_settings_create); - - struct DjuiButton* button2 = djui_button_create(body, DLANG(HOST, MODS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create); - button2->base.tag = 0; - - struct DjuiButton* button3 = djui_button_create(body, DLANG(HOST, ROMHACKS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create); - button3->base.tag = 1; + djui_button_create(body, DLANG(HOST, MODS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create); struct DjuiRect* rect3 = djui_rect_container_create(body, 64); { diff --git a/src/pc/djui/djui_panel_host_mods.c b/src/pc/djui/djui_panel_host_mods.c index 7e4bdc82d..410f1c17b 100644 --- a/src/pc/djui/djui_panel_host_mods.c +++ b/src/pc/djui/djui_panel_host_mods.c @@ -10,15 +10,28 @@ #include "pc/mods/mods_utils.h" #include "djui_panel_main.h" #include "djui_panel_host.h" +#include "djui_panel_host_mods.h" #include "djui_panel_pause.h" #define DJUI_MOD_PANEL_WIDTH (410.0f + (16 * 2.0f)) +#define MOD_CATEGORY_ALL "MOD_CATEGORY_ALL" +#define MOD_CATEGORY_MISC "MOD_CATEGORY_MISC" static struct DjuiFlowLayout* sModLayout = NULL; static struct DjuiThreePanel* sDescriptionPanel = NULL; static struct DjuiText* sTooltip = NULL; +unsigned int selectedCategory = 0; static bool sWarned = false; -static bool sRomHacks = false; + +struct ModCategory sCategories[] = { + // lang key, mod category + { "ALL", MOD_CATEGORY_ALL }, + { "ROMHACKS", "romhack" }, + { "GAMEMODES", "gamemode" }, + { "MOVESETS", "moveset" }, + { "CHARACTER_SELECT", "cs" }, + { "MISC", MOD_CATEGORY_MISC }, +}; void djui_panel_host_mods_create(struct DjuiBase* caller); @@ -119,27 +132,58 @@ static void djui_panel_host_mods_destroy(struct DjuiBase* base) { sTooltip = NULL; } -void djui_panel_host_mods_create(struct DjuiBase* caller) { - if (caller != NULL) { - sRomHacks = caller->tag != 0; +void djui_panel_on_categories_change(UNUSED struct DjuiBase* caller) { + if (gDjuiInMainMenu) { + djui_panel_shutdown(); + gDjuiInMainMenu = true; + djui_panel_main_create(NULL); + djui_panel_host_create(NULL); + djui_panel_host_mods_create(NULL); + } else { + djui_panel_shutdown(); + djui_panel_pause_create(NULL); + djui_panel_host_create(NULL); + djui_panel_host_mods_create(NULL); } +} + +void djui_panel_host_mods_create(struct DjuiBase* caller) { mods_update_selectable(); djui_panel_host_mods_description_create(); - struct DjuiThreePanel* panel = djui_panel_menu_create( - sRomHacks ? DLANG(HOST_MODS, ROMHACKS) : DLANG(HOST_MODS, MODS), - true); + struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(HOST_MODS, MODS), true); struct DjuiBase* body = djui_three_panel_get_body(panel); { + // copy category choices from sCategories + int numCategories = sizeof(sCategories) / sizeof(sCategories[0]); + char* categoryChoices[sizeof(sCategories)]; + + // loop thru all categories names, and add those to the categoryChoices string array + for (int i = 0; i < numCategories; i++) { + categoryChoices[i] = djui_language_get("HOST_MOD_CATEGORIES", sCategories[i].langKey); + } + djui_selectionbox_create(body, DLANG(HOST_MODS, CATEGORIES), categoryChoices, numCategories, &selectedCategory, djui_panel_on_categories_change); struct DjuiPaginated* paginated = djui_paginated_create(body, 8); sModLayout = paginated->layout; struct DjuiBase* layoutBase = &paginated->layout->base; for (int i = 0; i < gLocalMods.entryCount; i++) { struct Mod* mod = gLocalMods.entries[i]; - if (sRomHacks != (mod->incompatible && strstr(mod->incompatible, "romhack"))) { + char* category = mod->category; + if (!category) { category = mod->incompatible; } + if (!strstr(sCategories[selectedCategory].category, MOD_CATEGORY_ALL) && !strstr(sCategories[selectedCategory].category, MOD_CATEGORY_MISC) && (!category || !strstr(category, sCategories[selectedCategory].category))) { continue; + } else if (!strstr(sCategories[selectedCategory].category, MOD_CATEGORY_ALL) && strstr(sCategories[selectedCategory].category, MOD_CATEGORY_MISC)) { + bool doContinue = false; + for (int i = 0; i < numCategories; i++) { + if (strstr(sCategories[selectedCategory].category, MOD_CATEGORY_MISC) && (category && strstr(category, sCategories[i].category))) { + doContinue = true; + break; + } + } + + if (doContinue) { continue; } } struct DjuiCheckbox* checkbox = djui_checkbox_create(layoutBase, mod->name, &mod->enabled, djui_mod_checkbox_on_value_change); checkbox->base.tag = i; @@ -158,7 +202,7 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) { djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - panel->bodySize.value = paginated->base.height.value + 16 + 64; + panel->bodySize.value = paginated->base.height.value + 64 + 64; } panel->base.destroy = djui_panel_host_mods_destroy; diff --git a/src/pc/djui/djui_panel_host_mods.h b/src/pc/djui/djui_panel_host_mods.h index 510290cfc..a88fe6ccf 100644 --- a/src/pc/djui/djui_panel_host_mods.h +++ b/src/pc/djui/djui_panel_host_mods.h @@ -1,4 +1,9 @@ #pragma once #include "djui.h" +struct ModCategory { + const char* langKey; + const char* category; +}; + void djui_panel_host_mods_create(struct DjuiBase* caller); diff --git a/src/pc/mods/mod.c b/src/pc/mods/mod.c index 32b6efd70..30357348c 100644 --- a/src/pc/mods/mod.c +++ b/src/pc/mods/mod.c @@ -193,6 +193,11 @@ void mod_clear(struct Mod* mod) { mod->incompatible = NULL; } + if (mod->category != NULL) { + free(mod->category); + mod->category = NULL; + } + if (mod->description != NULL) { free(mod->description); mod->description = NULL; @@ -407,6 +412,7 @@ static void mod_extract_fields(struct Mod* mod) { // default to null mod->name = NULL; mod->incompatible = NULL; + mod->category = NULL; mod->description = NULL; mod->pausable = true; mod->ignoreScriptWarnings = false; @@ -435,6 +441,11 @@ static void mod_extract_fields(struct Mod* mod) { if (snprintf(mod->incompatible, MOD_INCOMPATIBLE_MAX_LENGTH, "%s", extracted) < 0) { LOG_INFO("Truncated mod incompatible field '%s'", mod->incompatible); } + } else if (mod->category == NULL && (extracted = extract_lua_field("-- category:", buffer))) { + mod->category = calloc(MOD_CATEGORY_MAX_LENGTH + 1, sizeof(char)); + if (snprintf(mod->category, MOD_CATEGORY_MAX_LENGTH, "%s", extracted) < 0) { + LOG_INFO("Truncated mod category field '%s'", mod->category); + } } else if (mod->description == NULL && (extracted = extract_lua_field("-- description:", buffer))) { mod->description = calloc(MOD_DESCRIPTION_MAX_LENGTH + 1, sizeof(char)); if (snprintf(mod->description, MOD_DESCRIPTION_MAX_LENGTH, "%s", extracted) < 0) { diff --git a/src/pc/mods/mod.h b/src/pc/mods/mod.h index 27ef834a8..092396857 100644 --- a/src/pc/mods/mod.h +++ b/src/pc/mods/mod.h @@ -7,6 +7,7 @@ #define MOD_NAME_MAX_LENGTH 64 #define MOD_INCOMPATIBLE_MAX_LENGTH 256 +#define MOD_CATEGORY_MAX_LENGTH 64 #define MOD_DESCRIPTION_MAX_LENGTH 800 struct Mods; @@ -24,6 +25,7 @@ struct ModFile { struct Mod { char* name; char* incompatible; + char* category; char* description; char relativePath[SYS_MAX_PATH]; char basePath[SYS_MAX_PATH];