diff --git a/sc2/content/comm/chmmr/chmmr.ct b/sc2/content/comm/chmmr/chmmr.ct index 7d0e31554..f017f3993 100755 Binary files a/sc2/content/comm/chmmr/chmmr.ct and b/sc2/content/comm/chmmr/chmmr.ct differ diff --git a/sc2/content/comm/comandr/comandr.ct b/sc2/content/comm/comandr/comandr.ct index 61595e55f..c8b8cde03 100755 Binary files a/sc2/content/comm/comandr/comandr.ct and b/sc2/content/comm/comandr/comandr.ct differ diff --git a/sc2/content/comm/melnorm/melnorm.ct b/sc2/content/comm/melnorm/melnorm.ct index 542aebf81..bcf3b04cc 100755 Binary files a/sc2/content/comm/melnorm/melnorm.ct and b/sc2/content/comm/melnorm/melnorm.ct differ diff --git a/sc2/content/comm/orz/orz.ct b/sc2/content/comm/orz/orz.ct index ebaac7697..8713270b2 100755 Binary files a/sc2/content/comm/orz/orz.ct and b/sc2/content/comm/orz/orz.ct differ diff --git a/sc2/content/comm/slyhome/slyhome.ct b/sc2/content/comm/slyhome/slyhome.ct index 620f7fc90..4830e4f67 100755 Binary files a/sc2/content/comm/slyhome/slyhome.ct and b/sc2/content/comm/slyhome/slyhome.ct differ diff --git a/sc2/content/comm/spahome/spahome.ct b/sc2/content/comm/spahome/spahome.ct index eb13dcad4..dda901114 100755 Binary files a/sc2/content/comm/spahome/spahome.ct and b/sc2/content/comm/spahome/spahome.ct differ diff --git a/sc2/content/comm/syreen/syreen.ct b/sc2/content/comm/syreen/syreen.ct index 09db2cffa..0f8a03446 100755 Binary files a/sc2/content/comm/syreen/syreen.ct and b/sc2/content/comm/syreen/syreen.ct differ diff --git a/sc2/content/comm/talkpet/talkpet.ct b/sc2/content/comm/talkpet/talkpet.ct index b000f7f92..eb6588a5b 100755 Binary files a/sc2/content/comm/talkpet/talkpet.ct and b/sc2/content/comm/talkpet/talkpet.ct differ diff --git a/sc2/content/comm/vux/vux.ct b/sc2/content/comm/vux/vux.ct index d52483bfc..ce8c3b3ae 100755 Binary files a/sc2/content/comm/vux/vux.ct and b/sc2/content/comm/vux/vux.ct differ diff --git a/sc2/content/ipanims/orbplan.ct b/sc2/content/ipanims/orbplan.ct index 32e17a26f..c42595aa6 100755 Binary files a/sc2/content/ipanims/orbplan.ct and b/sc2/content/ipanims/orbplan.ct differ diff --git a/sc2/content/lbm/arispace.ct b/sc2/content/lbm/arispace.ct index 450c487aa..b523105cc 100755 Binary files a/sc2/content/lbm/arispace.ct and b/sc2/content/lbm/arispace.ct differ diff --git a/sc2/content/lbm/dockpani.ct b/sc2/content/lbm/dockpani.ct index 45e6b3ec8..34b0dca6b 100644 Binary files a/sc2/content/lbm/dockpani.ct and b/sc2/content/lbm/dockpani.ct differ diff --git a/sc2/content/lbm/hyperpal.ct b/sc2/content/lbm/hyperpal.ct index 96b70bdf5..aa6e87f5b 100755 Binary files a/sc2/content/lbm/hyperpal.ct and b/sc2/content/lbm/hyperpal.ct differ diff --git a/sc2/content/lbm/scclrtab.ct b/sc2/content/lbm/scclrtab.ct index 9bb70fd72..b2868fa75 100755 Binary files a/sc2/content/lbm/scclrtab.ct and b/sc2/content/lbm/scclrtab.ct differ diff --git a/sc2/src/sc2code/comm.c b/sc2/src/sc2code/comm.c index bacaad116..3277ad039 100644 --- a/sc2/src/sc2code/comm.c +++ b/sc2/src/sc2code/comm.c @@ -488,7 +488,7 @@ typedef struct xform_control { COLORMAPPTR CMapPtr; SIZE Ticks, TTotal, TOrig; - DWORD OldCMap[NUMBER_OF_PLUT_UINT32s]; + UBYTE OldCMap[PLUT_BYTE_SIZE]; } XFORM_CONTROL; #define MAX_XFORMS 32 @@ -565,7 +565,6 @@ xform_PLUT_step (SIZE TDelta) { XFORM_CONTROL *control; COLORMAPPTR ColorMapPtr; - DWORD *pCurCMap, *pOldCMap; int i; if (!XFormControl.XFormsPending) @@ -578,56 +577,26 @@ xform_PLUT_step (SIZE TDelta) if (TDelta > control->TTotal) TDelta = control->TTotal; - pCurCMap = (DWORD *)((BYTE *)_varPLUTs + (*ColorMapPtr * PLUT_BYTE_SIZE)); - pOldCMap = control->OldCMap; - - ColorMapPtr += 2; - if (_varPLUTs) + if (_varPLUTs && control->TOrig != 0) { - for (i = 0; i < NUMBER_OF_PLUT_UINT32s; i++) +#define XFORM_SCALE 0x10000 + UBYTE *pCurCMap, *pOldCMap, *pNewCMap; + int frac; + + pCurCMap = GET_VAR_PLUT (*ColorMapPtr); + pOldCMap = control->OldCMap; + pNewCMap = (UBYTE*)ColorMapPtr + 2; + + frac = (int)(control->TOrig - control->TTotal) * XFORM_SCALE + / control->TOrig; + + for (i = 0; i < PLUT_BYTE_SIZE; i++) { - SIZE c0, c1; - DWORD v0, v1, val; - float f = (control->TOrig - control->TTotal) / (float)control->TOrig; - COLORMAPPTR oldmap = (COLORMAPPTR) pOldCMap; - - v0 = UQM_SwapBE32 (*(DWORD *)oldmap); - v1 = UQM_SwapBE32 (*(DWORD *)ColorMapPtr); - - ColorMapPtr += sizeof (DWORD); - - c0 = (SIZE)((v0 >> (10 + 16)) & 0x1F); - c1 = (SIZE)((v1 >> (10 + 16)) & 0x1F); - c0 += (SIZE)((c1 - c0) * f); - val = (c0 & 0x1F) | (1 << 5); - - c0 = (SIZE)((v0 >> (5 + 16)) & 0x1F); - c1 = (SIZE)((v1 >> (5 + 16)) & 0x1F); - c0 += (SIZE)((c1 - c0) * f); - val = (val << 5) | (c0 & 0x1F); - - c0 = (SIZE)((v0 >> (0 + 16)) & 0x1F); - c1 = (SIZE)((v1 >> (0 + 16)) & 0x1F); - c0 += (SIZE)((c1 - c0) * f); - val = (val << 5) | (c0 & 0x1F); - - c0 = (SIZE)((v0 >> 10) & 0x1F); - c1 = (SIZE)((v1 >> 10) & 0x1F); - c0 += (SIZE)((c1 - c0) * f); - val = (val << (5 + 1)) | (c0 & 0x1F) | (1 << 5); - - c0 = (SIZE)((v0 >> 5) & 0x1F); - c1 = (SIZE)((v1 >> 5) & 0x1F); - c0 += (SIZE)((c1 - c0) * f); - val = (val << 5) | (c0 & 0x1F); - - c0 = (SIZE)((v0 >> 0) & 0x1F); - c1 = (SIZE)((v1 >> 0) & 0x1F); - c0 += (SIZE)((c1 - c0) * f); - val = (val << 5) | (c0 & 0x1F); - + *pCurCMap = (UBYTE)(*pOldCMap + ((int)*pNewCMap - *pOldCMap) + * frac / XFORM_SCALE); pOldCMap++; - *pCurCMap++ = UQM_SwapBE32 (val); + pCurCMap++; + pNewCMap++; } ColorChange = TRUE; } @@ -657,9 +626,7 @@ XFormPLUT (COLORMAPPTR ColorMapPtr, SIZE TimeInterval) { if (ColorMapPtr) { - DWORD *pOldCMap, *pCurCMap; XFORM_CONTROL *control; - int i; // FlushPLUTXForms (); @@ -674,10 +641,7 @@ XFormPLUT (COLORMAPPTR ColorMapPtr, SIZE TimeInterval) control = &XFormControl.TaskControl[XFormControl.XFormInsertPoint]; - pCurCMap = (DWORD *)((BYTE *)_varPLUTs + (*ColorMapPtr * PLUT_BYTE_SIZE)); - pOldCMap = control->OldCMap; - for (i = 0; i < NUMBER_OF_PLUT_UINT32s; ++i) - *pOldCMap++ = *pCurCMap++; + memcpy (control->OldCMap, GET_VAR_PLUT (*ColorMapPtr), PLUT_BYTE_SIZE); control->CMapPtr = ColorMapPtr; if ((control->Ticks = TimeInterval) <= 0) diff --git a/sc2/src/sc2code/libs/graphics/cmap.c b/sc2/src/sc2code/libs/graphics/cmap.c index 30130599e..2541abab7 100644 --- a/sc2/src/sc2code/libs/graphics/cmap.c +++ b/sc2/src/sc2code/libs/graphics/cmap.c @@ -35,45 +35,30 @@ static struct volatile int FadeAmount = FADE_NORMAL_INTENSITY; static volatile int end, XForming; -DWORD* _varPLUTs; -static unsigned int varPLUTsize = VARPLUTS_SIZE; +UBYTE* _varPLUTs; +static unsigned int varPLUTsize = 0; void TFB_ColorMapToRGB (TFB_Palette *pal, int colormap_index) { - DWORD i, k; - UWORD cval; - UBYTE j, r, g, b, rtot, gtot, btot; + int i; UBYTE *colors; - colors = (UBYTE*)_varPLUTs + (colormap_index * PLUT_BYTE_SIZE); + colors = GET_VAR_PLUT (colormap_index); - for (i = 0; i < 32; i++) + for (i = 0; i < NUMBER_OF_PLUTVALS; i++) { - cval = MAKE_WORD (colors[1], colors[0]); - colors += 2; - - rtot = r = (UBYTE)((cval >> 10) & 0x1f); // bits 10-14 - gtot = g = (UBYTE)((cval >> 5) & 0x1f); // bits 5-9 - btot = b = (UBYTE)(cval & 0x1f); // bits 0-4 - - for (j = 0; j < 8; ++j) - { - k = ((j << 5) + i); - pal[k].r = rtot; - rtot += r; - pal[k].g = gtot; - gtot += g; - pal[k].b = btot; - btot += b; - } + pal[i].r = *colors++; + pal[i].g = *colors++; + pal[i].b = *colors++; } } BOOLEAN SetColorMap (COLORMAPPTR map) { - int start, end, bytes; + int start, end; + DWORD size, total_size; UBYTE *colors = (UBYTE*)map; UBYTE *vp; @@ -85,17 +70,27 @@ SetColorMap (COLORMAPPTR map) if (start > end) return TRUE; - bytes = (end - start + 1) * PLUT_BYTE_SIZE; + size = (end - start + 1) * PLUT_BYTE_SIZE; + total_size = (end + 1) * PLUT_BYTE_SIZE; if (!_varPLUTs) { - if (!(_varPLUTs = (DWORD *) HMalloc (bytes))) - return TRUE; - varPLUTsize = bytes; + _varPLUTs = (UBYTE *) HMalloc (total_size); + varPLUTsize = total_size; + } + else if (total_size > varPLUTsize) + { + _varPLUTs = (UBYTE *) HRealloc (_varPLUTs, total_size); + varPLUTsize = total_size; + } + if (!_varPLUTs) + { + varPLUTsize = 0; + return TRUE; } - vp = (UBYTE*)_varPLUTs + (start * PLUT_BYTE_SIZE); - memcpy (vp, colors, bytes); + vp = GET_VAR_PLUT (start); + memcpy (vp, colors, size); //fprintf (stderr, "SetColorMap(): vp %x map %x bytes %d, start %d end %d\n", vp, map, bytes, start, end); return TRUE; diff --git a/sc2/src/sc2code/libs/graphics/cmap.h b/sc2/src/sc2code/libs/graphics/cmap.h index db1c3fc59..c9efe170d 100644 --- a/sc2/src/sc2code/libs/graphics/cmap.h +++ b/sc2/src/sc2code/libs/graphics/cmap.h @@ -22,14 +22,11 @@ #define CMAP_H #define NUMBER_OF_VARPLUTS 256 -#define NUMBER_OF_PLUTVALS 32 -#define NUMBER_OF_PLUT_UINT32s (NUMBER_OF_PLUTVALS >> 1) -#define PLUT_BYTE_SIZE (sizeof (unsigned int) * \ - NUMBER_OF_PLUT_UINT32s) -#define NUMBER_OF_CLUTVALS 32 -#define VARPLUTS_SIZE (NUMBER_OF_VARPLUTS * \ - NUMBER_OF_PLUT_UINT32s * sizeof (unsigned int)) -#define GET_VAR_PLUT(i) (_varPLUTs + (i) * NUMBER_OF_PLUT_UINT32s) +#define PLUTVAL_BYTE_SIZE 3 +#define NUMBER_OF_PLUTVALS 256 +#define PLUT_BYTE_SIZE (PLUTVAL_BYTE_SIZE * NUMBER_OF_PLUTVALS) +#define VARPLUTS_SIZE (NUMBER_OF_VARPLUTS * PLUT_BYTE_SIZE) +#define GET_VAR_PLUT(i) (_varPLUTs + (i) * PLUT_BYTE_SIZE) #define BUILD_FRAME (1 << 0) #define FIND_PAGE (1 << 1) @@ -43,7 +40,7 @@ #define FADE_NORMAL_INTENSITY 255 #define FADE_FULL_INTENSITY 510 -extern DWORD* _varPLUTs; +extern UBYTE* _varPLUTs; extern volatile int FadeAmount; void TFB_ColorMapToRGB (TFB_Palette *pal, int colormap_index);