Firedancer
v0.1.3
Language for defining bullet-hell patterns.
GitHub repo
SELECT EXAMPLE ...
---- basics ------------
control flow
move
move (2)
shot speed
shot direction
shot position
---- features ------------
nway / radial / line
random
aim
parallel
fire with pattern
bind position
vanish
variables
sin / cos
transform
---- examples ------------
nway whip
laundry
pods
static geometric
flower
seeds
Script
[ shot.speed.set(3), parallel([ [ loop([ radial(2, nWay(7, { angle: 30 })), shot.direction.add(30), wait(15) ]) ], [ shot.direction.add(90), loop([ radial(2, line(7, { shotSpeedChange: 1.2 })), shot.direction.add(30), wait(15) ]) ] ]) ];
Virtual assembly code
(compiled from the above)
[ASSEMBLY CODE] ID: 0, name: (anonymous) increase 1.5707963267948966 -> shot_direction label 5 let ivar["__loopCnt"] store 2 -> ivar["__loopCnt"] let fvar["__sDirChgRt"] store 3.141592653589793 -> fvar["__sDirChgRt"] push 2 -> s label 8 countdown goto label 9 let ivar["__loopCnt"] store 6 -> ivar["__loopCnt"] let fvar["__sSpdBuf"] get shot_speed -> rf store rf -> fvar["__sSpdBuf"] let fvar["__sSpdChgRt"] store 0.19999999999999998 -> fvar["__sSpdChgRt"] push 6 -> s label 6 countdown goto label 7 fire load fvar["__sSpdChgRt"] -> rf increase rf -> shot_speed goto label 6 label 7 fire load fvar["__sSpdBuf"] -> rf set rf -> shot_speed free fvar["__sSpdChgRt"] free fvar["__sSpdBuf"] free ivar["__loopCnt"] load fvar["__sDirChgRt"] -> rf increase rf -> shot_direction goto label 8 label 9 free fvar["__sDirChgRt"] free ivar["__loopCnt"] increase 0.5235987755982988 -> shot_direction break break break break break break break break break break break break break break break goto label 5 [ASSEMBLY CODE] ID: 1, name: main set 3.0 -> shot_speed use thread 0 -> s label 0 let ivar["__loopCnt"] store 2 -> ivar["__loopCnt"] let fvar["__sDirChgRt"] store 3.141592653589793 -> fvar["__sDirChgRt"] push 2 -> s label 3 countdown goto label 4 let ivar["__loopCnt"] store 6 -> ivar["__loopCnt"] let fvar["__sDirBuf"] get shot_direction -> rf store rf -> fvar["__sDirBuf"] increase -0.2617993877991494 -> shot_direction let fvar["__sDirChgRt"] store 0.08726646259971647 -> fvar["__sDirChgRt"] push 6 -> s label 1 countdown goto label 2 fire load fvar["__sDirChgRt"] -> rf increase rf -> shot_direction goto label 1 label 2 fire load fvar["__sDirBuf"] -> rf set rf -> shot_direction free fvar["__sDirChgRt"] free fvar["__sDirBuf"] free ivar["__loopCnt"] load fvar["__sDirChgRt"] -> rf increase rf -> shot_direction goto label 3 label 4 free fvar["__sDirChgRt"] free ivar["__loopCnt"] increase 0.5235987755982988 -> shot_direction break break break break break break break break break break break break break break break goto label 0 await thread
Program for
Firedancer VM
(assembled from the above)
{ "nameIdMap": { "main": 1 }, "programTable": [ "s184:%BgtRFT7Ifk:EwAAAAACAAAAFQQAAAAYLURU%yEJQBcCAAAAA20AAAATDAAAAAYAAACKFhAAAAAVGAAAAJmZmZmZmck:FwYAAAADWwAAACMSGAAAAPUCSgAAACMSEAAAAPQSBAAAAPoCJAAAAPhlcy04UsHgPwAAAAAAAAAAAAAAAAAAAAIJAAAA", "s204:8gAAAAAAAAhABQAAAAATAAAAAAIAAAAVBAAAABgtRFT7IQlAFwIAAAADewAAABMMAAAABgAAAIsWEAAAAPhlcy04UsHQvxUYAAAAh0TnShhXtj8XBgAAAANpAAAAIxIYAAAA%gJYAAAAIxIQAAAA%RIEAAAA%gIpAAAA%GVzLThSweA:AAAAAAAAAAAAAAAAAAAAAg4AAAAG" ], "vmVersion": "0.1.0" }