static void SetupQuickPlayEnemies(
	Mission *mission, const int numEnemies, CharacterStore *store)
{
	int i;
	for (i = 0; i < numEnemies; i++)
	{
		const GunDescription *gun;
		CArrayPushBack(&mission->Enemies, &i);

		for (;;)
		{
			gun = CArrayGet(
				&gGunDescriptions.Guns,
				rand() % (int)gGunDescriptions.Guns.size);
			if (!gun->IsRealGun)
			{
				continue;
			}
			// make at least one of each type of enemy:
			// - Short range weapon
			// - Long range weapon
			// - High explosive weapon
			if (i == 0 && !IsShortRange(gun))
			{
				continue;
			}
			if (i == 1 && !IsLongRange(gun))
			{
				continue;
			}
			if (i == 2 &&
				ConfigGetBool(&gConfig, "QuickPlay.EnemiesWithExplosives") &&
				!IsHighDPS(gun))
			{
				continue;
			}

			if (!ConfigGetBool(&gConfig, "QuickPlay.EnemiesWithExplosives") &&
				IsHighDPS(gun))
			{
				continue;
			}
			break;
		}
		Character *ch = CharacterStoreAddOther(store);
		SetupQuickPlayEnemy(ch, gun);
	}
}
Exemple #2
0
void SetupQuickPlayCampaign(CampaignSetting *setting)
{
	int i;
	gun_e gun;
	strcpy(gQuickPlayMission.title, "");
	strcpy(gQuickPlayMission.description, "");
	gQuickPlayMission.wallStyle = rand() % WALL_STYLE_COUNT;
	gQuickPlayMission.floorStyle = rand() % FLOOR_STYLE_COUNT;
	gQuickPlayMission.roomStyle = rand() % FLOOR_STYLE_COUNT;
	gQuickPlayMission.exitStyle = rand() % EXIT_COUNT;
	gQuickPlayMission.keyStyle = rand() % KEYSTYLE_COUNT;
	gQuickPlayMission.doorStyle = rand() % DOORSTYLE_COUNT;
	gQuickPlayMission.mapWidth = 16 + (rand() % (64 - 16 + 1));
	gQuickPlayMission.mapHeight = 16 + (rand() % (64 - 16 + 1));
	gQuickPlayMission.wallCount = rand() % (200 + 1);
	gQuickPlayMission.wallLength = 1 + (rand() % (200 - 1 + 1));
	gQuickPlayMission.roomCount = rand() % (100 + 1);
	gQuickPlayMission.squareCount = rand() % (100 + 1);
	gQuickPlayMission.exitLeft = 0;
	gQuickPlayMission.exitTop = 0;
	gQuickPlayMission.exitRight = 0;
	gQuickPlayMission.exitBottom = 0;
	gQuickPlayMission.objectiveCount = 0;
	gQuickPlayMission.baddieCount = 3 + (rand() % (BADDIE_MAX - 3));

	// make at least one of each type of enemy:
	// - Short range weapon
	// - Long range weapon
	// - High explosive weapon
	gQuickPlayMission.baddies[0] = 0;
	do
	{
		gun = rand() % GUN_COUNT;
	} while (!IsShortRange(gun));
	SetupQuickPlayEnemy(&gQuickPlayEnemies[0], gun);

	gQuickPlayMission.baddies[1] = 1;
	do
	{
		gun = rand() % GUN_COUNT;
	} while (!IsLongRange(gun));
	SetupQuickPlayEnemy(&gQuickPlayEnemies[1], gun);

	gQuickPlayMission.baddies[2] = 2;
	do
	{
		gun = rand() % GUN_COUNT;
	} while (!IsHighDPS(gun));
	SetupQuickPlayEnemy(&gQuickPlayEnemies[2], gun);

	for (i = 3; i < gQuickPlayMission.baddieCount; i++)
	{
		gQuickPlayMission.baddies[i] = i;
		SetupQuickPlayEnemy(&gQuickPlayEnemies[i], rand() % GUN_COUNT);
	}
	gQuickPlayMission.specialCount = 0;
	gQuickPlayMission.itemCount = rand() % (ITEMS_MAX + 1);
	for (i = 0; i < gQuickPlayMission.itemCount; i++)
	{
		gQuickPlayMission.items[i] = i;
		gQuickPlayMission.itemDensity[i] = rand() % 32;
	}
	gQuickPlayMission.baddieDensity =
		(40 + (rand() % 20)) / gQuickPlayMission.baddieCount;
	gQuickPlayMission.weaponSelection = 0;
	strcpy(gQuickPlayMission.song, "");
	strcpy(gQuickPlayMission.map, "");
	gQuickPlayMission.wallRange = rand() % (COLORRANGE_COUNT - 1 + 1);
	gQuickPlayMission.floorRange = rand() % (COLORRANGE_COUNT - 1 + 1);
	gQuickPlayMission.roomRange = rand() % (COLORRANGE_COUNT - 1 + 1);
	gQuickPlayMission.altRange = rand() % (COLORRANGE_COUNT - 1 + 1);

	strcpy(setting->title, "Quick play");
	strcpy(setting->author, "");
	strcpy(setting->description, "");
	setting->missionCount = 1;
	setting->missions = &gQuickPlayMission;
	setting->characterCount = BADDIE_MAX;
	setting->characters = gQuickPlayEnemies;
}