AGS: Refactor palette management to use SDL_Palette

This commit is contained in:
kichikuou
2025-01-17 13:47:10 +09:00
parent 12e7804d9f
commit 1673a5eb3c
8 changed files with 141 additions and 203 deletions
+19 -35
View File
@@ -28,43 +28,35 @@ void AGS::load_pms(uint8* data, int page, int transparent)
set_cg_dest = false;
}
// パレット取得
uint32 tmp_palette[256];
if(get_palette) {
SDL_Color colors[256];
int p = 0x20;
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
uint32 r = data[p++];
uint32 g = data[p++];
uint32 b = data[p++];
tmp_palette[i * 16 + j] = SETPALETTE256(r, g, b);
uint8_t r = data[p++];
uint8_t g = data[p++];
uint8_t b = data[p++];
colors[i * 16 + j] = {r, g, b, 255};
}
}
if (game_id.is_rance4x() || game_id.is(GameId::HASHIRIONNA2)) {
// 上下16色は取得しない
for(int i = 1; i < 15; i++) {
for(int j = 0; j < 16; j++) {
if(!(mask & (0x01 << i))) {
program_palette[i * 16 + j] = tmp_palette[i * 16 + j];
}
if (!(mask & 1 << i)) {
SDL_SetPaletteColors(program_palette, colors + i * 16, i * 16, 16);
}
}
} else if (game_id.is(GameId::MUGEN) && transparent != -1) {
// Uコマンドでは上下32色は取得しない
for(int i = 2; i < 14; i++) {
for(int j = 0; j < 16; j++) {
if(!(mask & (0x01 << i))) {
program_palette[i * 16 + j] = tmp_palette[i * 16 + j];
}
if (!(mask & 1 << i)) {
SDL_SetPaletteColors(program_palette, colors + i * 16, i * 16, 16);
}
}
} else {
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
if(!(mask & (0x01 << i))) {
program_palette[i * 16 + j] = tmp_palette[i * 16 + j];
}
if (!(mask & 1 << i)) {
SDL_SetPaletteColors(program_palette, colors + i * 16, i * 16, 16);
}
}
}
@@ -76,37 +68,29 @@ void AGS::load_pms(uint8* data, int page, int transparent)
if (game_id.is_rance4x() || game_id.is(GameId::HASHIRIONNA2)) {
// 上下16色は展開しない
for(int i = 1; i < 15; i++) {
for(int j = 0; j < 16; j++) {
if(!(mask & (0x01 << i))) {
screen_palette[i * 16 + j] = program_palette[i * 16 + j];
}
if (!(mask & 1 << i)) {
SDL_SetPaletteColors(screen_palette, program_palette->colors + i * 16, i * 16, 16);
}
}
} else if (game_id.is(GameId::MUGEN) && transparent != -1) {
// Uコマンドでは上下32色は展開しない
for(int i = 2; i < 14; i++) {
for(int j = 0; j < 16; j++) {
if(!(mask & (0x01 << i))) {
screen_palette[i * 16 + j] = program_palette[i * 16 + j];
}
if (!(mask & 1 << i)) {
SDL_SetPaletteColors(screen_palette, program_palette->colors + i * 16, i * 16, 16);
}
}
} else {
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
if(!(mask & (0x01 << i))) {
screen_palette[i * 16 + j] = program_palette[i * 16 + j];
}
if (!(mask & 1 << i)) {
SDL_SetPaletteColors(screen_palette, program_palette->colors + i * 16, i * 16, 16);
}
}
}
}
} else if(extract_palette && extract_palette_cg[page]) {
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
if(!(mask & (0x01 << i))) {
screen_palette[i * 16 + j] = program_palette[i * 16 + j];
}
if (!(mask & 1 << i)) {
SDL_SetPaletteColors(screen_palette, program_palette->colors + i * 16, i * 16, 16);
}
}
}