Modding Help BYOS Custom Race Extension

Discussion in 'Starbound Modding' started by Jerln, Feb 10, 2017.

  1. Jerln

    Jerln Oxygen Tank

    I've been trying to follow Amber Talamasca's tutorial for creating compatibility extensions for her Build Your Own Ship mod, but have been having issues. I'm not getting error messages in the log file, but the mod doesn't work for this race's ship, instead just upgrading it to Tier 8. The extension is intended for the Orcana mod.

    The files for the extension are attached. I changed the file extensions to .txt just to upload them, they don't have that extension while in use.
     

    Attached Files:

  2. Cyel

    Cyel Scruffy Nerf-Herder

    I believe you didn't enabled the windows explorer setting that allows you to see your filename's extensions - Windows, by default, hides it, and those are all .txt files. The game simply ignores them
     
    Last edited: Feb 11, 2017
  3. bk3k

    bk3k Oxygen Tank

    Making individual patches is... a bit unnecessary IMO. It creates a seriously huge number of possible "mods" that do nearly the same thing. Multiply every ship mod by every race mod... you get the point.

    Instead look at what I did to add Shipyard Rebuilt compatibility(which BTW is itself customizable and out of the box compatible with Mad Tulip's own customizable ship mod)
    I made two mods that support many races here and here. I'm actually behind on supporting several new races, but that's not the main point. Look at those two submods to see what I did and replicate that. Or just copy/paste and edit.

    1. For example in the first mod's

    Code:
      "requires" : ["Ship Yard Rebuilt"],
    (which is the mod name for the ship I'm adding these races to)
    and...
    Code:
      "includes" : [
        "The Viera of Ivalice",
        "Familiars",
        "Kemono",
        "kazdra",
        "Slime_Race_Mod",
        "Haathee",
        "GoatPerson",
        "Gardevan",
        "Umbreon Race Mod",
        "Umbreon",
        "Bunnykin",
        "Terramines Troll Race",
        "Ningen",
        "Race cat",
        "Playable Cats V3.6",
        "Trekkers",
        "Arachne Race Mod",
        "Inkling Race Mod",
        "Inklings",
        "Zombie Race Mod",
        "Terramine's Cherub Race",
        "BAB5CEN.IHC",
        "BAB5MIN.IHC",
        "BAB5NARN.IHC",
        "Boss Monster mod",
        "Undertale Goat Monster Mod",
        "The Attarrans",
        "crysilon"
      ],
    That's a list of those race mod's "name" as found in _metadata (or the depreciated .modinfo files that _metadata has replaced).
    "includes" won't trigger an error if the mod isn't present, but if those mods are present, they will load BEFORE this mod and thus I will over-write the data they patched into universe_server.config


    2. The first mod's

    Code:
    [
      /*
      These should be races not currently using custom ship(excluding recolors) all in their own batch. I separated from those in a custom ship because it seems more likely people would want these would want these races to be in the shipyard (given that someone has installed the shipyard).  Assuming someone would prefer the shipyard over a custom ship is an iffy decision, so I'll made that a different patch such that people can decide the matter for themselves.
    
      Huge thanks to aradiddles who compiled most of the race data that I'm too lazy to compile in a reasonable timeframe.  That made creating the patches far more practical.  Let me know if between the two patches I missed your favorite race.
    
      Current race list covered in this patch
        [
        "The Viera of Ivalice",
        "Familiars",
        "Kemono",
        "kazdra",
        "Slime_Race_Mod",
        "Haathee",
        "GoatPerson",
        "Gardevan",
        "Umbreon Race Mod",
        "Umbreon",
        "Bunnykin",
        "Terramines Troll Race",
        "Ningen",
        "Race cat",
        "Playable Cats V3.6",
        "Trekkers",
        "Arachne Race Mod",
        "Inkling Race Mod",
        "Inklings",
        "Zombie Race Mod",
        "Terramine's Cherub Race",
        "BAB5CEN.IHC",
        "BAB5MIN.IHC",
        "BAB5NARN.IHC",
        "Boss Monster mod",
        "Undertale Goat Monster Mod",
        "The Attarrans",
        "crysilon"
        ]
    
      Umbreon, Playable Cats, Inkling, Boss Monsters have _metadata and .modinfo files for some reason
      and two different mod names in each...
      If those mod authors are reading this, please delete the .modinfo file - they're depriciated.
      You only need the _metadata anymore.  Having both makes starbound needlessly load your mod assets twice,
      and it means I have to reference your mod twice - under two seperate names.
    */
      [
            {
                "op" : "test",
                "path" : "/speciesShips/viera",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/viera",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/viera",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/familiar",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/familiar",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/familiar",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/kemono",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/kemono",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/kemono",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/kazdra",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/kazdra",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/kazdra",
          "value" : [
            "/ships/avian/sr_T0.structure",
            "/ships/avian/sr_T1.structure",
            "/ships/avian/sr_T2.structure",
            "/ships/avian/sr_T3.structure",
            "/ships/avian/sr_T4.structure",
            "/ships/avian/sr_T5.structure",
            "/ships/avian/sr_T6.structure",
            "/ships/avian/sr_T7.structure",
            "/ships/avian/sr_T8.structure",
            "/ships/avian/sr_T9.structure",
            "/ships/avian/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/slimeperson",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/slimeperson",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/slimeperson",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/Hathee",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/Hathee",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/Hathee",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/GoatPerson",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/GoatPerson",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/GoatPerson",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/gardevan",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/gardevan",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/gardevan",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/Umbreon",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/Umbreon",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/Umbreon",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/bunnykin",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/bunnykin",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/bunnykin",
          "value" : [
            "/ships/floran/sr_T0.structure",
            "/ships/floran/sr_T1.structure",
            "/ships/floran/sr_T2.structure",
            "/ships/floran/sr_T3.structure",
            "/ships/floran/sr_T4.structure",
            "/ships/floran/sr_T5.structure",
            "/ships/floran/sr_T6.structure",
            "/ships/floran/sr_T7.structure",
            "/ships/floran/sr_T8.structure",
            "/ships/floran/sr_T9.structure",
            "/ships/floran/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/ningen",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/ningen",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/ningen",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/troll",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/troll",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/troll",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/cat",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/cat",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/cat",
          "value" : [
            "/ships/hylotl/sr_T0.structure",
            "/ships/hylotl/sr_T1.structure",
            "/ships/hylotl/sr_T2.structure",
            "/ships/hylotl/sr_T3.structure",
            "/ships/hylotl/sr_T4.structure",
            "/ships/hylotl/sr_T5.structure",
            "/ships/hylotl/sr_T6.structure",
            "/ships/hylotl/sr_T7.structure",
            "/ships/hylotl/sr_T8.structure",
            "/ships/hylotl/sr_T9.structure",
            "/ships/hylotl/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/ferengi",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/ferengi",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/ferengi",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/trill",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/trill",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/trill",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/klingon",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/klingon",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/klingon",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/vulcan",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/vulcan",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/vulcan",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/borg",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/borg",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/borg",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/arachne",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/arachne",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/arachne",
          "value" : [
            "/ships/glitch/sr_T0.structure",
            "/ships/glitch/sr_T1.structure",
            "/ships/glitch/sr_T2.structure",
            "/ships/glitch/sr_T3.structure",
            "/ships/glitch/sr_T4.structure",
            "/ships/glitch/sr_T5.structure",
            "/ships/glitch/sr_T6.structure",
            "/ships/glitch/sr_T7.structure",
            "/ships/glitch/sr_T8.structure",
            "/ships/glitch/sr_T9.structure",
            "/ships/glitch/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/inkling",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/inkling",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/inkling",
          "value" : [
            "/ships/hylotl/sr_T0.structure",
            "/ships/hylotl/sr_T1.structure",
            "/ships/hylotl/sr_T2.structure",
            "/ships/hylotl/sr_T3.structure",
            "/ships/hylotl/sr_T4.structure",
            "/ships/hylotl/sr_T5.structure",
            "/ships/hylotl/sr_T6.structure",
            "/ships/hylotl/sr_T7.structure",
            "/ships/hylotl/sr_T8.structure",
            "/ships/hylotl/sr_T9.structure",
            "/ships/hylotl/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/zombie",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/zombie",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/zombie",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/cherub",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/cherub",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/cherub",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/centauri",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/centauri",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/centauri",
          "value" : [
            "/ships/avian/sr_T0.structure",
            "/ships/avian/sr_T1.structure",
            "/ships/avian/sr_T2.structure",
            "/ships/avian/sr_T3.structure",
            "/ships/avian/sr_T4.structure",
            "/ships/avian/sr_T5.structure",
            "/ships/avian/sr_T6.structure",
            "/ships/avian/sr_T7.structure",
            "/ships/avian/sr_T8.structure",
            "/ships/avian/sr_T9.structure",
            "/ships/avian/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/minbari",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/minbari",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/minbari",
          "value" : [
            "/ships/apex/sr_T0.structure",
            "/ships/apex/sr_T1.structure",
            "/ships/apex/sr_T2.structure",
            "/ships/apex/sr_T3.structure",
            "/ships/apex/sr_T4.structure",
            "/ships/apex/sr_T5.structure",
            "/ships/apex/sr_T6.structure",
            "/ships/apex/sr_T7.structure",
            "/ships/apex/sr_T8.structure",
            "/ships/apex/sr_T9.structure",
            "/ships/apex/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/narn",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/narn",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/narn",
          "value" : [
            "/ships/floran/sr_T0.structure",
            "/ships/floran/sr_T1.structure",
            "/ships/floran/sr_T2.structure",
            "/ships/floran/sr_T3.structure",
            "/ships/floran/sr_T4.structure",
            "/ships/floran/sr_T5.structure",
            "/ships/floran/sr_T6.structure",
            "/ships/floran/sr_T7.structure",
            "/ships/floran/sr_T8.structure",
            "/ships/floran/sr_T9.structure",
            "/ships/floran/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/Boss Monster",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/Boss Monster",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/Boss Monster",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/sktest",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/sktest",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/sktest",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ],
    
      [
            {
                "op" : "test",
                "path" : "/speciesShips/crysilon",
                "inverse" : true
            },
            {
                "op" : "add",
                "path" : "/speciesShips/crysilon",
                "value" : {}
            }
        ],
      [
        {
          "op" : "replace",
          "path" : "/speciesShips/crysilon",
          "value" : [
            "/ships/human/sr_T0.structure",
            "/ships/human/sr_T1.structure",
            "/ships/human/sr_T2.structure",
            "/ships/human/sr_T3.structure",
            "/ships/human/sr_T4.structure",
            "/ships/human/sr_T5.structure",
            "/ships/human/sr_T6.structure",
            "/ships/human/sr_T7.structure",
            "/ships/human/sr_T8.structure",
            "/ships/human/sr_T9.structure",
            "/ships/human/sr_T9.structure"
          ]
        }
      ]
    ]


    I used test conditions to build big patch files(which I dare say is still more sensible than most universe_server.config.patch files I see). Doing this, I test for the existence of that species ship path, and add it if not present. That avoids errors from trying to replace non-existent paths. Then I replace the path thus redirecting to my own ship.

    And what I did is copy/paste that for each new race, then edit the race name. So it isn't so difficult. The most time consuming part is actually downloading and unpacking all the race mods to get their info from _metadata and universe_server.config.patch

    You absolutely may use my files there to save a lot of time. Under any advanced text editor, do a text replacement for sr_ to whatever you name your structure files. And replace /human/ etc with whatever the path is for the mod ship.

    I myself do need to go through and find whatever race mods that have come out/been updated(previously outdated) since I made those patches. I know I'm missing some. If anyone supplies the info needed to add those races, they will see me instantly update my patches. Otherwise it will have to wait til I have more time(less WIPs on my plate).

    Also consider pointing that mod author to this thread. I imagine it would prove to be useful information(and race data) for someone looking to add mass-compatibility to their ship-mod. In my opinion it is much better for the ships author to put out one or two compatibility patches than leave people to try it themselves - with mixed results while further bloating up this site and the workshop with redundant mods. It really isn't that hard (especially when the work's already done :p ).

    Thinking about it, perhaps starbounder could use an entry listing all race mods complete with mod name(per _metadata) and the race's name(as used in universe_server.config). Perhaps some other info for other types of mods that would add specific support to different races. Something like that would make supporting mod races FAR more practical.
     
    Jerln and Cyel like this.
  4. Jerln

    Jerln Oxygen Tank

    Whoa! That's a lot of information! Thanks a lot, bk3k, I think I'm starting to get an understanding of how this works. I've used some of the things you suggested, and I think I'm getting closer, but when I try to load a new ship by deleting the .shipworld file, I get the pre-made race-specific ship without lights or doors.
     

Share This Page