public static patch_CreatureTemplate AddTemplateData(patch_CreatureTemplate template) { List <TileConnectionResistance> list3 = new List <TileConnectionResistance>(); List <TileTypeResistance> list2 = new List <TileTypeResistance>(); switch ((int)template.type) { default: break; case (int)patch_CreatureTemplate.Type.LightWorm: break; case (int)patch_CreatureTemplate.Type.CrossBat: break; case (int)patch_CreatureTemplate.Type.SeaDrake: list2.Clear(); list3.Clear(); template.baseDamageResistance = 0.95f; template.baseStunResistance = 0.9f; template.instantDeathDamageLimit = 1f; template.abstractedLaziness = 100; template.AI = true; template.requireAImap = true; template.canSwim = true; template.doPreBakedPathing = false; template.offScreenSpeed = 2f; template.bodySize = 2f; template.preBakedPathingAncestor = new CreatureTemplate(CreatureTemplate.Type.Leech, null, list2, list3, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Eats, 1f));; template.grasps = 1; template.stowFoodInDen = true; template.visualRadius = 300f; template.waterVision = 1f; template.throughSurfaceVision = 0.65f; template.movementBasedVision = 0f; template.socialMemory = true; template.communityInfluence = 0f; template.communityID = CreatureCommunities.CommunityID.None; template.waterRelationship = CreatureTemplate.WaterRelationship.WaterOnly; template.meatPoints = 6; break; case (int)patch_CreatureTemplate.Type.GreyLizard: list2.Clear(); list3.Clear(); list2.Add(new TileTypeResistance(AItile.Accessibility.OffScreen, 1f, PathCost.Legality.Allowed)); list2.Add(new TileTypeResistance(AItile.Accessibility.Floor, 1f, PathCost.Legality.Allowed)); list2.Add(new TileTypeResistance(AItile.Accessibility.Corridor, 1f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.Standard, 1f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OpenDiagonal, 3f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ReachOverGap, 3f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ReachUp, 2f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.DoubleReachUp, 2f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ReachDown, 2f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.SemiDiagonalReach, 2f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.DropToFloor, 20f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.DropToWater, 20f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ShortCut, 1.5f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.NPCTransportation, 25f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OffScreenMovement, 1f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.BetweenRooms, 10f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.LizardTurn, 10f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.Slope, 1.5f, PathCost.Legality.Allowed)); CreatureTemplate creatureTemplate2 = new CreatureTemplate(CreatureTemplate.Type.LizardTemplate, null, list2, list3, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Ignores, 0f)); creatureTemplate2.offScreenSpeed = 0.3f; creatureTemplate2.grasps = 1; creatureTemplate2.virtualCreature = true; creatureTemplate2.abstractedLaziness = 50; template.name = "GreyLizard"; creatureTemplate2.AI = true; creatureTemplate2.requireAImap = true; creatureTemplate2.bodySize = 2f; creatureTemplate2.stowFoodInDen = true; creatureTemplate2.shortcutSegments = 3; creatureTemplate2.communityID = CreatureCommunities.CommunityID.Lizards; creatureTemplate2.communityInfluence = 1f; creatureTemplate2.waterRelationship = CreatureTemplate.WaterRelationship.AirAndSurface; creatureTemplate2.canSwim = true; creatureTemplate2.socialMemory = true; CreatureTemplate creatureTemplate3 = LizardBreeds.BreedTemplate(CreatureTemplate.Type.PinkLizard, creatureTemplate2, null, null, null); template = (patch_CreatureTemplate)GreyLizardBreed.BreedTemplate(patch_CreatureTemplate.Type.GreyLizard, creatureTemplate2, creatureTemplate3, null, null); template.type = (CreatureTemplate.Type)patch_CreatureTemplate.Type.GreyLizard; break; case (int)patch_CreatureTemplate.Type.WalkerBeast: list2.Clear(); list3.Clear(); list2.Add(new TileTypeResistance(AItile.Accessibility.Air, 1f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.Standard, 1f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OutsideRoom, 1f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.SideHighway, 100000f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OffScreenMovement, 1f, PathCost.Legality.Allowed)); list3.Add(new TileConnectionResistance(MovementConnection.MovementType.BetweenRooms, 10f, PathCost.Legality.Allowed)); template = new patch_CreatureTemplate(CreatureTemplate.Type.Deer, null, list2, list3, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Ignores, 0f)); template.baseDamageResistance = 200f; template.baseStunResistance = 8f; template.name = "WalkerBeast"; template.type = (CreatureTemplate.Type)patch_CreatureTemplate.Type.WalkerBeast; template.abstractedLaziness = 10; template.AI = true; template.requireAImap = true; template.doPreBakedPathing = true; template.offScreenSpeed = 1.5f; template.bodySize = 2f; template.grasps = 1; template.stowFoodInDen = false; template.visualRadius = 1450f; template.waterVision = 0.5f; template.throughSurfaceVision = 0.65f; template.movementBasedVision = 0f; template.hibernateOffScreen = true; template.communityInfluence = 0.85f; template.communityID = CreatureCommunities.CommunityID.None; template.waterRelationship = CreatureTemplate.WaterRelationship.AirOnly; template.preBakedPathingAncestor = StaticWorld.GetCreatureTemplate(CreatureTemplate.Type.Deer).preBakedPathingAncestor; break; } return(template); }
public void ctor(World world, patch_CreatureTemplate creatureTemplate, patch_Creature realizedCreature, WorldCoordinate pos, EntityID ID) { orig_ctor(world, creatureTemplate, realizedCreature, pos, ID); CreatureTemplate.Type type = creatureTemplate.TopAncestor().type; if (creatureTemplate.AI) { type = creatureTemplate.type; switch (type) { case CreatureTemplate.Type.Scavenger: abstractAI = new ScavengerAbstractAI(world, this); goto IL_2F4; case CreatureTemplate.Type.Overseer: abstractAI = new OverseerAbstractAI(world, this); goto IL_2F4; default: switch (type) { case CreatureTemplate.Type.Vulture: break; default: if (type != CreatureTemplate.Type.MirosBird) { abstractAI = new AbstractCreatureAI(world, this); goto IL_2F4; } abstractAI = new MirosBirdAbstractAI(world, this); goto IL_2F4; case CreatureTemplate.Type.CicadaA: case CreatureTemplate.Type.CicadaB: abstractAI = new CicadaAbstractAI(world, this); goto IL_2F4; case CreatureTemplate.Type.BigEel: abstractAI = new BigEelAbstractAI(world, this); goto IL_2F4; case CreatureTemplate.Type.Deer: abstractAI = new DeerAbstractAI(world, this); goto IL_2F4; case (CreatureTemplate.Type)patch_CreatureTemplate.Type.WalkerBeast: abstractAI = new WalkerBeastAbstractAI(world, this); goto IL_2F4; } break; case CreatureTemplate.Type.SmallNeedleWorm: case CreatureTemplate.Type.BigNeedleWorm: abstractAI = new NeedleWormAbstractAI(world, this); goto IL_2F4; case CreatureTemplate.Type.DropBug: abstractAI = new DropBugAbstractAI(world, this); goto IL_2F4; case CreatureTemplate.Type.KingVulture: break; } abstractAI = new VultureAbstractAI(world, this); } IL_2F4: if (pos.abstractNode > -1 && pos.abstractNode < Room.nodes.Length && Room.nodes[pos.abstractNode].type == AbstractRoomNode.Type.Den && !pos.TileDefined) { if (Room.offScreenDen) { remainInDenCounter = 1; } else { remainInDenCounter = UnityEngine.Random.Range(100, 1000); } if (abstractAI != null) { abstractAI.denPosition = new WorldCoordinate?(pos); } spawnDen = pos; } if (creatureTemplate.type == CreatureTemplate.Type.TentaclePlant || creatureTemplate.type == CreatureTemplate.Type.PoleMimic) { remainInDenCounter = 0; } }
public patch_AbstractCreature(World world, patch_CreatureTemplate creatureTemplate, Creature realizedCreature, WorldCoordinate pos, EntityID ID) : base(world, creatureTemplate, realizedCreature, pos, ID) { }
public extern void orig_ctor(World world, patch_CreatureTemplate creatureTemplate, patch_Creature realizedCreature, WorldCoordinate pos, EntityID ID);