KaboomCtx {
    burp()
    loadRoot(path?: string) => string
    loadSprite(id: string, src: SpriteLoadSrc, conf?: SpriteLoadConf) => Promise<SpriteData>
    loadSound(id: string, src: string) => Promise<SoundData>
    loadFont(id: string, src: string, gw: number, gh: number, chars?: string) => Promise<FontData>
    loadShader(name: string, vert?: string, frag?: string, isUrl?: boolean) => Promise<ShaderData>
    addLoader(l: Promise<T>)
    width() => number
    height() => number
    dt() => number
    time() => number
    screenshot() => string
    focused() => boolean
    focus()
    ready(cb: () => void)
    add(comps: Comp[]) => GameObj
    readd(obj: GameObj) => GameObj
    destroy(obj: GameObj)
    destroyAll(tag: string)
    get(tag?: string) => GameObj[]
    every(t: string, f: (obj: GameObj) => T) => T[]
    every(f: (obj: GameObj) => T) => T[]
    revery(t: string, f: (obj: GameObj) => T) => T[]
    revery(f: (obj: GameObj) => T) => T[]
    layers(list: string[], def?: string)
    on(event: string, tag: string, cb: (obj: GameObj) => void) => EventCanceller
    action(tag: string, cb: (obj: GameObj) => void) => EventCanceller
    action(cb: () => void) => EventCanceller
    render(tag: string, cb: (obj: GameObj) => void) => EventCanceller
    render(cb: () => void) => EventCanceller
    collides(t1: string, t2: string, f: (a: GameObj, b: GameObj) => void) => EventCanceller
    overlaps(t1: string, t2: string, f: (a: GameObj, b: GameObj) => void) => EventCanceller
    clicks(tag: string, f: (a: GameObj) => void) => EventCanceller
    camPos(p: Vec2) => Vec2
    camScale(p: Vec2) => Vec2
    camRot(a: number) => number
    camShake(n: number)
    camIgnore(layers: string[])
    gravity(g: number) => number
    sync(obj: GameObj)
    recv(ty: string, handler: MsgHandler)
    send(ty: string, data: any)
    pos(x: number, y: number) => PosComp
    pos(xy: number) => PosComp
    pos(p: Vec2) => PosComp
    pos() => PosComp
    scale(x: number, y: number) => ScaleComp
    scale(xy: number) => ScaleComp
    scale(p: Vec2) => ScaleComp
    scale() => ScaleComp
    rotate(a: number) => RotateComp
    color(r: number, g: number, b: number, a?: number) => ColorComp
    color(c: Color) => ColorComp
    color() => ColorComp
    origin(o: Origin | Vec2) => OriginComp
    layer(l: string) => LayerComp
    area(p1: Vec2, p2: Vec2) => AreaComp
    sprite(id: string, conf?: SpriteCompConf) => SpriteComp
    text(t: string, size?: number, conf?: TextCompConf) => TextComp
    rect(w: number, h: number, conf?: RectCompConf) => RectComp
    solid() => SolidComp
    body(conf?: BodyCompConf) => BodyComp
    shader(id: string) => ShaderComp
    cursor(c?: string)
    mousePos(layer?: string) => Vec2
    keyDown(k: string, f: () => void) => EventCanceller
    keyPress(k: string, f: () => void) => EventCanceller
    keyPressRep(k: string, f: () => void) => EventCanceller
    keyRelease(k: string, f: () => void) => EventCanceller
    charInput(f: (ch: string) => void) => EventCanceller
    mouseDown(f: () => void) => EventCanceller
    mouseClick(f: () => void) => EventCanceller
    mouseRelease(f: () => void) => EventCanceller
    keyIsDown(k: string) => boolean
    keyIsPressed(k: string) => boolean
    keyIsPressedRep(k: string) => boolean
    keyIsReleased(k: string) => boolean
    mouseIsDown() => boolean
    mouseIsClicked() => boolean
    mouseIsReleased() => boolean
    loop(t: number, f: () => void) => EventCanceller
    wait(t: number, f?: () => void) => Promise<void>
    play(id: string, conf?: AudioPlayConf) => AudioPlay
    volume(v?: number) => number
    makeRng(seed: number) => RNG
    rand() => number
    rand(n: T) => T
    rand(a: T, b: T) => T
    randSeed(seed: number) => number
    vec2(x: number, y: number) => Vec2
    vec2(p: Vec2) => Vec2
    vec2(xy: number) => Vec2
    vec2() => Vec2
    rgb(r: number, g: number, b: number) => Color
    rgba(r: number, g: number, b: number, a: number) => Color
    quad(x: number, y: number, w: number, h: number) => Quad
    choose(lst: T[]) => T
    chance(p: number) => boolean
    lerp(from: number, to: number, t: number) => number
    map(v: number, l1: number, h1: number, l2: number, h2: number) => number
    mapc(v: number, l1: number, h1: number, l2: number, h2: number) => number
    wave(lo: number, hi: number, t: number) => number
    deg2rad(deg: number) => number
    rad2deg(rad: number) => number
    drawSprite(id: string | SpriteData, conf?: DrawSpriteConf)
    drawText(txt: string, conf?: )
    drawRect(pos: Vec2, w: number, h: number, conf?: DrawRectConf)
    drawRectStroke(pos: Vec2, w: number, h: number, conf?: DrawRectStrokeConf)
    drawLine(p1: Vec2, p2: Vec2, conf?: DrawLineConf)
    drawTri(p1: Vec2, p2: Vec2, p3: Vec2, conf?: DrawTriConf)
    debug: Debug
    addLevel(map: string[], conf: LevelConf) => Level
    addSprite(name: string, conf?: AddSpriteConf) => GameObj
    addRect(w: number, h: number, conf?: AddRectConf) => GameObj
    addText(txt: string, size: number, props: AddTextConf) => GameObj
    scene(id: SceneID, def: SceneDef)
    go(id: SceneID, args: ...)
    getData(key: string, def?: any) => any
    setData(key: string, data: any)
}