# ============================================================================ # arena.ludic — a game that links the Ludic shared library next to it. # # ludicc examples/library/combat.ludic --shared -o build/libcombat.dylib # ludicc examples/library/arena.ludic -o build/arena -Lbuild -lcombat # # `extern fn` binds a name to a symbol resolved at link time. The library the # symbols come from happens to be written in Ludic, but nothing here depends on # that: the same declaration binds a C, Rust or Zig library just as well. This # is how Ludic reaches the outside world without a C shim. # ============================================================================ program Arena { extern function damage(attack: int, armour: int, roll: int) -> int = "damage" extern function hits_to_kill(hp: int, attack: int, armour: int) -> int = "hits_to_kill" extern function xp_for(level: int, kills: int) -> int = "xp_for" property Fighter { hp: int = 30, attack: int = 9, armour: int = 2 } handler Boot phase Start { spawn Hero { Fighter { hp: 40, attack: 12, armour: 3 } } spawn Orc { Fighter { hp: 24, attack: 7, armour: 1 } } } handler Fight phase Update { for (f) in query [Fighter] { print(damage(f.attack, f.armour, 0)) print(damage(f.attack, f.armour, 20)) print(hits_to_kill(f.hp, f.attack, f.armour)) } print(xp_for(3, 4)) quit() } }