From c924c3e84efafcad883cb23a8eaf009346a221e2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 25 Sep 2021 09:54:22 -0700 Subject: [PATCH] AGS: Implemented fade_interpolate --- engines/ags/engine/gfx/ali_3d_scummvm.cpp | 1 + engines/ags/lib/allegro/color.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/engines/ags/engine/gfx/ali_3d_scummvm.cpp b/engines/ags/engine/gfx/ali_3d_scummvm.cpp index cfd02ed948b..d690cae5be6 100644 --- a/engines/ags/engine/gfx/ali_3d_scummvm.cpp +++ b/engines/ags/engine/gfx/ali_3d_scummvm.cpp @@ -642,6 +642,7 @@ void ScummVMRendererGraphicsDriver::__fade_from_range(PALETTE source, PALETTE de RenderToBackBuffer(); Present(); + g_system->delayMillis(5); sys_evt_process_pending(); if (_pollingCallback) _pollingCallback(); diff --git a/engines/ags/lib/allegro/color.cpp b/engines/ags/lib/allegro/color.cpp index 296dbdc19d1..67ec489aabe 100644 --- a/engines/ags/lib/allegro/color.cpp +++ b/engines/ags/lib/allegro/color.cpp @@ -196,7 +196,15 @@ void get_palette_range(PALETTE p, int from, int to) { } void fade_interpolate(AL_CONST PALETTE source, AL_CONST PALETTE dest, PALETTE output, int pos, int from, int to) { - warning("TODO: fade_interpolate"); + assert(pos >= 0 && pos <= 64); + assert(from >= 0 && from < PAL_SIZE); + assert(to >= 0 && to < PAL_SIZE); + + for (int c = from; c <= to; c++) { + output[c].r = ((int)source[c].r * (63 - pos) + (int)dest[c].r * pos) / 64; + output[c].g = ((int)source[c].g * (63 - pos) + (int)dest[c].g * pos) / 64; + output[c].b = ((int)source[c].b * (63 - pos) + (int)dest[c].b * pos) / 64; + } } void select_palette(AL_CONST PALETTE p) {