Volver a BLOX ESL
Demo 1 de 3

Demo de juego — Godot

Godot 4.6 + GDExtension + blox_core.dll. La demo carga player.blox, ejecuta FUNCION PRINCIPAL, llama update(dt, entrada) por frame y aplica la TABLA devuelta por BLOX.

Nivel 1 de la demo

Assets de la demo

jugador
jugador
jugador →
jugador →
enemigo
enemigo
gárgola
gárgola
gárgola viva
gárgola viva
poción
poción
gema amarilla
gema amarilla
gema cian
gema cian
gema roja
gema roja
gema púrpura
gema púrpura
gema negra
gema negra
palanca
palanca
puerta
puerta
magia
magia
veneno
veneno
game over
game over

Juego demo

1

Nivel 1

  • • Poción sobre un pilar que otorga magia al jugador.
  • • Gárgolas que despiertan cerca del jugador y disparan veneno.
  • • Disparo del jugador cuando tiene magia; impacta y las devuelve a piedra.
  • • Transición al nivel 2 al derrotar todas las gárgolas y avanzar al borde.
2

Nivel 2

  • • Gemas coloridas (amarilla, cian, roja, púrpura) para recoger.
  • • Gemas negras opcionales que despiertan una amenaza adicional y activan el segundo enemigo.
  • • Palanca que abre la puerta al recoger todas las gemas requeridas.
  • • Enemigos que persiguen al jugador con lógica escrita en BLOX.
  • • Victoria al cruzar la puerta abierta.

API y snippets

Ejemplos reales tomados de main.gd y player.blox.

1. Godot carga BLOX y llama update()

main.gdgdscript
var blox := BloxRuntime.new()

if not blox.is_ready():
    push_error(blox.get_last_error())
    return

var script_path := ProjectSettings.globalize_path("res://scripts/player.blox")
blox.load_file(script_path)
blox.run_main()
blox.call_function("init")

# En el _process(delta):
blox.set_host_state(make_host_state())
var state = blox.call_function(
    "update",
    [delta, make_input_state(mode, dir.x, dir.y, attack)]
)
apply_entity_states(state)

2. BLOX enruta update() entre niveles

player.bloxblox
FUNCION update(dt, entrada)
INICIO
    TABLA estado_juego_iniciado, estado_nivel_actual
    NUMERICO nivel_actual
    LOGICO juego_iniciado

    estado_juego_iniciado = GODOT_ESTADO("juego_iniciado")
    estado_nivel_actual   = GODOT_ESTADO("nivel_actual")

    nivel_actual = 1
    juego_iniciado = estado_juego_iniciado[1].logico

    SI (juego_iniciado == VERDADERO) ENTONCES
        nivel_actual = estado_nivel_actual[1].numero
    FIN_SI

    SI (nivel_actual == 1) ENTONCES
        RETORNAR update_nivel_1(dt, entrada)
    FIN_SI

    SI (nivel_actual == 2) ENTONCES
        RETORNAR update_nivel_2(dt, entrada)
    FIN_SI

    RETORNAR update_nivel_1(dt, entrada)
FINAL_FUNCION

3. BLOX devuelve estados al host

player.bloxblox
AGREGAR(estados, {id = "__sonido",  sonido = "player_hit"})

SI (jugador[1].vida < 1) ENTONCES
    game_over = VERDADERO
    AGREGAR(estados, {id = "__sonido",  sonido = "game_over"})
    AGREGAR(estados, {id = "__mensaje", texto = "Sin vidas.", visible = VERDADERO})
FIN_SI

BLOX no reproduce audio ni dibuja: pide al host que lo haga. El host aplica el cambio en su propio motor.

Superficie API pública

BloxVMBloxRuntimeblox_vm_create()blox_vm_load_file()blox_vm_run_main()blox_vm_call()blox_vm_register_native()load_file()run_main()call_function()set_host_state()get_last_error()GODOT_CREAR_ENTIDAD()GODOT_ESTADO()TABLABloxValue
Resumen
El motor Godot mantiene render, audio y escena. Toda la lógica de gameplay (movimiento, disparo, transición de nivel, victoria/derrota) vive en player.bloxy se puede editar sin recompilar la extensión C.

Explora las otras integraciones