131 lines
4.1 KiB
PHP
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
|