public void generate()
        {
            int centerX = (int)(region.getWidth() / 2);
            int centerY = (int)(region.getHeight() / 2);
            int distanceCutoff = (int)(centerX * radius);

            //make the town center
            for (int x = 0; x < region.getWidth(); x++)
            {
                for (int y = 0; y < region.getHeight(); y++)
                {
                    region.setTerrain(x, y, new Terrain());
                    int distance = (int)(Math.Sqrt(((x - centerX) * (x - centerX)) + ((y - centerY) * (y - centerY))));
                    if (distance > distanceCutoff + RandomNumber.RandomInteger(wiggle))
                    {
                        region.getTerrain(x, y).setCode(TerrainCode.GRASS);
                    }
                    else
                    {
                        region.getTerrain(x, y).setCode(TerrainCode.DIRT);
                    }
                }
            }

            //make the path
            MapGenerator.makePath(region, overworldCell.nExit, overworldCell.eExit, overworldCell.sExit, overworldCell.wExit);

            //add trees
            MapGenerator.addTrees(region, treeDensity);

            //add grave yard
            MapGenerator.addGraveyard(15, 10, region.getWidth() - 19, region.getHeight() - 14, region);

            //add buildings
            Building bank = new Building();
            bank.setBuildingType(BuildingType.BANK);
            BuildingManager.initialize(bank);
            bank.setPosition((region.getWidth() / 10) * 3, (int)((region.getHeight() / 10) * 2.5));
            region.getBuildings().Add(bank);

            Building inn = new Building();
            inn.setBuildingType(BuildingType.INN);
            BuildingManager.initialize(inn);
            inn.setPosition(3 + ((region.getWidth() / 10) * 5), (int)((region.getHeight() / 10) * 2.5));
            region.getBuildings().Add(inn);

            for (int i = 0; i < 3; i++)
            {
                Building house = new Building();
                if (i == 1)
                {
                    house.setBuildingType(BuildingType.HOUSE);
                }
                else if (i == 0)
                {
                    house.setBuildingType(BuildingType.FOOD_STORE);
                }
                else if (i == 2)
                {
                    house.setBuildingType(BuildingType.TOOL_STORE);
                }
                BuildingManager.initialize(house);
                house.setPosition((region.getWidth() / 10) * (4 + (i * 2)), (int)((region.getHeight() / 10) * 6));
                region.getBuildings().Add(house);
            }

            region.buildBuildings();

            //Add a pond in the corner
            region.getTerrain(7, 7).getParameters().Add(TerrainParameter.HAS_SPRING, TerrainManager.SPRING_RATE + "");
            for (int x = 4; x < 10; x++)
            {
                for (int y = 4; y < 10; y++)
                {
                    region.getTerrain(x, y).setCode(TerrainCode.STREAM_BED);
                }
            }
        }