; ============================================================================== ; 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 ; 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