ack3d/ack_lib/ACKENG.H

78 lines
3 KiB
C++
Raw Normal View History

// ACKENG.H header file for supporting raycasting routines.
// This file contains the main data structure named SLICE and definitions
// required to support the raycasting routines. The data structures defined
// in this file are not to be used directly by the programmer who is using
// the functions in the ACK-3D library. To locate data structures for the
// ACK-3D interface, see the file ACK3D.H.
#ifndef ACKENG_H_INCLUDED
#define ACKENG_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#define TRANS_WALLS 0
#define FLOOR_ACTIVE 1
#define USE_XMS 0 // Set to 0 if XMS not desired
#define MAX_RBA 500 // Number of rba's in resource header
// Fixed point constants used to perform fixed point calculations.
#define FP_SHIFT 16
#define FP_MULT 65536
#define FP_HALF 32768
#define VIEW_WIDTH 320 // The number of columns in a view (screen)
#define MAX_DISTANCE 2048 // The max distance from the POV to a wall slice
#define TYPE_WALL 0
#define TYPE_OBJECT 1
#define TYPE_PALETTE 2
#define MAX_HEIGHT 960 // Maximum height of a wall
#define MIN_HEIGHT 8 // Minimum height of a wall
#define MAX_UPDOWN 30 // Max up or down spots for each level
#define MAP_STARTCODE 0xFC // Force player to this square
#define MAP_UPCODE 0xFD // Go up to previous level
#define MAP_DOWNCODE 0xFE // Go down to next level
#define MAP_GOALCODE 0xFF // Finish line!
#define ST_WALL 1
#define ST_OBJECT 2
#define COLS_PER_BYTE 1 // Use 1 for normal mode 13h, 4 for modeX
#define BYTES_PER_ROW 320 // Use 320 for normal mode 13h, 80 for modeX
#define DWORDS_PER_ROW (BYTES_PER_ROW / 4)
#define SCREEN_SIZE 64000
// Holds information for the current wall section found during the raycasting process.
// During the raycasting process, ACK-3D casts out rays, looks for a wall at a
// given screen column position, and if a wall (slice) is found, information about
// the slice is stored in this structure.
typedef struct _slicer {
UCHAR **bMap; // Pointer to wall bitmap found while ray casting
UCHAR *mPtr; // Grid pointer to reference multi-height wall data
short bNumber; // Bitmap number of the wall found
unsigned short bColumn; // Screen column location of the found slice
short Distance; // Distance from the POV to the slice
short mPos; // Position of the slice in the associated map
unsigned char Type; // Indicates if the slice is a wall or object
void (*Fnc)(void); // Pointer to a function to draw wall or object
unsigned char Active; // Indicates last slice in listif a wall or object is displayable or not
// The next two pointers are used if the current slice
// is part of a transparent wall
struct _slicer *Prev; // References the wall slice in front of current slice
struct _slicer *Next; // References the wall slice behind the current slice
} SLICE;
#ifdef __cplusplus
};
#endif
#endif