Skip to content

Commit ba8249b

Browse files
MostCromulentclaude
andcommitted
Merge upstream/master into keywordlocale
Resolved conflicts in Keyword.java and en-US.properties: kept the localized 3-arg Keyword constructor and forwarded the upstream ENCHANT reminder format-arg fix (%s -> %1$s) into lblKwAbilityEnchantReminder. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2 parents 6473262 + 2639117 commit ba8249b

893 files changed

Lines changed: 16812 additions & 7669 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CONTRIBUTING.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ Card scripting resources are found in the forge-gui/res/ path.
6262

6363
Art files need to be copyright-free and they should be in the public domain.
6464

65+
## Using AI coding agents
66+
67+
If you use an AI agent (e.g. Claude Code, OpenAI Codex) to substantially code a contribution to Forge please identify this when you make a pull request, either by including the coding agent as a co-author or by noting in the body of the request.
68+
69+
Agents have a tendency to add unnecessary new unit or wiring tests to the CI suite. This should be avoided unless necessary to catch potential future integration regressions.
70+
6571
### Project Hierarchy
6672

6773
Forge is divided into 4 primary projects with additional projects that target specific platform releases. The primary projects are:

docs/Credit-and-Thanks.md

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,38 @@
11
## Special Thanks
2-
1. Quest icons created by Teekatas, from his Legendora set - [Link](http://raindropmemory.deviantart.com/)
3-
1. Thanks to the XMage team for permission to use their targeting arrows.
4-
1. Thanks to http://www.freesound.org/browse/ for providing some sound files.
5-
1. Credit to Kevin Macleod for the royalty free music that is used.
6-
1. Credit to Juhani Junkala for the royalty free music for boss battles - [Link](https://opengameart.org/content/boss-battle-music)
2+
- Quest icons created by Teekatas, from his Legendora set - [Link](http://raindropmemory.deviantart.com/)
3+
- Thanks to the XMage team for permission to use their targeting arrows.
4+
- Thanks to http://www.freesound.org/browse/ for providing some sound files.
5+
- Credit to Kevin Macleod for the royalty free music that is used.
6+
- Credit to Juhani Junkala for the royalty free music for boss battles - [Link](https://opengameart.org/content/boss-battle-music)
77

8-
## Adventure Mode Sprites and tiles.
8+
## Sprites and icons
9+
10+
### Adventure Mode
911
Some of the sprites and tiles that are used in Adventure mode come from external artists. These fall under the ownership of their respective artists and may be used only under the conditions laid out in their respective licence.
1012

11-
1. Credit to Reddit user [wampastompah](https://www.reddit.com/user/wampastompah) for the sprites of iconic MTG characters that are used in Adventure mode
12-
1. Credit to [Aleksandr Makarov's](https://itch.io/profile/iknowkingrabbit) pixelart (tiles and sprites) that are used in Adventure mode.
13-
1. Credit to [Elthen](https://linktr.ee/elthen) for his sprites that are used in adventure mode.
14-
1. Credit to [DeepDiveGameStudio](https://deepdivegamestudio.itch.io) for some of the sprites that are used in adventure mode.
15-
1. Credit to [Krishna Palacio](https://itch.io/profile/krishna-palacio) for some of the sprites and tiles that are used in adventure mode.
16-
1. Credit to https://opengameart.org/ for some of the tiles. More in dept creditation of the tiles used can be found [Here](https://docs.google.com/spreadsheets/d/e/2PACX-1vTD0L8yDltZnn4025CZ9exhziCj0rbpd2aKE-0qeHikVBz51OKaAHLsgFuaDuIWrkrqIJicxzdn3SG1/pubhtml)
13+
- Credit to Reddit user [wampastompah](https://www.reddit.com/user/wampastompah) for the sprites of iconic MTG characters that are used in Adventure mode
14+
- Credit to [Aleksandr Makarov's](https://itch.io/profile/iknowkingrabbit) pixelart (tiles and sprites) that are used in Adventure mode.
15+
- Credit to [Elthen](https://linktr.ee/elthen) for his sprites that are used in adventure mode.
16+
- Credit to [DeepDiveGameStudio](https://deepdivegamestudio.itch.io) for some of the sprites that are used in adventure mode.
17+
- Credit to [Krishna Palacio](https://itch.io/profile/krishna-palacio) for some of the sprites and tiles that are used in adventure mode.
18+
- Credit to https://opengameart.org/ for some of the tiles. More in dept creditation of the tiles used can be found [Here](https://docs.google.com/spreadsheets/d/e/2PACX-1vTD0L8yDltZnn4025CZ9exhziCj0rbpd2aKE-0qeHikVBz51OKaAHLsgFuaDuIWrkrqIJicxzdn3SG1/pubhtml)
19+
20+
### Other sprites and icons
21+
- Clipboard icon by Dimitry Miroliubov at [Flaticon](https://www.flaticon.com/free-icon/clipboard_340068)
22+
- Dock-bar icons by [Lorc](https://lorcblog.blogspot.com/), [Delapouite](https://delapouite.com/), and Skoll, sourced from [game-icons.net](https://game-icons.net/), licensed under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/).
1723

1824
## Soundtrack
1925

2026
### Adventure
21-
1. Battle = Rising Legion - Derek Fiechter//Assyrian Fortress - Derek Fiechter//Goblin Raid - Brandon Fiechter// As we Marched - Vindsvept // Mecha Dwarves - Derek Fiechter
22-
1. Boss =
23-
1. Inn= Wild Boar's Inn - Brandon Fiechter// Black Rock - Logan Epic Canto //The Land of Gnomes - Logan Epic Canto//Dance of the Red Lights- Logan Epic Canto // Poland - Brandon Fiechter // Tir Nan Og - Logan Epic Canto // Village Consort -Kevin Macleod
24-
1. Dungeon = Swamp Witch - Derek Fiechter // Giant Mushrooms - Derek Fiechter// Cobweb Fairies - Derek Fiechter
25-
1. Menus = Vindsvept - Wanderer // Vindsvept - Lake of Light
26-
1. Waste biome = Vindsvept - Through the Woods we Ran // Vindsvept - Adventure
27-
1. Swamp biome = Merky Swamp - Brandon Fiechter // Masquerade of the Ghosts - Brandon Fiechter
28-
1. Island biome = Pirates of the Coast - Brandon Fiechter & Derek Fiechter//Buried Treasure - Brandon Fiechter & Derek Fiechter
29-
1. Forest biome = Enchanted Forest - Logan Epic Canto // The Celtic King
30-
1. Plains biome = Cobblestone Village - Brandon Fiechter // Camelot - Brandon Fiechter
31-
1. Mountain biome = Goblin Tinker - Brandon Fiechter // Goblin King's Tavern - Brandon Fiechter
32-
1. Castle = Horus - Brandon Fiechter & Derek Fiechter
27+
- Battle = Rising Legion - Derek Fiechter//Assyrian Fortress - Derek Fiechter//Goblin Raid - Brandon Fiechter// As we Marched - Vindsvept // Mecha Dwarves - Derek Fiechter
28+
- Boss =
29+
- Inn= Wild Boar's Inn - Brandon Fiechter// Black Rock - Logan Epic Canto //The Land of Gnomes - Logan Epic Canto//Dance of the Red Lights- Logan Epic Canto // Poland - Brandon Fiechter // Tir Nan Og - Logan Epic Canto // Village Consort -Kevin Macleod
30+
- Dungeon = Swamp Witch - Derek Fiechter // Giant Mushrooms - Derek Fiechter// Cobweb Fairies - Derek Fiechter
31+
- Menus = Vindsvept - Wanderer // Vindsvept - Lake of Light
32+
- Waste biome = Vindsvept - Through the Woods we Ran // Vindsvept - Adventure
33+
- Swamp biome = Merky Swamp - Brandon Fiechter // Masquerade of the Ghosts - Brandon Fiechter
34+
- Island biome = Pirates of the Coast - Brandon Fiechter & Derek Fiechter//Buried Treasure - Brandon Fiechter & Derek Fiechter
35+
- Forest biome = Enchanted Forest - Logan Epic Canto // The Celtic King
36+
- Plains biome = Cobblestone Village - Brandon Fiechter // Camelot - Brandon Fiechter
37+
- Mountain biome = Goblin Tinker - Brandon Fiechter // Goblin King's Tavern - Brandon Fiechter
38+
- Castle = Horus - Brandon Fiechter & Derek Fiechter

docs/Development/UI-Guidelines.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# UI Guidelines
2+
3+
Forge is a volunteer project and creativity is encouraged! This page is not a hard rule-book — the guidelines below are intended to give some direction to contributors submitting UI changes and help maintain a consistent UI approach across the project.
4+
5+
## Contents
6+
7+
- [UI Design Principles](#ui-design-principles)
8+
- [Where Should a New Setting or Option Live?](#where-should-a-new-setting-or-option-live)
9+
- [Desktop](#desktop)
10+
- [Game Menu](#game-menu)
11+
- [Dock Panel](#dock-panel)
12+
- [Preferences Menu](#preferences-menu)
13+
- [Mobile](#mobile)
14+
- [Game Menu](#game-menu-1)
15+
- [Settings](#settings)
16+
17+
---
18+
19+
## UI Design Principles
20+
21+
- Aim to be intuitive and user-friendly.
22+
- Involve a good mix of dynamic and static elements.
23+
- Use reasonable, context-driven default options.
24+
- User-facing elements should always use localisation keys, not hard-coded strings.
25+
- UI elements should be compatible with theme skinning — prefer skin-aware components and colours over hard-coded styles.
26+
- The default Forge skin should favour accessibility.
27+
28+
---
29+
30+
## Where Should a New Setting or Option Live?
31+
32+
### Desktop
33+
34+
#### Game Menu
35+
36+
- **Purpose:** detailed in-match configuration options.
37+
- **Heuristic:** if it affects in-match gameplay or display and the user might want to change it mid-match, it should live in the Game menu for easy access.
38+
39+
The in-match menu bar is divided into the following top-level submenus:
40+
41+
- **Game** — how the user interacts with game state (e.g. yield options, auto yields and triggers, concede).
42+
- **Layout** — visual UI and layout (e.g. XML layout files, theme selection, UI panel options).
43+
- **Display** — how game state is displayed to the user (e.g. card overlays, targeting arcs, stack/group token options, separate combatants toggle).
44+
- **Audio** — sound and music settings.
45+
46+
Conventions:
47+
48+
- If a new feature involves suboptions (not just a single checkbox), group them together in a submenu.
49+
- Avoid nesting menu items more than 3 levels deep (e.g. `Forge > Game > Stack/Group options` is as deep as we want to go).
50+
51+
#### Dock Panel
52+
53+
- **Purpose:** quick shortcuts and toggles for the most commonly used gameplay functions.
54+
- **Heuristic:** if the user would need to navigate the game menu multiple times per match to change a setting, it should have a button here.
55+
- The dock is only ever a mirror of a setting or option — never the exclusive entry point.
56+
57+
#### Preferences Menu
58+
59+
- **Purpose:** comprehensive access to all available user preferences and options.
60+
- The search filter makes this menu cheap to add to — don't be overly concerned about menu length.
61+
62+
### Mobile
63+
64+
#### Game Menu
65+
66+
Physical space is at a premium on mobile, so only the most essential settings a user needs to access in-match should appear in the game menu. Generally these will be settings that involve interacting with game state, not just display options.
67+
68+
#### Settings
69+
70+
- **Purpose:** comprehensive access to all available user preferences and options.
71+
- The search filter makes this menu cheap to add to — don't be overly concerned about menu length.

docs/Development/ownership.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ Please also try to check back a bit after your PR gets merged in case it causes
55
## DevOps
66
| Concept | Owners | Ancestors | Example tasks |
77
| - | - | - | - |
8-
| PC Releases | friarsol | Agetian | - update Maven dependencies |
8+
| PC Releases | friarsol | Agetian | - update Maven dependencies<br>- maintain CI files |
99
| Android Releases | | kevlahnota | |
10-
| Sentry | JaminCollins | | - watch for rare/unusual crashes |
10+
| Sentry | JaminCollins | | - watch trends for rare/unusual crashes |
1111

1212
## Ingame Engine
1313
| Concept | Owners | Ancestors | Example tasks |
@@ -26,7 +26,7 @@ Please also try to check back a bit after your PR gets merged in case it causes
2626
## User Interface
2727
| Concept | Owners | Ancestors | Example tasks |
2828
| - | - | - | - |
29-
| Desktop | | | |
29+
| Desktop | | | - performance profiling |
3030
| Android | | DrDev, kevlahnota | - test new libGDX versions |
3131
| Localization | | Alumi | - update card translation files<br>- update engine text (native speaker not required) |
3232
| Sound effects | | | |
@@ -41,7 +41,7 @@ Please also try to check back a bit after your PR gets merged in case it causes
4141
| Concept | Owners | Ancestors | Example tasks |
4242
| - | - | - | - |
4343
| Quest | friarsol | | |
44-
| [Network Play](../network-play.md) | | JaminCollins | |
44+
| [Network Play](../network-play.md) | MostCromulent | JaminCollins | |
4545
| Gauntlet | | | |
4646
| Draft | | | |
4747
| Planar Conquest | | DrDev | |
@@ -61,4 +61,4 @@ Please also try to check back a bit after your PR gets merged in case it causes
6161
## Miscellaneous
6262
| Concept | Owners | Ancestors | Example tasks |
6363
| - | - | - | - |
64-
| Documentation | | | - update Wiki |
64+
| Documentation | TRT | | - update Wiki |

docs/Frequently-Asked-Questions.md

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ https://discord.com/channels/267367946135928833/1047001034788196452
99
# General
1010

1111
## How do I download content?
12-
1312
Forge has content downloaders within the app itself, you can use those tools to update the graphics assets. More information about card and token image assets can be found here. [Card Images, Downloading](Card-Images.md#downloading)
1413

1514
## My desktop match/deck view is all messed up?
@@ -20,7 +19,6 @@ Sometimes people will decide that they do not like the changes that they made an
2019
Also use the mentioned measure if your match or deckeditor won't start - it would help in 90% of the cases.
2120

2221
## I think I found a bug in Forge. What do I do?
23-
2422
*Most users, who are running beta versions of Forge, should continue to use these instructions. As for alpha testers, these instructions have yet to be made congruent with the latest automatic bug reporting from within Forge.*
2523

2624
Bug reports from users are the lifeblood of Forge. Please keep in mind that "beta" releases *are* test releases. Forge is constantly evolving, so we do not yet have "stable" or "production" releases. Because of the pace at which new cards are added to the multiverse by external forces, this will be the norm for some time. We do not expect everything to work 100%. We have a small number of developers and a handful of slightly less technical people actively improving the game. We simply cannot devote the resources to test every single card, much less the nearly infinite ways the cards can interact.
@@ -38,13 +36,11 @@ Because duplicate bug reports use up our limited resources, please research your
3836
* If you're unsure, you can also post on one of the support channels of the discord. In case you do not get a timely response, please submit a new issue anyway to make sure it doesn't get lost.
3937

4038
## I have an idea to make Forge better. What do I do?
41-
4239
Follow the directions in [Bug Reports](Frequently-Asked-Questions#i-think-i-found-a-bug-in-forge-what-do-i-do), keeping in mind that you are not reporting a bug, but rather a **Feature Request**.
4340

4441
# Development
4542

4643
## I want to help develop Forge. How do I get started?
47-
4844
Forge is written in Java, so knowledge in that language (or similar Object Oriented languages like C++ or C\#) is very helpful. However, it is possible to learn the grammar for writing the data objects of cards without programming experience.
4945

5046
A development environment such as [IntelliJ](https://www.jetbrains.com/idea) is beneficial, as it helps writing, compiling and testing your changes.
@@ -64,25 +60,20 @@ For smaller first-time contributions using the GitHub web interface is also an a
6460
To obtain the source code of Forge, read our [Development Guide](Development/IntelliJ-setup/IntelliJ-setup.md).
6561

6662
## My system is all setup to help. What now?
67-
6863
Take a look through the /res/cardsfolder folder. This is where all the card data lives. If you know of cards that are missing from Forge, see if there are similar cards that already exist.
6964

7065
# Gameplay
7166

7267
## Where do I use Flashback or a similar ability that is in an External area?
73-
7468
Click on the Lightning Bolt icon in the player panel. Since cards with external Activations aren't as clear to activate, we created this shortcut for this specific purpose. After the last card is removed from a zone window, that window will automatically be hidden.
7569

7670
## How do I target a player?
77-
7871
Just click on the player's Avatar in the Player Panel when prompted to select a Player as a target.
7972

8073
## Where did my mana go?
81-
8274
If you have an effect that generated you some mana, and you don't know where it is. Check out the Player Panel. There are 6 different mana subpools one for each color/colorless that should have it. If you accidentally tapped your mana before your Main Phase, your mana is gone. Sorry, we don't have a way at this time to revert these actions. In general, I'd say it's easier/better to start casting a spell first, then activate your mana so this doesn't happen.
8375

8476
# Quest Mode
8577

8678
## What is the difference between Fantasy Quest and Normal Quest?
87-
88-
In Normal Quest, you start with 20 life and only have access to the Card Shop. In Fantasy Quest, you start at 15 life and gain additional access to the Bazaar which allows you to buy things like extra life points, Pets, Plants and more.
79+
In Normal Quest, you start with 20 life and only have access to the Card Shop. In Fantasy, you start at 15 life and gain additional access to the Bazaar which allows you to buy things like extra life points, Pets, Plants and more.

docs/Network-Play.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,22 @@
4545
4646
1. **Configure network** — Host must configure network settings to enable external connections (see [Network Configuration](#network-configuration) below).
4747
2. **Verify versions** — Confirm all devices are running the same Forge version (see [Version Compatibility](#version-compatibility) below).
48-
3. **Launch Forge** on all devices.
48+
3. **Launch Forge** on all devices and navigate to the online play screen.
4949
- Mobile: Choose "Classic Mode", then "Play Online"
50-
- Desktop: "Online Multiplayer" > "Lobby" > "Connect to Server"
51-
4. **Host** leaves the server address field **empty** and clicks OK.
50+
- Desktop: "Online Multiplayer" > "Lobby"
51+
4. **Host** clicks **"Host a Game"** to start the server.
5252
- On first host, Forge will ask whether to **automatically open the port via UPnP** (see [UPnP](#upnp-automatic-port-forwarding) below). If your router supports UPnP, choosing "Just Once" or "Always" can skip manual port forwarding entirely.
5353
5. **Host** determines address to share with clients:
5454
- **Local play:** Use the **Copy Local URL** button in the lobby — this copies the address in the correct format. Forge displays the host's IP (typically `192.168.x.x`). Verify against the device's network settings. Ignore any suggestion to use `localhost`.
5555
- **Remote play:** Use the **Copy External URL** button in the lobby — if necessary verify the external IP at [canyouseeme.org](http://canyouseeme.org).
56-
7. **Client** enters the host's IP address in the connection dialog and clicks OK.
56+
6. **Client** clicks **"Join a Game"** and enters the host's address.
5757
- The address format is **`IP:port`** — for example: `192.168.1.50:36743` (local) or `203.0.113.45:36743` (remote).
5858
- If the port is omitted, Forge defaults to 36743 (=FORGE on older phone keypads).
59-
8. **Configure the match:**
59+
7. **Configure the match:**
6060
- Host selects match type, teams, and game settings.
6161
- All players select decks, sleeves, and avatars.
6262
- Each player toggles their **Ready** switch.
63-
9. **Host starts the match** once all players are ready.
63+
8. **Host starts the match** once all players are ready.
6464

6565
---
6666

0 commit comments

Comments
 (0)