+float time;
+entity self;
+
+.void() think;
+.float nextthink;
+.float frame;
+
+void stprint(string fun) {
+ print(fun,
+ ", .frame=", ftos(self.frame),
+ ", .nextthink=", ftos(self.nextthink),
+ " (now: ", ftos(time), ")\n");
+}
+
+void st1() = [1, st2] { stprint("st1"); }
+void st2() = [2, st3] { stprint("st2"); }
+void st3() = [0, st1] { stprint("st3"); }
+
+void main() {
+ entity ea = spawn();
+ entity eb = spawn();
+
+ time = 10;
+ self = ea;
+
+ self.think = st1;
+ self.nextthink = time;
+ self.frame = 100;
+
+ self.think();
+ time = 11;
+ self.think();
+ time = 12;
+ self.think();
+ time = 13;
+ self.think();
+ time = 14;
+ self.think();
+};