EBLAN_ENGINE/include/engine_defs.inc

131 lines
4.1 KiB
PHP

; ==============================================================================
; EBLAN ENGINE - Constants and Definitions
; ==============================================================================
; Screen & Render Dimensions
SCREEN_W equ 320
SCREEN_H equ 240
SCREEN_HALF_W equ 160
SCREEN_HALF_H equ 120
SCREEN_PITCH equ 1280 ; 320 * 4 bytes (BGRA)
FRAME_BUFFER_SIZE equ 307200 ; 320 * 240 * 4 bytes
WINDOW_W equ 1280
WINDOW_H equ 960
; Fixed Point Math (16.16)
FIXED_SHIFT equ 16
FIXED_ONE equ 65536
FIXED_HALF equ 32768
; Angles & Field of View
ANGLE_512 equ 512
ANGLE_MASK equ 511
ANGLE_360 equ 512
ANGLE_180 equ 256
ANGLE_90 equ 128
ANGLE_45 equ 64
FOV_ANGLES equ 96 ; ~67.5 degrees FOV
FOV_HALF equ 48
; Map Dimensions & Units
MAP_W equ 32
MAP_H equ 32
MAP_SIZE equ 1024
CELL_SIZE equ 64 ; 64x64 units per cell
CELL_SHIFT equ 6 ; 2^6 = 64
; Projection Constants
PROJ_DIST equ 239 ; (SCREEN_W / 2) / tan(FOV / 2), FOV = 67.5 deg
; Texture Sizes (128x128 pixels, 4 bytes BGRA = 65536 bytes per texture)
TEX_W equ 128
TEX_H equ 128
TEX_SHIFT equ 7 ; 2^7 = 128
TEX_MASK equ 127
TEX_SIZE_BYTES equ 65536
MAX_TEXTURES equ 16
; Virtual Keys
VK_KEY_W equ 57h
VK_KEY_A equ 41h
VK_KEY_S equ 53h
VK_KEY_D equ 44h
VK_KEY_E equ 45h
VK_KEY_Q equ 51h
VK_KEY_M equ 4Dh
VK_KEY_SPACE equ 20h
VK_KEY_SHIFT equ 10h
VK_KEY_ESCAPE equ 1Bh
VK_KEY_LEFT equ 25h
VK_KEY_UP equ 26h
VK_KEY_RIGHT equ 27h
VK_KEY_DOWN equ 28h
VK_KEY_F12 equ 7Bh
; Colors (32-bit 00RRGGBBh; in memory a DIB stores bytes B,G,R,0 little-endian)
COLOR_BLACK equ 00000000h
COLOR_WHITE equ 00FFFFFFh
COLOR_RED equ 00FF0000h
COLOR_GREEN equ 0000FF00h
COLOR_BLUE equ 000000FFh
COLOR_YELLOW equ 00FFFF00h
COLOR_CYAN equ 0000FFFFh
COLOR_MAGENTA equ 00FF00FFh
COLOR_GRAY equ 00808080h
COLOR_DARK_GRAY equ 00303030h
COLOR_FLOOR equ 00222222h
COLOR_CEILING equ 00383838h
COLOR_CHROMA_KEY equ 00FF00FFh ; transparent sprite texel (magenta)
; Wall Cell Types (value = texture slot index)
CELL_EMPTY equ 0
CELL_BRICK equ 1
CELL_WOOD equ 2
CELL_STONE equ 3
CELL_METAL equ 4
CELL_DOOR equ 5
CELL_DOOR_OPEN equ 6
CELL_PILLAR equ 7
CELL_GLASS equ 8
CELL_MARBLE equ 9
; Sprite Types & Struct
MAX_SPRITES equ 32
SpriteStruct STRUCT
x dd 0 ; raw world units (1 cell = 64 units)
y dd 0 ; raw world units
textureId dd 0 ; texture slot 1..15 (0 = solid marker color)
scale dd 0 ; fixed-point 16.16 (65536 = 1.0)
dist dd 0 ; runtime: squared distance to player (for sorting)
flags dd 0
SpriteStruct ENDS
; Texture Pack (assets/textures/texturepack.bin):
; dd magic 'EBTX', dw version (1), dw slotCount, then slotCount * 65536 bytes
TEXPACK_MAGIC equ 58544245h ; 'EBTX'
; File I/O Constants
GENERIC_READ equ 80000000h
GENERIC_WRITE equ 40000000h
FILE_SHARE_READ equ 1
OPEN_EXISTING equ 3
CREATE_ALWAYS equ 2
FILE_ATTRIBUTE_NORMAL equ 80h
INVALID_HANDLE_VALUE equ -1
MAP_MAGIC equ 4E4C4245h ; 'EBLN'
MapHeader STRUCT ; sizeof = 38 bytes (packed)
magic dd 0 ; 'EBLN'
version dw 0 ; 1 = sprite coords 16.16 fixed, 2 = raw world units
mapWidth dw 0 ; 32
mapHeight dw 0 ; 32
playerStartX dw 0 ; cell X
playerStartY dw 0 ; cell Y
playerStartAngle dw 0 ; 0..511
spriteCount dw 0 ; number of sprites
ceilingColor dd 0 ; 00RRGGBBh
floorColor dd 0 ; 00RRGGBBh
reserved db 12 dup(0)
MapHeader ENDS