Tutorial Adding Biomes 101

Discussion in 'Starbound Modding' started by sayter, Oct 6, 2015.

  1. sayter

    sayter The Waste of Time

    *updated for Nightly/1.0 changes


    First off, apologies for no screencaps in this writeup. However, they should not necessary when all is said and done.

    I figure since at this point I am the most "qualified" of the modding community to speak about the addition of biomes to the game (having added tons and tons) I may as well make a tutorial. Many have requested already!

    So, here goes:



    Biomes and You

    Let me start by saying that biomes are a great way to add some variety to the game, but that I don't personally think they should be added ad-infinitum just to have as many as possible. Having 100 biomes is pointless if there is no reason to visit them more than once to simply see them. That said, it's your call on what you want to add. If 100 pointless biomes is fun for you, who cares what anyone else thinks!

    In the last few Stable updates a great deal has been changed in regards to biomes and their generation. I'll cover the basics required in order to get it to appear in-game. The rest will be entirely up to you.


    .biome files

    Every biome has several components located in various locations in the games assets. The primary file you are going to need is the .biome file itself. These are located in the /biomes/ folder. There are several types of biomes, and you'll need to set up the correct sort for your intended result.

    They are as follows: space, atmosphere, surface, surface_detached, underground and underground_detached and core:

    Space: What the name says. Basically anything that is a "space" biome. The way these were handled was effectively neutered a few updates back. Safer to ignore these for the time being, for your sanity.

    Atmosphere: These are the "cloud" layers found in biomes. As such, they only appear high up beyond normal reach unless you have a means to get there in-game.

    Surface: Typical planet surface biomes (Garden, Forest, etc)

    Surface_Detached: These are the sub-biomes that appear as secondaries on the various biome types.

    Underground: The underground layers of a biome are handled with these.

    Underground__Detached: Like their surface counterparts, these are sub-biomes that appear in subterranean layers. Things like Flesh, Bone, Shroom and Zen biomes.

    Core : the core of a planet. Pretty self explanitory.


    terrestrial_worlds.config and celestial.config:

    After the .biome files your next most important bits are located in:

    terrestrial_worlds.config and celestial.config. What are these files? See below:

    Terrestrial_Worlds.config: This file tells the game how to generate the various biomes. Every single biome MUST be represented in this file in two different entries (more in a moment on this). To set up a worlds terrain generation, liquid, dungeon spread, sub-biomes and such this is the file used.

    celestial.config: This file is all about stars, planet horizons, dynamic masks and what biomes spawn around what star types. If you wanted to make your new biome appear in every star type, this is where you'd do that.


    /Parallax


    If you want custom parallax assets, you're going to need a custom parallax file. Note that this is not mandatory, and you are welcome to simply copy an existing biome's use of a particular parallax. The parallax directory has a few parts to it you should be aware of:

    /images/ : This is where ALL images go. This was different in older versions but the new way is , while seeming more complex at first, a vastly preferable experience since it can be customized a bit more easily. Note that every biome asset (for instance, "treesbackground") should have it's own folder simply as good practice. Editing is a lot easier when you know where to find what you need.

    Within the /images/ folder are two more folders you need to look for: "divider" and "tile". Divider contains all the rock graphics that separate overworld from underworld parallax. Tile contains all of the underground parallax graphics. Anything you want to do with underground parallax, therefore, is found here.

    /Celestial


    Next, you're going to need actual celestial assets for your biome. These are separate from the celestial.config file. Celestial assets include horizon graphics (the planet as seen from orbit in your ship), solar system views of planets, liquid horizons and solar system liquid views. All that you will require are located within celestial/terrestrial.

    Within celestial/terrestrial are 3 folders you need to concern yourself with: biomes, horizon and liquids.

    /biomes/ : Here you will find individual folders for each biome. Inside of these folders are 3 files (maskie1, 2 and 3). These are the colors used in starbound to render your planet in the solar system view before travelling to a planet. Note that these can be recolored by the hues a planet generates.

    [​IMG]


    /horizon/ : within horizon you will find two more folders of note that concern you. They are /liquids and /textures. Both are effectively the same. You can ignore liquid totally if you are not adding any new liquids to the game, however. But the /textures/ folder is necessary. Within textures you would but the orbital view graphics for your world. If you just want to copy/paste an existing biome look, do that and rename the files to whatever you please.

    [​IMG]

    /liquids/ : only needed if you are actually adding liquids. You'll need a basic one for planets seen around stars and then the same sort of setup for the horizon as used with terrestrial biome assets.

    [​IMG]

    [​IMG]

    (as you can see, the liquid mask and horizon are functionally identical to planet maskie and texture)


    Now onto the goods:


    Step 1: Setup your biome file

    Before we bother with the other data you are going to need a biome file. Whatever it is is entirely up to you. I'll be using links from the github repo for FrackinUniverse for examples so you have a visual representation. You're welcome to use my files as a base and edit if it makes life easier for you, though I would suggest the vanilla game assets instead since FU uses a great deal of custom content.

    https://github.com/sayterdarkwynd/FrackinUniverse_RC/blob/master/biomes/surface/arboreal.biome

    The above link is for the Primeval Forest biome from FU. It was once called Arboreal, and the filename has not been changed as it was not necessary to do so.

    The first and probably most important step for your biome is the "name" field. If you do not have a unique name for this, starbound will not like you and refuse to work. Go with a name that describes the biome and is unlikely to be used by others. For the sake of the tutorial, we'll call it "magicforest".

    Code:
    "name" : "magicalforest",
    
    The "friendlyname" is not currently overly important, but it will essentially be the biomes proper name with formatting. (ie: instead of magicalforest, Magical Forest would be the friendlyname)

    Code:
    "friendlyName" : "Magical Forest",
    
    The next field you see is "requiredStatuses". This tells starbound that your planet applies status effects to the player when on this planet. The radiation, cold and heat effects are examples of this. Any status effect can be used. You could have a biome that heals a player constantly, for instance.

    Code:
    "requiredStatuses" : [ "mystatuseffect" ],
    
    spawnProfiles tell starbound what mobs spawn on your world. Typically these are predefined spawn lists (easysurface1). If you have custom spawn lists, you include those here in the "groups" property.
    extraSpawns are things like insects, fireflys and other creatures that are not part of the core spawn list for the planet.

    monsterParameters within the spawnProfiles set up details such as their color palette or any immunities to status effects they might possess. If you have a world that inflicts heat damage, you are going to want your creatures to be immune to the effect or they'll die horribly before the player can even engage them.

    Below, we're telling it to use easysurface 1 and 2, a squirrel critter, and all creatures will use the forest color schemes.

    Code:
    "spawnProfiles" : [
    {
    "groups" : [ "easysurface1"  ],
    "extraSpawns" : [  "squirrelcritter" ],
    "monsterParameters" : {
    "colors" : "forest"
    }
    },
    {
    "groups" : [ "easysurface2" ],
    "extraSpawns" : [  "squirrelcritter" ],
    "monsterParameters" : {
    "colors" : "forest"
    }
    }
    ],
    
    


    hueShiftOptions sets the color palette applied to any tiles that can be colored in your biome. The values here range from 0 to 360, technically. Ideally, don't go that high. These ones will likely require experimentation before you are happy with the final results. It operates as a "color wheel" (hence 360 degrees) with the default color being 0. Anything else is computed based on the "angle" position on the color wheel when applied to that tiles color (and not with 0 being black and 255 being white unlike everywhere else)

    Code:
    "hueShiftOptions" : [-220, -110, -55, -23, 0, 23, 55, 110, 220],
    

    weather is, not surprisingly, the weather used by that planet. You can either use existing biome weather, or create your own list of weather in weather.config. Below, the biome is now using the "forest" weather list.

    Code:
    "weather" : [
    [0, [
    "/weather.config:forest"
    ]]
    ],
    
    

    skyOptions set the color and light of the biome at various times of day. The values here are always between 0 and 255. Nothing higher will be accepted. 0 is black, 255 is white. RGB (red, green, blue) is used for these. Again, these will largely be an experiment on your part. Thankfully, you can just copy/paste the default vanilla assets and save yourself the hassle should you choose to do so. Below , the Magical Forest biome will only use bright green tinted hues.

    Code:
    "skyOptions" : [
    // green tinted bright
    {
    "mainColor" : [255, 255, 255],
    "morningColors" : [ [123, 224, 150], [124, 230, 164] ],
    "dayColors" : [ [130, 255, 190], [135, 255, 195] ],
    "eveningColors" : [ [100, 200, 130], [111, 211, 150] ],
    "nightColors" : [ [0, 50, 0], [0, 50, 0] ],
    "morningLightColor" : [90, 250, 110],
    "dayLightColor" : [45, 200, 55],
    "eveningLightColor" : [25, 150, 30],
    "nightLightColor" : [32, 72, 0]
    }
    ],
    
    

    Blocks and parallax are next:

    Code:
    "mainBlock" : "plantmatter",
    "subBlocks" : [ "dirt", "floweryblock", "grassyrock" ],
    "ores" : "ff_surfaceOres",
    "parallax" : "/parallax/surface/forest.parallax",
    
    The blocks used for the biome are defined in the above, as well as the ore table and parallax for the biome. You can find the ore tables in the /biomes/oredistributions.config file. Use whatever ore table you want the surface to have. For the blocks themselves, you may have a single primary block. You can have as many secondary blocks as you desire, but I would hazard against any more than 4 or 5. Things get a bit ridiculous after that.


    The next section (ambientNoises and musicTrack) need no real description. I'd opt to simply choose a biome that suits yours from the vanilla assets and copy/paste their code into this spot unless you have custom assets to include.


    Next we have the meat and potatoes of the biome: surfacePlaceables.

    surfacePlaceables and undergroundPlaceables


    anything and everything that spawns on the surface or underneath your biome goes here (except for dungeons, underground and sub-biomes). The best course of action here is to simply take a look at how it is all set up, and copy over and edit what you do or do not need. Be mindful of your brackets and commas since a single mistake here will cause your biome to fail and generate an error. There are various sorts of items , objects and such that can be assigned here. Suffice it to say that trees, bushes, objects, farmables and all other aspects use a slightly different format. Pay attention, and if all else fails, check the vanilla assets.

    after surfacePlaceables is undergroundPlaceables. Apart from the name, they are effectively identical to their surface counterparts but simply appear underground. Note that underground biomes need ONLY undergroundPlaceables. Surface biomes and sub-biomes on the surface can include underground bits.

    One thing of note: The larger the object, the less chance you'll see it generated on a planet. There is one main reason for this : Space. Terrain can be bumpy or covered in objects such as plants , chests and rocks. If something else is already occupying the space or there is insufficient room the item will not generate. Therefore, if you intend to have huge objects spawning , expect them to be rare unless you remove most other surface objects.

    Once that stuff is all set up and you're pleased with it we progress to the next step.



    Step 2: terrestrial_worlds.config

    https://github.com/sayterdarkwynd/FrackinUniverse_RC/blob/master/terrestrial_worlds.config.patch

    Now we need to set up the biome details in terrestrial_worlds.config. For this , make sure to use a .patch file format, You want the mod you are making to be compatible with other mods, after all. No one will use it, otherwise. I'll be using comments below for the relevant data you need to know.

    Comments start with //, and comments are not read by the game engine (to put it in basic terms for you) but allow you to make notes for reference.

    first, we set up the biome data itself:

    Code:
    {"op" : "add",
    "path" : "/planetTypes/magicalforest",     // your biome "name" (not "friendlyname")
    "value" :
    {
    "threatRange" : [1, 5],  //what tier is your planet? if its only tier 1, use 1,1. Otherwise, use what you want.
    "layers" : {
    "surface" : {
    "primaryRegion" : [ "magicalforest" ],   //its own "name" is used here.
    "secondaryRegion" : [ "fieldofbracken", "ffhive", "aliendesert", "cactiplace", "crystalswamp", "birchforest", "alienforest", "cloudforest", "rainbowforest", "swamp", "elder", "corruptedforest", "fieldofwheat", "fieldofsugar", "fieldofpotato", "fieldofcorn", "fieldofgrape", "fieldoftomato", "pineforest", "flowerforest", "snowyforest", "giantflowers", "forest", "jungle", "savannah", "snow", "tundra" ],  //here are your sub-biomes
    "dungeonCountRange" : [0, 2],  //how many dungeons does your biome have ?
    
    //what dungeons does it pull from when it does generate them? This is the new format for Nightly/1.0
    "dungeons" : [
    [1.0, "elderruins"],
    [1.0,"crystalcavern"],
    [1.0,"greenruins"],
    [1.0,"fuwreck"],
    [1.0,"wreck"],
    [1.0,"glitchsewer"],
    [1.0,"glitchvillage"],
    [1.0,"apexresearchlab"],
    [1.0,"apextestchamber"],
    [1.0,"apextowerblock"],
    [1.0,"aviantomb"],
    [1.0,"aviantower"],
    [1.0,"avianvillage"],
    [1.0,"avianairship"],
    [1.0,"aviantemple"],
    [1.0,"humanbunker"],
    [1.0,"floranhuntinggrounds"],
    [1.0,"floranvillagetower"],
    [1.0,"floranhell"],
    [1.0,"humanprison"],
    [1.0,"naturalcave"]
    ]
    },
    "subsurface" : {
    "primaryRegion" : [ "arborealunderground" ]  //what is the core underground biome? you can ignore this and all below if desired and it will use the default values set in celestial.config
    },
    "underground1" : {  //underground sub-biomes are now generated
    "secondaryRegion" : [ "ffhiveunderground", "zen", "shroomcave", "colorfulcave", "ffspidernest", "luminouscaves", "minivillageunderground", "mushroomunderground", "wildernessunderground", "ffvolcanic", "ffsilvermine", "ffcoalmine", "ffgoldmine", "ffcoppermine" ]
    },
    "underground2" : {
    "secondaryRegion" : [ "ffhiveunderground", "zen", "shroomcave", "colorfulcave", "ffspidernest", "luminouscaves", "minivillageunderground", "mushroomunderground", "wildernessunderground", "ffvolcanic", "ffsilvermine", "ffcoalmine", "ffgoldmine", "ffcoppermine" ]
    },
    "underground3" : {
    "secondaryRegion" : [ "ffhiveunderground", "zen", "shroomcave", "colorfulcave", "ffspidernest", "luminouscaves", "minivillageunderground", "mushroomunderground", "wildernessunderground", "ffvolcanic", "ffsilvermine", "ffcoalmine", "ffgoldmine", "ffcoppermine" ]
    },
    "underground4" : {
    "secondaryRegion" : [ "zen", "shroomcave", "shadow", "colorfulcave", "crystalcave", "ffspidernest", "luminouscaves", "minivillageunderground", "mushroomunderground", "wildernessunderground", "ffvolcanic", "ffsilvermine", "ffcoalmine", "ffgoldmine", "ffcoppermine" ]
    },
    "underground5" : {
    "secondaryRegion" : [ "zen", "shroomcave", "shadow", "colorfulcave", "crystalcave", "ffspidernest", "luminouscaves", "minivillageunderground", "mushroomunderground", "wildernessunderground", "ffvolcanic", "ffsilvermine", "ffcoalmine", "ffgoldmine", "ffcoppermine" ]
    },
    "underground6" : {
    "secondaryRegion" : [ "zen", "shroomcave", "shadow", "colorfulcave", "crystalcave", "ffspidernest", "luminouscaves", "minivillageunderground", "mushroomunderground", "wildernessunderground", "ffvolcanic", "ffsilvermine", "ffcoalmine", "ffgoldmine", "ffcoppermine" ]
    },
    "core" : {
    "primaryRegion" : [ "core" ]  //are you using a custom core? if not, just keep this default or exclude altogether
    }
    }
    }
    },
    

    You can also affect other parameters (such as gravity) within the bit of code above, as well as other variables that affect planet generation.

    Once you have that set up , you can progress to the next section of terrestrial_worlds that is needed for your biome.

    Code:
    {"op" : "add",
    "path" : "/regionTypes/magicalforest",   //again, your biomes "name" value
    "value" :
    {
    "caveLiquid" : [ "water" ], //what liquids appear on your biome surface?
    "caveLiquidChanceRange" : [20, 100],  //how often does your liquid appear on the surface?
    "blockSelector" : [ "remixedSwampySurface", "remixedSurface", "remixedPoolsSurface" ],  //surface terrain generation
    "fgCaveSelector" : [ "surfaceCaves" ], //foreground cave terrain generation
    "bgOreSelector" : [ "commonVeins", "denseVeins" ],  // background ore terrain selector
    "biome" : [
    [0, [ "magicalforest" ]]    // and one more case of the "name" value
    ]
    }
    },
    
    
    note that with the above you can do some funky things, but until you get the gist of how it all works I'd recommend not screwing with it. If you intend to use an ocean style biome, you'll need a slightly different layout than the above. Consult the ocean biome within terrestrial_config for examples on what to do there.

    One thing to note about oceanic biomes however: Be careful what sub-biomes you assign them. While it won't "break" them to use any and all biomes, biomes that are below sea-level will get a permanent "water wall" bordering them. Thus, you should construct sea-specific sub-biomes if this is the route you wish to take. The same applies in reverse for non-oceanic worlds using oceanic sub-biomes.

    Now that this part is done, your biome is almost ready from a code perspective.


    Step 3: celestial.config

    https://github.com/sayterdarkwynd/FrackinUniverse_RC/blob/master/celestial.config.patch

    As with terrestrial_worlds, stick with a .patch format for this file for compatibility. With recent changes, there are a few entries required in this file:

    Horizon and System graphics

    Pay close attention below, and make sure all your paths for files are correct or you'll get planets without any surface features from the starmap or orbit. The first tells the game which is the basic terrestrial horizon graphic to use. The second section informs it of what to use on the starmap within a solar system. Note that depending on the mastTexture you use in the first bit, the maskRange can change. Temperate has only 25 masks, where arid has 50. Oceans, if I recall, have 30. For the second bit, "dynamicsRange" tells it how many of the planet masks to include from solar system view.

    Code:
    {"op" : "add",
    "path" : "/terrestrialHorizonGraphics/magicalforest",
    "value" :
    {
    "baseImages" : "/celestial/system/terrestrial/horizon/textures/magicalforest_<selector>.png",
    "maskTextures" : "/celestial/system/terrestrial/horizon/masks/temperate/<mask>_<selector>.png",
    "maskRange" : [1, 25],
    "maskPerPlanetRange" : [3, 3]
    }},
    
    {"op" : "add",
    "path" : "/terrestrialGraphics/magicalforest",
    "value" :
    {
    "baseImages" : "/celestial/system/terrestrial/biomes/magicalforest/maskie<num>.png",
    "dynamicsImages" : "/celestial/system/terrestrial/dynamics/temperate/<num>.png",
    "dynamicsRange" : [1, 30]
    }},
    
    

    Spawning your biome


    the next thing to worry about in celestial.config is making the planets spawn around stars. Below, we are telling the game to place our new biome around Tier2 stars (or rather, any star that calls for the Tier2 array of biomes). You can handle this however you choose, based on your biome (yes, you can add custom stars, but thats a different topic for a different tutorial). Note that if you want this to appear in all tiers you will need one entry for each tier. Note that the second entry below is for a moon (all moons use satelliteTypes instead of planetaryTypes)

    Code:
    {"op":"add",
    "path":"/planetaryTypes/Tier2/baseParameters/terrestrialType/-",
    "value":"magicalforest"
    },
    
    {"op":"add",
    "path":"/satelliteTypes/Tier2/baseParameters/terrestrialType/-",
    "value":"magicalforest"
    },
    
    

    Step 4: Cockpit.config

    one final bit of code you're going to need : open up interface/cockpit/cockpit.config. (again, use a .patch format!) Within there you are going to need to set your biomes description. Otherwise it will appear only as "???".


    Code:
    //updated format for 1.0
    {"op":"add","path":"/planetTypeToDescription/magicalforest",
    "value":[
    "^#59a849;Magical Forests^white; contain only magical squirrels that steal your mom's underpants.",
    "^#59a849;Magical Forests^white; contain only magical squirrels that steal your mom's underpants.",
    "^#59a849;Magical Forests^white; contain only magical squirrels that steal your mom's underpants."]},
    


    Step 5: Graphic Assets

    If you need any , now is the time to add in any custom graphic assets your biome makes use of within the /celestial folder.


    Test...test...and test

    Once all that is done, it's time to launch the game.

    I recommend, when testing biomes, to backup your universe files and then delete the originals. You're going to want a fresh universe to test your biome on unless you want to endlessly search for it among stars.

    With any luck, you won't generate any errors and your precious new biome will work. If not...the real horror begins.

    And if you don't already, start using the /reload command in-game when testing. It saves you the trouble of having to restart starbound every time there is a small adjustment to your code. Note that if you do this, though, you'll need to travel to a new section of space and find another of your biomes. Why? Because biomes that have already generated cannot be re-generated. As such, any errors your biome contains will still exist after you fix it.




    I'll refine this as time goes on. If I missed anything, apologies!
     
    Last edited: Jul 7, 2016
  2. lazarus78

    lazarus78 The Waste of Time

    Hey... Hey you... this... this "helpful" thing you are doing here... Stop that...

    I was working on something basically exactly like this. Guess I don't need to any more. :rofl: Good job.
     
    sayter likes this.
  3. The | Suit

    The | Suit Agent S. Forum Moderator

    Its still good idea to write it.
    Each persons writing style is different, so one persons interpretation of the same instructions might be better then some one elses for different individuals.
     
    Anc123 and Quilavabom like this.
  4. sayter

    sayter The Waste of Time

    Also, you could always build upon what I wrote by focusing yours on a specific area where I kept things very simple to cover the basics only.
     
  5. lazarus78

    lazarus78 The Waste of Time

    Mine was very crude and a very general "do this to make it work". This guide goes over things I didn't even think to consider. Im going to keep it on the backburner though.
     
  6. Mackinz

    Mackinz The Waste of Time

    Talking about "hueShiftOptions", does it apply to a biomes "mainBlock" and "subBlocks"? I have no plans to add a custom biome, but I am interested in adding some color variety to worlds.
     
  7. sayter

    sayter The Waste of Time

    as far as i can tell, it applies to any block that has the property "multiColored" set to true. It may even apply it to others, but I haven't fiddled much with that property.

    Be advised, some color values just will not work (at all) when paired with certain blocks. I had , at one point, protoworlds with neon-yellow blocks. That was horrendous.
     
    Mackinz likes this.
  8. Mackinz

    Mackinz The Waste of Time

    So I modded some stuff relating to the Garden biome. Patched Cobblestone to have "multiColored" set to true, changed the image to a very unsaturated red, and modded the values of "hueShiftOptions" to

    Code:
    [
    {
    "op" : "replace",  "path" : "/hueShiftOptions",
    "value" : [-180, -175, -170, -165, -160, -155, -150, -145, -140,  -135, -130, -125, -120, -115, -110, -105, -100, -95, -90, -85, -80, -75, -70, -65, -60, -55, -50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180]
    }
    ]
    
    And these are the results:


    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]


    The cobblestone looks roughly the same in each image - any ideas as to why?
     
  9. sayter

    sayter The Waste of Time

    Probably because its very grey, and not saturated. Color doesnt stick well to that. Think of it like a color overlay. The less saturated something is, and the mroe neutral, the less color it will take.Dirt, on the other hand, is brown by default, and therefore will hold color since it has hue values.
     
  10. Mackinz

    Mackinz The Waste of Time

    And I don't think the saturation is the problem, here.

    I changed the image to a brighter red and started turning on fullbright, and got two worlds with the same red color:


    [​IMG]
    [​IMG]
     
  11. sayter

    sayter The Waste of Time

    curious. i dont see any other props on tiles that should cause a disparity. Maybe it just hates grey-ish shades?

    Try the exact same experiment with "ash" and see what happens. Does ash dye or stay the same?


    edit: maybe its the "render" property itself that causes the issue. im not sure offhand, but dirt and similar tiles may be different. Or, it could be the "soil" property, perhaps. You can set them to "soil" without making them tillable. Shooting ideas out my ass here though, I could be way off.
     
  12. Mackinz

    Mackinz The Waste of Time

    Only did one test but the result was the same. Ash stayed the exact same color as how I modded it.

    [​IMG]
     
  13. sayter

    sayter The Waste of Time

    hmph. color me puzzled, then. I guess we'll just have to ask the devs
     
  14. The | Suit

    The | Suit Agent S. Forum Moderator

    It just could be you can't hue shift black.
     
  15. Mackinz

    Mackinz The Waste of Time

    Considering that there was no black in my modified tiles, not even gray, I think the more likely case is that CF took a shortcut when they made sure that gray cobblestone was never affected by hueShift, so that random multiple stacks of cobblestone were not generated.
     
  16. Campaigner

    Campaigner Giant Laser Beams

    I was following this guide, and I have encountered a strange problem. The game crashes on startup with my custom biome, only saying "Error: Fatal Exception caught: (JsonException) No such key in Json::get("cw_redmoon")". It isn't telling me what file is having the problem, and I've made absolutely certain that every mention of my biome has "cw_redmoon".

    Here's everything;

    Files Here

    Log:
    Code:
    Start logging at: 2015-10-15 13:48:54.309
    [13:48:54.309] Info: Star::Root using bootstrap file 'C:\Program Files (x86)\Steam\steamapps\common\Starbound - Unstable\win64\sbboot.config'
    [13:48:54.309] Info: Star::Root using storage directory 'C:\Program Files (x86)\Steam\steamapps\common\Starbound - Unstable\giraffe_storage\'
    [13:48:54.309] Info: Preparing Star::Root...
    [13:48:54.309] Info: Detected mod 'campworks_biomes' at '../giraffe_storage/mods\Red Moon\.'
    [13:48:54.309] Info: Loading Configuration with config file: 'starbound.config'
    [13:48:54.309] Info: Loading Star::Configuration from 'Just (.\..\giraffe_storage\starbound.config)'
    [13:48:54.309] Info: Writing Star::Configuration to '.\..\giraffe_storage\starbound.config'
    [13:48:54.321] Info: Initializing Star::Root with 3 assets sources
    [13:48:54.321] Info: Done preparing Star::Root.
    [13:48:54.321] Info: Client Version 'Beta v. Glad Giraffe - Update 0' Revision: 1a419328034f649ff4ae5079cb9ff87ef30f024d Protocol: 701
    [13:48:54.321] Info: Initialized SDL
    [13:48:54.342] Info: Initialized SDL Video
    [13:48:54.351] Info: Initialized SDL Joystick
    [13:48:54.351] Info: Initialized SDL Sound
    [13:48:54.373] Info: Opened default audio device with 44khz / 16 bit stereo audio, 2048 sample size buffer
    [13:48:54.373] Info: Loading Assets
    [13:48:54.373] Info: Loading assets from: '../assets/packed.pak'
    [13:48:54.373] Info: Loading assets from: '../assets/user'
    [13:48:54.373] Info: Loading assets from: '../giraffe_storage/mods\Red Moon\.'
    [13:48:54.695] Info: Done loading Assets in 0.322 seconds
    [13:48:54.697] Info: Loading NameGenerator
    [13:48:54.698] Info: Initializing SDL Window
    [13:48:54.702] Info: Done loading NameGenerator in 0.00500011 seconds
    [13:48:54.702] Info: Loading ObjectDatabase
    [13:48:54.984] Info: OpenGL version: '4.5.0 NVIDIA 358.50' vendor: 'NVIDIA Corporation' renderer: 'GeForce GTX 660/PCIe/SSE2' shader: '4.50 NVIDIA'
    [13:48:54.984] Info: Created initial window 1298x746
    [13:48:55.029] Info: Renderer initialized
    [13:48:55.030] Info: Renderer destroyed
    [13:48:55.030] Info: Initializing SDL Window
    [13:48:55.040] Info: OpenGL version: '4.5.0 NVIDIA 358.50' vendor: 'NVIDIA Corporation' renderer: 'GeForce GTX 660/PCIe/SSE2' shader: '4.50 NVIDIA'
    [13:48:55.040] Info: Re-created window 1298x746
    [13:48:55.040] Info: Renderer initialized
    [13:48:55.042] Info: Loading ImageMetadataDatabase
    [13:48:55.042] Info: Done loading ImageMetadataDatabase in 0 seconds
    [13:48:55.421] Info: Done loading ObjectDatabase in 0.719 seconds
    [13:48:55.421] Info: Loading PlantDatabase
    [13:48:55.576] Info: Done loading PlantDatabase in 0.155 seconds
    [13:48:55.576] Info: Loading ProjectileDatabase
    [13:48:55.830] Info: Done loading ProjectileDatabase in 0.254 seconds
    [13:48:55.830] Info: Loading MonsterDatabase
    [13:48:56.203] Info: Done loading MonsterDatabase in 0.373 seconds
    [13:48:56.203] Info: Loading NpcDatabase
    [13:48:56.264] Info: Done loading NpcDatabase in 0.0609999 seconds
    [13:48:56.264] Info: Loading StagehandDatabase
    [13:48:56.265] Info: Done loading StagehandDatabase in 0.00100017 seconds
    [13:48:56.265] Info: Loading VehicleDatabase
    [13:48:56.265] Info: Done loading VehicleDatabase in 0 seconds
    [13:48:56.265] Info: Loading PlayerFactory
    [13:48:56.268] Info: Done loading PlayerFactory in 0.00300002 seconds
    [13:48:56.268] Info: Loading EntityFactory
    [13:48:56.268] Info: Loading VersioningDatabase
    [13:48:56.269] Info: Done loading VersioningDatabase in 0.000999928 seconds
    [13:48:56.269] Info: Done loading EntityFactory in 0.000999928 seconds
    [13:48:56.269] Info: Loading ItemDatabase
    [13:49:03.267] Info: Loading FunctionDatabase
    [13:49:03.273] Info: Done loading FunctionDatabase in 0.00600004 seconds
    [13:49:03.273] Info: Loading ParticleDatabase
    [13:49:03.401] Info: Done loading ParticleDatabase in 0.128 seconds
    [13:49:05.929] Info: Done loading ItemDatabase in 9.659 seconds
    [13:49:05.929] Info: Loading MaterialDatabase
    [13:49:06.015] Info: Done loading MaterialDatabase in 0.086 seconds
    [13:49:06.015] Info: Loading TerrainDatabase
    [13:49:06.030] Info: Done loading TerrainDatabase in 0.0149999 seconds
    [13:49:06.030] Info: Loading BiomeDatabase
    [13:49:06.091] Info: Done loading BiomeDatabase in 0.0610001 seconds
    [13:49:06.092] Info: Loading LiquidsDatabase
    [13:49:06.092] Info: Done loading LiquidsDatabase in 0.000999928 seconds
    [13:49:06.092] Info: Loading StatusEffectDatabase
    [13:49:06.120] Info: Done loading StatusEffectDatabase in 0.0280001 seconds
    [13:49:06.120] Info: Loading DamageDatabase
    [13:49:06.247] Info: Done loading DamageDatabase in 0.127 seconds
    [13:49:06.247] Info: Loading EffectSourceDatabase
    [13:49:06.271] Info: Done loading EffectSourceDatabase in 0.0240002 seconds
    [13:49:06.271] Info: Loading TreasureDatabase
    [13:49:06.306] Info: Done loading TreasureDatabase in 0.0349998 seconds
    [13:49:06.306] Info: Loading DungeonDefinitions
    [13:49:06.656] Info: Done loading DungeonDefinitions in 0.35 seconds
    [13:49:06.656] Info: Loading EmoteProcessor
    [13:49:06.656] Info: Done loading EmoteProcessor in 0 seconds
    [13:49:06.656] Info: Loading SpeciesDatabase
    [13:49:06.663] Info: Done loading SpeciesDatabase in 0.00699997 seconds
    [13:49:06.663] Info: Loading QuestTemplateDatabase
    [13:49:06.685] Info: Done loading QuestTemplateDatabase in 0.0219998 seconds
    [13:49:06.685] Info: Loading AiDatabase
    [13:49:06.698] Info: Done loading AiDatabase in 0.013 seconds
    [13:49:06.698] Info: Loading TechDatabase
    [13:49:06.706] Info: Done loading TechDatabase in 0.00800014 seconds
    [13:49:06.706] Info: Loading CodexDatabase
    [13:49:06.855] Info: Done loading CodexDatabase in 0.149 seconds
    [13:49:06.855] Info: Loading BehaviorDatabase
    [13:49:06.914] Info: Done loading BehaviorDatabase in 0.059 seconds
    [13:49:06.915] Info: Done fully loading Star::Root
    [13:49:06.918] Info: Renderer destroyed
    [13:49:07.032] Info: Shutting down Star::Root
    [13:49:07.184] Error: Fatal Exception caught: (JsonException) No such key in Json::get("cw_redmoon")
    
    


    I've gone through all of the files over and over, and yet I can't find what is causing the problem. Would be nice if the log told me the problem a bit more clearly, but I can't figure it out at all.
     
  17. lazarus78

    lazarus78 The Waste of Time

    You should REALLY invest some time in properly indenting your files. It improves readability a crap ton. Also, use a validation site to find syntax errors, which yours have many from just looking at them after proper indentations.

    There is no single problem from what I'm seeing. The game is just crashing at the first one. Main problem areas are in the terrestrial_worlds.config and cockpit.config patches.
     
    Last edited: Oct 15, 2015
  18. sayter

    sayter The Waste of Time

    cockpit.config

    Code:
    [
    {"op":"add","path":"/planetTypeToDescription/cw_redmoon",
    "value":"A rocky, ^#949493;airless^white; world. A great source of fuel. ^red;No breathable atmosphere."},]
    
    Why is there a " , " at the end?


    and what lazarus said is accurate: fix your indenting. It will make life a LOT easier for you, and anyone else trying to debug your code.
     
    lazarus78 likes this.
  19. The | Suit

    The | Suit Agent S. Forum Moderator

  20. deliriousbiznasty

    deliriousbiznasty Pangalactic Porcupine

    I did everything as said in the guide, and very carefully looked at the vanilla assets. Yet I get an error when the game tries to load the .biome file :C the log is no help. What could I be doing wrong?
     

Share This Page