diff --git a/assets/data/abilities.js b/assets/data/abilities.js index d8f298c..fb31cb3 100644 --- a/assets/data/abilities.js +++ b/assets/data/abilities.js @@ -230,8 +230,8 @@ module.exports = { }, "scorch": { name: "scorch", - description: "Scorch: Kills the strongest card(s) in the battlefield.", - scorch: true + description: "Scorch: Destroy your enemy's strongest close combat unit(s) if the combined strength of all of his or her combat unit(s) is 10 or more.", + scorchMelee: true }, "commanders_horn": { name: "commanders_horn", @@ -334,6 +334,7 @@ module.exports = { "emreis_leader4": { name: "Emhyr vas Emreis the Relentless", description: "Draw a card from your opponent's discard pile.", + waitResponse: true, onActivate: function(card){ var discard = this.foe.getDiscard(); diff --git a/assets/data/deck.js b/assets/data/deck.js index ea55735..9465430 100644 --- a/assets/data/deck.js +++ b/assets/data/deck.js @@ -130,8 +130,8 @@ module.exports = { "decoy", "decoy", "biting_frost", - "biting_frost", "torrential_rain", + "clear_weather", "clear_weather" ] }, diff --git a/server/Battle.js b/server/Battle.js index e7a7fd9..673d868 100644 --- a/server/Battle.js +++ b/server/Battle.js @@ -61,6 +61,16 @@ var Battle = (function(){ this.p1.draw(10); this.p2.draw(10); + /*this.p1.placeCard("ves"); + this.p2.placeCard("ves"); + this.p1.placeCard("yarpen_zigrin"); + this.p2.placeCard("yarpen_zigrin"); + + this.p1.hand.add(this.p1.createCard("scorch")); + this.p2.hand.add(this.p2.createCard("scorch")); + this.p1.hand.add(this.p1.createCard("villentretenmerth")); + this.p2.hand.add(this.p2.createCard("villentretenmerth"));*/ + /*this.p1.hand.add(this.p1.createCard("blue_stripes_commando")); this.p2.hand.add(this.p2.createCard("blue_stripes_commando")); this.p1.hand.add(this.p1.createCard("blue_stripes_commando")); @@ -324,7 +334,7 @@ var Battle = (function(){ if(this.p1.deck.getFaction() === Deck.FACTION.NILFGAARDIAN_EMPIRE && this.p1.deck.getFaction() !== this.p2.deck.getFaction()){ this.p2.removeRuby(); console.log(this.p1.getName() + " wins the tie! (nilfgaardian ability)"); - self.sendNotification(this.p1.getName() + " wins the tie! (nilfgaardian ability)"); + this.sendNotification(this.p1.getName() + " wins the tie! (nilfgaardian ability)"); return { loser: this.p2, isTie: false @@ -333,7 +343,7 @@ var Battle = (function(){ if(this.p2.deck.getFaction() === Deck.FACTION.NILFGAARDIAN_EMPIRE && this.p1.deck.getFaction() !== this.p2.deck.getFaction()){ this.p1.removeRuby(); console.log(this.p2.getName() + " wins the tie! (nilfgaardian ability)"); - self.sendNotification(this.p2.getName() + " wins the tie! (nilfgaardian ability)"); + this.sendNotification(this.p2.getName() + " wins the tie! (nilfgaardian ability)"); return { loser: this.p1, isTie: false diff --git a/server/Battleside.js b/server/Battleside.js index 3e17a59..aff52a6 100644 --- a/server/Battleside.js +++ b/server/Battleside.js @@ -58,6 +58,11 @@ Battleside = (function(){ leaderCard.setDisabled(true); self.battle.sendNotification(self.getName() + " activated " + leaderCard.getName() + "! (leadercard)"); self.update(); + if(ability.waitResponse) { + return; + } + //self.runEvent("NextTurn", null, [self.foe]); + self.endTurn(); }) this.receive("play:cardFromHand", function(data){ if(self._isWaiting) return; @@ -81,11 +86,14 @@ Battleside = (function(){ self.update(); self.battle.sendNotification(self.getName() + " passed!"); - self.runEvent("NextTurn", null, [self.foe]); + //self.runEvent("NextTurn", null, [self.foe]); + self.endTurn(); }) this.receive("medic:chooseCardFromDiscard", function(data){ if(!data){ - self.runEvent("NextTurn", null, [self.foe]); + //self.runEvent("NextTurn", null, [self.foe]); + + self.endTurn(); return; } var cardID = data.cardID; @@ -98,6 +106,7 @@ Battleside = (function(){ }) this.receive("emreis_leader4:chooseCardFromDiscard", function(data){ if(!data){ + self.endTurn(); //self.runEvent("NextTurn", null, [self.foe]); return; } @@ -108,12 +117,17 @@ Battleside = (function(){ self.foe.removeFromDiscard(card); self.placeCard(card); + + self.endTurn(); + // self.runEvent("NextTurn", null, [self.foe]); }) this.receive("agile:field", function(data){ var fieldType = data.field; if(!(fieldType in [0, 1])) throw new Error("set field agile: false fieldtype " + fieldType); self.runEvent("agile:setField", null, [fieldType]); - self.runEvent("NextTurn", null, [self.foe]); + + self.endTurn(); + //self.runEvent("NextTurn", null, [self.foe]); }) this.receive("cancel:agile", function(){ self.off("agile:setField"); @@ -122,7 +136,9 @@ Battleside = (function(){ var fieldType = data.field; if(!(fieldType in [0, 1, 2])) throw new Error("set field horn: false fieldtype " + fieldType); self.runEvent("horn:setField", null, [fieldType]); - self.runEvent("NextTurn", null, [self.foe]); + + self.endTurn(); + //self.runEvent("NextTurn", null, [self.foe]); }) this.receive("cancel:horn", function(){ self.off("horn:setField"); @@ -188,16 +204,9 @@ Battleside = (function(){ } r.getRandomCardOnField = function(){ - var close, range, siege; - - close = this.field[Card.TYPE.CLOSE_COMBAT].get(); - range = this.field[Card.TYPE.RANGED].get(); - siege = this.field[Card.TYPE.SIEGE].get(); - - var allCards = close.concat(range.concat(siege)); + var allCards = this.getFieldCards(); var rnd = (Math.random() * allCards.length) | 0; - //if(allCards[rnd].getType === 4) return null; return allCards[rnd]; } @@ -210,6 +219,16 @@ Battleside = (function(){ return -1; } + r.getFieldCards = function() { + var close, range, siege; + + close = this.field[Card.TYPE.CLOSE_COMBAT].get(); + range = this.field[Card.TYPE.RANGED].get(); + siege = this.field[Card.TYPE.SIEGE].get(); + + return close.concat(range.concat(siege)); + } + r.setPassing = function(b){ this._passing = b; this.send("set:passing", {passing: this._passing}, true); @@ -325,6 +344,13 @@ Battleside = (function(){ this.update(); + //this.runEvent("NextTurn", null, [this.foe]); + this.endTurn(); + } + + r.endTurn = function() { + this.update(); + this.runEvent("NextTurn", null, [this.foe]); } @@ -344,7 +370,8 @@ Battleside = (function(){ } if(obj._nextTurn && !obj.forceField){ this.update(); - this.runEvent("NextTurn", null, [this.foe]); + //this.runEvent("NextTurn", null, [this.foe]); + this.endTurn(); return 0; } @@ -509,6 +536,9 @@ Battleside = (function(){ if(ability.scorch){ this.scorch(card); } + if(ability.scorchMelee){ + this.scorchMelee(card); + } if(ability.removeImmediately){ this.hand.remove(card); this.addToDiscard(card); @@ -544,7 +574,8 @@ Battleside = (function(){ self.hand.remove(card); self.update(); - self.runEvent("NextTurn", null, [self.foe]); + //self.runEvent("NextTurn", null, [self.foe]); + self.endTurn(); self.battle.sendNotification(self.getName() + " played Decoy!"); }) } @@ -635,15 +666,21 @@ Battleside = (function(){ this.runEvent("WeatherChange"); } - r.scorch = function(card){ + r.scorchMelee = function(card) { var side = this.foe; var field = side.field[Card.TYPE.CLOSE_COMBAT]; + + this.battle.sendNotification(this.getName() + " played " + card.getName()); + + if(field.getScore() < 10) { + this.battle.sendNotification("Scorch: Score is under 10! Nothing happens."); + return; + } + var cards = field.getHighestCards(true); var removeCards = field.removeCard(cards); - this.battle.sendNotification(this.getName() + " played " + card.getName()); - var txt = "Scorch destroyed:"; for (var i = 0; i < removeCards.length; i++) { var c = removeCards[i]; @@ -655,6 +692,48 @@ Battleside = (function(){ side.addToDiscard(removeCards); } + r.scorch = function(card){/* + var side = this.foe; + var field = side.field[Card.TYPE.CLOSE_COMBAT]; + var cards = field.getHighestCards(true); + var removeCards = field.removeCard(cards);*/ + var cards = this.getFieldCards(); + cards = cards.concat(this.foe.getFieldCards()); + var noHeroes = true; + var res = []; + var highest = 0; + var self = this; + + this.battle.sendNotification(this.getName() + " played " + card.getName()); + + cards.forEach(function(card){ + if(noHeroes && card.hasAbility("hero")) return; + highest = card.getPower() > highest ? card.getPower() : highest; + }) + + cards.forEach(function(card){ + if(noHeroes && card.hasAbility("hero")) return; + if(card.getPower() === highest) res.push(card); + }); + + res.forEach(function(card) { + var side = self; + if(self.foe.field[card.getType()].isOnField(card)) { + side = self.foe; + } + var removed = side.field[card.getType()].removeCard(card); + side.addToDiscard(removed); + }) + + var txt = "Scorch destroyed:"; + for (var i = 0; i < res.length; i++) { + var c = res[i]; + txt += "\n" + c.getName(); + } + + this.battle.sendNotification(txt); + } + r.clearMainFields = function(){ var rndCard = null; if(this.deck.getFaction() === Deck.FACTION.MONSTERS){