213 lines
10 KiB
Plaintext
213 lines
10 KiB
Plaintext
;
|
||
; Copyright 2020 Electronic Arts Inc.
|
||
;
|
||
; TiberianDawn.DLL and RedAlert.dll and corresponding source code 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 3 of the License, or (at your option) any later version.
|
||
|
||
; TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
||
; in the hope that it will be useful, but with permitted additional restrictions
|
||
; under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
||
; distributed with this program. You should have received a copy of the
|
||
; GNU General Public License along with permitted additional restrictions
|
||
; with this program. If not, see [https://github.com/electronicarts/CnC_Remastered_Collection]>.
|
||
|
||
;***************************************************************************
|
||
;** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
|
||
;***************************************************************************
|
||
;* *
|
||
;* Project Name : WWLIB32 *
|
||
;* *
|
||
;* File Name : SHAPE.INC *
|
||
;* *
|
||
;* Programmer : Scott Bowen *
|
||
;* *
|
||
;* Start Date : May 25, 1994 *
|
||
;* *
|
||
;* Last Update : September 14, 1994 [IML] *
|
||
;* *
|
||
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
|
||
;****************************** Equates ************************************
|
||
;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
;............................ Shape Types ..................................
|
||
;
|
||
TRUE equ 1 ; Boolean 'true' value
|
||
FALSE equ 0 ; Boolean 'false' value
|
||
|
||
MAKESHAPE_NORMAL EQU 0 ; 256-color compressed shape
|
||
MAKESHAPE_COMPACT EQU 1 ; 16-color shape (built-in color table)
|
||
MAKESHAPE_NOCOMP EQU 2 ; non-wwcomped shape
|
||
MAKESHAPE_VARIABLE EQU 4 ; <16-color shape with variable #
|
||
; of colors (ColorTable[0] = # of colors)
|
||
; old names:
|
||
;COLOR_SHAPE EQU 1 ; flag which determines a color shape
|
||
;NORM_SHAPE EQU 2 ; flag that indicates non wwcomped shp
|
||
;NORM_SHAPE_16 EQU 4 ; flag that tells us if we have a variable sized table
|
||
; variable sized table
|
||
;
|
||
;...........................................................................
|
||
; Drawing flags:
|
||
; The low byte is for coordinate transformations.
|
||
; The high byte is for drawing effects.
|
||
;...........................................................................
|
||
;
|
||
SHAPE_NORMAL EQU 0000h ; no options; just a copy
|
||
SHAPE_HORZ_REV EQU 0001h ; reverse horizontally
|
||
SHAPE_VERT_REV EQU 0002h ; reverse vertically
|
||
SHAPE_SCALING EQU 0004h ; scale
|
||
SHAPE_VIEWPORT_REL EQU 0010h ; viewport-relative coordinates
|
||
SHAPE_CENTER EQU 0020h ; use centered coordinates
|
||
SHAPE_BOTTOM EQU 0040h ; Y coord is based on shape bottom pt
|
||
SHAPE_FADING EQU 0100h ; fading effect shape
|
||
SHAPE_PREDATOR EQU 0200h ; predator effect shape
|
||
SHAPE_COMPACT EQU 0400h ; shape is in 16 colors
|
||
SHAPE_PRIORITY EQU 0800h ; priority draw shape
|
||
SHAPE_GHOST EQU 1000h ; ghosting effect
|
||
SHAPE_SHADOW EQU 2000h ; shadow effect
|
||
SHAPE_PARTIAL EQU 4000h ; partial predator effect
|
||
SHAPE_COLOR EQU 8000h ; use alternative color table effect
|
||
|
||
SHAPE_EFFECTS EQU 03F00h ; shape effect flags
|
||
|
||
;
|
||
;.......................... Shadow Effect ..................................
|
||
;
|
||
SHADOW_COL EQU 00FFh ; magic number for shadows
|
||
|
||
;......................... Priority System .................................
|
||
;
|
||
CLEAR_UNUSED_BITS EQU 0007h ; and with 0000-0111 to clear
|
||
; non-walkable high bit and
|
||
; scaling id bits
|
||
NON_WALKABLE_BIT EQU 0080h ; and with 1000-0000 to clear all
|
||
; but non-walkable bit
|
||
;
|
||
;......................... Predator Effect .................................
|
||
;
|
||
PRED_MASK EQU 0007h ; mask used for predator pixel puts
|
||
|
||
;---------------------------------------------------------------------------
|
||
; This table is a list of the local stack variables in the function
|
||
; Draw_Shape. Many other functions in other modules access these variables
|
||
; on the stack. Since the BP is not changed when these other functions are
|
||
; called by Draw_Shape (possibly indirectly), they can also access these
|
||
; stack varibles. When adding or removing from the table, one must be very
|
||
; careful to change the offsets.
|
||
;---------------------------------------------------------------------------
|
||
;.......................... proc addresses .................................
|
||
LSkipRout EQU DWORD PTR ebp - 04h ;DWORD pointer to the skip routine
|
||
RSkipRout EQU DWORD PTR ebp - 08h ;DWORD pointer to the skip routine
|
||
DrawRout EQU DWORD PTR ebp - 0Ch ;DWORD pointer to the draw routine
|
||
;........................ optional arguments ...............................
|
||
ColorTable EQU DWORD PTR ebp - 10h ;DWORD ptr to the shapes color table
|
||
FadingTable EQU DWORD PTR ebp - 14h ;DWORD ptr to the fading table
|
||
|
||
FadingNum EQU DWORD PTR ebp - 18h ;DWORD number of times to fade
|
||
IsTranslucent EQU DWORD PTR ebp - 1Ch ;DWORD ptr to is_translucent table
|
||
Translucent EQU DWORD PTR ebp - 20h ;DWORD ptr to actual translucent tbl
|
||
PriLevel EQU BYTE PTR ebp - 24h ;BYTE priority level of the object
|
||
ScaleX EQU DWORD PTR ebp - 28h ;DWORD the x increment to scale by
|
||
ScaleY EQU DWORD PTR ebp - 2Ch ;DWORD the y increment to scale by
|
||
ShadowingTable EQU DWORD PTR ebp - 30h ;DWORD ptr to the shadowing table
|
||
;........................ Shape header values ..............................
|
||
ShapeType EQU DWORD PTR ebp - 34h ;DWORD shape type
|
||
ShapeWidth EQU DWORD PTR ebp - 38h ;DWORD shape's unscaled width
|
||
ShapeHeight EQU DWORD PTR ebp - 3Ch ;DWORD shape's unscaled height
|
||
UncompDataLen EQU DWORD PTR ebp - 40h ;DWORD uncompressed data length
|
||
ShapeData EQU DWORD PTR ebp - 44h ;DWORD pointer to shape data
|
||
;...................... Scaled shape dimensions ............................
|
||
ScaledWidth EQU DWORD PTR ebp - 48h ;DWORD shape's scaled width
|
||
ScaledHeight EQU DWORD PTR ebp - 4Ch ;DWORD shape's scaled height
|
||
;...................... Pixel clipping variables ...........................
|
||
LeftClipPixels EQU DWORD PTR ebp - 50h ;DWORD # left-clipped pixels
|
||
RightClipPixels EQU DWORD PTR ebp - 54h ;DWORD # right-clipped pixels
|
||
TopClipPixels EQU DWORD PTR ebp - 58h ;DWORD # top-clipped pixels
|
||
BotClipPixels EQU DWORD PTR ebp - 5Ch ;DWORD # bottom-clipped pixels
|
||
PixelWidth EQU DWORD PTR ebp - 60h ;DWORD drawable area in pixels
|
||
PixelHeight EQU DWORD PTR ebp - 64h ;DWORD drawable area in pixels
|
||
;......................... Drawing variables ...............................
|
||
NumColors EQU DWORD PTR ebp - 68h ;DWORD # colors for 16-color shapes
|
||
StartDraw EQU DWORD PTR ebp - 6Ch ;DWORD offset of drawing start pos
|
||
NextLine EQU DWORD PTR ebp - 70h ;DWORD offset of next drawing line
|
||
LeftClipBytes EQU DWORD PTR ebp - 74h ;DWORD # left-clipped bytes
|
||
XTotal EQU DWORD PTR ebp - 78h ;DWORD accumulated x-pixels
|
||
XTotalInit EQU DWORD PTR ebp - 7Ch ;DWORD initial roundoff for XTotal
|
||
YTotal EQU DWORD PTR ebp - 80h ;DWORD accumulated y-pixels
|
||
HeightCount EQU DWORD PTR ebp - 84h ;DWORD ht counter for drawing lines
|
||
LineStart EQU DWORD PTR ebp - 88h ;DWORD address of start of line
|
||
WidthCount EQU DWORD PTR ebp - 8Ch ;DWORD counts down # bytes skipped
|
||
StashReg EQU DWORD PTR ebp - 90h ;DWORD temp variable for draw routines
|
||
MaskAdjust EQU DWORD PTR ebp - 94h ;DWORD priority buffer offset
|
||
BackAdjust EQU DWORD PTR ebp - 98h ;DWORD background buffer offset
|
||
StashECX EQU DWORD PTR ebp - 9Ch ;DWORD temp variable for ECX register
|
||
StashEDX EQU DWORD PTR ebp -0A0h ;DWORD temp variable for EDX register
|
||
|
||
Local_Size EQU 00A4h ; Amt of data on stack: 4+last offset
|
||
|
||
;****************************** Declarations *******************************
|
||
;---------------------------------------------------------------------------
|
||
; Global variables used by the shape routines, defined in drawshp.asm
|
||
;---------------------------------------------------------------------------
|
||
GLOBAL C ShapeBuffer:DWORD
|
||
GLOBAL C ShapeBufferSize:DWORD
|
||
GLOBAL C _MaskPage:DWORD
|
||
GLOBAL C _BackGroundPage:DWORD
|
||
GLOBAL C PredCount:DWORD
|
||
GLOBAL C PredTable:BYTE
|
||
GLOBAL C PredValue:DWORD
|
||
GLOBAL C PartialPred:DWORD
|
||
GLOBAL C PartialCount:DWORD
|
||
GLOBAL C Flags:DWORD
|
||
|
||
;---------------------------------------------------------------------------
|
||
; External tables that are defined in ds_table.asm.
|
||
;---------------------------------------------------------------------------
|
||
GLOBAL LSkipTable:DWORD
|
||
GLOBAL RSkipTable:DWORD
|
||
GLOBAL DrawTable:DWORD
|
||
|
||
;------------------------------------------------------------------------------
|
||
; Public functions, declared in the order they appear in the function tables.
|
||
;--------------------------------------------------------------------------------
|
||
GLOBAL C Not_Supported:NEAR
|
||
; LSkipTable:
|
||
GLOBAL Left_Skip:NEAR ; ds_ls
|
||
GLOBAL Left_Reverse_Skip:NEAR ; ds_lrs
|
||
GLOBAL Left_Skip:NEAR ; ds_ls
|
||
GLOBAL Left_Reverse_Skip:NEAR ; ds_lrs
|
||
GLOBAL Left_Scale_Skip:NEAR ; ds_lss
|
||
GLOBAL Left_Scale_Reverse_Skip:NEAR ; ds_lsrs
|
||
GLOBAL Left_Scale_Skip:NEAR ; ds_lss
|
||
GLOBAL Left_Scale_Reverse_Skip:NEAR ; ds_lsrs
|
||
|
||
; RSkipTable:
|
||
GLOBAL Right_Skip:NEAR ; ds_rs
|
||
GLOBAL Right_Reverse_Skip:NEAR ; ds_rrs
|
||
GLOBAL Right_Skip:NEAR ; ds_rs
|
||
GLOBAL Right_Reverse_Skip:NEAR ; ds_rrs
|
||
GLOBAL Right_Scale_Skip:NEAR ; ds_rss
|
||
GLOBAL Right_Scale_Reverse_Skip:NEAR ; ds_rsrs
|
||
GLOBAL Right_Scale_Skip:NEAR ; ds_rss
|
||
GLOBAL Right_Scale_Reverse_Skip:NEAR ; ds_rsrs
|
||
|
||
; DrawTable:
|
||
GLOBAL Draw_Normal:NEAR ; ds_dn
|
||
GLOBAL Draw_Reverse:NEAR ; ds_dr
|
||
GLOBAL Draw_Normal:NEAR ; ds_dn
|
||
GLOBAL Draw_Reverse:NEAR ; ds_dr
|
||
GLOBAL Draw_Scale:NEAR ; ds_ds
|
||
GLOBAL Draw_Scale_Reverse:NEAR ; ds_dsr
|
||
GLOBAL Draw_Scale:NEAR ; ds_ds
|
||
GLOBAL Draw_Scale_Reverse:NEAR ; ds_dsr
|
||
|
||
|
||
;************************* End of shape.inc ********************************
|
||
|