From 13e619710797ca174d32e44cd57d6eda2f413bf4 Mon Sep 17 00:00:00 2001 From: Agent X <44549182+AgentXLP@users.noreply.github.com> Date: Sun, 19 May 2024 11:22:11 -0400 Subject: [PATCH] Added hex code support and sanity checks to palette INIs --- src/game/player_palette.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/game/player_palette.c b/src/game/player_palette.c index 5050b4e9..1b1efc42 100644 --- a/src/game/player_palette.c +++ b/src/game/player_palette.c @@ -1,3 +1,4 @@ +#include #include "pc/ini.h" #include "pc/mods/mods.h" #include "pc/mods/mods_utils.h" @@ -40,6 +41,17 @@ void player_palettes_reset(void) { gPresetPaletteCount = 0; } +static u8 read(const char* data) { + if (data == NULL) { return 0; } + for (size_t i = 0; i < strlen(data); i++) { + char c = data[i]; + if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || c == 'x')) { + return 0; + } + } + return strtol(data, NULL, 0); +} + void player_palettes_read(const char* palettesPath) { // construct lang path char lpath[SYS_MAX_PATH] = ""; @@ -73,14 +85,14 @@ void player_palettes_read(const char* palettesPath) { if (!player_palette_init(palettesPath, path)) { continue; } struct PlayerPalette palette = {{ - { atoi(ini_get(sPalette, "PALETTE", "PANTS_R")), atoi(ini_get(sPalette, "PALETTE", "PANTS_G")), atoi(ini_get(sPalette, "PALETTE", "PANTS_B")) }, - { atoi(ini_get(sPalette, "PALETTE", "SHIRT_R")), atoi(ini_get(sPalette, "PALETTE", "SHIRT_G")), atoi(ini_get(sPalette, "PALETTE", "SHIRT_B")) }, - { atoi(ini_get(sPalette, "PALETTE", "GLOVES_R")), atoi(ini_get(sPalette, "PALETTE", "GLOVES_G")), atoi(ini_get(sPalette, "PALETTE", "GLOVES_B")) }, - { atoi(ini_get(sPalette, "PALETTE", "SHOES_R")), atoi(ini_get(sPalette, "PALETTE", "SHOES_G")), atoi(ini_get(sPalette, "PALETTE", "SHOES_B")) }, - { atoi(ini_get(sPalette, "PALETTE", "HAIR_R")), atoi(ini_get(sPalette, "PALETTE", "HAIR_G")), atoi(ini_get(sPalette, "PALETTE", "HAIR_B")) }, - { atoi(ini_get(sPalette, "PALETTE", "SKIN_R")), atoi(ini_get(sPalette, "PALETTE", "SKIN_G")), atoi(ini_get(sPalette, "PALETTE", "SKIN_B")) }, - { atoi(ini_get(sPalette, "PALETTE", "CAP_R")), atoi(ini_get(sPalette, "PALETTE", "CAP_G")), atoi(ini_get(sPalette, "PALETTE", "CAP_B")) }, - { atoi(ini_get(sPalette, "PALETTE", "EMBLEM_R")), atoi(ini_get(sPalette, "PALETTE", "EMBLEM_G")), atoi(ini_get(sPalette, "PALETTE", "EMBLEM_B")) } + { read(ini_get(sPalette, "PALETTE", "PANTS_R")), read(ini_get(sPalette, "PALETTE", "PANTS_G")), read(ini_get(sPalette, "PALETTE", "PANTS_B")) }, + { read(ini_get(sPalette, "PALETTE", "SHIRT_R")), read(ini_get(sPalette, "PALETTE", "SHIRT_G")), read(ini_get(sPalette, "PALETTE", "SHIRT_B")) }, + { read(ini_get(sPalette, "PALETTE", "GLOVES_R")), read(ini_get(sPalette, "PALETTE", "GLOVES_G")), read(ini_get(sPalette, "PALETTE", "GLOVES_B")) }, + { read(ini_get(sPalette, "PALETTE", "SHOES_R")), read(ini_get(sPalette, "PALETTE", "SHOES_G")), read(ini_get(sPalette, "PALETTE", "SHOES_B")) }, + { read(ini_get(sPalette, "PALETTE", "HAIR_R")), read(ini_get(sPalette, "PALETTE", "HAIR_G")), read(ini_get(sPalette, "PALETTE", "HAIR_B")) }, + { read(ini_get(sPalette, "PALETTE", "SKIN_R")), read(ini_get(sPalette, "PALETTE", "SKIN_G")), read(ini_get(sPalette, "PALETTE", "SKIN_B")) }, + { read(ini_get(sPalette, "PALETTE", "CAP_R")), read(ini_get(sPalette, "PALETTE", "CAP_G")), read(ini_get(sPalette, "PALETTE", "CAP_B")) }, + { read(ini_get(sPalette, "PALETTE", "EMBLEM_R")), read(ini_get(sPalette, "PALETTE", "EMBLEM_G")), read(ini_get(sPalette, "PALETTE", "EMBLEM_B")) } }}; // free ini_free(sPalette);