EBLAN_ENGINE/include/engine_defs.inc

217 lines
6.9 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
VK_KEY_C equ 43h
VK_KEY_TAB equ 9
VK_KEY_R equ 52h
VK_KEY_CONTROL equ 11h
VK_LBUTTON equ 01h
VK_KEY_1 equ 31h
VK_KEY_2 equ 32h
VK_KEY_3 equ 33h
VK_KEY_4 equ 34h
VK_KEY_5 equ 35h
VK_KEY_F1 equ 70h
VK_KEY_H equ 48h
; Game Modes
GAME_MODE_ADVENTURE equ 0 ; Exploration / Quest / Horror / Puzzle (No weapons, clean view)
GAME_MODE_ACTION equ 1 ; Combat Action (Weapons, Crosshair, Ammo, Health bar)
; HUD Styles
HUD_STYLE_CLEAN equ 0 ; Clean / Immersive (No debug watermark, no bottom bar)
HUD_STYLE_DEBUG equ 1 ; Debug Mode (FPS counter, Engine watermark, Minimap)
; Weapon Archetypes
WEAPON_NONE equ -1 ; No weapon (Unarmed / Peaceful / Quest)
WEAPON_KNIFE equ 0 ; Melee blade (no ammo, fast, 30 damage)
WEAPON_PISTOL equ 1 ; Handgun (1 ammo, accurate, 35 damage)
WEAPON_SHOTGUN equ 2 ; Pump Shotgun (2 ammo, 3-ray spread, 70 damage)
WEAPON_COUNT equ 3
; Entity Archetypes & States
ENTITY_TYPE_PROP equ 0
ENTITY_TYPE_GUARD equ 1 ; Enemy Guard AI (Patrol, Chase, Attack)
ENTITY_TYPE_MEDKIT equ 2 ; Health pickup (+25 HP)
ENTITY_TYPE_AMMO equ 3 ; Ammo pickup (+20 Ammo)
ENTITY_TYPE_KEY equ 4 ; Door Key pickup
ENTITY_TYPE_SWITCH equ 5 ; Interactive switch trigger
ENTITY_TYPE_BARREL equ 6 ; Explosive barrel (AOE damage)
ENTITY_STATE_IDLE equ 0
ENTITY_STATE_CHASE equ 1
ENTITY_STATE_ATTACK equ 2
ENTITY_STATE_DEAD equ 3
; 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
CELL_PORTAL equ 10 ; Sector transition portal
CELL_COUNT equ 11
; Sector Transition Portals
MAX_TRANSITIONS equ 16
MAX_PATH_BYTES equ 260
MAP_FORMAT_VERSION equ 4
LevelTransition STRUCT ; sizeof = 42 bytes (packed)
triggerCellX db 0 ; 1 byte
triggerCellY db 0 ; 1 byte
targetMap db 32 dup(0); 32 bytes ASCII
targetSpawnX dw 0 ; 2 bytes
targetSpawnY dw 0 ; 2 bytes
targetAngle dw 0 ; 2 bytes
fadeEffect db 0 ; 1 byte (0=instant, 1=fade to black)
reserved db 0 ; 1 byte padding
LevelTransition ENDS
; 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 = fixed coords, 2/3 = transitions, 4 = cutscenes
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
transitionCount dw 0 ; number of transitions in file
cutsceneCount dw 0
cutsceneStringCount dw 0
cutsceneFlags dw 0
reserved db 4 dup(0)
MapHeader ENDS
MAX_CUTSCENE_EVENTS equ 128
MAX_CUTSCENE_STRINGS equ 32
CUTSCENE_STRING_BYTES equ 96
CUTSCENE_MAX_DURATION equ 3600
CUTSCENE_AUTOPLAY equ 1
OP_END equ 0
OP_WAIT equ 1
OP_MOVE_CAM_TO equ 2
OP_PAN_CAM_TO equ 3
OP_SHOW_SUBTITLE equ 4
OP_HIDE_SUBTITLE equ 5
OP_PLAY_SOUND equ 6
OP_FADE_SCREEN equ 7
OP_CHANGE_SUBLEVEL equ 8
CutsceneEvent STRUCT
tickTimestamp dw 0
opCode db 0
param8 db 0
paramA dd 0
paramB dd 0
dataId dd 0
CutsceneEvent ENDS