I'm posting those options without realizing that #2 is harder to create than the other two

.
My idea for #1 is: the ending scenes is arranged like this:
Code:
level data/levels/final.txt
branch End1
scene data/scenes/end1.txt
level data/levels/goend.txt
branch End2
level data/levels/goend.txt
branch End3
level data/levels/goend.txt
branch FEnd
scene data/scenes/end.txt # this is the last entry in this set
Goend is
quick level which brings player to FEnd branch. The idea is after one of those scenes is played, player will skip the other scenes and go to end.txt scene.
There are couple ways to choose which scene to play or rather which branch to go to after final level is completed. I chose to use spawnscript such as this:
EndSelect.c
C:
void main()
{
void P1 = getplayerproperty(0, "entity");
void P2 = getplayerproperty(1, "entity");
void Play;
if(P1){
Play = P1;
} else if(P2){
Play = P2;
}
if(Play){
void Model = getentityproperty(Play, "defaultname");
if(Model == "Hero3"){
jumptobranch("End3",1);
} else if(Model == "Hero2"){
jumptobranch("End2",1);
} else {
jumptobranch("End1",1);
}
}
}
This script is saved in /scripts folder and declared like this after boss' death:
Code:
spawn flash
spawnscript data/scripts/EndSelect.c
coords -160 220
at 0
I'm spawning the flash offscreen so no one could see it when it is spawned but the script would still be run. The script could be declared on any spawn actually.
Speaking of script, the script finds one active player from available players. If both players are active, player 1 is selected. If only one player is active, he/she will be selected.
Then his/her name is checked to pick which branch to go to next or rather which scene to play next.
Option #3 needs some modification of this script.
Option #2 is rather hard to make, I won't tell it right now.
That being said, this method could be modified to make character specific branches.