From 3736a0392d48cb7fd69b196932165c22ef1481a4 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 9 Nov 2025 09:05:29 +0100 Subject: [PATCH] User guide update (#9115) --- CONTRIBUTING.md | 2 + docs/AI.md | 3 + docs/Advanced-Search.md | 12 +- docs/Card-Images.md | 4 + docs/Card-scripting-API/AbilityFactory.md | 2 + docs/Creating-a-custom-Card.md | 54 ++++++++ docs/Creating-a-custom-Set.md | 9 ++ docs/{Custom-Music.md => Custom-Audio.md} | 0 docs/Development/github.png | Bin 0 -> 58749 bytes docs/Frequently-Asked-Questions.md | 31 +++-- docs/Skins.md | 4 + docs/Themes.md | 3 - docs/User-Guide.md | 119 +++++++++++++++--- docs/_sidebar.md | 38 +++--- docs/fantasy-blocks.md | 0 docs/search.png | Bin 0 -> 18912 bytes .../game/ability/effects/EarthbendEffect.java | 4 +- .../home/settings/VSubmenuPreferences.java | 6 +- forge-gui/forge.profile.properties.example | 2 +- forge-gui/release-files/INSTALLATION.txt | 2 +- forge-gui/res/cardsfolder/l/leech_fanatic.txt | 2 +- forge-gui/server.preferences.example | 3 +- 22 files changed, 242 insertions(+), 58 deletions(-) rename docs/{Custom-Music.md => Custom-Audio.md} (100%) create mode 100644 docs/Development/github.png create mode 100644 docs/Skins.md delete mode 100644 docs/Themes.md create mode 100644 docs/fantasy-blocks.md create mode 100644 docs/search.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e1244d3bb08..f2c4aad3fd0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,6 +57,8 @@ Card scripting resources are found in the forge-gui/res/ path. ## General Notes +Art files need to be copyright-free and they should be in the public domain. + ### Project Hierarchy Forge is divided into 4 primary projects with additional projects that target specific platform releases. The primary projects are: diff --git a/docs/AI.md b/docs/AI.md index 0f69be3d1a7..524b75e7b41 100644 --- a/docs/AI.md +++ b/docs/AI.md @@ -7,6 +7,9 @@ The AI is: - Poor to Ok in control decks - Pretty bad for most combo decks +The logic is mostly based on heuristics and split between effect APIs and all other ingame decisions. Sometimes there is hardcoded logic for single cards but that's usually not a healthy approach though it can be more justifiable for highly iconic cards. +Defining general concepts of smart play can help improve the win rate much easier, e.g. the AI will always attack with creatures that it has temporarily gained control of until end of turn in order not to miss the opportunity and thus waste the control effect. + If you want to train a model for the AI, please do. We would love to see something like that implemented in Forge. # AI Matches from Command Line diff --git a/docs/Advanced-Search.md b/docs/Advanced-Search.md index ec5681d9a08..ab06f663869 100644 --- a/docs/Advanced-Search.md +++ b/docs/Advanced-Search.md @@ -1,9 +1,19 @@ # Advanced Search -Forge implements many ways to help you find the cards you want in your ever growing collection. One of them uses a [Scryfall-like syntax](https://scryfall.com/docs/syntax) in the collection search bar. +Forge implements many ways to help you find the cards you want in your ever growing collection. + +Pressing Ctrl+Enter in current search adds another editable search bar. +Here's how searching for all Goblins without Haste-related abilities might look: +![search](search.png) + +Click the "X" in the upper right corner of each search widget to remove that filter from the filter stack. + +Find-as-you-type is implemented for Deck Editor tables. Just start typing while the table has focus and the next card with a matching string in its name will be highlighted. If more than one card matches, hit Enter to select the next matching card. A popup panel will appear with the search string so you know what you are searching for. If no cards match the string, the string will be highlighted in red. Find-as-you-type mode is automatically exited after 5 seconds of inactivity, or hit Escape to exit find-as-you-type mode immediately. ## Additional information +Another way to filter is using [Scryfall-like syntax](https://scryfall.com/docs/syntax) in the collection search bar. + If no operators are passed between tokens, Forge will assume it is joined by `and`. For example, `t:cat t:warrior t:creature` will search for "creatures that are a cat **and** a warrior". Make sure to use `|` or `or` for your queries, as well as parentheses `( )` when needed. Keywords can be negated by prefixing a minus sign `-`. For example, `t:creature -t:goblin` will search for "creatures that aren't goblins". diff --git a/docs/Card-Images.md b/docs/Card-Images.md index 4fad0323270..2470cd6fd1a 100644 --- a/docs/Card-Images.md +++ b/docs/Card-Images.md @@ -8,6 +8,10 @@ Primarily there are two types of images you'll care about; cards, and tokens. **Tokens** - are the images for the cards replacing a generic "1/1 zombie" for example. These are less frequently updated, and are typically the bulk of what is missing when doing an audit. However, these are probably where the more true "custom" replacements are available, with either custom artwork, or modified of other existing. +A deck may explicitly define the edition and art variant of each card it includes. If a deck specifies those for no card, Forge uses a special algorithm to determine which card printings were the latest by the moment all of deck's had been printed. These very editions of cards are used when loading deck into memory to reflect the flavour of the season when the deck was built. + +Card images are cleared from memory cache when switching screens and between games. + # Downloading Due to charges in Forges hosting and scryfall terms you can no longer predownload card images. Turn on auto download in forge to download card images when first viewed. diff --git a/docs/Card-scripting-API/AbilityFactory.md b/docs/Card-scripting-API/AbilityFactory.md index 3f99638e114..eaef05c2c8a 100644 --- a/docs/Card-scripting-API/AbilityFactory.md +++ b/docs/Card-scripting-API/AbilityFactory.md @@ -295,6 +295,8 @@ Parameters: ### ControlExchange +### ControlPlayer + ### ControlSpell ## Copy* diff --git a/docs/Creating-a-custom-Card.md b/docs/Creating-a-custom-Card.md index 632adea9500..168d3b67845 100644 --- a/docs/Creating-a-custom-Card.md +++ b/docs/Creating-a-custom-Card.md @@ -173,3 +173,57 @@ The sinmlest method for creating an effect on your card is to find another card >./Forge/res/cardsfolder/cardsfolder.zip Unzipping this file will sllow you to search for any card in the containing subfolders. + +# Custom mechanics + +We don't accept new mechanics from outside of official Cards into the main repository. This restriction is needed to keep the engine healthy. + +However there is some support to simulate them using named abilities: + +This will support things like being able to target specific SA using a custom name. (Flash on Meditate abilities in this example) + +```text +Name:Plo Koon +ManaCost:3 W W +Types:Legendary Creature KelDor Jedi +PT:4/4 + +S:Mode$ CastWithFlash | ValidSA$ Activated.NamedAbilityMeditate | Caster$ You | Description$ You may activate meditate abilities any time you could cast an instant. + +A:AB$ ChangeZone | Named$ Meditate | Cost$ 1 W | ActivationZone$ Battlefield | SorcerySpeed$ True | Origin$ Battlefield | Destination$ Hand | Defined$ Self | SpellDescription$ Meditate (Return this creature to its owner's hand. Meditate only as a sorcery.) + +Oracle:You may activate meditate abilities any time you could cast an instant.\nMeditate 1W (Return this creature to its owner's hand. Meditate only as a sorcery.) +``` + +Restrict trigger to only if was triggered by a specific type of SA (Only Scry when Meditating and not being bounced), and reduce cost for a specific type of ability. + +```text +Name:Jedi Training +ManaCost:U +Types:Enchantment + +S:Mode$ ReduceCost | ValidCard$ Card | ValidSpell$ Activated.NamedAbilityMeditate | Activator$ You | Amount$ 1 | Description$ Meditate abilities you activate cost {1} less to activate. + +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Hand | TriggerZones$ Battlefield | ValidCard$ Creature.Jedi+YouCtrl | Condition$ FromNamedAbilityMeditate | SubAbility$ DBScry | TriggerDescription$ Whenever a Jedi creature you control meditates, scry 1. +SVar:DBScry:DB$ Scry | ScryNum$ 1 + +Oracle:Meditate abilities you activate cost {1} less to activate.\nWhenever a Jedi creature you control meditates, scry 1. +``` + +It will also allow for cards to check if a card was cast using an certain ability using `Count$FromNamedAbility..`: + +```text +Name:Chronic Traitor +ManaCost:2 B +Types:Creature Human Rogue +PT:2/1 + +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSacrifice | TriggerDescription$ When this creature enters, each player sacrifices a creature. If this creature's paranoia cost was paid, each player sacrifices two creatures instead. +SVar:TrigSacrifice:DB$ Sacrifice | Defined$ Player | SacValid$ Creature | Amount$ X +SVar:X:Count$FromNamedAbilityParanoia.2.1 + +T:Mode$ ChangesZone | TriggerZones$ Hand | ValidCard$ Permanent.YouCtrl | Origin$ Battlefield | Destination$ Any | Execute$ PayParanoia | TriggerDescription$ Paranoia {2}{B}{B} (You may cast this spell for its paranoia cost when a permanent you control leaves the battlefield.) +SVar:PayParanoia:DB$ Play | Named$ Paranoia | PlayCost$ 2 B B | ValidSA$ Spell.Self | Controller$ You | ValidZone$ Hand | Optional$ True + +Oracle:When this creature enters, each player sacrifices a creature. If this creature's paranoia cost was paid, each player sacrifices two creatures instead.\nParanoia {2}{B}{B} (You may cast this spell for its paranoia cost when a permanent you control leaves the battlefield.) +``` \ No newline at end of file diff --git a/docs/Creating-a-custom-Set.md b/docs/Creating-a-custom-Set.md index e76c990c2c6..b6fe122f9f2 100644 --- a/docs/Creating-a-custom-Set.md +++ b/docs/Creating-a-custom-Set.md @@ -260,6 +260,15 @@ For the tokens, we can deposit them inside `%localappdata%/Forge/Cache/pics/toke You can now start your game again, and see that the art loads correctly now. +## Excursion: Card variants + +There are currently multiple ways to specify a flavor name: +* Manually, by writing `Variant:Foo:FlavorName:Loret Ipsum` in the card script, and adding `${"variant": "Foo"}` to the end of the edition entry. You'll also want to add `Variant:Foo:Oracle:When Loret Ipsum enters...` if the flavor name would appear in the Oracle text, or if it would otherwise be changed. +* By lookup, again by using `Variant:Foo:FlavorName:Loret Ipsum` in the card script, but simply using "Loret Ipsum" as the name in the edition file. +* Automatically, by putting `${"flavorName": "Loret Ipsum"}` at the end of the edition entry. + +The third method is the easiest, but besides a simple find/replace for the card name, it won't be able to make any changes to flavor the Oracle text, such as for ability words. They all function the same under the hood once the CardDB is loaded; the latter two are just shortcuts for the first. + ## 🎉 Congratulations You’ve just added your first custom set in Forge! There's still much more to explore — scripting advanced abilities, custom mechanics, and set structures — but you now have a solid foundation to build from. diff --git a/docs/Custom-Music.md b/docs/Custom-Audio.md similarity index 100% rename from docs/Custom-Music.md rename to docs/Custom-Audio.md diff --git a/docs/Development/github.png b/docs/Development/github.png new file mode 100644 index 0000000000000000000000000000000000000000..d294054c938110dc3cc9b1e5f2e973dbbffd4366 GIT binary patch literal 58749 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 z literal 0 HcmV?d00001 diff --git a/docs/Frequently-Asked-Questions.md b/docs/Frequently-Asked-Questions.md index d182c2033d2..4e18077360b 100644 --- a/docs/Frequently-Asked-Questions.md +++ b/docs/Frequently-Asked-Questions.md @@ -6,13 +6,18 @@ https://discord.com/channels/267367946135928833/1095026912927154176 * Search the help posts in Discord https://discord.com/channels/267367946135928833/1047001034788196452 -Note: For now, please also check [this](https://www.slightlymagic.net/forum/viewtopic.php?f=26&t=11825) forum topic for some additional information. - # General ## How do I download content? -Forge has content downloaders within the app itself, you can use those tools to update the graphics assets. More information about card and token image assets can be found here. [Card Images, Downloading](Card-Images#downloading) +Forge has content downloaders within the app itself, you can use those tools to update the graphics assets. More information about card and token image assets can be found here. [Card Images, Downloading](Card-Images.md#downloading) + +## My desktop match/deck view is all messed up? +The match and deck editor windows contain panels that can be moved and/or resized. The changes that you make are saved to files that are named "editor.xml" and "match.xml". These files can be found in your userDir/preferences/ directory. + +Sometimes people will decide that they do not like the changes that they made and wish to go back to the original layout. To reset layouts to default, go to the Game Settings -> Preferences -> Troubleshooting section. You will find at this location two buttons that will reset the match layout and the deck editor layouts. + +Also use the mentioned measure if your match or deckeditor won't start - it would help in 90% of the cases. ## I think I found a bug in Forge. What do I do? @@ -24,7 +29,7 @@ For starters, please take note of (1) what you had in play, (2) what your oppone If you did not get a Crash Report, but you have experienced a problem in how Forge handled one or more cards or game rules, *please read the cards (and the Oracle rulings) carefully* to make sure you understand how they work. You may be surprised to find that Forge is actually enforcing the rules correctly. -Because duplicate bug reports use up our limited resources, please research your bug with the **Search** box on Forge's [issue tracker](https://git.cardforge.org/core-developers/forge/-/issues) to see if your bug has already been reported there. For Crash Reports, use key words from the second paragraph of the Crash Report. +Because duplicate bug reports use up our limited resources, please research your bug with the **Search** box on Forge's [issue tracker](https://github.com/Card-Forge/forge/issues) to see if your bug has already been reported there. For Crash Reports, use key words from the second paragraph of the Crash Report. * If you find a matching issue, examine it to see if you have anything new to contribute. For example, a different way of reproducing a problem can sometimes be helpful. If the issue was posted to the forum, you may post your additional information there. @@ -46,7 +51,17 @@ A development environment such as [IntelliJ](https://www.jetbrains.com/idea) is Thanks to the nature of how cards are implemented, you can also contribute these as small plain text files. This is especially helpful during a preview season, when there are a lot of new cards in the backlog. This is mostly coordinated in #card-scripting on the Discord (and the pins there). -To obtain the source code of Forge, read our [Development Guide]((SM-autoconverted)--how-to-get-started-developing-forge). +For smaller first-time contributions using the GitHub web interface is also an alternative: +![github](Development/github.png) + +1. Register GitHub Account (if you don't already have one) +2. Make your own fork of Forge, press this button on the main project page (must only be done first time) +3. In your fork you can navigate to `forge-gui/res/cardsfolder/upcoming` and either Upload new files or open an existing one +4. When you're done at the bottom make sure to create a new branch, that makes it easier to keep your changes apart +5. On the next page make sure you choose the original project as merge target (see screens) +6. Please test your scripts and watch for review comments + +To obtain the source code of Forge, read our [Development Guide](Development/IntelliJ-setup/IntelliJ-setup.md). ## My system is all setup to help. What now? @@ -56,7 +71,7 @@ Take a look through the /res/cardsfolder folder. This is where all the card data ## Where do I use Flashback or a similar ability that is in an External area? -Click on the Lightning Bolt icon in the player panel. Since cards with External Activations aren't as clear to activate, we created this shortcut for this specific purpose. +Click on the Lightning Bolt icon in the player panel. Since cards with external Activations aren't as clear to activate, we created this shortcut for this specific purpose. After the last card is removed from a zone window, that window will automatically be hidden. ## How do I target a player? @@ -71,7 +86,3 @@ If you have an effect that generated you some mana, and you don't know where it ## What is the difference between Fantasy Quest and Normal Quest? In Normal Quest, you start with 20 life and only have access to the Card Shop. In Fantasy Quest, you start at 15 life and gain additional access to the Bazaar which allows you to buy things like extra life points, Pets, Plants and more. - -## Sealed Deck Mode - -[HOW-TO: Customize your Sealed Deck games with fantasy blocks](https://www.slightlymagic.net/forum/viewtopic.php?f=26&t=8164) diff --git a/docs/Skins.md b/docs/Skins.md new file mode 100644 index 00000000000..a215a11c115 --- /dev/null +++ b/docs/Skins.md @@ -0,0 +1,4 @@ +Download more skins here: +https://github.com/Card-Forge/forge-extras/releases/tag/themes + +[Skin Template + Atlas file](https://github.com/user-attachments/files/23420566/forge_sprite_icons_template.zip) \ No newline at end of file diff --git a/docs/Themes.md b/docs/Themes.md deleted file mode 100644 index 71adb21071f..00000000000 --- a/docs/Themes.md +++ /dev/null @@ -1,3 +0,0 @@ -This page is a placeholder for Theme creation information. - -I'm working on creating an atlas data file for the skin sprite sheets. I'll separate this into 3 sections; Skins, Music and Sounds, and Card Images. \ No newline at end of file diff --git a/docs/User-Guide.md b/docs/User-Guide.md index 855aa59e358..4b8dd158147 100644 --- a/docs/User-Guide.md +++ b/docs/User-Guide.md @@ -1,8 +1,6 @@ -# User Guide +# Downloads -## Downloads - -### Snapshots +## Snapshots * Snapshots are automated daily builds of the source code. * They contain the latest bug fixes, features and cards. @@ -16,7 +14,7 @@ -### Releases +## Releases * "Releases" are really intended where "99% cards implemented are working and stable". * **They are NOT bug-free.** They are not updated after they're built, meaning you need to wait for the next release if you encounter a bug, or use the SNAPSHOT version instead. @@ -27,7 +25,7 @@ * Grab the installer file that ends in .jar -## System Requirements +# System Requirements **Forge Requires Java** to run, please make sure you have Java installed on your machine prior to attempting to run. @@ -47,11 +45,13 @@ We have created several scripts that will launch Forge with a greater allotment of system resources. (We do this by passing `-Xmx1024m` as an argument to the Java VM.) -## Install and Run +If you plan to eventually download all card images make sure you have several gigabytes of free drive space. + +# Install and Run > Warning: Do **NOT** owerwrite an existing installation. Always unpack/install the package in a new folder to avoid problems! -### Install Wizard (jar) +## Install Wizard (jar) * Run/Double click "**forge-installer**-VERSION.jar" where VERSION is the current release version and click next until the Target Path window appears. If double clicking the .jar file doesn't load the main interface you can run it via terminal/command line ```java -jar FILENAME.jar``` where FILENAME is the name of the installer. @@ -67,16 +67,16 @@ 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). -### Manual Extraction (tar.bz2) +## Manual Extraction (tar.bz2) -#### Desktop Windows +### Desktop Windows * Unpack "forge...*tar.bz2*" with any unpacking/unzipping app (e.g. 7-zip, winrar, etc) * You'll end up with "forge...*tar*". * Unpack that ".tar" file once more into its own folder. * Run Forge app/exe -#### Desktop Linux/Mac +### Desktop Linux/Mac * Unpack "forge...*tar.bz2*" with any unpacking app. (Check your package repository, or app store.) * You'll probably end up with just a folder, and fully extracted. @@ -87,12 +87,39 @@ This might be different in OSX or Linux systems (file permission related). * If the command file doesn't appear to do anything, you'll need to [modify the permissions to be executable.](https://support.apple.com/guide/terminal/make-a-file-executable-apdd100908f-06b3-4e63-8a87-32e71241bab4/mac) (This is a temporary bug in the build process.) * Additionally OSX needs to have a JRE AND a JDK installed because reasons. -#### Android +### Android * Sideload/Install "forge...apk" * Run Forge -### Play Adventure Mode on Desktop +# User data migration +There are three defined user data directories: userDir, cacheDir, and cardPicsDir, and their locations depend on the standard paths for your operating system: + + Windows: + userDir=%APPDATA%/Forge/ + cacheDir=%LOCALAPPDATA%/Forge/Cache/ (or %APPDATA%/Forge/Cache/ for Windows versions before the local/roaming directory split) + OSX: + userDir=$HOME/Library/Application Support/Forge/ + cacheDir=$HOME/Library/Caches/Forge/ + Linux: + userDir=$HOME/.forge/ + cacheDir=$HOME/.cache/forge/ + +The appdata directory is hidden by default in Windows 7 and above versions. Open a Windows Explorer window (or double-click on My Computer) and in the address field type "%appdata%/forge/" (without the quotes). + +cardPicsDir is defined as /pics/cards/ by default. If you wish to use a non-default directory, please see the forge.profile.properties.example file located in the Forge installation directory root. You can use this file to, for example, share the card pics directory with another program, such as Magic Workstation. + +If you are using the Mac OS X version of Forge then you will find the forge.profile.properties.example file by right clicking or control clicking on the Forge.app icon. Select "Show Package Contents" from the contextual menu. A Finder window will open and will display a folder named Contents. Navigate to the folder: +/Contents/Resources/Java/ +and you will find the file. + +## Import Data +If you have a directory full of deck files, you can use the Import Data dialog to copy or move them to the appropriate directory. The dialog gives you a full listing of all file copy/move operations, so you can see what will happen before you click 'Start Import'. + +# Accessibility +We know some people are colorblind and may not be able to differentiate between colors of the default theme. Forge does have access to other [Skins](Skins.md), which use other color palettes that might be more suitable for you. + +# Play Adventure Mode on Desktop * Run the Adventure Mode EXE or Script in the Folder you extracted. * The game will start with an option for Adventure or Classic Mobile UI. @@ -101,9 +128,69 @@ This might be different in OSX or Linux systems (file permission related). * check you're up to date with your version. * check in the settings that the "Selector Mode" is set to `Default` -## Gameplay +# Gameplay -### Full Control +## Targeting Arrows +When hovering over items on the stack, arrows will be displayed between that item and all of its targets (both cards and players). +The arrow will be red if the spell/ability's activator is an opponent of the target or its controller, and blue if targeting an ally of the target or its controller. +## Card Zoomer +You can gaze at your HQ images in all their glory with just a flick of the mousewheel, holding the middle mouse button down, or holding the left and right mouse buttons down at the same time. This feature will also increase the size of low quality pics up to the size used for high quality pics, but the image will not be very clear. + +Instructions: +- Works on any card image in the Deck Editor or Duel screen. +- Move your mouse over the card you want to zoom and mouse-wheel forward. +- Mouse-wheel back, mouse click or pressing ESC closes the zoomed image. + +Split cards (name contains "//") are rotated 90 degrees for easier viewing. + +If a card is a flip or double-sided card then you can easily view the alternate image using flick wheel forward or tap CTRL key. + +The standard flip graphic (the two rotated arrows) is displayed if the card can be flipped or transformed. + +Forge supports showing XLHQ (extra large high quality) card pictures when zooming in on a card if these pictures are available. Forge will look for XLHQ card art in the "XLHQ" subfolder of the "pics/cards" folder in Forge cache. XLHQ pictures should have the ".xlhq.jpg" extension instead of the ".full.jpg" one (CCGHQ XLHQ releases comply with this naming scheme). +Please note that XLHQ versions of cards are *only* showed in the zoom view, regular card pictures are still used (LQ/HQ, depending on what you're using) on the battlefield and elsewhere in the game because XLHQ art is significantly more taxing in memory consumption (and in addition to that, XLHQ card borders are not cropped the way Forge expects them in order to show them properly on the battlefield anyway). + +XLHQ tokens are also supported, but the naming scheme for them is a little different - they are looked up in "pics/tokens/XLHQ" and have their ordinary names. + +## Easier creature type selection +When prompted to select a creature type for a card like *Obelisk of Urd*, creature types present in your deck will appear on top, sorted from most to least frequent, followed by all other creature types. +This should make it so, more often than not, you can just accept the dialog without searching. + +## Auto-Target +When playing spells and abilities with the text "target opponent", if you only have one opponent, you will no longer be asked to choose the opponent to target. +When triggered abilities have only one valid target, that target will now be auto-selected. + +## Auto-Pay +When paying mana costs, you can press Enter/Spacebar or click the Auto button in the Prompt to automatically pay the mana cost using available mana sources if possible. +- The button will be disabled if you cannot pay the mana cost at that time, in which case Enter/Spacebar will cancel the spell/ability instead. +- Uses the same logic the AI uses to pay mana costs. This means it will try to use mana in your pool before mana sources in play, using colorless mana to pay the colorless part of the cost if any is available. +- You can still manually pay the cost by clicking mana sources in play (e.g. lands) or clicking symbols in your mana pool, which might be a good idea if you want to save specific mana sources for a later play that turn. +- you'll still be prompted when paying Sunburst or cards that care what colors are spent to cast it (ex. Firespout). + +## Auto-Yield +- When a spell or an ability appears on the stack and it says "(OPTIONAL)" you can right-click it to decide if you want to always accept or to decline it. + + It is possible to specify the granularity level for auto-yields: the difference is that, for example, when yielding per ability if you auto-yield to Hellrider's triggered ability once, all triggers from other Hellrider cards will be automatically auto-yielded to as well. When yielding per card, you will need to auto-yield to each Hellrider separately. + + Note that in when auto-yielding per ability, auto-yields will NOT be automatically cleared between games in a match, which should speed the game up. When auto-yielding per card, auto-yields WILL be automatically cleared between games because they are dependent on card IDs which change from game to game, thus you will need to auto-yield to each card again in each game of the match. + +- Pressing "End Turn" skips your attack phase and doesn't get cancelled automatically if a spell or ability is put on the stack. You will still be given a chance to declare blockers if your opponent attacks, but after that the rest of your opponent's turn will now be skipped properly. + + To alleviate pressing this accidentally, as long as you're passing this way, you'll be able to press Escape or the Cancel button to be given the chance to act again. Phases with stops and spells/abilities resolving will be given a slight delay to allow you to see what's going on. + +## Shift Key helper +* When you mouse over a flip, transform or Morph (controlled by you) card in battlefield, hold SHIFT to see other state of that card at the side panel that displays card picture and details. +* Hold SHIFT when clicking on mana pool icons to use as much of that mana type as possible towards the cost. +* Tap all lands in a stack using Shift+click on any in the stack. +* Attack with all creatures in a stack using Shift+click on any in the stack. + +## Full Control Right click/long tap on your player avatar: -This feature lets you skip different helpers that streamline gameplay by avoiding somewhat annoying GUI interactions and instead use AI logic to make reasonable decisions for beginners.\nUseful for certain corner cases or if you want to challenge yourself with the Comprehensive Rules:\ne.g. the opposite cost order is needed if activating an animated "Halo Fountain" that's also tapped. +This feature lets you skip different helpers that streamline gameplay by avoiding somewhat annoying GUI interactions and instead use AI logic to make reasonable decisions for beginners. Useful for certain corner cases or if you want to challenge yourself with the Comprehensive Rules: +e.g. the opposite cost order is needed if activating an animated "Halo Fountain" that's also tapped. + +## Repeatable Sequences (Macros) +A feature for advanced users: during a match, you can use the default shortcut shift-R to specify a sequence of actions (mouse clicks, essentially, in the desktop paradigm). Type the IDs of cards/players you'd like to interact with, in order. Then the default shortcut @ (shift-2) will execute your sequence, one "click" at a time, repeating when it reaches the end. This is useful for executing repeated combos, such as sacrificing a recurring creature to Goblin Bombardment. You can see the IDs of cards by turning them on under "Card Overlays" in the "Game" menu. + +The macro will dutifully execute your click sequence without regard to changes in game state (so if an opponent kills your specified creature mid-macro, and you continue to execute it, you will be essentially clicking on the creature in the graveyard, which may or may not be what you want). \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md index f0ddbaa4a23..d703e663d71 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -10,20 +10,19 @@ - [Advanced search](Advanced-Search.md) - [Adventure Mode](Adventure/Adventure-Mode.md) - - Gameplay Guide - - [Getting Started](Adventure/Gameplay-Guide.md) - - [Different Planes](Adventure/Different-Planes.md) - - [Currency](Adventure/Currency.md) - - [Deck Building Tips](Adventure/Deck-Building-Tips.md) - - [Towns & Capitals](Adventure/Towns-&-Capitals.md) - - [Dungeons](Adventure/Dungeons.md) - - [Equipments and Items](Adventure/Equipments-and-Items.md) - - [Keyboard Shortcuts](Keyboard-Shortcuts.md) - - [Controller Support](Adventure/GAMEPAD.md) - - [Console and Cheats](Adventure/Console-and-Cheats.md) - - [Modding and content creation](Adventure/Modding.md) + - Gameplay Guide + - [Getting Started](Adventure/Gameplay-Guide.md) + - [Different Planes](Adventure/Different-Planes.md) + - [Currency](Adventure/Currency.md) + - [Deck Building Tips](Adventure/Deck-Building-Tips.md) + - [Towns & Capitals](Adventure/Towns-&-Capitals.md) + - [Dungeons](Adventure/Dungeons.md) + - [Equipment & Items](Adventure/Equipments-and-Items.md) + - [Controller Support](Adventure/GAMEPAD.md) + - [Console & Cheats](Adventure/Console-and-Cheats.md) + - [Modding & content creation](Adventure/Modding.md) - [Create Enemies](Adventure/Create-Enemies.md) - [Create Rewards](Adventure/Create-Rewards.md) - [Create Maps](Adventure/Create-new-Maps.md) @@ -45,22 +44,23 @@ - [Restrictions / Conditions](Card-scripting-API/Restrictions.md) - [Tutorial: creating a custom card](Card-scripting-API/Creating-a-Custom-Card.md) -- [Development]((SM-autoconverted)-how-to-get-started-developing-forge.md) +- Development - [IntelliJ Setup](Development/IntelliJ-setup/IntelliJ-setup.md) - - [Snapshots and Releases](Development/Snapshots-and-Releases.md) + - [Snapshots & Releases](Development/Snapshots-and-Releases.md) - [Android Builds](Development/Android-Builds.md) - [Dev Mode](Development/DevMode.md) - [Ownership](Development/ownership.md) - [Docker Container](docker-setup.md) -- [Customization and Themes](Themes.md) - - Skins - - Sounds - - [Music](Custom-Music.md) +- Customization & Themes + - [Skins](Skins.md) + - [Sounds & Music](Custom-Audio.md) - [Card Images](Card-Images.md) - [File Formats](File-Formats.md) - [Tutorial: creating your first custom set](Creating-a-custom-Set.md) + - [Fantasy Blocks](fantasy-blocks.md) - [Missing Cards in Forge](Missing-Cards-in-Forge.md) - [Un‐cards, Playtest Cards, and Other Funny Cards](Un‐cards,-Playtest-Cards,-and-Other-Funny-Cards.md) -- [Credit and Thanks](Credit-and-Thanks.md) \ No newline at end of file + +- [Credit & Thanks](Credit-and-Thanks.md) \ No newline at end of file diff --git a/docs/fantasy-blocks.md b/docs/fantasy-blocks.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/search.png b/docs/search.png new file mode 100644 index 0000000000000000000000000000000000000000..da44af066ca84d486af5c337eaeac2d6ad283ce6 GIT binary patch literal 18912 zcmZ6SRa9F|xP}QqO9)ULg11P~;I2hlv{0?wtJR+?|Wa z&RW@PX7+sgJ`<`SCyD-!=p7s!9Qqfj&x&wx@HnvV!YD|vchSdFM%V|yUQtpMu6z`7 z0J}gi5s?*vgR6>0d)7mQU8CAasoTTBfxG{E0s5_r4Pif0IEbq`h}jwGIha{nk$*R{ zG=gJgVddb3LU~!Z$)Rk#92~stP%SbtNjSJKQeQrce0R}4(L&Do-a8|R14z_QHpa&p z{~Y;|d{$^;U@C-KHyq^?0k%O8UL>M|em4ryQTJz&{7})nzF=xUEd>i`)uoI==PFj> zsCV1hNTajU+Ub%fI>oZJ^Q|0@{q9JryUA!~s(Zb9GLu#^Gk&bmaMFQw*zUjdK|5Jr zVA?_d1cOU5g#fe8*N@d16vJaOqtY+`(z)abpg**746mzqhS}>UX=`!bQ;520*8O!*xUUVbzdN?-4i zNx3?ikfsMQ�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 P00000NkvXXu0mjfmvpK4 literal 0 HcmV?d00001 diff --git a/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java b/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java index ea7219d3cde..afcd45db9ab 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/EarthbendEffect.java @@ -31,7 +31,7 @@ public class EarthbendEffect extends SpellAbilityEffect { sb.append(amount).append(". (Target land you control becomes a 0/0 creature with haste that's still a land. Put "); sb.append(Lang.nounWithNumeral(amount, "+1/+1 counter")); - sb.append(" on it. When it dies or is exiled, return it to the battlefield tapped.)"); + sb.append(" on it. When it dies or is exiled, return it to the battlefield tapped under your control.)"); return sb.toString(); } @@ -74,7 +74,7 @@ public class EarthbendEffect extends SpellAbilityEffect { protected void buildTrigger(SpellAbility sa, Card c, String sbTrig, String zone) { final Card source = sa.getHostCard(); final Game game = source.getGame(); - String trigSA = "DB$ ChangeZone | Defined$ DelayTriggerRemembered | Origin$ " + zone + " | Destination$ Battlefield | Tapped$ True"; + String trigSA = "DB$ ChangeZone | Defined$ DelayTriggerRemembered | Origin$ " + zone + " | Destination$ Battlefield | Tapped$ True | GainControl$ You"; final Trigger trig = TriggerHandler.parseTrigger(sbTrig, CardCopyService.getLKICopy(source), sa.isIntrinsic()); final SpellAbility newSa = AbilityFactory.getAbility(trigSA, sa.getHostCard()); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java index 5f4c8910bb0..469eb15cfdd 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java @@ -438,6 +438,9 @@ public enum VSubmenuPreferences implements IVSubmenu { pnlPrefs.add(cbpSwitchStates, comboBoxConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSwitchStates")), descriptionConstraints); + pnlPrefs.add(cbSROptimize, titleConstraints); + pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSrOptimize")), descriptionConstraints); + // Sound options pnlPrefs.add(new SectionLabel(localizer.getMessage("SoundOptions")), sectionConstraints + ", gaptop 2%"); @@ -455,8 +458,7 @@ public enum VSubmenuPreferences implements IVSubmenu { pnlPrefs.add(cbAltSoundSystem, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlAltSoundSystem")), descriptionConstraints); - pnlPrefs.add(cbSROptimize, titleConstraints); - pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSrOptimize")), descriptionConstraints); + // Keyboard shortcuts pnlPrefs.add(new SectionLabel(localizer.getMessage("KeyboardShortcuts")), sectionConstraints); diff --git a/forge-gui/forge.profile.properties.example b/forge-gui/forge.profile.properties.example index 8a6acb2bacb..221037acbba 100644 --- a/forge-gui/forge.profile.properties.example +++ b/forge-gui/forge.profile.properties.example @@ -77,7 +77,7 @@ cardPicsDir= cardPicsSubDirs= # This is the top level directory that forge will use for storing and -# locating decklists. The default value (for all plaforms) is: +# locating decklists. The default value (for all platforms) is: # /decks/ decksDir= diff --git a/forge-gui/release-files/INSTALLATION.txt b/forge-gui/release-files/INSTALLATION.txt index 549dbb27ed6..a4445795bd9 100644 --- a/forge-gui/release-files/INSTALLATION.txt +++ b/forge-gui/release-files/INSTALLATION.txt @@ -1,4 +1,4 @@ -The Forge archive includes a docs folder and we ask that you spend a few minutes reading this as it contains some information that may prove useful. You can open the .md (markdown) files with any plain Editor. +The Forge archive includes a docs folder and we ask that you spend a few minutes reading this as it contains some information that may prove useful. You can open the .md (markdown) files with any plain Editor - or just browse it online from our GitHub wiki. The archive format used for the Forge distribution is ".tar.bz2". There are utilities for Windows, Mac OS and the various *nix's that can be used to extract/decompress these ".tar.bz2" archives. We recommend that you extract/decompress the Forge archive into a new and unused folder. diff --git a/forge-gui/res/cardsfolder/l/leech_fanatic.txt b/forge-gui/res/cardsfolder/l/leech_fanatic.txt index b06a44092a9..c807d7a079a 100644 --- a/forge-gui/res/cardsfolder/l/leech_fanatic.txt +++ b/forge-gui/res/cardsfolder/l/leech_fanatic.txt @@ -2,5 +2,5 @@ Name:Leech Fanatic ManaCost:1 B Types:Creature Human Warlock PT:2/2 -S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Lifelink | Condition$ PlayerTurn | Description$ During your turn, CARDNAME has first strike. +S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Lifelink | Condition$ PlayerTurn | Description$ During your turn, CARDNAME has lifelink. Oracle:During your turn, Leech Fanatic has lifelink. diff --git a/forge-gui/server.preferences.example b/forge-gui/server.preferences.example index aadee932cb0..fa27d3fb588 100644 --- a/forge-gui/server.preferences.example +++ b/forge-gui/server.preferences.example @@ -1,5 +1,4 @@ -# Forge server port. Values under 1024 won't work on Mac OSX or on the various -# *nixes. +# Forge server port. Values under 1024 won't work on Mac OSX or on the various *nixes. NET_PORT=36743 #This determines if Forge should attempt to open a port automatically, on supported routers, using UPnP UPnP=ASK # ASK, ALWAYS, NEVER \ No newline at end of file