#include "images.h" #include #include #include #include #include namespace images { std::map images; draw::surface *getImage(std::string filename) { auto item = images.find(filename); if (item != images.end()) return item->second; draw::surface *image = draw::loadSurface(filename.c_str()); images[filename] = image; return image; } int loadPalette(std::string filename) { uint32_t palette[16]; FILE *file = fopen(filename.c_str(), "r"); if (!file) return -1; char header[32]; int version, count; // Read and validate header if (!fgets(header, sizeof(header), file) || strncmp(header, "JASC-PAL", 8) != 0) { fclose(file); return -2; } if (fscanf(file, "%d\n%d\n", &version, &count) != 2 || count != 16) { fclose(file); return -3; } // Read 16 RGB triplets for (int i = 0; i < 16; ++i) { int r, g, b; if (fscanf(file, "%d %d %d\n", &r, &g, &b) != 3) { fclose(file); return -4; } palette[i] = (r << 16) | (g << 8) | b; } fclose(file); draw::setPalette(palette, 16); return 0; } }