private void SelectMonsterTypes() { if (info == null) { return; } monStats = new MonStat[info.numMon]; int[] monsterColumns = new int[info.numMon]; for (int i = 0; i < info.numMon; ++i) { monsterColumns[i] = -1; } for (int i = 0; i < info.numMon; ++i) { int index; do { index = Random.Range(0, info.monsters.Count); }while (System.Array.IndexOf(monsterColumns, index) != -1); monsterColumns[i] = index; monStats[i] = MonStat.Find(info.monsters[index]); } }
private static void Spawn(MonStat monStat, int x, int y, int level, Transform root) { if (!CollisionMap.Passable(new Vector2i(x, y) * Iso.SubTileCount, monStat.ext.sizeX)) { return; } int count = Random.Range(monStat.minGrp, monStat.maxGrp + 1); for (int i = 0; i < count; ++i) { var mon = World.SpawnMonster(monStat, Iso.MapTileToWorld(x, y), root); mon.level = level; } if (monStat.minion1 != null) { int minionCount = Random.Range(monStat.partyMin, monStat.partyMax); for (int i = 0; i < minionCount; ++i) { var mon = World.SpawnMonster(monStat.minion1, Iso.MapTileToWorld(x, y), root); mon.level = level; } } }
public bool ModStat(MonStat stat, int stages) { switch (stat) { case MonStat.Attack: return(ModStat(ref buffStageAtk, stages)); case MonStat.Defense: return(ModStat(ref buffStageDef, stages)); case MonStat.SpecialAttack: return(ModStat(ref buffStageSpAtk, stages)); case MonStat.SpecialDefense: return(ModStat(ref buffStageSpDef, stages)); case MonStat.Speed: return(ModStat(ref buffStageSpeed, stages)); case MonStat.Accuracy: return(ModStat(ref buffStageAcc, stages)); case MonStat.Evasion: return(ModStat(ref buffStageEva, stages)); default: return(false); } }
static SuperUnique() { foreach (var row in sheet) { row.monStat = MonStat.Find(row.monStatId); row.name = Translation.Find(row.nameStr); map.Add(row.superUnique, row); } }
public static Character SpawnMonster(string id, Vector3 pos, Transform parent = null) { MonStat monStat = MonStat.Find(id); if (monStat == null) { Debug.LogWarning("Monster id not found: " + id); return(null); } return(SpawnMonster(monStat, pos, parent)); }
public static void LoadAll() { var sw = System.Diagnostics.Stopwatch.StartNew(); Translation.Load(); SoundInfo.Load(); SoundEnvironment.Load(); ObjectInfo.Load(); BodyLoc.Load(); ExpTable.Load(); LevelType.Load(); LevelWarpInfo.Load(); LevelPreset.Load(); LevelMazeInfo.Load(); LevelInfo.Load(); OverlayInfo.Load(); MissileInfo.Load(); ItemStat.Load(); ItemRatio.Load(); ItemType.Load(); ItemPropertyInfo.Load(); ItemSet.Load(); UniqueItem.Load(); SetItem.Load(); TreasureClass.Load(); MagicAffix.Load(); CharStatsInfo.Load(); MonLvl.Load(); MonPreset.Load(); MonSound.Load(); MonStatsExtended.Load(); MonStat.Load(); SuperUnique.Load(); SkillDescription.Load(); SkillInfo.Load(); SpawnPreset.Load(); StateInfo.Load(); Debug.Log("All txt files loaded in " + sw.ElapsedMilliseconds + " ms"); }
public static Character SpawnMonster(MonStat monStat, Vector3 pos, Transform parent = null) { pos = Iso.MapToIso(pos); if (!CollisionMap.Fit(pos, out pos, monStat.ext.sizeX)) { return(null); } pos = Iso.MapToWorld(pos); var monster = new GameObject(monStat.nameStr); monster.transform.SetParent(parent); monster.transform.position = pos; var character = monster.AddComponent <Character>(); character.monStat = monStat; character.title = monStat.name; character.basePath = @"data\global\monsters"; character.token = monStat.code; character.weaponClass = monStat.ext.baseWeaponClass; character.run = false; character.walkSpeed = monStat.speed; character.runSpeed = monStat.runSpeed; character.size = monStat.ext.sizeX; var monLvl = MonLvl.Find(monStat.level[0]); if (monLvl != null && !monStat.noRatio) { character.health = Random.Range(monLvl.hp[0] * monStat.stats[0].minHP, monLvl.hp[0] * monStat.stats[0].maxHP + 1) / 100; } else { character.health = Random.Range(monStat.stats[0].minHP, monStat.stats[0].maxHP + 1); } character.maxHealth = character.health; var animator = character.GetComponent <COFAnimator>(); animator.equip = new string[monStat.ext.gearVariants.Length]; for (int i = 0; i < animator.equip.Length; ++i) { var variants = monStat.ext.gearVariants[i]; if (variants == null) { continue; } animator.equip[i] = variants[Random.Range(0, variants.Length)]; } if (monStat.ai == "Npc") { monster.AddComponent <NpcController>(); } else if (monStat.ai != "Idle" && monStat.ai != "NpcStationary") { monster.AddComponent <MonsterController>(); } var body = monster.AddComponent <Rigidbody2D>(); body.isKinematic = true; var collider = monster.AddComponent <CircleCollider2D>(); collider.radius = monStat.ext.sizeX * Iso.tileSizeY; return(character); }
static bool CreateObject(SpawnPreset obj, int x, int y, int level, Transform root) { var pos = Iso.MapToWorld(x - 2, y - 2); if (obj.type == 2) { if (obj.objectId >= ObjectInfo.sheet.Count) { return(false); } ObjectInfo objectInfo = ObjectInfo.sheet[obj.objectId]; var staticObject = World.SpawnObject(objectInfo, pos, parent: root); staticObject.modeName = obj.mode; return(true); } else { string monPreset = MonPreset.Find(obj.act, obj.id); MonStat monStat = null; SuperUnique superUnique = null; if (monPreset != null) { monStat = MonStat.Find(monPreset); if (monStat == null) { superUnique = SuperUnique.Find(monPreset); } } else { monStat = MonStat.sheet[obj.id]; } if (monStat != null) { World.SpawnMonster(monStat, pos, root); return(true); } if (superUnique != null) { var monster = World.SpawnMonster(superUnique.monStat, pos, root); monster.gameObject.name = superUnique.nameStr; monster.title = superUnique.name; monster.level = level; int minionCount = Random.Range(superUnique.minGrp, superUnique.maxGrp + 1); for (int i = 0; i < minionCount; ++i) { var minion = World.SpawnMonster(superUnique.monStat, pos, root); minion.level = level; } return(true); } if (obj.id == 10) { // Fallens for (int i = 0; i < 4; ++i) { World.SpawnMonster("fallen1", pos, root); } return(true); } if (obj.id == 11) { // Fallen shaman + fallens Spawn(MonStat.Find("fallenshaman1"), x, y, level, root); for (int i = 0; i < 4; ++i) { var fallen = World.SpawnMonster("fallen1", pos, root); fallen.level = level; } return(true); } if (obj.id == 27) { // Fallen shaman Spawn(MonStat.Find("fallenshaman1"), x, y, level, root); return(true); } return(false); } }
public static Unit SpawnMonster(MonStat monStat, Vector3 pos, Transform parent = null, Unit summoner = null) { pos = Iso.MapToIso(pos); if (!CollisionMap.Fit(pos, out pos, monStat.ext.sizeX)) { return(null); } var monster = new GameObject(monStat.nameStr); monster.transform.SetParent(parent); monster.transform.position = Iso.MapToWorld(pos); CollisionMap.Move(pos, pos, monStat.ext.sizeX, monster); var unit = monster.AddComponent <Unit>(); unit.monStat = monStat; unit.title = monStat.name; unit.basePath = @"data\global\monsters"; unit.token = monStat.code; unit.weaponClass = monStat.ext.baseWeaponClass; unit.run = false; unit.walkSpeed = monStat.speed; unit.runSpeed = monStat.runSpeed; unit.size = monStat.ext.sizeX; unit.killable = monStat.killable; var monLvl = MonLvl.Find(monStat.level[0]); if (monLvl != null && !monStat.noRatio) { unit.health = Random.Range(monLvl.hp[0] * monStat.stats[0].minHP, monLvl.hp[0] * monStat.stats[0].maxHP + 1) / 100; } else { unit.health = Random.Range(monStat.stats[0].minHP, monStat.stats[0].maxHP + 1); } unit.maxHealth = unit.health; var animator = unit.GetComponent <COFAnimator>(); animator.equip = new string[monStat.ext.gearVariants.Length]; for (int i = 0; i < animator.equip.Length; ++i) { var variants = monStat.ext.gearVariants[i]; if (variants == null) { continue; } animator.equip[i] = variants[Random.Range(0, variants.Length)]; } if (summoner != null) { unit.party = summoner.party; var petController = monster.AddComponent <PetController>(); petController.owner = summoner; } else if (monStat.ai == "Npc" || monStat.ai == "Towner" || monStat.ai == "Vendor" || monStat.ai == "Hireable") { unit.party = Party.Good; monster.AddComponent <NpcController>(); } else if (monStat.ai != "Idle" && monStat.ai != "NpcStationary") { unit.party = Party.Evil; monster.AddComponent <MonsterController>(); } var body = monster.AddComponent <Rigidbody2D>(); body.isKinematic = true; var collider = monster.AddComponent <CircleCollider2D>(); collider.radius = monStat.ext.sizeX * Iso.tileSizeY; return(unit); }