Daddy32 - Single new task type:
"Pacifism" - requiring player to win a game without (much) damage dealing and milling, taking advantage of newly added instant-win cards.
This commit is contained in:
@@ -13,7 +13,8 @@
|
|||||||
#define TASK_IMMORTAL 'I'
|
#define TASK_IMMORTAL 'I'
|
||||||
#define TASK_MASSIVE_BURIAL 'M'
|
#define TASK_MASSIVE_BURIAL 'M'
|
||||||
#define TASK_WISDOM 'O'
|
#define TASK_WISDOM 'O'
|
||||||
#define TASKS_ALL "WSDIMO"
|
#define TASK_PACIFISM 'P'
|
||||||
|
#define TASKS_ALL "WSDIMOP"
|
||||||
|
|
||||||
#define ITEM_SEPARATOR "|"
|
#define ITEM_SEPARATOR "|"
|
||||||
|
|
||||||
@@ -192,6 +193,23 @@ public:
|
|||||||
virtual void restoreCustomAttribs();
|
virtual void restoreCustomAttribs();
|
||||||
virtual void randomize();
|
virtual void randomize();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TaskPacifism : public Task {
|
||||||
|
protected:
|
||||||
|
virtual int computeReward();
|
||||||
|
int lifeSlashCardMin;
|
||||||
|
public:
|
||||||
|
TaskPacifism(int _lifeSlashCardMin = 0);
|
||||||
|
|
||||||
|
virtual string createDesc();
|
||||||
|
virtual string getShortDesc();
|
||||||
|
virtual bool isDone(Player * _p1, Player * _p2, GameApp * _app);
|
||||||
|
virtual void storeCustomAttribs();
|
||||||
|
virtual void restoreCustomAttribs();
|
||||||
|
virtual void randomize();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* ------------ Task template ------------
|
/* ------------ Task template ------------
|
||||||
|
|
||||||
class TaskXX : public Task {
|
class TaskXX : public Task {
|
||||||
|
|||||||
@@ -219,6 +219,9 @@ Task* Task::createFromStr(string params, bool rand) {
|
|||||||
case TASK_WISDOM:
|
case TASK_WISDOM:
|
||||||
result = new TaskWisdom();
|
result = new TaskWisdom();
|
||||||
break;
|
break;
|
||||||
|
case TASK_PACIFISM:
|
||||||
|
result = new TaskPacifism();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
#if defined (WIN32) || defined (LINUX)
|
#if defined (WIN32) || defined (LINUX)
|
||||||
OutputDebugString("\nTasks.cpp::createFromStr: Undefined class type\n");
|
OutputDebugString("\nTasks.cpp::createFromStr: Undefined class type\n");
|
||||||
@@ -931,6 +934,61 @@ void TaskWisdom::randomize() {
|
|||||||
Task::randomize();
|
Task::randomize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------ TaskPacifism ------------ */
|
||||||
|
|
||||||
|
TaskPacifism::TaskPacifism(int _lifeSlashCardMin) : Task(TASK_PACIFISM) {
|
||||||
|
lifeSlashCardMin = _lifeSlashCardMin;
|
||||||
|
if (lifeSlashCardMin == 0) {
|
||||||
|
randomize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int TaskPacifism::computeReward() {
|
||||||
|
return 200 + (rand()%50) + (lifeSlashCardMin * 5) + (lifeSlashCardMin>20 ? 200 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
string TaskPacifism::createDesc() {
|
||||||
|
char buffer[4096];
|
||||||
|
|
||||||
|
switch (rand()%2) {
|
||||||
|
case 0:
|
||||||
|
sprintf(buffer, _("Let your opponent live with at least %i life and cards in library, but defeat him.").c_str(), lifeSlashCardMin);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
sprintf(buffer, _("Win a game with your opponent having at least %i life and cards in library.").c_str(), lifeSlashCardMin);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
string TaskPacifism::getShortDesc(){
|
||||||
|
char buffer[4096];
|
||||||
|
sprintf(buffer, _("Pacifism (%i)").c_str(), lifeSlashCardMin);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TaskPacifism::isDone(Player * _p1, Player * _p2, GameApp * _app) {
|
||||||
|
GameObserver * g = GameObserver::GetInstance();
|
||||||
|
return (!_p1->isAI()) && (_p2->isAI()) && (g->gameOver != _p1) // Human player wins
|
||||||
|
&& (_p2->life >= lifeSlashCardMin) && ((int)_p2->game->library->cards.size() >= lifeSlashCardMin);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskPacifism::storeCustomAttribs() {
|
||||||
|
char buff[256];
|
||||||
|
|
||||||
|
sprintf(buff, "%i", lifeSlashCardMin);
|
||||||
|
persistentAttribs.push_back(buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskPacifism::restoreCustomAttribs() {
|
||||||
|
lifeSlashCardMin = atoi(persistentAttribs[COMMON_ATTRIBS_COUNT].c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskPacifism::randomize() {
|
||||||
|
lifeSlashCardMin = rand()%25 + 1;
|
||||||
|
Task::randomize();
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------ Task template ------------
|
/* ------------ Task template ------------
|
||||||
|
|
||||||
TaskXX::TaskXX() : Task(TASK_XX) {
|
TaskXX::TaskXX() : Task(TASK_XX) {
|
||||||
|
|||||||
Reference in New Issue
Block a user