diff --git a/docs/AI.md b/docs/AI.md index 5da8a4225e0..121a78ec28d 100644 --- a/docs/AI.md +++ b/docs/AI.md @@ -2,7 +2,7 @@ The AI is *not* "trained". It uses basic rules and can be easy to overcome knowing it's weaknesses. -The AI is; +The AI is: * Best with Aggro and midrange decks * Poor to Ok in control decks * Pretty bad for most combo decks @@ -42,7 +42,7 @@ In linux and mac, command line arguments are not currently passed through the sh - `-p [P]` - [P] number of players paired, only used in tournament mode. Default is 2. - `-q` - Quiet Mode, only prints the result not the entire log. -## Examples: +## Examples In linux and macos you must run forge by evoking java and calling the jar, currently command line parameters are not passed through the script. The forge jar filename is truncated in these examples from `forge-whatever-version-youre-on.jar` to `forge.jar`. In Windows, if you use the EXE file as described below, the simulation runs in the background and output is sent to the forge log file only. If you want to have output to the console, please use the `java -jar` evocation of forge. diff --git a/docs/Adventure-Mode-Shops.md b/docs/Adventure-Mode-Shops.md deleted file mode 100644 index 48cdce85287..00000000000 --- a/docs/Adventure-Mode-Shops.md +++ /dev/null @@ -1 +0,0 @@ -placeholder diff --git a/docs/Adventure-Mode-Starting-your-first-playthrough.md b/docs/Adventure-Mode-Starting-your-first-playthrough.md deleted file mode 100644 index bfbd3ec68c7..00000000000 --- a/docs/Adventure-Mode-Starting-your-first-playthrough.md +++ /dev/null @@ -1 +0,0 @@ -This is where I'm going to outline "starting a game" and "how to play" in adventure mode. \ No newline at end of file diff --git a/docs/Adventure-Quests.md b/docs/Adventure-Quests.md deleted file mode 100644 index e9fba530b86..00000000000 --- a/docs/Adventure-Quests.md +++ /dev/null @@ -1,2 +0,0 @@ -# Adventure Quests -(Placeholder, actual content coming soon) \ No newline at end of file diff --git a/docs/Biome-Data.md b/docs/Biome-Data.md deleted file mode 100644 index 5e7d840d294..00000000000 --- a/docs/Biome-Data.md +++ /dev/null @@ -1,2 +0,0 @@ -# Adventure Biome Data -(Placeholder, actual content coming soon) \ No newline at end of file diff --git a/docs/Configure-starting-sets.md b/docs/Configure-starting-sets.md deleted file mode 100644 index 24f324811fa..00000000000 --- a/docs/Configure-starting-sets.md +++ /dev/null @@ -1,14 +0,0 @@ - - -### Funny -PCEL, PAST, UGL, UNH, HHO, DS0, PHTR, UST, PUST, PH17, PH18, CMB1, UND, PH19, PH20, PH21, UNF, DA1, PH22, MB2 - -### Commander -COM, CM1, C13, C14, C15, C16, C17, CMA, CM2, C18, C19, C20, ZNC, KHC, C21, AFC, MIC, VOC, NEC, NCC, DMC, 40K, BRC, SCD, ONC, MOC, LTC, CMM, WOC, WHO, LCC, MKC, PIP, OTC, M3C, BLC, DSC, PDC -### Starters -CLU, LTR, CLB, CMD, MB1 -### Digital -PRM, MBP, MED, ME2, ME3, TD0, TD1, ME4, VMA, TPR, PZ1, PZ2, ANA, PANA, HA1, HA2, HA3, AJMP, AKR, ANB, KLR, HA4, HA5, J21, YMID, YNEO, YSNC, HBG, EA1, HA6, YDMU, YBRO, EA2, YONE, SIS, SIR, EA3, HA7, YWOE, YMKM, YOTJ, YBLB, YDSK - -### Promos -DRC94, PHPR, PLGM, PMEI, PARL, PRED, PTMP, JGP, PSTH, PEXO, PALP, PUSG, PAL99, G99, PULG, PUDS, PPTK, PGRU, PWOR, PWOS, PMMQ, PSUS, PAL00, FNM, G00, PELP, PNEM, PPCY, PINV, PAL01, F01, G01, MPR, PPLS, PAPC, PSDG, PODY, PAL02, F02, G02, PTOR, PJUD, PHJ, PAL03, F03, PJJT, G03, P03, OVNT, PLGN, PONS, PSCG, P8ED, PAL04, F04, G04, P04, PDST, P5DN, PMRD, PCHK, PAL05, F05, G05, PJSE, P05, PMPS, PBOK, PSOK, P9ED, PRAV, P2HG, PAL06, DCI, F06, G06, PJAS, P06, PMPS06, PGPT, PCMP, PDIS, PCSP, PTSP, F07, G07, PMPS07, PRES, PPLC, PPRO, PGPX, PFUT, P10E, PLRW, F08, G08, P08, PMPS08, PMOR, P15A, PSHM, PEVE, PALA, PDTP, F09, G09, P09, PMPS09, PBOOK, PCON, PURL, PARB, PM10, PZEN, PDP10, F10, G10, P10, PMPS10, PWWK, PROE, PM11, PSOM, PDP12, F11, G11, OLGC, P11, PMPS11, PW11, PMBS, PNPH, PM12, PISD, PDP13, F12, PIDW, J12, PW12, PDKA, PAVR, PHEL, PM13, PRTR, PDP14, F13, J13, PGTC, WMC, PDGM, PM14, PSDC, PTHS, PDP15, F14, J14, PBNG, PJOU, PCNS, PS14, PPC1, PM15, PKTK, F15, J15, UGF, PFRF, PDTK, PTKDF, PS15, PORI, PSS1, PBFZ, F16, J16, POGW, PSOI, PEMN, PKLD, PS16, F17, J17, PAER, PAKH, PHOU, PS17, PXLN, PSS2, PXTC, J18, PRIX, PNAT, PDOM, PM19, PSS3, PS18, PGRN, PRWK, G18, PF19, PRNA, PRW2, J19, PWAR, PMH1, PM20, PPP1, PS19, PWCS, J20, PF20, PLG20, PL21, PW21, PLG21, Q06, P22, PL22, PW22, GDY, PLG22, SCH, PSVC, P30M, P30A, P30H, PRCQ, BOT, PEWK, P23, PR23, PW23, PL23, SLP, PF23, P30T, PMDA, REX, PF24, PW24, PL24, PSS4, PCBB, PLG24, PLTC, PF25, PSPL, PJSC \ No newline at end of file diff --git a/docs/Create-Enemies.md b/docs/Create-Enemies.md index 93bc1633e95..db042eebc79 100644 --- a/docs/Create-Enemies.md +++ b/docs/Create-Enemies.md @@ -59,7 +59,6 @@ Every sprite under will be used as animation for the corresponding action. direction can be added to alter the animation depending on the direction like "IdleRight" Supported directions are "Right","Left","Up","Down","RightDown","LeftDown","LeftUp","RightUp" -See [sprite atlas reference](Sprite-Atlas) for more information ## **deck** Array of strings containing paths to the decks used for this enemy (from `res/`) @@ -80,7 +79,7 @@ Boolean - Not used to any great extent at this time, but a value of true in this Boolean - If true, this enemy ignores terrain collisions and can travel freely in their intended movement direction. ## **spawnRate** -Decimal - Relative frequency with which this enemy will be picked to spawn in appropriate biomes (which are set in the [biome json file](Biome-Data)). Existing values range from 0 to 1.0. +Decimal - Relative frequency with which this enemy will be picked to spawn in appropriate biomes (which are set in the biome json file). Existing values range from 0 to 1.0. ## **difficulty** Decimal - Relative estimated difficulty associated with this enemy. Currently unused, but will likely be factored in as a part of filtering enemies into early/late game appropriate opponents. Existing values range from 0 to 1.0. @@ -105,4 +104,4 @@ Array - A collection of strings representing [equipment items](adventure-items) String - Any combination of "B" (Black), "U" (Blue), "C" (Colorless), "G" (Green), "R" Red, and "W" (White). Used to display color identity alongside the sprite when an active ability allows it. ## **questTags** -Array- A collection of strings associated with this entity for filtering in regards to quests. See [Adventure Quests](Adventure-Quests) for more information on how these are used. \ No newline at end of file +Array- A collection of strings associated with this entity for filtering in regards to quests. \ No newline at end of file diff --git a/docs/Android-Debugging.md b/docs/Development/Android-Debugging.md similarity index 100% rename from docs/Android-Debugging.md rename to docs/Development/Android-Debugging.md diff --git a/docs/File-Formats.md b/docs/File-Formats.md index 1e09d24f398..4d4b917ad56 100644 --- a/docs/File-Formats.md +++ b/docs/File-Formats.md @@ -1,5 +1,3 @@ -This page is a work in progress... sorry, this is super complex, any input and help is definitely welcome! - # About There are many different file formats used in forge, due to the longevity of forge and it's growth and change, older formats are used and new ones are being created. This is an attempt to capture the requirements of these files for general creation, and modification. Unfortunately these "formats" may change and this list, or the data in them may become obsolete as changes happen, especially in newer features like Adventure Mode. diff --git a/docs/Forge_DevMode.textile b/docs/Forge_DevMode.textile deleted file mode 100644 index cc2093f1fae..00000000000 --- a/docs/Forge_DevMode.textile +++ /dev/null @@ -1,5 +0,0 @@ -Name:Vanilla Creature -ManaCost:2 G -Types:Creature Beast -Text:no text -PT:2/2 \ No newline at end of file diff --git a/docs/Future-Ways-to-Play.md b/docs/Future-Ways-to-Play.md deleted file mode 100644 index 5b746b16248..00000000000 --- a/docs/Future-Ways-to-Play.md +++ /dev/null @@ -1,54 +0,0 @@ -There are many ways to play Magic. This page exists to house rulesets that haven't been added to Forge yet. - -

Open House

-2-player, one mentor and one player who has never played before, sealed unsanctioned. Materials, two open house boxes, each containing a pair of monocolor 30-card decks - -1. Each player chooses a box, which contains two 30-card decks. Both decks are prebuilt 30-card decks, and one of the decks in the box is the color shown on the box. The other deck is a different color. -2. Players choose which deck to play with. They may combine both decks from their box if desired. -3. Players reveal their decks to one another before shuffling. -4. The match begins. -5. The mentor should do their best to make sure the new player is enjoying the game. - -

Booster Battle

-2-player, sealed limited unsanctioned. Materials: one Booster Battle blister containing two preconstructed monocolor 30-card decks, two booster packs - -1. Unwrap the decks, and decide which player gets which deck. -2. Each player opens a booster pack and chooses up to five cards to add to their deck. -3. Shuffle up and play! - -

Prerelease (typical)

-Sanctioned, limited, sealed tournament. Materials: 6 boosters and one promo. (Varies by release) Each match is 2-player. - -1. 30 minute timer starts. -2. Each player opens their boosters and receives their promo card. -3. Deck size is 40 minimum, the traditional five basic lands may be added to the pool. Sideboard size is unlimited. -4. After 30 minutes are up, timed matches begin. -5. Players are free to use a different deck each game if they choose as long as it comes from the same starting pool. - -

Duel Decks

-2-player, unsanctioned, sealed. Materials: Duel Decks box containing two 60-card precons. - -1. Unwrap the decks, and decide which player gets which deck. -2. Shuffle up and play! - -

Starter Set

-2-player, unsanctioned, sealed. Materials: Blister or box set containing two prestacked 30-card decks and learn-to-play walkthrough guides. - -1. Unwrap the decks, and decide which player gets which deck. -2. DO NOT SHUFFLE. -3. Play. - -

Unstable

-So you want to assemble a Contraption? - -No problem! Follow these $`\xcancel{\sf{four}}`$ $`\hat{H}|\psi(t)\rangle = i\hbar\frac {\normalsize\,\,\,\circlearrowright\!\!\!\!\!\circlearrowleft\!\!\!\!\!\!\!\!\!\!\small\curlyeqsucc\normalsize\!\!\!\!\!\!\cdotp\!\!\!\!\!\!\!\small\ldotp\normalsize\!\!\!\!\!\!\!\cdotp\!\!\!\!\!\!\!\small\curlyeqprec} {\normalsize\,\,\,\circlearrowright\!\!\!\!\!\circlearrowleft\!\!\!\!\!\!\!\!\!\!\small\curlyeqsucc\normalsize\!\!\!\!\!\!\cdotp\!\!\!\!\!\!\!\small\ldotp\normalsize\!\!\!\!\!\!\!\cdotp\!\!\!\!\!\!\!\small\curlyeqprec\!\!t} |\psi(t)\rangle`$ easy steps and you'll be slapping together devious devices in no time! - -1. Contraptions start each game in a separate deck: the Contraption deck. DON'T mix your Contraptions up with the rest of your cards! - -2. The Contraption deck has three sprockets. Start the game with a CRANK! counter on Sprocket 3. - -3. How do you assemble a Contraption? Reveal the top card of your Contraption deck, then choose one of your sprockets. Your Contraption enters the battlefield under that sprocket. - -4. At the beginning of your upkeep, if you control a Contraption, move the CRANK! counter to your next sprocket and crank any number of Contraptions on that sprocket, putting their triggered abilities onto the stack. Remember the sprocket order: $`\Bbb{1}\to\Bbb{2}\to\Bbb{3}\to\Bbb{1}`$ ... - -In Limited, you can play as many Contraptions as you have in your pool. How and when your Contraptions are assembled may yield wildly varying results from game to game. Experiment with different combinations and sequences and you're $`\xcancel{\sf{likely}}`$ CERTAIN to create something $`\xcancel{\sf{interesting}}`$ ⚡MONUMENTALLY POWERFUL!!!⚡ \ No newline at end of file diff --git a/docs/Getting-Started---Creating-your-character.md b/docs/Getting-Started---Creating-your-character.md deleted file mode 100644 index fc5466099be..00000000000 --- a/docs/Getting-Started---Creating-your-character.md +++ /dev/null @@ -1,7 +0,0 @@ -# Creating new world - -# Choosing difficulty - -# Choosing Mode and starting deck - -# New Game Plus \ No newline at end of file diff --git a/docs/Mana-Shards.md b/docs/Mana-Shards.md index e6359a117f5..af76d41d353 100644 --- a/docs/Mana-Shards.md +++ b/docs/Mana-Shards.md @@ -3,7 +3,7 @@ Mana Shards are a custom resource created for Adventure Mode in Forge. Shards se As Mana Shards are not self-replenishing, using them for activated abilities that affect the game world and in-match gameplay is a way of letting the player have a constant challenge of their own comfort level. If the player is comfortable taking on a fight without using extra abilities afforded to them by use of Shards, they will have more of them available to spend on in town, or can simply save their full might for boss-level entities. -The most consistent source of Mana Shards is from match wins, players receive one Shard per win without any rewards having to be explicitly added to the encounter. However, when used to power equipment and abilities, one Shard per match will definitely not break even, as most custom Adventure cards and items will cost 2-4 per use. However, Mana Shards can also be purchased in towns, picked up in dungeons, and can be received in large quantities from completing [Quests](Adventure-Quests). +The most consistent source of Mana Shards is from match wins, players receive one Shard per win without any rewards having to be explicitly added to the encounter. However, when used to power equipment and abilities, one Shard per match will definitely not break even, as most custom Adventure cards and items will cost 2-4 per use. However, Mana Shards can also be purchased in towns, picked up in dungeons, and can be received in large quantities from completing quests. Mana Shards can be used for: * Activated in-match abilities diff --git a/docs/Sprite-Atlas.md b/docs/Sprite-Atlas.md deleted file mode 100644 index b99388e4c31..00000000000 --- a/docs/Sprite-Atlas.md +++ /dev/null @@ -1,2 +0,0 @@ -# Adventure Sprite Atlases -(Placeholder, actual content coming soon) \ No newline at end of file diff --git a/docs/User-Guide.md b/docs/User-Guide.md index 958d2ebb983..93d332231ec 100644 --- a/docs/User-Guide.md +++ b/docs/User-Guide.md @@ -108,12 +108,9 @@ the **forge.exe** file. People using Apple's Mac OS X should use the Mac OS version and double click the **forge.command** file. People using one of the other \*nix OS should double click the **forge.sh** file. - # What if double-clicking doesn’t work? Sometimes double-clicking will open the jar file in a different program. In Windows, you may need to right-click and open the properties to change the launching program to Java. This might be different in OSX or -Linux systems(file permission related). - -Check the [troubleshooting page.](Troubleshooting-FAQ) +Linux systems (file permission related). diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java index d102ea2065d..d87c6a2a8c5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java @@ -424,7 +424,7 @@ public class CountersMoveAi extends SpellAbilityAi { // move counter to opponents creature but only if you can not steal them // try to move to something useless or something that would leave play - boolean isNegative = ComputerUtil.isNegativeCounter(cType, src); + boolean isNegative = cType != null && ComputerUtil.isNegativeCounter(cType, src); List filteredTgtList; filteredTgtList = isNegative ? CardLists.filterControlledBy(tgtCards, ai.getOpponents()) : CardLists.filterControlledBy(tgtCards, ai.getYourTeam()); diff --git a/forge-game/src/main/java/forge/game/ability/effects/BecomesBlockedEffect.java b/forge-game/src/main/java/forge/game/ability/effects/BecomesBlockedEffect.java index 9752445ce8b..1579c767305 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/BecomesBlockedEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/BecomesBlockedEffect.java @@ -9,6 +9,7 @@ import forge.game.Game; import forge.game.ability.AbilityKey; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; +import forge.game.card.CardCollection; import forge.game.event.GameEventCombatChanged; import forge.game.spellability.SpellAbility; import forge.game.trigger.TriggerType; @@ -39,7 +40,7 @@ public class BecomesBlockedEffect extends SpellAbilityEffect { blocked.add(c); final Map runParams = AbilityKey.newMap(); runParams.put(AbilityKey.Attacker, c); - runParams.put(AbilityKey.Blockers, Lists.newArrayList()); + runParams.put(AbilityKey.Blockers, CardCollection.EMPTY); runParams.put(AbilityKey.Defender, game.getCombat().getDefenderByAttacker(c)); runParams.put(AbilityKey.DefendingPlayer, game.getCombat().getDefenderPlayerByAttacker(c)); game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java b/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java index 676283cfffd..4023b968cc8 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerAttackerBlocked.java @@ -23,7 +23,6 @@ import com.google.common.collect.Iterables; import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.card.Card; -import forge.game.card.CardCollection; import forge.game.card.CardLists; import forge.game.spellability.SpellAbility; import forge.util.Expressions; @@ -65,7 +64,7 @@ public class TriggerAttackerBlocked extends Trigger { if (hasParam("ValidBlocker")) { String param = getParamOrDefault("ValidBlockerAmount", "GE1"); - int attackers = CardLists.getValidCardCount((CardCollection) runParams.get(AbilityKey.Blockers), getParam("ValidBlocker"), getHostCard().getController(), getHostCard(), this); + int attackers = CardLists.getValidCardCount((Iterable) runParams.get(AbilityKey.Blockers), getParam("ValidBlocker"), getHostCard().getController(), getHostCard(), this); int amount = AbilityUtils.calculateAmount(getHostCard(), param.substring(2), this); if (!Expressions.compare(attackers, param, amount)) { return false; diff --git a/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java b/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java index b573dadf430..3243e66dc5b 100644 --- a/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java +++ b/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java @@ -254,7 +254,6 @@ public class SimulateMatch { numPlayers++; } } - } if (numPlayers == 0) { diff --git a/forge-gui/release-files/GAMEPAD_README.txt b/forge-gui/release-files/GAMEPAD_README.txt index a141668182d..8a2af6a6ddb 100644 --- a/forge-gui/release-files/GAMEPAD_README.txt +++ b/forge-gui/release-files/GAMEPAD_README.txt @@ -1,6 +1,6 @@ Basic Gamepad Support for Adventure Mode -Tested using DS4 COntroller on Windows and Android. +Tested using DS4 Cpntroller on Windows and Android. If using on Windows OS and you have DS4Windows installed, you might experience dual input because of Emulated/Virtual Controller. To fix this you must use HidHide (better than exclusive mode). Refer to the guide here: https://vigem.org/projects/HidHide/Simple-Setup-Guide/