2016-08-26 20:36:31 +00:00
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers , whose names
* are too numerous to list here . Please refer to the COPYRIGHT
* file distributed with this source distribution .
*
* 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 , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
*/
/*
* Based on the Reverse Engineering work of Christophe Fontanel ,
* maintainer of the Dungeon Master Encyclopaedia ( http : //dmweb.free.fr/)
*/
2016-09-03 08:47:16 +00:00
# ifndef DM_GFX_H
# define DM_GFX_H
2016-05-02 18:58:55 +00:00
# include "common/scummsys.h"
2016-06-16 21:48:18 +00:00
# include "common/rect.h"
2016-06-28 16:04:32 +00:00
# include "common/memstream.h"
2016-06-29 20:08:10 +00:00
# include "common/array.h"
2016-05-02 18:58:55 +00:00
2016-09-03 08:38:43 +00:00
# include "dm/dm.h"
2016-05-02 18:58:55 +00:00
namespace DM {
2016-06-30 10:12:22 +00:00
2016-09-14 05:42:36 +00:00
enum ViewFloor {
kDMViewFloorD3L = 0 , // @ C0_VIEW_FLOOR_D3L
kDMViewFloorD3C = 1 , // @ C1_VIEW_FLOOR_D3C
kDMViewFloorD3R = 2 , // @ C2_VIEW_FLOOR_D3R
kDMViewFloorD2L = 3 , // @ C3_VIEW_FLOOR_D2L
kDMViewFloorD2C = 4 , // @ C4_VIEW_FLOOR_D2C
kDMViewFloorD2R = 5 , // @ C5_VIEW_FLOOR_D2R
kDMViewFloorD1L = 6 , // @ C6_VIEW_FLOOR_D1L
kDMViewFloorD1C = 7 , // @ C7_VIEW_FLOOR_D1C
2016-09-14 20:25:27 +00:00
kDMViewFloorD1R = 8 // @ C8_VIEW_FLOOR_D1R
2016-09-14 05:42:36 +00:00
} ;
2016-07-04 12:22:17 +00:00
2016-09-14 19:27:09 +00:00
enum DoorState {
2016-09-15 19:34:08 +00:00
kDMDoorStateOpen = 0 , // @ C0_DOOR_STATE_OPEN
kDMDoorStateOneFourth = 1 , // @ C1_DOOR_STATE_CLOSED_ONE_FOURTH
kDMDoorStateHalf = 2 , // @ k2_DoorStateAspect_CLOSED_HALF
2016-09-14 19:27:09 +00:00
kDMDoorStateThreeFourth = 3 , // @ C3_DOOR_STATE_CLOSED_THREE_FOURTH
2016-09-15 19:34:08 +00:00
kDMDoorStateClosed = 4 , // @ C4_DOOR_STATE_CLOSED
kDMDoorStateDestroyed = 5 // @ C5_DOOR_STATE_DESTROYED
2016-09-14 19:27:09 +00:00
} ;
2016-07-04 15:14:32 +00:00
2016-09-14 19:58:22 +00:00
enum DoorOrnament {
kDMDoorOrnamentD3LCR = 0 , // @ C0_VIEW_DOOR_ORNAMENT_D3LCR
kDMDoorOrnamentD2LCR = 1 , // @ C1_VIEW_DOOR_ORNAMENT_D2LCR
2016-09-14 20:25:27 +00:00
kDMDoorOrnamentD1LCR = 2 // @ C2_VIEW_DOOR_ORNAMENT_D1LCR
2016-09-14 19:58:22 +00:00
} ;
2016-07-04 15:14:32 +00:00
2016-09-14 20:25:27 +00:00
enum DoorButton {
kDMDoorButtonD3R = 0 , // @ C0_VIEW_DOOR_BUTTON_D3R
kDMDoorButtonD3C = 1 , // @ C1_VIEW_DOOR_BUTTON_D3C
kDMDoorButtonD2C = 2 , // @ C2_VIEW_DOOR_BUTTON_D2C
kDMDoorButtonD1C = 3 // @ C3_VIEW_DOOR_BUTTON_D1C
} ;
2016-07-04 18:54:17 +00:00
2016-09-15 05:34:38 +00:00
/* View lanes */
enum ViewLane {
2016-09-15 19:34:08 +00:00
kDMViewLaneCenter = 0 , // @ C0_VIEW_LANE_CENTER
kDMViewLaneLeft = 1 , // @ C1_VIEW_LANE_LEFT
kDMViewLaneRight = 2 // @ C2_VIEW_LANE_RIGHT
2016-09-15 05:34:38 +00:00
} ;
/* Explosion aspects */
enum ExplosionAspectEnum {
2016-09-15 19:34:08 +00:00
kDMExplosionAspectFire = 0 , // @ C0_EXPLOSION_ASPECT_FIRE
kDMExplosionAspectSpell = 1 , // @ C1_EXPLOSION_ASPECT_SPELL
kDMExplosionAspectPoison = 2 , // @ C2_EXPLOSION_ASPECT_POISON
kDMExplosionAspectSmoke = 3 // @ C3_EXPLOSION_ASPECT_SMOKE
2016-09-15 05:34:38 +00:00
} ;
2016-07-04 15:14:32 +00:00
2016-09-15 05:34:38 +00:00
enum WallSet {
kDMWallSetStone = 0 // @ C0_WALL_SET_STONE
} ;
enum FloorSet {
kDMFloorSetStone = 0 // @ C0_FLOOR_SET_STONE
} ;
enum ViewWall {
2016-09-15 19:34:08 +00:00
kDMViewWallD3LRight = 0 , // @ C00_VIEW_WALL_D3L_RIGHT
kDMViewWallD3RLeft = 1 , // @ C01_VIEW_WALL_D3R_LEFT
kDMViewWallD3LFront = 2 , // @ C02_VIEW_WALL_D3L_FRONT
kDMViewWallD3CFront = 3 , // @ C03_VIEW_WALL_D3C_FRONT
kDMViewWallD3RFront = 4 , // @ C04_VIEW_WALL_D3R_FRONT
kDMViewWallD2LRight = 5 , // @ C05_VIEW_WALL_D2L_RIGHT
kDMViewWallD2RLeft = 6 , // @ C06_VIEW_WALL_D2R_LEFT
kDMViewWallD2LFront = 7 , // @ C07_VIEW_WALL_D2L_FRONT
kDMViewWallD2CFront = 8 , // @ C08_VIEW_WALL_D2C_FRONT
kDMViewWallD2RFront = 9 , // @ C09_VIEW_WALL_D2R_FRONT
2016-09-15 05:34:38 +00:00
kDMViewWallD1LRight = 10 , // @ C10_VIEW_WALL_D1L_RIGHT
2016-09-15 19:34:08 +00:00
kDMViewWallD1RLeft = 11 , // @ C11_VIEW_WALL_D1R_LEFT
2016-09-15 05:34:38 +00:00
kDMViewWallD1CFront = 12 // @ C12_VIEW_WALL_D1C_FRONT
} ;
2016-09-15 19:34:08 +00:00
enum CellOrder {
kDMCellOrderAlcove = 0x0000 , // @ C0000_CELL_ORDER_ALCOVE
kDMCellOrderBackLeft = 0x0001 , // @ C0001_CELL_ORDER_BACKLEFT
kDMCellOrderBackRight = 0x0002 , // @ C0002_CELL_ORDER_BACKRIGHT
kDMCellOrderDoorPass1BackLeft = 0x0018 , // @ C0018_CELL_ORDER_DOORPASS1_BACKLEFT
kDMCellOrderBackLeftBackRight = 0x0021 , // @ C0021_CELL_ORDER_BACKLEFT_BACKRIGHT
kDMCellOrderDoorPass1BackRight = 0x0028 , // @ C0028_CELL_ORDER_DOORPASS1_BACKRIGHT
kDMCellOrderBackRightFrontRight = 0x0032 , // @ C0032_CELL_ORDER_BACKRIGHT_FRONTRIGHT
kDMCellOrderDoorPass2FrontRight = 0x0039 , // @ C0039_CELL_ORDER_DOORPASS2_FRONTRIGHT
kDMCellOrderBackLeftFrontLeft = 0x0041 , // @ C0041_CELL_ORDER_BACKLEFT_FRONTLEFT
kDMCellOrderDoorPass2FrontLeft = 0x0049 , // @ C0049_CELL_ORDER_DOORPASS2_FRONTLEFT
kDMCellOrderDoorPass1BackRightBackLeft = 0x0128 , // @ C0128_CELL_ORDER_DOORPASS1_BACKRIGHT_BACKLEFT
kDMCellOrderDoorPass1BackLeftBackRight = 0x0218 , // @ C0218_CELL_ORDER_DOORPASS1_BACKLEFT_BACKRIGHT
kDMCellOrderBackLeftBackRightFrontRight = 0x0321 , // @ C0321_CELL_ORDER_BACKLEFT_BACKRIGHT_FRONTRIGHT
kDMCellOrderBackRightFrontLeftFrontRight = 0x0342 , // @ C0342_CELL_ORDER_BACKRIGHT_FRONTLEFT_FRONTRIGHT
kDMCellOrderDoorPass2FrontLeftFrontRight = 0x0349 , // @ C0349_CELL_ORDER_DOORPASS2_FRONTLEFT_FRONTRIGHT
kDMCellOrderBackRightBackLeftFrontLeft = 0x0412 , // @ C0412_CELL_ORDER_BACKRIGHT_BACKLEFT_FRONTLEFT
kDMCellOrderBackLeftFrontRightFrontLeft = 0x0431 , // @ C0431_CELL_ORDER_BACKLEFT_FRONTRIGHT_FRONTLEFT
kDMCellOrderDoorPass2FrontRightFrontLeft = 0x0439 , // @ C0439_CELL_ORDER_DOORPASS2_FRONTRIGHT_FRONTLEFT
kDMCellOrderBackLeftBackRightFrontLeftFrontRight = 0x3421 , // @ C3421_CELL_ORDER_BACKLEFT_BACKRIGHT_FRONTLEFT_FRONTRIGHT
2016-09-15 20:04:52 +00:00
kDMCellOrderBackRightBackLeftFrontRightFrontLeft = 0x4312 // @ C4312_CELL_ORDER_BACKRIGHT_BACKLEFT_FRONTRIGHT_FRONTLEFT
2016-09-15 19:34:08 +00:00
} ;
# define kDMMaskDoorInfoCreaturesCanSeeThrough 0x0001 // @ MASK0x0001_CREATURES_CAN_SEE_THROUGH
2016-09-15 05:34:38 +00:00
# define kDMMaskDoorInfoProjectilesCanPassThrough 0x0002 // @ MASK0x0002_PROJECTILES_CAN_PASS_THROUGH
2016-09-15 19:34:08 +00:00
# define kDMMaskDoorInfoAnimated 0x0004 // @ MASK0x0004_ANIMATED
# define kDMMaskDoorFront 0x0008 // @ MASK0x0008_DOOR_FRONT
2016-07-04 15:14:32 +00:00
2016-07-01 22:27:05 +00:00
# define k2_FloorSetGraphicCount 2 // @ C002_FLOOR_SET_GRAPHIC_COUNT
# define k13_WallSetGraphicCount 13 // @ C013_WALL_SET_GRAPHIC_COUNT
# define k18_StairsGraphicCount 18 // @ C018_STAIRS_GRAPHIC_COUNT
# define k3_DoorSetGraphicsCount 3 // @ C003_DOOR_SET_GRAPHIC_COUNT
# define k1_DoorButtonCount 1 // @ C001_DOOR_BUTTON_COUNT
# define k3_AlcoveOrnCount 3 // @ C003_ALCOVE_ORNAMENT_COUNT
# define k1_FountainOrnCount 1 // @ C001_FOUNTAIN_ORNAMENT_COUNT
# define k27_CreatureTypeCount 27 // @ C027_CREATURE_TYPE_COUNT
# define k4_ExplosionAspectCount 4 // @ C004_EXPLOSION_ASPECT_COUNT
# define k14_ProjectileAspectCount 14 // @ C014_PROJECTILE_ASPECT_COUNT
# define k85_ObjAspectCount 85 // @ C085_OBJECT_ASPECT_COUNT
2016-09-15 19:34:08 +00:00
# define k0_HalfSizedViewCell_LeftColumn 0 // @ C00_VIEW_CELL_LEFT_COLUMN
# define k1_HalfSizedViewCell_RightColumn 1 // @ C01_VIEW_CELL_RIGHT_COLUMN
# define k2_HalfSizedViewCell_BackRow 2 // @ C02_VIEW_CELL_BACK_ROW
2016-07-01 22:27:05 +00:00
# define k3_HalfSizedViewCell_CenterColumn 3 // @ C03_VIEW_CELL_CENTER_COLUMN
2016-09-15 19:34:08 +00:00
# define k4_HalfSizedViewCell_FrontRow 4 // @ C04_VIEW_CELL_FRONT_ROW
2016-07-01 11:15:41 +00:00
/* Shift sets */
2016-07-01 22:27:05 +00:00
# define k0_ShiftSet_D0BackD1Front 0 // @ C0_SHIFT_SET_D0_BACK_OR_D1_FRONT
# define k1_ShiftSet_D1BackD2Front 1 // @ C1_SHIFT_SET_D1_BACK_OR_D2_FRONT
# define k2_ShiftSet_D2BackD3Front 2 // @ C2_SHIFT_SET_D2_BACK_OR_D3_FRONT
2016-06-29 20:08:10 +00:00
/* Creature info GraphicInfo */
2016-09-15 19:34:08 +00:00
# define k0x0003_CreatureInfoGraphicMaskAdditional 0x0003 // @ MASK0x0003_ADDITIONAL
# define k0x0004_CreatureInfoGraphicMaskFlipNonAttack 0x0004 // @ MASK0x0004_FLIP_NON_ATTACK
# define k0x0008_CreatureInfoGraphicMaskSide 0x0008 // @ MASK0x0008_SIDE
# define k0x0010_CreatureInfoGraphicMaskBack 0x0010 // @ MASK0x0010_BACK
# define k0x0020_CreatureInfoGraphicMaskAttack 0x0020 // @ MASK0x0020_ATTACK
# define k0x0080_CreatureInfoGraphicMaskSpecialD2Front 0x0080 // @ MASK0x0080_SPECIAL_D2_FRONT
# define k0x0100_CreatureInfoGraphicMaskSpecialD2FrontIsFlipped 0x0100 // @ MASK0x0100_SPECIAL_D2_FRONT_IS_FLIPPED_FRONT
# define k0x0200_CreatureInfoGraphicMaskFlipAttack 0x0200 // @ MASK0x0200_FLIP_ATTACK
# define k0x0400_CreatureInfoGraphicMaskFlipDuringAttack 0x0400 // @ MASK0x0400_FLIP_DURING_ATTACK
2016-06-29 20:08:10 +00:00
2016-08-14 10:00:18 +00:00
# define k75_FirstFloorSet 75 // @ C075_GRAPHIC_FIRST_FLOOR_SET
# define k77_FirstWallSet 77 // @ C077_GRAPHIC_FIRST_WALL_SET
# define k90_FirstStairs 90 // @ C090_GRAPHIC_FIRST_STAIRS
# define k108_FirstDoorSet 108 // @ C108_GRAPHIC_FIRST_DOOR_SET
# define k120_InscriptionFont 120 // @ C120_GRAPHIC_INSCRIPTION_FONT
# define k121_FirstWallOrn 121 // @ C121_GRAPHIC_FIRST_WALL_ORNAMENT
# define k247_FirstFloorOrn 247 // @ C247_GRAPHIC_FIRST_FLOOR_ORNAMENT
# define k303_FirstDoorOrn 303 // @ C303_GRAPHIC_FIRST_DOOR_ORNAMENT
# define k730_DerivedBitmapMaximumCount 730 // @ C730_DERIVED_BITMAP_MAXIMUM_COUNT
2016-08-17 19:58:51 +00:00
/* Field Aspect Mask */
2016-09-15 19:34:08 +00:00
# define kMaskFieldAspectFlipMask 0x0080 // @ MASK0x0080_FLIP_MASK
2016-08-17 19:58:51 +00:00
# define kMaskFieldAspectIndex 0x007F // @ MASK0x007F_MASK_INDEX
2016-09-15 19:34:08 +00:00
# define kMaskFieldAspectNoMask 255 // @ C255_NO_MASK
2016-08-17 19:58:51 +00:00
2016-08-14 10:00:18 +00:00
enum ViewSquare {
kM3_ViewSquare_D4C = - 3 , // @ CM3_VIEW_SQUARE_D4C
kM2_ViewSquare_D4L = - 2 , // @ CM2_VIEW_SQUARE_D4L
kM1_ViewSquare_D4R = - 1 , // @ CM1_VIEW_SQUARE_D4R
k0_ViewSquare_D3C = 0 , // @ C00_VIEW_SQUARE_D3C
k1_ViewSquare_D3L = 1 , // @ C01_VIEW_SQUARE_D3L
k2_ViewSquare_D3R = 2 , // @ C02_VIEW_SQUARE_D3R
k3_ViewSquare_D2C = 3 , // @ C03_VIEW_SQUARE_D2C
k4_ViewSquare_D2L = 4 , // @ C04_VIEW_SQUARE_D2L
k5_ViewSquare_D2R = 5 , // @ C05_VIEW_SQUARE_D2R
k6_ViewSquare_D1C = 6 , // @ C06_VIEW_SQUARE_D1C
k7_ViewSquare_D1L = 7 , // @ C07_VIEW_SQUARE_D1L
k8_ViewSquare_D1R = 8 , // @ C08_VIEW_SQUARE_D1R
k9_ViewSquare_D0C = 9 , // @ C09_VIEW_SQUARE_D0C
k10_ViewSquare_D0L = 10 , // @ C10_VIEW_SQUARE_D0L
k11_ViewSquare_D0R = 11 , // @ C11_VIEW_SQUARE_D0R
k3_ViewSquare_D3C_Explosion = 3 , // @ C03_VIEW_SQUARE_D3C_EXPLOSION
k4_ViewSquare_D3L_Explosion = 4 , // @ C04_VIEW_SQUARE_D3L_EXPLOSION
k9_ViewSquare_D1C_Explosion = 9 , // @ C09_VIEW_SQUARE_D1C_EXPLOSION
k12_ViewSquare_D0C_Explosion = 12 // @ C12_VIEW_SQUARE_D0C_EXPLOSION
} ;
2016-06-29 20:08:10 +00:00
class ExplosionAspect {
public :
2016-07-03 19:12:47 +00:00
uint16 _byteWidth ;
2016-06-29 20:08:10 +00:00
uint16 _height ;
2016-07-03 19:12:47 +00:00
ExplosionAspect ( uint16 byteWidth , uint16 height ) : _byteWidth ( byteWidth ) , _height ( height ) { }
2016-08-14 10:00:18 +00:00
ExplosionAspect ( ) : _byteWidth ( 0 ) , _height ( 0 ) { }
2016-06-29 20:08:10 +00:00
} ; // @ EXPLOSION_ASPECT
2016-07-01 22:27:05 +00:00
extern ExplosionAspect g211_ExplosionAspects [ k4_ExplosionAspectCount ] ; // @ G0211_as_Graphic558_ExplosionAspects
2016-06-29 20:08:10 +00:00
2016-07-01 22:27:05 +00:00
extern byte g215_ProjectileScales [ 7 ] ; // @ G0215_auc_Graphic558_ProjectileScales
2016-06-29 20:08:10 +00:00
2016-09-15 19:34:08 +00:00
# define k0_DerivedBitmapViewport 0 // @ C000_DERIVED_BITMAP_VIEWPORT
# define k1_DerivedBitmapThievesEyeVisibleArea 1 // @ C001_DERIVED_BITMAP_THIEVES_EYE_VISIBLE_AREA
# define k2_DerivedBitmapDamageToCreatureMedium 2 // @ C002_DERIVED_BITMAP_DAMAGE_TO_CREATURE_MEDIUM
# define k3_DerivedBitmapDamageToCreatureSmall 3 // @ C003_DERIVED_BITMAP_DAMAGE_TO_CREATURE_SMALL
# define k4_DerivedBitmapFirstWallOrnament 4 // @ C004_DERIVED_BITMAP_FIRST_WALL_ORNAMENT
# define k68_DerivedBitmapFirstDoorOrnament_D3 68 // @ C068_DERIVED_BITMAP_FIRST_DOOR_ORNAMENT_D3
# define k69_DerivedBitmapFirstDoorOrnament_D2 69 // @ C069_DERIVED_BITMAP_FIRST_DOOR_ORNAMENT_D2
# define k102_DerivedBitmapFirstDoorButton 102 // @ C102_DERIVED_BITMAP_FIRST_DOOR_BUTTON
# define k104_DerivedBitmapFirstObject 104 // @ C104_DERIVED_BITMAP_FIRST_OBJECT
# define k282_DerivedBitmapFirstProjectile 282 // @ C282_DERIVED_BITMAP_FIRST_PROJECTILE
# define k438_DerivedBitmapFirstExplosion 438 // @ C438_DERIVED_BITMAP_FIRST_EXPLOSION
# define k495_DerivedBitmapFirstCreature 495 // @ C495_DERIVED_BITMAP_FIRST_CREATURE
2016-06-29 20:08:10 +00:00
2016-09-15 19:34:08 +00:00
# define k16_Scale_D3 16 // @ C16_SCALE_D3
# define k20_Scale_D2 20 // @ C20_SCALE_D2
2016-05-02 18:58:55 +00:00
2016-06-29 20:08:10 +00:00
/* Object aspect GraphicInfo */
2016-09-15 19:34:08 +00:00
# define k0x0001_ObjectFlipOnRightMask 0x0001 // @ MASK0x0001_FLIP_ON_RIGHT
# define k0x0010_ObjectAlcoveMask 0x0010 // @ MASK0x0010_ALCOVE
2016-06-29 20:08:10 +00:00
/* Projectile aspect GraphicInfo */
2016-09-15 19:34:08 +00:00
# define k0x0010_ProjectileSideMask 0x0010 // @ MASK0x0010_SIDE
# define k0x0100_ProjectileScaleWithKineticEnergyMask 0x0100 // @ MASK0x0100_SCALE_WITH_KINETIC_ENERGY
# define k0x0003_ProjectileAspectTypeMask 0x0003 // @ MASK0x0003_ASPECT_TYPE
2016-06-29 20:08:10 +00:00
/* Projectile aspect type */
2016-09-15 19:34:08 +00:00
# define k0_ProjectileAspectHasBackGraphicRotation 0 // @ C0_PROJECTILE_ASPECT_TYPE_HAS_BACK_GRAPHIC_AND_ROTATION
2016-07-01 22:27:05 +00:00
# define k1_ProjectileAspectBackGraphic 1 // @ C1_PROJECTILE_ASPECT_TYPE_HAS_BACK_GRAPHIC_AND_NO_ROTATION
2016-09-15 19:34:08 +00:00
# define k2_ProjectileAspectHasRotation 2 // @ C2_PROJECTILE_ASPECT_TYPE_NO_BACK_GRAPHIC_AND_ROTATION
# define k3_ProjectileAspectHasNone 3 // @ C3_PROJECTILE_ASPECT_TYPE_NO_BACK_GRAPHIC_AND_NO_ROTATION
2016-06-29 20:08:10 +00:00
/* Projectile aspects */
2016-09-15 19:34:08 +00:00
# define k3_ProjectileAspectExplosionLightningBolt 3 // @ C03_PROJECTILE_ASPECT_EXPLOSION_LIGHTNING_BOLT
# define k10_ProjectileAspectExplosionFireBall 10 // @ C10_PROJECTILE_ASPECT_EXPLOSION_FIREBALL
# define k11_ProjectileAspectExplosionDefault 11 // @ C11_PROJECTILE_ASPECT_EXPLOSION_DEFAULT
# define k12_ProjectileAspectExplosionSlime 12 // @ C12_PROJECTILE_ASPECT_EXPLOSION_SLIME
2016-07-01 22:27:05 +00:00
# define k13_ProjectileAspectExplosionPoisonBoltCloud 13 // @ C13_PROJECTILE_ASPECT_EXPLOSION_POISON_BOLT_POISON_CLOUD
2016-08-26 20:35:29 +00:00
2016-08-17 19:58:51 +00:00
# define k0x0080_BlitDoNotUseMask 0x0080 // @ MASK0x0080_DO_NOT_USE_MASK
# define kScaleThreshold 32768
2016-06-17 20:32:42 +00:00
enum ViewCell {
2016-07-01 22:27:05 +00:00
k0_ViewCellFronLeft = 0 , // @ C00_VIEW_CELL_FRONT_LEFT
k1_ViewCellFrontRight = 1 , // @ C01_VIEW_CELL_FRONT_RIGHT
k2_ViewCellBackRight = 2 , // @ C02_VIEW_CELL_BACK_RIGHT
k3_ViewCellBackLeft = 3 , // @ C03_VIEW_CELL_BACK_LEFT
k4_ViewCellAlcove = 4 , // @ C04_VIEW_CELL_ALCOVE
k5_ViewCellDoorButtonOrWallOrn = 5 // @ C05_VIEW_CELL_DOOR_BUTTON_OR_WALL_ORNAMENT
2016-06-17 20:32:42 +00:00
} ;
2016-06-17 12:29:05 +00:00
enum GraphicIndice {
2016-07-25 14:47:03 +00:00
k0_dialogBoxGraphicIndice = 0 , // @ C000_GRAPHIC_DIALOG_BOX
2016-08-19 16:16:23 +00:00
k1_titleGraphicsIndice = 1 , // @ C001_GRAPHIC_TITLE
2016-07-20 14:42:37 +00:00
k2_entranceLeftDoorGraphicIndice = 2 , // @ C002_GRAPHIC_ENTRANCE_LEFT_DOOR
k3_entranceRightDoorGraphicIndice = 3 , // @ C003_GRAPHIC_ENTRANCE_RIGHT_DOOR
k4_entranceGraphicIndice = 4 , // @ C004_GRAPHIC_ENTRANCE
k5_creditsGraphicIndice = 5 , // @ C005_GRAPHIC_CREDITS
2016-08-26 20:51:09 +00:00
k6_theEndIndice = 6 , // @ C006_GRAPHIC_THE_END
2016-07-01 22:27:05 +00:00
k8_StatusBoxDeadChampion = 8 , // @ C008_GRAPHIC_STATUS_BOX_DEAD_CHAMPION
k9_MenuSpellAreaBackground = 9 , // @ C009_GRAPHIC_MENU_SPELL_AREA_BACKGROUND
k10_MenuActionAreaIndice = 10 , // @ C010_GRAPHIC_MENU_ACTION_AREA
k11_MenuSpellAreLinesIndice = 11 , // @ C011_GRAPHIC_MENU_SPELL_AREA_LINES
k13_MovementArrowsIndice = 13 , // @ C013_GRAPHIC_MOVEMENT_ARROWS
2016-07-29 14:07:56 +00:00
k14_damageToCreatureIndice = 14 , // @ C014_GRAPHIC_DAMAGE_TO_CREATURE
2016-07-13 17:51:14 +00:00
k15_damageToChampionSmallIndice = 15 , // @ C015_GRAPHIC_DAMAGE_TO_CHAMPION_SMALL
k16_damageToChampionBig = 16 , // @ C016_GRAPHIC_DAMAGE_TO_CHAMPION_BIG
2016-07-01 22:27:05 +00:00
k17_InventoryGraphicIndice = 17 , // @ C017_GRAPHIC_INVENTORY
k18_ArrowForChestContentIndice = 18 , // @ C018_GRAPHIC_ARROW_FOR_CHEST_CONTENT
k19_EyeForObjectDescriptionIndice = 19 , // @ C019_GRAPHIC_EYE_FOR_OBJECT_DESCRIPTION
k20_PanelEmptyIndice = 20 , // @ C020_GRAPHIC_PANEL_EMPTY
k23_PanelOpenScrollIndice = 23 , // @ C023_GRAPHIC_PANEL_OPEN_SCROLL
k25_PanelOpenChestIndice = 25 , // @ C025_GRAPHIC_PANEL_OPEN_CHEST
k26_ChampionPortraitsIndice = 26 , // @ C026_GRAPHIC_CHAMPION_PORTRAITS
k27_PanelRenameChampionIndice = 27 , // @ C027_GRAPHIC_PANEL_RENAME_CHAMPION
k28_ChampionIcons = 28 , // @ C028_GRAPHIC_CHAMPION_ICONS
k29_ObjectDescCircleIndice = 29 , // @ C029_GRAPHIC_OBJECT_DESCRIPTION_CIRCLE
k30_FoodLabelIndice = 30 , // @ C030_GRAPHIC_FOOD_LABEL
k31_WaterLabelIndice = 31 , // @ C031_GRAPHIC_WATER_LABEL
k32_PoisionedLabelIndice = 32 , // @ C032_GRAPHIC_POISONED_LABEL
2016-09-15 19:34:08 +00:00
k33_SlotBoxNormalIndice = 33 , // @ C033_GRAPHIC_SLOT_BOX_NORMAL
k34_SlotBoxWoundedIndice = 34 , // @ C034_GRAPHIC_SLOT_BOX_WOUNDED
2016-07-01 22:27:05 +00:00
k35_SlotBoxActingHandIndice = 35 , // @ C035_GRAPHIC_SLOT_BOX_ACTING_HAND
k37_BorderPartyShieldIndice = 37 , // @ C037_GRAPHIC_BORDER_PARTY_SHIELD
k38_BorderPartyFireshieldIndice = 38 , // @ C038_GRAPHIC_BORDER_PARTY_FIRESHIELD
k39_BorderPartySpellshieldIndice = 39 , // @ C039_GRAPHIC_BORDER_PARTY_SPELLSHIELD
2016-09-15 19:34:08 +00:00
k40_PanelResurectReincaranteIndice = 40 , // @ C040_GRAPHIC_PANEL_RESURRECT_REINCARNATE
2016-07-04 18:54:17 +00:00
k41_holeInWall_GraphicIndice = 41 , // @ C041_GRAPHIC_HOLE_IN_WALL
2016-07-01 22:27:05 +00:00
k42_ObjectIcons_000_TO_031 = 42 , // @ C042_GRAPHIC_OBJECT_ICONS_000_TO_031
k43_ObjectIcons_032_TO_063 = 43 , // @ C043_GRAPHIC_OBJECT_ICONS_032_TO_063
k44_ObjectIcons_064_TO_095 = 44 , // @ C044_GRAPHIC_OBJECT_ICONS_064_TO_095
k45_ObjectIcons_096_TO_127 = 45 , // @ C045_GRAPHIC_OBJECT_ICONS_096_TO_127
k46_ObjectIcons_128_TO_159 = 46 , // @ C046_GRAPHIC_OBJECT_ICONS_128_TO_159
k47_ObjectIcons_160_TO_191 = 47 , // @ C047_GRAPHIC_OBJECT_ICONS_160_TO_191
k48_ObjectIcons_192_TO_223 = 48 , // @ C048_GRAPHIC_OBJECT_ICONS_192_TO_223
k49_FloorPit_D3L_GraphicIndice = 49 , // @ C049_GRAPHIC_FLOOR_PIT_D3L
k50_FloorPit_D3C_GraphicIndice = 50 , // @ C050_GRAPHIC_FLOOR_PIT_D3C
k51_FloorPit_D2L_GraphicIndice = 51 , // @ C051_GRAPHIC_FLOOR_PIT_D2L
k52_FloorPit_D2C_GraphicIndice = 52 , // @ C052_GRAPHIC_FLOOR_PIT_D2C
k53_FloorPit_D1L_GraphicIndice = 53 , // @ C053_GRAPHIC_FLOOR_PIT_D1L
k54_FloorPit_D1C_GraphicIndice = 54 , // @ C054_GRAPHIC_FLOOR_PIT_D1C
k55_FloorPit_D0L_GraphicIndice = 55 , // @ C055_GRAPHIC_FLOOR_PIT_D0L
k56_FloorPit_D0C_GraphicIndice = 56 , // @ C056_GRAPHIC_FLOOR_PIT_D0C
2016-07-04 18:54:17 +00:00
k57_FloorPir_Invisible_D2L_GraphicIndice = 57 , // @ C057_GRAPHIC_FLOOR_PIT_INVISIBLE_D2L
k58_FloorPit_invisible_D2C_GraphicIndice = 58 , // @ C058_GRAPHIC_FLOOR_PIT_INVISIBLE_D2C
k59_floorPit_invisible_D1L_GraphicIndice = 59 , // @ C059_GRAPHIC_FLOOR_PIT_INVISIBLE_D1L
k60_floorPitInvisibleD1C_GraphicIndice = 60 , // @ C060_GRAPHIC_FLOOR_PIT_INVISIBLE_D1C
k61_floorPitInvisibleD0L_GraphicIndice = 61 , // @ C061_GRAPHIC_FLOOR_PIT_INVISIBLE_D0L
k62_flootPitInvisibleD0C_graphicIndice = 62 , // @ C062_GRAPHIC_FLOOR_PIT_INVISIBLE_D0C
k63_ceilingPit_D2L_GraphicIndice = 63 , // @ C063_GRAPHIC_CEILING_PIT_D2L
k64_ceilingPitD2C_GraphicIndice = 64 , // @ C064_GRAPHIC_CEILING_PIT_D2C
k65_ceilingPitD1L_GraphicIndice = 65 , // @ C065_GRAPHIC_CEILING_PIT_D1L
k66_ceilingPitD1C_GraphicIndice = 66 , // @ C066_GRAPHIC_CEILING_PIT_D1C
k67_ceilingPitD0L_grahicIndice = 67 , // @ C067_GRAPHIC_CEILING_PIT_D0L
k68_ceilingPitD0C_graphicIndice = 68 , // @ C068_GRAPHIC_CEILING_PIT_D0C
2016-07-01 22:27:05 +00:00
k69_FieldMask_D3R_GraphicIndice = 69 , // @ C069_GRAPHIC_FIELD_MASK_D3R
k73_FieldTeleporterGraphicIndice = 73 , // @ C073_GRAPHIC_FIELD_TELEPORTER
k120_InscriptionFontIndice = 120 , // @ C120_GRAPHIC_INSCRIPTION_FONT
2016-08-26 20:51:09 +00:00
k208_wallOrn_43_champMirror = 208 , // @ C208_GRAPHIC_WALL_ORNAMENT_43_CHAMPION_MIRROR
2016-07-01 22:27:05 +00:00
k241_FloorOrn_15_D3L_footprints = 241 , // @ C241_GRAPHIC_FLOOR_ORNAMENT_15_D3L_FOOTPRINTS
k301_DoorMaskDestroyedIndice = 301 , // @ C301_GRAPHIC_DOOR_MASK_DESTROYED
2016-07-04 18:54:17 +00:00
k315_firstDoorButton_GraphicIndice = 315 , // @ C315_GRAPHIC_FIRST_DOOR_BUTTON
2016-09-15 19:34:08 +00:00
k316_FirstProjectileGraphicIndice = 316 , // @ C316_GRAPHIC_FIRST_PROJECTILE
2016-07-01 22:27:05 +00:00
k348_FirstExplosionGraphicIndice = 348 , // @ C348_GRAPHIC_FIRST_EXPLOSION
2016-09-15 19:34:08 +00:00
k351_FirstExplosionPatternGraphicIndice = 351 , // @ C351_GRAPHIC_FIRST_EXPLOSION_PATTERN
2016-07-01 22:27:05 +00:00
k360_FirstObjectGraphicIndice = 360 , // @ C360_GRAPHIC_FIRST_OBJECT
k446_FirstCreatureGraphicIndice = 446 , // @ C446_GRAPHIC_FIRST_CREATURE
2016-09-15 19:34:08 +00:00
k557_FontGraphicIndice = 557 // @ C557_GRAPHIC_FONT
2016-06-17 12:29:05 +00:00
} ;
2016-07-03 01:07:38 +00:00
// in all cases, where a function takes a Box, it expects it to contain inclusive boundaries
2016-06-15 20:42:08 +00:00
class Box {
public :
2016-08-09 08:39:08 +00:00
int16 _x1 ;
int16 _x2 ;
int16 _y1 ;
int16 _y2 ;
2016-06-15 20:42:08 +00:00
2016-08-09 08:39:08 +00:00
Box ( int16 x1 , int16 x2 , int16 y1 , int16 y2 ) : _x1 ( x1 ) , _x2 ( x2 ) , _y1 ( y1 ) , _y2 ( y2 ) { }
2016-06-19 13:23:37 +00:00
Box ( ) { }
2016-08-04 10:18:39 +00:00
template < typename T >
explicit Box ( T * ptr ) {
2016-07-06 22:46:51 +00:00
_x1 = * ptr + + ;
_x2 = * ptr + + ;
_y1 = * ptr + + ;
_y2 = * ptr + + ;
}
2016-06-16 21:48:18 +00:00
bool isPointInside ( Common : : Point point ) {
2016-07-03 01:07:38 +00:00
return ( _x1 < = point . x ) & & ( point . x < = _x2 ) & & ( _y1 < = point . y ) & & ( point . y < = _y2 ) ; // <= because incluseive boundaries
2016-06-16 21:48:18 +00:00
}
2016-08-26 20:51:09 +00:00
bool isPointInside ( int16 x , int16 y ) { return isPointInside ( Common : : Point ( x , y ) ) ; }
2016-06-23 21:54:37 +00:00
void setToZero ( ) { _x1 = _x2 = _y1 = _y2 = 0 ; }
2016-06-15 20:42:08 +00:00
} ; // @ BOX_BYTE, BOX_WORD
2016-05-21 17:36:24 +00:00
2016-07-03 01:07:38 +00:00
extern Box g2_BoxMovementArrows ; // @ G0002_s_Graphic562_Box_MovementArrows
2016-06-17 12:29:05 +00:00
2016-07-01 19:24:22 +00:00
class Frame {
public :
Box _box ;
2016-07-03 19:12:47 +00:00
uint16 _srcByteWidth , _srcHeight ;
2016-06-18 16:02:48 +00:00
uint16 _srcX , _srcY ;
2016-06-04 08:44:37 +00:00
Frame ( ) { }
Frame ( uint16 destFromX , uint16 destToX , uint16 destFromY , uint16 destToY ,
2016-06-21 15:45:10 +00:00
uint16 srcWidth , uint16 srcHeight , uint16 srcX , uint16 srcY ) :
2016-07-01 19:24:22 +00:00
_box ( destFromX , destToX , destFromY , destToY ) ,
2016-07-03 19:12:47 +00:00
_srcByteWidth ( srcWidth ) , _srcHeight ( srcHeight ) , _srcX ( srcX ) , _srcY ( srcY ) { }
2016-06-04 08:44:37 +00:00
} ;
2016-05-05 16:36:02 +00:00
enum Color {
2016-07-07 18:15:38 +00:00
kM1_ColorNoTransparency = - 1 ,
2016-07-01 22:27:05 +00:00
k0_ColorBlack = 0 ,
k1_ColorDarkGary = 1 ,
k2_ColorLightGray = 2 ,
k3_ColorDarkBrown = 3 ,
k4_ColorCyan = 4 ,
k5_ColorLightBrown = 5 ,
k6_ColorDarkGreen = 6 ,
k7_ColorLightGreen = 7 ,
k8_ColorRed = 8 ,
k9_ColorGold = 9 ,
k10_ColorFlesh = 10 ,
k11_ColorYellow = 11 ,
k12_ColorDarkestGray = 12 ,
k13_ColorLightestGray = 13 ,
k14_ColorBlue = 14 ,
k15_ColorWhite = 15
2016-05-05 16:36:02 +00:00
} ;
2016-05-05 16:11:11 +00:00
2016-06-30 10:12:22 +00:00
class FieldAspect {
public :
uint16 _nativeBitmapRelativeIndex ;
uint16 _baseStartUnitIndex ; /* Index of the unit (16 pixels = 8 bytes) in bitmap where blit will start from. A random value of 0 or 1 is added to this base index */
2016-06-30 17:59:35 +00:00
uint16 _transparentColor ; /* Bit 7: Do not use mask if set, Bits 6-0: Transparent color index. 0xFF = no transparency */
2016-06-30 10:12:22 +00:00
byte _mask ; /* Bit 7: Flip, Bits 6-0: Mask index. 0xFF = no mask */
2016-07-03 19:12:47 +00:00
uint16 _byteWidth ;
2016-06-30 10:12:22 +00:00
uint16 _height ;
uint16 _xPos ;
2016-06-30 17:59:35 +00:00
uint16 _bitplaneWordCount ;
FieldAspect ( uint16 native , uint16 base , uint16 transparent , byte mask , uint16 byteWidth , uint16 height , uint16 xPos , uint16 bitplane )
2016-06-30 10:12:22 +00:00
: _nativeBitmapRelativeIndex ( native ) , _baseStartUnitIndex ( base ) , _transparentColor ( transparent ) , _mask ( mask ) ,
2016-07-03 19:12:47 +00:00
_byteWidth ( byteWidth ) , _height ( height ) , _xPos ( xPos ) , _bitplaneWordCount ( bitplane ) { }
2016-07-01 11:15:41 +00:00
FieldAspect ( ) { }
2016-06-30 10:12:22 +00:00
} ; // @ FIELD_ASPECT
2016-07-01 22:27:05 +00:00
class CreatureAspect {
public :
2016-06-18 16:02:48 +00:00
uint16 _firstNativeBitmapRelativeIndex ;
uint16 _firstDerivedBitmapIndex ;
byte _byteWidthFront ;
byte _heightFront ;
byte _byteWidthSide ;
byte _heightSide ;
byte _byteWidthAttack ;
byte _heightAttack ;
2016-07-01 22:27:05 +00:00
private :
2016-06-18 16:02:48 +00:00
byte _coordinateSet_TransparentColor ;
byte _replacementColorSetIndices ;
2016-07-01 22:27:05 +00:00
public :
CreatureAspect ( uint16 uint161 , uint16 uint162 , byte byte0 , byte byte1 , byte byte2 , byte byte3 , byte byte4 , byte byte5 , byte byte6 , byte byte7 )
2016-08-14 21:10:31 +00:00
: _firstNativeBitmapRelativeIndex ( uint161 ) , _firstDerivedBitmapIndex ( uint162 ) , _byteWidthFront ( byte0 ) ,
_heightFront ( byte1 ) , _byteWidthSide ( byte2 ) , _heightSide ( byte3 ) , _byteWidthAttack ( byte4 ) ,
_heightAttack ( byte5 ) , _coordinateSet_TransparentColor ( byte6 ) , _replacementColorSetIndices ( byte7 ) { }
CreatureAspect ( ) :
_firstNativeBitmapRelativeIndex ( 0 ) , _firstDerivedBitmapIndex ( 0 ) , _byteWidthFront ( 0 ) ,
_heightFront ( 0 ) , _byteWidthSide ( 0 ) , _heightSide ( 0 ) , _byteWidthAttack ( 0 ) ,
_heightAttack ( 0 ) , _coordinateSet_TransparentColor ( 0 ) , _replacementColorSetIndices ( 0 ) { }
2016-06-18 16:02:48 +00:00
byte getCoordSet ( ) { return ( _coordinateSet_TransparentColor > > 4 ) & 0xF ; } // @ M71_COORDINATE_SET
byte getTranspColour ( ) { return _coordinateSet_TransparentColor & 0xF ; } // @ M72_TRANSPARENT_COLOR
byte getReplColour10 ( ) { return ( _replacementColorSetIndices > > 4 ) & 0xF ; } // @ M74_COLOR_10_REPLACEMENT_COLOR_SET
byte getReplColour9 ( ) { return _replacementColorSetIndices & 0xF ; } // @ M73_COLOR_09_REPLACEMENT_COLOR_SET
2016-06-04 08:44:37 +00:00
} ; // @ CREATURE_ASPECT
2016-07-01 22:27:05 +00:00
class ObjectAspect {
public :
2016-06-18 16:02:48 +00:00
byte _firstNativeBitmapRelativeIndex ;
byte _firstDerivedBitmapRelativeIndex ;
2016-07-03 19:12:47 +00:00
byte _byteWidth ;
2016-06-18 16:02:48 +00:00
byte _height ;
byte _graphicInfo ; /* Bits 7-5 and 3-1 Unreferenced */
byte _coordinateSet ;
2016-06-04 08:44:37 +00:00
ObjectAspect ( byte firstN , byte firstD , byte byteWidth , byte h , byte grap , byte coord ) :
2016-06-18 16:02:48 +00:00
_firstNativeBitmapRelativeIndex ( firstN ) , _firstDerivedBitmapRelativeIndex ( firstD ) ,
2016-07-03 19:12:47 +00:00
_byteWidth ( byteWidth ) , _height ( h ) , _graphicInfo ( grap ) , _coordinateSet ( coord ) { }
2016-08-14 21:10:31 +00:00
ObjectAspect ( ) : _firstNativeBitmapRelativeIndex ( 0 ) , _firstDerivedBitmapRelativeIndex ( 0 ) ,
_byteWidth ( 0 ) , _height ( 0 ) , _graphicInfo ( 0 ) , _coordinateSet ( 0 ) { }
2016-06-04 08:44:37 +00:00
} ; // @ OBJECT_ASPECT
2016-07-01 22:27:05 +00:00
class ProjectileAspect {
public :
2016-06-18 16:02:48 +00:00
byte _firstNativeBitmapRelativeIndex ;
byte _firstDerivedBitmapRelativeIndex ;
2016-07-03 19:12:47 +00:00
byte _byteWidth ;
2016-06-18 16:02:48 +00:00
byte _height ;
uint16 _graphicInfo ; /* Bits 15-9, 7-5 and 3-2 Unreferenced */
2016-06-04 08:44:37 +00:00
ProjectileAspect ( byte firstN , byte firstD , byte byteWidth , byte h , uint16 grap ) :
2016-06-18 16:02:48 +00:00
_firstNativeBitmapRelativeIndex ( firstN ) , _firstDerivedBitmapRelativeIndex ( firstD ) ,
2016-07-03 19:12:47 +00:00
_byteWidth ( byteWidth ) , _height ( h ) , _graphicInfo ( grap ) { }
2016-08-15 05:58:04 +00:00
2016-09-15 19:34:08 +00:00
ProjectileAspect ( ) : _firstNativeBitmapRelativeIndex ( 0 ) ,
2016-08-15 05:58:04 +00:00
_firstDerivedBitmapRelativeIndex ( 0 ) , _byteWidth ( 0 ) , _height ( 0 ) , _graphicInfo ( 0 ) { }
2016-06-04 08:44:37 +00:00
} ; // @ PROJECTIL_ASPECT
2016-07-01 22:27:05 +00:00
class CreatureReplColorSet {
public :
2016-06-18 16:02:48 +00:00
uint16 _RGBColor [ 6 ] ;
2016-08-21 20:31:02 +00:00
byte _d2ReplacementColor ;
byte _d3ReplacementColor ;
CreatureReplColorSet ( uint16 col1 , uint16 col2 , uint16 col3 , uint16 col4 , uint16 col5 , uint16 col6 , byte d2Rep , byte d3Rep ) {
_RGBColor [ 0 ] = col1 ;
_RGBColor [ 1 ] = col2 ;
_RGBColor [ 2 ] = col3 ;
_RGBColor [ 3 ] = col4 ;
_RGBColor [ 4 ] = col5 ;
_RGBColor [ 5 ] = col6 ;
_d2ReplacementColor = d2Rep ;
_d3ReplacementColor = d3Rep ;
}
2016-06-04 08:44:37 +00:00
} ; // @ CREATURE_REPLACEMENT_COLOR_SET
2016-09-15 05:34:38 +00:00
struct OrnamentInfo {
int16 nativeIndice ;
int16 coordinateSet ;
} ;
2016-05-15 13:53:00 +00:00
2016-07-01 22:27:05 +00:00
# define k0_DoorButton 0 // @ C0_DOOR_BUTTON
# define k0_WallOrnInscription 0 // @ C0_WALL_ORNAMENT_INSCRIPTION
# define k15_FloorOrnFootprints 15 // @ C15_FLOOR_ORNAMENT_FOOTPRINTS
# define k15_DoorOrnDestroyedMask 15 // @ C15_DOOR_ORNAMENT_DESTROYED_MASK
# define k16_DoorOrnThivesEyeMask 16 // @ C16_DOOR_ORNAMENT_THIEVES_EYE_MASK
2016-05-15 13:53:00 +00:00
2016-09-15 19:34:08 +00:00
# define k0_viewportNotDungeonView 0 // @ C0_VIEWPORT_NOT_DUNGEON_VIEW
# define k1_viewportDungeonView 1 // @ C1_VIEWPORT_DUNGEON_VIEW
# define k2_viewportAsBeforeSleepOrFreezeGame 2 // @ C2_VIEWPORT_AS_BEFORE_SLEEP_OR_FREEZE_GAME
2016-07-02 17:24:13 +00:00
# define k112_byteWidthViewport 112 // @ C112_BYTE_WIDTH_VIEWPORT
2016-09-15 19:34:08 +00:00
# define k136_heightViewport 136 // @ C136_HEIGHT_VIEWPORT
2016-07-02 17:24:13 +00:00
# define k160_byteWidthScreen 160 // @ C160_BYTE_WIDTH_SCREEN
2016-09-15 19:34:08 +00:00
# define k200_heightScreen 200 // @ C200_HEIGHT_SCREEN
2016-07-02 17:24:13 +00:00
2016-07-06 22:46:51 +00:00
# define k8_byteWidth 8 // @ C008_BYTE_WIDTH
# define k16_byteWidth 16 // @ C016_BYTE_WIDTH
# define k24_byteWidth 24 // @ C024_BYTE_WIDTH
# define k32_byteWidth 32 // @ C032_BYTE_WIDTH
# define k40_byteWidth 40 // @ C040_BYTE_WIDTH
# define k48_byteWidth 48 // @ C048_BYTE_WIDTH
# define k64_byteWidth 64 // @ C064_BYTE_WIDTH
# define k72_byteWidth 72 // @ C072_BYTE_WIDTH
# define k128_byteWidth 128 // @ C128_BYTE_WIDTH
# define k144_byteWidth 144 // @ C144_BYTE_WIDTH
2016-07-04 15:14:32 +00:00
class DoorFrames {
public :
Frame _closedOrDestroyed ;
Frame _vertical [ 3 ] ;
Frame _leftHorizontal [ 3 ] ;
Frame _rightHorizontal [ 3 ] ;
DoorFrames ( Frame f1 , Frame f2_1 , Frame f2_2 , Frame f2_3 ,
Frame f3_1 , Frame f3_2 , Frame f3_3 ,
Frame f4_1 , Frame f4_2 , Frame f4_3 ) {
_closedOrDestroyed = f1 ;
_vertical [ 0 ] = f2_1 ;
_vertical [ 1 ] = f2_2 ;
_vertical [ 2 ] = f2_3 ;
_leftHorizontal [ 0 ] = f3_1 ;
_leftHorizontal [ 1 ] = f3_2 ;
_leftHorizontal [ 2 ] = f3_3 ;
_rightHorizontal [ 0 ] = f4_1 ;
_rightHorizontal [ 1 ] = f4_2 ;
_rightHorizontal [ 2 ] = f4_3 ;
}
} ; // @ DOOR_FRAMES
2016-08-26 20:51:09 +00:00
# define D00_RGB_BLACK 0x0000
# define D01_RGB_DARK_BLUE 0x0004
# define D02_RGB_LIGHT_BROWN 0x0842
# define D03_RGB_PINK 0x086F
# define D04_RGB_LIGHTER_BROWN 0x0A62
# define D05_RGB_DARK_GOLD 0x0A82
# define D06_RGB_GOLD 0x0CA2
# define D07_RGB_RED 0x0F00
# define D08_RGB_YELLOW 0x0FF4
# define D09_RGB_WHITE 0x0FFF
# define D10_MASK_RED_COMPONENT 0x0F00
# define D10_MASK_RED_COMPONENT 0x0F00
# define D11_MASK_GREEN_COMPONENT 0x00F0
# define D12_MASK_BLUE_COMPONENT 0x000F
2016-05-02 18:58:55 +00:00
class DisplayMan {
2016-06-22 18:32:30 +00:00
friend class DM : : TextMan ;
2016-06-03 21:47:04 +00:00
DMEngine * _vm ;
2016-05-12 18:46:37 +00:00
2016-06-03 21:47:04 +00:00
uint16 _grapItemCount ; // @ G0632_ui_GraphicCount
2016-08-16 17:15:14 +00:00
uint32 * _bitmapCompressedByteCount ;
uint32 * _bitmapDecompressedByteCount ;
2016-06-03 21:47:04 +00:00
uint32 * _packedItemPos ;
byte * _packedBitmaps ;
byte * * _bitmaps ;
2016-08-13 12:07:06 +00:00
DoorFrames * _doorFrameD1C ;
2016-05-12 18:46:37 +00:00
// pointers are not owned by these fields
2016-08-25 16:32:03 +00:00
byte * _palChangesProjectile [ 4 ] ; // @G0075_apuc_PaletteChanges_Projectile
2016-05-15 13:53:00 +00:00
2016-05-03 15:55:04 +00:00
DisplayMan ( const DisplayMan & other ) ; // no implementation on purpose
2016-05-02 18:58:55 +00:00
void operator = ( const DisplayMan & rhs ) ; // no implementation on purpose
2016-05-05 16:11:11 +00:00
2016-05-06 16:13:23 +00:00
byte * getCurrentVgaBuffer ( ) ;
2016-05-15 13:53:00 +00:00
// the original function has two position parameters, but they are always set to zero
2016-05-05 16:11:11 +00:00
void unpackGraphics ( ) ;
2016-06-22 18:32:30 +00:00
void loadFNT1intoBitmap ( uint16 index , byte * destBitmap ) ;
2016-05-15 13:53:00 +00:00
2016-08-25 16:32:03 +00:00
void viewportSetPalette ( uint16 * middleScreenPalette , uint16 * topAndBottomScreen ) ; // @ F0565_VIEWPORT_SetPalette
void viewportBlitToScreen ( ) ; // @ F0566_VIEWPORT_BlitToScreen
void drawFloorPitOrStairsBitmapFlippedHorizontally ( uint16 nativeIndex , Frame & frame ) ; // @ F0105_DUNGEONVIEW_DrawFloorPitOrStairsBitmapFlippedHorizontally
void drawFloorPitOrStairsBitmap ( uint16 nativeIndex , Frame & frame ) ; // @ F0104_DUNGEONVIEW_DrawFloorPitOrStairsBitmap
void drawWallSetBitmap ( byte * bitmap , Frame & f ) ; // @ F0100_DUNGEONVIEW_DrawWallSetBitmap
void drawWallSetBitmapWithoutTransparency ( byte * bitmap , Frame & f ) ; // @ F0101_DUNGEONVIEW_DrawWallSetBitmapWithoutTransparency
void drawSquareD3L ( Direction dir , int16 posX , int16 posY ) ; // @ F0116_DUNGEONVIEW_DrawSquareD3L
void drawSquareD3R ( Direction dir , int16 posX , int16 posY ) ; // @ F0117_DUNGEONVIEW_DrawSquareD3R
void drawSquareD3C ( Direction dir , int16 posX , int16 posY ) ; // @ F0118_DUNGEONVIEW_DrawSquareD3C_CPSF
void drawSquareD2L ( Direction dir , int16 posX , int16 posY ) ; // @ F0119_DUNGEONVIEW_DrawSquareD2L
void drawSquareD2R ( Direction dir , int16 posX , int16 posY ) ; // @ F0120_DUNGEONVIEW_DrawSquareD2R_CPSF
void drawSquareD2C ( Direction dir , int16 posX , int16 posY ) ; // @ F0121_DUNGEONVIEW_DrawSquareD2C
void drawSquareD1L ( Direction dir , int16 posX , int16 posY ) ; // @ F0122_DUNGEONVIEW_DrawSquareD1L
void drawSquareD1R ( Direction dir , int16 posX , int16 posY ) ; // @ F0123_DUNGEONVIEW_DrawSquareD1R
void drawSquareD1C ( Direction dir , int16 posX , int16 posY ) ; // @ F0124_DUNGEONVIEW_DrawSquareD1C
void drawSquareD0L ( Direction dir , int16 posX , int16 posY ) ; // @ F0125_DUNGEONVIEW_DrawSquareD0L
void drawSquareD0R ( Direction dir , int16 posX , int16 posY ) ; // @ F0126_DUNGEONVIEW_DrawSquareD0R
void drawSquareD0C ( Direction dir , int16 posX , int16 posY ) ; // @ F0127_DUNGEONVIEW_DrawSquareD0C
void applyCreatureReplColors ( int replacedColor , int replacementColor ) ; // @ F0093_DUNGEONVIEW_ApplyCreatureReplacementColors
bool isDrawnWallOrnAnAlcove ( int16 wallOrnOrd , ViewWall viewWallIndex ) ; // @ F0107_DUNGEONVIEW_IsDrawnWallOrnamentAnAlcove_CPSF
uint16 * _derivedBitmapByteCount ; // @ G0639_pui_DerivedBitmapByteCount
byte * * _derivedBitmaps ; // @ G0638_pui_DerivedBitmapBlockIndices
int16 _stairsNativeBitmapIndexUpFrontD3L ; // @ G0675_i_StairsNativeBitmapIndex_Up_Front_D3L
int16 _stairsNativeBitmapIndexUpFrontD3C ; // @ G0676_i_StairsNativeBitmapIndex_Up_Front_D3C
int16 _stairsNativeBitmapIndexUpFrontD2L ; // @ G0677_i_StairsNativeBitmapIndex_Up_Front_D2L
int16 _stairsNativeBitmapIndexUpFrontD2C ; // @ G0678_i_StairsNativeBitmapIndex_Up_Front_D2C
int16 _stairsNativeBitmapIndexUpFrontD1L ; // @ G0679_i_StairsNativeBitmapIndex_Up_Front_D1L
int16 _stairsNativeBitmapIndexUpFrontD1C ; // @ G0680_i_StairsNativeBitmapIndex_Up_Front_D1C
int16 _stairsNativeBitmapIndexUpFrontD0CLeft ; // @ G0681_i_StairsNativeBitmapIndex_Up_Front_D0C_Left
int16 _stairsNativeBitmapIndexDownFrontD3L ; // @ G0682_i_StairsNativeBitmapIndex_Down_Front_D3L
int16 _stairsNativeBitmapIndexDownFrontD3C ; // @ G0683_i_StairsNativeBitmapIndex_Down_Front_D3C
int16 _stairsNativeBitmapIndexDownFrontD2L ; // @ G0684_i_StairsNativeBitmapIndex_Down_Front_D2L
int16 _stairsNativeBitmapIndexDownFrontD2C ; // @ G0685_i_StairsNativeBitmapIndex_Down_Front_D2C
int16 _stairsNativeBitmapIndexDownFrontD1L ; // @ G0686_i_StairsNativeBitmapIndex_Down_Front_D1L
int16 _stairsNativeBitmapIndexDownFrontD1C ; // @ G0687_i_StairsNativeBitmapIndex_Down_Front_D1C
int16 _stairsNativeBitmapIndexDownFrontD0CLeft ; // @ G0688_i_StairsNativeBitmapIndex_Down_Front_D0C_Left
int16 _stairsNativeBitmapIndexSideD2L ; // @ G0689_i_StairsNativeBitmapIndex_Side_D2L
int16 _stairsNativeBitmapIndexUpSideD1L ; // @ G0690_i_StairsNativeBitmapIndex_Up_Side_D1L
int16 _stairsNativeBitmapIndexDownSideD1L ; // @ G0691_i_StairsNativeBitmapIndex_Down_Side_D1L
int16 _stairsNativeBitmapIndexSideD0L ; // @ G0692_i_StairsNativeBitmapIndex_Side_D0L
byte * _bitmapFloor ; // @ G0084_puc_Bitmap_Floor
byte * _bitmapCeiling ; // @ G0085_puc_Bitmap_Ceiling
byte * _bitmapWallSetD3L2 ; // @ G0697_puc_Bitmap_WallSet_Wall_D3L2
byte * _bitmapWallSetD3R2 ; // @ G0696_puc_Bitmap_WallSet_Wall_D3R2
byte * _bitmapWallSetD3LCR ; // @ G0698_puc_Bitmap_WallSet_Wall_D3LCR
byte * _bitmapWallSetD2LCR ; // @ G0699_puc_Bitmap_WallSet_Wall_D2LCR
2016-08-26 20:51:09 +00:00
public :
2016-08-25 16:32:03 +00:00
byte * _bitmapWallSetD1LCR ; // @ G0700_puc_Bitmap_WallSet_Wall_D1LCR
2016-08-26 20:51:09 +00:00
private :
2016-09-15 19:34:08 +00:00
Box _boxThievesEyeViewPortVisibleArea ; // @ G0106_s_Graphic558_Box_ThievesEye_ViewportVisibleArea
2016-08-13 12:07:06 +00:00
byte _palChangesDoorButtonAndWallOrnD3 [ 16 ] ; // @ G0198_auc_Graphic558_PaletteChanges_DoorButtonAndWallOrnament_D3
byte _palChangesDoorButtonAndWallOrnD2 [ 16 ] ; // @ G0199_auc_Graphic558_PaletteChanges_DoorButtonAndWallOrnament_D2
2016-08-12 05:44:06 +00:00
2016-08-25 16:32:03 +00:00
byte * bitmapWallSetWallD0L ; // @ G0701_puc_Bitmap_WallSet_Wall_D0L
byte * _bitmapWallSetWallD0R ; // @ G0702_puc_Bitmap_WallSet_Wall_D0R
byte * _bitmapWallSetDoorFrameTopD2LCR ; // @ G0703_puc_Bitmap_WallSet_DoorFrameTop_D2LCR
byte * _bitmapWallSetDoorFrameTopD1LCR ; // @ G0704_puc_Bitmap_WallSet_DoorFrameTop_D1LCR
byte * _bitmapWallSetDoorFrameLeftD3L ; // @ G0705_puc_Bitmap_WallSet_DoorFrameLeft_D3L
byte * _bitmapWallSetDoorFrameLeftD3C ; // @ G0706_puc_Bitmap_WallSet_DoorFrameLeft_D3C
byte * _bitmapWallSetDoorFrameLeftD2C ; // @ G0707_puc_Bitmap_WallSet_DoorFrameLeft_D2C
byte * _bitmapWallSetDoorFrameLeftD1C ; // @ G0708_puc_Bitmap_WallSet_DoorFrameLeft_D1C
byte * _bitmapWallSetDoorFrameRightD1C ; // @ G0710_puc_Bitmap_WallSet_DoorFrameRight_D1C
byte * _bitmapWallSetDoorFrameFront ; // @ G0709_puc_Bitmap_WallSet_DoorFrameFront
byte * _bitmapWallD3LCRFlipped ; // @ G0090_puc_Bitmap_WallD3LCR_Flipped;
byte * _bitmapWallD2LCRFlipped ; // @ G0091_puc_Bitmap_WallD2LCR_Flipped;
byte * _bitmapWallD1LCRFlipped ; // @ G0092_puc_Bitmap_WallD1LCR_Flipped;
byte * _bitmapWallD0LFlipped ; // @ G0093_puc_Bitmap_WallD0L_Flipped;
byte * _bitmapWallD0RFlipped ; // @ G0094_puc_Bitmap_WallD0R_Flipped;
byte * _bitmapWallD3LCRNative ; // @ G0095_puc_Bitmap_WallD3LCR_Native;
byte * _bitmapWallD2LCRNative ; // @ G0096_puc_Bitmap_WallD2LCR_Native;
byte * _bitmapWallD1LCRNative ; // @ G0097_puc_Bitmap_WallD1LCR_Native;
byte * _bitmapWallD0LNative ; // @ G0098_puc_Bitmap_WallD0L_Native;
byte * _bitmapWallD0RNative ; // @ G0099_puc_Bitmap_WallD0R_Native;
int16 _currentWallSet ; // @ G0231_i_CurrentWallSet
int16 _currentFloorSet ; // @ G0230_i_CurrentFloorSet
bool _useFlippedWallAndFootprintsBitmap ; // @ G0076_B_UseFlippedWallAndFootprintsBitmaps
int16 _doorNativeBitmapIndexFrontD3LCR [ 2 ] ; // @ G0693_ai_DoorNativeBitmapIndex_Front_D3LCR
int16 _doorNativeBitmapIndexFrontD2LCR [ 2 ] ; // @ G0694_ai_DoorNativeBitmapIndex_Front_D2LCR
int16 _doorNativeBitmapIndexFrontD1LCR [ 2 ] ; // @ G0695_ai_DoorNativeBitmapIndex_Front_D1LCR
uint16 * _paletteFadeFrom ; // @ K0017_pui_Palette_FadeFrom
uint16 _paletteFadeTemporary [ 16 ] ; // @ K0016_aui_Palette_FadeTemporary
2016-06-19 13:23:37 +00:00
public :
2016-08-26 20:51:09 +00:00
2016-07-02 17:24:13 +00:00
uint16 _screenWidth ;
uint16 _screenHeight ;
2016-08-25 16:32:03 +00:00
byte * _bitmapScreen ; // @ G0348_pl_Bitmap_Screen
byte * _bitmapViewport ; // @ G0296_puc_Bitmap_Viewport
2016-07-02 17:24:13 +00:00
2016-05-21 22:32:53 +00:00
// some methods use this for a stratchpad, don't make assumptions about content between function calls
2016-08-25 16:32:03 +00:00
byte * _tmpBitmap ; // @ G0074_puc_Bitmap_Temporary
bool _paletteSwitchingEnabled ; // @ G0322_B_PaletteSwitchingEnabled
bool _refreshDungeonViewPaleteRequested ; // @ G0342_B_RefreshDungeonViewPaletteRequested
int16 _dungeonViewPaletteIndex ; // @ G0304_i_DungeonViewPaletteIndex
uint16 _blankBuffer [ 32 ] ; // @G0345_aui_BlankBuffer
uint16 _paletteTopAndBottomScreen [ 16 ] ; // @ G0347_aui_Palette_TopAndBottomScreen
uint16 _paletteMiddleScreen [ 16 ] ; // @ G0346_aui_Palette_MiddleScreen
2016-06-19 13:23:37 +00:00
2016-06-22 05:47:41 +00:00
explicit DisplayMan ( DMEngine * dmEngine ) ;
2016-05-02 18:58:55 +00:00
~ DisplayMan ( ) ;
2016-05-12 18:46:37 +00:00
2016-08-25 16:32:03 +00:00
void loadWallSet ( WallSet set ) ; // @ F0095_DUNGEONVIEW_LoadWallSet
void loadFloorSet ( FloorSet set ) ; // @ F0094_DUNGEONVIEW_LoadFloorSet
2016-06-18 15:18:01 +00:00
2016-08-25 16:32:03 +00:00
void loadIntoBitmap ( uint16 index , byte * destBitmap ) ; // @ F0466_EXPAND_GraphicToBitmap
2016-06-03 21:47:04 +00:00
void setUpScreens ( uint16 width , uint16 height ) ;
2016-09-15 19:34:08 +00:00
void loadGraphics ( ) ; // @ F0479_MEMORY_ReadGraphicsDatHeader
2016-08-25 16:32:03 +00:00
void initializeGraphicData ( ) ; // @ F0460_START_InitializeGraphicData
void loadCurrentMapGraphics ( ) ; // @ F0096_DUNGEONVIEW_LoadCurrentMapGraphics_CPSDF
void allocateFlippedWallBitmaps ( ) ; // @ F0461_START_AllocateFlippedWallBitmaps
void drawDoorBitmap ( Frame * frame ) ; // @ F0102_DUNGEONVIEW_DrawDoorBitmap
void drawDoorFrameBitmapFlippedHorizontally ( byte * bitmap , Frame * frame ) ; // @ F0103_DUNGEONVIEW_DrawDoorFrameBitmapFlippedHorizontally
2016-09-14 20:25:27 +00:00
void drawDoorButton ( int16 doorButtonOrdinal , DoorButton doorButton ) ; // @ F0110_DUNGEONVIEW_DrawDoorButton
2016-05-06 16:13:23 +00:00
/// Gives the width of an IMG0 type item
2016-07-03 19:12:47 +00:00
uint16 getPixelWidth ( uint16 index ) ;
2016-05-06 16:13:23 +00:00
/// Gives the height of an IMG1 type item
2016-07-03 19:12:47 +00:00
uint16 getPixelHeight ( uint16 index ) ;
2016-05-06 16:13:23 +00:00
2016-08-25 16:32:03 +00:00
void copyBitmapAndFlipHorizontal ( byte * srcBitmap , byte * destBitmap , uint16 byteWidth , uint16 height ) ; // @ F0099_DUNGEONVIEW_CopyBitmapAndFlipHorizontal
2016-09-14 05:42:36 +00:00
void drawFloorOrnament ( uint16 floorOrnOrdinal , ViewFloor viewFloorIndex ) ; // @ F0108_DUNGEONVIEW_DrawFloorOrnament
2016-09-14 19:27:09 +00:00
void drawDoor ( uint16 doorThingIndex , DoorState doorState , int16 * doorNativeBitmapIndices , int16 byteCount ,
2016-09-14 19:58:22 +00:00
DoorOrnament doorOrnament , DoorFrames * doorFrames ) ; // @ F0111_DUNGEONVIEW_DrawDoor
void drawDoorOrnament ( int16 doorOrnOdinal , DoorOrnament doorOrnament ) ; // @ F0109_DUNGEONVIEW_DrawDoorOrnament
2016-08-25 16:32:03 +00:00
void drawCeilingPit ( int16 nativeBitmapIndex , Frame * frame , int16 mapX , int16 mapY , bool flipHorizontal ) ; // @ F0112_DUNGEONVIEW_DrawCeilingPit
2016-07-04 18:54:17 +00:00
2016-08-25 16:32:03 +00:00
void blitToViewport ( byte * bitmap , Box & box , int16 byteWidth , Color transparent , int16 height ) ; // @ F0020_MAIN_BlitToViewport
void blitToViewport ( byte * bitmap , int16 * box , int16 byteWidth , Color transparent , int16 height ) ; // @ F0020_MAIN_BlitToViewport
2016-09-04 16:29:16 +00:00
void blitToScreen ( byte * bitmap , const Box * box , int16 byteWidth , Color transparent , int16 height ) ; // @ F0021_MAIN_BlitToScreen
2016-07-02 18:12:10 +00:00
2016-08-26 20:51:09 +00:00
/* srcHeight and destHeight are not necessary for blitting, only error checking, thus they are defaulted for existing code which
2016-07-03 00:19:22 +00:00
does not pass anything , newly imported calls do pass srcHeght and srcWidth , so this is a ceonvenience change so the the parameters
2016-08-25 16:32:03 +00:00
match the original exactly , if need arises for heights then we ' ll have to retrospectively add them in old function calls */
2016-07-03 01:07:38 +00:00
/* Expects inclusive boundaries in box */
2016-09-04 16:29:16 +00:00
void blitToBitmap ( byte * srcBitmap , byte * destBitmap , const Box & box , uint16 srcX , uint16 srcY , uint16 srcByteWidth ,
2016-08-12 12:55:35 +00:00
uint16 destByteWidth , Color transparent , int16 srcHeight , int16 destHight ) ; // @ F0132_VIDEO_Blit
2016-08-26 20:51:09 +00:00
/* Expects inclusive boundaries in box */
2016-08-25 16:32:03 +00:00
void blitBoxFilledWithMaskedBitmap ( byte * src , byte * dest , byte * mask , byte * tmp , Box & box , int16 lastUnitIndex ,
2016-08-26 20:51:09 +00:00
int16 firstUnitIndex , int16 destByteWidth , Color transparent ,
int16 xPos , int16 yPos , int16 destHeight , int16 height2 ) ; // @ F0133_VIDEO_BlitBoxFilledWithMaskedBitmap
// this function takes pixel widths
2016-08-25 16:32:03 +00:00
void blitToBitmapShrinkWithPalChange ( byte * srcBitmap , byte * destBitmap ,
2016-07-03 19:12:47 +00:00
int16 srcPixelWidth , int16 srcHight , int16 destPixelWidth , int16 destHeight , byte * palChange ) ; // @ F0129_VIDEO_BlitShrinkWithPaletteChanges
2016-08-25 16:32:03 +00:00
void flipBitmapHorizontal ( byte * bitmap , uint16 byteWidth , uint16 height ) ; // @ F0130_VIDEO_FlipHorizontal
void flipBitmapVertical ( byte * bitmap , uint16 byteWidth , uint16 height ) ;
byte * getExplosionBitmap ( uint16 explosionAspIndex , uint16 scale , int16 & returnByteWidth , int16 & returnHeight ) ; // @ F0114_DUNGEONVIEW_GetExplosionBitmap
2016-05-06 16:13:23 +00:00
2016-08-25 16:32:03 +00:00
void fillBitmap ( byte * bitmap , Color color , uint16 byteWidth , uint16 height ) ; // @ F0134_VIDEO_FillBitmap
2016-07-02 23:15:10 +00:00
void fillScreen ( Color color ) ;
2016-07-03 01:07:38 +00:00
/* Expects inclusive boundaries in box */
2016-08-25 16:32:03 +00:00
void fillScreenBox ( Box & box , Color color ) ; // @ D24_FillScreenBox, F0550_VIDEO_FillScreenBox
2016-09-03 12:20:13 +00:00
/* Expects inclusive boundaries in box */
2016-08-25 16:32:03 +00:00
void fillBoxBitmap ( byte * destBitmap , Box & box , Color color , int16 byteWidth , int16 height ) ; // @ F0135_VIDEO_FillBox
void drawDungeon ( Direction dir , int16 posX , int16 posY ) ; // @ F0128_DUNGEONVIEW_Draw_CPSF
void drawFloorAndCeiling ( ) ; // @ F0098_DUNGEONVIEW_DrawFloorAndCeiling
2016-05-06 16:13:23 +00:00
void updateScreen ( ) ;
2016-08-25 16:32:03 +00:00
void drawViewport ( int16 palSwitchingRequestedState ) ; // @ F0097_DUNGEONVIEW_DrawViewport
2016-07-02 15:54:47 +00:00
2016-08-25 16:32:03 +00:00
byte * getNativeBitmapOrGraphic ( uint16 index ) ; // @ F0489_MEMORY_GetNativeBitmapOrGraphic
2016-06-28 16:04:32 +00:00
Common : : MemoryReadStream getCompressedData ( uint16 index ) ;
uint32 getCompressedDataSize ( uint16 index ) ;
2016-08-25 16:32:03 +00:00
void drawField ( FieldAspect * fieldAspect , Box & box ) ; // @ F0113_DUNGEONVIEW_DrawField
2016-05-02 18:58:55 +00:00
2016-08-25 16:32:03 +00:00
int16 getScaledBitmapByteCount ( int16 byteWidth , int16 height , int16 scale ) ; // @ F0459_START_GetScaledBitmapByteCount
int16 getScaledDimension ( int16 dimension , int16 scale ) ; // @ M78_SCALED_DIMENSION
void drawObjectsCreaturesProjectilesExplosions ( Thing thingParam , Direction directionParam ,
2016-08-26 20:51:09 +00:00
int16 mapXpos , int16 mapYpos , int16 viewSquareIndex ,
2016-09-15 19:34:08 +00:00
CellOrder orderedViewCellOrdinals ) ; // @ F0115_DUNGEONVIEW_DrawObjectsCreaturesProjectilesExplosions_CPSEF
2016-08-25 16:32:03 +00:00
uint16 getNormalizedByteWidth ( uint16 byteWidth ) ; // @ M77_NORMALIZED_BYTE_WIDTH
uint16 getVerticalOffsetM23 ( uint16 val ) ; // @ M23_VERTICAL_OFFSET
uint16 getHorizontalOffsetM22 ( uint16 val ) ; // @ M22_HORIZONTAL_OFFSET
2016-06-29 20:08:10 +00:00
2016-08-25 16:32:03 +00:00
int16 _championPortraitOrdinal ; // @ G0289_i_DungeonView_ChampionPortraitOrdinal
int16 _currMapAlcoveOrnIndices [ k3_AlcoveOrnCount ] ; // @ G0267_ai_CurrentMapAlcoveOrnamentIndices
int16 _currMapFountainOrnIndices [ k1_FountainOrnCount ] ; // @ G0268_ai_CurrentMapFountainOrnamentIndices
2016-09-15 05:34:38 +00:00
OrnamentInfo _currMapWallOrnInfo [ 16 ] ; // @ G0101_aai_CurrentMapWallOrnamentsInfo
OrnamentInfo _currMapFloorOrnInfo [ 16 ] ; // @ G0102_aai_CurrentMapFloorOrnamentsInfo
OrnamentInfo _currMapDoorOrnInfo [ 17 ] ; // @ G0103_aai_CurrentMapDoorOrnamentsInfo
2016-08-25 16:32:03 +00:00
byte * _currMapAllowedCreatureTypes ; // @ G0264_puc_CurrentMapAllowedCreatureTypes
byte _currMapWallOrnIndices [ 16 ] ; // @ G0261_auc_CurrentMapWallOrnamentIndices
byte _currMapFloorOrnIndices [ 16 ] ; // @ G0262_auc_CurrentMapFloorOrnamentIndices
byte _currMapDoorOrnIndices [ 18 ] ; // @ G0263_auc_CurrentMapDoorOrnamentIndices
2016-05-15 16:59:55 +00:00
2016-08-25 16:32:03 +00:00
int16 _currMapViAltarIndex ; // @ G0266_i_CurrentMapViAltarWallOrnamentIndex
2016-05-21 10:55:37 +00:00
2016-08-25 16:32:03 +00:00
Thing _inscriptionThing ; // @ G0290_T_DungeonView_InscriptionThing
2016-06-18 17:42:05 +00:00
2016-08-25 16:32:03 +00:00
bool _drawFloorAndCeilingRequested ; // @ G0297_B_DrawFloorAndCeilingRequested
2016-07-06 22:46:51 +00:00
2016-07-29 17:08:00 +00:00
// This tells blitting functions whether to assume a BYTE_BOX or a WORD_BOX has been passed to them,
2016-07-02 15:46:05 +00:00
// I only use WORD_BOX, so this will probably deem useless
2016-08-25 16:32:03 +00:00
bool _useByteBoxCoordinates ; // @ G0578_B_UseByteBoxCoordinates
bool _doNotDrawFluxcagesDuringEndgame ; // @ G0077_B_DoNotDrawFluxcagesDuringEndgame
2016-06-29 20:08:10 +00:00
2016-08-13 12:07:06 +00:00
Frame _doorFrameLeftD1C ; // @ G0170_s_Graphic558_Frame_DoorFrameLeft_D1C
Frame _doorFrameRightD1C ; // @ G0171_s_Graphic558_Frame_DoorFrameRight_D1C
2016-08-14 10:00:18 +00:00
FieldAspect _fieldAspects188 [ 12 ] ;
Box _boxMovementArrows ;
byte _palChangeSmoke [ 16 ] ;
byte _projectileScales [ 7 ] ;
2016-08-14 19:15:41 +00:00
ExplosionAspect _explosionAspects [ k4_ExplosionAspectCount ] ;
Frame _frameWallD3R2 ;
2016-08-14 21:10:31 +00:00
Frame _frameWalls163 [ 12 ] ;
CreatureAspect _creatureAspects219 [ k27_CreatureTypeCount ] ;
ObjectAspect _objectAspects209 [ k85_ObjAspectCount ] ; // @ G0209_as_Graphic558_ObjectAspects
2016-08-15 05:58:04 +00:00
ProjectileAspect _projectileAspect [ k14_ProjectileAspectCount ] ; // @ G0210_as_Graphic558_ProjectileAspects
uint16 _palCredits [ 16 ] ; // @ G0019_aui_Graphic562_Palette_Credits
uint16 _palDungeonView [ 6 ] [ 16 ] ; // @ G0021_aaui_Graphic562_Palette_DungeonView
2016-08-15 21:16:59 +00:00
byte _palChangesCreatureD3 [ 16 ] ; // @ G0221_auc_Graphic558_PaletteChanges_Creature_D3
byte _palChangesCreatureD2 [ 16 ] ; // @ G0222_auc_Graphic558_PaletteChanges_Creature_D2
byte _palChangesNoChanges [ 16 ] ; // @ G0017_auc_Graphic562_PaletteChanges_NoChanges
byte _palChangesFloorOrnD3 [ 16 ] ; // @ G0213_auc_Graphic558_PaletteChanges_FloorOrnament_D3
byte _palChangesFloorOrnD2 [ 16 ] ; // @ G0214_auc_Graphic558_PaletteChanges_FloorOrnament_D2
2016-08-13 12:07:06 +00:00
2016-08-25 16:32:03 +00:00
bool isDerivedBitmapInCache ( int16 derivedBitmapIndex ) ; // @ F0491_CACHE_IsDerivedBitmapInCache
byte * getDerivedBitmap ( int16 derivedBitmapIndex ) ; // @ F0492_CACHE_GetDerivedBitmap
void addDerivedBitmap ( int16 derivedBitmapIndex ) ; // @ F0493_CACHE_AddDerivedBitmap
void releaseBlock ( uint16 index ) ; // @ F0480_CACHE_ReleaseBlock
uint16 getDarkenedColor ( uint16 RGBcolor ) ;
void startEndFadeToPalette ( uint16 * P0849_pui_Palette ) ; // @ F0436_STARTEND_FadeToPalette
2016-09-03 12:20:13 +00:00
void buildPaletteChangeCopperList ( uint16 * middleScreen , uint16 * topAndBottom ) ; // @ F0508_AMIGA_BuildPaletteChangeCopperList
void shadeScreenBox ( Box * box , Color color ) { warning ( " STUB METHOD: shadeScreenBox " ) ; } // @ F0136_VIDEO_ShadeScreenBox
2016-08-12 05:44:06 +00:00
private :
void initConstants ( ) ;
2016-09-13 20:07:02 +00:00
uint16 getBitmapByteCount ( uint16 pixelWidth , uint16 height ) ; // @ M75_BITMAP_BYTE_COUNT
2016-05-15 13:53:00 +00:00
} ;
}
2016-05-02 18:58:55 +00:00
# endif