マイクロスレッド使わなくても、
task::exec() {
switch(state) {
case TITLE:
条件満たしたらstate=STAGE1;
case STAGE1:
case STAGE2:
}
}
こんなのでいいんじゃないの?