mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-10-08 14:58:13 +03:00
AGS: Refactor palette management to use SDL_Palette
This commit is contained in:
+19
-35
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user