24#ifndef HOPKINS_BASE_TYPES_H
25#define HOPKINS_BASE_TYPES_H
27#include "common/array.h"
28#include "common/scummsys.h"
32static const int kBaseMapWidth = 64;
33static const int kBaseMapHeight = 64;
34static const int kBaseMapCellCount = kBaseMapWidth * kBaseMapHeight;
35static const int kBaseAckGridArray = (kBaseMapWidth + 2) * (kBaseMapHeight + 2);
36static const int kBaseCellSize = 64;
37static const int kBaseCellShift = 6;
38static const int kBaseGridMask = 0xffc0;
39static const int kBaseWorldExtent = kBaseMapWidth * kBaseCellSize;
41static const int kBaseFixedShift = 16;
42static const int32 kBaseFixedOne = 1 << kBaseFixedShift;
45static const int kBaseAngleCount = 1920;
46static const int kBaseAngleHalfFov = 160;
47static const int kBaseQuarterTurn = 480;
48static const int kBaseHalfTurn = 960;
49static const int kBaseThreeQuarterTurn = 1440;
51static const int kBaseFrameWidth = 320;
52static const int kBaseFrameHeight = 200;
53static const int kBaseViewWidth = 320;
54static const int kBaseViewHeight = 180;
55static const int kBaseViewHalfWidth = 160;
56static const int kBaseHorizon = 90;
57static const int kBaseMaximumDistance = 2048;
58static const int kBaseMinimumWallHeight = 8;
59static const int kBaseMaximumWallHeight = 960;
61static const int kBaseMaxObjects = 60;
62static const int kBaseMaxDoors = 20;
64static const uint16 kBaseWallTransparent = 0x0800;
65static const uint16 kBaseWallMulti = 0x0400;
66static const uint16 kBaseWallUpper = 0x0200;
67static const uint16 kBaseWallPass = 0x0100;
69static const uint16 kBaseDoorSecret = 0x8000;
70static const uint16 kBaseDoorLocked = 0x4000;
71static const uint16 kBaseDoorSlide = 0x2000;
72static const uint16 kBaseDoorSplit = 0x1000;
73static const uint16 kBaseDoorOpening = 0x0080;
74static const uint16 kBaseDoorClosing = 0x0040;
75static const uint16 kBaseDoorXCode = 60;
76static const uint16 kBaseDoorSideCode = 59;
77static const uint16 kBaseDoorYCode = 62;
78static const uint16 kBaseExitBitmap = 15;
80inline int normalizeBaseAngle(
int angle) {
81 angle %= kBaseAngleCount;
83 angle += kBaseAngleCount;
87inline int baseMapIndex(
int x,
int y) {
88 return y * kBaseMapWidth + x;
91inline int baseWorldMapIndex(
int x,
int y) {
92 return (y & kBaseGridMask) + (x >> kBaseCellShift);
97 kBaseObjectFiring = 2,
116 BaseBitmap() : width(0), height(0), columnMajor(
false) {}
119 return width && height && pixels.
size() == (uint32)width * height;
122 byte sample(uint x, uint y)
const {
127 return columnMajor ? pixels[x * height + y] : pixels[y * width + x];
141 BaseDoor() : mPos(-1), mPos1(-1), mCode(0), mCode1(0), offset(0),
142 speed(0), type(0), flags(0) {}
160 BaseObject() : active(
false), passable(
false), direction(0), x(0), y(0),
161 mapPos(0), id(0), bitmap(1), animationTick(0), mode(kBaseObjectChase),
162 timer(0), oldX(0), oldY(0) {}
176 BaseRayHit() : hit(
false), axis(kBaseRayNone), code(0), mapPos(-1),
177 textureColumn(0), distance(kBaseMaximumDistance - 1),
178 rawDistance(0x7fffffff), worldX(0), worldY(0) {}
size_type size() const
Definition: array.h:316
Definition: base_types.h:109
Definition: base_types.h:131
Definition: base_types.h:181
Definition: base_types.h:145
Definition: base_types.h:165