Skip to content

Loops

orbit controls iteration in AbySS. Pair it with resume and eject for fine-grained flow.

orbit (i = 0..5) {
unveil(i);
}

0..5 is half-open; swap in ..= for inclusive bounds.

orbit (i = 0..=10) {
unveil(i);
}

Omit bounds to loop forever and break with eject.

forge morph i: arcana = 0;
orbit {
oracle (i == 100) {
(boon) => eject; // break
};
i += 1;
};
orbit (i = 0..3, j = 0..3) {
unveil(i, " ", j);
}
  • resume <loop-var> skips to the next iteration of the named loop.
  • eject <loop-var> breaks out of the specified loop.
orbit (i = 0..3) {
orbit (j = 0..3) {
oracle (i == j) {
(boon) => resume j;
};
unveil(i, " ", j);
}
}
orbit (i = 0..3) {
orbit (j = 0..3) {
unveil(i, " ", j);
oracle (i == 2) {
(boon) => eject i;
};
}
}

resume and eject understand nesting, so you maintain readable flow even in complex rituals.