Microsoft-3D-Movie-Maker/INC/KIDGS.CHH

598 lines
20 KiB
Plaintext
Raw Normal View History

2022-05-04 01:31:19 +02:00
/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
// Module: KIDGS.CHH
//
// Purpose: Cool defines for making chomp text into something readable
//
// Comments:
//
// #define the following to turn this stuff ON or OFF
//
// PACKALL --> pack all files
// NONAMES --> don't put names in for chunks defined using these macros
// SKIP --> kidspace animations eg. OBJECT()'s --- will slip if this is defined
//
//
#ifndef KIDSGS_CHH
#define KIDSGS_CHH
#include "assert.chh"
#include "kidgsdef.h"
// ------ -------- ------ -------- ------ -------- ------ --------
#ifdef PACKALL
#define __PACK PACK
#else
#define __PACK
#endif
// ------ -------- ------ -------- ------ -------- ------ --------
#ifdef NAMES
#define __NAME(x) x
#else
#define __NAME(x)
#endif
// ------ -------- ------ -------- ------ -------- ------ --------
#ifdef DEBUG
#define Debug(x) x
#else
#define Debug(x)
#endif
// ------ -------- ------ -------- ------ -------- ------ --------
#ifndef fTrue
#define fTrue 1
#endif
// ------ -------- ------ -------- ------ -------- ------ --------
#ifndef fFalse
#define fFalse 0
#endif
// ---------------------------------------------------------
// the following chids get affected by the state the gob is in
// the default state for a gob is 1 which means chids
// not referenced in the CUME are determined as follows:
// hiword = state loword = chid
//
// e.g. for a mouse rollon in state 2 KAUAI looks at chid
// 0x000200011 (0x0002=state 0x0011 = rollon)
// ---------------------------------------------------------
// The following are relative chids ie. the state is the highword
// combine these with the state defn's to make the real chid
// ---------------------------------------------------------
#define kchidCreate 0x0000
#define kchidClick 0x0001
// Mouse tracking button states/ representations
#define krepDefault kchidUpOff
#define krepMouseUpOff kchidUpOff
#define krepMouseUpOn kchidUpOn
#define krepMouseDnOff kchidDownOff
#define krepMouseDnOn kchidDownOn
#define krepEnterAnimation kchidTransBase
#define krepRollOn kchidUpOffOn
#define krepRollOff kchidUpOnOff
#define krepMouseDn kchidUpDownOn
#define krepClicked kchidDownUpOn
#define krepDragOff kchidDownOnOff
#define krepDragOn kchidDownOffOn
#define krepDrop kchidDownUpOff
// ---------------------------------------------------------
// the following are bit masks for the CUME entry
// ---------------------------------------------------------
#define fgrfstNil 0x00000001
#define fgrfst1 0x00000002
#define fgrfst2 0x00000004
#define fgrfst3 0x00000008
#define fgrfst4 0x00000010
#define fgrfst5 0x00000020
#define fgrfst6 0x00000040
#define fgrfst7 0x00000080
#define fgrfst8 0x00000100
#define fgrfst9 0x00000200
#define fgrfst10 0x00000400
#define fgrfst11 0x00000800
#define fgrfst12 0x00001000
#define fgrfst13 0x00002000
#define fgrfst14 0x00004000
#define fgrfst15 0x00008000
#define fgrfst16 0x00010000
#define fgrfst17 0x00020000
#define fgrfst18 0x00040000
#define fgrfst19 0x00080000
#define fgrfst20 0x00100000
#define fgrfst21 0x00200000
#define fgrfst22 0x00400000
#define fgrfst23 0x00800000
#define fgrfst24 0x01000000
#define fgrfst25 0x02000000
#define fgrfst26 0x04000000
#define fgrfst27 0x08000000
#define fgrfst28 0x10000000
#define fgrfst29 0x20000000
#define fgrfst30 0x40000000
#define fgrfst31 0x80000000
#define fgrfstAll 0xffffffff
#define fgrfstNone 0x00000000
// "types" of Gobs
#define kgokkNormal gokkNil
#define kgokkRectHit gokkRectangle
#if (gokkRectangle | gokkNoHitThis) == 3
#define kgokkRectNoHit 3
#else
#error Can't define kgokkRectNoHit
#endif
#if (gokkRectangle | gokkNoHitKids) == 5
#define kgokkRectNoKids 5
#else
#error Can't define kgokkRectNoKids
#endif
// the following is the type used for GOKD's created with OBJECT() macros
// ---------------------------------------------------------
// Macro required to initialize variables and stuff.
// --- these parms _df* are used to provide unique cno's
// for various classes of chunks eg. _dfmbmp for MBMP
// ---------------------------------------------------------
#define STARTCHUNKY \
SET _dfmbmp = 10 \
SET _dfscr = 10 \
SET _dfanm = 10 \
SET _dffill = 10 \
SET _curgok = 10 \
SET _dfmask = 10 \
SET _dftile = 10 \
SET _dfwave = 10 \
SET _dfmidi = 10 \
SET _dfvid = 10
#define STARTCHUNKS(x) \
SET _dfmbmp = x \
SET _dfscr = x \
SET _dfanm = x \
SET _dffill = x \
SET _curgok = x \
SET _dfmask = x \
SET _dftile = x \
SET _dfwave = x \
SET _dfmidi = x \
SET _dfvid = x
// safe macros to access name of "last" XXXX created
#define LAST_MBMP _dfmbmp
#define LAST_SCRIPT _dfscr
#define LAST_ANIM _dfanm
#define LAST_FILL _dffill
#define LAST_GOKD _curgok
#define LAST_MASK _dfmask
#define LAST_TILE _dftile
#define LAST_WAVE _dfwave
#define LAST_MIDI _dfmidi
#define LAST_VIDEO _dfvid
// ---------------------------------------------------------
// The following are for defining standalone chunks ie.
// not dependent or adopted to the previous GOKD
// ---------------------------------------------------------
#define SCRIPTCHUNK( _szName, _cno ) \
CHUNK( kctgScript, _cno, __NAME(_szName ) ) \
SCRIPT
#define MBMPCHUNK( _szFilename, _cno, _iTrans, _xpReg, _ypReg ) \
CHUNK( kctgMbmp, _cno, __NAME(_szFilename ) ) \
__PACK \
BITMAP( _iTrans, _xpReg, _ypReg ) _szFilename \
ENDCHUNK
#define PALETTECHUNK( _szName, _cno, _szFilename ) \
CHUNK( kctgColorTable, _cno, __NAME( _szName ) ) \
__PACK \
PALETTE _szFilename \
ENDCHUNK
#define TILECHUNK( _szName, _cno ) \
CHUNK( kctgTile, _cno, __NAME( _szName )) \
__PACK \
SHORT BO OSK
#define TILEDEF( _dzpLeftBorder, _dzpRightBorder, _dzpLeft, _dzpLeftFlex, _dzpLeftInc, \
_dzpMid, _dzpRightFlex, _dzpRightInc, _dzpRight ) \
SHORT _dzpLeftBorder _dzpRightBorder _dzpLeft _dzpLeftFlex _dzpLeftInc \
_dzpMid _dzpRightFlex _dzpRightInc _dzpRight
#define CURSORCHUNK( _szFilename, _cno) \
CHUNK( kctgCursor, _cno, __NAME( _szFilename )) \
__PACK \
CURSOR _szFilename \
ENDCHUNK
#define FILLCHUNK( _szName, _chid, _xpLeft, _ypTop, _xpRight, _ypBottom, _kacrFore, _kacrBack ) \
SET _dffill++ \
CHUNK( kctgFill, _dffill, __NAME( _szName )) \
__PACK \
LONG BO OSK _xpLeft _ypTop _xpRight _ypBottom \
LONG _kacrFore _kacrBack
#define PATTERN( _b1, _b2, _b3, _b4, _b5, _b6, _b7, _b8 ) \
BYTE MacWin(_b1 _b2 _b3 _b4 _b5 _b6 _b7 _b8, \
_b4 _b3 _b2 _b1 _b8 _b7 _b6 _b5)
// ---------------------------------------------------------
// some useful patterns
// ---------------------------------------------------------
#define PATTERN_SOLID PATTERN(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)
#define PATTERN_BLANK PATTERN(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
#define PATTERN_100 PATTERN(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)
#define PATTERN_75 PATTERN(0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee)
#define PATTERN_50 PATTERN(0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55)
#define PATTERN_50X PATTERN(0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa )
#define PATTERN_25 PATTERN(0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33)
#define PATTERN_0 PATTERN(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
#define HELP_SCRIPT( _cno ) \
CHUNK( kctgScript, _cno, __NAME( #_cno ))\
SCRIPT
// ---------------------------------------------------------
// usage: GOBCHUNK(..)
// { POSITION }...
// DEFAULT_POSITION
// { ACTION }...
// ENDCHUNK
// ---------------------------------------------------------
#define GOBCHUNK( _szName, _cno, _kgokk ) \
SET _curgok = _cno \
CHUNK( kctgGokd, _cno, __NAME( _szName )) \
__PACK \
SHORT BO OSK LONG _kgokk
// ---------------------------------------------------------
// the following define positioning info for a GOB
// Note: DEFAULT_POSITION is required.
// ---------------------------------------------------------
#define POSITION( _kidPar, _xp, _yp, _zp ) \
LONG _kidPar _xp _yp _zp
#define DEFAULT_POSITION( _xp, _yp, _zp ) \
LONG kidNil _xp _yp _zp
// ---------------------------------------------------------
// the following is used in a GOKD to map the modifier keys
// global state button state to cursor tooltip id script
// chid and/or command id (CID) to post. Whew!
// ---------------------------------------------------------
#define ACTION( _grfcustMask, _grfcust, _grfState, _cnoCrs, _chidScript, _cid, _cnoTopic ) \
LONG _grfcustMask _grfcust _grfState _cnoCrs _chidScript _cid _cnoTopic
#define ACTION_NOTHING( _cnoCrs ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCrs, chidNil, cidNil, cnoNil )
#define ACTION_CLICKSCRIPT( _cnoCrs ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCrs, kchidClick, cidNil, cnoNil )
// ---------------------------------------------------------
// constants for color fills and any other color references
// ---------------------------------------------------------
#define Transparent 0xffffffff
#define Palette( _i ) BYTE MacWin( 0xfe 0 0 _i, _i 0 0 0xfe ) LONG
#define Invert BYTE MacWin( 0x00 0x00 0x00 0xff, 0xff 0x00 0x00 0x00 ) LONG
#define Rgb( _r, _g, _b) BYTE MacWin(0x01 _r _g _b, _b _g _r 0x01) LONG
// ---------------------------------------------------------
// The following is used to combine "button" state with
// subid to get the proper "childid" or chid.
// ---------------------------------------------------------
#define CHID( st, ch ) \
SET _st = st \
SET _st <<= 16 \
SET _st += ch \
_st
#define CHID0( st ) \
st
#define CHID1( st )\
SET _st = 0x10000\
SET _st |= st \
_st
// ---------------------------------------------------------
// Macros for child representations (MBMPS FILLS etc)
// everything preceded by "CHILD_" adopts itself to the
// last declared GOKD.
// ---------------------------------------------------------
#define CHILD_SCRIPT( _szName, _kchid )\
SET _dfscr++ \
CHUNK( kctgScript, _dfscr, __NAME( _szName ) ) \
PARENT( kctgGokd, _curgok, _kchid )\
SCRIPT
// ---------------------------------------------------------
// transparent rectangle.. actually a FILL
// ---------------------------------------------------------
#define REP_RECT( _chid, _szName, _xpLeft, _ypTop, _xpRight, _ypBottom ) \
SET _dffill++ \
CHUNK( kctgFill, _dffill, __NAME( _szName) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
LONG BO OSK _xpLeft _ypTop _xpRight _ypBottom \
LONG Transparent Transparent \
PATTERN_BLANK \
ENDCHUNK
// ---------------------------------------------------------
// color and pattern fill
// use: REP_FILL(...) PATTERN(....) ENDCHUNK
// ---------------------------------------------------------
#define REP_FILL( _chid, _szName, _xpLeft, _ypTop, _xpRight, _ypBottom, _fore, _back ) \
SET _dffill++ \
CHUNK( kctgFill, _dffill, __NAME( _szName ) ) \
__PACK \
PARENT( kctgGokd _curgok _chid ) \
LONG BO OSK _xpLeft _ypTop _xpRight _ypBottom \
LONG _fore _back
// ---------------------------------------------------------
// Bitmap representations
// ---------------------------------------------------------
#define REP_MBMPREG( _chid, _szFilename, _xpReg, _ypReg ) \
SET _dfmbmp++ \
CHUNK( kctgMbmp, _dfmbmp, __NAME( _szFilename ) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
BITMAP( kiTrans, _xpReg, _ypReg ) _szFilename\
ENDCHUNK
#define REP_MBMP( _chid, _szFilename ) \
SET _dfmbmp++ \
CHUNK( kctgMbmp, _dfmbmp, __NAME( _szFilename ) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
BITMAP( kiTrans, 0, 0 ) _szFilename\
ENDCHUNK
#define REP_PPMBMP( _chid, _szFilename ) \
SET _dfmbmp++ \
CHUNK( kctgMbmp, _dfmbmp, __NAME( _szFilename ) ) \
PARENT( kctgGokd, _curgok, _chid ) \
PACKEDFILE _szFilename \
ENDCHUNK
// ---------------------------------------------------------
// Mask representations (just like bitmaps except they don't
// show and are used only for hit tests)
// ---------------------------------------------------------
#define REP_MASK( _chid, _szFilename, _xpReg, _ypReg ) \
SET _dfmask++ \
CHUNK( kctgMask, _dfmask, __NAME( _szFilename ) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
MASK( kiTrans, _xpReg, _ypReg ) _szFilename\
ENDCHUNK
#define REP_WAVE( _chid, _szFilename ) \
SET _dfwave++ \
CHUNK( kctgWave, _dfwave, __NAME( _szFilename ) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
FILE _szFilename \
ENDCHUNK
#define REP_MIDI( _chid, _szFilename ) \
SET _dfmidi++ \
CHUNK( kctgMidi, _dfmidi, __NAME( _szFilename ) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
MIDI _szFilename \
ENDCHUNK
// ---------------------------------------------------------
// Animation representations
// ---------------------------------------------------------
#define REP_ANIM( _chid, _szName ) \
SET _dfanm++ \
CHUNK( kctgAnimation, _dfanm, __NAME( _szName ) ) \
PARENT( kctgGokd, _curgok, _chid ) \
SCRIPT
#define ANIMATION( _cno, _szName ) \
CHUNK( kctgAnimation, _cno, __NAME( _szName ) ) \
SCRIPT
// ---------------------------------------------------------
// Bitmap TILE representations
// Use: CHILD_TILE( ...)
// TILEDEF( horz opts)
// TILEDEF(vert opts) ENDCHUNK
// ENDCHUNK
// ---------------------------------------------------------
#define REP_TILE( _chid, _szName, _mbmp, _xpReg, _ypReg ) \
SET _dftile++ \
SET _dfmbmp++ \
CHUNK( kctgMbmp, _dfmbmp, __NAME( _mbmp ) ) \
__PACK \
BITMAP( kiTrans, _xpReg, _ypReg ) _mbmp \
ENDCHUNK \
CHUNK( kctgTile, _dftile, __NAME( _szName ) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
CHILD( kctgMbmp, _dfmbmp, 0 ) \
SHORT BO OSK
#define REP_VIDEO( _chid, _szFilename, _fWindowed ) \
SET _dfvid++ \
CHUNK( kctgVideo, _dfvid, __NAME( _szFilename ) ) \
__PACK \
PARENT( kctgGokd, _curgok, _chid ) \
BYTE _fWindowed \
STN _szFilename \
ENDCHUNK
// ---------------------------------------------------------
// The following Adopt the last chunk of type 'foo' to their
// most recent GOKD using the appropriate CHID.
// ---------------------------------------------------------
#define ADOPT_MASK( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgMask, _cno, _chid )
#define ADOPT_MBMP( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgMbmp, _cno, _chid )
#define ADOPT_TILE( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgTile, _cno, _chid )
#define ADOPT_FILL( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgFill, _cno, _chid )
#define ADOPT_ANIM( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgAnimation, _cno, _chid )
#define ADOPT_SCRIPT( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgScript, _cno, _chid )
#define ADOPT_WAVE( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgWave, _cno, _chid )
#define ADOPT_MIDI( _cno, _chid ) \
ADOPT( kctgGokd, _curgok, kctgMidi, _cno, _chid )
// ---------------------------------------------------------
// syntatic sweetness
// ---------------------------------------------------------
#define CREATE_SCRIPT( _szName ) \
REP_ANIM( CHID1( krepEnterAnimation ), __NAME( _szName ))
#define CREATE_SCRIPTST( _szName, _kstState ) \
REP_ANIM( CHID( _kstState, krepEnterAnimation ), _szName )
#define CREATE_ANIM( _szName ) \
REP_ANIM( CHID1( krepEnterAnimation ), _szName)
#define CREATE_ANIMST( _szName, _kstState ) \
REP_ANIM( CHID( _kstState, krepEnterAnimation ), _szName )
#define CLICK_SCRIPT( _szName ) \
CHILD_SCRIPT( _szName, CHID1( kchidClick ) )
#define CLICK_SCRIPTST( _szName, _kstState ) \
CHILD_SCRIPT( _szName, CHID( _kstState, kchidClick ))
#define IRISVAL( _xp, _yp, _kdir ) \
SET _foo = _xp \
SET _foo <<= 15 \
SET _foo |= _yp \
SET _foo <<= 2 \
SET _foo |= _kdir \
_foo
// ---------------------------------------------------------
// default object - no tooltip, fire script 'kchidClick' when activated
// ---------------------------------------------------------
#define OBJECT( _szName, _cnoGokd, _zp, _cnoCursor ) \
SET _curgok = _cnoGokd \
CHUNK( kctgGokd, _cnoGokd, __NAME( _szName) ) \
__PACK \
SHORT BO OSK LONG gokkNil \
DEFAULT_POSITION( 0, 0, _zp ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCursor, CHID1( kchidClick), cidNil, cnoNil ) \
ENDCHUNK
#define OBJECTREG( _szName, _cnoGokd, _xp, _yp, _zp, _cnoCursor ) \
SET _curgok = _cnoGokd \
CHUNK( kctgGokd, _cnoGokd, __NAME( _szName ) ) \
__PACK \
SHORT BO OSK LONG gokkNil \
DEFAULT_POSITION( _xp, _yp, _zp ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCursor, CHID1( kchidClick), cidNil, cnoNil ) \
ENDCHUNK
#define OBJECTTT( _szName, _cnoGokd, _zp, _cnoCursor, _cnoToolTip ) \
SET _curgok = _cnoGokd \
CHUNK( kctgGokd, _cnoGokd, __NAME( _szName ) ) \
__PACK \
SHORT BO OSK LONG gokkNil \
DEFAULT_POSITION( 0, 0, _zp ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCursor, CHID1( kchidClick), cidNil, _cnoToolTip ) \
ENDCHUNK
#define OBJECTTTREG( _szName, _cnoGokd, _zp, _cnoCursor, _cnoToolTip, _regx, _regy ) \
SET _curgok = _cnoGokd \
CHUNK( kctgGokd, _cnoGokd, __NAME( _szName ) ) \
__PACK \
SHORT BO OSK LONG gokkNil \
DEFAULT_POSITION( _regx, _regy, _zp ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCursor, CHID1( kchidClick), cidNil, _cnoToolTip) \
ENDCHUNK
#define OBJECTCID( _szName, _cnoGokd, _zp, _cnoCursor, _cnoToolTip, _cid ) \
SET _curgok = _cnoGokd \
CHUNK( kctgGokd, _cnoGokd, __NAME( _szName ) ) \
__PACK \
SHORT BO OSK LONG gokkNil \
DEFAULT_POSITION( 0, 0, _zp ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCursor, CHID1( kchidClick), _cid, _cnoToolTip ) \
ENDCHUNK
#define OBJECTTY( _szName, _cnoGokd, _zp, _cnoCursor, _gokkType ) \
SET _curgok = _cnoGokd \
CHUNK( kctgGokd, _cnoGokd, __NAME( _szName ) ) \
__PACK \
SHORT BO OSK LONG _gokkType \
DEFAULT_POSITION( 0, 0, _zp ) \
ACTION( fcustNil, fcustNil, fgrfstAll, _cnoCursor, chidNil, cidNil, cnoNil ) \
ENDCHUNK
// hmm... let's not pack the WAVE files for now.
#define WAVE_CHUNK( _szFilename, _cnoWave ) \
CHUNK( kctgWave, _cnoWave, __NAME( _szFilename )) \
FILE _szFilename \
ENDCHUNK
#define MIDI_CHUNK( _szFilename, _cnoMidi ) \
CHUNK( kctgMidi, _cnoMidi, __NAME( _szFilename )) \
__PACK \
MIDI _szFilename \
ENDCHUNK
#define HELP_MBMP( _cno, _szFilename ) \
CHUNK( 'MBMP', _cno, __NAME(#_cno) ) \
PACK BITMAP( 0, 0, 0 ) _szFilename \
ENDCHUNK
#endif // !KIDGS_CHH