/// ///Performs square quest /// void Tavern::execute(AdventureCardDeck* d, SpellDeck* s, PurchaseDeck* p, Character* c, QTextEdit* txtLog){ int choice = rand() % 6 + 1; Spell* temp; switch(choice){ case 1: txtLog->append("\nYou get blind drunk and collapse in a corner. Waking up a few hours\nlater you find yourself unharmed and your belongings intact.\nYou were lucky this time."); break; case 2: txtLog->append("\nYou get tipsy and get into a fight with a farmer. Though you swing wildly and without coordination,\nyou manage to knock him out cold. Gain 1 Strength from the battle."); c->setStrength(c->getStrength() + 1); break; case 3: txtLog->append("\nYou gamble with a peddler on a game of dice but lose the wager.\nLose 1 Gold piece."); c->setGold(c->getGold() - 1); if (c->getGold() < 0) c->setGold(0); break; case 4: txtLog->append("\nYou gamble with a peddler on a game of dice and win the wager.\nGain 2 Gold pieces."); c->setGold(c->getGold() + 2); break; case 5: temp = s->drawCard(); if(s != NULL){ if (c->addObject(temp)) txtLog->append(QString::fromStdString("\nA wizard teaches you the Spell: " + temp->getTitle() + "\nIt has been added to your Inventory.")); else txtLog->append(QString::fromStdString("\nA wizard offers to teach you the Spell: " + temp->getTitle() + " but you already know it.")); } else txtLog->append("\nA wizard offers to teach you a Spell, but there are none left in the Spell Deck."); break; case 6: if (c->addObject((new WeaponFactory())->getClass("Axe"))) txtLog->append("\nYou casually relax and find an Axe hidden under a shaded table.\nIt has been added to your Inventory."); else txtLog->append("\nYou casually relax and find an Axe hidden under a shaded table.\nYou already have a perfectly good Axe so you leave it there."); break; } }
//Spell stuff void GameEngine::useSpell(Point mouseLoc) { Spell spell = invLog.getSpell(mouseLoc); if (spell.isUnlocked()) { if (hero->getMana() < spell.getCost()) log.registerEvent("Not enough mana!"); else { log.registerEvent(spell.getTitle() + " activated!"); Point start = hero->getLoc() + Point(-1, -1); Point end = hero->getLoc() + Point(2, 2); int type = spell.getSpellType(); switch (type) { case 1: //Field of fire { spell.setTurnActivated(turns); lib.loop_portion(start, end, [&](Point p) { map[p.x()][p.y()].setSpell(spell); }); break; } case 2: //Death Rattle { lib.loop_portion(start, end, [&](Point p) { Actor* a = map[p.x()][p.y()].getActor(); if (a != NULL) { Point relToHero = p - hero->getLoc(); Point d(p.x() + relToHero.x(), p.y() + relToHero.y()); a->doDMG(2); if (a->getHP() <= 0) killMonster(a->getLoc()); if (moveableCell(d)) { map[p.x()][p.y()].setActor(NULL); a->setLoc(d); map[d.x()][d.y()].setActor(a); } } }); break; } case 3: //Blessing of Katar { hero->changeHP(10); break; } case 4: //Ice Block { spell.setTurnActivated(turns); lib.loop_portion(start, end, [&](Point p) { map[p.x()][p.y()].setSpell(spell); }); break; } case 5: //Death Curse { spell.setTurnActivated(turns); lib.loop_portion(start, end, [&](Point p) { Actor* a = map[p.x()][p.y()].getActor(); if (a != NULL) { a->setSpell(spell); } }); break; } case 6: //Fist of Katar { map[hero->getLoc().x()][hero->getLoc().y()].setSpell(spell); break; } } hero->changeMana(-spell.getCost()); lib.play("Spell" + to_string(spell.getSpellType())); } } }