Jump to content

Tech Tree by Rocket Type


Probus
 Share

Recommended Posts

Would anyone be interested in collaborating on a Tech Tree that was laid out by actual rocket types.  I played with the idea a long time ago, but I was too busy to do it by myself.  It looked something like this:

HRT.PNG

Maybe to the left would be international rockets and the right be US rockets.  Or left to right by first launch date.  But each branch would be a single rocket type with a few cross links.  So Juno, Redstone, Atlas, Titan, Saturn I, Saturn V, Delta, Shuttle, Falcon 1, Falcon 9....  Where maybe to the left you could start with R-7, Vostok, Soyuz, Proton, etc...

Many stock parts would be depreciated and replaced with part packs like FASA, BDB, US/Soviet Launchers by @frizzank, @CobaltWolf, @raidernick, etc...

Have a separate branch for things like science experiments, probes, space station parts...

Just brainstorming.  I just don't have time to do it all myself, but I wouldn't mind collaborating with a crew.  Maybe each person could take on a rocket system.  Some part packs are huge!  And I'm talking to you @CobaltWolf so rocket systems would be better allocated to different contributors and added 1 at a time.

I would be willing to set up the tree.  The tech tree editor I use (TED) can save the tree out as a stock tree (as well as a YongeTech tree).

Some tech tree builders may be interested in contributing like @pap1723, @Nertea@theJesuit

Link to comment
Share on other sites

I'll take that as a complete lack of interest. lol

Well, if anyone runs across this thread in the future and would like to put something together, just let me know.

Thanks!

Link to comment
Share on other sites

  • 1 month later...

Sorry for the late response but I think this is a great idea.

I really like the idea of putting them on a timeline but I would do some digging and find out which ones were based on previous tech directly and make those dependencies. 

For instance, the Saturn 1B was made up of 8 Redstone tanks clustered around a Jupiter tank.

https://en.wikipedia.org/wiki/Saturn_IB

 

Link to comment
Share on other sites

Okay, so you'll need Module Manager and then apply the following CFG file in your GameData Directory:

//Add part name to description
//Created by Tonka Crash in 179413-mod-to-show-part-name

@PART[*]:FINAL { @description = #$description$ <color=#7F7F7F> [$name$]</color> }

This will add a part name to the game as a debug feature to the end of descriptions in everything.

 

Another nice feature you can do for Quality of Life Improvements is this:

@PART[seatExternalCmd]  //EAS External Command Seat
{
%TechRequired = externalcontrol
@description = #$description$ <color=#FF0000>[Stock KSP]</color>
}

uuXewwx.png

Link to comment
Share on other sites

How far have you gotten? I've been working on a tech tree of my own for about a month now. If nothing else, I can send you lists full of stuff like:

@PART[EnginePlate_2] //Stock Squad EP-25 Engine Plate (2.5m)
{
	%TechRequired = liquid_rocketry_3
}

That you can then adapt, since the hardest part of starting a tech tree from scratch is getting partnames for everything and then remembering what they're for.

Link to comment
Share on other sites

17 hours ago, MKSheppard said:

Okay, so you'll need Module Manager and then apply the following CFG file in your GameData Directory:

//Add part name to description
//Created by Tonka Crash in 179413-mod-to-show-part-name

@PART[*]:FINAL { @description = #$description$ <color=#7F7F7F> [$name$]</color> }

This will add a part name to the game as a debug feature to the end of descriptions in everything.

 

Another nice feature you can do for Quality of Life Improvements is this:

@PART[seatExternalCmd]  //EAS External Command Seat
{
%TechRequired = externalcontrol
@description = #$description$ <color=#FF0000>[Stock KSP]</color>
}

 

Both are very elegant means of displaying the information.  I like having alternatives, even if one is mine.

But I don't understand the second one.  As it is, it will only touch the EAS External Command Set.  Yet your example shows from Near Future Launch Vehicles in red.  Did you paste the wrong stanza?

Edited by linuxgurugamer
Link to comment
Share on other sites

  • 3 weeks later...

Here's a way to auto generate a tech tree config for using parts of a mod easily using Python 3.xx:

#simply place this into a folder and run it.

import os
import re #regular expressions

#variables
cwd = os.getcwd() #This sets the current root working directory to that the python file is in.
basedirname = os.path.basename(os.getcwd()) #gets simple base name of directory

KSPTitleCleaned = "" #blank since it is used in IF loop
RealTitleCleaned = "" #blank since it is used in IF loop
PartNameCleaned = "" #blank since it is used in IF loop

#function
def fixVariable(in_str):
    return re.sub('^.*?= ', '', in_str) # this removes everything before the = sign in a string, plus the = sign itself.

ACRONYM = input("enter acronym (e.g. BDB) that will be used in filenames:")

with open(ACRONYM + basedirname + "_DUMP.txt", 'w') as DumpFile:

    for subdir, dirs, files in os.walk(cwd): #this walks through all subdirs

        CurrentDir = subdir.replace(cwd, ""); #remove super long full directory listing
        CurrentDir = CurrentDir[1:] #remove first character
        CurrentDir = CurrentDir.replace("\\", " -- "); # get rid of backslashes for neatness and to avoid loveing up CFGs
        DumpFile.write("\n")
        DumpFile.write(" // " + ACRONYM + " -- " + CurrentDir + " =====================================================================" + "\n")
        
        for file in files:
            if file.endswith(".cfg"):
                
                with open(os.path.join(subdir, file), 'r',encoding='utf-8',errors='ignore') as PartFile:
                    
                        for line in PartFile:
                            if 'real_title' in line:
                                RealTitleCleaned = line
                                RealTitleCleaned = fixVariable(RealTitleCleaned)
                                RealTitleCleaned = RealTitleCleaned.strip()

                        if (RealTitleCleaned == ""): #if no real title entry....
                            PartFile.seek(0) # go back to line 0 of partfile.

                            for line in PartFile:
                                if 'title' in line:
                                    KSPTitleCleaned = line
                                    KSPTitleCleaned = fixVariable(KSPTitleCleaned)
                                    KSPTitleCleaned = KSPTitleCleaned.strip()

                        PartFile.seek(0) # go back to line 0 of partfile.
                        
                        for line in PartFile:
                            if 'name' in line:
                                PartNameCleaned = line
                                PartNameCleaned = fixVariable(PartNameCleaned)
                                PartNameCleaned = PartNameCleaned.strip()
                                break

                        DumpFile.write("@PART[" + PartNameCleaned + "]{%TechRequired = PLACEHOLDER} // "+ RealTitleCleaned + KSPTitleCleaned + "\n")
                        KSPTitleCleaned = "" # zero it out since the IF branch may not always fire each time.
                        RealTitleCleaned = "" # zero it out since the IF branch may not always fire each time.

        DumpFile.write(" // =========================================================================================" + "\n")

os.system("pause") #pause so we can see there are no errors.

This generates a text file with the following parameters:

 // BDB -- Agena =====================================================================
@PART[bluedog_agenaB //]{%TechRequired = PLACEHOLDER} // Advanced Agena engine upgrade
@PART[bluedog_ATDA_Battery]{%TechRequired = PLACEHOLDER} // Augmented Target Docking Adapter Battery Unit
@PART[bluedog_ATDA_RCS]{%TechRequired = PLACEHOLDER} // Augmented Target Docking Adapter RCS System
@PART[bluedog_ATDA_VHFAntenna]{%TechRequired = PLACEHOLDER} // Augmented Target Docking Adapter VHF Antenna
@PART[bluedog_AgenaA]{%TechRequired = PLACEHOLDER} // XLR81-BA-5 Agena-A/B Liquid Fuel Engine
@PART[bluedog_AgenaB_FairingBase_Ranger]{%TechRequired = PLACEHOLDER} // JPL 0.9375m flared fairing base
@PART[bluedog_AgenaD]{%TechRequired = PLACEHOLDER} // XLR81-BA-13 Agena-D Liquid Fuel Engine
@PART[bluedog_AgenaD_FairingBase_LunarOrbiter]{%TechRequired = PLACEHOLDER} // Lunar Orbiter 0.9375m Flared Fairing Base
@PART[bluedog_Agena_AInterstage]{%TechRequired = PLACEHOLDER} // Agena 1.25m to 0.9375m Interstage
@PART[bluedog_Agena_Avionics]{%TechRequired = PLACEHOLDER} // Agena Telemetry Response Unit
@PART[bluedog_Agena_Decoupler_LunarOrbiter]{%TechRequired = PLACEHOLDER} // Lunar Orbiter Payload Separation Mechanism
@PART[bluedog_Agena_EngineMount]{%TechRequired = PLACEHOLDER} // Agena Engine Mount
@PART[bluedog_Agena_EngineShroud]{%TechRequired = PLACEHOLDER} // Agena A/B Equipment Rack
@PART[bluedog_Agena_Engine_8096C]{%TechRequired = PLACEHOLDER} // XLR81-8096C Advanced Agena Engine
@PART[bluedog_Agena_Engine_XLR81]{%TechRequired = PLACEHOLDER} // Bell XLR-81-8096B
@PART[bluedog_Agena_EquipmentRack]{%TechRequired = PLACEHOLDER} // Agena D Equipment Rack
@PART[bluedog_Agena_MaterialsBay]{%TechRequired = PLACEHOLDER} // Agena 9.375m Materials Bay
@PART[bluedog_Agena_MultiPayloadAdapter]{%TechRequired = PLACEHOLDER} // Agena Multiple Payload Adapter
@PART[bluedog_Agena_RetroThrustModule]{%TechRequired = PLACEHOLDER} // Agena Retro Thrust Module
@PART[bluedog_Agena_SLV3B_FairingBase]{%TechRequired = PLACEHOLDER} // Atlas SLV-3B 1.875m Adapter Fairing Base
@PART[bluedog_Agena_SLV3B_Interstage]{%TechRequired = PLACEHOLDER} // Atlas SLV-3B 0.9375m Interstage
@PART[bluedog_Agena_StraightInterstage]{%TechRequired = PLACEHOLDER} // Agena 0.9375 Interstage
@PART[bluedog_Agena_Tank_Long]{%TechRequired = PLACEHOLDER} // Agena-240BD Liquid Fuel Tank
@PART[bluedog_Agena_Tank_Short]{%TechRequired = PLACEHOLDER} // Agena-120A Liquid Fuel Tank
@PART[bluedog_Agena_UllageMotor]{%TechRequired = PLACEHOLDER} // Agena A/B Ullage Motor
@PART[bluedog_Carrack_AgenaAdapter]{%TechRequired = PLACEHOLDER} // Carrack/Agena Adapter
@PART[bluedog_Carrack_StraightAdapter]{%TechRequired = PLACEHOLDER} // Carrack 1.5m Straight Adapter
@PART[bluedog_Carrack_WideAdapter]{%TechRequired = PLACEHOLDER} // Carrack 2.1m  Wide Adapter
@PART[bluedog_GATV_AcquisitionLight]{%TechRequired = PLACEHOLDER} // Agena Target Vehicle Acquisition Light
@PART[bluedog_GATV_DockingPort]{%TechRequired = PLACEHOLDER} // Agena Target Vehicle Docking Port
@PART[bluedog_GATV_LBandAntenna]{%TechRequired = PLACEHOLDER} // Agena Target Vehicle Command Antenna
@PART[bluedog_GATV_MMDetector]{%TechRequired = PLACEHOLDER} // S-00M Micrometeroid Package
@PART[bluedog_GATV_MaterialsBay]{%TechRequired = PLACEHOLDER} // Agena Target Vehicle 0.9375m Materials Bay
@PART[bluedog_GATV_NoseCone]{%TechRequired = PLACEHOLDER} // Agena Target Vehicle Nose Cone
@PART[bluedog_GATV_NuclearPackage]{%TechRequired = PLACEHOLDER} // N-00K Nuclear Package
@PART[bluedog_GATV_RunningLight]{%TechRequired = PLACEHOLDER} // Agena Target Vehicle Running Light
@PART[bluedog_GATV_SPS]{%TechRequired = PLACEHOLDER} // Model 8250 Agena-D Secondary Engine
@PART[bluedog_GATV_SPS_LFO]{%TechRequired = PLACEHOLDER} // Model 8250-B Agena-D Secondary Engine
@PART[bluedog_GATV_SPS_RCS]{%TechRequired = PLACEHOLDER} // Model 8250-C Agena-D Secondary Engine
@PART[bluedog_GATV_SpiralAntenna]{%TechRequired = PLACEHOLDER} // Agena Target Vehicle Spiral Command Antenna
@PART[bluedog_Keyhole_Camera_KH1]{%TechRequired = PLACEHOLDER} // KH-1 Corona Camera System
@PART[bluedog_Keyhole_Camera_KH4]{%TechRequired = PLACEHOLDER} // KH-4 Corona Camera System
@PART[bluedog_Keyhole_Camera_KH4B]{%TechRequired = PLACEHOLDER} // KH-4B Corona Camera System
@PART[bluedog_Keyhole_Camera_KH7]{%TechRequired = PLACEHOLDER} // KH-7 Gambit Camera System
@PART[bluedog_Keyhole_Camera_KH8]{%TechRequired = PLACEHOLDER} // KH-8 Gambit 3 Camera System
@PART[bluedog_Keyhole_DualAdapter]{%TechRequired = PLACEHOLDER} // Keyhole Dual Adapter
@PART[bluedog_Keyhole_OCV_KH7]{%TechRequired = PLACEHOLDER} // KH-7 "Gambit" Orbital Control Vehicle
@PART[bluedog_Keyhole_RVAdapter]{%TechRequired = PLACEHOLDER} // Keyhole RVA1 0.9375m to 0.625m Adapter
@PART[bluedog_Titan3B_Interstage]{%TechRequired = PLACEHOLDER} // Titan IIIB 1.875m to 0.9375m Adapter Interstage
@PART[bluedog_agenaAntenna]{%TechRequired = PLACEHOLDER} // Agena Command Antenna
@PART[bluedog_agenaLongTank]{%TechRequired = PLACEHOLDER} // Agena-200D Liquid Fuel Tank
@PART[bluedog_agenaLongWhiteTank]{%TechRequired = PLACEHOLDER} // Agena-200 Liquid Fuel Tank
@PART[bluedog_agenaMediumTank]{%TechRequired = PLACEHOLDER} // Agena-140B Liquid Fuel Tank
@PART[bluedog_agenaNoseCone]{%TechRequired = PLACEHOLDER} // Agena Nose Cone
@PART[bluedog_agenaPort]{%TechRequired = PLACEHOLDER} // Agena Docking Port
@PART[bluedog_agenaProbeCore]{%TechRequired = PLACEHOLDER} // Agena Telemetry Response Unit
@PART[bluedog_agenaSecondaryEngine]{%TechRequired = PLACEHOLDER} // Model 8250 Agena-D Secondary Engine
@PART[bluedog_agenaShortTank]{%TechRequired = PLACEHOLDER} // Agena-70W Liquid Fuel Tank
@PART[bluedog_agenaShortTankM]{%TechRequired = PLACEHOLDER} // Agena-70 Liquid Fuel Tank
 // =========================================================================================

You'll still have to do cleanup work, but most of the hard work is done for you, and you can focus on where to assign parts in your tech tree, instead of having to copy partnames.

Link to comment
Share on other sites

Updated python file that handles localizations (sorta).

You still have to copy and paste the localization file to the directory the python file is in, and it must be named "en-us.txt"

But that's marginal amounts of work compared to copying names/partIDs by hand.

#simply place this into a folder and run it.

import os
import re #regular expressions
import pathlib

####################################################################################
#variables
####################################################################################

cwd = os.getcwd() #This sets the current root working directory to that the python file is in.
basedirname = os.path.basename(os.getcwd()) #gets simple base name of directory

KSPTitleCleaned = "" #blank since it is used in IF loop
RealTitleCleaned = "" #blank since it is used in IF loop
PartNameCleaned = "" #blank since it is used in IF loop
Bulkhead = "" #blank since it is used in IF loop

LocalizationIndex = [] #create here outside of IF loop.
LocalizationString = [] #create here outside of IF loop.
LOC_INDEX = 0  #create here outside of IF loop.

#############################################################################
#functions
#############################################################################

def fixVariable(in_str):
    return re.sub('^.*?= ', '', in_str) # this removes everything before the = sign in a string, plus the = sign itself.

def LoadVariableBeforeSign(in_str):
    return re.sub('\= ', '', in_str) # this removes everything before the = sign in a string, plus the = sign itself.

############################################################################

print("NOTE: If this contains localization strings, you must have the localization file 'en-us.txt' in the same directory as the python file for it to function correctly!")
print("")
ACRONYM = input("enter acronym (e.g. BDB) that will be used in filenames:")

################################################################################
#We do a localization scan and dump first.

LocalizationFile = pathlib.Path("en-us.txt")

if LocalizationFile.exists(): #if this file exists
    print("Localization File Exists....")
    
    with open(LocalizationFile, 'r',encoding='utf-8',errors='ignore') as LocalFile:
        
        for line in LocalFile:
            
            if '#LOC' in line: # we now load the index headers into the list
                String = line
                String = String.split('=', 1) [0]
                String = String.strip()
                LocalizationIndex.append(String)

        print("Localization Headers Loaded....")
        LocalFile.seek(0) # go back to line 0 of partfile.
                        
        for line in LocalFile:
            
            if '#LOC' in line: # we now load the text into the list
                String = line
                String = String.split('=', 1) [1]
                String = String.strip()
                LocalizationString.append(String)

        print("Localization Strings Loaded...")

####################
# Now that we have all the data loaded, we can now do our parts.

with open(ACRONYM + "_DUMP.txt", 'w') as DumpFile:

    for subdir, dirs, files in os.walk(cwd): #this walks through all subdirs

        CurrentDir = subdir.replace(cwd, ""); #remove super long full directory listing
        CurrentDir = CurrentDir[1:] #remove first character
        CurrentDir = CurrentDir.replace("\\", " -- "); # get rid of backslashes for neatness and to avoid loveing up CFGs
        DumpFile.write("\n")
        DumpFile.write(" // " + ACRONYM + " -- " + CurrentDir + " =====================================================================" + "\n")
        
        for file in files:
            if file.endswith(".cfg"):
                
                with open(os.path.join(subdir, file), 'r',encoding='utf-8',errors='ignore') as PartFile:
                    
                        for line in PartFile:
                            if 'real_title' in line:
                                RealTitleCleaned = line
                                RealTitleCleaned = fixVariable(RealTitleCleaned)
                                RealTitleCleaned = RealTitleCleaned.strip()

                        if (RealTitleCleaned == ""): #if no real title entry....
                            PartFile.seek(0) # go back to line 0 of partfile.

                            for line in PartFile:
                                if 'title' in line:
                                    KSPTitleCleaned = line
                                    KSPTitleCleaned = fixVariable(KSPTitleCleaned)
                                    KSPTitleCleaned = KSPTitleCleaned.strip()

                                    #We now have to do error checking because of stupid localization.
                                    if "#LOC" in KSPTitleCleaned: #if the string contains a localization ID...
                                        LOC_INDEX = LocalizationIndex.index(KSPTitleCleaned) # we get the localization index.
                                        KSPTitleCleaned = LocalizationString[LOC_INDEX] #grab it out of the string
                                    
                        PartFile.seek(0) # go back to line 0 of partfile.
                        
                        for line in PartFile:
                            if 'name' in line:
                                PartNameCleaned = line
                                PartNameCleaned = fixVariable(PartNameCleaned)
                                PartNameCleaned = PartNameCleaned.strip()
                                break

                        PartFile.seek(0) # go back to line 0 of partfile.

                        for line in PartFile:
                            if 'bulkheadProfiles' in line:
                                Bulkhead = line
                                Bulkhead = fixVariable(Bulkhead)
                                Bulkhead = Bulkhead.strip()

                        DumpFile.write("@PART[" + PartNameCleaned + "]{%TechRequired = PLACEHOLDER} // "+ RealTitleCleaned + KSPTitleCleaned + " (" + Bulkhead + ")\n")
                        KSPTitleCleaned = "" # zero it out since the IF branch may not always fire each time.
                        RealTitleCleaned = "" # zero it out since the IF branch may not always fire each time.
                        Bulkhead = "" # zero it out since the IF branch may not always fire each time.
                        LOC_INDEX = 0  # zero it out since the IF branch may not always fire each time.

        DumpFile.write(" // =========================================================================================" + "\n")

os.system("pause") #pause so we can see there are no errors.

It basically causes this to go from:

 // BDB -- SOYUZ =====================================================================
@PART[tantares_adapter_s0p5_s0_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_adapter_s0p5_s0_1 (size1, size0p5)
@PART[tantares_adapter_s1_s0p5_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_adapter_s1_s0p5_1 (size1, size0p5)
@PART[tantares_adapter_s1_s0_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_adapter_s1_s0_1 (size1, size0)
@PART[tantares_basic_engine_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_basic_engine_s1_1 (size1)
@PART[tantares_basic_fuel_tank_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_basic_fuel_tank_s1_1 (size1)
@PART[tantares_crew_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_crew_s1_1 (size1, size0)
@PART[tantares_decoupler_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_decoupler_s1_1 (size1)
@PART[tantares_engine_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_engine_s1_1 (size1)
@PART[tantares_fuel_tank_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_fuel_tank_s1_1 (size1)
@PART[tantares_heatshield_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_heatshield_s1_1 (size1)
@PART[tantares_orbital_module_s1_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_orbital_module_s1_1 (size0p5, size0)
@PART[tantares_orbital_module_s1_2]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_orbital_module_s1_2 (size0p5, size0)
@PART[tantares_orbital_module_s1_3]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_orbital_module_s1_3 (size0p5, size0)
@PART[tantares_orbital_module_s1_4]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_orbital_module_s1_4 (size1)
@PART[tantares_parachute_s0_1]{%TechRequired = PLACEHOLDER} // #LOC_tantares_tantares_parachute_s0_1 (size0)
 // =========================================================================================

To this:

 // BDB -- SOYUZ =====================================================================
@PART[tantares_adapter_s0p5_s0_1]{%TechRequired = PLACEHOLDER} // Tantares Size 0.5 to Size 0 Adapter (size1, size0p5)
@PART[tantares_adapter_s1_s0p5_1]{%TechRequired = PLACEHOLDER} // Tantares Size 1 to Size 0.5 Adapter (size1, size0p5)
@PART[tantares_adapter_s1_s0_1]{%TechRequired = PLACEHOLDER} // Tantares Size 1 to Size 0 Adapter (size1, size0)
@PART[tantares_basic_engine_s1_1]{%TechRequired = PLACEHOLDER} // Tantares S5.35 "Rullekasse" Propulsion Unit (size1)
@PART[tantares_basic_fuel_tank_s1_1]{%TechRequired = PLACEHOLDER} // Tantares Size 1 Basic Service Compartment (size1)
@PART[tantares_crew_s1_1]{%TechRequired = PLACEHOLDER} // Tantares 12-A "Vingleboks" Crew Capsule (size1, size0)
@PART[tantares_decoupler_s1_1]{%TechRequired = PLACEHOLDER} // Tantares Size 1 Separator (size1)
@PART[tantares_engine_s1_1]{%TechRequired = PLACEHOLDER} // Tantares S5.80 "Vognkasse" Propulsion Unit (size1)
@PART[tantares_fuel_tank_s1_1]{%TechRequired = PLACEHOLDER} // Tantares Size 1 Service Compartment (size1)
@PART[tantares_heatshield_s1_1]{%TechRequired = PLACEHOLDER} // Tantares Size 1 Heatshield (size1)
@PART[tantares_orbital_module_s1_1]{%TechRequired = PLACEHOLDER} // Tantares 93-A "Eldstesfære" Orbital Module (size0p5, size0)
@PART[tantares_orbital_module_s1_2]{%TechRequired = PLACEHOLDER} // Tantares 93-B "Eldresfære" Orbital Module (size0p5, size0)
@PART[tantares_orbital_module_s1_3]{%TechRequired = PLACEHOLDER} // Tantares 93-C "Nysfære" Orbital Module (size0p5, size0)
@PART[tantares_orbital_module_s1_4]{%TechRequired = PLACEHOLDER} // Tantares 12-D "Kopiboks" Orbital Module (size1)
@PART[tantares_parachute_s0_1]{%TechRequired = PLACEHOLDER} // Tantares Size 0 Inline Parachute (size0)
 // =========================================================================================

 

Edited by MKSheppard
Link to comment
Share on other sites

Dang I can't believe i just found this thread!  I have been working on a personnel version of the RP1 tech tree and was literally considering starting something along these lines.  I was planning to make clusters of tech based on certain launchers or space vehicles, mostly from BDB but also the X-20 Moroz mod, the new X-33 mod from Angel125 and a few others.  Please let me know you are still interested in working on this and if I can be of assistance.  I literally have nothing else to do for the next 10 days so it would be a great way to fill my time.

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...