diff -r 6c17ef373079 -r f59b7f5cf6e8 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Wed May 15 04:06:47 2019 +0200 +++ b/QTfrontend/game.cpp Wed May 15 09:08:39 2019 +0200 @@ -144,33 +144,135 @@ QAbstractItemModel * themeModel = DataManager::instance().themeModel()->withoutHidden(); HWProto::addStringToBuffer(teamscfg, "TL"); - HWProto::addStringToBuffer(teamscfg, QString("etheme %1") - .arg((themeModel->rowCount() > 0) ? themeModel->index(rand() % themeModel->rowCount(), 0).data(ThemeModel::ActualNameRole).toString() : "Nature")); + + // Random seed HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString()); - HWProto::addStringToBuffer(teamscfg, "e$template_filter 2"); - HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%18+4)); + int r, minhogs, maxhogs; + // Random map + r = rand() % 10000; + if(r < 3000) { // 30% + r = 0; + } else if(r < 5250) { // 22.5% + r = 1; + } else if(r < 7500) { // 22.5% + r = 2; + } else if(r < 8750) { // 12.5% + r = 3; + } else { // 12.5% + r = 4; + } + switch(r) + { + // Random + default: + case 0: { + r = rand() % 3; + if(r == 0) + { + HWProto::addStringToBuffer(teamscfg, "e$template_filter 1"); + minhogs = 3; + maxhogs = 4; + } + else if(r == 1) + { + HWProto::addStringToBuffer(teamscfg, "e$template_filter 2"); + minhogs = 4; + maxhogs = 5; + } + else + { + HWProto::addStringToBuffer(teamscfg, "e$template_filter 4"); + minhogs = 4; + maxhogs = 6; + } + HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%18+4)); + break; + } + // Maze + case 1: { + minhogs = 4; + maxhogs = 6; + HWProto::addStringToBuffer(teamscfg, "e$mapgen 1"); + HWProto::addStringToBuffer(teamscfg, "e$template_filter "+QString::number(rand()%6)); + HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%16+6)); + break; + } + // Perlin + case 2: { + minhogs = 4; + maxhogs = 6; + HWProto::addStringToBuffer(teamscfg, "e$mapgen 2"); + HWProto::addStringToBuffer(teamscfg, "e$template_filter "+QString::number(rand()%6)); + HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%18+4)); + break; + } + // Image map + case 3: { + minhogs = 4; + maxhogs = 6; + HWProto::addStringToBuffer(teamscfg, "e$mapgen 3"); + // Select map from hardcoded list. + // TODO: find a more dynamic solution. + r = rand() % cQuickGameMaps.count(); + HWProto::addStringToBuffer(teamscfg, "e$map " + cQuickGameMaps[r]); + break; + } + // Forts + case 4: { + minhogs = 4; + maxhogs = 6; + HWProto::addStringToBuffer(teamscfg, "e$mapgen 4"); + HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%20+1)); + break; + } + } + + // Theme + HWProto::addStringToBuffer(teamscfg, QString("etheme %1") + .arg((themeModel->rowCount() > 0) ? themeModel->index(rand() % themeModel->rowCount(), 0).data(ThemeModel::ActualNameRole).toString() : "Nature")); + + int hogs = minhogs + rand() % (maxhogs-minhogs+1); + + // Teams + // Player team HWTeam team1; team1.setDifficulty(0); team1.setColor(0); - team1.setNumHedgehogs(4); + team1.setNumHedgehogs(hogs); HWNamegen::teamRandomEverything(team1); team1.setVoicepack("Default_qau"); - HWProto::addStringListToBuffer(teamscfg, - team1.teamGameConfig(100)); + // Computer team HWTeam team2; - team2.setDifficulty(4); + // Random difficulty + // TODO: Select difficulty based on previous player successes/failures. + r = 1 + rand() % 5; + team2.setDifficulty(r); team2.setColor(1); - team2.setNumHedgehogs(4); + team2.setNumHedgehogs(hogs); + // Make sure the team names are not equal do HWNamegen::teamRandomEverything(team2); while(!team2.name().compare(team1.name()) || !team2.hedgehog(0).Hat.compare(team1.hedgehog(0).Hat)); team2.setVoicepack("Default_qau"); - HWProto::addStringListToBuffer(teamscfg, - team2.teamGameConfig(100)); + // Random team play order + r = rand() % 2; + if(r == 0) + { + HWProto::addStringListToBuffer(teamscfg, team1.teamGameConfig(100)); + HWProto::addStringListToBuffer(teamscfg, team2.teamGameConfig(100)); + } + else + { + HWProto::addStringListToBuffer(teamscfg, team2.teamGameConfig(100)); + HWProto::addStringListToBuffer(teamscfg, team1.teamGameConfig(100)); + } + + // Ammo scheme "Default" + // TODO: Random schemes HWProto::addStringToBuffer(teamscfg, QString("eammloadt %1").arg(cDefaultAmmoStore->mid(0, cAmmoNumber))); HWProto::addStringToBuffer(teamscfg, QString("eammprob %1").arg(cDefaultAmmoStore->mid(cAmmoNumber, cAmmoNumber))); HWProto::addStringToBuffer(teamscfg, QString("eammdelay %1").arg(cDefaultAmmoStore->mid(2 * cAmmoNumber, cAmmoNumber)));