142 { |
142 { |
143 QByteArray teamscfg; |
143 QByteArray teamscfg; |
144 QAbstractItemModel * themeModel = DataManager::instance().themeModel()->withoutHidden(); |
144 QAbstractItemModel * themeModel = DataManager::instance().themeModel()->withoutHidden(); |
145 |
145 |
146 HWProto::addStringToBuffer(teamscfg, "TL"); |
146 HWProto::addStringToBuffer(teamscfg, "TL"); |
|
147 |
|
148 // Random seed |
|
149 HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString()); |
|
150 |
|
151 int r, minhogs, maxhogs; |
|
152 |
|
153 // Random map |
|
154 r = rand() % 10000; |
|
155 if(r < 3000) { // 30% |
|
156 r = 0; |
|
157 } else if(r < 5250) { // 22.5% |
|
158 r = 1; |
|
159 } else if(r < 7500) { // 22.5% |
|
160 r = 2; |
|
161 } else if(r < 8750) { // 12.5% |
|
162 r = 3; |
|
163 } else { // 12.5% |
|
164 r = 4; |
|
165 } |
|
166 switch(r) |
|
167 { |
|
168 // Random |
|
169 default: |
|
170 case 0: { |
|
171 r = rand() % 3; |
|
172 if(r == 0) |
|
173 { |
|
174 HWProto::addStringToBuffer(teamscfg, "e$template_filter 1"); |
|
175 minhogs = 3; |
|
176 maxhogs = 4; |
|
177 } |
|
178 else if(r == 1) |
|
179 { |
|
180 HWProto::addStringToBuffer(teamscfg, "e$template_filter 2"); |
|
181 minhogs = 4; |
|
182 maxhogs = 5; |
|
183 } |
|
184 else |
|
185 { |
|
186 HWProto::addStringToBuffer(teamscfg, "e$template_filter 4"); |
|
187 minhogs = 4; |
|
188 maxhogs = 6; |
|
189 } |
|
190 HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%18+4)); |
|
191 break; |
|
192 } |
|
193 // Maze |
|
194 case 1: { |
|
195 minhogs = 4; |
|
196 maxhogs = 6; |
|
197 HWProto::addStringToBuffer(teamscfg, "e$mapgen 1"); |
|
198 HWProto::addStringToBuffer(teamscfg, "e$template_filter "+QString::number(rand()%6)); |
|
199 HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%16+6)); |
|
200 break; |
|
201 } |
|
202 // Perlin |
|
203 case 2: { |
|
204 minhogs = 4; |
|
205 maxhogs = 6; |
|
206 HWProto::addStringToBuffer(teamscfg, "e$mapgen 2"); |
|
207 HWProto::addStringToBuffer(teamscfg, "e$template_filter "+QString::number(rand()%6)); |
|
208 HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%18+4)); |
|
209 break; |
|
210 } |
|
211 // Image map |
|
212 case 3: { |
|
213 minhogs = 4; |
|
214 maxhogs = 6; |
|
215 HWProto::addStringToBuffer(teamscfg, "e$mapgen 3"); |
|
216 // Select map from hardcoded list. |
|
217 // TODO: find a more dynamic solution. |
|
218 r = rand() % cQuickGameMaps.count(); |
|
219 HWProto::addStringToBuffer(teamscfg, "e$map " + cQuickGameMaps[r]); |
|
220 break; |
|
221 } |
|
222 // Forts |
|
223 case 4: { |
|
224 minhogs = 4; |
|
225 maxhogs = 6; |
|
226 HWProto::addStringToBuffer(teamscfg, "e$mapgen 4"); |
|
227 HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%20+1)); |
|
228 break; |
|
229 } |
|
230 } |
|
231 |
|
232 // Theme |
147 HWProto::addStringToBuffer(teamscfg, QString("etheme %1") |
233 HWProto::addStringToBuffer(teamscfg, QString("etheme %1") |
148 .arg((themeModel->rowCount() > 0) ? themeModel->index(rand() % themeModel->rowCount(), 0).data(ThemeModel::ActualNameRole).toString() : "Nature")); |
234 .arg((themeModel->rowCount() > 0) ? themeModel->index(rand() % themeModel->rowCount(), 0).data(ThemeModel::ActualNameRole).toString() : "Nature")); |
149 HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString()); |
235 |
150 |
236 int hogs = minhogs + rand() % (maxhogs-minhogs+1); |
151 HWProto::addStringToBuffer(teamscfg, "e$template_filter 2"); |
237 |
152 HWProto::addStringToBuffer(teamscfg, "e$feature_size "+QString::number(rand()%18+4)); |
238 // Teams |
153 |
239 // Player team |
154 HWTeam team1; |
240 HWTeam team1; |
155 team1.setDifficulty(0); |
241 team1.setDifficulty(0); |
156 team1.setColor(0); |
242 team1.setColor(0); |
157 team1.setNumHedgehogs(4); |
243 team1.setNumHedgehogs(hogs); |
158 HWNamegen::teamRandomEverything(team1); |
244 HWNamegen::teamRandomEverything(team1); |
159 team1.setVoicepack("Default_qau"); |
245 team1.setVoicepack("Default_qau"); |
160 HWProto::addStringListToBuffer(teamscfg, |
246 |
161 team1.teamGameConfig(100)); |
247 // Computer team |
162 |
|
163 HWTeam team2; |
248 HWTeam team2; |
164 team2.setDifficulty(4); |
249 // Random difficulty |
|
250 // TODO: Select difficulty based on previous player successes/failures. |
|
251 r = 1 + rand() % 5; |
|
252 team2.setDifficulty(r); |
165 team2.setColor(1); |
253 team2.setColor(1); |
166 team2.setNumHedgehogs(4); |
254 team2.setNumHedgehogs(hogs); |
|
255 // Make sure the team names are not equal |
167 do |
256 do |
168 HWNamegen::teamRandomEverything(team2); |
257 HWNamegen::teamRandomEverything(team2); |
169 while(!team2.name().compare(team1.name()) || !team2.hedgehog(0).Hat.compare(team1.hedgehog(0).Hat)); |
258 while(!team2.name().compare(team1.name()) || !team2.hedgehog(0).Hat.compare(team1.hedgehog(0).Hat)); |
170 team2.setVoicepack("Default_qau"); |
259 team2.setVoicepack("Default_qau"); |
171 HWProto::addStringListToBuffer(teamscfg, |
260 |
172 team2.teamGameConfig(100)); |
261 // Random team play order |
173 |
262 r = rand() % 2; |
|
263 if(r == 0) |
|
264 { |
|
265 HWProto::addStringListToBuffer(teamscfg, team1.teamGameConfig(100)); |
|
266 HWProto::addStringListToBuffer(teamscfg, team2.teamGameConfig(100)); |
|
267 } |
|
268 else |
|
269 { |
|
270 HWProto::addStringListToBuffer(teamscfg, team2.teamGameConfig(100)); |
|
271 HWProto::addStringListToBuffer(teamscfg, team1.teamGameConfig(100)); |
|
272 } |
|
273 |
|
274 // Ammo scheme "Default" |
|
275 // TODO: Random schemes |
174 HWProto::addStringToBuffer(teamscfg, QString("eammloadt %1").arg(cDefaultAmmoStore->mid(0, cAmmoNumber))); |
276 HWProto::addStringToBuffer(teamscfg, QString("eammloadt %1").arg(cDefaultAmmoStore->mid(0, cAmmoNumber))); |
175 HWProto::addStringToBuffer(teamscfg, QString("eammprob %1").arg(cDefaultAmmoStore->mid(cAmmoNumber, cAmmoNumber))); |
277 HWProto::addStringToBuffer(teamscfg, QString("eammprob %1").arg(cDefaultAmmoStore->mid(cAmmoNumber, cAmmoNumber))); |
176 HWProto::addStringToBuffer(teamscfg, QString("eammdelay %1").arg(cDefaultAmmoStore->mid(2 * cAmmoNumber, cAmmoNumber))); |
278 HWProto::addStringToBuffer(teamscfg, QString("eammdelay %1").arg(cDefaultAmmoStore->mid(2 * cAmmoNumber, cAmmoNumber))); |
177 HWProto::addStringToBuffer(teamscfg, QString("eammreinf %1").arg(cDefaultAmmoStore->mid(3 * cAmmoNumber, cAmmoNumber))); |
279 HWProto::addStringToBuffer(teamscfg, QString("eammreinf %1").arg(cDefaultAmmoStore->mid(3 * cAmmoNumber, cAmmoNumber))); |
178 HWProto::addStringToBuffer(teamscfg, QString("eammstore")); |
280 HWProto::addStringToBuffer(teamscfg, QString("eammstore")); |