Scripts read these with (input 'var1 default). Unset vars use the default.
How many paths it keeps each tick and how far ahead it looks for bullets. More finds more, slower.
bs servebs serve my-patterns/ and open ?serve (or ?serve=host:port): the folder's files show up under Local files, and saving one in your own editor reloads it here, as Ctrl+Enter does.defn def fn(defn ring [n :speed 2 :kind 'bullet] …), called as (ring 12 :speed 3). Keyword parameters come last, each with a default.& opts(fire :dir d & opts).[a b] patternslet, loop, doseq and parameters: (doseq [[n speed] rows] …), _ to skip one.let if when cond do and ordotimes forever loop recur(dotimes [i n] …), (loop [a 0] (recur …))doseq(doseq [x xs] …) runs the body for each item, and may wait.wait wait-until(wait 0.5) is half a tick.par race untilfire(fire :dir d :speed s :kind 'k :run f), all optional.:at :tags :attach:at [x y] spawn offset, :tags for cancel, :attach to the parent.:motion :delay :cancellable:motion 'polar or 'wave (:spin :amp :period), :delay ticks before it can hit.mirror rotate offset speed-scale(mirror (fan …))cancel move-to(cancel :tags [...]) turns bullets into items; (move-to x y :over n)target-x target-y target-count(aim :target i), (aim :lead s).by-diff(by-diff easy normal hard lunatic), from the settings menu.beat wait-beats(wait-beats 1) waits for the next beat; set the clock in settings. Without one, (wait-beats 1 30) waits 30 ticks and (beat 0) is 0.drift-x drift-yaccel.vanish emit(emit 'name) tells the host.change-speed change-dir(change-speed 0 :over 40) tweens in the background.turn accel(turn rate :for n), (accel ax ay :over n)aim heading speed x y agelast-dir last-speed rand rank(last-dir d) before one), (rand a b), difficulty.tick(tick) is the tick the code runs in.laser(laser :dir :length :width :warn :active :fade :turn :kind :attach)curvy-laser:curve 'head 'wave 'polar, :speed :turn :amplitude :period :spin :segments :windowlist nth count first rest last[1 2 3] is (list 1 2 3). Lists never change.conj concat reverse empty? range(range 0 360 30).map filter reduce rand-nth(map (fn [x] …) xs); the function may not wait.ring fan spread(ring n :dir 0), (fan n :dir (aim) :step 15), (spread n :dir (aim) :width 60)polygon rose(polygon sides :per-side 5 :dir 90), (rose n :petals 4 :dir 0)stream burst(stream n :dir (aim) :gap 4), (burst n :dir (aim) :width 60 :speed [1 3]):speed (2) and :kind, and pass any other key fire takes on to every shot: (ring 12 :tags 'soft).+ - * / mod inc dec absmin max floor ceil round truncsqrt pow sin cos tan atan2lerp clamp < > = not= notinput(input 'var1) to (input 'var8), set from the settings menu.field-w field-h(input 'field-w) and (input 'field-h) give the field size.main(aim)rank(input 'var1)var8, from the settings menu.(input 'field-w)(input 'field-w) and (input 'field-h) give the field size.by-diff) and the beat clock (beat, wait-beats) are set there. The beat clock is off until you turn it on, so give beat and wait-beats a default.emitbs serve running and ?serve in the address, the files on disk are the copies that count: saving one reloads it here, and replaces any edits made here.Any symbol works as a kind. Unknown ones draw as 'bullet; 'emitter draws nothing. Click to insert.