; Seven Kingdoms: Ancient Adversaries
;
; Copyright 1997,1998 Enlight Software Ltd.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see .
;
;Filename : IB_RD.ASM
;Description : decompress and color remapping handling with color key transparency
INCLUDE IMGFUN.inc
INCLUDE COLCODE.inc
.CODE
;-------- BEGIN OF FUNCTION IMGremapDecompress ----------
;
; Decompress bitmap on image buffer with Transparency.
; It handles color key transparency. The color key code is 255.
;
; R - color remapping
; D - decompression
;
; Syntax : IMGremapDecompress(desPtr, srcPtr, colorTable )
;
; char *desPtr - the pointer to the compressed surface buffer
; char *srcPtr - the pointer to the decompressed surface buffer
; char *colorTable - a 256-entry color remapping table
;
;-------------------------------------------------
;
; Format of the compressed data
; compressed decompressed
; FF FF
; FE (-2) FF FF
; FD (-3) FF FF FF
; FC (-4) FF FF FF FF
; FB (-5) FF FF FF FF FF
; FA (-6) FF FF FF FF FF FF
; F9 (-7) FF FF FF FF FF FF FF
; F8 B FF ...
;-------------------------------------------------
;
; Format of the bitmap data :
;
; width
; height
; bitmap image
;
;-------------------------------------------------
PUBLIC IMGremapDecompress
IMGremapDecompress PROC desPtr, srcPtr, colorTable
STARTPROC
MOV AX,DS
MOV ES,AX
MOV ESI,srcPtr
MOV EDI,desPtr
LODSW ; width
MOV CX,AX
STOSW
LODSW ; height
STOSW
MUL CX
; DX:AX stores the decompressed size
; move it to EDX
SHL EDX, 16
MOV DX, AX
; load colour map
MOV EBX, colorTable
XOR ECX, ECX
@@next:
LODSB ; get compressed data
PRE_REMAP
; test data between F8-FF
JUMP_IF_TRANS al, @@compressed
POST_REMAP
STOSB
DEC EDX ; test if completed
JNZ @@next
JMP @@endloop
@@compressed:
JUMP_IF_NOT_MANY_TRANS al, @@compressed2
; F8 B
LODSB ; load the count
MOV CL,AL
MOV AL,0FFH
SUB EDX,ECX ; test if completed
;PUSHF
REP STOSB
;POPF
JA @@next
JMP @@endloop
@@compressed2:
; F9 - FF
MOV CL,AL ; repetition = -al
MOV AL,0FFH
DECODE_FEW_TRANS_CODE cl
SUB EDX,ECX ; test if completed
;PUSHF
REP STOSB
;POPF
JA @@next
@@endloop:
@@end: ENDPROC
IMGremapDecompress ENDP
;----------- END OF FUNCTION IMGbltTransRemap ----------
END