Jump to content

MKSheppard

Members
  • Posts

    72
  • Joined

  • Last visited

Reputation

17 Good

Profile Information

  • About me
    Rocketeer

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. If you need configs for this; download them from here https://github.com/WazWaz/EnvironmentalVisualEnhancements/releases/tag/EVE-1.2.2-1
  2. I was wondering if rocket engine plumes/effects/fx would be looked at at some point. If you scale an engine; the plumes end up looking weird relative to the original scale.
  3. 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) // =========================================================================================
  4. 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.
  5. Is it possible to implement limits on Tweakscale, i.e. you can scale a part up to make it bigger, but you can't scale it down to make it smaller?
  6. If you want to select just probes, use this header: @PART[*]:HAS[@MODULE[ModuleCommand],#CrewCapacity[0]] If you want to select command modules (manned): @PART[*]:HAS[@MODULE[ModuleCommand],#CrewCapacity[>0]] There's also an alternate way to filter for probes, via: vesselType = Probe
  7. 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.
  8. 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> }
  9. Here's a CFG file to add NEXUS to whatever tree. Just do a FIND-Replace and replace the node with one of your choice. @PART[NexusFuelTank] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[Nexus25mShell] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[LF70f-B] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[NexusEnginePlug] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[NexusRCS] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[supermaxiLandingLeg] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[NexusL30AHExpansionDeflection] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[Nexus150fInterstage] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[Nexus150fHeatShield] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[airbrakeNex1] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[fairingSize15] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> } @PART[fairingSize11] { %TechRequired = advanced_liquid_rockets @description = #$description$ <color=#FF0000>[Tiktaalik's NEXUS]</color> }
  10. How do you represent negative numbers in MM? I'm trying to multiply a number by a negative value (-0.2807) but I can't get it to go negative; even when II start with: NegativeA = 1 NegativeA -= 0.2807 //we have to do this repurposed bovine waste to get a negative number NegativeA = 1 NegativeA -= 0.2807
  11. This one is going into my techtree mod. just ADORE the EVA you made for the 0.625m command pod.
  12. I'm trying to fix some of the exponents used in tweakscale to be more accurate. I've been able to fix engine thrust scaling to be accurate with actual rocket propulsion software with the following code: //This is for engines to fix their size/scaling. @TWEAKSCALEEXPONENTS[ModuleEngines] { %minFuelFlow = 2 //original was set to 2.5 %maxFuelFlow = 2 //original was set to 2.5 %maxThrust = 2 //original was set to 2.5 } But I'm hitting a rock in trying to fix engine mass scaling: //this fixes mass scaling for engines. @TWEAKSCALEEXPONENTS[Part]:HAS[#category[Engine]] { %mass = 2 //original was set to 3 } Doesn't work. Has anyone made a custom CFG that adjusts ONLY engine mass scaling? EDIT: If you want liquid engines to scale correctly; you must use: type = stack_square This correctly scales their mass without the need for a patch
  13. Question. How do you get the APUS Airlock and the APUS Cargo bays to line up in autosnap?
  14. This appears to work in 1.9.1 Here's a CFG file to make you have unlimited parts from the start in the VAB, being limited only by vehicle size and tonnage on the pad, in more logical increments: @CUSTOMBARNKIT { !VAB{}// We nuke the old VAB. VAB { levels = 3 upgradesVisual = 1, 2, 3 upgrades = 50000, 75000, 112500 actionGroupsStockUnlock = 2 actionGroupsCustomUnlock = 3 partCountLimit = -1, -1, -1 } //------------------------------------------------ !LAUNCHPAD{}// We nuke the old LAUNCHPAD LAUNCHPAD { levels = 6 upgradesVisual = 1, 1, 2, 2, 3, 3 upgrades = 50000, 75000, 112500, 168750, 253125, 379688 craftMassLimit = 18, 45, 145, 400, 1200, -1 craftSizeLimit { size = 15, 20, 15 //width, height, length Level 1 Start size = 22.5, 30, 22.5 //width, height, length Level 2 size = 33.8, 45, 33.8 //width, height, length Level 3 size = 50.6, 67.5, 50.6 //width, height, length Level 4 size = 75, 100, 75 //width, height, length Level 5 size = -1, -1, -1 //width, height, length Level 6 } useBuilding = false } //------------------------------------------------ } //END OF FILE This makes you have a launch pad that goes: 18 tonnes (20m height) START 45 tonnes (30m height) Level 2 145 tonnes (45m height) Level 3 400 tonnes (67.5m height) Level 4 1200 tonnes (100m height) Level 5 UNLIMITED UNLIMITED Level 6
  15. Here's a little patch I made to fix a hole in the 1.25m station part list: It converts the PTD-6 Star Utility Module into a combined science-utility module: @PART[sspx-utility-125-1] //Station Parts Expansion Redux 1.0.0 -- 1.25m utility pod { %title = PTD-6 'Star' Science-Utility Module %description = This crewed science-utility module has enough space for the station engineer to poke his head in every once in a while and hope things aren't going *too* wrong. Additionally, it contains provisions for a scientist to do a small amount of research. %category = Science MODULE { name = ModuleScienceContainer reviewActionName = #autoLOC_502204 //#autoLOC_502204 = Review Data storeActionName = #autoLOC_502202 //#autoLOC_502202 = Store Experiments collectActionName = #autoLOC_238018 //#autoLOC_238018 = Take Data evaOnlyStorage = True storageRange = 0.5 allowRepeatedSubjects = True } MODULE { name = ModuleScienceLab containerModuleIndex = 0 dataStorage = 50 crewsRequired = 1 canResetConnectedModules = True canResetNearbyModules = True interactionRange = 5 SurfaceBonus = 0.1 ContextBonus = 0.25 homeworldMultiplier = 0.1 RESOURCE_PROCESS { name = ElectricCharge amount = 10 } } MODULE { name = ModuleScienceConverter dataProcessingMultiplier = 0.5 // Multiplier to data processing rate and therefore science rate scientistBonus = 0.25 //Bonus per scientist star - need at least one! So 0.25x - 2.5x researchTime = 7 //Larger = slower. Exponential! scienceMultiplier = 5 //How much science does data turn into? scienceCap = 25 //How much science can we store before having to transmit? powerRequirement = 2.5 //EC/Sec to research ConverterName = #autoLOC_502055 //#autoLOC_502055 = Research StartActionName = #autoLOC_502056 //#autoLOC_502056 = Start Research StopActionName = #autoLOC_502057 //#autoLOC_502057 = Stop Research } MODULE { name = ModuleKerbNetAccess MinimumFoV = 17 MaximumFoV = 63 AnomalyDetection = 0 DISPLAY_MODES { Mode = Terrain,#autoLOC_438839 //#autoLOC_438839 = Terrain Mode = Biome,#autoLOC_438890 //#autoLOC_438890 = Biome } REQUIRED_EFFECTS { Effect = ScienceSkill } } MODULE { name = ModuleExperienceManagement costPerKerbal = 0 } }
×
×
  • Create New...