Update:
Dev work moves slowly forward.
For now launch autopilot is more like aerobatic AP and performs strange manuevers like inverted loop with ~ 1800 ton stack.
Sure - that's not a problem but currently I"m moving Shadow Destroyer's verticles.
Little update - with no changes in engine/propellant setting this thing can lift 80 tons to LEO
Yeah, couldn't really surprise me. You have very light stage masses in the default config. Your first stage has only 4% construction mass ratio. Your SRBs and Kick stage are better in that context, with 10% and 5%. Also that you use a nearly reaction-free RCS for attitude control currently also saves you a lot of DV for hauling payload (usually a bit of fuel would be burned for keeping attitude).
Do you also want to have your SRBs and Core stage be affected by ambient atmosphere pressure (less thrust/specific impulse at low altitude)?
As for mass specs they're in separate file and can be tuned.
Also ISP ambient pressure dependency is good idea - it will behave in more realistic fasion. Unfortunatelly I started this project as sc3/multistage where those values weren't supported IIRC![]()
#pragma once
#include <OrbiterAPI.h>
/**
* Encapsulate global parameters to ensure they remain read-only,
* use singleton pattern to simplify having only one object for multiple
* vessels.
*/
class CoreConfig
{ /**
* Empty core vessel mass in kg. (21023 kg)
*/
double Core_Mass;
/**
* The propellant mass of the core in kg.
*/
double Core_Fuelmass;
/**
* The specific impulse of the core engines in m/s.
*/
double Core_ISP;
/**
* The vacuum thrust of the core engine in N.
*/
double Core_TH;
/**
* The Z-coordinate of the three touch down points
* of the core stage.
*/
double Core_TouchdownZ;
/**
* SRB empty mass in kg. (21023 kg)
*/
double SRB_Mass;
/**
* The propellant mass of the SRB in kg.
*/
double SRB_Fuelmass;
/**
* The fuel-specific impulse of a SRB in Ns/kg
*/
double SRB_ISP;
/**
* The vacuum thrust of one SRB in N.
*/
double SRB_TH;
/**
* The empty mass of the kick stage in kg.
*/
double KS_Mass;
/**
* The propellant mass of the kick stage in kg.
*/
double KS_Fuelmass;
/**
* The vacuum thrust of the kick stage in N.
*/
double KS_TH;
/**
* The fuel-specific impulse of the kick stage in Ns/kg
*/
double KS_ISP;
/**
* The thrust of a single RCS thruster in N.
*/
double RCS_TH;
/**
* The specific impulse of an RCS thruster in Ns/kg.
*/
double RCS_ISP;
double RCS_Fuelmass;
static CoreConfig* m_instance;
CoreConfig();
~CoreConfig();
void ReadCfg();
public:
static CoreConfig* Instance();
static void Free();
inline double CoreEmptyMass() const {return Core_Mass;};
inline double CoreISP() const {return Core_ISP;};
inline double CorePropMass() const {return Core_Fuelmass;};
inline double CoreThrust() const {return Core_TH;};
inline double CoreTouchdownZ() const {return Core_TouchdownZ;};
inline double KSEmptyMass() const {return KS_Mass;};
inline double KSISP() const {return KS_ISP;};
inline double KSPropMass() const {return KS_Fuelmass;};
inline double KSThrust() const {return KS_TH;};
inline double RCSISP() const {return RCS_ISP;};
inline double RCSThrust() const {return RCS_TH;};
inline double RCSPropMass() const {return RCS_Fuelmass;};
inline double SRBEmptyMass() const {return SRB_Mass;};
inline double SRBISP() const {return SRB_ISP;};
inline double SRBPropMass() const {return SRB_Fuelmass;};
inline double SRBThrust() const {return SRB_TH;};
};
#include "CoreConfig.h"
CoreConfig* CoreConfig::m_instance = NULL;
CoreConfig::CoreConfig()
{
// Burntime of 340 seconds
/*
Core:
EmptyMass=21023
FuelMass=500000.0
Thrust=4500000.0
BurnTime=340.
*/
Core_Mass = 21023; // empty core vessel mass in KG
Core_Fuelmass = 50e4; // the mass of the core's fuel tanks
Core_ISP = 3060; // fuel-specific impulse [m/s]
Core_TH = 45e5;
Core_TouchdownZ = -20.0;
///////
//SRB//
///////
// Burntime of 126.7 seconds
/*
SRB:
EmptyMass=54543
FuelMass=502126
Thrust=14739770.25
BurnTime=124.
*/
SRB_Mass = 54543; // empty core vessel mass in KG
SRB_Fuelmass = 502126; // the mass of the core's fuel tanks
SRB_ISP = 3720; // fuel-specific impulse [m/s]
SRB_TH = 14739770;
//////////////
//Kick Stage//
//////////////
//<Loru>BurnTime=200.
// 360 = 229
// 2600 = 195
KS_Mass = 3000;
KS_Fuelmass = 6e4;
KS_TH = 8e5;
KS_ISP = 2665;
///////
//RCS//
///////
RCS_Fuelmass = 10.0;
RCS_TH = 2e5;
RCS_ISP = 1e100; // makes that 10kg of RCS fuel last a lonnnnnnnnnnnnnng time
ReadCfg();
}
CoreConfig::~CoreConfig()
{
}
void CoreConfig::Free()
{
if(m_instance) delete m_instance;
m_instance = NULL;
}
CoreConfig* CoreConfig::Instance()
{
if(m_instance == NULL)
m_instance = new CoreConfig();
return m_instance;
}
void CoreConfig::ReadCfg()
{
// Read the current parameter value from file
FILEHANDLE hFile = oapiOpenFile ("MTS_Launcher_Preferences.cfg",
FILE_IN, CONFIG);
if(hFile == NULL)
{
oapiWriteLog("(MTS_Launcher) ERROR: Failed to open 'MTS_Launcher_Preferences.cfg'.");
//Abort function
return;
}
////////
//CORE//
////////
// loads the core stage's mass from the config file.
if(!oapiReadItem_float(hFile,"Core mass",Core_Mass))
Core_Mass = 61023;
// loads the core stage's fuel mass from the config file.
if(!oapiReadItem_float(hFile,"Core Fuel mass",Core_Fuelmass))
Core_Fuelmass = 55e4;
// loads the core's ISP from the config file.
if(!oapiReadItem_float(hFile,"Core ISP",Core_ISP))
Core_ISP = 4260;
// loads the core's thrust from the config file.
if(!oapiReadItem_float(hFile,"Core Thrust",Core_TH))
Core_TH = 63e5;
///////
//SRB//
///////
// loads the SRB's mass from the config file.
if(!oapiReadItem_float(hFile,"SRB mass",SRB_Mass))
SRB_Mass = 148000;
// loads the SRBs fuel mass from the config file.
if(!oapiReadItem_float(hFile,"SRB Fuel mass",SRB_Fuelmass))
SRB_Fuelmass = 1146e3;
// loads the SRB's ISP from the config file.
if(!oapiReadItem_float(hFile,"SRB ISP",SRB_ISP))
SRB_ISP = 2629;
// loads the SRB's thrust from the config file.
if(!oapiReadItem_float(hFile,"SRB Thrust",SRB_TH))
SRB_TH = 12800000;
///////////////
//Stage 2(KS)//
///////////////
// loads the KS's mass from the config file.
if(!oapiReadItem_float(hFile,"KS mass",KS_Mass))
KS_Mass = 6500;
// loads the KS's fuel mass from the config file.
if(!oapiReadItem_float(hFile,"KS Fuel mass",KS_Fuelmass))
SRB_Fuelmass = 60000;
// loads the KS's ISP from the config file.
if(!oapiReadItem_float(hFile,"KS ISP",KS_ISP))
KS_ISP = 2665;
// loads the KS's thrust from the config file.
if(!oapiReadItem_float(hFile,"KS Thrust",KS_TH))
KS_TH = 800000;
// loads the Touchdown point from the config file.
if(!oapiReadItem_float(hFile,"LPad hight",Core_TouchdownZ))
Core_TouchdownZ = -20;
oapiCloseFile (hFile, FILE_IN);
}