1 //---------------------------------------------------------------------------
2 #include "stdafx.h"
3 
4 #include <cassert>
5 
6 #include <algorithm>
7 using std::min;
8 using std::max;
9 
10 #include <stdexcept> // needed for Android at least
11 
12 #include <sstream>
13 
14 #include "sector.h"
15 #include "game.h"
16 #include "utils.h"
17 #include "gamestate.h"
18 #include "panel.h"
19 #include "gui.h"
20 #include "player.h"
21 #include "screen.h"
22 #include "image.h"
23 #include "sound.h"
24 #include "tutorial.h"
25 
26 //---------------------------------------------------------------------------
27 
28 const int offset_fortress_x_c = 150;
29 const int offset_fortress_y_c = 14;
30 //const int offset_fortress_x_c = 100;
31 //const int offset_fortress_y_c = 50;
32 const int offset_mine_x_c = 32;
33 const int offset_mine_y_c = 14;
34 const int offset_factory_x_c = 32;
35 const int offset_factory_y_c = 96;
36 const int offset_lab_x_c = 150;
37 const int offset_lab_y_c = 96;
38 
39 /*const int DEFENDER_DIR_S = 0;
40 const int DEFENDER_DIR_N = 1;
41 const int DEFENDER_DIR_E = 2;
42 const int DEFENDER_DIR_W = 3;*/
43 
isAirUnit(int epoch)44 bool isAirUnit(int epoch) {
45 	ASSERT_S_EPOCH(epoch);
46 	if( epoch == n_epochs_c || epoch < 6 ) {
47 		return false;
48 	}
49 	return true;
50 }
51 
defenceNeedsMan(int epoch)52 bool defenceNeedsMan(int epoch) {
53 	ASSERT_EPOCH(epoch);
54 	if( epoch == nuclear_epoch_c || epoch == laser_epoch_c ) {
55 		return false;
56 	}
57 	return true;
58 }
59 
Particle()60 Particle::Particle() : xpos(0.0f), ypos(0.0f), birth_time(0) {
61 	this->birth_time = game_g->getGameTime();
62 }
63 
draw(int xpos,int ypos) const64 void ParticleSystem::draw(int xpos, int ypos) const {
65 	for(vector<Particle>::const_iterator iter = particles.begin(); iter != particles.end(); ++iter) {
66 		this->image->draw(xpos + (int)iter->getX(), ypos + (int)iter->getY(), size, size);
67 	}
68 }
69 
SmokeParticleSystem(const Image * image)70 SmokeParticleSystem::SmokeParticleSystem(const Image *image) : ParticleSystem(image),
71 birth_rate(0.0f), life_exp(225), last_emit_time(0), move_x(0.0f), move_y(-6.667f) {
72 	this->last_emit_time = game_g->getGameTime();
73 }
74 
setBirthRate(float birth_rate)75 void SmokeParticleSystem::setBirthRate(float birth_rate) {
76 	this->birth_rate = birth_rate;
77 }
78 
update()79 void SmokeParticleSystem::update() {
80 	// expire old particles
81 	int time_now = game_g->getGameTime();
82 	for(int i=particles.size()-1;i>=0;i--) { // count backwards in case of deletion
83 		if( time_now >= particles.at(i).getBirthTime() + life_exp ) {
84 			// for performance, we reorder and reduce the length by 1 (as the order of the particles shouldn't matter)
85 			particles[i] = particles[particles.size()-1];
86 			particles.resize(particles.size()-1);
87 		}
88 	}
89 
90 	int real_loop_time = game_g->getLoopTime();
91 	//LOG("%d\n", real_loop_time);
92 	// update particles
93 	for(int i=particles.size()-1;i>=0;i--) { // count backwards in case of deletion
94 		//const float xspeed = 0.01f;
95 		const float xspeed = 0.015f;
96 		//const float yspeed = 0.05f;
97 		const float yspeed = 0.03f;
98 		float xpos = particles.at(i).getX();
99 		float ypos = particles.at(i).getY();
100 		float ydiff = real_loop_time * yspeed;
101 		float xdiff = real_loop_time * xspeed;
102 		if( rand() % 2 == 0 ) {
103 			xdiff = - xdiff;
104 		}
105 		//xpos += xdiff;
106 		//ypos -= ydiff;
107 		float real_xdiff = ydiff * move_x - xdiff * move_y;
108 		float real_ydiff = ydiff * move_y + xdiff * move_x;
109 		xpos += real_xdiff;
110 		ypos += real_ydiff;
111 		/*if( ypos < 0 ) {
112 			// kill
113 			// for performance, we reorder and reduce the length by 1 (as the order of the particles shouldn't matter)
114 			particles[i] = particles[particles.size()-1];
115 			particles.resize(particles.size()-1);
116 			//LOG("resize to %d\n", particles.size());
117 		}
118 		else*/ {
119 			particles.at(i).setPos(xpos, ypos);
120 		}
121 	}
122 
123 	// emit new particles
124 	int accumulated_time = game_g->getGameTime() - this->last_emit_time;
125 	int new_particles = (int)(this->birth_rate * accumulated_time);
126 	new_particles = min(1, new_particles); // helps make rate more steady
127 	this->last_emit_time += (int)(1.0f/birth_rate * new_particles);
128 	if( new_particles > 0 ) {
129 		//LOG("%d new particles (total will be %d)\n", new_particles, particles.size() + new_particles);
130 		for(int i=0;i<new_particles;i++) {
131 			Particle particle;
132 			particles.push_back(particle);
133 		}
134 	}
135 	if( this->birth_rate == 0.0f ) {
136 		this->last_emit_time = game_g->getGameTime(); // prevent a big buildup of time when smoke system isn't active
137 	}
138 }
139 
Army(PlayingGameState * gamestate,Sector * sector,int player)140 Army::Army(PlayingGameState *gamestate, Sector *sector, int player) :
141 player(player), sector(sector), gamestate(gamestate)
142 {
143 	ASSERT_PLAYER(player);
144 	this->empty();
145 }
146 
getTotal() const147 int Army::getTotal() const {
148 	ASSERT_PLAYER(this->player);
149 	int n = 0;
150 	for(int i=0;i<n_epochs_c+1;i++)
151 		n += soldiers[i];
152 	return n;
153 }
154 
getTotalMen() const155 int Army::getTotalMen() const {
156 	ASSERT_PLAYER(this->player);
157 	int n = 0;
158 	for(int i=0;i<n_epochs_c+1;i++) {
159 		int n_men = ( i==n_epochs_c ? 1 : game_g->invention_weapons[i]->getNMen() );
160 		n += soldiers[i] * n_men;
161 	}
162 	return n;
163 }
164 
any(bool include_unarmed) const165 bool Army::any(bool include_unarmed) const {
166 	ASSERT_PLAYER(this->player);
167 	int until = include_unarmed ? n_epochs_c : n_epochs_c-1;
168 	for(int i=0;i<=until;i++) {
169 		if( soldiers[i] > 0 )
170 			return true;
171 	}
172 	return false;
173 }
174 
getStrength() const175 int Army::getStrength() const {
176 	ASSERT_PLAYER(this->player);
177 	int n = 0;
178 	for(int i=0;i<=n_epochs_c;i++) {
179 		if( soldiers[i] > 0 ) {
180 			ASSERT(i != nuclear_epoch_c);
181 			n += getIndividualStrength(i) * soldiers[i];
182 		}
183 	}
184 	return n;
185 }
186 
getBombardStrength() const187 int Army::getBombardStrength() const {
188 	ASSERT_PLAYER(this->player);
189 	int n = 0;
190 	for(int i=0;i<=n_epochs_c;i++) {
191 		if( soldiers[i] > 0 )
192 			n += getIndividualBombardStrength(i) * soldiers[i];
193 	}
194 	return n;
195 }
196 
add(int i,int n)197 void Army::add(int i,int n) {
198 	ASSERT_PLAYER(this->player);
199 	ASSERT_S_EPOCH(i);
200 	ASSERT(n > 0);
201 	ASSERT( !this->sector->isNuked() );
202 	this->soldiers[i] += n;
203 }
204 
add(Army * army)205 void Army::add(Army *army) {
206 	ASSERT_PLAYER(this->player);
207 	ASSERT_PLAYER(army->player);
208 	bool any = false;
209 	for(int i=0;i<=n_epochs_c;i++) {
210 		ASSERT(army->soldiers[i] >= 0);
211 		any = any || army->soldiers[i] > 0;
212 		this->soldiers[i] += army->soldiers[i];
213 		army->soldiers[i] = 0;
214 	}
215 	if( any && ( this->sector == gamestate->getCurrentSector() || army->getSector() == gamestate->getCurrentSector() ) ) {
216 		ASSERT( !this->sector->isNuked() );
217 		//((PlayingGameState *)gamestate)->refreshSoldiers(true);
218 		gamestate->refreshSoldiers(true);
219 	}
220 }
221 
remove(int i,int n)222 void Army::remove(int i,int n) {
223 	ASSERT_PLAYER(this->player);
224 	ASSERT_S_EPOCH(i);
225 	ASSERT(n > 0);
226 	this->soldiers[i] -= n;
227 	ASSERT(this->soldiers[i] >= 0);
228 }
229 
kill(int index)230 void Army::kill(int index) {
231 	ASSERT_PLAYER(this->player);
232 	bool done = false;
233 	int saved_index = index;
234 	for(int i=0;i<=n_epochs_c && !done;i++) {
235 		if( index < soldiers[i] ) {
236 			soldiers[i]--;
237 			done = true;
238 			if( this->sector == gamestate->getCurrentSector() ) {
239 				//((PlayingGameState *)gamestate)->n_deaths[player][i]++;
240 				//((PlayingGameState *)gamestate)->registerDeath(player, i);
241 				gamestate->registerDeath(player, i);
242 			}
243 		}
244 		index -= soldiers[i];
245 	}
246 	if( !done ) {
247 		LOG("###can't kill index %d in army (total %d)\n",saved_index,this->getTotal());
248 		ASSERT(0);
249 	}
250 	if( this->sector == gamestate->getCurrentSector() ) {
251 		//((PlayingGameState *)gamestate)->refreshSoldiers(true);
252 		gamestate->refreshSoldiers(true);
253 	}
254 	//((PlayingGameState *)gamestate)->getGamePanel()->refreshShutdown();
255 	gamestate->getGamePanel()->refreshShutdown();
256 }
257 
canLeaveSafely() const258 bool Army::canLeaveSafely() const {
259 	bool any_enemy_attackers = false;
260 	for(int i=0;i<n_players_c && !any_enemy_attackers;i++) {
261 		if( i != this->player && !Player::isAlliance(i, this->player) )
262 			any_enemy_attackers = this->sector->getArmy(i)->any(true);
263 	}
264 	//if( n_enemy_attackers > 0 || ( src_sector->player != -1 && src_sector->player != a_player ) ) {
265 	//if( any_enemy_attackers || ( src_sector->player != -1 && src_sector->player != a_player ) ) {
266 	if( this->sector->getPlayer() != this->player && ( any_enemy_attackers || ( this->sector->getPlayer() != -1 && !Player::isAlliance(this->sector->getPlayer(), this->player) ) ) ) {
267 		return false;
268 	}
269 	return true;
270 }
271 
retreat(bool only_air)272 void Army::retreat(bool only_air) {
273 	if( game_g->getTutorial() != NULL && !game_g->getTutorial()->allowRetreatLoss() ) {
274 		return;
275 	}
276 	for(int i=0;i<=n_epochs_c;i++) {
277 		//if( only_air && ( i < air_epoch_c || i == n_epochs_c ) ) {
278 		if( this->soldiers[i] > 0 ) {
279 			if( only_air && !isAirUnit( i ) ) {
280 				; // don't do land units
281 			}
282 			else {
283 				//this->soldiers[i] *= 0.6;
284 				this->soldiers[i] = (int)(this->soldiers[i] * 0.6);
285 			}
286 		}
287 	}
288 }
289 
getIndividualStrength(int i) const290 int Army::getIndividualStrength(int i) const {
291 	return getIndividualStrength(this->player, i);
292 }
293 
getIndividualStrength(int player,int i)294 int Army::getIndividualStrength(int player, int i) {
295 	ASSERT_S_EPOCH(i);
296 	ASSERT_PLAYER(player);
297 	int str = 0;
298 	if( i == n_epochs_c && game_g->getStartEpoch() != end_epoch_c ) {
299 		// unarmed
300 		if( player == PlayerType::PLAYER_RED )
301 			str = 2;
302 		else
303 			str = 1;
304 	}
305 	else if( i == nuclear_epoch_c )
306 		str = 0;
307 	else {
308 		str = 1;
309 		for(int j=0;j<=i;j++)
310 			str *= 2;
311 		//int n_men = invention_weapons[i]->n_men;
312 		//str = 2 * (i+1) * n_men;
313 		//str *= n_men;
314 	}
315 	return str;
316 }
317 
getIndividualBombardStrength(int i)318 int Army::getIndividualBombardStrength(int i) {
319 	ASSERT_S_EPOCH(i);
320 	int str = 0;
321 	if( game_g->getStartEpoch() == end_epoch_c ) {
322 		str = 1;
323 	}
324 	else if( i != n_epochs_c ) {
325 		// only armed men cause damage
326 		/*int n_men = invention_weapons[i]->n_men;
327 		str = (i+1) * n_men;*/
328 		//str = i+1;
329 		str = i - game_g->getStartEpoch() + 1;
330 		/*str = 1;
331 		for(int j=0;j<i;j++)
332 		str *= 2;
333 		str *= n_men;*/
334 	}
335 	return str;
336 }
337 
saveState(stringstream & stream) const338 void Army::saveState(stringstream &stream) const {
339 	// caller should write the <Army> ... </Army> enclosing tags
340 	for(int i=0;i<=n_epochs_c;i++) {
341 		stream << "<soldiers epoch=\"" << i << "\" n=\"" << this->soldiers[i] << "\"/>\n";
342 	}
343 }
344 
loadStateParseXMLNode(const TiXmlNode * parent)345 void Army::loadStateParseXMLNode(const TiXmlNode *parent) {
346 	if( parent == NULL ) {
347 		return;
348 	}
349 	bool read_children = true;
350 
351 	switch( parent->Type() ) {
352 		case TiXmlNode::TINYXML_DOCUMENT:
353 			break;
354 		case TiXmlNode::TINYXML_ELEMENT:
355 			{
356 				const char *element_name = parent->Value();
357 				const TiXmlElement *element = parent->ToElement();
358 				const TiXmlAttribute *attribute = element->FirstAttribute();
359 				if( strcmp(element_name, "army") == 0 )  {
360 					// handled entirely by caller
361 				}
362 				else if( strcmp(element_name, "stored_army") == 0 )  {
363 					// handled entirely by caller
364 				}
365 				else if( strcmp(element_name, "soldiers") == 0 ) {
366 					int epoch = -1;
367 					int n = -1;
368 					while( attribute != NULL ) {
369 						const char *attribute_name = attribute->Name();
370 						if( strcmp(attribute_name, "epoch") == 0 ) {
371 							epoch = atoi(attribute->Value());
372 						}
373 						else if( strcmp(attribute_name, "n") == 0 ) {
374 							n = atoi(attribute->Value());
375 						}
376 						else {
377 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
378 							LOG("unknown army/soldiers attribute: %s\n", attribute_name);
379 							ASSERT(false);
380 						}
381 						attribute = attribute->Next();
382 					}
383 					if( epoch == -1 || n == -1 ) {
384 						throw std::runtime_error("soldiers missing attributes");
385 					}
386 					else if( epoch < 0 || epoch > n_epochs_c ) {
387 						throw std::runtime_error("soldiers invalid epoch");
388 					}
389 					this->soldiers[epoch] = n;
390 				}
391 				else {
392 					// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
393 					LOG("unknown army tag: %s\n", element_name);
394 					ASSERT(false);
395 				}
396 			}
397 			break;
398 		case TiXmlNode::TINYXML_COMMENT:
399 			break;
400 		case TiXmlNode::TINYXML_UNKNOWN:
401 			break;
402 		case TiXmlNode::TINYXML_TEXT:
403 			{
404 			}
405 			break;
406 		case TiXmlNode::TINYXML_DECLARATION:
407 			break;
408 	}
409 
410 	for(const TiXmlNode *child=parent->FirstChild();child!=NULL && read_children;child=child->NextSibling())  {
411 		loadStateParseXMLNode(child);
412 	}
413 }
414 
Element(const char * name,Id id,Type type)415 Element::Element(const char *name,Id id,Type type) {
416 	//strcpy(this->name,name);
417 	this->name = name;
418 	this->id = id;
419 	this->type = type;
420 }
421 
~Element()422 Element::~Element() {
423 }
424 
getImage() const425 Image *Element::getImage() const {
426 	return game_g->icon_elements[this->id];
427 }
428 
Design(Invention * invention,bool ergonomically_terrific)429 Design::Design(Invention *invention,bool ergonomically_terrific) {
430 	this->invention = invention;
431 	this->ergonomically_terrific = ergonomically_terrific;
432 	this->save_id = -1;
433 	for(int i=0;i<N_ID;i++)
434 		this->cost[i] = 0;
435 	//invention->designs->add(this);
436 	//invention->designs->push_back(this);
437 	invention->addDesign(this);
438 };
439 
Invention(const char * name,Type type,int epoch)440 Invention::Invention(const char *name,Type type,int epoch) {
441 	ASSERT_ANY_EPOCH(epoch);
442 	//strcpy(this->name,name);
443 	this->name = name;
444 	this->type = type;
445 	this->epoch = epoch;
446 }
447 
~Invention()448 Invention::~Invention() {
449 	for(size_t i=0;i<designs.size();i++) {
450 		Design *design = designs.at(i);
451 		delete design;
452 	}
453 }
454 
getImage() const455 Image *Invention::getImage() const {
456 	if( this->type == SHIELD )
457 		return game_g->icon_shields[this->epoch - game_g->getStartEpoch()];
458 	else if( this->type == DEFENCE )
459 		return game_g->icon_defences[this->epoch];
460 	else if( this->type == WEAPON )
461 		return game_g->icon_weapons[this->epoch];
462 	return NULL;
463 }
464 
addDesign(Design * design)465 void Invention::addDesign(Design *design) {
466 	ASSERT( design->getInvention() == this );
467 	ASSERT( design->getSaveId() == -1 );
468 	design->setSaveId( designs.size() );
469 	this->designs.push_back(design);
470 }
471 
findDesign(int save_id) const472 Design *Invention::findDesign(int save_id) const {
473 	for(vector<Design *>::const_iterator iter = designs.begin(); iter != designs.end(); ++iter) {
474 		Design *design = *iter;
475 		if( design->getSaveId() == save_id ) {
476 			return design;
477 		}
478 	}
479 	return NULL;
480 }
481 
482 /*void Invention::addDesign(Design *design) {
483 this->designs->add(design);
484 }*/
485 
getInvention(Invention::Type type,int epoch)486 Invention *Invention::getInvention(Invention::Type type,int epoch) {
487 	ASSERT_EPOCH(epoch);
488 	Invention *invention = NULL;
489 	if( type == SHIELD )
490 		invention = game_g->invention_shields[epoch];
491 	else if( type == DEFENCE )
492 		invention = game_g->invention_defences[epoch];
493 	else if( type == WEAPON )
494 		invention = game_g->invention_weapons[epoch];
495 	ASSERT(invention != NULL);
496 	return invention;
497 }
498 
Building(PlayingGameState * gamestate,Sector * sector,Type type)499 Building::Building(PlayingGameState *gamestate, Sector *sector, Type type) :
500 type(type), sector(sector), health(0), max_health(0), pos_x(0), pos_y(0), n_turrets(0), building_button(NULL), gamestate(gamestate)
501 {
502     //LOG("Building::Building(Sector [%d: %d, %d], Type %d)\n", sector->getPlayer(), sector->getXPos(), sector->getYPos(), type);
503 	Rect2D turret_pos[max_building_turrets_c];
504 
505 	if( this->type == BUILDING_TOWER )
506 		this->max_health = 150;
507 	else
508 		this->max_health = 100;
509 	this->health = this->max_health;
510 	this->n_turrets = 0;
511 	for(int i=0;i<max_building_turrets_c;i++) {
512 		this->turret_man[i] = -1;
513 		this->turret_man_frame[i] = 0;
514 	}
515 
516 	if( this->type == BUILDING_TOWER ) {
517 		this->pos_x = offset_fortress_x_c;
518 		this->pos_y = offset_fortress_y_c;
519 		this->n_turrets = 4;
520 		if( game_g->isUsingOldGfx() ) {
521 			turret_pos[0].set(0, 0, 15, 12);
522 			turret_pos[1].set(27, 0, 15, 12);
523 			turret_pos[2].set(0, 24, 15, 12);
524 			turret_pos[3].set(27, 24, 15, 12);
525 		}
526 		else {
527 			turret_pos[0].set(1, -2, 15, 14);
528 			turret_pos[1].set(28, -2, 15, 14);
529 			turret_pos[2].set(1, 22, 15, 15);
530 			turret_pos[3].set(28, 22, 15, 15);
531 		}
532 	}
533 	else if( this->type == BUILDING_MINE ) {
534 		this->pos_x = offset_mine_x_c;
535 		this->pos_y = offset_mine_y_c;
536 		this->n_turrets = 2;
537 		if( game_g->isUsingOldGfx() ) {
538 			turret_pos[0].set(0, 17, 15, 12);
539 			turret_pos[1].set(27, 17, 15, 12);
540 		}
541 		else {
542 			turret_pos[0].set(2, 17, 16, 16);
543 			turret_pos[1].set(25, 17, 16, 16);
544 		}
545 	}
546 	else if( this->type == BUILDING_FACTORY ) {
547 		this->pos_x = offset_factory_x_c;
548 		this->pos_y = offset_factory_y_c;
549 		this->n_turrets = 3;
550 		if( game_g->isUsingOldGfx() ) {
551 			turret_pos[0].set(1, 9, 15, 12);
552 			turret_pos[1].set(33, 9, 15, 12);
553 			turret_pos[2].set(16, 26, 15, 12);
554 		}
555 		else {
556 			turret_pos[0].set(0, 7, 16, 15);
557 			turret_pos[1].set(31, 7, 16, 15);
558 			turret_pos[2].set(15, 29, 16, 15);
559 		}
560 	}
561 	else if( this->type == BUILDING_LAB ) {
562 		this->pos_x = offset_lab_x_c;
563 		this->pos_y = offset_lab_y_c;
564 		this->n_turrets = 1;
565 		if( game_g->isUsingOldGfx() ) {
566 			turret_pos[0].set(10, 4, 15, 12);
567 		}
568 		else {
569 			turret_pos[0].set(10, 6, 16, 16);
570 		}
571 	}
572 	ASSERT(this->n_turrets != 0);
573 
574 	building_button = NULL;
575 	if( this->type == BUILDING_TOWER ) {
576 		building_button = new PanelPage(offset_land_x_c + this->pos_x, offset_land_y_c + this->pos_y, 58, 60);
577 		building_button->setSurviveOwner(true);
578 	}
579 
580 	for(int j=0;j<this->n_turrets;j++) {
581 		Rect2D rect = turret_pos[j];
582 		turret_buttons[j] = new PanelPage(offset_land_x_c + this->pos_x + rect.x, offset_land_y_c + this->pos_y + rect.y, rect.w, rect.h);
583 		//turret_buttons[j]->setInfoLMB("place a defender here");
584 		turret_buttons[j]->setSurviveOwner(true);
585 	}
586 	if( sector == gamestate->getCurrentSector() ) {
587 		//((PlayingGameState *)gamestate)->addBuilding(this);
588 		gamestate->addBuilding(this);
589 	}
590     //LOG("Building::Building done\n");
591 }
592 
~Building()593 Building::~Building() {
594     //LOG("Building::~Building()\n");
595 	for(int i=0;i<this->n_turrets;i++) {
596 		delete turret_buttons[i];
597 	}
598 	if( building_button != NULL )
599 		delete building_button;
600     //LOG("Building::~Building done\n");
601 }
602 
getImages()603 Image **Building::getImages() {
604 	Image **images = NULL;
605 	if( type == BUILDING_TOWER )
606 		images = game_g->fortress;
607 	else if( type == BUILDING_MINE )
608 		images = game_g->mine;
609 	else if( type == BUILDING_FACTORY )
610 		images = game_g->factory;
611 	else if( type == BUILDING_LAB )
612 		images = game_g->lab;
613 	ASSERT(images != NULL);
614 	return images;
615 }
616 
rotateDefenders()617 void Building::rotateDefenders() {
618 	for(int i=0;i<this->n_turrets;i++) {
619 		this->turret_man_frame[i] = rand();
620 	}
621 	/*if( this->type == BUILDING_TOWER ) {
622 		this->turret_mandir[0] = ( rand() % 2 ) == 0 ? DEFENDER_DIR_W : DEFENDER_DIR_N;
623 		this->turret_mandir[1] = ( rand() % 2 ) == 0 ? DEFENDER_DIR_E : DEFENDER_DIR_N;
624 		this->turret_mandir[2] = ( rand() % 2 ) == 0 ? DEFENDER_DIR_W : DEFENDER_DIR_S;
625 		this->turret_mandir[3] = ( rand() % 2 ) == 0 ? DEFENDER_DIR_E : DEFENDER_DIR_S;
626 	}
627 	else if( this->type == BUILDING_MINE ) {
628 		this->turret_mandir[0] = ( rand() % 2 ) == 0 ? DEFENDER_DIR_W : DEFENDER_DIR_S;
629 		this->turret_mandir[1] = ( rand() % 2 ) == 0 ? DEFENDER_DIR_E : DEFENDER_DIR_S;
630 	}
631 	else if( this->type == BUILDING_FACTORY ) {
632 		int r0 = rand() % 3;
633 		this->turret_mandir[0] = r0 == 0 ? DEFENDER_DIR_W : r0 == 1 ? DEFENDER_DIR_S : DEFENDER_DIR_N;
634 		int r1 = rand() % 3;
635 		this->turret_mandir[1] = r1 == 0 ? DEFENDER_DIR_E : r1 == 1 ? DEFENDER_DIR_S : DEFENDER_DIR_N;
636 		int r2 = rand() % 3;
637 		this->turret_mandir[2] = r2 == 0 ? DEFENDER_DIR_W : r2 == 1 ? DEFENDER_DIR_E : DEFENDER_DIR_S;
638 	}
639 	else if( this->type == BUILDING_LAB ) {
640 		int r0 = rand() % 4;
641 		if( r0 == 0 )
642 			this->turret_mandir[0] = DEFENDER_DIR_N;
643 		else if( r0 == 1 )
644 			this->turret_mandir[0] = DEFENDER_DIR_E;
645 		else if( r0 == 2 )
646 			this->turret_mandir[0] = DEFENDER_DIR_S;
647 		else if( r0 == 3 )
648 			this->turret_mandir[0] = DEFENDER_DIR_W;
649 		else {
650 			ASSERT(false);
651 		}
652 	}
653 	else {
654 		ASSERT(false);
655 	}*/
656 }
657 
getDefenderStrength() const658 int Building::getDefenderStrength() const {
659 	int n = 0;
660 	for(int i=0;i<n_turrets;i++) {
661 		if( turret_man[i] != -1 )
662 			n += Army::getIndividualStrength( sector->getPlayer(), turret_man[i] );
663 	}
664 	//n *= 2;
665 	n *= 4;
666 	return n;
667 }
668 
killIthDefender(int i)669 void Building::killIthDefender(int i) {
670 	turret_man[i] = -1;
671 	if( gamestate->getCurrentSector() == this->sector ) {
672 		int xpos = this->turret_buttons[i]->getLeft();
673 		int ypos = this->turret_buttons[i]->getTop();
674 		//((PlayingGameState *)gamestate)->deathEffect(xpos, ypos - 4);
675 		gamestate->deathEffect(xpos, ypos - 4);
676 	}
677 }
678 
killDefender(int index)679 void Building::killDefender(int index) {
680 	for(int i=0;i<n_turrets;i++) {
681 		if( turret_man[i] != -1 ) {
682 			if( index == 0 ) {
683 				killIthDefender(i);
684 				break;
685 			}
686 			index--;
687 		}
688 	}
689 }
690 
getTurretMan(int turret) const691 int Building::getTurretMan(int turret) const {
692 	ASSERT( turret >= 0 && turret < this->n_turrets );
693 	return this->turret_man[turret];
694 }
695 
getTurretManFrame(int turret) const696 int Building::getTurretManFrame(int turret) const {
697 	ASSERT( turret >= 0 && turret < this->n_turrets );
698 	ASSERT( this->turret_man[turret] != -1 );
699 	return this->turret_man_frame[turret];
700 }
701 
getTurretButton(int turret) const702 PanelPage *Building::getTurretButton(int turret) const {
703 	ASSERT( turret >= 0 && turret < this->n_turrets );
704 	return this->turret_buttons[turret];
705 }
706 
clearTurretMan(int turret)707 void Building::clearTurretMan(int turret) {
708 	ASSERT( turret >= 0 && turret < this->n_turrets );
709 	this->turret_man[turret] = -1;
710 }
711 
setTurretMan(int turret,int epoch)712 void Building::setTurretMan(int turret, int epoch) {
713 	ASSERT( turret >= 0 && turret < this->n_turrets );
714 	this->turret_man[turret] = epoch;
715 }
716 
saveState(stringstream & stream) const717 void Building::saveState(stringstream &stream) const {
718 	stream << "<building ";
719 	stream << "building_id=\"" << type << "\" ";
720 	stream << "health=\"" << health << "\" ";
721 	stream << ">\n";
722 	for(int i=0;i<max_building_turrets_c;i++) {
723 		stream << "<turret_soldier turret_id=\"" << i << "\" epoch=\"" << turret_man[i] <<"\"/>\n";
724 	}
725 	stream << "</building>\n";
726 }
727 
loadStateParseXMLNode(const TiXmlNode * parent)728 void Building::loadStateParseXMLNode(const TiXmlNode *parent) {
729 	if( parent == NULL ) {
730 		return;
731 	}
732 	bool read_children = true;
733 
734 	switch( parent->Type() ) {
735 		case TiXmlNode::TINYXML_DOCUMENT:
736 			break;
737 		case TiXmlNode::TINYXML_ELEMENT:
738 			{
739 				const char *element_name = parent->Value();
740 				const TiXmlElement *element = parent->ToElement();
741 				const TiXmlAttribute *attribute = element->FirstAttribute();
742 				if( strcmp(element_name, "building") == 0 ) {
743 					while( attribute != NULL ) {
744 						const char *attribute_name = attribute->Name();
745 						if( strcmp(attribute_name, "building_id") == 0 ) {
746 							// handled by caller
747 						}
748 						else if( strcmp(attribute_name, "health") == 0 ) {
749 							health = atoi(attribute->Value());
750 						}
751 						else {
752 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
753 							LOG("unknown building/building attribute: %s\n", attribute_name);
754 							ASSERT(false);
755 						}
756 						attribute = attribute->Next();
757 					}
758 				}
759 				else if( strcmp(element_name, "turret_soldier") == 0 ) {
760 					int turret_id = -1;
761 					int epoch = -1;
762 					while( attribute != NULL ) {
763 						const char *attribute_name = attribute->Name();
764 						if( strcmp(attribute_name, "turret_id") == 0 ) {
765 							turret_id = atoi(attribute->Value());
766 						}
767 						else if( strcmp(attribute_name, "epoch") == 0 ) {
768 							epoch = atoi(attribute->Value());
769 						}
770 						else {
771 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
772 							LOG("unknown building/turret_soldier attribute: %s\n", attribute_name);
773 							ASSERT(false);
774 						}
775 						attribute = attribute->Next();
776 					}
777 					if( turret_id == -1  ) { // epoch allowed to be -1
778 						throw std::runtime_error("turret_soldier missing attributes");
779 					}
780 					else if( turret_id < 0 || turret_id >= max_building_turrets_c ) {
781 						throw std::runtime_error("turret_soldier invalid turret_id");
782 					}
783 					else if( epoch < -1 || epoch >= n_epochs_c ) {
784 						throw std::runtime_error("turret_soldier invalid epoch");
785 					}
786 					this->turret_man[turret_id] = epoch;
787 				}
788 				else {
789 					// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
790 					LOG("unknown building tag: %s\n", element_name);
791 					ASSERT(false);
792 				}
793 			}
794 			break;
795 		case TiXmlNode::TINYXML_COMMENT:
796 			break;
797 		case TiXmlNode::TINYXML_UNKNOWN:
798 			break;
799 		case TiXmlNode::TINYXML_TEXT:
800 			{
801 			}
802 			break;
803 		case TiXmlNode::TINYXML_DECLARATION:
804 			break;
805 	}
806 
807 	for(const TiXmlNode *child=parent->FirstChild();child!=NULL && read_children;child=child->NextSibling())  {
808 		loadStateParseXMLNode(child);
809 	}
810 }
811 
Sector(PlayingGameState * gamestate,int epoch,int xpos,int ypos,MapColour map_colour)812 Sector::Sector(PlayingGameState *gamestate, int epoch, int xpos, int ypos, MapColour map_colour) :
813 xpos(xpos), ypos(ypos), epoch(epoch), player(PLAYER_NONE), is_shutdown(false), nuked(false),
814 nuke_by_player(-1), nuke_time(-1),
815 nuke_defence_animation(false), nuke_defence_time(-1), nuke_defence_x(0), nuke_defence_y(0),
816 population(0), n_designers(0), n_workers(0), n_famount(0),
817 current_design(NULL), current_manufacture(NULL),
818 researched(0), researched_lasttime(-1), manufactured(0), manufactured_lasttime(-1), growth_lasttime(-1), mined_lasttime(-1), built_lasttime(-1),
819 assembled_army(NULL), stored_army(NULL), smokeParticleSystem(NULL), jetParticleSystem(NULL), nukeParticleSystem(NULL), nukeDefenceParticleSystem(NULL),
820 gamestate(gamestate)
821 {
822     //LOG("Sector::Sector(%d,%d,%d)\n",epoch,xpos,ypos);
823 	ASSERT_EPOCH(epoch);
824 
825 	for(int i=0;i<N_ID;i++) {
826 		this->elements[i] = 0;
827 	}
828 	for(int i=0;i<n_players_c;i++) {
829 		this->armies[i] = new Army(gamestate, this, i);
830 	}
831 
832 	// rocks etc
833 	int n_clutter = game_g->icon_clutter.size() > 0 ? (1 + rand() % 4) : 0;
834 	for(int i=0;i<n_clutter;i++) {
835 		int land_width = game_g->land[(int)map_colour]->getScaledWidth() - 32;
836 		int land_height = game_g->land[(int)map_colour]->getScaledHeight() - 32;
837 		int xpos = offset_land_x_c + rand() % land_width;
838 		int ypos = offset_land_y_c + rand() % land_height;
839 		Image **image_ptr = &game_g->icon_clutter[rand() % game_g->icon_clutter.size()];
840 		Feature *feature = new Feature(image_ptr, 1, xpos, ypos);
841 		this->features.push_back(feature);
842 	}
843 	// trees (should be after clutter, so they are drawn over them if overlapping)
844 	int cx = offset_land_x_c + 16;
845 	for(;;) {
846 		int treetype = rand() % 3;
847 		if( treetype == 2 )
848 			treetype = 3;
849 		//Image *image = icon_trees[treetype];
850 		Image *image = game_g->icon_trees[treetype][0];
851 		cx += rand() % 16;
852 		if( cx + image->getScaledWidth() > offset_land_x_c + land_width_c )
853 			break;
854 		//int ypos = offset_land_y_c - image->getScaledHeight() + 12 + rand() % 12;
855 		int ypos = offset_land_y_c - image->getScaledHeight() + 16 + rand() % 8;
856 		//Feature *feature = new Feature(icon_trees[treetype], cx, ypos);
857 		Feature *feature = new Feature(game_g->icon_trees[treetype], n_tree_frames_c, cx, ypos);
858 		//Feature *feature = new Feature(image, cx, ypos);
859 		this->features.push_back(feature);
860 		cx += image->getScaledWidth() - 8;
861 	}
862 	cx = offset_land_x_c + 16;
863 	for(;;) {
864 		int treetype = rand() % 3;
865 		if( treetype == 2 )
866 			treetype = 3;
867 		Image *image = game_g->icon_trees[treetype][0];
868 		cx += rand() % 32;
869 		if( cx + image->getScaledWidth() > offset_land_x_c + land_width_c )
870 			break;
871 		int ypos = offset_land_y_c + game_g->land[(int)map_colour]->getScaledHeight() - image->getScaledHeight() - 8 - rand() % 4;
872 		Feature *feature = new Feature(game_g->icon_trees[treetype], n_tree_frames_c, cx, ypos);
873 		feature->setAtFront(true);
874 		this->features.push_back(feature);
875 		cx += image->getScaledWidth() - 8;
876 	}
877 
878 	if( game_g->smoke_image != NULL ) {
879 		this->smokeParticleSystem = new SmokeParticleSystem(game_g->smoke_image);
880 
881 		this->jetParticleSystem = new SmokeParticleSystem(game_g->smoke_image);
882 		this->jetParticleSystem->setMove(10.0f, 10.0f);
883 		this->jetParticleSystem->setBirthRate(1.667f);
884 		this->jetParticleSystem->setLifeExp(90);
885 		this->jetParticleSystem->setSize(0.5f);
886 
887 		this->nukeParticleSystem = new SmokeParticleSystem(game_g->smoke_image);
888 		this->nukeParticleSystem->setMove(10.0f, -10.0f);
889 		this->nukeParticleSystem->setBirthRate(1.667f);
890 		this->nukeParticleSystem->setLifeExp(90);
891 		this->nukeParticleSystem->setSize(0.5f);
892 
893 		this->nukeDefenceParticleSystem = new SmokeParticleSystem(game_g->smoke_image);
894 		this->nukeDefenceParticleSystem->setMove(0.0f, 10.0f);
895 		this->nukeDefenceParticleSystem->setBirthRate(1.667f);
896 		this->nukeDefenceParticleSystem->setLifeExp(90);
897 		this->nukeDefenceParticleSystem->setSize(0.5f);
898 	}
899 
900 	initTowerStuff();
901 }
902 
initTowerStuff()903 void Sector::initTowerStuff() {
904     //LOG("Sector::initTowerStuff() [%d, %d]\n", xpos, ypos);
905 	this->player = PLAYER_NONE;
906 	this->is_shutdown = false;
907 	//this->shutdown_player = -1;
908 	this->population = 0;
909 	this->n_designers = 0;
910 	this->n_famount = 0;
911 	for(int i=0;i<N_BUILDINGS;i++) {
912 		this->n_builders[i] = 0;
913 		this->buildings[i] = NULL;
914 	}
915 	this->current_design = NULL;
916 	this->researched = 0;
917 	this->researched_lasttime = -1;
918 	this->current_manufacture = NULL;
919 	this->manufactured = 0;
920 	this->manufactured_lasttime = -1;
921 	this->growth_lasttime = -1;
922 	this->mined_lasttime = -1;
923 	for(int i=0;i<n_players_c;i++)
924 		this->built_towers[i] = 0;
925 	for(int i=0;i<N_BUILDINGS;i++)
926 		this->built[i] = 0;
927 	this->built_lasttime = -1;
928 	for(int i=0;i<3;i++) {
929 		for(int j=0;j<n_epochs_c;j++) {
930 			this->inventions_known[i][j] = false;
931 			//this->inventions_known[i][j] = true;
932 		}
933 	}
934 	this->designs.clear();
935 	for(int i=0;i<N_ID;i++) {
936 		this->n_miners[i] = 0;
937 		this->elementstocks[i] = 0;
938 		this->partial_elementstocks[i] = 0;
939 	}
940 
941 	//this->assembled_army = new Army(this, this->getPlayer());
942 	//this->stored_army = new Army(this, this->getPlayer());
943 	this->assembled_army = NULL;
944 	this->stored_army = NULL;
945 	for(int i=0;i<n_epochs_c;i++)
946 		this->stored_defenders[i] = 0;
947 	for(int i=0;i<4;i++)
948 		this->stored_shields[i] = 0;
949 
950 	//this->n_workers = 0;
951 	this->setWorkers(0); // call to also set the particle system rate; must be done after setting the buildings to NULL
952 }
953 
~Sector()954 Sector::~Sector() {
955     //LOG("Sector::~Sector() [%d: %d, %d]\n", player, xpos, ypos);
956 	for(size_t i=0;i<this->features.size();i++) {
957 		Feature *feature = (Feature *)this->features.at(i);
958 		delete feature;
959 	}
960 
961 	for(unsigned int i=0;i<N_BUILDINGS;i++) {
962 		if(this->buildings[i] != NULL )
963 			delete this->buildings[i];
964 	}
965 	if( this->assembled_army != NULL )
966 		delete this->assembled_army;
967 	if( this->stored_army != NULL )
968 		delete this->stored_army;
969 	for(int i=0;i<n_players_c;i++)
970 		delete this->armies[i];
971 
972 	if( smokeParticleSystem != NULL ) {
973 		delete smokeParticleSystem;
974 	}
975 	if( jetParticleSystem != NULL ) {
976 		delete jetParticleSystem;
977 	}
978 	if( nukeParticleSystem != NULL ) {
979 		delete nukeParticleSystem;
980 	}
981 	if( nukeDefenceParticleSystem != NULL ) {
982 		delete nukeDefenceParticleSystem;
983 	}
984 }
985 
createTower(int player,int population)986 void Sector::createTower(int player,int population) {
987     //LOG("Sector::createTower(%d,%d) [%d, %d]\n", player, population, xpos, ypos);
988 	ASSERT( !nuked );
989 	this->player = player;
990 	this->assembled_army = new Army(gamestate, this, this->getPlayer());
991 	this->stored_army = new Army(gamestate, this, this->getPlayer());
992 	this->population = population;
993 	this->buildings[BUILDING_TOWER] = new Building(gamestate, this, BUILDING_TOWER);
994 }
995 
destroyTower(bool nuked,int client_player)996 void Sector::destroyTower(bool nuked, int client_player) {
997 	LOG("Sector::destroyTower(%d) [%d: %d, %d]\n", nuked, player, xpos, ypos);
998 	ASSERT_PLAYER(this->player);
999 	if( !nuked ) {
1000 		this->evacuate();
1001 	}
1002 	/*delete this->buildings[BUILDING_TOWER];
1003 	this->buildings[BUILDING_TOWER] = NULL;*/
1004 	for(int i=0;i<N_BUILDINGS;i++) {
1005 		if(this->buildings[i] != NULL) {
1006 			delete this->buildings[i];
1007 			this->buildings[i] = NULL;
1008 		}
1009 	}
1010 
1011 	delete this->assembled_army;
1012 	this->assembled_army = NULL;
1013 	delete this->stored_army;
1014 	this->stored_army = NULL;
1015 
1016 	int this_player = this->player; // keep a copy
1017 
1018 	initTowerStuff();
1019 	if( this == gamestate->getCurrentSector() ) {
1020 		gamestate->getGamePanel()->setPage(GamePanel::STATE_SECTORCONTROL);
1021 		gamestate->getGamePanel()->setup();
1022 	}
1023 	gamestate->getGamePanel()->refreshShutdown();
1024 
1025 	if( nuked || game_g->playerAlive(this_player) ) {
1026 		// player has other sectors
1027 		if( game_g->isDemo() ) {
1028 		}
1029 		else if( this_player == client_player ) {
1030 			if( nuked )
1031 				playSample(game_g->s_weve_been_nuked);
1032 			else
1033 				playSample(game_g->s_sector_destroyed);
1034 			//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
1035 			gamestate->setFlashingSquare(this->xpos, this->ypos);
1036 		}
1037 		else if( ( nuked && nuke_by_player == client_player ) || ( !nuked && this->getArmy(client_player)->getTotal() > 0 ) ) {
1038 			if( nuked && nuke_by_player == client_player )
1039 				playSample(game_g->s_weve_nuked_them);
1040 			else
1041 				playSample(game_g->s_conquered);
1042 			//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
1043 			gamestate->setFlashingSquare(this->xpos, this->ypos);
1044 		}
1045 	}
1046 	// game win/lose is handled in main game loop now
1047 	LOG("Sector::destroyTower() exit\n");
1048 }
1049 
destroyBuilding(Type building_type,int client_player)1050 void Sector::destroyBuilding(Type building_type,int client_player) {
1051 	this->destroyBuilding(building_type, false, client_player);
1052 }
1053 
destroyBuilding(Type building_type,bool silent,int client_player)1054 void Sector::destroyBuilding(Type building_type,bool silent,int client_player) {
1055 	LOG("Sector::destroyBuilding(%d) [%d: %d, %d]\n", building_type, player, xpos, ypos);
1056 	ASSERT( buildings[(int)building_type] != NULL );
1057 	if( this == gamestate->getCurrentSector() && !silent ) {
1058 		playSample(game_g->s_buildingdestroyed, SOUND_CHANNEL_FX);
1059 	}
1060 	if( building_type == BUILDING_TOWER ) {
1061 		this->destroyTower(false, client_player);
1062 		return;
1063 	}
1064 	else if( building_type == BUILDING_MINE ) {
1065 		if( this->player == client_player && !silent ) {
1066 			playSample(game_g->s_mine_destroyed);
1067 			//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
1068 			gamestate->setFlashingSquare(this->xpos, this->ypos);
1069 		}
1070 		for(int i=0;i<N_ID;i++) {
1071 			/*
1072 			// n.b., we kill the open pit element miners too, as the mine supersedes the open pit mine
1073 			this->population -= this->n_miners[i];
1074 			*/
1075 			this->n_miners[i] = 0;
1076 		}
1077 		/*if( this->population < 0 ) {
1078 			// shouldn't happen!
1079 			this->population = 0;
1080 		}*/
1081 	}
1082 	else if( building_type == BUILDING_FACTORY ) {
1083 		if( this->player == client_player && !silent ) {
1084 			playSample(game_g->s_factory_destroyed);
1085 			//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
1086 			gamestate->setFlashingSquare(this->xpos, this->ypos);
1087 		}
1088 		/*this->population -= this->n_workers;
1089 		if( this->population < 0 ) {
1090 			// shouldn't happen!
1091 			this->population = 0;
1092 		}*/
1093 		this->setWorkers(0); // call to also set the particle system rate
1094 		this->current_manufacture = NULL; // so the player can't try to set workers again!
1095 	}
1096 	else if( building_type == BUILDING_LAB ) {
1097 		if( this->player == client_player && !silent ) {
1098 			playSample(game_g->s_lab_destroyed);
1099 			//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
1100 			gamestate->setFlashingSquare(this->xpos, this->ypos);
1101 		}
1102 		if( this->current_design != NULL && this->current_design->getInvention()->getEpoch() > lab_epoch_c ) {
1103 			// for pre-lab epoch designs, we can imagine the designers can work without being in the lab...
1104 			/*this->population -= this->n_designers;
1105 			if( this->population < 0 ) {
1106 				// shouldn't happen!
1107 				this->population = 0;
1108 			}*/
1109 			this->setDesigners(0);
1110 			this->current_design = NULL; // so the player can't try to set designers again!
1111 		}
1112 	}
1113 	else {
1114 		ASSERT(0);
1115 	}
1116 
1117 	// also return defenders
1118 	for(int j=0;j<this->buildings[(int)building_type]->getNTurrets();j++) {
1119 		if( this->buildings[(int)building_type]->getTurretMan(j) != -1 )
1120 			this->returnDefender(this->buildings[(int)building_type], j);
1121 	}
1122 
1123 	delete this->buildings[(int)building_type];
1124 	this->buildings[(int)building_type] = NULL;
1125 	this->built[(int)building_type] = 0;
1126 
1127 	if( this == gamestate->getCurrentSector() && this->player == client_player ) {
1128 		gamestate->getGamePanel()->refresh();
1129 	}
1130 }
1131 
canShutdown() const1132 bool Sector::canShutdown() const {
1133 	//ASSERT( !this->is_shutdown );
1134 	if( this->is_shutdown )
1135 		return false;
1136 
1137 	if( this->getEpoch() == n_epochs_c-1 && game_g->getStartEpoch() != end_epoch_c ) // in 2100AD
1138 	{
1139 		for(int y=0;y<map_height_c;y++) {
1140 			for(int x=0;x<map_width_c;x++) {
1141 				//if( game_g->getMap()->sector_at[x][y] ) {
1142 				if( game_g->getMap()->isSectorAt(x, y) ) {
1143 					const Sector *sector = game_g->getMap()->getSector(x, y);
1144 					if( ( sector != gamestate->getCurrentSector() && sector->getPlayer() == this->getPlayer() )
1145 						|| sector->getArmy(this->getPlayer())->any(true) ) {
1146 							return true;
1147 					}
1148 				}
1149 			}
1150 		}
1151 	}
1152 	return false;
1153 }
1154 
shutdown(int client_player)1155 void Sector::shutdown(int client_player) {
1156 	LOG("Sector::shutdown [%d: %d, %d]\n", player, xpos, ypos);
1157 	ASSERT_PLAYER( this->player );
1158 	ASSERT( this->player != -1 );
1159 	ASSERT( !this->is_shutdown );
1160 	/*this->shutdown_player = this->player;
1161 	this->player = -1;*/
1162 	for(int i=0;i<N_BUILDINGS;i++) {
1163 		if( this->buildings[i] != NULL ) {
1164 			for(int j=0;j<this->buildings[i]->getNTurrets();j++) {
1165 				if( this->buildings[i]->getTurretMan(j) != -1 )
1166 					this->returnDefender(this->buildings[i], j);
1167 			}
1168 		}
1169 		if( i != BUILDING_TOWER && this->buildings[i] != NULL )
1170 			this->destroyBuilding((Type)i, true, client_player);
1171 	}
1172 
1173 	this->is_shutdown = true;
1174 	if( this == gamestate->getCurrentSector() ) {
1175 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
1176 		gamestate->reset();
1177 	}
1178 }
1179 
getBuilding(Type type) const1180 Building *Sector::getBuilding(Type type) const {
1181 	//LOG("Sector::getBuilding(%d)\n",type);
1182 	return this->buildings[type];
1183 }
1184 
getNDefenders() const1185 int Sector::getNDefenders() const {
1186 	//LOG("Sector::getNDefenders()\n");
1187 	int n = 0;
1188 	for(int i=0;i<N_BUILDINGS;i++) {
1189 		if( this->buildings[i] != NULL )
1190 			n += buildings[i]->getNDefenders();
1191 	}
1192 	return n;
1193 }
1194 
getNDefenders(int type) const1195 int Sector::getNDefenders(int type) const {
1196 	int n = 0;
1197 	for(int i=0;i<N_BUILDINGS;i++) {
1198 		if( this->buildings[i] != NULL )
1199 			n += buildings[i]->getNDefenders(type);
1200 	}
1201 	return n;
1202 }
1203 
getDefenderStrength() const1204 int Sector::getDefenderStrength() const {
1205 	//LOG("Sector::getDefenderStrength()\n");
1206 	int n = 0;
1207 	for(int i=0;i<N_BUILDINGS;i++) {
1208 		if( this->buildings[i] != NULL )
1209 			n += buildings[i]->getDefenderStrength();
1210 	}
1211 	return n;
1212 }
1213 
killDefender(int index)1214 void Sector::killDefender(int index) {
1215 	LOG("Sector::killDefender(%d) [%d: %d, %d]\n", index, player, xpos, ypos);
1216 	for(int i=0;i<N_BUILDINGS;i++) {
1217 		if( this->buildings[i] != NULL ) {
1218 			if( index < buildings[i]->getNDefenders() ) {
1219 				buildings[i]->killDefender(index);
1220 				break;
1221 			}
1222 			index -= buildings[i]->getNDefenders();
1223 		}
1224 	}
1225 }
1226 
canBuild(Type type) const1227 bool Sector::canBuild(Type type) const {
1228 	//LOG("Sector::canBuild(%d)\n",type);
1229 	if( game_g->getStartEpoch() == end_epoch_c )
1230 		return false;
1231 
1232 	if( getBuilding(type) != NULL )
1233 		return false;
1234 
1235 	if( type == BUILDING_MINE ) {
1236 		return this->epoch >= mine_epoch_c;
1237 	}
1238 	if( type == BUILDING_FACTORY ) {
1239 		return this->epoch >= factory_epoch_c;
1240 	}
1241 	if( type == BUILDING_LAB ) {
1242 		return this->epoch >= lab_epoch_c;
1243 	}
1244 
1245 	return false;
1246 }
1247 
canMine(Id id) const1248 bool Sector::canMine(Id id) const {
1249 	ASSERT_ELEMENT_ID(id);
1250 	//LOG("Sector::canMine(%d)\n",id);
1251 	if( !this->anyElements(id) )
1252 		return false;
1253 
1254 	if( game_g->elements[id]->getType() == Element::GATHERABLE )
1255 		return true;
1256 	else if( game_g->elements[id]->getType() == Element::OPENPITMINE )
1257 		return ( this->epoch >= 1 );
1258 	else if( game_g->elements[id]->getType() == Element::DEEPMINE )
1259 		return (this->buildings[BUILDING_MINE] != NULL);
1260 
1261 	// error
1262 	LOG("###Didn't expect element id %d of type %d\n",id,game_g->elements[id]->getType());
1263 	ASSERT(0);
1264 	return false;
1265 }
1266 
canBuildDesign(Invention::Type type,int epoch) const1267 Design *Sector::canBuildDesign(Invention::Type type,int epoch) const {
1268 	//LOG("Sector::canBuildDesign(%d,%d)\n",type,epoch);
1269 	ASSERT_EPOCH(epoch);
1270 	if(epoch < game_g->getStartEpoch() || epoch > game_g->getStartEpoch() + 3 )
1271 		return NULL; // can't build this
1272 	if( epoch >= factory_epoch_c && this->getBuilding(BUILDING_FACTORY) == NULL )
1273 		return NULL; // need a factory for this
1274 
1275 	Invention *invention = Invention::getInvention(type, epoch);
1276 	ASSERT(invention != NULL);
1277 	Design *best_design = NULL;
1278 	for(size_t i=0;i<this->designs.size() && best_design==NULL;i++) {
1279 		Design *design = this->designs.at(i);
1280 		// design should be non-NULL, but to satisfy VS Code Analysis...
1281 		if( design == NULL )
1282 			continue;
1283 		if( design->getInvention() != invention )
1284 			continue;
1285 		bool ok = canBuildDesign(design);
1286 		if( ok )
1287 			best_design = design;
1288 	}
1289 	return best_design;
1290 }
1291 
canBuildDesign(Design * design) const1292 bool Sector::canBuildDesign(Design *design) const {
1293 	//LOG("Sector::canBuildDesign(%d)\n",design);
1294 	if( design->getInvention()->getEpoch() >= factory_epoch_c && this->getBuilding(BUILDING_FACTORY) == NULL )
1295 		return false; // need a factory for this
1296 
1297 	bool ok = true;
1298 	for(int j=0;j<N_ID && ok;j++) {
1299 		if( design->getCost((Id)j) > this->elementstocks[j] ) {
1300 			// not enough elements
1301 			ok = false;
1302 		}
1303 	}
1304 	return ok;
1305 }
1306 
canEverBuildDesign(Design * design) const1307 bool Sector::canEverBuildDesign(Design *design) const {
1308 	//LOG("Sector::canBuildDesign(%d)\n",design);
1309 	bool ok = true;
1310 	for(int j=0;j<N_ID && ok;j++) {
1311 		if( design->getCost((Id)j) > this->elementstocks[j] + this->elements[j] ) {
1312 			// not enough elements
1313 			ok = false;
1314 		}
1315 	}
1316 	return ok;
1317 }
1318 
autoTrashDesigns()1319 void Sector::autoTrashDesigns() {
1320 	for(size_t i=0;i<this->designs.size();) {
1321 		Design *design = this->designs.at(i);
1322 		if( !canEverBuildDesign(design) ) {
1323 			// trash
1324 			this->trashDesign(design);
1325 			// don't increment i, as this will remove the design
1326 		}
1327 		else {
1328 			i++;
1329 		}
1330 	}
1331 }
1332 
tryMiningMore() const1333 bool Sector::tryMiningMore() const {
1334 	// todo: only check elements we can mine (we might not be able to advance to that epoch)
1335 	for(int i=0;i<N_ID;i++) {
1336 		//Element *element = game_g->elements[i];
1337 		if( this->elements[i] > 0 &&
1338 			this->elementstocks[i] < 6 * element_multiplier_c
1339 			//( element->type != Element::GATHERABLE || this->elementstocks[i] < max_gatherables_stored_c * element_multiplier_c )
1340 			) {
1341 				// if there are less than 6 of this element, and we can mine more, then do so
1342 				return true;
1343 		}
1344 	}
1345 	return false;
1346 }
1347 
usedUp() const1348 bool Sector::usedUp() const {
1349 	// a sector is used up iff:
1350 	//   we have no weapon designs (they are all trashed)
1351 	//   we can't design anything new
1352 	//   a lab could be built, but it hasn't been built
1353 	//   there are no more element stocks to mine
1354 	//   a mine could be built, but it hasn't been built
1355 	/*if( this->designs->size() > 0 )
1356 	return false;*/
1357 	if( this->canBuild(BUILDING_LAB) ) {
1358 		// should try building a lab
1359 		return false;
1360 	}
1361 	if( this->canBuild(BUILDING_MINE) ) {
1362 		// should try building a mine
1363 		return false;
1364 	}
1365 	for(size_t i=0;i<this->designs.size();i++) {
1366 		Design *design = this->designs.at(i);
1367 		if( design->getInvention()->getType() == Invention::WEAPON )
1368 			return false;
1369 	}
1370 	for(int i=0;i<n_epochs_c;i++) {
1371 		if( this->canResearch(Invention::WEAPON, i) )
1372 			return false;
1373 		if( this->canResearch(Invention::DEFENCE, i) )
1374 			return false;
1375 		if( this->canResearch(Invention::SHIELD, i) )
1376 			return false;
1377 	}
1378 	if( tryMiningMore() ) {
1379 		return false;
1380 	}
1381 	return true;
1382 }
1383 
cheat(int client_player)1384 void Sector::cheat(int client_player) {
1385 	if( this->canBuild(BUILDING_MINE) ) {
1386 		this->buildBuilding(BUILDING_MINE);
1387 	}
1388 	if( this->canBuild(BUILDING_FACTORY) ) {
1389 		this->buildBuilding(BUILDING_FACTORY);
1390 	}
1391 	if( this->canBuild(BUILDING_LAB) ) {
1392 		this->buildBuilding(BUILDING_LAB);
1393 	}
1394 	for(int i=0;i<N_ID;i++) {
1395 		while( this->canMine((Id)i) && this->anyElements((Id)i) ) {
1396 			this->mineElement(client_player, (Id)i);
1397 		}
1398 	}
1399 	for(int i=0;i<n_epochs_c;i++) {
1400 		Design *design = this->canResearch(Invention::WEAPON, i);
1401 		if( design != NULL ) {
1402 			this->setCurrentDesign(design);
1403 			this->invent(client_player);
1404 		}
1405 		design = this->canResearch(Invention::DEFENCE, i);
1406 		if( design != NULL ) {
1407 			this->setCurrentDesign(design);
1408 			this->invent(client_player);
1409 		}
1410 		design = this->canResearch(Invention::SHIELD, i);
1411 		if( design != NULL ) {
1412 			this->setCurrentDesign(design);
1413 			this->invent(client_player);
1414 		}
1415 	}
1416 }
1417 
knownDesign(Invention::Type type,int epoch) const1418 Design *Sector::knownDesign(Invention::Type type,int epoch) const {
1419 	//LOG("Sector::knownDesign(%d,%d)\n",type,epoch);
1420 	ASSERT_EPOCH(epoch);
1421 	Invention *invention = Invention::getInvention(type, epoch);
1422 	ASSERT(invention != NULL);
1423 	Design *best_design = NULL;
1424 	for(size_t i=0;i<this->designs.size() && best_design==NULL;i++) {
1425 		Design *design = this->designs.at(i);
1426 		// design should be non-NULL, but to satisfy VS Code Analysis...
1427 		if( design == NULL )
1428 			continue;
1429 		if( design->getInvention() == invention ) {
1430 			//ASSERT( best_design == NULL );
1431 			best_design = design;
1432 		}
1433 	}
1434 	return best_design;
1435 }
1436 
bestDesign(Invention::Type type,int epoch) const1437 Design *Sector::bestDesign(Invention::Type type,int epoch) const {
1438 	//LOG("Sector::bestDesign(%d,%d)\n",type,epoch);
1439 	ASSERT_EPOCH(epoch);
1440 	Invention *invention = Invention::getInvention(type, epoch);
1441 	ASSERT(invention != NULL);
1442 	Design *best_design = NULL;
1443 	// todo: prefer gatherables; prefer more elements (eg, 0.5 wood + 0.5 bone is preferred over 1 wood or 1 bone);
1444 	for(size_t i=0;i<invention->getNDesigns();i++) {
1445 		//Design *design = (Design *)invention->designs->elementAt(i);
1446 		Design *design = invention->getDesign(i);
1447 		bool ok = true;
1448 		if( game_g->isPrefDisallowNukes() && ( type == Invention::DEFENCE || type == Invention::WEAPON ) && epoch == nuclear_epoch_c ) {
1449 			ok = false;
1450 		}
1451 		for(int j=0;j<N_ID && ok;j++) {
1452 			if( design->getCost((Id)j) > this->elementstocks[j] ) {
1453 				// not enough elements
1454 				ok = false;
1455 			}
1456 		}
1457 		if( ok ) {
1458 			if( best_design == NULL )
1459 				best_design = design;
1460 			else if( design->isErgonomicallyTerrific() )
1461 				best_design = design;
1462 		}
1463 	}
1464 	return best_design;
1465 }
1466 
trashDesign(Invention * invention)1467 void Sector::trashDesign(Invention *invention) {
1468 	LOG("Sector::trashDesign(%d) [%d: %d, %d]\n", invention, player, xpos, ypos);
1469 	this->inventions_known[ invention->getType() ][ invention->getEpoch() ] = false;
1470 	for(size_t i=0;i<this->designs.size();i++) {
1471 		Design *design = this->designs.at(i);
1472 		if( design->getInvention() == invention ) {
1473 			this->designs.erase(this->designs.begin() + i);
1474 			break;
1475 		}
1476 	}
1477 	if( this == gamestate->getCurrentSector() ) {
1478 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
1479 		gamestate->getGamePanel()->refresh();
1480 	}
1481 }
1482 
trashDesign(Design * design)1483 void Sector::trashDesign(Design *design) {
1484 	LOG("Sector::trashDesign(%d) [%d: %d, %d]\n", design, player, xpos, ypos);
1485 	this->inventions_known[ design->getInvention()->getType() ][ design->getInvention()->getEpoch() ] = false;
1486 	for(size_t i=0;i<this->designs.size();i++) {
1487 		Design *this_design = this->designs.at(i);
1488 		if( this_design == design ) {
1489 			this->designs.erase(this->designs.begin() + i);
1490 			break;
1491 		}
1492 	}
1493 	if( this == gamestate->getCurrentSector() ) {
1494 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
1495 		gamestate->getGamePanel()->refresh();
1496 	}
1497 }
1498 
nukeSector(Sector * source)1499 bool Sector::nukeSector(Sector *source) {
1500 	LOG("Sector::nuke(%d) [%d: %d, %d]\n", source, player, xpos, ypos);
1501 	ASSERT( source->player != -1 );
1502 	ASSERT( this->player != source->player );
1503 	ASSERT( this->player == -1 || !Player::isAlliance( this->player, source->player ) );
1504 	if( isBeingNuked() ) {
1505 		ASSERT( this->nuke_time != -1 );
1506 		return false;
1507 	}
1508 
1509 	// we still start the timer, even if a laser will shoot it
1510 	this->nuke_by_player = source->player;
1511 	this->nuke_time = game_g->getGameTime();
1512 
1513 	if( this->getActivePlayer() != -1 ) {
1514 		// nuke defences
1515 		bool done = false;
1516 		for(int i=0;i<N_BUILDINGS && !done;i++) {
1517 			if( this->buildings[i] != NULL ) {
1518 				for(int j=0;j<this->buildings[i]->getNTurrets() && !done;j++) {
1519 					if( this->buildings[i]->getTurretMan(j) == nuclear_epoch_c ) {
1520 						ASSERT( !this->nuke_defence_animation );
1521 						this->nuke_defence_animation = true;
1522 						this->nuke_defence_time = game_g->getGameTime();
1523 						this->nuke_defence_x = this->buildings[i]->getTurretButton(j)->getLeft();
1524 						this->nuke_defence_y = this->buildings[i]->getTurretButton(j)->getTop();
1525 						this->buildings[i]->clearTurretMan(j);
1526 						source->nukeSector(this);
1527 						done = true;
1528 					}
1529 				}
1530 			}
1531 		}
1532 	}
1533 
1534 	return true;
1535 }
1536 
canResearch(Invention::Type type,int epoch) const1537 Design *Sector::canResearch(Invention::Type type,int epoch) const {
1538 	//LOG("Sector::canResearch(%d,%d)\n",type,epoch);
1539 	ASSERT_EPOCH(epoch);
1540 	if( epoch < game_g->getStartEpoch() || epoch > game_g->getStartEpoch() + 3 )
1541 		return NULL; // can't research this
1542 	if( epoch > lab_epoch_c && this->getBuilding(BUILDING_LAB) == NULL )
1543 		return NULL; // need a lab for this
1544 
1545 	if( this->inventionKnown(type, epoch) )
1546 		return NULL; // already know it, so can't research it again
1547 
1548 	return this->bestDesign(type, epoch);
1549 }
1550 
getNDesigns() const1551 int Sector::getNDesigns() const {
1552 	//LOG("Sector::getNDesigns()\n");
1553 	return this->designs.size();
1554 }
1555 
consumeStocks(Design * design)1556 void Sector::consumeStocks(Design *design) {
1557     // disable logging, performance issue on mobile devices (Symbian)
1558     //LOG("Sector::consumeStocks(%d) [%d: %d, %d]\n", design, player, xpos, ypos);
1559 	for(int j=0;j<N_ID;j++) {
1560 		// we should have enough elements here!
1561 		ASSERT(this->elementstocks[j] >= design->getCost((Id)j));
1562 		this->reduceElementStocks((Id)j, design->getCost((Id)j));
1563 	}
1564 	if( this == gamestate->getCurrentSector() ) {
1565 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
1566 		gamestate->getGamePanel()->refresh();
1567 	}
1568 }
1569 
buildDesign()1570 void Sector::buildDesign() {
1571 	//LOG("Sector::buildDesign(%d : %s) [%d: %d, %d]\n", this->current_manufacture, this->current_manufacture->getInvention()->getName(), player, xpos, ypos);
1572 /*#ifdef _DEBUG
1573 	LOG("### Sector::buildDesign a\n");
1574 	game_g->getMap()->checkSectors();
1575 #endif*/
1576 	Invention *invention = this->current_manufacture->getInvention();
1577 	if( invention->getType() == Invention::WEAPON ) {
1578 		this->getStoredArmy()->add(invention->getEpoch(), 1);
1579 	}
1580 	else if( invention->getType() == Invention::DEFENCE ) {
1581 		this->stored_defenders[invention->getEpoch()]++;
1582 	}
1583 	else if( invention->getType() == Invention::SHIELD ) {
1584 		int shield = invention->getEpoch() - game_g->getStartEpoch();
1585 		ASSERT_SHIELD(shield);
1586 		this->stored_shields[shield]++;
1587 	}
1588 	else {
1589 		ASSERT(0);
1590 	}
1591 /*#ifdef _DEBUG
1592 	//LOG("### Sector::buildDesign b\n");
1593 	game_g->getMap()->checkSectors();
1594 #endif*/
1595 }
1596 
assembleArmy(int epoch,int n)1597 bool Sector::assembleArmy(int epoch,int n) {
1598 	//LOG("Sector::assembleArmy(%d,%d)\n",epoch,n);
1599 	ASSERT_EPOCH(epoch);
1600 	int n_population = this->getPopulation();
1601 	int n_spare = this->getAvailablePopulation();
1602 	int n_men = game_g->invention_weapons[epoch]->getNMen() * n;
1603 	if( n_spare < n_men ) {
1604 		n = 1;
1605 		n_men = game_g->invention_weapons[epoch]->getNMen() * n;
1606 	}
1607 	if( n_spare < n_men )
1608 		return false;
1609 
1610 	int n_make = this->getStoredArmy()->getSoldiers(epoch);
1611 	if( n_make > n ) {
1612 		n_make = n;
1613 	}
1614 	while( n_make < n ) {
1615 		if( epoch >= factory_epoch_c )
1616 			break;
1617 		// make a new one?
1618 		Design *design = this->canBuildDesign(Invention::WEAPON, epoch);
1619 		if( design == NULL )
1620 			break;
1621 		this->consumeStocks(design);
1622 		this->getStoredArmy()->add(epoch, 1);
1623 		n_make++;
1624 	}
1625 	if( n_make > 0 ) {
1626 		this->getAssembledArmy()->add(epoch, n_make);
1627 		this->getStoredArmy()->remove(epoch, n_make);
1628 		n_men = game_g->invention_weapons[epoch]->getNMen() * n_make;
1629 		this->setPopulation( n_population - n_men );
1630 	}
1631 	return (n_make == n);
1632 }
1633 
deployDefender(Building * building,int turret,int epoch)1634 bool Sector::deployDefender(Building *building,int turret,int epoch) {
1635 	//LOG("Sector::deployDefender(%d,%d,%d) [%d: %d, %d]\n", building->type, turret, epoch, player, xpos, ypos);
1636 	ASSERT_EPOCH(epoch);
1637 	int n_population = this->getPopulation();
1638 	int n_spare = this->getAvailablePopulation();
1639 
1640 	bool need_new_man = false;
1641 	if( building->getTurretMan(turret) == -1 && defenceNeedsMan(epoch) ) {
1642 		// need a new man
1643 		if( n_spare <= 0 )
1644 			return false;
1645 		else
1646 			need_new_man = true;
1647 	}
1648 
1649 	if( this->stored_defenders[epoch] == 0 ) {
1650 		if( epoch >= factory_epoch_c ) {
1651 			return false;
1652 		}
1653 		// not enough - try to make one
1654 		Design *design = this->canBuildDesign(Invention::DEFENCE, epoch);
1655 		if( design == NULL )
1656 			return false;
1657 		this->consumeStocks(design);
1658 		this->stored_defenders[epoch]++;
1659 	}
1660 
1661 	LOG("deploying a new defender(%d,%d,%d) [%d: %d, %d]\n", building->getType(), turret, epoch, player, xpos, ypos);
1662 	if( building->getTurretMan(turret) != -1 ) {
1663 		// return current defender to stocks
1664 		this->stored_defenders[ building->getTurretMan(turret) ]++;
1665 	}
1666 	this->stored_defenders[epoch]--;
1667 	building->setTurretMan(turret, epoch);
1668 	if( need_new_man )
1669 		this->setPopulation( n_population - 1 );
1670 	return true;
1671 }
1672 
returnDefender(Building * building,int turret)1673 void Sector::returnDefender(Building *building,int turret) {
1674 	LOG("Sector::returnDefender(%d,%d) [%d: %d, %d]\n", building->getType(), turret, player, xpos, ypos);
1675 	ASSERT( building->getTurretMan(turret) != -1 );
1676 	if( defenceNeedsMan( building->getTurretMan(turret) ) ) {
1677 		int n_population = this->getPopulation();
1678 		this->setPopulation( n_population + 1 );
1679 	}
1680 	this->stored_defenders[ building->getTurretMan(turret) ]++;
1681 	building->clearTurretMan(turret);
1682 }
1683 
getStoredDefenders(int epoch) const1684 int Sector::getStoredDefenders(int epoch) const {
1685 	//LOG("Sector::getStoredDefenders(%d)\n",epoch);
1686 	ASSERT_EPOCH(epoch);
1687 	return this->stored_defenders[epoch];
1688 }
1689 
useShield(Building * building,int shield)1690 bool Sector::useShield(Building *building,int shield) {
1691 	ASSERT_SHIELD(shield);
1692 	if( this->stored_shields[shield] == 0 ) {
1693 		if( game_g->getStartEpoch() + shield >= factory_epoch_c )
1694 			return false;
1695 		// not enough - try to make one
1696 		Design *design = this->canBuildDesign(Invention::SHIELD, game_g->getStartEpoch() + shield);
1697 		if( design == NULL )
1698 			return false; // can't make a new one
1699 		this->consumeStocks(design);
1700 		this->stored_shields[shield]++;
1701 	}
1702 	LOG("-> Use Shield %d on building %d type %d\n", shield, building, building->getType());
1703 	//building->addHealth( 10 * ( shield + 1 ) );
1704 	building->addHealth( 5 * ( shield + 1 ) );
1705 	this->stored_shields[shield]--;
1706 	return true;
1707 }
1708 
getStoredShields(int shield) const1709 int Sector::getStoredShields(int shield) const {
1710 	ASSERT_SHIELD(shield);
1711 	return this->stored_shields[shield];
1712 }
1713 
getDefenceStrength() const1714 float Sector::getDefenceStrength() const {
1715 	//LOG("Sector::getDefenceStrength() [%d: %d, %d]\n", player, xpos, ypos);
1716 	ASSERT_PLAYER(player);
1717 	float str = 0.0f;
1718 	if( game_g->getStartEpoch() == end_epoch_c ) {
1719 		str = 4.0f;
1720 	}
1721 	else {
1722 		//str = ( this->epoch - game_g->getStartEpoch() ) + 1;
1723 		str = 1.0f;
1724 	}
1725 	if( this->player == PlayerType::PLAYER_BLUE ) {
1726 		str *= 1.25f;
1727 	}
1728 	return str;
1729 }
1730 
doCombat(int client_player)1731 void Sector::doCombat(int client_player) {
1732 	//LOG("Sector::doCombat()\n");
1733 	int looptime = game_g->getLoopTime();
1734 
1735 	/*int army_strengths[n_players_c];
1736 	int n_armies = 0;
1737 	for(i=0;i<n_players_c;i++) {
1738 	army_strengths[i] = this->getArmy(i)->getStrength();
1739 	if( army_strengths[i] > 0 )
1740 	n_armies++;
1741 	}
1742 	if( n_armies == 2 ) {
1743 	Army *friendly = this->getArmy(human_player);
1744 	Army *enemy = this->getArmy(enemy_player);
1745 	}*/
1746 	bool died[n_players_c];
1747 	//int random = rand () % RAND_MAX;
1748 	for(int i=0;i<n_players_c;i++) {
1749 		died[i] = false;
1750 		Army *army = this->getArmy(i);
1751 		int this_strength = army->getStrength();
1752 		int this_total = army->getTotal();
1753 		//LOG(">>> %d , %d\n", this_strength, this_total);
1754 		if( this->player == i ) {
1755 			this_total += this->getNDefenders();
1756 			this_strength += this->getDefenderStrength();
1757 		}
1758 		//LOG("    %d , %d\n", this_strength, this_total);
1759 		if( this_total > 0 ) {
1760 			int enemy_strength = 0;
1761 			for(int j=0;j<n_players_c;j++) {
1762 				if( i != j && !Player::isAlliance(i,j) ) {
1763 					enemy_strength += this->getArmy(j)->getStrength();
1764 					if( this->player == j ) {
1765 						enemy_strength += this->getDefenderStrength();
1766 					}
1767 				}
1768 			}
1769 			if( enemy_strength > 0 ) {
1770 				//int death_rate = ( combat_rate_c * gameticks_per_hour_c * this_strength ) / enemy_strength;
1771 				//int death_rate = ( combat_rate_c * gameticks_per_hour_c ) / enemy_strength;
1772 				//int death_rate = ( combat_rate_c * gameticks_per_hour_c * this_strength ) / ( enemy_total * enemy_strength );
1773 				// need to use floats, to avoid possible overflow!!!
1774 				// lower death rate is faster - which is why we divide by the enemy strength
1775 				// but we multiply by the average strength of a soldier, because we need to convert a loss in terms of strength to a loss in terms of soldier numbers
1776 				// consider if we have: A=1*100 vs B=100*1 - we want this to be an even battle. But that means B should lose soldiers on average at 100 times the rate of A, in order for it to be even
1777 				// see docs/combat_logic.txt for more examples
1778 				float death_rate = ((float)this_strength) / ((float)this_total);
1779 				death_rate = death_rate * ((float)(combat_rate_c * gameticks_per_hour_c)) / ((float)enemy_strength);
1780 				int prob = poisson((int)death_rate, looptime);
1781 				int random = rand() % RAND_MAX;
1782 				if( random <= prob ) {
1783 					// soldier has died
1784 					died[i] = true;
1785 				}
1786 			}
1787 		}
1788 	}
1789 	for(int i=0;i<n_players_c;i++) {
1790 		if( died[i] ) {
1791 			Army *army = this->getArmy(i);
1792 			int this_total = army->getTotal();
1793 			if( this->player == i )
1794 				this_total += this->getNDefenders();
1795 
1796 			int die = rand() % this_total;
1797 			if( die < army->getTotal() ) {
1798 				army->kill(die);
1799 			}
1800 			else {
1801 				// kill a defender
1802 				this->killDefender(die - army->getTotal());
1803 			}
1804 		}
1805 	}
1806 
1807 	// damage to buildings
1808 	if( this->player != -1 ) {
1809 		int bombard = 0;
1810 		for(int i=0;i<n_players_c;i++) {
1811 			if( this->player != i && !Player::isAlliance(this->player, i) ) {
1812 				bombard += this->getArmy(i)->getBombardStrength();
1813 			}
1814 		}
1815 		if( bombard > 0 ) {
1816 			int bombard_rate = ( bombard_rate_c * gameticks_per_hour_c ) / bombard;
1817 			bombard_rate = (int)(bombard_rate * this->getDefenceStrength());
1818 			int prob = poisson(bombard_rate, looptime);
1819 			int random = rand() % RAND_MAX;
1820 			if( random <= prob ) {
1821 				// caused some damage
1822 				int n_buildings = 0;
1823 				for(int i=0;i<N_BUILDINGS;i++) {
1824 					if( this->buildings[i] != NULL )
1825 						n_buildings++;
1826 				}
1827 				ASSERT( n_buildings > 0 );
1828 				int b = rand() % n_buildings;
1829 				for(int i=0;i<N_BUILDINGS;i++) {
1830 					Building *building = this->buildings[i];
1831 					if( building != NULL ) {
1832 						if( b == 0 ) {
1833 							building->addHealth(-1);
1834 #ifdef _DEBUG
1835                             // disable in Release mode as possible performance issue on mobile devices (Symbian)
1836                             LOG("Sector [%d: %d, %d] caused some damage on building %d, type %d, %d remaining\n", player, xpos, ypos, building, building->getType(), building->getHealth());
1837 #endif
1838 							if( building->getHealth() <= 0 ) {
1839 								// destroy building
1840 								destroyBuilding((Type)i, client_player);
1841 							}
1842 							else if( this->player == client_player && building->getHealth() == 10 && building->getType() == BUILDING_TOWER ) {
1843 								playSample(game_g->s_tower_critical);
1844 								//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
1845 								gamestate->setFlashingSquare(this->xpos, this->ypos);
1846 							}
1847 							break;
1848 						}
1849 						b--;
1850 					}
1851 				}
1852 			}
1853 		}
1854 	}
1855 }
1856 
doPlayer(int client_player)1857 void Sector::doPlayer(int client_player) {
1858 	//LOG("Sector::doPlayer()\n");
1859 	// stuff for sectors owned by a player
1860 
1861 	// n.b., only update the particle systems that are specific to sectors owned by a player
1862 	if( this->smokeParticleSystem != NULL ) {
1863 		this->smokeParticleSystem->update();
1864 	}
1865 
1866 	if( game_g->getGameMode() == GAMEMODE_MULTIPLAYER_CLIENT ) {
1867 		// rest of function is for game logic done by server
1868 		return;
1869 	}
1870 
1871 	int time = game_g->getGameTime();
1872 	int looptime = game_g->getLoopTime();
1873 
1874 	if( this->current_design != NULL ) {
1875 		if( this->researched_lasttime == -1 )
1876 			this->researched_lasttime = time;
1877 		while( time - this->researched_lasttime > gameticks_per_hour_c ) {
1878 			this->researched += this->getDesigners();
1879 			this->researched_lasttime += gameticks_per_hour_c;
1880 		}
1881 		int cost = this->getInventionCost();
1882 		if( this->researched > cost ) {
1883 			//LOG("Sector [%d: %d, %d] has made a %s\n", player, xpos, ypos, this->current_design->getInvention()->getName());
1884 			this->invent(client_player);
1885 		}
1886 	}
1887 
1888 	if( this->current_manufacture != NULL ) {
1889 		if( this->manufactured_lasttime == -1 )
1890 			this->manufactured_lasttime = time;
1891 		if( this->manufactured == 0 && this->getWorkers() > 0 ) {
1892 			if( !this->canBuildDesign( this->current_manufacture ) ) {
1893 				// not enough elements
1894 				// therefore production run completed
1895 				if( this->player == client_player ) {
1896 					playSample(game_g->s_fcompleted);
1897 					gamestate->setFlashingSquare(this->xpos, this->ypos);
1898 				}
1899 				this->setCurrentManufacture(NULL);
1900 				if( this == gamestate->getCurrentSector() ) {
1901 					//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
1902 					gamestate->getGamePanel()->refresh();
1903 				}
1904 			}
1905 			else {
1906 				this->consumeStocks( this->current_manufacture );
1907 			}
1908 		}
1909 	}
1910 	// a new if statement, as production run may have ended due to lack of elements
1911 	if( this->current_manufacture != NULL ) {
1912 		while( time - this->manufactured_lasttime > gameticks_per_hour_c ) {
1913 			this->manufactured += this->getWorkers();
1914 			this->manufactured_lasttime += gameticks_per_hour_c;
1915 		}
1916 		if( this->manufactured == 0 && this->getWorkers() > 0 ) {
1917 			this->manufactured++; // a bit hacky; just to avoid consuming stocks again
1918 		}
1919 		int cost = this->getManufactureCost();
1920 		if( this->manufactured > cost ) {
1921 			this->buildDesign();
1922 			this->manufactured = 0;
1923 			if( this->n_famount != infinity_c )
1924 				this->setFAmount( this->n_famount - 1 );
1925 			if( this->n_famount == 0 ) {
1926 				// production run completed
1927 				//LOG("production run completed\n");
1928 				if( this->player == client_player ) {
1929 					playSample(game_g->s_fcompleted);
1930 					gamestate->setFlashingSquare(this->xpos, this->ypos);
1931 				}
1932 				this->setCurrentManufacture(NULL);
1933 			}
1934 			if( this == gamestate->getCurrentSector() ) {
1935 				//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
1936 				gamestate->getGamePanel()->refresh();
1937 			}
1938 		}
1939 	}
1940 
1941 	bool new_stocks = false;
1942 	for(int i=0;i<N_ID;i++) {
1943 		if( this->elements[i] == 0 ) {
1944 			continue; // no more of this element
1945 		}
1946 		Element *element = game_g->elements[i];
1947 		if( element->getType() != Element::GATHERABLE || this->elementstocks[i] < max_gatherables_stored_c * element_multiplier_c )
1948 		{
1949 			int n_gatherers = 0;
1950 			if( element->getType() == Element::GATHERABLE ) {
1951 				n_gatherers = n_gatherable_rate_c;
1952 			}
1953 			else
1954 				n_gatherers = this->getMiners((Id)i);
1955 			this->partial_elementstocks[i] += element_multiplier_c * n_gatherers * looptime;
1956 			while( this->partial_elementstocks[i] > mine_rate_c * gameticks_per_hour_c ) {
1957 				new_stocks = true;
1958 				this->partial_elementstocks[i] -= mine_rate_c * gameticks_per_hour_c;
1959 				if( this->mineElement(client_player, (Id)i) ) {
1960 					break;
1961 				}
1962 			}
1963 		}
1964 	}
1965 	if( new_stocks && this == gamestate->getCurrentSector() ) {
1966 		/*((PlayingGameState *)gamestate)->getGamePanel()->refreshCanDesign();
1967 		((PlayingGameState *)gamestate)->getGamePanel()->refreshDesignInventions();
1968 		//((PlayingGameState *)gamestate)->getGamePanel()->refreshDeployInventions();
1969 		((PlayingGameState *)gamestate)->getGamePanel()->refreshManufactureInventions();*/
1970 
1971 		gamestate->getGamePanel()->refreshCanDesign();
1972 		gamestate->getGamePanel()->refreshDesignInventions();
1973 		gamestate->getGamePanel()->refreshManufactureInventions();
1974 	}
1975 
1976 	if( this->built_lasttime == -1 )
1977 		this->built_lasttime = time;
1978 	while( time - this->built_lasttime > gameticks_per_hour_c ) {
1979 		for(int i=0;i<N_BUILDINGS;i++) {
1980 			this->built[i] += this->getBuilders((Type)i);
1981 		}
1982 		this->built_lasttime += gameticks_per_hour_c;
1983 	}
1984 	for(int i=0;i<N_BUILDINGS;i++) {
1985 		int cost = getBuildingCost((Type)i, this->player);
1986 		if( this->built[i] > cost ) {
1987 			this->buildBuilding((Type)i);
1988 		}
1989 	}
1990 
1991 	if( this->growth_lasttime == -1 )
1992 		this->growth_lasttime = time;
1993 	else if( game_g->getTutorial() != NULL && !game_g->getTutorial()->aiAllowGrowth() && !game_g->players[this->player]->isHuman() ) {
1994 		// don't allow growth
1995 	}
1996 	else if( this->getSparePopulation() > 0 ) {
1997 		int spare_pop = this->getSparePopulation();
1998 		if( spare_pop > max_grow_population_c/2 ) {
1999 			spare_pop = max_grow_population_c - spare_pop;
2000 			spare_pop = max(spare_pop, 0);
2001 		}
2002 		if( spare_pop > 0 ) {
2003 			int delay = ( growth_rate_c * gameticks_per_hour_c ) / spare_pop;
2004 			if( time - this->growth_lasttime > delay ) {
2005 				int old_pop = this->population;
2006 				if( this->getSparePopulation() < max_grow_population_c )
2007 					this->population++;
2008 				this->growth_lasttime = time;
2009 				int births = this->population - old_pop;
2010 				if( births > 0 ) {
2011 					game_g->players[this->player]->registerBirths(births);
2012 				}
2013 			}
2014 		}
2015 	}
2016 }
2017 
getNukePos(int * nuke_x,int * nuke_y) const2018 void Sector::getNukePos(int *nuke_x, int *nuke_y) const {
2019 	ASSERT( this->isBeingNuked() );
2020 	*nuke_x = -1;
2021 	*nuke_y = -1;
2022 	if( this->isBeingNuked() ) {
2023 		ASSERT( nuke_time != -1 );
2024 		float alpha = ((float)( game_g->getGameTime() - nuke_time )) / (float)nuke_delay_c;
2025 		ASSERT( alpha >= 0.0 );
2026 		if( alpha > 1.0 )
2027 			alpha = 1.0;
2028 		int sx = offset_land_x_c+176, sy = offset_land_y_c-18;
2029 		int ex = offset_land_x_c+64, ey = offset_land_y_c+94;
2030 		*nuke_x = (int)(alpha * ex + (1.0 - alpha) * sx);
2031 		*nuke_y = (int)(alpha * ey + (1.0 - alpha) * sy);
2032 	}
2033 }
2034 
update(int client_player)2035 void Sector::update(int client_player) {
2036 	//LOG("Sector::update()\n");
2037 	if( game_g->getGameMode() != GAMEMODE_MULTIPLAYER_CLIENT ) {
2038 		this->doCombat(client_player);
2039 	}
2040 
2041 	// update particle systems (that aren't done in doPlayer())
2042 	if( this->jetParticleSystem != NULL ) {
2043 		this->jetParticleSystem->update();
2044 	}
2045 	if( this->nukeParticleSystem != NULL ) {
2046 		this->nukeParticleSystem->update();
2047 	}
2048 	if( this->nukeDefenceParticleSystem != NULL ) {
2049 		this->nukeDefenceParticleSystem->update();
2050 	}
2051 
2052 	if( this->player != -1 ) {
2053 		if( !this->is_shutdown )
2054 			this->doPlayer(client_player); // still call for clients, to update particle system
2055 	}
2056 	else if( game_g->getGameMode() != GAMEMODE_MULTIPLAYER_CLIENT ) {
2057 		int time = game_g->getGameTime();
2058 		int n_players_in_sector = 0;
2059 		int player_in_sector = -1;
2060 		for(int i=0;i<n_players_c;i++) {
2061 			//if( this->getArmy(i)->getTotal() > 0 ) {
2062 			if( this->getArmy(i)->any(true) ) {
2063 				player_in_sector = i;
2064 				n_players_in_sector++;
2065 			}
2066 		}
2067 
2068 		// build new tower?
2069 		if( game_g->getTutorial() != NULL && game_g->getTutorial()->getCard() != NULL && !game_g->getTutorial()->getCard()->playerAllowBuildTower() ) {
2070 			// don't allow building new tower
2071 		}
2072 		else if( n_players_in_sector == 1 ) {
2073 			if( this->built_lasttime == -1 )
2074 				this->built_lasttime = time;
2075 			while( time - this->built_lasttime > gameticks_per_hour_c ) {
2076 				this->built_towers[player_in_sector] += this->getArmy(player_in_sector)->getTotal();
2077 				this->built_lasttime += gameticks_per_hour_c;
2078 			}
2079 
2080 			int cost = getBuildingCost(BUILDING_TOWER, player_in_sector);
2081 			if( this->built_towers[player_in_sector] > cost ) {
2082 				/*if( ((PlayingGameState *)gamestate)->getSelectedArmy() == this->getArmy(player_in_sector) ) {
2083 					((PlayingGameState *)gamestate)->clearSelectedArmy();
2084 				}*/
2085 				if( gamestate->getSelectedArmy() == this->getArmy(player_in_sector) ) {
2086 					gamestate->clearSelectedArmy();
2087 				}
2088 				this->createTower(player_in_sector, 0);
2089 				this->returnArmy();
2090 				if( this == gamestate->getCurrentSector() ) {
2091 					//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2092 					gamestate->getGamePanel()->refresh();
2093 				}
2094 			}
2095 		}
2096 	}
2097 
2098 	if( game_g->getGameMode() == GAMEMODE_MULTIPLAYER_CLIENT ) {
2099 		return;
2100 	}
2101 	// rest of function is done by server
2102 
2103 	if( this->nuke_by_player != -1 ) {
2104 		ASSERT( this->nuke_time != -1 );
2105 		if( game_g->getGameTime() >= this->nuke_time + nuke_delay_c ) {
2106 			this->nuked = true;
2107 
2108 			if( this->getActivePlayer() != -1 ) {
2109 				// lasers
2110 				for(int i=0;i<N_BUILDINGS && nuked;i++) {
2111 					if( this->buildings[i] != NULL ) {
2112 						for(int j=0;j<this->buildings[i]->getNTurrets() && nuked;j++) {
2113 							if( this->buildings[i]->getTurretMan(j) == laser_epoch_c ) {
2114 								//this->buildings[i]->turret_man[j] = -1;
2115 								this->buildings[i]->killIthDefender(j);
2116 								this->nuked = false;
2117 								if( this == gamestate->getCurrentSector() ) {
2118 									if( game_g->explosions[0] != NULL ) {
2119 										int w = game_g->explosions[0]->getScaledWidth();
2120 										int h = game_g->explosions[0]->getScaledHeight();
2121 										gamestate->explosionEffect( buildings[i]->getTurretButton(j)->getXCentre() - w/2, buildings[i]->getTurretButton(j)->getYCentre() - h/2);
2122 										int nuke_x = -1, nuke_y = -1;
2123 										this->getNukePos(&nuke_x, &nuke_y);
2124 										Image *nuke_image = game_g->nukes[this->nuke_by_player][1];
2125 										gamestate->explosionEffect( nuke_x + nuke_image->getScaledWidth()/2 - w/2, nuke_y + nuke_image->getScaledHeight()/2 - h/2);
2126 									}
2127 								}
2128 							}
2129 						}
2130 					}
2131 				}
2132 			}
2133 
2134 			if( this->nuked ) {
2135 				playSample(game_g->s_explosion, SOUND_CHANNEL_FX);
2136 				game_g->s_explosion->setVolume(0.25f); // needed so we can hear speech sample over the explosion
2137 				if( this->getActivePlayer() != -1 ) {
2138 					this->destroyTower(true, client_player);
2139 				}
2140 				for(int i=0;i<n_players_c;i++) {
2141 					this->armies[i]->empty();
2142 				}
2143 				// replace tree icons with burnt tree, and delete other features
2144 				for(vector<Feature *>::iterator iter = this->features.begin(); iter != this->features.end();) {
2145 					Feature *feature = *iter;
2146 					const Image *image = feature->getImage(0);
2147 					// bit of a hacky way of finding trees...
2148 					bool is_tree = false;
2149 					for(int i=0;i<n_trees_c && !is_tree;i++) {
2150 						if( image == game_g->icon_trees[i][0] ) {
2151 							is_tree = true;
2152 						}
2153 					}
2154 					if( is_tree ) {
2155 						feature->setImage(game_g->icon_trees[2], 1);
2156 						 ++iter;
2157 					}
2158 					else {
2159 						iter = features.erase(iter);
2160 					}
2161 				}
2162 				// now add some new features
2163 				int n_clutter = game_g->icon_clutter_nuked.size() > 0 ? (1 + rand() % 4) : 0;
2164 				for(int i=0;i<n_clutter;i++) {
2165 					int land_width = game_g->land[0]->getScaledWidth() - 32;
2166 					int land_height = game_g->land[0]->getScaledHeight() - 32;
2167 					int xpos = offset_land_x_c + rand() % land_width;
2168 					int ypos = offset_land_y_c + rand() % land_height;
2169 					Image **image_ptr = &game_g->icon_clutter_nuked[rand() % game_g->icon_clutter_nuked.size()];
2170 					Feature *feature = new Feature(image_ptr, 1, xpos, ypos);
2171 					this->features.push_back(feature);
2172 				}
2173 				if( this == gamestate->getCurrentSector() ) {
2174 					//((PlayingGameState *)gamestate)->refreshSoldiers(true);
2175 					//((PlayingGameState *)gamestate)->whiteFlash();
2176 					gamestate->refreshSoldiers(true);
2177 					gamestate->whiteFlash();
2178 				}
2179 				if( this->isShutdown() ) {
2180 					// shutdown sectors are never marked as "nuked"
2181 					this->nuked = false;
2182 				}
2183 			}
2184 
2185 			this->nuke_by_player = -1;
2186 			this->nuke_time = -1;
2187 			this->nuke_defence_animation = false;
2188 		}
2189 	}
2190 }
2191 
mineElement(int client_player,Id i)2192 bool Sector::mineElement(int client_player, Id i) {
2193 	Element *element = game_g->elements[(int)i];
2194 	ASSERT( this->elements[(int)i] > 0 );
2195 	this->elementstocks[(int)i]++;
2196 	this->elements[(int)i]--;
2197 	if( this->elements[(int)i] == 0 ) {
2198 		if( element->getType() != Element::GATHERABLE )
2199 			this->setMiners(i, 0);
2200 		LOG("Sector [%d: %d, %d] running out of element %d : %s\n", player, xpos, ypos, (int)i, game_g->elements[(int)i]->getName());
2201 		if( this->player == client_player ) {
2202 			playSample(game_g->s_running_out_of_elements);
2203 			//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
2204 			gamestate->setFlashingSquare(this->xpos, this->ypos);
2205 		}
2206 		return true;
2207 	}
2208 	return false;
2209 }
2210 
invent(int client_player)2211 void Sector::invent(int client_player) {
2212 	ASSERT(current_design != NULL);
2213 	bool done_sound = false;
2214 	if( this->player != client_player )
2215 		done_sound = true;
2216 	ASSERT( !this->inventions_known[ current_design->getInvention()->getType() ][ current_design->getInvention()->getEpoch() ] );
2217 	this->inventions_known[ current_design->getInvention()->getType() ][ current_design->getInvention()->getEpoch() ] = true;
2218 	this->designs.push_back( current_design );
2219 
2220 	if( this->epoch < game_g->getStartEpoch() + 3 && epoch < n_epochs_c-1 ) {
2221 		//int levels[4] = {0, 0, 0, 0};
2222 		int score = 0;
2223 		for(int i=0;i<3;i++) {
2224 			int val = 1;
2225 			for(int j=0;j<4;j++) {
2226 				if( game_g->getStartEpoch()+j < n_epochs_c ) {
2227 					if( this->inventions_known[i][game_g->getStartEpoch()+j] ) {
2228 						//levels[j]++;
2229 						score += val;
2230 					}
2231 				}
2232 				val *= 2;
2233 			}
2234 		}
2235 		score = ( score + 3 ) / 3;
2236 		int new_epoch = game_g->getStartEpoch();
2237 		while( score > 1 ) {
2238 			new_epoch++;
2239 			score /= 2;
2240 		}
2241 		if( new_epoch > this->epoch ) {
2242 			// advance a tech level!
2243 			this->epoch = new_epoch;
2244 			LOG("Sector [%d: %d, %d] has advanced to tech level %d\n", player, xpos, ypos, epoch);
2245 			if( !done_sound ) {
2246 				playSample(game_g->s_advanced_tech);
2247 				done_sound = true;
2248 			}
2249 		}
2250 	}
2251 	if( this == gamestate->getCurrentSector() ) {
2252 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2253 		gamestate->getGamePanel()->refresh();
2254 	}
2255 	if( !done_sound ) {
2256 		if( current_design->isErgonomicallyTerrific() )
2257 			playSample(game_g->s_ergo);
2258 		else
2259 			playSample(game_g->s_design_is_ready);
2260 	}
2261 	if( this->player == client_player ) {
2262 		//((PlayingGameState *)gamestate)->setFlashingSquare(this->xpos, this->ypos);
2263 		gamestate->setFlashingSquare(this->xpos, this->ypos);
2264 	}
2265 	this->setCurrentDesign(NULL);
2266 }
2267 
buildBuilding(Type type)2268 void Sector::buildBuilding(Type type) {
2269 	LOG("Sector [%d: %d, %d] has built building type %d\n", player, xpos, ypos, (int)type);
2270 	this->setBuilders(type, 0);
2271 	this->built[(int)type] = 0;
2272 	if( type == BUILDING_MINE ) {
2273 		this->buildings[BUILDING_MINE] = new Building(gamestate, this, BUILDING_MINE);
2274 	}
2275 	else if( type == BUILDING_FACTORY ) {
2276 		this->buildings[BUILDING_FACTORY] = new Building(gamestate, this, BUILDING_FACTORY);
2277 	}
2278 	else if( type == BUILDING_LAB ) {
2279 		this->buildings[BUILDING_LAB] = new Building(gamestate, this, BUILDING_LAB);
2280 	}
2281 	else {
2282 		// error
2283 		LOG("###Didn't expect completion of building type %d\n", (int)type);
2284 		ASSERT(0);
2285 	}
2286 	updateForNewBuilding(type);
2287 	if( this == gamestate->getCurrentSector() ) {
2288 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2289 		//((PlayingGameState *)gamestate)->addBuilding( this->buildings[(Type)i] ); // now done in Building constructor
2290 		gamestate->getGamePanel()->refresh();
2291 	}
2292 }
2293 
updateForNewBuilding(Type type)2294 void Sector::updateForNewBuilding(Type type) {
2295 	if( type == BUILDING_FACTORY ) {
2296 		this->updateWorkers(); // call to also set the particle system rate (calling updateWorkers() instead of setWorkers(0), so this doesn't reset n_workers when loading saved state)
2297 	}
2298 }
2299 
getInventionCost() const2300 int Sector::getInventionCost() const {
2301 	//LOG("Sector::getInventionCost()\n");
2302 	const int factor_c = 12;
2303 	int diff = this->current_design->getInvention()->getEpoch() - this->epoch;
2304 	int cost = -1;
2305 
2306 	if( diff == -3 )
2307 		cost = factor_c * DESIGNTIME_M3;
2308 	else if( diff == -2 )
2309 		cost = factor_c * DESIGNTIME_M2;
2310 	else if( diff == -1 )
2311 		cost = factor_c * DESIGNTIME_M1;
2312 	else if( diff == 0 )
2313 		cost = factor_c * DESIGNTIME_0;
2314 	else if( diff == 1 )
2315 		cost = factor_c * DESIGNTIME_1;
2316 	else if( diff == 2 )
2317 		cost = factor_c * DESIGNTIME_2;
2318 	else if( diff == 3 )
2319 		cost = factor_c * DESIGNTIME_3;
2320 
2321 	ASSERT(cost != -1);
2322 	if( this->current_design->isErgonomicallyTerrific() )
2323 		cost /= 2;
2324 	return cost;
2325 }
2326 
getManufactureCost() const2327 int Sector::getManufactureCost() const {
2328 	//LOG("Sector::getManufactureCost()\n");
2329 	const int factor_c = 12;
2330 	int diff = this->current_manufacture->getInvention()->getEpoch() - this->epoch;
2331 	int cost = -1;
2332 
2333 	if( diff <= 0 )
2334 		cost = factor_c * MANUFACTURETIME_0;
2335 	else if( diff == 1 )
2336 		cost = factor_c * MANUFACTURETIME_1;
2337 	else if( diff == 2 )
2338 		cost = factor_c * MANUFACTURETIME_2;
2339 	else if( diff == 3 )
2340 		cost = factor_c * MANUFACTURETIME_3;
2341 
2342 	ASSERT(cost != -1);
2343 
2344 	return cost;
2345 }
2346 
getBuildingCost(Type type,int building_player)2347 int Sector::getBuildingCost(Type type, int building_player) {
2348 	//LOG("Sector::getBuildingcost(%d)\n",type);
2349 	int cost = 0;
2350 	if( type == BUILDING_TOWER ) {
2351 		cost = hours_per_day_c * BUILDTIME_TOWER;
2352 		if( building_player == PlayerType::PLAYER_GREEN ) {
2353 			cost = (int)(cost / 2.0f);
2354 		}
2355 	}
2356 	else if( type == BUILDING_MINE )
2357 		cost = hours_per_day_c * BUILDTIME_MINE;
2358 	else if( type == BUILDING_FACTORY )
2359 		cost = hours_per_day_c * BUILDTIME_FACTORY;
2360 	else if( type == BUILDING_LAB )
2361 		cost = hours_per_day_c * BUILDTIME_LAB;
2362 	else {
2363 		// error
2364 		ASSERT(0);
2365 		cost = -1;
2366 	}
2367 
2368 	return cost;
2369 }
2370 
setEpoch(int epoch)2371 void Sector::setEpoch(int epoch) {
2372 	LOG("Sector::setEpoch(%d) [%d: %d,%d]\n", epoch, player, xpos, ypos);
2373 	ASSERT_EPOCH(epoch);
2374 	if( this == gamestate->getCurrentSector() ) {
2375 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2376 		gamestate->getGamePanel()->refresh();
2377 	}
2378 	this->epoch = epoch;
2379 }
2380 
getEpoch() const2381 int Sector::getEpoch() const {
2382 	//LOG("Sector::getEpoch()\n");
2383 	/*if( epoch >= n_epochs_c ) {
2384 		printf("!!!\n");
2385 	}*/
2386 	ASSERT_EPOCH(epoch);
2387 	return epoch;
2388 }
2389 
getBuildingEpoch() const2390 int Sector::getBuildingEpoch() const {
2391 	int eph = this->getEpoch();
2392 	/*if( this->is_shutdown )
2393 		eph = end_epoch_c;
2394 	else if( game_g->getStartEpoch() == end_epoch_c )
2395 		eph = end_epoch_c;
2396 	else if( eph == n_epochs_c-1 )
2397 		eph = n_epochs_c-2;*/
2398 	if( this->is_shutdown )
2399 		eph = n_epochs_c-1;
2400 	else if( game_g->getStartEpoch() == end_epoch_c )
2401 		eph = n_epochs_c-1;
2402 	else if( eph == n_epochs_c-1 )
2403 		eph = n_epochs_c-2;
2404 	return eph;
2405 }
2406 
getPlayer() const2407 int Sector::getPlayer() const {
2408 	//LOG("Sector::getPlayer()\n");
2409 	return player;
2410 }
2411 
getActivePlayer() const2412 int Sector::getActivePlayer() const {
2413 	if( this->is_shutdown )
2414 		return PLAYER_NONE;
2415 	return player;
2416 }
2417 
setCurrentDesign(Design * current_design)2418 void Sector::setCurrentDesign(Design *current_design) {
2419 	//LOG("Sector::setCurrentDesign(%d : %s) [%d: %d, %d]\n", current_design, current_design==NULL?"NONE":current_design->getInvention()->getName(), player, xpos, ypos);
2420 	ASSERT( current_design == NULL || current_design->getInvention()->getEpoch() <= lab_epoch_c || this->getBuilding(BUILDING_LAB ) != NULL );
2421 	this->current_design = current_design;
2422 	this->n_designers = 0;
2423 	this->researched = 0;
2424 	this->researched_lasttime = game_g->getGameTime();
2425 	if( this == gamestate->getCurrentSector() ) {
2426 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2427 		gamestate->getGamePanel()->refresh();
2428 	}
2429 }
2430 
getCurrentDesign() const2431 const Design *Sector::getCurrentDesign() const {
2432 	//LOG("Sector::getCurrentDesign()\n");
2433 	return this->current_design;
2434 }
2435 
setCurrentManufacture(Design * current_manufacture)2436 void Sector::setCurrentManufacture(Design *current_manufacture) {
2437 	//LOG("Sector::setCurrentManufacture(%d : %s) [%d: %d, %d]\n", current_manufacture, current_manufacture==NULL?"NONE":current_manufacture->getInvention()->getName(), player, xpos, ypos);
2438 /*#ifdef _DEBUG
2439 	LOG("### Sector::setCurrentManufacture a\n");
2440 	game_g->getMap()->checkSectors();
2441 #endif*/
2442 	ASSERT( current_manufacture == NULL || this->getBuilding(BUILDING_FACTORY ) != NULL );
2443 	ASSERT( current_manufacture == NULL || current_manufacture->getInvention()->getEpoch() >= factory_epoch_c );
2444 	this->current_manufacture = current_manufacture;
2445 	//this->n_workers = 0;
2446 	this->setWorkers(0); // call to also set the particle system rate
2447 	this->n_famount = 1;
2448 	this->manufactured = 0;
2449 	this->manufactured_lasttime = game_g->getGameTime();
2450 /*#ifdef _DEBUG
2451 	LOG("### Sector::setCurrentManufacture b\n");
2452 	game_g->getMap()->checkSectors();
2453 #endif*/
2454 	if( this == gamestate->getCurrentSector() ) {
2455 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2456 		gamestate->getGamePanel()->refresh();
2457 	}
2458 /*#ifdef _DEBUG
2459 	LOG("### Sector::setCurrentManufacture c\n");
2460 	game_g->getMap()->checkSectors();
2461 #endif*/
2462 }
2463 
getCurrentManufacture() const2464 const Design *Sector::getCurrentManufacture() const {
2465 	//LOG("Sector::getCurrentManufature()\n");
2466 	return this->current_manufacture;
2467 }
2468 
inventionTimeLeft(int * halfdays,int * hours) const2469 void Sector::inventionTimeLeft(int *halfdays,int *hours) const {
2470 	//LOG("Sector::inventionTimeLeft()\n");
2471 	int cost = this->getInventionCost() - this->researched;
2472 	int time = cost / this->getDesigners();
2473 	*halfdays = (int)( time / 12 );
2474 	*hours = time % 12;
2475 }
2476 
manufactureTimeLeft(int * halfdays,int * hours) const2477 void Sector::manufactureTimeLeft(int *halfdays,int *hours) const {
2478 	//LOG("Sector::manufactureTimeLeft()\n");
2479 	int cost = this->getManufactureCost() - this->manufactured;
2480 	int time = cost / this->getWorkers();
2481 	*halfdays = (int)( time / 12 );
2482 	*hours = time % 12;
2483 }
2484 
manufactureTotalTime(int * halfdays,int * hours) const2485 void Sector::manufactureTotalTime(int *halfdays,int *hours) const {
2486 	//LOG("Sector::manufactureTotalTime()\n");
2487 	int cost = this->getManufactureCost();
2488 	int time = cost / this->getWorkers();
2489 	*halfdays = (int)( time / 12 );
2490 	*hours = time % 12;
2491 }
2492 
inventionKnown(Invention::Type type,int epoch) const2493 bool Sector::inventionKnown(Invention::Type type,int epoch) const {
2494 	//LOG("Sector::inventionKnown(%d,%d)\n",type,epoch);
2495 	ASSERT_EPOCH(epoch);
2496 	return this->inventions_known[(int)type][epoch];
2497 }
2498 
2499 // Set Elements Remaining
setElements(Id id,int n_elements)2500 void Sector::setElements(Id id,int n_elements) {
2501 	ASSERT_ELEMENT_ID(id);
2502 	this->elements[(int)id] = n_elements * element_multiplier_c;
2503 }
2504 
2505 // Get Elements Remaining
getElements(int * n,int * fraction,Id id) const2506 void Sector::getElements(int *n,int *fraction,Id id) const {
2507 	ASSERT_ELEMENT_ID(id);
2508 	*n = this->elements[id] / element_multiplier_c;
2509 	*fraction = this->elements[(int)id] % element_multiplier_c;
2510 }
2511 
anyElements(Id id) const2512 bool Sector::anyElements(Id id) const {
2513 	ASSERT_ELEMENT_ID(id);
2514 	return this->elements[(int)id] > 0;
2515 }
2516 
reduceElementStocks(Id id,int reduce)2517 void Sector::reduceElementStocks(Id id,int reduce) {
2518 	// reduce should be already multiplied by element_multiplier_c !
2519 	ASSERT_ELEMENT_ID(id);
2520 	this->elementstocks[(int)id] -= reduce;
2521 }
2522 
getElementStocks(int * n,int * fraction,Id id) const2523 void Sector::getElementStocks(int *n,int *fraction,Id id) const {
2524 	ASSERT_ELEMENT_ID(id);
2525 	*n = this->elementstocks[(int)id] / element_multiplier_c;
2526 	*fraction = this->elementstocks[(int)id] % element_multiplier_c;
2527 }
2528 
getTotalElements(int * n,int * fraction,Id id) const2529 void Sector::getTotalElements(int *n,int *fraction,Id id) const {
2530 	ASSERT_ELEMENT_ID(id);
2531 	int total = this->elements[id] + this->elementstocks[(int)id];
2532 	*n = total / element_multiplier_c;
2533 	*fraction = total % element_multiplier_c;
2534 }
2535 
buildingTowerTimeLeft(int player,int * halfdays,int * hours) const2536 void Sector::buildingTowerTimeLeft(int player,int *halfdays,int *hours) const {
2537 	//LOG("Sector::buildingTowerTimeLeft(%d)\n",player);
2538 	ASSERT(player != -1);
2539 	int cost = getBuildingCost(BUILDING_TOWER, player) - this->built_towers[player];
2540 	int n_builders = this->getArmy(player)->getTotal();
2541 	ASSERT(n_builders != 0);
2542 	int time = cost / n_builders;
2543 	*halfdays = (int)( time / 12 );
2544 	*hours = time % 12;
2545 }
2546 
buildingTimeLeft(Type type,int * halfdays,int * hours) const2547 void Sector::buildingTimeLeft(Type type,int *halfdays,int *hours) const {
2548 	//LOG("Sector::buildingTimeLeft(%d)\n",type);
2549 	ASSERT(type != BUILDING_TOWER);
2550 	int cost = getBuildingCost(type, this->player) - this->built[type];
2551 	int n_builders = this->getBuilders(type);
2552 	ASSERT(n_builders != 0);
2553 	int time = cost / n_builders;
2554 	*halfdays = (int)( time / 12 );
2555 	*hours = time % 12;
2556 }
2557 
setPopulation(int population)2558 void Sector::setPopulation(int population) {
2559 	//LOG("Sector::setPopulation(%d)\n",population);
2560 	ASSERT(population >= 0);
2561 	if( this == gamestate->getCurrentSector() ) {
2562 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2563 		gamestate->getGamePanel()->refresh();
2564 	}
2565 	this->population = population;
2566 }
2567 
setDesigners(int n_designers)2568 void Sector::setDesigners(int n_designers) {
2569 	//LOG("Sector::setDesigners(%d)\n",n_designers);
2570 	ASSERT( n_designers == 0 || this->current_design != NULL );
2571 	if( this == gamestate->getCurrentSector() ) {
2572 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2573 		gamestate->getGamePanel()->refresh();
2574 	}
2575 	this->n_designers = n_designers;
2576 }
2577 
setWorkers(int n_workers)2578 void Sector::setWorkers(int n_workers) {
2579 	//LOG("Sector::setWorkers(%d)\n",n_workers);
2580 	ASSERT( n_workers == 0 || this->current_manufacture != NULL );
2581 	if( this == gamestate->getCurrentSector() ) {
2582 		gamestate->getGamePanel()->refresh();
2583 	}
2584 	this->n_workers = n_workers;
2585 	this->updateWorkers();
2586 }
2587 
updateWorkers()2588 void Sector::updateWorkers() {
2589 	if( this->smokeParticleSystem != NULL ) {
2590 		if( this->getBuilding(BUILDING_FACTORY) == NULL ) {
2591 			this->smokeParticleSystem->setBirthRate(0.0f);
2592 		}
2593 		else if( this->n_workers > 0 ) {
2594 			this->smokeParticleSystem->setBirthRate(0.05333f);
2595 		}
2596 		else {
2597 			this->smokeParticleSystem->setBirthRate(0.01333f);
2598 		}
2599 	}
2600 }
2601 
setFAmount(int n_famount)2602 void Sector::setFAmount(int n_famount) {
2603 	//LOG("Sector::setFAmount(%d) [%d,%d]\n", n_famount, xpos, ypos);
2604 	ASSERT(n_famount <= infinity_c);
2605 	ASSERT( this->current_manufacture != NULL );
2606 	if( this == gamestate->getCurrentSector() ) {
2607 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2608 		gamestate->getGamePanel()->refresh();
2609 	}
2610 	this->n_famount = n_famount;
2611 }
2612 
setMiners(Id id,int n_miners)2613 void Sector::setMiners(Id id,int n_miners) {
2614 	//LOG("Sector::setMiners(%d,%d)\n",id,n_miners);
2615 	ASSERT_ELEMENT_ID(id);
2616 	ASSERT( game_g->elements[id]->getType() != Element::GATHERABLE );
2617 	ASSERT( n_miners == 0 || canMine(id) );
2618 	if( this == gamestate->getCurrentSector() ) {
2619 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2620 		gamestate->getGamePanel()->refresh();
2621 	}
2622 	this->n_miners[id] = n_miners;
2623 }
2624 
setBuilders(Type type,int n_builders)2625 void Sector::setBuilders(Type type,int n_builders) {
2626 	//LOG("Sector::setBuilders(%d,%d)\n",type,n_builders);
2627 	ASSERT( n_builders == 0 || canBuild(type) );
2628 	if( this == gamestate->getCurrentSector() ) {
2629 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2630 		gamestate->getGamePanel()->refresh();
2631 	}
2632 	this->n_builders[type] = n_builders;
2633 }
2634 
getPopulation() const2635 int Sector::getPopulation() const {
2636 	//LOG("Sector::getPopulation()\n");
2637 	return this->population;
2638 }
2639 
getSparePopulation() const2640 int Sector::getSparePopulation() const {
2641 	//LOG("Sector::getSparePopulation()\n");
2642 	int n_spare = this->population;
2643 	n_spare -= this->n_designers;
2644 	n_spare -= this->n_workers;
2645 	for(int i=0;i<N_ID;i++)
2646 		n_spare -= this->n_miners[i];
2647 	for(int i=0;i<N_BUILDINGS;i++)
2648 		n_spare -= this->n_builders[i];
2649 	ASSERT( n_spare >= 0 );
2650 	ASSERT( n_spare <= this->population );
2651 	return n_spare;
2652 }
2653 
getAvailablePopulation() const2654 int Sector::getAvailablePopulation() const {
2655 	//LOG("Sector::getAvailablePopulation()\n");
2656 	return this->getSparePopulation() - 1;
2657 }
2658 
getDesigners() const2659 int Sector::getDesigners() const {
2660 	//LOG("Sector::getDesigners()\n");
2661 	return this->n_designers;
2662 }
2663 
getWorkers() const2664 int Sector::getWorkers() const {
2665 	//LOG("Sector::getWorkers()\n");
2666 	return this->n_workers;
2667 }
2668 
getFAmount() const2669 int Sector::getFAmount() const {
2670 	//LOG("Sector::getFAmount()\n");
2671 	ASSERT(n_famount <= infinity_c);
2672 	return this->n_famount;
2673 }
2674 
getMiners(Id id) const2675 int Sector::getMiners(Id id) const {
2676 	//LOG("Sector::getMiners(%d)\n",id);
2677 	ASSERT_ELEMENT_ID(id);
2678 	return this->n_miners[id];
2679 }
2680 
getBuilders(Type type) const2681 int Sector::getBuilders(Type type) const {
2682 	//LOG("Sector::getBuilders(%d)\n",type);
2683 	return this->n_builders[type];
2684 }
2685 
getArmy(int player) const2686 const Army *Sector::getArmy(int player) const {
2687 	ASSERT_PLAYER(player);
2688 	return armies[player];
2689 }
2690 
getArmy(int player)2691 Army *Sector::getArmy(int player) {
2692 	ASSERT_PLAYER(player);
2693 	return armies[player];
2694 }
2695 
enemiesPresent() const2696 bool Sector::enemiesPresent() const {
2697 	//LOG("Sector::enemiesPresent()\n");
2698 	return enemiesPresent(this->getPlayer());
2699 }
2700 
enemiesPresentWithBombardment() const2701 bool Sector::enemiesPresentWithBombardment() const {
2702 	return enemiesPresent(this->getPlayer(), false);
2703 }
2704 
enemiesPresent(int player) const2705 bool Sector::enemiesPresent(int player) const {
2706 	return enemiesPresent(player, true);
2707 }
2708 
enemiesPresent(int player,bool include_unarmed) const2709 bool Sector::enemiesPresent(int player,bool include_unarmed) const {
2710 	//LOG("Sector::enemiesPresent(%d)\n",player);
2711 	// todo: improve performance
2712 	ASSERT( player != -1 );
2713 	bool rtn = false;
2714 	for(int i=0;i<n_players_c && !rtn;i++) {
2715 		if( i != player && !Player::isAlliance(i, player) ) {
2716 			if( this->getArmy(i)->any(include_unarmed) ) {
2717 				rtn = true;
2718 			}
2719 		}
2720 	}
2721 	return rtn;
2722 }
2723 
returnAssembledArmy()2724 void Sector::returnAssembledArmy() {
2725 	//LOG("Sector::returnAssembledArmy()\n");
2726 	ASSERT(assembled_army != NULL);
2727 	returnArmy(assembled_army);
2728 	if( this == gamestate->getCurrentSector() ) {
2729 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2730 		gamestate->getGamePanel()->refresh();
2731 	}
2732 }
2733 
returnArmy()2734 bool Sector::returnArmy() {
2735 	//LOG("Sector::returnArmy() [%d: %d,%d]\n", player, xpos, ypos);
2736 	ASSERT( this->player != -1 );
2737 	return this->returnArmy( this->getArmy( this->player ) );
2738 }
2739 
returnArmy(Army * army)2740 bool Sector::returnArmy(Army *army) {
2741 	//LOG("Sector::returnArmy(%d)\n",army);
2742 	ASSERT( this->player != -1 );
2743 
2744 	Sector *src_sector = army->getSector();
2745 	bool temp[map_width_c][map_height_c];
2746 	game_g->getMap()->canMoveTo(temp, src_sector->xpos, src_sector->ypos, army->getPlayer());
2747 	//bool adj = game_g->getMap()->temp[this->xpos][this->ypos];
2748 	bool adj = temp[this->xpos][this->ypos];
2749 	bool moved_all = true;
2750 
2751 	if( !army->canLeaveSafely() ) {
2752 		// retreat
2753 		army->retreat(!adj);
2754 	}
2755 
2756 	for(int i=0;i<=n_epochs_c;i++) {
2757 		int n_soldiers = army->getSoldiers(i);
2758 		if( n_soldiers > 0 ) {
2759 			if( !adj && !isAirUnit( i ) ) {
2760 				// can't move
2761 				moved_all = false;
2762 			}
2763 			else {
2764 				int n_men = ( i==n_epochs_c ? 1 : game_g->invention_weapons[i]->getNMen() );
2765 				this->population += army->getSoldiers(i) * n_men;
2766 				if( i != n_epochs_c ) {
2767 					// unarmed men are never stored in the stored_army (as not actually a weapon)
2768 					this->stored_army->add(i, n_soldiers);
2769 				}
2770 				army->remove(i, n_soldiers);
2771 			}
2772 		}
2773 	}
2774 
2775 	if( this == gamestate->getCurrentSector() ) {
2776 		//((PlayingGameState *)gamestate)->getGamePanel()->refresh();
2777 		gamestate->getGamePanel()->refresh();
2778 		gamestate->refreshSoldiers(true);
2779 	}
2780 	return moved_all;
2781 }
2782 
2783 /** Move Army 'army' into this sector.
2784 */
moveArmy(Army * army)2785 bool Sector::moveArmy(Army *army) {
2786 	//LOG("Sector::moveArmy(%d,%d)\n",a_player,army);
2787 	if( this->isNuked() ) {
2788 		return false;
2789 	}
2790 	Sector *src_sector = army->getSector();
2791 	bool temp[map_width_c][map_height_c];
2792 	game_g->getMap()->canMoveTo(temp, src_sector->xpos, src_sector->ypos, army->getPlayer());
2793 	//bool adj = game_g->getMap()->temp[this->xpos][this->ypos];
2794 	bool adj = temp[this->xpos][this->ypos];
2795 	bool moved_all = true;
2796 	if( !army->canLeaveSafely() ) {
2797 		// retreat
2798 		army->retreat(!adj);
2799 	}
2800 
2801 	if( this->getArmy(army->getPlayer()) != army ) {
2802 		for(int i=0;i<=n_epochs_c;i++) {
2803 			int n_soldiers = army->getSoldiers(i);
2804 			if( n_soldiers > 0 ) {
2805 				if( !adj && !isAirUnit( i ) ) {
2806 					moved_all = false;
2807 				}
2808 				else {
2809 					this->getArmy( army->getPlayer() )->add(i, n_soldiers);
2810 					army->remove(i, n_soldiers);
2811 				}
2812 			}
2813 		}
2814 	}
2815 
2816 	if( this == gamestate->getCurrentSector() || army->getSector() == gamestate->getCurrentSector() ) {
2817 		//((PlayingGameState *)gamestate)->refreshSoldiers(true);
2818 		gamestate->refreshSoldiers(true);
2819 	}
2820 
2821 	return moved_all;
2822 }
2823 
evacuate()2824 void Sector::evacuate() {
2825 	for(int i=0;i<N_BUILDINGS;i++) {
2826 		Building *building = this->getBuilding((Type)i);
2827 		if( building != NULL ) {
2828 			for(int j=0;j<building->getNTurrets();j++) {
2829 				if( building->getTurretMan(j) != -1 )
2830 					this->returnDefender(building, j);
2831 			}
2832 		}
2833 		this->setBuilders((Type)i, 0);
2834 	}
2835 	this->setDesigners(0);
2836 	this->setWorkers(0);
2837 	for(int i=0;i<N_ID;i++) {
2838 		this->n_miners[i] = 0;
2839 	}
2840 
2841 	this->assembleAll(true);
2842 
2843 	this->getArmy(this->getPlayer())->add(this->getAssembledArmy());
2844 }
2845 
assembleAll(bool include_unarmed)2846 void Sector::assembleAll(bool include_unarmed) {
2847 	for(int i=n_epochs_c-1;i>=game_g->getStartEpoch();i--) {
2848 		if( i == nuclear_epoch_c )
2849 			continue;
2850 		while( this->assembleArmy(i, 1) ) {
2851 		}
2852 	}
2853 
2854 	if( include_unarmed ) {
2855 		int men = this->getAvailablePopulation();
2856 		if( men > 0 ) {
2857 			this->getAssembledArmy()->add(n_epochs_c, men);
2858 			int n_pop = this->getPopulation() - men;
2859 			this->setPopulation(n_pop);
2860 		}
2861 	}
2862 }
2863 
saveState(stringstream & stream) const2864 void Sector::saveState(stringstream &stream) const {
2865 	stream << "<sector ";
2866 	stream << "x=\"" << xpos << "\" ";
2867 	stream << "y=\"" << ypos << "\" ";
2868 	stream << "epoch=\"" << epoch << "\" ";
2869 	stream << "player=\"" << player << "\" ";
2870 	stream << "is_shutdown=\"" << (is_shutdown?1:0) << "\" ";
2871 	stream << "nuked=\"" << (nuked?1:0) << "\" ";
2872 	stream << "nuke_by_player=\"" << nuke_by_player << "\" ";
2873 	stream << "nuke_time=\"" << nuke_time << "\" ";
2874 	stream << "nuke_defence_animation=\"" << (nuke_defence_animation?1:0) << "\" ";
2875 	stream << "nuke_defence_time=\"" << nuke_defence_time << "\" ";
2876 	stream << "nuke_defence_x=\"" << nuke_defence_x << "\" ";
2877 	stream << "nuke_defence_y=\"" << nuke_defence_y << "\" ";
2878 	stream << "population=\"" << population << "\" ";
2879 	stream << "n_designers=\"" << n_designers << "\" ";
2880 	stream << "n_workers=\"" << n_workers << "\" ";
2881 	stream << "n_famount=\"" << n_famount << "\" ";
2882 	stream << "researched=\"" << researched << "\" ";
2883 
2884 	stream << "researched_lasttime=\"" << researched_lasttime << "\" ";
2885 	stream << "manufactured=\"" << manufactured << "\" ";
2886 	stream << "manufactured_lasttime=\"" << manufactured_lasttime << "\" ";
2887 	stream << "growth_lasttime=\"" << growth_lasttime << "\" ";
2888 	stream << "mined_lasttime=\"" << mined_lasttime << "\" ";
2889 	stream << "built_lasttime=\"" << built_lasttime << "\" ";
2890 	stream << ">\n";
2891 
2892 	for(int i=0;i<N_ID;i++) {
2893 		stream << "<n_miners element_id=\"" << i << "\" n=\"" << n_miners[i] << "\"/>\n";
2894 		stream << "<elements element_id=\"" << i << "\" n=\"" << elements[i] << "\"/>\n";
2895 		stream << "<elementstocks element_id=\"" << i << "\" n=\"" << elementstocks[i] << "\"/>\n";
2896 		stream << "<partial_elementstocks element_id=\"" << i << "\" n=\"" << partial_elementstocks[i] << "\"/>\n";
2897 	}
2898 	for(int i=0;i<N_BUILDINGS;i++) {
2899 		stream << "<n_builders building_id=\"" << i << "\" n=\"" << n_builders[i] << "\"/>\n";
2900 	}
2901 	if( current_design != NULL ) {
2902 		stream << "<current_design invention_type=\"" << current_design->getInvention()->getType() << "\" invention_epoch=\"" << current_design->getInvention()->getEpoch() << "\" design_id=\"" << current_design->getSaveId() << "\"/>\n";
2903 	}
2904 	if( current_manufacture != NULL ) {
2905 		stream << "<current_manufacture invention_type=\"" << current_manufacture->getInvention()->getType() << "\" invention_epoch=\"" << current_manufacture->getInvention()->getEpoch() << "\" design_id=\"" << current_manufacture->getSaveId() << "\"/>\n";
2906 	}
2907 	for(int i=0;i<n_players_c;i++) {
2908 		stream << "<built_towers player_id=\"" << i << "\" n=\"" << built_towers[i] << "\"/>\n";
2909 	}
2910 	for(int i=0;i<N_BUILDINGS;i++) {
2911 		stream << "<built building_id=\"" << i << "\" n=\"" << built[i] << "\"/>\n";
2912 	}
2913 	for(size_t i=0;i<designs.size();i++) {
2914 		const Design *design = designs.at(i);
2915 		stream << "<design invention_type=\"" << design->getInvention()->getType() << "\" invention_epoch=\"" << design->getInvention()->getEpoch() << "\" design_id=\"" << design->getSaveId() << "\"/>\n";
2916 	}
2917 	for(int i=0;i<N_BUILDINGS;i++) {
2918 		if( buildings[i] != NULL ) {
2919 			buildings[i]->saveState(stream);
2920 		}
2921 	}
2922 	if( stored_army != NULL ) {
2923 		stream << "<stored_army>\n";
2924 		stored_army->saveState(stream);
2925 		stream << "</stored_army>\n";
2926 	}
2927 	for(int i=0;i<n_players_c;i++) {
2928 		if( armies[i] != NULL ) {
2929 			stream << "<army player_id=\"" << i << "\">\n";
2930 			armies[i]->saveState(stream);
2931 			stream << "</army>\n";
2932 		}
2933 	}
2934 	for(int i=0;i<n_epochs_c;i++) {
2935 		stream << "<stored_defenders epoch=\"" << i << "\" n=\"" << stored_defenders[i] << "\"/>\n";
2936 	}
2937 	for(int i=0;i<4;i++) {
2938 		stream << "<stored_shields relative_epoch=\"" << i << "\" n=\"" << stored_shields[i] << "\"/>\n";
2939 	}
2940 
2941 	stream << "</sector>\n";
2942 }
2943 
loadStateParseXMLDesign(const TiXmlAttribute * attribute)2944 Design *Sector::loadStateParseXMLDesign(const TiXmlAttribute *attribute) {
2945 	Invention::Type invention_type = Invention::UNKNOWN_TYPE;
2946 	int invention_epoch = -1;
2947 	int design_id = -1;
2948 	while( attribute != NULL ) {
2949 		const char *attribute_name = attribute->Name();
2950 		if( strcmp(attribute_name, "invention_type") == 0 ) {
2951 			invention_type = static_cast<Invention::Type>(atoi(attribute->Value()));
2952 		}
2953 		else if( strcmp(attribute_name, "invention_epoch") == 0 ) {
2954 			invention_epoch = atoi(attribute->Value());
2955 		}
2956 		else if( strcmp(attribute_name, "design_id") == 0 ) {
2957 			design_id = atoi(attribute->Value());
2958 		}
2959 		else {
2960 			// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
2961 			LOG("unknown sector/current_design attribute: %s\n", attribute_name);
2962 			ASSERT(false);
2963 		}
2964 		attribute = attribute->Next();
2965 	}
2966 	if( invention_type == Invention::UNKNOWN_TYPE || invention_type >= Invention::N_TYPES ) {
2967 		throw std::runtime_error("current_design invalid type");
2968 	}
2969 	else if( invention_epoch < 0 || invention_epoch >= n_epochs_c ) {
2970 		throw std::runtime_error("current_design invalid epoch");
2971 	}
2972 	else if( design_id < 0 ) {
2973 		throw std::runtime_error("current_design invalid design_id");
2974 	}
2975 	const Invention *invention = Invention::getInvention(invention_type, invention_epoch);
2976 	Design *design = invention->findDesign(design_id);
2977 	if( design == NULL ) {
2978 		throw std::runtime_error("unknown design");
2979 	}
2980 	return design;
2981 }
2982 
loadStateParseXMLNode(const TiXmlNode * parent)2983 void Sector::loadStateParseXMLNode(const TiXmlNode *parent) {
2984 	if( parent == NULL ) {
2985 		return;
2986 	}
2987 	bool read_children = true;
2988 
2989 	switch( parent->Type() ) {
2990 		case TiXmlNode::TINYXML_DOCUMENT:
2991 			break;
2992 		case TiXmlNode::TINYXML_ELEMENT:
2993 			{
2994 				const char *element_name = parent->Value();
2995 				const TiXmlElement *element = parent->ToElement();
2996 				const TiXmlAttribute *attribute = element->FirstAttribute();
2997 				if( strcmp(element_name, "sector") == 0 ) {
2998 					while( attribute != NULL ) {
2999 						const char *attribute_name = attribute->Name();
3000 						if( strcmp(attribute_name, "epoch") == 0 ) {
3001 							this->epoch = atoi(attribute->Value());
3002 							if( epoch < 0 || epoch >= n_epochs_c+1 ) {
3003 								throw std::runtime_error("sector invalid epoch");
3004 							}
3005 						}
3006 						else if( strcmp(attribute_name, "x") == 0 ) {
3007 							// handled by caller
3008 						}
3009 						else if( strcmp(attribute_name, "y") == 0 ) {
3010 							// handled by caller
3011 						}
3012 						else if( strcmp(attribute_name, "player") == 0 ) {
3013 							this->player = atoi(attribute->Value());
3014 							if( player < -1 || player >= n_players_c ) {
3015 								throw std::runtime_error("sector invalid player");
3016 							}
3017 							if( player != -1 ) {
3018 								this->assembled_army = new Army(gamestate, this, this->getPlayer());
3019 							}
3020 						}
3021 						else if( strcmp(attribute_name, "is_shutdown") == 0 ) {
3022 							this->is_shutdown = atoi(attribute->Value()) == 1;
3023 						}
3024 						else if( strcmp(attribute_name, "nuked") == 0 ) {
3025 							this->nuked = atoi(attribute->Value()) == 1;
3026 						}
3027 						else if( strcmp(attribute_name, "nuke_by_player") == 0 ) {
3028 							this->nuke_by_player = atoi(attribute->Value());
3029 							if( nuke_by_player < -1 || nuke_by_player >= n_players_c ) {
3030 								throw std::runtime_error("sector invalid nuke_by_player");
3031 							}
3032 						}
3033 						else if( strcmp(attribute_name, "nuke_time") == 0 ) {
3034 							this->nuke_time = atoi(attribute->Value());
3035 						}
3036 						else if( strcmp(attribute_name, "nuke_defence_animation") == 0 ) {
3037 							this->nuke_defence_animation = atoi(attribute->Value()) == 1;
3038 						}
3039 						else if( strcmp(attribute_name, "nuke_defence_time") == 0 ) {
3040 							this->nuke_defence_time = atoi(attribute->Value());
3041 						}
3042 						else if( strcmp(attribute_name, "nuke_defence_x") == 0 ) {
3043 							this->nuke_defence_x = atoi(attribute->Value());
3044 						}
3045 						else if( strcmp(attribute_name, "nuke_defence_y") == 0 ) {
3046 							this->nuke_defence_y = atoi(attribute->Value());
3047 						}
3048 						else if( strcmp(attribute_name, "population") == 0 ) {
3049 							this->population = atoi(attribute->Value());
3050 							if( population < 0 ) {
3051 								throw std::runtime_error("sector invalid population");
3052 							}
3053 						}
3054 						else if( strcmp(attribute_name, "n_designers") == 0 ) {
3055 							this->n_designers = atoi(attribute->Value());
3056 							if( n_designers < 0 || n_designers > population ) {
3057 								throw std::runtime_error("sector invalid n_designers");
3058 							}
3059 						}
3060 						else if( strcmp(attribute_name, "n_workers") == 0 ) {
3061 							this->n_workers = atoi(attribute->Value());
3062 							if( n_workers < 0 || n_workers > population ) {
3063 								throw std::runtime_error("sector invalid n_workers");
3064 							}
3065 						}
3066 						else if( strcmp(attribute_name, "n_famount") == 0 ) {
3067 							this->n_famount = atoi(attribute->Value());
3068 						}
3069 						else if( strcmp(attribute_name, "researched") == 0 ) {
3070 							this->researched = atoi(attribute->Value());
3071 						}
3072 						else if( strcmp(attribute_name, "researched_lasttime") == 0 ) {
3073 							this->researched_lasttime = atoi(attribute->Value());
3074 						}
3075 						else if( strcmp(attribute_name, "manufactured") == 0 ) {
3076 							this->manufactured = atoi(attribute->Value());
3077 						}
3078 						else if( strcmp(attribute_name, "manufactured_lasttime") == 0 ) {
3079 							this->manufactured_lasttime = atoi(attribute->Value());
3080 						}
3081 						else if( strcmp(attribute_name, "growth_lasttime") == 0 ) {
3082 							this->growth_lasttime = atoi(attribute->Value());
3083 						}
3084 						else if( strcmp(attribute_name, "mined_lasttime") == 0 ) {
3085 							this->mined_lasttime = atoi(attribute->Value());
3086 						}
3087 						else if( strcmp(attribute_name, "built_lasttime") == 0 ) {
3088 							this->built_lasttime = atoi(attribute->Value());
3089 						}
3090 						else {
3091 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
3092 							LOG("unknown sector/sector attribute: %s\n", attribute_name);
3093 							ASSERT(false);
3094 						}
3095 						attribute = attribute->Next();
3096 					}
3097 				}
3098 				else if( strcmp(element_name, "n_miners") == 0 || strcmp(element_name, "elements") == 0 || strcmp(element_name, "elementstocks") == 0 || strcmp(element_name, "partial_elementstocks") == 0 ) {
3099 					int element_id = -1;
3100 					int n = -1;
3101 					while( attribute != NULL ) {
3102 						const char *attribute_name = attribute->Name();
3103 						if( strcmp(attribute_name, "element_id") == 0 ) {
3104 							element_id = atoi(attribute->Value());
3105 						}
3106 						else if( strcmp(attribute_name, "n") == 0 ) {
3107 							n = atoi(attribute->Value());
3108 						}
3109 						else {
3110 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
3111 							LOG("unknown sector/n_miners/etc attribute: %s\n", attribute_name);
3112 							ASSERT(false);
3113 						}
3114 						attribute = attribute->Next();
3115 					}
3116 					if( element_id == -1 || n == -1 ) {
3117 						throw std::runtime_error("n_miners/elements/partial_elementstocks missing attributes");
3118 					}
3119 					else if( element_id < 0 || element_id >= N_ID ) {
3120 						throw std::runtime_error("n_miners/elements/partial_elementstocks invalid element_id");
3121 					}
3122 					if( strcmp(element_name, "n_miners") == 0 )
3123 						n_miners[element_id] = n;
3124 					else if( strcmp(element_name, "elements") == 0 )
3125 						elements[element_id] = n;
3126 					else if( strcmp(element_name, "elementstocks") == 0 )
3127 						elementstocks[element_id] = n;
3128 					else if( strcmp(element_name, "partial_elementstocks") == 0 )
3129 						partial_elementstocks[element_id] = n;
3130 				}
3131 				else if( strcmp(element_name, "n_builders") == 0 || strcmp(element_name, "built") == 0 ) {
3132 					int building_id = -1;
3133 					int n = -1;
3134 					while( attribute != NULL ) {
3135 						const char *attribute_name = attribute->Name();
3136 						if( strcmp(attribute_name, "building_id") == 0 ) {
3137 							building_id = atoi(attribute->Value());
3138 						}
3139 						else if( strcmp(attribute_name, "n") == 0 ) {
3140 							n = atoi(attribute->Value());
3141 						}
3142 						else {
3143 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
3144 							LOG("unknown sector/n_builders/etc attribute: %s\n", attribute_name);
3145 							ASSERT(false);
3146 						}
3147 						attribute = attribute->Next();
3148 					}
3149 					if( building_id == -1 || n == -1 ) {
3150 						throw std::runtime_error("n_builders/built missing attributes");
3151 					}
3152 					else if( building_id < 0 || building_id >= N_BUILDINGS ) {
3153 						throw std::runtime_error("n_builders/built invalid building_id");
3154 					}
3155 					if( strcmp(element_name, "n_builders") == 0 )
3156 						n_builders[building_id] = n;
3157 					else if( strcmp(element_name, "built") == 0 )
3158 						built[building_id] = n;
3159 				}
3160 				else if( strcmp(element_name, "current_design") == 0 ) {
3161 					this->current_design = this->loadStateParseXMLDesign(attribute);
3162 				}
3163 				else if( strcmp(element_name, "current_manufacture") == 0 ) {
3164 					this->current_manufacture = this->loadStateParseXMLDesign(attribute);
3165 				}
3166 				else if( strcmp(element_name, "design") == 0 ) {
3167 					Design *design = this->loadStateParseXMLDesign(attribute);
3168 					this->designs.push_back(design);
3169 					inventions_known[design->getInvention()->getType()][design->getInvention()->getEpoch()] = true;
3170 				}
3171 				else if( strcmp(element_name, "built_towers") == 0 ) {
3172 					int player_id = -1;
3173 					int n = -1;
3174 					while( attribute != NULL ) {
3175 						const char *attribute_name = attribute->Name();
3176 						if( strcmp(attribute_name, "player_id") == 0 ) {
3177 							player_id = atoi(attribute->Value());
3178 						}
3179 						else if( strcmp(attribute_name, "n") == 0 ) {
3180 							n = atoi(attribute->Value());
3181 						}
3182 						else {
3183 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
3184 							LOG("unknown sector/built_towers attribute: %s\n", attribute_name);
3185 							ASSERT(false);
3186 						}
3187 						attribute = attribute->Next();
3188 					}
3189 					if( player_id == -1 || n == -1 ) {
3190 						throw std::runtime_error("built_towers missing attributes");
3191 					}
3192 					else if( player_id < 0 || player_id >= n_players_c ) {
3193 						throw std::runtime_error("built_towers invalid player_id");
3194 					}
3195 					built_towers[player_id] = n;
3196 				}
3197 				else if( strcmp(element_name, "building") == 0 ) {
3198 					int building_id = -1;
3199 					while( attribute != NULL ) {
3200 						const char *attribute_name = attribute->Name();
3201 						if( strcmp(attribute_name, "building_id") == 0 ) {
3202 							building_id = atoi(attribute->Value());
3203 						}
3204 						else {
3205 							// everything else handed by sub-function
3206 						}
3207 						attribute = attribute->Next();
3208 					}
3209 					if( building_id < 0 || building_id >= N_BUILDINGS ) {
3210 						throw std::runtime_error("building invalid building_id");
3211 					}
3212 					if( buildings[building_id] == NULL ) {
3213 						this->buildings[building_id] = new Building(gamestate, this, (Type)building_id);
3214 						updateForNewBuilding((Type)building_id);
3215 					}
3216 					this->buildings[building_id]->loadStateParseXMLNode(parent);
3217 					read_children = false;
3218 				}
3219 				else if( strcmp(element_name, "stored_army") == 0 ) {
3220 					if( stored_army == NULL ) {
3221 						this->stored_army = new Army(gamestate, this, this->getPlayer());
3222 					}
3223 					this->stored_army->loadStateParseXMLNode(parent);
3224 					read_children = false;
3225 				}
3226 				else if( strcmp(element_name, "army") == 0 ) {
3227 					int player_id = -1;
3228 					while( attribute != NULL ) {
3229 						const char *attribute_name = attribute->Name();
3230 						if( strcmp(attribute_name, "player_id") == 0 ) {
3231 							player_id = atoi(attribute->Value());
3232 						}
3233 						else {
3234 							// everything else handed by sub-function
3235 						}
3236 						attribute = attribute->Next();
3237 					}
3238 					if( player_id < 0 || player_id >= n_players_c ) {
3239 						throw std::runtime_error("army invalid player_id");
3240 					}
3241 					this->armies[player_id]->loadStateParseXMLNode(parent);
3242 					read_children = false;
3243 				}
3244 				else if( strcmp(element_name, "stored_defenders") == 0 ) {
3245 					int epoch = -1;
3246 					int n = -1;
3247 					while( attribute != NULL ) {
3248 						const char *attribute_name = attribute->Name();
3249 						if( strcmp(attribute_name, "epoch") == 0 ) {
3250 							epoch = atoi(attribute->Value());
3251 						}
3252 						else if( strcmp(attribute_name, "n") == 0 ) {
3253 							n = atoi(attribute->Value());
3254 						}
3255 						else {
3256 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
3257 							LOG("unknown sector/stored_defenders attribute: %s\n", attribute_name);
3258 							ASSERT(false);
3259 						}
3260 						attribute = attribute->Next();
3261 					}
3262 					if( epoch == -1 || n == -1 ) {
3263 						throw std::runtime_error("stored_defenders missing attributes");
3264 					}
3265 					else if( epoch < 0 || epoch >= n_epochs_c ) {
3266 						throw std::runtime_error("stored_defenders invalid epoch");
3267 					}
3268 					this->stored_defenders[epoch] = n;
3269 				}
3270 				else if( strcmp(element_name, "stored_shields") == 0 ) {
3271 					int relative_epoch = -1;
3272 					int n = -1;
3273 					while( attribute != NULL ) {
3274 						const char *attribute_name = attribute->Name();
3275 						if( strcmp(attribute_name, "relative_epoch") == 0 ) {
3276 							relative_epoch = atoi(attribute->Value());
3277 						}
3278 						else if( strcmp(attribute_name, "n") == 0 ) {
3279 							n = atoi(attribute->Value());
3280 						}
3281 						else {
3282 							// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
3283 							LOG("unknown sector/stored_shields attribute: %s\n", attribute_name);
3284 							ASSERT(false);
3285 						}
3286 						attribute = attribute->Next();
3287 					}
3288 					if( relative_epoch == -1 || n == -1 ) {
3289 						throw std::runtime_error("stored_shields missing attributes");
3290 					}
3291 					else if( relative_epoch < 0 || relative_epoch >= 4 ) {
3292 						throw std::runtime_error("stored_shields invalid relative_epoch");
3293 					}
3294 					this->stored_shields[relative_epoch] = n;
3295 				}
3296 				else {
3297 					// don't throw an error here, to help backwards compatibility, but should throw an error in debug mode in case this is a sign of not loading something that we've saved
3298 					LOG("unknown sector tag: %s\n", element_name);
3299 					ASSERT(false);
3300 				}
3301 			}
3302 			break;
3303 		case TiXmlNode::TINYXML_COMMENT:
3304 			break;
3305 		case TiXmlNode::TINYXML_UNKNOWN:
3306 			break;
3307 		case TiXmlNode::TINYXML_TEXT:
3308 			{
3309 			}
3310 			break;
3311 		case TiXmlNode::TINYXML_DECLARATION:
3312 			break;
3313 	}
3314 
3315 	for(const TiXmlNode *child=parent->FirstChild();child!=NULL && read_children;child=child->NextSibling())  {
3316 		loadStateParseXMLNode(child);
3317 	}
3318 }
3319 
printDebugInfo() const3320 void Sector::printDebugInfo() const {
3321 #ifdef _DEBUG
3322 	printf("*** Sector Information        ***\n");
3323 	if( player == -1 ) {
3324 		printf("    No player in this sector\n");
3325 	}
3326 	else {
3327 		printf("    player %d\n", player);
3328 		printf("    population %d\n", population);
3329 		printf("    designers %d\n", n_designers);
3330 		if( current_design != NULL )
3331 			printf("    researching %s\n", current_design->getInvention()->getName());
3332 		printf("    workers %d\n", n_workers);
3333 		if( current_manufacture != NULL )
3334 			printf("    manufacturing %s\n", current_manufacture->getInvention()->getName());
3335 		for(int i=0;i<N_ID;i++) {
3336 			if( this->canMine((Id)i) ) {
3337 				Element *element = game_g->elements[i];
3338 				if( element->getType() != Element::GATHERABLE )
3339 					printf("   mining %s %d\n", element->getName(), this->getMiners((Id)i));
3340 			}
3341 		}
3342 		for(int i=0;i<N_ID;i++) {
3343 			int stocks = this->elementstocks[i];
3344 			Element *element = game_g->elements[i];
3345 			if( stocks > 0 )
3346 				printf("stocks of %s: %d\n", element->getName(), stocks);
3347 		}
3348 		//printf("    \n", );
3349 	}
3350 	printf("*** End Of Sector Information ***\n");
3351 #endif
3352 }
3353 
setupDesigns()3354 bool Design::setupDesigns() {
3355 	Design *design = NULL;
3356 	Weapon **invention_weapons = game_g->invention_weapons;
3357 	Invention **invention_defences = game_g->invention_defences;
3358 	Invention **invention_shields = game_g->invention_shields;
3359 	// Weapons
3360 	// 0 - rock (1.5)
3361 	// rock, wood, bone, slate, herbirite, valium, bethlium, parasite, moonlite, aquarium, solarium, aruldite
3362 	// ergo: wood, bone
3363 	// no mixing ?
3364 	// from tips: rock, wood, bone
3365 	design = new Design(invention_weapons[0], true);
3366 	design->setCost(ROCK, 1.5);
3367 	design = new Design(invention_weapons[0], true);
3368 	design->setCost(WOOD, 1.5);
3369 	design = new Design(invention_weapons[0], true);
3370 	design->setCost(BONE, 1.5);
3371 	design = new Design(invention_weapons[0], false);
3372 	design->setCost(SLATE, 1.5);
3373 	design = new Design(invention_weapons[0], false);
3374 	design->setCost(HERBIRITE, 1.5);
3375 	design = new Design(invention_weapons[0], false);
3376 	design->setCost(AQUARIUM, 1.5);
3377 	design = new Design(invention_weapons[0], false);
3378 	design->setCost(VALIUM, 1.5);
3379 	design = new Design(invention_weapons[0], false);
3380 	design->setCost(BETHLIUM, 1.5);
3381 	design = new Design(invention_weapons[0], false);
3382 	design->setCost(PARASITE, 1.5);
3383 	design = new Design(invention_weapons[0], false);
3384 	design->setCost(MOONLITE, 1.5);
3385 	design = new Design(invention_weapons[0], false);
3386 	design->setCost(SOLARIUM, 1.5);
3387 	design = new Design(invention_weapons[0], false);
3388 	design->setCost(ARULDITE, 1.5);
3389 	// 1 - catapult (1)
3390 	// wood, rock, slate, bone, herbirite, bethlium, parasite, moonlite, onion, solarium, aruldite, aquarium, planetarium
3391 	// ergo: wood, bethlium, wood+solarium, rock+aruldite, bone+solarium
3392 	// from tips: solarium, aruldite
3393 	design = new Design(invention_weapons[1], false);
3394 	design->setCost(WOOD, 1);
3395 	design = new Design(invention_weapons[1], false);
3396 	design->setCost(BONE, 1);
3397 	design = new Design(invention_weapons[1], false);
3398 	design->setCost(ROCK, 1);
3399 	design = new Design(invention_weapons[1], false);
3400 	design->setCost(BETHLIUM, 1);
3401 	design = new Design(invention_weapons[1], false);
3402 	design->setCost(SOLARIUM, 1);
3403 	design = new Design(invention_weapons[1], false);
3404 	design->setCost(ARULDITE, 1);
3405 
3406 	design = new Design(invention_weapons[1], false);
3407 	design->setCost(WOOD, 0.5);
3408 	design->setCost(MOONLITE, 0.5);
3409 	design = new Design(invention_weapons[1], true);
3410 	design->setCost(WOOD, 0.5);
3411 	design->setCost(SOLARIUM, 0.5);
3412 	design = new Design(invention_weapons[1], true);
3413 	design->setCost(WOOD, 0.5);
3414 	design->setCost(BETHLIUM, 0.5);
3415 
3416 	design = new Design(invention_weapons[1], false);
3417 	design->setCost(SLATE, 0.5);
3418 	design->setCost(BETHLIUM, 0.5);
3419 	design = new Design(invention_weapons[1], false);
3420 	design->setCost(MOONLITE, 0.5);
3421 	design->setCost(SOLARIUM, 0.5);
3422 	design = new Design(invention_weapons[1], false);
3423 	design->setCost(SOLARIUM, 0.5);
3424 	design->setCost(PARASITE, 0.5);
3425 	design = new Design(invention_weapons[1], false);
3426 	design->setCost(BETHLIUM, 0.5);
3427 	design->setCost(PARASITE, 0.5);
3428 	design = new Design(invention_weapons[1], false);
3429 	design->setCost(BETHLIUM, 0.5);
3430 	design->setCost(HERBIRITE, 0.5);
3431 
3432 	design = new Design(invention_weapons[1], false);
3433 	design->setCost(ROCK, 0.5);
3434 	design->setCost(BONE, 0.5);
3435 	design = new Design(invention_weapons[1], false);
3436 	design->setCost(ROCK, 0.5);
3437 	design->setCost(ONION, 0.5);
3438 	design = new Design(invention_weapons[1], false);
3439 	design->setCost(ROCK, 0.5);
3440 	design->setCost(SLATE, 0.5);
3441 	design = new Design(invention_weapons[1], false);
3442 	design->setCost(BONE, 0.5);
3443 	design->setCost(HERBIRITE, 0.5);
3444 	design = new Design(invention_weapons[1], false);
3445 	design->setCost(BONE, 0.5);
3446 	design->setCost(MOONLITE, 0.5);
3447 	design = new Design(invention_weapons[1], false);
3448 	design->setCost(WOOD, 0.5);
3449 	design->setCost(BONE, 0.5);
3450 	design = new Design(invention_weapons[1], true);
3451 	design->setCost(WOOD, 0.5);
3452 	design->setCost(SOLARIUM, 0.5);
3453 	design = new Design(invention_weapons[1], true);
3454 	design->setCost(BONE, 0.5);
3455 	design->setCost(SOLARIUM, 0.5);
3456 	design = new Design(invention_weapons[1], true);
3457 	design->setCost(ROCK, 0.5);
3458 	design->setCost(ARULDITE, 0.5);
3459 	design = new Design(invention_weapons[1], false);
3460 	design->setCost(SLATE, 0.5);
3461 	design->setCost(ARULDITE, 0.5);
3462 	design = new Design(invention_weapons[1], false);
3463 	design->setCost(BONE, 0.5);
3464 	design->setCost(VALIUM, 0.5);
3465 	design = new Design(invention_weapons[1], false);
3466 	design->setCost(SOLARIUM, 0.5);
3467 	design->setCost(VALIUM, 0.5);
3468 	design = new Design(invention_weapons[1], false);
3469 	design->setCost(WOOD, 0.5);
3470 	design->setCost(AQUARIUM, 0.5);
3471 	design = new Design(invention_weapons[1], false);
3472 	design->setCost(SOLARIUM, 0.5);
3473 	design->setCost(AQUARIUM, 0.5);
3474 	design = new Design(invention_weapons[1], false);
3475 	design->setCost(PLANETARIUM, 0.5);
3476 	design->setCost(SOLARIUM, 0.5);
3477 	design = new Design(invention_weapons[1], false);
3478 	design->setCost(SOLARIUM, 0.5);
3479 	design->setCost(ARULDITE, 0.5);
3480 	// 2 - pike (1.5)
3481 	// rock, wood, slate, bone, moonlite, bethlium, planetarium, solarium, moonlite, parasite, onion, tedium, valium, aruldite, aquarium, herbirite
3482 	// ergo: slate, solarium, moonlite, bethlium, slate+aruldite, planetarium+aruldite, planetarium+solarium
3483 	// from tips: slate, moonlite, planetarium, bethlium, solarium, aruldite
3484 	design = new Design(invention_weapons[2], false);
3485 	design->setCost(SLATE, 1.5);
3486 	design = new Design(invention_weapons[2], true);
3487 	design->setCost(MOONLITE, 0.5);
3488 	design->setCost(BETHLIUM, 1);
3489 	design = new Design(invention_weapons[2], true);
3490 	design->setCost(MOONLITE, 1);
3491 	design->setCost(SOLARIUM, 0.5);
3492 	design = new Design(invention_weapons[2], false);
3493 	design->setCost(SLATE, 0.5);
3494 	design->setCost(MOONLITE, 1);
3495 	design = new Design(invention_weapons[2], false);
3496 	design->setCost(ROCK, 1);
3497 	design->setCost(SOLARIUM, 0.5);
3498 	design = new Design(invention_weapons[2], false);
3499 	design->setCost(MOONLITE, 0.5);
3500 	design->setCost(PARASITE, 1);
3501 	design = new Design(invention_weapons[2], false);
3502 	design->setCost(WOOD, 0.5);
3503 	design->setCost(MOONLITE, 1);
3504 	design = new Design(invention_weapons[2], false);
3505 	design->setCost(WOOD, 1);
3506 	design->setCost(BETHLIUM, 0.5);
3507 	design = new Design(invention_weapons[2], true);
3508 	design->setCost(PLANETARIUM, 1);
3509 	design->setCost(SOLARIUM, 0.5);
3510 	design = new Design(invention_weapons[2], true);
3511 	design->setCost(PLANETARIUM, 1);
3512 	design->setCost(ARULDITE, 0.5);
3513 	design = new Design(invention_weapons[2], true);
3514 	design->setCost(MOONLITE, 1);
3515 	design->setCost(ARULDITE, 0.5);
3516 	design = new Design(invention_weapons[2], true);
3517 	design->setCost(SLATE, 1);
3518 	design->setCost(ARULDITE, 0.5);
3519 	design = new Design(invention_weapons[2], false);
3520 	design->setCost(SOLARIUM, 0.5);
3521 	design->setCost(ARULDITE, 1);
3522 	design = new Design(invention_weapons[2], false);
3523 	design->setCost(ARULDITE, 0.5);
3524 	design->setCost(AQUARIUM, 1);
3525 	design = new Design(invention_weapons[2], false);
3526 	design->setCost(ARULDITE, 1.5);
3527 	design = new Design(invention_weapons[2], false);
3528 	design->setCost(MOONLITE, 1.5);
3529 	design = new Design(invention_weapons[2], false);
3530 	design->setCost(BONE, 0.5);
3531 	design->setCost(PLANETARIUM, 1);
3532 	design = new Design(invention_weapons[2], false);
3533 	design->setCost(SLATE, 1);
3534 	design->setCost(PLANETARIUM, 0.5);
3535 	design = new Design(invention_weapons[2], false);
3536 	design->setCost(BONE, 0.5);
3537 	design->setCost(MOONLITE, 1);
3538 	design = new Design(invention_weapons[2], false);
3539 	design->setCost(BETHLIUM, 0.5);
3540 	design->setCost(VALIUM, 1);
3541 	design = new Design(invention_weapons[2], false);
3542 	design->setCost(SOLARIUM, 0.5);
3543 	design->setCost(VALIUM, 1);
3544 	design = new Design(invention_weapons[2], false);
3545 	design->setCost(MOONLITE, 1);
3546 	design->setCost(VALIUM, 0.5);
3547 	design = new Design(invention_weapons[2], true);
3548 	design->setCost(SLATE, 1);
3549 	design->setCost(BETHLIUM, 0.5);
3550 	design = new Design(invention_weapons[2], true);
3551 	design->setCost(SLATE, 1);
3552 	design->setCost(SOLARIUM, 0.5);
3553 	design = new Design(invention_weapons[2], false);
3554 	design->setCost(BONE, 1);
3555 	design->setCost(SOLARIUM, 0.5);
3556 	design = new Design(invention_weapons[2], true);
3557 	design->setCost(PLANETARIUM, 1);
3558 	design->setCost(SOLARIUM, 0.5);
3559 	design = new Design(invention_weapons[2], false);
3560 	design->setCost(BETHLIUM, 1.5);
3561 	design = new Design(invention_weapons[2], false);
3562 	design->setCost(SOLARIUM, 1.5);
3563 	design = new Design(invention_weapons[2], false);
3564 	design->setCost(BETHLIUM, 0.5);
3565 	design->setCost(PARASITE, 1);
3566 	design = new Design(invention_weapons[2], false);
3567 	design->setCost(PLANETARIUM, 1.5);
3568 	design = new Design(invention_weapons[2], false);
3569 	design->setCost(SLATE, 1);
3570 	design->setCost(ONION, 0.5);
3571 	design = new Design(invention_weapons[2], false);
3572 	design->setCost(SOLARIUM, 0.5);
3573 	design->setCost(ONION, 1);
3574 	design = new Design(invention_weapons[2], false);
3575 	design->setCost(MOONLITE, 1);
3576 	design->setCost(ONION, 0.5);
3577 	design = new Design(invention_weapons[2], false);
3578 	design->setCost(SOLARIUM, 0.5);
3579 	design->setCost(TEDIUM, 1);
3580 	design = new Design(invention_weapons[2], false);
3581 	design->setCost(BETHLIUM, 0.5);
3582 	design->setCost(AQUARIUM, 1);
3583 	design = new Design(invention_weapons[2], false);
3584 	design->setCost(MOONLITE, 1);
3585 	design->setCost(AQUARIUM, 0.5);
3586 	design = new Design(invention_weapons[2], false);
3587 	design->setCost(MOONLITE, 1);
3588 	design->setCost(PLANETARIUM, 0.5);
3589 	design = new Design(invention_weapons[2], false);
3590 	design->setCost(BETHLIUM, 0.5);
3591 	design->setCost(HERBIRITE, 1);
3592 	design = new Design(invention_weapons[2], false);
3593 	design->setCost(BONE, 1);
3594 	design->setCost(BETHLIUM, 0.5);
3595 	// 3 - longbow (2)
3596 	// rock, wood, slate, moonlite, bethlium, aruldite, planetarium, herbirite, parasite, solarium, yeridium, marmite, aquarium, moron, tedium
3597 	// ergo: slate+bethlium+yeridium
3598 	// from tips: yeridium
3599 	design = new Design(invention_weapons[3], false);
3600 	design->setCost(MOONLITE, 1.5);
3601 	design->setCost(BETHLIUM, 0.5);
3602 	design = new Design(invention_weapons[3], false);
3603 	design->setCost(MOONLITE, 1);
3604 	design->setCost(BETHLIUM, 1);
3605 	design = new Design(invention_weapons[3], false);
3606 	design->setCost(ARULDITE, 2);
3607 	design = new Design(invention_weapons[3], false);
3608 	design->setCost(SLATE, 1.5);
3609 	design->setCost(ARULDITE, 0.5);
3610 	design = new Design(invention_weapons[3], false);
3611 	design->setCost(MOONLITE, 1);
3612 	design->setCost(ARULDITE, 1);
3613 	design = new Design(invention_weapons[3], false);
3614 	design->setCost(PLANETARIUM, 1);
3615 	design->setCost(SOLARIUM, 1);
3616 	design = new Design(invention_weapons[3], false);
3617 	design->setCost(PLANETARIUM, 1.5);
3618 	design->setCost(SOLARIUM, 0.5);
3619 	design = new Design(invention_weapons[3], false);
3620 	design->setCost(PLANETARIUM, 1);
3621 	design->setCost(ARULDITE, 1);
3622 	design = new Design(invention_weapons[3], false);
3623 	design->setCost(PLANETARIUM, 1.5);
3624 	design->setCost(HERBIRITE, 0.5);
3625 	design = new Design(invention_weapons[3], false);
3626 	design->setCost(SLATE, 1);
3627 	design->setCost(BETHLIUM, 1);
3628 	design = new Design(invention_weapons[3], false);
3629 	design->setCost(SLATE, 1);
3630 	design->setCost(BETHLIUM, 0.5);
3631 	design->setCost(PARASITE, 0.5);
3632 	design = new Design(invention_weapons[3], false);
3633 	design->setCost(MOONLITE, 1);
3634 	design->setCost(BETHLIUM, 0.5);
3635 	design->setCost(PARASITE, 0.5);
3636 	design = new Design(invention_weapons[3], false);
3637 	design->setCost(BETHLIUM, 0.5);
3638 	design->setCost(HERBIRITE, 1.5);
3639 	design = new Design(invention_weapons[3], false);
3640 	design->setCost(BETHLIUM, 1.5);
3641 	design->setCost(HERBIRITE, 0.5);
3642 	design = new Design(invention_weapons[3], false);
3643 	design->setCost(BETHLIUM, 0.5);
3644 	design->setCost(HERBIRITE, 0.5);
3645 	design->setCost(PARASITE, 1);
3646 	design = new Design(invention_weapons[3], false);
3647 	design->setCost(PLANETARIUM, 1);
3648 	design->setCost(SOLARIUM, 0.5);
3649 	design->setCost(PARASITE, 0.5);
3650 	design = new Design(invention_weapons[3], true);
3651 	design->setCost(SLATE, 1);
3652 	design->setCost(BETHLIUM, 0.5);
3653 	design->setCost(YERIDIUM, 0.5);
3654 	design = new Design(invention_weapons[3], false);
3655 	design->setCost(SLATE, 1);
3656 	design->setCost(YERIDIUM, 0.5);
3657 	design->setCost(PARASITE, 0.5);
3658 	design = new Design(invention_weapons[3], false);
3659 	design->setCost(MOONLITE, 1);
3660 	design->setCost(SOLARIUM, 1);
3661 	design = new Design(invention_weapons[3], false);
3662 	design->setCost(SLATE, 1);
3663 	design->setCost(SOLARIUM, 1);
3664 	design = new Design(invention_weapons[3], false);
3665 	design->setCost(WOOD, 0.5);
3666 	design->setCost(SLATE, 1);
3667 	design->setCost(SOLARIUM, 0.5);
3668 	design = new Design(invention_weapons[3], false);
3669 	design->setCost(WOOD, 0.5);
3670 	design->setCost(PLANETARIUM, 1);
3671 	design->setCost(SOLARIUM, 0.5);
3672 	design = new Design(invention_weapons[3], false);
3673 	design->setCost(BONE, 0.5);
3674 	design->setCost(PLANETARIUM, 1);
3675 	design->setCost(SOLARIUM, 0.5);
3676 	design = new Design(invention_weapons[3], false);
3677 	design->setCost(BONE, 0.5);
3678 	design->setCost(MOONLITE, 1);
3679 	design->setCost(SOLARIUM, 0.5);
3680 	design = new Design(invention_weapons[3], false);
3681 	design->setCost(ROCK, 0.5);
3682 	design->setCost(SLATE, 1);
3683 	design->setCost(SOLARIUM, 0.5);
3684 	design = new Design(invention_weapons[3], false);
3685 	design->setCost(ROCK, 0.5);
3686 	design->setCost(SLATE, 1);
3687 	design->setCost(ARULDITE, 0.5);
3688 	design = new Design(invention_weapons[3], false);
3689 	design->setCost(ROCK, 0.5);
3690 	design->setCost(MOONLITE, 1);
3691 	design->setCost(ARULDITE, 0.5);
3692 	design = new Design(invention_weapons[3], false);
3693 	design->setCost(WOOD, 0.5);
3694 	design->setCost(MOONLITE, 1);
3695 	design->setCost(BETHLIUM, 0.5);
3696 	design = new Design(invention_weapons[3], false);
3697 	design->setCost(BETHLIUM, 0.5);
3698 	design->setCost(YERIDIUM, 0.5);
3699 	design->setCost(MARMITE, 1);
3700 	design = new Design(invention_weapons[3], false);
3701 	design->setCost(BETHLIUM, 1.5);
3702 	design->setCost(YERIDIUM, 0.5);
3703 	design = new Design(invention_weapons[3], false);
3704 	design->setCost(BETHLIUM, 0.5);
3705 	design->setCost(YERIDIUM, 1.5);
3706 	design = new Design(invention_weapons[3], false);
3707 	design->setCost(MOONLITE, 1);
3708 	design->setCost(YERIDIUM, 1);
3709 	design = new Design(invention_weapons[3], false);
3710 	design->setCost(MOONLITE, 1.5);
3711 	design->setCost(YERIDIUM, 0.5);
3712 	design = new Design(invention_weapons[3], false);
3713 	design->setCost(BETHLIUM, 0.5);
3714 	design->setCost(AQUARIUM, 1.5);
3715 	design = new Design(invention_weapons[3], false);
3716 	design->setCost(WOOD, 0.5);
3717 	design->setCost(SLATE, 1);
3718 	design->setCost(HERBIRITE, 0.5);
3719 	design = new Design(invention_weapons[3], false);
3720 	design->setCost(ROCK, 1);
3721 	design->setCost(ARULDITE, 0.5);
3722 	design->setCost(HERBIRITE, 0.5);
3723 	design = new Design(invention_weapons[3], false);
3724 	design->setCost(SOLARIUM, 0.5);
3725 	design->setCost(HERBIRITE, 1.5);
3726 	design = new Design(invention_weapons[3], false);
3727 	design->setCost(SLATE, 1);
3728 	design->setCost(HERBIRITE, 1);
3729 	design = new Design(invention_weapons[3], false);
3730 	design->setCost(SLATE, 1);
3731 	design->setCost(YERIDIUM, 1);
3732 	design = new Design(invention_weapons[3], false);
3733 	design->setCost(ARULDITE, 0.5);
3734 	design->setCost(HERBIRITE, 0.5);
3735 	design->setCost(MORON, 1);
3736 	design = new Design(invention_weapons[3], false);
3737 	design->setCost(MOONLITE, 1);
3738 	design->setCost(YERIDIUM, 0.5);
3739 	design->setCost(MORON, 0.5);
3740 	design = new Design(invention_weapons[3], false);
3741 	design->setCost(BETHLIUM, 0.5);
3742 	design->setCost(YERIDIUM, 0.5);
3743 	design->setCost(TEDIUM, 1);
3744 	design = new Design(invention_weapons[3], true);
3745 	design->setCost(MOONLITE, 1);
3746 	design->setCost(BETHLIUM, 0.5);
3747 	design->setCost(YERIDIUM, 0.5);
3748 	design = new Design(invention_weapons[3], false);
3749 	design->setCost(MOONLITE, 1);
3750 	design->setCost(YERIDIUM, 0.5);
3751 	design->setCost(AQUARIUM, 0.5);
3752 	design = new Design(invention_weapons[3], false);
3753 	design->setCost(WOOD, 0.5);
3754 	design->setCost(PLANETARIUM, 0.5);
3755 	design->setCost(YERIDIUM, 1);
3756 	design = new Design(invention_weapons[3], false);
3757 	design->setCost(WOOD, 0.5);
3758 	design->setCost(MOONLITE, 1);
3759 	design->setCost(YERIDIUM, 0.5);
3760 	design = new Design(invention_weapons[3], false);
3761 	design->setCost(MOONLITE, 1);
3762 	design->setCost(PLANETARIUM, 0.5);
3763 	design->setCost(SOLARIUM, 0.5);
3764 	design = new Design(invention_weapons[3], false);
3765 	design->setCost(PLANETARIUM, 1.5);
3766 	design->setCost(YERIDIUM, 0.5);
3767 	// 4 - giant catapult (4.5)
3768 	// wood, bone, slate, moonlite, bethlium, solarium, planetarium, aruldite, herbirite, valium, parasite, yeridium, moron, tedium, paladium, aquarium
3769 	// ergo: ?
3770 	// from tips: planetarium, herbirite, yeridium, aquarium, paladium
3771 	design = new Design(invention_weapons[4], false);
3772 	design->setCost(MOONLITE, 3.5);
3773 	design->setCost(BETHLIUM, 1);
3774 	design = new Design(invention_weapons[4], false);
3775 	design->setCost(MOONLITE, 3);
3776 	design->setCost(BETHLIUM, 1.5);
3777 	design = new Design(invention_weapons[4], false);
3778 	design->setCost(SLATE, 3.5);
3779 	design->setCost(SOLARIUM, 1);
3780 	design = new Design(invention_weapons[4], false);
3781 	design->setCost(SLATE, 3.5);
3782 	design->setCost(BETHLIUM, 1);
3783 	design = new Design(invention_weapons[4], false);
3784 	design->setCost(SLATE, 3);
3785 	design->setCost(ARULDITE, 1.5);
3786 	design = new Design(invention_weapons[4], false);
3787 	design->setCost(MOONLITE, 3);
3788 	design->setCost(SOLARIUM, 1.5);
3789 	design = new Design(invention_weapons[4], false);
3790 	design->setCost(BONE, 0.5);
3791 	design->setCost(MOONLITE, 2.5);
3792 	design->setCost(BETHLIUM, 1.5);
3793 	design = new Design(invention_weapons[4], false);
3794 	design->setCost(BONE, 0.5);
3795 	design->setCost(PLANETARIUM, 3);
3796 	design->setCost(SOLARIUM, 1);
3797 	design = new Design(invention_weapons[4], false);
3798 	design->setCost(PLANETARIUM, 3);
3799 	design->setCost(ARULDITE, 1.5);
3800 	design = new Design(invention_weapons[4], false);
3801 	design->setCost(BETHLIUM, 1);
3802 	design->setCost(YERIDIUM, 0.5);
3803 	design->setCost(MORON, 3);
3804 	design = new Design(invention_weapons[4], false);
3805 	design->setCost(BETHLIUM, 1);
3806 	design->setCost(YERIDIUM, 3.5);
3807 	design = new Design(invention_weapons[4], false);
3808 	design->setCost(SOLARIUM, 1);
3809 	design->setCost(YERIDIUM, 3.5);
3810 	design = new Design(invention_weapons[4], false);
3811 	design->setCost(BETHLIUM, 1);
3812 	design->setCost(YERIDIUM, 0.5);
3813 	design->setCost(VALIUM, 3);
3814 	design = new Design(invention_weapons[4], false);
3815 	design->setCost(WOOD, 0.5);
3816 	design->setCost(SLATE, 3);
3817 	design->setCost(ARULDITE, 1);
3818 	design = new Design(invention_weapons[4], false);
3819 	design->setCost(WOOD, 1);
3820 	design->setCost(SLATE, 3);
3821 	design->setCost(HERBIRITE, 0.5);
3822 	design = new Design(invention_weapons[4], false);
3823 	design->setCost(WOOD, 3);
3824 	design->setCost(SOLARIUM, 1);
3825 	design->setCost(YERIDIUM, 0.5);
3826 	design = new Design(invention_weapons[4], true);
3827 	design->setCost(SLATE, 3);
3828 	design->setCost(BETHLIUM, 1);
3829 	design->setCost(YERIDIUM, 0.5);
3830 	design = new Design(invention_weapons[4], false);
3831 	design->setCost(SLATE, 3);
3832 	design->setCost(ARULDITE, 1);
3833 	design->setCost(AQUARIUM, 0.5);
3834 	design = new Design(invention_weapons[4], false);
3835 	design->setCost(SLATE, 3);
3836 	design->setCost(ARULDITE, 1);
3837 	design->setCost(ONION, 0.5);
3838 	design = new Design(invention_weapons[4], false);
3839 	design->setCost(MOONLITE, 3);
3840 	design->setCost(ARULDITE, 1);
3841 	design->setCost(MARMITE, 0.5);
3842 	design = new Design(invention_weapons[4], false);
3843 	design->setCost(MOONLITE, 3);
3844 	design->setCost(ARULDITE, 1);
3845 	design->setCost(AQUARIUM, 0.5);
3846 	design = new Design(invention_weapons[4], false);
3847 	design->setCost(MOONLITE, 3);
3848 	design->setCost(YERIDIUM, 0.5);
3849 	design->setCost(AQUARIUM, 1);
3850 	design = new Design(invention_weapons[4], false);
3851 	design->setCost(MOONLITE, 3);
3852 	design->setCost(YERIDIUM, 0.5);
3853 	design->setCost(TEDIUM, 1);
3854 	design = new Design(invention_weapons[4], false);
3855 	design->setCost(SLATE, 3);
3856 	design->setCost(YERIDIUM, 0.5);
3857 	design->setCost(PARASITE, 1);
3858 	design = new Design(invention_weapons[4], false);
3859 	design->setCost(BETHLIUM, 1);
3860 	design->setCost(YERIDIUM, 0.5);
3861 	design->setCost(PARASITE, 3);
3862 	design = new Design(invention_weapons[4], false);
3863 	design->setCost(SLATE, 4);
3864 	design->setCost(HERBIRITE, 0.5);
3865 	design = new Design(invention_weapons[4], false);
3866 	design->setCost(SLATE, 3);
3867 	design->setCost(HERBIRITE, 1.5);
3868 	design = new Design(invention_weapons[4], false);
3869 	design->setCost(SOLARIUM, 4);
3870 	design->setCost(HERBIRITE, 0.5);
3871 	design = new Design(invention_weapons[4], false);
3872 	design->setCost(ARULDITE, 1);
3873 	design->setCost(HERBIRITE, 3.5);
3874 	design = new Design(invention_weapons[4], false);
3875 	design->setCost(ARULDITE, 4);
3876 	design->setCost(HERBIRITE, 0.5);
3877 	design = new Design(invention_weapons[4], false);
3878 	design->setCost(PLANETARIUM, 4);
3879 	design->setCost(HERBIRITE, 0.5);
3880 	design = new Design(invention_weapons[4], false);
3881 	design->setCost(PLANETARIUM, 3);
3882 	design->setCost(HERBIRITE, 1.5);
3883 	design = new Design(invention_weapons[4], false);
3884 	design->setCost(PLANETARIUM, 3.5);
3885 	design->setCost(SOLARIUM, 1);
3886 	design = new Design(invention_weapons[4], false);
3887 	design->setCost(PLANETARIUM, 3);
3888 	design->setCost(SOLARIUM, 1);
3889 	design->setCost(ARULDITE, 0.5);
3890 	design = new Design(invention_weapons[4], false);
3891 	design->setCost(MOONLITE, 3);
3892 	design->setCost(SOLARIUM, 1);
3893 	design->setCost(ARULDITE, 0.5);
3894 	design = new Design(invention_weapons[4], false);
3895 	design->setCost(BETHLIUM, 4);
3896 	design->setCost(HERBIRITE, 0.5);
3897 	design = new Design(invention_weapons[4], false);
3898 	design->setCost(MOONLITE, 4);
3899 	design->setCost(HERBIRITE, 0.5);
3900 	design = new Design(invention_weapons[4], false);
3901 	design->setCost(SLATE, 3);
3902 	design->setCost(YERIDIUM, 1.5);
3903 	design = new Design(invention_weapons[4], false);
3904 	design->setCost(SLATE, 4);
3905 	design->setCost(YERIDIUM, 0.5);
3906 	design = new Design(invention_weapons[4], false);
3907 	design->setCost(MOONLITE, 4);
3908 	design->setCost(YERIDIUM, 0.5);
3909 	design = new Design(invention_weapons[4], false);
3910 	design->setCost(ARULDITE, 1);
3911 	design->setCost(YERIDIUM, 3.5);
3912 	design = new Design(invention_weapons[4], false);
3913 	design->setCost(BETHLIUM, 1);
3914 	design->setCost(YERIDIUM, 0.5);
3915 	design->setCost(TEDIUM, 3);
3916 	design = new Design(invention_weapons[4], false);
3917 	design->setCost(MOONLITE, 3);
3918 	design->setCost(YERIDIUM, 0.5);
3919 	design->setCost(PALADIUM, 1);
3920 	design = new Design(invention_weapons[4], false);
3921 	design->setCost(MOONLITE, 3);
3922 	design->setCost(PLANETARIUM, 0.5);
3923 	design->setCost(SOLARIUM, 1);
3924 	design = new Design(invention_weapons[4], true);
3925 	design->setCost(MOONLITE, 3);
3926 	design->setCost(BETHLIUM, 1);
3927 	design->setCost(YERIDIUM, 0.5);
3928 	design = new Design(invention_weapons[4], false);
3929 	design->setCost(SOLARIUM, 3);
3930 	design->setCost(ARULDITE, 1);
3931 	design->setCost(HERBIRITE, 0.5);
3932 	// 5 - cannon (6)
3933 	// slate, bone, wood, bethlium, solarium, onion, tedium, aruldite, marmite, valium, planetarium, herbirite, aquarium, yeridium, paladium, moron
3934 	// ergo: bethlium, onion, aruldite
3935 	// from tips: bethlium, solarium, aruldite
3936 	design = new Design(invention_weapons[5], false);
3937 	design->setCost(BONE, 1);
3938 	design->setCost(BETHLIUM, 5);
3939 	design = new Design(invention_weapons[5], false);
3940 	design->setCost(BONE, 5);
3941 	design->setCost(TEDIUM, 1);
3942 	design = new Design(invention_weapons[5], false);
3943 	design->setCost(PARASITE, 5);
3944 	design->setCost(TEDIUM, 1);
3945 	design = new Design(invention_weapons[5], false);
3946 	design->setCost(WOOD, 1);
3947 	design->setCost(SOLARIUM, 5);
3948 	design = new Design(invention_weapons[5], false);
3949 	design->setCost(WOOD, 5);
3950 	design->setCost(SOLARIUM, 1);
3951 	design = new Design(invention_weapons[5], true);
3952 	design->setCost(BETHLIUM, 5);
3953 	design->setCost(ONION, 1);
3954 	design = new Design(invention_weapons[5], true);
3955 	design->setCost(BONE, 5);
3956 	design->setCost(ONION, 1);
3957 	design = new Design(invention_weapons[5], false);
3958 	design->setCost(ROCK, 5);
3959 	design->setCost(TEDIUM, 1);
3960 	design = new Design(invention_weapons[5], false);
3961 	design->setCost(ROCK, 1);
3962 	design->setCost(BETHLIUM, 5);
3963 	design = new Design(invention_weapons[5], false);
3964 	design->setCost(ROCK, 1);
3965 	design->setCost(ARULDITE, 5);
3966 	design = new Design(invention_weapons[5], false);
3967 	design->setCost(PLANETARIUM, 4.5);
3968 	design->setCost(TEDIUM, 1.5);
3969 	design = new Design(invention_weapons[5], true);
3970 	design->setCost(ARULDITE, 4);
3971 	design->setCost(TEDIUM, 2);
3972 	design = new Design(invention_weapons[5], true);
3973 	design->setCost(ARULDITE, 5);
3974 	design->setCost(ONION, 1);
3975 	design = new Design(invention_weapons[5], false);
3976 	design->setCost(SOLARIUM, 5);
3977 	design->setCost(MORON, 1);
3978 	design = new Design(invention_weapons[5], false);
3979 	design->setCost(ARULDITE, 5);
3980 	design->setCost(HERBIRITE, 1);
3981 	design = new Design(invention_weapons[5], false);
3982 	design->setCost(ARULDITE, 3);
3983 	design->setCost(PALADIUM, 3);
3984 	design = new Design(invention_weapons[5], false);
3985 	design->setCost(ARULDITE, 5);
3986 	design->setCost(MORON, 1);
3987 	design = new Design(invention_weapons[5], false);
3988 	design->setCost(WOOD, 1);
3989 	design->setCost(ARULDITE, 5);
3990 	design = new Design(invention_weapons[5], true);
3991 	design->setCost(SOLARIUM, 5);
3992 	design->setCost(ONION, 1);
3993 	design = new Design(invention_weapons[5], false);
3994 	design->setCost(PLANETARIUM, 5);
3995 	design->setCost(ONION, 1);
3996 	design = new Design(invention_weapons[5], false);
3997 	design->setCost(HERBIRITE, 3);
3998 	design->setCost(ONION, 3);
3999 	design = new Design(invention_weapons[5], false);
4000 	design->setCost(VALIUM, 5);
4001 	design->setCost(ONION, 1);
4002 	design = new Design(invention_weapons[5], true);
4003 	design->setCost(ONION, 6);
4004 	design = new Design(invention_weapons[5], false);
4005 	design->setCost(TEDIUM, 6);
4006 	design = new Design(invention_weapons[5], false);
4007 	design->setCost(SOLARIUM, 6);
4008 	design = new Design(invention_weapons[5], false);
4009 	design->setCost(ARULDITE, 6);
4010 	design = new Design(invention_weapons[5], false);
4011 	design->setCost(BETHLIUM, 5);
4012 	design->setCost(AQUARIUM, 1);
4013 	design = new Design(invention_weapons[5], false);
4014 	design->setCost(SOLARIUM, 5);
4015 	design->setCost(AQUARIUM, 1);
4016 	design = new Design(invention_weapons[5], false);
4017 	design->setCost(ARULDITE, 5);
4018 	design->setCost(AQUARIUM, 1);
4019 	design = new Design(invention_weapons[5], false);
4020 	design->setCost(AQUARIUM, 5);
4021 	design->setCost(ONION, 1);
4022 	design = new Design(invention_weapons[5], false);
4023 	design->setCost(BETHLIUM, 5);
4024 	design->setCost(MARMITE, 1);
4025 	design = new Design(invention_weapons[5], false);
4026 	design->setCost(ONION, 1);
4027 	design->setCost(MARMITE, 5);
4028 	design = new Design(invention_weapons[5], false);
4029 	design->setCost(SOLARIUM, 5);
4030 	design->setCost(MARMITE, 1);
4031 	design = new Design(invention_weapons[5], false);
4032 	design->setCost(ARULDITE, 5);
4033 	design->setCost(MARMITE, 1);
4034 	design = new Design(invention_weapons[5], false);
4035 	design->setCost(BETHLIUM, 6);
4036 	design = new Design(invention_weapons[5], false);
4037 	design->setCost(BETHLIUM, 5);
4038 	design->setCost(YERIDIUM, 1);
4039 	design = new Design(invention_weapons[5], false);
4040 	design->setCost(YERIDIUM, 5);
4041 	design->setCost(TEDIUM, 1);
4042 	design = new Design(invention_weapons[5], false);
4043 	design->setCost(SLATE, 1);
4044 	design->setCost(BETHLIUM, 5);
4045 	design = new Design(invention_weapons[5], false);
4046 	design->setCost(SLATE, 5);
4047 	design->setCost(TEDIUM, 1);
4048 	design = new Design(invention_weapons[5], false);
4049 	design->setCost(PALADIUM, 5);
4050 	design->setCost(TEDIUM, 1);
4051 	design = new Design(invention_weapons[5], false);
4052 	design->setCost(PALADIUM, 5);
4053 	design->setCost(ONION, 1);
4054 	design = new Design(invention_weapons[5], true);
4055 	design->setCost(BETHLIUM, 5);
4056 	design->setCost(TEDIUM, 1);
4057 	design = new Design(invention_weapons[5], false);
4058 	design->setCost(AQUARIUM, 5);
4059 	design->setCost(TEDIUM, 1);
4060 	design = new Design(invention_weapons[5], false);
4061 	design->setCost(ONION, 5);
4062 	design->setCost(TEDIUM, 1);
4063 	design = new Design(invention_weapons[5], false);
4064 	design->setCost(TEDIUM, 1);
4065 	design->setCost(MARMITE, 5);
4066 	// 6 - biplane (6)
4067 	// slate, wood, bethlium, solarium, yeridium, moron, onion, valium, aruldite, paladium, planetarium, tedium, aquarium
4068 	// ergo: ?
4069 	// from tips: bethlium, solarium, aruldite, onion, tedium, moron
4070 	design = new Design(invention_weapons[6], false);
4071 	design->setCost(SLATE, 4);
4072 	design->setCost(ARULDITE, 1.5);
4073 	design->setCost(ONION, 0.5);
4074 	design = new Design(invention_weapons[6], false);
4075 	design->setCost(WOOD, 4);
4076 	design->setCost(ARULDITE, 1.5);
4077 	design->setCost(TEDIUM, 0.5);
4078 	design = new Design(invention_weapons[6], false);
4079 	design->setCost(ROCK, 4);
4080 	design->setCost(ARULDITE, 1.5);
4081 	design->setCost(TEDIUM, 0.5);
4082 	design = new Design(invention_weapons[6], false);
4083 	design->setCost(WOOD, 4);
4084 	design->setCost(ARULDITE, 1.5);
4085 	design->setCost(ONION, 0.5);
4086 	design = new Design(invention_weapons[6], false);
4087 	design->setCost(SOLARIUM, 1.5);
4088 	design->setCost(MORON, 4.5);
4089 	design = new Design(invention_weapons[6], true);
4090 	design->setCost(BETHLIUM, 1.5);
4091 	design->setCost(ONION, 0.5);
4092 	design->setCost(MORON, 4);
4093 	design = new Design(invention_weapons[6], false);
4094 	design->setCost(BETHLIUM, 2);
4095 	design->setCost(AQUARIUM, 3.5);
4096 	design->setCost(TEDIUM, 0.5);
4097 	design = new Design(invention_weapons[6], false);
4098 	design->setCost(BETHLIUM, 1.5);
4099 	design->setCost(YERIDIUM, 0.5);
4100 	design->setCost(MORON, 4);
4101 	design = new Design(invention_weapons[6], false);
4102 	design->setCost(BETHLIUM, 1.5);
4103 	design->setCost(VALIUM, 4);
4104 	design->setCost(ONION, 0.5);
4105 	design = new Design(invention_weapons[6], false);
4106 	design->setCost(SOLARIUM, 1.5);
4107 	design->setCost(VALIUM, 4);
4108 	design->setCost(ONION, 0.5);
4109 	design = new Design(invention_weapons[6], false);
4110 	design->setCost(ARULDITE, 1.5);
4111 	design->setCost(PALADIUM, 0.5);
4112 	design->setCost(MORON, 4);
4113 	design = new Design(invention_weapons[6], false);
4114 	design->setCost(PLANETARIUM, 4);
4115 	design->setCost(SOLARIUM, 1);
4116 	design->setCost(TEDIUM, 1);
4117 	design = new Design(invention_weapons[6], false);
4118 	design->setCost(PLANETARIUM, 4);
4119 	design->setCost(ARULDITE, 1.5);
4120 	design->setCost(TEDIUM, 0.5);
4121 	design = new Design(invention_weapons[6], false);
4122 	design->setCost(PLANETARIUM, 4);
4123 	design->setCost(ARULDITE, 1.5);
4124 	design->setCost(ONION, 0.5);
4125 	design = new Design(invention_weapons[6], false);
4126 	design->setCost(ARULDITE, 1.5);
4127 	design->setCost(MORON, 4);
4128 	design->setCost(MARMITE, 0.5);
4129 	design = new Design(invention_weapons[6], false);
4130 	design->setCost(ARULDITE, 1.5);
4131 	design->setCost(TEDIUM, 0.5);
4132 	design->setCost(MARMITE, 4);
4133 	design = new Design(invention_weapons[6], true);
4134 	design->setCost(ARULDITE, 1.5);
4135 	design->setCost(TEDIUM, 0.5);
4136 	design->setCost(MORON, 4);
4137 	design = new Design(invention_weapons[6], false);
4138 	design->setCost(ARULDITE, 1.5);
4139 	design->setCost(HERBIRITE, 0.5);
4140 	design->setCost(MORON, 4);
4141 	design = new Design(invention_weapons[6], false);
4142 	design->setCost(AQUARIUM, 1.5);
4143 	design->setCost(ONION, 0.5);
4144 	design->setCost(MORON, 4);
4145 	design = new Design(invention_weapons[6], false);
4146 	design->setCost(PALADIUM, 1.5);
4147 	design->setCost(ONION, 0.5);
4148 	design->setCost(MORON, 4);
4149 	design = new Design(invention_weapons[6], false);
4150 	design->setCost(BETHLIUM, 1.5);
4151 	design->setCost(TEDIUM, 4);
4152 	design->setCost(YERIDIUM, 0.5);
4153 	design = new Design(invention_weapons[6], false);
4154 	design->setCost(PLANETARIUM, 4);
4155 	design->setCost(BETHLIUM, 1.5);
4156 	design->setCost(ONION, 0.5);
4157 	design = new Design(invention_weapons[6], false);
4158 	design->setCost(BETHLIUM, 5.5);
4159 	design->setCost(TEDIUM, 0.5);
4160 	design = new Design(invention_weapons[6], false);
4161 	design->setCost(TEDIUM, 0.5);
4162 	design->setCost(MORON, 5.5);
4163 	design = new Design(invention_weapons[6], false);
4164 	design->setCost(TEDIUM, 2);
4165 	design->setCost(MORON, 4);
4166 	design = new Design(invention_weapons[6], false);
4167 	design->setCost(SOLARIUM, 1.5);
4168 	design->setCost(MORON, 4);
4169 	design->setCost(MARMITE, 0.5);
4170 	design = new Design(invention_weapons[6], false);
4171 	design->setCost(TEDIUM, 0.5);
4172 	design->setCost(MORON, 4);
4173 	design->setCost(ALIEN, 1.5);
4174 	design = new Design(invention_weapons[6], false);
4175 	design->setCost(ARULDITE, 1.5);
4176 	design->setCost(ONION, 4.5);
4177 	design = new Design(invention_weapons[6], false);
4178 	design->setCost(ARULDITE, 5.5);
4179 	design->setCost(ONION, 0.5);
4180 	design = new Design(invention_weapons[6], false);
4181 	design->setCost(SOLARIUM, 5.5);
4182 	design->setCost(TEDIUM, 0.5);
4183 	design = new Design(invention_weapons[6], false);
4184 	design->setCost(SOLARIUM, 1.5);
4185 	design->setCost(TEDIUM, 4.5);
4186 	design = new Design(invention_weapons[6], false);
4187 	design->setCost(ARULDITE, 5.5);
4188 	design->setCost(TEDIUM, 0.5);
4189 	design = new Design(invention_weapons[6], false);
4190 	design->setCost(ARULDITE, 1.5);
4191 	design->setCost(TEDIUM, 4.5);
4192 	design = new Design(invention_weapons[6], false);
4193 	design->setCost(ARULDITE, 2.5);
4194 	design->setCost(MORON, 3.5);
4195 	design = new Design(invention_weapons[6], false);
4196 	design->setCost(ONION, 2);
4197 	design->setCost(MORON, 4);
4198 	design = new Design(invention_weapons[6], false);
4199 	design->setCost(BETHLIUM, 5.5);
4200 	design->setCost(ONION, 0.5);
4201 	// 7 - jet plane (7.5)
4202 	// wood, slate, planetarium, onion, aquarium, tedium, marmite, paladium, valium, aruldite, moonlite
4203 	// ergo: ?
4204 	// from tips: slate, moonlite, planetarium, aquarium, paladium, onion, tedium
4205 	design = new Design(invention_weapons[7], false);
4206 	design->setCost(WOOD, 0.5);
4207 	design->setCost(PALADIUM, 1.5);
4208 	design->setCost(TEDIUM, 5.5);
4209 	design = new Design(invention_weapons[7], false);
4210 	design->setCost(BETHLIUM, 0.5);
4211 	design->setCost(PALADIUM, 1.5);
4212 	design->setCost(ONION, 5.5);
4213 	design = new Design(invention_weapons[7], false);
4214 	design->setCost(SLATE, 6);
4215 	design->setCost(AQUARIUM, 1.5);
4216 	design = new Design(invention_weapons[7], true);
4217 	design->setCost(SLATE, 0.5);
4218 	design->setCost(AQUARIUM, 1.5);
4219 	design->setCost(TEDIUM, 5.5);
4220 	design = new Design(invention_weapons[7], false);
4221 	design->setCost(SLATE, 0.5);
4222 	design->setCost(PARASITE, 1.5);
4223 	design->setCost(TEDIUM, 5.5);
4224 	design = new Design(invention_weapons[7], true);
4225 	design->setCost(MOONLITE, 0.5);
4226 	design->setCost(AQUARIUM, 2);
4227 	design->setCost(TEDIUM, 5);
4228 	design = new Design(invention_weapons[7], false);
4229 	design->setCost(MOONLITE, 1);
4230 	design->setCost(YERIDIUM, 1.5);
4231 	design->setCost(TEDIUM, 5);
4232 	design = new Design(invention_weapons[7], false);
4233 	design->setCost(SLATE, 0.5);
4234 	design->setCost(YERIDIUM, 5.5);
4235 	design->setCost(PALADIUM, 1.5);
4236 	design = new Design(invention_weapons[7], false);
4237 	design->setCost(ARULDITE, 0.5);
4238 	design->setCost(AQUARIUM, 1.5);
4239 	design->setCost(TEDIUM, 5.5);
4240 	design = new Design(invention_weapons[7], false);
4241 	design->setCost(PLANETARIUM, 1);
4242 	design->setCost(ONION, 6.5);
4243 	design = new Design(invention_weapons[7], false);
4244 	design->setCost(PLANETARIUM, 2);
4245 	design->setCost(ONION, 5.5);
4246 	design = new Design(invention_weapons[7], false);
4247 	design->setCost(AQUARIUM, 1.5);
4248 	design->setCost(TEDIUM, 5.5);
4249 	design->setCost(MARMITE, 0.5);
4250 	design = new Design(invention_weapons[7], false);
4251 	design->setCost(SLATE, 0.5);
4252 	design->setCost(ONION, 7);
4253 	design = new Design(invention_weapons[7], false);
4254 	design->setCost(SLATE, 2);
4255 	design->setCost(ONION, 5.5);
4256 	design = new Design(invention_weapons[7], false);
4257 	design->setCost(SLATE, 0.5);
4258 	design->setCost(PALADIUM, 7);
4259 	design = new Design(invention_weapons[7], false);
4260 	design->setCost(SLATE, 6);
4261 	design->setCost(PALADIUM, 1.5);
4262 	design = new Design(invention_weapons[7], false);
4263 	design->setCost(SLATE, 2);
4264 	design->setCost(TEDIUM, 5.5);
4265 	design = new Design(invention_weapons[7], false);
4266 	design->setCost(MOONLITE, 2);
4267 	design->setCost(TEDIUM, 5.5);
4268 	design = new Design(invention_weapons[7], false);
4269 	design->setCost(MOONLITE, 6);
4270 	design->setCost(PALADIUM, 1.5);
4271 	design = new Design(invention_weapons[7], false);
4272 	design->setCost(PALADIUM, 2);
4273 	design->setCost(TEDIUM, 5.5);
4274 	design = new Design(invention_weapons[7], false);
4275 	design->setCost(ONION, 2);
4276 	design->setCost(MARMITE, 5.5);
4277 	design = new Design(invention_weapons[7], false);
4278 	design->setCost(PLANETARIUM, 0.5);
4279 	design->setCost(TEDIUM, 7);
4280 	design = new Design(invention_weapons[7], false);
4281 	design->setCost(PLANETARIUM, 0.5);
4282 	design->setCost(PALADIUM, 7);
4283 	design = new Design(invention_weapons[7], false);
4284 	design->setCost(PLANETARIUM, 0.5);
4285 	design->setCost(AQUARIUM, 7);
4286 	design = new Design(invention_weapons[7], false);
4287 	design->setCost(PLANETARIUM, 6);
4288 	design->setCost(AQUARIUM, 1.5);
4289 	design = new Design(invention_weapons[7], false);
4290 	design->setCost(PALADIUM, 1.5);
4291 	design->setCost(TEDIUM, 6);
4292 	design = new Design(invention_weapons[7], false);
4293 	design->setCost(PALADIUM, 1.5);
4294 	design->setCost(ONION, 6);
4295 	design = new Design(invention_weapons[7], false);
4296 	design->setCost(PALADIUM, 2);
4297 	design->setCost(ONION, 5.5);
4298 	design = new Design(invention_weapons[7], true);
4299 	design->setCost(PLANETARIUM, 0.5);
4300 	design->setCost(PALADIUM, 1.5);
4301 	design->setCost(TEDIUM, 5.5);
4302 	design = new Design(invention_weapons[7], false);
4303 	design->setCost(PLANETARIUM, 0.5);
4304 	design->setCost(ARULDITE, 1.5);
4305 	design->setCost(TEDIUM, 5.5);
4306 	design = new Design(invention_weapons[7], false);
4307 	design->setCost(PLANETARIUM, 0.5);
4308 	design->setCost(AQUARIUM, 1.5);
4309 	design->setCost(MARMITE, 5.5);
4310 	design = new Design(invention_weapons[7], false);
4311 	design->setCost(MOONLITE, 2);
4312 	design->setCost(ONION, 5.5);
4313 	design = new Design(invention_weapons[7], false);
4314 	design->setCost(AQUARIUM, 2);
4315 	design->setCost(ONION, 5.5);
4316 	design = new Design(invention_weapons[7], false);
4317 	design->setCost(AQUARIUM, 1.5);
4318 	design->setCost(ONION, 6);
4319 	design = new Design(invention_weapons[7], false);
4320 	design->setCost(AQUARIUM, 1.5);
4321 	design->setCost(TEDIUM, 6);
4322 	design = new Design(invention_weapons[7], false);
4323 	design->setCost(AQUARIUM, 2);
4324 	design->setCost(TEDIUM, 5.5);
4325 	design = new Design(invention_weapons[7], false);
4326 	design->setCost(ROCK, 1.5);
4327 	design->setCost(SLATE, 0.5);
4328 	design->setCost(TEDIUM, 5.5);
4329 	design = new Design(invention_weapons[7], false);
4330 	design->setCost(SLATE, 0.5);
4331 	design->setCost(ARULDITE, 1.5);
4332 	design->setCost(ONION, 5.5);
4333 	design = new Design(invention_weapons[7], false);
4334 	design->setCost(VALIUM, 0.5);
4335 	design->setCost(AQUARIUM, 1.5);
4336 	design->setCost(ONION, 5.5);
4337 	design = new Design(invention_weapons[7], false);
4338 	design->setCost(PALADIUM, 1.5);
4339 	design->setCost(ONION, 5.5);
4340 	design->setCost(MORON, 0.5);
4341 	design = new Design(invention_weapons[7], false);
4342 	design->setCost(PALADIUM, 1.5);
4343 	design->setCost(TEDIUM, 5.5);
4344 	design->setCost(MORON, 0.5);
4345 	design = new Design(invention_weapons[7], false);
4346 	design->setCost(PALADIUM, 1.5);
4347 	design->setCost(ONION, 5.5);
4348 	design->setCost(TEDIUM, 0.5);
4349 	// 8 - nuke (7.5)
4350 	// slate, wood, aruldite, paladium, moron, bethlium, marmite, aquarium, tedium, solarium, moonlite, planetarium
4351 	// ergo: ?
4352 	// from tips: bethlium, solarium, aruldite, aquarium, paladium, marmite
4353 	design = new Design(invention_weapons[8], false);
4354 	design->setCost(WOOD, 4);
4355 	design->setCost(ARULDITE, 0.5);
4356 	design->setCost(PALADIUM, 3);
4357 	design = new Design(invention_weapons[8], false);
4358 	design->setCost(WOOD, 3);
4359 	design->setCost(ARULDITE, 1.5);
4360 	design->setCost(MARMITE, 3);
4361 	design = new Design(invention_weapons[8], false);
4362 	design->setCost(WOOD, 3);
4363 	design->setCost(BETHLIUM, 0.5);
4364 	design->setCost(MARMITE, 4);
4365 	design = new Design(invention_weapons[8], false);
4366 	design->setCost(WOOD, 0.5);
4367 	design->setCost(PALADIUM, 3);
4368 	design->setCost(MORON, 4);
4369 	design = new Design(invention_weapons[8], false);
4370 	design->setCost(ROCK, 0.5);
4371 	design->setCost(PALADIUM, 3);
4372 	design->setCost(MARMITE, 4);
4373 	design = new Design(invention_weapons[8], false);
4374 	design->setCost(ROCK, 1.5);
4375 	design->setCost(AQUARIUM, 2);
4376 	design->setCost(MARMITE, 4);
4377 	design = new Design(invention_weapons[8], false);
4378 	design->setCost(SLATE, 1.5);
4379 	design->setCost(AQUARIUM, 1.5);
4380 	design->setCost(MARMITE, 4.5);
4381 	design = new Design(invention_weapons[8], false);
4382 	design->setCost(PLANETARIUM, 1.5);
4383 	design->setCost(AQUARIUM, 2);
4384 	design->setCost(MARMITE, 4);
4385 	design = new Design(invention_weapons[8], false);
4386 	design->setCost(AQUARIUM, 3);
4387 	design->setCost(MARMITE, 4.5);
4388 	design = new Design(invention_weapons[8], false);
4389 	design->setCost(BETHLIUM, 3.5);
4390 	design->setCost(MARMITE, 4);
4391 	design = new Design(invention_weapons[8], false);
4392 	design->setCost(SOLARIUM, 1.5);
4393 	design->setCost(PALADIUM, 6);
4394 	design = new Design(invention_weapons[8], false);
4395 	design->setCost(SOLARIUM, 2.5);
4396 	design->setCost(MARMITE, 5);
4397 	design = new Design(invention_weapons[8], false);
4398 	design->setCost(SOLARIUM, 3.5);
4399 	design->setCost(MARMITE, 4);
4400 	design = new Design(invention_weapons[8], false);
4401 	design->setCost(MOONLITE, 2.5);
4402 	design->setCost(SOLARIUM, 1);
4403 	design->setCost(MARMITE, 4);
4404 	design = new Design(invention_weapons[8], false);
4405 	design->setCost(BETHLIUM, 0.5);
4406 	design->setCost(SOLARIUM, 2.5);
4407 	design->setCost(MARMITE, 4.5);
4408 	design = new Design(invention_weapons[8], false);
4409 	design->setCost(AQUARIUM, 2);
4410 	design->setCost(TEDIUM, 1.5);
4411 	design->setCost(MARMITE, 4);
4412 	design = new Design(invention_weapons[8], false);
4413 	design->setCost(ARULDITE, 2.5);
4414 	design->setCost(MARMITE, 5);
4415 	design = new Design(invention_weapons[8], false);
4416 	design->setCost(ARULDITE, 1.5);
4417 	design->setCost(YERIDIUM, 3);
4418 	design->setCost(MARMITE, 3);
4419 	design = new Design(invention_weapons[8], false);
4420 	design->setCost(ARULDITE, 3.5);
4421 	design->setCost(MARMITE, 4);
4422 	design = new Design(invention_weapons[8], false);
4423 	design->setCost(ARULDITE, 2.5);
4424 	design->setCost(AQUARIUM, 5);
4425 	design = new Design(invention_weapons[8], false);
4426 	design->setCost(ARULDITE, 3.5);
4427 	design->setCost(AQUARIUM, 4);
4428 	design = new Design(invention_weapons[8], false);
4429 	design->setCost(ARULDITE, 1.5);
4430 	design->setCost(TEDIUM, 2.5);
4431 	design->setCost(MARMITE, 3.5);
4432 	design = new Design(invention_weapons[8], false);
4433 	design->setCost(PALADIUM, 3);
4434 	design->setCost(MARMITE, 4.5);
4435 	design = new Design(invention_weapons[8], false);
4436 	design->setCost(PALADIUM, 2.5);
4437 	design->setCost(MARMITE, 5);
4438 	design = new Design(invention_weapons[8], false);
4439 	design->setCost(ARULDITE, 4.5);
4440 	design->setCost(PALADIUM, 3);
4441 	design = new Design(invention_weapons[8], false);
4442 	design->setCost(ARULDITE, 1.5);
4443 	design->setCost(PALADIUM, 6);
4444 	design = new Design(invention_weapons[8], false);
4445 	design->setCost(BETHLIUM, 1.5);
4446 	design->setCost(PALADIUM, 6);
4447 	design = new Design(invention_weapons[8], false);
4448 	design->setCost(BETHLIUM, 1.5);
4449 	design->setCost(AQUARIUM, 6);
4450 	design = new Design(invention_weapons[8], false);
4451 	design->setCost(BETHLIUM, 4.5);
4452 	design->setCost(AQUARIUM, 3);
4453 	design = new Design(invention_weapons[8], true);
4454 	design->setCost(BETHLIUM, 0.5);
4455 	design->setCost(AQUARIUM, 2.5);
4456 	design->setCost(MARMITE, 4.5);
4457 	design = new Design(invention_weapons[8], true);
4458 	design->setCost(ARULDITE, 1.5);
4459 	design->setCost(AQUARIUM, 2);
4460 	design->setCost(MARMITE, 4);
4461 	design = new Design(invention_weapons[8], false);
4462 	design->setCost(ARULDITE, 1.5);
4463 	design->setCost(PALADIUM, 2.5);
4464 	design->setCost(TEDIUM, 3.5);
4465 	design = new Design(invention_weapons[8], true);
4466 	design->setCost(BETHLIUM, 1);
4467 	design->setCost(YERIDIUM, 3);
4468 	design->setCost(MARMITE, 3.5);
4469 	design = new Design(invention_weapons[8], true);
4470 	design->setCost(SOLARIUM, 1.5);
4471 	design->setCost(AQUARIUM, 3);
4472 	design->setCost(MARMITE, 3);
4473 	design = new Design(invention_weapons[8], true);
4474 	design->setCost(SOLARIUM, 1.5);
4475 	design->setCost(PALADIUM, 2);
4476 	design->setCost(MARMITE, 4);
4477 	design = new Design(invention_weapons[8], false);
4478 	design->setCost(SOLARIUM, 1.5);
4479 	design->setCost(VALIUM, 2);
4480 	design->setCost(MARMITE, 4);
4481 	design = new Design(invention_weapons[8], false);
4482 	design->setCost(VALIUM, 1.5);
4483 	design->setCost(PALADIUM, 2.5);
4484 	design->setCost(MARMITE, 3.5);
4485 	design = new Design(invention_weapons[8], false);
4486 	design->setCost(BETHLIUM, 1.5);
4487 	design->setCost(PALADIUM, 2);
4488 	design->setCost(MORON, 4);
4489 	design = new Design(invention_weapons[8], false);
4490 	design->setCost(BETHLIUM, 1.5);
4491 	design->setCost(MARMITE, 3);
4492 	design->setCost(ALIEN, 3);
4493 	// 9 - saucer (8)
4494 	// slate, aquarium, moron, alien, marmite, paladium
4495 	// ergo: ?
4496 	// from tips: moron, marmite, alien
4497 	design = new Design(invention_weapons[9], false);
4498 	design->setCost(SLATE, 2.5);
4499 	design->setCost(MARMITE, 0.5);
4500 	design->setCost(ALIEN, 5);
4501 	design = new Design(invention_weapons[9], false);
4502 	design->setCost(SOLARIUM, 2.5);
4503 	design->setCost(MARMITE, 0.5);
4504 	design->setCost(ALIEN, 5);
4505 	design = new Design(invention_weapons[9], true);
4506 	design->setCost(MORON, 2.5);
4507 	design->setCost(MARMITE, 0.5);
4508 	design->setCost(ALIEN, 5);
4509 	design = new Design(invention_weapons[9], false);
4510 	design->setCost(MORON, 7.5);
4511 	design->setCost(MARMITE, 0.5);
4512 	design = new Design(invention_weapons[9], false);
4513 	design->setCost(MORON, 2);
4514 	design->setCost(ALIEN, 6);
4515 	design = new Design(invention_weapons[9], true);
4516 	design->setCost(AQUARIUM, 2.5);
4517 	design->setCost(MARMITE, 0.5);
4518 	design->setCost(ALIEN, 5);
4519 	design = new Design(invention_weapons[9], false);
4520 	design->setCost(PALADIUM, 2.5);
4521 	design->setCost(MARMITE, 0.5);
4522 	design->setCost(ALIEN, 5);
4523 	design = new Design(invention_weapons[9], false);
4524 	design->setCost(PALADIUM, 5);
4525 	design->setCost(MORON, 2.5);
4526 	design->setCost(MARMITE, 0.5);
4527 	design = new Design(invention_weapons[9], false);
4528 	design->setCost(MARMITE, 1);
4529 	design->setCost(ALIEN, 7);
4530 	design = new Design(invention_weapons[9], false);
4531 	design->setCost(MARMITE, 4);
4532 	design->setCost(ALIEN, 4);
4533 
4534 	// Defences
4535 	// 0 - stick (1.5)
4536 	// wood, bone, rock, slate, planetarium, herbirite, valium, bethlium, parasite, solarium, aquarium
4537 	// ergo: slate, planetarium, moonlite
4538 	// from tips: slate, moonlite, planetarium
4539 	design = new Design(invention_defences[0], false);
4540 	design->setCost(WOOD, 1.5);
4541 	design = new Design(invention_defences[0], false);
4542 	design->setCost(BONE, 1.5);
4543 	design = new Design(invention_defences[0], false);
4544 	design->setCost(ROCK, 1.5);
4545 	design = new Design(invention_defences[0], true);
4546 	design->setCost(SLATE, 1.5);
4547 	design = new Design(invention_defences[0], false);
4548 	design->setCost(SOLARIUM, 1.5);
4549 	design = new Design(invention_defences[0], false);
4550 	design->setCost(AQUARIUM, 1.5);
4551 	design = new Design(invention_defences[0], true);
4552 	design->setCost(PLANETARIUM, 1.5);
4553 	design = new Design(invention_defences[0], true);
4554 	design->setCost(MOONLITE, 1.5);
4555 	design = new Design(invention_defences[0], false);
4556 	design->setCost(HERBIRITE, 1.5);
4557 	design = new Design(invention_defences[0], false);
4558 	design->setCost(VALIUM, 1.5);
4559 	design = new Design(invention_defences[0], false);
4560 	design->setCost(BETHLIUM, 1.5);
4561 	design = new Design(invention_defences[0], false);
4562 	design->setCost(PARASITE, 1.5);
4563 	// 1 - spear (1.5)
4564 	// wood, rock, bone, slate, moonlite, planetarium, valium, herbirite, parasite, onion, bethlium, solarium, aquarium, aruldite
4565 	// ergo: rock, wood, rock+slate, moonlite, bone+planetarium, wood+planetarium
4566 	// from tips: rock, wood, bones, slate, moonlite, planetarium
4567 	design = new Design(invention_defences[1], false);
4568 	design->setCost(WOOD, 1.5);
4569 	design = new Design(invention_defences[1], false);
4570 	design->setCost(ROCK, 1.5);
4571 	design = new Design(invention_defences[1], true);
4572 	design->setCost(BONE, 0.5);
4573 	design->setCost(MOONLITE, 1);
4574 	design = new Design(invention_defences[1], true);
4575 	design->setCost(WOOD, 0.5);
4576 	design->setCost(MOONLITE, 1);
4577 	design = new Design(invention_defences[1], true);
4578 	design->setCost(ROCK, 0.5);
4579 	design->setCost(MOONLITE, 1);
4580 	design = new Design(invention_defences[1], false);
4581 	design->setCost(SLATE, 1);
4582 	design->setCost(MOONLITE, 0.5);
4583 	design = new Design(invention_defences[1], false);
4584 	design->setCost(BONE, 0.5);
4585 	design->setCost(SOLARIUM, 1);
4586 	design = new Design(invention_defences[1], false);
4587 	design->setCost(WOOD, 0.5);
4588 	design->setCost(SOLARIUM, 1);
4589 	design = new Design(invention_defences[1], false);
4590 	design->setCost(WOOD, 0.5);
4591 	design->setCost(AQUARIUM, 1);
4592 	design = new Design(invention_defences[1], false);
4593 	design->setCost(BONE, 1.5);
4594 	design = new Design(invention_defences[1], false);
4595 	design->setCost(SLATE, 1.5);
4596 	design = new Design(invention_defences[1], false);
4597 	design->setCost(ROCK, 0.5);
4598 	design->setCost(BONE, 1);
4599 	design = new Design(invention_defences[1], false);
4600 	design->setCost(WOOD, 1.0);
4601 	design->setCost(BONE, 0.5);
4602 	design = new Design(invention_defences[1], true);
4603 	design->setCost(ROCK, 0.5);
4604 	design->setCost(SLATE, 1);
4605 	design = new Design(invention_defences[1], true);
4606 	design->setCost(BONE, 0.5);
4607 	design->setCost(PLANETARIUM, 1);
4608 	design = new Design(invention_defences[1], true);
4609 	design->setCost(WOOD, 0.5);
4610 	design->setCost(PLANETARIUM, 1);
4611 	design = new Design(invention_defences[1], true);
4612 	design->setCost(SLATE, 1);
4613 	design->setCost(PLANETARIUM, 0.5);
4614 	design = new Design(invention_defences[1], false);
4615 	design->setCost(BONE, 0.5);
4616 	design->setCost(VALIUM, 1);
4617 	design = new Design(invention_defences[1], false);
4618 	design->setCost(MOONLITE, 1);
4619 	design->setCost(VALIUM, 0.5);
4620 	design = new Design(invention_defences[1], false);
4621 	design->setCost(BONE, 0.5);
4622 	design->setCost(HERBIRITE, 1);
4623 	design = new Design(invention_defences[1], false);
4624 	design->setCost(SLATE, 1);
4625 	design->setCost(PARASITE, 0.5);
4626 	design = new Design(invention_defences[1], false);
4627 	design->setCost(MOONLITE, 1);
4628 	design->setCost(PARASITE, 0.5);
4629 	design = new Design(invention_defences[1], false);
4630 	design->setCost(PLANETARIUM, 1);
4631 	design->setCost(PARASITE, 0.5);
4632 	design = new Design(invention_defences[1], false);
4633 	design->setCost(PLANETARIUM, 1);
4634 	design->setCost(ARULDITE, 0.5);
4635 	design = new Design(invention_defences[1], false);
4636 	design->setCost(PLANETARIUM, 1);
4637 	design->setCost(SOLARIUM, 0.5);
4638 	design = new Design(invention_defences[1], false);
4639 	design->setCost(SLATE, 1);
4640 	design->setCost(ONION, 0.5);
4641 	design = new Design(invention_defences[1], false);
4642 	design->setCost(MOONLITE, 1.5);
4643 	design = new Design(invention_defences[1], false);
4644 	design->setCost(BETHLIUM, 0.5);
4645 	design->setCost(MOONLITE, 1);
4646 	design = new Design(invention_defences[1], false);
4647 	design->setCost(MOONLITE, 1);
4648 	design->setCost(SOLARIUM, 0.5);
4649 	design = new Design(invention_defences[1], false);
4650 	design->setCost(PLANETARIUM, 1.5);
4651 	// 2 - bow and arrow (1.5)
4652 	// wood, rock, slate, bone, moonlite, bethlium, planetarium, herbirite, valium, parasite, tedium
4653 	// ergo: ?
4654 	// from tips: rock, wood, bones, valium, parasite
4655 	design = new Design(invention_defences[2], false);
4656 	design->setCost(WOOD, 1);
4657 	design->setCost(MOONLITE, 0.5);
4658 	design = new Design(invention_defences[2], false);
4659 	design->setCost(WOOD, 0.5);
4660 	design->setCost(MOONLITE, 1);
4661 	design = new Design(invention_defences[2], false);
4662 	design->setCost(BONE, 1);
4663 	design->setCost(MOONLITE, 0.5);
4664 	design = new Design(invention_defences[2], false);
4665 	design->setCost(BONE, 0.5);
4666 	design->setCost(MOONLITE, 1);
4667 	design = new Design(invention_defences[2], false);
4668 	design->setCost(ROCK, 0.5);
4669 	design->setCost(SLATE, 1);
4670 	design = new Design(invention_defences[2], false);
4671 	design->setCost(ROCK, 1);
4672 	design->setCost(SLATE, 0.5);
4673 	design = new Design(invention_defences[2], false);
4674 	design->setCost(WOOD, 1);
4675 	design->setCost(SLATE, 0.5);
4676 	design = new Design(invention_defences[2], false);
4677 	design->setCost(ROCK, 0.5);
4678 	design->setCost(SLATE, 0.5);
4679 	design->setCost(MOONLITE, 0.5);
4680 	design = new Design(invention_defences[2], false);
4681 	design->setCost(BONE, 0.5);
4682 	design->setCost(BETHLIUM, 0.5);
4683 	design->setCost(MOONLITE, 0.5);
4684 	design = new Design(invention_defences[2], false);
4685 	design->setCost(WOOD, 0.5);
4686 	design->setCost(BETHLIUM, 0.5);
4687 	design->setCost(MOONLITE, 0.5);
4688 	design = new Design(invention_defences[2], false);
4689 	design->setCost(BONE, 0.5);
4690 	design->setCost(PLANETARIUM, 1);
4691 	design = new Design(invention_defences[2], false);
4692 	design->setCost(WOOD, 1);
4693 	design->setCost(PLANETARIUM, 0.5);
4694 	design = new Design(invention_defences[2], false);
4695 	design->setCost(ROCK, 1);
4696 	design->setCost(PLANETARIUM, 0.5);
4697 	design = new Design(invention_defences[2], false);
4698 	design->setCost(ROCK, 0.5);
4699 	design->setCost(BONE, 0.5);
4700 	design->setCost(PLANETARIUM, 0.5);
4701 	design = new Design(invention_defences[2], false);
4702 	design->setCost(ROCK, 0.5);
4703 	design->setCost(BONE, 0.5);
4704 	design->setCost(VALIUM, 0.5);
4705 	design = new Design(invention_defences[2], false);
4706 	design->setCost(ROCK, 0.5);
4707 	design->setCost(SOLARIUM, 0.5);
4708 	design->setCost(VALIUM, 0.5);
4709 	design = new Design(invention_defences[2], false);
4710 	design->setCost(MOONLITE, 1);
4711 	design->setCost(PARASITE, 0.5);
4712 	design = new Design(invention_defences[2], false);
4713 	design->setCost(MOONLITE, 0.5);
4714 	design->setCost(PARASITE, 1);
4715 	design = new Design(invention_defences[2], false);
4716 	design->setCost(PLANETARIUM, 0.5);
4717 	design->setCost(PARASITE, 1);
4718 	design = new Design(invention_defences[2], false);
4719 	design->setCost(SLATE, 1);
4720 	design->setCost(PARASITE, 0.5);
4721 	design = new Design(invention_defences[2], false);
4722 	design->setCost(ROCK, 1);
4723 	design->setCost(MOONLITE, 0.5);
4724 	design = new Design(invention_defences[2], false);
4725 	design->setCost(ROCK, 0.5);
4726 	design->setCost(MOONLITE, 1);
4727 	design = new Design(invention_defences[2], false);
4728 	design->setCost(BONE, 0.5);
4729 	design->setCost(VALIUM, 1);
4730 	design = new Design(invention_defences[2], false);
4731 	design->setCost(BONE, 1);
4732 	design->setCost(VALIUM, 0.5);
4733 	design = new Design(invention_defences[2], false);
4734 	design->setCost(MOONLITE, 0.5);
4735 	design->setCost(VALIUM, 1);
4736 	design = new Design(invention_defences[2], false);
4737 	design->setCost(BONE, 1);
4738 	design->setCost(PLANETARIUM, 0.5);
4739 	design = new Design(invention_defences[2], false);
4740 	design->setCost(ROCK, 1);
4741 	design->setCost(VALIUM, 0.5);
4742 	design = new Design(invention_defences[2], false);
4743 	design->setCost(MOONLITE, 1);
4744 	design->setCost(VALIUM, 0.5);
4745 	design = new Design(invention_defences[2], true);
4746 	design->setCost(BONE, 0.5);
4747 	design->setCost(MOONLITE, 0.5);
4748 	design->setCost(VALIUM, 0.5);
4749 	design = new Design(invention_defences[2], false);
4750 	design->setCost(ROCK, 0.5);
4751 	design->setCost(PLANETARIUM, 0.5);
4752 	design->setCost(TEDIUM, 0.5);
4753 	design = new Design(invention_defences[2], false);
4754 	design->setCost(PLANETARIUM, 0.5);
4755 	design->setCost(HERBIRITE, 0.5);
4756 	design->setCost(VALIUM, 0.5);
4757 	design = new Design(invention_defences[2], true);
4758 	design->setCost(WOOD, 0.5);
4759 	design->setCost(PLANETARIUM, 0.5);
4760 	design->setCost(PARASITE, 0.5);
4761 	design = new Design(invention_defences[2], true);
4762 	design->setCost(WOOD, 0.5);
4763 	design->setCost(MOONLITE, 0.5);
4764 	design->setCost(PARASITE, 0.5);
4765 	// ***
4766 	design = new Design(invention_defences[2], false);
4767 	design->setCost(ROCK, 0.5);
4768 	design->setCost(BONE, 0.5);
4769 	design->setCost(PLANETARIUM, 0.5);
4770 	// 3 - cauldron (3)
4771 	// rock, wood, slate, moonlite, aruldite, herbirite, valium, planetarium, bethlium, parasite, solarium, moron, aquarium, marmite
4772 	// ergo: bethlium+valium
4773 	// from tips: bethlium, solarium, aruldite, valium, parasite
4774 	design = new Design(invention_defences[3], false);
4775 	design->setCost(ROCK, 1);
4776 	design->setCost(ARULDITE, 2);
4777 	design = new Design(invention_defences[3], false);
4778 	design->setCost(MOONLITE, 1);
4779 	design->setCost(ARULDITE, 2);
4780 	design = new Design(invention_defences[3], false);
4781 	design->setCost(PLANETARIUM, 1);
4782 	design->setCost(ARULDITE, 2);
4783 	design = new Design(invention_defences[3], false);
4784 	design->setCost(ARULDITE, 3);
4785 	design = new Design(invention_defences[3], false);
4786 	design->setCost(MOONLITE, 1);
4787 	design->setCost(BETHLIUM, 2);
4788 	design = new Design(invention_defences[3], false);
4789 	design->setCost(BONE, 2);
4790 	design->setCost(VALIUM, 1);
4791 	design = new Design(invention_defences[3], false);
4792 	design->setCost(ROCK, 2);
4793 	design->setCost(VALIUM, 1);
4794 	design = new Design(invention_defences[3], true);
4795 	design->setCost(BETHLIUM, 2);
4796 	design->setCost(VALIUM, 1);
4797 	design = new Design(invention_defences[3], true);
4798 	design->setCost(SOLARIUM, 2);
4799 	design->setCost(VALIUM, 1);
4800 	design = new Design(invention_defences[3], false);
4801 	design->setCost(HERBIRITE, 2);
4802 	design->setCost(VALIUM, 1);
4803 	design = new Design(invention_defences[3], false);
4804 	design->setCost(PLANETARIUM, 1);
4805 	design->setCost(SOLARIUM, 2);
4806 	design = new Design(invention_defences[3], false);
4807 	design->setCost(PLANETARIUM, 2);
4808 	design->setCost(VALIUM, 1);
4809 	design = new Design(invention_defences[3], false);
4810 	design->setCost(AQUARIUM, 2);
4811 	design->setCost(VALIUM, 1);
4812 	design = new Design(invention_defences[3], false);
4813 	design->setCost(VALIUM, 3);
4814 	design = new Design(invention_defences[3], false);
4815 	design->setCost(SLATE, 1);
4816 	design->setCost(BETHLIUM, 2);
4817 	design = new Design(invention_defences[3], false);
4818 	design->setCost(SLATE, 1);
4819 	design->setCost(SOLARIUM, 2);
4820 	design = new Design(invention_defences[3], false);
4821 	design->setCost(BETHLIUM, 3);
4822 	design = new Design(invention_defences[3], false);
4823 	design->setCost(SLATE, 2);
4824 	design->setCost(PARASITE, 1);
4825 	design = new Design(invention_defences[3], true);
4826 	design->setCost(BETHLIUM, 2);
4827 	design->setCost(PARASITE, 1);
4828 	design = new Design(invention_defences[3], true);
4829 	design->setCost(ARULDITE, 2);
4830 	design->setCost(PARASITE, 1);
4831 	design = new Design(invention_defences[3], true);
4832 	design->setCost(SOLARIUM, 2);
4833 	design->setCost(PARASITE, 1);
4834 	design = new Design(invention_defences[3], false);
4835 	design->setCost(SOLARIUM, 2);
4836 	design->setCost(AQUARIUM, 1);
4837 	design = new Design(invention_defences[3], false);
4838 	design->setCost(PARASITE, 3);
4839 	design = new Design(invention_defences[3], false);
4840 	design->setCost(SOLARIUM, 3);
4841 	design = new Design(invention_defences[3], false);
4842 	design->setCost(WOOD, 1);
4843 	design->setCost(SOLARIUM, 2);
4844 	design = new Design(invention_defences[3], false);
4845 	design->setCost(WOOD, 1);
4846 	design->setCost(BETHLIUM, 2);
4847 	design = new Design(invention_defences[3], false);
4848 	design->setCost(WOOD, 1);
4849 	design->setCost(ARULDITE, 2);
4850 	design = new Design(invention_defences[3], false);
4851 	design->setCost(BONE, 1);
4852 	design->setCost(SOLARIUM, 2);
4853 	design = new Design(invention_defences[3], false);
4854 	design->setCost(BETHLIUM, 1);
4855 	design->setCost(SOLARIUM, 2);
4856 	design = new Design(invention_defences[3], false);
4857 	design->setCost(SOLARIUM, 1);
4858 	design->setCost(ARULDITE, 2);
4859 	design = new Design(invention_defences[3], false);
4860 	design->setCost(BETHLIUM, 2);
4861 	design->setCost(ARULDITE, 1);
4862 	design = new Design(invention_defences[3], false);
4863 	design->setCost(HERBIRITE, 1);
4864 	design->setCost(ARULDITE, 2);
4865 	design = new Design(invention_defences[3], false);
4866 	design->setCost(BETHLIUM, 2);
4867 	design->setCost(MORON, 1);
4868 	design = new Design(invention_defences[3], false);
4869 	design->setCost(ARULDITE, 2);
4870 	design->setCost(MORON, 1);
4871 	design = new Design(invention_defences[3], false);
4872 	design->setCost(ARULDITE, 2);
4873 	design->setCost(AQUARIUM, 1);
4874 	design = new Design(invention_defences[3], false);
4875 	design->setCost(ARULDITE, 2);
4876 	design->setCost(ONION, 1);
4877 	design = new Design(invention_defences[3], false);
4878 	design->setCost(PARASITE, 1);
4879 	design->setCost(MARMITE, 2);
4880 	design = new Design(invention_defences[3], false);
4881 	design->setCost(BETHLIUM, 2);
4882 	design->setCost(TEDIUM, 1);
4883 	design = new Design(invention_defences[3], false);
4884 	design->setCost(BETHLIUM, 2);
4885 	design->setCost(ONION, 1);
4886 	design = new Design(invention_defences[3], false);
4887 	design->setCost(VALIUM, 1);
4888 	design->setCost(ONION, 2);
4889 	// 4 - crossbow (1.5)
4890 	// rock, bone, wood, slate, bethlium, solarium, planetarium, aruldite, tedium, aquarium, paladium, moron, yeridium
4891 	// ergo: wood+solarium+paladium, wood+bethlium+aquarium
4892 	// from tips: rock, wood, bone, aruldite
4893 	design = new Design(invention_defences[4], false);
4894 	design->setCost(BONE, 0.5);
4895 	design->setCost(BETHLIUM, 1);
4896 	design = new Design(invention_defences[4], false);
4897 	design->setCost(WOOD, 1);
4898 	design->setCost(BETHLIUM, 0.5);
4899 	design = new Design(invention_defences[4], false);
4900 	design->setCost(WOOD, 1);
4901 	design->setCost(AQUARIUM, 0.5);
4902 	design = new Design(invention_defences[4], false);
4903 	design->setCost(WOOD, 0.5);
4904 	design->setCost(AQUARIUM, 1);
4905 	design = new Design(invention_defences[4], false);
4906 	design->setCost(WOOD, 1);
4907 	design->setCost(ARULDITE, 0.5);
4908 	design = new Design(invention_defences[4], false);
4909 	design->setCost(WOOD, 0.5);
4910 	design->setCost(ARULDITE, 1);
4911 	design = new Design(invention_defences[4], false);
4912 	design->setCost(ROCK, 1);
4913 	design->setCost(ARULDITE, 0.5);
4914 	design = new Design(invention_defences[4], false);
4915 	design->setCost(ROCK, 1);
4916 	design->setCost(SOLARIUM, 0.5);
4917 	design = new Design(invention_defences[4], false);
4918 	design->setCost(ROCK, 0.5);
4919 	design->setCost(BETHLIUM, 1);
4920 	design = new Design(invention_defences[4], false);
4921 	design->setCost(ARULDITE, 1);
4922 	design->setCost(AQUARIUM, 0.5);
4923 	design = new Design(invention_defences[4], false);
4924 	design->setCost(ARULDITE, 0.5);
4925 	design->setCost(AQUARIUM, 1);
4926 	design = new Design(invention_defences[4], false);
4927 	design->setCost(BETHLIUM, 1);
4928 	design->setCost(AQUARIUM, 0.5);
4929 	design = new Design(invention_defences[4], false);
4930 	design->setCost(BONE, 1);
4931 	design->setCost(BETHLIUM, 0.5);
4932 	design = new Design(invention_defences[4], false);
4933 	design->setCost(BONE, 1);
4934 	design->setCost(AQUARIUM, 0.5);
4935 	design = new Design(invention_defences[4], false);
4936 	design->setCost(BONE, 1);
4937 	design->setCost(SOLARIUM, 0.5);
4938 	design = new Design(invention_defences[4], false);
4939 	design->setCost(SOLARIUM, 1);
4940 	design->setCost(AQUARIUM, 0.5);
4941 	design = new Design(invention_defences[4], false);
4942 	design->setCost(BONE, 1);
4943 	design->setCost(ARULDITE, 0.5);
4944 	design = new Design(invention_defences[4], false);
4945 	design->setCost(WOOD, 0.5);
4946 	design->setCost(SOLARIUM, 1);
4947 	design = new Design(invention_defences[4], false);
4948 	design->setCost(WOOD, 0.5);
4949 	design->setCost(SLATE, 0.5);
4950 	design->setCost(SOLARIUM, 0.5);
4951 	design = new Design(invention_defences[4], false);
4952 	design->setCost(BONE, 0.5);
4953 	design->setCost(MOONLITE, 0.5);
4954 	design->setCost(SOLARIUM, 0.5);
4955 	design = new Design(invention_defences[4], true);
4956 	design->setCost(WOOD, 0.5);
4957 	design->setCost(PALADIUM, 0.5);
4958 	design->setCost(SOLARIUM, 0.5);
4959 	design = new Design(invention_defences[4], true);
4960 	design->setCost(WOOD, 0.5);
4961 	design->setCost(BETHLIUM, 0.5);
4962 	design->setCost(AQUARIUM, 0.5);
4963 	design = new Design(invention_defences[4], true);
4964 	design->setCost(BONE, 0.5);
4965 	design->setCost(ARULDITE, 0.5);
4966 	design->setCost(AQUARIUM, 0.5);
4967 	design = new Design(invention_defences[4], false);
4968 	design->setCost(WOOD, 0.5);
4969 	design->setCost(BONE, 0.5);
4970 	design->setCost(AQUARIUM, 0.5);
4971 	design = new Design(invention_defences[4], false);
4972 	design->setCost(WOOD, 0.5);
4973 	design->setCost(MOONLITE, 0.5);
4974 	design->setCost(AQUARIUM, 0.5);
4975 	design = new Design(invention_defences[4], false);
4976 	design->setCost(WOOD, 0.5);
4977 	design->setCost(HERBIRITE, 0.5);
4978 	design->setCost(AQUARIUM, 0.5);
4979 	design = new Design(invention_defences[4], false);
4980 	design->setCost(BETHLIUM, 0.5);
4981 	design->setCost(HERBIRITE, 0.5);
4982 	design->setCost(PALADIUM, 0.5);
4983 	design = new Design(invention_defences[4], false);
4984 	design->setCost(ROCK, 1);
4985 	design->setCost(PALADIUM, 0.5);
4986 	design = new Design(invention_defences[4], false);
4987 	design->setCost(WOOD, 0.5);
4988 	design->setCost(PALADIUM, 1);
4989 	design = new Design(invention_defences[4], false);
4990 	design->setCost(WOOD, 1);
4991 	design->setCost(PALADIUM, 0.5);
4992 	design = new Design(invention_defences[4], false);
4993 	design->setCost(ROCK, 0.5);
4994 	design->setCost(PALADIUM, 1);
4995 	design = new Design(invention_defences[4], false);
4996 	design->setCost(BETHLIUM, 0.5);
4997 	design->setCost(PALADIUM, 1);
4998 	design = new Design(invention_defences[4], false);
4999 	design->setCost(WOOD, 0.5);
5000 	design->setCost(ROCK, 0.5);
5001 	design->setCost(PALADIUM, 0.5);
5002 	design = new Design(invention_defences[4], false);
5003 	design->setCost(ROCK, 0.5);
5004 	design->setCost(PLANETARIUM, 0.5);
5005 	design->setCost(ARULDITE, 0.5);
5006 	design = new Design(invention_defences[4], false);
5007 	design->setCost(BONE, 0.5);
5008 	design->setCost(SOLARIUM, 0.5);
5009 	design->setCost(ARULDITE, 0.5);
5010 	design = new Design(invention_defences[4], false);
5011 	design->setCost(BONE, 0.5);
5012 	design->setCost(PLANETARIUM, 0.5);
5013 	design->setCost(ARULDITE, 0.5);
5014 	design = new Design(invention_defences[4], true);
5015 	design->setCost(ROCK, 0.5);
5016 	design->setCost(ARULDITE, 0.5);
5017 	design->setCost(AQUARIUM, 0.5);
5018 	design = new Design(invention_defences[4], false);
5019 	design->setCost(WOOD, 0.5);
5020 	design->setCost(SOLARIUM, 0.5);
5021 	design->setCost(YERIDIUM, 0.5);
5022 	design = new Design(invention_defences[4], false);
5023 	design->setCost(WOOD, 0.5);
5024 	design->setCost(YERIDIUM, 0.5);
5025 	design->setCost(AQUARIUM, 0.5);
5026 	design = new Design(invention_defences[4], false);
5027 	design->setCost(ARULDITE, 0.5);
5028 	design->setCost(YERIDIUM, 0.5);
5029 	design->setCost(AQUARIUM, 0.5);
5030 	design = new Design(invention_defences[4], false);
5031 	design->setCost(ROCK, 0.5);
5032 	design->setCost(ARULDITE, 0.5);
5033 	design->setCost(TEDIUM, 0.5);
5034 	design = new Design(invention_defences[4], false);
5035 	design->setCost(ROCK, 0.5);
5036 	design->setCost(ARULDITE, 0.5);
5037 	design->setCost(MORON, 0.5);
5038 	design = new Design(invention_defences[4], false);
5039 	design->setCost(WOOD, 0.5);
5040 	design->setCost(ARULDITE, 0.5);
5041 	design->setCost(ONION, 0.5);
5042 	design = new Design(invention_defences[4], false);
5043 	design->setCost(ROCK, 0.5);
5044 	design->setCost(SOLARIUM, 0.5);
5045 	design->setCost(VALIUM, 0.5);
5046 	// 5 - musket (2)
5047 	// wood, bone, slate, moonlite, onion, planetarium, tedium, valium, onion, herbirite, parasite, yeridium
5048 	// ergo: ?
5049 	// from tips: slate, moonlite, planetarium, valium, parasite
5050 	design = new Design(invention_defences[5], false);
5051 	design->setCost(MOONLITE, 1.5);
5052 	design->setCost(ONION, 0.5);
5053 	design = new Design(invention_defences[5], false);
5054 	design->setCost(WOOD, 0.5);
5055 	design->setCost(SLATE, 1);
5056 	design->setCost(ONION, 0.5);
5057 	design = new Design(invention_defences[5], false);
5058 	design->setCost(BONE, 0.5);
5059 	design->setCost(SLATE, 1);
5060 	design->setCost(VALIUM, 0.5);
5061 	design = new Design(invention_defences[5], false);
5062 	design->setCost(SLATE, 1);
5063 	design->setCost(BETHLIUM, 0.5);
5064 	design->setCost(ONION, 0.5);
5065 	design = new Design(invention_defences[5], false);
5066 	design->setCost(SLATE, 1);
5067 	design->setCost(PARASITE, 1);
5068 	design = new Design(invention_defences[5], false);
5069 	design->setCost(MOONLITE, 1);
5070 	design->setCost(PARASITE, 1);
5071 	design = new Design(invention_defences[5], false);
5072 	design->setCost(MOONLITE, 1.5);
5073 	design->setCost(PARASITE, 0.5);
5074 	design = new Design(invention_defences[5], false);
5075 	design->setCost(SLATE, 1);
5076 	design->setCost(TEDIUM, 1);
5077 	design = new Design(invention_defences[5], false);
5078 	design->setCost(SLATE, 1);
5079 	design->setCost(ONION, 1);
5080 	design = new Design(invention_defences[5], false);
5081 	design->setCost(SLATE, 1.5);
5082 	design->setCost(ONION, 0.5);
5083 	design = new Design(invention_defences[5], false);
5084 	design->setCost(ROCK, 0.5);
5085 	design->setCost(PLANETARIUM, 1);
5086 	design->setCost(TEDIUM, 0.5);
5087 	design = new Design(invention_defences[5], false);
5088 	design->setCost(PLANETARIUM, 1);
5089 	design->setCost(TEDIUM, 1);
5090 	design = new Design(invention_defences[5], false);
5091 	design->setCost(VALIUM, 1.5);
5092 	design->setCost(ONION, 0.5);
5093 	design = new Design(invention_defences[5], false);
5094 	design->setCost(SLATE, 1.5);
5095 	design->setCost(VALIUM, 0.5);
5096 	design = new Design(invention_defences[5], false);
5097 	design->setCost(VALIUM, 1);
5098 	design->setCost(TEDIUM, 1);
5099 	design = new Design(invention_defences[5], false);
5100 	design->setCost(SLATE, 1);
5101 	design->setCost(YERIDIUM, 0.5);
5102 	design->setCost(PARASITE, 0.5);
5103 	design = new Design(invention_defences[5], false);
5104 	design->setCost(MOONLITE, 1);
5105 	design->setCost(YERIDIUM, 0.5);
5106 	design->setCost(TEDIUM, 0.5);
5107 	design = new Design(invention_defences[5], false);
5108 	design->setCost(YERIDIUM, 1);
5109 	design->setCost(PARASITE, 0.5);
5110 	design->setCost(TEDIUM, 0.5);
5111 	design = new Design(invention_defences[5], false);
5112 	design->setCost(PARASITE, 0.5);
5113 	design->setCost(TEDIUM, 0.5);
5114 	design->setCost(MARMITE, 1);
5115 	design = new Design(invention_defences[5], false);
5116 	design->setCost(MOONLITE, 1.5);
5117 	design->setCost(TEDIUM, 0.5);
5118 	design = new Design(invention_defences[5], false);
5119 	design->setCost(MOONLITE, 1);
5120 	design->setCost(TEDIUM, 1);
5121 	design = new Design(invention_defences[5], false);
5122 	design->setCost(PLANETARIUM, 1.5);
5123 	design->setCost(ONION, 0.5);
5124 	design = new Design(invention_defences[5], false);
5125 	design->setCost(PLANETARIUM, 1);
5126 	design->setCost(ONION, 1);
5127 	design = new Design(invention_defences[5], false);
5128 	design->setCost(PLANETARIUM, 1);
5129 	design->setCost(HERBIRITE, 0.5);
5130 	design->setCost(ONION, 0.5);
5131 	design = new Design(invention_defences[5], false);
5132 	design->setCost(ROCK, 1);
5133 	design->setCost(VALIUM, 0.5);
5134 	design->setCost(ONION, 0.5);
5135 	design = new Design(invention_defences[5], false);
5136 	design->setCost(SLATE, 1);
5137 	design->setCost(HERBIRITE, 0.5);
5138 	design->setCost(VALIUM, 0.5);
5139 	design = new Design(invention_defences[5], false);
5140 	design->setCost(SLATE, 1);
5141 	design->setCost(TEDIUM, 0.5);
5142 	design->setCost(MARMITE, 0.5);
5143 	// 6 - machine gun (2.5)
5144 	// wood, bone, slate, valium, onion, planetarium, solarium, tedium, parasite, marmite, aquarium, yeridium, moonlite
5145 	// ergo: ?
5146 	// from tips: slate, moonlite, planetarium, valium, parasite, onion, tedium
5147 	design = new Design(invention_defences[6], false);
5148 	design->setCost(WOOD, 1);
5149 	design->setCost(SLATE, 0.5);
5150 	design->setCost(ONION, 1);
5151 	design = new Design(invention_defences[6], false);
5152 	design->setCost(BONE, 0.5);
5153 	design->setCost(VALIUM, 1);
5154 	design->setCost(ONION, 1);
5155 	design = new Design(invention_defences[6], false);
5156 	design->setCost(ROCK, 0.5);
5157 	design->setCost(VALIUM, 1);
5158 	design->setCost(ONION, 1);
5159 	design = new Design(invention_defences[6], false);
5160 	design->setCost(SLATE, 0.5);
5161 	design->setCost(BETHLIUM, 1);
5162 	design->setCost(ONION, 1);
5163 	design = new Design(invention_defences[6], false);
5164 	design->setCost(SLATE, 0.5);
5165 	design->setCost(PARASITE, 1);
5166 	design->setCost(AQUARIUM, 1);
5167 	design = new Design(invention_defences[6], true);
5168 	design->setCost(SLATE, 0.5);
5169 	design->setCost(PARASITE, 1);
5170 	design->setCost(TEDIUM, 1);
5171 	design = new Design(invention_defences[6], false);
5172 	design->setCost(SLATE, 0.5);
5173 	design->setCost(ARULDITE, 1);
5174 	design->setCost(TEDIUM, 1);
5175 	design = new Design(invention_defences[6], false);
5176 	design->setCost(SLATE, 1.5);
5177 	design->setCost(PARASITE, 1);
5178 	design = new Design(invention_defences[6], false);
5179 	design->setCost(MOONLITE, 1.5);
5180 	design->setCost(PARASITE, 1);
5181 	design = new Design(invention_defences[6], false);
5182 	design->setCost(SLATE, 1.5);
5183 	design->setCost(VALIUM, 1);
5184 	design = new Design(invention_defences[6], false);
5185 	design->setCost(SLATE, 0.5);
5186 	design->setCost(VALIUM, 2);
5187 	design = new Design(invention_defences[6], false);
5188 	design->setCost(SLATE, 0.5);
5189 	design->setCost(TEDIUM, 2);
5190 	design = new Design(invention_defences[6], false);
5191 	design->setCost(SLATE, 1.5);
5192 	design->setCost(TEDIUM, 1);
5193 	design = new Design(invention_defences[6], false);
5194 	design->setCost(VALIUM, 1.5);
5195 	design->setCost(ONION, 1);
5196 	design = new Design(invention_defences[6], false);
5197 	design->setCost(VALIUM, 1);
5198 	design->setCost(AQUARIUM, 0.5);
5199 	design->setCost(ONION, 1);
5200 	design = new Design(invention_defences[6], false);
5201 	design->setCost(VALIUM, 1.5);
5202 	design->setCost(TEDIUM, 1);
5203 	design = new Design(invention_defences[6], false);
5204 	design->setCost(MOONLITE, 0.5);
5205 	design->setCost(AQUARIUM, 1);
5206 	design->setCost(TEDIUM, 1);
5207 	design = new Design(invention_defences[6], false);
5208 	design->setCost(PLANETARIUM, 1.5);
5209 	design->setCost(ONION, 1);
5210 	design = new Design(invention_defences[6], false);
5211 	design->setCost(PLANETARIUM, 0.5);
5212 	design->setCost(TEDIUM, 2);
5213 	design = new Design(invention_defences[6], false);
5214 	design->setCost(PLANETARIUM, 1.5);
5215 	design->setCost(TEDIUM, 1);
5216 	design = new Design(invention_defences[6], false);
5217 	design->setCost(MOONLITE, 0.5);
5218 	design->setCost(TEDIUM, 2);
5219 	design = new Design(invention_defences[6], false);
5220 	design->setCost(MOONLITE, 1.5);
5221 	design->setCost(TEDIUM, 1);
5222 	design = new Design(invention_defences[6], false);
5223 	design->setCost(MOONLITE, 1.5);
5224 	design->setCost(ONION, 1);
5225 	design = new Design(invention_defences[6], false);
5226 	design->setCost(SLATE, 0.5);
5227 	design->setCost(ONION, 2);
5228 	design = new Design(invention_defences[6], false);
5229 	design->setCost(SLATE, 1.5);
5230 	design->setCost(ONION, 1);
5231 	design = new Design(invention_defences[6], false);
5232 	design->setCost(PARASITE, 1.5);
5233 	design->setCost(ONION, 1);
5234 	design = new Design(invention_defences[6], false);
5235 	design->setCost(PARASITE, 1);
5236 	design->setCost(TEDIUM, 1.5);
5237 	design = new Design(invention_defences[6], false);
5238 	design->setCost(PARASITE, 1.5);
5239 	design->setCost(TEDIUM, 1);
5240 	design = new Design(invention_defences[6], false);
5241 	design->setCost(PLANETARIUM, 0.5);
5242 	design->setCost(SOLARIUM, 1);
5243 	design->setCost(TEDIUM, 1);
5244 	design = new Design(invention_defences[6], true);
5245 	design->setCost(PLANETARIUM, 0.5);
5246 	design->setCost(VALIUM, 1);
5247 	design->setCost(TEDIUM, 1);
5248 	design = new Design(invention_defences[6], false);
5249 	design->setCost(PLANETARIUM, 0.5);
5250 	design->setCost(ONION, 1);
5251 	design->setCost(MARMITE, 1);
5252 	design = new Design(invention_defences[6], false);
5253 	design->setCost(PARASITE, 1);
5254 	design->setCost(ONION, 1);
5255 	design->setCost(MARMITE, 0.5);
5256 	design = new Design(invention_defences[6], false);
5257 	design->setCost(SLATE, 0.5);
5258 	design->setCost(YERIDIUM, 1);
5259 	design->setCost(PARASITE, 1);
5260 	design = new Design(invention_defences[6], false);
5261 	design->setCost(SLATE, 0.5);
5262 	design->setCost(HERBIRITE, 1);
5263 	design->setCost(PARASITE, 1);
5264 	design = new Design(invention_defences[6], false);
5265 	design->setCost(SLATE, 0.5);
5266 	design->setCost(TEDIUM, 1);
5267 	design->setCost(MARMITE, 1);
5268 	design = new Design(invention_defences[6], false);
5269 	design->setCost(MOONLITE, 0.5);
5270 	design->setCost(YERIDIUM, 1);
5271 	design->setCost(TEDIUM, 1);
5272 	design = new Design(invention_defences[6], false);
5273 	design->setCost(ROCK, 1);
5274 	design->setCost(SLATE, 0.5);
5275 	design->setCost(TEDIUM, 1);
5276 	design = new Design(invention_defences[6], false);
5277 	design->setCost(MOONLITE, 0.5);
5278 	design->setCost(PARASITE, 1);
5279 	design->setCost(MARMITE, 1);
5280 	design = new Design(invention_defences[6], false);
5281 	design->setCost(PARASITE, 1);
5282 	design->setCost(TEDIUM, 1);
5283 	design->setCost(MARMITE, 0.5);
5284 	// 7 - bazooka (3)
5285 	// slate, wood, bone, paladium, valium, onion, tedium, moron, marmite, planetarium, yeridium, aruldite, parasite, aquarium, bethlium, solarium
5286 	// ergo: ?
5287 	// from tips: aquarium, paladium, onion, tedium
5288 	design = new Design(invention_defences[7], false);
5289 	design->setCost(WOOD, 2);
5290 	design->setCost(PALADIUM, 1);
5291 	design = new Design(invention_defences[7], false);
5292 	design->setCost(ROCK, 2);
5293 	design->setCost(PALADIUM, 1);
5294 	design = new Design(invention_defences[7], false);
5295 	design->setCost(ROCK, 2);
5296 	design->setCost(AQUARIUM, 1);
5297 	design = new Design(invention_defences[7], false);
5298 	design->setCost(WOOD, 2);
5299 	design->setCost(AQUARIUM, 1);
5300 	design = new Design(invention_defences[7], false);
5301 	design->setCost(WOOD, 1);
5302 	design->setCost(TEDIUM, 2);
5303 	design = new Design(invention_defences[7], false);
5304 	design->setCost(BETHLIUM, 2);
5305 	design->setCost(PALADIUM, 1);
5306 	design = new Design(invention_defences[7], false);
5307 	design->setCost(BONE, 1);
5308 	design->setCost(ONION, 2);
5309 	design = new Design(invention_defences[7], false);
5310 	design->setCost(BONE, 1);
5311 	design->setCost(TEDIUM, 2);
5312 	design = new Design(invention_defences[7], false);
5313 	design->setCost(BONE, 2);
5314 	design->setCost(AQUARIUM, 1);
5315 	design = new Design(invention_defences[7], false);
5316 	design->setCost(HERBIRITE, 2);
5317 	design->setCost(AQUARIUM, 1);
5318 	design = new Design(invention_defences[7], false);
5319 	design->setCost(SOLARIUM, 2);
5320 	design->setCost(AQUARIUM, 1);
5321 	design = new Design(invention_defences[7], false);
5322 	design->setCost(SLATE, 1);
5323 	design->setCost(ONION, 2);
5324 	design = new Design(invention_defences[7], false);
5325 	design->setCost(SLATE, 1);
5326 	design->setCost(TEDIUM, 2);
5327 	design = new Design(invention_defences[7], false);
5328 	design->setCost(SLATE, 2);
5329 	design->setCost(PALADIUM, 1);
5330 	design = new Design(invention_defences[7], false);
5331 	design->setCost(PALADIUM, 1);
5332 	design->setCost(MARMITE, 2);
5333 	design = new Design(invention_defences[7], true);
5334 	design->setCost(PALADIUM, 1);
5335 	design->setCost(TEDIUM, 2);
5336 	design = new Design(invention_defences[7], true);
5337 	design->setCost(PALADIUM, 1);
5338 	design->setCost(ONION, 2);
5339 	design = new Design(invention_defences[7], true);
5340 	design->setCost(AQUARIUM, 1);
5341 	design->setCost(ONION, 2);
5342 	design = new Design(invention_defences[7], false);
5343 	design->setCost(VALIUM, 1);
5344 	design->setCost(ONION, 2);
5345 	design = new Design(invention_defences[7], false);
5346 	design->setCost(VALIUM, 2);
5347 	design->setCost(PALADIUM, 1);
5348 	design = new Design(invention_defences[7], false);
5349 	design->setCost(ONION, 3);
5350 	design = new Design(invention_defences[7], false);
5351 	design->setCost(AQUARIUM, 3);
5352 	design = new Design(invention_defences[7], false);
5353 	design->setCost(AQUARIUM, 1);
5354 	design->setCost(MORON, 2);
5355 	design = new Design(invention_defences[7], false);
5356 	design->setCost(PALADIUM, 1);
5357 	design->setCost(MORON, 2);
5358 	design = new Design(invention_defences[7], false);
5359 	design->setCost(PALADIUM, 3);
5360 	design = new Design(invention_defences[7], false);
5361 	design->setCost(TEDIUM, 2);
5362 	design->setCost(MARMITE, 1);
5363 	design = new Design(invention_defences[7], false);
5364 	design->setCost(AQUARIUM, 1);
5365 	design->setCost(MARMITE, 2);
5366 	design = new Design(invention_defences[7], false);
5367 	design->setCost(ONION, 2);
5368 	design->setCost(MARMITE, 1);
5369 	design = new Design(invention_defences[7], false);
5370 	design->setCost(TEDIUM, 3);
5371 	design = new Design(invention_defences[7], false);
5372 	design->setCost(PLANETARIUM, 1);
5373 	design->setCost(TEDIUM, 2);
5374 	design = new Design(invention_defences[7], false);
5375 	design->setCost(PLANETARIUM, 1);
5376 	design->setCost(ONION, 2);
5377 	design = new Design(invention_defences[7], false);
5378 	design->setCost(YERIDIUM, 2);
5379 	design->setCost(PALADIUM, 1);
5380 	design = new Design(invention_defences[7], false);
5381 	design->setCost(YERIDIUM, 2);
5382 	design->setCost(AQUARIUM, 1);
5383 	design = new Design(invention_defences[7], false);
5384 	design->setCost(YERIDIUM, 1);
5385 	design->setCost(TEDIUM, 2);
5386 	design = new Design(invention_defences[7], false);
5387 	design->setCost(ARULDITE, 1);
5388 	design->setCost(ONION, 2);
5389 	design = new Design(invention_defences[7], false);
5390 	design->setCost(ARULDITE, 2);
5391 	design->setCost(AQUARIUM, 1);
5392 	design = new Design(invention_defences[7], false);
5393 	design->setCost(ARULDITE, 2);
5394 	design->setCost(PALADIUM, 1);
5395 	design = new Design(invention_defences[7], false);
5396 	design->setCost(ARULDITE, 1);
5397 	design->setCost(TEDIUM, 2);
5398 	design = new Design(invention_defences[7], true);
5399 	design->setCost(AQUARIUM, 1);
5400 	design->setCost(TEDIUM, 2);
5401 	design = new Design(invention_defences[7], false);
5402 	design->setCost(AQUARIUM, 1);
5403 	design->setCost(PALADIUM, 2);
5404 	design = new Design(invention_defences[7], true); // not ergo in Epoch 8, Xtra ???
5405 	design->setCost(BETHLIUM, 1);
5406 	design->setCost(TEDIUM, 2);
5407 	design = new Design(invention_defences[7], false);
5408 	design->setCost(MOONLITE, 2);
5409 	design->setCost(PALADIUM, 1);
5410 	design = new Design(invention_defences[7], false);
5411 	design->setCost(PARASITE, 2);
5412 	design->setCost(PALADIUM, 1);
5413 	design = new Design(invention_defences[7], false);
5414 	design->setCost(PARASITE, 1);
5415 	design->setCost(TEDIUM, 2);
5416 	// 8 - nuclear defence (5.5)
5417 	// rock, wood, bone, slate, aruldite, paladium, aquarium, marmite, onion, planetarium, alien, solarium, bethlium, valium
5418 	// ergo: ?
5419 	// from tips: wood, rock, bone, aquarium, paladium, marmite
5420 	design = new Design(invention_defences[8], false);
5421 	design->setCost(ROCK, 0.5);
5422 	design->setCost(MARMITE, 5);
5423 	design = new Design(invention_defences[8], false);
5424 	design->setCost(ROCK, 2.5);
5425 	design->setCost(MARMITE, 3);
5426 	design = new Design(invention_defences[8], true);
5427 	design->setCost(ROCK, 0.5);
5428 	design->setCost(PALADIUM, 2);
5429 	design->setCost(MARMITE, 3);
5430 	design = new Design(invention_defences[8], false);
5431 	design->setCost(ROCK, 0.5);
5432 	design->setCost(YERIDIUM, 2);
5433 	design->setCost(MARMITE, 3);
5434 	design = new Design(invention_defences[8], false);
5435 	design->setCost(ROCK, 0.5);
5436 	design->setCost(YERIDIUM, 3);
5437 	design->setCost(PALADIUM, 2);
5438 	design = new Design(invention_defences[8], false);
5439 	design->setCost(ROCK, 0.5);
5440 	design->setCost(HERBIRITE, 3);
5441 	design->setCost(PALADIUM, 2);
5442 	design = new Design(invention_defences[8], false);
5443 	design->setCost(WOOD, 0.5);
5444 	design->setCost(SLATE, 3);
5445 	design->setCost(PALADIUM, 2);
5446 	design = new Design(invention_defences[8], false);
5447 	design->setCost(WOOD, 0.5);
5448 	design->setCost(ARULDITE, 3);
5449 	design->setCost(PALADIUM, 2);
5450 	design = new Design(invention_defences[8], false);
5451 	design->setCost(WOOD, 0.5);
5452 	design->setCost(PALADIUM, 2);
5453 	design->setCost(TEDIUM, 3);
5454 	design = new Design(invention_defences[8], false);
5455 	design->setCost(WOOD, 0.5);
5456 	design->setCost(YERIDIUM, 3);
5457 	design->setCost(PALADIUM, 2);
5458 	design = new Design(invention_defences[8], false);
5459 	design->setCost(WOOD, 0.5);
5460 	design->setCost(VALIUM, 3);
5461 	design->setCost(PALADIUM, 2);
5462 	design = new Design(invention_defences[8], false);
5463 	design->setCost(WOOD, 3.5);
5464 	design->setCost(PALADIUM, 2);
5465 	design = new Design(invention_defences[8], false);
5466 	design->setCost(WOOD, 3.5);
5467 	design->setCost(AQUARIUM, 2);
5468 	design = new Design(invention_defences[8], false);
5469 	design->setCost(BONE, 0.5);
5470 	design->setCost(MARMITE, 5);
5471 	design = new Design(invention_defences[8], false);
5472 	design->setCost(BONE, 2.5);
5473 	design->setCost(MARMITE, 3);
5474 	design = new Design(invention_defences[8], false);
5475 	design->setCost(BONE, 0.5);
5476 	design->setCost(SLATE, 2);
5477 	design->setCost(MARMITE, 3);
5478 	design = new Design(invention_defences[8], false);
5479 	design->setCost(BONE, 0.5);
5480 	design->setCost(VALIUM, 2);
5481 	design->setCost(MARMITE, 3);
5482 	design = new Design(invention_defences[8], false);
5483 	design->setCost(BONE, 0.5);
5484 	design->setCost(TEDIUM, 2);
5485 	design->setCost(MARMITE, 3);
5486 	design = new Design(invention_defences[8], false);
5487 	design->setCost(BONE, 0.5);
5488 	design->setCost(PLANETARIUM, 3);
5489 	design->setCost(AQUARIUM, 2);
5490 	design = new Design(invention_defences[8], false);
5491 	design->setCost(SLATE, 0.5);
5492 	design->setCost(AQUARIUM, 2);
5493 	design->setCost(MARMITE, 3);
5494 	design = new Design(invention_defences[8], true);
5495 	design->setCost(ROCK, 0.5);
5496 	design->setCost(AQUARIUM, 2);
5497 	design->setCost(MARMITE, 3);
5498 	design = new Design(invention_defences[8], false);
5499 	design->setCost(ARULDITE, 0.5);
5500 	design->setCost(AQUARIUM, 2);
5501 	design->setCost(MARMITE, 3);
5502 	design = new Design(invention_defences[8], false);
5503 	design->setCost(AQUARIUM, 2.5);
5504 	design->setCost(MARMITE, 3);
5505 	design = new Design(invention_defences[8], false);
5506 	design->setCost(AQUARIUM, 2);
5507 	design->setCost(MARMITE, 3.5);
5508 	design = new Design(invention_defences[8], false);
5509 	design->setCost(AQUARIUM, 2);
5510 	design->setCost(ONION, 0.5);
5511 	design->setCost(MARMITE, 3);
5512 	design = new Design(invention_defences[8], false);
5513 	design->setCost(PLANETARIUM, 0.5);
5514 	design->setCost(AQUARIUM, 2);
5515 	design->setCost(MARMITE, 3);
5516 	design = new Design(invention_defences[8], false);
5517 	design->setCost(PALADIUM, 2);
5518 	design->setCost(MARMITE, 3.5);
5519 	design = new Design(invention_defences[8], false);
5520 	design->setCost(PALADIUM, 2.5);
5521 	design->setCost(MARMITE, 3);
5522 	design = new Design(invention_defences[8], false);
5523 	design->setCost(PALADIUM, 2);
5524 	design->setCost(MARMITE, 3);
5525 	design->setCost(ALIEN, 0.5);
5526 	design = new Design(invention_defences[8], false);
5527 	design->setCost(SOLARIUM, 0.5);
5528 	design->setCost(PALADIUM, 2);
5529 	design->setCost(MARMITE, 3);
5530 	design = new Design(invention_defences[8], false);
5531 	design->setCost(BETHLIUM, 0.5);
5532 	design->setCost(AQUARIUM, 2);
5533 	design->setCost(MARMITE, 3);
5534 	design = new Design(invention_defences[8], false);
5535 	design->setCost(YERIDIUM, 0.5);
5536 	design->setCost(AQUARIUM, 2);
5537 	design->setCost(MARMITE, 3);
5538 	design = new Design(invention_defences[8], false);
5539 	design->setCost(PALADIUM, 2);
5540 	design->setCost(MORON, 0.5);
5541 	design->setCost(MARMITE, 3);
5542 	design = new Design(invention_defences[8], false);
5543 	design->setCost(AQUARIUM, 2);
5544 	design->setCost(MORON, 0.5);
5545 	design->setCost(MARMITE, 3);
5546 	design = new Design(invention_defences[8], false);
5547 	design->setCost(AQUARIUM, 2);
5548 	design->setCost(TEDIUM, 0.5);
5549 	design->setCost(MARMITE, 3);
5550 	design = new Design(invention_defences[8], false);
5551 	design->setCost(WOOD, 0.5);
5552 	design->setCost(MOONLITE, 2);
5553 	design->setCost(MARMITE, 3);
5554 	design = new Design(invention_defences[8], false);
5555 	design->setCost(WOOD, 0.5);
5556 	design->setCost(VALIUM, 2);
5557 	design->setCost(MARMITE, 3);
5558 	design = new Design(invention_defences[8], false);
5559 	design->setCost(WOOD, 0.5);
5560 	design->setCost(MORON, 2);
5561 	design->setCost(MARMITE, 3);
5562 	design = new Design(invention_defences[8], false);
5563 	design->setCost(WOOD, 0.5);
5564 	design->setCost(MARMITE, 3);
5565 	design->setCost(ALIEN, 2);
5566 	design = new Design(invention_defences[8], false);
5567 	design->setCost(WOOD, 2.5);
5568 	design->setCost(MARMITE, 3);
5569 	// 9 - sdi laser (5)
5570 	// slate, bethlium, aruldite, moron, alien, solarium, paladium
5571 	// ergo: ?
5572 	// from tips: moron, alien
5573 	design = new Design(invention_defences[9], false);
5574 	design->setCost(SLATE, 1.5);
5575 	design->setCost(ALIEN, 3.5);
5576 	design = new Design(invention_defences[9], false);
5577 	design->setCost(SLATE, 3.5);
5578 	design->setCost(MORON, 1.5);
5579 	design = new Design(invention_defences[9], false);
5580 	design->setCost(WOOD, 3.5);
5581 	design->setCost(MORON, 1.5);
5582 	design = new Design(invention_defences[9], false);
5583 	design->setCost(BETHLIUM, 1.5);
5584 	design->setCost(ALIEN, 3.5);
5585 	design = new Design(invention_defences[9], false);
5586 	design->setCost(BETHLIUM, 3.5);
5587 	design->setCost(MORON, 1.5);
5588 	design = new Design(invention_defences[9], false);
5589 	design->setCost(PALADIUM, 3.5);
5590 	design->setCost(MORON, 1.5);
5591 	design = new Design(invention_defences[9], false);
5592 	design->setCost(MORON, 1);
5593 	design->setCost(MARMITE, 4);
5594 	design = new Design(invention_defences[9], false);
5595 	design->setCost(MORON, 5);
5596 	design = new Design(invention_defences[9], false);
5597 	design->setCost(YERIDIUM, 1.5);
5598 	design->setCost(ALIEN, 3.5);
5599 	design = new Design(invention_defences[9], false);
5600 	design->setCost(ARULDITE, 1.5);
5601 	design->setCost(ALIEN, 3.5);
5602 	design = new Design(invention_defences[9], false);
5603 	design->setCost(ARULDITE, 3.5);
5604 	design->setCost(ALIEN, 1.5);
5605 	design = new Design(invention_defences[9], false);
5606 	design->setCost(SOLARIUM, 1.5);
5607 	design->setCost(ALIEN, 3.5);
5608 	design = new Design(invention_defences[9], true);
5609 	design->setCost(MORON, 1.5);
5610 	design->setCost(ALIEN, 3.5);
5611 	design = new Design(invention_defences[9], false);
5612 	design->setCost(MARMITE, 1.5);
5613 	design->setCost(ALIEN, 3.5);
5614 	design = new Design(invention_defences[9], false);
5615 	design->setCost(ALIEN, 5);
5616 
5617 	// Shields (all 3 ?)
5618 	// from af tips: wood, rock, bones, slate, moonlite, planetarium, bethlium, solarium, aruldite, herbirite, yeridium, aquarium, paladium, moron, marmite, alien
5619 	// 0 (9500BC)
5620 	design = new Design(invention_shields[0], false);
5621 	design->setCost(WOOD, 3);
5622 	design = new Design(invention_shields[0], false);
5623 	design->setCost(BONE, 3);
5624 	design = new Design(invention_shields[0], false);
5625 	design->setCost(SLATE, 3);
5626 	design = new Design(invention_shields[0], false);
5627 	design->setCost(ROCK, 3);
5628 	design = new Design(invention_shields[0], false);
5629 	design->setCost(PLANETARIUM, 3);
5630 	design = new Design(invention_shields[0], false);
5631 	design->setCost(MOONLITE, 3);
5632 	// 1 (3000BC)
5633 	design = new Design(invention_shields[1], false);
5634 	design->setCost(WOOD, 3);
5635 	design = new Design(invention_shields[1], false);
5636 	design->setCost(ROCK, 3);
5637 	design = new Design(invention_shields[1], false);
5638 	design->setCost(BONE, 3);
5639 	design = new Design(invention_shields[1], false);
5640 	design->setCost(ROCK, 2);
5641 	design->setCost(BONE, 1);
5642 	design = new Design(invention_shields[1], false);
5643 	design->setCost(ROCK, 1);
5644 	design->setCost(SLATE, 2);
5645 	design = new Design(invention_shields[1], false);
5646 	design->setCost(ROCK, 1);
5647 	design->setCost(MOONLITE, 2);
5648 	design = new Design(invention_shields[1], false);
5649 	design->setCost(WOOD, 1);
5650 	design->setCost(BETHLIUM, 2);
5651 	design = new Design(invention_shields[1], false);
5652 	design->setCost(WOOD, 1);
5653 	design->setCost(AQUARIUM, 2);
5654 	design = new Design(invention_shields[1], false);
5655 	design->setCost(BONE, 1);
5656 	design->setCost(VALIUM, 2);
5657 	design = new Design(invention_shields[1], false);
5658 	design->setCost(BETHLIUM, 2);
5659 	design->setCost(VALIUM, 1);
5660 	design = new Design(invention_shields[1], false);
5661 	design->setCost(BONE, 1);
5662 	design->setCost(HERBIRITE, 2);
5663 	design = new Design(invention_shields[1], false);
5664 	design->setCost(BETHLIUM, 3);
5665 	design = new Design(invention_shields[1], false);
5666 	design->setCost(SOLARIUM, 3);
5667 	design = new Design(invention_shields[1], true);
5668 	design->setCost(WOOD, 1);
5669 	design->setCost(SOLARIUM, 2);
5670 	design = new Design(invention_shields[1], true);
5671 	design->setCost(BONE, 1);
5672 	design->setCost(SOLARIUM, 2);
5673 	design = new Design(invention_shields[1], false);
5674 	design->setCost(BETHLIUM, 2);
5675 	design->setCost(HERBIRITE, 1);
5676 	design = new Design(invention_shields[1], false);
5677 	design->setCost(ARULDITE, 3);
5678 	design = new Design(invention_shields[1], false);
5679 	design->setCost(BETHLIUM, 2);
5680 	design->setCost(PARASITE, 1);
5681 	design = new Design(invention_shields[1], false);
5682 	design->setCost(BETHLIUM, 2);
5683 	design->setCost(AQUARIUM, 1);
5684 	design = new Design(invention_shields[1], false);
5685 	design->setCost(SOLARIUM, 2);
5686 	design->setCost(PARASITE, 1);
5687 	design = new Design(invention_shields[1], false);
5688 	design->setCost(SOLARIUM, 2);
5689 	design->setCost(AQUARIUM, 1);
5690 	design = new Design(invention_shields[1], true);
5691 	design->setCost(ROCK, 1);
5692 	design->setCost(ARULDITE, 2);
5693 	design = new Design(invention_shields[1], true);
5694 	design->setCost(BONE, 1);
5695 	design->setCost(ARULDITE, 2);
5696 	design = new Design(invention_shields[1], false);
5697 	design->setCost(SLATE, 1);
5698 	design->setCost(ARULDITE, 2);
5699 	design = new Design(invention_shields[1], false);
5700 	design->setCost(PLANETARIUM, 1);
5701 	design->setCost(ARULDITE, 2);
5702 	design = new Design(invention_shields[1], false);
5703 	design->setCost(SOLARIUM, 2);
5704 	design->setCost(ARULDITE, 1);
5705 	design = new Design(invention_shields[1], false);
5706 	design->setCost(MOONLITE, 1);
5707 	design->setCost(SOLARIUM, 2);
5708 	// 2 (100AD)
5709 	design = new Design(invention_shields[2], false);
5710 	design->setCost(WOOD, 0.5);
5711 	design->setCost(SLATE, 2.5);
5712 	design = new Design(invention_shields[2], false);
5713 	design->setCost(WOOD, 0.5);
5714 	design->setCost(MOONLITE, 2.5);
5715 	design = new Design(invention_shields[2], false);
5716 	design->setCost(SLATE, 2.5);
5717 	design->setCost(MOONLITE, 0.5);
5718 	design = new Design(invention_shields[2], false);
5719 	design->setCost(BONE, 0.5);
5720 	design->setCost(MOONLITE, 2.5);
5721 	design = new Design(invention_shields[2], false);
5722 	design->setCost(ROCK, 0.5);
5723 	design->setCost(MOONLITE, 2.5);
5724 	design = new Design(invention_shields[2], false);
5725 	design->setCost(ROCK, 0.5);
5726 	design->setCost(PLANETARIUM, 2.5);
5727 	design = new Design(invention_shields[2], false);
5728 	design->setCost(PLANETARIUM, 3);
5729 	design = new Design(invention_shields[2], false);
5730 	design->setCost(MOONLITE, 2.5);
5731 	design->setCost(BETHLIUM, 0.5);
5732 	design = new Design(invention_shields[2], false);
5733 	design->setCost(HERBIRITE, 3);
5734 	design = new Design(invention_shields[2], true);
5735 	design->setCost(PLANETARIUM, 2.5);
5736 	design->setCost(HERBIRITE, 0.5);
5737 	design = new Design(invention_shields[2], false);
5738 	design->setCost(PLANETARIUM, 2.5);
5739 	design->setCost(SOLARIUM, 0.5);
5740 	design = new Design(invention_shields[2], false);
5741 	design->setCost(SLATE, 3);
5742 	design = new Design(invention_shields[2], false);
5743 	design->setCost(SLATE, 2.5);
5744 	design->setCost(ONION, 0.5);
5745 	design = new Design(invention_shields[2], false);
5746 	design->setCost(SLATE, 2.5);
5747 	design->setCost(SOLARIUM, 0.5);
5748 	design = new Design(invention_shields[2], false);
5749 	design->setCost(WOOD, 0.5);
5750 	design->setCost(SOLARIUM, 2.5);
5751 	design = new Design(invention_shields[2], false);
5752 	design->setCost(SLATE, 2.5);
5753 	design->setCost(ARULDITE, 0.5);
5754 	design = new Design(invention_shields[2], false);
5755 	design->setCost(PLANETARIUM, 2.5);
5756 	design->setCost(ARULDITE, 0.5);
5757 	design = new Design(invention_shields[2], true);
5758 	design->setCost(SLATE, 2.5);
5759 	design->setCost(YERIDIUM, 0.5);
5760 	design = new Design(invention_shields[2], true);
5761 	design->setCost(MOONLITE, 2.5);
5762 	design->setCost(YERIDIUM, 0.5);
5763 	design = new Design(invention_shields[2], false);
5764 	design->setCost(MOONLITE, 2);
5765 	design->setCost(YERIDIUM, 0.5);
5766 	design->setCost(VALIUM, 0.5);
5767 	design = new Design(invention_shields[2], false);
5768 	design->setCost(WOOD, 2.5);
5769 	design->setCost(YERIDIUM, 0.5);
5770 	design = new Design(invention_shields[2], false);
5771 	design->setCost(BONE, 2.5);
5772 	design->setCost(YERIDIUM, 0.5);
5773 	design = new Design(invention_shields[2], false);
5774 	design->setCost(YERIDIUM, 0.5);
5775 	design->setCost(AQUARIUM, 2.5);
5776 	design = new Design(invention_shields[2], false);
5777 	design->setCost(BONE, 0.5);
5778 	design->setCost(PLANETARIUM, 2.5);
5779 	design = new Design(invention_shields[2], false);
5780 	design->setCost(MOONLITE, 3);
5781 	design = new Design(invention_shields[2], false);
5782 	design->setCost(MOONLITE, 2.5);
5783 	design->setCost(PARASITE, 0.5);
5784 	design = new Design(invention_shields[2], false);
5785 	design->setCost(MOONLITE, 2.5);
5786 	design->setCost(AQUARIUM, 0.5);
5787 	design = new Design(invention_shields[2], false);
5788 	design->setCost(MOONLITE, 2.5);
5789 	design->setCost(BETHLIUM, 0.5);
5790 	// 3 (900AD)
5791 	design = new Design(invention_shields[3], false);
5792 	design->setCost(ROCK, 2);
5793 	design->setCost(BONE, 0.5);
5794 	design->setCost(VALIUM, 0.5);
5795 	design = new Design(invention_shields[3], true);
5796 	design->setCost(BONE, 2);
5797 	design->setCost(HERBIRITE, 0.5);
5798 	design->setCost(VALIUM, 0.5);
5799 	design = new Design(invention_shields[3], false);
5800 	design->setCost(HERBIRITE, 2.5);
5801 	design->setCost(VALIUM, 0.5);
5802 	design = new Design(invention_shields[3], false);
5803 	design->setCost(HERBIRITE, 0.5);
5804 	design->setCost(VALIUM, 2.5);
5805 	design = new Design(invention_shields[3], false);
5806 	design->setCost(HERBIRITE, 0.5);
5807 	design->setCost(PARASITE, 2.5);
5808 	design = new Design(invention_shields[3], false);
5809 	design->setCost(WOOD, 2);
5810 	design->setCost(PARASITE, 1);
5811 	design = new Design(invention_shields[3], false);
5812 	design->setCost(WOOD, 2);
5813 	design->setCost(HERBIRITE, 1);
5814 	design = new Design(invention_shields[3], false);
5815 	design->setCost(WOOD, 2.5);
5816 	design->setCost(HERBIRITE, 0.5);
5817 	design = new Design(invention_shields[3], false);
5818 	design->setCost(WOOD, 0.5);
5819 	design->setCost(MOONLITE, 2.5);
5820 	design = new Design(invention_shields[3], false);
5821 	design->setCost(WOOD, 2);
5822 	design->setCost(HERBIRITE, 0.5);
5823 	design->setCost(PALADIUM, 0.5);
5824 	design = new Design(invention_shields[3], false);
5825 	design->setCost(WOOD, 2);
5826 	design->setCost(HERBIRITE, 0.5);
5827 	design->setCost(AQUARIUM, 0.5);
5828 	design = new Design(invention_shields[3], false);
5829 	design->setCost(BONE, 2);
5830 	design->setCost(VALIUM, 0.5);
5831 	design->setCost(AQUARIUM, 0.5);
5832 	design = new Design(invention_shields[3], false);
5833 	design->setCost(BONE, 2);
5834 	design->setCost(YERIDIUM, 1);
5835 	design = new Design(invention_shields[3], false);
5836 	design->setCost(BONE, 2.5);
5837 	design->setCost(YERIDIUM, 0.5);
5838 	design = new Design(invention_shields[3], false);
5839 	design->setCost(ROCK, 2.5);
5840 	design->setCost(YERIDIUM, 0.5);
5841 	design = new Design(invention_shields[3], false);
5842 	design->setCost(BONE, 2.5);
5843 	design->setCost(VALIUM, 0.5);
5844 	design = new Design(invention_shields[3], false);
5845 	design->setCost(ROCK, 2.5);
5846 	design->setCost(VALIUM, 0.5);
5847 	design = new Design(invention_shields[3], false);
5848 	design->setCost(ROCK, 2);
5849 	design->setCost(VALIUM, 1);
5850 	design = new Design(invention_shields[3], false);
5851 	design->setCost(YERIDIUM, 2);
5852 	design->setCost(PARASITE, 1);
5853 	design = new Design(invention_shields[3], false);
5854 	design->setCost(YERIDIUM, 0.5);
5855 	design->setCost(PARASITE, 2.5);
5856 	design = new Design(invention_shields[3], false);
5857 	design->setCost(WOOD, 2);
5858 	design->setCost(SOLARIUM, 0.5);
5859 	design->setCost(PARASITE, 0.5);
5860 	design = new Design(invention_shields[3], false);
5861 	design->setCost(WOOD, 2);
5862 	design->setCost(BETHLIUM, 0.5);
5863 	design->setCost(PARASITE, 0.5);
5864 	design = new Design(invention_shields[3], false);
5865 	design->setCost(BETHLIUM, 2);
5866 	design->setCost(YERIDIUM, 0.5);
5867 	design->setCost(PARASITE, 0.5);
5868 	design = new Design(invention_shields[3], false);
5869 	design->setCost(ROCK, 2);
5870 	design->setCost(SOLARIUM, 0.5);
5871 	design->setCost(HERBIRITE, 0.5);
5872 	design = new Design(invention_shields[3], false);
5873 	design->setCost(ROCK, 2);
5874 	design->setCost(HERBIRITE, 1);
5875 	design = new Design(invention_shields[3], false);
5876 	design->setCost(SLATE, 2);
5877 	design->setCost(YERIDIUM, 0.5);
5878 	design->setCost(PARASITE, 0.5);
5879 	design = new Design(invention_shields[3], false);
5880 	design->setCost(WOOD, 2);
5881 	design->setCost(MOONLITE, 0.5);
5882 	design->setCost(YERIDIUM, 0.5);
5883 	design = new Design(invention_shields[3], true);
5884 	design->setCost(BONE, 2);
5885 	design->setCost(YERIDIUM, 0.5);
5886 	design->setCost(VALIUM, 0.5);
5887 	// ***
5888 	design = new Design(invention_shields[3], false);
5889 	design->setCost(ROCK, 2.5);
5890 	design->setCost(PLANETARIUM, 0.5);
5891 	// 4 (1400AD)
5892 	design = new Design(invention_shields[4], false);
5893 	design->setCost(ROCK, 3);
5894 	design = new Design(invention_shields[4], false);
5895 	design->setCost(BONE, 3);
5896 	design = new Design(invention_shields[4], false);
5897 	design->setCost(WOOD, 3);
5898 	design = new Design(invention_shields[4], false);
5899 	design->setCost(AQUARIUM, 3);
5900 	design = new Design(invention_shields[4], false);
5901 	design->setCost(BONE, 2.5);
5902 	design->setCost(WOOD, 0.5);
5903 	design = new Design(invention_shields[4], false);
5904 	design->setCost(ROCK, 2.5);
5905 	design->setCost(MOONLITE, 0.5);
5906 	design = new Design(invention_shields[4], false);
5907 	design->setCost(WOOD, 2.5);
5908 	design->setCost(MOONLITE, 0.5);
5909 	design = new Design(invention_shields[4], true);
5910 	design->setCost(WOOD, 2.5);
5911 	design->setCost(AQUARIUM, 0.5);
5912 	design = new Design(invention_shields[4], true);
5913 	design->setCost(ROCK, 2.5);
5914 	design->setCost(AQUARIUM, 0.5);
5915 	design = new Design(invention_shields[4], true);
5916 	design->setCost(BONE, 2.5);
5917 	design->setCost(AQUARIUM, 0.5);
5918 	design = new Design(invention_shields[4], false);
5919 	design->setCost(BONE, 2.5);
5920 	design->setCost(BETHLIUM, 0.5);
5921 	design = new Design(invention_shields[4], false);
5922 	design->setCost(BONE, 2.5);
5923 	design->setCost(MOONLITE, 0.5);
5924 	design = new Design(invention_shields[4], false);
5925 	design->setCost(BONE, 2.5);
5926 	design->setCost(VALIUM, 0.5);
5927 	design = new Design(invention_shields[4], false);
5928 	design->setCost(ROCK, 2.5);
5929 	design->setCost(VALIUM, 0.5);
5930 	design = new Design(invention_shields[4], false);
5931 	design->setCost(WOOD, 2.5);
5932 	design->setCost(ONION, 0.5);
5933 	design = new Design(invention_shields[4], false);
5934 	design->setCost(BONE, 2.5);
5935 	design->setCost(ONION, 0.5);
5936 	design = new Design(invention_shields[4], false);
5937 	design->setCost(BONE, 2.5);
5938 	design->setCost(SOLARIUM, 0.5);
5939 	design = new Design(invention_shields[4], false);
5940 	design->setCost(WOOD, 0.5);
5941 	design->setCost(ROCK, 2.5);
5942 	design = new Design(invention_shields[4], false);
5943 	design->setCost(ROCK, 2.5);
5944 	design->setCost(BONE, 0.5);
5945 	design = new Design(invention_shields[4], false);
5946 	design->setCost(ROCK, 2.5);
5947 	design->setCost(SLATE, 0.5);
5948 	design = new Design(invention_shields[4], false);
5949 	design->setCost(ROCK, 2.5);
5950 	design->setCost(PLANETARIUM, 0.5);
5951 	design = new Design(invention_shields[4], false);
5952 	design->setCost(ROCK, 2.5);
5953 	design->setCost(YERIDIUM, 0.5);
5954 	design = new Design(invention_shields[4], true);
5955 	design->setCost(ROCK, 2.5);
5956 	design->setCost(PALADIUM, 0.5);
5957 	design = new Design(invention_shields[4], false);
5958 	design->setCost(PALADIUM, 3);
5959 	design = new Design(invention_shields[4], true);
5960 	design->setCost(HERBIRITE, 2.5);
5961 	design->setCost(PALADIUM, 0.5);
5962 	design = new Design(invention_shields[4], true);
5963 	design->setCost(TEDIUM, 2.5);
5964 	design->setCost(PALADIUM, 0.5);
5965 	design = new Design(invention_shields[4], false);
5966 	design->setCost(PALADIUM, 0.5);
5967 	design->setCost(ONION, 2.5);
5968 	design = new Design(invention_shields[4], false);
5969 	design->setCost(PALADIUM, 0.5);
5970 	design->setCost(MARMITE, 2.5);
5971 	design = new Design(invention_shields[4], false);
5972 	design->setCost(AQUARIUM, 0.5);
5973 	design->setCost(TEDIUM, 2.5);
5974 	design = new Design(invention_shields[4], false);
5975 	design->setCost(AQUARIUM, 0.5);
5976 	design->setCost(PALADIUM, 2.5);
5977 	design = new Design(invention_shields[4], false);
5978 	design->setCost(AQUARIUM, 0.5);
5979 	design->setCost(MORON, 2.5);
5980 	design = new Design(invention_shields[4], false);
5981 	design->setCost(PLANETARIUM, 2.5);
5982 	design->setCost(PALADIUM, 0.5);
5983 	design = new Design(invention_shields[4], false);
5984 	design->setCost(YERIDIUM, 2.5);
5985 	design->setCost(PALADIUM, 0.5);
5986 	design = new Design(invention_shields[4], false);
5987 	design->setCost(YERIDIUM, 2.5);
5988 	design->setCost(AQUARIUM, 0.5);
5989 	design = new Design(invention_shields[4], false);
5990 	design->setCost(WOOD, 2.5);
5991 	design->setCost(SLATE, 0.5);
5992 	design = new Design(invention_shields[4], false);
5993 	design->setCost(AQUARIUM, 0.5);
5994 	design->setCost(ONION, 2.5);
5995 	design = new Design(invention_shields[4], false);
5996 	design->setCost(WOOD, 2.5);
5997 	design->setCost(SOLARIUM, 0.5);
5998 	design = new Design(invention_shields[4], false);
5999 	design->setCost(WOOD, 2.5);
6000 	design->setCost(HERBIRITE, 0.5);
6001 	design = new Design(invention_shields[4], false);
6002 	design->setCost(BETHLIUM, 2.5);
6003 	design->setCost(AQUARIUM, 0.5);
6004 	design = new Design(invention_shields[4], false);
6005 	design->setCost(MOONLITE, 2.5);
6006 	design->setCost(AQUARIUM, 0.5);
6007 	design = new Design(invention_shields[4], false);
6008 	design->setCost(HERBIRITE, 2.5);
6009 	design->setCost(AQUARIUM, 0.5);
6010 	design = new Design(invention_shields[4], false);
6011 	design->setCost(VALIUM, 2.5);
6012 	design->setCost(AQUARIUM, 0.5);
6013 	design = new Design(invention_shields[4], false);
6014 	design->setCost(PARASITE, 2.5);
6015 	design->setCost(AQUARIUM, 0.5);
6016 	design = new Design(invention_shields[4], false);
6017 	design->setCost(ROCK, 2.5);
6018 	design->setCost(ARULDITE, 0.5);
6019 	design = new Design(invention_shields[4], false);
6020 	design->setCost(WOOD, 2.5);
6021 	design->setCost(ARULDITE, 0.5);
6022 	design = new Design(invention_shields[4], false);
6023 	design->setCost(WOOD, 2.5);
6024 	design->setCost(PLANETARIUM, 0.5);
6025 	design = new Design(invention_shields[4], false);
6026 	design->setCost(ARULDITE, 2.5);
6027 	design->setCost(AQUARIUM, 0.5);
6028 	// 5 (1850AD)
6029 	design = new Design(invention_shields[5], false);
6030 	design->setCost(BONE, 0.5);
6031 	design->setCost(BETHLIUM, 2.5);
6032 	design = new Design(invention_shields[5], false);
6033 	design->setCost(BONE, 1.5);
6034 	design->setCost(BETHLIUM, 1.5);
6035 	design = new Design(invention_shields[5], false);
6036 	design->setCost(WOOD, 0.5);
6037 	design->setCost(SOLARIUM, 2.5);
6038 	design = new Design(invention_shields[5], false);
6039 	design->setCost(WOOD, 1.5);
6040 	design->setCost(SOLARIUM, 1.5);
6041 	design = new Design(invention_shields[5], false);
6042 	design->setCost(BONE, 1.5);
6043 	design->setCost(SOLARIUM, 1.5);
6044 	design = new Design(invention_shields[5], false);
6045 	design->setCost(ROCK, 1.5);
6046 	design->setCost(ARULDITE, 1.5);
6047 	design = new Design(invention_shields[5], false);
6048 	design->setCost(ROCK, 0.5);
6049 	design->setCost(ARULDITE, 2.5);
6050 	design = new Design(invention_shields[5], false);
6051 	design->setCost(ROCK, 0.5);
6052 	design->setCost(SOLARIUM, 2.5);
6053 	design = new Design(invention_shields[5], false);
6054 	design->setCost(ROCK, 0.5);
6055 	design->setCost(BETHLIUM, 2.5);
6056 	design = new Design(invention_shields[5], false);
6057 	design->setCost(WOOD, 0.5);
6058 	design->setCost(ARULDITE, 2.5);
6059 	design = new Design(invention_shields[5], false);
6060 	design->setCost(WOOD, 1.5);
6061 	design->setCost(ARULDITE, 1.5);
6062 	design = new Design(invention_shields[5], false);
6063 	design->setCost(WOOD, 0.5);
6064 	design->setCost(BETHLIUM, 2.5);
6065 	design = new Design(invention_shields[5], false);
6066 	design->setCost(WOOD, 2);
6067 	design->setCost(AQUARIUM, 1);
6068 	design = new Design(invention_shields[5], false);
6069 	design->setCost(WOOD, 0.5);
6070 	design->setCost(AQUARIUM, 2.5);
6071 	design = new Design(invention_shields[5], false);
6072 	design->setCost(BONE, 0.5);
6073 	design->setCost(AQUARIUM, 2.5);
6074 	design = new Design(invention_shields[5], false);
6075 	design->setCost(BONE, 2.5);
6076 	design->setCost(ARULDITE, 0.5);
6077 	design = new Design(invention_shields[5], false);
6078 	design->setCost(BONE, 1.5);
6079 	design->setCost(ARULDITE, 1.5);
6080 	design = new Design(invention_shields[5], false);
6081 	design->setCost(BONE, 0.5);
6082 	design->setCost(ARULDITE, 2.5);
6083 	design = new Design(invention_shields[5], false);
6084 	design->setCost(SOLARIUM, 0.5);
6085 	design->setCost(AQUARIUM, 2.5);
6086 	design = new Design(invention_shields[5], false);
6087 	design->setCost(ARULDITE, 1.5);
6088 	design->setCost(AQUARIUM, 1.5);
6089 	design = new Design(invention_shields[5], true);
6090 	design->setCost(WOOD, 0.5);
6091 	design->setCost(ARULDITE, 1.5);
6092 	design->setCost(PALADIUM, 1);
6093 	design = new Design(invention_shields[5], true);
6094 	design->setCost(WOOD, 0.5);
6095 	design->setCost(ARULDITE, 1.5);
6096 	design->setCost(AQUARIUM, 1);
6097 	design = new Design(invention_shields[5], false);
6098 	design->setCost(WOOD, 0.5);
6099 	design->setCost(ARULDITE, 1.5);
6100 	design->setCost(ONION, 1);
6101 	design = new Design(invention_shields[5], true);
6102 	design->setCost(WOOD, 0.5);
6103 	design->setCost(BETHLIUM, 1.5);
6104 	design->setCost(AQUARIUM, 1);
6105 	design = new Design(invention_shields[5], false);
6106 	design->setCost(WOOD, 0.5);
6107 	design->setCost(SLATE, 1.5);
6108 	design->setCost(AQUARIUM, 1);
6109 	design = new Design(invention_shields[5], false);
6110 	design->setCost(ARULDITE, 1.5);
6111 	design->setCost(AQUARIUM, 1);
6112 	design->setCost(ONION, 0.5);
6113 	design = new Design(invention_shields[5], false);
6114 	design->setCost(ARULDITE, 1.5);
6115 	design->setCost(PALADIUM, 1);
6116 	design->setCost(TEDIUM, 0.5);
6117 	design = new Design(invention_shields[5], false);
6118 	design->setCost(WOOD, 0.5);
6119 	design->setCost(PALADIUM, 1);
6120 	design->setCost(MORON, 1.5);
6121 	design = new Design(invention_shields[5], false);
6122 	design->setCost(BETHLIUM, 2);
6123 	design->setCost(PALADIUM, 1);
6124 	design = new Design(invention_shields[5], false);
6125 	design->setCost(BETHLIUM, 2);
6126 	design->setCost(AQUARIUM, 1);
6127 	design = new Design(invention_shields[5], false);
6128 	design->setCost(PALADIUM, 0.5);
6129 	design->setCost(ONION, 2.5);
6130 	design = new Design(invention_shields[5], false);
6131 	design->setCost(ROCK, 0.5);
6132 	design->setCost(HERBIRITE, 1.5);
6133 	design->setCost(PALADIUM, 1);
6134 	design = new Design(invention_shields[5], true);
6135 	design->setCost(ROCK, 0.5);
6136 	design->setCost(ARULDITE, 1.5);
6137 	design->setCost(AQUARIUM, 1);
6138 	design = new Design(invention_shields[5], true);
6139 	design->setCost(BONE, 0.5);
6140 	design->setCost(ARULDITE, 1.5);
6141 	design->setCost(AQUARIUM, 1);
6142 	design = new Design(invention_shields[5], false);
6143 	design->setCost(WOOD, 0.5);
6144 	design->setCost(YERIDIUM, 1.5);
6145 	design->setCost(AQUARIUM, 1);
6146 	// 6 (1915AD)
6147 	design = new Design(invention_shields[6], false);
6148 	design->setCost(ROCK, 2.5);
6149 	design->setCost(YERIDIUM, 0.5);
6150 	design = new Design(invention_shields[6], false);
6151 	design->setCost(ROCK, 2.5);
6152 	design->setCost(MORON, 0.5);
6153 	design = new Design(invention_shields[6], false);
6154 	design->setCost(WOOD, 2);
6155 	design->setCost(YERIDIUM, 1);
6156 	design = new Design(invention_shields[6], false);
6157 	design->setCost(WOOD, 2.5);
6158 	design->setCost(YERIDIUM, 0.5);
6159 	design = new Design(invention_shields[6], false);
6160 	design->setCost(WOOD, 2);
6161 	design->setCost(PALADIUM, 1);
6162 	design = new Design(invention_shields[6], false);
6163 	design->setCost(WOOD, 2);
6164 	design->setCost(YERIDIUM, 0.5);
6165 	design->setCost(PALADIUM, 0.5);
6166 	design = new Design(invention_shields[6], false);
6167 	design->setCost(WOOD, 2);
6168 	design->setCost(YERIDIUM, 0.5);
6169 	design->setCost(PARASITE, 0.5);
6170 	design = new Design(invention_shields[6], false);
6171 	design->setCost(WOOD, 2);
6172 	design->setCost(YERIDIUM, 0.5);
6173 	design->setCost(AQUARIUM, 0.5);
6174 	design = new Design(invention_shields[6], false);
6175 	design->setCost(ROCK, 2);
6176 	design->setCost(PALADIUM, 1);
6177 	design = new Design(invention_shields[6], false);
6178 	design->setCost(WOOD, 0.5);
6179 	design->setCost(ROCK, 2);
6180 	design->setCost(HERBIRITE, 0.5);
6181 	design = new Design(invention_shields[6], false);
6182 	design->setCost(WOOD, 0.5);
6183 	design->setCost(PALADIUM, 1.5);
6184 	design->setCost(VALIUM, 1);
6185 	design = new Design(invention_shields[6], false);
6186 	design->setCost(WOOD, 2);
6187 	design->setCost(AQUARIUM, 0.5);
6188 	design->setCost(HERBIRITE, 0.5);
6189 	design = new Design(invention_shields[6], false);
6190 	design->setCost(WOOD, 2);
6191 	design->setCost(AQUARIUM, 0.5);
6192 	design->setCost(MORON, 0.5);
6193 	design = new Design(invention_shields[6], false);
6194 	design->setCost(WOOD, 2);
6195 	design->setCost(SLATE, 0.5);
6196 	design->setCost(HERBIRITE, 0.5);
6197 	design = new Design(invention_shields[6], false);
6198 	design->setCost(ROCK, 2);
6199 	design->setCost(SLATE, 0.5);
6200 	design->setCost(HERBIRITE, 0.5);
6201 	design = new Design(invention_shields[6], false);
6202 	design->setCost(BONE, 2.5);
6203 	design->setCost(MORON, 0.5);
6204 	design = new Design(invention_shields[6], false);
6205 	design->setCost(BETHLIUM, 2);
6206 	design->setCost(YERIDIUM, 0.5);
6207 	design->setCost(MORON, 0.5);
6208 	design = new Design(invention_shields[6], false);
6209 	design->setCost(ROCK, 2);
6210 	design->setCost(YERIDIUM, 0.5);
6211 	design->setCost(ONION, 0.5);
6212 	design = new Design(invention_shields[6], false);
6213 	design->setCost(ROCK, 2);
6214 	design->setCost(YERIDIUM, 0.5);
6215 	design->setCost(MARMITE, 0.5);
6216 	design = new Design(invention_shields[6], false);
6217 	design->setCost(ARULDITE, 2);
6218 	design->setCost(HERBIRITE, 0.5);
6219 	design->setCost(MORON, 0.5);
6220 	design = new Design(invention_shields[6], false);
6221 	design->setCost(YERIDIUM, 2.5);
6222 	design->setCost(MORON, 0.5);
6223 	design = new Design(invention_shields[6], false);
6224 	design->setCost(HERBIRITE, 0.5);
6225 	design->setCost(MORON, 2.5);
6226 	design = new Design(invention_shields[6], false);
6227 	design->setCost(HERBIRITE, 2.5);
6228 	design->setCost(MORON, 0.5);
6229 	design = new Design(invention_shields[6], true);
6230 	design->setCost(ROCK, 2);
6231 	design->setCost(HERBIRITE, 0.5);
6232 	design->setCost(MORON, 0.5);
6233 	design = new Design(invention_shields[6], false);
6234 	design->setCost(WOOD, 2);
6235 	design->setCost(PALADIUM, 0.5);
6236 	design->setCost(MORON, 0.5);
6237 	design = new Design(invention_shields[6], false);
6238 	design->setCost(ROCK, 2);
6239 	design->setCost(ARULDITE, 0.5);
6240 	design->setCost(HERBIRITE, 0.5);
6241 	design = new Design(invention_shields[6], false);
6242 	design->setCost(BONE, 2.5);
6243 	design->setCost(YERIDIUM, 0.5);
6244 	design = new Design(invention_shields[6], false);
6245 	design->setCost(WOOD, 2);
6246 	design->setCost(SOLARIUM, 0.5);
6247 	design->setCost(YERIDIUM, 0.5);
6248 	design = new Design(invention_shields[6], false);
6249 	design->setCost(ARULDITE, 1.5);
6250 	design->setCost(YERIDIUM, 0.5);
6251 	design->setCost(AQUARIUM, 1);
6252 	design = new Design(invention_shields[6], false);
6253 	design->setCost(YERIDIUM, 0.5);
6254 	design->setCost(AQUARIUM, 2);
6255 	design->setCost(MORON, 0.5);
6256 	design = new Design(invention_shields[6], false);
6257 	design->setCost(BONE, 2);
6258 	design->setCost(AQUARIUM, 0.5);
6259 	design->setCost(MORON, 0.5);
6260 	design = new Design(invention_shields[6], false);
6261 	design->setCost(BONE, 2);
6262 	design->setCost(SLATE, 0.5);
6263 	design->setCost(YERIDIUM, 0.5);
6264 	// 7 (1945AD)
6265 	design = new Design(invention_shields[7], true);
6266 	design->setCost(ROCK, 2);
6267 	design->setCost(YERIDIUM, 0.5);
6268 	design->setCost(MORON, 0.5);
6269 	design = new Design(invention_shields[7], false);
6270 	design->setCost(PALADIUM, 2);
6271 	design->setCost(YERIDIUM, 0.5);
6272 	design->setCost(MORON, 0.5);
6273 	design = new Design(invention_shields[7], false);
6274 	design->setCost(BONE, 2);
6275 	design->setCost(YERIDIUM, 1);
6276 	design = new Design(invention_shields[7], false);
6277 	design->setCost(BONE, 1);
6278 	design->setCost(SLATE, 1.5);
6279 	design->setCost(MARMITE, 0.5);
6280 	design = new Design(invention_shields[7], false);
6281 	design->setCost(BONE, 1.5);
6282 	design->setCost(ARULDITE, 1);
6283 	design->setCost(MARMITE, 0.5);
6284 	design = new Design(invention_shields[7], false);
6285 	design->setCost(SLATE, 2);
6286 	design->setCost(SOLARIUM, 1);
6287 	design = new Design(invention_shields[7], false);
6288 	design->setCost(SLATE, 2);
6289 	design->setCost(BETHLIUM, 1);
6290 	design = new Design(invention_shields[7], false);
6291 	design->setCost(SLATE, 2);
6292 	design->setCost(ARULDITE, 1);
6293 	design = new Design(invention_shields[7], false);
6294 	design->setCost(SLATE, 1.5);
6295 	design->setCost(SOLARIUM, 1);
6296 	design->setCost(TEDIUM, 0.5);
6297 	design = new Design(invention_shields[7], false);
6298 	design->setCost(SLATE, 1.5);
6299 	design->setCost(ONION, 1);
6300 	design->setCost(MARMITE, 0.5);
6301 	design = new Design(invention_shields[7], false);
6302 	design->setCost(SLATE, 1.5);
6303 	design->setCost(PARASITE, 1);
6304 	design->setCost(MARMITE, 0.5);
6305 	design = new Design(invention_shields[7], false);
6306 	design->setCost(SLATE, 1.5);
6307 	design->setCost(MORON, 1);
6308 	design->setCost(MARMITE, 0.5);
6309 	design = new Design(invention_shields[7], false);
6310 	design->setCost(WOOD, 0.5);
6311 	design->setCost(SLATE, 1.5);
6312 	design->setCost(ARULDITE, 1);
6313 	design = new Design(invention_shields[7], false);
6314 	design->setCost(WOOD, 0.5);
6315 	design->setCost(PLANETARIUM, 1.5);
6316 	design->setCost(ARULDITE, 1);
6317 	design = new Design(invention_shields[7], false);
6318 	design->setCost(WOOD, 2);
6319 	design->setCost(HERBIRITE, 0.5);
6320 	design->setCost(VALIUM, 0.5);
6321 	design = new Design(invention_shields[7], false);
6322 	design->setCost(ROCK, 1.5);
6323 	design->setCost(ARULDITE, 1);
6324 	design->setCost(MARMITE, 0.5);
6325 	design = new Design(invention_shields[7], false);
6326 	design->setCost(SLATE, 2.5);
6327 	design->setCost(MARMITE, 0.5);
6328 	design = new Design(invention_shields[7], false);
6329 	design->setCost(SLATE, 1.5);
6330 	design->setCost(MARMITE, 1.5);
6331 	design = new Design(invention_shields[7], false);
6332 	design->setCost(SLATE, 1.5);
6333 	design->setCost(ARULDITE, 1);
6334 	design->setCost(AQUARIUM, 0.5);
6335 	design = new Design(invention_shields[7], false);
6336 	design->setCost(SLATE, 1.5);
6337 	design->setCost(ARULDITE, 1);
6338 	design->setCost(ONION, 0.5);
6339 	design = new Design(invention_shields[7], false);
6340 	design->setCost(SLATE, 1.5);
6341 	design->setCost(ARULDITE, 1);
6342 	design->setCost(TEDIUM, 0.5);
6343 	design = new Design(invention_shields[7], false);
6344 	design->setCost(BETHLIUM, 1);
6345 	design->setCost(MARMITE, 2);
6346 	design = new Design(invention_shields[7], false);
6347 	design->setCost(SOLARIUM, 1);
6348 	design->setCost(MARMITE, 2);
6349 	design = new Design(invention_shields[7], false);
6350 	design->setCost(SOLARIUM, 2.5);
6351 	design->setCost(MARMITE, 0.5);
6352 	design = new Design(invention_shields[7], false);
6353 	design->setCost(PLANETARIUM, 2);
6354 	design->setCost(SOLARIUM, 1);
6355 	design = new Design(invention_shields[7], false);
6356 	design->setCost(SLATE, 1.5);
6357 	design->setCost(ARULDITE, 1.5);
6358 	design = new Design(invention_shields[7], false);
6359 	design->setCost(MOONLITE, 2);
6360 	design->setCost(ARULDITE, 1);
6361 	design = new Design(invention_shields[7], false);
6362 	design->setCost(MOONLITE, 1.5);
6363 	design->setCost(ARULDITE, 1.5);
6364 	design = new Design(invention_shields[7], false);
6365 	design->setCost(PLANETARIUM, 1.5);
6366 	design->setCost(ARULDITE, 1.5);
6367 	design = new Design(invention_shields[7], false);
6368 	design->setCost(PLANETARIUM, 1.5);
6369 	design->setCost(BETHLIUM, 1.5);
6370 	design = new Design(invention_shields[7], false);
6371 	design->setCost(PLANETARIUM, 2.5);
6372 	design->setCost(MARMITE, 0.5);
6373 	design = new Design(invention_shields[7], false);
6374 	design->setCost(PLANETARIUM, 1.5);
6375 	design->setCost(ONION, 1);
6376 	design->setCost(MARMITE, 0.5);
6377 	design = new Design(invention_shields[7], false);
6378 	design->setCost(PLANETARIUM, 1.5);
6379 	design->setCost(AQUARIUM, 1);
6380 	design->setCost(MARMITE, 0.5);
6381 	design = new Design(invention_shields[7], false);
6382 	design->setCost(MOONLITE, 1.5);
6383 	design->setCost(SOLARIUM, 1.5);
6384 	design = new Design(invention_shields[7], false);
6385 	design->setCost(MOONLITE, 1.5);
6386 	design->setCost(BETHLIUM, 1.5);
6387 	design = new Design(invention_shields[7], false);
6388 	design->setCost(ARULDITE, 1);
6389 	design->setCost(MORON, 1.5);
6390 	design->setCost(MARMITE, 0.5);
6391 	design = new Design(invention_shields[7], false);
6392 	design->setCost(ARULDITE, 1);
6393 	design->setCost(ONION, 1.5);
6394 	design->setCost(MARMITE, 0.5);
6395 	design = new Design(invention_shields[7], false);
6396 	design->setCost(ARULDITE, 1);
6397 	design->setCost(AQUARIUM, 1.5);
6398 	design->setCost(MARMITE, 0.5);
6399 	design = new Design(invention_shields[7], false);
6400 	design->setCost(ARULDITE, 1);
6401 	design->setCost(MARMITE, 2);
6402 	design = new Design(invention_shields[7], false);
6403 	design->setCost(ARULDITE, 2.5);
6404 	design->setCost(MARMITE, 0.5);
6405 	design = new Design(invention_shields[7], true);
6406 	design->setCost(MOONLITE, 1.5);
6407 	design->setCost(ARULDITE, 1);
6408 	design->setCost(MARMITE, 0.5);
6409 	design = new Design(invention_shields[7], false);
6410 	design->setCost(MOONLITE, 1.5);
6411 	design->setCost(PARASITE, 1);
6412 	design->setCost(MARMITE, 0.5);
6413 	design = new Design(invention_shields[7], false);
6414 	design->setCost(SLATE, 0.5);
6415 	design->setCost(PLANETARIUM, 1.5);
6416 	design->setCost(ARULDITE, 1);
6417 	design = new Design(invention_shields[7], false);
6418 	design->setCost(SLATE, 1.5);
6419 	design->setCost(TEDIUM, 1);
6420 	design->setCost(MARMITE, 0.5);
6421 	design = new Design(invention_shields[7], false);
6422 	design->setCost(MOONLITE, 1.5);
6423 	design->setCost(PLANETARIUM, 0.5);
6424 	design->setCost(ARULDITE, 1);
6425 	design = new Design(invention_shields[7], false);
6426 	design->setCost(BETHLIUM, 1);
6427 	design->setCost(YERIDIUM, 1.5);
6428 	design->setCost(MARMITE, 0.5);
6429 	design = new Design(invention_shields[7], false);
6430 	design->setCost(BETHLIUM, 1);
6431 	design->setCost(TEDIUM, 1.5);
6432 	design->setCost(MARMITE, 0.5);
6433 	design = new Design(invention_shields[7], true);
6434 	design->setCost(PLANETARIUM, 1.5);
6435 	design->setCost(BETHLIUM, 1);
6436 	design->setCost(MARMITE, 0.5);
6437 	design = new Design(invention_shields[7], false);
6438 	design->setCost(ROCK, 1.5);
6439 	design->setCost(SOLARIUM, 1);
6440 	design->setCost(MARMITE, 0.5);
6441 	design = new Design(invention_shields[7], false);
6442 	design->setCost(BETHLIUM, 1.5);
6443 	design->setCost(SOLARIUM, 1);
6444 	design->setCost(MARMITE, 0.5);
6445 	// 8 (1980AD)
6446 	design = new Design(invention_shields[8], false);
6447 	design->setCost(BONE, 1.5);
6448 	design->setCost(ARULDITE, 1);
6449 	design->setCost(MARMITE, 0.5);
6450 	design = new Design(invention_shields[8], false);
6451 	design->setCost(BONE, 1);
6452 	design->setCost(PARASITE, 1.5);
6453 	design->setCost(MARMITE, 0.5);
6454 	design = new Design(invention_shields[8], false);
6455 	design->setCost(WOOD, 0.5);
6456 	design->setCost(ARULDITE, 1);
6457 	design->setCost(PARASITE, 1.5);
6458 	design = new Design(invention_shields[8], false);
6459 	design->setCost(SOLARIUM, 1);
6460 	design->setCost(AQUARIUM, 1.5);
6461 	design->setCost(MARMITE, 0.5);
6462 	design = new Design(invention_shields[8], false);
6463 	design->setCost(SOLARIUM, 1);
6464 	design->setCost(YERIDIUM, 1.5);
6465 	design->setCost(MARMITE, 0.5);
6466 	design = new Design(invention_shields[8], false);
6467 	design->setCost(PARASITE, 1.5);
6468 	design->setCost(TEDIUM, 1);
6469 	design->setCost(MARMITE, 0.5);
6470 	design = new Design(invention_shields[8], true);
6471 	design->setCost(ARULDITE, 1);
6472 	design->setCost(PARASITE, 1.5);
6473 	design->setCost(MARMITE, 0.5);
6474 	design = new Design(invention_shields[8], false);
6475 	design->setCost(ARULDITE, 1);
6476 	design->setCost(AQUARIUM, 1.5);
6477 	design->setCost(MARMITE, 0.5);
6478 	design = new Design(invention_shields[8], false);
6479 	design->setCost(ARULDITE, 1);
6480 	design->setCost(VALIUM, 1.5);
6481 	design->setCost(TEDIUM, 0.5);
6482 	design = new Design(invention_shields[8], false);
6483 	design->setCost(VALIUM, 1.5);
6484 	design->setCost(PALADIUM, 1);
6485 	design->setCost(MARMITE, 0.5);
6486 	design = new Design(invention_shields[8], false);
6487 	design->setCost(VALIUM, 1.5);
6488 	design->setCost(MARMITE, 1.5);
6489 	design = new Design(invention_shields[8], false);
6490 	design->setCost(BETHLIUM, 1.5);
6491 	design->setCost(VALIUM, 1.5);
6492 	design = new Design(invention_shields[8], false);
6493 	design->setCost(BETHLIUM, 1);
6494 	design->setCost(VALIUM, 2);
6495 	design = new Design(invention_shields[8], false);
6496 	design->setCost(BETHLIUM, 2.5);
6497 	design->setCost(MARMITE, 0.5);
6498 	design = new Design(invention_shields[8], false);
6499 	design->setCost(BETHLIUM, 1);
6500 	design->setCost(MARMITE, 2);
6501 	design = new Design(invention_shields[8], false);
6502 	design->setCost(SOLARIUM, 1);
6503 	design->setCost(MARMITE, 2);
6504 	design = new Design(invention_shields[8], false);
6505 	design->setCost(SOLARIUM, 2.5);
6506 	design->setCost(MARMITE, 0.5);
6507 	design = new Design(invention_shields[8], false);
6508 	design->setCost(SOLARIUM, 1.5);
6509 	design->setCost(PARASITE, 1.5);
6510 	design = new Design(invention_shields[8], false);
6511 	design->setCost(MOONLITE, 1.5);
6512 	design->setCost(SOLARIUM, 1);
6513 	design->setCost(MARMITE, 0.5);
6514 	design = new Design(invention_shields[8], false);
6515 	design->setCost(MOONLITE, 1);
6516 	design->setCost(PARASITE, 1.5);
6517 	design->setCost(MARMITE, 0.5);
6518 	design = new Design(invention_shields[8], false);
6519 	design->setCost(MOONLITE, 1.5);
6520 	design->setCost(ARULDITE, 1);
6521 	design->setCost(MARMITE, 0.5);
6522 	design = new Design(invention_shields[8], false);
6523 	design->setCost(ARULDITE, 2.5);
6524 	design->setCost(MARMITE, 0.5);
6525 	design = new Design(invention_shields[8], false);
6526 	design->setCost(ARULDITE, 1);
6527 	design->setCost(MARMITE, 2);
6528 	design = new Design(invention_shields[8], false);
6529 	design->setCost(PARASITE, 1.5);
6530 	design->setCost(PALADIUM, 1);
6531 	design->setCost(MARMITE, 0.5);
6532 	design = new Design(invention_shields[8], false);
6533 	design->setCost(BETHLIUM, 1);
6534 	design->setCost(MARMITE, 0.5);
6535 	design->setCost(ALIEN, 1.5);
6536 	design = new Design(invention_shields[8], true);
6537 	design->setCost(BETHLIUM, 1);
6538 	design->setCost(VALIUM, 1.5);
6539 	design->setCost(MARMITE, 0.5);
6540 	design = new Design(invention_shields[8], false);
6541 	design->setCost(BETHLIUM, 1);
6542 	design->setCost(AQUARIUM, 1.5);
6543 	design->setCost(MARMITE, 0.5);
6544 	design = new Design(invention_shields[8], false);
6545 	design->setCost(BETHLIUM, 1);
6546 	design->setCost(TEDIUM, 1.5);
6547 	design->setCost(MARMITE, 0.5);
6548 	design = new Design(invention_shields[8], false);
6549 	design->setCost(PARASITE, 1.5);
6550 	design->setCost(MARMITE, 1.5);
6551 	design = new Design(invention_shields[8], false);
6552 	design->setCost(PARASITE, 1.5);
6553 	design->setCost(MARMITE, 0.5);
6554 	design->setCost(ALIEN, 1);
6555 	design = new Design(invention_shields[8], false);
6556 	design->setCost(SLATE, 0.5);
6557 	design->setCost(SOLARIUM, 1);
6558 	design->setCost(PARASITE, 1.5);
6559 	design = new Design(invention_shields[8], false);
6560 	design->setCost(SLATE, 1.5);
6561 	design->setCost(ARULDITE, 1);
6562 	design->setCost(MARMITE, 0.5);
6563 	design = new Design(invention_shields[8], true);
6564 	design->setCost(SOLARIUM, 1);
6565 	design->setCost(VALIUM, 1.5);
6566 	design->setCost(MARMITE, 0.5);
6567 	// 9 (2001AD)
6568 	design = new Design(invention_shields[9], false);
6569 	design->setCost(BONE, 1);
6570 	design->setCost(HERBIRITE, 2);
6571 	design = new Design(invention_shields[9], false);
6572 	design->setCost(WOOD, 2);
6573 	design->setCost(ALIEN, 1);
6574 	design = new Design(invention_shields[9], false);
6575 	design->setCost(HERBIRITE, 2);
6576 	design->setCost(TEDIUM, 1);
6577 	design = new Design(invention_shields[9], false);
6578 	design->setCost(HERBIRITE, 2);
6579 	design->setCost(MARMITE, 1);
6580 	design = new Design(invention_shields[9], false);
6581 	design->setCost(HERBIRITE, 2);
6582 	design->setCost(PALADIUM, 1);
6583 	design = new Design(invention_shields[9], false);
6584 	design->setCost(HERBIRITE, 2);
6585 	design->setCost(PARASITE, 1);
6586 	design = new Design(invention_shields[9], false);
6587 	design->setCost(ROCK, 1);
6588 	design->setCost(YERIDIUM, 2);
6589 	design = new Design(invention_shields[9], false);
6590 	design->setCost(ROCK, 1);
6591 	design->setCost(HERBIRITE, 2);
6592 	design = new Design(invention_shields[9], false);
6593 	design->setCost(SLATE, 2);
6594 	design->setCost(ALIEN, 1);
6595 	design = new Design(invention_shields[9], false);
6596 	design->setCost(ALIEN, 3);
6597 	design = new Design(invention_shields[9], true);
6598 	design->setCost(YERIDIUM, 2);
6599 	design->setCost(ALIEN, 1);
6600 	design = new Design(invention_shields[9], true);
6601 	design->setCost(YERIDIUM, 2);
6602 	design->setCost(MARMITE, 1);
6603 	design = new Design(invention_shields[9], false);
6604 	design->setCost(YERIDIUM, 2);
6605 	design->setCost(MORON, 1);
6606 	design = new Design(invention_shields[9], false);
6607 	design->setCost(YERIDIUM, 2);
6608 	design->setCost(PALADIUM, 1);
6609 	design = new Design(invention_shields[9], false);
6610 	design->setCost(YERIDIUM, 2);
6611 	design->setCost(PARASITE, 1);
6612 	design = new Design(invention_shields[9], false);
6613 	design->setCost(YERIDIUM, 2);
6614 	design->setCost(AQUARIUM, 1);
6615 	design = new Design(invention_shields[9], false);
6616 	design->setCost(YERIDIUM, 2);
6617 	design->setCost(ONION, 1);
6618 	design = new Design(invention_shields[9], false);
6619 	design->setCost(MORON, 2);
6620 	design->setCost(ALIEN, 1);
6621 	design = new Design(invention_shields[9], false);
6622 	design->setCost(YERIDIUM, 3);
6623 	design = new Design(invention_shields[9], false);
6624 	design->setCost(HERBIRITE, 3);
6625 	design = new Design(invention_shields[9], false);
6626 	design->setCost(ARULDITE, 2);
6627 	design->setCost(ALIEN, 1);
6628 	design = new Design(invention_shields[9], false);
6629 	design->setCost(AQUARIUM, 2);
6630 	design->setCost(ALIEN, 1);
6631 	design = new Design(invention_shields[9], false);
6632 	design->setCost(MARMITE, 2);
6633 	design->setCost(ALIEN, 1);
6634 	design = new Design(invention_shields[9], false);
6635 	design->setCost(PALADIUM, 2);
6636 	design->setCost(ALIEN, 1);
6637 	design = new Design(invention_shields[9], false);
6638 	design->setCost(BETHLIUM, 2);
6639 	design->setCost(ALIEN, 1);
6640 	design = new Design(invention_shields[9], false);
6641 	design->setCost(BETHLIUM, 1);
6642 	design->setCost(YERIDIUM, 2);
6643 
6644 	return true;
6645 }
6646