/** * HOLO VM Bytecode Format (.holob) * * Binary format for compiled HoloScript programs. * Magic: "HOLB" | Version: u16 | Flags: u16 * * Sections: * - String Table: interned strings * - Asset Table: referenced assets (glTF, textures, audio) * - Trait Table: trait definitions and dependencies * - Code Section: function bytecode * - Init Section: entity spawn instructions * - Event Table: event→handler mappings */ import { HoloOpCode } from './opcodes'; /** File magic bytes: "HOLB" */ export declare const HOLOB_MAGIC = 1213156418; export declare const HOLOB_VERSION = 1; export declare enum HolobFlags { None = 0, Debug = 1, SIMD = 2, Threads = 4, Networking = 8, Physics = 16 } export type HoloOperand = number | string | boolean | number[] | null; export interface HoloInstruction { /** The opcode to execute */ opcode: HoloOpCode; /** Variable-length operands */ operands: HoloOperand[]; } export interface HoloFunction { /** Index into string table */ nameIndex: number; /** Bytecode instructions */ instructions: HoloInstruction[]; /** Number of local registers used */ registerCount: number; /** Number of parameters */ paramCount: number; } export interface HoloEntityDef { /** Index into string table for entity name */ nameIndex: number; /** Archetype identifier */ archetype: number; /** Initial component data as key-value pairs */ components: HoloComponentData[]; /** Parent entity index (-1 for root) */ parentIndex: number; } export interface HoloComponentData { /** Component type ID */ componentType: number; /** Serialized initial values */ values: Record; } export interface HoloTraitDef { /** Index into string table for trait name */ nameIndex: number; /** Indices of trait dependencies */ dependencies: number[]; /** Init function index (-1 if none) */ initFunctionIndex: number; /** Event handlers: event_type → function index */ eventHandlers: Map; } export declare enum AssetType { Mesh = 1, Texture = 2, Audio = 3, Animation = 4, GaussianSplat = 5, Font = 6, Script = 7 } export interface HoloAssetRef { /** Index into string table for asset URI */ uriIndex: number; /** Asset type */ type: AssetType; } export interface HoloEventBinding { /** Event type identifier */ eventType: number; /** Function index to call when event fires */ handlerFunctionIndex: number; /** Optional entity filter (-1 for global) */ entityFilter: number; } export interface HoloBytecode { /** File magic — must be HOLOB_MAGIC */ magic: number; /** Format version */ version: number; /** Feature flags */ flags: HolobFlags; /** Interned string table */ strings: string[]; /** Asset references */ assets: HoloAssetRef[]; /** Trait definitions */ traits: HoloTraitDef[]; /** Function bytecode */ functions: HoloFunction[]; /** Entity definitions (init section) */ entities: HoloEntityDef[]; /** Event→handler bindings */ events: HoloEventBinding[]; /** Optional: source map for debugging */ sourceMap?: HoloSourceMap; } export interface HoloSourceMapping { /** Function index */ functionIndex: number; /** Instruction index within function */ instructionIndex: number; /** Original source file (string table index) */ sourceFileIndex: number; /** Line number in source */ line: number; /** Column number in source */ column: number; } export interface HoloSourceMap { mappings: HoloSourceMapping[]; } export declare class HoloBytecodeBuilder { private strings; private stringList; private assets; private traits; private functions; private entities; private events; private flags; /** * Intern a string and return its index */ internString(str: string): number; /** * Add a feature flag */ addFlag(flag: HolobFlags): this; /** * Add an asset reference */ addAsset(uri: string, type: AssetType): number; /** * Add a trait definition */ addTrait(name: string, deps?: number[], initFunc?: number): number; /** * Begin building a function */ addFunction(name: string, paramCount?: number): HoloFunctionBuilder; /** * Add an entity definition */ addEntity(name: string, archetype?: number, parentIndex?: number): number; /** * Add component data to an entity */ addComponentToEntity(entityIdx: number, componentType: number, values: Record): this; /** * Add an event binding */ addEvent(eventType: number, handlerFunctionIndex: number, entityFilter?: number): this; /** * Build the final bytecode module */ build(): HoloBytecode; } export declare class HoloFunctionBuilder { private func; private parent; readonly index: number; constructor(func: HoloFunction, parent: HoloBytecodeBuilder, index: number); private emit; spawn(entityType: number, name: string): this; despawn(entityId: number): this; setComponent(entityId: number, compType: number, ...data: HoloOperand[]): this; getComponent(entityId: number, compType: number): this; setParent(childId: number, parentId: number): this; query(archetypeMask: number): this; transform(entityId: number, x: number, y: number, z: number): this; translate(entityId: number, dx: number, dy: number, dz: number): this; rotate(entityId: number, qx: number, qy: number, qz: number, qw: number): this; lookAt(entityId: number, tx: number, ty: number, tz: number): this; raycast(ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, maxDist: number): this; addRigidbody(entityId: number, mass: number, bodyType: number): this; applyForce(entityId: number, fx: number, fy: number, fz: number): this; applyImpulse(entityId: number, ix: number, iy: number, iz: number): this; setGravity(gx: number, gy: number, gz: number): this; physicsStep(dt: number): this; setGeometry(entityId: number, geoType: number): this; setMaterial(entityId: number, ...desc: HoloOperand[]): this; setVisible(entityId: number, visible: boolean): this; setLight(entityId: number, lightType: number, ...params: HoloOperand[]): this; setAnimation(entityId: number, animId: number): this; applyTrait(entityId: number, traitId: number): this; removeTrait(entityId: number, traitId: number): this; emitEvent(eventType: number, ...payload: HoloOperand[]): this; onEvent(eventType: number, handlerOffset: number): this; loadAsset(uri: string, assetType: number): this; playAudio(soundId: number, x: number, y: number, z: number): this; netSync(entityId: number, syncTier: number): this; nop(): this; jump(offset: number): this; jumpIf(offset: number): this; call(funcIdx: number): this; ret(): this; push(value: HoloOperand): this; pop(): this; store(registerIdx: number): this; load(registerIdx: number): this; halt(): this; yieldTick(): this; timer(delayMs: number, handlerOffset: number): this; add(): this; sub(): this; mul(): this; div(): this; cmpEq(): this; cmpLt(): this; cmpGt(): this; not(): this; agentInvoke(agentId: number, actionIdx: number): this; agentRead(agentId: number, fieldIdx: number): this; dialogShow(npcId: number, dialogTreeId: number): this; questUpdate(questId: number, state: number): this; /** Get the current instruction count (useful for jump targets) */ get instructionCount(): number; } //# sourceMappingURL=bytecode.d.ts.map