Ejemplo n.º 1
0
    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]);
        }
    }
Ejemplo n.º 2
0
    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);
        }
    }
Ejemplo n.º 4
0
 static SuperUnique()
 {
     foreach (var row in sheet)
     {
         row.monStat = MonStat.Find(row.monStatId);
         row.name    = Translation.Find(row.nameStr);
         map.Add(row.superUnique, row);
     }
 }
Ejemplo n.º 5
0
    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));
    }
Ejemplo n.º 6
0
        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");
        }
Ejemplo n.º 7
0
    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);
    }
Ejemplo n.º 8
0
    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);
        }
    }
Ejemplo n.º 9
0
        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);
        }