예제 #1
0
        private void SpawnItemsRandomly(int levelIndex, MapGeneratorBSP mapGen)
        {
            //Item catalogue

            List<Item> meleeRelatedItems = new List<Item>();
            meleeRelatedItems.Add(new Items.Vibroblade());
            meleeRelatedItems.Add(new Items.Pistol());
            meleeRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost()));

            List<Item> rangedRelatedItems = new List<Item>();
            rangedRelatedItems.Add(new Items.Shotgun());
            rangedRelatedItems.Add(new Items.Laser());
            rangedRelatedItems.Add(new Items.Pistol());
            rangedRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost()));

            List<Item> grenadeRelatedItems = new List<Item>();
            grenadeRelatedItems.Add(new Items.SoundGrenade());
            grenadeRelatedItems.Add(new Items.FragGrenade());
            grenadeRelatedItems.Add(new Items.StunGrenade());
            grenadeRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost()));

            List<Item> healingRelatedItems = new List<Item>();
            healingRelatedItems.Add(new Items.NanoRepair());
            healingRelatedItems.Add(new Items.TacticalOverlay());
            healingRelatedItems.Add(new Items.StealthCloak());
            healingRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost()));

            List<List<Item>> itemCatalogue = new List<List<Item>>();
            itemCatalogue.Add(meleeRelatedItems);
            itemCatalogue.Add(rangedRelatedItems);
            itemCatalogue.Add(healingRelatedItems);
            //Grenades go in last to suck up any left-over budget
            itemCatalogue.Add(grenadeRelatedItems);

            //Calculate the budget we have to spend
            int itemBudget = 60 + (levelIndex - 5) * 10;

            //Divide between different types

            List<double> budgetRatios = new List<double>();

            double meleeRelatedBudgetRatio = Game.Random.NextDouble();
            budgetRatios.Add(meleeRelatedBudgetRatio);

            double firingRelatedBudgetRatio = 1 - meleeRelatedBudgetRatio;
            budgetRatios.Add(firingRelatedBudgetRatio);

            double grenadeRelatedBudgeRadio = Game.Random.NextDouble();
            budgetRatios.Add(grenadeRelatedBudgeRadio);

            double healingRelatedBudgeRadio = Game.Random.NextDouble();
            budgetRatios.Add(healingRelatedBudgeRadio);

            //Calculate budget split
            double totalRatio = 0.0;
            foreach(double d in budgetRatios) {
                totalRatio += d;
            }

            double ratioToTotalBudget = itemBudget / totalRatio;

            double remainder = 0.0;

            //To hold all the items to place
            List<Item> itemsToPlace = new List<Item>();

            //Spend budget on each catalogue, depending upon ratio
            for (int i = 0; i < itemCatalogue.Count; i++)
            {
                double categoryBudget = budgetRatios[i] * ratioToTotalBudget + remainder;
                remainder = (double)SpendItemBudget((int)categoryBudget, itemCatalogue[i], itemsToPlace);
            }

            LogFile.Log.LogEntryDebug("SpawnItemsRandomly: level: " + levelIndex + " total budget: " + itemBudget + " remainder: " + remainder, LogDebugLevel.High);

            //Add any standard items

            //1 healing kit
            itemsToPlace.Add(new Items.NanoRepair());

            //Actually add the items
            List<RoomCoords> allRooms = mapGen.GetAllRooms();

            AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen);

            //Pistol at start location
            AddItemAtLocation(new Items.Pistol(), levelIndex, mapGen.GetPlayerStartLocation());
        }
예제 #2
0
        private void SpawnItemsLevel6(int levelIndex, MapGeneratorBSP mapGen)
        {
            List<RoomCoords> allRooms = mapGen.GetAllRooms();

            //Pistol at start location
            AddItemAtLocation(new Items.Laser(), levelIndex, mapGen.GetPlayerStartLocation());
            AddItemAtLocation(new Items.StealthCloak(), levelIndex, mapGen.GetPlayerStartLocation());

            //Spawn some items

            List<Item> itemsToPlace = new List<Item>();

            itemsToPlace.Add(new Items.TacticalOverlay());
            itemsToPlace.Add(new Items.StealthCloak());

            AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen);
        }
예제 #3
0
        private void SpawnItemsLevel4(int levelIndex, MapGeneratorBSP mapGen)
        {
            List<RoomCoords> allRooms = mapGen.GetAllRooms();

            //Pistol at start location
            AddItemAtLocation(new Items.Pistol(), levelIndex, mapGen.GetPlayerStartLocation());

            //Spawn some items

            List<Item> itemsToPlace = new List<Item>();

            itemsToPlace.Add(new Items.SoundGrenade());
            itemsToPlace.Add(new Items.SoundGrenade());
            itemsToPlace.Add(new Items.SoundGrenade());
            itemsToPlace.Add(new Items.SoundGrenade());
            itemsToPlace.Add(new Items.FragGrenade());
            itemsToPlace.Add(new Items.FragGrenade());

            itemsToPlace.Add(new Items.NanoRepair());

            AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen);
        }
예제 #4
0
        private void SpawnItemsLevel2(int levelIndex, MapGeneratorBSP mapGen)
        {
            List<RoomCoords> allRooms = mapGen.GetAllRooms();

            //Spawn some items

            List<Item> itemsToPlace = new List<Item>();

            //Tempt the player with the shotgun
            //AddItemCloseToLocation(new Items.Shotgun(), 0, mapGen.GetPlayerStartLocation());
            AddItemAtLocation(new Items.Shotgun(), levelIndex, mapGen.GetPlayerStartLocation());

            //Vibroblade is a better choice
            itemsToPlace.Add(new Items.Vibroblade());
            //Another shotty
            itemsToPlace.Add(new Items.Shotgun());

            AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen);
        }
예제 #5
0
        private void SpawnItemsLevel1(int levelIndex, MapGeneratorBSP mapGen)
        {
            List<RoomCoords> allRooms = mapGen.GetAllRooms();

            //Spawn some items
            List<Item> itemsToPlace = new List<Item>();
            itemsToPlace.Add(new Items.Pistol());

            AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen);
        }
예제 #6
0
        private void SpawnCreaturesRandomly(int levelIndex, MapGeneratorBSP mapGen)
        {
            //Monster catalogue

            //Type of monster : typical group size

            //Melee monsters

            List<KeyValuePair<Monster, int>> meleeMonsters = new List<KeyValuePair<Monster, int>>();
            meleeMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.Swarmer(), 6));
            meleeMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.Juggernaut(), 1));

            //Patrolling catalogue

            List<KeyValuePair<Monster, int>> patrolMonsters = new List<KeyValuePair<Monster, int>>();
            patrolMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.PatrolBot(), 3));
            patrolMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.PatrolBotArea(), 3));

            //Rotating catalogue

            List<KeyValuePair<Monster, int>> staticMonsters = new List<KeyValuePair<Monster, int>>();
            staticMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.RotatingTurret(), 2));
            staticMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.CombatBot(), 3));

            //Special monsters
            List<KeyValuePair<Monster, int>> specialMonsters = new List<KeyValuePair<Monster, int>>();
            specialMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.AlertBot(), 2));
            specialMonsters.Add(new KeyValuePair<Monster, int>(new Creatures.RollingBomb(), 2));

            List<List<KeyValuePair<Monster, int>>> monsterCatalogue = new List<List<KeyValuePair<Monster, int>>>();
            monsterCatalogue.Add(meleeMonsters);
            monsterCatalogue.Add(patrolMonsters);
            monsterCatalogue.Add(staticMonsters);
            //Grenades go in last to suck up any left-over budget
            monsterCatalogue.Add(specialMonsters);

            //Calculate the budget we have to spend

            //An 10 cost item (pistol) is good for 30 - 40 points of monster

            //Item budget: 50 + (levelIndex - 5) * 10;

            int creatureBudget = (50 + (levelIndex - 5) * 10) * 3;

            //Divide between different types

            List<double> budgetRatios = new List<double>();

            //Initialize

            budgetRatios.Add(Game.Random.NextDouble());
            budgetRatios.Add(Game.Random.NextDouble());
            budgetRatios.Add(Game.Random.NextDouble());
            budgetRatios.Add(Game.Random.NextDouble());

            //Try to spend 2/3 of our budget on one type
            //(+3 was too much at present)

            //exclude special
            budgetRatios[Game.Random.Next(budgetRatios.Count - 1)] += 1.5;

            //Calculate budget split
            double totalRatio = 0.0;
            foreach (double d in budgetRatios)
            {
                totalRatio += d;
            }

            double ratioToTotalBudget = creatureBudget / totalRatio;

            double remainder = 0.0;

            //To hold all the items to place
            List<Monster> monstersToPlaceEvenly = new List<Monster>();
            List<MonsterFightAndRunAI> monstersToPlaceLinearPatrol = new List<MonsterFightAndRunAI>();
            List<MonsterFightAndRunAI> monstersToPlaceSquarePatrol = new List<MonsterFightAndRunAI>();

            //Spend budget on each catalogue, depending upon ratio
            for (int i = 0; i < monsterCatalogue.Count; i++)
            {
                double categoryBudget = budgetRatios[i] * ratioToTotalBudget + remainder;
                remainder = (double)SpendMonsterBudget((int)categoryBudget, monsterCatalogue[i], monstersToPlaceEvenly, monstersToPlaceLinearPatrol, monstersToPlaceSquarePatrol);
            }

            LogFile.Log.LogEntryDebug("SpawnCreaturesRandomly: level: " + levelIndex + " total budget: " + creatureBudget + " remainder: " + remainder, LogDebugLevel.High);

            //Actually add the monsters
            List<RoomCoords> allRooms = mapGen.GetAllRooms();

            AddMonstersEqualDistribution(monstersToPlaceEvenly, levelIndex, mapGen);
            foreach (MonsterFightAndRunAI m in monstersToPlaceLinearPatrol)
                AddMonsterLinearPatrol(m, levelIndex, mapGen);

            foreach (MonsterFightAndRunAI m in monstersToPlaceSquarePatrol)
                AddMonsterSquarePatrol(m, levelIndex, mapGen);

            //This sets light level in the creatures
            SetLightLevelUniversal(levelIndex, levelIndex, 5);
        }