Update Multistage2026 - Development thread

Hi Matias (and Gattispilot ;) )

So here are the results of my tests with 2 groups of Boosters :
  • 2 boosters from my Ariane 5 rocket
  • 4 boosters from my Ariane 6 rocket
(I've made a 6.6 Ariane 6 rocket.... ) 🤣

Just a clarification regarding the Ariane 6 4 boosters :
N=1 because there's 1 mesh with all 4 boosters.
When separation => 1 mesh with all 4 boosters (vesselbuilder vessel)
with :
module=..\Kourou_Rockets\Ariane6\A6_Boosters64
name=Boosters)
Then this new vesselbuilder vessel => 4 CHILDS (1 booster each) and the original single mesh (with all 4 boosters) disappears.

For the 2 others boosters from Ariane 5, I use the "stage" system from multistage.

Ok ? Here we go 🫔

TEST #1 (1 group with the 4 Ariane6 boosters as single booster)

[BOOSTER_1] ; 4 Boosters P120C from Ariane 6 ===
N=1
meshname=Kourou_Rockets\Ariane6\A6_Booster-14
off=(0,0,5)
height=25.32
diameter=5.16
emptymass=500000
fuelmass=140000
thrust=20000000
burndelay=2
burntime=137
eng_1=(3.799,-3.800,-1.000)
eng_2=(-3.799,3.800,-1.000)
eng_3=(3.799,3.800,-1.000)
eng_4=(-3.799,-3.800,-1.000)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(0,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8
module=..\Kourou_Rockets\Ariane6\A6_Boosters64
name=Boosters

test01.jpg

Normal operation


TEST #2 (1 group with the 2 Ariane5 boosters)


[BOOSTER_1] ; 2 Boosters from Ariane 5 rocket ===
N=2
meshname=Kourou_Rockets\Ariane5\A5_Booster
off=(-5,0,25)
height=25.32
diameter=5.16
angle=0
emptymass=500000
fuelmass=140000
thrust=20000000
burndelay=0
burntime=100
eng_1=(0,0,-16)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(-5,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8

test02.jpg

Normal operation again


TEST #3
Group 1 with the 2 Ariane5 boosters
Group 2 with the 4 Ariane6 boosters as single booster

[BOOSTER_1] ; 2 Boosters from Ariane 5 rocket ===
N=2
meshname=Kourou_Rockets\Ariane5\A5_Booster
off=(-5,0,25)
height=25.32
diameter=5.16
angle=0
emptymass=10
fuelmass=10
thrust=10
burndelay=0
burntime=100
eng_1=(0,0,-16)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(-5,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8

[BOOSTER_2] ; 4 Boosters P120C from Ariane 6 ===
N=1
meshname=Kourou_Rockets\Ariane6\A6_Booster-14
off=(0,0,5)
height=25.32
diameter=5.16
emptymass=500000
fuelmass=140000
thrust=20000000
burndelay=2
burntime=137
eng_1=(3.799,-3.800,-1.000)
eng_2=(-3.799,3.800,-1.000)
eng_3=(3.799,3.800,-1.000)
eng_4=(-3.799,-3.800,-1.000)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(0,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8
module=..\Kourou_Rockets\Ariane6\A6_Boosters64
name=Boosters

test03.jpg

Result:
Group 1: no exhaust and no pstream
Group 2: exhaust and pstream ok



TEST #4
Group 1 with the 4 Ariane6 boosters as single booster
Group 2 with the 2 Ariane5 boosters

[BOOSTER_1] ; 4 Boosters P120C from Ariane 6 ===
N=1
meshname=Kourou_Rockets\Ariane6\A6_Booster-14
off=(0,0,5)
height=25.32
diameter=5.16
emptymass=500000
fuelmass=140000
thrust=20000000

burndelay=2
burntime=137
eng_1=(3.799,-3.800,-1.000)
eng_2=(-3.799,3.800,-1.000)
eng_3=(3.799,3.800,-1.000)
eng_4=(-3.799,-3.800,-1.000)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(0,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8
module=..\Kourou_Rockets\Ariane6\A6_Boosters64
name=Boosters

[BOOSTER_2] ; 2 Boosters from Ariane 5 rocket ===
N=2
meshname=Kourou_Rockets\Ariane5\A5_Booster
off=(-5,0,25)
height=25.32
diameter=5.16
angle=0
emptymass=10
fuelmass=10
thrust=10

burndelay=0
burntime=100
eng_1=(0,0,-16)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(-5,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8

The rocket cannot lift off : the Thrust value of Booster_1 is not taken into account.
(and the Thrust value of Booster_2 is too small)



TEST #5
Group 1 with the 4 Ariane6 boosters as single booster
Group 2 with the 2 Ariane5 boosters
emptymass ; fuelmass ; thrust are modified

[BOOSTER_1] ; 4 Boosters P120C from Ariane 6 ===
N=1
meshname=Kourou_Rockets\Ariane6\A6_Booster-14
off=(0,0,5)
height=25.32
diameter=5.16
emptymass=10
fuelmass=10
thrust=10

burndelay=2
burntime=137
eng_1=(3.799,-3.800,-1.000)
eng_2=(-3.799,3.800,-1.000)
eng_3=(3.799,3.800,-1.000)
eng_4=(-3.799,-3.800,-1.000)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(0,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8
module=..\Kourou_Rockets\Ariane6\A6_Boosters64
name=Boosters

[BOOSTER_2] ; 2 Boosters from Ariane 5 rocket ===
N=2
meshname=Kourou_Rockets\Ariane5\A5_Booster
off=(-5,0,25)
height=25.32
diameter=5.16
angle=0
emptymass=500000
fuelmass=140000
thrust=20000000

burndelay=0
burntime=100
eng_1=(0,0,-16)
eng_diameter=3.5
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
eng_pstream1=booster
speed=(-5,0,0)
rot_speed=(0,0,0)
expbolts_pos=(0,0,20)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8

test05.jpg

Result :
The rocket can lift off, BUT still :
Group 1: no exhaust and no pstream
Group 2: exhaust and pstream ok


In conclusion:
The values "emptymass ; fuelmass ; thrust" of [BOOSTER_1] are not taken into account (only [BOOSTER_2] values).
eng_tex and eng_pstream1 of [BOOSTER_1] are not dysplayed (only these of [BOOSTER_2]
 
Hi Matias (and Gattispilot ;) )

So here are the results of my tests with 2 groups of Boosters :
  • 2 boosters from my Ariane 5 rocket
  • 4 boosters from my Ariane 6 rocket
(I've made a 6.6 Ariane 6 rocket.... ) 🤣

Just a clarification regarding the Ariane 6 4 boosters :
N=1 because there's 1 mesh with all 4 boosters.
When separation => 1 mesh with all 4 boosters (vesselbuilder vessel)
with :
module=..\Kourou_Rockets\Ariane6\A6_Boosters64
name=Boosters)
Then this new vesselbuilder vessel => 4 CHILDS (1 booster each) and the original single mesh (with all 4 boosters) disappears.

For the 2 others boosters from Ariane 5, I use the "stage" system from multistage.

Ok ? Here we go 🫔

TEST #1 (1 group with the 4 Ariane6 boosters as single booster)



View attachment 48551

Normal operation


TEST #2 (1 group with the 2 Ariane5 boosters)




View attachment 48552

Normal operation again


TEST #3
Group 1 with the 2 Ariane5 boosters
Group 2 with the 4 Ariane6 boosters as single booster



View attachment 48553

Result:
Group 1: no exhaust and no pstream
Group 2: exhaust and pstream ok



TEST #4
Group 1 with the 4 Ariane6 boosters as single booster
Group 2 with the 2 Ariane5 boosters



The rocket cannot lift off : the Thrust value of Booster_1 is not taken into account.
(and the Thrust value of Booster_2 is too small)



TEST #5
Group 1 with the 4 Ariane6 boosters as single booster
Group 2 with the 2 Ariane5 boosters
emptymass ; fuelmass ; thrust are modified



View attachment 48554

Result :
The rocket can lift off, BUT still :
Group 1: no exhaust and no pstream
Group 2: exhaust and pstream ok


In conclusion:
The values "emptymass ; fuelmass ; thrust" of [BOOSTER_1] are not taken into account (only [BOOSTER_2] values).
eng_tex and eng_pstream1 of [BOOSTER_1] are not dysplayed (only these of [BOOSTER_2]
This is very valuable information because I see the problem with the numbering persists.
I'm currently working on Linux to fix a bug in Multistage2026 that prevents the meshes from displaying correctly at launch. I have more diagnostic tools on Linux (Valgrind, for example). So, I'll sync the code with Windows and recompile it.

Once I've recompiled on Windows, I'll look into your case; things are starting to look promising.

I also wanted to let you know that I'm considering porting VesselBuilder to Linux to make even more add-ons available. Initially, I'd remove the configuration UI, and then add ImGui once everything is working.
 
This is very valuable information because I see the problem with the numbering persists.
I'm currently working on Linux to fix a bug in Multistage2026 that prevents the meshes from displaying correctly at launch. I have more diagnostic tools on Linux (Valgrind, for example). So, I'll sync the code with Windows and recompile it.

Once I've recompiled on Windows, I'll look into your case; things are starting to look promising.

I also wanted to let you know that I'm considering porting VesselBuilder to Linux to make even more add-ons available. Initially, I'd remove the configuration UI, and then add ImGui once everything is working.

So I trust in you, and again, take your time. :hailprobe:

Regarding Vesselbuilder, you're brave, because you're taking on a big project.
And here too, if you need a tester, I think I know this module well.
I've found a few (minor) bugs; I can tell you about them when the time comes.
I've made for myself a "doc" (I forget tips quickly) if you're interested, but it's in French.

One last thing : I'm still on Windows 7... :unsure: dinosaur but that doesn't seem to be a compatibility issue.
 
Hi Matias

Another small thing I noticed (again, nothing serious, minor) šŸ˜…

Just a reminder about my section [Stage_1]

[STAGE_1] ;=== Etage n°1 (LLPM H150) ou Principal (2/2) ===
meshname="Kourou_Rockets\Ariane6\A6_262_stage1"
off=(0,0,23)
height=38.500
diameter=5.560
emptymass=20000
fuelmass=45000
thrust=1500000
ignite_delay=0.001
burnTime=321
pitchthrust=50000
yawthrust=50000
rollthrust=20000
eng_1=(0,0,-20.0)
eng_diameter=3
eng_tex=Kourou_Rockets\Exaust\Exaustmomo_03
speed=(0,0,-3.5)
rot_speed=(0,0,0)
expbolts_pos=(0,0,40)
expbolts_pstream=Expbolts
expbolts_anticipation=0.8
module=..\Kourou_Rockets\Ariane6\A6_Stage1
name=Stage1

After the separation, the stage_1 should take the name "Stage1"
but it takes the one defined with the "module" command/line

test01.jpg

I don't remember if it did same with the multistage module for Orbiter 2016... I'll check...

Have a good day. :cheers:
 
Hi Matias

Another small thing I noticed (again, nothing serious, minor) šŸ˜…

Just a reminder about my section [Stage_1]



After the separation, the stage_1 should take the name "Stage1"
but it takes the one defined with the "module" command/line

View attachment 48562

I don't remember if it did same with the multistage module for Orbiter 2016... I'll check...

Have a good day. :cheers:
Well, I think the parser I tried to fix ended up doing black magic.
inexplicable.png
 
Hi Matias

Another small thing I noticed (again, nothing serious, minor) šŸ˜…

Just a reminder about my section [Stage_1]



After the separation, the stage_1 should take the name "Stage1"
but it takes the one defined with the "module" command/line

View attachment 48562

I don't remember if it did same with the multistage module for Orbiter 2016... I'll check...

Have a good day. :cheers:

After a little investigation, I found the reason for the vessel name: it's using the mesh name.

I'm almost certain the same thing was in Multistage2015; I don't recall adding that feature myself. In fact, I always just adapted the Multistage2015 source code because I'm sure Fred18 did a great job. The only things I added were SimpleINI and some temporary debug logs.
I rewrote some parts from scratch, but always trying to replicate the original functionality.

C++:
case TSTAGE:

        GetMeshOffset(stage->at(current).msh_idh, ofs);
        vel = _V(stage->at(current).speed.x, stage->at(current).speed.y, stage->at(current).speed.z);
        Local2Rel(ofs, vs.rpos);
        GlobalRot(vel, rofs);
        vs.rvel.x = rvel.x + rofs.x;
        vs.rvel.y = rvel.y + rofs.y;
        vs.rvel.z = rvel.z + rofs.z;
        vs.vrot.x = vrot.x + stage->at(current).rot_speed.x;
        vs.vrot.y = vrot.y + stage->at(current).rot_speed.y;
        vs.vrot.z = vrot.z + stage->at(current).rot_speed.z;

        mn2 = stage->at(current).meshname;

        oapiCreateVesselEx(mn2.c_str(), stage->at(current).module.c_str(), &vs);

        oapiWriteLogV("%s: Stage n.%i jettisoned name: %s @%.3f", GetName(), current + 1, mn2.c_str(), MET);
        stage_ignition_time = MET;
        break;
 
Hi Matias (and Gattispilot ;) )

So here are the results of my tests with 2 groups of Boosters :
  • 2 boosters from my Ariane 5 rocket
  • 4 boosters from my Ariane 6 rocket
(I've made a 6.6 Ariane 6 rocket.... ) 🤣

Just a clarification regarding the Ariane 6 4 boosters :
N=1 because there's 1 mesh with all 4 boosters.
When separation => 1 mesh with all 4 boosters (vesselbuilder vessel)
with :
module=..\Kourou_Rockets\Ariane6\A6_Boosters64
name=Boosters)
Then this new vesselbuilder vessel => 4 CHILDS (1 booster each) and the original single mesh (with all 4 boosters) disappears.

For the 2 others boosters from Ariane 5, I use the "stage" system from multistage.

Ok ? Here we go 🫔

TEST #1 (1 group with the 4 Ariane6 boosters as single booster)



View attachment 48551

Normal operation


TEST #2 (1 group with the 2 Ariane5 boosters)




View attachment 48552

Normal operation again


TEST #3
Group 1 with the 2 Ariane5 boosters
Group 2 with the 4 Ariane6 boosters as single booster



View attachment 48553

Result:
Group 1: no exhaust and no pstream
Group 2: exhaust and pstream ok



TEST #4
Group 1 with the 4 Ariane6 boosters as single booster
Group 2 with the 2 Ariane5 boosters



The rocket cannot lift off : the Thrust value of Booster_1 is not taken into account.
(and the Thrust value of Booster_2 is too small)



TEST #5
Group 1 with the 4 Ariane6 boosters as single booster
Group 2 with the 2 Ariane5 boosters
emptymass ; fuelmass ; thrust are modified



View attachment 48554

Result :
The rocket can lift off, BUT still :
Group 1: no exhaust and no pstream
Group 2: exhaust and pstream ok


In conclusion:
The values "emptymass ; fuelmass ; thrust" of [BOOSTER_1] are not taken into account (only [BOOSTER_2] values).
eng_tex and eng_pstream1 of [BOOSTER_1] are not dysplayed (only these of [BOOSTER_2]
Could you share some Ariane 5 meshes and .cfg files with me (privately if you prefer)?
I may have made a mistake when changing the index of the BOOSTERS parser.
 
Could you share some Ariane 5 meshes and .cfg files with me (privately if you prefer)?
I may have made a mistake when changing the index of the BOOSTERS parser.
Hi Matias

Sure.
I'll try to make you a zip file with a "secial" 4-boosters configuration
with all the files needed to make it work.

I might not have time tonight, but at the latest tomorrow. 🐌
 
Hi Matias

So I made for you a special rocket with 3 groups of boosters. šŸ˜…
I only included the rocket itself (no pad or moving tower) for simplicity.

I'm having trouble setting the ejection of the four A6 boosters.
I haven't been able to adjust "speed=" and "rot_speed="
It's not important, we'll see later


Here is the special "Jacquesmomo" Ariane rocket !!! šŸ‘€ ā˜¢ļø

test.jpg

So, just to make it easier for you to find (or modify) the files :
  • configuration and guidance files (cfg, ini, txt) are in the folder ...\Config\TESTjm
  • The msh files are in the folder ...\Meshes\TESTjm are in the folder
  • The texture files (rocket elements and exhausts) are in the folder ...\Textures\TESTjm
In the guidance file, I've included a command for just two sounds.
The two sound files are in the folder ...\Config\TESTJm\Sounds

Almost all files are renamed "TESTjm.* ou An_Jm-<element>. (with n=number 4, 5 or 6) except for textures and sounds


You'll find a scn in \Scenarios folder : "TESTjm Multistage 2026"

I hope I haven't forgotten any files...:unsure:
 

Attachments

Hi Matias

So I made for you a special rocket with 3 groups of boosters. šŸ˜…
I only included the rocket itself (no pad or moving tower) for simplicity.

I'm having trouble setting the ejection of the four A6 boosters.
I haven't been able to adjust "speed=" and "rot_speed="
It's not important, we'll see later


Here is the special "Jacquesmomo" Ariane rocket !!! šŸ‘€ ā˜¢ļø

View attachment 48640

So, just to make it easier for you to find (or modify) the files :
  • configuration and guidance files (cfg, ini, txt) are in the folder ...\Config\TESTjm
  • The msh files are in the folder ...\Meshes\TESTjm are in the folder
  • The texture files (rocket elements and exhausts) are in the folder ...\Textures\TESTjm
In the guidance file, I've included a command for just two sounds.
The two sound files are in the folder ...\Config\TESTJm\Sounds

Almost all files are renamed "TESTjm.* ou An_Jm-<element>. (with n=number 4, 5 or 6) except for textures and sounds


You'll find a scn in \Scenarios folder : "TESTjm Multistage 2026"

I hope I haven't forgotten any files...:unsure:
I'm going to Windows right now to try it out.
Thank you so much for your work!
 
New Multistage2026 release for testing.

Changes to booster mesh loading. Now detects booster groups.

The error was introduced by me when I migrated the code and wrote new code to use the C++ STL.
 

Attachments

New Multistage2026 release for testing.
Changes to booster mesh loading. Now detects booster groups.
The error was introduced by me when I migrated the code and wrote new code to use the C++ STL.
Yes, I'll test now... :hailprobe:

Oh, sorry, I forgot one thing :
In the ini file, delete this line in the [FAIRING] section:
module=..\Kourou_Rockets\Ariane6\A6_268_FairingSL
name=Fairing
(you don't have the "module") :unsure:
 
Sorry, but... it's not quite right yet... 😢

WITH 3 BOOSTERS GROUPS :
1) Only the last booster displays eng_tex and eng_pstream1

2) During separation before end of combustion (manual with J) => CTD

3) If the rocket launches with the guidance file (P key)
  • a) If J is pressed before the end of combustion => CTD
  • b) If combustion is finished, none of the 3 groups separate automatically
and pressing J => CTD

WITH 2 BOOSTERS GROUPS : same

WITH 1 BOOSTERS GROUP : ok no issue
 
Sorry, but... it's not quite right yet... 😢

WITH 3 BOOSTERS GROUPS :
1) Only the last booster displays eng_tex and eng_pstream1

2) During separation before end of combustion (manual with J) => CTD

3) If the rocket launches with the guidance file (P key)
  • a) If J is pressed before the end of combustion => CTD
  • b) If combustion is finished, none of the 3 groups separate automatically
and pressing J => CTD

WITH 2 BOOSTERS GROUPS : same

WITH 1 BOOSTERS GROUP : ok no issue

So on my sls. still no booster exhaust.
That's strange! Did you try it on a clean Orbiter installation?

I can't right now, but later I'll look into what I can do and release a new version, and I'll try it on another clean Orbiter installation.

I think it's a problem with the release, not the code. I must have mixed up some file.
 
Okay, I've now discovered some typos in the strings that are applied by default when a value in the .ini file is missing, for example, the module.

Please share the Orbiter log for each run/test with me when you can. It would be a great help.
 
This is a real puzzle for me, and I don't understand why. I'm testing it on a fresh Orbiter installation, and it turns out that Multistage2026 isn't working correctly when separating stages. I'm getting a CTD error due to out-of-range access.

It worked very well in my previous installation.
 
Back
Top