Hmm, not sure if you got it, but my explanation kind of sucks so yeah.
I'm really tired so I might not be able to explain too well even now. I had a talk with Naut and we figured that we could use pretty much all of the parameters of CreateEnemy as other things by just going let stage_number = GetSpeed; in Initialize, because the very limited default movements might or might not get scrapped anyways. This means we aren't really limited to one argument, as long as we use numbers.
The variable SMALL_BLUE is equivalent to "ijiyatsu/script_enm/small_blue.txt" or something similar; it's the pathname to the spawned enemy. When using CreateEnemy, SMALL_BLUE will be used in place of the actual filename. In the DrawLoop of that enemy it heads over to the combined drawing script and calls the DrawFairy(type) function, which has something like
SetTexture(csd~"enemypictures.png");
alternative(type)
case(SMALL_RED){SetGraphicRect(etc);}
case(SMALL_BLUE){SetGraphicRect(etc);}
case(LARGE_RED){SetGraphicRect(etc);}
DrawGraphic(GetX,GetY);
The stage number isn't actually needed, but it will make spawning lots of enemies a lot easier. In Initialize there's another alternative that sets the enemy pattern behaviour, but going through every separate bullet behaviour in the entire game is just silly. Instead, you cut it into stage-long chunks. And as for the movement, it's pretty much the same. Every enemy's movement will just be defined in another script entirely instead of in the enemy's script, and it'll use the stage number too. In the stage script you have something similar to
CreateEnemyFromScript(SMALL_RED,etcetcetcetce, enemy_line); enemy_line++;
CreateEnemyFromScript(SMALL_RED,etcetcetcetce, enemy_line); enemy_line++;
WaitForZeroEnemy;
CreateEnemyFromScript(LARGE_BLUE,etcetcetcetce, enemy_line); enemy_line++;
Note that the enemy_line is really just static, so at the start of each stage you keep it at the last enemy_line of the stage before. Now there are no repeating movements.
Then the enemy's Initialize will have...
let stage_number = GetSpeed;
let pattern_behave = GetAngle;
let enemy_move = GetArgument;
@Initialize{
alternative(stage_number)
case(1){ //stage 1 enemies
alternative(bullet_behave)
case(0){mainTask10;}
case(1){mainTask11;}
case(2){mainTask12;}
alternative(enemy_move)
case(0){moveTask10;}
case(1){moveTask11;}
case(2){moveTask12;}
}
case(2){ //stage 2 enemies
alternative(bullet_behave)
case(0){mainTask20;}
case(1){mainTask21;}
case(2){mainTask22;}
alternative(enemy_move)
case(3){moveTask20;}
case(4){moveTask21;}
case(5){moveTask22;}
}
case(3){ //stage 3 enemies
alternative(bullet_behave)
case(0){mainTask30;}
case(1){mainTask31;}
case(2){mainTask32;}
alternative(enemy_move)
case(6){moveTask30;}
case(7){moveTask31;}
case(8){moveTask32;}
}
}
And stuff. I'm tired.
As for Nobu, that wasn't really what we're talking about, but yes, I think we'll try to do that; it's a pretty important feature for Touhou. The only thing that means is that the music will have to be completely finished before we can map out the stages. im dum