public GameObject CreatePrefab()
    {
        GameObject gameObject = CreateLightBug("LightBugPurple", STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_PURPLE.NAME, STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_PURPLE.DESC, "lightbug_kanim", false);

        EntityTemplates.ExtendEntityToFertileCreature(gameObject, "LightBugPurpleEgg", STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_PURPLE.EGG_NAME, STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_PURPLE.DESC, "egg_lightbug_kanim", LightBugTuning.EGG_MASS, "LightBugPurpleBaby", 15.000001f, 5f, LightBugTuning.EGG_CHANCES_PURPLE, EGG_SORT_ORDER, true, false, true, 1f);
        return(gameObject);
    }
    public GameObject CreatePrefab()
    {
        GameObject prefab = CreatePacu("PacuCleaner", STRINGS.CREATURES.SPECIES.PACU.VARIANT_CLEANER.NAME, STRINGS.CREATURES.SPECIES.PACU.VARIANT_CLEANER.DESC, "pacu_kanim", false);

        prefab = EntityTemplates.ExtendEntityToWildCreature(prefab, PacuTuning.PEN_SIZE_PER_CREATURE, 25f);
        return(EntityTemplates.ExtendEntityToFertileCreature(prefab, "PacuCleanerEgg", STRINGS.CREATURES.SPECIES.PACU.VARIANT_CLEANER.EGG_NAME, STRINGS.CREATURES.SPECIES.PACU.VARIANT_CLEANER.DESC, "egg_pacu_kanim", PacuTuning.EGG_MASS, "PacuCleanerBaby", 15.000001f, 5f, PacuTuning.EGG_CHANCES_CLEANER, 501, false, true, false, 0.75f));
    }
示例#3
0
        public GameObject CreatePrefab()
        {
            ComplexRecipe.RecipeElement[] ingredients = new ComplexRecipe.RecipeElement[4]
            {
                new ComplexRecipe.RecipeElement((Tag)PuftConfig.EGG_ID, 2f),
                new ComplexRecipe.RecipeElement((Tag)PuftBleachstoneConfig.EGG_ID, 1f),
                new ComplexRecipe.RecipeElement((Tag)PuftOxyliteConfig.EGG_ID, 1f),
                new ComplexRecipe.RecipeElement(SimHashes.SourGas.CreateTag(), 10f),
            };
            ComplexRecipe.RecipeElement[] results = new ComplexRecipe.RecipeElement[1]
            {
                new ComplexRecipe.RecipeElement((Tag)DevilPuftConfig.EGG_ID, 1f)
            };
            var r = new ComplexRecipe(ComplexRecipeManager.MakeRecipeID(ID, (IList <ComplexRecipe.RecipeElement>)ingredients,
                                                                        (IList <ComplexRecipe.RecipeElement>)results), ingredients, results, 0)
            {
                time        = 80f / 8,
                description = BabyDescription,
                nameDisplay = ComplexRecipe.RecipeNameDisplay.Result
            };

            r.fabricators = new List <Tag>()
            {
                TagManager.Create(SupermaterialRefineryConfig.ID)
            };
            return(EntityTemplates.ExtendEntityToFertileCreature(DevilPuftConfig.CreatePuft(ID,
                                                                                            Name,
                                                                                            Description,
                                                                                            "devil_puft_adult_kanim", false), EGG_ID,
                                                                 EggName,
                                                                 Description,
                                                                 "devil_puft_egg_kanim", PuftTuning.EGG_MASS, BABY_ID, 45f, 15f,
                                                                 EggChances, DevilPuftConfig.EGG_SORT_ORDER, true, false, true, 1f));
        }
示例#4
0
    public GameObject CreatePrefab()
    {
        GameObject gameObject = CreateOilFloater("Oilfloater", STRINGS.CREATURES.SPECIES.OILFLOATER.NAME, STRINGS.CREATURES.SPECIES.OILFLOATER.DESC, "oilfloater_kanim", false);

        EntityTemplates.ExtendEntityToFertileCreature(gameObject, "OilfloaterEgg", STRINGS.CREATURES.SPECIES.OILFLOATER.EGG_NAME, STRINGS.CREATURES.SPECIES.OILFLOATER.DESC, "egg_oilfloater_kanim", OilFloaterTuning.EGG_MASS, "OilfloaterBaby", 60.0000038f, 20f, OilFloaterTuning.EGG_CHANCES_BASE, EGG_SORT_ORDER, true, false, true, 1f);
        return(gameObject);
    }
示例#5
0
 public GameObject CreatePrefab()
 {
     return(EntityTemplates.ExtendEntityToFertileCreature(
                EntityTemplates.ExtendEntityToWildCreature(
                    CreatePacu(ID,
                               NAME,
                               DESCRIPTION,
                               "custompacu_kanim",
                               false),
                    PacuTuning.PEN_SIZE_PER_CREATURE,
                    25f),
                EGG_ID,
                EGG_NAME,
                DESCRIPTION,
                "egg_custompacu_kanim",
                PacuTuning.EGG_MASS,
                BabyBetaPacuConfig.ID,
                15f,
                5f,
                CustomPacuTuning.EGG_CHANCES_BETA,
                EGG_SORT_ORDER,
                false,
                true,
                false,
                0.75f));
 }
    public GameObject CreatePrefab()
    {
        GameObject gameObject = CreateLightBug("LightBugCrystal", STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_CRYSTAL.NAME, STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_CRYSTAL.DESC, "lightbug_kanim", false);

        EntityTemplates.ExtendEntityToFertileCreature(gameObject, "LightBugCrystalEgg", STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_CRYSTAL.EGG_NAME, STRINGS.CREATURES.SPECIES.LIGHTBUG.VARIANT_CRYSTAL.DESC, "egg_lightbug_kanim", LightBugTuning.EGG_MASS, "LightBugCrystalBaby", 45f, 15f, LightBugTuning.EGG_CHANCES_CRYSTAL, EGG_SORT_ORDER, true, false, true, 1f);
        return(gameObject);
    }
        public GameObject CreatePrefab()
        {
            GameObject gameObject = CreateOilFloater(ID, PHO_STRINGS.VARIANT_OWO.NAME, PHO_STRINGS.VARIANT_OWO.DESC, base_kanim_id, false);

            DecorProvider decorProvider = gameObject.AddOrGet <DecorProvider>();

            decorProvider.SetValues(TUNING.DECOR.BONUS.TIER5);


            EffectArea owoEffect = gameObject.AddComponent <EffectArea>();

            owoEffect.EffectName = "OwO_effect";
            owoEffect.Area       = 5;


            EntityTemplates.ExtendEntityToFertileCreature(gameObject,
                                                          EGG_ID,
                                                          PHO_STRINGS.VARIANT_OWO.EGG_NAME,
                                                          PHO_STRINGS.VARIANT_OWO.DESC,
                                                          egg_kanim_id,
                                                          OilFloaterTuning.EGG_MASS,
                                                          ID + "Baby",
                                                          60.0000038f, 20f,
                                                          EGG_CHANCES_OWO,
                                                          EGG_SORT_ORDER,
                                                          true, false, true, 1f);
            return(gameObject);
        }
示例#8
0
    public GameObject CreatePrefab()
    {
        GameObject gameObject = CreateLightBug("LightBug", STRINGS.CREATURES.SPECIES.LIGHTBUG.NAME, STRINGS.CREATURES.SPECIES.LIGHTBUG.DESC, "lightbug_kanim", false);

        EntityTemplates.ExtendEntityToFertileCreature(gameObject, "LightBugEgg", STRINGS.CREATURES.SPECIES.LIGHTBUG.EGG_NAME, STRINGS.CREATURES.SPECIES.LIGHTBUG.DESC, "egg_lightbug_kanim", LightBugTuning.EGG_MASS, "LightBugBaby", 15.000001f, 5f, LightBugTuning.EGG_CHANCES_BASE, EGG_SORT_ORDER, true, false, true, 1f);
        gameObject.GetComponent <KPrefabID>().AddTag(RoomConstraints.ConstraintTags.LightSource, false);
        return(gameObject);
    }
示例#9
0
    public GameObject CreatePrefab()
    {
        GameObject prefab = CreateCrab("Crab", STRINGS.CREATURES.SPECIES.CRAB.NAME, STRINGS.CREATURES.SPECIES.CRAB.DESC, "pincher_kanim", false, "CrabShell");

        prefab = EntityTemplates.ExtendEntityToFertileCreature(prefab, "CrabEgg", STRINGS.CREATURES.SPECIES.CRAB.EGG_NAME, STRINGS.CREATURES.SPECIES.CRAB.DESC, "egg_pincher_kanim", CrabTuning.EGG_MASS, "CrabBaby", 60.0000038f, 20f, CrabTuning.EGG_CHANCES_BASE, EGG_SORT_ORDER, true, false, true, 1f);
        EggProtectionMonitor.Def def = prefab.AddOrGetDef <EggProtectionMonitor.Def>();
        def.allyTags = new Tag[1]
        {
            GameTags.Creatures.CrabFriend
        };
        return(prefab);
    }
示例#10
0
        public GameObject CreatePrefab()
        {
            ComplexRecipe.RecipeElement[] ingredients = new ComplexRecipe.RecipeElement[4]
            {
                new ComplexRecipe.RecipeElement((Tag)SquirrelConfig.EGG_ID, 2f),
                new ComplexRecipe.RecipeElement((Tag)RawEggConfig.ID, (float)(5)),
                new ComplexRecipe.RecipeElement(BasicSingleHarvestPlantConfig.SEED_ID.ToTag(), 10f),
                new ComplexRecipe.RecipeElement(SimHashes.Clay.CreateTag(), 1000f),
            };
            ComplexRecipe.RecipeElement[] results = new ComplexRecipe.RecipeElement[1]
            {
                new ComplexRecipe.RecipeElement((Tag)EGG_ID, 1f)
            };
            var r = new ComplexRecipe(ComplexRecipeManager.MakeRecipeID(ID, (IList <ComplexRecipe.RecipeElement>)ingredients,
                                                                        (IList <ComplexRecipe.RecipeElement>)results), ingredients, results, 0)
            {
                time        = 80f / 8,
                description = BabyDescription,
                nameDisplay = ComplexRecipe.RecipeNameDisplay.Result
            };

            r.fabricators = new List <Tag>()
            {
                TagManager.Create(SupermaterialRefineryConfig.ID)
            };
            //add_recipe_Dirt();

            return(EntityTemplates.ExtendEntityToFertileCreature(
                       CreateCritter(
                           id: ID,
                           name: Name,
                           desc: Description,
                           anim_file:
                           //"squirrel_kanim",
                           //"squirrel_autumn_kanim",
                           "squirrel_autumn_kanim",
                           is_baby: false
                           ),
                       EGG_ID,
                       EggName,
                       Description,
                       //"egg_squirrel_kanim",
                       "egg_squirrel_autumn_kanim",
                       SquirrelTuning.EGG_MASS,
                       BabyId,
                       FertilityCycles,
                       IncubationCycles,
                       EggChances,
                       EGG_SORT_ORDER));
        }
    public GameObject CreatePrefab()
    {
        GameObject gameObject        = CreateMole("Mole", STRINGS.CREATURES.SPECIES.MOLE.NAME, STRINGS.CREATURES.SPECIES.MOLE.DESC, "driller_kanim", false);
        GameObject prefab            = gameObject;
        string     eggId             = "MoleEgg";
        string     eggName           = STRINGS.CREATURES.SPECIES.MOLE.EGG_NAME;
        string     eggDesc           = STRINGS.CREATURES.SPECIES.MOLE.DESC;
        string     egg_anim          = "egg_driller_kanim";
        float      eGG_MASS          = MoleTuning.EGG_MASS;
        string     baby_id           = "MoleBaby";
        float      fertility_cycles  = 60.0000038f;
        float      incubation_cycles = 20f;
        int        eGG_SORT_ORDER    = EGG_SORT_ORDER;

        return(EntityTemplates.ExtendEntityToFertileCreature(prefab, eggId, eggName, eggDesc, egg_anim, eGG_MASS, baby_id, fertility_cycles, incubation_cycles, MoleTuning.EGG_CHANCES_BASE, eGG_SORT_ORDER, true, false, true, 1f));
    }
    public virtual GameObject CreatePrefab()
    {
        GameObject gameObject        = CreateDrecko("Drecko", CREATURES.SPECIES.DRECKO.NAME, CREATURES.SPECIES.DRECKO.DESC, "drecko_kanim", false);
        GameObject prefab            = gameObject;
        string     eggId             = "DreckoEgg";
        string     eggName           = CREATURES.SPECIES.DRECKO.EGG_NAME;
        string     eggDesc           = CREATURES.SPECIES.DRECKO.DESC;
        string     egg_anim          = "egg_drecko_kanim";
        float      eGG_MASS          = DreckoTuning.EGG_MASS;
        string     baby_id           = "DreckoBaby";
        float      fertility_cycles  = 90f;
        float      incubation_cycles = 30f;
        int        eGG_SORT_ORDER    = EGG_SORT_ORDER;

        return(EntityTemplates.ExtendEntityToFertileCreature(prefab, eggId, eggName, eggDesc, egg_anim, eGG_MASS, baby_id, fertility_cycles, incubation_cycles, DreckoTuning.EGG_CHANCES_BASE, eGG_SORT_ORDER, true, false, true, 1f));
    }
示例#13
0
        public GameObject CreatePrefab()
        {
            ComplexRecipe.RecipeElement[] ingredients = new ComplexRecipe.RecipeElement[4]
            {
                new ComplexRecipe.RecipeElement((Tag)DreckoConfig.EGG_ID, 2f),
                new ComplexRecipe.RecipeElement((Tag)RawEggConfig.ID, (float)(5)),
                new ComplexRecipe.RecipeElement(SimHashes.Algae.CreateTag(), 5000f),
                new ComplexRecipe.RecipeElement(SimHashes.ToxicSand.CreateTag(), 1000f),
            };
            ComplexRecipe.RecipeElement[] results = new ComplexRecipe.RecipeElement[1]
            {
                new ComplexRecipe.RecipeElement((Tag)EGG_ID, 1f)
            };
            var r = new ComplexRecipe(ComplexRecipeManager.MakeRecipeID(ID, (IList <ComplexRecipe.RecipeElement>)ingredients,
                                                                        (IList <ComplexRecipe.RecipeElement>)results), ingredients, results, 0)
            {
                time        = 80f / 8,
                description = BabyDescription,
                nameDisplay = ComplexRecipe.RecipeNameDisplay.Result
            };

            r.fabricators = new List <Tag>()
            {
                TagManager.Create(SupermaterialRefineryConfig.ID)
            };
            return(EntityTemplates.ExtendEntityToFertileCreature(
                       CreateCritter(
                           id: ID,
                           name: Name,
                           desc: Description,
                           anim_file:
                           "adult_algae_drecko_kanim",
                           is_baby: false
                           ),
                       EGG_ID,
                       EggName,
                       Description,
                       "egg_algae_drecko_kanim",
                       DreckoTuning.EGG_MASS,
                       BabyId,
                       FertilityCycles,
                       IncubationCycles,
                       EggChances,
                       EGG_SORT_ORDER));
        }
示例#14
0
        public GameObject CreatePrefab()
        {
            GameObject gameObject = CreateOilfloater(ID, PHO_STRINGS.VARIANT_AQUA.NAME, PHO_STRINGS.VARIANT_AQUA.DESC, base_kanim_id, false);

            EntityTemplates.ExtendEntityToFertileCreature(
                gameObject,
                EGG_ID,
                PHO_STRINGS.VARIANT_AQUA.EGG_NAME,
                PHO_STRINGS.VARIANT_AQUA.DESC,
                egg_kanim_id,
                OilFloaterTuning.EGG_MASS,
                ID + "Baby",
                40f, 10f,
                EGG_CHANCES_AQUA,
                EGG_SORT_ORDER);

            return(gameObject);
        }
示例#15
0
 public GameObject CreatePrefab()
 {
     return(EntityTemplates.ExtendEntityToFertileCreature(
                EntityTemplates.ExtendEntityToWildCreature(
                    CreatePacu(ID,
                               NAME,
                               DESC,
                               "pacu_kanim", false),
                    PacuTuning.PEN_SIZE_PER_CREATURE, 25f),
                EGG_ID,
                EGGNAME,
                EGGDESC,
                "egg_pacu_kanim",
                PacuTuning.EGG_MASS,
                BabyOilFishConfig.ID,
                15f, 5f, EGG_CHANCES_OIL, 502, false, true, false, 0.75f
                ));
 }
        public GameObject CreatePrefab()
        {
            GameObject gameObject = CreateOilfloater(ID, PHO_STRINGS.VARIANT_LEAFY.NAME, PHO_STRINGS.VARIANT_LEAFY.DESC, base_kanim_id, false);

            gameObject.AddOrGetDef <CreatureLightMonitor.Def>();

            EntityTemplates.ExtendEntityToFertileCreature(
                gameObject,
                EGG_ID,
                PHO_STRINGS.VARIANT_LEAFY.EGG_NAME,
                PHO_STRINGS.VARIANT_LEAFY.DESC,
                egg_kanim_id,
                OilFloaterTuning.EGG_MASS,
                ID + "Baby",
                30f, 10f,
                EGG_CHANCES_LEAFY,
                EGG_SORT_ORDER);

            return(gameObject);
        }
示例#17
0
 public GameObject CreatePrefab()
 {
     return(EntityTemplates.ExtendEntityToFertileCreature(
                CreateHatch(
                    id: Id,
                    name: Name,
                    desc: Description,
                    anim_file: "floral_hatch_adult_kanim",
                    is_baby: false
                    ),
                EggId,
                EggName,
                Description,
                "floral_hatch_egg_kanim",
                HatchTuning.EGG_MASS,
                BabyId,
                FertilityCycles,
                IncubationCycles,
                EggChances,
                HatchConfig.EGG_SORT_ORDER));
 }
示例#18
0
 public GameObject CreatePrefab()
 {
     return(EntityTemplates.ExtendEntityToFertileCreature(
                CreateHatch(
                    id: Id,
                    name: Name,
                    desc: Description,
                    anim_file: "hatch_new", // this is your new hatch anim - it should be made from the unmodified anim + build but your modified texture/png file.
                    is_baby: false
                    ),
                EggId,
                EggName,
                Description,
                "egg_hatch_kanim", // replace this with your egg anim
                HatchTuning.EGG_MASS,
                BabyId,
                FertilityCycles,
                IncubationCycles,
                EggChances,
                HatchVeggieConfig.EGG_SORT_ORDER));
 }
    public GameObject CreatePrefab()
    {
        GameObject prefab = CreatePuftAlpha("PuftAlpha", STRINGS.CREATURES.SPECIES.PUFT.VARIANT_ALPHA.NAME, STRINGS.CREATURES.SPECIES.PUFT.VARIANT_ALPHA.DESC, "puft_kanim", false);

        return(EntityTemplates.ExtendEntityToFertileCreature(prefab, "PuftAlphaEgg", STRINGS.CREATURES.SPECIES.PUFT.VARIANT_ALPHA.EGG_NAME, STRINGS.CREATURES.SPECIES.PUFT.VARIANT_ALPHA.DESC, "egg_puft_kanim", PuftTuning.EGG_MASS, "PuftAlphaBaby", 45f, 15f, PuftTuning.EGG_CHANCES_ALPHA, EGG_SORT_ORDER, true, false, true, 1f));
    }
示例#20
0
    public GameObject CreatePrefab()
    {
        GameObject prefab = CreatePacu("Pacu", CREATURES.SPECIES.PACU.NAME, CREATURES.SPECIES.PACU.DESC, "pacu_kanim", false);

        return(EntityTemplates.ExtendEntityToFertileCreature(prefab, "PacuEgg", CREATURES.SPECIES.PACU.EGG_NAME, CREATURES.SPECIES.PACU.DESC, "egg_pacu_kanim", PacuTuning.EGG_MASS, "PacuBaby", 15.000001f, 5f, PacuTuning.EGG_CHANCES_BASE, 500, false, true, false, 0.75f));
    }
        public GameObject CreatePrefab()
        {
            GameObject rollerSnake = CreateSteelRollerSnake(Id, Name, Description, "rollersnake_kanim", false);

            return(EntityTemplates.ExtendEntityToFertileCreature(rollerSnake, EggId, EggName, Description, "rollersnakeegg_kanim", RollerSnakeTuning.EGG_MASS, BabySteelRollerSnakeConfig.Id, FertilityCycles, IncubationCycles, RollerSnakeTuning.EGG_CHANCES_STEEL, EggSortOrder, true, false, true, 1f));
        }
示例#22
0
    public GameObject CreatePrefab()
    {
        GameObject prefab = CreatePuftBleachstone("PuftBleachstone", STRINGS.CREATURES.SPECIES.PUFT.VARIANT_BLEACHSTONE.NAME, STRINGS.CREATURES.SPECIES.PUFT.VARIANT_BLEACHSTONE.DESC, "puft_kanim", false);

        return(EntityTemplates.ExtendEntityToFertileCreature(prefab, "PuftBleachstoneEgg", STRINGS.CREATURES.SPECIES.PUFT.VARIANT_BLEACHSTONE.EGG_NAME, STRINGS.CREATURES.SPECIES.PUFT.VARIANT_BLEACHSTONE.DESC, "egg_puft_kanim", PuftTuning.EGG_MASS, "PuftBleachstoneBaby", 45f, 15f, PuftTuning.EGG_CHANCES_BLEACHSTONE, EGG_SORT_ORDER, true, false, true, 1f));
    }
示例#23
0
    public GameObject CreatePrefab()
    {
        GameObject prefab = CreateHatch("HatchVeggie", STRINGS.CREATURES.SPECIES.HATCH.VARIANT_VEGGIE.NAME, STRINGS.CREATURES.SPECIES.HATCH.VARIANT_VEGGIE.DESC, "hatch_kanim", false);

        return(EntityTemplates.ExtendEntityToFertileCreature(prefab, "HatchVeggieEgg", STRINGS.CREATURES.SPECIES.HATCH.VARIANT_VEGGIE.EGG_NAME, STRINGS.CREATURES.SPECIES.HATCH.VARIANT_VEGGIE.DESC, "egg_hatch_kanim", HatchTuning.EGG_MASS, "HatchVeggieBaby", 60.0000038f, 20f, HatchTuning.EGG_CHANCES_VEGGIE, EGG_SORT_ORDER, true, false, true, 1f));
    }
    public void test()
    {
        // configurations
        string         id                   = "HatchHard";
        string         name                 = "Stone Hatch";
        string         desc                 = "Stone Hatches excrete solid Coal as waste and enjoy burrowing into the ground.";
        string         anim_file            = "hatch_kanim";
        bool           is_baby              = false;
        string         traitId              = "HatchHardBaseTrait";
        string         override_prefix      = "hvy_";
        int            space_requirement    = HatchTuning.PEN_SIZE_PER_CREATURE;
        float          lifespan             = 100f;
        float          mass                 = 100f;
        int            width                = 1;
        int            height               = 1;
        EffectorValues decor                = TUNING.DECOR.BONUS.TIER0;
        string         navGridName          = !is_baby ? "WalkerNavGrid1x1" : "WalkerBabyNavGrid";
        NavType        navi                 = NavType.Floor;
        float          moveSpeed            = 2f;
        string         dropOnDeath          = "Meat";
        int            dropCount            = 2;
        bool           canDrown             = true;
        bool           canCrushed           = false;
        float          tempLowDeath         = 243.15f;
        float          tempLowWarning       = 283.15f;
        float          tempBorn             = 293f;
        float          tempHighWarning      = 293.15f;
        float          tempHighDeath        = 343.15f;
        bool           pickup_only_from_top = true;
        bool           pickup_allow_mark    = true;
        bool           pickup_use_gun       = false;
        Tag            tag                  = GameTags.Creatures.Walker;
        Tag            species              = GameTags.Creatures.Species.HatchSpecies;
        float          attackValue          = 1f;

        ChoreTable.Builder chore_table = new ChoreTable.Builder().Add(new DeathStates.Def(), true).Add(new AnimInterruptStates.Def(), true).Add(new ExitBurrowStates.Def(), !is_baby).Add(new PlayAnimsStates.Def(GameTags.Creatures.Burrowed, true, "idle_mound", STRINGS.CREATURES.STATUSITEMS.BURROWED.NAME, STRINGS.CREATURES.STATUSITEMS.BURROWED.TOOLTIP), !is_baby).Add(new GrowUpStates.Def(), true).Add(new TrappedStates.Def(), true).Add(new IncubatingStates.Def(), true).Add(new BaggedStates.Def(), true).Add(new FallStates.Def(), true).Add(new StunnedStates.Def(), true).Add(new DrowningStates.Def(), true).Add(new DebugGoToStates.Def(), true).Add(new FleeStates.Def(), true).Add(new AttackStates.Def(), !is_baby).PushInterruptGroup().Add(new CreatureSleepStates.Def(), true).Add(new FixedCaptureStates.Def(), true).Add(new RanchedStates.Def(), true).Add(new PlayAnimsStates.Def(GameTags.Creatures.WantsToEnterBurrow, false, "hide", STRINGS.CREATURES.STATUSITEMS.BURROWING.NAME, STRINGS.CREATURES.STATUSITEMS.BURROWING.TOOLTIP), !is_baby).Add(new LayEggStates.Def(), true).Add(new EatStates.Def(), true).Add(new PlayAnimsStates.Def(GameTags.Creatures.Poop, false, "poop", STRINGS.CREATURES.STATUSITEMS.EXPELLING_SOLID.NAME, STRINGS.CREATURES.STATUSITEMS.EXPELLING_SOLID.TOOLTIP), true).Add(new CallAdultStates.Def(), true).PopInterruptGroup().Add(new IdleStates.Def(), true);

        string adultId           = "HatchHard";
        string eggId             = "HatchHardBaby";
        string eggName           = "Stone Hatchling Egg";
        string anim_egg          = "egg_hatch_kanim";
        float  egg_mass          = 2f;
        string dropOnMature      = null;
        float  fertility_cycles  = 60f;
        float  incubation_cycles = 20f;
        int    egg_sortorder     = 2;
        List <FertilityMonitor.BreedingChance> egg_chances = new List <FertilityMonitor.BreedingChance>();

        egg_chances.Add(BreedingChance("HatchHardEgg", 1f));
        bool  is_ranchable = true;
        bool  is_fish      = false;
        float egg_scale    = 1f;

        float            calories_per_KG = 700000f / 140f;
        float            min_poop_KG     = 25;
        List <Diet.Info> diet_list       = BaseHatchConfig.HardRockDiet(SimHashes.Carbon.CreateTag(), calories_per_KG, TUNING.CREATURES.CONVERSION_EFFICIENCY.NORMAL, null, 0f);
        // end of configurations

        // basic generation
        object    obj           = Activator.CreateInstance(typeof(HatchHardConfig));
        KPrefabID obj_kPrefabID = (obj as HatchHardConfig).CreatePrefab().GetComponent <KPrefabID>();

        obj_kPrefabID.prefabInitFn  += (obj as HatchHardConfig).OnPrefabInit;
        obj_kPrefabID.prefabSpawnFn += (obj as HatchHardConfig).OnSpawn;
        Assets.AddPrefab(obj_kPrefabID);

        // advanced generation
        // critter = BaseHatchConfig.BaseHatch(id, name, desc, anim_file, traitId, is_baby, override_prefix);
        GameObject critter;

        critter = EntityTemplates.CreatePlacedEntity(id, name, desc, mass, Assets.GetAnim(anim_file), "idle_loop", Grid.SceneLayer.Creatures, width, height, decor, default(EffectorValues), SimHashes.Creature, null, tempBorn);
        EntityTemplates.ExtendEntityToBasicCreature(critter, FactionManager.FactionID.Pest, traitId, navGridName, navi, 32, moveSpeed, dropOnDeath, dropCount, canDrown, canCrushed, tempLowWarning, tempHighWarning, tempLowDeath, tempHighDeath);
        if (override_prefix != null)
        {
            critter.AddOrGet <SymbolOverrideController>().ApplySymbolOverridesByAffix(Assets.GetAnim(anim_file), override_prefix, null, 0);
        }
        critter.AddOrGet <Trappable>();
        critter.AddOrGetDef <CreatureFallMonitor.Def>();
        critter.AddOrGetDef <BurrowMonitor.Def>();
        critter.AddOrGetDef <WorldSpawnableMonitor.Def>().adjustSpawnLocationCb = (int cell) => { return(cell); };//new Func<int, int>(BaseHatchConfig.AdjustSpawnLocationCB);
        critter.AddOrGetDef <ThreatMonitor.Def>().fleethresholdState            = Health.HealthState.Dead;
        critter.AddWeapon(attackValue, attackValue, AttackProperties.DamageType.Standard, AttackProperties.TargetType.Single, 1, 0f);
        EntityTemplates.CreateAndRegisterBaggedCreature(critter, pickup_only_from_top, pickup_allow_mark, pickup_use_gun);
        KPrefabID prefabID = critter.GetComponent <KPrefabID>();

        prefabID.AddTag(tag, false);
        prefabID.prefabInitFn += delegate(GameObject inst) { inst.GetAttributes().Add(Db.Get().Attributes.MaxUnderwaterTravelCost); };
        EntityTemplates.AddCreatureBrain(critter, chore_table, species, override_prefix);

        EntityTemplates.ExtendEntityToWildCreature(critter, space_requirement, lifespan);

        Diet diet = new Diet(diet_list.ToArray());

        CreatureCalorieMonitor.Def calorieMonitor = critter.AddOrGetDef <CreatureCalorieMonitor.Def>();
        calorieMonitor.diet = diet;
        calorieMonitor.minPoopSizeInCalories = calories_per_KG * min_poop_KG;
        critter.AddOrGetDef <SolidConsumerMonitor.Def>().diet = diet;

        if (is_baby)
        {
            EntityTemplates.ExtendEntityToBeingABaby(critter, adultId, dropOnMature);
        }
        else
        {
            EntityTemplates.ExtendEntityToFertileCreature(critter, eggId, eggName, desc, anim_egg,
                                                          egg_mass, eggId, fertility_cycles,
                                                          incubation_cycles, egg_chances,
                                                          egg_sortorder, is_ranchable, is_fish, true, egg_scale);
        }
    }