mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
Combine Adventure docs (#9098)
This commit is contained in:
12
docs/Adventure/Adventure-Mode.md
Normal file
12
docs/Adventure/Adventure-Mode.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# What is Adventure Mode?
|
||||
|
||||
Adventure mode is a work-in-progress game mode where you explore the ever-changing landscape of Shandalar, duel creatures to earn gold and new cards to battle the various bosses. You can visit towns to buy equipment and cards, and crawl through dungeons to find artifacts and loot to help you on your journey. Adventure mode is an awesome reimagining of the original "Shandalar" 1997 PC Game in Forge, even though the scope of adventure is much broader and we don't constrain ourselves to the lore of the plane of Shandalar. You can play Shandalar on Desktop (Linux, Windows, IOS) or on Android devices.
|
||||
|
||||
# How to run?
|
||||
|
||||
1. Step 1: Download the latest version of Forge https://downloads.cardforge.org/dailysnapshots/
|
||||
2. Step 2: Make sure you have the required version of the JDK (https://www.oracle.com/be/java/technologies/downloads/)
|
||||
3. Step 3: Launch the adventure mode from the "adventure.exe" file included in the forge version (on android, the adventure version should be embedded into the main Forge program)
|
||||
4. Step 4: In order to have pictures show up make sure you enable "automatically download missing card images" in the settings. This should automatically download the picture of the card as you encounter them in game.
|
||||
|
||||
|
||||
90
docs/Adventure/Configure-Planes.md
Normal file
90
docs/Adventure/Configure-Planes.md
Normal file
@@ -0,0 +1,90 @@
|
||||
Base settings of a plane is configured in
|
||||
config.json
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
{
|
||||
"screenWidth": 480,
|
||||
"screenHeight": 270,
|
||||
"skin": "skin/ui_skin.json",
|
||||
"playerBaseSpeed": 32,
|
||||
"minDeckSize": 40,
|
||||
"starterDecks": [
|
||||
"decks/starter/white.json",
|
||||
"decks/starter/black.json",
|
||||
"decks/starter/blue.json",
|
||||
"decks/starter/red.json",
|
||||
"decks/starter/green.json"
|
||||
],
|
||||
"restrictedCards": [
|
||||
"Black Lotus",
|
||||
"Ancestral Recall"
|
||||
],
|
||||
"restrictedEditions": [],
|
||||
"legalCards":{
|
||||
"editions": ["M22","M21"]
|
||||
},
|
||||
"difficulties": [
|
||||
{
|
||||
"name": "Easy",
|
||||
"startingLife": 16,
|
||||
"staringMoney": 500,
|
||||
"enemyLifeFactor": 0.8,
|
||||
"spawnRank": 0,
|
||||
"sellFactor": 0.6,
|
||||
"startItems": [
|
||||
"Manasight Amulet",
|
||||
"Leather Boots"
|
||||
]
|
||||
},{
|
||||
"name": "Normal",
|
||||
"startingLife": 12,
|
||||
"staringMoney": 250,
|
||||
"startingDifficulty": true,
|
||||
"enemyLifeFactor": 1.0,
|
||||
"spawnRank": 1,
|
||||
"sellFactor": 0.5,
|
||||
"startItems": [
|
||||
"Leather Boots"
|
||||
]
|
||||
},{
|
||||
"name": "Hard",
|
||||
"startingLife": 8,
|
||||
"staringMoney": 125,
|
||||
"enemyLifeFactor": 1.5,
|
||||
"spawnRank": 2,
|
||||
"sellFactor": 0.25
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
# Fields:
|
||||
|
||||
## **screenWidth**
|
||||
## **screenHeight**
|
||||
Logical screen with/height, changing this would require to change all ui elements and won't increase resolution.
|
||||
|
||||
## **skin**
|
||||
path to the used skin for adventure
|
||||
|
||||
## **playerBaseSpeed**
|
||||
base speed of player character
|
||||
|
||||
## **minDeckSize**
|
||||
minimum deck size for matches, decks with lesser cards will be filled with wastes.
|
||||
|
||||
## **starterDecks**
|
||||
string list of all starter decks
|
||||
## **restrictedCards**
|
||||
string list of restricted cards, those cards won't appear in random shops or rewards but it it still possible to get those cards if the plane specifically drops it.
|
||||
## **restrictedEditions**
|
||||
string list of restricted editions, behaves the same as restricedCards but with editions.
|
||||
|
||||
## **difficulties**
|
||||
list of DifficultyData
|
||||
## **legalCards**
|
||||
RewardData for legal cards, behaves similar as restrictedCards only as white list and not black ist.
|
||||
Also it is defined as RewardData see [Create-Rewards](https://github.com/Card-Forge/forge/wiki/Create-Rewards) for syntax
|
||||
23
docs/Adventure/Configure-Sets.md
Normal file
23
docs/Adventure/Configure-Sets.md
Normal file
@@ -0,0 +1,23 @@
|
||||
In order to edit which sets will show up in random rewards and shop you will need to edit the config file. You can find it here "forgefolder"\res\adventure\common\config.json. Add the sets you want to have restricted to the "restricted edition" section
|
||||

|
||||
|
||||
|
||||
|
||||
### 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
|
||||
|
||||
### Universes Beyond
|
||||
|
||||
40K,SLD,ACR,PCBB,PIP,REX,WHO,LTR,LTC,BOT,HBG,CLB,AFR
|
||||
43
docs/Adventure/Console-and-cheats.md
Normal file
43
docs/Adventure/Console-and-cheats.md
Normal file
@@ -0,0 +1,43 @@
|
||||
Forge provides an in-game console in adventure mode.
|
||||
|
||||
You can access (and close) the console while exploring by pressing F9 (or Fn-F9).
|
||||
|
||||
To scroll the console window, click and drag the text box.
|
||||
|
||||
## Available commands
|
||||
|
||||
| Command Example | Description |
|
||||
| -- | -- |
|
||||
| resetMapQuests | Resets the map quests, resulting in all side-quest progress being lost and all side-quest types being re-picked |
|
||||
| give gold 1000 | Give 1000 gold |
|
||||
| give shards 1000 | Give 1000 shards |
|
||||
| give print lea 232 | Add an alpha (LEA set code) black lotus (232 collector number) |
|
||||
| give item <item name or code?> | Adds an in game item such as leather boots |
|
||||
| give set sld | Give 4 copies of every card in the Secret Lair Drop (set code SLD), flagged as having no sell value |
|
||||
| give nosell card forest | Gives a forest with no sell value |
|
||||
| give boosters leb | Add a booster from beta (LEB set code) |
|
||||
| give quest 123 | Add the quest by its number ID |
|
||||
| give life 10 | Add 10 life to yourself |
|
||||
| give card forest | Adds a forest to your inventory |
|
||||
| debug collision | Displays bounding boxes around entities |
|
||||
| debug map | TODO |
|
||||
| debug off | Turns off previously enable debugging |
|
||||
| teleport to 6000 5000 | Moves you 6000 tiles east and 5000 tiles north from the left bottom corner |
|
||||
| fullHeal | Returns your health back to baseline |
|
||||
| sprint 100 | Increases your speed for 100 seconds |
|
||||
| setColorId R | Sets the player color identity; Probably used for testing and shops |
|
||||
| clearnosell | Clears the no sell value flag from all cards you own that are not used in a deck |
|
||||
| remove enemy abc | Remove the enemy from the map with the map ID abc |
|
||||
| remove enemy all | Remove all the enemies from the map |
|
||||
| dumpEnemyDeckList | Print the enemy deck lists to terminal output stream |
|
||||
| getShards amount 100 | Similar to give shards command; Gives 100 shards to the player |
|
||||
| resetQuests | Resets the world quests. In progress quests are not abandonned or reset including dungeons. Does not reroll abandoned quests. Not really sure what this does. |
|
||||
| hide 100 | Enemies do not chase you for 100 seconds |
|
||||
| fly 100 | You can walk over obstacles for 100 seconds |
|
||||
| crack | Cracks a random item you are wearing |
|
||||
| spawn enemy Sliver | Spawns a Sliver on your screen |
|
||||
| listPOI | Prints all locations in terminal output stream as ID-type pairings |
|
||||
| leave | Gets you out of the current town/dungeon/cave |
|
||||
| dumpEnemyColorIdentity | Prints all enemies, their colour affinity and deck name to terminal output |
|
||||
| heal | Recover your full health |
|
||||
| dumpEnemyDeckColors | Prints all decks available to enemies and their affinities |
|
||||
107
docs/Adventure/Create-Enemies.md
Normal file
107
docs/Adventure/Create-Enemies.md
Normal file
@@ -0,0 +1,107 @@
|
||||
All Enemies are stored under `res/<AdventureName>/world/enemies.json`
|
||||
|
||||
Enemies spawned on the overworld map or on map stages will use this exact template to define their base behavior. These values can be modified or added to with additional settings on an individual enemy basis, details of which can be found within [map instance](Create-new-Maps.md).
|
||||
|
||||
Some ideas for custom enemy cards:
|
||||
- basic (CR or at least Alchemy conform) effects for normal mobs to add flavor
|
||||
- advanced + all UN stuff. but their mechanics could be combined in new ways not seen in print
|
||||
- boss/rare ones that are balanced around meta mechanics (=quests)
|
||||
|
||||
The Json file contains an Array of Objects and each Object is one enemy.
|
||||
EnemyObject:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Challenger 20",
|
||||
"nameOverride": "Challenger",
|
||||
"sprite": "sprites/monsters/doppelganger.atlas",
|
||||
"deck": [
|
||||
"decks/challenger/challenger_20_allied_fires.dck",
|
||||
"decks/challenger/challenger_20_cavalcade_charge.dck",
|
||||
"decks/challenger/challenger_20_final_adventure.dck",
|
||||
"decks/challenger/challenger_20_flash_of_ferocity.dck"
|
||||
],
|
||||
"ai": "",
|
||||
"randomizeDeck": true,
|
||||
"spawnRate": 0.25,
|
||||
"difficulty": 0.25,
|
||||
"speed": 28,
|
||||
"life": 22,
|
||||
"rewards": [],
|
||||
"colors": "UBRWG",
|
||||
"questTags": [
|
||||
"Challenger",
|
||||
"IdentityUnknown",
|
||||
"BiomeGreen",
|
||||
"BiomeRed",
|
||||
"BiomeColorless",
|
||||
"BiomeWhite",
|
||||
"BiomeBlue",
|
||||
"BiomeBlack"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
# Fields:
|
||||
|
||||
## **name**
|
||||
String - Has to be unique
|
||||
Name of the enemy, every time an other object will use an enemy, it will refer to this name.
|
||||
|
||||
## **nameOverride**
|
||||
String - If provided, this will be displayed in any references to this enemy in the game. If not provided, Name will be used.
|
||||
|
||||
## **sprite**
|
||||
String - Path to the sprite atlas for the enemy (from `res/<AdventureName>`)
|
||||
In fights against the enemy, the sprite under "Avatar" will be used as avatar picture.
|
||||
Every sprite under
|
||||
"Idle","Walk","Attack","Hit","Death"
|
||||
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"
|
||||
|
||||
## **deck**
|
||||
Array of strings containing paths to the decks used for this enemy (from `res/<AdventureName>`)
|
||||
If no decks are defined then the enemy will act like a treasure chest and give the rewards without a fight.
|
||||
(only for enemies in dungeons)
|
||||
The format for the deck file can be the normal forge *.dck syntax or a json file that will behave like a collection of [rewards](Create-Rewards.md) to get a random generated deck.
|
||||
|
||||
## **randomizeDeck**
|
||||
Boolean - if true then the enemy deck will be randomly selected from the deck array. If false, an algorithm will select a deck in sequential order based on the player's prior win/loss ratio against that opponent (discouraged and currently unused due to wild swings in ratio at low game count).
|
||||
|
||||
## **ai**
|
||||
String - Currently unused, this appears to be intended to allow different playstyles to be associated with this enemy.
|
||||
|
||||
## **boss**
|
||||
Boolean - Not used to any great extent at this time, but a value of true in this field indicates that this is a boss-level enemy for which the match presentation can be changed if desired. Currently, this causes capable Android devices to vibrate for a longer period on collision with the enemy sprite.
|
||||
|
||||
## **flying**
|
||||
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). 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.
|
||||
|
||||
## **speed**
|
||||
Integer - Movement speed of this enemy in overworld or on a [map instance](Create-new-Maps.md). For comparison, the player's base speed is set at a value of 32 (before any equipment / ability modifiers).
|
||||
|
||||
## **scale**
|
||||
Decimal - Default 1.0. For enemies whose sprites are too large or small for their intended usage, this serves as multiplier for the enemy's visual dimensions & collision area. By default, we work with 16x16 pixel sprites for most entities - this can be replicated with a more detailed 32x32 sprite by setting a scale of 0.5 for the enemy entry.
|
||||
|
||||
## **life**
|
||||
Integer - Base starting life total. This is modified universally by a value determined by the player's chosen difficulty, and can be adjusted further at the enemy object level on [map instances](Create-new-Maps.md).
|
||||
|
||||
## **rewards**
|
||||
Array - A collection of the rewards to be granted for defeating the enemy.
|
||||
see [Create Rewards](Create-Rewards.md) for the syntax.
|
||||
|
||||
## **equipment**
|
||||
Array - A collection of strings representing [equipment items](adventure-items) normally intended for player use that this enemy will have. Not used widely, usually when an enemy will drop that [equipment](adventure-items) and it does not use [mana shards](mana-shards).
|
||||
|
||||
## **colors**
|
||||
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.
|
||||
178
docs/Adventure/Create-Rewards.md
Normal file
178
docs/Adventure/Create-Rewards.md
Normal file
@@ -0,0 +1,178 @@
|
||||
Rewards represent anything that can be obtained by the player in Adventure Mode. Cards are the most common type of reward, but rewards can also represent a pieces of equipment, gold, mana shards, maximum life increases, keys, or generic items to be interacted with via dialogs and quests.
|
||||
|
||||
Rewards are associated with...
|
||||
* Enemies - The loot they drop when defeated.
|
||||
* Lootable items - Treasure chests, piles of gold, spellbooks, or mana shards on dungeon maps.
|
||||
* Shops - The items available for purchase.
|
||||
* Dialog - Items given to the player during a dialog sequence OR required in order to have access to an option.
|
||||
* Quests - Rewards for completion of a quest.
|
||||
* Events - Rewards for completion of an event.
|
||||
|
||||
As a multipurpose concept, Reward data has a large number of fields, but almost all are optional and no one reward will use all of the fields.
|
||||
|
||||
The expected fields and behavior for the rewards are set based on the reward's `type` value. This is the one field that all reward data must contain, as it tells the game what other fields to expect data in and how to process them.
|
||||
|
||||
The simplest types are `gold` (give the player X gold), `shards` (give the player X [mana shards](mana-shards), and `life` (increase the player's current and maximum life total by this amount [given very sparingly]). Beyond their types, these three items only require a `count` field. Optional fields for these types include `probability` and `addMaxCount`, (see full list at bottom). An example of a `gold` reward that will grant the player 50 gold follows:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "gold",
|
||||
"count": 50
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
`Item` rewards are slightly more specific, but still relatively simple, requiring `type`, `count`, and EITHER `itemName` or `itemNames`, examples of both follow. Optional parameters again include `probability` and `addMaxCount`. If `itemName` is specified, then `count` copies of the named item will be granted to the player. If `itemNames` is specified, `count` copies of items randomly selected from the list of named items provided will be granted instead.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "item",
|
||||
"count":1,
|
||||
"itemName": "Mithril Boots"
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "item",
|
||||
"count":1,
|
||||
"itemNames": ["Mithril Boots", "Mithril Shield", "Mithril Armor"]
|
||||
}
|
||||
```
|
||||
|
||||
`Card` rewards are potentially the most complex from a definition standpoint, but almost all of the fields are optional. A simple and a complex example follow below.
|
||||
|
||||
Granting the player one completely random card that is legal for use in Adventure:
|
||||
```json
|
||||
{
|
||||
"type": "card",
|
||||
"count":1
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
As a contrasting and complicated example that will return no matching results, consider the card reward data below. 80% of the time, this will try to grant the player 1-9 (modified further by difficulty) cards that are rare, multicolor, contain both red and blue in their color identity, are from M21 or M22 editions, are either instants or creatures, have the Elf subtype, contain the word "dragon" in the card name, contain the word "destroy" and/or "exile" in the card text. Details on the individual fields can be found in the reference list at the bottom of this page.
|
||||
```json
|
||||
{
|
||||
"type": "card",
|
||||
"probability": 0.8,
|
||||
"count":1,
|
||||
"addMaxCount":8,
|
||||
"colors": ["red","blue"],
|
||||
"rarity": ["rare"],
|
||||
"editions": ["M22","M21"],
|
||||
"cardTypes": ["Instant","Creature"],
|
||||
"colorType": "MultiColor",
|
||||
"subTypes": ["Elf"],
|
||||
"superTypes" :["Legendary"]
|
||||
"cardName": "dragon",
|
||||
"cardText": "destroy|exile"
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
`Union` reward types are a purely structural element. This reward type does nothing on its own, but it is used as wrappers for multiple `card` instances that has distinctly separate parameters. Required elements are `type` (Union), `count`, and `cardUnion` (which contains additional `card` reward definitions). Optional parameters are, once again `addMaxCount` and `probability`. As an example, the following would award the player with a single red dragon from M21 OR a single green sorcery from M22, but never a red sorcery, M22 dragon, or so on. The individual card pools are conjoined, giving an equal chance of all possible cards across the pools.
|
||||
|
||||
```json
|
||||
{
|
||||
"count":1,
|
||||
"type":"Union",
|
||||
"cardUnion": [
|
||||
{
|
||||
"count":1,
|
||||
"editions": ["M21"],
|
||||
"subTypes": ["Dragon"],
|
||||
"colors": ["red"]
|
||||
},
|
||||
{
|
||||
"count":1,
|
||||
"editions": ["M22"],
|
||||
"cardTypes": ["Sorcery"],
|
||||
"colors": ["green"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
# Fields:
|
||||
|
||||
## **type**
|
||||
Defines the type of reward.
|
||||
Valid options are:
|
||||
* `gold` will reward the player with gold.
|
||||
* `life` will increase the maximum life of the player.
|
||||
* `shards` will reward the player with [mana shards](mana-shards).
|
||||
* `item` will give items to be added to the player's inventory.
|
||||
* `card` will create one or more cards matching a detailed set of filters to follow.
|
||||
* `union` is a wrapper for multiple `card` instances that can have mutually exclusive filters.
|
||||
* `deckCard` is only used with rewards from [enemies](Create-Enemies.md), this functions as a `card` reward that is limited to cards found in that enemy's deck.
|
||||
|
||||
`{"type": "card", ...}`
|
||||
|
||||
## **probability**
|
||||
The probability of this reward being given out, on a decimal scale from 0 to 1. (Defaults to 1 if not provided)
|
||||
|
||||
`{..., "probability": 0.5, ...}`
|
||||
|
||||
## **count**
|
||||
If given at all (see `probability`, above), get at least this many of the reward.
|
||||
|
||||
`{..., "count": 10, ...}`
|
||||
|
||||
## **addMaxCount**
|
||||
If given at all, an additional "addMaxCount" instances of the reward will be added. A pre-set multiplier based on the chosen difficulty is applied to this parameter. On normal difficulty, you will get the reward "count" to "addMaxCount" times, `{"type": gold", "count":10, "addMaxCount":5"}` would give anywhere from 10 to 15 gold. (Defaults to 0 if not provided)
|
||||
|
||||
`{..., "addMaxCount": 5, ...}`
|
||||
|
||||
## **colors**
|
||||
An array of the possible colors for `card` and `deckCard`.
|
||||
|
||||
`{..., "colors": ["red", "black"], ...}`
|
||||
|
||||
## **rarity**
|
||||
An array of the possible raritys for `card` and `deckCard`.
|
||||
|
||||
`{..., "rarity": ["basicland", "common", "uncommon", "rare", "mythicrare"], ...}`
|
||||
|
||||
## **editions**
|
||||
An array of the possible editions for `card` and `deckCard`, referenced by their 3 character set code.
|
||||
|
||||
`{..., "editions": ["ONE", "MOM", "MAT"], ...}`
|
||||
|
||||
## **cardTypes**
|
||||
An array of the possible cardTypes for `card` and `deckCard`.
|
||||
|
||||
`{..., "cardTypes": ["Creature", "Artifact", "Enchantment", "Instant", "Sorcery", "Planeswalker", "Battle"], ...}`
|
||||
|
||||
## **subTypes**
|
||||
An array of the possible subTypes for `card` and `deckCard`.
|
||||
Usually used for creature types, but can also denote names of planeswalkers, types of battles, etc.
|
||||
|
||||
`{..., "subTypes": ["Elf", "Dragon", "Gideon", "Urza", "Siege", "Tribal"], ...}`
|
||||
|
||||
## **superTypes**
|
||||
An array of the possible superTypes for `card` and `deckCard`.
|
||||
|
||||
`{..., "superTypes ": ["Legendary", "Basic", "Snow"], ...}`
|
||||
|
||||
## **cardName**
|
||||
The exact name of a `card` to use.
|
||||
|
||||
`{..., "cardName": "Llanowar Elves", ...}`
|
||||
|
||||
## **cardText**
|
||||
A regular expression defining text that must appear on the card. A sequence of plain text alphanumeric (A-Z, 0-9) characters can function here if you are unfamiliar with regular expressions, but many special characters will change the functionality. Useful for denoting keywords or identifying helper cards that are associated with but do not actually have a given type.
|
||||
|
||||
`{..., "cardText": "reveal the top card of", ...}`
|
||||
|
||||
`{..., "cardText": "cast (an instant|a sorcery) from your hand", ...}`
|
||||
|
||||
## **deckNeeds**
|
||||
This is a functional but partially implemented concept at best, as the result set is currently limited. Card scripts can be tagged as having certain attributes that are used for creating synergies in decks constructed by the game. If/when this feature is expanded to more of our script library, the using those tags will become more and more useful to use for defining rewards so as to allow "concepts" to be awarded as opposed to specific card names or text contents.
|
||||
|
||||
`{..., "deckNeeds": ["Ability$Graveyard"], ...}`
|
||||
|
||||
## **cardPack**
|
||||
This element should not be seen or used in JSON definitions of reward data. `cardPack` rewards are a type that represent a collection of cards whose contents have been pre-determined in game logic (such as a drafted deck that can be kept after an event), but that were not pre-determined at the time when the reward data was written. To manually implement granting specific or randomized cards we should use one or more `card` rewards, detailed above. When granted, this will create an item in the player's inventory that can subsequently be opened by the player to award the individual card contents of the associated deck.
|
||||
42
docs/Adventure/Create-new-Maps.md
Normal file
42
docs/Adventure/Create-new-Maps.md
Normal file
@@ -0,0 +1,42 @@
|
||||
Maps in the adventure mode are created with the tool Tiled
|
||||
[](https://www.mapeditor.org/)
|
||||
|
||||
Open the tiled-project under `<adventure>/maps/main.tiled-project`
|
||||
|
||||

|
||||
|
||||
This will allow you to edit the maps and tile sets.
|
||||
To interact with the player, objects needs to be added to the Objects layer.
|
||||
|
||||
Objects templates are stored in the "obj" folder, but are not necessary.
|
||||
Impotent are the types of the object and his properties.
|
||||
|
||||
## Object types
|
||||
|
||||
# enemy
|
||||
will spawn an Enemy on the map. On collide with the player a magic duel will be started.
|
||||
If the player win, the enemy will be removed from the map and the player will get the reward.
|
||||
If the player loose, then the player will move 1 step back and receive the standard penalty.
|
||||
Loot is also defined as enemy without a deck, then the player will receive the reward right away.
|
||||
Properties:
|
||||
`enemy` name of the enemies
|
||||
|
||||
# shop
|
||||
Will spawn an shop on the map. On collide the player will enter the shop.
|
||||
|
||||
Properties:
|
||||
`shopList` List of possible shop, leave it empty for all shops.
|
||||
`signXOffset` x offset for the shop sign.
|
||||
`signYOffset` y offset for the shop sign.
|
||||
|
||||
# inn
|
||||
Will spawn an inn the map. On collide the player will enter the inn.
|
||||
|
||||
Properties:
|
||||
# entry
|
||||
Will be used as the map entry and exit. On collide the player will be teleported to an other map or the over world.
|
||||
|
||||
Properties:
|
||||
`direction` the position where to spawn. up means the player will be teleported to the upper edge of the object rectangle.
|
||||
`teleport` The map where the player gets teleported. If the property is empty, then the player will be teleported to the over world.
|
||||
`teleportObjectId` the object id where the player will be teleported. If empty then it will search for an entry object, that would teleport the player back to the source map.
|
||||
46
docs/Adventure/Currency.md
Normal file
46
docs/Adventure/Currency.md
Normal file
@@ -0,0 +1,46 @@
|
||||
There are many currencies in the game, and most of them can be interchanged.
|
||||
|
||||
# Cards
|
||||
|
||||
Acquired by:
|
||||
- World drops
|
||||
- Match reward
|
||||
- Draft wins
|
||||
- Shop purchases
|
||||
- Quests
|
||||
|
||||
Spent on:
|
||||
- Selling to shops
|
||||
|
||||
# Gold
|
||||
|
||||
Acquired by:
|
||||
- World drop
|
||||
- Match reward
|
||||
- Draft reward
|
||||
- Quests
|
||||
|
||||
Spent on:
|
||||
- Cards and items from shops
|
||||
- Drafts games
|
||||
- Crafting cards
|
||||
- Shards
|
||||
|
||||
# Shards
|
||||
|
||||
Acquired by
|
||||
- World drop
|
||||
- Quest reward
|
||||
|
||||
Spent on
|
||||
- Crafting cards
|
||||
- Shop Re-rolls
|
||||
- Gold exchange
|
||||
|
||||
# Challenge Coins
|
||||
|
||||
Acquired by
|
||||
- At the start of the game
|
||||
|
||||
Spent on
|
||||
- Drafts
|
||||
28
docs/Adventure/Deck-Building-Tips.md
Normal file
28
docs/Adventure/Deck-Building-Tips.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Adding basic lands and special arts
|
||||
|
||||
You can add lands by clicking the triple dots icon in the right top of the deck building interface.
|
||||
|
||||
Initially you only have access to jumpstart basic land arts - to get more, you need to purchase the landscape sketch books from the basic land shop (The Cartographers Guild).
|
||||
|
||||
# 40-card deck recommendation
|
||||
|
||||
40-card decks give you a much more predictable curve.
|
||||
|
||||
In a 40-card deck, each individual card has a 2.5% chance of being drawn.
|
||||
|
||||
In a 60-card deck, each individual card has a 1.6% chance of being drawn.
|
||||
|
||||
When you use a smaller deck, the significance of each individual card is much higher and will give you more predictable performance.
|
||||
|
||||
# Autosell
|
||||
|
||||
When you click a card that is not part of any decks, you get the option to move it to auto-sell.
|
||||
|
||||
The numbers in the interface indicate how many copies you have.
|
||||
|
||||
To sell the cards you have marked, go to any town and enter the Inn.
|
||||
In the Inn, the middle icon of the coin called Sell (E) will sell all your cards you have marked to sell.
|
||||
|
||||
Individual card values vary by rarity and reputation with the town you sell them in.
|
||||
|
||||
Since dying will cause you to lose a percentage of your gold, you may want to not sell all your cards immediately.
|
||||
40
docs/Adventure/Different-Planes.md
Normal file
40
docs/Adventure/Different-Planes.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# The Different Planes of Adventure Mode
|
||||
|
||||
In Adventure Mode, you can select different planes (AKA worlds) to experience. The default experience is the Shandalar plane, and is the basis of gameplay found in all the others. The other planes are community projects, and are in various states of completion. Below there is a list of each plane in the game (as of this writing), and it's status.
|
||||
|
||||
To change planes, open up Adventure Mode. On the main screen where you can either load a game or start a new one. Go to the Settings menu, and you will find a drop down on the top right with a list of the planes currently available. When changing planes, you will need to restart Forge to apply the change. Save files are unique to each plane, and will load back in when you change to the appropriate plane.
|
||||
|
||||
## Amonkhet
|
||||
|
||||
A plane set in the world of Amonkhet, and is intended to have new quests, story, enemies, etc. based on that Magic The Gathering plane.
|
||||
|
||||
**STATUS:** Very broken. Not recommended for play, unless you want to dip your head in and see a very different overworld map. Pretty much nothing else works properly. _You have been warned._
|
||||
|
||||
|
||||
## Crystal Kingdoms
|
||||
|
||||
A plane with a focus on the Final Fantasy cards. Intended to have a unique story, quests, enemies, etc. based on the Final Fantasy games.
|
||||
|
||||
**STATUS:** Very pre-alpha. The plane 'works' but is almost identical to the default Shandalar plane. The big differences is new starting decks, and the card rewards in shops and from enemies, have a stronger Final Fantasy bent than usual.
|
||||
|
||||
## Innistrad
|
||||
|
||||
A plane set in the lore and world of Magic the Gathering's Innistrad plane. The card pool and enemies are limited to Innistrad, with some minor exceptions. There is also a distinctly different overworld, story, enemies, etc. Every map is new and unique compared to Shandalar.
|
||||
|
||||
**STATUS:** Technically alpha. Everything is 'functional' in that it is all closed off and separate from the Shandalar plane. The enemies are new, the quests include some base and some new (though the tutorial has some strong similarities). The shops are new-ish (they currently use the base shops, but with a limited card pool to just the plane. This is actively being changed to entirely new shops however, and should become notable in the next few updates.) Every town, dungeon, and cave is unique to Innistrad and been custom built for the plane. Every enemy is also new to Innistrad.
|
||||
|
||||
_HOWEVER_: Everything is still very early in design. Most of the biomes are empty. The new quests are limited. The shops under work. The story ends partway through the tutorial. The first bosses are being worked on. The enemies are few in number, but growing rapidly in development. Etc. This plane is best for short plays to see what is going on, but don't expect to spend much time here, Yet. That said, it is the community plane receiving the most work and most consistent updates. With changes coming at the minimum, monthly, preferably weekly.
|
||||
|
||||
In it's current state, expect to find bugs. if you do, please report them to Shenshinoman in the Forge Discord.
|
||||
|
||||
## Shandalar
|
||||
|
||||
The base plane, where all the magic happens, and where the dev team members working on Adventure generally focus their efforts. The story is mostly complete, but there _is_ further work planned. Everything works, and you can easily spend dozens of hours, or more, in this plane.
|
||||
|
||||
**STATUS:** Fully functional and live. Enjoy!
|
||||
|
||||
## Shandalar Old Border
|
||||
|
||||
So, you like the Shandalar plane, but miss "ye good olde days" of yore? Then Shandalar Old Border is for you. This is the Shandalar base plane, but with modifications so that everything is from the Scourge set, or older.
|
||||
|
||||
**STATUS:** 99% functional and live. Enjoy! (There may be the occasional bug found. if so, please report it so we can get it resolved.)
|
||||
82
docs/Adventure/Dungeons.md
Normal file
82
docs/Adventure/Dungeons.md
Normal file
@@ -0,0 +1,82 @@
|
||||
## Story Dungeons
|
||||
|
||||
Currently, the story is very much a work in progress and will change a lot in the future. The end goal will consist of multiple "tiers" of more difficult dungeons, where you will be guided by quests. Currently, only some of the story dungeons are available, and there are no quests to guide you to them. You can enter these dungeons and fight the bosses.
|
||||
|
||||
### Tier 1: Castles
|
||||
The first tier of story bosses will consist of five dungeons, each found in the center of the five colored biomes. Each boss gives a plethora of loot (cards, life, shards, gold) and if you are able to defeat all five bosses, you can get a Mox card of your choice.
|
||||
|
||||
**Overworld Icons**
|
||||
|
||||

|
||||
|
||||
### Tier 2: Planeswalker Temples
|
||||
Currently only the Temple of Chandra (red biome) and Temple of Liliana (black biome) are available. These tend to be harder than the castles mentioned above.
|
||||
|
||||
**Overworld Icons**
|
||||
|
||||

|
||||
|
||||
## Generic Dungeons
|
||||
|
||||
### Aerie
|
||||
### Barbarian Camp
|
||||
|
||||
Comes in Goblin, Orc, Bandit and Kobold variaties
|
||||
### Cat Lair
|
||||
### Caves
|
||||
### Crypt
|
||||
### Djinn Palace
|
||||
### Evil Grove
|
||||
### Factory
|
||||
### Fort
|
||||
### Graveyard
|
||||
### Grove
|
||||
### Farm
|
||||
### Hostile Towns
|
||||
### Lavaforge
|
||||
### Magetower
|
||||
### Maze
|
||||
### Merfolk Pool
|
||||
### Monastery
|
||||
### Phyrexian Outposts
|
||||

|
||||
### Plains Castles
|
||||
### Skull Cave
|
||||
### Snow Abbey
|
||||
### Vampire Castle
|
||||
### Demon Tower
|
||||
|
||||
## Sidequest Dungeons
|
||||
|
||||
### The Skep
|
||||
#### Location: Island Biome
|
||||
### Forest of Garruk
|
||||
#### Location: Forest Biome
|
||||
### Hydra´s Lair
|
||||
#### Location: Forest Biome
|
||||
### Outpost of Jace
|
||||
#### Location: Island Biome
|
||||
### Unhallowed Abbey
|
||||
#### Location: Plain Biome
|
||||
### Nahiri's Encampment
|
||||
#### Location: Plain Biome
|
||||
### Tibalt's Fortress
|
||||
#### Location: Mountain Biome
|
||||
### City of Zedruu
|
||||
#### Location: Mountain Biome
|
||||
### Old Sewers
|
||||
#### Location: Waste Biome
|
||||
### Xira's Hive
|
||||
#### Location: Waste Biome
|
||||
### Slobads Factory
|
||||
#### Location: Waste Biome
|
||||
### Grolnoks Bog
|
||||
#### Location: Swamp Biome
|
||||
### Slimefoot's Swamp
|
||||
#### Location: Swamp Biome
|
||||
### Teferi's Hideout
|
||||
#### Location: Island Biome
|
||||
### Kiora's Island
|
||||
#### Location: Island Biome
|
||||
### Sorin's Dungeon
|
||||
#### Location: Swamp Biome
|
||||
562
docs/Adventure/Equipments-and-Items.md
Normal file
562
docs/Adventure/Equipments-and-Items.md
Normal file
@@ -0,0 +1,562 @@
|
||||
# Quick Links
|
||||
|
||||
1. [Neck item slot](https://github.com/Card-Forge/forge/wiki/Equipments-and-Items#neck)
|
||||
1. [Left item slot](https://github.com/Card-Forge/forge/wiki/Equipments-and-Items#left)
|
||||
1. [Right item slot](https://github.com/Card-Forge/forge/wiki/Equipments-and-Items#right)
|
||||
1. [Body item slot](https://github.com/Card-Forge/forge/wiki/Equipments-and-Items#body)
|
||||
1. [Boot item slot](https://github.com/Card-Forge/forge/wiki/Equipments-and-Items#boots)
|
||||
1. [Ability 1 item slot](https://github.com/Card-Forge/forge/wiki/Equipments-and-Items#ability1)
|
||||
1. [Ability 2 item slot](https://github.com/Card-Forge/forge/wiki/Equipments-and-Items#ability2)
|
||||
|
||||
## NECK
|
||||
|
||||
#### Dark Amulet
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Swamp Capital Cities
|
||||
1. **Price** : 3000 gold
|
||||
|
||||

|
||||
|
||||
#### Hallowed Sigil
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Monastery
|
||||
|
||||

|
||||
|
||||
#### Jeweled Amulet
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 1000 gold
|
||||
|
||||
#### Life Amulet
|
||||
1. **Effect** : +2 starting life
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 4000 gold
|
||||
|
||||
#### Manasight Amulet
|
||||
1. **Effect** : Grants Manasight, letting you know the colors used by your adversaries.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 1000 gold
|
||||
|
||||
#### Phoenix Charm
|
||||
1. **Effect** : Extra card starting in your command zone. [Spellbook Content](https://scryfall.com/@Simidhimi/decks/9c917d2c-c30d-4638-92ff-2df40120599c)
|
||||
1. **Location** : Chandra's Temple
|
||||
|
||||

|
||||
|
||||
#### Piper's Charm
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 4000 gold
|
||||
|
||||

|
||||
|
||||
#### Sorin's Amulet
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Sorin's Amulet)
|
||||
Starting life Modifier: +2
|
||||
1. **Location** : Sorin
|
||||
|
||||
#### Traveler's Amulet
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Traveler's Amulet)
|
||||
1. **Location** : Blue Capital City
|
||||
1. **Price** : 5000 gold
|
||||
|
||||
#### Xira's Fancy Hat
|
||||
1. **Effect** : +2 starting life + Extra card starting in your command zone.
|
||||
1. **Location** : Xira's Hive
|
||||
|
||||

|
||||
|
||||
## LEFT
|
||||
|
||||
#### Axt
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Cost** : 2500
|
||||
1. **Location** : Capital Cities
|
||||
|
||||

|
||||
|
||||
#### Battle Standard
|
||||
1. **Effect** : Extra card starting in your battlefield zone. and -1 starting life total
|
||||
1. **Location** : Goblin encampments
|
||||
|
||||

|
||||
|
||||
#### Bronze Sword
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Cost** : 2500
|
||||
1. **Location** : Waste towns
|
||||
|
||||

|
||||
|
||||
#### Chandra's Tome
|
||||
1. **Effect** : Extra card starting in your command zone. [Spellbook Content](https://scryfall.com/@Simidhimi/decks/e88b95ce-dd83-48ed-bf77-df997b71bbb6)
|
||||
1. **Location** : Chandra's Temple
|
||||
|
||||

|
||||
|
||||
#### Dagger
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Cost** : 2500
|
||||
1. **Location** : Capital Cities
|
||||
|
||||

|
||||
|
||||
#### Disrupting Scepter
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Disrupting Scepter)
|
||||
1. **Cost** : 2500
|
||||
1. **Location** : Green Capital City Arena
|
||||
|
||||
#### Farmer's Tools
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 6000 gold
|
||||
|
||||

|
||||
|
||||
#### Flame Sword
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Cost** : 3500
|
||||
|
||||

|
||||
|
||||
#### Garruk's Mighty Axe
|
||||
1. **Effect** : Extra card starting in your command zone. [Spellbook Content](https://scryfall.com/@Simidhimi/decks/47041427-b5d3-4faf-8f7b-1e1e004fa8ab?as=visual&with=usd)
|
||||
Starting life Modifier": +3
|
||||
1. **Location** : Garruk Forest
|
||||
|
||||

|
||||
|
||||
#### Giant Scythe
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
Life Modifier: + 1
|
||||
1. **Location** : Scarecrow Farm
|
||||
|
||||

|
||||
|
||||
#### Heart-Piercer
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Capital Cities
|
||||
|
||||

|
||||
|
||||
#### Heavy Arbalest
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Heavy Arbalest)
|
||||
1. **Cost** : 1500
|
||||
1. **Location** : Red Capital City
|
||||
|
||||
#### Hivestone
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Skep
|
||||
|
||||

|
||||
|
||||
#### Kiora's Bident
|
||||
1. **Effect** : Extra card starting in your command zone. [Spellbook Content](https://scryfall.com/@Simidhimi/decks/7fdd8d06-c0c5-487e-a7e7-3050f6d19bed)
|
||||
Starting life Modifier": -1,
|
||||
Extra card starting in your battlefield zone: Kraken Hatchling
|
||||
1. **Location** : Kiora Island
|
||||
|
||||

|
||||

|
||||
|
||||
#### Mad Staff
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Power Struggle)
|
||||
1. **Location** : Black Capital City
|
||||
1. **Price** : 1000 gold
|
||||
|
||||
#### Nine-Ringed Bo
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Nine-Ringed Bo)
|
||||
1. **Location** : White Capital City
|
||||
1. **Price** : 1000 gold
|
||||
|
||||
#### Presence of the Hydra
|
||||
1. **Effect** : Extra card starting in your command zone. [Spellbook](https://scryfall.com/@Simidhimi/decks/86798768-3af5-49c0-a120-feb62e1a0e95)
|
||||
1. **Location** : Hydra boss
|
||||
|
||||

|
||||
|
||||
#### Sleep Wand
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 4000 gold
|
||||
|
||||

|
||||
|
||||
#### Slimefoot's Slimy Staff
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
Life Modifier: + 2
|
||||
1. **Location** : Slimefoot's Swamp
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
#### Spell Book
|
||||
1. **Effect** : Starts with an extra card in your hand.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 3000 gold
|
||||
|
||||
#### Steel Sword
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Cost** : 4500
|
||||
1. **Location** : Waste towns
|
||||
|
||||

|
||||
|
||||
#### Teferi's Staff
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
Life Modifier: + 1, Card reward bonus +1
|
||||
1. **Location** : Teferi Hideout
|
||||
|
||||

|
||||
|
||||
#### The Underworld Cookbook
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Zedruu's City
|
||||
|
||||

|
||||
|
||||
#### Tibalt's Bag of Tricks
|
||||
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
[Tibalt's Devils](https://scryfall.com/@Simidhimi/decks/1d5cc465-ac4a-496f-bac1-dc313c540375)
|
||||
[Tibalt's Spells](https://scryfall.com/@Simidhimi/decks/8267bb6a-a226-4ec2-946e-a419372b97dc)
|
||||
[Tibalt's Spellbook](https://scryfall.com/@Simidhimi/decks/b2d248bc-e16f-49fe-94dc-28ac2b6ab5b5)
|
||||
Life Modifier: + 1
|
||||
1. **Location** : Tibalt's Fortress
|
||||
|
||||

|
||||
|
||||
#### Unerring Sling
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Unerring Sling)
|
||||
1. **Cost** : 4000
|
||||
1. **Location** : Green Capital City
|
||||
|
||||
#### Wood Bow
|
||||
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Capital Cities
|
||||
|
||||

|
||||
|
||||
#### Zedruu's Lantern
|
||||
1. **Effect** : Extra card starting in your command zone. [Spellbook Content](https://scryfall.com/@Simidhimi/decks/bdaa39ed-b4b3-4157-aa85-98e313750dd0)
|
||||
Starting life Modifier: +1
|
||||
1. **Location** : Zedruu's City
|
||||
|
||||

|
||||
|
||||
## Right
|
||||
|
||||
#### Aladdin's Lamp
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 3000 gold
|
||||
|
||||

|
||||
|
||||
#### Aladdin's Ring
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 3000 gold
|
||||
|
||||

|
||||
|
||||
#### Chicken Egg
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Secret :)
|
||||
|
||||

|
||||
|
||||
#### Cursed Ring
|
||||
1. **Effect** : 3 cards starting in **your opponents** battlefield zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 3000 gold
|
||||
|
||||

|
||||
|
||||
#### Cursed Treasure
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 4000 gold
|
||||
|
||||

|
||||
|
||||
#### Dark Shield
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Barrier of Bones)
|
||||
Lifemodifier: -3
|
||||
1. **Location** : Black Capital City
|
||||
|
||||
#### Death Ring
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Cost** : 3500
|
||||
|
||||

|
||||
|
||||
#### Demonic Contract
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Temple of Liliana
|
||||
|
||||

|
||||
|
||||
#### Dungeon Map
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 3000 gold
|
||||
|
||||

|
||||
|
||||
#### Entrancing Lyre
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Entrancing Lyre)
|
||||
1. **Location** : White Capital City
|
||||
1. **Cost** : 1000
|
||||
|
||||
#### Gold Shield
|
||||
1. **Effect** : + 3 starting life total
|
||||
1. **Location** : Blue Capital Arena
|
||||
|
||||
#### Grolnok's Skin
|
||||
1. **Effect** : Extra card starting in your battlefield zone. Lifemodifier: +3 [Spellbook](https://scryfall.com/@Simidhimi/decks/bf16e555-4efb-488b-a05c-25296807777c)
|
||||
1. **Location** : Grolnok's Bog
|
||||
|
||||

|
||||
|
||||
#### Hill Giant Club
|
||||
1. **Effect** : Extra card starting in your command zone.
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 2000 gold
|
||||
|
||||

|
||||
|
||||
#### Iron Shield
|
||||
1. **Effect** : + 2 starting life total
|
||||
1. **Location** : Waste Town
|
||||
1. **Cost** : 3500
|
||||
|
||||
#### Jandor's Ring
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Jandor's Ring)
|
||||
1. **Location** : Red Capital Arena
|
||||
|
||||
#### Jungle Shield
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost** : 3500
|
||||
|
||||

|
||||
|
||||
#### Kite Shield
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Kite Shield)
|
||||
Opponent starting life -2
|
||||
1. **Location** : White Capital City
|
||||
1. **Cost** : 1500
|
||||
|
||||
#### Magic Shard
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Magic Shard)
|
||||
1. **Location** : Blue Capital City
|
||||
1. **Cost** : 3500
|
||||
|
||||
#### Mirror Shield
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Mirror Shield)
|
||||
1. **Location** : Capital Cities
|
||||
1. **Price** : 2500 gold
|
||||
|
||||
#### Mithril Shield
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (c_0_4_a_wall_defender)
|
||||
1. **Location** : Blue Capital City
|
||||
1. **Cost** : 6500
|
||||
|
||||
#### Nahiri's Armory
|
||||
1. **Effect** : Extra card starting in your battlefield zone. Lifemodifier: +3 [Spellbook](https://scryfall.com/@Simidhimi/decks/b7a18cab-c10c-4ad4-80ba-aba88649ef27)
|
||||
1. **Location** : Nahiri's Outpost
|
||||
|
||||

|
||||
|
||||
#### Prism Ring
|
||||
1. **Effect** : Opponent starting life -2
|
||||
1. **Location** : Capital cities
|
||||
|
||||
#### Ring of Immortals
|
||||
1. **Effect** : Opponent starting life -2
|
||||
1. **Location** : Capital cities
|
||||
|
||||
#### Ring of Renewal
|
||||
1. **Effect** : Opponent starting life -2
|
||||
1. **Location** : Capital cities
|
||||
|
||||
#### Ring of Three Wishes
|
||||
1. **Effect** : Extra card starting in your battlefield zone. (Ring of Three Wishes)
|
||||
1. **Location** : Green Capital City
|
||||
1. **Cost** : 2500
|
||||
|
||||
#### Steel Shield
|
||||
1. **Effect** : Extra card starting in your battlefield zone
|
||||
1. **Location** : Waste Town
|
||||
1. **Cost** : 6500
|
||||
|
||||

|
||||
|
||||
#### Unhallowed Sigil
|
||||
1. **Effect** : Extra card starting in your battlefield zone.
|
||||
1. **Location** : Monastery
|
||||
|
||||

|
||||
|
||||
## Boots
|
||||
|
||||
#### Dark Boots
|
||||
1. **Effect** : Extra card starting in your battlefield zone. Movement speed + 30%. -2 starting life total
|
||||
1. **Location** : Swamp Capital Shop
|
||||
1. **Price** : 3000 gold
|
||||
|
||||

|
||||
|
||||
#### Gold Boots
|
||||
1. **Effect** : Movement speed + 30%. +2 starting life total
|
||||
1. **Location** : Plains Capital Arena
|
||||
1. **Price** : 7500 gold
|
||||
|
||||
#### Iron Boots
|
||||
1. **Effect** : Movement speed + 20%.
|
||||
1. **Location** : Waste towns
|
||||
1. **Price** : 2000 gold
|
||||
|
||||
#### Leather Boots
|
||||
1. **Effect** : Movement speed + 15%.
|
||||
1. **Location** : Starting item on Easy and Medium difficulty
|
||||
|
||||
#### Lightbringers Boots
|
||||
1. **Effect** : Extra card starting in your battlefield zone (Ajani's Mantra).
|
||||
Opponent starting life +5
|
||||
1. **Location** : Forgotten Cave
|
||||
|
||||
#### Mithril Boots
|
||||
1. **Effect** : Movement speed + 30%. +2 starting life total
|
||||
1. **Location** : Island Capital Arena
|
||||
1. **Price** : 10000 gold
|
||||
|
||||
#### Sandals
|
||||
1. **Effect** : Movement speed + 10%.
|
||||
1. **Location** : Starting item on Hard and Insane difficulty
|
||||
|
||||
#### Slime-Covered Boots
|
||||
1. **Effect** : Extra card starting in your battlefield zone. Movement speed + 20%. -1 starting life total
|
||||
1. **Location** : Ooze Boss
|
||||
|
||||

|
||||
|
||||
#### Slobad's Iron Boots
|
||||
1. **Effect** : Extra card starting in your command zone. + 1 starting life total + movement speed + 35%
|
||||
1. **Location** : Slobad's Dungeon
|
||||
|
||||

|
||||
|
||||
#### Steel Boots
|
||||
1. **Effect** : Movement speed + 20%. +1 starting life total
|
||||
1. **Location** : Waste towns
|
||||
1. **Price** : 4500 gold
|
||||
|
||||
## Body
|
||||
|
||||
#### Armor of the Hivelord
|
||||
1. **Effect** : +5 starting life total. And start with an extra card in your hand.
|
||||
1. **Location** : Skep
|
||||
|
||||
#### Dark Armor
|
||||
1. **Effect** : Extra card starting in your battlefield zone. And -2 starting life
|
||||
1. **Location** : Black Capital Shop
|
||||
1. **Price** : 3000 gold
|
||||
|
||||

|
||||
|
||||
#### Gold Armor
|
||||
1. **Effect** : +4 starting life total
|
||||
1. **Location** : Plains Capital Arena
|
||||
1. **Price** : 7500 gold
|
||||
|
||||
#### Iron Armor
|
||||
1. **Effect** : +2 starting life total
|
||||
1. **Location** : Waste towns
|
||||
1. **Price** : 3000 gold
|
||||
|
||||
#### Jace's Signature Hoodie
|
||||
1. **Effect** : Extra card starting in your command zone. And -1 starting life. And additional reward multiplier
|
||||
1. **Location** : Jace Boss
|
||||
|
||||

|
||||
|
||||
#### Mantle of Ancient Lore
|
||||
1. **Effect** : Extra card starting in your command zone. And +1 starting life
|
||||
1. **Location** : Zedruu dungeon
|
||||
|
||||

|
||||
|
||||
#### Mithril Armor
|
||||
1. **Effect** : +5 starting life total
|
||||
1. **Location** : Island Capital Arena
|
||||
1. **Price** : 15000 gold
|
||||
|
||||
#### Steel Armor
|
||||
1. **Effect** : +3 starting life total
|
||||
1. **Location** : Waste towns
|
||||
1. **Price** : 5000 gold
|
||||
|
||||
## ABILITY1
|
||||
|
||||
#### White Staff
|
||||
1. **Effect**: Heals half of your life for 5 shards
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 5000
|
||||
|
||||
#### Black Staff
|
||||
1. **Effect**: Hide from your enemies for 5 shards
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 5000
|
||||
|
||||
#### Blue Staff
|
||||
1. **Effect**: Let's you fly for 5 shards
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 5000
|
||||
|
||||
#### Red Staff
|
||||
1. **Effect**: Kills the closest enemy in the overworld (non-dungeon) for 5 shards
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 5000
|
||||
|
||||
#### Green Staff
|
||||
1. **Effect**: Doubles your speed for 5 shards
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 5000
|
||||
|
||||
## ABILITY2
|
||||
|
||||
#### Green Rune
|
||||
1. **Effect**: Teleports you to the forest capital for 1 shard.
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 500
|
||||
|
||||
#### Black Rune
|
||||
1. **Effect**: Teleports you to the swamp capital for 1 shard.
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 500
|
||||
|
||||
#### White Rune
|
||||
1. **Effect**: Teleports you to the plains capital for 1 shard.
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 500
|
||||
|
||||
#### Red Rune
|
||||
1. **Effect**: Teleports you to the mountain capital for 1 shard.
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 500
|
||||
|
||||
#### Blue Rune
|
||||
1. **Effect**: Teleports you to the island capital for 1 shard.
|
||||
1. **Location** : Capital cities
|
||||
1. **Cost**: 500
|
||||
|
||||
#### Blue Rune
|
||||
1. **Effect**: Teleports you to the center for 1 shard.
|
||||
1. **Location** : Starting area
|
||||
67
docs/Adventure/GAMEPAD.md
Normal file
67
docs/Adventure/GAMEPAD.md
Normal file
@@ -0,0 +1,67 @@
|
||||
Basic Gamepad Support for Adventure Mode
|
||||
|
||||
Tested using DS4 Controller 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/
|
||||
|
||||
DS4Windows latest:
|
||||
https://github.com/Ryochan7/DS4Windows/releases/
|
||||
|
||||
HidHide latest:
|
||||
https://github.com/ViGEm/HidHide/releases
|
||||
|
||||
Other XInput Controller should work, XBox or DS4 Preferaably and other similar XInput Controller with comparable button layout. Custom Key Mapping is not yet supported.
|
||||
|
||||
Controls:
|
||||
|
||||
UIScenes
|
||||
|
||||
DPAD Up/Down/Left/Right - for selecting texboxes and textfield, Scroll Up or Down
|
||||
Button A - Ok, Show Context
|
||||
Button B - Cancel
|
||||
Button X - Increase Difficulty in NewGame Plus/Flip Backside Deck Editor
|
||||
Button Y - Decrease Difficulty in NewGame Plus/Zoom or Text Mode in Deck Editor
|
||||
Left/Right Shoulder Button - Scroll Up or Scroll Down on some UIScenes
|
||||
|
||||
RewardScene
|
||||
|
||||
DPAD Left/Right - Selector
|
||||
Button A - Confirm/Flip Reward
|
||||
Button B - Show Rewards/Done
|
||||
Button Y - Show/Hide Zoom Card
|
||||
|
||||
TextInput
|
||||
|
||||
DPAD Up/Down/Left/Right - Key Selector
|
||||
Left Shoulder Button - Shift Keys
|
||||
Right Shoulder Button - Backspace
|
||||
Button Start - Jump to Ok
|
||||
Button A - Confirm
|
||||
Button B - Cancel
|
||||
|
||||
World/Gamescene
|
||||
|
||||
DPAD Up/Down/Left/Right - Character Movement
|
||||
Left Analog - Character Movement
|
||||
Button A - Menu/Confirm
|
||||
Button B - Statistics/Edit
|
||||
Button X - Deck Select/Deck Edit
|
||||
Button Y - Inventory/Rename
|
||||
|
||||
Match/Battle
|
||||
|
||||
Left Trigger - Play/Draw/OK (Bottom Left Button)
|
||||
Right Trigger - Keep/Mulligan/Cancel/End Turn/Alpha Strike (Bottom Right Button)
|
||||
|
||||
(To select cards on the battlefield, close Zone tabs first (Button B), then use DPAD)
|
||||
|
||||
DPAD Up/Down/Left/Right - Selector
|
||||
Left Shoulder - Player Panel Selector
|
||||
Right Shoulder - Zone Selector/Show
|
||||
Left Analog Down - Select Player (current selected panel)
|
||||
|
||||
Button A - Confirm
|
||||
Button B - Cancel/Hide
|
||||
Button Y - Show Zoom
|
||||
Button Back - Show Menu Tabs
|
||||
35
docs/Adventure/Gameplay-Guide.md
Normal file
35
docs/Adventure/Gameplay-Guide.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Getting started
|
||||
|
||||
|
||||
## Difficulty
|
||||
|
||||
The difficulty you choose will alter your starting health (15 for easy to 7 for extreme), and the amount of cards you start with when you choose the "pile" mode. Also, cards will sell for less in shops and enemies will have more health.
|
||||
|
||||
Another difference is that on hard/extreme difficulty, enemies that use computer-generated decks (using .json files) will instead use completely random decks that will have nothing to do with their original deck theme.
|
||||
|
||||
## Starting cards
|
||||
|
||||
You will have multiple options as to how your starting pool of cards will look
|
||||
|
||||
1. __Pile__. This will give you a random pile of cards based on the color you choose. The harder the difficulty you choose, the fewer cards you will get.
|
||||
When you use this option, it is recommended that you create a 40-card deck (minimum deck size) out of the 60 cards you get.
|
||||
|
||||
2. __Chaos__. This is a unique gameplay mode that completely randomizes the enemy decks and the deck you start with.
|
||||
__This setting is not recommended for new players__
|
||||
|
||||
3. __Standard__. With this start, you will get three 20-card preconstructed jumpstart decks from the set you choose (or all of them).
|
||||
|
||||
4. __Constructed__. With this setting, you start with a custom preconstructed deck based on a popular theme that's easy to expand during your run. (**Recommended for new players**). Your starting color will determine which starter deck you will get
|
||||
|
||||
## General hints and tips
|
||||
|
||||
1. Don't immediately sell cards that are not useful in your current deck. Some cards can be very useful in certain boss fights, for instance, cards with " protection from red" are very strong against most red bosses.
|
||||
2. Make sure to travel to the biome capitals early in your run. Every capital contains a shop that sells 1 life and an item that allows you to teleport back to that capital. Also, they sell items that can't be found elsewhere.
|
||||
3. Every boss gives you +1 starting life. So if you're having trouble with a certain boss, it might be better to try your hand with other bosses.
|
||||
4. Arena challenges in the capitals can be a good source of money, items, and cards. Though you need a rather strong deck to consistently win there.
|
||||
|
||||
### Insane Guide
|
||||
|
||||
If you are playing on Insane and need some pointers, user KingNishi has written up a nice doc about it
|
||||
|
||||
https://docs.google.com/document/d/1RgO20QpdVOpU-g_E1RL8q1r0C5GUy6y-nnxgXNbi9Wg/pub
|
||||
13
docs/Adventure/Mana-Shards.md
Normal file
13
docs/Adventure/Mana-Shards.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Mana Shards
|
||||
Mana Shards are a custom resource created for Adventure Mode in Forge. Shards serve as a secondary form of currency in some parts of the game economy, can be bought and sold via dedicated Shard Trader merchants, and are also used to power the player's special abilities both on the Adventure world map as well as in almost all Adventure Mode duels. During a duel your Shards will appear as a usable resource visible alongside your life total akin to how Energy tokens are used. Your Shards are not tokens or counters, and are thus immune to any abilities that would affect tokens or counters outside of using [equipment](adventure-items) that specifically requires their expenditure. Spending your shards is a permanent choice, however, as your final total at the end of the match will follow you back into your Adventure.
|
||||
|
||||
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.
|
||||
|
||||
Mana Shards can be used for:
|
||||
* Activated in-match abilities
|
||||
* Activated game map abilities
|
||||
* Refreshing card shop inventories
|
||||
* Spellsmith card purchases as an alternative to gold
|
||||
* Event entry fees as an alternative to gold
|
||||
28
docs/Adventure/Modding.md
Normal file
28
docs/Adventure/Modding.md
Normal file
@@ -0,0 +1,28 @@
|
||||
## Modding and Development
|
||||
|
||||
With the addition of new planes in Adventure Mode, comes a framework to allow greater customization and even expansion of the available planes. The details behind the framework and each category can be found below. As well as a new section being built with some basic information on each piece of plane construction and modification. The sections will also define some Best Practices to be maintained.
|
||||
|
||||
### Getting Started
|
||||
|
||||
Modding Adventure mode comes in many fashions. From making small changes to a core plane, such as changing the music that plays on the overworld. To something as complex as an entirely new plane. Regardless of your intended goals, the first thing to do is set-up a back-up method. As any changes you haven't had incorporated into the main game, will potentially be lost on each update of Forge. Since this is a Git project, the method that will be recommended by this wiki, and referenced for the future, is simply to create your own git branch, and use a local repository to control all your files. It is also recommended to follow the directions to [set-up IntelliJ](https://github.com/Card-Forge/forge/wiki/IntelliJ-setup), to manage your local files. (Again, this is the method that will be referenced elsewhere in this wiki.)
|
||||
|
||||
### Tools
|
||||
|
||||
The following additional tools can also be very useful, or even mandatory, to have for your mod, depending on what all you want to do in your mod/addition.
|
||||
|
||||
**[Tiled](https://www.mapeditor.org/)**: If you want to modify or create any maps; (caves, dungeons, towns, etc.) Forge utilizes Tiled. If you want to learn more on this topic, you can find it in the [Create new Maps](https://github.com/Card-Forge/forge/wiki/Create-new-Maps) section of the Wiki.
|
||||
|
||||
**[GIMP](https://www.gimp.org/)**: Many of the art files such as the tilesets used in Tiled, are made in GIMP. (A free graphical manipulation program, similar to Photoshop.) While not required to work in Forge's files, if you want to create your own art assets, this is the program that will be used for examples in this Wiki.
|
||||
|
||||
|
||||
### Tutorials
|
||||
|
||||
The following pages on this Wiki contain some basic tutorials on various facets of modding Adventure mode, to help get you started.
|
||||
|
||||
[Tutorial 1, Create your First Plane](https://github.com/Card-Forge/forge/wiki/Tutorial-1-Create-your-First-Plane)
|
||||
|
||||
[Tutorial 2, A New Look (creating your first map.)](https://github.com/Card-Forge/forge/wiki/Tutorial-2-A-New-Look)
|
||||
|
||||
[Tutorial 3, Configuration (Configuring your Plane)](https://github.com/Card-Forge/forge/wiki/Tutorial-3-Configuration)
|
||||
|
||||
UNDER CONSTRUCTION, STAY TUNED
|
||||
101
docs/Adventure/Towns-&-Capitals.md
Normal file
101
docs/Adventure/Towns-&-Capitals.md
Normal file
@@ -0,0 +1,101 @@
|
||||
# Towns & Capitals
|
||||
|
||||
While exploring the world of Shandalar, you will find multiple cities across all biomes. These settlements are a integral part of the game, and can help the player by giving quests, hosting draft/jumpstart events, as well as selling cards and booster packs.
|
||||
|
||||
## Towns
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
Different towns have different buildings, but some of them are common to them. Buildings are identified by the sign right in front of them.
|
||||
|
||||
- The Inn
|
||||
|
||||

|
||||
|
||||
At the inn, players can buy temporary healthpoints, sell cards and join events. Different inns host different events. For example, a town can be hosting a draft for "Urza's Saga Block", while the next one can be hosting a Jumpstart 2025 event.
|
||||
|
||||
- Job Board
|
||||
|
||||

|
||||
|
||||
Going to the job board the player can accept quests, which will reward them with gold and sometimes local reputation. Local reputation reduces the prices of cards sold by shops.
|
||||
|
||||
- Shard Trader
|
||||
|
||||

|
||||
|
||||
The shard trader allows player to trade gold for shards and shards for golds. Shards are used to reroll cards at the shop, as well as joining events.
|
||||
|
||||
- Card Shops
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
Card shops sells cards according to the biome and the shop itself. For example, shops in a green city will tend to sell green cards, while shops in a black city will focus on black cards.
|
||||
Different shops sells different types of cards, and most of them can be deduced from their name. For example, the shop called "Control Magic" will sell blue cards used to control opponents (counter, tap, untap, etc), while a shop called "Swords, Plowshares, and Beyond" will sell cards that exile permanents. The shop information can be a found in [this user-friendly JSON](https://github.com/Card-Forge/forge/blob/master/forge-gui/res/adventure/Shandalar/world/shops.json).
|
||||
|
||||
Shops with an Hour Glass sign change their stock daily. All other shops restock only using shards to reroll.
|
||||
|
||||
Shop contents based on sign:
|
||||
|
||||
|
||||
<img width="360" alt="shop-icons" src="https://github.com/user-attachments/assets/20144079-c8c2-407e-b523-6e995e75d78c" />
|
||||
|
||||
| |A |B |C |D |E |F |G
|
||||
|---------------|---------------|---------------|---------------|---------------|---------------|---------------|---------------|
|
||||
|1|-|Instants|Creatures|Green|Red|White|Pirates
|
||||
|2|-|Basic Lands|Colorless|Black|Blue|Gold|-
|
||||
|3|-|Selesnya G/W|Azorius U/W|Dimir B/U|Rakdos B/R|Gruul G/R|-
|
||||
|4|-|Simic G/U|Orzhov B/W|Izzet R/U|Golgari B/G| Boros R/W|-
|
||||
|5|-|Goblins|Zombies|Humans|Elves|Merfolk|-
|
||||
|6|-|Item Shop|Artifacts|Angels|Golems|Slivers|Assassins
|
||||
|7|-|Mardu B/R/W|Jeskai R/W/U|Naya R/G/W|Enchantments|5 Color|Squirrels
|
||||
|8|Rogues|Non-Basic Land|Space Marines|Necrons|Chaos|Tyranids|Dragons
|
||||
|9|Assembly Workers/Constructs/Myr|Vampires|Vehicles|Grixis R/U/B|Jund R/G/B|Temur R/G/U|Minotaurs
|
||||
|10|Dinosaurs|Esper U/W/B|Sultai U/G/B|Bant B/W/G|Abzan G/W/B|Dwarfs|Devils
|
||||
|11|Ogres|Item Shop|Equipment|Soldiers|Boosters|D&D|Demons
|
||||
|12|Rotating Stock|Druids|Activated Artifacts|Birds|Wolves|Knights|Walls
|
||||
|13|Shard Shop|Planeswalkers|Skeletons|Birds|Shamans|Wizards|Sagas
|
||||
|14|Player Equipment|Phyrexian|Sphinx|Hydras|Spiders|Insects|Changelings
|
||||
|15|Cats|Eldrazi|Clerics|Mutants/Mutate|Horrors|Transform Cards|Universe Beyond
|
||||
|16|Battles|Sags|Nobles/Monarch|Giants|Sea Creatures|Snow|Boosters
|
||||
|
||||
|
||||
|
||||
## Capitals
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
Capitals are bigger and have more buildings than normal towns, but have certain exclusive shops that can really useful for the player.
|
||||
|
||||
- Item Shop
|
||||
|
||||

|
||||
|
||||
Item shops sell items and equipments that the players can use on their journey - such as a rune that allows them to teleport to that capital when on the overworld.
|
||||
|
||||
- Arena
|
||||
|
||||

|
||||
|
||||
At the Arena players can participate in a tournament awarding gold and equipments.
|
||||
|
||||
- Smith
|
||||
|
||||

|
||||
|
||||
The Smith is one of the most important buildings while trying to build a specific deck. Through a filtering system, players can try to create specific cards, by entering the set, mana value, colors and rarity of one or more cards. The more filters you use, the more expensive it gets.
|
||||
|
||||
There are other buildings for you to explore on your journey through Shandalar. Have fun!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
14
docs/Adventure/Transfer-PC-saves-to-Android.md
Normal file
14
docs/Adventure/Transfer-PC-saves-to-Android.md
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
to copy from pc to android:
|
||||
on your pc, browse to
|
||||
C:\Users\ [user]\AppData\Roaming\Forge\adventure\Shandalar
|
||||
copy whichever saves you want, then on your android, browse to
|
||||
internal storage\android\obb\forge.app\forge\data\adventure\Shandalar
|
||||
and paste the saves you want in there
|
||||
|
||||
to copy from android to pc:
|
||||
on your android, browse to
|
||||
internal storage\android\obb\forge.app\forge\data\adventure\Shandalar
|
||||
copy whichever saves you want, then on your pc, browse to
|
||||
C:\Users\ [user]\AppData\Roaming\Forge\adventure\Shandalar
|
||||
and paste the saves you want to move in there
|
||||
6
docs/Adventure/Tutorial-1-Create-your-First-Plane.md
Normal file
6
docs/Adventure/Tutorial-1-Create-your-First-Plane.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Tutorial: 1 Create your First Plane
|
||||
|
||||
Creating a new plane allows you to fully customize your Adventure mode experience, and can even be shared with the community. The most basic step in doing so, is to add a new directory in `...\YourIntelliJProjectFolder\forge-gui\res\adventure\`, copy the 'config.json' file from `...\YourIntelliJProjectFolder\forge-gui\res\adventure\common`, paste it into your new directory. Then copy the contents of `...\YourIntelliJProjectFolder\forge-gui\res\adventure\Shandalar\world` into your new directory. Congratulations, that is the bare minimum to create a new plane. If you tell IntelliJ to run the Forge project using the Adventure mode settings, you can load up Adventure mode, find your plane in the drop-down list, and load into it.
|
||||
|
||||
Of course, now many of you will come back here and say "nothing looks different". Don't worry, nothing is broken. As you haven't actually changed any files from their default settings, everything will load up in the exact same way as the default game. This is intentional, so that you can make as many, or as few, changes from the default Shandalar plane as you like, without breaking anything. Look to the other tutorials for guides on how to change each piece of a plane to match your desire.
|
||||
|
||||
221
docs/Adventure/Tutorial-2-A-New-Look.md
Normal file
221
docs/Adventure/Tutorial-2-A-New-Look.md
Normal file
@@ -0,0 +1,221 @@
|
||||
## Tutorial 2: A New Look (Creating your first map)
|
||||
|
||||
Okay, you've got a new plane, now let's make that plane our own. This tutorial is going to teach you how to make a very basic map and get it into the game in your plane. This is a much lengthier tutorial, so we are going to split it up into parts.
|
||||
|
||||
1. [Part 1: Setting up Tiled](https://github.com/Card-Forge/forge/wiki/Tutorial-2-A-New-Look#part-1-setting-up-tiled)
|
||||
|
||||
2. [Part 2: Building a Basic Map](https://github.com/Card-Forge/forge/wiki/Tutorial-2-A-New-Look#part-2-building-a-basic-map)
|
||||
|
||||
3. [Part 3: Adding the Map to your Plane](https://github.com/Card-Forge/forge/wiki/Tutorial-2-A-New-Look#part-3-adding-the-map-to-your-plane)
|
||||
|
||||
4. [Part 4: Put it to the Test!](https://github.com/Card-Forge/forge/wiki/Tutorial-2-A-New-Look#part-4-put-it-to-the-test)
|
||||
|
||||
### Part 1: Setting up Tiled
|
||||
|
||||
To make everything work smoothly, we need to do some set-up of your Tiled project. First, in IntelliJ, navigate to your plane directory (in our case, we named it Test) like so `...\YourIntelliJProjectFolder\forge-gui\res\adventure\Test\`, and create a new directory named 'maps'. Inside that directory make another directory called 'map'. Now open up Tiled, click on New Project, and navigate to the maps directory you just created, (the one with the "map" directory inside it.) Create a new project by picking a name in the file name line, (it is recommended you name it the same as your plane, for ease of bug solving,) and click save.
|
||||
|
||||
Next we need to tell Tiled where to find the files Forge uses. Click on Project > "Add Folder to Project...", navigate to `...\YourIntelliJProjectFolder\forge-gui\res\adventure\common\maps`. Select the 'obj' directory, and click "Select Folder". If you are planning to use any of Forge's tilesets, then do the same thing, but this time selecting the 'tileset' directory from `...\YourIntelliJProjectFolder\forge-gui\res\adventure\common\maps` aswell. This adds access to the various objects Forge uses to actually interact with the player. (Enemies, rewards, map transfers, etc.) The tilesets provide the visual appearance of your map, _as well as the collision mapping_. **_Any of these you intend to modify, you must create a new entry in an appropriate subdirectory inside your own plane's directory!_** Otherwise you will be changing it for every single map in every plane that touches those objects or tilesets, which quickly causes unintended consequences. (Further details on how to modify these items, what the subdirectory should look like, and what needs to remain unchanged to be properly read by Forge, will be described in their specific Wiki pages. For now, just keep this information in mind.)
|
||||
|
||||
Next click on Project > "Project Properties..." In the 'Paths & Files' section you will a text bow that says 'Extensions Directory' and three dots to the right. Click on those three dots, and navigate to `...\YourIntelliJProjectFolder\forge-gui\res\adventure\common\maps`, select the extensions directory, and click the "Select Folder" button. Then click on "OK". This adds the extensions written for Forge to your project. Without this, your maps will throw errors when Forge tries to do certain object actions, and crash the game. (Learn from my fail on this one.)
|
||||
|
||||
Voila! That is the minimum work necessary to prepare your project for adding, or editing, maps unique to your plane.
|
||||
|
||||
|
||||
|
||||
### Part 2: Building a Basic Map
|
||||
|
||||
Alright, so you've got your fancy project, and while this gray screen with a view of multiple folders on the left is cool and all. We know you really came here because you wanted to actually _make a new map_. (Well, technically, you may want to just slightly modify an existing map. But to have it unique to your plane, it will still be effectively a new map in the eyes of IntelliJ.) So let's get to it, let's make a very basic map for Forge. Step one, click the fancy, tempting, "New Map..." button I know you've been staring at. (And possibly already clicked, then came back here to see what you need to do on that next window.) This will bring up a new dialog box, with a bunch of options.
|
||||
|
||||
1. Orientation should be Orthogonal
|
||||
2. tile layout format should be CSV
|
||||
3. Tile render order should Right Down
|
||||
|
||||
Those are the Tiled defaults for those options at the time of this writing, but I want it here in case that changes.
|
||||
|
||||
Next up we have the Map size section, the bigger the map, the more you can add, and the longer it will take you to finish. I recommend for our first map, a simple 15 by 15 tiles. You'll make bigger maps, but for your first, don't get overwhelmed. **_DON'T CLICK OK YET!_** I know you want to get started, but we have to change a couple more things. The Tile size needs to be set to 16 wide by 16 high. This is the Forge standard, and the tilesets use it too. Different settings can lead to very unintended side effects. **NOW** you can click "OK".
|
||||
|
||||
Welcome to the gray box that is Tiled's default map menu. There's a lot here, but we are going to build a map together, so relax and just follow along. First off, you will often find yourself in need of multiple layers, otherwise your map is simply not going to look good. So, on the right side, you will see a small box with a text line that says "Tile Layer 1". Double click that line, and rename it to "Ground" without the quotes. Next, right-click and select New > Tile Layer. Name this one "Clutter". Do it again, but name this one "Walls". Finally right-click one more time and select New > Object Layer, name this one "Objects". This gives a basic series of layers to allow us to make a map. You can add more if really needed, but try to limit yourself to six or fewer Tile layers to preserve loading speeds. **Only have ONE object layer**, having a second one will confuse the heck out of Forge.
|
||||
|
||||
Now that we have our layers, let's make sure they are in the right order. Click and drag each layer so that, from top to bottom, they rea: Objects, Walls, Clutter, Ground. In tiled, like many programs, tiles on layers farther up will appear on top of ones below them. Objects on top ensure nothing gets lost, or accidentally put under a wall, and can easily be seen. Next up, while we have an Object layer, we need to actually tell Forge what layer to render sprites on. (This allows you make roofs or arches, etc, that a character can walk "under"... it also tells Forge where to actually _put_ the sprite, since it doesn't actually default to the Object layer.) For our map, we want the player to be walking on top of any dirt or grime we add to the map, so left click on the Walls layer. On the left side of the screen, you'll see the properties toolbox. Scroll down to the bottom and you will see the "Custom Properties" line. Right click > Add Property. Click the drop-down that says "string" and choose "bool". In the text box, type "spriteLayer" without the quotes. **This is a value read by Forge, so it is case sensitive. Lowercase 's', uppercase 'L', no spaces.** Click "OK". You will see it has added the property to the custom properties, with a check-box. The box is unchecked, check it. (If you had not added this property, made it a bool, set it's name correctly, and checked the box... Any attempts to load this map would cause Forge to bug-out pretty hard and require a restart to just work right again.)
|
||||
|
||||
Now that our map-space is set-up, let's go ahead and save all this work we have done. File > Save As. Open your "map" directory inside the "maps" directory, this is a directory of all your maps you are going to use. To save yourself future head-aches, organize maps into sub-directories from the get-go. In our tutorial case, I will be making a beach, so first I will right-click > new > folder while inside of 'map' and name it "beach". Then I will double-click on that "beach" folder. In this sub-directory I name my tutorial map as "test", but you should name your map as something you'll remember it by, then click save. Now that, that's done, let's get around to the art part of this. Click on the Ground layer. You'll notice you can move your mouse over the map and it'll turn red or blue depending on it you are inside the tile space or not. But no matter where you click, nothing happens. That's because we need to actually choose a tileset to use. On the far left side of the screen, you'll see the various folders we imported into our project. Open the tileset folder, and double click on "main.tsx". This will open a new tab, that shows the entire contents of the "main" tileset from Forge. _Since we don't plan to actually make ANY changes to this tileset_ (gentle reminder.) Simply click on the tab for your map (test.tmx in my case,) and you'll see the "main" tileset has appeared in the bottom-right corner of your screen.
|
||||
|
||||
Since I chose a beach, I'm going to make a beach for this tutorial, so I'm going to click on the sand-colored tile near the top-left of the "main" tileset, right next to the default empty one. If you move your mouse back over your map, you will see it shows that sand-colored tile for every square you move it over. If you click, it will even place that color on that tile. While you could individually click on each tile one at a time, for filling in large areas that's much more exasperating. Clicking and dragging will simply apply each tile the mouse moves over. So, instead, along the top, you will see a paint-bucket. Click on that. now if you move your mouse back to the map, it'll show a ghostly tan color across the entire map, minus any squares you already clicked on. (The highlight will only apply to every tile of the same type that you hover over, which is not completely separated from the mouse by a different tileset tile. If you are confused, this will make more sense as you make or modify maps.) Click on the empty space, and it will fill in the entire map with our sandy ground.
|
||||
|
||||
Now, a blank sandy beach may be more than you had before, but it's not that interesting, so let's add some detail. Click on the Clutter layer. Then, on our "main" tile-set on the bottom right, click on the water tile just below the blank one in the top left. If you move your mouse back to the map, you will see it wants to change every tile to water. That's because we are still in Bucket Fill mode. On the top of the window, you'll see a rubber stamp, two tools to the left of the pain bucket. Click on that. Now we are once again designing our map one tile at a time. I'm going to draw out some water tiles along the edges of the map, leaving just a couple sandy ones at the bottom center of the map.
|
||||
|
||||
Now, The map is clearly a sand-bar jutting out into water, but it looks pretty rudimentary, even for Forge. As such, let's click on the Walls layer. Then, on the tile-set on the bottom right, there are a bunch of sandy edges looking like they are meant for the edge of water. I'm going to carefully select various tiles from among them and make my coast-line look much nicer. Exactly which tiles where will depend on how you built the previous layer. If you ever place a tile and it doesn't look right. You can click on the Eraser tool at the top of the screen, and then click that tile on your map. As long as you are on the right layer, it will erase that tile.
|
||||
|
||||
Huzzah! You've made you little sandbar... But how can you be certain where players and enemies can walk? Well, that's called Collision. Go to View > and make sure there is a check-mark in "Show Tile Collision Shapes". The water tiles will have much strongly defined border now, and depending on your sand borders and how you built it, you may have new lines in them, or not. Collision is defined by the tile in the Tileset. Each tile in the tile set either has collision shapes, or doesn't. **If you are not happy with the collisions as-is, you will need to either change your map some, or make your own tileset.** As a reminder DO NOT MODIFY THE TILESETS FROM MAIN FORGE. If you need to make changes, look for my future tutorial that explains building your own tile-set and modifying it.
|
||||
|
||||
Alright, you have a map, it has water, it has collision... Still looks pretty empty. You could add more details on various layers to make it look nicer, but that won't change the most important things. Namely, there's nothing to _do_ on our sandy beach. Let's fix that. On the left side of the screen, open up the "obj" folder, this has all the objects in Forge. Since they are all Objects, let's click on the Objects layer. Now, click and drag a "gold.tx" object from the obj folder, onto our sand. (make sure its on a portion of sand that isn't blocked by collision.) Unlike the tile layers, objects don't have to be centered to any tile. They can even sit on a grid intersection without issue.
|
||||
|
||||
Alright, we got some gold on our map, but that's a bit boring. let's spice it up, by adding an enemy. So click and drag an "enemy.tx" onto the map. Now, all our objects have many properties that make sure they work. But most of them come pre-populated to some degree, so you can just drag-and-drop them. Enemies, however, are diverse and different enough we need to actually define some things about them in order to even function. So click on your placed enemy object, and scroll down the left side to the Custom Properties section. In here, the only option you _have_ define, is the "enemy" property. (Remember, the one in Custom Properties, not the space earlier in the normal properties... Again, learn from my mistakes.) In our case, click on the text box to the right of "enemy", and type "Ghost" without the quotation marks. (While a later tutorial will give more details on all the properties, just know that for this one. It is looking for an entry in your plane's "enemies.json" file. If your plane does not have that file, like ours, it will instead look for the entry in the enemies.json file found in `...\YourIntelliJProjectFolder\forge-gui\res\adventure\common\world`... A later tutorial will guide you through making your own enemies.) You have now defined the enemy, but as-is, it will just stand in place, even if a player gets near. Let's liven things up a little, and make our ghost a bit more annoyed and less sleeping on the job. Go down to the "pursueRange" custom property, and set that text box to 50. Then scroll down further to the "threatRange" box, and set that, also, to 50. Now, if the player gets within 50 pixels of it, the ghost will chase them. The ghost will only move to a distance of 50 pixels from their starting point, doing so, however. (For a more lively enemy that patrols, or jump out, etc. You can find that information in the Configuring Enemies portion of the Wiki.)
|
||||
|
||||
Alright, we got a map, we got a reward, and we got an enemy to protect that reward. All good, except, Forge has no idea where to spawn a player who enters the map, and no idea where the exit to the map is. So, go and drag an "entry_up.tx" object to the little entrance of our sandbar, and resize it so that the arrow takes up the majority of the entry space. Congratulations, your map is made, don't forget to **_SAVE_**.
|
||||
|
||||
### Part 3: Adding the Map to your Plane
|
||||
|
||||
Alright, so you have a map you want to play, it's saved in your plane, why can't you find it? Well, that's because Forge doesn't **actually** know it's ready to _be_ found yet. We need to get some "biomes" and "points of interest" added to your plane, aswell as. So, first, let's give them a place to go in your plane. Go to your plane's directory in IntelliJ, and open the 'world' sub-directory. Inside of 'world' create a new subdirectory called 'biomes'. Navigate to `...\YourIntelliJProjectFolder\forge-gui\res\adventure\common\world\biomes` and copy the following files to your plane's biomes directory, 'base.json' and 'colorless.json'. We also need to copy the 'points_of_interest.json' from `...\YourIntelliJProjectFolder\forge-gui\res\adventure\common\world` to our custom plane's 'world' directory. Now, open up the 'points_of_interest.json' from our plane's 'world' sub-directory. Inside you will find all the maps used by Forge. If you want to add a map to the list, but keep all the others, you would add it's info the existing json. But for the sake of simplicity in this tutorial, we are going to delete everything inside the json except for the following.
|
||||
```
|
||||
[
|
||||
{
|
||||
"name": "Aerie",
|
||||
"displayName": "Aerie",
|
||||
"type": "dungeon",
|
||||
"count": 30,
|
||||
"spriteAtlas": "../common/maps/tileset/buildings.atlas",
|
||||
"sprite": "Aerie",
|
||||
"map": "../common/maps/map/aerie/aerie_0.tmx",
|
||||
"radiusFactor": 0.8,
|
||||
"questTags": [
|
||||
"Hostile",
|
||||
"Nest",
|
||||
"Dungeon",
|
||||
"Sidequest"
|
||||
]
|
||||
},
|
||||
```
|
||||
and
|
||||
```
|
||||
{
|
||||
"name": "Spawn",
|
||||
"displayName": "Secluded Encampment",
|
||||
"type": "town",
|
||||
"count": 1,
|
||||
"spriteAtlas": "../common/maps/tileset/buildings.atlas",
|
||||
"sprite": "Spawn",
|
||||
"map": "../common/maps/map/main_story/spawn.tmx",
|
||||
"questTags": [
|
||||
"Story",
|
||||
"Spawn",
|
||||
"BiomeColorless"
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
For this tutorial, we need to know the following details.
|
||||
|
||||
"name" is the map name in Tiled, so we will change `"name": "Aerie",` to `"name": "YOUR MAP NAME",` ("Test" in our case.)
|
||||
|
||||
"displayName" is the name that appears when the player enters a map. So we will change `"displayName": "Aerie",` to `"displayName": "YOUR MAP DESCRIPTION",` (in our case, I'm going with "Fanciest Beach").
|
||||
|
||||
"count" is how many of this map can spawn in the overworld. Since we want to actually find it, let's change `"count": 1,` to `"count": 30,`
|
||||
|
||||
and "map" is where we actually STORED the map file. So we are going to change `"map": "../common/maps/map/aerie/aerie_0.tmx",` to `"map": "../YOUR_PLANE_NAME/maps/map/YOUR_FOLDER_NAME/YOUR_MAP.tmx"` . For my tutorial, that becomes `"map": "../Test/maps/map/beach/test.tmx",`.
|
||||
|
||||
You can leave the rest of the Aerie code-block alone for this tutorial. If you followed me exactly, "points_of_interest.json" file should now look like this.
|
||||
```
|
||||
[
|
||||
{
|
||||
"name": "Test",
|
||||
"displayName": "Fanciest Beach",
|
||||
"type": "dungeon",
|
||||
"count": 1,
|
||||
"spriteAtlas": "../common/maps/tileset/buildings.atlas",
|
||||
"sprite": "Aerie",
|
||||
"map": "../Test/maps/map/beach/test.tmx",
|
||||
"radiusFactor": 0.8,
|
||||
"questTags": [
|
||||
"Hostile",
|
||||
"Nest",
|
||||
"Dungeon",
|
||||
"Sidequest"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Spawn",
|
||||
"displayName": "Secluded Encampment",
|
||||
"type": "town",
|
||||
"count": 1,
|
||||
"spriteAtlas": "../common/maps/tileset/buildings.atlas",
|
||||
"sprite": "Spawn",
|
||||
"map": "../common/maps/map/main_story/spawn.tmx",
|
||||
"questTags": [
|
||||
"Story",
|
||||
"Spawn",
|
||||
"BiomeColorless"
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
|
||||
Now, since we want to play our new map, we still need to make sure it spawns in Forge. Go to "colorless.json" file we copied into our Plane's 'biomes' directory. Scroll down until you see the `"pointsOfInterest":` array. We are going to delete everything in this array except for `"Spawn",` and then we are going to add `"YOUR_MAP_NAME"` ("Test" in my case) immediately afterwards. If you copied this tutorial exactly so far, it would like this.
|
||||
```
|
||||
"pointsOfInterest": [
|
||||
"Spawn",
|
||||
"Test"
|
||||
],
|
||||
```
|
||||
|
||||
### Part 4: Put it to the test!
|
||||
|
||||
Alright, time for the fun part. If you've come this far, everything is ready to go. Tell IntelliJ to fire up Forge, go into Adventure mode. If you hadn't previously, set your plane to your custom plane, (and restart Forge in that case.) You'll still have the tutorial quest prompts and spawn to work through. But when done, when you leave the portal, things will immediately be visibly different. If you don't see a dungeon right away, bring up the Map, track down your dungeon icon in the Wastes biome, and walk on over. (You may need to avoid a few spawns along the way.) Enter, and, assuming you following perfectly, you'll show up in your new map. If you have questions or run into any problems, reach out to me (shenshinoman) on the Forge discord and I will be happy to help.
|
||||
|
||||
After you've done that, you may notice the entire world is devoid of any map except the overworld, the spawn to the old man, and the map you just built. While this is nice for testing a new map, we should probably add a city back in, that way we actually have a place to heal up and test other changes to the plane. To make life really easy, we are just going to add a basic town back to the "Wastes". Navigate to ``...\YourIntelliJProjectFolder\forge-gui\res\adventure\common\world' and open up the "points_of_interest.json" file. Towards the bottom we will find the code block for "Waste Town Generic", select it, and copy it into the "points_of_interest.json" inside your plane's 'world' directory. So, if you've followed along precisely, your "points_of_interest.json" should look like this.
|
||||
|
||||
```
|
||||
[
|
||||
{
|
||||
"name": "Test",
|
||||
"displayName": "Fanciest Beach",
|
||||
"type": "dungeon",
|
||||
"count": 30,
|
||||
"spriteAtlas": "../common/maps/tileset/buildings.atlas",
|
||||
"sprite": "Aerie",
|
||||
"map": "../Test/maps/map/beach/test.tmx",
|
||||
"radiusFactor": 0.8,
|
||||
"questTags": [
|
||||
"Hostile",
|
||||
"Nest",
|
||||
"Dungeon",
|
||||
"Sidequest"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Spawn",
|
||||
"displayName": "Secluded Encampment",
|
||||
"type": "town",
|
||||
"count": 1,
|
||||
"spriteAtlas": "../common/maps/tileset/buildings.atlas",
|
||||
"sprite": "Spawn",
|
||||
"map": "../common/maps/map/main_story/spawn.tmx",
|
||||
"questTags": [
|
||||
"Story",
|
||||
"Spawn",
|
||||
"BiomeColorless"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Waste Town Generic",
|
||||
"type": "town",
|
||||
"count": 30,
|
||||
"spriteAtlas": "../common/maps/tileset/buildings.atlas",
|
||||
"sprite": "WasteTown",
|
||||
"map": "../common/maps/map/towns/waste_town_generic.tmx",
|
||||
"radiusFactor": 0.8,
|
||||
"questTags": [
|
||||
"Town",
|
||||
"TownGeneric",
|
||||
"BiomeColorless",
|
||||
"Sidequest",
|
||||
"QuestSource"
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Now we need to go and tell the game to actually spawn this town. Inside your plane's "world\biomes" directory, open back up the "colorless.json" file, and add "Waste Town Generic" to the `"pointsOfInterest"` array. If you followed along, that array should now look like this.
|
||||
|
||||
```
|
||||
pointsOfInterest": [
|
||||
"Spawn",
|
||||
"Test",
|
||||
"Waste Town Generic"
|
||||
],
|
||||
```
|
||||
|
||||
Now if you open up your plane, you have a bunch of dungeons and a bunch of towns. Congratulations, you have completed this tutorial. Pat yourself on the back, cus it was a long one. (Also, don't forget to save if your system doesn't auto-save.)
|
||||
56
docs/Adventure/Tutorial-3-Configuration.md
Normal file
56
docs/Adventure/Tutorial-3-Configuration.md
Normal file
@@ -0,0 +1,56 @@
|
||||
## Tutorial 3 Configuration, (Configuring your Plane)
|
||||
|
||||
Alright, our third tutorial will be a simpler one again. Customizing your plane. A common desire when making a new plane, is to change things such as which sets are available to play, or which cards an be bought or gained as rewards. Maybe you want to be able to more easily build super powerful decks from the get go, or just have entirely new decks. All these settings, and more, can be adjusted from the 'config.json' file in your plane's directory. For this tutorial, to get a basic idea of what things can be changed, we are going to make some minor adjustments to the plane. Further details on other changes and what they do will be covered in other sections and tutorials.
|
||||
|
||||
For now, in IntelliJ, open up the 'config.json' file found in `...\YourIntelliJProjectFolder\forge-gui\res\adventure\YourPlane`, as a reminder for our tutorials, I am using a directory called Test. Inside the config file, there are a large number of entries, but we are going to start with the `"restrictedCards"` array. After-all, we are here to have fun, so let's just bring in almost all the craziness. We are going to delete every entry in the array, _except_ for "Black Lotus"... Why not Black Lotus you ask? Because it's too rare, clearly. (Or, maybe just because it is the first entry and I'm being lazy, and keeping one entry is a reminder how this array is formatted.) So, when you are done, the array should look like this.
|
||||
```
|
||||
"restrictedCards": [
|
||||
"Black Lotus"
|
||||
],
|
||||
```
|
||||
|
||||
To better explain what that array does, is any card in the array will not appear in any generic rewards or shops. This is the closest thing to banning individual cards that one can. However, it should be noted that if those cards are ever specifically added as a reward or a shop's content. Doing so overrides this setting. Essentially allowing you to award cards for very special cases, or hide a fancy shop somewhere in your game.
|
||||
|
||||
Now, restricting one card at a time is a very laborious process, especially if there are a large number of cards you want removed. In many cases, you will want entire sets removed from your game, which brings us to the `"restrictedEditions"` array. Any card whose set code appears in this array will be restricted from the game in the exact same way as `"restrictedCards"`. There's already several entries in here, but since I'm making a really wacky unbalanced plane here, we're going to remove every entry from this array, except for "UNF". Why not UNF you ask? Because it's a traitor and made some of it's cards legal and others not, clearly. (Or, maybe again it's because I'm lazy, and at the time of this writing, it's the last entry in the list. As well as once again keeping one entry as a reminder how this array is formatted.) So if you follow my flawless example, it will look like this.
|
||||
|
||||
```
|
||||
"restrictedEditions": [
|
||||
"UNF"
|
||||
],
|
||||
```
|
||||
|
||||
Now that we've opened the floodgates for our awards, we could go have fun in the wacky world. However, our Inn's drafts and jumpstarts won't be as open as the rest of the game still. Why? Because the array `"restrictedEvents"` tells our Inn what "events" (aka sealed and draft editions) it can't spawn. Just like `"restrictedEditions"` any set in this array won't appear for draft events (but if it is not in the `"restrictedEditions"` it can still appear as rewards.) As such, let's go ahead and open those flood gates further. In my infinite wisdom, I have decided, for no specific reason at all, that we will remove every set from this list except for "CMM". (Yes, you got the picture, I'm lazy but trying to be helpful still.) If you followed me so far, the entries between `"colorIDNames"` and `"difficulties"` should appear as follows.
|
||||
|
||||
```
|
||||
"restrictedCards": [
|
||||
"Black Lotus"
|
||||
],
|
||||
"restrictedEditions": [
|
||||
"UNF"
|
||||
],
|
||||
"restrictedEvents": [
|
||||
"CMM"
|
||||
],
|
||||
```
|
||||
|
||||
Now if you load up the game at this timeframe, and go hopping through towns, you'll notice the occasional card you hadn't seen before. This is good, but man there are a lot of cards in Magic, and it can take a while to find ones to show you've made a change. For a tutorial, that's bad. Also, if you want to make a plane like "Shandalar Old Border" or "Innistrad", you'd have to go through and add every unwanted set to the `"restrictedEditions"` array. including updating this array every time Wizards of the Coast releases another set, and that's **worse** than bad... Luckily, we have a solution for this. We are going to add two new arrays to our 'config.json' file. Where the previous arrays act as a black-list for the entries, the following arrays are a overwrite. If they are present, the plane will only spawn cards and events found in them. The first one is `"allowedEditions"`. For this tutorial, I am going to go completely unhinged and risk making some of our games unstable, but what mod never comes unglued? If you didn't pick up the hints, my array is going to add `"UNG"`, `"UNH"`, and `"UST"`. So my array looks as follows.
|
||||
|
||||
```
|
||||
"allowedEditions": [
|
||||
"UNG",
|
||||
"UNH",
|
||||
"UST"
|
||||
],
|
||||
```
|
||||
|
||||
The second array I'm going to add is the `"allowedJumpstart"` array. This changes which Jumpstart sets are available, and will allow us to still have them even when the previous arrays have blacklisted them in any way. For this tutorial, I know we all want to get a jump on things, so I'm just going to add `"Jumpstart"`.
|
||||
|
||||
```
|
||||
"allowedJumpstart": [
|
||||
"Jumpstart"
|
||||
],
|
||||
```
|
||||
|
||||
You might have noticed that unlike the previous arrays, this one uses the set name, not code. This is a current limitation in Forge, and one we will have to live with. Luckily, there are far fewer jumpstart sets than than other sets. (**NOTE: Adding a set to this list that does not have any official Jumpstart packs will NOT enable them for jumpstart events.** Some of you who have tooled around will have noticed there are Jumpstarts in "Innistrad" that don't exist in normal jumpstarts. Well, that is for a much later tutorial. My apologies.)
|
||||
|
||||
As a final note, while this changes the rewards from enemies and shops, as well as what can appear in the Inns. It has no bearing on your starting decks, or enemy decks, just the rewards and shop options. So yes, if you followed along so far, you will playing with 'normal' cards, against normal cards, to earn Silver-Bordered cards.. yeah, it's a bit crazy, but that works... For those who want to customize their plane even further, the next tutorial will focus on modifying both starting decks, and enemy decks. See you there. For now, enjoy, and again. if you have any problems, please reach out me "Shenshinoman" on the discord and I will be happy to help.
|
||||
Reference in New Issue
Block a user