Compare commits

...

6980 Commits

Author SHA1 Message Date
GitHub Actions
5de2b3b668 [maven-release-plugin] prepare release forge-1.6.56 2023-04-24 16:26:41 +00:00
Anthony Calosa
8002849a1b Merge pull request #3002 from CCTV-1/master
updated simplified chinese translation
2023-04-24 21:15:17 +08:00
Anthony Calosa
653d80410f Merge pull request #2978 from Simisays/MAT2
MAT 5 cards
2023-04-24 21:06:14 +08:00
tool4ever
53d674998a Merge branch 'master' into MAT2 2023-04-24 14:40:14 +02:00
tool4ever
3cf2f27756 Update calix_guided_by_fate.txt 2023-04-24 12:39:26 +00:00
CCTV-1
480d3ff192 Merge branch 'Card-Forge:master' into master 2023-04-24 20:22:47 +08:00
Paul Hammerton
ddcab767c4 Merge pull request #2994 from jjayers99/master
Addition of MOM Jumpstart packs, adding into Adventure start options
2023-04-24 13:17:07 +01:00
CCTV-1
4041140083 add missing label,then translate new texts. 2023-04-24 20:12:05 +08:00
TabletopGeneral
6cdd7f8dba Style updates 2023-04-24 08:11:02 -04:00
TabletopGeneral
68b06f5225 Spacing update 2023-04-24 08:09:50 -04:00
TabletopGeneral
f11329c103 Clean up config file layout 2023-04-24 08:08:56 -04:00
Anthony Calosa
3a01c0a5d0 Merge pull request #2999 from Simisays/scarecrow
Scarecrow Captain fix
2023-04-24 19:40:24 +08:00
Paul Hammerton
d52c57f32c Merge pull request #3000 from paulsnoops/update_mat_edition
Update edition: MAT
2023-04-24 12:33:08 +01:00
paulsnoops
bcf24a23e7 Update edition: MAT 2023-04-24 12:23:49 +01:00
Simisays
9d3125566f Update enemies.json 2023-04-24 13:16:21 +02:00
Paul Hammerton
f81647878e Merge pull request #2998 from paulsnoops/fix_stx_draft
Fix STX draft booster
2023-04-24 10:49:27 +01:00
paulsnoops
f0da094c8e Fix STX draft booster 2023-04-24 10:44:41 +01:00
Paul Hammerton
826e4f4654 Merge pull request #2997 from pfirpfel/mom-booster-collation
MOM booster collation: Ensure rare/mythic
2023-04-24 10:36:32 +01:00
Anthony Calosa
8e18656730 Merge pull request #2995 from tool4ever/hauntfix
Haunt fix
2023-04-24 17:34:55 +08:00
Paul Hammerton
9c894125c8 Merge pull request #2825 from MikeS-NZ/forge_mom4
MOM: 5 more Legends
2023-04-24 10:26:05 +01:00
Paul Hammerton
d025d3cd66 Merge pull request #2869 from MikeS-NZ/forge_moc1
MOC: The Talent Cycle
2023-04-24 10:25:50 +01:00
Paul Hammerton
c905a4c2e5 Merge pull request #2876 from Simisays/MOCPLANE1
MOC 10 new planes
2023-04-24 10:25:24 +01:00
pfirpfel
e8ba673799 MOM booster collation: Ensure rare/mythic 2023-04-24 10:59:37 +02:00
tool4EvEr
f1e455de2a Haunt fix 2023-04-24 09:47:32 +02:00
jjayers99
9886d06790 Addition of MOM Jumpstart packs, integration into Adventure Mode start options 2023-04-23 22:41:11 -04:00
Northmoc
df58e19959 path_of_the_pyromancer.txt fix 2023-04-23 21:41:16 -04:00
Mike S
8dd00dde02 Update urabrask_the_great_work.txt 2023-04-23 16:28:30 -05:00
Mike S
3985f99bc4 Update rona_herald_of_invasion_rona_tolarian_obliterator.txt 2023-04-23 16:27:17 -05:00
Mike S
24f379659e Update rona_herald_of_invasion_rona_tolarian_obliterator.txt 2023-04-23 16:26:48 -05:00
Mike S
b6e96ac28a Update kroxa_and_kunoros.txt 2023-04-23 16:25:55 -05:00
Mike S
b8072d941a Update djeru_and_hazoret.txt 2023-04-23 16:25:27 -05:00
Mike S
413ea08f0f Update teferis_talent.txt 2023-04-23 16:24:45 -05:00
Paul Hammerton
86bdde9164 Merge pull request #2991 from paulsnoops/fix_token
Quick fix for token in MOM edition
2023-04-23 20:51:07 +01:00
paulsnoops
e12fddc73d Quick fix for token in MOM edition 2023-04-23 20:39:15 +01:00
Michael Kuenzli
6d65476b9d Fix: Preening Champion only creates one token (#2990) 2023-04-23 19:25:54 +00:00
Anthony Calosa
c900f78bd0 Merge pull request #2988 from kevlahnota/newmaster2
Add AdventureWinLose Overlay
2023-04-24 00:51:39 +08:00
Anthony Calosa
b3e80cfe42 cleanup 2023-04-24 00:42:41 +08:00
Anthony Calosa
442a859ec1 Add AdventureWinLose Overlay
- show Match results after Duels on Adventure Mode
- update SettingsScene options to disable AdventureWinLose Overlay
- update console toggle
2023-04-24 00:38:57 +08:00
Anthony Calosa
d73d21c22c Merge pull request #2940 from Simisays/MOM11
MOM 10 battles
2023-04-24 00:27:21 +08:00
Simisays
60d4af0e10 Invasion of Theros (#2986)
* update

* Update invasion_of_theros_ephara_ever_sheltering.txt

* Update invasion_of_theros_ephara_ever_sheltering.txt
2023-04-23 13:07:08 +03:00
tool4ever
0acf43654d Update vogar_necropolis_tyrant.txt 2023-04-23 07:59:17 +00:00
Simisays
c826f50951 Rename invasion_of_kaladesh.txt to invasion_of_kaladesh_aetherwing_golden_scale_flagship.txt 2023-04-23 08:32:57 +02:00
Anthony Calosa
c97c2ba81b Merge pull request #2983 from kevlahnota/newmaster2
update equipped abilities
2023-04-23 08:08:00 +08:00
Anthony Calosa
6f8309c31a update equipped abilities 2023-04-23 08:01:43 +08:00
Anthony Calosa
05816825e5 Merge pull request #2926 from Simisays/MOM9
MOM 10 cards
2023-04-23 07:50:28 +08:00
Anthony Calosa
582dc2ef28 Merge pull request #2882 from Simisays/MOCPLANE
MOC 8 new planes + 4 new cards
2023-04-23 07:50:11 +08:00
Simisays
a20dff5681 Update urborg_scavengers.txt 2023-04-22 13:02:59 +02:00
tool4ever
d8bda83ab3 Update ApiType.java 2023-04-22 12:16:54 +02:00
Simisays
5342fe9ff5 Update valors_reach.txt 2023-04-22 11:51:37 +02:00
TRT
d142be485d Clean up 2023-04-22 11:18:34 +02:00
tool4ever
92d9f16423 Merge branch 'master' into MAT2 2023-04-22 10:09:19 +01:00
tool4ever
47e124fa2b Update aetherblade_agent_gitaxian_minsdstinger.txt 2023-04-22 11:04:43 +02:00
Simisays
f45ecf26d3 Update aetherblade_agent_gitaxian_minsdstinger.txt 2023-04-22 08:45:21 +02:00
Simisays
1dedceec83 update 2023-04-22 08:36:36 +02:00
Simisays
d1eefaa856 update 2023-04-22 07:43:25 +02:00
Simisays
fdc28e7c19 update 2023-04-22 07:32:12 +02:00
Simisays
c8d2c5ddac Merge remote-tracking branch 'upstream/master' into MOCPLANE 2023-04-22 07:29:19 +02:00
Simisays
705acb013e update 2023-04-22 07:29:13 +02:00
Simisays
094a949e2e update 2023-04-22 07:25:25 +02:00
Simisays
b7480801de Merge remote-tracking branch 'upstream/master' into MOCPLANE1 2023-04-22 07:20:59 +02:00
Simisays
ea3130e044 update 2023-04-22 07:19:50 +02:00
Anthony Calosa
6ac23b42b1 Merge pull request #2979 from Northmoc/chaos
MOC: Chaos Ensues!!
2023-04-22 08:50:45 +08:00
Anthony Calosa
6100951b24 Merge pull request #2975 from EldritchBimbo/Gwyn-Dev
Invasion Update
2023-04-22 08:14:47 +08:00
Anthony Calosa
1dd4ced1a6 Merge pull request #2961 from EldritchBimbo/Gwyn-PlayerOptions
Playable Leonin Update
2023-04-22 08:00:20 +08:00
Anthony Calosa
2a53ea4dcd Update themberchaud.txt 2023-04-22 07:57:49 +08:00
Anthony Calosa
900f461b28 Merge pull request #2899 from tool4ever/fixsba
Effect cleanup can prevent any LTB trigger
2023-04-22 07:22:10 +08:00
Northmoc
d15ac2096c fixes 2023-04-21 17:23:58 -04:00
Northmoc
b930e2be97 MOC: Chaos Ensues!! 2023-04-21 17:09:54 -04:00
Simisays
5dd2f81d0f Update calix_guided_by_fate.txt 2023-04-21 22:22:25 +02:00
Simisays
27d343c78b UPDATE 2023-04-21 20:32:35 +02:00
Simisays
71ee8d6b12 update 2023-04-21 19:44:29 +02:00
Simisays
d4863dc35c Update invasion_of_tarkir_defiant_thundermaw.txt 2023-04-21 19:22:35 +02:00
Simisays
b4f724ebe8 Update invasion_of_ikoria_zilortha_apex_of_ikoria.txt 2023-04-21 18:55:33 +02:00
Alwayssnarky
4e042d7ed0 Adds Phyrexians to Town Arenas 2023-04-21 12:39:19 -04:00
Alwayssnarky
71248e8413 Invasion Update
Additions:

.The invasion of Shandalar has begun! All minor Phyrexian enemies can now spawn in their corresponding biome.
.Added custom decks for each of the Phyrexian dungeon minibosses.

Changes:
.Edited Gitaxiantileset to correct some tiling visual errors.
.Edited Enemies.json to give minibosses their corresponding decks.
.Phyrexian duelist is now monocolour (white) in parity with the other world enemy Phyrexians.
.Tweaked PhyrexianDuelist to more fit current enemy artstyle.
.Edited Gitaxian dungeon to fit new tile arrangement.
.Added second treasure chest to WUG Phyrexian dungeons, for parity with later ones.
.All Phyrexian dungeon booster loot pools now pull from the NPH, ONE, and MOM cards of that colour, instead of just ONE.
2023-04-21 11:14:38 -04:00
Simisays
28c5a18e56 Update lithomantic_barrage.txt 2023-04-21 15:35:19 +02:00
Simisays
a0cc3d7c4c Update invasion_of_tarkir_defiant_thundermaw.txt 2023-04-21 15:35:02 +02:00
Anthony Calosa
ad7598428f Merge pull request #2973 from tool4ever/tgtprompt
Prettify Any TgtPrompt
2023-04-21 20:40:20 +08:00
Anthony Calosa
4726a95593 Update wrathful_red_dragon.txt 2023-04-21 20:35:12 +08:00
Anthony Calosa
88bea56f4d Merge pull request #2933 from Simisays/MOM10
MOM 15 cards
2023-04-21 19:49:00 +08:00
TRT
72a0730560 Prettify Any TgtPrompt 2023-04-21 11:11:30 +02:00
Anthony Calosa
69ba6168f8 Merge pull request #2929 from EldritchBimbo/Gwyn-Dev
Furnace Host Update
2023-04-21 11:07:00 +08:00
Anthony Calosa
b4d871219a Merge pull request #2959 from Northmoc/ichor
MOC: Ichor Elixir + support
2023-04-21 11:05:08 +08:00
Anthony Calosa
6a8f058c8f Merge pull request #2972 from Card-Forge/fix-quest-plant-translate
Select pet must use an English string to store pet selection
2023-04-21 09:37:18 +08:00
friarsol
7d5c1bed3c Select pet must use an English string to store pet selection 2023-04-20 18:10:35 -04:00
Paul Hammerton
5defd50ccb Merge pull request #2971 from churrufli/master
Net Decks Archive Updates
2023-04-20 21:25:24 +01:00
Churrufli
dc474065bb Net Decks Archive Updates 2023-04-20 22:16:01 +02:00
Northmoc
b15e97aea1 fix crash 2023-04-20 10:09:24 -04:00
Northmoc
8562d5a4c3 refactor chaotic_aether.txt from global rule to replacement 2023-04-20 10:06:26 -04:00
Anthony Calosa
e400620f04 Merge pull request #2956 from Simisays/MOMFINAL
MOM 11 cards
2023-04-20 05:26:51 +08:00
Anthony Calosa
58139bd476 Merge pull request #2945 from Northmoc/pest
overgrown_pest.txt + refactor
2023-04-20 05:26:31 +08:00
Northmoc
af88a1441f fixes 2023-04-19 16:54:17 -04:00
Anthony Calosa
5e38fe606a Merge pull request #2970 from Northmoc/kicker
improve non-mana Kicker keyword to text + CostSacrifice.toString parsing
2023-04-20 04:37:51 +08:00
Anthony Calosa
be4d63a5ad Merge pull request #2969 from Card-Forge/muldrotha-battles
Update muldrotha_the_gravetide.txt
2023-04-20 04:36:42 +08:00
tool4ever
433e6bcfe1 Update world_queller.txt 2023-04-19 22:28:52 +02:00
Northmoc
0552937ad1 improve non-mana Kicker keyword to text + CostSacrifice.toString parsing 2023-04-19 15:49:38 -04:00
Chris H
6b45b2279c Update muldrotha_the_gravetide.txt 2023-04-19 15:19:48 -04:00
Simisays
f05c365480 Update swordsworn_cavalier.txt 2023-04-19 18:54:02 +02:00
Simisays
9509d978e6 Update invasion_of_azgol_ashen_reaper.txt 2023-04-19 18:43:42 +02:00
Simisays
e479085ff5 Update swordsworn_cavalier.txt 2023-04-19 18:43:12 +02:00
Simisays
bd364a6eeb MOM 13 cards (#2914) 2023-04-19 18:14:17 +02:00
Northmoc
d830586ce7 fix zh-CN.properties (thanks kev) 2023-04-19 10:49:48 -04:00
Northmoc
136b352391 refactor Planechase special action 2023-04-19 10:48:18 -04:00
Anthony Calosa
12e27a4f18 Merge pull request #2967 from tool4ever/lkifix2
LKI fix for facedown copiable type
2023-04-19 21:43:34 +08:00
Paul Hammerton
6d49801ab9 Merge pull request #2968 from paulsnoops/update_formats
Ban Ragavan, Nimble Pilferer from Historic
2023-04-19 14:19:38 +01:00
paulsnoops
8d4e38a18f Ban Ragavan, Nimble Pilferer from Historic 2023-04-19 14:15:15 +01:00
TRT
4ee2f793b6 LKI fix for facedown copiable type 2023-04-19 11:36:39 +02:00
Simisays
4167db2a22 MAT Jolrael, Voice of Zhalfir (#2966) 2023-04-19 10:12:46 +02:00
tool4ever
c4508ad4d7 Update tiller_of_flesh.txt 2023-04-19 09:58:57 +02:00
Agetian
06f1a61477 - Minor tidy up in the new achievement code. (#2965) 2023-04-19 07:36:03 +03:00
Anthony Calosa
552e5cee77 Merge pull request #2964 from kevlahnota/newmaster2
update translation, disable foil for battle cards
2023-04-19 09:57:04 +08:00
Anthony Calosa
0196c32a6c Merge pull request #2935 from Northmoc/marchesa
invasion_of_fiora_marchesa_resolute_monarch.txt + support
2023-04-19 09:56:34 +08:00
Northmoc
9d85c14ca1 MOC: Ichor Elixir + support 2023-04-18 21:51:46 -04:00
Anthony Calosa
0f8bc11dd0 update swamp town2 2023-04-19 09:45:06 +08:00
Anthony Calosa
04e17ecb1d revert invalid translations... wonder why this happens? 2023-04-19 09:32:21 +08:00
Anthony Calosa
ecb138ff20 Merge pull request #2947 from icy-/SerumPowder_draw
fix to allow Serum Powder to draw cards after exiling hand
2023-04-19 09:23:04 +08:00
Anthony Calosa
7dba1eff07 update translation, disable foil for battle cards
- todo move the draw method inside the card render method or use a general foil effect shader..
2023-04-19 09:20:34 +08:00
friarsol
f1e129b43c Update target restrictions to account for "Any" 2023-04-18 20:58:32 -04:00
Northmoc
1106bfeef2 Merge pull request #2960 from Agetian/card-achievements
Non-planeswalker card ultimate achievements (for MOM sagas)
2023-04-18 20:26:16 -04:00
Alwayssnarky
18d010c000 Playable Leonin Update
Adds:
.Playable Leonin race at parity with other options. (2 animation sets, 20 portraits.)

Changes:
.Adds new portraits to avatar .png.
.Edits avatar.atlas and heroes.json to accommodate new options.
2023-04-18 17:23:26 -04:00
icy
3082186cd5 prefer cheaper CardCollectionView. Thread-safe card exiles. Moved early-exit conditions up. Added javadoc comment. 2023-04-18 16:00:02 -04:00
Michael Kamensky
f4030012f9 - Actually update the card ultimate achievements after the win. 2023-04-18 22:23:45 +03:00
Northmoc
3d3f8dcec8 fix es-ES artifact 2023-04-18 15:18:04 -04:00
Northmoc
64d9d8d533 GameActionUtil.rollbackAbility handle Disturb / Siege transform stuff 2023-04-18 15:15:14 -04:00
Simisays
d5ff552a06 Update seed_of_hope.txt 2023-04-18 19:59:50 +02:00
paulsnoops
126c708c03 oops 2023-04-18 13:49:40 -04:00
paulsnoops
2581d08e8a Booster Draft: CLB 2023-04-18 13:49:40 -04:00
Simisays
83258a12c6 Update the_wilds.txt 2023-04-18 19:17:01 +02:00
Simisays
3130764107 UPDATE 2023-04-18 19:15:45 +02:00
Simisays
0bcb0b3cc6 Update invasion_of_tarkir_defiant_thundermaw.txt 2023-04-18 19:07:05 +02:00
Chris H
1c517d7513 Update stale.yml 2023-04-18 10:57:29 -04:00
Northmoc
41a562e414 oculus_whelp.txt 2023-04-18 10:07:06 -04:00
Northmoc
a33bdc6e4a 4 MOM leftovers and some cleanup (#2957) 2023-04-18 16:49:37 +03:00
Northmoc
3c86972f51 Merge pull request #2944 from icy-/upcoming_Scrollshift
upcoming card scripting for Scrollshift[MOM]
2023-04-18 08:45:06 -04:00
Northmoc
983484d218 moonmist.txt refactor 2023-04-18 08:40:45 -04:00
Northmoc
d35cd9a5c3 make sure Siege and Disturb count as "Transformed" CardProperty 2023-04-18 08:40:44 -04:00
Northmoc
21e92a8146 invasion_of_pyrulea_gargantuan_slabhorn.txt 2023-04-18 08:40:44 -04:00
Northmoc
22187b05f3 overgrown_pest.txt + refactor 2023-04-18 08:40:43 -04:00
Simisays
7ce9342806 update 2023-04-18 11:10:14 +02:00
Anthony Calosa
482e42309c Merge pull request #2954 from Card-Forge/Hanmac-patch-replaceDamageBattle
Update ReplaceDamage with Battle checks
2023-04-18 16:30:01 +08:00
Anthony Calosa
8d308d30eb Merge pull request #2955 from kevlahnota/newmaster2
commented out check for API fpr "Any"
2023-04-18 16:22:18 +08:00
Anthony Calosa
fb61dc9f6b commented out check for API fpr "Any" 2023-04-18 16:20:33 +08:00
Hans Mackowiak
c032d1b0be Update ReplaceDamage.java 2023-04-18 10:12:56 +02:00
Anthony Calosa
a7163ba6a2 Update Player.java
update check for "Any"
2023-04-18 15:47:17 +08:00
Anthony Calosa
31ff177995 Update Card.java
update check for "Any"
2023-04-18 15:42:16 +08:00
Anthony Calosa
fa4f6e43a7 Merge pull request #2948 from Card-Forge/any-targeting
Any targeting
2023-04-18 14:30:51 +08:00
Anthony Calosa
10ce3bee0b Merge pull request #2953 from jjayers99/master
Adventure updates
2023-04-18 14:25:13 +08:00
Anthony Calosa
485e3aaddf Update acolytes_reward.txt 2023-04-18 13:52:36 +08:00
Michael Kamensky
4aae0e6b01 - Initial implementation for non-planeswalker ultimate card achievements. 2023-04-18 08:45:57 +03:00
Agetian
dfc5625955 - Marek14's achievements for MOM, part 1. (#2952) 2023-04-18 08:32:03 +03:00
TabletopGeneral
4f32e63460 Merge branch 'Card-Forge:master' into master 2023-04-18 00:46:51 -04:00
Anthony Calosa
44a731f314 Merge pull request #2950 from Northmoc/mom17
MOM: remaining "Invasion" cards
2023-04-18 12:43:00 +08:00
Michael Kamensky
bcb443a169 - Marek14's achievements for MOM, part 1. 2023-04-18 07:41:51 +03:00
Northmoc
58936758c3 few commons too 2023-04-17 23:09:19 -04:00
Northmoc
fca257a564 MOM: remaining unclaimed "Invasion" cards 2023-04-17 23:02:58 -04:00
TabletopGeneral
66c4d8581c Merge branch 'Card-Forge:master' into master 2023-04-17 21:26:05 -04:00
jjayers99
3aac5625f2 Adventure quest tracking correction 2023-04-17 21:25:37 -04:00
friarsol
8b0ea9f3a0 Any (T-Z) 2023-04-17 21:10:01 -04:00
friarsol
c92a6c7a1a Any (R-S) 2023-04-17 21:09:34 -04:00
friarsol
2480c5ea9c Any (N-Q) 2023-04-17 21:08:56 -04:00
friarsol
a37e9e3977 Any (J-M) 2023-04-17 21:08:19 -04:00
friarsol
e96fbb968b Any (E-I) 2023-04-17 21:06:57 -04:00
friarsol
a8098ea917 Any (A-D) 2023-04-17 21:06:24 -04:00
friarsol
9c310eef40 Add Any as a top level Valid term 2023-04-17 21:01:22 -04:00
icy
6b9a1642a7 fix to allow Serum Powder to draw cards after exiling hand 2023-04-17 20:30:28 -04:00
Anthony Calosa
8bdd5f33de Merge pull request #2946 from kevlahnota/newmaster2
update icons
2023-04-18 07:28:24 +08:00
Anthony Calosa
e2c5be027f update icons 2023-04-18 07:23:52 +08:00
Northmoc
562981147f invasion_of_fiora_marchesa_resolute_monarch.txt + support 2023-04-17 16:36:18 -04:00
icy
c2f738cde8 upcoming card scripting for Scrollshift[MOM] https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=607051 .
Confirmed that it doesnt draw card if the target gets instantly shrouded on the stack.
2023-04-17 16:15:04 -04:00
Chris H
e4a73af041 Create stale.yml 2023-04-17 16:14:47 -04:00
Paul Hammerton
32c0064ab7 Merge pull request #2942 from JohnWilliams77/patch-84
Update Secret Lair Drop Series.txt
2023-04-17 17:45:56 +01:00
TabletopGeneral
cc5be08e0f Merge pull request #1 from jjayers99/Wake-Animations
Wake Animations
2023-04-17 09:20:59 -04:00
Simisays
3fca8ee0c1 update 2023-04-17 15:20:53 +02:00
JohnWilliams77
235363394d Update Secret Lair Drop Series.txt 2023-04-17 14:15:35 +01:00
Anthony Calosa
0e066ccb98 Merge pull request #2941 from kevlahnota/newmaster2
enable option to zoom view rotated battle cards
2023-04-17 21:08:20 +08:00
Anthony Calosa
b0cde1cd2e enable option to zoom view rotated battle cards 2023-04-17 21:01:43 +08:00
Anthony Calosa
9857084217 fix CardZoom not working 2023-04-17 20:31:42 +08:00
Anthony Calosa
797dc055c7 Update FSkinImage.java
use default sourcefile for MANAICONS
2023-04-17 20:16:45 +08:00
Anthony Calosa
32c7829ac8 Merge pull request #2939 from Card-Forge/battle-editor
Battle deck editor types
2023-04-17 19:28:39 +08:00
Anthony Calosa
4ba888bdcf Update FSkinProp.java
update battle icon coordinate
2023-04-17 18:14:06 +08:00
Anthony Calosa
e8bd1ae159 Update FSkin.java
get default skinfile for manaIcons, should fix old skins without battle icon
2023-04-17 18:11:07 +08:00
Anthony Calosa
25cb794b7e update default icons
add battle icon
2023-04-17 18:08:50 +08:00
Simisays
bddd565cb2 Update invasion_of_muraganda_primordial_plasm.txt 2023-04-17 11:38:45 +02:00
Simisays
8c96607e2c Update invasion_of_gobakhan_lightshield_array.txt 2023-04-17 11:37:25 +02:00
Simisays
19bd5932fb Update invasion_of_azgol_ashen_reaper.txt 2023-04-17 11:35:57 +02:00
Simisays
fd73092e85 update 2023-04-17 11:33:48 +02:00
friarsol
2f6b6cbd47 Mobile battle deck editor additions 2023-04-16 23:06:36 -04:00
friarsol
245e828dd9 Add Battles for DeckEditor types 2023-04-16 22:19:20 -04:00
Anthony Calosa
cbb8a6f236 Merge pull request #2938 from kevlahnota/newmaster2
add Flip icon
2023-04-17 08:19:02 +08:00
Anthony Calosa
e983cbac61 add Flip icon 2023-04-17 08:13:54 +08:00
tool4ever
1a32b30c9d Update the_brothers_war.txt 2023-04-16 22:32:51 +02:00
Anthony Calosa
ab32527fc7 Merge pull request #2936 from jjayers99/master
Adventure Updates
2023-04-17 01:31:17 +08:00
Anthony Calosa
3948a6df8a Update AdventureQuestStage.java
format
2023-04-17 00:55:09 +08:00
TabletopGeneral
21d4478f28 Merge branch 'Card-Forge:master' into master 2023-04-16 07:29:43 -04:00
jjayers99
04ef8de211 Adventure Updates
Fix for requiring specific targets for battle objectives.
Small corrections to Island / Mountain capital maps
2023-04-16 07:29:10 -04:00
tool4ever
47950c0984 Update roar_of_resistance.txt 2023-04-16 09:26:32 +02:00
jjayers99
a83ed8785d Wake Animations
1. Define a wake animation in sprite + atlas
2. Set enemy as hidden, add a threatRadius value
3. Walk into range - hidden enemy will reveal itself via one-time wake animation
Note - Currently resets after battles, need to keep state to not re-bury zombies between fights.
2023-04-15 22:10:23 -04:00
Simisays
02fe7fbb33 Update vengeant_earth.txt 2023-04-15 22:42:10 +02:00
Simisays
93c79f62ad Update zephyr_singer.txt 2023-04-15 22:41:11 +02:00
Simisays
859815e258 Update phyrexian_archivist.txt 2023-04-15 22:39:58 +02:00
Anthony Calosa
fcce9f8bc6 Merge pull request #2934 from kevlahnota/newmaster2
update dialog and some icons
2023-04-15 21:22:51 +08:00
Anthony Calosa
7a60241f73 update dialog and some icons 2023-04-15 21:18:42 +08:00
Alwayssnarky
37b991fd0b Tweaks
Tweaks to level, fixes to furnacetormentor.json and dross pit quest entries.
2023-04-15 08:04:20 -04:00
Simisays
98a18b3ce7 update 2023-04-15 13:28:26 +02:00
Simisays
ed94cc2bdd update 2023-04-15 12:50:09 +02:00
Simisays
b9101e76e7 Update invasion_of_tarkir_defiant_thundermaw.txt 2023-04-15 09:16:19 +02:00
tool4EvEr
7ab19408bd Fix trigger when rolling 0 times 2023-04-15 08:31:00 +02:00
Anthony Calosa
41bf7461db Merge pull request #2931 from jjayers99/master
Adventure quest updates
2023-04-15 10:31:05 +08:00
Anthony Calosa
d0a00461ae Update AdventureQuestController.java 2023-04-15 10:30:16 +08:00
jjayers99
fb8a7b904a Adventure quest updates
Arena quest stage objectives now available, one quest added.
Removed extra trigger for accepting quest in "A Vision of Destruction" offer dialog.
Minor dialog enhancements.
2023-04-14 22:14:12 -04:00
Anthony Calosa
93204bdd13 Merge pull request #2927 from jjayers99/master
Adventure updates
2023-04-15 06:57:42 +08:00
Anthony Calosa
08106f3add Merge pull request #2930 from tool4ever/sliverfix
Fix Frenetic Sliver + Tribute placer
2023-04-15 06:56:58 +08:00
Simisays
a159932b04 Update invasion_of_tarkir_defiant_thundermaw.txt 2023-04-14 22:23:40 +02:00
tool4EvEr
7a50e013e5 Placer is opponent 2023-04-14 22:18:52 +02:00
tool4EvEr
64dd09c0d0 Fix Frenetic Sliver trigger 2023-04-14 21:27:20 +02:00
Simisays
06e3bb5445 update 2023-04-14 21:14:12 +02:00
Simisays
e929b5c604 update 2023-04-14 21:00:25 +02:00
Alwayssnarky
bf8f13bc15 Furnace Host Update
Additions:
.Added two enemies based on the Furnace Host along with accompanying infrastructure.
.Added level based on the Furnace Host.
.Added tileset based on the Furnace Host along with accompanying infrastructure.

Changes:
.Added new building to Phyrexian Buildings for furnace dungeon, edited atlas file to detect it.
.Added new dungeon to POIs and Red jsons.
.Added new enemies to enemies json.
.Added proper quest tags to Dross faction enemies and dungeon.
2023-04-14 13:20:30 -04:00
Paul Hammerton
6c6d36d2a7 Merge pull request #2928 from Northmoc/clbranks
add CLB to rankings.txt
2023-04-14 17:05:04 +01:00
Simisays
f8c14edafa update 2023-04-14 17:13:25 +02:00
Northmoc
32ba7fb513 Merge branch 'master' into clbranks 2023-04-14 08:48:24 -04:00
Northmoc
064f99b034 add CLB to rankings.txt 2023-04-14 08:42:42 -04:00
Simisays
450cefcdf1 MOM 9 cards (#2902)
* update

* update

* update

* update

* Delete inga_and_esika.txt

* Update invasion_of_arcavios_invocation_of_the_founders.txt

* update

* Update final_flourish.txt
2023-04-14 08:33:55 -04:00
jjayers99
92ec69e095 Adventure updates
Clear quests on New Game+
Small cleanup tweaks to town layouts
Added (big) signs to capitals for arena and spellsmith.
Quests can now be tagged with sources, allowing generation in specific towns / biomes.
NPC arena matches are now weighted on relative HP rather than 50/50 odds.
Removed invisible collision wall in Maze_1.tmx, gave threat range to nearby enemy instead.
2023-04-14 07:55:38 -04:00
Simisays
cdf4d0ec28 Update invasion_of_tarkir_defiant_thundermaw.txt 2023-04-14 13:52:48 +02:00
Simisays
43acdf3218 update 2023-04-14 13:50:31 +02:00
Simisays
ca3916a4f8 cleanup 2023-04-14 12:05:33 +02:00
Simisays
1158d47e46 update 2023-04-14 12:02:59 +02:00
Anthony Calosa
c71c5874b3 Merge pull request #2910 from bbp9857/master
Added copy and delete deck
2023-04-14 08:31:39 +08:00
Benjamin Perry
0505b6c709 Merge conflicts 2023-04-13 20:10:21 -04:00
Benjamin Perry
2f17c2f8f9 Merge conflicts 2023-04-13 20:08:05 -04:00
Anthony Calosa
c9bf01475f Merge pull request #2925 from kevlahnota/newmaster2
fix buttons
2023-04-14 08:01:26 +08:00
Benjamin Perry
cf86796b0e Add portrait-mode layout for delete/copy buttons 2023-04-13 19:59:07 -04:00
Anthony Calosa
93b8fc79b7 fix buttons 2023-04-14 07:52:55 +08:00
Anthony Calosa
10ac2bf139 Merge pull request #2924 from tool4ever/autopay
Fix Autopay test selecting same mana multiple times
2023-04-14 07:13:27 +08:00
tool4EvEr
6a27f7ea70 Fix Autopay test selecting same mana multiple times 2023-04-13 23:55:43 +02:00
Anthony Calosa
ae4f4e3555 Merge pull request #2923 from kevlahnota/newmaster2
update menu button positions
2023-04-14 05:37:40 +08:00
Anthony Calosa
26cc7d0fe5 update menu button positions 2023-04-14 05:26:25 +08:00
Anthony Calosa
a6705dcecf Merge pull request #2922 from paulsnoops/mom_edition_tokens
Remove redundant tokens from MOM edition
2023-04-14 05:07:37 +08:00
paulsnoops
c2e7060584 Remove redundant tokens from MOM edition 2023-04-13 21:50:38 +01:00
Anthony Calosa
27117f3102 Merge pull request #2921 from tool4ever/cleanup13
Clean up descriptions
2023-04-14 04:42:12 +08:00
tool4EvEr
6103c7b657 Clean up descriptions 2023-04-13 22:30:12 +02:00
Anthony Calosa
0fee7bfe53 Merge pull request #2861 from EldritchBimbo/Gwyn-Dev
Dross Pit Content Update
2023-04-14 04:18:05 +08:00
Anthony Calosa
9da9d1f714 Update AdventureQuestController.java
update check
2023-04-14 04:10:08 +08:00
Anthony Calosa
9298feb297 Merge pull request #2920 from kevlahnota/newmaster2
fix loading error classcastexception
2023-04-14 04:05:41 +08:00
Anthony Calosa
4bbf516e89 fix loading error classcastexception
- fix classcastexception-cannot-assign-instance-of since the old value is of UUID and changed to String, old file will not load...
2023-04-14 04:04:09 +08:00
Simisays
3e736104a1 Adventure: Grolnok Rework + a bunch of tweaks to my older PR's (#2915) 2023-04-14 03:47:23 +08:00
Paul Hammerton
315478aac0 Merge pull request #2919 from paulsnoops/update_mat
Edition updates: MAT
2023-04-13 20:44:29 +01:00
paulsnoops
edbc2d2e10 Edition updates: MAT 2023-04-13 20:41:03 +01:00
Anthony Calosa
a14c65e31b Merge pull request #2918 from paulsnoops/edition_updates
Edition updates: MOC, MUL
2023-04-14 03:36:36 +08:00
Anthony Calosa
4e9e535826 Merge pull request #2916 from Northmoc/battle2
MOM: more Battle-related CardProperty fun!
2023-04-14 03:35:18 +08:00
paulsnoops
95852d0d2f Edition updates: MOC, MUL 2023-04-13 20:31:00 +01:00
Anthony Calosa
11989ebb2b Merge pull request #2917 from kevlahnota/newmaster2
update GameHUD, InventoryScene
2023-04-14 03:15:15 +08:00
Anthony Calosa
932269f0c3 Merge pull request #2909 from jjayers99/master
Adventure updates
2023-04-14 03:06:39 +08:00
Anthony Calosa
8ccdabcdf6 update GameHUD, InventoryScene
- can equip activatable items for quick access on GameHUD
2023-04-14 02:49:09 +08:00
Benjamin Perry
7e386c034a Merge remote-tracking branch 'upstream/master' 2023-04-13 14:29:58 -04:00
Northmoc
984049276e cut_short.txt and support (#2877)
* cut_short.txt and support
2023-04-13 20:01:43 +02:00
Northmoc
6cd56c0cfc Merge pull request #2889 from paulsnoops/mom_draft
Booster Draft: MOM with ONE & SIR updates
2023-04-13 12:32:08 -04:00
Northmoc
219b06a46a hidetsugu_devouring_chaos.txt better 2023-04-13 12:30:15 -04:00
Northmoc
0a82769405 add some battle cards 2023-04-13 10:32:57 -04:00
Northmoc
782224bf78 MOM: more Battle-related CardProperty fun! 2023-04-13 10:22:14 -04:00
Northmoc
102ace575c Merge pull request #2913 from tool4ever/castbattle
Battle: lazy build SpellPermanent on TDFC
2023-04-13 10:18:34 -04:00
Northmoc
e89d4f0d67 Merge pull request #2908 from Northmoc/i+e
MOM: inga_and_esika.txt + support
2023-04-13 10:10:50 -04:00
jjayers99
8514442220 Additional quest fixes, framework for new objective type 2023-04-13 09:00:53 -04:00
Benjamin Perry
a743e412ce updating local deck, and selecting / scrolling to new copy 2023-04-13 08:23:32 -04:00
jjayers99
32417c7958 Update DialogActor.java 2023-04-13 07:11:52 -04:00
Benjamin Perry
a1366deff7 not mucking with selected index 2023-04-13 06:55:03 -04:00
TRT
faa8e6d6c9 lazy build SpellPermanent on TDFC 2023-04-13 11:55:19 +02:00
tool4ever
d90bfb0504 Update invasion_of_kylem__valors_reach_tag_team.txt 2023-04-13 08:52:50 +02:00
Anthony Calosa
4e129c6c9f Merge pull request #2912 from tool4ever/fixes13
Some fixes
2023-04-13 14:46:52 +08:00
Anthony Calosa
e9376901e2 Merge pull request #2896 from Northmoc/battle1
MOM: Battle stuff
2023-04-13 14:16:46 +08:00
tool4EvEr
2b9a5a290e Some fixes 2023-04-13 08:10:18 +02:00
Anthony Calosa
0711a2accb Merge pull request #2911 from kevlahnota/newmaster2
remove redundant frames on navigation arrow
2023-04-13 11:59:52 +08:00
Anthony Calosa
1eca58c313 remove redundant frames on navigation arrow 2023-04-13 11:50:34 +08:00
Benjamin Perry
993bc03635 Regional language 2023-04-12 23:36:33 -04:00
Benjamin Perry
083a4cc815 Added copy and delete deck 2023-04-12 23:33:33 -04:00
Benjamin Perry
f5f3496e30 Added copy and delete deck 2023-04-12 23:28:44 -04:00
jjayers99
3a8aae7af0 Adventure updates 2023-04-12 23:25:39 -04:00
Anthony Calosa
a896a1563a Merge pull request #2906 from bbp9857/master
Garruk's Mighty Axe's script now only applies to Green cards
2023-04-13 09:50:58 +08:00
Northmoc
3e5da3b162 refactor cards to CountersPutOrRemoveEffect 2023-04-12 21:33:05 -04:00
Northmoc
4a90f42603 castDefeatedBattle 2023-04-12 21:33:05 -04:00
Northmoc
a1051b3f3e more battle stuff 2023-04-12 21:33:04 -04:00
Northmoc
03b807aeb9 battle stuff the rest 2023-04-12 21:33:04 -04:00
Northmoc
183ff20c14 battle stuff 2023-04-12 21:33:03 -04:00
Northmoc
5a9faae08e MOM: inga_and_esika.txt + support 2023-04-12 21:19:53 -04:00
tool4ever
76a2023745 Clean up (#2907) 2023-04-12 20:48:12 +00:00
Benjamin Perry
8d6ed4aec7 Garruk's Mighty Axe's script now only applies to Green cards 2023-04-12 16:03:10 -04:00
Paul Hammerton
e970033b59 Merge pull request #2903 from JohnWilliams77/patch-83
Update Resale Promos.txt
2023-04-12 20:03:20 +01:00
Northmoc
370197e4eb invasion_of_new_phyrexia_teferi_akosa_of_zhalfir + TapEffect support (#2897)
* invasion_of_new_phyrexia_teferi_akosa_of_zhalfir.txt + TapEffect support for Teferi
2023-04-12 18:38:21 +00:00
Northmoc
02b0ac315e improve some old PlayEffect card scripts (#2905) 2023-04-12 18:19:24 +00:00
JohnWilliams77
d0705205ae Update Resale Promos.txt 2023-04-12 17:01:47 +01:00
Anthony Calosa
b4c8e18a44 Merge pull request #2901 from kevlahnota/newmaster2
update navigation arrow
2023-04-12 18:43:30 +08:00
Anthony Calosa
8b359d8b5c update navigation arrow 2023-04-12 18:10:52 +08:00
tool4EvEr
8be93d3be5 Effect cleanup can prevent any LTB trigger 2023-04-12 10:39:33 +02:00
Anthony Calosa
c37fe7719e Merge pull request #2898 from tool4ever/cleanup_12
Cleanup & Fixes
2023-04-12 16:33:22 +08:00
Anthony Calosa
a7389b4477 Merge pull request #2844 from Aoki-Kujo/master
6 new cards
2023-04-12 16:22:27 +08:00
Anthony Calosa
63e482cd97 Update token-images.txt 2023-04-12 16:21:20 +08:00
tool4EvEr
bf3f0aed06 Cleanup & Fixes 2023-04-12 09:11:09 +02:00
Aoki-Kujo
b604cb90d7 Merge branch 'Card-Forge:master' into master 2023-04-12 00:07:48 -03:00
Aoki-Kujo
bac649ad28 Add files via upload 2023-04-12 00:07:26 -03:00
Anthony Calosa
3186306d52 Merge pull request #2895 from jjayers99/master
Adventure updates
2023-04-12 05:11:48 +08:00
Anthony Calosa
676a0c026f Merge pull request #2894 from Simisays/MOM6
MOM 10 cards
2023-04-12 05:10:21 +08:00
jjayers99
5e8771b404 Update templeofchandra.tmx 2023-04-11 16:57:08 -04:00
TabletopGeneral
0376b9cae4 Merge branch 'Card-Forge:master' into master 2023-04-11 16:21:45 -04:00
jjayers99
37252544c3 Adventure updates
New Game+ will be required if any quests were in progress

Prevent false quest failures on game loss.
Persist quest tracking status through save/load.
Correct tags for POI mapping
Exit Dungeon function will trigger "Leave" objectives
Correction to other dungeon mobs halting after battle
2023-04-11 16:19:29 -04:00
Simisays
ec3b1befde Update CardFactoryUtil.java 2023-04-11 21:46:00 +02:00
Simisays
f2d98c4ec0 update 2023-04-11 21:23:17 +02:00
Simisays
1b0fa97d99 Update epharas_dispersal.txt 2023-04-11 17:10:41 +02:00
Simisays
b3680c1022 update 2023-04-11 17:09:16 +02:00
Simisays
3e76090d4b update 2023-04-11 16:17:58 +02:00
tool4ever
69a723d451 Clean up (#2893) 2023-04-11 14:06:07 +00:00
Anthony Calosa
eabe36c6ab Merge pull request #2892 from jjayers99/master
Remove accidental Swing event listener usage, track quest objectives through save/load
2023-04-11 21:45:11 +08:00
TabletopGeneral
10980ad840 Merge branch 'Card-Forge:master' into master 2023-04-11 09:38:31 -04:00
jjayers99
4c53b419bc Adventure quest fixes 2023-04-11 09:37:52 -04:00
Anthony Calosa
27286139da Merge pull request #2851 from Simisays/MOC3
MOC 8 cards
2023-04-11 20:39:30 +08:00
Anthony Calosa
cbb57b3e1c Merge pull request #2891 from Card-Forge/tehdiplomat-patch-5
Update invasion_of_kylem__valors_reach_tag_team.txt
2023-04-11 20:38:55 +08:00
tool4ever
0540c4769e Update invasion_of_kylem__valors_reach_tag_team.txt 2023-04-11 12:17:14 +00:00
Chris H
c6d481f185 Update invasion_of_kylem__valors_reach_tag_team.txt 2023-04-11 08:09:25 -04:00
Anthony Calosa
8cfd5f1951 Merge pull request #2890 from kevlahnota/newmaster2
set window widget movable to false
2023-04-11 19:49:48 +08:00
Anthony Calosa
cfa8a82500 update blessing color 2023-04-11 19:49:25 +08:00
Anthony Calosa
91fd2d6d93 set window widget movable to false 2023-04-11 19:43:37 +08:00
paulsnoops
070a54fee2 Booster Draft: MOM with ONE & SIR updates 2023-04-11 11:29:50 +01:00
Anthony Calosa
8dce1d875a Merge pull request #2888 from kevlahnota/newmaster2
update custom card
2023-04-11 17:43:08 +08:00
Anthony Calosa
7d47e2f1b1 update custom card 2023-04-11 17:23:20 +08:00
Paul Hammerton
bc6aa1e91f Merge pull request #2887 from paulsnoops/mom_formats
Formats update: Add MOM, MOC & MUL
2023-04-11 09:45:57 +01:00
Simisays
bb540c22e8 Update wand_of_the_worldsoul.txt 2023-04-11 10:43:19 +02:00
Simisays
aac9b4f426 Add files via upload 2023-04-11 10:42:42 +02:00
paulsnoops
b5ba62efd4 Formats update: Add MOM, MOC & MUL 2023-04-11 09:42:25 +01:00
Paul Hammerton
083fdf2005 Merge pull request #2886 from paulsnoops/machine_tokens
Tokens for editions: MOM, MOC, MUL
2023-04-11 09:06:36 +01:00
paulsnoops
959d4711a5 Tokens for editions: MOM, MOC, MUL 2023-04-11 09:02:39 +01:00
Simisays
0c6a5ff715 Update flockchaser_phantom.txt 2023-04-11 08:50:05 +02:00
Anthony Calosa
b02fab4c35 Merge pull request #2885 from Card-Forge/battles-should-exile-and-cast
Battles need to exile then cast. Transformed backside require SpellPe…
2023-04-11 13:31:19 +08:00
friarsol
f35ec6bfab Battles need to exile then cast. Transformed backside require SpellPermanent for this to work 2023-04-10 22:00:14 -04:00
Anthony Calosa
d75c8dbc49 Merge pull request #2880 from jjayers99/master
Adventure quests - initial implementation
2023-04-11 08:47:06 +08:00
Anthony Calosa
5ef426883a Merge pull request #2878 from Northmoc/mom9
MOM: more battle-adjacent cards
2023-04-11 08:23:20 +08:00
Anthony Calosa
f3eb8917ca Merge pull request #2864 from Simisays/MOC4
MOC 9 cards
2023-04-11 08:22:23 +08:00
Anthony Calosa
174efdd140 Merge pull request #2884 from Card-Forge/tehdiplomat-patch-4
Update paradigm_shift.txt
2023-04-11 08:19:33 +08:00
Anthony Calosa
c644668042 Merge pull request #2883 from Simisays/nahiri
Update nahiris_armory.txt
2023-04-11 08:19:09 +08:00
Chris H
3b33789c44 Update paradigm_shift.txt 2023-04-10 19:10:24 -04:00
Simisays
bf0c74659b update 2023-04-10 23:21:05 +02:00
Northmoc
db803523dc fixes 2023-04-10 15:31:14 -04:00
Simisays
f84804fd43 update 2023-04-10 20:59:03 +02:00
Simisays
00fe08b8c1 Update nahiris_armory.txt 2023-04-10 20:29:34 +02:00
friarsol
ad49c00a75 Fixing optimizer push 2023-04-10 12:54:01 -04:00
friarsol
2373c6bc5c Some code review fixes 2023-04-10 12:54:01 -04:00
Hans Mackowiak
c8f9db124e GameAction: first state based action for Battle 2023-04-10 12:54:01 -04:00
Hans Mackowiak
3b1ce56665 fix DefenseReplacementEffect 2023-04-10 12:54:01 -04:00
Hans Mackowiak
ae455edf9f CardType: sanisfy Battle types 2023-04-10 12:54:01 -04:00
friarsol
2e24d43ab6 Change static trigger to a replacement 2023-04-10 12:54:01 -04:00
friarsol
3c1da39f9e Show Protecting Player properly 2023-04-10 12:54:01 -04:00
friarsol
e5fc935d54 Cleanup some specific Battle/siege differentiations. 2023-04-10 12:54:01 -04:00
friarsol
c6d56e61f5 Small cleanup 2023-04-10 12:54:01 -04:00
friarsol
daf0572cf6 Make battles attackable 2023-04-10 12:54:01 -04:00
friarsol
3188708de6 Fix trigger type 2023-04-10 12:54:01 -04:00
friarsol
58dcb0ea03 Battles first take 2023-04-10 12:54:01 -04:00
Paul Hammerton
41bdc256c7 Merge pull request #2881 from JohnWilliams77/patch-82
Update March of the Machine.txt
2023-04-10 14:44:52 +01:00
Simisays
8c563d30ab Update ten_wizards_mountain.txt 2023-04-10 15:28:20 +02:00
Simisays
e95326028c update 2023-04-10 15:25:46 +02:00
tool4ever
5731552010 StrictlyOther property (#2879)
* Clean up

* StrictlyOther property

* Beamsplitter fix

* Fix Fumble

* Fix Zevlor

* Fix Twinning Staff adding more than one copy for Zevlor

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-04-10 14:11:36 +03:00
jjayers99
b38e66c02c Merge branch 'master' of https://github.com/jjayers99/forge-updates 2023-04-10 06:57:09 -04:00
jjayers99
2e7b663bd5 More Adventure import fixes 2023-04-10 06:56:57 -04:00
TabletopGeneral
bf9d2343bd Merge branch 'Card-Forge:master' into master 2023-04-10 06:53:50 -04:00
JohnWilliams77
aa696c7e3d Update Secret Lair Drop Series.txt 2023-04-10 11:53:47 +01:00
jjayers99
915daaa70a Adventure updates - imports 2023-04-10 06:52:11 -04:00
JohnWilliams77
fc15028b8d Update March of the Machine.txt 2023-04-10 11:15:07 +01:00
Northmoc
7dd991ab93 Draft: flitting_guerrilla.txt (#2874)
* flitting_guerrilla.txt + support
2023-04-10 10:06:27 +00:00
Simisays
c8ceff92fa Update vodalian_wave_knight.txt 2023-04-10 09:27:07 +02:00
jjayers99
467795712c Adventure quests - initial implementation
Known issues - Hunt objectives lose track of target on save
2023-04-09 23:55:26 -04:00
Simisays
b5a6db9d02 update 2023-04-09 21:50:24 +02:00
Mike S
047e80a316 Update lilianas_talent.txt 2023-04-09 09:20:57 -05:00
Northmoc
13bf80e6c2 MOM: more battle-adjacent cards 2023-04-09 10:06:02 -04:00
Northmoc
5dc5bc3bfb last MOM incubate cards (#2872)
* last MOM incubate cards

* tiller_of_flesh.txt

* tweaks

* attentive_skywarden.txt

* typo fixes
2023-04-09 16:35:24 +03:00
Northmoc
59053316ba MOM: rankle_and_torbran.txt + minor CharmEffect tweak + 4 simple cards (#2873)
* MOM: rankle_and_torbran.txt + minor CharmEffect tweak + 4 simple cards

* typo fix
2023-04-09 07:31:04 -04:00
Northmoc
96ec9d2012 cosmic_hunger.txt (#2875)
furnace_reins.txt
halo_charged_skaab.txt
into_the_fire.txt
onakke_javelineer.txt and some cleanup
2023-04-09 10:16:49 +00:00
tool4ever
e5ffb1db6e Fix Transformed Property for LKI (#2858)
* Fix Transformed Property for LKI
2023-04-09 09:54:12 +00:00
Simisays
033b7a29ec update 2023-04-09 09:42:32 +02:00
Simisays
965a7b8ec3 update 2023-04-09 09:38:00 +02:00
Simisays
c8313e4eef update 2023-04-09 09:19:50 +02:00
Anthony Calosa
0c1fdc211c Merge pull request #2868 from kevlahnota/newmaster2
update old planechase editions
2023-04-09 08:08:26 +08:00
Anthony Calosa
37e35b3224 Merge pull request #2870 from Northmoc/backup3
last MOM backup cards
2023-04-09 08:00:18 +08:00
Anthony Calosa
1b5bebf093 update.. 2023-04-09 07:59:35 +08:00
Anthony Calosa
04e638b789 update imagefetcher 2023-04-09 07:55:57 +08:00
Paul Hammerton
6b683e5583 Alchemy Rebalancing for April 4, 2023 (#2820)
* WIP: Alchemy Rebalancing for April 4, 2023

* cards

* changes
2023-04-08 19:06:46 -04:00
Simisays
fbc1551ee0 update 2023-04-08 21:30:56 +02:00
Northmoc
ab6afc8cd1 last MOM backup cards 2023-04-08 15:18:48 -04:00
Simisays
659c5c4e27 update 2023-04-08 18:06:51 +02:00
Mike S
109f7239ab Update teferis_talent.txt 2023-04-08 10:46:58 -05:00
Alwayssnarky
f20a56db65 Level tweaks
.Fixes to collision in downward tiles on dross pit level.
.Tweaks to patrol of first enemy on lower part of Dross Pit Level
.Correction to bug preventing the spawning of Copper Host level.
.Correction to minor collision issue in Copper Host level
2023-04-08 10:27:10 -04:00
Suthro
5636eb6c74 MOC: The Talent Cycle
MOC: Added five card scripts for spoiled MOM commander cards:

- Elspeth's Talent
- Liliana's Talent
- Rowan's Talent
- Teferi's Talent
- Vivien's Talent
2023-04-08 09:26:50 -05:00
Anthony Calosa
2edb504444 update old planechase editions
- todo parse id for scryfall planes sets
2023-04-08 21:31:47 +08:00
Anthony Calosa
f2cc2054c6 Merge pull request #2867 from kevlahnota/newmaster2
add imagefetcher for Planechase BG
2023-04-08 20:37:08 +08:00
Anthony Calosa
bb30397a9e add imagefetcher for Planchase BG 2023-04-08 20:27:15 +08:00
Anthony Calosa
b8253394ac Merge pull request #2843 from Simisays/MOCBIS
MOC 9 cards
2023-04-08 20:04:07 +08:00
Anthony Calosa
b2fce6c574 Merge pull request #2865 from Card-Forge/counterAddedFirstTime
CounterAddedOnce add FirstTime
2023-04-08 20:03:56 +08:00
Hans Mackowiak
a5ac77a5c4 remove more lines 2023-04-08 13:09:03 +02:00
Hans Mackowiak
7e976f8908 remove ChangeZoneEffect setting timestamp 2023-04-08 12:19:27 +02:00
Simisays
efa9923d06 Update conjurers_mantle.txt 2023-04-08 11:48:45 +02:00
Simisays
6ac7aa3c7b update 2023-04-08 11:47:49 +02:00
Hans Mackowiak
e1fc48504f DeckHints 2023-04-08 11:25:19 +02:00
Hans Mackowiak
2a64cfa703 Update botanical_brawler.txt 2023-04-08 10:51:46 +02:00
Hans Mackowiak
2165a45a1f CounterAddedOnce add FirstTime 2023-04-08 10:46:45 +02:00
tool4ever
f533b6a9f7 Update eyes_of_gitaxias.txt 2023-04-08 08:35:55 +00:00
Simisays
46bb54b7c2 update 2023-04-08 10:24:42 +02:00
Anthony Calosa
c256b435bf Merge pull request #2863 from kevlahnota/newmaster2
remove redundant code
2023-04-08 09:22:18 +08:00
Anthony Calosa
4224b22ac8 update 2023-04-08 08:57:10 +08:00
Anthony Calosa
76c4d6003d remove redundant code 2023-04-08 08:53:29 +08:00
Anthony Calosa
eb7f91b1c7 Merge pull request #2862 from kevlahnota/newmaster2
fix minimap generation, update textrafont property
2023-04-08 08:36:14 +08:00
Anthony Calosa
e6709c83cc update searchposts entry 2023-04-08 08:31:57 +08:00
Alwayssnarky
83e29a14c0 Dross Pit Content Update
Additions:
.2 new enemies, based on the Dross Pit Phyrexians, plus infrastructure. (Both use .json deck generation, for now)
.Additional level tiles based on Dross Pit aesthetic, plus infrastructure.
.Additional overworld tile for new dungeon, plus infrastructure.
.1 new dungeon, utilizing new enemies and tiles.
Changes:
.Additions to Phyrexian_Buildings .atlas and .png files to accommodate new overworld tile.
.Addition to black.json to allow new dungeon to spawn.
.Addition to p_o_i.json to create new dungeon.
.Addition to enemies.json to create enemy entries for new enemies.
2023-04-07 20:08:49 -04:00
Anthony Calosa
daa46e969d fix minimap generation, update textrafont property 2023-04-08 08:08:32 +08:00
Anthony Calosa
c6cc9c60fc Merge pull request #2827 from Card-Forge/pumpDefinedKWRework
PumpEffect: make DefinedKW better Keywords
2023-04-08 06:43:50 +08:00
Anthony Calosa
41c73466cc Merge pull request #2828 from Simisays/MOM6
MOM 8 cards
2023-04-08 06:43:06 +08:00
Anthony Calosa
8241190cc9 Merge pull request #2836 from EldritchBimbo/Gwyn-Dev
Playable Werewolf Update
2023-04-08 06:41:43 +08:00
Anthony Calosa
bb9a441c28 Merge pull request #2855 from Simisays/quickix
Adventure item tweaks
2023-04-08 06:41:00 +08:00
Anthony Calosa
a6c2db1840 Merge pull request #2857 from Northmoc/backup2
More Backup (esp Conclave Sledge-Captain)
2023-04-08 06:40:19 +08:00
Anthony Calosa
c215cc4f93 Merge pull request #2859 from Northmoc/seedouble
see_double.txt and support
2023-04-08 06:37:35 +08:00
Northmoc
25e36802a0 emergent woodwurm.txt fix 2023-04-07 17:13:27 -04:00
tool4ever
d99b6b0150 Merge branch 'master' into master 2023-04-07 21:47:28 +02:00
Northmoc
f349608d2a bright_palm_soul_awakener.txt fix 2023-04-07 15:16:50 -04:00
Northmoc
b70f68d448 Card.keywordsToText improve etb/cast keywords WotC likes give many times 2023-04-07 14:49:50 -04:00
Northmoc
6ac832b310 improve conclave_sledge_captain.txt keyword implementation 2023-04-07 14:47:54 -04:00
Northmoc
850a0f859e see_double.txt and support 2023-04-07 13:14:12 -04:00
Northmoc
bef33cd395 More Incubate (#2849)
* another round of Incubate

* random fixes

* corruption_of_towashi.txt patch
2023-04-07 19:51:03 +03:00
Northmoc
ff22e476d4 bad name 2023-04-07 11:39:16 -04:00
Northmoc
6f5827836c other backup cards 2023-04-07 11:36:27 -04:00
Northmoc
432c4b7231 conclave_siege_captain.txt and support 2023-04-07 11:36:13 -04:00
Simisays
c9726f724c update 2023-04-07 16:33:58 +02:00
EldritchBimbo
bbe623d92c Merge branch 'Card-Forge:master' into Gwyn-Dev 2023-04-07 10:13:46 -04:00
Northmoc
1f82420261 DamageEachEffect refactor + MOM Tandem Takedown / MOC Great Aerie (#2814)
* DamageEachEffect refactor

* AiAttackController refactor param

* SpellAbilityEffect.tokenizeString use joinHomogenous

* refactor old cards, add tandem_takedown.txt

* the_great_aerie.txt + Support + refactor grim_contest.txt
2023-04-07 12:13:55 +00:00
Simisays
4ca91c1e17 Update locthwain_lancer.txt 2023-04-07 13:47:28 +02:00
Simisays
6ad3396f14 update 2023-04-07 12:59:21 +02:00
tool4ever
9e14f4d415 Merge branch 'master' into MOM6 2023-04-07 12:33:54 +02:00
tool4ever
4da4a333d9 Fix AI cheating with Avacyn's Judgement (#2853) 2023-04-07 10:23:17 +00:00
Simisays
9531fd0341 MOM 6 cards (#2816) 2023-04-07 10:22:41 +00:00
Paul Hammerton
b50bdee74e Merge pull request #2852 from paulsnoops/edition_updates
Edition updates: MOM, MOC, MUL, PLIST
2023-04-07 10:28:00 +01:00
paulsnoops
0b0a6ad468 Edition updates: MOM, MOC, MUL, PLIST 2023-04-07 09:54:03 +01:00
Hans Mackowiak
baa56a83dd PumpEffect: use allDefinedPlayers for DefinedKW 2023-04-07 10:27:13 +02:00
Simisays
61c543a8c7 update 2023-04-07 09:28:05 +02:00
Anthony Calosa
76e875924c Merge pull request #2850 from kevlahnota/newmaster2
update planes-images
2023-04-07 13:26:59 +08:00
Anthony Calosa
b81af7c105 update planes-images 2023-04-07 13:16:57 +08:00
Aoki-Kujo
5e85e3d300 Merge branch 'Card-Forge:master' into master 2023-04-07 00:26:54 -03:00
Aoki-Kujo
f7e2326526 New commit to replace the old ones 2023-04-07 00:26:43 -03:00
Northmoc
ee418ded60 MOM: Backup keyword and cards (#2799)
* Backup keyword setup

* Backup cards

* KeywordWithAmount spacing

* mirror_shield_hoplite.txt and support

* fix for KeywordWithAmount

* doomskar_warrior.txt fearless_skald.txt

* add PlayMain1

* typo fix

* add logic to ComputerUtil.castPermanentInMain1 instead of using PlayMain1 on cardscripts
2023-04-07 05:32:41 +03:00
Anthony Calosa
2d52a878c1 Merge pull request #2847 from bbp9857/master
Renamed an invalid card for Chandra Adventure battle
2023-04-07 10:16:32 +08:00
Anthony Calosa
24bfb833da Merge pull request #2845 from tool4ever/gorex
Fix Gorex
2023-04-07 10:13:53 +08:00
Anthony Calosa
5e598bcaab Merge pull request #2848 from Card-Forge/tehdiplomat-patch-3
Update rundvelt_hordemaster.txt
2023-04-07 10:12:53 +08:00
Chris H
8ea100fdba Update rundvelt_hordemaster.txt 2023-04-06 21:27:47 -04:00
Benjamin Perry
55253f9f77 Missing card; not sure if this replacement was the intended card. Playtest ok. 2023-04-06 19:32:15 -04:00
Simisays
826e02d70f MOM 8 cards (#2811) 2023-04-06 17:56:41 +00:00
Simisays
c0ebb31efe update 2023-04-06 19:52:12 +02:00
Simisays
6b2fa49ef0 update 2023-04-06 19:47:17 +02:00
Paul Hammerton
0f01a26a91 Merge pull request #2846 from paulsnoops/edition_updates
WIP: Edition updates: MOM, MOC, MAT, MUL, SLD
2023-04-06 18:32:21 +01:00
paulsnoops
f627603137 WIP: Edition updates: MOM, MOC, MAT, MUL, SLD 2023-04-06 18:23:10 +01:00
tool4EvEr
8a280be77f Fix Gorex 2023-04-06 19:08:35 +02:00
Simisays
066baf83c5 Update darksteel_splicer.txt 2023-04-06 19:07:37 +02:00
Simisays
c697f79f40 Update deluxe_dragster.txt 2023-04-06 19:07:17 +02:00
Aoki-Kujo
d5c6023916 6 new cards 2023-04-06 14:06:50 -03:00
Simisays
d4a0ee65b6 update 2023-04-06 19:04:29 +02:00
tool4ever
331a1df66e Update ezuris_predation.txt 2023-04-06 15:11:09 +02:00
Anthony Calosa
0041aa273c Update your_temple_is_under_attack.txt 2023-04-06 20:35:18 +08:00
Anthony Calosa
19b20826b1 Merge pull request #2841 from Simisays/ADVENTURE-FIX
Adventure Item Fix
2023-04-06 20:33:45 +08:00
Simisays
ce84ec9e4e update 2023-04-06 13:57:25 +02:00
Northmoc
f18e48f21f MOM: phyrexian_pegasus.txt referee_squad.txt seedpod_caretaker.txt (#2838)
* phyrexian_pegasus.txt
referee_squad.txt
seedpod_caretaker.txt

* aerial_guide.txt fix desc
2023-04-06 08:46:59 +03:00
tool4ever
50b9c18c11 Update phyrexian_censor.txt 2023-04-06 07:41:15 +02:00
Anthony Calosa
8ccc0d77e2 Update RewardActor.java
fix shop item icon position
2023-04-06 08:24:13 +08:00
Anthony Calosa
41c4a4fe25 Merge pull request #2840 from kevlahnota/newmaster2
try to fix NPE
2023-04-06 07:43:00 +08:00
Anthony Calosa
05814dca15 try to fix NPE 2023-04-06 07:35:53 +08:00
Anthony Calosa
2ec0d769e5 Update glissa_sunslayer.txt
- closes #2837
2023-04-06 07:28:39 +08:00
Anthony Calosa
f9099c284c Merge pull request #2834 from kevlahnota/newmaster2
update viewport
2023-04-06 07:11:10 +08:00
Anthony Calosa
03e335f42f fix viewport update on resize 2023-04-06 06:58:43 +08:00
tool4ever
2adff27044 Fix NPE (#2839)
* Fix NPE

* TapsForMana Fix
2023-04-05 21:51:40 +00:00
Alwayssnarky
63d35b00d9 Playable Werewolf Update
Additions:

.Adds 20 portraits, 2 animation sets for playable werewolf race, as well as infrastructure.

Changes:

.Modifies avatar.png to add portraits.
.Modifies avatar.atlas and heroes.json to accommodate new options.
2023-04-05 14:36:39 -04:00
Anthony Calosa
6b393fe0de revert.. 2023-04-05 22:44:26 +08:00
Anthony Calosa
77e218e32e use configdata for font height, width 2023-04-05 22:29:01 +08:00
Anthony Calosa
92010babf5 update TransitionScreen 2023-04-05 22:20:47 +08:00
Anthony Calosa
8bd479dbf1 Merge pull request #2832 from kevlahnota/newmaster2
fix loading Arena, update remaining dialog
2023-04-05 22:08:44 +08:00
Anthony Calosa
7ca67f50bc Merge pull request #2831 from bbp9857/master
Prevent player from needing to re-press movement key
2023-04-05 22:08:30 +08:00
Anthony Calosa
68d2d759ea .. 2023-04-05 21:52:05 +08:00
Anthony Calosa
7d4b193ffa Update PlayerSprite.java 2023-04-05 21:49:47 +08:00
Anthony Calosa
fbbb32f13c update 2023-04-05 21:30:47 +08:00
Anthony Calosa
aa838085f5 fix loading Arena, update remaining dialog 2023-04-05 21:20:15 +08:00
Benjamin Perry
86420c1077 Added check to prevent player from getting stuck on obstacles in current scene. Player now keeps moving in previous direction if blocked and scene hasn't changed. Once clear of the obstacle, the user no longer needs to repress the direction key to move in the intended direction. 2023-04-05 08:18:05 -04:00
Paul Hammerton
e7cd25c0d2 Merge pull request #2830 from Simisays/TEMBERCHAUD
SLD Temberchaud
2023-04-05 12:11:07 +01:00
Simisays
46d689a43c Update blightreaper_thallid_blightsower_thallid.txt 2023-04-05 11:36:12 +02:00
Simisays
032d9d1ad8 Update themberchaud.txt 2023-04-05 11:16:37 +02:00
Simisays
ab59f3c0cc Create themberchaud.txt 2023-04-05 11:11:19 +02:00
Simisays
dd586abbb8 update 2023-04-05 10:58:16 +02:00
Simisays
ccc6b2e258 Update hidetsugu_and_kairi.txt 2023-04-05 09:16:48 +02:00
Simisays
21f89b9c8c update 2023-04-05 09:11:39 +02:00
Hans Mackowiak
c763b597cb PumpEffect: make DefinedKW better Keywords 2023-04-05 07:16:50 +02:00
Anthony Calosa
fede3c1749 Merge pull request #2824 from kevlahnota/newmaster2
use default filter for all ui Image elements
2023-04-05 07:45:56 +08:00
Anthony Calosa
9c3b224cf7 Merge pull request #2818 from tool4ever/stackoverflow
Fix incomplete replacement caching leading to StackOverflow
2023-04-05 07:34:19 +08:00
Anthony Calosa
65e97328be Merge pull request #2815 from MikeS-NZ/forge_mom3
MOM: Kogla and Yidaro + 5 cards
2023-04-05 07:32:52 +08:00
Simisays
899d5d8035 update 2023-04-04 20:17:51 +02:00
Mike S
3e24fd2b00 Update zimone_and_dina.txt 2023-04-04 12:02:50 -05:00
Mike S
feea960989 Update urabrask_the_great_work.txt 2023-04-04 11:53:46 -05:00
Mike S
ff3bb53f25 Update zimone_and_dina.txt 2023-04-04 11:20:00 -05:00
Mike S
757cdae928 Update phyrexian_censor.txt 2023-04-04 11:14:10 -05:00
Mike S
b46b729e77 Update oracle_of_tragedy.txt 2023-04-04 11:14:00 -05:00
Mike S
b0b5a04516 Update kogla_and_yidaro.txt 2023-04-04 11:11:09 -05:00
TRT
be352a6334 Fix incomplete replacement caching leading to StackOverflow 2023-04-04 17:46:34 +02:00
Mike S
eba92bb783 Update djeru_and_hazoret.txt 2023-04-04 10:36:40 -05:00
Mike S
0f8a613e1e Update sheoldred_the_true_scriptures.txt 2023-04-04 10:21:41 -05:00
Suthro
f3f9da663d MOM: 5 more Legends
MOM: Add card scripts for five spoiled MOM cards:

- Djeru and Hazoret
- Kroxa and Kunoros
- Rona, Herald of Invasion // Rona, Tolarian Obliterator
- Sheoldred // The True Scriptures
- Urabrask // The Great Work
2023-04-04 10:00:58 -05:00
Anthony Calosa
2909b9a971 use default filter for all ui Image elements 2023-04-04 19:35:14 +08:00
Paul Hammerton
b47f950e9d Merge pull request #2823 from paulsnoops/update_mom
Edition updates: MOM
2023-04-04 10:58:56 +01:00
paulsnoops
218f107e6e Edition updates: MOM 2023-04-04 10:32:16 +01:00
Chris H
7f94295131 Update artificers_dragon.txt (#2822) 2023-04-04 10:01:12 +02:00
Mike S
0433864026 Update zimone_and_dina.txt 2023-04-03 19:17:49 -05:00
Mike S
3ca65fd62b Update kogla_and_yidaro.txt 2023-04-03 19:01:02 -05:00
Anthony Calosa
29cb38521c Merge pull request #2819 from t-w-o-s-a-t/master
Update de-DE.properties
2023-04-04 06:19:59 +08:00
Anthony Calosa
7681266db5 Merge pull request #2821 from Simisays/ratchetfix
Update ratchet_field_medic_ratchet_rescue_racer.txt
2023-04-04 06:19:05 +08:00
Simisays
d5e65fcef8 Update ratchet_field_medic_ratchet_rescue_racer.txt 2023-04-03 22:26:30 +02:00
t-w-o-s-a-t
9359dee2d1 Update de-DE.properties
corrected some translations
2023-04-03 18:30:59 +02:00
Anthony Calosa
2b670750ad Merge pull request #2817 from kevlahnota/newmaster2
fix rerun when POI placement failed
2023-04-03 19:55:19 +08:00
Anthony Calosa
356b52be75 Merge pull request #2779 from tool4ever/costIntrinsic
PaidLists now store if the CostPart source is linked to host
2023-04-03 19:54:15 +08:00
Anthony Calosa
9428d55252 Merge pull request #2777 from Northmoc/tbom
tom_bombadil.txt + TriggerAbilityResolves
2023-04-03 19:43:26 +08:00
Anthony Calosa
14acd1d3dd Merge pull request #2803 from MikeS-NZ/forge_mom2
MOM: Errant and Giada + 4 cards
2023-04-03 19:38:04 +08:00
Anthony Calosa
93a4581e1a fix rerun when POI placement failed
- update RewardActor image
2023-04-03 18:59:43 +08:00
Suthro
af9cafca47 MOM: Zimone and Dina + 5 cards
MOM: Add card scripts for six spoiled MOM cards:

- Kogla and Yidaro
- Omen Hawker
- Oracle of Tragedy
- Phyrexian Censor
- Pile On
- Zimone and Dina
2023-04-02 22:44:35 -05:00
Mike S
3940ef01fe Update sword_of_once_and_future.txt 2023-04-02 21:25:25 -05:00
Mike S
3f921c8310 Update realmbreaker_the_invasion_tree.txt 2023-04-02 21:12:32 -05:00
Mike S
05df0ddc4c Update realmbreaker_the_invasion_tree.txt 2023-04-02 21:12:18 -05:00
Mike S
8e5a06c162 Update halo_forager.txt 2023-04-02 21:08:28 -05:00
Mike S
b86b3a6373 Update errant_and_giada.txt 2023-04-02 21:07:39 -05:00
Paul Hammerton
3f6a3acaa8 Merge pull request #2813 from paulsnoops/update_mom
Edition updates: MOM
2023-04-02 18:59:32 +01:00
paulsnoops
2a5147f8b0 Edition updates: MOM 2023-04-02 18:52:57 +01:00
Anthony Calosa
05e774065d Merge pull request #2812 from kevlahnota/newmaster2
update AreneScene dialog
2023-04-03 00:11:08 +08:00
Anthony Calosa
e46de1fe0b update 2023-04-02 21:49:45 +08:00
Anthony Calosa
b51d68a4c4 update AreneScene dialog 2023-04-02 19:42:44 +08:00
tool4EvEr
7def3a9e6b Tweak logic so it checks the right face for cost 2023-04-02 10:31:53 +02:00
Anthony Calosa
6c54d337b4 Merge pull request #2810 from kevlahnota/newmaster2
update PaperToken, CardFactory
2023-04-02 12:00:32 +08:00
Anthony Calosa
b6d6ede6f0 update PaperToken, CardFactory
- set imagekey for transformable tokens using their name + set_code
2023-04-02 11:44:48 +08:00
Anthony Calosa
cb210d7da8 Merge pull request #2808 from kevlahnota/newmaster2
SpellSmithScene filter upcoming
2023-04-02 07:41:47 +08:00
Anthony Calosa
0dcc74e390 Merge pull request #2806 from Northmoc/mom_1
MOM: 1 Apr (5 cards)
2023-04-02 07:41:15 +08:00
Anthony Calosa
29b28dcd89 Merge pull request #2805 from tool4ever/intrinsic
Morph: fix multiple KW
2023-04-02 07:40:33 +08:00
Anthony Calosa
59bf6605c0 Merge pull request #2804 from tool4ever/eminence
Eminence fix
2023-04-02 07:40:09 +08:00
Anthony Calosa
b1a417b719 Merge pull request #2802 from Simisays/MOMCOMMANDER
MOC 5 cards
2023-04-02 07:39:50 +08:00
Anthony Calosa
e6e824a06a Merge pull request #2795 from Northmoc/transformedProp
MOM: mutagen_connoisseur.txt and CardProperty "Transformed"
2023-04-02 07:38:08 +08:00
Anthony Calosa
32c1a14350 Merge pull request #2792 from Simisays/MOMBIS
MOM 8 cards
2023-04-02 07:37:12 +08:00
Anthony Calosa
60929f32ce Merge pull request #2780 from Northmoc/incubate1
Incubate mechanic initial support
2023-04-02 07:34:54 +08:00
Anthony Calosa
10876bcbaf SpellSmithScene filter upcoming 2023-04-02 07:31:20 +08:00
Simisays
fed41e2d5a Update sidar_jabari_of_zhalfir.txt 2023-04-01 21:38:53 +02:00
Northmoc
d3bca4aa41 interdisciplinary_mascot.txt
seer_of_stolen_sight.txt
terror_of_towashi.txt
zephyr_winder.txt
zurgo_and_ojutai.txt
2023-04-01 15:20:33 -04:00
tool4EvEr
584910b5a5 Morph intrinsic fix 2023-04-01 19:23:30 +02:00
tool4EvEr
eecf2890a2 Eminence fix 2023-04-01 17:57:45 +02:00
Northmoc
5e5855cefe sunfall.txt 2023-04-01 11:24:38 -04:00
Northmoc
510c915c09 gift_of_compleation.txt traumatic_revelation.txt 2023-04-01 11:08:22 -04:00
Northmoc
bb778a9f4c more incubate cards 2023-04-01 11:08:22 -04:00
Northmoc
4bf15e2faf chrome_host_seedshark.txt 2023-04-01 11:08:22 -04:00
Northmoc
6ca84fe9fd elesh_norn_the_argent_etchings.txt 2023-04-01 11:08:22 -04:00
Northmoc
5da4fe5fbc voldaren_pariah_abolisher_of_bloodlines.txt tweak 2023-04-01 11:08:22 -04:00
Northmoc
3cd3dc7e9d brimaz_blight_of_oreskos.txt 2023-04-01 11:08:22 -04:00
Northmoc
3519dba3e1 IncubateEffect 2023-04-01 11:08:21 -04:00
Northmoc
298df71ea7 TypeLists add Incubator 2023-04-01 11:08:21 -04:00
Northmoc
242cf56013 glissa_herald_of_predation.txt + merciless_repurposing.txt + norns_inquisitor.txt 2023-04-01 11:08:21 -04:00
Northmoc
8bcc3a5ab8 incubator token 2023-04-01 11:08:21 -04:00
Suthro
d7831ec748 MOM: Errant and Giada + 4 cards
MOM: Add card scripts for five spoiled MOM cards:

- Errant and Giada
- Halo Forager
- Realmbreaker, the Invasion Tree
- Seal from Existence
- Sword of Once and Future
2023-04-01 09:43:01 -05:00
Simisays
fc39484d0f Update sidar_jabari_of_zhalfir.txt 2023-04-01 16:32:14 +02:00
Simisays
1ddba5d945 update 2023-04-01 15:23:09 +02:00
Simisays
57c7e44df0 Update r_0_0_a_gremlin.txt 2023-04-01 15:16:37 +02:00
Simisays
44d465737f Update sidar_jabari_of_zhalfir.txt 2023-04-01 12:20:52 +02:00
Northmoc
62371f35f2 MOM: orthion_hero_of_lavabrink.txt ravenous_sailback.txt ruins_recluse.txt surrak_and_goreclaw.txt (#2797) 2023-04-01 12:46:01 +03:00
Simisays
e2a2176345 update 2023-04-01 10:01:30 +02:00
Anthony Calosa
9cf2aecec2 Merge pull request #2801 from kevlahnota/newmaster2
update input, retry failed POI
2023-04-01 15:35:40 +08:00
Anthony Calosa
b665c42b33 update 2023-04-01 15:31:51 +08:00
Mike S
0954ec8149 MOM: Three MOM Legends + token scripts (#2783)
- Baral and Kari Zev
- Polukranos Reborn // Polukranos, Engine of Ruin
- Quintorius, Loremaster
2023-04-01 07:26:27 +00:00
Anthony Calosa
b9b751f3ef Merge branch 'master' into newmaster2 2023-04-01 15:05:15 +08:00
Anthony Calosa
ad426d8035 Merge pull request #2800 from kevlahnota/newmaster2
fix POI order
2023-04-01 15:01:15 +08:00
Anthony Calosa
f8d96a1800 update input, retry failed POI 2023-04-01 15:00:16 +08:00
Anthony Calosa
ba666d45fe Merge branch 'master' into newmaster2 2023-04-01 11:40:57 +08:00
Anthony Calosa
d5ff3c67e0 fix POI order
- should fix issues on older saves not loading POI
2023-04-01 11:26:46 +08:00
Anthony Calosa
65bf04f85b Merge pull request #2796 from EldritchBimbo/Gwyn-Dev
Copper Host Update
2023-04-01 09:22:29 +08:00
Anthony Calosa
f66fca9ee0 Merge pull request #2786 from schnautzr/master
Add wall sprite
2023-04-01 09:20:35 +08:00
Anthony Calosa
bd8962bbd6 Update enemies.json
fix JSON format
2023-04-01 09:16:39 +08:00
Anthony Calosa
4b46f729d1 Merge pull request #2798 from Simisays/doppelgangerfix
Magetower_13 fix doppelganger
2023-04-01 09:10:14 +08:00
Simisays
3af1b36423 Update magetower_13.tmx 2023-04-01 00:09:58 +02:00
Simisays
57a50c2011 update 2023-04-01 00:04:33 +02:00
Northmoc
07dc89ea8a mutagen_connoisseur.txt and CardProperty "Transformed" 2023-03-31 17:44:32 -04:00
Northmoc
5133efae83 Merge pull request #2794 from tool4ever/investigate
Investigate fixes
2023-03-31 17:20:34 -04:00
Simisays
69633134ce MOM 7 new cards + some cleanup of the Magetower revamp (#2789) 2023-03-31 21:16:49 +00:00
tool4EvEr
beae50cefd Investigate fixes 2023-03-31 23:06:54 +02:00
Alwayssnarky
cbb3589d14 Copper Host Update
Additions:
.1 New level, based on the Copper Host
.2 New enemies, based on the Copper Host.
.Added deck .json, sprites, and atlas for enemies.
.Added tileset elements and new overworld tile.

Changes:
.Added entries for new enemies to Enemies.json
.Added new dungeon to Green.json and Points of Interest.json
.Changed Phyrexian Buildings.atlas to accommodate new tile.

Fixes:
.Fixed clipping when moving upward in Phyrexian tilesets.
.Fixed missing component tiles of the basilica oil spring. There is now properly room for you to both drown and breathe again.
2023-03-31 16:13:09 -04:00
Simisays
027a9529dd Update deadly_derision.txt 2023-03-31 21:02:30 +02:00
Simisays
58f95c8571 UPDATE 2023-03-31 15:50:01 +02:00
Simisays
57cb6407f4 Update city_on_fire.txt 2023-03-31 14:10:25 +02:00
Simisays
d6bf1d1bb3 update 2023-03-31 14:09:13 +02:00
Hans Mackowiak
abdae29466 Delete main.tiled-session 2023-03-31 11:41:30 +02:00
Paul Hammerton
8fc54c80df Merge pull request #2790 from paulsnoops/update_editions
Edition updates: MOM, SCH
2023-03-31 09:54:06 +01:00
Simisays
97d3744094 Add files via upload 2023-03-31 10:52:40 +02:00
paulsnoops
b1db5a140c Edition updates: MOM, SCH 2023-03-31 09:40:43 +01:00
tool4ever
14a36454c7 Fix wasCastByYou (#2788)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-03-31 08:19:06 +03:00
schnautzr
d677d4a81a change Hit to Attack 2023-03-30 17:40:39 -05:00
schnautzr
b646bbac50 Wall sprite, needs deck yet. 2023-03-30 09:31:45 -05:00
schnautzr
dc7ff102ad Merge pull request #1 from Card-Forge/master
update
2023-03-30 09:28:54 -05:00
Paul Hammerton
2e87cc8fb4 Merge pull request #2785 from paulsnoops/update_editions
Edition updates: MOM, MOC, MUL
2023-03-30 11:33:57 +01:00
paulsnoops
a2ce8ece24 Edition updates: MOM, MOC, MUL 2023-03-30 11:26:53 +01:00
Anthony Calosa
9429e2fc13 Merge pull request #2781 from schnautzr/master
New wurm sprite
2023-03-30 06:28:57 +08:00
tool4EvEr
788c655802 Tweak logic for Nine-Fingers Keene vs. Duelist's Heritage 2023-03-29 21:47:41 +02:00
tool4EvEr
06059fb986 Clean up 2023-03-29 21:19:35 +02:00
schnautzr
06fcc7ac2d use new wurm sprite (instead of leech) for wurms 2023-03-29 13:05:33 -05:00
schnautzr
e8d85d22c7 new wurm sprite 2023-03-29 13:04:23 -05:00
tool4EvEr
101306e61c PaidLists now store if the CostPart source is linked to host 2023-03-29 17:40:59 +02:00
Northmoc
32ba1f7fa4 tom_bombadil.txt + TriggerAbilityResolves 2023-03-29 11:05:58 -04:00
Anthony Calosa
eb76530c1f Merge pull request #2768 from Simisays/MAGETOWER-UPDATE
Magetower maps Revamp
2023-03-29 22:27:46 +08:00
tool4EvEr
99f8cca233 Clean up 2023-03-29 16:02:58 +02:00
Simisays
d5bd782dfe update 2023-03-29 15:16:51 +02:00
Simisays
aae8cb5ed1 Merge remote-tracking branch 'upstream/master' into MAGETOWER-UPDATE 2023-03-29 14:47:48 +02:00
Simisays
8838b13de4 update 2023-03-29 12:07:13 +02:00
Paul Hammerton
0be09ff6ac Merge pull request #2776 from paulsnoops/mom_moc_mul_updates
Edition updates: MOM, MOC, MUL
2023-03-29 11:02:17 +01:00
paulsnoops
26e7fe4597 artists 2023-03-29 10:51:59 +01:00
paulsnoops
caeeb3116c Edition updates: MOM, MOC, MUL 2023-03-29 10:46:32 +01:00
Anthony Calosa
65964ad586 Merge pull request #2772 from kevlahnota/newmaster2
update inputconfirm cardview
2023-03-29 11:55:41 +08:00
Hans Mackowiak
03924a4044 CardFactory getCloneStates set PT for Vehicle (#2713)
* Update CardFactory.java

Set PT should also be done for vehicle

* Update CardFactory.java

* Clean up

* Clean up

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-03-29 05:53:26 +03:00
Anthony Calosa
bce6f93013 update inputconfirm cardview
- show cardview if possible for plyeffect card (regardless of zone)
2023-03-29 10:25:53 +08:00
tool4ever
4329e2b0c8 Improve a few parts from previous PR (#2770) 2023-03-28 21:11:13 +00:00
Simisays
ceda408e2b update 2023-03-28 21:30:19 +02:00
Simisays
8c414bba92 Merge branch 'MAGETOWER-UPDATE' of https://github.com/Simisays/forge into MAGETOWER-UPDATE 2023-03-28 19:00:24 +02:00
Simisays
99f0d605b0 update 2023-03-28 19:00:14 +02:00
Simisays
3e161ec4ec Update .gitignore 2023-03-28 18:00:49 +02:00
Simisays
a16fb9fa5b update 2023-03-28 18:00:19 +02:00
tool4ever
26ddc5d18e Update wyll_blade_of_frontiers.txt 2023-03-28 14:49:11 +02:00
Anthony Calosa
abd3dd38f2 Merge pull request #2766 from EldritchBimbo/Gwyn-Dev
Gitaxian Lab Patch
2023-03-28 05:55:52 +08:00
Simisays
024405daf6 Merge remote-tracking branch 'upstream/master' into MAGETOWER-UPDATE 2023-03-27 22:05:37 +02:00
Simisays
dfd39e192e update 2023-03-27 22:03:59 +02:00
Simisays
50583f52d1 update 2023-03-27 20:32:18 +02:00
tool4ever
3f58fb9531 Fix script (#2767) 2023-03-27 16:37:36 +02:00
Alwayssnarky
3e5b687a2a Tweak to sprites to correct anim played on enemy victory 2023-03-27 08:01:53 -04:00
Alwayssnarky
20ce19006f Gitaxian Lab Patch
Fix to Gitaxian enemies to correct death anim not playing.
Fix to waypoints in Gitaxian lab dungeon so enemies patrol properly.
2023-03-27 07:24:33 -04:00
Anthony Calosa
6add71792f Merge pull request #2765 from Simisays/Tibalt-Update
Update tibalts_bag_of_tricks.txt
2023-03-27 14:25:03 +08:00
Simisays
64d7a86607 Update tibalts_bag_of_tricks.txt 2023-03-27 07:55:43 +02:00
Anthony Calosa
6676d3bcd3 Merge pull request #2764 from kevlahnota/newmaster2
prevent NPE
2023-03-27 13:52:33 +08:00
Anthony Calosa
b9d55a9afa Merge branch 'master' into newmaster2 2023-03-27 13:51:32 +08:00
Anthony Calosa
0b3d2e8567 prevent NPE 2023-03-27 13:50:06 +08:00
Anthony Calosa
a656c60394 Merge pull request #2762 from rikimbo/adventure_printings_update
Adventure Mode: Update printings in decks
2023-03-27 13:33:03 +08:00
Anthony Calosa
0edc297334 Merge pull request #2761 from tool4ever/madfix
Madness fix
2023-03-27 13:32:52 +08:00
Anthony Calosa
a451cc8b54 Merge pull request #2763 from kevlahnota/newmaster2
fix blackscreen
2023-03-27 13:27:13 +08:00
Anthony Calosa
e5607167bb remove unused 2023-03-27 13:16:52 +08:00
Anthony Calosa
2b3042197d fix blackscreen
- some poi initial data are null so refactor how it parses the poi data to prevent blackscreen when the biome chunks are loaded
2023-03-27 13:07:09 +08:00
Eric Himbeault
79f268a6e9 Adventure: Update printings in decks to avoid online-only editions (if possible) and standardize frames. 2023-03-26 22:21:17 -05:00
tool4EvEr
9eb7f591dd Just let the KW handle it 2023-03-26 23:22:19 +02:00
Simisays
23bf195711 update 2023-03-26 22:08:43 +02:00
Simisays
60b0c6f660 update 2023-03-26 19:51:27 +02:00
Simisays
da890b1f43 update 2023-03-26 16:02:37 +02:00
Simisays
bb073f1d12 update 2023-03-26 16:00:34 +02:00
Anthony Calosa
c81d342382 Merge pull request #2746 from EldritchBimbo/Gwyn-Master
Gitaxian Dungeon, 2 Enemies
2023-03-26 21:35:03 +08:00
Anthony Calosa
2e27cf2388 Merge pull request #2759 from kevlahnota/newmaster2
update ManaShards event
2023-03-26 21:28:26 +08:00
Anthony Calosa
7a0732ca7a Merge pull request #2733 from Simisays/adventureupdatee
A bunch of new enemies + removal of giant crab + fix Kiora Island (squash merge)
2023-03-26 21:24:34 +08:00
Anthony Calosa
71a6d82d61 update ManaShards event 2023-03-26 21:17:38 +08:00
Anthony Calosa
35f6250843 Merge pull request #2758 from kevlahnota/newmaster2
refactor ManaShards
2023-03-26 19:46:33 +08:00
Anthony Calosa
68dc1fdce9 refactor ManaShards
- remove Mana Shards as countertype
2023-03-26 19:36:41 +08:00
Hans Mackowiak
1c510bac21 Update kuldotha_cackler.txt 2023-03-26 12:44:55 +02:00
Simisays
98805f9603 SLD 6 new DND cards (#2742)
* update

* update

* Update xenk_paladin_unbroken.txt

* Update doric_natures_warden_doric_owlbear_avenger.txt

* Update doric_natures_warden_doric_owlbear_avenger.txt

* update
2023-03-26 13:03:44 +03:00
Anthony Calosa
6c02c8033e Merge pull request #2757 from kevlahnota/newmaster2
prevent proliferate affecting manashards
2023-03-26 14:29:23 +08:00
Anthony Calosa
f18c525fe1 prevent proliferate affecting manashards 2023-03-26 14:22:54 +08:00
Anthony Calosa
f5ec35fe97 Update cavalier_of_thorns.txt 2023-03-26 13:36:53 +08:00
Anthony Calosa
0000ee13bb Update academy_rector.txt
typo
2023-03-26 13:35:11 +08:00
Anthony Calosa
2a0c36eaa1 Update TokenEffectBase.java
fix ConcurrentModificationException (anointed procession and divine visitation in play, then cast benevolent offering, then choose replacement effect divine visitation, hit ok)
2023-03-26 10:45:13 +08:00
Anthony Calosa
67bc3e1f98 Merge pull request #2756 from kevlahnota/newmaster2
dispose framebuffer
2023-03-26 08:16:07 +08:00
Anthony Calosa
c820e1c781 dispose framebuffer 2023-03-26 08:05:39 +08:00
Paul Hammerton
206d16ba74 Merge pull request #2754 from MikeS-NZ/forge_mom1
MOM: Wrenn and Realmbreaker
2023-03-25 23:26:05 +00:00
Mike S
6c266cda3e Update wrenn_and_realmbreaker.txt 2023-03-25 17:56:10 -05:00
Simisays
8d4e4b78cc Merge remote-tracking branch 'upstream/master' into adventureupdatee 2023-03-25 21:44:23 +01:00
Simisays
5129575b32 Update boar.atlas 2023-03-25 21:40:56 +01:00
Simisays
dfad28bf69 Update enemies.json 2023-03-25 21:37:08 +01:00
Simisays
c1bb2fad4b update 2023-03-25 21:36:07 +01:00
Anthony Calosa
e72c48afad Merge pull request #2755 from kevlahnota/newmaster2
refactor RewardActor
2023-03-26 04:33:53 +08:00
Suthro
ac2df214a3 MOM: Wrenn and Realmbreaker
MOM: Add script for showcased card Wrenn and Realmbreaker.

- Wrenn and Realmbreaker
2023-03-25 15:20:28 -05:00
Anthony Calosa
3ef54f55cb refactor RewardActor
- removed DrawOnPixmap
- use framebuffer to generate texture from item, gold, life, shards
2023-03-26 04:20:26 +08:00
Simisays
aa8fd48cd8 update 2023-03-25 20:51:11 +01:00
Anthony Calosa
d0dfc85d18 Merge pull request #2753 from kevlahnota/newmaster2
update PlayerStatisticScene, update filters
2023-03-26 03:00:37 +08:00
Anthony Calosa
dbbd0e21cc Merge branch 'master' into newmaster2 2023-03-26 02:56:21 +08:00
Anthony Calosa
c02c20851a remove duplicated code 2023-03-26 02:50:43 +08:00
Anthony Calosa
3de08f0308 update PlayerStatisticScene, update filters
- add active planaswalker achievements
- add Shards count
- use Textralabel region icon to render
- update textratypist
- update filter for hud elements, splash for adventure
2023-03-26 02:40:17 +08:00
Alwayssnarky
80cb519364 Fix to dungeon wall collision 2023-03-25 12:57:41 -04:00
Anthony Calosa
927e066179 Merge pull request #2752 from kevlahnota/newmaster2
add dungeon/cave indicator
2023-03-26 00:20:48 +08:00
Anthony Calosa
4b696957c7 Merge pull request #2748 from Simisays/anothertibaltfix
further improvements to tibalt dungeon
2023-03-26 00:13:49 +08:00
Anthony Calosa
0ff53ac197 Merge pull request #2751 from tool4ever/cleanup25
Fix some cards via cleanup
2023-03-26 00:13:05 +08:00
Anthony Calosa
ddd493f324 rename 2023-03-26 00:00:29 +08:00
Anthony Calosa
36572ac36d update position 2023-03-25 23:57:32 +08:00
Anthony Calosa
da082c0335 add dungeon/cave indicator
- adds signpost with magnifying glass indicates unexplored/unchanged poi
2023-03-25 23:37:53 +08:00
Simisays
a22a4abbbf update 2023-03-25 16:23:07 +01:00
tool4EvEr
e53e6723c5 Fix some cards via cleanup 2023-03-25 15:41:15 +01:00
Anthony Calosa
214310306d Merge pull request #2747 from kevlahnota/newmaster2
Fix Collision, Smoother Volume Fade, Add Night / Day settings for TitleBG
2023-03-25 20:49:07 +08:00
Alwayssnarky
044609578b make it look for booster in the right place 2023-03-25 08:22:59 -04:00
Alwayssnarky
b045eab631 Update points_of_interest.json 2023-03-25 08:21:04 -04:00
tool4ever
23875bcc16 Support Supertype for Deckhints (#2750) 2023-03-25 10:23:02 +00:00
Mike S
283a434df9 LTR: Mount Doom + 2 cards (#2683)
LTR: Add card scripts for spoiled LTR cards Mount Doom, Reprieve, and You Cannot Pass!
2023-03-25 10:19:01 +00:00
Simisays
fb7d8da98d Update wildrat.atlas 2023-03-25 08:57:52 +01:00
Simisays
4b55c7a2c1 update 2023-03-25 08:55:56 +01:00
Simisays
2186f698dc Merge remote-tracking branch 'upstream/master' into adventureupdatee 2023-03-25 08:51:17 +01:00
Simisays
f9269e585c further improvements 2023-03-25 08:47:20 +01:00
Hans Mackowiak
167f35e944 Update titania_voice_of_gaea_titania_gaea_incarnate.txt 2023-03-25 08:12:36 +01:00
Anthony Calosa
bfb84b6e08 fix collision 2023-03-25 11:54:54 +08:00
EldritchBimbo
4c8879b71d Merge branch 'master' into Gwyn-Master 2023-03-24 22:54:31 -04:00
Anthony Calosa
524d8c5c54 add Day/Night transition settings for titleBG 2023-03-25 10:02:51 +08:00
Alwayssnarky
6818b9ba64 Gitaxian Dungeon, 2 Enemies
Adds:
1 dungeon based on the Progress Engine, tiles for such, and associated infrastructure.
2 new enemies based on the same faction, along with deck .jsons and spritesheet atlases.
Changes:
Edits basilica dungeon - replaces 1 of the treasure chests with a themed booster pack.
Edit Phyrexian Buildings atlas and png to add new overworld sprite for new dungeon.
Edits Phyrexiantiles to add requested extra tiles that were not covered in previous upload.
Adds to blue, enemies, and POI jsons to make dungeon, enemies, and enemy loot pools exist and correctly function.
2023-03-24 20:31:29 -04:00
Anthony Calosa
98b4766c05 smoother fade audio 2023-03-25 08:08:53 +08:00
Paul Hammerton
0e681474fb Merge pull request #2745 from paulsnoops/wrenns_mom
Update edition: MOM
2023-03-24 23:22:03 +00:00
paulsnoops
88b2a6b96d Update edition: MOM 2023-03-24 22:29:02 +00:00
Anthony Calosa
228515f265 Merge pull request #2744 from Simisays/TIBALTFIX
Fix Tibalt dungeon
2023-03-25 04:46:13 +08:00
Simisays
3c1de50260 update 2023-03-24 21:41:05 +01:00
Simisays
9a881b5dd3 update 2023-03-24 16:52:17 +01:00
Simisays
198d574758 update 2023-03-24 16:47:59 +01:00
Simisays
d2ff63cd53 update 2023-03-24 15:08:44 +01:00
Simisays
a5bbde6092 QUICK FIX 2023-03-24 15:02:05 +01:00
Paul Hammerton
37b12761b7 Merge pull request #2740 from paulsnoops/update_editions
Update editions: MOM & SLD
2023-03-24 09:37:32 +00:00
paulsnoops
bf7480e34c Update editions: MOM & SLD 2023-03-24 09:31:52 +00:00
Hans Mackowiak
23257d109e Update venerated_rotpriest.txt 2023-03-24 09:37:08 +01:00
Northmoc
1584e6227a MOM archangel_elspeth.txt (#2738) 2023-03-24 09:05:34 +01:00
Hans Mackowiak
a1cacfeb6a Update cruel_grimnarch.txt 2023-03-24 06:54:37 +01:00
Simisays
d2af94792b revert slimefoot 2023-03-23 23:19:06 +01:00
Anthony Calosa
9f1950132f Merge pull request #2737 from kevlahnota/newmaster2
minor patch fix
2023-03-24 05:50:18 +08:00
Anthony Calosa
a583435ed3 minor patch fix 2023-03-24 05:49:28 +08:00
Anthony Calosa
19855e761b Merge pull request #2736 from kevlahnota/newmaster2
show quest keys in GameHUD
2023-03-24 01:49:44 +08:00
Anthony Calosa
3fcb3635ff add Main Story Key Indicator
- show quest keys in GameHUD
2023-03-24 01:42:41 +08:00
Simisays
794a5d64f4 update 2023-03-23 18:02:59 +01:00
Simisays
6cfd62b1b0 update 2023-03-23 17:26:33 +01:00
Anthony Calosa
cfc36cc604 Merge branch 'master' into newmaster2 2023-03-24 00:11:53 +08:00
Anthony Calosa
951652c790 fix plane folder conflict, fix RewardActor label (#2735)
* fix plane folder conflict, fix RewardActor label
- update textratypist, adjust settings prior to new changes
- fix RewardActor label render
- move music to default plane directory

* update

* labels
2023-03-24 00:11:06 +08:00
Anthony Calosa
5320e54273 Merge branch 'master' into newmaster2 2023-03-24 00:08:26 +08:00
Anthony Calosa
7da1b33681 labels 2023-03-24 00:05:18 +08:00
Anthony Calosa
dc7ffee172 update 2023-03-24 00:04:57 +08:00
Simisays
b6dc7b974b update 2023-03-23 17:04:45 +01:00
Anthony Calosa
fe10bfcc47 fix plane folder conflict, fix RewardActor label
- update textratypist, adjust settings prior to new changes
- fix RewardActor label render
- move music to default plane directory
2023-03-24 00:03:55 +08:00
Paul Hammerton
9bc6904e38 Merge pull request #2732 from Northmoc/qs
quicksilver_servitor.txt and support
2023-03-23 13:34:50 +00:00
Simisays
6d3a55811c update 2023-03-23 12:33:31 +01:00
Simisays
5089448a6f update 2023-03-23 12:28:45 +01:00
Anthony Calosa
d61f3b1dc1 Merge pull request #2734 from tool4ever/clean23
Update Charm desc when turn restriction is lifted
2023-03-23 18:25:13 +08:00
tool4EvEr
fad1327a08 Update Charm desc when turn restriction is lifted 2023-03-23 11:10:46 +01:00
tool4EvEr
eaee14f3ca Clean up 2023-03-23 11:10:04 +01:00
Simisays
1c109815de update 2023-03-23 09:26:01 +01:00
Anthony Calosa
b5571f70b1 Update xiras_hive.txt 2023-03-23 16:10:21 +08:00
Anthony Calosa
f86a727428 Update garruk_boss_effect_phasetwo.txt 2023-03-23 16:09:44 +08:00
Anthony Calosa
24eb6a534e Update xira_boss_effect.txt 2023-03-23 16:08:24 +08:00
Simisays
686e5c9bdf Update wildrat.atlas 2023-03-23 08:16:22 +01:00
Anthony Calosa
e309f77069 Merge pull request #2726 from Card-Forge/MaxFromEffectv2
CountersPutEffect: remove MaxFromEffect, let the CounterTable handle it
2023-03-23 13:56:11 +08:00
Anthony Calosa
97da604ed3 Merge pull request #2731 from kevlahnota/newmaster2
fix splashscreen NPE, disable flip sfx
2023-03-23 13:55:53 +08:00
Anthony Calosa
41136da7d5 update ArenaScene 2023-03-23 12:04:40 +08:00
Northmoc
2de115d829 quicksilver_servitor.txt and support 2023-03-22 22:33:14 -04:00
Anthony Calosa
b697068570 fix splashscreen NPE, disable flip sfx 2023-03-23 07:58:00 +08:00
Simisays
8bbe85605d update 2023-03-22 22:20:32 +01:00
Simisays
8c71301446 update 2023-03-22 21:53:42 +01:00
Hans Mackowiak
580856bcaa Card: add extra check for DREAM counters 2023-03-22 21:00:54 +01:00
Paul Hammerton
90d230a98e Merge pull request #2730 from paulsnoops/quick_fix
Update SCH
2023-03-22 19:59:22 +00:00
paulsnoops
9de37f282f Update SCH 2023-03-22 19:52:40 +00:00
Simisays
f6d2a91117 Merge branch 'Card-Forge:master' into adventureupdatee 2023-03-22 15:04:23 +01:00
tool4ever
2c831f7f49 Update one_with_the_multiverse.txt 2023-03-22 10:05:04 +01:00
Anthony Calosa
a07c1f5934 Merge pull request #2729 from kevlahnota/newmaster2
update dialog buttons
2023-03-22 16:25:49 +08:00
Anthony Calosa
7a103e7e70 update dialog buttons
- increase button_press volume
2023-03-22 16:23:10 +08:00
Anthony Calosa
b2c1495fcb Merge pull request #2728 from Simisays/Fungus
Create fungus.json
2023-03-22 16:03:23 +08:00
Simisays
2d631346a0 Create fungus.json 2023-03-22 08:48:32 +01:00
Anthony Calosa
117112bc71 Merge pull request #2727 from kevlahnota/newmaster2
update SFX, handle missing JSON deck definition
2023-03-22 15:27:49 +08:00
Anthony Calosa
8749f9dc72 update 2023-03-22 15:00:22 +08:00
Anthony Calosa
4fa752b24c update SFX, handle missing JSON deck definition
- add button_press, coins_drop, take_shard sfx
- update music timing
- adjust secondary audio volume
- adjust flipprocess prior to its sfx
- handle crash for missing deck/json definition
2023-03-22 14:03:20 +08:00
Hans Mackowiak
dbd75ec08c CountersPutEffect: remove MaxFromEffect, let the CounterTable handle it 2023-03-22 06:22:47 +01:00
Anthony Calosa
a05e79fce8 Merge pull request #2723 from Simisays/adventure
Adventure lootupgrade
2023-03-22 08:04:06 +08:00
Anthony Calosa
402d6d1bd4 Merge pull request #2724 from EldritchBimbo/SpriteWalkdownFix
Fix to Bug in PC Walk Down Animations
2023-03-22 08:01:00 +08:00
Anthony Calosa
7d43ba42cd Merge pull request #2725 from tool4ever/crashfix
Fix Mist of Stagnation
2023-03-22 07:54:45 +08:00
tool4EvEr
08b0aad84f Fix Mist of Stagnation 2023-03-21 23:02:57 +01:00
Alwayssnarky
f1974e4302 Fix to Bug in PC Walk Down Animations
Fix to bug in PC walking animations where the 3rd frame when walking directly down came from the idle animations instead of the walking ones.
2023-03-21 16:58:01 -04:00
Simisays
8cd6655a67 lootupgrade 2023-03-21 20:00:59 +01:00
Simisays
833decd9ea commit 2023-03-21 17:26:08 +01:00
Anthony Calosa
ff88a2b940 Merge pull request #2722 from kevlahnota/newmaster2
Fix Android Music, Add flip_card sfx
2023-03-21 22:20:44 +08:00
Anthony Calosa
442699380c Update GameEventCardStatsChanged.java 2023-03-21 22:16:41 +08:00
Anthony Calosa
94be6a7e48 .. 2023-03-21 22:09:45 +08:00
Anthony Calosa
865d228cb2 Fix Android Music, Add flip_card sfx
- fix secondary music not playing on Android (let assetmanager unload them on exit)
- fix MapDialog audio bgm fade
- add Flip sfx on RewardActor flip and transform setstate effect
2023-03-21 21:56:41 +08:00
Paul Hammerton
9bbed6df08 Merge pull request #2721 from paulsnoops/fix_mom
Editions: Small fixes for MOM & MOC
2023-03-21 10:21:44 +00:00
paulsnoops
ab0d9a13f0 Editions: Small fixes 2023-03-21 10:17:15 +00:00
Anthony Calosa
08c69562e5 Merge pull request #2720 from kevlahnota/newmaster2
update check
2023-03-21 17:40:55 +08:00
Anthony Calosa
92c6bd1365 update check 2023-03-21 17:39:00 +08:00
Anthony Calosa
3632e37acc Merge pull request #2719 from kevlahnota/newmaster2
update match loudness, fix playing music after match
2023-03-21 17:17:40 +08:00
Anthony Calosa
f9a347a68d update match loudness, fix playing music after match 2023-03-21 17:15:55 +08:00
Northmoc
b4d2742f66 Seek effect + SeekAll trigger for new Arena stuff (#2590)
* trove_mage.txt refactor + support

* SeekEffect + SeekAll trigger initial

* SeekEffect better

* SeekEffect.getStackDescription basic

* more refactored

* gitrog_horror_of_zhava.txt needs ImprintFound

* 10 more refactors

* more

* SeekEffect fix bad imprint line

* SeekEffect fix better remember/imprint

* gitrog_horror_of_zhava.txt with Branch

* more cards

* last ones?

* SeekEffect tighten up based on Hanmac ver

* optimize imports

* fix param discrepancies

* SeekEffect tighten up
2023-03-21 11:58:23 +03:00
Anthony Calosa
d8356f61cb Merge pull request #2718 from kevlahnota/newmaster2
prevent NPE
2023-03-21 16:16:08 +08:00
Anthony Calosa
bbd8e2eb61 prevent NPE 2023-03-21 16:15:18 +08:00
Anthony Calosa
0bdc435110 Update nahiris_boss_effect.txt 2023-03-21 15:55:42 +08:00
Anthony Calosa
155c197347 Merge pull request #2714 from kevlahnota/newmaster2
update BGM detection, update Arena Challenges for Hard/Insane
2023-03-21 15:32:04 +08:00
Anthony Calosa
b72d4abde6 Merge pull request #2717 from Card-Forge/MaxFromEffect
GameEntityCounterTable: respect MaxFromEffect for Clockwork
2023-03-21 15:25:07 +08:00
Anthony Calosa
51f1545722 update add boss battle BGM 2023-03-21 15:17:59 +08:00
tool4ever
1f13ce190e Update faith_unbroken.txt 2023-03-21 07:55:49 +01:00
Hans Mackowiak
f166394db0 GameEntityCounterTable: respect MaxFromEffect for Clockwork 2023-03-21 07:39:19 +01:00
Anthony Calosa
a0e3949aab update pause timing 2023-03-21 13:17:06 +08:00
Anthony Calosa
1190f40b55 update playlist selection 2023-03-21 07:20:21 +08:00
Anthony Calosa
bdaed72d2d Merge branch 'master' into newmaster2 2023-03-21 07:09:10 +08:00
Anthony Calosa
e0493f1556 Merge pull request #2715 from Simisays/adventurebis
Xira's Hive collision improvements + removal horse overworld
2023-03-21 07:04:53 +08:00
Anthony Calosa
1ecede7726 Merge pull request #2716 from tool4ever/charmFix
Fix NPE when trying to build Charm description
2023-03-21 07:03:55 +08:00
Northmoc
acce156205 Merge pull request #2704 from paulsnoops/sir_draft
Booster Draft: SIR
2023-03-20 17:22:29 -04:00
tool4EvEr
348670776e Clean up 2023-03-20 18:25:03 +01:00
tool4EvEr
84aef29d69 Fix NPE when trying to build Charm description 2023-03-20 18:24:32 +01:00
Simisays
652f799ec3 update 2023-03-20 18:23:34 +01:00
Anthony Calosa
2a22be944b update BGM detection, update Arena Challenges for Hard/Insane
- still have the layer bug for the BGM since it's not boundary based, but tolerable atm, it must get the colored boundaries for accuracy
2023-03-20 20:24:26 +08:00
Hans Mackowiak
c5e52aab7d AbilityUtils: add Convoked as DefinedCards (#2710) 2023-03-20 06:20:35 +01:00
Anthony Calosa
6978733fb0 Merge pull request #2712 from kevlahnota/newmaster2
fix JSON typos
2023-03-20 12:25:31 +08:00
Anthony Calosa
38a11a8bac fix JSON typos 2023-03-20 12:24:56 +08:00
Anthony Calosa
85d549cb86 Merge pull request #2711 from kevlahnota/newmaster2
update missing music and rename custom card
2023-03-20 12:02:47 +08:00
Anthony Calosa
de300f9c00 update missing music and rename custom card 2023-03-20 12:01:55 +08:00
Anthony Calosa
33189271b1 Merge pull request #2709 from tool4ever/defile
Fix Defilers applying twice with MayPlay
2023-03-20 11:50:22 +08:00
Anthony Calosa
7600ec5492 Merge pull request #2705 from kevlahnota/newmaster2
update adventure BGM..
2023-03-20 11:50:03 +08:00
Anthony Calosa
b95226b031 Merge pull request #2698 from EldritchBimbo/Gwyn-Master
Adds 1 dungeon, 2 enemies based on the Machine Orthodoxy
2023-03-20 11:46:15 +08:00
Anthony Calosa
8fc22b9d02 Merge pull request #2692 from Simisays/XIRAA
Large Adventure update
2023-03-20 11:25:34 +08:00
Anthony Calosa
af88585695 Update tibalts_bag_of_tricks.txt 2023-03-20 11:14:14 +08:00
tool4EvEr
714baa47ee Fix Defilers applying twice with MayPlay 2023-03-19 21:13:27 +01:00
tool4ever
25d2aa82b6 Bunch of fixes (#2706)
* Fix Tawnos's Coffin not using ETB counters

* Cost fix

* Saga tweaks

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-03-19 22:07:03 +03:00
tool4ever
7b78a2052d Update karumonix_the_rat_king.txt 2023-03-19 18:58:57 +00:00
Hans Mackowiak
6b61d7fc7e CardFactoryUtil: Read Ahead use DisableTriggers (#2703) 2023-03-19 18:34:47 +03:00
Hans Mackowiak
a4b52b4b40 Merge pull request #2699 from tool4ever/copycleanup
CardFactory: remove redundant copying
2023-03-19 15:14:12 +01:00
Anthony Calosa
1b7180a0f2 prevent NPE 2023-03-19 21:36:34 +08:00
Anthony Calosa
a91845c444 update 2023-03-19 21:03:51 +08:00
Simisays
149dc720f1 update 2023-03-19 13:42:30 +01:00
Anthony Calosa
1bc8abf7e1 update adventure BGM.. 2023-03-19 19:16:51 +08:00
Simisays
40d4d9381b sprite fixes for editor 2023-03-19 11:45:30 +01:00
paulsnoops
7962d0bfca Booster Draft: SIR 2023-03-19 09:52:49 +00:00
EldritchBimbo
35a8d7b636 Merge branch 'Card-Forge:master' into Gwyn-Master 2023-03-18 16:29:04 -04:00
Alwayssnarky
23734b2f79 Tweaks to Tiles
Modifies phyrexiantiles.png to standardize tile grid, edits phyreixan_w1 and tiles.tsx to accommodate.
2023-03-18 16:21:31 -04:00
Simisays
1a4c370b39 Update xiras_hive.txt 2023-03-18 14:13:41 +01:00
Paul Hammerton
1186d4ee22 Merge pull request #2702 from JohnWilliams77/patch-81
Update Secret Lair Drop Series.txt
2023-03-18 08:28:54 +00:00
JohnWilliams77
069c50daa5 Update Secret Lair Drop Series.txt 2023-03-18 08:19:44 +00:00
Simisays
4b2bc09acb update 2023-03-18 08:51:33 +01:00
Hans Mackowiak
eef4dd58fc CardFactoryUtil: Equip shouldn't care if it is a creature (#2696) 2023-03-18 07:02:08 +03:00
tool4EvEr
11ca3ca7b0 remove redundant calls 2023-03-17 22:19:15 +01:00
Simisays
95d23e9fd6 update 2023-03-17 22:08:33 +01:00
Alwayssnarky
bd6f6bcf77 Adds 1 dungeon, 2 enemies based on the Machine Orthodoxy
Adds:
.2 new enemies (Orthodoxy Duelist and Orthodoxy Angel), along with accompanying infrastructure. (Sprites, atlas, decks. Decks both use JSON randomization.)
.New file for Phyrexian overworld buildings (and other dungeons I might make), along with accompanying infrastructure.
.New tiles for in-dungeon tilesets, along with accompanying infrastructure.
.1 new dungeon, based on the Machine Orthodoxy. Uses new "patrolling enemy" mechanic.
Changes:
.Enemies.json - defines the new enemies' stats and drop table.
.Points_of_Interest.json - Defines new dungeon and sets it up to link to new map correctly.
.White.json - Allows new dungeon to spawn in white area of the world. Enemies are limited to this dungeon (for now)
2023-03-17 16:59:46 -04:00
Simisays
dbf9433238 Update tibalt_boss_effect.txt 2023-03-17 15:42:34 +01:00
Simisays
8b397611ec update 2023-03-17 15:41:18 +01:00
Simisays
582cf84e68 Update xira_boss_effect.txt 2023-03-17 15:38:30 +01:00
Simisays
a60a1747fc Update tibalt_boss_effect.txt 2023-03-17 15:28:36 +01:00
Simisays
ec153b0e73 Update slobads_iron_boots.txt 2023-03-17 15:16:41 +01:00
Simisays
f75ebd4379 Update slobad_boss_effect.txt 2023-03-17 15:14:29 +01:00
Simisays
9f26fd5670 update 2023-03-17 13:02:05 +01:00
Simisays
25e1189e41 update 2023-03-17 12:59:48 +01:00
Simisays
a0e884cbae update 2023-03-17 11:35:54 +01:00
Simisays
6c3a21b107 update 2023-03-17 11:33:39 +01:00
Simisays
22587d97f3 update 2023-03-17 11:32:51 +01:00
Simisays
79bb40ebf4 update 2023-03-17 11:10:19 +01:00
Paul Hammerton
395eab4d59 Merge pull request #2697 from paulsnoops/sir_sis_formats
Formats update: Add SIR & SIS
2023-03-17 09:51:16 +00:00
paulsnoops
aed4b92f8b Formats update: Add SIR & SIS 2023-03-17 09:46:50 +00:00
Simisays
befe87614c update card pics 2023-03-17 09:03:43 +01:00
Anthony Calosa
0cf8fe9683 Merge pull request #2694 from Simisays/LOTR
LOTR 5 cards
2023-03-17 11:45:15 +08:00
Anthony Calosa
2903d2df01 Merge pull request #2695 from Card-Forge/CommanderGauntlet
add Commander Gauntlet
2023-03-17 11:44:56 +08:00
Anthony Calosa
81efb2737f add Commander Gauntlet 2023-03-17 08:18:52 +08:00
Simisays
9f682d2d25 Update sam_loyal_attendant.txt 2023-03-16 20:23:27 +01:00
Simisays
6dfa23895e update 2023-03-16 20:18:23 +01:00
Simisays
569089f55e update 2023-03-16 19:52:06 +01:00
Paul Hammerton
64c44a7ba5 Merge pull request #2693 from paulsnoops/edition_fixes
Small edition fixes
2023-03-16 18:01:14 +00:00
paulsnoops
a5126777d5 cardname 2023-03-16 17:53:55 +00:00
paulsnoops
024f853cb4 Small edition fixes 2023-03-16 17:43:17 +00:00
Simisays
0ce0a3dace Update entry_down.tx 2023-03-16 15:12:58 +01:00
Simisays
eb19be85f2 update 2023-03-16 15:06:48 +01:00
Paul Hammerton
e2e98f2478 Merge pull request #2691 from paulsnoops/update_editions
Edition updates: LTR, LTC, SIR, SIS (new)
2023-03-16 09:52:26 +00:00
Paul Hammerton
c5ddb0209a Update The Lord of the Rings Tales of Middle-earth.txt 2023-03-16 09:45:36 +00:00
Paul Hammerton
648ceaf229 Update The Lord of the Rings Tales of Middle-earth Commander.txt 2023-03-16 09:42:20 +00:00
Paul Hammerton
aa96855aba Create Shadows of the Past.txt 2023-03-16 09:39:42 +00:00
Paul Hammerton
7bf776965b Edition updates: SIR, SIS (new) 2023-03-16 09:34:28 +00:00
Anthony Calosa
b03e99288a Merge pull request #2690 from kevlahnota/newmaster2
fix holdtooltip bug
2023-03-16 08:07:18 +08:00
Anthony Calosa
ec76844a2e fix holdtooltip bug
- fix issue when downloaded image is reloaded while holdtooltip is engaged locks up all the buttons
2023-03-16 08:00:40 +08:00
tool4ever
e0946bf017 Update skullpiercer_gnat.txt 2023-03-15 15:44:56 +00:00
Anthony Calosa
0c44a357a3 Merge pull request #2689 from tool4ever/thelon
Fix Thelon
2023-03-15 23:33:24 +08:00
Anthony Calosa
8de1ffee45 Merge pull request #2686 from kevlahnota/newmaster2
revert AudioClip, refactor Texture get
2023-03-15 23:33:08 +08:00
tool4EvEr
298ff0465e Fix Thelon 2023-03-15 16:12:50 +01:00
Anthony Calosa
3a849e77ab add dispose clips 2023-03-15 22:30:39 +08:00
tool4ever
9b47a7fee2 Remove some obsolete stuff (#2685)
* Remove obsolete code

* Fix uncounterable being invisible

* Fix CantHappen requiring choice
2023-03-15 12:37:22 +00:00
Anthony Calosa
e59bfb8a1f revert AudioClip, refactor Texture get 2023-03-15 19:32:12 +08:00
Paul Hammerton
9bf972aa70 Merge pull request #2684 from paulsnoops/update_ltr
Edition updates: LTR, LTC (new)
2023-03-14 20:37:16 +00:00
paulsnoops
8047a0ae79 Edition updates: LTR, LTC (new) 2023-03-14 20:32:22 +00:00
Anthony Calosa
e8ea282e2a Merge pull request #2682 from kevlahnota/newmaster2
update Achievement Trophies
2023-03-15 03:45:12 +08:00
Simisays
4f02e2e18e Merge branch 'Card-Forge:master' into XIRAA 2023-03-14 20:35:35 +01:00
Simisays
087b699bed update 2023-03-14 20:34:50 +01:00
Anthony Calosa
eb4ac33b36 prevent NPE 2023-03-15 01:33:12 +08:00
Paul Hammerton
50e46a176b Merge pull request #2676 from MikeS-NZ/forge_ltr
LTR: Gandalf the Grey + The One Ring
2023-03-14 17:20:26 +00:00
Anthony Calosa
78bded11fb update 2023-03-15 01:14:51 +08:00
Mike S
6d945ff283 Update gandalf_the_grey.txt 2023-03-14 12:13:19 -05:00
Anthony Calosa
b88cd6c2e9 papercard images as fallback 2023-03-15 01:06:29 +08:00
Anthony Calosa
eac869f389 Merge branch 'master' into newmaster2 2023-03-15 00:42:37 +08:00
Anthony Calosa
a41a3916de update Achievement Trophies
- use PaperCard images as overlay if available for Achievement Trophies
2023-03-15 00:27:49 +08:00
Mike S
b1ebbdc8fb Create gandalf_the_grey.txt 2023-03-14 11:12:38 -05:00
Paul Hammerton
f5d046370f Merge pull request #2681 from paulsnoops/fix_formats
Formats: Fix Explorer and Arena Standard
2023-03-14 14:17:50 +00:00
paulsnoops
424e16da50 Formats: Fix Explorer and Arena Standard 2023-03-14 14:10:31 +00:00
Anthony Calosa
4576efc52f Merge pull request #2680 from Card-Forge/newmaster2
Fix old theme Splashscreen and Logo
2023-03-14 19:06:22 +08:00
Anthony Calosa
ecd8e4fd3d Merge pull request #2679 from kevlahnota/newmaster2
Fix old theme splashscreen and logo
2023-03-14 19:03:45 +08:00
Anthony Calosa
9d9103709d update check 2023-03-14 19:02:09 +08:00
Anthony Calosa
356cd2c908 fix old theme splashscreen and logo
- themes without hd skins should load fine now
2023-03-14 18:53:18 +08:00
Anthony Calosa
ed8728f921 Merge pull request #2677 from Card-Forge/mulligan-bypass
Speed up London Mulligan when you just want to mulligan again.
2023-03-14 18:20:49 +08:00
Anthony Calosa
adaae8d06e Merge pull request #2678 from kevlahnota/newmaster2
fix dialog voiceFile not playing on Android
2023-03-14 18:20:35 +08:00
Anthony Calosa
3909050415 update 2023-03-14 17:56:51 +08:00
Anthony Calosa
87f2b11341 fix dialog voiceFile not playing on Android 2023-03-14 15:59:23 +08:00
Suthro
a3883b0ba5 LTR: Gandalf the Grey + The One Ring
LTR: Add card scripts for spoiled LTR cards Gandalf the Grey and The One Ring.

- Gandalf the Grey
- The One Ring
2023-03-13 19:21:31 -05:00
Anthony Calosa
7de13c38cf Merge pull request #2675 from kevlahnota/newmaster2
update deck award
2023-03-14 07:17:25 +08:00
Anthony Calosa
c80929663e update deck award 2023-03-14 07:15:56 +08:00
tool4ever
812f4062dd Fix undo when it gets cleared during payment (#2674) 2023-03-13 22:06:49 +00:00
Paul Hammerton
92b210b1da Merge pull request #2673 from paulsnoops/oops
LTR: nothing to see here (or maybe a typo)
2023-03-13 17:44:02 +00:00
paulsnoops
507a1a0b57 LTR: nothing to see here (or maybe a typo) 2023-03-13 17:41:01 +00:00
Paul Hammerton
a690234bab Merge pull request #2672 from paulsnoops/add_ltr_edition
New edition: LTR
2023-03-13 17:38:32 +00:00
paulsnoops
04dcdf524b New edition: LTR 2023-03-13 17:33:01 +00:00
tool4ever
6eb724c2f4 Fix illegal target (#2670)
Co-authored-by: TRT <>
2023-03-13 15:11:28 +03:00
Simisays
bbb42f5546 Update tawnoss_tinkering.txt (#2671) 2023-03-13 12:19:54 +01:00
Simisays
0f119e14db Merge branch 'Card-Forge:master' into XIRAA 2023-03-13 08:26:12 +01:00
Anthony Calosa
50e15de07f Merge pull request #2668 from kevlahnota/newmaster2
update AudioClip, AudioMusic
2023-03-13 11:19:06 +08:00
Anthony Calosa
8c0cc9468e Merge pull request #2662 from tool4ever/undocheat
Anti-Cheat: fix refunding wrong mana
2023-03-13 11:06:32 +08:00
Anthony Calosa
205fe95129 update AudioClip, AudioMusic
- let AssetManager handle game audio
- unload particles and music after playing it to save RAM
2023-03-13 10:29:25 +08:00
Simisays
39f3a57e96 three alchemy fixes (#2667) 2023-03-12 22:08:01 +00:00
Simisays
be2a8ad8e0 update 2023-03-12 22:41:26 +01:00
Anthony Calosa
5e78431d18 Merge pull request #2665 from pfirpfel/fix-Fallaji-Antiquarian
Fallaji Antiquarian: Fix trigger
2023-03-13 03:44:34 +08:00
pfirpfel
0045905e15 Fallaji Antiquarian: Fix trigger 2023-03-12 20:10:23 +01:00
tool4EvEr
cf4f6f7f49 Clean up 2023-03-12 17:20:22 +01:00
tool4EvEr
3f79414431 Fix script 2023-03-12 17:10:29 +01:00
tool4EvEr
419c66daa5 Anti-Cheat: fix refunding wrong mana 2023-03-12 16:37:10 +01:00
Anthony Calosa
0b12cc5340 Merge pull request #2661 from kevlahnota/newmaster2
update PlayerStatisticScene
2023-03-12 21:11:54 +08:00
Anthony Calosa
97bb4d0fbb update PlayerStatisticScene
- add toggable Achievements buttons (Shared with Constructed GameType except variants)
- set avatar to stretch (to match different scaling)
- fix Ooze avatar region
2023-03-12 21:07:56 +08:00
Anthony Calosa
453a704afa Merge pull request #2660 from kevlahnota/newmaster2
refactor FSkin Texture loading
2023-03-12 07:27:10 +08:00
Anthony Calosa
2a82a51fab move ParticleEffect load to AssetManager 2023-03-12 07:19:57 +08:00
Simisays
1c12d79f52 update 2023-03-11 19:53:27 +01:00
Anthony Calosa
63fedcdd81 cleanup 2023-03-11 22:42:35 +08:00
Anthony Calosa
683f004f84 refactor FSkin Texture loading
- this should clear up unused texture
- fix startup on empty res/skins folder
2023-03-11 21:50:10 +08:00
Anthony Calosa
fa48fcd336 Merge pull request #2659 from tool4ever/poms
Maven: relocate platform-specific dependency
2023-03-11 18:15:21 +08:00
Simisays
112284f495 update 2023-03-11 09:30:58 +01:00
tool4EvEr
f59ad77a4d Maven: relocate platform-specific dependency 2023-03-11 09:13:51 +01:00
Anthony Calosa
c826a1c029 Merge pull request #2658 from Card-Forge/revert-2657-newmaster2
Revert "update initial skin texture load"
2023-03-11 14:25:20 +08:00
Anthony Calosa
ef1b089d49 Revert "update initial skin texture load" 2023-03-11 14:22:25 +08:00
Anthony Calosa
180ba40cc8 Merge pull request #2657 from kevlahnota/newmaster2
update initial skin texture load
2023-03-11 11:45:20 +08:00
Anthony Calosa
bc3185a0cc update initial skin texture load
- directly create texture if absolute path is not available
- dispose overridden texture
2023-03-11 11:39:55 +08:00
Anthony Calosa
c9602147b9 Merge pull request #2655 from kevlahnota/newmaster2
fix old themes without hdbuttons and hdstart
2023-03-11 05:45:35 +08:00
Anthony Calosa
2d4ec54562 fix old themes without hdbuttons and hdstart 2023-03-11 05:41:54 +08:00
Anthony Calosa
1f12b0dee8 Merge pull request #2654 from Card-Forge/refactorTexture
refactor texture loading
2023-03-11 04:17:22 +08:00
Anthony Calosa
a807d74744 refactor texture loading
- move loading of textures directly to assetmanager
- move textratypist to gui-mobile
2023-03-11 04:00:15 +08:00
Simisays
d1dbe7924f Merge remote-tracking branch 'upstream/master' into XIRAA 2023-03-10 13:19:15 +01:00
Simisays
70e65a8619 update 2023-03-10 13:16:50 +01:00
Anthony Calosa
5ce27717ac Merge pull request #2653 from kevlahnota/newmaster2
fix EnemyData loading issues
2023-03-10 14:18:19 +08:00
Anthony Calosa
3991b6d081 fix EnemyData loading issues 2023-03-10 14:12:02 +08:00
Anthony Calosa
1f908465d5 Merge pull request #2620 from Card-Forge/rebalancedFormatCheck
GameFormat: filter Rebalanced cards
2023-03-10 13:09:10 +08:00
Anthony Calosa
1ac2b9aa9f Merge pull request #2652 from jjayers99/master
Adventure - Additional Challenger decks
2023-03-10 13:08:45 +08:00
jjayers99
a6530249c9 Merge branch 'master' of https://github.com/jjayers99/forge 2023-03-09 22:56:08 -05:00
jjayers99
5ef4c37cb8 Adv: Additional Challenger enemy decks 2023-03-09 22:55:57 -05:00
Anthony Calosa
c97489fedf Merge pull request #2651 from kevlahnota/newmaster2
fix particle effect initial position
2023-03-10 09:59:31 +08:00
Anthony Calosa
a8733ed6a5 Merge pull request #2650 from jjayers99/master
Adventure updates
2023-03-10 09:55:56 +08:00
Anthony Calosa
cd3a14d9ad Merge pull request #2648 from Simisays/KIORABRANCH
Kiora Island Collision Fix
2023-03-10 09:54:01 +08:00
Anthony Calosa
7de1495049 Merge pull request #2649 from tool4ever/clean93
Some cleanup
2023-03-10 09:53:04 +08:00
Anthony Calosa
5748d09b54 fix particle effect initial position
- move the offset calculation inside MapActor
2023-03-10 09:18:43 +08:00
jjayers99
8675affd01 Sprite fix 2023-03-09 17:50:29 -05:00
jjayers99
5e1d6da8db Adv: New enemies, sprite corrections 2023-03-09 17:18:37 -05:00
tool4EvEr
b7105e1ee9 Some cleanup 2023-03-09 22:43:50 +01:00
jjayers99
791270575a Adventure mode: new enemy sprite 2023-03-09 16:02:49 -05:00
Simisays
d5a15fb14e update 2023-03-09 20:07:55 +01:00
tool4ever
439cb39c96 Update zopandrel_hunger_dominus.txt 2023-03-09 15:34:31 +00:00
Simisays
7018d415c2 update 2023-03-09 15:42:07 +01:00
Simisays
4418f79f97 update 2023-03-09 15:32:30 +01:00
Michael Kuenzli
69272b963c Add alchemy draft formats (#2628)
* Add new rarity slot used by Alchemy sets

* Make Alchemy: New Capenna draftable

* Make Alchemy: Phyrexia draftable

* Make Alchemy: The Brothers' War draftable

* Make Alchemy: Kamigawa draftable

* Make Alchemy: Dominaria draftable
2023-03-09 12:40:55 +03:00
Hans Mackowiak
e786b4bed5 Update kinzu_of_the_bleak_coven.txt
Fix AddKeywords
2023-03-09 08:28:51 +01:00
friarsol
53957d5abf Speed up London Mulligan when you just want to mulligan again. 2023-03-08 23:07:18 -05:00
Anthony Calosa
51942b276c Merge pull request #2647 from kevlahnota/newmaster2
downscale XLHQ custom cards
2023-03-09 06:56:12 +08:00
Anthony Calosa
ff2fe7fcb9 downscale XLHQ custom cards
- prevent crashes for mobile devices with weak GPU or low RAM
2023-03-09 06:48:19 +08:00
Anthony Calosa
7c9982f8eb Merge pull request #2644 from tool4ever/makeanexample
Fix Make an Example
2023-03-09 06:10:09 +08:00
Anthony Calosa
434cfac4a6 Merge pull request #2646 from jjayers99/master
Adventure updates
2023-03-09 06:09:54 +08:00
jjayers99
5977cc2e83 Collision fixes
Added new tileset for buildings.png, buildings-nocollide.tsx. This tileset will automatically use the same buildings.png image, but the intent is to never add collision mapping to this tileset so that all tiles are fully passable for background images.
2023-03-08 15:32:11 -05:00
jjayers99
b0afe27fdd Revert "Adventure: moving empty houses out of collision layers"
This reverts commit 98a89a638d.
2023-03-08 10:35:35 -05:00
TabletopGeneral
e03c871701 Merge branch 'Card-Forge:master' into master 2023-03-08 09:59:54 -05:00
jjayers99
98a89a638d Adventure: moving empty houses out of collision layers 2023-03-08 09:59:06 -05:00
Anthony Calosa
f2cf37eecb Merge pull request #2645 from kevlahnota/newmaster2
update scrollable tables
2023-03-08 21:08:48 +08:00
Anthony Calosa
6a173f688f update scrollable tables
- can use mouse wheel if availble to scroll
2023-03-08 21:04:03 +08:00
jjayers99
2cf3f508fb Merge branch 'master' of https://github.com/jjayers99/forge 2023-03-08 07:11:35 -05:00
tool4EvEr
798bce389c Fix Make an Example 2023-03-08 11:54:58 +01:00
Paul Hammerton
6f5475d9e0 Merge pull request #2642 from JohnWilliams77/patch-80
Update Secret Lair Drop Series.txt
2023-03-08 10:00:05 +00:00
Anthony Calosa
374522e17b Merge pull request #2643 from kevlahnota/newmaster2
update SaveLoadScene, InventoryScene
2023-03-08 17:34:44 +08:00
Anthony Calosa
64c920421b update SaveLoadScene, InventoryScene
- fix layout, add table header and scrollable content
- update textratypist
2023-03-08 17:20:58 +08:00
JohnWilliams77
f56580598e Update Secret Lair Drop Series.txt 2023-03-08 09:03:44 +00:00
jjayers99
24f585f0a8 Adventure - New red boss dungeon, waypoint tools
A few further changes are planned for new dungeon, but needed to actually do a check-in at some point...
2023-03-07 22:11:33 -05:00
Anthony Calosa
8066a9be83 Merge pull request #2640 from kevlahnota/newmaster2
Fix to avoid incompatibility if compile with JDK9+
2023-03-08 07:24:22 +08:00
Anthony Calosa
7994ca1aaa Merge pull request #2639 from EldritchBimbo/Gwyn-Master
Playable Phyrexians Update
2023-03-08 07:24:05 +08:00
Anthony Calosa
91c9b41730 Merge pull request #2638 from Simisays/better-saturation
Improve exposure new sprites
2023-03-08 07:23:43 +08:00
Anthony Calosa
3ba9bdca80 Fix to avoid incompatibility if compile with JDK9+ 2023-03-08 07:18:53 +08:00
Alwayssnarky
b279d9f127 Playable Phyrexians Update
SIMPLE CHANGES
.Adds playable Phyrexian race. (On parity with existing. 20 portraits, 2 sprite animation sets.)

DETAILED CHANGES
.Adds 4 files for png and atlas of new sprites.
.Adds 20 portraits to avatar.png
.Alters avatar.atlas and heroes.json to utilize new files.
2023-03-07 17:56:21 -05:00
Simisays
6b5f77040f Update scarecrowcaptain.png 2023-03-07 23:13:34 +01:00
Simisays
09d8665b5b update 2023-03-07 23:10:02 +01:00
Hans Mackowiak
cd880015da StaticData: check all Editions for rebalanced 2023-03-07 22:04:08 +01:00
Hans Mackowiak
2eff0f08d8 GameFormat: filter Rebalanced cards 2023-03-07 22:00:39 +01:00
Anthony Calosa
7e95633a33 Merge pull request #2637 from kevlahnota/newmaster2
update fix
2023-03-08 00:04:42 +08:00
Anthony Calosa
e6b083330c update fix 2023-03-08 00:02:35 +08:00
Anthony Calosa
70f30fcab2 Merge pull request #2636 from kevlahnota/newmaster2
rename pics
2023-03-07 23:54:15 +08:00
Anthony Calosa
b06ffdfebb update PlayerStatisticScene
- fixed table header with scrollable values
2023-03-07 23:52:50 +08:00
Anthony Calosa
bad27f6a01 Merge pull request #2625 from Simisays/quickfix
Improvements to Scarecrow Farm + Blue Aerie fix
2023-03-07 23:47:51 +08:00
Simisays
ed5efcce13 update picture 2023-03-07 16:36:08 +01:00
Anthony Calosa
8875a52599 Merge pull request #2635 from kevlahnota/newmaster2
update PlayerStatisticScene
2023-03-07 23:26:56 +08:00
Anthony Calosa
f658a150f9 update PlayerStatisticScene
- fixed table header with scrollable values
2023-03-07 22:46:50 +08:00
Simisays
754ee7fb44 fix 2023-03-07 15:33:16 +01:00
Simisays
a77e3aef7d final update 2023-03-07 14:05:59 +01:00
Anthony Calosa
2e5abd3e08 Merge pull request #2634 from Simisays/NEW
Update lukamina_moon_druid.txt
2023-03-07 19:05:14 +08:00
Simisays
cbcf9b4643 Update lukamina_moon_druid.txt 2023-03-07 11:52:59 +01:00
Simisays
6de40ab06c update 2023-03-07 11:42:27 +01:00
Simisays
17b43e7672 Update giant_scythe.txt 2023-03-07 11:32:54 +01:00
Anthony Calosa
9153584c0f Merge pull request #2633 from kevlahnota/newmaster2
update windowlistener
2023-03-07 18:23:49 +08:00
Anthony Calosa
472b8823a0 update windowlistener
- use Lwjgl3WindowAdapter, should fix some issue for LWJGL3
2023-03-07 18:15:58 +08:00
Simisays
7571d77d27 update 2023-03-07 09:33:44 +01:00
Simisays
86ca964b2f update 2023-03-07 09:28:36 +01:00
Simisays
ec0314d28b Merge branch 'quickfix' of https://github.com/Simisays/forge into quickfix 2023-03-07 09:00:55 +01:00
Simisays
8746a6dd66 update 2023-03-07 09:00:44 +01:00
Simisays
7298164d15 Update giant_scythe.txt 2023-03-07 08:56:32 +01:00
Anthony Calosa
f8dba98212 Update GameHUD.java 2023-03-07 15:51:16 +08:00
Simisays
3da826b97d update 2023-03-07 08:48:22 +01:00
Simisays
76f5bb39e3 Merge branch 'Card-Forge:master' into quickfix 2023-03-07 08:44:37 +01:00
Simisays
b35e5023ac update 2023-03-07 08:41:59 +01:00
Anthony Calosa
62e95ae6cb Merge pull request #2632 from kevlahnota/newmaster2
adjust effect timing, center particle effect animation based on scale
2023-03-07 12:36:10 +08:00
Anthony Calosa
cbd742ae6c adjust effect timing, center particle effect animation based on scale
-fix effectdata classcast startCardsInCommandZone
2023-03-07 12:02:04 +08:00
Anthony Calosa
5da1f37fa7 Merge pull request #2631 from kevlahnota/newmaster2
fix deckaward alignment
2023-03-07 11:12:43 +08:00
Anthony Calosa
4fed70aef9 adjust height for 5C decks, fix custom starter deck startup 2023-03-07 10:39:50 +08:00
Anthony Calosa
0722fa9a58 fix deckaward alignment 2023-03-07 09:53:28 +08:00
Anthony Calosa
872367240c Merge pull request #2626 from tool4ever/fixnpe6
Fix Churning Reservoir NPE
2023-03-07 07:28:36 +08:00
Anthony Calosa
af488f7f3d Merge pull request #2630 from pfirpfel/fix-nettling-host-pt
Nettling Host: Fix Power/Toughness
2023-03-07 07:10:19 +08:00
tool4EvEr
5c71c7e01b Clean up 2023-03-06 23:10:45 +01:00
pfirpfel
e65a956027 Nettling Host: Fix Power/Toughness 2023-03-06 23:03:29 +01:00
Michael Kuenzli
b484ca2b0f Nettling Host: Fix mana cost (#2629) 2023-03-06 22:00:29 +00:00
Paul Hammerton
ce6842a9ff Merge pull request #2627 from paulsnoops/banandrest_6march
Banned and Restricted Announcement for March 6, 2023
2023-03-06 21:00:44 +00:00
paulsnoops
f08c94c1d9 Banned and Restricted Announcement for March 6, 2023 2023-03-06 20:54:09 +00:00
tool4EvEr
10ff128a27 Fix trigger 2023-03-06 21:23:22 +01:00
Simisays
d2bbad2683 update 2023-03-06 20:08:10 +01:00
tool4EvEr
4d4f89f4b7 Fix Churning Reservoir NPE 2023-03-06 20:05:07 +01:00
Simisays
3169b50f6f Update garruk.dck 2023-03-06 18:40:24 +01:00
Simisays
d4f7c7fa0c update 2023-03-06 18:38:33 +01:00
tool4ever
f96cae737c Update reins_of_the_vinesteed.txt 2023-03-06 16:10:42 +01:00
Paul Hammerton
00da94a82e Merge pull request #2624 from paulsnoops/fix_format
Fix incorrect format name
2023-03-06 08:33:53 +00:00
paulsnoops
8b0ddf1478 Fix incorrect format name 2023-03-06 08:30:12 +00:00
Anthony Calosa
878736fb4e Merge pull request #2623 from kevlahnota/newmaster2
update CardImageRenderer
2023-03-06 15:18:51 +08:00
Anthony Calosa
48cf0bd3ad Merge pull request #2621 from MikeS-NZ/forgenew_mom
YONE: Contagion Dispenser + Skullpiercer Gnat
2023-03-06 15:17:43 +08:00
Anthony Calosa
f662891ad6 Merge pull request #2619 from Simisays/CLEANUP
Adventure. Cleanup of three dungeons
2023-03-06 15:16:03 +08:00
Anthony Calosa
9111928876 Merge pull request #2611 from tool4ever/statictrig
Fix static trigger messing up LTB trigger
2023-03-06 15:14:42 +08:00
Anthony Calosa
552c9ee91b update CardImageRenderer
- use artifact frame for artifact cards (non PW)
- add basic outline color
2023-03-06 15:12:13 +08:00
Hans Mackowiak
c53ed9d46b Merge pull request #2622 from Card-Forge/tehdiplomat-patch-1
Update curse_of_the_pierced_heart.txt
2023-03-06 06:48:16 +01:00
Hans Mackowiak
61afab9b55 ~ fix Oracles 2023-03-06 06:45:13 +01:00
Chris H
f8f3060e2f Update curse_of_the_pierced_heart.txt 2023-03-05 22:56:51 -05:00
Suthro
e96211295c YONE: Contagion Dispenser + Skullpiercer Gnat
YMOM: Added scripts for alchemy All Will Be One cards Contagion Dispenser and Skullpiercer Gnat.

- Contagion Dispenser
- Skullpiercer Gnat
2023-03-05 18:38:41 -06:00
Simisays
6168199cc4 cleanup 2023-03-05 21:41:27 +01:00
tool4ever
c0d729cdda Fix refund timing (#2618) 2023-03-05 13:26:17 +00:00
Anthony Calosa
516dca316c Merge pull request #2617 from kevlahnota/newmaster2
update ArenaScene moveby action
2023-03-05 21:02:52 +08:00
Anthony Calosa
96f82ac9d8 update ArenaScene moveby action 2023-03-05 20:52:06 +08:00
Anthony Calosa
5e72245d30 Update pom.xml
use textratypist 0.7.8 release
2023-03-05 20:17:50 +08:00
Paul Hammerton
9f3f70fc2a Merge pull request #2593 from Simisays/YONE4
[[Squash Merge]] YONE 6 cards
2023-03-05 11:10:52 +00:00
Simisays
59dc295af1 Update garruk_boss_effect_phasetwo.txt 2023-03-05 11:17:06 +01:00
Simisays
aca74dc703 Update MakeCardEffect.java 2023-03-05 10:44:51 +01:00
Simisays
93e216859d Update MakeCardEffect.java 2023-03-05 10:43:50 +01:00
Simisays
2e2c139f3e Update MakeCardEffect.java 2023-03-05 10:42:51 +01:00
Simisays
0866c224e6 Update march_toward_perfection.txt 2023-03-05 09:53:33 +01:00
Simisays
2ca9aaeabb Update march_toward_perfection.txt 2023-03-05 09:43:25 +01:00
Anthony Calosa
bd6bdb09e7 Merge pull request #2616 from kevlahnota/newmaster2
enable some particle effects
2023-03-05 15:59:22 +08:00
Anthony Calosa
be07d3fec3 update blood 2023-03-05 15:59:02 +08:00
Anthony Calosa
42a2942812 enable some particle effects 2023-03-05 15:52:56 +08:00
Anthony Calosa
c7e54d7332 Merge pull request #2615 from kevlahnota/newmaster2
move textrafonts to Assets
2023-03-05 15:06:57 +08:00
Anthony Calosa
8eb09b9554 move textrafonts to Assets
- add long dash to default chars
2023-03-05 14:46:43 +08:00
Anthony Calosa
09af6c9b0f Merge pull request #2613 from kevlahnota/newmaster2
update textratypist fix
2023-03-05 08:33:22 +08:00
Anthony Calosa
0d7950d6f3 update textratypist fix 2023-03-05 07:47:41 +08:00
Anthony Calosa
3e41dcbb2c Merge pull request #2608 from Simisays/farm
New Farm Dungeon + new mobs
2023-03-05 05:39:12 +08:00
Simisays
2340a9029b update 2023-03-04 21:00:47 +01:00
Simisays
a1997d7fb7 colision fix 2023-03-04 20:57:59 +01:00
Simisays
14f8847028 fix bull 2023-03-04 20:44:00 +01:00
Simisays
ee1f080f48 update 2023-03-04 20:40:31 +01:00
Anthony Calosa
5e3e8df561 Merge pull request #2612 from kevlahnota/newmaster2
update ArenaScene
2023-03-05 02:58:05 +08:00
Anthony Calosa
908a55e917 update ArenaScene
- support portrait mode for arena battles
- update textratypist to fix text rendering
2023-03-05 02:51:01 +08:00
Simisays
f55db108f3 cleanup 2023-03-04 19:14:57 +01:00
Simisays
e52776636f Update MakeCardEffect.java 2023-03-04 19:12:53 +01:00
TabletopGeneral
bbc398b5a5 Merge branch 'Card-Forge:master' into master 2023-03-04 11:56:49 -05:00
Simisays
0a48912c4d update 2023-03-04 16:21:22 +01:00
Simisays
e4434440ee update 2023-03-04 15:45:21 +01:00
tool4EvEr
0657bdc243 Fix static trigger messing up LTB trigger 2023-03-04 15:10:03 +01:00
Simisays
13c15fc5de update 2023-03-04 10:12:49 +01:00
Simisays
963d8f4251 Merge branch 'Card-Forge:master' into farm 2023-03-03 13:36:24 +01:00
Simisays
37fd698c79 update 2023-03-03 13:33:13 +01:00
Simisays
82d83558c3 Merge branch 'Card-Forge:master' into YONE4 2023-03-03 12:54:21 +01:00
Simisays
76d78c5b99 update 2023-03-03 11:22:34 +01:00
Anthony Calosa
96c94ffa95 Merge pull request #2605 from tool4ever/handlePaid
Fix Revival Experiment via handlePaid cleanup
2023-03-03 06:27:51 +08:00
Anthony Calosa
3094d2ae45 Merge pull request #2607 from tool4ever/makecard
Fix for Goblin Morale Sergeant
2023-03-03 06:27:20 +08:00
Simisays
fca95d5ade Merge branch 'farm' of https://github.com/Simisays/forge into farm 2023-03-02 22:49:52 +01:00
Simisays
547f3c0770 update 2023-03-02 22:49:49 +01:00
Simisays
e389c683dc Merge branch 'Card-Forge:master' into farm 2023-03-02 22:49:36 +01:00
tool4ever
dd511e581a Update bess_soul_nourisher.txt 2023-03-02 18:59:01 +00:00
tool4EvEr
653207e096 Fix for Goblin Morale Sergeant 2023-03-02 19:08:05 +01:00
Simisays
30036cfb73 Update sheoldreds_assimilator.txt 2023-03-02 18:53:40 +01:00
Simisays
c73ecff20e update 2023-03-02 18:51:22 +01:00
tool4ever
e887c8f3f3 Fix NPE (#2606)
* Fix NPE

* Fix incorrect values being reused
2023-03-02 17:30:12 +00:00
Simisays
789824af6e update 2023-03-02 18:20:28 +01:00
Simisays
f2ce02b520 Update sheoldreds_assimilator.txt 2023-03-02 15:30:16 +01:00
Simisays
00a6090cd2 Update surgical_metamorph.txt 2023-03-02 14:06:31 +01:00
TRT
489deb67aa Fix Revival Experiment via handlePaid cleanup 2023-03-02 13:18:36 +01:00
Simisays
1c7fa7db82 Merge branch 'Card-Forge:master' into YONE4 2023-03-02 10:43:33 +01:00
Anthony Calosa
43ea20c0b3 Merge pull request #2604 from kevlahnota/newmaster2
update sprite exposures
2023-03-02 17:35:00 +08:00
Anthony Calosa
6b042bf5d2 Merge pull request #2603 from Card-Forge/tool4ever-patch-1
Update maven.config
2023-03-02 17:13:54 +08:00
Simisays
aa7f1716a3 Update tezzerets_reckoning.txt 2023-03-02 10:04:20 +01:00
Simisays
db7ae5a7cf Update surgical_metamorph.txt 2023-03-02 10:03:56 +01:00
Simisays
93dd1e947f Update surgical_metamorph.txt 2023-03-02 09:56:08 +01:00
Simisays
d5ff381ffa Create tezzerets_reckoning.txt 2023-03-02 09:54:54 +01:00
Simisays
20bf732b9e Rename Add to deck_surgical_metamorph.txt to surgical_metamorph.txt 2023-03-02 09:47:09 +01:00
Anthony Calosa
d88e3b2cf0 update sprite exposures 2023-03-02 16:43:38 +08:00
Simisays
d7d3a3b86b Create sheoldreds_assimilator.txt 2023-03-02 09:28:48 +01:00
Simisays
952ab06079 Create Add to deck_surgical_metamorph.txt 2023-03-02 09:14:24 +01:00
Simisays
f487605c17 Merge branch 'Card-Forge:master' into YONE4 2023-03-02 09:08:16 +01:00
Simisays
bb54971bbd Update seething_skitter_priest.txt 2023-03-02 08:52:26 +01:00
tool4ever
f1df22e256 Update maven.config
Fix maven 3.9.0
2023-03-02 08:01:50 +01:00
Anthony Calosa
309ab91232 Merge pull request #2602 from kevlahnota/newmaster2
update bounding box
2023-03-02 14:35:37 +08:00
Anthony Calosa
1295297d41 Merge branch 'master' into newmaster2 2023-03-02 14:06:19 +08:00
Anthony Calosa
2ba7d0b1ff update fox sprite 2023-03-02 14:06:05 +08:00
Anthony Calosa
0424093cc7 update bounding box
- should fix collision for enemy with custom scale
- update ooze sprite size to utilize 32x32
2023-03-02 13:10:49 +08:00
Paul Hammerton
ead5637bed Merge pull request #2601 from paulsnoops/net_decks
Add more net decks by gös
2023-03-01 22:48:25 +00:00
paulsnoops
add5c225ce Add more net decks by gös 2023-03-01 22:44:54 +00:00
Simisays
448891e68f Update seething_skitter_priest.txt 2023-03-01 22:20:58 +01:00
Anthony Calosa
e7b7556589 Merge pull request #2600 from kevlahnota/newmaster2
update FSkin to use default hd texture if applicable
2023-03-02 03:45:46 +08:00
Simisays
cfdfaedff1 update 2023-03-01 20:02:04 +01:00
Anthony Calosa
d1ce3ba25d update FSkin to use default hd texture if applicable 2023-03-02 02:44:58 +08:00
tool4ever
b6d53ac5ac Fix Meandering Towershell (#2599) 2023-03-01 17:35:19 +01:00
Anthony Calosa
08a242c1b8 Merge pull request #2596 from Simisays/XIRABIS
Tileset corrections
2023-03-01 22:26:36 +08:00
Simisays
5616bb486b update 2023-03-01 12:30:51 +01:00
Simisays
0b0bfacfe8 Update darksteel_hydra.txt 2023-03-01 11:43:42 +01:00
Simisays
6513e76e87 Merge branch 'Card-Forge:master' into YONE4 2023-03-01 11:39:48 +01:00
Anthony Calosa
87c09d203f Merge pull request #2588 from Simisays/XIRA
Tileset update for Adventure
2023-03-01 18:35:01 +08:00
Simisays
4dfbb4bc88 Update seething_skitter_priest.txt 2023-03-01 11:32:07 +01:00
Simisays
ec543794ec Update seething_skitter_priest.txt 2023-03-01 11:31:46 +01:00
Simisays
9f40a770c9 Update phyrexian_scrapyard.txt 2023-03-01 11:29:37 +01:00
Paul Hammerton
91ba4afe96 Merge pull request #2595 from paulsnoops/name_fix
Name fix for Ghalma the Shaper
2023-03-01 09:18:22 +00:00
paulsnoops
dedaa2e7ae Name fix for Ghalma the Shaper 2023-03-01 09:07:56 +00:00
tool4ever
048543f74e Tweak AI to skip useless Enlisting (#2594) 2023-03-01 10:03:47 +01:00
Simisays
6c01b3b886 update 2023-03-01 09:37:09 +01:00
Paul Hammerton
f7303b0ab2 Merge pull request #2581 from Simisays/YONE3
YONE 6 cards
2023-03-01 08:24:41 +00:00
Simisays
3cdf2a5114 Update ichor_aberration.txt 2023-03-01 09:19:18 +01:00
Simisays
353009c036 Update hexgold_sledge.txt 2023-03-01 09:18:53 +01:00
Paul Hammerton
9eb24e4db1 Merge pull request #2592 from Card-Forge/update-mobile-version
Alpha version didn't update with desktop releases
2023-03-01 07:52:25 +00:00
friarsol
a943c1c035 Alpha version didn't update with desktop releases 2023-02-28 22:18:29 -05:00
tool4EvEr
9c90b19c82 Fix Reverse Polarity 2023-03-01 00:05:03 +01:00
tool4EvEr
29522de5ae Fix Oblivion Ring 2023-03-01 00:05:03 +01:00
tool4EvEr
11ef4dd2f6 Clean up 2023-03-01 00:05:03 +01:00
Simisays
5e9b0f5048 Merge branch 'Card-Forge:master' into YONE3 2023-02-28 22:30:06 +01:00
Simisays
5737c40d8e update 2023-02-28 21:27:20 +01:00
Northmoc
2c4f5e9a7e magmatic_scorchwing.txt phyresis_roach.txt (#2589)
* magmatic_scorchwing.txt phyresis_roach.txt

* fix magmatic_scorchwing.txt

* phyresis_roach.txt organize better

* fix missing 'Valid'
2023-02-28 22:55:15 +03:00
Simisays
91be5e58bf Update ghalma_the_shaper.txt 2023-02-28 20:11:40 +01:00
Simisays
f067bdbc12 Update jaces_signature_hoodie.txt 2023-02-28 17:40:47 +01:00
Simisays
b2edbb6b3f Merge branch 'Card-Forge:master' into XIRA 2023-02-28 16:08:24 +01:00
Simisays
c89c6ce6a3 update 2023-02-28 16:06:46 +01:00
tool4ever
1b655458e7 Fix remembering players leading to crash for AI with Shifting Shadow (#2587)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-02-28 13:02:54 +03:00
Anthony Calosa
0997762008 Merge pull request #2586 from kevlahnota/newmaster2
minor adjustments
2023-02-28 17:37:21 +08:00
Simisays
8c30d318ae Update ichor_aberration.txt 2023-02-28 10:36:31 +01:00
Anthony Calosa
0cc5677094 minor adjustments 2023-02-28 13:30:22 +08:00
Chris H
621a08252e Update zeriam_golden_wind.txt (#2585) 2023-02-28 07:48:26 +03:00
tool4ever
8482e5a4c8 Improve applying attack requirements in multiplayer (#2582)
* Fix bad player position

* Recover clean up

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-02-28 07:48:08 +03:00
Paul Hammerton
5dcd91843b Merge pull request #2584 from paulsnoops/update_yone
YONE artist fix
2023-02-28 02:08:25 +00:00
paulsnoops
86a77d3c20 YONE artist fix 2023-02-28 02:03:23 +00:00
TabletopGeneral
2ede795f9b Merge branch 'Card-Forge:master' into master 2023-02-27 18:22:48 -05:00
Simisays
c8efd0164e update 2023-02-27 21:11:00 +01:00
Simisays
510b963d5a Update norns_fetchling.txt 2023-02-27 18:59:35 +01:00
Simisays
60557a2d2d Update kembas_outfitter.txt 2023-02-27 18:57:37 +01:00
Simisays
38b2508493 Update ichor_aberration.txt 2023-02-27 18:56:36 +01:00
Simisays
27be3d2cc4 Update hexgold_sledge.txt 2023-02-27 18:55:37 +01:00
Simisays
f8f1afbf53 update 2023-02-27 18:53:44 +01:00
Anthony Calosa
a11da1c7fb Merge pull request #2579 from kevlahnota/newmaster2
update item description for starting cards
2023-02-27 19:59:58 +08:00
Anthony Calosa
d92302f0cd update item description for starting cards 2023-02-27 19:54:39 +08:00
Anthony Calosa
7003e1c090 Add files via upload
update card art
2023-02-27 19:08:58 +08:00
Anthony Calosa
0e46b9c390 Merge pull request #2578 from kevlahnota/newmaster2
Update custom card pics, NPE prevention on cardart
2023-02-27 18:06:14 +08:00
Anthony Calosa
d71b8d3109 Merge pull request #2577 from paulsnoops/gos_decks
Add some net decks by gös
2023-02-27 18:02:39 +08:00
paulsnoops
1489c386fc Add some net decks by gös 2023-02-27 09:56:59 +00:00
Anthony Calosa
86c546bd88 Update custom card pics, NPE prevention on cardart 2023-02-27 17:56:07 +08:00
tool4ever
6153eb61a2 Kura fix (#2576)
Co-authored-by: TRT <>
2023-02-27 11:57:51 +03:00
Anthony Calosa
b60075c64f Merge pull request #2575 from cicoa/work
Updated golden_argosy.txt
2023-02-27 14:12:20 +08:00
cicoa
1c29d2f162 Updated golden_argosy.txt 2023-02-27 12:43:19 +08:00
Anthony Calosa
b3606feb3f Merge pull request #155 from Agetian/ai-countersput-shouldpump
CountersPutAI: shouldPumpCard is too restrictive for instant speed PutCounter
2023-02-27 12:31:52 +08:00
Northmoc
1d11638331 New arena cards and one tweak (#2568)
* darksteel_hydra.txt glistening_extractor.txt

* gyox_brutal_carnivora.txt

* agent_of_raffine.txt tidy

* refactor
2023-02-27 06:07:59 +03:00
Simisays
b0b0b951c0 [[SQUASH MERGE]] Teferi,Nahiri and Garruk dungeon + update other four dungeons (#2526)
* update

* update

* Adventure updates

Adventure items can now spawn cards in command zone via startBattleWithCardInCommandZone - Updated Mana Shard based items to do so.

Added new map objects:  Mana Shard rewards, generic collision zone, intended for use in upcoming map updates.

Fixed mismatched wall tile in green castle.

* update

* Update teferis_staff.txt

* update

* update

* update

* update

* update

* nahiri update

map needs more work

* update

* update

* update

* update

* update

* update

* update

* update

* Update garruk_boss_effect_phasetwo.txt

* card update

* update

* update

* update

* update

* update

---------

Co-authored-by: jjayers99 <56438137+jjayers99@users.noreply.github.com>
2023-02-27 06:07:49 +03:00
Anthony Calosa
41afe9e074 Merge pull request #2574 from kevlahnota/newmaster2
update fix for bleeding
2023-02-27 09:37:48 +08:00
Anthony Calosa
fbfde2be91 update fix for bleeding 2023-02-27 09:02:59 +08:00
tool4EvEr
ebd0c64687 Clean up 2023-02-26 23:35:30 +01:00
tool4EvEr
1fa03b09b7 Some counter checks 2023-02-26 22:07:40 +01:00
tool4EvEr
fd2d425d23 Logic tweak 2023-02-26 18:29:45 +01:00
TabletopGeneral
317dc6e4b8 Merge branch 'Card-Forge:master' into master 2023-02-26 10:58:13 -05:00
Paul Hammerton
5852d65b70 Merge pull request #2573 from paulsnoops/small_fixes
Some small card QoL fixes
2023-02-26 13:15:06 +00:00
paulsnoops
f81c8b62b0 Some small card QoL fixes 2023-02-26 13:11:08 +00:00
Simisays
d3fb521390 YONE 5 cards (#2561)
* update

* Update arek_false_goldwarden.txt

* update

* update

* Update bladehold_cleaver.txt

* Update arek_false_goldwarden.txt
2023-02-26 13:46:36 +03:00
Paul Hammerton
b03564fe41 Merge pull request #2572 from paulsnoops/yone_formats
Formats update: Add YONE
2023-02-26 10:07:40 +00:00
Anthony Calosa
57bc988e0a Merge pull request #2570 from tool4ever/NPEfixes
Fix 4 NPE from Sentry
2023-02-26 18:05:01 +08:00
paulsnoops
d4bea5aa5c Formats update: Add YONE 2023-02-26 10:00:07 +00:00
Michael Kamensky
459416630b - Don't limit the AI to shouldPumpCard logic for instants when deciding whether to put a +1/+1 counter on own card or not. 2023-02-26 10:58:17 +01:00
Anthony Calosa
1fca9debfd Merge pull request #2571 from kevlahnota/newmaster2
Update Adventure custom card pics
2023-02-26 17:57:33 +08:00
Anthony Calosa
4d12e7e52b .. 2023-02-26 17:51:01 +08:00
tool4EvEr
08ae04ab8b Fix Silver Scrutiny 2023-02-26 10:17:47 +01:00
tool4EvEr
89f4d8ff67 Fix Zephyrim 2023-02-26 10:15:05 +01:00
tool4EvEr
7720844e48 Fix Cunning Giant NPE 2023-02-26 10:12:56 +01:00
tool4EvEr
3fdc788f33 Fix Detention Sphere 2023-02-26 10:12:17 +01:00
TabletopGeneral
7939df234f Adventure updates (#2493)
* Adventure updates

Adventure items can now spawn cards in command zone via startBattleWithCardInCommandZone - Updated Mana Shard based items to do so.

Added new map objects:  Mana Shard rewards, generic collision zone, intended for use in upcoming map updates.

Fixed mismatched wall tile in green castle.

* Removing unused import

* Updating language / structure of Adventure custom cards.

* Updating language / structure of Adventure custom cards.
2023-02-26 08:23:43 +03:00
Anthony Calosa
5ae313c7f8 Merge pull request #2569 from kevlahnota/newmaster2
update Manacost render for Split Cards
2023-02-26 12:42:20 +08:00
Anthony Calosa
3c5f363b0e update Manacost render for Split Cards 2023-02-26 11:55:42 +08:00
jjayers99
801100e150 Updating language / structure of Adventure custom cards. 2023-02-25 21:27:07 -05:00
jjayers99
012545bcb7 Updating language / structure of Adventure custom cards. 2023-02-25 21:04:50 -05:00
Hans Mackowiak
25c6b05c59 Update chandra_hopes_beacon.txt 2023-02-26 02:45:46 +01:00
TabletopGeneral
8bf4d34d88 Removing unused import 2023-02-25 20:17:05 -05:00
Anthony Calosa
9f29c5bbec Merge pull request #2567 from kevlahnota/newmaster2
update RewardActor, SpellSmithScene, InventoryScene
2023-02-26 08:43:42 +08:00
Anthony Calosa
3c6fb8fff2 update itemDescription 2023-02-26 08:22:53 +08:00
Anthony Calosa
0663c43599 update Gold sprite space 2023-02-26 08:21:15 +08:00
Anthony Calosa
04c769a163 update RewardActor, SpellSmithScene
- silently download back image along with the front image. fixes #2551
- update SpellSmithScene label
- add an expiremental fix for texture bleeding. some weird/tall aspect ratio will still produce some bleeding.
2023-02-26 08:08:48 +08:00
Anthony Calosa
2212094417 Merge pull request #2566 from MikeS-NZ/forgenew_mom
MOM: Heliod, the Radiant Dawn + 3 cards
2023-02-26 07:13:27 +08:00
Mike S
7ad0194247 Update moment_of_truth.txt 2023-02-25 16:18:48 -06:00
Suthro
388a08d5fb MOM: Heliod, the Radiant Dawn + 3 cards
MOM: Added card scripts for the following cards:

- Heliod, the Radiant Dawn // Heliod, the Warped Eclipse
- Breach the Multiverse
- Chandra, Hope's Beacon
- Moment of Truth
2023-02-25 12:48:44 -06:00
tool4ever
6c168b1a4a Improve payment test on hybrid shards (#2562)
* Improve payment test on hybrid shards

* Clean up

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-02-25 15:53:05 +03:00
tool4ever
eab63b52bd Update ajani_sleeper_agent.txt 2023-02-25 10:05:20 +00:00
Paul Hammerton
fe2d93b240 Merge pull request #2560 from paulsnoops/yone_scd
Edition updates: SCD, YONE
2023-02-25 09:12:26 +00:00
paulsnoops
a695fa92d8 Edition updates: SCD, YONE 2023-02-25 09:00:27 +00:00
Chris H
394f47490d Update drowner_of_secrets.txt (#2557) 2023-02-25 07:45:21 +03:00
Anthony Calosa
b0a91845df Merge pull request #2553 from Agetian/master
Improve PumpAi for cards like Pearlspear Courier
2023-02-25 06:10:45 +08:00
Anthony Calosa
bf33084daa Merge pull request #2554 from tool4ever/fixes24
Some fixes
2023-02-25 06:09:48 +08:00
Anthony Calosa
14f09309ed Merge pull request #2555 from Card-Forge/fix-jawbone-duelist
Update jawbone_duelist.txt
2023-02-25 06:06:53 +08:00
Chris H
fb4fdba74c Update jawbone_duelist.txt 2023-02-24 14:24:23 -05:00
tool4EvEr
d6e479705f Clean up 2023-02-24 17:39:04 +01:00
Michael Kamensky
0a15ed4260 - Make the check sturdier. 2023-02-24 19:21:18 +03:00
Michael Kamensky
f181166e74 - Improve PumpAi for cards like Pearlspear Courier. 2023-02-24 19:19:08 +03:00
tool4EvEr
2a88ac8402 Fix logic 2023-02-24 14:17:25 +01:00
Paul Hammerton
f6dbb9d2d9 Merge pull request #2542 from Simisays/YONE
YONE 3 cards
2023-02-24 08:53:48 +00:00
Anthony Calosa
3d07368b27 Update LibGDXImageFetcher.java
- fix target filename to correct displayed images using rounded borders on mobile GUI (Scryfall card images have borders unlike the old ".full" MWS image implementation)
2023-02-24 14:58:21 +08:00
Anthony Calosa
f15b41ba0f Merge pull request #2549 from kevlahnota/newmaster2
update Icons
2023-02-24 14:44:09 +08:00
Anthony Calosa
4d4a24f91a Merge pull request #2548 from Card-Forge/IfReachStatic
Dragon Hunter as StaticAbility instead of fake Keyword
2023-02-24 14:43:52 +08:00
Anthony Calosa
32b4e14843 update Icons
- AI Icon and Movement Icon
2023-02-24 14:33:50 +08:00
Hans Mackowiak
6838508018 Dragon Hunter as StaticAbility instead of fake Keyword 2023-02-24 07:14:39 +01:00
Anthony Calosa
ed2be5db81 Merge pull request #2546 from kevlahnota/newmaster2
update NewGameScene, Inventory translations
2023-02-24 12:38:19 +08:00
Anthony Calosa
4147bb6ea3 Merge branch 'master' into newmaster2 2023-02-24 12:37:08 +08:00
Anthony Calosa
ba44e714b7 update map json 2023-02-24 12:20:30 +08:00
Anthony Calosa
10833be84e update Inventory translation 2023-02-24 12:12:27 +08:00
Anthony Calosa
1bc9f77cdb update NewGameScene translations 2023-02-24 10:48:09 +08:00
Paul Hammerton
041a48ab24 Merge pull request #2545 from churrufli/master
Net Decks Archive Updates
2023-02-23 21:00:43 +00:00
Simisays
65f0214194 Update phyrexian_harvester.txt 2023-02-23 19:44:19 +01:00
Simisays
d31f1d8f8e Update phyrexian_harvester.txt 2023-02-23 19:40:19 +01:00
Simisays
6e64d0cb94 Update phyrexian_harvester.txt 2023-02-23 18:27:04 +01:00
Simisays
8cffa2bc49 Update phyrexian_harvester.txt 2023-02-23 18:02:50 +01:00
Churrufli
b291677962 Net Decks Archive Updates 2023-02-23 16:26:20 +01:00
Anthony Calosa
d500bc32a4 Merge pull request #2541 from kevlahnota/newmaster2
enable pixelmana atlas, update spellsmith reset
2023-02-23 21:20:32 +08:00
Anthony Calosa
f82bd2026d unused import 2023-02-23 21:19:19 +08:00
Anthony Calosa
39e8837887 update adventure deckaward 2023-02-23 21:16:33 +08:00
Simisays
8d94d69d28 Update spawning_pod.txt 2023-02-23 12:23:08 +01:00
Paul Hammerton
3f9debda18 Merge pull request #2543 from JohnWilliams77/patch-79
Update Secret Lair Drop Series.txt
2023-02-23 10:44:10 +00:00
JohnWilliams77
9acb2f735b Update Secret Lair Drop Series.txt 2023-02-23 09:41:54 +00:00
Simisays
df5cfa25f1 Update spawning_pod.txt 2023-02-23 10:38:38 +01:00
Simisays
31614d5a83 Update spawning_pod.txt 2023-02-23 10:36:04 +01:00
Simisays
4eff45d62a Update spawning_pod.txt 2023-02-23 10:25:44 +01:00
Simisays
31cc287578 Update phyrexian_harvester.txt 2023-02-23 10:24:26 +01:00
cicoa
25e580d152 Added puzzle PS_ONE2 (#2539) 2023-02-23 12:23:20 +03:00
Simisays
fff7a4932f update 2023-02-23 10:22:31 +01:00
Hans Mackowiak
91a10c6b0b GameAction: cleanup card on the battlefield gaining Keyword from castSA (#2540)
* GameAction: cleanup card on the battlefield gaining Keyword from castSA

* Update GameAction.java

only non intrinsic
2023-02-23 12:08:10 +03:00
Anthony Calosa
e4dae453cd update SpellSmithScene reset 2023-02-23 16:48:03 +08:00
Anthony Calosa
2198cb3174 Merge pull request #2538 from The-Wolverine28/patch-8
Update and rename The Arena Cube December 13 - January 1.draft to The…
2023-02-23 15:55:15 +08:00
Anthony Calosa
4aa39853d5 Merge pull request #2537 from The-Wolverine28/patch-7
Update and rename The Arena Cube December 13 - January 1.dck to The A…
2023-02-23 15:54:59 +08:00
Anthony Calosa
52271e151a enable pixelmana atlas 2023-02-23 15:33:32 +08:00
The-Wolverine28
c84201eaac Update and rename The Arena Cube December 13 - January 1.draft to The Arena Cube.draft 2023-02-22 23:25:14 -05:00
The-Wolverine28
b84dd6a205 Update and rename The Arena Cube December 13 - January 1.dck to The Arena Cube.dck 2023-02-22 23:24:11 -05:00
tool4ever
201ef72585 ValidAfterStack for MayPlay (#2527)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-02-23 06:36:33 +03:00
Anthony Calosa
92b40a1b78 Merge pull request #2535 from The-Wolverine28/patch-6
Rename Pioneer_Cube.draft to Pioneer Cube.draft
2023-02-23 01:34:49 +08:00
Anthony Calosa
7dfbcd545f Merge pull request #2534 from The-Wolverine28/patch-5
Rename The_Arena_Cube_December13_-_January1.draft to The Arena Cube D…
2023-02-23 01:34:25 +08:00
Anthony Calosa
c5c2819b10 Merge pull request #2533 from The-Wolverine28/patch-4
Update and rename MTGArena_Chromatic_Cube_June_24.draft to MTG Arena …
2023-02-23 01:33:54 +08:00
Anthony Calosa
0702bcb663 Merge pull request #2532 from The-Wolverine28/patch-3
Rename The_Arena_Cube_December13_-_January1.dck to The Arena Cube Dec…
2023-02-23 01:33:10 +08:00
Anthony Calosa
1d0ad62792 Merge pull request #2531 from The-Wolverine28/patch-2
Rename Pioneer_Cube.dck to Pioneer Cube.dck
2023-02-23 01:32:41 +08:00
Anthony Calosa
d1ebcffe8e Merge pull request #2530 from The-Wolverine28/patch-1
Rename MTGArena_Chromatic_Cube_June_24.dck to MTG Arena Chromatic Cub…
2023-02-23 01:32:16 +08:00
tool4ever
e9dfbf3c66 Fix NPE (#2536)
* Fix NPE
2023-02-22 16:45:26 +00:00
The-Wolverine28
fa52283330 Rename Pioneer_Cube.draft to Pioneer Cube.draft 2023-02-22 11:21:42 -05:00
The-Wolverine28
397f772270 Rename The_Arena_Cube_December13_-_January1.draft to The Arena Cube December 13 - January 1.draft 2023-02-22 11:21:09 -05:00
The-Wolverine28
017a25bbe9 Update and rename MTGArena_Chromatic_Cube_June_24.draft to MTG Arena Chromatic Cube June 24.draft 2023-02-22 11:20:07 -05:00
The-Wolverine28
e74f49e18d Rename The_Arena_Cube_December13_-_January1.dck to The Arena Cube December 13 - January 1.dck 2023-02-22 11:18:48 -05:00
The-Wolverine28
155af916cc Rename Pioneer_Cube.dck to Pioneer Cube.dck 2023-02-22 11:17:04 -05:00
The-Wolverine28
f68edb3dd5 Rename MTGArena_Chromatic_Cube_June_24.dck to MTG Arena Chromatic Cube June 24.dck 2023-02-22 11:15:30 -05:00
Anthony Calosa
1e7f658813 Merge pull request #2529 from kevlahnota/newmaster2
update SpellSmithScene selectbox
2023-02-22 06:47:59 +08:00
Anthony Calosa
2c186cd454 Merge branch 'master' into newmaster2 2023-02-22 06:40:20 +08:00
Anthony Calosa
f664b001a2 update SpellSmithScene selectbox 2023-02-22 06:38:01 +08:00
Paul Hammerton
f1c63e0d2e Merge pull request #2522 from Simisays/MOCMAT
4 MOC 1 MAT cards
2023-02-21 21:21:01 +00:00
Anthony Calosa
dec89cabee Merge pull request #2524 from Northmoc/defined+target
Allow Defined and Targets to coexist on one effect
2023-02-22 05:08:34 +08:00
Anthony Calosa
66db85b1bc update new cube and draft 2023-02-21 21:17:07 +01:00
Anthony Calosa
3c400e0c44 update 2023-02-21 21:17:07 +01:00
Anthony Calosa
121e079c20 unused import 2023-02-21 21:17:07 +01:00
Anthony Calosa
c02447ece2 LandEvaluator for AI 2023-02-21 21:17:07 +01:00
Anthony Calosa
b38a6edbbb Merge pull request #2523 from tool4ever/disturbfix
Disturb fix
2023-02-22 03:54:14 +08:00
Anthony Calosa
ba27d79ad9 update new cube and draft 2023-02-22 03:43:22 +08:00
Anthony Calosa
9d91f404d2 update 2023-02-22 03:35:33 +08:00
Simisays
93ae6e8641 Update slimefoot_and_squee.txt 2023-02-21 20:08:13 +01:00
Paul Hammerton
13cb7a7f3e Merge pull request #2525 from paulsnoops/new_editions
New editions: CMM, SIR, YONE
2023-02-21 18:46:30 +00:00
Simisays
33853b011c Update slimefoot_and_squee.txt 2023-02-21 19:41:32 +01:00
paulsnoops
5f64f05271 New editions: CMM, SIR, YONE 2023-02-21 18:40:55 +00:00
Simisays
0e4689d69d update 2023-02-21 19:39:17 +01:00
Northmoc
5fde87c84a ChangeZoneEffect.changeHiddenOriginStackDescription improve 2023-02-21 13:20:52 -05:00
Northmoc
597ab36696 SpellAbilityEffect.getCards support "ThisDefinedAndTgts" 2023-02-21 13:20:26 -05:00
TRT
d350c242e0 Disturb fix 2023-02-21 18:31:03 +01:00
Simisays
a7200740af Update towashi.txt 2023-02-21 18:18:11 +01:00
Simisays
8e78143b3e update 2023-02-21 18:14:46 +01:00
tool4ever
72289f7646 Update ghirapur_orrery.txt 2023-02-21 17:57:37 +01:00
Anthony Calosa
eaf8348863 unused import 2023-02-21 21:25:19 +08:00
Paul Hammerton
cda7c5d41c Merge pull request #2520 from JohnWilliams77/patch-78
Update Secret Lair Drop Series.txt
2023-02-21 13:23:08 +00:00
Anthony Calosa
e2c3908df6 LandEvaluator for AI 2023-02-21 21:21:39 +08:00
tool4ever
a0f7b6c4c1 Update two scripts (#2518)
Co-authored-by: TRT <>
2023-02-21 15:55:23 +03:00
Simisays
0833c5d302 Add files via upload 2023-02-21 13:40:37 +01:00
Anthony Calosa
e11bc5d460 Update token-images.txt 2023-02-21 20:26:14 +08:00
JohnWilliams77
e3bd1af804 Update Secret Lair Drop Series.txt 2023-02-21 11:25:23 +00:00
Anthony Calosa
5852942e54 Merge pull request #2508 from tool4ever/omnath
New Omnath and support
2023-02-21 16:29:14 +08:00
Anthony Calosa
dc80a3cec6 Merge pull request #2517 from Simisays/JUMPSTART-FIX
Fix ONE Jumpstart
2023-02-21 16:28:39 +08:00
Simisays
6e750c22fc Update printsheets.txt 2023-02-21 09:23:33 +01:00
Anthony Calosa
b9fc0ea8f9 add new Cube (TheWolverine) 2023-02-21 15:50:24 +08:00
Anthony Calosa
f618e325da add new draft (TheWolverine) 2023-02-21 15:49:33 +08:00
Anthony Calosa
3fe71b04fe Merge pull request #2509 from tool4ever/opal_titan
Fix color word usage
2023-02-21 15:23:10 +08:00
Anthony Calosa
9015bd95b1 Merge pull request #2516 from kevlahnota/newmaster2
patch crash for adventure starter decks generation
2023-02-21 15:14:57 +08:00
Anthony Calosa
2ac9b56dd8 patch crash for adventure starter decks generation 2023-02-21 15:03:53 +08:00
TRT
0a8a96c312 Conversion: use color words 2023-02-21 07:26:55 +01:00
Simisays
eccf726d0b MOM 5 cards (#2513) 2023-02-21 07:11:16 +01:00
GitHub Actions
de4feee3ef [maven-release-plugin] prepare for next development iteration 2023-02-20 23:36:34 -05:00
GitHub Actions
257895f019 [maven-release-plugin] prepare release forge-1.6.55 2023-02-20 23:36:34 -05:00
tool4EvEr
55009a21a9 Clean up 2023-02-20 20:19:04 +01:00
tool4EvEr
07bf3a18c9 Fix changedText not applied to SA 2023-02-20 19:15:32 +01:00
tool4EvEr
6c5436a69e XColor fixes 2023-02-20 15:59:53 +01:00
Michael Kuenzli
c64aa05564 Dross Skullbomb: Fix cost of activated ability (#2510) 2023-02-20 15:34:23 +01:00
tool4EvEr
57c6a338d8 Fix color word usage 2023-02-20 14:39:29 +01:00
Paul Hammerton
232e8c5e76 Merge pull request #2503 from MikeS-NZ/forge_mom
MOM: Jin-Gitaxias // The Great Synthesis
2023-02-20 12:20:21 +00:00
tool4EvEr
d9f5436277 Clean script 2023-02-20 13:10:10 +01:00
tool4EvEr
f82b9c2200 Use color word 2023-02-20 12:43:21 +01:00
tool4ever
7b07f3c5db Update jin_gitaxias_the_great_synthesis.txt 2023-02-20 11:32:17 +00:00
tool4EvEr
022f3e0cb1 New Omnath and support 2023-02-20 11:47:30 +01:00
Anthony Calosa
c72c04b6c2 add newline 2023-02-20 16:56:22 +08:00
Anthony Calosa
e6e7bfd01c Update malcator_purity_overseer.txt
- closes #2506
2023-02-20 15:27:53 +08:00
Anthony Calosa
cb042d3c56 Merge pull request #2505 from kevlahnota/newmaster2
cleanup pixmap
2023-02-20 14:45:07 +08:00
Anthony Calosa
0ca9039c29 cleanup pixmap 2023-02-20 14:09:35 +08:00
Anthony Calosa
32c01c709d Merge pull request #2490 from tool4ever/prowl
Prowl & support
2023-02-20 12:20:18 +08:00
Paul Hammerton
21637098d8 Merge pull request #2504 from paulsnoops/machine_editions
New & updated editions: MOM, MOC, MAT, MUL, P30A, SLD
2023-02-19 22:49:04 +00:00
paulsnoops
063bc80c81 New & updated editions: MOM, MOC, MAT, MUL, P30A, SLD 2023-02-19 22:42:49 +00:00
Anthony Calosa
9f71b9a9a6 update Pioneer & Standard LDA (Austinio) 2023-02-20 06:30:30 +08:00
Anthony Calosa
a07611167b Merge pull request #2497 from tool4ever/cleanup
Cleanup some remembering + Specialize fix
2023-02-20 06:22:01 +08:00
Anthony Calosa
8355fb8527 Merge pull request #2502 from Card-Forge/staticAbilityCleanup
StaticAbility: remove applyAbility
2023-02-20 06:20:00 +08:00
Mike S
41a1732de4 Update jin_gitaxias_the_great_synthesis.txt 2023-02-19 15:46:24 -06:00
Suthro
81d03788ed MOM: Jin-Gitaxias // The Great Synthesis
MOM: Add card script for new card Jin-Gitaxias // The Great Synthesis
2023-02-19 15:03:04 -06:00
Hans Mackowiak
2270ea2e10 StaticAbility: remove applyAbility 2023-02-19 09:28:54 +01:00
Anthony Calosa
1ce47d4482 Merge pull request #2500 from kevlahnota/newmaster2
fix label height
2023-02-19 15:39:07 +08:00
Anthony Calosa
f65292e862 fix label height 2023-02-19 15:35:38 +08:00
Anthony Calosa
6d914b5f99 Merge pull request #2499 from kevlahnota/newmaster2
fix flip button
2023-02-19 13:46:49 +08:00
Anthony Calosa
f1865d391b fix flip button
- fixes portrait mode cannot activate the flip button
2023-02-19 13:43:41 +08:00
Anthony Calosa
0e1cd62801 Merge pull request #2498 from kevlahnota/newmaster2
update RewardActor
2023-02-19 12:21:35 +08:00
Anthony Calosa
c502ca6a10 update 2023-02-19 12:17:07 +08:00
Anthony Calosa
50358b4471 - support showing sprite icons on tooltips via TextraLabel
- fix AdventureScreen gifAnimation height using tall screens
- preload back texture for hot swapping actor
2023-02-19 12:02:26 +08:00
tool4EvEr
c5f3c9021f Fix missing spells when bounced 2023-02-18 22:43:52 +01:00
tool4EvEr
d8e98789a2 Clean up 2023-02-18 17:02:50 +01:00
cicoa
98a3c7ff3e Fixed puzzle PS_J221 (#2496) 2023-02-18 18:07:35 +03:00
tool4EvEr
52208f1b04 Clean up 2023-02-18 13:01:15 +01:00
tool4EvEr
030ec3b33b Card cleanup 2023-02-18 12:53:37 +01:00
Anthony Calosa
c6130a8174 Merge pull request #2494 from kevlahnota/newmaster2
update GameHUD exitDungeonCallback
2023-02-18 18:06:26 +08:00
Anthony Calosa
612d6d4787 update GameHUD exitDungeonCallback
- move the exit dungeon code to hide dialog action sequence to fix the stuttering dialog animation
2023-02-18 17:51:19 +08:00
jjayers99
d8d18acfef Adventure updates
Adventure items can now spawn cards in command zone via startBattleWithCardInCommandZone - Updated Mana Shard based items to do so.

Added new map objects:  Mana Shard rewards, generic collision zone, intended for use in upcoming map updates.

Fixed mismatched wall tile in green castle.
2023-02-17 23:15:46 -05:00
Anthony Calosa
c12998a783 Merge pull request #2492 from kevlahnota/newmaster2
update custom card images
2023-02-18 10:52:41 +08:00
Anthony Calosa
5d57b75ea1 update 2023-02-18 10:50:42 +08:00
Anthony Calosa
b50c072685 update slime boss image 2023-02-18 09:25:32 +08:00
Anthony Calosa
22ec84a67c Merge pull request #2440 from Northmoc/present2
messing with some "this and that" stuff
2023-02-18 08:28:49 +08:00
Anthony Calosa
e39d5a9213 Merge pull request #2491 from kevlahnota/newmaster2
speedup SpellSmithScene
2023-02-18 08:26:03 +08:00
Anthony Calosa
a3198eaf35 update images 2023-02-18 08:22:38 +08:00
Anthony Calosa
531b96fb36 Merge pull request #2485 from Simisays/jacehold
Jace Boss dungeon
2023-02-18 08:21:32 +08:00
Anthony Calosa
6fd7a55f2c update 2023-02-18 07:45:07 +08:00
Anthony Calosa
33cceee1af Merge branch 'master' into newmaster2 2023-02-18 07:44:37 +08:00
Anthony Calosa
ba5dd1b414 speedup SpellSmithScene
- preload editions for faster loading of SpellSmithScene
2023-02-18 07:34:30 +08:00
tool4EvEr
e6152014a6 Prowl & support 2023-02-17 20:11:49 +01:00
cicoa
53e27477d4 Added puzzle PS_ONE1 (#2486)
* Added puzzle PS_ONE1

* Modified puzzle PS_ONE1
2023-02-17 20:09:12 +03:00
tool4ever
2f020dfa6f Update The Brothers War.txt 2023-02-17 16:38:47 +00:00
Hans Mackowiak
1287fe92c1 Update staff_of_titania.txt 2023-02-17 16:51:18 +01:00
Simisays
790eb78a0a cleanup 2023-02-17 16:46:55 +01:00
Simisays
565fe0e129 impoved layout 2023-02-17 16:24:40 +01:00
Hans Mackowiak
25fa218db3 rename forest dryad token 2023-02-17 16:19:06 +01:00
Simisays
a5c904eea9 Update jaces_signature_hoodie.txt 2023-02-17 14:06:54 +01:00
tool4ever
751a213d6b Update sharktocrab.txt 2023-02-17 11:55:32 +01:00
Simisays
d2f5688c4d update 2023-02-17 09:29:00 +01:00
Simisays
331158a772 card cleanup 2023-02-17 09:12:26 +01:00
Simisays
b6261ac3dc update pics 2023-02-17 00:12:49 +01:00
Simisays
372b65fc43 update 2023-02-16 22:10:02 +01:00
tool4ever
355afadf54 Update search_for_azcanta_azcanta_the_sunken_ruin.txt 2023-02-16 06:58:14 +01:00
Anthony Calosa
e2290c7079 Merge pull request #2484 from kevlahnota/newmaster2
add dispose for GifAnimation
2023-02-16 05:41:19 +08:00
Anthony Calosa
8dc33b82fc add dispose for GifAnimation 2023-02-16 05:37:34 +08:00
Anthony Calosa
25372c072e Merge pull request #2482 from Simisays/slime-boss
Slime boss dungeon + pirate enemy + ONE jumpstart fix
2023-02-16 03:53:42 +08:00
Anthony Calosa
45a915407c Merge pull request #2478 from Card-Forge/disturbMove
CardFactoryUtil: move Disturb Keyword
2023-02-16 00:40:54 +08:00
Anthony Calosa
e48e0df40b Merge pull request #2483 from tool4ever/cheatEvoke
Fix Evoke cheat
2023-02-16 00:38:31 +08:00
TRT
be39a3b35c Fix AI cheating with Evoke 2023-02-15 17:23:10 +01:00
Anthony Calosa
17f9a21e1b Merge pull request #2480 from kevlahnota/newmaster2
add AdventureScreen launchscreen
2023-02-15 23:36:25 +08:00
Simisays
b7f047fd25 Delete wastetown..tmx 2023-02-15 16:33:09 +01:00
Simisays
3e39ff4cdb update 2023-02-15 16:08:55 +01:00
Anthony Calosa
367a3e2ada update SpellSmith colors, card size 2023-02-15 23:08:34 +08:00
Simisays
eda04533fb update 2023-02-15 16:05:33 +01:00
Anthony Calosa
a9f5b468ae remove unused imports 2023-02-15 22:27:52 +08:00
Anthony Calosa
47b4f77f1a add AdventureScreen launchscreen 2023-02-15 22:15:43 +08:00
tool4ever
c283a6a941 Update the_monumental_facade.txt 2023-02-15 14:43:12 +01:00
Anthony Calosa
db35c8d17e Merge pull request #2477 from kevlahnota/newmaster2
fix ClashEffect message and update NotifyValue message
2023-02-15 14:07:23 +08:00
Hans Mackowiak
7b5e769241 CardFactoryUtil: move Disturb Keyword 2023-02-15 07:05:12 +01:00
Anthony Calosa
609dd9dba0 Merge branch 'master' into newmaster2 2023-02-15 11:49:31 +08:00
Anthony Calosa
a9c19b34c8 update translation and remove duplicates 2023-02-15 11:44:09 +08:00
Anthony Calosa
e960ada814 fix ClashEffect message and update NotifyValue message
- show clashing cards if possible on clash effect
- show hostcard if possible on choose a player effect
2023-02-15 11:15:32 +08:00
tool4ever
84aa31fee8 Improve a few scripts (#2476)
* Improve a few scripts

* Fix remembering

* Fix trigger

* Clean up

* Use Oracle

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-02-15 05:59:04 +03:00
Simisays
8b1ce18fc6 update 2023-02-14 21:20:03 +01:00
Northmoc
b1dcd0260a Explosive Singularity fiddling (#2437)
* CostTapType.toString improve

* explosive_singularity.txt make like March of Burgeoning Life etc
2023-02-14 20:36:15 +03:00
Simisays
4bb91913fc update 2023-02-14 17:15:16 +01:00
Paul Hammerton
1b8a97ac53 Merge pull request #2475 from paulsnoops/net_decks
Add 'The Command Zone' net decks
2023-02-14 13:10:18 +00:00
paulsnoops
6ee735f084 Add 'The Command Zone' net decks 2023-02-14 13:07:16 +00:00
Anthony Calosa
08804d7827 Merge pull request #2473 from Simisays/UPDATE
Update slimefoot_boss.tmx
2023-02-14 20:52:28 +08:00
Anthony Calosa
dc245b41e5 Merge pull request #2474 from tool4ever/ruin
Fix Ruinous Powers
2023-02-14 20:51:47 +08:00
tool4EvEr
62051adf40 Fix Ruinous Powers 2023-02-14 13:12:16 +01:00
tool4ever
4c8ff6c2eb Fix Ivy checking targets with wrong player (#2425)
* Fix Ivy checking targets with wrong player
2023-02-14 10:15:32 +00:00
Simisays
9546f8d655 Update slimefoot_boss.tmx 2023-02-14 11:11:02 +01:00
Anthony Calosa
6f93dab1e7 Merge pull request #2456 from Simisays/branchy
Kiora miniboss Adventure + some cleanup of two previous dungeons
2023-02-14 17:31:11 +08:00
Anthony Calosa
3d4b7376c2 Merge pull request #2466 from tool4ever/guardianbeastfixes
Fixes related to Guardian Beast
2023-02-14 17:28:30 +08:00
Anthony Calosa
512267c680 Merge branch 'master' into guardianbeastfixes 2023-02-14 17:22:42 +08:00
Simisays
94d6b5f67b update 2023-02-14 10:22:11 +01:00
tool4ever
bf34dae4f9 Hotfix for Transmute crash (#2471) 2023-02-14 08:32:50 +00:00
Simisays
68079ac908 update 2023-02-14 09:26:31 +01:00
Anthony Calosa
73b1cb15c3 Merge pull request #2467 from Northmoc/stackDesc
More (hopefully better) StackDesc tweaks
2023-02-14 16:22:05 +08:00
Anthony Calosa
20638c6017 Merge pull request #2470 from Card-Forge/henzieBlitzReplacementFix
ReplacementHandler: fix adding CastSA Keyword again
2023-02-14 14:46:53 +08:00
Hans Mackowiak
4505762707 ReplacementHandler: fix adding CastSA Keyword again 2023-02-14 06:58:57 +01:00
Anthony Calosa
49d819c46b Merge pull request #2469 from kevlahnota/newmaster2
update deckaward dialog
2023-02-14 07:04:03 +08:00
Anthony Calosa
dbd0cbea27 update label 2023-02-14 06:57:28 +08:00
Anthony Calosa
bd1c0d65f7 update deckaward dialog 2023-02-14 06:41:07 +08:00
Anthony Calosa
85a717249f Merge branch 'master' into newmaster2 2023-02-14 06:40:44 +08:00
Simisays
ecd72c6444 Update EnemySprite.java 2023-02-13 22:49:44 +01:00
Simisays
cb50bb2994 update 2023-02-13 22:48:12 +01:00
Northmoc
1003f8272f improve Fight stuff 2023-02-13 16:47:10 -05:00
Northmoc
998eecc923 SpellAbilityEffect better 2023-02-13 16:47:09 -05:00
Simisays
99b1f72700 Update unctuss_retrofitter.txt (#2468) 2023-02-13 20:34:38 +00:00
tool4EvEr
1184aaf0fd Fix NPE when CantAttach applies 2023-02-13 18:19:32 +01:00
tool4EvEr
938b4c50e1 Fix ignoring CantAttach 2023-02-13 18:18:47 +01:00
tool4EvEr
e48ac2e623 Fix ignoring Guardian Beast 2023-02-13 18:18:29 +01:00
tool4EvEr
3733983874 Fix affecting phased out 2023-02-13 18:18:00 +01:00
Simisays
5704b81524 update 2023-02-13 18:04:53 +01:00
Simisays
dfee4d40ab Update EnemySprite.java 2023-02-13 17:39:02 +01:00
Anthony Calosa
aeb9c85f7d fix gamehud life color 2023-02-13 19:39:20 +08:00
Anthony Calosa
d794b95eaa Merge pull request #2441 from Northmoc/stackDesc
messing with StackDescription building
2023-02-13 18:41:04 +08:00
Anthony Calosa
1e066918b6 Merge pull request #2463 from kevlahnota/newmaster2
fix TransitionScreen runnable
2023-02-13 18:40:06 +08:00
Anthony Calosa
ea13491203 center text 2023-02-13 18:26:13 +08:00
Anthony Calosa
66f5ef5ca2 Merge pull request #2465 from Simisays/morefixes
Update blade_of_shared_souls.txt
2023-02-13 18:24:39 +08:00
Simisays
29467188f2 Update blade_of_shared_souls.txt 2023-02-13 11:15:16 +01:00
Anthony Calosa
6172b2c21f show winloss stats on match transition 2023-02-13 18:14:34 +08:00
tool4ever
d0084c21b6 fixes phasing affecting delayed triggers (#2461) 2023-02-13 08:45:03 +00:00
Anthony Calosa
8e8afc1e50 fix TransitionScreen runnable 2023-02-13 15:57:22 +08:00
Anthony Calosa
f69e6f3913 Merge pull request #2462 from kevlahnota/newmaster2
fix playerpanel not applying name to slot
2023-02-13 08:49:50 +08:00
Anthony Calosa
f59e9f4d8d Merge pull request #2458 from tool4ever/fixes12
Misc fixes
2023-02-13 08:49:38 +08:00
Anthony Calosa
dc95135310 Merge pull request #2457 from Simisays/aiupdate
Update ria_ivor_bane_of_bladehold.txt
2023-02-13 08:38:41 +08:00
Anthony Calosa
58f852076c Merge pull request #2449 from Card-Forge/flashbackCastKeyword
Flashback: use castKeyword
2023-02-13 08:37:38 +08:00
Anthony Calosa
b000ba19da fix playerpanel not applying name to slot 2023-02-13 08:28:27 +08:00
Simisays
6a8f80d2c7 update 2023-02-12 23:21:39 +01:00
Anthony Calosa
702075769a Merge pull request #2460 from kevlahnota/newmaster2
Minor adjustments
2023-02-13 06:00:43 +08:00
Anthony Calosa
9eafccf1d2 update deckaward icons 2023-02-13 05:50:18 +08:00
tool4EvEr
26bcf9bb5e Fix pay while phased out (e.g Reality Ripple after Junk Golem trigger) 2023-02-12 22:45:58 +01:00
Anthony Calosa
23fc8e1c93 fix item tooltip shard spacing 2023-02-13 05:39:56 +08:00
tool4EvEr
bd7dfb8a27 Clean script 2023-02-12 21:21:58 +01:00
Hans Mackowiak
4734b02c02 ReplacementHandler: found better way to Prevent StackOverflow for Riot 2023-02-12 20:03:11 +01:00
Anthony Calosa
c907f98ce6 Merge pull request #2459 from kevlahnota/newmaster2
update exit to worldmap
2023-02-13 01:40:32 +08:00
Anthony Calosa
8e0de8f4ba update Item tooltips 2023-02-13 01:35:50 +08:00
Anthony Calosa
30aeac257c unused import 2023-02-13 01:04:52 +08:00
Anthony Calosa
4489549a7b Merge branch 'master' into newmaster2 2023-02-13 01:04:29 +08:00
Anthony Calosa
c07697bdae update exit to worldmap 2023-02-13 00:51:58 +08:00
Hans Mackowiak
77dc1a9356 ~ Fix handle Bestow 2023-02-12 17:11:30 +01:00
Hans Mackowiak
a9d95d55ee Revert setChangedCardKeywords 2023-02-12 15:21:53 +01:00
Hans Mackowiak
9d2ecfdeaa GameAction: Remove unneeded code 2023-02-12 15:20:08 +01:00
Simisays
db06e94ed6 update 2023-02-12 14:30:37 +01:00
Hans Mackowiak
3f7dc8db98 Card: setChangedCardKeywords should not copy when adding to stack 2023-02-12 13:09:30 +01:00
tool4EvEr
19b0365ab0 Support position 2023-02-12 12:33:23 +01:00
tool4EvEr
58fb2ba650 Clean up 2023-02-12 12:32:36 +01:00
tool4EvEr
71c14c00f0 Fix crash with Armory Automaton 2023-02-12 12:32:04 +01:00
Simisays
3faa64f290 Update ria_ivor_bane_of_bladehold.txt 2023-02-12 10:58:21 +01:00
Simisays
309f9b9cbf Update ria_ivor_bane_of_bladehold.txt 2023-02-12 10:50:01 +01:00
Simisays
5851dc984b Update ria_ivor_bane_of_bladehold.txt 2023-02-12 10:10:13 +01:00
Simisays
e065c2c6c6 update 2023-02-12 09:47:44 +01:00
Anthony Calosa
250f26c17b Merge pull request #2454 from kevlahnota/newmaster2
update map dialog
2023-02-12 09:32:59 +08:00
Anthony Calosa
822093ad51 update map dialog 2023-02-12 09:22:41 +08:00
Simisays
3a1a7e77c4 Update norns_decree.txt (#2453) 2023-02-11 21:17:28 +00:00
Simisays
0e666759be update 2023-02-11 22:12:20 +01:00
Anthony Calosa
edeb0b4a51 Merge pull request #2451 from Simisays/SLIMEFOOTBIS
Slimefoot miniboss adventure
2023-02-11 22:32:07 +08:00
Anthony Calosa
5bcc581d92 Update items.json 2023-02-11 22:29:22 +08:00
Anthony Calosa
f17ed7d472 Update enemies.json 2023-02-11 22:28:36 +08:00
Anthony Calosa
bb30cd767c Merge pull request #2452 from kevlahnota/newmaster2
fix text/effect/map layout
2023-02-11 22:26:38 +08:00
Anthony Calosa
98cffcd796 fix text/effect/map layout
- revert textratypist to 0.7.2 to fix effect/map dialog
- update GameHUD
2023-02-11 22:20:54 +08:00
Anthony Calosa
c513ad7b0a Merge pull request #2450 from Simisays/fix
Update forgehammer_centurion.txt
2023-02-11 22:19:44 +08:00
Simisays
0c6a4a0ce2 update 2023-02-11 13:40:55 +01:00
Simisays
f67bfee707 Update forgehammer_centurion.txt 2023-02-11 13:38:55 +01:00
Simisays
eab8b51cdd update 2023-02-11 13:15:24 +01:00
Simisays
f91e2676a7 update 2023-02-11 12:44:23 +01:00
Hans Mackowiak
c0a0da6604 TriggerEnlist: add Param for Goblin Morale Sergeant 2023-02-11 11:45:11 +01:00
Paul Hammerton
f7abbdd359 Migrate upcoming scripts in preparation for ONE release (#2448) 2023-02-11 13:15:45 +03:00
Hans Mackowiak
007f9dc880 Flashback: use castKeyword 2023-02-11 10:07:39 +01:00
Anthony Calosa
faea804e08 Merge pull request #2447 from Agetian/ai-conduitofworlds
Improve AI handling for Conduit of Worlds
2023-02-11 14:43:11 +08:00
Michael Kamensky
082babdc14 - Improve AI handling for Conduit of Worlds. 2023-02-11 08:41:00 +03:00
Anthony Calosa
d7b79507dd Update chiss_goria_forge_tyrant.txt 2023-02-11 13:40:03 +08:00
Anthony Calosa
ee49363a6e Merge pull request #2446 from kevlahnota/newmaster2
update TextraTypist
2023-02-11 12:32:17 +08:00
Anthony Calosa
e3426d15f2 update TextraTypist 2023-02-11 12:26:52 +08:00
Anthony Calosa
a96827a807 Merge pull request #2445 from kevlahnota/newmaster2
add toxic icon
2023-02-11 09:48:18 +08:00
Anthony Calosa
61b659294a add toxic icon 2023-02-11 09:42:21 +08:00
Anthony Calosa
c2c367eb3f Merge pull request #2444 from Simisays/KOBOLDLAIR
Kobold dungeon for adventure mode
2023-02-11 06:55:02 +08:00
tool4ever
fd4573eed3 ExiledWith: fix clone interaction (#2395)
* Fix Volo's Journal for Changeling

* ExiledWith: fix clone interaction
2023-02-10 19:43:55 +00:00
tool4ever
7e3f8ad9e4 Kicker Linked Lite (#2401)
* Kicker Linked Lite

* Fix incomplete LKI for Metallic Mimic and possibly others
2023-02-10 19:43:03 +00:00
Hans Mackowiak
d5839d7a35 GameAction: copy Cast Keyword if it doesn't already have it (#2433)
* GameAction: copy Cast Keyword if it doesn't already have it

* Update viral_spawning.txt

* Update viral_spawning.txt
2023-02-10 13:14:53 -05:00
Simisays
09d0b6404b Update enemies.json 2023-02-10 17:56:55 +01:00
Simisays
40f6bf44be Update rohgahh_kher_keep_overlord.txt 2023-02-10 17:22:14 +01:00
Northmoc
96f722e02d more 2023-02-10 10:10:25 -05:00
Simisays
d0f436eb81 Update printsheets.txt 2023-02-10 09:28:39 -05:00
Simisays
90027ca0e5 Update printsheets.txt 2023-02-10 09:28:39 -05:00
Simisays
b4833db815 update 2023-02-10 14:56:53 +01:00
Northmoc
10f44e1a07 ceta_sanctuary.txt improve 2023-02-10 08:25:48 -05:00
Anthony Calosa
b648ea33ff Merge pull request #2442 from kevlahnota/newmaster2
update enter keys
2023-02-10 20:21:27 +08:00
Anthony Calosa
0937240a05 Merge branch 'master' into newmaster2 2023-02-10 20:20:51 +08:00
Anthony Calosa
34fa47cb6b update enter keys 2023-02-10 20:17:02 +08:00
CCTV-1
27139a2c88 fix:'Draconic Destiny' cast cost and activated abilities cost. (#2436)
* fix:'Draconic Destiny' cast cost and activated abilities cost.
2023-02-10 09:44:46 +01:00
Northmoc
9765fe4a03 improve 2023-02-09 23:02:06 -05:00
Northmoc
8fa12e7ceb messing with StackDescription building 2023-02-09 22:50:35 -05:00
Northmoc
bbc30a74b4 sanctuaries - just AI tweaks 2023-02-09 16:46:57 -05:00
Paul Hammerton
9b828d5734 Merge pull request #2398 from Simisays/ONE-JUMPSTART-DECKS
ONE & ONC Jumpstart and commander decks
2023-02-09 20:47:08 +00:00
Northmoc
6f784015dc messing with some "this and that" stuff 2023-02-09 15:25:57 -05:00
Anthony Calosa
5881f3a86a Merge pull request #2438 from kevlahnota/newmaster2
fix starting cards on adventure mode with etb counters
2023-02-10 03:29:11 +08:00
Simisays
7e58d6b5ba Update love_song_of_night_and_day.txt (#2439) 2023-02-09 19:28:29 +00:00
Anthony Calosa
a511556ca9 Merge pull request #2427 from tool4ever/cleanupsvar
Cleanup some SVar
2023-02-10 03:23:55 +08:00
Anthony Calosa
d0cfd3567c update 2023-02-10 03:16:14 +08:00
Anthony Calosa
ca42f1c7f2 fix starting cards on adventure mode with etb counters
- closes #2431
2023-02-10 03:09:56 +08:00
Anthony Calosa
b94fcf22c3 Merge pull request #2430 from Northmoc/mandatory
some Mandatory ChangeZone
2023-02-09 23:08:40 +08:00
Northmoc
f018bc9399 night_terrors.txt better 2023-02-09 09:41:07 -05:00
tool4ever
b038658e98 Guard against StackOverflow if LKI gets used for Moved (#2434)
Co-authored-by: TRT <>
2023-02-09 17:37:22 +03:00
Northmoc
3956dd4c25 some tweaks 2023-02-09 08:44:20 -05:00
TRT
4b5cbdeccb Clean costs 2023-02-09 13:46:19 +01:00
TRT
e0552eed74 Fix missing trigger 2023-02-09 13:11:47 +01:00
Simisays
3d778908b9 Update Corrupting Influence [ONC] [2023].dck 2023-02-09 08:20:14 +01:00
Northmoc
b4e95b47e3 Merge pull request #2429 from Simisays/FixBis
Update tamiyos_immobilizer.txt
2023-02-08 17:47:41 -05:00
Simisays
51ff05f267 Update tamiyos_immobilizer.txt 2023-02-08 23:33:49 +01:00
tool4EvEr
6d0403ee0a Fix StackOverflow 2023-02-08 22:44:29 +01:00
Paul Hammerton
c4c310f19a Quest mode: Fix selling math (#2428) 2023-02-08 23:21:12 +03:00
tool4EvEr
ca32fa98c7 More clean up 2023-02-08 21:01:58 +01:00
TRT
baf1d969a8 Cleanup some SVar 2023-02-08 18:56:52 +01:00
Paul Hammerton
154cc84d5c Merge pull request #2423 from JohnWilliams77/patch-77
Update Secret Lair Showdown.txt
2023-02-08 08:32:55 +00:00
JohnWilliams77
860cef3980 Update Secret Lair Showdown.txt 2023-02-08 08:21:52 +00:00
Anthony Calosa
23826d8218 Merge pull request #2420 from marthinwurer/fix_utility_first
Fix issue where AI plays colorless utility lands first over building their manabase
2023-02-08 15:53:28 +08:00
Anthony Calosa
27455a8dca Merge pull request #2422 from kevlahnota/newmaster2
fix encoding
2023-02-08 15:53:00 +08:00
Anthony Calosa
59e2eef8b6 fix encoding 2023-02-08 15:47:33 +08:00
marthinwurer
45f021b337 document stddev 2023-02-07 23:40:28 -07:00
marthinwurer
502d7946dd added basic manabase evaluation 2023-02-07 23:38:50 -07:00
marthinwurer
56460ae534 in progress 2023-02-07 16:57:56 -07:00
Anthony Calosa
a2343026fc Merge pull request #2419 from kevlahnota/newmaster2
cleanup
2023-02-08 07:20:39 +08:00
Anthony Calosa
773698d6d9 Merge pull request #2388 from Northmoc/one_wanderer
ONE: The Eternal Wanderer + support + tidy related cards
2023-02-08 07:19:54 +08:00
Anthony Calosa
caf8fa3083 Merge pull request #2418 from Northmoc/one_3b
ONE: Nahiri's Sacrifice, Kaya, and misc.
2023-02-08 07:18:55 +08:00
Anthony Calosa
717c3e65c5 Merge branch 'master' into newmaster2 2023-02-08 06:49:43 +08:00
Anthony Calosa
0fe386cab7 cleanup 2023-02-08 06:46:21 +08:00
Northmoc
e1a6f28bc6 StaticAbilityAttackRestrict.attackRestrictNum iterate 2023-02-07 15:03:53 -05:00
Northmoc
24e9f6505a ONE: The Eternal Wanderer + support + tidy related cards 2023-02-07 14:58:10 -05:00
squee1968
23e7eef9ea 5 cards from ONE (#2402) 2023-02-07 19:51:26 +01:00
marthinwurer
ae02f097d4 updated gitignore 2023-02-07 11:25:55 -07:00
marthinwurer
929fea4cbf initial failing test 2023-02-07 11:01:00 -07:00
Northmoc
2617a0746a ONE: Nahiri's Sacrifice, Kaya, and misc. 2023-02-07 11:22:01 -05:00
Simisays
d99e43209a Update roar_of_resistance.txt (#2417) 2023-02-07 13:24:47 +01:00
Paul Hammerton
905bb16204 Merge pull request #2416 from paulsnoops/sld_update
Edition update: SLD
2023-02-07 10:29:13 +00:00
Paul Hammerton
5e5862a616 Merge pull request #2415 from Simisays/LASTONE
ONE 4 cards
2023-02-07 10:27:40 +00:00
paulsnoops
aa374878c9 Edition update: SLD 2023-02-07 10:23:56 +00:00
Anthony Calosa
f9062b3e89 Update thunderhawk_gunship.txt 2023-02-07 17:34:54 +08:00
Anthony Calosa
2f55498b90 Update bone_dragon.txt 2023-02-07 17:33:25 +08:00
Anthony Calosa
d6be03bdd3 Update the_fall_of_kroog.txt
fix Svar -> SVar typo
2023-02-07 17:17:30 +08:00
Simisays
3a54206092 Update sheoldreds_edict.txt 2023-02-07 09:47:03 +01:00
Simisays
4ce68093a3 Update tamiyos_immobilizer.txt 2023-02-07 09:46:44 +01:00
Simisays
8d5a1455c8 Update surgical_skullbomb.txt 2023-02-07 09:46:25 +01:00
Simisays
83ea10c811 Merge branch 'Card-Forge:master' into LASTONE 2023-02-07 09:43:08 +01:00
Simisays
ea10b251b4 Create sheoldreds_edict.txt 2023-02-07 09:43:05 +01:00
Simisays
72736356a7 Create surgical_skullbomb.txt 2023-02-07 09:35:25 +01:00
Simisays
8d53985628 Create swooping_lookout.txt 2023-02-07 09:31:00 +01:00
tool4ever
e57abc4c48 Update neyali_suns_vanguard.txt 2023-02-07 09:29:15 +01:00
Simisays
a5994f47e4 Create tamiyos_immobilizer.txt 2023-02-07 09:25:51 +01:00
marthinwurer
b74a2b3ba4 improved activated ability evaluation 2023-02-06 22:27:31 -05:00
marthinwurer
2d98e58b81 Added test that ensures all lands can be played 2023-02-06 22:27:31 -05:00
marthinwurer
58f0a72c4d fixed the issue with rainbow lands 2023-02-06 22:27:31 -05:00
marthinwurer
5909979884 another failing test 2023-02-06 22:27:31 -05:00
marthinwurer
c14e4cd321 set the activator to the controller in ai 2023-02-06 22:27:31 -05:00
marthinwurer
47c9d32435 implemented bounceland test and fix 2023-02-06 22:27:31 -05:00
marthinwurer
7c4b6c5f27 implemented tron test and fix 2023-02-06 22:27:31 -05:00
marthinwurer
270f7116ec implemented basic test 2023-02-06 22:27:31 -05:00
Anthony Calosa
1ac4e07f6e Merge pull request #2414 from Card-Forge/kevlahnota-patch-pwultimate
fix missing pw achievement
2023-02-07 08:16:39 +08:00
Anthony Calosa
27c0d9d417 Update lukka_bound_to_ruin.txt 2023-02-07 08:10:46 +08:00
Anthony Calosa
8621474bb9 Update jace_the_perfected_mind.txt 2023-02-07 08:05:46 +08:00
Anthony Calosa
81bcf58027 Update tyrranax_atrocity.txt 2023-02-07 02:19:12 +08:00
Anthony Calosa
29063204bf Merge pull request #2408 from jjayers99/master
Correction to Adventure Mode edition filter
2023-02-07 01:42:30 +08:00
Anthony Calosa
707b723839 Merge pull request #2413 from kevlahnota/newmaster2
support code, code2 & alias on image lookup
2023-02-07 01:42:17 +08:00
Paul Hammerton
18704866a6 Merge pull request #2412 from Simisays/ONE5MORE
ONE 5 cards
2023-02-06 17:34:07 +00:00
Anthony Calosa
1dbf2d7fc1 update 2023-02-07 01:08:01 +08:00
Anthony Calosa
d97d47ec35 Merge branch 'master' into newmaster2 2023-02-07 01:07:42 +08:00
Anthony Calosa
5e1c3a5a0a support code, code2 & alias on image lookup 2023-02-07 00:52:30 +08:00
Simisays
6e61ac2033 Update watchful_blisterzoa.txt 2023-02-06 17:32:33 +01:00
Simisays
f6ae53e2c9 update 2023-02-06 17:30:35 +01:00
Anthony Calosa
7526c9f544 Merge pull request #2409 from kevlahnota/newmaster2
update lookup
2023-02-06 21:53:46 +08:00
Paul Hammerton
bcbf4fbd3d Fix card name in edition (#2410)
* Fix card name in edition
2023-02-06 14:50:08 +01:00
Anthony Calosa
297356853a remove redundant alias 2023-02-06 21:36:06 +08:00
Anthony Calosa
2018bfa362 update lookup 2023-02-06 21:22:06 +08:00
TabletopGeneral
d67b71e089 Merge branch 'Card-Forge:master' into master 2023-02-06 07:44:55 -05:00
jjayers99
349073886b Correction to Adventure Mode edition filter
When filtering against editions, existing predicate logic only matched a single printing per card name - a card that appeared in LEA filter would not appear in 30A filter and vice versa. Added extra step to check all printings of a given card.
2023-02-06 07:43:06 -05:00
Anthony Calosa
3dc4a99eeb Merge pull request #2407 from kevlahnota/newmaster2
add support for Edition code/alias for card images
2023-02-06 18:58:37 +08:00
Anthony Calosa
795889ff1f update editions 2023-02-06 18:54:41 +08:00
Anthony Calosa
f69211983a Merge branch 'master' into newmaster2 2023-02-06 18:38:12 +08:00
Anthony Calosa
ed3b81cb96 add support for Edition code/alias for card images 2023-02-06 18:25:27 +08:00
tool4ever
2f597de861 Update myr_custodian.txt 2023-02-06 10:25:13 +00:00
Paul Hammerton
ef6697f015 Merge pull request #2406 from paulsnoops/pewk_fix
Edition changes: PEWK cards to correct editions
2023-02-06 09:37:28 +00:00
Simisays
e13d57d54c Update archfiend_of_the_dross.txt (#2405) 2023-02-06 09:34:58 +00:00
paulsnoops
21b37bff7b Edition changes: PEWK cards to correct editions 2023-02-06 09:31:44 +00:00
Anthony Calosa
60eaa79620 Merge pull request #2404 from Simisays/fix
Update gulping_scraptrap.txt
2023-02-06 11:46:57 +08:00
Chris H
8dad89f5f3 Update gleeful_demolition.txt 2023-02-05 21:19:58 -05:00
Simisays
4812b1513f Update gulping_scraptrap.txt 2023-02-06 00:07:58 +01:00
Hans Mackowiak
679d1f61fc ~ cleanup effects 2023-02-05 21:18:31 +01:00
Hans Mackowiak
0230fb60ab ~ cleanup 2023-02-05 21:15:09 +01:00
Paul Hammerton
e28fb90314 Merge pull request #2399 from Simisays/staff
ONC Staff of the Storyteller
2023-02-05 16:10:59 +00:00
Paul Hammerton
2db5da4ae7 Merge pull request #2296 from Simisays/ONE11
ONE 10 cards
2023-02-05 16:10:52 +00:00
Paul Hammerton
f6e8846f52 Merge pull request #2376 from Northmoc/one_melira
ONE: Melira, the Living Cure (+tidy Vraska)
2023-02-05 16:10:39 +00:00
Paul Hammerton
89404e5372 Merge pull request #2397 from JohnWilliams77/patch-76
Create Year of the Rabbit 2023.txt
2023-02-05 16:07:19 +00:00
Simisays
687798136f Update ichorplate_golem.txt 2023-02-05 10:55:18 +01:00
Simisays
f539eb0516 Update ichorplate_golem.txt 2023-02-05 10:46:37 +01:00
Simisays
dee08966b8 Update staff_of_the_storyteller.txt 2023-02-05 10:34:26 +01:00
Simisays
906def503a Create staff_of_the_storyteller.txt 2023-02-05 10:21:40 +01:00
Simisays
7804f5a327 update 2023-02-05 10:16:28 +01:00
tool4ever
8c224f2c77 Staff of the Storyteller support (#2274)
* Staff of the Storyteller support

* Split triggers

* Improve trigger

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
Co-authored-by: TRT <>
2023-02-05 12:05:01 +03:00
JohnWilliams77
4b53581bd6 Create Year of the Rabbit 2023.txt 2023-02-05 08:30:00 +00:00
Anthony Calosa
31c8b87966 Merge pull request #2396 from kevlahnota/newmaster2
More Than Meets the Eye description
2023-02-05 15:54:48 +08:00
Anthony Calosa
994d7c74de More Than Meets the Eye description 2023-02-05 15:43:14 +08:00
Anthony Calosa
af1e22b2a2 Merge branch 'master' into newmaster2 2023-02-05 14:39:42 +08:00
Anthony Calosa
99a02ebd71 Merge pull request #2394 from Card-Forge/MoreThanMeetstheEyeRework
CardFactoryUtil: More Than Meets the Eye create there instead
2023-02-05 14:30:56 +08:00
Anthony Calosa
55d6bb8675 Update mandible_justiciar.txt 2023-02-05 14:25:18 +08:00
Hans Mackowiak
2fad4324e9 CardFactoryUtil: More Than Meets the Eye create there instead 2023-02-04 18:24:14 +01:00
Simisays
c776c9a26a Update the_hollow_sentinel.txt (#2393) 2023-02-04 16:16:47 +00:00
Simisays
32bfeced9a ONE 7 cards (#2391)
* update

* Update skyscythe_engulfer.txt

* Update thirsting_roots.txt

* Update thirsting_roots.txt

* Update dross_skullbomb.txt
2023-02-04 17:26:44 +03:00
Simisays
8c6642568c Update awaken_the_sleeper.txt 2023-02-04 13:20:12 +01:00
tool4ever
22c1679687 Update DestroyAllEffect.java 2023-02-04 11:36:24 +00:00
tool4ever
c34a1ba8b3 Update DestroyAllEffect.java 2023-02-04 11:35:33 +00:00
Simisays
349fdd7985 Update DestroyAllEffect.java 2023-02-04 12:11:55 +01:00
Simisays
04bcd5202e Update DestroyAllEffect.java 2023-02-04 12:10:22 +01:00
Simisays
08ca2cd08c update 2023-02-04 12:03:41 +01:00
Anthony Calosa
c3cd14f205 Merge branch 'master' into newmaster2 2023-02-04 17:37:24 +08:00
tool4ever
f8761d2349 Card fixes (#2389)
* Fix AI check

* Fix cards

* Clean up

---------

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-02-04 07:43:12 +03:00
Northmoc
de5c6f1fef ONE: 5 cards and related tweaks 2023-02-03 22:19:51 -05:00
Simisays
0337d2b157 Delete nahiris_sacrifice.txt
can't figure this one out
2023-02-03 22:17:12 -05:00
Simisays
bff032ab67 gitaxian anatomist fix 2023-02-03 22:17:12 -05:00
Simisays
fe02c4d845 update 2023-02-03 22:17:12 -05:00
Simisays
12a15b9278 Update meldweb_curator.txt 2023-02-03 22:17:12 -05:00
Simisays
dce5efad00 update 2023-02-03 22:17:12 -05:00
Simisays
5f20b9ed4d Update hazardous_blast.txt 2023-02-03 22:17:12 -05:00
Simisays
b6423e8f11 Update eye_of_malcator.txt 2023-02-03 22:17:12 -05:00
Simisays
c7798bb4c2 update 2023-02-03 22:17:12 -05:00
Simisays
5230aa9ec1 Add files via upload 2023-02-03 22:17:12 -05:00
squee1968
c5c7647ed1 Update atraxas_skitterfang.txt 2023-02-03 22:12:13 -05:00
squee1968
69dd2102ca Update atraxas_skitterfang.txt 2023-02-03 22:12:13 -05:00
squee1968
6d169aa2a3 Update atraxas_skitterfang.txt 2023-02-03 22:12:13 -05:00
squee1968
2b29914d4b Update ambulatory_edifice.txt 2023-02-03 22:12:13 -05:00
squee1968
91e4000ae9 Update ambulatory_edifice.txt 2023-02-03 22:12:13 -05:00
squee1968
fa856da687 Update atraxas_skitterfang.txt 2023-02-03 22:12:13 -05:00
squee1968
55538a5b3d Update ambulatory_edifice.txt 2023-02-03 22:12:13 -05:00
squee1968
3366c2fa6f Update atraxas_skitterfang.txt 2023-02-03 22:12:13 -05:00
squee1968
135a2c8fba Update ambulatory_edifice.txt 2023-02-03 22:12:13 -05:00
squee1968
4385bf7ae5 Update magmatic_sprinter.txt 2023-02-03 22:12:13 -05:00
squee1968
8fb77b9f9b Update atraxas_skitterfang.txt 2023-02-03 22:12:13 -05:00
squee1968
de33ede30f Update magmatic_sprinter.txt 2023-02-03 22:12:13 -05:00
squee1968
b27e090c77 Update atraxas_skitterfang.txt 2023-02-03 22:12:13 -05:00
squee1968
50c27d84b0 Update ambulatory_edifice.txt 2023-02-03 22:12:13 -05:00
squee1968
fc2a60f432 playtested 2023-02-03 22:12:13 -05:00
Simisays
98373145a7 Update adaptive_sporesinger.txt 2023-02-03 22:04:53 -05:00
Simisays
a9f2ca4fda Update cruel_grimnarch.txt 2023-02-03 22:04:53 -05:00
Simisays
837c5e2e56 update 2023-02-03 22:04:53 -05:00
Simisays
eb5b9443e8 Update chimney_rabble.txt 2023-02-03 22:04:53 -05:00
Simisays
a31deff649 update 2023-02-03 22:04:53 -05:00
Simisays
b8da02db17 update 2023-02-03 22:04:53 -05:00
Northmoc
191264ddb3 Merge pull request #2386 from Simisays/JACEFIX
Update jace_the_perfected_mind.txt
2023-02-03 14:00:16 -05:00
Simisays
eed708629d ONE 8 Cards (#2322)
* update

* Update lukka_bound_to_ruin.txt

* Update bring_the_ending.txt

* Update lukka_bound_to_ruin.txt

* update

* Delete viral_spawning.txt

* Update bring_the_ending.txt

* Update lukka_bound_to_ruin.txt

---------

Co-authored-by: tool4ever <therealtoolkit@hotmail.com>
2023-02-03 21:42:11 +03:00
Simisays
0bf98f495e ONE 20 cards (#2337)
* update

* update

* update

* update

* update

* Update forgehammer_centurion.txt

* Update evolving_adaptive.txt

* Update evolving_adaptive.txt

* Update evolving_adaptive.txt

* Update forgehammer_centurion.txt

* Update forgehammer_centurion.txt
2023-02-03 21:42:01 +03:00
Simisays
55208af53f ONE 10 cards (#2384)
* update

* Update rebel_salvo.txt

* update

* Update ravenous_necrotitan.txt

* Update ravenous_necrotitan.txt
2023-02-03 21:41:37 +03:00
tool4EvEr
e5b3d28428 Trigger tweak 2023-02-03 17:56:09 +01:00
Simisays
7ddfb27d6f Update jace_the_perfected_mind.txt 2023-02-03 16:03:19 +01:00
tool4ever
c070591afe Update kemba_kha_enduring.txt 2023-02-03 10:38:42 +01:00
Anthony Calosa
6a3a6d4360 Merge branch 'master' into newmaster2 2023-02-03 14:06:23 +08:00
Anthony Calosa
c0eb65a85d update Standard Archetypes
- DMU (with BRO and ONE)
2023-02-03 14:02:24 +08:00
Anthony Calosa
937d7bf43e Merge pull request #2308 from Northmoc/one_expand
ONE: Expand the Sphere – Tekuthal, Inquiry Dominus – support
2023-02-03 12:09:24 +08:00
Anthony Calosa
bee497bf39 Merge pull request #2352 from Simisays/ONE15
ONE 11 cards
2023-02-03 12:06:53 +08:00
Anthony Calosa
18640da263 Merge pull request #2358 from Simisays/ONETOXICTEN
ONE 16 cards 31-1
2023-02-03 12:06:08 +08:00
Anthony Calosa
cc23f65d4b Merge pull request #2382 from tool4ever/cardfixes22
Fix scripts
2023-02-03 10:14:54 +08:00
tool4EvEr
03bbb90def Fix scripts 2023-02-02 22:57:47 +01:00
tool4ever
b9467ceeb6 Merge branch 'master' into one_expand 2023-02-02 22:55:16 +01:00
Paul Hammerton
8de952489e Merge pull request #2380 from paulsnoops/onc_edition_update
Edition updates: ONE, ONC
2023-02-02 21:02:31 +00:00
paulsnoops
58c2bf9725 Edition updates: ONE, ONC 2023-02-02 20:58:02 +00:00
Paul Hammerton
91cdbf81ce Merge pull request #2379 from paulsnoops/formats_arc
Formats fix: Add ARC, E01, E02, Q06 back to Vintage and Legacy; Add Q…
2023-02-02 20:46:19 +00:00
paulsnoops
c8419cd59b Formats fix: Add ARC, E01, E02, Q06 back to Vintage and Legacy; Add Q06 to Pioneer 2023-02-02 20:40:39 +00:00
Simisays
1939558ce4 Update churning_reservoir.txt 2023-02-02 18:51:10 +01:00
Northmoc
dc90c0a833 ezuri_stalker_of_spheres.txt tidy 2023-02-02 12:39:23 -05:00
Northmoc
e224166b32 ONE: melira_the_living_cure.txt / tidy vraska_betrayals_sting.txt 2023-02-02 12:34:33 -05:00
Northmoc
75d3cb691e ONE: melira_the_living_cure.txt / tidy vraska_betrayals_sting.txt 2023-02-02 12:33:14 -05:00
Simisays
efcfcce4f8 Update mesmerizing_dose.txt (#2373)
* Update mesmerizing_dose.txt

* Update mesmerizing_dose.txt

* Update mesmerizing_dose.txt

* Update mesmerizing_dose.txt

* Update mesmerizing_dose.txt
2023-02-02 17:12:16 +03:00
Anthony Calosa
256e6c8894 Merge pull request #2360 from tool4ever/cleanup123
Card cleanup
2023-02-02 21:07:11 +08:00
Northmoc
375aad3bd7 tekuthal_inquiry_dominus.txt / ReplaceProliferate support 2023-02-02 07:53:23 -05:00
Agetian
cd9670d179 Clean up ConniveAi a little bit. (#2371)
* - Update the MTGDecksNet conversion and AI playability test toolchain to the latest version (Python 3 compatible).

* - Make the input/output folders generic

* - Make the input/output folders generic, part 2.

* - Add the Scryfall all-prices.txt generator script.

* - Minor code cleanup.

* - Improve ConniveAi for Change of Plans.

* - Check if the AI can draw cards for ConniveAI

* - Improve the price generation script to account for the Scryfall set code to Forge set code mapping.
- Tweak paths in some of the scripts.

* - Fix scryfallPricesGenerator.

* - Clean up ConniveAi code, limit the X choice to available mana.
2023-02-02 15:15:29 +03:00
Agetian
0219656269 Fix scryfallPriceGenerator script (#2369)
* - Update the MTGDecksNet conversion and AI playability test toolchain to the latest version (Python 3 compatible).

* - Make the input/output folders generic

* - Make the input/output folders generic, part 2.

* - Add the Scryfall all-prices.txt generator script.

* - Minor code cleanup.

* - Improve ConniveAi for Change of Plans.

* - Check if the AI can draw cards for ConniveAI

* - Improve the price generation script to account for the Scryfall set code to Forge set code mapping.
- Tweak paths in some of the scripts.

* - Fix scryfallPricesGenerator.
2023-02-02 12:25:20 +03:00
Agetian
c2169e6553 Improve the card price generation script (#2368)
* - Update the MTGDecksNet conversion and AI playability test toolchain to the latest version (Python 3 compatible).

* - Make the input/output folders generic

* - Make the input/output folders generic, part 2.

* - Add the Scryfall all-prices.txt generator script.

* - Minor code cleanup.

* - Improve ConniveAi for Change of Plans.

* - Check if the AI can draw cards for ConniveAI

* - Improve the price generation script to account for the Scryfall set code to Forge set code mapping.
- Tweak paths in some of the scripts.
2023-02-02 12:14:25 +03:00
Agetian
7c50111129 Improve AI logic for Connive / Change of Plans (#2367)
* - Update the MTGDecksNet conversion and AI playability test toolchain to the latest version (Python 3 compatible).

* - Make the input/output folders generic

* - Make the input/output folders generic, part 2.

* - Add the Scryfall all-prices.txt generator script.

* - Minor code cleanup.

* - Improve ConniveAi for Change of Plans.

* - Check if the AI can draw cards for ConniveAI
2023-02-02 12:07:21 +03:00
Anthony Calosa
ad466e7cbe Merge branch 'master' into newmaster2 2023-02-02 16:38:03 +08:00
tool4ever
aff8518e22 Update barkweave_crusher.txt 2023-02-02 08:43:12 +01:00
Anthony Calosa
44d1d19bd6 Update phyrexian syntax, add ConniveAI (#2357)
* update syntax
- fix mobile display for compleated symbols

* update

* update cards

* fix Raffine Scheming Seer

* # ConniveAI

* remove unused var

* unused import

* add missing token script
2023-02-02 09:03:07 +03:00
Agetian
10c6d71140 Update the MTGDecksNet conversion and AI playability test toolchain to the latest version (#2363)
* - Update the MTGDecksNet conversion and AI playability test toolchain to the latest version (Python 3 compatible).

* - Make the input/output folders generic

* - Make the input/output folders generic, part 2.

* - Add the Scryfall all-prices.txt generator script.

* - Minor code cleanup.
2023-02-02 07:51:45 +03:00
Paul Hammerton
28166530ea Merge pull request #2364 from paulsnoops/planechase_formats
Formats fix: Add Planechase sets back to Vintage and Legacy
2023-02-01 20:51:56 +00:00
paulsnoops
3210a4ca2a Formats fix: Add Planechase sets back to Vintage and Legacy 2023-02-01 20:41:21 +00:00
Agetian
d34ea0fae4 Quest mode: fix cards bought and sold for 0 credits (#2362)
* - Fix cards bought and sold for 0 credits in Quest mode.

* - Fix multiplier pulling the price below 1 credit.

* - Remove a debug line.
2023-02-01 22:06:11 +03:00
tool4EvEr
f78bb2c2d7 Fix layer 2023-02-01 16:11:08 +01:00
tool4EvEr
2e32943b3a Fix wrong property 2023-02-01 14:32:55 +01:00
tool4EvEr
0d517b37ab Slight tweak so it only uses old zone when LKI applies 2023-02-01 12:26:02 +01:00
tool4EvEr
a6374d12a8 Remove obsolete condition 2023-02-01 12:25:16 +01:00
tool4EvEr
e1f70c8906 Clean up 2023-02-01 12:24:38 +01:00
Anthony Calosa
73d1c0f38e Merge branch 'master' into newmaster2 2023-02-01 17:22:23 +08:00
Anthony Calosa
4f2de7a50d add missing token script 2023-02-01 17:21:20 +08:00
Paul Hammerton
e57c0674a4 Merge pull request #2359 from paulsnoops/update_pmei
Edition updates: PMEI
2023-02-01 09:04:05 +00:00
paulsnoops
0b06523b98 Edition updates: PMEI 2023-02-01 08:56:25 +00:00
Anthony Calosa
abf7d80d68 unused import 2023-02-01 14:40:43 +08:00
Anthony Calosa
a5183dd890 remove unused var 2023-02-01 14:38:31 +08:00
Anthony Calosa
10ca41c7d7 Merge branch 'master' into newmaster2 2023-02-01 05:40:23 +08:00
Simisays
0721d5649f up 2023-01-31 22:00:13 +01:00
Simisays
4904220719 update 2023-01-31 21:47:27 +01:00
Anthony Calosa
79227165da # ConniveAI 2023-02-01 01:58:15 +08:00
Anthony Calosa
b5a22c9d8e fix Raffine Scheming Seer 2023-02-01 01:57:55 +08:00
Simisays
0c994453ac update 2023-01-31 18:29:03 +01:00
Simisays
2b106df2ca Update serum_core_chimera.txt 2023-01-31 18:23:38 +01:00
Simisays
24ca905e7b update 2023-01-31 18:18:19 +01:00
Simisays
6b0e7c9307 ONC 9 cards (#2269) 2023-01-31 17:50:59 +01:00
Simisays
62e9614238 update 2023-01-31 17:29:01 +01:00
Anthony Calosa
c2259001dc update cards 2023-01-31 23:49:10 +08:00
Simisays
678b2bbd9f Add files via upload 2023-01-31 16:22:46 +01:00
Anthony Calosa
03a8a7f268 update 2023-01-31 22:34:02 +08:00
Simisays
d8251af506 Update serum_core_chimera.txt 2023-01-31 15:28:43 +01:00
Anthony Calosa
861465772d Merge branch 'master' into newmaster2 2023-01-31 19:45:49 +08:00
Anthony Calosa
8baa15dd0e update syntax
- fix mobile display for compleated symbols
2023-01-31 19:45:06 +08:00
tool4ever
0fe172b96f Update let_the_galaxy_burn.txt 2023-01-31 09:28:29 +01:00
Anthony Calosa
38096f0483 Merge pull request #2353 from tool4ever/watcherfix
Improve ExiledWith accuracy
2023-01-31 07:53:26 +08:00
Paul Hammerton
a1226e2dbf Merge pull request #2355 from paulsnoops/one_onc_tokens
Edition updates: Tokens for ONE, ONC
2023-01-30 22:43:30 +00:00
paulsnoops
fcea13a070 Edition updates: Tokens for ONE, ONC 2023-01-30 22:40:01 +00:00
Simisays
adbd9f7697 update 2023-01-30 23:15:02 +01:00
Simisays
1afe5bcc1c Update DestroyAllEffect.java 2023-01-30 22:52:05 +01:00
Simisays
2809c81c35 update 2023-01-30 22:50:18 +01:00
Simisays
3326720cec Merge branch 'Card-Forge:master' into ONE11 2023-01-30 22:43:59 +01:00
Paul Hammerton
e6968987dc Merge pull request #2354 from JohnWilliams77/patch-75
Update Secret Lair Drop Series.txt
2023-01-30 21:29:44 +00:00
JohnWilliams77
ef25bfce59 Update Secret Lair Drop Series.txt 2023-01-30 20:46:15 +00:00
JohnWilliams77
36bc4b3924 Update Secret Lair Drop Series.txt 2023-01-30 20:42:36 +00:00
tool4ever
f06bdb01cd Update boon_of_boseiju.txt 2023-01-30 20:21:20 +00:00
Simisays
56d7fb3dec Update churning_reservoir.txt 2023-01-30 20:31:15 +01:00
Simisays
51a53934a0 Merge branch 'ONE15' of https://github.com/Simisays/forge into ONE15 2023-01-30 19:13:15 +01:00
Simisays
05c524e974 update 2023-01-30 19:03:43 +01:00
Simisays
4b9c696815 Update ichor_synthesizer.txt 2023-01-30 18:54:47 +01:00
Paul Hammerton
39f26aa4b1 Merge pull request #2350 from JohnWilliams77/patch-74
Update Eternal Weekend 2022.txt
2023-01-30 17:51:09 +00:00
Simisays
d14c863f46 update 2023-01-30 18:27:28 +01:00
JohnWilliams77
4588c8d2ce Update Eternal Weekend 2022.txt 2023-01-30 17:23:22 +00:00
tool4ever
e32d107070 Delete prowl.txt 2023-01-30 16:27:11 +00:00
tool4EvEr
b063431cf5 Clean up 2023-01-30 17:24:50 +01:00
tool4EvEr
fba50006b5 Hideaway without Remembering 2023-01-30 17:24:08 +01:00
Simisays
4ac594f707 update 2023-01-30 17:10:02 +01:00
Simisays
9e1766b2c6 update 2023-01-30 16:23:14 +01:00
tool4ever
6eb6d40271 Fix NPE (#2351) 2023-01-30 14:24:58 +00:00
Simisays
1597bbb66c Add files via upload 2023-01-30 12:23:38 +01:00
JohnWilliams77
b0d5e4a1bf Update Eternal Weekend 2022.txt 2023-01-30 10:25:21 +00:00
Simisays
a4bfd0405a ONE 4 mythics (#2343)
* update

* Update all_will_be_one.txt

* update

* Update solphim_mayhem_dominus.txt

* Update all_will_be_one.txt

* Update TriggerCounterAddedOnce.java

* Update TriggerCounterAddedOnce.java

* update
2023-01-30 13:11:46 +03:00
Paul Hammerton
768eec795e A-Patrician Geist fix (#2349) 2023-01-30 11:02:52 +01:00
tool4ever
7688740c08 Update urabrasks_forge.txt 2023-01-30 07:53:05 +01:00
Anthony Calosa
e8599ed4bc Merge pull request #2348 from jjayers99/master
Adventure shop spawn correction
2023-01-30 14:27:16 +08:00
TabletopGeneral
ccd51a6907 Merge branch 'Card-Forge:master' into master 2023-01-29 23:09:39 -05:00
jjayers99
828e3cf59a Adjust duplicate shop check to still spawn from intended list once all options have already been spawned once. 2023-01-29 18:43:32 -05:00
Anthony Calosa
1a63a6aee5 Merge pull request #2342 from jjayers99/master
Regex syntax fix for adventure mode shops
2023-01-30 06:17:31 +08:00
jjayers99
b6364df7f2 Merge branch 'master' of https://github.com/jjayers99/forge 2023-01-29 17:07:23 -05:00
Anthony Calosa
1a1a7cb805 Merge pull request #2344 from tool4ever/ONEsupport
Support: All Will Be One + Goliath Hatchery
2023-01-30 06:04:37 +08:00
Anthony Calosa
ff484e30ff Merge pull request #2346 from Agetian/fix-enlist-desc
Fix Enlist description during cost payment
2023-01-30 06:03:30 +08:00
tool4EvEr
e6874237d7 Fix trigger 2023-01-29 20:54:58 +01:00
Simisays
91d4f2fa93 Update ezuri_stalker_of_spheres.txt (#2347) 2023-01-29 18:53:12 +01:00
TabletopGeneral
6e60a9cf77 Merge branch 'Card-Forge:master' into master 2023-01-29 11:03:56 -05:00
jjayers99
283a93c168 Adventure tweaks
Fixed rotating shop with too many cards spawning. Refactored Jumpstart pack selection to prevent selecting two copies of the same pack when other options are available.
2023-01-29 11:02:37 -05:00
Agetian
b701d61658 Merge branch 'Card-Forge:master' into fix-enlist-desc 2023-01-29 17:51:53 +03:00
Michael Kamensky
8df876eb3d - Fix Enlist description during cost payment. 2023-01-29 17:50:20 +03:00
Agetian
dc58d229be Add achievements for ONE/ONC (by Marek14) (#2345)
* - Added puzzles PS_BRO1 - PS_BRO3.
- Added a way to add tokens by script from GameState.
- Fixed u_2_2_spirit_vigilance_drawcounter token name capitalization.

* - Added puzzle PS_J221

* - Added ONE/ONC achievements by Marek14.
2023-01-29 17:49:20 +03:00
tool4EvEr
8519eeed23 Clean up 2023-01-29 15:16:10 +01:00
Michael Kamensky
4fff3c43b6 - Added ONE/ONC achievements by Marek14. 2023-01-29 17:00:23 +03:00
tool4EvEr
b4a4304f3f Fix scripts 2023-01-29 14:20:39 +01:00
tool4EvEr
167c8a3f33 Support: All Will Be One + Goliath Hatchery 2023-01-29 14:20:11 +01:00
Agetian
ee6c3550f9 Merge branch 'Card-Forge:master' into master 2023-01-29 08:46:19 +03:00
jjayers99
78a85209c9 Merge branch 'master' of https://github.com/jjayers99/forge 2023-01-28 15:49:39 -05:00
jjayers99
3a8fc95731 regex syntax fix 2023-01-28 15:49:11 -05:00
TabletopGeneral
65cc489e45 Merge branch 'Card-Forge:master' into master 2023-01-28 15:46:08 -05:00
jjayers99
a93a3a555d regex syntax fix 2023-01-28 15:40:06 -05:00
Paul Hammerton
c536ef80ad Merge pull request #2341 from paulsnoops/stx_draft_fix
STX collector booster quick fix
2023-01-28 19:57:39 +00:00
paulsnoops
4caa17ec34 STX collector booster quick fix 2023-01-28 19:53:36 +00:00
paulsnoops
fce57caf85 STX collector booster quick fix 2023-01-28 19:51:24 +00:00
Paul Hammerton
400d1425e9 Merge pull request #2339 from JohnWilliams77/patch-73
Update Strixhaven Mystical Archive.txt
2023-01-28 19:37:50 +00:00
Simisays
b0f1bf9bf4 Update vraska_betrayals_sting.txt (#2340) 2023-01-28 18:35:47 +00:00
JohnWilliams77
ca80fe301b Update Strixhaven Mystical Archive.txt 2023-01-28 18:08:06 +00:00
Anthony Calosa
71afc087d9 Update CardUtil.java
remove unreachable
2023-01-29 01:25:47 +08:00
Anthony Calosa
42a339813c fix missing return 2023-01-29 01:24:53 +08:00
Anthony Calosa
b5c1fe0c91 Merge pull request #2338 from kevlahnota/newmaster2
prevent PatternSyntaxException
2023-01-29 01:22:25 +08:00
Anthony Calosa
ff74ff67c2 Merge branch 'master' into newmaster2 2023-01-29 01:10:40 +08:00
Anthony Calosa
e9e2d97889 prevent PatternSyntaxException 2023-01-29 01:09:36 +08:00
Anthony Calosa
fa36389564 Merge pull request #2336 from churrufli/master
Net Decks Archive Updates
2023-01-28 16:24:19 +08:00
Churrufli
8d9e9fb2db Net Decks Archive Updates 2023-01-28 08:57:49 +01:00
Anthony Calosa
612332ba13 Merge pull request #2335 from kevlahnota/newmaster2
update shard ui image
2023-01-28 08:09:10 +08:00
paulsnoops
96a758fc6a Booster Draft: ONE 2023-01-27 19:09:02 -05:00
Anthony Calosa
f743c0e6af update shard ui image 2023-01-28 08:07:18 +08:00
paulsnoops
a8220aa49b Alchemy Rebalancing for January 17, 2023 2023-01-27 19:04:29 -05:00
Anthony Calosa
adde942bd7 Merge pull request #2332 from jjayers99/master
DMU & BRO Jumpstart
2023-01-28 07:18:35 +08:00
Anthony Calosa
1e598f17f4 Merge pull request #2288 from Simisays/ATRAXA
ONE Atraxa, Grand Unifier and some cleanup
2023-01-28 07:02:47 +08:00
Anthony Calosa
c468759aed Merge pull request #2300 from Simisays/MOREONE
ONE 14 cards
2023-01-28 07:02:25 +08:00
Anthony Calosa
5234bae05a Merge pull request #2328 from Simisays/ONE13
ONE 10 cards
2023-01-28 07:02:05 +08:00
Simisays
8e81ecfd40 Update gleeful_demolition.txt 2023-01-27 22:52:08 +01:00
TabletopGeneral
7597dd6e4d Merge branch 'Card-Forge:master' into master 2023-01-27 16:42:41 -05:00
jjayers99
cd296818af DMU & BRO Jumpstart
Added Jumpstart packs for DMU & BRO.

Configured block data to be able to use them to play Sealed.

Revamped Adventure starter logic to use packs rather than specific sheets to support use of these packs and any others that have random contents - Added ability to select Jumpstart source to use for Standard Adventure deck creation.
2023-01-27 16:41:00 -05:00
Simisays
6f45450c94 Update blazing_crescendo.txt 2023-01-27 22:29:32 +01:00
Simisays
c5c351c5b7 Update escaped_experiment.txt 2023-01-27 22:25:30 +01:00
Simisays
2670e36629 Update blazing_crescendo.txt 2023-01-27 22:25:13 +01:00
Anthony Calosa
77282c3f6e Merge pull request #2329 from Simisays/ENLISTREMAININGCARDS
DMU YDMU 10 enlist cards
2023-01-28 04:23:38 +08:00
Simisays
9a36d00f5c Update linebreaker_baloth.txt 2023-01-27 17:55:12 +01:00
Simisays
32a4848bf8 Create hexbane_tortoise.txt 2023-01-27 15:21:28 +01:00
Simisays
3892e30dec UPDATE 2023-01-27 15:17:29 +01:00
Simisays
670aaf2516 enlist 2023-01-27 15:11:27 +01:00
Anthony Calosa
31261cd2c4 Update items_portrait.json
fix crash
2023-01-27 21:49:46 +08:00
Anthony Calosa
c871db942a Merge pull request #2326 from tool4ever/agrusfix
Fix Agrus Kos free target selection for triggers
2023-01-27 20:51:21 +08:00
TRT
4162ec4ceb Clean up 2023-01-27 13:48:19 +01:00
Simisays
14fdd6e524 update 2023-01-27 12:55:09 +01:00
Anthony Calosa
c39ac61384 Merge pull request #2265 from jjayers99/master
Adventure mode revamp, Phase 1
2023-01-27 19:47:51 +08:00
Anthony Calosa
2cc16b65d8 Merge pull request #2323 from tool4ever/controllerfix
AbilityUtils: Fix inconsistent controller
2023-01-27 19:46:24 +08:00
Anthony Calosa
1f15f2329c Merge pull request #2324 from Card-Forge/counterRemovedThisTurn
Game: add CountersRemovedThisTurn
2023-01-27 19:45:28 +08:00
Anthony Calosa
8ef1d0b34a Merge pull request #2315 from tool4ever/checkselflki
Better fix for CheckSelfLKIZone
2023-01-27 19:44:43 +08:00
Anthony Calosa
fd5801dcc2 Merge pull request #2252 from tool4ever/exertTest
Exert + Enlist from static
2023-01-27 19:44:11 +08:00
Paul Hammerton
550a4876c9 Merge pull request #2277 from Simisays/ONEMYTHICS
ONE 4 mythics
2023-01-27 11:19:44 +00:00
Simisays
2f17201716 Update capricious_hellraiser.txt 2023-01-27 12:17:04 +01:00
Paul Hammerton
da18097e15 Merge pull request #2325 from paulsnoops/edition_updates
Edition updates: ONE, ONC
2023-01-27 09:35:13 +00:00
TRT
639c20123c Fix Agrus Kos free target selection for triggers 2023-01-27 10:34:56 +01:00
paulsnoops
88efc6825b Edition updates: ONE, ONC 2023-01-27 09:32:01 +00:00
Hans Mackowiak
612349fa23 Game: add CountersRemovedThisTurn 2023-01-27 07:08:12 +01:00
jjayers99
db2baca1f1 Fix Jumpstart pack based deck generation for Standard mode starts mode
Without resetting jumpStartSheetsCandidates, a mono colored deck is generated regardless of difficulty in Standard mode, and the jumpstart cards available are not reset on new game.  As a result, not only were decks being generated in unintended fashion, but if you started a new Standard game, then restarted with another color, your deck would be named as expected but generated with the previously selected deck parameters.
2023-01-26 16:22:44 -05:00
tool4EvEr
8fb8c5fce0 Recombine trigger check 2023-01-26 18:36:01 +01:00
tool4EvEr
6d2d6dd11e Allow fallback if SA ever fails to deliver 2023-01-26 18:17:44 +01:00
tool4EvEr
15834a0d67 Fix inconsistent controller 2023-01-26 17:19:51 +01:00
jjayers99
d43b3a5b08 Removing date-altering debug code 2023-01-26 11:06:08 -05:00
jjayers99
801c5e2659 Addition of rotating mechanic based shops in color Identity towns and capitals. 2023-01-26 10:07:29 -05:00
tool4EvEr
e7ae463898 Fix param 2023-01-26 16:01:56 +01:00
tool4EvEr
703f28a21f Add labels 2023-01-26 11:46:13 +01:00
Paul Hammerton
58cd1c1df2 Merge pull request #2321 from paulsnoops/formats_one_onc
Formats update: Add ONE, ONC
2023-01-26 09:18:15 +00:00
tool4EvEr
5ae42b4c71 Clean up 2023-01-26 10:15:53 +01:00
paulsnoops
f8b111a9e6 Formats update: Add ONE, ONC 2023-01-26 09:13:19 +00:00
Paul Hammerton
d01a2ee2b9 Merge pull request #2316 from Simisays/FIX
Update goblin_trapfinder.txt
2023-01-26 08:47:01 +00:00
Paul Hammerton
de5a685ec7 Merge pull request #2320 from paulsnoops/update_editions
Edition updates: ONE, WMC
2023-01-26 08:46:12 +00:00
paulsnoops
7fca9d1bc6 Edition updates: ONE, WMC 2023-01-26 08:41:28 +00:00
Agetian
d5e933afab Added puzzle PS_J221 (#2318)
* - Added puzzles PS_BRO1 - PS_BRO3.
- Added a way to add tokens by script from GameState.
- Fixed u_2_2_spirit_vigilance_drawcounter token name capitalization.

* - Added puzzle PS_J221
2023-01-26 08:08:36 +03:00
Michael Kamensky
8ddd84e829 - Added puzzle PS_J221 2023-01-26 08:07:15 +03:00
Agetian
2a616a3396 Merge branch 'Card-Forge:master' into master 2023-01-26 07:54:25 +03:00
Simisays
0c7c69fc60 ONC 7 set booster cards (#2312)
* update

* update

* update

* Update synthesis_pod.txt

* Update chiss_goria_forge_tyrant.txt

* update

* Update lux_artillery.txt

* Update lux_artillery.txt

* Update chiss_goria_forge_tyrant.txt

* Update chiss_goria_forge_tyrant.txt

* update

* Update CostExileFromStack.java

* Update mirage_mockery.txt

Co-authored-by: tool4ever <therealtoolkit@hotmail.com>
2023-01-26 07:35:24 +03:00
t-w-o-s-a-t
37471ebf96 Update de-DE.properties (#2314)
Added and translated missing entries
2023-01-26 07:35:09 +03:00
GitHub Actions
3b94d10c0f [maven-release-plugin] prepare for next development iteration 2023-01-25 22:05:01 -05:00
GitHub Actions
2009b57a59 [maven-release-plugin] prepare release forge-1.6.54 2023-01-25 22:05:01 -05:00
Chris H
01d699d4a5 Update pom.xml 2023-01-25 22:05:01 -05:00
Simisays
b8de8b9fa1 Update goblin_trapfinder.txt 2023-01-25 22:49:28 +01:00
tool4EvEr
616309c22f Add basic AI 2023-01-25 22:47:13 +01:00
tool4EvEr
29debff0ce Update cards 2023-01-25 22:22:57 +01:00
tool4EvEr
92db787ca2 Clean up 2023-01-25 21:57:16 +01:00
tool4EvEr
d010cda88f Sick property 2023-01-25 21:42:09 +01:00
tool4EvEr
9c5d8bdc42 Use real card 2023-01-25 21:42:09 +01:00
tool4EvEr
8173032ce5 Update card 2023-01-25 21:42:08 +01:00
tool4EvEr
3d37106ecf Add Enlist trigger 2023-01-25 21:42:07 +01:00
tool4EvEr
647fcdb17d Add AI idea 2023-01-25 21:42:06 +01:00
tool4EvEr
fcc9c25725 Enlist first part 2023-01-25 21:42:05 +01:00
TRT
62dcf9d025 More flexibility 2023-01-25 21:42:04 +01:00
TRT
c706397290 Tweak host reset 2023-01-25 21:42:03 +01:00
TRT
7b63af9fba Fix text change for intrinsic triggers 2023-01-25 21:42:02 +01:00
TRT
fdca5db9aa Update card 2023-01-25 21:42:01 +01:00
tool4EvEr
cd5ef1580c Clean up 2023-01-25 21:42:00 +01:00
tool4EvEr
d636668e16 Fix older Java 2023-01-25 21:41:59 +01:00
tool4EvEr
813d16814b AI fix 2023-01-25 21:41:58 +01:00
tool4EvEr
c3ecd16ff1 Make it optional again 2023-01-25 21:41:57 +01:00
tool4EvEr
808e61afdf New class for sharing with Enlist later 2023-01-25 21:41:56 +01:00
tool4EvEr
503857f1d8 Improve trigger 2023-01-25 21:41:55 +01:00
tool4EvEr
aad5f6ce93 Clean up 2023-01-25 21:41:54 +01:00
tool4EvEr
429434a240 Exert linked 2023-01-25 21:41:52 +01:00
tool4EvEr
fefd4b1973 Better fix for CheckSelfLKIZone 2023-01-25 21:29:40 +01:00
Anthony Calosa
f10a5b128e Merge pull request #2313 from paulsnoops/fixes
Rename: Urtet, Remnant of Memnarch
2023-01-25 17:38:49 +08:00
paulsnoops
08673ef739 filename 2023-01-25 09:21:35 +00:00
paulsnoops
39ed418e7a Rename: Urtet, Remnant of Memnarch 2023-01-25 09:20:31 +00:00
Paul Hammerton
2208fbab22 Merge pull request #2311 from paulsnoops/edition_updates
Edition updates: ONE, ONC
2023-01-25 08:48:30 +00:00
paulsnoops
cb6b1573f7 Edition updates: ONE, ONC 2023-01-25 08:42:17 +00:00
Northmoc
d971658e06 expand_the_sphere.txt and support 2023-01-24 14:57:14 -05:00
Chris H
bf96fa792e Create test-maven-settings.yml
Testing the settings files
2023-01-24 09:52:13 -05:00
squee1968
5b29498286 five from one and fix a couple of typos (#2281)
* five from one

new set

* Update apostle_of_invasion.txt

* Update vanish_into_eternity.txt

* Update vanish_into_eternity.txt

* typos

* Update vanish_into_eternity.txt

* Update slaughter_singer.txt
2023-01-24 17:42:10 +03:00
Anthony Calosa
cc9006ee1c Merge pull request #2292 from Simisays/ONCBIS
ONC 6 cards
2023-01-24 21:01:42 +08:00
Anthony Calosa
c98a42e96a Merge pull request #2305 from tool4ever/pathfix
Path of Ancestry fix
2023-01-24 20:51:31 +08:00
TRT
a6ee3e820e Path of Ancestry fix 2023-01-24 13:03:56 +01:00
Paul Hammerton
0500c57d0a Merge pull request #2304 from paulsnoops/edition_updates
Edition updates: ONE, ONC
2023-01-24 09:22:48 +00:00
paulsnoops
2dccb01731 Edition updates: ONE, ONC 2023-01-24 09:14:38 +00:00
Simisays
7869ed6fa9 Update contaminant_grafter.txt 2023-01-24 08:58:10 +01:00
Simisays
e9cce0d9b8 ONC 4 cards (#2282)
* update

* Update geths_summons.txt

* Update glissas_retriever.txt

* Update g_x_x_phyrexian_wurm_trample_toxic.txt

* update

* Update glissas_retriever.txt

* Update geths_summons.txt

* update

* Update geths_summons.txt

* Update geths_summons.txt

* Update geths_summons.txt

* Update geths_summons.txt

* Update geths_summons.txt

* update

Co-authored-by: tool4ever <therealtoolkit@hotmail.com>
2023-01-24 10:43:19 +03:00
Anthony Calosa
27b170523b Merge pull request #2301 from tool4ever/rulesfix
Bolt Bend can never target Seeds of Strength
2023-01-24 13:23:39 +08:00
Agetian
5fec4c41fb Merge branch 'Card-Forge:master' into master 2023-01-24 08:04:46 +03:00
Chris H
1056a4b978 Enable github actions for creating a desktop release (#539)
Using working publish scripts
2023-01-23 23:38:52 -05:00
Simisays
556185e7ea cleanup 2023-01-23 20:35:03 +01:00
tool4EvEr
f4219d431a Fix cards 2023-01-23 20:25:06 +01:00
tool4EvEr
e37a71273e Fix Chef's Kiss 2023-01-23 19:46:02 +01:00
tool4EvEr
209da64728 Clean up into better param 2023-01-23 19:16:43 +01:00
tool4EvEr
7331a9eaf0 Bolt Bend can never target Seeds of Strength 2023-01-23 18:00:14 +01:00
tool4EvEr
b986c73e10 Fix wrong LKI usage 2023-01-23 17:16:15 +01:00
tool4EvEr
a0ccd8094b Clean up 2023-01-23 17:15:42 +01:00
tool4EvEr
5b17fa9645 Fix not being allowed to discard two cards of UnlessType 2023-01-23 16:56:52 +01:00
Simisays
16b1becf25 Update mesmerizing_dose.txt 2023-01-23 13:13:56 +01:00
Simisays
3a533cf15e Update infested_fleshcutter.txt 2023-01-23 13:13:35 +01:00
Simisays
7432dfa4be Update noxious_assault.txt 2023-01-23 13:10:45 +01:00
Simisays
d4864c0501 update 2023-01-23 13:06:38 +01:00
Simisays
5bbd368330 Update DestroyAllEffect.java 2023-01-22 17:06:06 +01:00
Simisays
be8a53e2da update 2023-01-22 17:04:26 +01:00
Simisays
05d4843e49 update 2023-01-22 15:47:44 +01:00
Simisays
0c6a4dbee8 update 2023-01-22 15:39:01 +01:00
Anthony Calosa
c42f1b8149 Merge pull request #2297 from tool4ever/sbafix
Increase SBA check precision
2023-01-22 21:59:30 +08:00
Simisays
e1b2ac4ed7 update 2023-01-22 13:14:44 +01:00
tool4EvEr
fd604e3ce6 Increase SBA check precision 2023-01-22 10:49:34 +01:00
Simisays
db64d86611 update 2023-01-22 09:55:13 +01:00
Simisays
fda54dc4ce update 2023-01-22 09:33:34 +01:00
Simisays
4ee58760c0 update 2023-01-22 09:17:38 +01:00
Simisays
888c6b16bf debate 2023-01-21 19:32:16 +01:00
Simisays
3f05e28ab3 update 2023-01-21 16:29:06 +01:00
Simisays
f18cff6047 cleanup 2023-01-21 16:22:13 +01:00
Paul Hammerton
8a6b06d872 Merge pull request #2294 from paulsnoops/edition_updates
Edition updates: ONE, ONC
2023-01-21 14:38:06 +00:00
paulsnoops
7ad5a9e196 Edition updates: ONE, ONC 2023-01-21 14:34:26 +00:00
Anthony Calosa
2f94f94859 Merge pull request #2293 from tool4ever/twofixes
Two fixes
2023-01-21 20:07:43 +08:00
Simisays
ba110547d7 Update contaminant_grafter.txt 2023-01-21 12:06:30 +01:00
TRT
37c7994884 Fix NPE when retargeting copied spell with distribution 2023-01-21 12:03:50 +01:00
TRT
ecab8e082e Fix static 2023-01-21 12:02:58 +01:00
Simisays
20202ae92c Update norns_decree.txt 2023-01-21 11:59:25 +01:00
Simisays
81e34e9021 update 2023-01-21 11:56:08 +01:00
Simisays
d10aca5805 Update phyresis_outbreak.txt 2023-01-21 11:04:28 +01:00
Simisays
3528b85f5f Update norns_decree.txt 2023-01-21 11:03:43 +01:00
Simisays
b37ffbf1ea update 2023-01-21 10:59:59 +01:00
Simisays
cb6c183cf2 update 2023-01-21 10:19:26 +01:00
Simisays
7738dca246 update 2023-01-21 08:10:14 +01:00
Anthony Calosa
1ca2402c65 Merge pull request #2291 from squee1968/patch-5
Update necrogen_rotpriest.txt
2023-01-21 12:06:49 +08:00
squee1968
5ae528b087 Update necrogen_rotpriest.txt 2023-01-20 20:36:27 -06:00
Anthony Calosa
e61d427f62 Merge pull request #2290 from squee1968/patch-4
Update myr_convert.txt
2023-01-21 10:34:04 +08:00
squee1968
e328a5d10f Update myr_convert.txt 2023-01-20 20:31:39 -06:00
Anthony Calosa
7c597a8f0f Merge pull request #2287 from tool4ever/svarclean
Cleanup some SVar
2023-01-21 08:41:16 +08:00
Anthony Calosa
7610378402 Merge pull request #2275 from tool4ever/verrak_fix
Fix Verrak
2023-01-21 08:38:33 +08:00
Anthony Calosa
2e53b7019a Merge pull request #2273 from tool4ever/lkifix2
Fix timestamp reset messing up LKI
2023-01-21 08:34:36 +08:00
tool4EvEr
990b943d9d Clean costs 2023-01-20 22:47:49 +01:00
tool4EvEr
ac54fe29b9 Order can be wrong in cases the card ETB from different zones 2023-01-20 22:26:48 +01:00
Simisays
598054817f Update atraxa_grand_unifier.txt 2023-01-20 22:26:45 +01:00
Simisays
777faf5a94 Create atraxa_grand_unifier.txt 2023-01-20 18:32:05 +01:00
TRT
96a16e072d Cleanup some SVar 2023-01-20 17:27:06 +01:00
Paul Hammerton
ba233b86b8 Merge pull request #2286 from paulsnoops/onc_oops
Fix wrong edition type for ONC
2023-01-20 16:13:02 +00:00
paulsnoops
5bb0858cde Fix wrong edition type for ONC 2023-01-20 16:06:26 +00:00
Paul Hammerton
72e0b84c31 Merge pull request #2272 from Northmoc/one_nissa
nissa_ascended_animist.txt and token
2023-01-20 15:51:33 +00:00
Paul Hammerton
55e4a0f7c1 Merge pull request #2263 from Simisays/ONE10
ONE 10 cards
2023-01-20 15:50:54 +00:00
Paul Hammerton
809c043a88 Merge pull request #2285 from paulsnoops/edition_updates
Edition updates: ONE, ONC, UNF, 40K
2023-01-20 14:36:12 +00:00
paulsnoops
de627bdc62 Edition updates: ONE, ONC, UNF, 40K 2023-01-20 14:32:57 +00:00
Simisays
df1004b023 remove blanks (#2280) 2023-01-20 14:27:35 +01:00
Northmoc
cae6d8deca straighten out Compleated reminder text 2023-01-20 08:23:52 -05:00
Northmoc
cce4fc27ea Merge pull request #2276 from Simisays/AssembleTeamFix
Update assemble_the_team.txt
2023-01-20 08:13:31 -05:00
Simisays
5fa2e1ec80 Update sword_of_forge_and_frontier.txt 2023-01-20 10:34:17 +01:00
TRT
afb8a8a756 Further cleanup 2023-01-20 10:03:34 +01:00
Agetian
5a6f0cab0d - Added puzzles PS_BRO1 - PS_BRO3. (#2279)
- Added a way to add tokens by script from GameState.
- Fixed u_2_2_spirit_vigilance_drawcounter token name capitalization.
2023-01-20 11:35:11 +03:00
Michael Kamensky
bec4c4cb53 - Added puzzles PS_BRO1 - PS_BRO3.
- Added a way to add tokens by script from GameState.
- Fixed u_2_2_spirit_vigilance_drawcounter token name capitalization.
2023-01-20 10:01:55 +03:00
Simisays
5eb7262797 Update sword_of_forge_and_frontier.txt 2023-01-19 22:42:30 +01:00
Simisays
025eaa0fa0 Delete atraxa_grand_unifier.txt 2023-01-19 22:01:44 +01:00
Simisays
7de46dc592 update 2023-01-19 21:59:57 +01:00
Simisays
acc2bb8532 Update assemble_the_team.txt 2023-01-19 20:44:20 +01:00
tool4EvEr
e0fec88cf2 Fix Verrak 2023-01-19 20:15:06 +01:00
TabletopGeneral
55cdf649a0 Shop list correction 2023-01-19 14:13:38 -05:00
TabletopGeneral
5f5a59b802 Removing unused imports 2023-01-19 14:06:21 -05:00
TabletopGeneral
83f53b15a0 Removing unused import 2023-01-19 14:05:37 -05:00
TRT
088e216c8c Clean up 2023-01-19 17:15:42 +01:00
TRT
33e8dc7fe2 Fix timestamp reset messing up LKI 2023-01-19 16:31:09 +01:00
TRT
3a044a50d0 Clean up 2023-01-19 16:30:45 +01:00
Simisays
75f0d86c04 Update rhuk_hexgold_nabber.txt 2023-01-19 14:51:21 +01:00
Northmoc
dec565d6a6 nissa_ascended_animist.txt and token 2023-01-19 08:31:52 -05:00
Simisays
f6313db82c Update mite_overseer.txt 2023-01-19 13:41:29 +01:00
Paul Hammerton
e2b7cd2f5f Merge pull request #2270 from Card-Forge/plist_update
Edition update: PLIST
2023-01-19 11:36:00 +00:00
Paul Hammerton
47f56cb25f Edition update: PLIST 2023-01-19 11:29:53 +00:00
Paul Hammerton
8fd84a7032 Merge pull request #2266 from Simisays/MYR
[UNC] Urtet Remains of Memnarch
2023-01-19 10:11:58 +00:00
Paul Hammerton
1aafa36f79 Merge pull request #2268 from Card-Forge/edition_updates
Edition updates: ONE, ONC, SCH
2023-01-19 09:56:24 +00:00
Paul Hammerton
260b8a95dc one_update 2023-01-19 09:53:09 +00:00
Simisays
da4019ebe0 Update bladehold_war_whip.txt 2023-01-19 10:46:12 +01:00
Paul Hammerton
e387b8e779 onc edition 2023-01-19 09:45:27 +00:00
Paul Hammerton
d7a1c0f439 Rename Store Championships 2022.txt to Store Championships.txt 2023-01-19 09:41:54 +00:00
Paul Hammerton
716742a3bf Update Store Championships 2022.txt 2023-01-19 09:41:13 +00:00
Simisays
4abb322c79 Update urtet_remains_of_memnarch.txt 2023-01-19 09:29:08 +01:00
Simisays
8092e7c14b Update urtet_remains_of_memnarch.txt 2023-01-19 09:24:13 +01:00
Simisays
f459450241 Create urtet_remains_of_memnarch.txt 2023-01-19 09:04:22 +01:00
TabletopGeneral
33a1570011 Merge branch 'Card-Forge:master' into master 2023-01-19 00:10:11 -05:00
jjayers99
13d1949208 Adventure overhaul, phase 1 2023-01-19 00:09:07 -05:00
Anthony Calosa
1b9b6a0bd8 Merge pull request #2258 from Simisays/vraska
ONE Vraska, Betrayal's Sting & Jace, the Perfected Mind
2023-01-19 07:04:18 +08:00
Anthony Calosa
de0b50b80b Merge pull request #2264 from tool4ever/twofixes
Two fixes
2023-01-19 07:03:31 +08:00
Simisays
2d58167b9e update 2023-01-18 15:55:52 +01:00
Simisays
a13ced6e70 update 2023-01-18 15:48:57 +01:00
Simisays
5e2b565356 Update jace_the_perfected_mind.txt 2023-01-18 15:43:08 +01:00
TRT
bb825fa9c0 Fix static 2023-01-18 14:09:24 +01:00
TRT
1afb0c0e91 Fix Karn missing ETB trigger on cards returned from restart 2023-01-18 14:09:05 +01:00
Simisays
4243037242 Update annex_sentry.txt 2023-01-18 13:44:55 +01:00
Simisays
39b93d0302 Update annex_sentry.txt 2023-01-18 13:44:36 +01:00
Simisays
14b92a0fb7 update 2023-01-18 13:42:15 +01:00
Simisays
c7e5edd878 Update vraska_betrayals_sting.txt 2023-01-18 11:21:16 +01:00
Anthony Calosa
c8a55d953b Merge pull request #2253 from tool4ever/costTweaks
Cost tweaks
2023-01-18 18:11:43 +08:00
Anthony Calosa
cac34dd80a Merge pull request #2259 from tool4ever/lkifix
LKI fix
2023-01-18 18:09:23 +08:00
Simisays
388a0fbdbf Update vraska_betrayals_sting.txt 2023-01-18 11:06:56 +01:00
TRT
8fed46c95f LKI fix 2023-01-18 10:43:28 +01:00
Simisays
3ae0a86ff1 update 2023-01-18 10:09:58 +01:00
Paul Hammerton
02d2a1c486 Merge pull request #2257 from Card-Forge/one_edition_update
Edition update: ONE
2023-01-18 08:51:34 +00:00
Paul Hammerton
229c63f851 Edition update: ONE 2023-01-18 08:47:16 +00:00
Paul Hammerton
1fd4b59471 Merge pull request #2256 from paulsnoops/iko_zilortha
Edition update: IKO (add Arena only Zilortha variant)
2023-01-17 17:14:00 +00:00
paulsnoops
b7dfc1f060 Edition update: IKO (add Arena only Zilortha variant) 2023-01-17 17:10:45 +00:00
tool4EvEr
6a0cf24e1e Clean up 2023-01-17 16:38:34 +01:00
Paul Hammerton
faf09e020e Merge pull request #2255 from JohnWilliams77/patch-72
Update Secret Lair Drop Series.txt
2023-01-17 14:47:02 +00:00
JohnWilliams77
0d82f4f5f0 Update Secret Lair Drop Series.txt 2023-01-17 13:08:32 +00:00
tool4EvEr
353c0d82cd Jotun fix 2023-01-17 13:11:11 +01:00
tool4EvEr
8a608e30d4 Fix merging logic to correctly avoid cost mixups 2023-01-17 13:09:51 +01:00
tool4EvEr
654d80d39c Improve cost merging 2023-01-17 11:04:46 +01:00
tool4EvEr
444a5629a8 Fix reloading interacting with objects from old state 2023-01-17 10:59:24 +01:00
tool4EvEr
86c814af96 Cleanup check for Mishra, Tamer of Mak Fawa 2023-01-17 00:12:38 +01:00
Simisays
7057861ad6 Create vraska_betrayals_sting.txt 2023-01-16 13:57:39 +01:00
Paul Hammerton
2c63c60750 Merge pull request #2251 from paulsnoops/portal_edition_fix
Edition update: POR
2023-01-16 11:34:03 +00:00
paulsnoops
a1147198b2 Edition update: POR 2023-01-16 11:30:01 +00:00
Anthony Calosa
5923b13401 Merge pull request #2208 from HassanSky81/master
Posibility to add more decks for any enemy and new decks are loaded based on algorithm
2023-01-16 19:24:07 +08:00
Anthony Calosa
6d5fd1143c Merge pull request #2245 from tool4ever/walllash
Wall of Shadows + Thought Lash fix
2023-01-16 19:23:47 +08:00
Anthony Calosa
2c40b12ecf Merge pull request #2247 from add-le/lang-fr
French translations
2023-01-16 19:16:26 +08:00
Anthony Calosa
5e2a1a586f Merge pull request #2248 from tool4ever/ETBlki
TriggerChangesZone: improve ETB check
2023-01-16 19:13:44 +08:00
Anthony Calosa
ee24fb38b2 Merge pull request #2243 from Simisays/ONE8
ONE 5 cards
2023-01-16 19:12:50 +08:00
Paul Hammerton
df7b916f49 Merge pull request #2249 from JohnWilliams77/patch-71
Create Wizards Play Network 2023.txt
2023-01-16 11:02:17 +00:00
JohnWilliams77
3ac7ef5905 Update Wizards Play Network 2023.txt 2023-01-16 10:27:46 +00:00
JohnWilliams77
ddf161c2a7 Create Wizards Play Network 2023.txt 2023-01-16 09:23:03 +00:00
tool4EvEr
781b2dadf8 TriggerChangesZone: improve ETB check 2023-01-15 22:34:54 +01:00
add-le
063b2337ab Merge branch 'Card-Forge:master' into lang-fr 2023-01-15 15:44:08 +01:00
add-le
014c4acc36 fix wrong symbols ')' -> 'C' 2023-01-15 15:42:11 +01:00
add-le
7b14746902 16 cards translated in French 2023-01-15 15:15:49 +01:00
tool4EvEr
cdb86c30a9 Drought only looks at mana cost 2023-01-15 10:40:20 +01:00
tool4EvEr
7db4624d92 Wall of Shadows + Thought Lash fix 2023-01-15 10:19:24 +01:00
Simisays
178ed9d2e8 update 2023-01-14 20:11:53 +01:00
Simisays
79d62ce1c4 update 2023-01-14 18:57:47 +01:00
Simisays
45b21a3804 update 2023-01-14 18:43:59 +01:00
tool4ever
b0bc41f09c Some cleanup (#2242) 2023-01-14 15:56:01 +00:00
asvitkine
065f8777eb Speed up simulation AI code. (#2241)
This change speeds up simulation AI code by as much as 30% (!) by optimizing getChangedCardTypes() when they are unchanged. That method is on the hot path of a lot of engine code, such as evaluating static and replacement effects.

On a specific game state I was testing with, it made a simulation that was taking ~26s previously to 18s after this change.

Another minor optimization is included as well, which avoids some unnecessary sb.toString() calls.
2023-01-14 15:54:55 +00:00
Paul Hammerton
6a4bd7ebe0 Merge pull request #2240 from paulsnoops/one_edition_update
Edition update: ONE
2023-01-14 11:13:57 +00:00
paulsnoops
49ea951120 Edition update: ONE 2023-01-14 11:09:55 +00:00
Hans Mackowiak
de023124cb Merge pull request #2239 from asvitkine/new_empty
Small code speed up: Avoid calling getFirstAbility() redundantly.
2023-01-14 08:56:24 +01:00
asvitkine
4a8196b373 Small code speed up: Avoid calling getFirstAbility() redundantly.
This was showing up in simulation AI profiles.
2023-01-14 00:53:12 -05:00
Anthony Calosa
e0080f8d43 Merge pull request #2238 from tool4ever/simfix
Simulation: Fix including unjustified decisions
2023-01-14 07:43:46 +08:00
Anthony Calosa
99b9da15b0 Merge pull request #2233 from Simisays/FORMIRRODIN
ONE For Mirrodin
2023-01-14 07:43:01 +08:00
Anthony Calosa
90128a8dab Merge pull request #2231 from Simisays/ONE5
ONE 8 cards
2023-01-14 07:42:18 +08:00
Anthony Calosa
d10d95dc97 Merge pull request #2237 from t-w-o-s-a-t/master
Update de-DE.properties
2023-01-14 07:41:52 +08:00
Simisays
9524987a71 ONE 5 cards (#2236) 2023-01-13 21:24:39 +00:00
tool4EvEr
c2cea6fb3c Fix including unjustified decisions 2023-01-13 19:32:16 +01:00
Simisays
7334ed4a67 Update white_suns_twilight.txt 2023-01-13 18:45:43 +01:00
t-w-o-s-a-t
7eb18cffce Update de-DE.properties
translated lblMustChoose
streamlined lblExitToWoldMap
2023-01-13 18:19:58 +01:00
Simisays
a52fba1e3c Update blade_of_shared_souls.txt 2023-01-13 17:27:30 +01:00
Simisays
a43863806b Update dragonwing_glider.txt 2023-01-13 17:06:29 +01:00
Simisays
2b8f2bc11c update 2023-01-13 17:05:42 +01:00
Simisays
4fc61aeb64 update 2023-01-13 16:38:59 +01:00
Simisays
5a8decdf96 update 2023-01-13 16:02:43 +01:00
Simisays
cdc2c1896c update 2023-01-13 15:59:35 +01:00
Simisays
e03023aee8 update 2023-01-13 11:38:14 +01:00
Anthony Calosa
643c21c0c4 Merge pull request #2232 from Card-Forge/cantblockKeywords
remove use of AddHiddenKeyword
2023-01-13 07:20:10 +08:00
tool4ever
7ef1f64870 Some cleanup (#2234) 2023-01-12 19:04:03 +00:00
Simisays
e2ce0e9ba0 update 2023-01-12 15:21:01 +01:00
Simisays
ef41f5e373 update 2023-01-12 15:07:43 +01:00
Simisays
7813be185b update 2023-01-12 14:57:57 +01:00
Simisays
6f625ca6bc Update blade_of_shared_souls.txt 2023-01-12 13:39:03 +01:00
Simisays
eeaab9bf59 Update blade_of_shared_souls.txt 2023-01-12 13:27:32 +01:00
Simisays
82a0fdade0 cleanup 2023-01-12 13:24:40 +01:00
Simisays
c17fa1e15f Update blade_of_shared_souls.txt 2023-01-12 12:39:35 +01:00
asvitkine
c207a2def9 Simulated AI: Fix multi-target spell simulation. (#2181)
* Simulated AI: Fix multi-target spell simulation.

Removes an incorrect check that was comparing two semantically different things (number of possible to choose from vs. number of targets chosen). Adds a test using Incremental Growth, where number of possible targets is 5, but the spell requires only 3 to be chosen.

* Fix the root issue and eliminate incorrect simulations.

* Fix infinite loop with invalid targets.

* Fix logic.
2023-01-12 11:38:27 +00:00
Simisays
41618a4f4f update 2023-01-12 11:42:43 +01:00
Hans Mackowiak
7dce61044e remove use of AddHiddenKeyword 2023-01-12 10:26:12 +01:00
Simisays
fad2d39172 UPDATE 2023-01-11 21:27:47 +01:00
Simisays
bdfbe7f2b2 update 2023-01-11 17:30:26 +01:00
HassanSky81
d3c3a131d8 Merge branch 'Card-Forge:master' into master 2023-01-11 15:27:38 +02:00
tool4ever
876668c370 Fix Stack Overflow (#2228)
* Fix cards

* Fix Stack Overflow

* Performance fix

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
Co-authored-by: TRT <>
2023-01-11 14:06:12 +03:00
add-le
a5583a935d french translations 2023-01-10 21:49:19 +01:00
add-le
8d206f73ca remove wrong cards 2023-01-10 21:25:49 +01:00
Paul Hammerton
11a893e64a Merge pull request #2223 from Simisays/ONE3
ONE 5 cards
2023-01-10 20:25:39 +00:00
Paul Hammerton
789ce283ce Merge pull request #2224 from Simisays/ONE4
ONE 7 cards
2023-01-10 20:25:31 +00:00
add-le
ef6076c3f8 french translations 2023-01-10 21:22:26 +01:00
TabletopGeneral
6af99d7f01 Merge branch 'Card-Forge:master' into master 2023-01-10 14:54:05 -05:00
Anthony Calosa
af2fd2cc11 Update tamiyo_compleated_sage.txt
- closes #2226
2023-01-11 02:53:03 +08:00
Simisays
8912bcb2cb update 2023-01-10 18:34:51 +01:00
Simisays
dd34235728 update 2023-01-10 18:31:17 +01:00
Northmoc
73a9c83b05 ONE: Elesh Norn, Mother of Machines and support (#2179)
* elesh_norn_mother_of_machines.txt

* StaticAbilityDisableTriggers.java
2023-01-10 14:55:00 +00:00
Simisays
8680630d4b Update conduit_of_worlds.txt 2023-01-10 15:38:39 +01:00
Simisays
f45447b816 Update conduit_of_worlds.txt 2023-01-10 14:29:03 +01:00
Simisays
aa1e277831 Merge branch 'ONE4' of https://github.com/Simisays/forge into ONE4 2023-01-10 14:27:52 +01:00
Simisays
132df49fe4 Update conduit_of_worlds.txt 2023-01-10 14:27:29 +01:00
Simisays
b24d6b1b22 Update conduit_of_worlds.txt 2023-01-10 14:06:19 +01:00
Simisays
1202a4f0f3 Update conduit_of_worlds.txt 2023-01-10 14:04:39 +01:00
Simisays
913c7b2d93 Update evolved_spinoderm.txt 2023-01-10 12:29:38 +01:00
Simisays
9fed4432a1 update 2023-01-10 12:18:49 +01:00
Simisays
70fe54c255 update 2023-01-10 12:10:12 +01:00
Simisays
09043d1c00 Delete conduit_of_worlds.txt 2023-01-10 10:33:01 +01:00
Simisays
5feb79a0af update 2023-01-10 10:31:56 +01:00
Anthony Calosa
8250082c22 Update necromancy.txt
Fix typo
2023-01-10 07:20:37 +08:00
Simisays
3fe7bf64e1 update 2023-01-09 23:01:33 +01:00
Simisays
f96a701f95 update 2023-01-09 22:39:17 +01:00
Simisays
0d33400ec3 update 2023-01-09 14:47:49 +01:00
Simisays
49fb4cf218 ONE 5 sphere cards (#2215)
* update

* update

* update

* Update monument_to_perfection.txt
2023-01-09 12:11:31 +01:00
Anthony Calosa
3e9d93522e Merge pull request #2217 from tool4ever/dedupe
Performance: improve deduping
2023-01-09 19:07:20 +08:00
TRT
fc53c3ab84 Fix card 2023-01-09 11:55:57 +01:00
TRT
217ec8e3fe Fix NPE 2023-01-09 09:38:38 +01:00
TRT
830d0afba2 Clean up 2023-01-09 08:22:29 +01:00
tool4EvEr
58fcee689f Fix cards 2023-01-08 23:50:38 +01:00
tool4EvEr
f783d5a198 Performance: improve deduping 2023-01-08 23:14:47 +01:00
Hans Mackowiak
fb3f14db71 ONE: Toxic Keyword (#2213)
* ONE: Toxic Keyword

* more scripts

* Proliferate Trigger

* add proliferate trigger

* ~ add Toxic to ai part

* ~ more toxic cards

* add Venser Corpse Puppet

* ~ fix jiang

* ~ fix venser

* predictPoisonFromTriggers Toxic+Double Strike
2023-01-08 23:13:58 +03:00
TabletopGeneral
53beaef96c Merge branch 'Card-Forge:master' into master 2023-01-08 11:47:30 -05:00
Anthony Calosa
e198b8dafa Merge pull request #2214 from Simisays/ONEBIS
ONE 5 cards
2023-01-08 11:51:28 +08:00
tool4ever
87c79300d9 Update argentum_masticore.txt 2023-01-07 16:41:11 +00:00
Simisays
4432de4df0 Update migloz_maze_crusher.txt 2023-01-07 15:41:34 +01:00
Simisays
faf0f3f1fd PH21 Arteeoh, Dread Scaveneger (#2211)
* Create arteeoh_dread_scavenger.txt

* Update arteeoh_dread_scavenger.txt

* Update arteeoh_dread_scavenger.txt

* Update arteeoh_dread_scavenger.txt

* Update arteeoh_dread_scavenger.txt

* Update arteeoh_dread_scavenger.txt

* Update arteeoh_dread_scavenger.txt
2023-01-07 09:31:30 -05:00
Simisays
2ee9d3f355 Update argentum_masticore.txt 2023-01-07 14:32:44 +01:00
Simisays
c88caf6dbf Update argentum_masticore.txt 2023-01-07 14:21:29 +01:00
Simisays
960b2531a3 update 2023-01-07 14:17:25 +01:00
Simisays
b9b49d9f26 update 2023-01-07 13:34:12 +01:00
Anthony Calosa
9582a1d165 Merge pull request #2212 from tool4ever/untilTiming
Rework UntilHostLeavesPlay timing
2023-01-07 07:18:26 +08:00
tool4EvEr
c23bf249f5 Trigger fix 2023-01-06 22:57:52 +01:00
tool4EvEr
794fc11ab1 Rework UntilHostLeavesPlay timing 2023-01-06 22:17:38 +01:00
add-le
6103fe3e89 label used in LandAbility 2023-01-06 19:53:41 +01:00
add-le
408ff32e32 french typos 2023-01-06 19:51:34 +01:00
add-le
9c8829571b french translations 2023-01-06 19:50:55 +01:00
George
fba9c3ad2e Merge remote-tracking branch 'origin/master' 2023-01-06 11:37:22 +02:00
George
0032d35be0 Correct the update of POIChanges for bought cards from shops 2023-01-06 11:33:09 +02:00
Paul Hammerton
9e15abee84 Merge pull request #2207 from paulsnoops/PH21_update
Edition update: PH21
2023-01-06 09:14:23 +00:00
paulsnoops
70a062afd3 Edition update: PH21 2023-01-06 09:08:00 +00:00
Paul Hammerton
48e9c676e9 Merge pull request #2206 from paulsnoops/update_formats
Formats update: Add DMR
2023-01-06 08:52:33 +00:00
paulsnoops
0bc50c313c Formats update: Add DMR 2023-01-06 08:49:04 +00:00
Anthony Calosa
a91be00f40 Merge pull request #2203 from HassanSky81/master
Do not clear POI changes after reload
2023-01-06 15:58:39 +08:00
sky81
ef14fb934a Do not clear POI changes after reload 2023-01-06 09:07:04 +02:00
Anthony Calosa
41cd6935a8 Merge pull request #2202 from tool4ever/discardedthisturn
Fix DiscardedThisTurn
2023-01-06 13:28:06 +08:00
TRT
b1df2d1008 Fix DiscardedThisTurn 2023-01-05 16:10:50 +01:00
Anthony Calosa
40dbdec31c Merge pull request #2199 from tool4ever/canthappen
ReplacementLayer.CantHappen
2023-01-05 16:53:00 +08:00
Anthony Calosa
05be9bebb2 Merge pull request #2201 from kevlahnota/newmaster2
ValidCard$ Self to ValidCard$ Card.Self
2023-01-05 12:33:50 +08:00
Anthony Calosa
b72d8aea04 Merge pull request #2200 from invalidCards/scd-precons
Add SCD precons
2023-01-05 12:33:35 +08:00
Anthony Calosa
58eb11ec56 ValidCard$ Self to ValidCard$ Card.Self
fixes Moonshae Pixie
2023-01-05 12:25:39 +08:00
tool4EvEr
50966d3f7a Morph fix 2023-01-04 22:43:17 +01:00
invalidCards
838fa0cc1f Add SCD precons 2023-01-04 22:34:45 +01:00
tool4EvEr
8986a025e7 Also remove controller 2023-01-04 22:25:04 +01:00
tool4EvEr
e8704e3c5e Fix auras losing all previous traits when they can't ETB 2023-01-04 22:16:02 +01:00
tool4EvEr
a51582237a Stonehewer Giant fix when it can't ETB 2023-01-04 20:49:06 +01:00
tool4EvEr
58a917e667 Store timestamp to be safe 2023-01-04 20:33:35 +01:00
tool4EvEr
96037f9388 Fix cards 2023-01-04 20:29:55 +01:00
TRT
414fb3fcef Improve cleanup when card can't ETB 2023-01-04 16:15:16 +01:00
TRT
0250c9ca0b Fix missing LKI for Startled Awake 2023-01-04 16:14:34 +01:00
TRT
c7feb44214 Fix "can't happen" applied with other replacements 2023-01-04 16:13:26 +01:00
tool4ever
359a97462e Few fixes (#2198)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2023-01-04 08:04:17 +03:00
Paul Hammerton
75d79cab5e Merge pull request #2195 from JohnWilliams77/patch-70
Update Secret Lair Drop Series.txt
2023-01-02 14:58:38 +00:00
JohnWilliams77
6dadf396c1 Update Secret Lair Drop Series.txt 2023-01-02 09:52:10 +00:00
Anthony Calosa
de7092aab8 Merge pull request #2194 from kevlahnota/newmaster2
fix copying deck to clipboard
2023-01-02 15:57:06 +08:00
Anthony Calosa
944933fd12 fix copying deck to clipboard 2023-01-02 15:55:31 +08:00
Anthony Calosa
616c234574 Merge pull request #2192 from tool4ever/loyaltyact
Fix NumLoyaltyAct counting limit and additional wrong together
2023-01-02 09:03:19 +08:00
Anthony Calosa
776c7873af Update CardDetailUtil.java
fix facedown typeline status
2023-01-01 21:18:34 +08:00
tool4EvEr
e63ba22630 Fix NumLoyaltyAct counting limit and additional wrong together 2022-12-31 10:48:06 +01:00
Paul Hammerton
fa433ce94e Merge pull request #2191 from JohnWilliams77/patch-69
Update Secret Lair Drop Series.txt
2022-12-30 18:20:54 +00:00
Northmoc
f67f5636e0 ONE: Green Sun's Twilight and support (#2175) 2022-12-30 17:48:09 +00:00
tool4ever
a2d93861cf Script fixes (#2189)
* Update captain_rex_nebula.txt

* Update pirated_copy.txt

* Update face_of_divinity.txt

* Fix Primal Amulet transforming if counter gets replaced
2022-12-30 17:47:56 +00:00
JohnWilliams77
c3dcd36458 Update Secret Lair Drop Series.txt 2022-12-30 12:44:01 +00:00
JohnWilliams77
6bc950c508 Update Secret Lair Drop Series.txt 2022-12-30 09:15:46 +00:00
Anthony Calosa
7e7f36d1f0 Merge pull request #2186 from kevlahnota/newmaster2
fix Adventure cards in exile lose "may be cast" when rewinding casting
2022-12-29 10:18:51 +08:00
Anthony Calosa
4f365848e1 update 2022-12-29 10:11:48 +08:00
Anthony Calosa
dc17e44289 Merge pull request #2139 from asvitkine/cleanup_lobby_ui3
Clean up lobby code and fix a deck deselect bug.
2022-12-29 09:46:00 +08:00
Anthony Calosa
952950b8db Merge pull request #2184 from pakoito/patch-2
Fix language bundle log string
2022-12-29 09:44:57 +08:00
Anthony Calosa
fb4239196f Merge branch 'master' into newmaster2 2022-12-29 09:44:26 +08:00
Anthony Calosa
21f9223981 fix Adventure cards in exile lose "may be cast" when rewinding casting
- closes #2176
2022-12-29 09:34:05 +08:00
tool4ever
24e32e7af6 Clean up (#2185) 2022-12-28 21:45:53 +00:00
asvitkine
d6af6aa68f Fix deck re-randomization on new game. 2022-12-28 14:04:15 -07:00
Paco
64a980b156 Fix loading bundle string 2022-12-28 20:59:53 +00:00
asvitkine
88308ecd5c Support export/import states with arbitrary players. (#2168)
* Support export/import states with arbitrary players.

Previously, the dump/setup game state dev options were only able to handle a 2-player human vs. AI game. This PR expands the functionality to support any number of players and ignores the type of player (naming them p0,p1,...,pN). The previous names of ai and human are supported for backwards compatibility.
2022-12-28 14:56:16 +00:00
Anthony Calosa
e20d40a435 Merge pull request #2137 from JohnWilliams77/patch-66
SLX Variants
2022-12-28 22:38:25 +08:00
Anthony Calosa
def1c53bda Merge pull request #2161 from HassanSky81/master
Correct the update of POIChanges for bought cards from shops
2022-12-28 22:36:22 +08:00
asvitkine
b0d5d952e8 Add "ask simulated ai" dev option. (#2180)
* Add "ask simulated ai" dev option.

Also moves the setup/dump game state options at the end of the list, as they're different from the other ones and shouldn't just be in the middle.

Also makes the code a bit more concise for the different mouse listeners.

* Fix comment location.
2022-12-28 10:02:47 +00:00
tool4ever
b51c6a3f1b Clean up (#2182) 2022-12-28 07:15:17 +00:00
HassanSky81
7a3c19992a Update PointOfInterestChanges.java 2022-12-27 22:34:31 +02:00
Mike S
a886305410 ONE: Kaito, Dancing Shadow + Token script (#2163)
* ONE: Kaito, Dancing Shadow + Token script

ONE: Added script for Kaito, Dancing Shadow, plus his token script.

- Kaito, Dancing Shadow
- 2/2 colorless Drone artifact creature token with deathtouch and "When this creature leaves the battlefield, each opponent loses 2 life and you gain 2 life."

* Update c_2_2_a_drone_deathtouch_leavedrain.txt

* Engine change to DamageDoneOnce

Engine change to accommodate proposed change to Kaito, Dancing Shadow's script

* Update TriggerDamageDoneOnce.java

* Update kaito_dancing_shadow.txt

* Update kaito_dancing_shadow.txt

* Update TriggerDamageDoneOnce.java

fix indention

* Update kaito_dancing_shadow.txt

Co-authored-by: Hans Mackowiak <hanmac@gmx.de>
2022-12-27 08:50:38 -05:00
Anthony Calosa
a00dc8fc4c Update wicked_guardian.txt
- closes #2172
2022-12-27 10:55:59 +08:00
Anthony Calosa
dc348969bc Merge pull request #2171 from DorkmasterFlek/card-set-filter-crash
Fix crash when filtering card sets in workshop
2022-12-27 09:31:56 +08:00
DorkmasterFlek
0645b23405 Fix crash when filtering card sets in workshop
Null pointer exception caused a crash when trying to filter by set in the debug workshop.  Null value was in the limitedSets parameter being passed in.
2022-12-26 15:44:42 -05:00
Northmoc
ef44210a56 ONE – 21 Dec (leaked card scripts) (#2151)
* bonepicker_skirge.txt

* sinew_dancer.txt

* quicksilver_fisher.txt

* sawblade_scamp.txt

* furnace_punisher.txt
2022-12-26 19:14:15 +00:00
Northmoc
59d71045e0 tighten up Adversary cycle from MID (#2162) 2022-12-26 18:40:45 +00:00
Northmoc
abe5828195 YBRO: By Elspeth's Command and Yotian Courier + support (#2114)
* by_elspeths_command.txt with support v1

* yotian_courier.txt
2022-12-26 13:25:15 -05:00
Anthony Calosa
f61fec3d02 Update livio changezoneall 2022-12-27 00:54:36 +08:00
tool4ever
037f1d0b7b Some fixes (#2170) 2022-12-26 09:42:03 +00:00
Anthony Calosa
a5decc0b78 Merge pull request #2157 from asvitkine/sim_imprv
Simulated AI: Fix land pruning logic and skip invalid targets.
2022-12-26 11:43:34 +08:00
jjayers99
ed51e606da Forest town sprite fix 2022-12-25 18:11:28 -05:00
Paul Hammerton
247ec986a7 Merge pull request #2166 from paulsnoops/sld_update
SLD Update
2022-12-25 18:47:20 +00:00
paulsnoops
01780ce433 SLD Update 2022-12-25 18:42:58 +00:00
Paul Hammerton
a14be95989 Merge pull request #2160 from JohnWilliams77/patch-68
Update Secret Lair Drop Series.txt
2022-12-25 18:25:46 +00:00
JohnWilliams77
9097acdca5 Update Secret Lair Drop Series.txt 2022-12-25 15:21:04 +00:00
JohnWilliams77
c22eb54dff Update Secret Lair Drop Series.txt 2022-12-25 09:48:12 +00:00
asvitkine
00c6771608 Fix ArrayIndexOutOfBounds exception printed to stderr. (#2141) 2022-12-25 09:11:52 +00:00
JohnWilliams77
34085f22f0 Update Secret Lair Drop Series.txt 2022-12-25 09:11:06 +00:00
jjayers99
9da7f17578 Adventure Mode shop Expansion (Merge fix)
Slight corrections to waste_town_*.tmx to remove debug shop values.
2022-12-24 20:39:09 -05:00
jjayers99
cfdb5bea6c Adventure Mode Shop Expansion
New setting in Settings menu for Expanded Shops. After enabling and restarting app, a much larger pool of card shops will appear in towns, and towns will have a bit more variety within a given biome, divided up into three broad categories per region.
2022-12-24 18:47:55 -05:00
George
85fa4cd884 Merge remote-tracking branch 'origin/master' 2022-12-24 13:14:04 +02:00
George
cd2582408b Correct the update of POIChanges for bought cards from shops 2022-12-24 13:09:39 +02:00
JohnWilliams77
d77b575ecd Update Secret Lair Drop Series.txt 2022-12-24 09:03:47 +00:00
asvitkine
6e8a21a58a Simulated AI: Copy changed SVars when copying state. (#2159) 2022-12-24 08:51:54 +00:00
asvitkine
4c568f941f Clean up unused vars. 2022-12-23 20:33:01 -07:00
asvitkine
e788d3683a Improve comment. 2022-12-23 20:31:41 -07:00
asvitkine
eb0f426adc Use ComputerUtilAbility.isFullyTargetable() and add more tests. 2022-12-23 20:28:05 -07:00
asvitkine
74a37c95c4 Remove unused imports. 2022-12-23 20:00:56 -07:00
Anthony Calosa
7c722c0838 Merge pull request #2158 from tool4ever/wedding
Wedding Ring cleanup
2022-12-23 21:10:06 +08:00
TRT
d24abce1aa Wedding Ring cleanup 2022-12-23 12:54:33 +01:00
asvitkine
7da3605849 . 2022-12-22 22:04:39 -07:00
asvitkine
4a74c936c2 Return null modes when all invalid. 2022-12-22 22:04:30 -07:00
asvitkine
24c56f4731 Use empty iterator if all modes filtered out. 2022-12-22 21:58:40 -07:00
asvitkine
e797c358bf Add a comment. 2022-12-22 21:44:27 -07:00
asvitkine
56b22ee73a Simulated AI: Fix land pruning logic and skip invalid targets.
This change improves Simulated AI logic by eliminating many unnecessary simulations, particularly due to:
  - Invalid targets involving counterspells countering themselves (including modal spells).
  - Pruning identical land drop decisions.

Tests are added to cover these cases.

Some core logic is changed, in particular, SpellAbility.canTarget() was not rejecting self-targeting for counterspells. This was likely being done at a higher level somewhere (e.g. in UI code for choosing targets for the human player or AI-specific code for non-simulated AI).

Additionally, a convenience SpellAbility.hasLegalTargets() method is added, from the logic that was previously in AIController.java, so that it can be re-used by the simulation AI code.

A few small style clean ups are included in the code being changed.
2022-12-22 21:40:52 -07:00
Anthony Calosa
f59128a6eb Merge pull request #2156 from tool4ever/fixes22
Card fixes
2022-12-23 08:46:59 +08:00
Anthony Calosa
3dd574cc03 Merge pull request #2153 from Northmoc/comp
Compleated update/fix
2022-12-23 08:46:26 +08:00
tool4EvEr
91e1979637 Card fixes 2022-12-22 23:05:20 +01:00
tool4ever
40524426e2 Workshop: support DFC (#2150)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-12-22 12:18:21 +03:00
Northmoc
53595926d1 Some card script tweaks (#2152)
* little card script tweaks

* few more tweaks

* slithermuse.txt fix
2022-12-22 12:16:43 +03:00
Northmoc
773894b575 Compleated update/fix 2022-12-21 11:29:02 -05:00
Paul Hammerton
deb4764ed7 Merge pull request #2149 from JohnWilliams77/patch-67
Update Secret Lair Drop Series.txt
2022-12-20 16:16:41 +00:00
JohnWilliams77
ac665a858b Update Secret Lair Drop Series.txt 2022-12-20 15:21:21 +00:00
Anthony Calosa
e0aa1996ce Add files via upload
fix typo
2022-12-20 23:02:43 +08:00
TRT
2786c0efa5 Fix NPE 2022-12-20 10:53:58 +01:00
Paul Hammerton
c5c35ce3d7 Merge pull request #2145 from Northmoc/one_19
ONE - 19 Dec (some leaked cards)
2022-12-20 08:57:33 +00:00
Anthony Calosa
e045a6b8a1 Merge pull request #2147 from kevlahnota/newmaster2
Refactor exit to worldmap button
2022-12-20 15:18:30 +08:00
Anthony Calosa
3f5d4a64fe Refactor exit to worldmap button 2022-12-20 15:05:31 +08:00
Anthony Calosa
55708e2fcb Merge pull request #2146 from Northmoc/fixes
various fixes
2022-12-20 12:47:22 +08:00
JakeLoustone
46a3d3c373 Add Jumpstart 2022 to Sealed (#2073)
* Add Jumpstart 2022 to blocks.txt

Added Jumpstart 2022 block with "Meta-Choose" following the original Jumpstart block as a guide. Booster pack names gathered from https://magic.wizards.com/en/news/feature/jumpstart-2022-booster-themes-and-card-lists

* Add all J22 booster deck lists to printsheets.txt

Added all J22 booster deck lists to "printsheets.txt". Decknames and card lists gathered from https://magic.wizards.com/en/news/feature/jumpstart-2022-booster-themes-and-card-lists

* Add all J22 boosters to boosters-special.txt

Added all J22 boosters to "boosters-special.txt". Decklist names gathered from https://magic.wizards.com/en/news/feature/jumpstart-2022-booster-themes-and-card-lists
2022-12-19 21:12:14 -05:00
Northmoc
7e75c9ec73 various fixes 2022-12-19 13:16:29 -05:00
Northmoc
32612d71e1 rustvine_cultivator.txt 2022-12-19 13:11:32 -05:00
Northmoc
5af3baa641 cankerbloom.txt 2022-12-19 13:11:24 -05:00
asvitkine
439b1a83c6 Cache deckchoosers to avoid re-randomizing decks. 2022-12-19 10:18:55 -07:00
tool4ever
e76f348c56 Improve reuse of LKI for ChangeZone performance (#2143)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-12-19 17:42:10 +01:00
Northmoc
2196d42812 CounterEnumType.OIL 2022-12-19 10:54:53 -05:00
Northmoc
210870484a urabrasks_anointer.txt 2022-12-19 10:54:43 -05:00
Northmoc
66197e4e18 bladed_ambassador.txt 2022-12-19 10:54:37 -05:00
JohnWilliams77
962244de1b Update aisha_of_sparks_and_smoke.txt 2022-12-19 14:53:54 +00:00
asvitkine
ca54e87eb0 Remove more code duplication. 2022-12-19 07:20:22 -07:00
tool4EvEr
b65b3d04e7 Clean up 2022-12-19 15:15:52 +01:00
tool4EvEr
9f6fbe4440 LKI fixes 2022-12-19 15:15:52 +01:00
tool4EvEr
046f123994 Clean up 2022-12-19 15:15:52 +01:00
tool4EvEr
64c97c6b06 Fix crash 2022-12-19 15:15:52 +01:00
tool4EvEr
62067d977c Skip triggers 2022-12-19 15:15:52 +01:00
Paul Hammerton
c68a20397f Merge pull request #2119 from Simisays/Heroes2
H21 Andrios, Roaming Explorer
2022-12-19 08:28:43 +00:00
asvitkine
53e3899932 Small clean ups. 2022-12-18 23:26:01 -07:00
asvitkine
2abafbc2ee Remove print statements. 2022-12-18 23:21:54 -07:00
asvitkine
dcc90fb0d1 Clean up lobby code and fix a deck deselect bug. 2022-12-18 23:15:27 -07:00
Paul Hammerton
1dc73ae81f Merge pull request #2135 from JohnWilliams77/patch-64
Create Secret Lair Showdown.txt
2022-12-18 13:14:30 +00:00
Paul Hammerton
b329e4444e Merge pull request #2136 from JohnWilliams77/patch-65
Update Secret Lair Drop Series.txt
2022-12-18 13:12:35 +00:00
JohnWilliams77
5143c3ea4a Add files via upload 2022-12-18 12:15:08 +00:00
JohnWilliams77
c5a21c8d25 Create immard_the_stormcleaver.txt 2022-12-18 12:14:28 +00:00
JohnWilliams77
4c8e7f2bc1 Create baldin_century_herdmaster.txt 2022-12-18 12:13:57 +00:00
JohnWilliams77
8cb78656e2 Create aisha_of_sparks_and_smoke.txt 2022-12-18 12:12:42 +00:00
JohnWilliams77
066932df7c Update Secret Lair Drop Series.txt 2022-12-18 10:55:36 +00:00
JohnWilliams77
fc45807331 Create Secret Lair Showdown.txt 2022-12-18 08:33:02 +00:00
Anthony Calosa
ac1943aa23 Merge pull request #2134 from kevlahnota/newmaster2
Fix texture loading check, Revert VAvatar splatter
2022-12-18 08:29:31 +08:00
Anthony Calosa
fa6dd225f2 Fix texture loading check, Revert VAvatar splatter
- fix avatar animation (some devices couldn't load warp animation on smaller texture)
2022-12-18 08:23:22 +08:00
Anthony Calosa
e35662cc51 Merge pull request #1960 from Northmoc/j22_agrus
J22: Agrus Kos, Eternal Soldier and support
2022-12-18 07:25:33 +08:00
Anthony Calosa
1719431bf0 Merge pull request #2122 from jjayers99/master
(Adventure) Exit To World Map
2022-12-18 07:14:51 +08:00
Anthony Calosa
0bc6ffc296 Merge pull request #2132 from kevlahnota/newmaster2
fix HD texture loading
2022-12-18 07:11:56 +08:00
Anthony Calosa
3a7b389b1f Merge pull request #2109 from Northmoc/issue2105
add and support "ReplaceGraveyardValid" for scholar_of_the_lost_trove
2022-12-18 07:10:57 +08:00
Anthony Calosa
0d9608b887 Merge pull request #2113 from DorkmasterFlek/set-code-import-fix
Make set codes case-insensitive during deck import
2022-12-18 07:10:17 +08:00
Anthony Calosa
4cfadece47 Merge pull request #2125 from tool4ever/vapors
Rework Reviving Vapors
2022-12-18 07:09:51 +08:00
Anthony Calosa
61a6eced45 Merge pull request #2129 from Northmoc/desert
YBRO: Great Desert Hellion and support
2022-12-18 07:09:38 +08:00
Anthony Calosa
99573c3f9d fix HD texture loading 2022-12-18 07:07:54 +08:00
Northmoc
5377085a29 YBRO: Great Desert Hellion and support 2022-12-17 10:47:16 -05:00
tool4EvEr
2b4244607f Rework Reviving Vapors 2022-12-17 10:46:09 +01:00
Simisays
cfaa4c7752 Update perennial_behemoth.txt (#2124) 2022-12-17 09:20:23 +00:00
jjayers99
eb1bbad9cf (Adventure) Exit To World Map
(Adventure Mode)
Added a HUD button to any city / dungeon view which pops up a dialog to exit the map. Initially bound to F4 / L2.

Button is visible on Desktop Landscape mode above Deck button in space vacated by Life / Mana / Gold which do not display in these settings.

Button is "present" on other layouts, but hidden off screen, with final positioning left to those who better know how to test and balance those layouts. Keyboard bindings are still functional in these views.

New sprites added for F1-12 and "Exit" button.
2022-12-16 21:10:27 -05:00
Northmoc
2a8027e043 Merge pull request #2118 from paulsnoops/dmr_draft
Booster Draft for DMR
2022-12-16 19:04:13 -05:00
Simisays
214142133a Update andrios_roaming_explorer.txt 2022-12-16 15:42:26 +01:00
Simisays
84f325378d Merge branch 'Heroes2' of https://github.com/Simisays/forge into Heroes2 2022-12-16 15:40:51 +01:00
Simisays
1e8560e6d7 Update andrios_roaming_explorer.txt 2022-12-16 15:40:35 +01:00
Simisays
45d1c64269 Update andrios_roaming_explorer.txt 2022-12-16 14:55:10 +01:00
tool4ever
b402b59534 Update wreck_hunter.txt 2022-12-16 14:44:38 +01:00
Northmoc
29d3d396b0 add and support "ReplaceGraveyardValid" for scholar_of_the_lost_trove.txt 2022-12-16 08:30:30 -05:00
tool4ever
f761f2a167 Add missing Smelting Vat support (#2117)
* Add missing Smelting Vat support

* Fix check

Co-authored-by: TRT <>
2022-12-16 08:14:55 -05:00
Simisays
4c29a1f0db update 2022-12-16 14:01:30 +01:00
paulsnoops
06bed9710a Booster Draft for DMR 2022-12-16 12:27:37 +00:00
squee1968
a2f6936a32 J22: Ogre Battlecaster (#2021)
* Mizzix and Ogre

* Delete mizzix_replica_rider.txt

* Update ogre_battlecaster.txt

* Add support

* Update ogre_battlecaster.txt

* Create ogre_battlecaster.txt

* Update ogre_battlecaster.txt

* Update ogre_battlecaster.txt

* Clean up

Co-authored-by: TRT <>
2022-12-16 14:54:39 +03:00
Northmoc
d649492a8d YBRO: Assemble the Team and support (#2112)
* assemble_the_team.txt

* AbilityUtils.getDefinedCards support "TopThirdOfLibrary"
2022-12-16 13:43:33 +03:00
Paul Hammerton
fe4343dfb0 Merge pull request #2115 from paulsnoops/update_sld
Editions update: SLD & PH21
2022-12-16 08:03:46 +00:00
paulsnoops
000e1bc1ca Editions update: SLD & PH21 2022-12-16 07:54:41 +00:00
DorkmasterFlek
358c38ee72 Make set codes case-insensitive during deck import
This moves the createMap() function up to the StorageReaderBase class and makes all subclasses call this function in readAll() to allow subclasses to override this.  We then override this in the CardEdition Reader class to create a case-insensitive map for the card sets during deck import.  This matches the way set aliases are already using a case-insensitive map, so lowercase set codes (e.g. Moxfield and other sites exports) will work for all sets in deck import.
2022-12-15 17:03:26 -05:00
Paul Hammerton
dae4919bae Merge pull request #2111 from paulsnoops/formats_fixes
Fix archived formats with Alias sets
2022-12-15 19:44:48 +00:00
paulsnoops
4045f08079 Fix archived formats with Alias sets 2022-12-15 19:39:07 +00:00
Paul Hammerton
ec9539b166 Merge pull request #2110 from paulsnoops/formats_phpr
Bring formats in line with #2102 (PHPR edition)
2022-12-15 18:34:38 +00:00
paulsnoops
2870211051 Bring formats in line with #2102 (PHPR edition) 2022-12-15 18:30:59 +00:00
tool4ever
9804d0bb55 Restore fixes somehow dropped by 017a4c (#2108) 2022-12-15 16:03:54 +01:00
Paul Hammerton
d7ea64ef85 Merge pull request #2069 from Simisays/HEROES-OF-THE-REAMS
H21 Ersta, Friend to All
2022-12-15 14:53:10 +00:00
Paul Hammerton
b705dc5fe9 Merge pull request #2079 from tool4ever/boostertutor
Booster Tutor and support
2022-12-15 14:52:01 +00:00
tool4ever
18c5c92c1c Merge branch 'master' into boostertutor 2022-12-15 15:45:49 +01:00
Northmoc
e4ee9eee7b TriggerBecomesTarget.setTriggeringObjects add StackInstance 2022-12-15 09:28:02 -05:00
Northmoc
d85ade2008 SpellAbility.isValid add "Ability" 2022-12-15 09:28:01 -05:00
Northmoc
8006b60067 agrus_kos_eternal_soldier.txt 2022-12-15 09:28:01 -05:00
Paul Hammerton
12c03873e8 Merge pull request #2107 from Northmoc/quag
quagmire.txt fix
2022-12-15 14:04:37 +00:00
Northmoc
a771c45f83 quagmire.txt fix 2022-12-15 08:32:45 -05:00
Simisays
17cb2139c5 ONE 4 cards (#2098) 2022-12-15 12:34:22 +01:00
Paul Hammerton
d4990cc2fa Merge pull request #2103 from JohnWilliams77/patch-63
Update Secret Lair Drop Series.txt
2022-12-15 09:34:45 +00:00
JohnWilliams77
096601da93 Update Secret Lair Drop Series.txt 2022-12-15 09:01:20 +00:00
Anthony Calosa
63ed0611b1 Merge pull request #2102 from DorkmasterFlek/book-promo-set
Make HarperPrism promos a single set
2022-12-15 10:59:46 +08:00
DorkmasterFlek
ade1e90d83 Make HarperPrism promos a single set
The HarperPrism book promo cards are part of a separate set on Scryfall.  The PHPR set code is used on numerous other sites when exporting deck lists, but this set code cannot be used in Forge deck importing because these cards were split across multiple "editions" and they can't have the same secondary code or alias.  This set organization matches the way they are categorized on Scryfall so deck imports with them in Forge will work.
2022-12-14 19:49:37 -05:00
Anthony Calosa
72564e16dd Merge pull request #2100 from tool4ever/somefixes
Improve damage check logic for losing + performance
2022-12-15 07:38:42 +08:00
Anthony Calosa
69c9ea5a21 Merge pull request #2101 from paulsnoops/quest_fix
Quest reprint fix
2022-12-15 07:35:30 +08:00
TRT
35810fcb66 Fix counting 2022-12-14 22:41:09 +01:00
Paul Hammerton
623987a51c Merge pull request #2081 from paulsnoops/update_draft_rankings
Booster Draft for HBG (& BRO rankings update)
2022-12-14 21:03:23 +00:00
paulsnoops
b0992a30e1 Quest reprint fix 2022-12-14 20:53:04 +00:00
TRT
8d2e56e4dc Improve damage check logic for losing + performance 2022-12-14 17:01:09 +01:00
Anthony Calosa
9f13e451cd Merge pull request #2099 from kevlahnota/newmaster2
update CardImageRenderer, VAvatar
2022-12-15 00:00:21 +08:00
Anthony Calosa
b56cd3ec7e unused imports 2022-12-14 23:48:31 +08:00
Anthony Calosa
ad01c9076d update CardImageRenderer, VAvatar 2022-12-14 23:43:47 +08:00
Anthony Calosa
a1824386fc Merge pull request #2095 from kevlahnota/newmaster2
Optimize Card BG Texture loading
2022-12-14 14:12:44 +08:00
Anthony Calosa
07298475c4 Merge branch 'master' into newmaster2 2022-12-14 14:07:17 +08:00
Anthony Calosa
9cf422784c Optimize Card BG Texture loading
- this should be lightweight enough for devices with 4GB RAM on Android
2022-12-14 13:59:04 +08:00
Paul Hammerton
eed89378df Merge pull request #2093 from paulsnoops/one_edition
New edition: ONE (& DMU, KHM, NEO, SNC, SLX updates)
2022-12-13 20:06:49 +00:00
paulsnoops
6b32a30347 add slx cards 2022-12-13 20:03:35 +00:00
paulsnoops
bf00df8005 WIP: New edition: ONE (& DMU, KHM, NEO, SNC, SLX updates) 2022-12-13 19:55:24 +00:00
paulsnoops
020daf4e36 basic_land 2022-12-13 16:42:57 +00:00
Paul Hammerton
ed490d4665 Merge pull request #2091 from paulsnoops/remove_brc_forests
Remove basic Forests from BRC as still not confirmed real
2022-12-13 11:34:50 +00:00
paulsnoops
45f1277d22 Remove basic Forests from BRC as still not confirmed real 2022-12-13 11:30:08 +00:00
Paul Hammerton
ee921e91c6 Merge pull request #2090 from paulsnoops/p23_update
Add Grindstone to P23
2022-12-13 11:22:33 +00:00
paulsnoops
5b0383a6fd Add Grindstone to P23 2022-12-13 11:16:29 +00:00
Paul Hammerton
7342537765 Merge pull request #2082 from Simisays/MIZZIX
J22 Mizzix, Replica Rider
2022-12-13 09:35:40 +00:00
Simisays
c124c335b5 Update mizzix_replica_rider.txt 2022-12-13 10:24:40 +01:00
Paul Hammerton
e3a6a7b2f9 Merge pull request #2035 from Simisays/YBRO
YBRO 6 cards
2022-12-13 09:19:48 +00:00
Paul Hammerton
42a441d63a Merge pull request #2064 from asvitkine/more_copy
GameCopier: Handle copying of more game and player properties.
2022-12-13 09:19:37 +00:00
Simisays
171527983d Update mizzix_replica_rider.txt 2022-12-12 22:34:35 +01:00
Simisays
032436eb78 Update mizzix_replica_rider.txt 2022-12-12 22:33:55 +01:00
Simisays
bf75c87b3b Update mizzix_replica_rider.txt 2022-12-12 22:33:20 +01:00
tool4ever
c303222f6f Fix ante cards (#2089) 2022-12-12 21:23:32 +00:00
Simisays
b91e4a6bbe Update mizzix_replica_rider.txt 2022-12-12 21:51:26 +01:00
tool4ever
9d761ca7cf Clean up (#2088) 2022-12-12 20:11:08 +00:00
Simisays
95964ac9c4 Update mizzix_replica_rider.txt 2022-12-12 19:04:46 +01:00
Simisays
63171c9dc3 Update mizzix_replica_rider.txt 2022-12-12 19:04:18 +01:00
Simisays
c685e389d9 Create mizzix_replica_rider.txt 2022-12-12 17:34:57 +01:00
paulsnoops
8010249615 Booster Draft for HBG (& BRO rankings update) 2022-12-12 13:41:07 +00:00
Simisays
318ca1836c Update estra_friend_to_all.txt 2022-12-12 11:47:36 +01:00
Anthony Calosa
838117d0bf Merge pull request #2080 from kevlahnota/newmaster2
fix Adventure RewardActor crash
2022-12-12 16:30:24 +08:00
Anthony Calosa
3cb85bae72 Merge pull request #2078 from tool4ever/hushbringer
Hushbringer improvements
2022-12-12 16:30:08 +08:00
Anthony Calosa
e6ff0c1a7a dispose rendered image 2022-12-12 15:44:32 +08:00
Anthony Calosa
e17e3628fd fix Adventure RewardActor crash
- additional check for ImageUtil
2022-12-12 15:41:25 +08:00
tool4EvEr
28903fe4e4 Booster Tutor and support 2022-12-11 22:34:09 +01:00
tool4EvEr
8fb9c6ed71 Hushbringer improvements 2022-12-11 22:11:24 +01:00
tool4EvEr
2e963e31b1 Fix triggers 2022-12-11 20:28:47 +01:00
tool4EvEr
1f6c4a430d Clean up 2022-12-11 20:14:22 +01:00
Paul Hammerton
df1f40acb9 Merge pull request #2077 from paulsnoops/wzd_card_detail_fix
YBRO random card fixes
2022-12-11 12:56:10 +00:00
paulsnoops
7dc6819661 more_changes 2022-12-11 12:52:57 +00:00
paulsnoops
091a534e47 more_changes 2022-12-11 12:48:52 +00:00
paulsnoops
0bf5248acc Warzone Duplicator card detail fix 2022-12-11 12:40:40 +00:00
Paul Hammerton
fa00a8c47e Merge pull request #2042 from Simisays/YBRO5
YBRO 6 cards
2022-12-11 12:28:42 +00:00
Paul Hammerton
6d6bcdc92c Merge pull request #2075 from paulsnoops/promo_fix
Move Thought Vessel promo to correct edition
2022-12-11 10:31:22 +00:00
paulsnoops
051fc82abd Move Thought Vessel promo to correct edition 2022-12-11 10:28:08 +00:00
Paul Hammerton
972ffd6fb9 Merge pull request #2074 from paulsnoops/update_editions
Edition updates: 30A, YBRO, DMR, J22 & P23 (new)
2022-12-11 10:22:26 +00:00
paulsnoops
86ed279ddb Edition updates: 30A, YBRO, DMR, J22 & P23 (new) 2022-12-11 10:12:07 +00:00
Paul Hammerton
b94b9efc5a Merge pull request #2072 from JakeLoustone/patch-1
Fix zeppelin token script
2022-12-11 09:54:08 +00:00
JakeLoustone
7e96a9ed15 Update zeppelin.txt
Changed type from "Artifact Creature" to "Artifact Vehicle" to match "Lita, Mechanical Engineer" card text.
2022-12-11 02:09:20 -07:00
Anthony Calosa
80663295e7 Merge pull request #2071 from kevlahnota/newmaster2
fix NPE getting paperCard from imagekey
2022-12-11 14:50:01 +08:00
Anthony Calosa
d5a8b1c76d update other action that requires cardView 2022-12-11 14:47:18 +08:00
Anthony Calosa
d6b4e0d377 fix NPE getting paperCard from imagekey 2022-12-11 14:34:49 +08:00
Anthony Calosa
0b70e6700a Merge pull request #2070 from kevlahnota/newmaster2
update VReveal
2022-12-11 09:29:00 +08:00
Anthony Calosa
76b18a42f3 Merge pull request #2068 from jjayers99/master
Removing extra shop entries from plains capital & swamp towns
2022-12-11 09:13:44 +08:00
Anthony Calosa
7857a4e249 update VReveal
- fix icon scale
- fix hidden cardview
2022-12-11 09:00:11 +08:00
Simisays
fd9258c09a Update estra_friend_to_all.txt 2022-12-10 22:38:53 +01:00
Simisays
6caae31f77 update 2022-12-10 22:36:54 +01:00
Simisays
9556baf668 Update sylvan_smite.txt 2022-12-10 22:26:51 +01:00
asvitkine
671b0e8985 Use playerMap for starting player. 2022-12-10 13:24:46 -05:00
TabletopGeneral
1d81b69a36 Remove Simic shops from swamp towns 2022-12-10 07:34:34 -05:00
TabletopGeneral
3be0baf760 Correct ratio of Selesnya shops in Plains Capital 2022-12-10 07:33:06 -05:00
Paul Hammerton
7aef585461 Merge pull request #2013 from Simisays/ABRO-3
YBRO 6 cards
2022-12-10 11:43:29 +00:00
Anthony Calosa
de33bc4f75 Merge pull request #2067 from asvitkine/fix_sim_crash
Fix crash in AI simulation code caused by a not found token.
2022-12-10 18:43:45 +08:00
asvitkine
e6e2950a6e Fix crash in AI simulation code caused by a not found token. 2022-12-10 01:09:16 -05:00
Anthony Calosa
45575a26e2 Merge pull request #2065 from kevlahnota/newmaster2
update daytime matchscreen view
2022-12-10 13:17:02 +08:00
Anthony Calosa
35d36adc09 update daytime matchscreen view
- if subgame ended via Shahrazad (or any subgame effect), restore the matchscreen view current daytime
2022-12-10 13:12:42 +08:00
asvitkine
8bd9759494 GameCopier: Handle copying of more game and player properties. 2022-12-09 23:27:49 -05:00
Anthony Calosa
c6ec2c80d3 Merge pull request #2060 from paulsnoops/remove_mcicode
Remove unused MciCode
2022-12-10 11:01:19 +08:00
Anthony Calosa
5eb387dd4b Merge pull request #2059 from tool4ever/proFix
Prototype rollback fix
2022-12-10 10:57:36 +08:00
Anthony Calosa
5248cf5c39 Merge pull request #2061 from t-w-o-s-a-t/master
Update de-DE.properties
2022-12-10 10:56:57 +08:00
Anthony Calosa
9461855b5d Merge pull request #2062 from asvitkine/fix_exce
Fix simulation AI exception with random effects.
2022-12-10 10:56:40 +08:00
Anthony Calosa
1242ef82ae Merge pull request #2063 from kevlahnota/newmaster2
Add reveal button to mobile-gui
2022-12-10 10:55:32 +08:00
Anthony Calosa
bcff49d063 update VPlayers
- fix text display
2022-12-10 10:49:47 +08:00
Anthony Calosa
ccc985654c Add reveal button to mobile-gui
- currently it gets all cards that was revealed by via reveal(...)
- update menutab to show scroll indicator as default
2022-12-10 09:20:41 +08:00
asvitkine
96b6bafc2b Fix simulation AI exception with random effects.
Uses a seeded deterministic random generator when simulating choices, which ensures  the same number of sub-choices are always used, which the code requires. Adds a test.
2022-12-09 16:08:44 -05:00
paulsnoops
7b13528d1f remove_comment_again_ha 2022-12-09 16:00:21 +00:00
paulsnoops
b48da28f7f return_comment 2022-12-09 15:36:56 +00:00
t-w-o-s-a-t
a8a4d651bd Update de-DE.properties
corrected lblEmblem
translated lblBoon
2022-12-09 16:31:52 +01:00
paulsnoops
885b959489 Remove unused MciCode 2022-12-09 14:37:23 +00:00
Paul Hammerton
95167ed675 Merge pull request #2029 from Simisays/ABRO
YBRO Argothian Uprooting & Foundry Groundbreaker
2022-12-09 11:07:10 +00:00
TRT
b5d95d193d Fix triggering when stolen 2022-12-09 11:39:42 +01:00
TRT
02e2ddce3b Prototype rollback fix 2022-12-09 11:39:26 +01:00
Simisays
09d541373f Update patchplate_resolute.txt 2022-12-09 10:59:00 +01:00
Simisays
ab395ed0dc Update legion_of_clay.txt 2022-12-09 10:34:32 +01:00
Paul Hammerton
8e91c0ad66 Merge pull request #2058 from paulsnoops/ph21
Add & update editions: Heroes of the Realm 2016-2021
2022-12-09 09:27:43 +00:00
paulsnoops
69a2a6b1bf Add & update editions: Heroes of the Realm 2016-2021 2022-12-09 09:23:45 +00:00
Anthony Calosa
d15a505081 Merge pull request #2051 from kevlahnota/newmaster2
Cleanup effect card name
2022-12-09 08:24:31 +08:00
Anthony Calosa
f945c102aa Merge pull request #2054 from Northmoc/afixes
Alchemy "card" fixes
2022-12-09 08:23:39 +08:00
Anthony Calosa
7f30fcf98c Merge pull request #2056 from tool4ever/satfix
Card fix + cleanup
2022-12-09 08:23:07 +08:00
Anthony Calosa
c203262cea fix typo 2022-12-09 08:20:04 +08:00
Anthony Calosa
17d92585b4 replace escape with space
- should fix effect display on card detail
2022-12-09 08:13:48 +08:00
Anthony Calosa
73d566dd8b translate Boon/Emblem effect name 2022-12-09 08:06:19 +08:00
Anthony Calosa
fcddec28d0 update translation 2022-12-09 07:18:36 +08:00
Anthony Calosa
95e993cf1c Merge branch 'master' into newmaster2 2022-12-09 07:02:35 +08:00
Simisays
682de35b01 Update forgefire_automaton.txt 2022-12-08 21:20:08 +01:00
Paul Hammerton
6d0c9edf6b Merge pull request #2057 from paulsnoops/dmr_tokens
Update editions: DMR, EA2, SCD, YBRO
2022-12-08 20:14:42 +00:00
paulsnoops
c33983c414 Update editions: DMR, EA2, SCD, YBRO 2022-12-08 20:10:59 +00:00
tool4EvEr
7452b24073 Card fix + cleanup 2022-12-08 20:13:24 +01:00
Simisays
8c0e11d972 Update forgefire_automaton.txt 2022-12-08 17:59:40 +01:00
Northmoc
163b27c80f ambergris_citadel_agent.txt fix 2022-12-08 11:49:17 -05:00
Simisays
74db06a1e9 update 2022-12-08 17:10:12 +01:00
Simisays
ef211b582f update 2022-12-08 17:05:03 +01:00
Simisays
ebc2d87237 Update melt_through.txt 2022-12-08 17:02:07 +01:00
Northmoc
c801411d65 molten_impact.txt tidy 2022-12-08 09:18:43 -05:00
Paul Hammerton
54853af655 Merge pull request #2053 from Northmoc/testfix
fix tests
2022-12-08 13:19:56 +00:00
Northmoc
c4763528ff fix tests 2022-12-08 08:10:33 -05:00
Anthony Calosa
267ef48a0c Cleanup effect card name
- add simple pixelate shader
2022-12-08 18:15:32 +08:00
Paul Hammerton
7e3fcb4d07 Update DMR edition 2022-12-08 10:14:26 +00:00
Paul Hammerton
e10fb8945f Merge pull request #2049 from Card-Forge/fix-tests
update_tests
2022-12-08 10:04:55 +00:00
Paul Hammerton
2db15bee3c update_tests 2022-12-08 10:04:17 +00:00
Paul Hammerton
2ae3f83f24 Merge pull request #2048 from Card-Forge/paulsnoops-scd-update
Update SCD edition
2022-12-08 09:53:11 +00:00
Paul Hammerton
b5b9aabd55 Update SCD edition 2022-12-08 09:49:02 +00:00
Simisays
2fb3196d51 Update melt_through.txt 2022-12-08 10:13:45 +01:00
Simisays
a26cb82618 Update urzas_construction_drone.txt 2022-12-08 09:04:43 +01:00
Simisays
b1c2ffab79 Update tawnos_endures.txt 2022-12-08 09:03:57 +01:00
Simisays
81a1857e15 Update sylvan_smite.txt 2022-12-08 09:02:51 +01:00
Simisays
ad509fc080 Update melt_through.txt 2022-12-08 09:00:58 +01:00
Simisays
a301591bf6 Update patchplate_resolute.txt 2022-12-08 09:00:05 +01:00
Simisays
2b94c728c6 Update patchplate_resolute.txt 2022-12-08 08:58:58 +01:00
Simisays
4f99587611 Update norns_disassembly.txt 2022-12-08 08:58:15 +01:00
Simisays
61ee93acd2 Update legion_of_clay.txt 2022-12-08 08:57:31 +01:00
Simisays
837c30c4f1 Update hurkyls_prodigy.txt 2022-12-08 08:54:03 +01:00
Simisays
d38beb4546 Update argothian_uprooting.txt 2022-12-08 08:50:45 +01:00
Simisays
8c49c17e0c Update argothian_uprooting.txt 2022-12-08 08:50:11 +01:00
Simisays
4dacb451b3 Update richlau_headmaster.txt 2022-12-08 08:46:42 +01:00
Simisays
54f093e03c Update piece_it_together.txt 2022-12-08 08:41:35 +01:00
Anthony Calosa
ad077db08a Merge pull request #2044 from jjayers99/master
Add card previews when drafting from a spellbook
2022-12-08 15:14:01 +08:00
Anthony Calosa
6720562c37 unused import 2022-12-08 05:51:43 +08:00
TabletopGeneral
668296ed56 Add card previews when drafting from a spellbook 2022-12-07 15:17:15 -05:00
Simisays
62027f129b Update and rename urzas_architectural_drone.txt to urzas_construction_drone.txt 2022-12-07 18:33:57 +01:00
Simisays
717f60eba3 Update piece_it_together.txt 2022-12-07 18:21:19 +01:00
Simisays
e1e5561b34 Update piece_it_together.txt 2022-12-07 14:53:34 +01:00
Simisays
f125010a76 Update perilous_iteration.txt 2022-12-07 14:31:18 +01:00
Simisays
82acff3267 update 2022-12-07 14:28:57 +01:00
Simisays
1cd87021e0 Update patchplate_resolute.txt 2022-12-07 11:38:30 +01:00
Simisays
f6f4be8e85 Update patchplate_resolute.txt 2022-12-07 10:04:20 +01:00
Anthony Calosa
dbcbd7f203 Merge pull request #2041 from kevlahnota/newmaster2
fix ConcurrentModificationException and reloading WorldSave
2022-12-07 11:13:29 +08:00
Anthony Calosa
693dbbdd48 fix ConcurrentModificationException and reloading WorldSave 2022-12-07 10:57:14 +08:00
Anthony Calosa
0a020b4178 Merge pull request #2040 from pfirpfel/2037-less-destructive-fix
Sync J21 to match Scryfall collector numbers [less destructive fix]
2022-12-07 07:42:57 +08:00
Anthony Calosa
8fd2d45bce Merge pull request #2039 from kevlahnota/newmaster2
update ImageFetcher & CardImageRenderer
2022-12-07 07:33:56 +08:00
Anthony Calosa
1da4cc5726 Merge pull request #2036 from tool4ever/dierollfix
Die roll fix
2022-12-07 07:29:49 +08:00
pfirpfel
3f483a4560 Remove cards which collector numbers match with different cards on Scryfall 2022-12-07 00:28:10 +01:00
pfirpfel
dcfdf927b2 Swap collector numbers to get correct Scryfall picture 2022-12-07 00:27:20 +01:00
Anthony Calosa
dae601776d update imports 2022-12-07 07:25:28 +08:00
Anthony Calosa
b103a20bd6 update ImageFetcher & CardImageRenderer
- allow zoomed cards to fetch image if possible
2022-12-07 07:11:21 +08:00
TRT
1072c29494 Clean up 2022-12-06 22:30:55 +01:00
TRT
bbb961bad9 Fix invalid number when stack frozen 2022-12-06 22:30:33 +01:00
Simisays
3752c67472 Merge branch 'YBRO' of https://github.com/Simisays/forge into YBRO 2022-12-06 21:58:17 +01:00
Simisays
0e817edc44 update 2022-12-06 21:58:13 +01:00
Simisays
afdb2b02d2 Update hurkyls_prodigy.txt 2022-12-06 20:48:22 +01:00
Simisays
7e17a58aac update 2022-12-06 20:42:32 +01:00
Simisays
27d5982a6f Create foundry_groundbreaker.txt 2022-12-06 18:53:38 +01:00
Simisays
7073cd3a38 update 2022-12-06 18:31:23 +01:00
Northmoc
a9d8711a4b minthara_of_the_absolute.txt fix typos (#2033) 2022-12-06 15:33:48 +01:00
Paul Hammerton
d8980f4e36 Merge pull request #2027 from paulsnoops/molten_impact
Molten Impact rebalance
2022-12-06 14:11:49 +00:00
Northmoc
6d22252efd Merge pull request #2032 from Northmoc/ego
ego_erasure.txt tidy up
2022-12-06 08:52:23 -05:00
Northmoc
a026f4de52 ego_erasure.txt tidy up 2022-12-06 08:43:05 -05:00
Paul Hammerton
0e33966944 Merge pull request #2031 from paulsnoops/fix_sld
Update edition: SLD fixes
2022-12-06 11:40:09 +00:00
paulsnoops
9737f04840 Update editions: SLD fixes 2022-12-06 11:35:44 +00:00
tool4ever
293dd1fc43 Update auntie_blyte_bad_influence.txt 2022-12-06 12:29:45 +01:00
Simisays
fadd483bda Delete great_desert_hellion.txt 2022-12-06 12:04:17 +01:00
Simisays
1e67477944 update 2022-12-06 12:00:16 +01:00
Paul Hammerton
6eaa847e31 Merge pull request #2028 from paulsnoops/ybro_ea2_updates
Update editions: EA2 & YBRO
2022-12-06 10:48:48 +00:00
paulsnoops
c91335f1fc Update editions: EA2 & YBRO 2022-12-06 10:40:49 +00:00
paulsnoops
826229abdc Molten Impact rebalance 2022-12-06 08:40:24 +00:00
Paul Hammerton
571a656e53 Merge pull request #2026 from invalidCards/patch-1
Fix Magnanimous Magistrate trigger
2022-12-05 19:28:53 +00:00
invalidCards
1e3a26d68b Fix Magnanimous Magistrate trigger
Currently Magnanimous Magistrate triggers for all creatures dying, which should only be creatures you control
2022-12-05 19:56:54 +01:00
Paul Hammerton
1bfc9911d0 Merge pull request #2024 from Simisays/fix
Update trazyn_the_infinite.txt
2022-12-05 18:55:51 +00:00
tool4ever
bdf09485a2 Clean up (#2025) 2022-12-05 18:43:56 +00:00
Simisays
faea47b74d Update forgefire_automaton.txt 2022-12-05 19:23:55 +01:00
Simisays
99a22f54b5 Update forgefire_automaton.txt 2022-12-05 19:12:28 +01:00
Simisays
9a57a12e00 update 2022-12-05 19:10:26 +01:00
Simisays
561d60f25a Update trazyn_the_infinite.txt 2022-12-05 19:06:40 +01:00
Simisays
687f1e4cd7 Update trazyn_the_infinite.txt 2022-12-05 19:05:15 +01:00
Simisays
3f831bc036 Update trazyn_the_infinite.txt (#2023) 2022-12-05 18:00:55 +00:00
Simisays
ce2a9f7929 update 2022-12-05 18:38:42 +01:00
Simisays
4264c5047f Merge branch 'Card-Forge:master' into ABRO-3 2022-12-05 17:53:38 +01:00
Anthony Calosa
1b6d7a2032 Merge pull request #2022 from kevlahnota/newmaster2
update LoadingOverlay
2022-12-05 20:18:37 +08:00
Anthony Calosa
62db056bef update LoadingOverlay 2022-12-05 19:56:49 +08:00
Anthony Calosa
eb49a4a7be Update DeckSelectScene.java
fix button layout (ie deck name is longer than the button default size, it should resize accordingly)
2022-12-05 12:27:53 +08:00
Anthony Calosa
856596a497 Merge pull request #2017 from kevlahnota/newmaster2
update MatchScreen
2022-12-05 05:02:33 +08:00
Anthony Calosa
5714f6e05e update MatchScreen 2022-12-05 04:57:33 +08:00
Anthony Calosa
f1bbdc934a Merge pull request #2014 from tool4ever/charmClean
CharmEffect: Remove redundant code
2022-12-05 04:55:12 +08:00
tool4EvEr
277ec58089 Fix cards 2022-12-04 20:09:35 +01:00
Paul Hammerton
d145ced970 Merge pull request #2015 from pfirpfel/fix-lizardfolk_librarians
Fix P/T of Lizardfolk Librarians
2022-12-04 14:30:28 +00:00
pfirpfel
8c42008493 Fix P/T of Lizardfolk Librarians 2022-12-04 15:19:29 +01:00
Simisays
bf2ff987d9 Update penregon_besieged.txt 2022-12-04 13:21:26 +01:00
Simisays
2fd70e1541 Update forgefire_automaton.txt 2022-12-04 13:21:07 +01:00
Simisays
5a15da878b Update forgefire_automaton.txt 2022-12-04 13:20:56 +01:00
tool4EvEr
439e2d5a9b Remove redundant code 2022-12-04 13:11:13 +01:00
Simisays
744afd67dc Update forgefire_automaton.txt 2022-12-04 10:18:10 +01:00
Simisays
7dc3b67740 update 2022-12-04 10:16:00 +01:00
Paul Hammerton
dac330977a Merge pull request #1987 from Simisays/ABRO1
YBRO 3 cards
2022-12-03 22:37:07 +00:00
Paul Hammerton
4cda8ca34b Rusko, Clockmaker fix (#2010) 2022-12-03 22:23:33 +00:00
Paul Hammerton
4cbed513ba Merge pull request #2011 from pfirpfel/fix-genasi-rabble-rouser
Genasi Rabble-Rouser: add missing power and toughness
2022-12-03 22:10:11 +00:00
Paul Hammerton
306b0f3980 Merge pull request #2006 from paulsnoops/migrate
Migrate card scripts from upcoming
2022-12-03 22:01:33 +00:00
pfirpfel
b7b182bf1c Genasi Rabble-Rouser: add missing power and toughness 2022-12-03 20:14:25 +01:00
Paul Hammerton
af17e88a93 Merge pull request #2008 from paulsnoops/add_missing_explorer
Add missing cards to Explorer format
2022-12-03 16:38:49 +00:00
paulsnoops
c061ec6272 Add missing cards to Explorer format 2022-12-03 16:35:30 +00:00
Simisays
efa8e018ba Update argivian_welcome.txt 2022-12-03 17:34:58 +01:00
Simisays
524689853f Update argivian_welcome.txt 2022-12-03 16:59:15 +01:00
paulsnoops
c381b46ee2 Migrate card scripts from upcoming 2022-12-03 14:51:15 +00:00
Paul Hammerton
b43e74d403 Merge pull request #2001 from Simisays/ABRO2
YBRO 3 more
2022-12-03 14:26:26 +00:00
Paul Hammerton
906776ca52 Merge pull request #2000 from tool4ever/fixes12
Fix Bishop of Binding
2022-12-03 14:26:20 +00:00
tool4EvEr
0732317c0f Card fix 2022-12-03 13:37:41 +01:00
tool4EvEr
a3d9bd2b8b Clean up 2022-12-03 13:11:06 +01:00
Paul Hammerton
ee8d883866 Merge pull request #2005 from paulsnoops/formats_ybro_ea2
Format changes: Add EA2 & YBRO
2022-12-03 12:02:21 +00:00
paulsnoops
a9ee97d715 Format changes: Add EA2 & YBRO 2022-12-03 11:39:19 +00:00
Paul Hammerton
d77bfb694e Merge pull request #2004 from paulsnoops/ybro_ea2
New editions: EA2 & YBRO
2022-12-03 11:27:08 +00:00
paulsnoops
081f8b7cad New editions: EA2 & YBRO 2022-12-03 11:24:14 +00:00
Paul Hammerton
c7509a2fd8 Merge pull request #2003 from paulsnoops/sld_update
SLD December Superdrop update
2022-12-03 10:36:24 +00:00
paulsnoops
c2b0da057c remaining cards 2022-12-03 10:33:52 +00:00
paulsnoops
f930dd8a9d WIP: SLD December Superdrop update 2022-12-03 09:57:56 +00:00
Simisays
3c871ba3f5 update 2022-12-03 08:26:22 +01:00
Simisays
2841325115 update 2022-12-03 08:23:48 +01:00
Anthony Calosa
1acb73bd8d Merge pull request #2002 from kevlahnota/newmaster2
update Ripple shader and Planechase BG
2022-12-03 15:08:34 +08:00
Anthony Calosa
46ae586a55 update Ripple shader and Planechase BG
- added Planes/Phenomenon BG (to use enable Dynamic Background Planechase)
- fix Ripple effect to work with Android
2022-12-03 13:42:36 +08:00
Simisays
f721878035 Update crucias_titan_of_the_waves.txt 2022-12-02 23:15:21 +01:00
Simisays
71051ce211 update 2022-12-02 23:08:51 +01:00
tool4EvEr
5ab6cca220 Extend logic 2022-12-02 22:30:05 +01:00
tool4EvEr
4834a0cc9a Fix Bishop of Binding 2022-12-02 22:26:50 +01:00
Simisays
8fc6772f14 Update crucias_titan_of_the_waves.txt 2022-12-02 21:03:30 +01:00
Simisays
458b420a41 Update argivian_welcome.txt 2022-12-02 21:03:04 +01:00
Simisays
e9d85ff0d1 update 2022-12-02 17:32:05 +01:00
Paul Hammerton
d77b98186c Merge pull request #1999 from paulsnoops/historic_brr
Format changes: Add BRR and Mishra's Bauble ban to Historic
2022-12-02 15:30:29 +00:00
paulsnoops
e6d2d78561 Format changes: Add BRR and Mishra's Bauble ban to Historic 2022-12-02 15:12:45 +00:00
Anthony Calosa
2b8f007146 Merge pull request #1997 from kevlahnota/newmaster2
update ImageCache, CardImageRenderer, CardRenderer, CardZoom and Rewa…
2022-12-02 17:23:17 +08:00
Dorkmaster Flek
21016e76f4 Fixed spell description and target prompt to match Oracle text and other spells (#1996) 2022-12-02 09:19:57 +00:00
Anthony Calosa
2542c52767 Update CardRenderer.java 2022-12-02 17:13:07 +08:00
Anthony Calosa
d803b2c15d update ImageCache, CardImageRenderer, CardRenderer, CardZoom and RewardActor
- fix detail button for controller
- use rounded rect shader for fullborder card renders (old methed will still apply on non fullborder images)
2022-12-02 16:56:52 +08:00
Anthony Calosa
85570c707b Merge pull request #1994 from kevlahnota/newmaster2
update RewardActor tooltips
2022-12-02 05:20:36 +08:00
Anthony Calosa
13dc00eaeb update RewardActor tooltips 2022-12-02 05:08:54 +08:00
tool4ever
5fa7d23196 StrictAmount fix (#1993) 2022-12-01 18:21:00 +00:00
Anthony Calosa
3c4ea61f09 fix bitmapfont scale 2022-12-01 18:02:03 +08:00
Anthony Calosa
c6abfee761 Merge pull request #1991 from kevlahnota/newmaster2
update Adventure Matchscreen
2022-12-01 15:16:52 +08:00
Anthony Calosa
c56329206d update Adventure Matchscreen 2022-12-01 15:06:36 +08:00
Simisays
6c5628fbc8 update 2022-11-30 18:12:17 +01:00
Paul Hammerton
c76af02740 Merge pull request #1990 from paulsnoops/formats_j22
Update formats for J22
2022-11-30 17:03:48 +00:00
paulsnoops
c0f67a3829 add SCD 2022-11-30 17:00:46 +00:00
paulsnoops
abab6a0dbb Update formats for J22 2022-11-30 16:56:37 +00:00
Simisays
db94cf626f update 2022-11-30 17:42:45 +01:00
Anthony Calosa
43b9add84d Update TransitionScreen.java
- remove bg dim, replace with chromatic effect
2022-11-30 20:30:14 +08:00
Anthony Calosa
0a3a69757e Merge pull request #1989 from kevlahnota/newmaster2
update TransitionScreen
2022-11-30 19:02:42 +08:00
Anthony Calosa
92ce6a4fde update TransitionScreen
- update Shaders
- adjust bgmatch y-axis
- adjust graytransition bias
- add versus bg for ArenaScene
2022-11-30 18:40:29 +08:00
Paul Hammerton
f1e1827a66 Merge pull request #1988 from paulsnoops/edition_updates
Edition updates: PLIST, BRO artists
2022-11-30 10:29:59 +00:00
paulsnoops
e80cb9a4a4 Edition updates: PLIST, BRO artists 2022-11-30 10:23:51 +00:00
Simisays
327d6bab9b Update lonely_end.txt 2022-11-30 10:04:50 +01:00
Simisays
74d41b5449 Update crucias_titan_of_the_waves.txt 2022-11-30 10:03:59 +01:00
Simisays
0d94eb0787 Update argivian_welcome.txt 2022-11-30 10:00:49 +01:00
Anthony Calosa
fbce8f343a Merge pull request #1797 from Robbatog/evolving_wilds_world
Evolving wilds world
2022-11-30 16:48:04 +08:00
Simisays
9dc1af6841 Update lonely_end.txt 2022-11-30 09:33:08 +01:00
Simisays
eb2729c8a3 Update argivian_welcome.txt 2022-11-30 09:31:44 +01:00
Simisays
6e563a7f64 Create crucias_titan_of_the_waves.txt 2022-11-30 09:29:24 +01:00
Simisays
fbdd3dad5b Create argivian_welcome.txt 2022-11-30 09:28:38 +01:00
Simisays
d91c206352 Create lonely_end.txt 2022-11-30 09:28:12 +01:00
Anthony Calosa
a472ab393c Merge pull request #1979 from tool4ever/zoneFix
Fix zone choosing when searching
2022-11-30 06:51:51 +08:00
Anthony Calosa
e117b3f626 Merge pull request #1985 from add-le/patch-fr-2
French translation (300 cards)
2022-11-30 06:51:08 +08:00
TRT
24b1e9de31 Fix imports 2022-11-29 20:19:31 +01:00
t-w-o-s-a-t
a9f62aaf7d Update de-DE.properties (#1986)
translated lblAttachTo, lblReadAhead, lblReadAheadDesc, lblSagaHeader, lblSagaFooter, lblChooseEntityDmg, lblAssignSectorCreature, lblChooseSectorEffect, lblQuestGameSettingsError, lblQuestGameSettings, lblWorldRulesConformance and ttWorldRulesConformance
2022-11-29 22:18:33 +03:00
TRT
f7fd335b10 Fix phasing in attached when entity stopped existing 2022-11-29 20:12:30 +01:00
TRT
56963e6d07 Clean up 2022-11-29 15:31:35 +01:00
Paul Hammerton
3d076607fb Merge pull request #1961 from Northmoc/j22-23a
J22: 23 Nov (more)
2022-11-29 14:12:34 +00:00
Anthony Calosa
8ae6100a7c Merge pull request #1794 from Robbatog/enforce_sets_in_quest
Enforce sets in quest
2022-11-29 16:47:38 +08:00
Anthony Calosa
02ad6bb6f8 Merge pull request #1984 from kevlahnota/newmaster2
update Shaders
2022-11-29 16:47:06 +08:00
Paul Hammerton
50a233343a Merge pull request #1957 from Northmoc/j22-23
J22: 23 Nov
2022-11-29 08:43:50 +00:00
Anthony Calosa
4ce8d7bac2 update Shaders
- fix ripple effect
- fix flip effect
2022-11-29 16:29:33 +08:00
Anthony Calosa
7236b8c13c Update pirated_copy.txt
fix crash
2022-11-29 13:58:29 +08:00
Anthony Calosa
cc016137ea Merge pull request #1982 from pfirpfel/fix-raze-to-the-ground
Fix mana cost of Raze to the Ground
2022-11-29 13:57:47 +08:00
add-le
3d6c5d504a french translation (300 cards) 2022-11-28 23:16:01 +01:00
Northmoc
937d27cf6e planar_atlas.txt fixup 2022-11-28 16:29:19 -05:00
Northmoc
17bd2343ef termination_facilitator.txt fixup 2022-11-28 16:29:07 -05:00
Northmoc
22c18bcf66 skullslither_worm.txt 2022-11-28 16:24:44 -05:00
Northmoc
9cebbbcdfc goblin_researcher.txt 2022-11-28 16:24:43 -05:00
TRT
cf2e294542 Update cards 2022-11-28 22:15:43 +01:00
pfirpfel
7a4ad8ba2c Fix mana cost 2022-11-28 22:08:15 +01:00
TRT
be0d36d15d Mandatory fix 2022-11-28 19:58:13 +01:00
Anthony Calosa
89c6959710 Merge pull request #1980 from kevlahnota/newmaster2
update Shaders
2022-11-28 19:33:10 +08:00
Anthony Calosa
55d3ffe9f2 update Shaders 2022-11-28 19:18:33 +08:00
tool4EvEr
cfc92a54f0 Fix zone choosing when searching 2022-11-28 10:07:10 +01:00
Anthony Calosa
b64f20d0a7 Merge pull request #1967 from tool4ever/targeteffects
Forward another PR part to extract targeting checks from effects
2022-11-28 15:40:05 +08:00
Anthony Calosa
4396a509d4 Merge pull request #1973 from tool4ever/phasingfix
Phasing: store under which control it phased out
2022-11-28 15:17:48 +08:00
tool4ever
f4e0feb0b6 Update scrapwork_cohort.txt 2022-11-28 06:37:09 +00:00
tool4ever
57c8644469 Clean up (#1978) 2022-11-27 22:51:42 +00:00
tool4EvEr
5893eb2f57 Fix cards 2022-11-27 22:29:35 +01:00
Simisays
0517613fd3 Update auntie_blyte_bad_influence.txt (#1974) 2022-11-27 20:40:51 +00:00
tool4EvEr
53ba3ab213 Fix missing trigger 2022-11-27 12:22:29 +01:00
tool4EvEr
2748804f24 Fix cards 2022-11-27 12:22:16 +01:00
tool4EvEr
fbd2b1eaee Phasing: store under which control it phased out 2022-11-27 12:21:25 +01:00
Paul Hammerton
735b085998 Merge pull request #1972 from paulsnoops/add_promos
PRES edition add promo
2022-11-27 09:54:20 +00:00
paulsnoops
9567a668de Fix J22 2022-11-27 09:51:01 +00:00
paulsnoops
79e86f593d PRES edition add promo 2022-11-27 09:07:38 +00:00
Paul Hammerton
fe9c75b05d Merge pull request #1971 from paulsnoops/j22_artists
J22 edition add artists
2022-11-27 08:31:23 +00:00
paulsnoops
814dd83caf J22 edition add artists 2022-11-27 08:27:22 +00:00
Anthony Calosa
6b0f9872ea Merge pull request #1969 from paulsnoops/smallfixes
A couple of J22 fixes
2022-11-27 08:51:10 +08:00
Anthony Calosa
e614383ed5 Merge branch 'master' into smallfixes 2022-11-27 08:50:31 +08:00
Anthony Calosa
d305b0b5ce Merge pull request #1970 from kevlahnota/newmaster2
update match transition
2022-11-27 08:44:20 +08:00
Anthony Calosa
f8df9da04b update match transition 2022-11-27 08:30:29 +08:00
Simisays
f072d0adf0 J22 6 Cards + new pirate token (#1962)
* update

* Update deadly_plot.txt

* update

* Update chains_of_custody.txt

* Update deadly_plot.txt

* Update deadly_plot.txt

* Update ossuary_rats.txt

Co-authored-by: tool4ever <therealtoolkit@hotmail.com>
2022-11-26 14:06:16 +03:00
paulsnoops
b62fbdb32d A couple of J22 fixes 2022-11-26 09:39:16 +00:00
Paul Hammerton
0248ee1c2d Merge pull request #1968 from paulsnoops/j22_update
J22 edition update
2022-11-26 09:37:11 +00:00
paulsnoops
5100ca2198 fix test 2022-11-26 09:34:40 +00:00
paulsnoops
6cb94d5ac2 J22 edition update 2022-11-26 09:27:20 +00:00
tool4EvEr
157f99f87f Update new one 2022-11-25 21:50:19 +01:00
tool4EvEr
0b907db6ee A few independent card fixes 2022-11-25 21:35:19 +01:00
tool4EvEr
9fabf6086c The bigger looking ones from more indentation 2022-11-25 21:28:59 +01:00
tool4EvEr
0146e0c72e Multiplayer support 2022-11-25 21:25:58 +01:00
tool4EvEr
9c2f1474ea Small updates 2022-11-25 21:22:56 +01:00
Robbatog
83db3341aa Added non-US localization for quest game settings and world rule conformance 2022-11-25 19:32:58 +01:00
Anthony Calosa
1491daa94f Update biblioplex_kraken.txt
fix typo
2022-11-25 17:10:55 +08:00
Anthony Calosa
cff2b2ffd6 Merge pull request #1966 from kevlahnota/newmaster2
Fix loot rewards
2022-11-25 05:16:23 +08:00
Anthony Calosa
c22eaf4030 Fix loot rewards 2022-11-25 05:14:42 +08:00
Anthony Calosa
58ea27bde5 Merge pull request #1963 from tool4ever/fixes24
Bunch of fixes
2022-11-25 02:11:33 +08:00
Anthony Calosa
802701c9a0 Merge pull request #1965 from kevlahnota/newmaster2
fix Adventure Rewards
2022-11-25 02:08:47 +08:00
Paul Hammerton
02f3eb8920 Merge pull request #1959 from Simisays/JUMPSTARTBIS
J22 9 cards
2022-11-24 18:07:31 +00:00
Anthony Calosa
b5af0f5d7a fix Adventure Rewards
- added new pixelate shader
2022-11-25 02:04:48 +08:00
squee1968
7cb8ee983e Update nalfeshnee.txt (#1964) 2022-11-24 16:59:59 +03:00
tool4EvEr
212f1398bd Phasing fixes 2022-11-24 13:19:56 +01:00
tool4EvEr
2087c907b8 Fix counting 2022-11-24 12:43:32 +01:00
tool4EvEr
d144ad12ef Fix missing wrap 2022-11-24 11:02:05 +01:00
tool4EvEr
45c586466a Cleanup redundant calls 2022-11-24 10:46:19 +01:00
tool4EvEr
08b02b6866 Improve accuracy 2022-11-24 09:49:12 +01:00
tool4EvEr
363631990a Better fix for Bow of Nylea / avoid view update if AI only 2022-11-24 09:34:36 +01:00
tool4EvEr
bc1d4f3dce Just let custom toString handle translation 2022-11-24 09:12:39 +01:00
Simisays
40f45ccfd0 Update merfolk_pupil.txt 2022-11-24 08:54:20 +01:00
tool4ever
ffbf5c8928 Merge pull request #1955 from Northmoc/j22_brazen
J22: Brazen Cannonade and support
2022-11-24 08:01:53 +01:00
tool4EvEr
926038b025 Use register 2022-11-24 07:48:09 +01:00
Simisays
15d26ed086 Update biblioplex_kraken.txt 2022-11-24 07:40:14 +01:00
Simisays
0067602aee Update biblioplex_kraken.txt 2022-11-24 07:39:57 +01:00
Simisays
3a84e9283a Merge branch 'JUMPSTARTBIS' of https://github.com/Simisays/forge into JUMPSTARTBIS 2022-11-24 07:33:36 +01:00
Simisays
08a01403a2 update 2022-11-24 07:33:34 +01:00
Northmoc
71b8230f92 Merge pull request #1958 from Northmoc/j22_kenessos
J22: Kenessos, Priest of Thassa and a little support
2022-11-23 19:47:12 -05:00
Anthony Calosa
7b358be847 Update CountersPutEffect.java
fix crash
2022-11-24 06:32:12 +08:00
Simisays
099605e35b Update angelic_cub.txt 2022-11-23 21:31:01 +01:00
Simisays
1df759e60f Merge branch 'JUMPSTARTBIS' of https://github.com/Simisays/forge into JUMPSTARTBIS 2022-11-23 21:30:11 +01:00
Simisays
4950730773 update 2022-11-23 21:29:48 +01:00
Simisays
7bbae7d0b1 Rename bountiful_hydra.txt to benevolent_hydra.txt 2022-11-23 20:50:18 +01:00
Simisays
67c3526245 Update bountiful_hydra.txt 2022-11-23 20:47:55 +01:00
Simisays
af06b970a7 Update biblioplex_kraken.txt 2022-11-23 20:47:21 +01:00
Simisays
bac9c78fbf Update angelic_cub.txt 2022-11-23 20:46:48 +01:00
Simisays
68289a9aa4 update 2022-11-23 20:45:16 +01:00
Northmoc
bf7b4eb368 giant_ladybug.txt 2022-11-23 14:17:18 -05:00
Northmoc
865c885664 ChangeZoneEffect.changeZonePlayerInvariant support "OptionalPrompt" 2022-11-23 12:34:28 -05:00
Northmoc
7248f35b3a kenessos_priest_of_thassa.txt 2022-11-23 12:34:08 -05:00
Northmoc
4839c3e773 synchronized_eviction.txt 2022-11-23 11:31:38 -05:00
Northmoc
09c0418b25 AI hints for BOUNTY counter cards 2022-11-23 11:25:33 -05:00
Northmoc
c9cf9c4a70 termination_facilitator.txt 2022-11-23 11:25:13 -05:00
Northmoc
526fa946fe read_the_soul.txt -> soul_read.txt 2022-11-23 11:24:51 -05:00
Northmoc
3e45ea18bc planar_atlas.txt 2022-11-23 11:24:08 -05:00
Northmoc
34b63e7cad commit_memory.txt tidy 2022-11-23 11:23:56 -05:00
Northmoc
9e5becbfa6 bellowing_aegisaur.txt AI 2022-11-23 11:23:27 -05:00
Northmoc
8002029e79 brazen_cannonade.txt and support v2 2022-11-23 11:19:39 -05:00
Anthony Calosa
1e7b2852e3 Merge pull request #1946 from Northmoc/j22_creep
J22: Creeping Bloodsucker and support
2022-11-23 20:23:31 +08:00
Anthony Calosa
4876d64832 Update flamewar_brash_veteran_flamewar_streetwise_operative.txt 2022-11-23 20:11:30 +08:00
Anthony Calosa
9ba3875e50 Update blitzwing_cruel_tormentor_blitzwing_adaptive_assailant.txt 2022-11-23 19:47:10 +08:00
Northmoc
106166734e J22: Nov 22 (#1954)
* disciple_of_perdition.txt

* minor fixes

* alandra_sky_dreamer.txt

* coalborn_entity.txt

* elkin_bottle.txt fix typo
2022-11-23 13:44:39 +03:00
Anthony Calosa
202c440797 Update CharmEffect.java
@TRT please check further, just added NPE check so it will not crash
2022-11-23 15:43:48 +08:00
Anthony Calosa
5e1b9db4a6 Merge pull request #1956 from CCTV-1/master
updated simplified chinese translation
2022-11-23 15:41:34 +08:00
CCTV-1
0f86ba9003 Merge branch 'Card-Forge:master' into master 2022-11-23 14:53:51 +08:00
CCTV-1
826b54b3fc translate new texts. 2022-11-23 14:52:09 +08:00
Anthony Calosa
da50f1f1f6 Update rodolf_duskbringer.txt
fix crash
2022-11-23 13:14:58 +08:00
Northmoc
92df823dd1 EffectEffect support "UntilEndOfYourNextCombat" 2022-11-22 23:13:42 -05:00
Northmoc
9a2ed3bfab brazen_cannonade.txt 2022-11-22 23:13:09 -05:00
Anthony Calosa
ec01c3d4cb Merge pull request #1953 from kevlahnota/newmaster2
update AdventureDeckEditor tab icons
2022-11-23 10:59:38 +08:00
Anthony Calosa
b1c3960b97 Merge branch 'master' into newmaster2 2022-11-23 10:52:11 +08:00
Anthony Calosa
a4277a6c5b update AdventureDeckEditor tab icons 2022-11-23 10:49:28 +08:00
Anthony Calosa
2cd7a85872 Merge branch 'master' into newmaster2 2022-11-23 09:14:21 +08:00
Northmoc
18d8bc0c3a GameAction.dealDamage support "RememberAmount" 2022-11-22 18:45:44 -05:00
Anthony Calosa
de5e2d2773 Merge pull request #1952 from kevlahnota/newmaster2
update SaveLoadScene
2022-11-23 07:20:00 +08:00
Anthony Calosa
0ff5b94923 update previewdate 2022-11-23 07:15:18 +08:00
Anthony Calosa
966a951a5e update SaveLoadScene
- save player location name
2022-11-23 06:43:55 +08:00
Anthony Calosa
8a236c4efb Merge pull request #1945 from Simisays/J22
J22 10 Cards
2022-11-23 06:24:07 +08:00
Simisays
022f5f57f7 Update zask_skittering_swarmlord.txt 2022-11-22 20:11:57 +01:00
tool4ever
2e504db20e Merge pull request #1951 from tool4ever/cleanStuff
Clean stuff
2022-11-22 19:36:29 +01:00
tool4EvEr
85398f1273 Fix Debt of Loyalty triggering non-static 2022-11-22 19:31:38 +01:00
Paul Hammerton
b698debd2b Merge pull request #1950 from paulsnoops/j22_edition
J22 edition update
2022-11-22 18:27:48 +00:00
paulsnoops
8626b30ac1 J22 edition update 2022-11-22 18:21:24 +00:00
JohnWilliams77
99004c3227 Update Secret Lair 30th Anniversary Countdown Kit.txt (#1948) 2022-11-22 19:41:03 +03:00
Northmoc
5d9bba959d J22: 21 Nov (#1949)
* conductor_of_cacophony.txt

* deathbringer_thoctar.txt tidy

* rumbling_slum_avatar.txt tidy

* dutiful_replicator.txt

* hold_for_questioning.txt
2022-11-22 19:27:43 +03:00
Simisays
858db55ca3 update 2022-11-22 17:24:27 +01:00
Simisays
ddc7a80786 update 2022-11-22 16:51:28 +01:00
Anthony Calosa
fe619543e6 Merge pull request #1947 from kevlahnota/newmaster2
fix itemfilter
2022-11-22 23:10:50 +08:00
Anthony Calosa
12349f9e82 unused import 2022-11-22 22:29:54 +08:00
Anthony Calosa
c16a4700a9 fix itemfilter 2022-11-22 22:23:50 +08:00
Northmoc
9d6569d531 creeping_bloodsucker.txt 2022-11-22 09:19:45 -05:00
Anthony Calosa
cc667cda30 Merge pull request #1944 from kevlahnota/newmaster2
update ClosingScreen & GameHud
2022-11-22 21:08:54 +08:00
tool4EvEr
d45a962faa Cleanup SpellDescription from some Triggers that don't need it 2022-11-22 13:37:48 +01:00
tool4EvEr
a10f8f4cb7 Cleanup 2022-11-22 12:26:29 +01:00
Simisays
7227feeb98 Update runadi_behemoth_caller.txt 2022-11-22 11:43:04 +01:00
Simisays
beb0f1bef5 Update read_the_soul.txt 2022-11-22 11:01:47 +01:00
Simisays
b4213759b1 update 2022-11-22 10:59:41 +01:00
Anthony Calosa
46effccfec update AdventureDeckEditor Catalog icon 2022-11-22 16:24:30 +08:00
Paul Hammerton
f004280791 Merge pull request #1942 from Simisays/JUMPSTART
J22 4 cards + zeppelin token
2022-11-22 08:21:22 +00:00
Anthony Calosa
d9a0770640 update imports 2022-11-22 14:56:18 +08:00
Anthony Calosa
2875988adc update ClosingScreen & GameHud
- fix ClosingScreen logo after update process
- scaledown GameHud text for lifepoints, mana and gold
2022-11-22 14:38:55 +08:00
Anthony Calosa
b8ea883259 Merge pull request #1902 from Northmoc/spaceb
UNF: space_beleren.txt and support
2022-11-22 08:54:01 +08:00
Anthony Calosa
f3966ecfef Merge pull request #1906 from Northmoc/ticket
UNF: Tickets initial implementation
2022-11-22 08:50:31 +08:00
Simisays
21e7a3be02 Update distinguished_conjurer.txt 2022-11-21 22:02:41 +01:00
Simisays
dfb5ed2b24 update 2022-11-21 21:59:00 +01:00
JakeLoustone
bf905d8234 fix toughness typo keeper_of_the_cadence.txt (#1943)
Changed "PT:2/2" to "PT:2/5" to match card scan.
2022-11-21 20:37:53 +00:00
tool4ever
ac3d9ce8ee Misc cleanup (#1940)
* Misc cleanup

* Fix check passing with no own creatures

* Improve StackDescription for Unsubstantiate
2022-11-21 20:37:24 +00:00
Northmoc
35365c0893 Solve issue 1472 (#1528)
* ManaEffect.resolve add runTriggers boolean

* AbilityManaPart.produceMana incorporate runTriggers boolean

* caged_sun.txt refactor

* AbilityManaPart.produceMana split to add TriggerManaAdded

* TriggerManaAdded.java

* TriggerTapsForMana.java refactor out unneeded

* TriggerType.ManaAdded

* Adjust checks for new Trigger

* Caged Sun fix

* Fix False Dawn only affecting mana abilities

* Rework tapsForMana call

* Clean up

* Support default rules value

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
Co-authored-by: tool4ever <therealtoolkit@hotmail.com>
2022-11-21 20:37:01 +00:00
Simisays
76c485286f update 2022-11-21 20:51:21 +01:00
Anthony Calosa
d57794b31d Merge pull request #1941 from kevlahnota/newmaster2
update Transitionscreen, RewardScene & Hud
2022-11-22 02:25:32 +08:00
Anthony Calosa
14e1f42164 update Transitionscreen, RewardScene & Hud 2022-11-22 02:15:38 +08:00
Simisays
5f5703ef7b J22 Ashcoat of the Shadow Swarm (#1938)
* Create ashcoat_of_the_shadow_swarm.txt

* Update ashcoat_of_the_shadow_swarm.txt

* Update ashcoat_of_the_shadow_swarm.txt

* Update ashcoat_of_the_shadow_swarm.txt
2022-11-21 10:19:53 -05:00
Anthony Calosa
75cb7d43b0 Merge pull request #1937 from kevlahnota/newmaster2
update SplashScreen NPE
2022-11-21 15:47:06 +08:00
Anthony Calosa
e2fb34f0d1 update SplashScreen NPE 2022-11-21 15:46:35 +08:00
Anthony Calosa
17039ee4ef Merge pull request #1936 from kevlahnota/newmaster2
update FSkin file check
2022-11-21 15:43:20 +08:00
Anthony Calosa
79e5b29b81 update FSkin file check 2022-11-21 15:41:30 +08:00
Anthony Calosa
37c8623082 Merge pull request #1935 from kevlahnota/newmaster2
update SplashScreen
2022-11-21 14:56:34 +08:00
Anthony Calosa
3db079d8e3 update SplashScreen
- Adventure Splashscreen will be used if default startup is Adventure Mode.
2022-11-21 14:51:16 +08:00
Anthony Calosa
08b72fdc3c update adventure bg 2022-11-21 08:44:12 +08:00
Anthony Calosa
6baf0be760 Merge pull request #1934 from kevlahnota/newmaster2
update fallback_skin
2022-11-21 07:16:15 +08:00
Anthony Calosa
6b3cf252b7 Merge pull request #1913 from Northmoc/comet
UNF: Comet, Stellar Pup and support
2022-11-21 07:15:49 +08:00
Anthony Calosa
f0f3cb7d08 update fallback_skin 2022-11-21 07:02:20 +08:00
Anthony Calosa
3031e2f942 fix combat arrows on desktop 2022-11-21 06:40:07 +08:00
tool4ever
025070ce97 Update vodalian_hexcatcher.txt 2022-11-20 20:54:56 +00:00
tool4ever
6f4d80ccb9 Update subdue.txt 2022-11-20 13:32:41 +00:00
Anthony Calosa
214a60dead Merge pull request #1931 from Card-Forge/kevlahnota-patch-7
Show combat arrow for attacked player on desktop
2022-11-20 21:27:43 +08:00
Anthony Calosa
f81178c82e Merge pull request #1933 from kevlahnota/newmaster2
update some Adventure UI and BG
2022-11-20 21:27:21 +08:00
Anthony Calosa
636a0d4a25 Merge branch 'master' into newmaster2 2022-11-20 21:24:29 +08:00
Anthony Calosa
8d5627f02d remove unused import 2022-11-20 21:23:48 +08:00
Anthony Calosa
9527574be6 update some Adventure UI and BG 2022-11-20 21:18:58 +08:00
Paul Hammerton
15b9b0528c Merge pull request #1932 from JohnWilliams77/patch-61
Update Secret Lair Drop Series.txt
2022-11-20 08:53:30 +00:00
JohnWilliams77
9f9ee65292 Update Secret Lair Drop Series.txt 2022-11-20 08:37:12 +00:00
Anthony Calosa
1375cfe460 Show combat arrow for attacked player on desktop 2022-11-20 13:43:55 +08:00
Anthony Calosa
12262eebf7 Merge pull request #1930 from kevlahnota/newmaster2
Adventure mode match BG
2022-11-20 12:15:12 +08:00
Anthony Calosa
b0531916de additional shaders 2022-11-20 12:09:17 +08:00
Anthony Calosa
76004b726d render base image when needed 2022-11-20 11:45:08 +08:00
Anthony Calosa
ae8ef9dd12 Adventure mode match BG
- add dynamic match background for adventure mode
2022-11-20 11:33:09 +08:00
tool4ever
0278b91bd3 Fix Azra Oddsmaker (#1929) 2022-11-19 19:09:14 +00:00
Northmoc
53d517c910 VPlayerPanel fix 2022-11-19 10:48:54 -05:00
Northmoc
78b3a20292 CountersPutEffect.getStackDescription improve for player counters 2022-11-19 10:39:25 -05:00
Northmoc
d886aab45d better ticket icon 2022-11-19 10:39:24 -05:00
Northmoc
acf3e84201 TypeLists.txt add Clowns and Guests 2022-11-19 10:39:23 -05:00
Northmoc
70a7f86249 try to fix Mobile gui for tickets 2022-11-19 10:39:22 -05:00
Northmoc
09fa7c00d8 add {TK} 2022-11-19 10:39:22 -05:00
Northmoc
08f25caab6 ticket_turbotubes.txt 2022-11-19 10:39:21 -05:00
Northmoc
b7c480a0b3 blorbian_buddy.txt 2022-11-19 10:39:20 -05:00
Northmoc
06e9827464 localize sector prompts 2022-11-19 10:37:29 -05:00
Northmoc
2f7ba8faa1 PlayerControllerHuman prompt include card ID 2022-11-19 10:37:28 -05:00
Northmoc
014cb36dc5 GameAction notify of sector assignments 2022-11-19 10:37:27 -05:00
Northmoc
61fef27743 ChooseSectorEffect remove unneeded 2022-11-19 10:37:27 -05:00
Northmoc
0f1a180f40 alluring_scent.txt +StackDesc 2022-11-19 10:37:26 -05:00
Northmoc
15b7909171 space_beleren.txt and support 2022-11-19 10:37:18 -05:00
Anthony Calosa
41d747e2b9 Merge pull request #1928 from kevlahnota/newmaster2
remove unsupported filter for adventure mode
2022-11-19 12:04:40 +08:00
Anthony Calosa
2118e95047 remove unsupported filter for adventure mode 2022-11-19 12:03:33 +08:00
tool4ever
8eca58e9e4 3 fixes (#1925)
* Improve logic / avoid cheating

* Fix Aggregates.random on FCollection disaster

* Fix finding wrong SA

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-11-18 22:37:34 +03:00
Northmoc
b651d6d14d DamageDeal/Prevent use Targets/Defined OR Choices 2022-11-18 13:01:54 -05:00
Anthony Calosa
f610e1ae40 Update psionic_ritual.txt
- closes #1924
2022-11-19 00:46:06 +08:00
Northmoc
fe553d50aa UNF: Some die-rolling updates (#1907)
* attempted_murder.txt

* clown_car.txt

* RollDiceEffect support "EvenOddResults"

* atomwheel_acrobats.txt

* circuits_act.txt

* RollDiceEffect support "DifferentResults"

* monoxa_midway_manager.txt

* TypeLists add Employee

* celebr_8000.txt

* RollDiceEffect support "SubsForEach"

* celebr_8000.txt tweaks

* celebr_8000.txt tweaks2
2022-11-18 11:32:46 -05:00
Anthony Calosa
0ceb02fe6e Add files via upload
remove deer silhouette
2022-11-18 23:03:14 +08:00
Anthony Calosa
cfee4ff32c Merge pull request #1923 from kevlahnota/newmaster2
update adventure match background
2022-11-18 22:56:26 +08:00
Anthony Calosa
e738ec3dcf update adventure match background
update default bgmatch colors and update day/night bgmatch to fix sun/moon alignment
2022-11-18 22:44:44 +08:00
tool4ever
514eac2141 Clean up (#1921) 2022-11-18 09:29:00 +00:00
Anthony Calosa
2c2f258785 Merge pull request #1920 from kevlahnota/newmaster2
update Adventure Daytime effect & Transition screen
2022-11-18 14:01:52 +08:00
Anthony Calosa
ce635aabe4 update Adventure DayNight transition 2022-11-18 13:44:15 +08:00
Anthony Calosa
b1d62b5a1a Merge branch 'master' into newmaster2 2022-11-18 13:42:16 +08:00
Anthony Calosa
dc354dd44b Merge pull request #1917 from tool4ever/bestow_cleanup
Bestow cleanup
2022-11-18 13:36:32 +08:00
Anthony Calosa
b14561441d update TransitionScreen (#1919)
fix progressBar location
2022-11-18 07:10:26 +03:00
Anthony Calosa
ea6f48adb5 update TransitionScreen
fix progressBar location
2022-11-18 08:35:55 +08:00
Anthony Calosa
170df11856 Merge pull request #1918 from kevlahnota/newmaster2
update GameHUD
2022-11-18 07:40:57 +08:00
Anthony Calosa
441b2ec2fd update GameHUD
add NPE prevention on buttons
update adventure skin
2022-11-18 07:32:32 +08:00
tool4EvEr
650fcd7101 Bestow cleanup 2022-11-17 23:48:18 +01:00
Northmoc
36d2c8212e CMatchUI.getAbilityToPlay trim multi-line ability descs for menu 2022-11-17 16:25:21 -05:00
Northmoc
d886a7b58c urza_lord_protector_urza_planeswalker.txt fix Oracle 2022-11-17 16:20:52 -05:00
Northmoc
49b2b337d6 spark_fiend.txt improve Descs 2022-11-17 15:47:07 -05:00
Northmoc
ac046b98d1 tighten up Comet's outcome for roll of 6 2022-11-17 15:44:55 -05:00
Northmoc
d0249a9607 remove unneeded import 2022-11-17 10:38:51 -05:00
Northmoc
b5e278e8ed remove ChooseEntityEffect.java 2022-11-17 10:37:02 -05:00
Anthony Calosa
6c0a339019 Merge pull request #1916 from kevlahnota/newmaster2
Adventure skin
2022-11-17 23:25:03 +08:00
Anthony Calosa
9bff9c4664 Merge remote-tracking branch 'core/newmaster2' into newmaster2 2022-11-17 21:42:08 +08:00
Anthony Calosa
6725565bf9 add adventure bg textures 2022-11-17 21:40:45 +08:00
Anthony Calosa
82f8bebcd6 Update FChoiceList.java 2022-11-17 21:34:37 +08:00
Anthony Calosa
7a49b47f86 Update VAssignGenericAmount.java 2022-11-17 21:29:56 +08:00
Anthony Calosa
523aac286c Update VPlayerPanel.java 2022-11-17 21:28:36 +08:00
Anthony Calosa
5cd13124c2 Update TabPageScreen.java 2022-11-17 21:26:18 +08:00
Anthony Calosa
31606bedf5 Update SplashScreen.java 2022-11-17 21:23:36 +08:00
Anthony Calosa
7179787b3b Adventure skin
recolor adventure own theme and logo and remove some duplicate skin files
2022-11-17 21:16:51 +08:00
tool4ever
397948b70a Card fixes (#1914) 2022-11-17 12:59:18 +01:00
Anthony Calosa
a39777e369 Update primaris_chaplain.txt
Fix typo
2022-11-17 19:19:57 +08:00
Northmoc
e32cfb65d2 default prompt for ChooseEntityEffect 2022-11-16 22:57:46 -05:00
Northmoc
8cef5814b1 typo 2022-11-16 22:57:25 -05:00
Northmoc
2134f92dc6 add Comet to TypeLists.txt 2022-11-16 22:57:07 -05:00
Northmoc
9ac1754db7 refactor PW loyalty ability checks from KW to StaticAbilityNumLoyaltyAct 2022-11-16 22:56:51 -05:00
Northmoc
ec35b9f05c refactor other loyalty ability amount modifying cards 2022-11-16 22:56:03 -05:00
Northmoc
09109b7b8e ChooseEntityEffect allow for player choices 2022-11-16 22:55:26 -05:00
Northmoc
404fd94a2f comet_stellar_pup.txt 2022-11-16 22:49:56 -05:00
tool4ever
3728e926cc Some fixes (#1911) 2022-11-16 20:55:43 +00:00
Northmoc
e8391525e0 Merge pull request #1909 from Simisays/quick-fix
Quick fix Carrion Locust
2022-11-16 10:28:46 -05:00
Simisays
19a1111d69 Update carrion_locust.txt 2022-11-16 14:57:10 +01:00
Anthony Calosa
20b9732357 Merge pull request #1905 from tool4ever/hogaak
Fix being able to pay mana for Hogaak
2022-11-16 06:53:41 +08:00
Anthony Calosa
c6ba2c5963 Merge pull request #1903 from Northmoc/tidy
prettify some things from #1896
2022-11-16 06:42:55 +08:00
Simisays
d13f1d0981 DeckHints & DeckHas updates Antiquities and Legends [SQUASH MERGE] (#1901)
* Ai updates antiquities and legends (#9)

* Update adun_oakenshield.txt

* Update akron_legionnaire.txt

* Update alabaster_potion.txt

* Update all_hallows_eve.txt

* Update arcades_sabboth.txt

* Update arena_of_the_ancients.txt

* Update axelrod_gunnarson.txt

* Update black_mana_battery.txt

* Update blazing_effigy.txt

* Update blue_mana_battery.txt

* Update boris_devilboon.txt

* Update cathedral_of_serra.txt

* Update caverns_of_despair.txt

* Update chains_of_mephistopheles.txt

* Update cocoon.txt

* Update divine_intervention.txt

* Update divine_offering.txt

* Update emerald_dragonfly.txt

* Update forethought_amulet.txt

* Update fortified_area.txt

* Update gabriel_angelfire.txt

* Update gauntlets_of_chaos.txt

* Update argivian_archaeologist.txt

* Update argivian_blacksmith.txt

* Update armageddon_clock.txt

* Update ashnods_altar.txt

* Update ashnods_transmogrant.txt

* Update su_chi.txt

* Update yawgmoth_demon.txt

* Update xenic_poltergeist.txt

* Update urzas_tower.txt

* Update urzas_mine.txt

* Update urzas_power_plant.txt

* Update urzas_miter.txt

* Update urzas_chalice.txt

* Update urzas_avenger.txt

* Update triskelion.txt

* Update transmute_artifact.txt

* Update titanias_song.txt

* Update the_rack.txt

* Update tetravus.txt

* Update tablet_of_epityr.txt

* Update sage_of_lat_nam.txt

* Update reverse_polarity.txt

* Update millstone.txt

* Update mishras_war_machine.txt

* Update orcish_mechanics.txt

* Update onulet.txt

* Update power_artifact.txt

* Update powerleech.txt

* Update priest_of_yawgmoth.txt

* Update primal_clay.txt

* Update reconstruction.txt

* Update coral_helm.txt

* Update cursed_rack.txt

* Update damping_field.txt

* Update drafnas_restoration.txt

* Update dwarven_weaponsmith.txt

* Update energy_flux.txt

* Update feldons_cane.txt

* Update gate_to_phyrexia.txt

* Update golgothian_sylex.txt

* Update ivory_tower.txt

* Update jalum_tome.txt

* Update whirling_dervish.txt

* Update white_mana_battery.txt

* Update wood_elemental.txt

* Update unholy_citadel.txt

* Update vaevictis_asmadi.txt

* Update venarian_gold.txt

* Update cathedral_of_serra.txt

* Update chains_of_mephistopheles.txt

* Update elder_spawn.txt

* Update eternal_warrior.txt

* Update fallen_angel.txt

* Update fortified_area.txt

* Update firestorm_phoenix.txt

* Update glyph_of_delusion.txt

* Update glyph_of_life.txt

* Update glyph_of_doom.txt

* Update glyph_of_destruction.txt

* Update glyph_of_reincarnation.txt

* Update green_mana_battery.txt

* Update gwendlyn_di_corci.txt

* Update hazezon_tamar.txt

* Update hells_caretaker.txt

* Update horror_of_horrors.txt

* Update infinite_authority.txt

* Update in_the_eye_of_chaos.txt

* Update karakas.txt

* Update knowledge_vault.txt

* Update kobold_drill_sergeant.txt

* Update kobold_overlord.txt

* Update kobold_taskmaster.txt

* Update lands_edge.txt

* Update land_equilibrium.txt

* Update lesser_werewolf.txt

* Update lifeblood.txt

* Update life_chisel.txt

* Update life_matrix.txt

* Update living_plane.txt

* Update living_plane.txt

* Update mana_matrix.txt

* Update wolves_of_the_hunt.txt

* Update mirror_universe.txt

* Update moat.txt

* Update mountain_stronghold.txt

* Update mold_demon.txt

* Update nebuchadnezzar.txt

* Update nicol_bolas.txt

* Update osai_vultures.txt

* Update part_water.txt

* Update pit_scorpion.txt

* Update puppet_master.txt

* Update ragnar.txt

* Update rapid_fire.txt

* Update rasputin_dreamweaver.txt

* Update recall.txt

* Update red_mana_battery.txt

* Update rohgahh_of_kher_keep.txt

* Update seafarers_quay.txt

* Update serpent_generator.txt

* Update solkanar_the_swamp_king.txt

* Update spectral_cloak.txt

* Update spirit_link.txt

* Update spirit_shackle.txt

* Update spiritual_sanctuary.txt

* Update stangg.txt

* Update storm_world.txt

* Update syphon_soul.txt

* Update takklemaggot.txt

* Update the_abyss.txt

* Update the_brute.txt

* Update the_tabernacle_at_pendrell_vale.txt

* Update time_elemental.txt

* Update triassic_egg.txt

* Update damping_field.txt

* Update axelrod_gunnarson.txt

* Update ashnods_transmogrant.txt

* Update argivian_blacksmith.txt

* Update arena_of_the_ancients.txt

* Update titanias_song.txt

* Update puppet_master.txt

* Update firestorm_phoenix.txt

* Update energy_flux.txt

* Update drafnas_restoration.txt

* Update damping_field.txt

* Update caverns_of_despair.txt

* Update mountain_stronghold.txt

* Update akron_legionnaire.txt

* Update argivian_archaeologist.txt

* Update ashnods_altar.txt

* Update cursed_rack.txt

* Update argivian_archaeologist.txt
2022-11-16 06:40:10 +08:00
tool4EvEr
5e1af59453 Fix being able to pay mana for Hogaak 2022-11-15 21:36:32 +01:00
Northmoc
9666646c8f prettify some things from #1896 2022-11-15 11:43:34 -05:00
Anthony Calosa
e88b8735b9 Merge pull request #1900 from paulsnoops/niambi_rebalance
Rebalance: Niambi, Beloved Protector
2022-11-15 20:13:23 +08:00
paulsnoops
18504e155b Rebalance: Niambi, Beloved Protector 2022-11-15 08:03:27 +00:00
Anthony Calosa
0c83ce7c6e Update spectrum_sentinel.txt
Remove extra $
2022-11-15 15:55:46 +08:00
Anthony Calosa
62237be672 Update spectrum_sentinel.txt
fix NPE param
2022-11-15 15:37:38 +08:00
Anthony Calosa
3b4650c0fc Merge pull request #1899 from rikimbo/adventure_dungeon_dream_halls
Adventure: Add new dungeon "Dream Halls" to the Wastes biome
2022-11-15 12:16:26 +08:00
Eric Himbeault
d03e4be4d4 Adventure: Add new dungeon "Dream Halls" to the Wastes biome. 2022-11-14 22:00:03 -06:00
Anthony Calosa
c634d90595 Merge pull request #1898 from kevlahnota/newmaster2
[Adventure] add zoom button
2022-11-15 11:00:36 +08:00
Anthony Calosa
61e3dc6548 [Adventure] add zoom button
to show zoom map exists
2022-11-15 10:59:03 +08:00
Anthony Calosa
80e71bc008 Merge pull request #1896 from tool4ever/cardfixes14
Some card fixes
2022-11-15 06:08:00 +08:00
tool4EvEr
0a8215a9e7 Clean up 2022-11-14 22:40:55 +01:00
Simisays
8ddd070f37 BRO Last 6 Cards + 3 fix (#1882) 2022-11-14 18:25:59 +00:00
tool4ever
7c830c2588 Fix Strict Proctor (#1893) 2022-11-14 16:49:26 +00:00
Anthony Calosa
1799301c24 Merge pull request #1892 from tool4ever/canFaceDownBeShownTo
Fix canFaceDownBeShownTo
2022-11-14 20:55:54 +08:00
tool4EvEr
41ef4fe2ce Fix canFaceDownBeShownTo 2022-11-14 13:49:22 +01:00
Anthony Calosa
7629519757 Merge pull request #1881 from Simisays/MONKE
J22 Kibo, Uktabi Prince + deckhas for monkeys and apes
2022-11-14 17:19:13 +08:00
Anthony Calosa
5186208145 Merge pull request #1885 from Northmoc/hostile
BRO: Hostile Negotiations and support
2022-11-14 14:55:20 +08:00
Anthony Calosa
72feaaf8c0 Merge pull request #1891 from rikimbo/adventure_fix_color_id
Adventure: Fix "colorID" card rewards when a player's color identity is multicolor
2022-11-14 13:50:17 +08:00
Eric Himbeault
d1e8d4975f Adventure: Fix "colorID" card rewards when a player's color identity is multicolor. 2022-11-13 22:58:45 -06:00
Anthony Calosa
20fdfe7d5d Merge pull request #1889 from tool4ever/ochrejelly
Fix Ochre Jelly
2022-11-14 06:05:33 +08:00
tool4EvEr
29b571f153 Fix for zone changes 2022-11-13 22:27:51 +01:00
Anthony Calosa
e23e829990 Merge pull request #1888 from Northmoc/isu
J22: Isu the Abominable
2022-11-14 05:17:27 +08:00
Anthony Calosa
bc21eff664 Merge pull request #1887 from Northmoc/bro12
BRO: 12 Nov
2022-11-14 05:14:19 +08:00
Anthony Calosa
b2e58e4b87 Merge pull request #1886 from Northmoc/bro13
BRO: 13 Nov
2022-11-14 05:13:43 +08:00
Northmoc
6dbac8d7f6 crypt_lurker.txt remove unneeded 2022-11-13 16:09:26 -05:00
Northmoc
db7fc4a9c3 isu_the_abominable.txt 2022-11-13 16:09:26 -05:00
Northmoc
a476b31e71 improve some sac artifact tokens 2022-11-13 14:47:21 -05:00
Northmoc
9d4a166c0e ensoul_artifact.txt tidy 2022-11-13 14:47:20 -05:00
Northmoc
fb3783d476 military_discipline.txt 2022-11-13 14:47:20 -05:00
Northmoc
f07dc5262a mightstones_animation.txt 2022-11-13 14:47:19 -05:00
Northmoc
a59301abff mask_of_the_jadecrafter.txt 2022-11-13 14:47:18 -05:00
Northmoc
b108af3073 machine_over_matter.txt 2022-11-13 14:47:17 -05:00
Northmoc
99546f3b63 lorans_escape.txt 2022-11-13 14:47:17 -05:00
Simisays
01b393072d Update pongify.txt 2022-11-13 19:02:37 +01:00
Northmoc
e074a78fb9 tawnoss_tinkering.txt 2022-11-13 12:53:41 -05:00
Northmoc
3210716cf6 take_flight.txt 2022-11-13 12:53:41 -05:00
Northmoc
bcb285e70a TwoPilesEffect.resolve support "DefinedPiles" 2022-11-13 12:32:25 -05:00
Northmoc
5467d80243 hostile_negotiations.txt 2022-11-13 12:31:26 -05:00
Simisays
4123a4283d update 2022-11-13 16:30:23 +01:00
Simisays
ec6b89512e Update kibo_uktabi_prince.txt 2022-11-13 14:30:14 +01:00
Anthony Calosa
ba85547d41 Merge pull request #1876 from Simisays/CAPTAIN-REX
UNF Captain Rex Nebula
2022-11-13 21:10:13 +08:00
Simisays
4c5e3720bd Update kibo_uktabi_prince.txt 2022-11-13 14:09:15 +01:00
Simisays
9aff77a29a update 2022-11-13 14:07:14 +01:00
Simisays
ca80706dde Update captain_rex_nebula.txt 2022-11-13 12:36:34 +01:00
Simisays
da8a3f7ece update 2022-11-13 12:03:46 +01:00
Anthony Calosa
350690ebf5 Update thran_vigil.txt
fix typo
2022-11-13 18:14:18 +08:00
Anthony Calosa
1c9b4d82d1 Merge pull request #1865 from Simisays/BROIN
BRO 21 more 11 NOV
2022-11-13 07:43:25 +08:00
Anthony Calosa
20c7b97efc Merge pull request #1878 from rikimbo/adventure_doppelganger_no_drop_basic_lands
Adventure: [Balance] Doppelganger enemy no longer drops basic lands
2022-11-13 07:37:51 +08:00
Anthony Calosa
44a90054d9 Merge pull request #1877 from rikimbo/adventure_fix_collision_fort4
Adventure: Fix collision for Demon enemy in dungeon "Fort4"
2022-11-13 07:37:28 +08:00
Anthony Calosa
e3cacaac8c Merge pull request #1879 from Card-Forge/capital-auto-save
Auto-save in capitals
2022-11-13 07:00:55 +08:00
Simisays
f8c2ba94c8 Update captain_rex_nebula.txt 2022-11-12 22:58:11 +01:00
Simisays
7e31e84100 Update captain_rex_nebula.txt 2022-11-12 22:55:46 +01:00
friarsol
ff60e8aa4a Auto-save in capitals 2022-11-12 16:20:44 -05:00
Eric Himbeault
a21442c297 Adventure: [Balance] Doppelganger enemy no longer drops basic lands. 2022-11-12 13:34:50 -06:00
Simisays
020b16d290 Create captain_rex_nebula.txt 2022-11-12 20:28:24 +01:00
Eric Himbeault
03987e19cf Adventure: Fix collision for Demon enemy in dungeon "Fort4". 2022-11-12 13:21:17 -06:00
Anthony Calosa
535478fda0 Merge pull request #1875 from tool4ever/wheeling
Desktop: Improve MouseWheel support in play choice popup
2022-11-13 00:26:28 +08:00
tool4EvEr
5dc7a22228 Improve MouseWheel support in play choice popup 2022-11-12 17:18:04 +01:00
Simisays
77bc1eb35e Update third_path_iconoclast.txt 2022-11-12 11:13:27 +01:00
Simisays
6da85cb543 Update hoarding_recluse.txt 2022-11-12 11:12:50 +01:00
Paul Hammerton
f5d825cc68 Merge pull request #1874 from JohnWilliams77/patch-60
Update Secret Lair Drop Series.txt
2022-11-12 10:09:55 +00:00
Anthony Calosa
8b1e54f5fa Merge pull request #1873 from Card-Forge/tool4ever-patch-3
Update zephyr_sentinel.txt
2022-11-12 18:08:52 +08:00
JohnWilliams77
d61fba7680 Update Secret Lair Drop Series.txt 2022-11-12 09:52:01 +00:00
tool4ever
df5ada9e4b Update zephyr_sentinel.txt
Closes #1872
2022-11-12 09:27:32 +00:00
Simisays
97a72ad75e Merge branch 'BROIN' of https://github.com/Simisays/forge into BROIN 2022-11-12 10:00:47 +01:00
Simisays
65e6780c2c update 2022-11-12 10:00:45 +01:00
Anthony Calosa
feec07bc35 Merge pull request #1859 from Simisays/Fixthis
BRO 11 cards
2022-11-12 14:39:33 +08:00
Anthony Calosa
01544b428a Merge pull request #1852 from Simisays/BRO99
BRO 10 more 11 NOV
2022-11-12 14:25:44 +08:00
Anthony Calosa
a018dafec0 Update summoning_trap.txt 2022-11-12 14:15:39 +08:00
Anthony Calosa
c67f002bca Merge pull request #1869 from rikimbo/adventure_new_red_dungeons
Adventure: Add two new dungeons to the Red biome
2022-11-12 13:48:35 +08:00
Agetian
c96f26cbd3 Added puzzle PS_DMU4 (#1871)
* - Added puzzle PS_DMU4.
2022-11-12 08:41:22 +03:00
Anthony Calosa
7631af33de Merge pull request #1824 from Simisays/BRO-3
BRO 20 cards
2022-11-12 13:38:48 +08:00
Agetian
104b3637c2 - Added BRO planeswalker achievements by Marek14. (#1870) 2022-11-12 08:26:36 +03:00
Eric Himbeault
f651a42e52 Adventure: Add two new dungeons to the Red biome. 2022-11-11 20:57:49 -06:00
Northmoc
134c3bad2d symmetry_matrix.txt 2022-11-11 20:14:51 -05:00
Anthony Calosa
e758947901 Merge pull request #1866 from Northmoc/bro11
BRO – 11 Nov
2022-11-12 08:09:05 +08:00
Anthony Calosa
370c6e512e Merge pull request #1863 from tool4ever/prototype
Prototype fix
2022-11-12 08:08:24 +08:00
Anthony Calosa
cdeb73b00b Merge pull request #1860 from tool4ever/cardfixes_11
Lodestone Bauble fix
2022-11-12 08:03:07 +08:00
Anthony Calosa
116863dc95 Merge pull request #1867 from tool4ever/war_room
War Room fix
2022-11-12 08:01:36 +08:00
tool4EvEr
1ab6338c1d War Room fix 2022-11-11 23:34:39 +01:00
Anthony Calosa
083f2399e9 Merge pull request #1862 from Northmoc/fix
GameAction fix NPE for ScryBottom
2022-11-12 05:57:37 +08:00
Simisays
78a8e3fae8 Update scrapwork_rager.txt 2022-11-11 21:57:45 +01:00
Simisays
bd4870a3ca update 2022-11-11 21:56:49 +01:00
Simisays
0b804737d7 update 2022-11-11 21:47:04 +01:00
Northmoc
9d53218017 over_the_top.txt 2022-11-11 15:43:58 -05:00
Northmoc
3ba4fa6785 swiftgear_drake.txt 2022-11-11 15:01:32 -05:00
tool4EvEr
37c6e5dd22 Clean up 2022-11-11 20:33:09 +01:00
tool4EvEr
760b3be19e Prototype fix 2022-11-11 20:32:12 +01:00
Simisays
4996c9a4c1 Update raze_to_the_ground.txt 2022-11-11 17:01:13 +01:00
TRT
db0e71a94e Lodestone Bauble fix 2022-11-11 17:01:05 +01:00
Simisays
8f0a79d794 update 2022-11-11 16:59:39 +01:00
Simisays
f98c32b041 update 2022-11-11 16:51:53 +01:00
Northmoc
c43ab8fd84 GameAction fix NPE for ScryBottom 2022-11-11 09:28:37 -05:00
Simisays
b6776e13ef update 2022-11-11 15:11:17 +01:00
Simisays
78f0105205 Update the_stone_brain.txt 2022-11-11 15:05:55 +01:00
Simisays
209e6d1941 update 2022-11-11 15:01:10 +01:00
Anthony Calosa
0b4f8e0854 Merge pull request #1858 from tool4ever/cardfixes1111
Some card fixes
2022-11-11 21:24:20 +08:00
Simisays
8d4116e521 update 2022-11-11 14:23:33 +01:00
Northmoc
bd1e81b6c7 steel_seraph.txt 2022-11-11 08:22:51 -05:00
Northmoc
3b5d2cc3d1 steel_exemplar.txt 2022-11-11 08:22:40 -05:00
Northmoc
3d80675616 hurkyls_final_meditation.txt 2022-11-11 08:22:23 -05:00
TRT
60862e7537 Some card fixes 2022-11-11 14:16:04 +01:00
Anthony Calosa
02e5ec4b57 Update GameAction.java
prevent NPE
2022-11-11 20:59:48 +08:00
Anthony Calosa
5ff571c74e Merge pull request #1855 from Simisays/2022-commander-decks
2022 Commander decks
2022-11-11 20:50:06 +08:00
Simisays
a3443da6b6 2022 commander decks 2022-11-11 11:34:02 +01:00
Paul Hammerton
0505d09f5e Merge pull request #1854 from paulsnoops/update_formats
Update all formats for BRO
2022-11-11 09:17:14 +00:00
Paul Hammerton
c30ecbd488 Merge pull request #1853 from paulsnoops/pw22
Update PW22
2022-11-11 09:13:41 +00:00
paulsnoops
351b78ce1d Update all formats for BRO 2022-11-11 09:13:34 +00:00
paulsnoops
b125f0dcd6 Update PW22 2022-11-11 09:00:37 +00:00
Simisays
b1c7392118 Update sarinth_steelseeker.txt 2022-11-11 08:47:48 +01:00
Simisays
1da42f9a6b update 2022-11-11 08:45:42 +01:00
Anthony Calosa
b415272877 Merge pull request #1851 from JohnWilliams77/patch-59
Update Secret Lair Drop Series.txt
2022-11-11 10:49:24 +08:00
Anthony Calosa
5e8b2bc876 Update RepeatEachEffect.java
removed unnecessary import
2022-11-11 10:48:50 +08:00
JohnWilliams77
fb7a605845 Update Wizards Play Network 2022.txt 2022-11-10 23:43:20 +00:00
JohnWilliams77
2c5042f88b Update Game Day Promos.txt 2022-11-10 23:42:31 +00:00
JohnWilliams77
a869595f3e Update Secret Lair Drop Series.txt 2022-11-10 23:41:35 +00:00
Simisays
63bd96d64a update 2022-11-10 23:43:00 +01:00
Simisays
e16092e28a Update the_stone_brain.txt 2022-11-10 21:55:48 +01:00
Simisays
19f1437c50 Update mine_worker.txt 2022-11-10 21:52:37 +01:00
Simisays
a4fad0714b update 2022-11-10 21:13:48 +01:00
Paul Hammerton
ebfda9a81d Merge pull request #1847 from Northmoc/bro_anchor
BRO: The Temporal Anchor and support
2022-11-10 18:10:02 +00:00
Paul Hammerton
c83971aa2d Merge pull request #1808 from Simisays/BRO2
BRO 19 cards
2022-11-10 18:09:28 +00:00
Paul Hammerton
a1b811a885 Merge pull request #1842 from Simisays/BRO--5
BRO 10 cards (9 nov)
2022-11-10 18:09:06 +00:00
Simisays
3cb4be20c7 update 2022-11-10 19:00:45 +01:00
Simisays
f05e01f3a6 update tron 2022-11-10 18:36:52 +01:00
Simisays
e02fe3c7f0 cleanup 2022-11-10 18:28:10 +01:00
Simisays
1137f0afea Update the_stone_brain.txt 2022-11-10 18:18:08 +01:00
Simisays
eec93786ea update 2022-11-10 17:51:05 +01:00
Northmoc
207e278405 the_temporal_anchor.txt +boilerplate exile handling 2022-11-10 11:03:40 -05:00
Simisays
71ed5ece53 Merge branch 'Card-Forge:master' into BRO--5 2022-11-10 08:43:12 +01:00
Simisays
0f5caf3151 Merge branch 'Card-Forge:master' into BRO-3 2022-11-10 08:42:34 +01:00
Simisays
1e8eba9858 Merge branch 'Card-Forge:master' into BRO2 2022-11-10 08:42:06 +01:00
Simisays
e5137f2c80 update (#1846) 2022-11-10 08:03:58 +03:00
Northmoc
5f29af78ad TriggerScry "ToBottom" condition and value for the Temporal Anchor 2022-11-09 20:00:00 -05:00
Northmoc
f37305a304 DigEffect support "FromBottom" ! 2022-11-09 19:58:31 -05:00
Northmoc
d56f688245 king_narfis_betrayal.txt fix bad Desc 2022-11-09 19:56:57 -05:00
Northmoc
387e74d031 the_temporal_anchor.txt 2022-11-09 19:51:59 -05:00
Anthony Calosa
15098a016e Update flamewar_brash_veteran_flamewar_streetwise_operative.txt 2022-11-10 08:03:22 +08:00
Anthony Calosa
20b3765b15 Update arcee_sharpshooter_arcee_acrobatic_coupe.txt 2022-11-10 08:02:25 +08:00
Simisays
f60ffd08e3 Update flamewar_brash_veteran_flamewar_streetwise_operative.txt 2022-11-09 23:26:06 +01:00
Simisays
bc811b540d Update the_stone_brain.txt 2022-11-09 22:02:57 +01:00
Simisays
493d8c7620 update 2022-11-09 22:01:39 +01:00
Simisays
75c92f26dd BRO remaining Prototype cards (#1843)
* update

* UPDATE

* update

* Update rootwire_amalgam.txt
2022-11-09 14:58:50 -05:00
Northmoc
8d299fc207 Merge pull request #1845 from tool4ever/400auras
Auras 400.7f
2022-11-09 14:58:00 -05:00
TRT
f0498d5477 Auras 400.7f 2022-11-09 19:06:20 +01:00
Paul Hammerton
baca8a58b2 Merge pull request #1844 from JohnWilliams77/patch-58
Update 30th Anniversary Play Promos.txt
2022-11-09 17:59:17 +00:00
JohnWilliams77
a5f0550546 Update 30th Anniversary Play Promos.txt 2022-11-09 17:02:25 +00:00
Simisays
4a58754c69 Update zephyr_sentinel.txt 2022-11-09 16:52:15 +01:00
Simisays
26d0188c86 update 2022-11-09 14:50:42 +01:00
Simisays
1cef5aa6a0 Update zephyr_sentinel.txt 2022-11-09 09:58:04 +01:00
Simisays
ea8564c19a Update unleash_shell.txt 2022-11-09 09:56:57 +01:00
Simisays
8d0be70711 UPDATE 2022-11-09 09:51:57 +01:00
Anthony Calosa
7fbdad88db Update seafloor_stalker.txt
- closes #1837
2022-11-09 12:14:40 +08:00
Anthony Calosa
7f241d53bd Merge pull request #1841 from Northmoc/bro_8
BRO: 8 Nov
2022-11-09 10:04:09 +08:00
Anthony Calosa
e92a394fd1 Update argoth_sanctum_of_nature.txt 2022-11-09 10:01:14 +08:00
Anthony Calosa
5a396c7d34 Merge pull request #1831 from Northmoc/proto2
Prototype is not AlternativeCost
2022-11-09 09:36:04 +08:00
Anthony Calosa
8d0924b488 Merge pull request #1830 from tool4ever/cardsAddedThisTurn
Improve isCardAddedThisTurn
2022-11-09 09:33:12 +08:00
Anthony Calosa
05585043eb Merge pull request #1838 from Northmoc/bro_ward
BRO: Ward parsing updates
2022-11-09 09:32:39 +08:00
Anthony Calosa
9f9aac166c Merge pull request #1836 from Northmoc/1778fix
fix typos from PR 1778
2022-11-09 09:30:38 +08:00
Anthony Calosa
308ad68c7f improve readability 2022-11-09 09:28:03 +08:00
Northmoc
e163651612 boulderbranch_golem.txt 2022-11-08 20:24:41 -05:00
Northmoc
a246527877 soundwave_sonic_spy_soundwave_superior_captain.txt fix 2022-11-08 20:21:25 -05:00
Northmoc
387084fbe5 woodcaller_automaton.txt 2022-11-08 20:20:57 -05:00
Northmoc
c30d1bbf2b hulking_metamorph.txt 2022-11-08 20:20:48 -05:00
Northmoc
838f5c9f0e autonomous_assembler.txt 2022-11-08 20:20:05 -05:00
Northmoc
d100154cc5 arcane_proxy.txt 2022-11-08 20:19:39 -05:00
Northmoc
1a4e67273f Card.keywordsToText() improve Ward parsing 2022-11-08 19:57:42 -05:00
Northmoc
5a075c9297 CostSacrifice.toString parse Permanent to lowercase 2022-11-08 19:56:48 -05:00
Northmoc
ca7083b96d mishra_tamer_of_mak_fawa.txt update 2022-11-08 19:55:15 -05:00
Northmoc
f09bbc15bd minthara_merciless_soul.txt update Ward 2022-11-08 19:55:01 -05:00
Northmoc
88cb12158a phyrexian_fleshgorger.txt 2022-11-08 19:54:39 -05:00
Anthony Calosa
d619d7bf59 Merge pull request #1820 from Northmoc/bro_cast
BRO: Bladecoil Serpent / Clay Champion and support
2022-11-09 07:59:08 +08:00
Anthony Calosa
f82025d117 Merge pull request #1834 from paulsnoops/BRO_draft
Booster Draft for BRO & 30A
2022-11-09 07:42:23 +08:00
Northmoc
3124e567bf fix typos from PR 1778 2022-11-08 17:52:32 -05:00
Anthony Calosa
4ec93281f2 Merge pull request #1835 from paulsnoops/fix_filenames
Change - to _ for cardscript file names
2022-11-09 06:36:14 +08:00
Simisays
7873d2f90b Update the_stone_brain.txt 2022-11-08 22:31:14 +01:00
Simisays
c7039131b3 update 2022-11-08 22:24:35 +01:00
paulsnoops
09636fabf0 Remove - from cardscript file names 2022-11-08 20:50:24 +00:00
Simisays
49c8ac9eab Update dreams_of_steel_and_oil.txt 2022-11-08 21:37:37 +01:00
Simisays
5e774eb4a3 Update dreams_of_steel_and_oil.txt 2022-11-08 21:35:35 +01:00
Paul Hammerton
abf5001789 Merge pull request #1833 from Northmoc/1809fix
fix typos from PR 1809
2022-11-08 20:33:17 +00:00
paulsnoops
77f1056368 Booster Draft for BRO & 30A 2022-11-08 20:23:20 +00:00
Northmoc
07f919a56b fix typos from PR 1809 2022-11-08 14:55:24 -05:00
Northmoc
4e79675c0c prototype description fix 2022-11-08 13:28:13 -05:00
Northmoc
6989ad17ae prototype is not an AlternativeCost 2022-11-08 13:28:12 -05:00
Simisays
7a37e8aae8 Update legions_to_ashes.txt 2022-11-08 18:14:47 +01:00
Simisays
613b379eab update 2022-11-08 18:11:41 +01:00
TRT
cf0222f80d Improve isCardAddedThisTurn 2022-11-08 18:03:07 +01:00
Simisays
ffa07b7cfb update 2022-11-08 17:54:51 +01:00
Northmoc
fe4d2c3272 blitz_automaton.txt 2022-11-08 11:37:23 -05:00
Simisays
02a2349483 Update fade_from_history.txt 2022-11-08 17:09:13 +01:00
Simisays
5d731fd697 Update fade_from_history.txt 2022-11-08 15:57:37 +01:00
Simisays
1786df52c6 update 2022-11-08 13:34:25 +01:00
Simisays
3c71ae7c8c update 2022-11-08 13:05:58 +01:00
Simisays
7e0e040fd6 update 2022-11-08 13:04:13 +01:00
Anthony Calosa
da5b44ae19 Update cityscape_leveler.txt 2022-11-08 19:36:49 +08:00
Anthony Calosa
18fb79e659 Update genestealer_patriarch.txt 2022-11-08 19:34:32 +08:00
Simisays
e12e1aa17e update 2022-11-08 12:34:15 +01:00
Anthony Calosa
7c8c51999e Merge pull request #1809 from squee1968/5-BRO-Cards-by-Squee
5 bro cards by squee
2022-11-08 19:33:00 +08:00
Anthony Calosa
0a4d8f1d73 Merge pull request #1826 from Northmoc/plowshares
StackDescription work: DestroyEffect, LoseLifeEffect
2022-11-08 19:30:35 +08:00
Anthony Calosa
7d5f2beb08 Merge pull request #1823 from Northmoc/prototype
BRO: Prototype
2022-11-08 19:25:58 +08:00
Anthony Calosa
503f0553e1 Merge pull request #1825 from Northmoc/bro_crown
BRO: Transmogrant's Crown and parsing tweaks
2022-11-08 19:25:09 +08:00
Northmoc
c13be7a3c2 DestroyEffect remove unused Import 2022-11-07 18:48:09 -05:00
Simisays
3f40f27741 Update demolition_field.txt 2022-11-08 00:05:55 +01:00
Paul Hammerton
46a59f7605 Merge pull request #1827 from paulsnoops/brokens
Edition updates: Tokens for BRC & BRO
2022-11-07 22:57:23 +00:00
paulsnoops
849386a37b Edition updates: Tokens for BRC & BRO 2022-11-07 22:53:59 +00:00
Simisays
cf2357f6e2 Update nemata_primeval_warden.txt 2022-11-07 23:52:14 +01:00
Northmoc
adde6a942e prototype v2 2022-11-07 17:01:22 -05:00
Northmoc
88e2d1de65 goring_warplow.txt 2022-11-07 17:01:21 -05:00
Northmoc
937e2e648a cradle_clearcutter.txt 2022-11-07 17:01:21 -05:00
Northmoc
0d08f79916 Prototype keyword v1 2022-11-07 17:01:20 -05:00
Northmoc
15ef415cb3 combat_thresher.txt 2022-11-07 17:01:19 -05:00
Northmoc
cf9a8013f0 v2 2022-11-07 16:49:33 -05:00
Northmoc
03cfbc5711 update Equip cost parsing for Transmogrant's Crown 2022-11-07 15:28:18 -05:00
Northmoc
31974b7fdb transmogrants_crown.txt 2022-11-07 15:27:49 -05:00
Simisays
a25ecd586d update 2022-11-07 19:40:40 +01:00
squee1968
9e87647853 Update saheeli_rai.txt (#1822) 2022-11-07 18:48:20 +03:00
squee1968
9d05f313e0 Delete saheeli_rai.txt 2022-11-07 08:53:54 -06:00
Paul Hammerton
0b18959cda Merge pull request #1759 from Northmoc/dmu_defiler
DMU: Defiler cycle and support
2022-11-07 12:40:55 +00:00
Paul Hammerton
a7a406100d Merge pull request #1821 from paulsnoops/edition_updates
Edition updates: BRC, BRO & BRR
2022-11-07 09:58:07 +00:00
paulsnoops
e0e309e2c8 Edition updates: BRC, BRO & BRR 2022-11-07 08:26:51 +00:00
Northmoc
d5bea4140d AbilityUtils.xCount support "Each2SpentToCast" 2022-11-06 18:57:52 -05:00
Northmoc
37b0e13941 clay_champion.txt 2022-11-06 18:57:10 -05:00
Northmoc
1970ed6cb4 bladecoil_serpent.txt 2022-11-06 18:56:45 -05:00
squee1968
2f84c65545 Update saheeli_rai.txt 2022-11-06 16:43:06 -06:00
squee1968
f3919aff5c Update koilos_roc.txt 2022-11-06 16:37:49 -06:00
squee1968
891044de24 Update keeper_of_the_cadencet.txt 2022-11-06 16:34:36 -06:00
Simisays
17c7eeedda update 2022-11-06 23:05:33 +01:00
squee1968
d78760c386 Update junkyard_genius.txt 2022-11-06 16:04:50 -06:00
squee1968
022f93dd66 Update junkyard_genius.txt 2022-11-06 15:42:23 -06:00
Simisays
7e63568168 Merge branch 'BRO2' of https://github.com/Simisays/forge into BRO2 2022-11-06 22:34:51 +01:00
Simisays
20219c21ff update 2022-11-06 22:34:49 +01:00
Anthony Calosa
c0da673d61 Merge pull request #1819 from Northmoc/brc_ashnod
BRC: ashnod_the_uncaring.txt and support
2022-11-07 05:27:03 +08:00
Northmoc
bfdd17a67c PR 1749 tweaks (#1782)
* tweaks for PR 1749

* high_priest_of_penance.txt fix desc

* ChooseCardEffect add "ForgetOtherRemembered"
2022-11-06 21:24:03 +00:00
Anthony Calosa
ceaa8b7a50 Merge pull request #1818 from Northmoc/phase
BRC: Disciple of Caelus Nin + support / KW to static refactor
2022-11-07 05:08:36 +08:00
Simisays
ebec37ced3 Update excavation_explosion.txt 2022-11-06 21:58:06 +01:00
Northmoc
6ce263a4e9 ashnod_the_uncaring.txt and support 2022-11-06 15:47:11 -05:00
Northmoc
829e3bc041 remove unneeded default AILogic 2022-11-06 14:38:53 -05:00
Northmoc
d40cfb985a ChooseCardAi add error message 2022-11-06 14:38:53 -05:00
Northmoc
0c06184da8 update ChooseCardAi with "NotSelf" consumable 2022-11-06 14:38:52 -05:00
Northmoc
e637a2279b refactor keywords "CARDNAME can't phase in/out" to statics 2022-11-06 14:15:36 -05:00
Northmoc
bd23ccf46f PhasesEffect.resolve add "RememberValids" 2022-11-06 14:15:36 -05:00
Northmoc
cbbe6f20ab disciple_of_caelus_nin.txt 2022-11-06 14:15:35 -05:00
squee1968
757a4d7a1c Fix Saheeli Rai 2022-11-06 13:00:47 -06:00
JohnWilliams77
d911bfb97e Update Secret Lair Drop Series.txt (#1817) 2022-11-06 19:54:37 +03:00
tool4ever
90eb4b7a05 Few card fixes (#1814)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-11-06 19:54:13 +03:00
Simisays
a011b57efb Update vodalian_tide_mage.txt 2022-11-06 17:29:38 +01:00
Simisays
217fe6a67d Update cityscape_leveler.txt 2022-11-06 17:18:24 +01:00
Simisays
77b2318f20 Merge branch 'BRO2' of https://github.com/Simisays/forge into BRO2 2022-11-06 16:07:26 +01:00
Simisays
b34ae3af47 Update vodalian_tide_mage.txt 2022-11-06 16:07:23 +01:00
Paul Hammerton
e0400ca8fd Merge pull request #1813 from paulsnoops/edition_updates
Edition updates: BRC & J22
2022-11-06 12:36:50 +00:00
paulsnoops
2dac974440 Edition updates: BRC & J22 2022-11-06 12:33:35 +00:00
Paul Hammerton
401b3d7c2b Merge pull request #1812 from paulsnoops/name_fixes
Small file name fixes
2022-11-06 11:53:21 +00:00
paulsnoops
79639261ec Small file name fixes 2022-11-06 11:39:52 +00:00
Simisays
0032c53c26 Delete epic_confrontation.txt 2022-11-06 12:36:17 +01:00
Simisays
45d8c2b4c0 update 2022-11-06 12:26:09 +01:00
Paul Hammerton
7e7fca0721 Merge pull request #1811 from paulsnoops/edition_updates
Small edition updates: BRO & BRR
2022-11-06 11:02:14 +00:00
Paul Hammerton
d441197fb7 Merge pull request #1810 from JohnWilliams77/patch-56
Update Secret Lair Drop Series.txt
2022-11-06 10:59:26 +00:00
paulsnoops
19a9fb7315 Small edition updates: BRO & BRR 2022-11-06 10:58:32 +00:00
JohnWilliams77
8191629ef0 Update Secret Lair Drop Series.txt 2022-11-06 10:41:39 +00:00
squee1968
4a8ce693e5 5-BRO-Cards-by-Squee 2022-11-06 04:01:39 -06:00
Anthony Calosa
23ba89ec37 Merge pull request #1806 from Northmoc/prayers
fix sheltering_prayers.txt / expand "ControllerControls" CardProperty
2022-11-06 16:51:51 +08:00
Anthony Calosa
ec8ff8bd07 Merge pull request #1804 from Simisays/BRO1
BRO 15 cards 5/11 + fixing wrong names from translations
2022-11-06 16:48:39 +08:00
Simisays
9699dba0f5 update 2022-11-06 09:05:23 +01:00
Simisays
f8a02d320b Update blanchwood_prowler.txt 2022-11-06 09:01:26 +01:00
Simisays
75c11ad1bc update 2022-11-06 08:43:24 +01:00
Simisays
9472140bde cleanup 2022-11-06 08:11:27 +01:00
squee1968
46fe6b4713 5-BRO-Cards-by-Squee 2022-11-05 20:59:33 -05:00
Anthony Calosa
3229612ef6 Merge pull request #1781 from Northmoc/plowshares
Refactor for Swords to Plowshares and similar
2022-11-06 08:45:40 +08:00
Anthony Calosa
feddcec539 Merge pull request #1795 from Card-Forge/new-quest-decks
Adding a whole boatload of Quest decks
2022-11-06 08:42:39 +08:00
Anthony Calosa
e49c095747 Merge pull request #1778 from Simisays/BRO-12
BRO 10 Cards 1/11
2022-11-06 08:41:39 +08:00
Anthony Calosa
da94a28ae0 Merge pull request #1805 from tool4ever/rememberCountered
Fix RememberCountered when replaced
2022-11-06 08:40:30 +08:00
Northmoc
848cfdf9d1 fix sheltering_prayers.txt / expand "ControllerControls" 2022-11-05 19:41:52 -04:00
Simisays
6845087904 update 2022-11-05 21:31:28 +01:00
Simisays
d6ce360c99 Delete bladecoil_serpent.txt 2022-11-05 20:38:44 +01:00
tool4EvEr
8115cc6b17 Fix RememberCountered when replaced 2022-11-05 17:08:02 +01:00
Simisays
99a33940fe Update kaylas_music_box.txt 2022-11-05 14:29:51 +01:00
Simisays
c5451b4409 update 2022-11-05 12:46:28 +01:00
Simisays
64503d622a Update carrion_locust.txt 2022-11-05 12:23:35 +01:00
Simisays
0bfc22b4a2 Update gwenna_eyes_of_gaea.txt 2022-11-05 12:21:39 +01:00
Simisays
d5ad7671b8 update 2022-11-05 12:10:27 +01:00
Simisays
a054fe9841 update 2022-11-05 10:43:49 +01:00
Simisays
a5ca410da1 Create liberator_urzas_battlethopter.txt 2022-11-05 08:54:30 +01:00
Anthony Calosa
f8af2606a9 BRO add missing cards 2022-11-05 15:08:16 +08:00
Anthony Calosa
512d5632ae BRR add missing cards 2022-11-05 14:46:21 +08:00
Anthony Calosa
110f31d45a BRR add missing artist 2022-11-05 14:16:35 +08:00
Anthony Calosa
b6ee180a48 Update The Brothers War Retro Artifacts.txt 2022-11-05 12:26:00 +08:00
Anthony Calosa
74869dbdd0 Update The Brothers War.txt 2022-11-05 12:24:50 +08:00
Anthony Calosa
149e8494ae Merge pull request #1779 from add-le/patch-fr-1
Add some label to translate saga info
2022-11-05 06:29:02 +08:00
Simisays
de1df98ad1 BRO 18 cards 4/11 [SQUASH MERGE] (#1796) 2022-11-04 22:23:32 +00:00
Paul Hammerton
87a0f4cc0d Merge pull request #1803 from paulsnoops/edition_updates
Edition updates: BRO, BRC & BRR
2022-11-04 22:20:02 +00:00
Paul Hammerton
d4a7fceb09 Merge pull request #1799 from Simisays/BRC
BRC 5 Cards
2022-11-04 22:17:57 +00:00
Paul Hammerton
cdbf42c4d2 Merge pull request #1800 from Northmoc/bro_4
BRO: 4 Nov
2022-11-04 22:17:45 +00:00
paulsnoops
58b3be926c Edition updates: BRO, BRC & BRR 2022-11-04 22:16:54 +00:00
tool4ever
e04620830e Fix ManaSpent not checking based on source 2022-11-04 22:15:55 +00:00
Anthony Calosa
568a4c302d Merge pull request #1792 from Simisays/BRO13
BRO 10 cards 3/11
2022-11-05 06:12:32 +08:00
tool4ever
23a92ce83d Merge pull request #1801 from Northmoc/fix2
more miscellaneous fixes and tidying
2022-11-04 22:36:26 +01:00
tool4ever
24b6e0f6c1 Merge pull request #1770 from Northmoc/hurkyl
hurkyl_master_wizard.txt refactor
2022-11-04 22:36:10 +01:00
Northmoc
f3ed777bb3 LifeLoseEffect.getStackDescription cushion for X changing 2022-11-04 16:57:36 -04:00
Northmoc
8d15a38380 DestroyEffect.getStackDescription clean up 2022-11-04 16:56:40 -04:00
Simisays
be0312b4ce Update staff_of_titania.txt 2022-11-04 21:25:53 +01:00
Northmoc
47865f255f LifeGainEffect.getStackDescription handle Defined/Targeted coming up empty 2022-11-04 15:57:54 -04:00
Northmoc
ae87f836b4 another go 2022-11-04 15:57:50 -04:00
Northmoc
62836d6696 LifeGainEffect.getStackDescription fixup 2022-11-04 15:56:40 -04:00
Northmoc
5066e10e77 Refactor for Swords to Plowshares and similar 2022-11-04 15:56:31 -04:00
Simisays
2359cf2396 Merge branch 'BRC' of https://github.com/Simisays/forge into BRC 2022-11-04 20:55:10 +01:00
Simisays
e0f26aa79b update 2022-11-04 20:55:07 +01:00
Northmoc
976f8c4d09 thought_knot_seer.txt with RevealHand 2022-11-04 15:22:43 -04:00
Northmoc
cd200818ea memory_leak.txt with RevealHand 2022-11-04 15:22:14 -04:00
Northmoc
c386b4b9f9 teferi_temporal_pilgrim.txt tidy 2022-11-04 15:21:55 -04:00
Northmoc
2666040670 gix_yawgmoth_praetor.txt tidy 2022-11-04 14:46:14 -04:00
Northmoc
273100ebd3 RevealHandEffect.getStackDescription refactor 2022-11-04 14:44:44 -04:00
Simisays
95bcf38826 Update staff_of_titania.txt 2022-11-04 19:34:12 +01:00
Northmoc
3017744249 arbalest_engineers.txt 2022-11-04 14:15:26 -04:00
Northmoc
fb95232f27 argivian_avenger.txt 2022-11-04 14:15:09 -04:00
Simisays
f4e6f2fc2a update 2022-11-04 18:50:14 +01:00
Simisays
cdb2dbe115 update 2022-11-04 18:41:15 +01:00
Northmoc
b7b8472540 fixes (#1798) 2022-11-04 20:40:00 +03:00
Northmoc
f346ba5bef airlift_chaplain.txt 2022-11-04 13:15:16 -04:00
Simisays
71da76809b Update titania_natures_force.txt 2022-11-04 18:11:33 +01:00
Northmoc
0a3611d1b4 air_marshal.txt 2022-11-04 13:10:31 -04:00
Simisays
19c1801de9 Update staff_of_titania.txt 2022-11-04 18:09:53 +01:00
Simisays
c6e84b9cca update 2022-11-04 18:08:12 +01:00
Northmoc
47807c65b9 stromkirk_mentor.txt tidy 2022-11-04 12:29:59 -04:00
Northmoc
f1efe7df5a aeronaut_cavalry.txt 2022-11-04 12:29:36 -04:00
Robbatog
2968d7e5e2 Introduce Evolving Wilds quest world. It has a random selection of legal core- and expansion sets that rotate periodically based on the number of wins. 2022-11-04 15:48:52 +01:00
Robbatog
ed9931213c Use getter methods instead of directly accessing members in GameFormat, because they can be overridden to produce different behavior if needed 2022-11-04 15:31:13 +01:00
Robbatog
e8927ea577 Changed name of GameFormatQuest.Predicates to avoid name clash with com.google.common.base.Predicates 2022-11-04 15:27:28 +01:00
friarsol
8285e22e0c Adding a whole boatload of Quest decks 2022-11-03 23:35:51 -04:00
add-le
2be7e95a44 fix keyword check 2022-11-03 20:59:45 +01:00
Robbatog
f643460a22 Added Quest Preference for toggling quest+world rules on/off in duels 2022-11-03 19:26:31 +01:00
Robbatog
da2e66b624 Enforce quest- and world's rules before starting a duel.
E.g. no Vintage cards allowed in player's deck while in Random Standard world.
2022-11-03 19:18:49 +01:00
Anthony Calosa
e570479e8d Merge pull request #1786 from asvitkine/fix_lands
Fix simulation AI logic related to playing lands.
2022-11-03 20:52:28 +08:00
Simisays
ea4971ff6c Update gnawing_vermin.txt 2022-11-03 13:13:54 +01:00
Anthony Calosa
0787cc460c Merge pull request #1789 from asvitkine/fix_fetch
Image fetcher: Don't download card images that are already present.
2022-11-03 20:11:33 +08:00
Anthony Calosa
e6db55b18c Merge pull request #1784 from Simisays/BRO12
BRO 10 Cards 2/11
2022-11-03 20:06:34 +08:00
Anthony Calosa
c544b2b39a Merge pull request #1774 from Simisays/BRO-11
BRO 10 more 31/10
2022-11-03 20:06:19 +08:00
Anthony Calosa
1db6e3a657 Merge pull request #1793 from JohnWilliams77/patch-55
Update Secret Lair Drop Series.txt
2022-11-03 20:04:31 +08:00
Simisays
c1626d07a7 Update skystrike_officer.txt 2022-11-03 10:44:09 +01:00
Simisays
4c1cfebe3a Update hero_of_the_dunes.txt 2022-11-03 10:43:50 +01:00
Simisays
7d338037d5 Update bladewhip_transmogrant.txt 2022-11-03 10:43:29 +01:00
Simisays
00262653e7 Update gnawing_vermin.txt 2022-11-03 10:43:22 +01:00
JohnWilliams77
5ce8220386 Update Secret Lair Drop Series.txt 2022-11-03 09:39:31 +00:00
Simisays
088a334840 Update hero_of_the_dunes.txt 2022-11-03 08:44:21 +01:00
Simisays
ac4b844383 Update bladewhip_transmogrant.txt 2022-11-03 08:42:59 +01:00
Simisays
5162645e59 Merge branch 'Card-Forge:master' into BRO13 2022-11-03 08:41:46 +01:00
Simisays
c7daefbd31 Update tocasia_dig_site_mentor.txt 2022-11-03 07:47:18 +01:00
tool4ever
f264f57194 Merge pull request #1791 from tool4ever/CopyCard
* Fix Wondrous Crucible not casting permanent spells cleanly

* Zone fixes
2022-11-03 07:35:22 +01:00
asvitkine
2804206776 Improve AI logic for cavern of souls. (#1787)
* Improve AI logic for cavern of souls.

Improve AI logic for cavern of souls.

- Don't count token creature types when looking for most prominent creature type, since cavern of souls doesn't help with them.
- Weigh cards in hand and commanders double, as they are more likely to be cast.

I tested with a Tiny Leaders deck running Geist of Saint Traft that didn't have any creature type synergy and confirmed that the changes make the AI choose Spirit for Geist, rather than Human as before.

* Apply this to a few more cards.

* Remove a print statement.

* Address review comments.
2022-11-03 08:03:37 +03:00
JohnWilliams77
05963bb68f Update Media Inserts.txt (#1788)
* Update Media Inserts.txt

* Update Media Inserts.txt

* Update Secret Lair Drop Series.txt
2022-11-03 07:18:38 +03:00
Simisays
ce1370661b BRC 3 Cards (#1780)
* update

* Update the_brothers_war.txt

* update

* Update the_brothers_war.txt

* Update the_brothers_war.txt

* Update the_brothers_war.txt

* update
2022-11-03 07:18:26 +03:00
JohnWilliams77
30ecbb390e Update Online Promos.txt (#1790)
* Update Online Promos.txt

* Update Online Promos.txt
2022-11-03 07:12:09 +03:00
Simisays
9d008fa5ba update 2022-11-02 22:19:57 +01:00
Simisays
e59d0c1ab2 update 2022-11-02 22:11:04 +01:00
tool4EvEr
36b64280ac Zone fixes 2022-11-02 21:23:02 +01:00
tool4EvEr
965ea89ced Fix Wondrous Crucible not casting permanent spells cleanly 2022-11-02 21:22:49 +01:00
asvitkine
5a2b714a67 Revert a print statement. 2022-11-02 14:02:09 -04:00
asvitkine
061a24a88c Image fetcher: Don't download card images that are already present.
Fixes a bug where a card's image will be repeatedly downloaded when ImageCache would return for a reason other than the image not being present, such as when requesting a very small image. That happened in practice during the drawing a card animation, where the card is scaled during the animation.
2022-11-02 14:01:17 -04:00
Simisays
317ec56244 revert 2022-11-02 16:18:24 +01:00
Simisays
93706da5d3 Update fortified_beachhead.txt 2022-11-02 16:13:35 +01:00
Simisays
abc4defdcb Update tocasia_dig_site_mentor.txt 2022-11-02 16:07:53 +01:00
Simisays
60aa2ffef0 update 2022-11-02 16:07:03 +01:00
asvitkine
3c57330aa5 Add a comment. 2022-11-02 10:28:14 -04:00
asvitkine
b0120eedf0 Fix simulation AI logic related to playing lands.
This got broken by the following refactor:
79c9c914e2

The result was that simulation AI was ignoring certain decision trees that involved
playing lands, leading to not considering certain lines of play and some log
messages printed to standard error. I've added a test that covers this logic to prevent
it breaking again in the future.

Also, a couple small clean ups to related tests.
2022-11-02 10:26:37 -04:00
Simisays
a6f4b509dd update 2022-11-02 13:40:20 +01:00
Simisays
55684caaeb Update one_with_the_multiverse.txt 2022-11-02 10:44:28 +01:00
Simisays
efcd619cb1 Update draconic_destiny.txt 2022-11-02 10:43:18 +01:00
Simisays
c29f29cf5b update 2022-11-02 10:35:39 +01:00
Simisays
6a7da02883 Update and rename urzass_sylex.txt to urzas_sylex.txt 2022-11-02 10:28:51 +01:00
Simisays
e12b261299 Update liberator_urzas_battlethopter.txt 2022-11-02 09:24:06 +01:00
Paul Hammerton
95d9c80508 Merge pull request #1783 from JohnWilliams77/patch-52
Update Secret Lair Drop Series.txt
2022-11-02 08:24:02 +00:00
Simisays
4aa93ab7af update 2022-11-02 08:16:05 +01:00
JohnWilliams77
9fe9917dc6 Update Secret Lair Drop Series.txt 2022-11-01 23:15:25 +00:00
Anthony Calosa
c6e4eaa19c Merge pull request #1777 from tool4ever/numBlockers
Fix NumBlockers
2022-11-02 06:15:40 +08:00
Northmoc
f78e184771 ChangeZoneEffect add "RandomOrder", last tweaks to hurkyl_master_wizard.txt 2022-11-01 18:08:21 -04:00
Simisays
f50528528e Update urzas_command.txt 2022-11-01 21:14:54 +01:00
Simisays
fab0dab870 update 2022-11-01 20:17:29 +01:00
add-le
7762e4695f add some labels 2022-11-01 18:59:45 +01:00
Simisays
2728d5965e Update su_chi_cave_guard.txt 2022-11-01 18:40:36 +01:00
Simisays
ddd62e0f60 Update simian_simulacrum.txt 2022-11-01 18:39:56 +01:00
Simisays
4d972fe918 Update the_stone_brain.txt 2022-11-01 18:38:00 +01:00
Simisays
3b5fd00f56 update 2022-11-01 18:23:40 +01:00
Simisays
46e38a7b29 update 2022-11-01 18:03:51 +01:00
tool4EvEr
21fa0e0f6a More LKI fixes 2022-11-01 16:44:41 +01:00
Northmoc
9ef60b7aaa better compliance with CR 608.2f 2022-11-01 11:05:05 -04:00
tool4EvEr
64a9481a80 Fix missing LKI 2022-11-01 15:47:31 +01:00
tool4EvEr
d656bed11c Update AI checks 2022-11-01 15:25:14 +01:00
tool4EvEr
e9806beebd Remove NumBlockers 2022-11-01 15:14:47 +01:00
tool4EvEr
6fe60b8198 Update cards 2022-11-01 15:04:37 +01:00
tool4EvEr
a18761e936 Fix Rampage 2022-11-01 15:03:57 +01:00
tool4EvEr
d954f9dcb3 Cleanup 2022-11-01 14:37:51 +01:00
Northmoc
b0cc9ba678 more - including revival_experiment.txt 2022-11-01 09:36:07 -04:00
Simisays
b8cd58abe5 update 2022-11-01 13:33:50 +01:00
Simisays
7f8c238c77 Update saheeli_filigree_master.txt 2022-11-01 10:05:54 +01:00
Paul Hammerton
4392fa7d4d Merge pull request #1775 from paulsnoops/editions_update
Edition updates: BRO, BRC & BRR
2022-11-01 08:30:11 +00:00
Simisays
4e43288306 update 2022-11-01 09:28:52 +01:00
paulsnoops
dc2ec56288 Edition updates: BRO, BRC & BRR 2022-11-01 08:26:57 +00:00
Northmoc
a316b9ce23 more! 2022-10-31 22:06:09 -04:00
Anthony Calosa
5db8a2c564 Merge pull request #1773 from add-le/patch-alchemy-icon
Add an alchemy icon for A- cards
2022-11-01 07:16:38 +08:00
Anthony Calosa
2fe4ac4e6d Merge pull request #1771 from tool4ever/lkifixes
Fix Sigarda's Aid failed to target & AITapDown
2022-11-01 07:10:25 +08:00
Anthony Calosa
b6d2399452 Merge pull request #1769 from Simisays/BRO-10
BRO 10 more
2022-11-01 07:07:26 +08:00
Anthony Calosa
708cc0a925 Merge pull request #1757 from Simisays/BRO-8
BRC 5 more
2022-11-01 07:06:47 +08:00
tool4EvEr
6666160e03 Fix wrong counting when same card recasted 2022-10-31 23:49:50 +01:00
tool4EvEr
b63f27d15d Clean up 2022-10-31 23:26:22 +01:00
Simisays
75cb8f77e0 Update portal_to_phyrexia.txt 2022-10-31 22:52:28 +01:00
tool4EvEr
937fe3c86f Fix card 2022-10-31 22:51:04 +01:00
Simisays
61c319d576 Delete the_fall_of_kroog.txt 2022-10-31 22:18:00 +01:00
Simisays
15d873ae70 update 2022-10-31 21:55:55 +01:00
Northmoc
c79888c238 hurkyl_master_wizard.txt refactor 2022-10-31 16:51:01 -04:00
Simisays
05e2daab49 update 2022-10-31 21:50:45 +01:00
add-le
9cd4fb32ec add an alchemy icon for A- cards 2022-10-31 21:17:15 +01:00
Simisays
8f871dc143 update 2022-10-31 21:10:54 +01:00
Simisays
40d04bc62e Update portal_to_phyrexia.txt 2022-10-31 21:06:04 +01:00
Simisays
ec383e1fe5 Update yotian_dissident.txt 2022-10-31 21:04:39 +01:00
Simisays
6b0acbcbac Update portal_to_phyrexia.txt 2022-10-31 20:24:15 +01:00
Northmoc
a3d39fba85 tweaks for PR 1762/1743 (#1767)
* tweaks for PR 1762

* titania_voice_of_gaea_titania_gaea_incarnate.txt tweaks
2022-10-31 22:03:46 +03:00
Chris H
cc6384c62a Update alchemists_gambit.txt (#1768) 2022-10-31 22:03:24 +03:00
Simisays
1d18ba7783 Update portal_to_phyrexia.txt 2022-10-31 19:21:57 +01:00
tool4EvEr
c1cc034c03 Trigger fix 2022-10-31 19:18:44 +01:00
Simisays
d9b558cfb9 update 2022-10-31 19:18:35 +01:00
tool4EvEr
774536635f Card fix 2022-10-31 19:11:05 +01:00
Simisays
262a52b17d update 2022-10-31 19:10:55 +01:00
add-le
b870491e35 fix french translation 2022-10-31 18:58:40 +01:00
tool4EvEr
2ca312ace9 Fix cards 2022-10-31 18:45:52 +01:00
tool4EvEr
8481540237 Fix Sigarda's Aid failed to target & AITapDown 2022-10-31 18:15:13 +01:00
Simisays
35109c960a Update kaylas_music_box.txt 2022-10-31 18:01:32 +01:00
Simisays
6e8c1f490c update 2022-10-31 17:33:20 +01:00
Simisays
2d7b313a14 update 2022-10-31 17:27:36 +01:00
Simisays
d4319d9897 Update hexavus.txt 2022-10-31 15:17:04 +01:00
Anthony Calosa
53d6facd65 Merge pull request #1762 from Simisays/BRO9
BRO 10 cards
2022-10-31 17:23:31 +08:00
Simisays
336e37f34f Update stern_lesson.txt 2022-10-31 09:53:05 +01:00
Anthony Calosa
2077114754 Update bloodthirster.txt 2022-10-31 14:41:11 +08:00
Anthony Calosa
20024eeb0c Revert aetherspouts.txt
fix not working
2022-10-31 12:55:33 +08:00
Anthony Calosa
80206f58ae Update otherworldly_gaze.txt
Fix cost
2022-10-31 11:21:16 +08:00
Anthony Calosa
61a5b0db82 Merge pull request #1755 from Simisays/BRO-7
BRC 10 cards
2022-10-31 05:42:35 +08:00
Anthony Calosa
382a22925e Merge pull request #1765 from t-w-o-s-a-t/patch-1
Update de-DE.properties
2022-10-31 05:41:49 +08:00
Simisays
27e1f21026 update 2022-10-30 22:00:22 +01:00
t-w-o-s-a-t
892f2fc448 Update de-DE.properties
translated lblGainControlConfirm, lblRemoveNTargetCounterFromCardPayCostSelect, lblChosenColors, lblLoyalty, lblCommon, lblUncommon, lblRare, lblMythic and lblAchievementEarned
2022-10-30 17:03:08 +01:00
Simisays
e4fa23d3b1 Update soul_partition.txt 2022-10-30 16:48:47 +01:00
Simisays
d39ec1edc8 update 2022-10-30 16:38:20 +01:00
Simisays
5245b08bed Merge branch 'BRO-7' of https://github.com/Simisays/forge into BRO-7 2022-10-30 16:34:28 +01:00
Simisays
061812ca9f Update wreck_hunter.txt 2022-10-30 16:34:24 +01:00
Simisays
144d23ce1c Update sanwell_avenger_ace.txt 2022-10-30 16:00:42 +01:00
Simisays
615bcaf99b update 2022-10-30 15:59:41 +01:00
Simisays
642dda71a1 Update scholar_of_new_horizons.txt 2022-10-30 15:09:39 +01:00
Northmoc
b17c106d10 improve handling for multiple defilers of same color 2022-10-30 10:07:26 -04:00
Simisays
98eaef2b8c update 2022-10-30 14:45:54 +01:00
Simisays
df1bde47a5 update 2022-10-30 14:44:00 +01:00
Simisays
f9e6a3fe3c Update scholar_of_new_horizons.txt 2022-10-30 14:38:04 +01:00
Simisays
1da1e4e43f Update wreck_hunter.txt 2022-10-30 14:27:34 +01:00
Simisays
21b2ec47a4 update 2022-10-30 14:13:31 +01:00
Simisays
7d67b6a2a5 Update scholar_of_new_horizons.txt 2022-10-30 14:06:55 +01:00
JohnWilliams77
2e4867674b Update Secret Lair Drop Series.txt (#1761) 2022-10-30 12:34:45 +03:00
Anthony Calosa
44898a9214 Merge pull request #1763 from CCTV-1/master
translate new texts.
2022-10-30 17:10:17 +08:00
CCTV-1
445bac6fc9 update chinese simplified translations. 2022-10-30 16:39:30 +08:00
Simisays
11eab89c46 Update tawnos_the_toymaker.txt 2022-10-30 09:34:03 +01:00
Simisays
312e52ee53 Update stern_lesson.txt 2022-10-30 09:33:31 +01:00
Simisays
c30ab57789 Update gaeas_courser.txt 2022-10-30 09:32:29 +01:00
Simisays
8e7d3da346 Update 2022-10-30 09:30:45 +01:00
Simisays
6235a63456 update 2022-10-30 07:16:05 +01:00
Anthony Calosa
9f3790a421 Merge pull request #1743 from Simisays/BRO4
BRO Titania, Voice of Gaea & Titania, Voice of Gaea
2022-10-30 13:52:32 +08:00
Anthony Calosa
43d689a3cd Merge pull request #1749 from Simisays/BRO-6
BRO 9 cards
2022-10-30 13:52:14 +08:00
Anthony Calosa
2420bf6a52 Merge pull request #1760 from Northmoc/nitpick
some typos
2022-10-30 13:51:46 +08:00
Anthony Calosa
e59287db8d Update smoldering_marsh.txt
fix IllegalArgumentException
2022-10-30 13:50:08 +08:00
Northmoc
8c2f6f46a9 some typos 2022-10-29 18:36:41 -04:00
Northmoc
a264344485 DMU: Defiler cycle and support 2022-10-29 18:20:43 -04:00
Anthony Calosa
4b76c85da1 Merge pull request #1758 from rikimbo/new_wastes_dungeons
Adventure: Two new dungeons, one new enemy
2022-10-30 05:15:59 +08:00
Simisays
d99e233f8a update 2022-10-29 22:52:13 +02:00
Simisays
48d32290dd Update ashnods_harvester.txt 2022-10-29 22:35:12 +02:00
Eric Himbeault
94734670e3 Adventure: Add two new dungeons to the waste area. Add one new Blue/White enemy. Some tweaks to previous enemies and dungeons. 2022-10-29 15:15:19 -05:00
Anthony Calosa
6d05017c74 Merge pull request #1756 from JohnWilliams77/patch-50
Update Secret Lair Drop Series.txt
2022-10-30 02:41:54 +08:00
Simisays
0274662e98 update 2022-10-29 20:29:24 +02:00
Simisays
047e80ffc2 Update mishra_excavation_prodigy.txt 2022-10-29 18:00:40 +02:00
JohnWilliams77
d4ca2b08ac Update Secret Lair Drop Series.txt 2022-10-29 16:04:14 +01:00
Simisays
85804f92ec update 2022-10-29 16:35:40 +02:00
Simisays
3168e3f845 Update smelting_vat.txt 2022-10-29 16:16:15 +02:00
Simisays
e007c8852f update 2022-10-29 15:57:51 +02:00
tool4ever
28126e7438 Update nautiloid_ship.txt 2022-10-29 13:07:44 +00:00
Simisays
9b3af660a4 Update argoth_sanctum_of_nature.txt 2022-10-29 14:44:25 +02:00
Simisays
a40002fd79 update 2022-10-29 14:42:32 +02:00
Simisays
8b5606ba90 Update argoth_sanctum_of_nature.txt 2022-10-29 14:21:30 +02:00
Simisays
31b5bb24aa Merge branch 'BRO4' of https://github.com/Simisays/forge into BRO4 2022-10-29 14:20:59 +02:00
Simisays
e9ef7a5051 update 2022-10-29 14:20:33 +02:00
Simisays
878671da5a Update titania_voice_of_gaea_titania_gaea_incarnate.txt 2022-10-29 14:02:30 +02:00
Simisays
a7456890d0 Update titania_voice_of_gaea_titania_gaea_incarnate.txt 2022-10-29 13:59:20 +02:00
Simisays
2f636d8d72 update 2022-10-29 13:25:21 +02:00
Anthony Calosa
f67fe035f5 Merge pull request #1754 from tool4ever/colorFix
Fix color choice
2022-10-29 18:55:20 +08:00
tool4EvEr
f40a26f52c Fix color choice 2022-10-29 12:48:59 +02:00
tool4EvEr
c14df1832a Improve logic 2022-10-29 12:48:36 +02:00
tool4EvEr
93bcfaaf7c Cleanup 2022-10-29 12:47:16 +02:00
Paul Hammerton
5477fe476a Merge pull request #1752 from paulsnoops/edition_updates
Edition updates: BRO, BRC & BRR
2022-10-29 09:17:34 +01:00
paulsnoops
1128a3b44c Edition updates: BRO, BRC & BRR 2022-10-29 09:11:41 +01:00
Simisays
15c1b3cbf8 Update splitting_the_powerstone.txt 2022-10-29 09:03:04 +02:00
Anthony Calosa
b926401f3d Merge pull request #1751 from kevlahnota/master
fix colorchoice
2022-10-29 14:16:02 +08:00
Anthony Calosa
e4be03378a fix colorchoice 2022-10-29 14:05:01 +08:00
Anthony Calosa
5211d9b2e5 Merge pull request #1750 from JohnWilliams77/patch-49
Update Secret Lair Drop Series.txt
2022-10-29 07:32:10 +08:00
Anthony Calosa
075012b297 Merge pull request #1746 from MikeS-NZ/forge_bro
BRO: Gix, Yawgmoth Praetor; Teferi, Temporal Pilgrim + Token script
2022-10-29 07:31:52 +08:00
Anthony Calosa
d820937299 Merge pull request #1680 from Northmoc/bot_arcee
BOT: Arcee and support
2022-10-29 07:31:30 +08:00
JohnWilliams77
e25ed6d9eb Update Secret Lair Drop Series.txt 2022-10-28 22:22:49 +01:00
Simisays
ca48e1a5a3 Update hurkyl_master_wizard.txt 2022-10-28 22:41:01 +02:00
Simisays
43291f7f39 Update feldon_ronom_excavator.txt 2022-10-28 22:24:33 +02:00
Simisays
04ee9ac646 update 2022-10-28 22:09:51 +02:00
Northmoc
b055c34563 AbilityUtils.getDefinedPlayers update 2022-10-28 15:59:52 -04:00
Northmoc
e098b1f8e3 refactor AbilityKey: SpellAbilityTarget & SpellAbilityTargetingCards -> SpellAbilityTargets 2022-10-28 15:59:50 -04:00
Northmoc
b8befbbccd AbilityFactory.readTarget add "Permanent" to commonStuff list 2022-10-28 15:59:50 -04:00
Northmoc
b0c192f9c5 orvar_the_all_form.txt without remember 2022-10-28 15:59:49 -04:00
Northmoc
1591c5463c vesuvan_duplimancy.txt without remember 2022-10-28 15:59:49 -04:00
Northmoc
58771707cd TriggerSpellAbilityCastOrCopy improve SpellAbilityTargetingCards TriggeringObject 2022-10-28 15:59:48 -04:00
Northmoc
03e4892692 arcee_sharpshooter_arcee_acrobatic_coupe.txt 2022-10-28 15:59:47 -04:00
Mike S
56ac080c0b Update teferi_temporal_pilgrim.txt 2022-10-28 14:51:29 -05:00
Mike S
7dcec308f7 Update gix_yawgmoth_praetor.txt 2022-10-28 14:44:50 -05:00
Mike S
8745080d42 Update teferi_temporal_pilgrim.txt 2022-10-28 14:25:21 -05:00
Simisays
dfe580c4c8 update 2022-10-28 18:34:52 +02:00
Simisays
f655896787 Create hurkyl_master_wizard.txt 2022-10-28 17:20:16 +02:00
Simisays
02ad5018ba Update urza_powerstone_prodigy.txt 2022-10-28 17:11:00 +02:00
Simisays
ff40e15c3e update 2022-10-28 17:07:59 +02:00
Suthro
f14801c57b Merge branch 'forge_bro' of https://github.com/MikeS-NZ/forge_scripttesting into forge_bro 2022-10-27 18:48:34 -05:00
Suthro
ab12339a7b BRO: Gix, Yawgmoth Praetor
BRO: Add script for Gix, Yawgmoth Praetor
2022-10-27 18:48:32 -05:00
Mike S
76a81d04ed Delete c_1_1_a_soldier.txt 2022-10-27 18:13:02 -05:00
Mike S
de9976df8b Delete urza_lord_protector_urza_planeswalker.txt 2022-10-27 18:12:55 -05:00
Mike S
65153c4686 Delete the_mightstone_and_weakstone.txt 2022-10-27 18:12:47 -05:00
Suthro
508dca014e BRO: Teferi, Temporal Pilgrim + Token script
BRO: Add card script for Teferi, Temporal Pilgrim, + associated token script.

- Teferi, Temporal Pilgrim
- 2/2 blue Spirit creature token with vigilance and "Whenever you draw a card, put a +1/+1 counter on this creature."
2022-10-27 18:10:46 -05:00
Anthony Calosa
210bc8685b Merge pull request #1745 from tool4ever/fixes27
Fix BecomesTargetOnce multiple triggers + some others
2022-10-28 06:17:58 +08:00
tool4EvEr
d5ff7c8c39 Obscura Interceptor fix 2022-10-27 21:59:02 +02:00
tool4EvEr
33e5016dcb onPlayerLost support ChangesZoneAll 2022-10-27 21:58:39 +02:00
tool4EvEr
d5b2d4b871 Card fixes 2022-10-27 21:58:17 +02:00
tool4EvEr
eb4b4a6adb Fix Grip of Chaos 2022-10-27 21:57:40 +02:00
tool4EvEr
524ce08a5e Improve Undo 2022-10-27 21:57:10 +02:00
tool4EvEr
32bbd2f62c Clean up 2022-10-27 21:56:07 +02:00
Simisays
f5cd19cf6f update 2022-10-27 19:34:25 +02:00
Anthony Calosa
6a15a41c5d Update statistic.json
fix lifePoints display on landscape
2022-10-27 15:52:08 +08:00
Anthony Calosa
99dd7bc400 Merge pull request #1741 from add-le/translation-fr
french translation of cards
2022-10-27 07:41:17 +08:00
Simisays
4b2cb1b9ac Unfinity 7 cards (#1730) 2022-10-26 16:29:18 +00:00
add-le
90a868efbc french translation of cards 2022-10-26 18:11:16 +02:00
Anthony Calosa
e0fab83532 Update profane_tutor.txt
- closes #1739
2022-10-26 09:18:53 +08:00
Anthony Calosa
c237953f3b Merge pull request #1740 from kevlahnota/master
update quest images download
2022-10-26 09:13:28 +08:00
Anthony Calosa
d182ccae66 Merge pull request #1738 from Simisays/BRC-tawnos
BRC Tawnos Solemn Survivor
2022-10-26 09:11:56 +08:00
Anthony Calosa
18b7dc25e5 Merge pull request #1732 from Simisays/QUEST-
Kaldheim Quest World
2022-10-26 09:11:33 +08:00
Anthony Calosa
a7963df172 update quest images download 2022-10-26 09:10:58 +08:00
Simisays
dfdc3d3751 Update tawnos_solemn_survivor.txt 2022-10-25 21:24:20 +02:00
Simisays
d88e936629 Update tawnos_solemn_survivor.txt 2022-10-25 20:44:44 +02:00
Northmoc
390a78ccf5 BOT: Slicer and support (#1737)
* ControlGainEffect add "Optional" support

* lblGainControlConfirm

* slicer_hired_muscle_slicer_high_speed_antagonist.txt
2022-10-25 14:43:24 -04:00
Simisays
174ebdf836 Update tawnos_solemn_survivor.txt 2022-10-25 20:36:58 +02:00
Simisays
09afe870af Update tawnos_solemn_survivor.txt 2022-10-25 19:43:50 +02:00
Simisays
a8375427bb Create tawnos_solemn_survivor.txt 2022-10-25 19:42:11 +02:00
Northmoc
a032c12d85 Merge pull request #1724 from Northmoc/botcounters
BOT: Jetfire and related improvements
2022-10-25 06:59:49 -04:00
Paul Hammerton
e1f96ba066 Merge pull request #1736 from paulsnoops/artist
artist fix
2022-10-25 09:05:46 +01:00
paulsnoops
68224169ea artist fix 2022-10-25 09:02:37 +01:00
Paul Hammerton
89477d8a03 Merge pull request #1735 from paulsnoops/formats_gn3
Formats update: Add GN3 to Legacy & Vintage
2022-10-25 08:38:46 +01:00
Paul Hammerton
2770449afc Merge pull request #1734 from paulsnoops/editions
Edition updates: add J22 & PEWK, update GN3, SLD, SLC, BRC
2022-10-25 08:36:05 +01:00
paulsnoops
b28301754f Formats update: Add GN3 to Legacy & Vintage 2022-10-25 08:34:59 +01:00
paulsnoops
474681127d Edition updates: add J22 & PEWK, update GN3, SLD, SLC, BRC 2022-10-25 08:28:43 +01:00
Northmoc
a06d3b33b9 Merge pull request #1731 from Simisays/JUMPSTART-
J22 Ardoz, Cobbler of War + typo fix
2022-10-24 10:56:10 -04:00
Simisays
965c538586 Update vexilus_praetor.txt 2022-10-23 21:20:17 +02:00
Simisays
b5bc7fc16a update 2022-10-23 20:33:26 +02:00
Simisays
3feb15c666 Create ardoz_cobbler_of_war.txt 2022-10-23 15:09:40 +02:00
Anthony Calosa
e7f6b3371a Merge pull request #1729 from kevlahnota/master
update ghalta prescence description and image
2022-10-23 09:14:16 +08:00
Anthony Calosa
0c616a7678 update ghalta prescence description and image
- closes #1728
2022-10-23 09:07:02 +08:00
tool4ever
ae255a8e8f Fix Bargaining Table (#1727) 2022-10-22 12:10:39 +00:00
Simisays
b4c0c517e7 BOT Transformers 7 cards (#1720)
* update

* update

* Update flamewar_brash_veteran_flamewar_streetwise_operative.txt

* Update starscream_power_hungry_starscream_seeker_leader.txt

* Update blaster_combat_dj_blaster_morale_booster.txt

* Update blitzwing_cruel_tormentor_blitzwing_adaptive_assailant.txt

* update

* update

* Update soundwave_sonic_spy_soundwave_superior_captain.txt

* Update soundwave_sonic_spy_soundwave_superior_captain.txt

* Update soundwave_sonic_spy_soundwave_superior_captain.txt

* Update cyclonus_the_saboteur_cyclonus_cybertronian_fighter.txt

* final update ?

* Update blaster_combat_dj_blaster_morale_booster.txt
2022-10-22 13:56:13 +03:00
Northmoc
8d0660a341 BOT: Goldbug and Paired Tactician refactor (#1725)
* goldbug_humanitys_ally_goldbug_scrappy_scout.txt

* paired_tactician.txt use IsPresent
2022-10-22 13:55:57 +03:00
Northmoc
ca36b6f640 ManaEffect.getStackDescription add "AmountDesc" 2022-10-21 15:46:18 -04:00
Northmoc
61300c27aa Cost.add() add boolean to new CostRemoveCounter 2022-10-21 15:46:17 -04:00
Northmoc
055df30462 ooze_flux.txt refactor cost 2022-10-21 15:46:17 -04:00
Northmoc
4f9ce53f0d catti_brie_of_mithral_hall.txt simplify 2022-10-21 15:46:16 -04:00
Northmoc
27ae0dc6b6 rasputin_the_oneiromancer.txt refactor costs to match Oracle better 2022-10-21 15:46:16 -04:00
Northmoc
2361d4a6e6 remove CostDesc from old cards 2022-10-21 15:46:15 -04:00
Northmoc
2e90cf39fc jetfire_ingenious_scientist_jetfire_air_guardian.txt 2022-10-21 15:46:14 -04:00
Northmoc
1e2bb80e6d parse and support X1+ in cost for "remove one or more counters" in desc 2022-10-21 15:46:13 -04:00
Paul Hammerton
89f3358dc2 Merge pull request #1723 from JohnWilliams77/patch-48
Update Secret Lair Drop Series.txt
2022-10-21 19:37:31 +01:00
Northmoc
81a9ca2a0a ManaEffect.getStackDescription add the players making mana to the stackDescription 2022-10-21 11:44:23 -04:00
Northmoc
26e0a7f4a7 Split "confirm" and "select" decisions for removing counters 2022-10-21 11:43:02 -04:00
JohnWilliams77
bf1ed91458 Update Secret Lair Drop Series.txt 2022-10-21 10:25:53 +01:00
Anthony Calosa
4b887ef15c Merge pull request #1722 from tool4ever/cleanfix
Random cleanup + fixes
2022-10-21 07:27:18 +08:00
tool4EvEr
d6e51db755 Random cleanup + fixes 2022-10-20 22:58:51 +02:00
Northmoc
fba2ecbd60 Merge pull request #1718 from Northmoc/ydmu_tef
YDMU: Teferi's Contingency (+ Lumbering Lightshield fixes)
2022-10-19 10:25:10 -04:00
Northmoc
ce9ddf0e95 RevealEffect reveal to all when random 2022-10-18 19:48:21 -04:00
Northmoc
9ff7f0ae71 lumbering_lightshield.txt fix 2022-10-18 19:48:21 -04:00
Northmoc
b04ac25bfc teferis_contingency.txt 2022-10-18 19:48:20 -04:00
Anthony Calosa
b8550113bf Merge pull request #1716 from Northmoc/level_up
Level up improvements
2022-10-19 06:40:32 +08:00
Paul Hammerton
91d92ad9ca Merge pull request #1717 from paulsnoops/sld_number_fix
SLD number & artist fixes
2022-10-18 19:47:11 +01:00
paulsnoops
9a59620c65 SLD number & artist fixes 2022-10-18 19:42:33 +01:00
Northmoc
63dc7ac349 Level up card improvements 2022-10-18 13:58:53 -04:00
Northmoc
9e304c4e1a CardFactoryUtil.addSpellAbility: tweaks for "Level up" 2022-10-18 13:58:52 -04:00
Northmoc
d8fb08e76e CardDetailUtil.composeCardText add support for ",,," = line break 2022-10-18 13:58:52 -04:00
Northmoc
82158d252c CardDetailUtil.composeCardText improve Level up organization 2022-10-18 13:58:51 -04:00
Northmoc
564beda3f7 move "Level up" to sbLong parsed list 2022-10-18 13:58:50 -04:00
squee1968
f3655b718e Create arvad_weatherlight_smuggler.txt (#1699)
* Create arvad_weatherlight_smuggler.txt

Credit goes to Simisays in the discord thread.

* Update arvad_weatherlight_smuggler.txt

* Update arvad_weatherlight_smuggler.txt
2022-10-18 12:53:28 -04:00
tool4ever
4024297259 Cleanup cards with ReplacementResult & IsPresent (#1713)
* Cleanup cards

* Shuffle fix

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-10-18 16:49:38 +03:00
Paul Hammerton
0b1dc40091 Merge pull request #1711 from paulsnoops/sld_update
SLD October Super Drop
2022-10-18 08:54:29 +01:00
paulsnoops
54ef3af847 SLD October Super Drop 2022-10-18 08:47:04 +01:00
Anthony Calosa
ff03e0d8be Merge pull request #1710 from Card-Forge/errata
surveil errata
2022-10-18 14:23:17 +08:00
Anthony Calosa
b4e58e3525 surveil errata 2022-10-18 10:43:55 +08:00
Anthony Calosa
c9ee7e71d3 Merge pull request #1708 from add-le/card-fr-translation
Add 600 cards french translation
2022-10-18 09:25:47 +08:00
Anthony Calosa
5c8a9b06ba Merge pull request #1703 from tool4ever/cardname
Big IsPresent$ clean up
2022-10-18 09:24:15 +08:00
add-le
c3d1a788a8 add 600 cards french translation 2022-10-17 22:47:25 +02:00
tool4EvEr
55948def85 Fix Brain Maggot 2022-10-17 22:07:07 +02:00
tool4EvEr
dee568110c AI hints 2022-10-17 20:57:56 +02:00
JohnWilliams77
481c200189 Update Resale Promos.txt (#1701) 2022-10-17 19:04:15 +03:00
Northmoc
e00387f0fa BOT: "new" mechanics (#1679)
* CardFactoryUtil.addStaticAbility support "Living metal" keyword

* GameActionUtil.getAlternativeCosts() add "More Than Meets the Eye"

* Keyword.LIVING_METAL and Keyword.MORE_THAN_MEETS_THE_EYE

* TypeLists add Robot

* AlternativeCost.MTMtE

* ultra_magnus_tactician_ultra_magnus_armored_carrier.txt

* CardSplitType.Convert

* CardStateName.Converted

* GameState.addCard Converted check

* DevModeCheats for Converted

* Card.changeCardState() add Convert mode

* Card.isConvertable()

* PaperCard.hasBackFace add Convert

* Card implement convertedTimestamp

* Card.keywordsToText add Living metal to list

* DamageDealEffect.internalDamageDeal move "ExcessSVar" for more flexibility

* ComputerUtil.choosePermanentsToSacrifice improve AI for Megatron

* megatron_tyrant_megatron_destructive_force.txt

* optimus_prime_hero_optimus_prime_autobot_leader.txt

* ChangeZoneEffect.changeKnownOriginResolve support "Converted"

* Card.changeCardState() fixup
2022-10-17 19:04:06 +03:00
Simisays
16b52a3645 Deckhints for ABU and ARN with a few cleanups (#1704)
* Ai   to merg (#6)

* Update animate_artifact.txt

* Update animate_dead.txt

* Update balance.txt

* Update black_lotus.txt

* Update black_vise.txt

* Update burrowing.txt

* Update clockwork_beast.txt

* Update consecrate_land.txt

* Update conversion.txt

* Update copy_artifact.txt

* Update crystal_rod.txt

* Update cyclopean_tomb.txt

* Update death_ward.txt

* Update demonic_hordes.txt

* Update disrupting_scepter.txt

* Update dragon_whelp.txt

* Update drain_life.txt

* Update evil_presence.txt

* Update farmstead.txt

* Update fear.txt

* Update flashfires.txt

* Update flight.txt

* Update fungusaur.txt

* Update gaeas_liege.txt

* Update gauntlet_of_might.txt

* Update goblin_balloon_brigade.txt

* Update healing_salve.txt

* Update helm_of_chatzuk.txt

* Update hypnotic_specter.txt

* Update instill_energy.txt

* Update iron_star.txt

* Update ivory_cup.txt

* Update jade_statue.txt

* Update jump.txt

* Update keldon_warlord.txt

* Update keldon_warlord.txt

* Update web.txt

* Update winter_orb.txt

* Update wooden_sphere.txt

* Update stream_of_life.txt

* Update sunglasses_of_urza.txt

* Update the_hive.txt

* Update throne_of_bone.txt

* Update sedge_troll.txt

* Update simulacrum.txt

* Update smoke.txt

* Update soul_net.txt

* Update stone_giant.txt

* Update stone_giant.txt

* Update raise_dead.txt

* Update regeneration.txt

* Update regrowth.txt

* Update resurrection.txt

* Update reverse_damage.txt

* Update rock_hydra.txt

* Update sacrifice.txt

* Update scavenging_ghoul.txt

* Update pestilence.txt

* Update meekstone.txt

* Update mind_twist.txt

* Update nevinyrrals_disk.txt

* Update lifetap.txt

* Update living_artifact.txt

* Update living_lands.txt

* Update lord_of_atlantis.txt

* Update lord_of_the_pit.txt

* Update lance.txt

* Update kormus_bell.txt

* Update bazaar_of_baghdad.txt

* Update bottle_of_suleiman.txt

* Update cyclone.txt

* Update dandan.txt

* Update diamond_valley.txt

* Update drop_of_honey.txt

* Update el_hajjaj.txt

* Update erhnam_djinn.txt

* Update fishliver_oil.txt

* Update fishliver_oil.txt

* Update flying_carpet.txt

* Update ghazban_ogre.txt

* Update guardian_beast.txt

* Update island_fish_jasconius.txt

* Update sandals_of_abdallah.txt

* Update jandors_ring.txt

* Update black_vise.txt

* Update flashfires.txt

* Update gaeas_liege.txt

* Update stone_giant.txt
2022-10-17 19:03:14 +03:00
Northmoc
fe9288b1ba Merge pull request #1705 from Simisays/patch-1
Update bone_dragon.txt
2022-10-17 09:59:51 -04:00
Simisays
343bd2b639 Update bone_dragon.txt 2022-10-17 15:31:35 +02:00
TRT
145fa80f33 Clean up 2022-10-17 14:28:21 +02:00
TRT
681ce3e863 Clean up 2022-10-17 12:52:13 +02:00
tool4ever
a75c68e640 Fix Ozolith logic (#1698) 2022-10-17 06:47:56 +00:00
Simisays
8143f68672 Underdark Beholder & Amplifire & Threats Undetected (#1696) 2022-10-17 06:31:58 +00:00
Anthony Calosa
9042b8d5a7 Merge pull request #1695 from kevlahnota/master
update ProtocolMethod
2022-10-15 20:58:45 +08:00
Anthony Calosa
ab3eae643c update ProtocolMethod 2022-10-15 20:53:08 +08:00
Anthony Calosa
bd6be68c3f Merge pull request #1694 from kevlahnota/master
update last selected tab
2022-10-15 19:54:11 +08:00
Anthony Calosa
4a983796b1 unused imports 2022-10-15 19:42:27 +08:00
Anthony Calosa
c129b0f290 update last selected tab
- closes #751
2022-10-15 19:36:44 +08:00
Anthony Calosa
ba426d7e99 Merge pull request #1693 from tool4ever/refundfix
Fix refund for paying triggers like Primal Adversary
2022-10-15 19:35:13 +08:00
tool4EvEr
7b9f2bf0c1 Fix refund for paying triggers like Primal Adversary 2022-10-15 13:24:56 +02:00
Anthony Calosa
b686d0063a Update timber_protector.txt
- "If Timber Protector somehow becomes a Forest, it doesn't give itself indestructible."
2022-10-15 09:38:29 +08:00
Anthony Calosa
3e056caaf0 Merge pull request #1691 from kevlahnota/master
update AchievementsScreen
2022-10-15 06:35:04 +08:00
Anthony Calosa
0611a3249f update AchievementsScreen 2022-10-15 06:31:07 +08:00
Anthony Calosa
238b848552 Merge pull request #1690 from add-le/translation-label
New labels to translate GUI elements
2022-10-15 06:17:33 +08:00
add-le
e5f16c4d67 label to translate color choices 2022-10-14 18:50:10 +02:00
tool4ever
5865a20333 Update winterthorn_blessing.txt (#1689)
* Update winterthorn_blessing.txt

* Update winterthorn_blessing.txt
2022-10-14 14:01:16 +03:00
tool4ever
acea8aa75d Radiate fix (#1688) 2022-10-14 10:23:26 +02:00
Paul Hammerton
1cf60a1749 Merge pull request #1686 from paulsnoops/modern_remove_tsr
Remove TSR from Modern due to allowing non-legal cards
2022-10-14 09:03:33 +01:00
paulsnoops
93ca2794ce Remove TSR from Modern due to allowing non-legal cards 2022-10-14 08:56:19 +01:00
Paul Hammerton
2972fbde04 Merge pull request #1685 from paulsnoops/diviner_of_fates
Rebalancing: Diviner of Fates
2022-10-14 08:44:36 +01:00
paulsnoops
f27e531d00 Rebalancing: Diviner of Fates 2022-10-14 08:35:41 +01:00
Anthony Calosa
01814fc74b Merge pull request #1681 from tool4ever/cardcleanup13
Cleanup + Fixes
2022-10-14 07:15:16 +08:00
Anthony Calosa
a5ce8a98ac Merge pull request #1676 from Simisays/BRO-Queen
BRO Queen Kayla bin-Kroog
2022-10-14 07:09:22 +08:00
Anthony Calosa
b652dba77b Merge pull request #1677 from Simisays/YDMU-finalBis
YDMU Darigaaz's Whelp
2022-10-14 07:01:03 +08:00
Northmoc
e5d8ec5006 Fixes (#1678)
* iymrith_desert_doom.txt CheckSVar > ConditionCheckSVar

* spire_of_industry.txt use IsPresent

* helm_of_kaldra.txt tidy up - solve nonlegendary corner case

* bronze_bombshell.txt improve

* bazaar_trader.txt tidy up
2022-10-13 21:00:22 +00:00
Northmoc
712212a2bc YDMU: Priest of Possibility and support (#1638)
* EffectEffect tidy up

* priest_of_possibility.txt + "ShareKeywords"

* remember keywords as strings instead of giving Effect keywords

* EffectEffect clean up imports
2022-10-13 20:59:18 +00:00
Simisays
19c67f6ae8 Update darigaazs_whelp.txt 2022-10-13 20:53:51 +02:00
Simisays
adb6ab93de Delete teferis_contingency.txt 2022-10-13 20:45:56 +02:00
tool4EvEr
332e9fcfb3 Cleanup + Fixes 2022-10-13 20:42:27 +02:00
Simisays
a7956968aa Update darigaazs_whelp.txt 2022-10-13 19:52:14 +02:00
Simisays
8c9c14145f Update queen_kayla_bin-kroog.txt 2022-10-13 18:34:23 +02:00
Simisays
8422b412aa Update queen_kayla_bin-kroog.txt 2022-10-13 17:21:44 +02:00
Simisays
d5210bc164 Update queen_kayla_bin-kroog.txt 2022-10-13 17:19:51 +02:00
Northmoc
244e5c8059 Arbiter of the Ideal / DigEffect update (#1673) 2022-10-13 15:54:31 +02:00
tool4ever
76528987a7 Refine TargetSelection check (#1675) 2022-10-13 10:57:09 +02:00
Simisays
8eb1530548 Create queen_kayla_bin-kroog.txt 2022-10-13 09:23:47 +02:00
Simisays
9cdfc9ecf4 Update darigaazs_whelp.txt 2022-10-13 08:58:42 +02:00
Simisays
7532dd7e05 Update darigaazs_whelp.txt 2022-10-13 08:54:07 +02:00
Simisays
8aedd0f998 Update darigaazs_whelp.txt 2022-10-13 08:51:38 +02:00
Simisays
5ec66dd40b Create teferis_contingency.txt 2022-10-13 08:48:09 +02:00
Simisays
fd0c34fe2e Create darigaazs_whelp.txt 2022-10-13 08:45:32 +02:00
Anthony Calosa
03efb6510f Merge pull request #1672 from Northmoc/ravenous
Ravenous update for rules
2022-10-13 05:50:00 +08:00
Anthony Calosa
69969138e8 Merge pull request #1671 from tool4ever/targetselection
TargetSelection: improve check for enough targets
2022-10-13 05:38:18 +08:00
Anthony Calosa
4248f59f67 Merge pull request #1668 from Simisays/AI-The-Dark
Deckhints for The Dark + a few ai improvements
2022-10-13 05:35:02 +08:00
Anthony Calosa
d59a28c93f Merge pull request #1665 from Northmoc/npe
StaticAbilityCanAttackDefender try to fix NPE
2022-10-13 05:32:21 +08:00
Northmoc
27642e1cd1 Ravenous update for rules 2022-10-12 15:05:22 -04:00
Northmoc
5dfdfcc912 StaticAbilityCanAttackDefender try to fix NPE 2022-10-12 12:24:54 -04:00
tool4EvEr
5673ea329e TargetSelection fix 2022-10-12 18:22:40 +02:00
Simisays
9d64718805 5 Unfinity cards + clown token + Fix + AI improvements (#1655)
* update

* Update vodalian_tide_mage.txt

* Rename Boing.txt to boing.txt

* update

* update

* Update out_of_the_tombs.txt

* Update six_sided_die.txt

* Update vegetation_abomination.txt

* Update magnetic_mountain.txt

* Update bad_moon.txt

* Update magnetic_mountain.txt

* Update crusade.txt

* Update karma.txt

* Update nether_shadow.txt

* Update zombie_master.txt

* Update goblin_king.txt

* Update karma.txt

* Update magnetic_mountain.txt
2022-10-12 17:18:47 +03:00
Paul Hammerton
ae229b5da0 Alchemy Rebalancing for October 6, 2022 (#1661)
* WIP: Alchemy Rebalancing for October 6, 2022

* 23_cards

* remaining_cards

* artist

* fixes

* burn
2022-10-12 17:18:33 +03:00
Simisays
14167d9dff Update electric_eel.txt 2022-10-12 15:35:37 +02:00
Simisays
04464bd0c3 Update dance_of_many.txt 2022-10-12 15:25:21 +02:00
tool4ever
1a64c7c10e Merge branch 'master' into AI-The-Dark 2022-10-12 15:20:28 +02:00
Simisays
59b02ec420 Update goblin_caves.txt 2022-10-12 15:15:00 +02:00
Simisays
3f7da4ef96 Update goblin_shrine.txt 2022-10-12 15:14:27 +02:00
Simisays
723fa7f00e Update goblin_caves.txt 2022-10-12 15:00:10 +02:00
Simisays
ba35a54f21 Update goblin_shrine.txt 2022-10-12 14:59:33 +02:00
tool4ever
b614b9b46f Cleanup cards (#1667)
* Card cleanup

* FailedToTarget fix

* Fix card

* Use ColorSet cache in favor of parsing

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-10-12 15:54:07 +03:00
Simisays
90f2964446 Update goblin_wizard.txt 2022-10-12 14:51:39 +02:00
Simisays
fb1d3143aa Update goblin_caves.txt 2022-10-12 14:46:42 +02:00
Simisays
3a40602326 Update goblin_shrine.txt 2022-10-12 14:46:23 +02:00
Simisays
8657f23640 Update goblin_caves.txt 2022-10-12 14:46:10 +02:00
Simisays
831229a468 Update grave_robbers.txt 2022-10-12 14:39:40 +02:00
Simisays
10546d9fc6 Update tivadars_crusade.txt 2022-10-12 14:36:16 +02:00
Simisays
a1913de524 Update riptide.txt 2022-10-12 14:34:35 +02:00
Simisays
5a7a5ccfdf Update people_of_the_woods.txt 2022-10-12 14:34:23 +02:00
Simisays
d6afe543ad Update nameless_race.txt 2022-10-12 14:29:32 +02:00
Simisays
a5ffaa5571 Update martyrs_cry.txt 2022-10-12 14:28:10 +02:00
Simisays
3228964c94 Update holy_light.txt 2022-10-12 14:27:39 +02:00
Simisays
f4143aa392 Update morale.txt 2022-10-12 14:24:14 +02:00
Simisays
fb3441bc19 Update hidden_path.txt 2022-10-12 14:20:19 +02:00
Simisays
89f3856640 Update goblins_of_the_flarg.txt 2022-10-12 14:20:02 +02:00
Simisays
35ab3fc315 Update gaeas_touch.txt 2022-10-12 14:19:25 +02:00
Simisays
349e592583 Update eternal_flame.txt 2022-10-12 14:19:11 +02:00
Simisays
61190926a2 Update cave_people.txt 2022-10-12 14:17:57 +02:00
Simisays
b73a815b2e Update blood_moon.txt 2022-10-12 14:17:43 +02:00
Simisays
57e0a9031c The dark ai updates (#5)
* Update wormwood_treefolk.txt

* Update worms_of_the_earth.txt

* Update war_barge.txt

* Update wand_of_ith.txt

* Update tormods_crypt.txt

* Update tivadars_crusade.txt

* Update spitting_slug.txt

* Update skull_of_orm.txt

* Update season_of_the_witch.txt

* Update scavenger_folk.txt

* Update scarwood_hag.txt

* Update safe_haven.txt

* Update runesword.txt

* Update riptide.txt

* Update rag_man.txt

* Update psychic_allergy.txt

* Update living_armor.txt

* Update mana_vortex.txt

* Update marsh_viper.txt

* Update martyrs_cry.txt

* Update mind_bomb.txt

* Update morale.txt

* Update nameless_race.txt

* Update necropolis.txt

* Update necropolis.txt

* Update orc_general.txt

* Update people_of_the_woods.txt

* Update fountain_of_youth.txt

* Update frankensteins_monster.txt

* Update gaeas_touch.txt

* Update giant_shark.txt

* Update goblin_caves.txt

* Update goblin_caves.txt

* Update goblin_digging_team.txt

* Update goblin_rock_sled.txt

* Update goblin_shrine.txt

* Update goblins_of_the_flarg.txt

* Update goblin_wizard.txt

* Update grave_robbers.txt

* Update hidden_path.txt

* Update holy_light.txt

* Update curse_artifact.txt

* Update dance_of_many.txt

* Update dark_heart_of_the_wood.txt

* Update dark_sphere.txt

* Update eater_of_the_dead.txt

* Update electric_eel.txt

* Update elves_of_deep_shadow.txt

* Update eternal_flame.txt

* Update fasting.txt

* Update amnesia.txt

* Update angry_mob.txt

* Update apprentice_wizard.txt

* Update ball_lightning.txt

* Update blood_moon.txt

* Update cave_people.txt

* Update coal_golem.txt
2022-10-12 13:51:12 +02:00
Northmoc
da5afd9e11 StaticAbilityCanAttackDefender try to fix NPE 2022-10-11 18:48:14 -04:00
Simisays
335133f906 YDMU 4 (#1651)
* Create darigaaz's_whelp.txt

* update

* Update spellchain_scatter.txt

* Update trove_mage.txt

* Update vesuvan_mist.txt

* Create teferis_contingency.txt

* Update darigaaz's_whelp.txt

* Update pull_of_the_mist_moon.txt

* Update spellchain_scatter.txt

* Update trove_mage.txt

* Update vesuvan_mist.txt

* Update vesuvan_mist.txt

* Update teferis_contingency.txt

* update

* Update teferis_contingency.txt

* Delete darigaazs_whelp.txt

* Delete teferis_contingency.txt

* Update pull_of_the_mist_moon.txt

* Update pull_of_the_mist_moon.txt

* Update pull_of_the_mist_moon.txt

* Update pull_of_the_mist_moon.txt

* Update pull_of_the_mist_moon.txt

* Update vesuvan_mist.txt

* Update spellchain_scatter.txt
2022-10-11 19:08:43 +03:00
Hans Mackowiak
0f187d0f59 Update ghostform.txt
FIX: AB to SP
2022-10-11 14:31:03 +02:00
rikimbo
b5b41186ce Add additional AI logic for playing blink effects (try to get own stuff back or trigger ETB effects). (#1664) 2022-10-11 11:01:36 +03:00
Paul Hammerton
bd72614c0e Merge pull request #1663 from paulsnoops/br_10_oct
Banned and Restricted Announcement for October 10, 2022
2022-10-10 16:37:08 +01:00
paulsnoops
38924d0821 Banned and Restricted Announcement for October 10, 2022 2022-10-10 16:31:02 +01:00
Anthony Calosa
429bdc7f92 Merge pull request #1644 from Simisays/Mishra
BRO Mishra, Claimed by Gix + Support
2022-10-10 21:31:48 +08:00
Paul Hammerton
a52d10eea5 Merge pull request #1653 from Northmoc/pl22
Year of The Tiger 2022.txt update
2022-10-10 14:23:06 +01:00
Northmoc
edd9e8c673 Year of The Tiger 2022.txt update3 2022-10-10 09:00:49 -04:00
Northmoc
75123af0f1 Year of The Tiger 2022.txt update2 2022-10-10 08:58:35 -04:00
Simisays
cfc6000e05 Update MeldEffect.java 2022-10-10 12:17:15 +02:00
Simisays
6756f161b4 Update MeldEffect.java 2022-10-10 11:40:02 +02:00
tool4ever
839a9c8402 Unblockable fixes (#1662)
* Add shortcuts

* Fix cards

* Clean up

* Fix CantBlockBy checks

* Fix stack overflow

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-10-10 06:57:30 +03:00
Paul Hammerton
1082797c07 Merge pull request #1610 from paulsnoops/unf_edition
UNF edition
2022-10-09 16:57:35 +01:00
paulsnoops
c9ebba5a49 sort_tokens 2022-10-09 16:54:15 +01:00
paulsnoops
efa9448182 tokens 2022-10-09 16:53:32 +01:00
tool4ever
9d5953579c Desktop: speed up lobby slot type changes caused by multiple deck generation calls in some cases (#1657)
* Clean up

* Avoid multiple deck generation calls during refresh of deck lists

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-10-09 08:19:30 +03:00
Paul Hammerton
258210eae6 Merge pull request #1660 from paulsnoops/sld_warhammer
SLD: Warhammer
2022-10-08 23:25:54 +01:00
paulsnoops
c86609da6e SLD: Warhammer 2022-10-08 23:22:35 +01:00
Paul Hammerton
17a55007d9 Merge pull request #1659 from paulsnoops/formats_update
40K & UNF formats update
2022-10-08 21:08:32 +01:00
paulsnoops
f62d6367c7 40K & UNF formats update 2022-10-08 21:04:32 +01:00
Paul Hammerton
cd2566c2e1 Merge pull request #1658 from paulsnoops/name_fix
Tiana, Angelic Mechanic fixes
2022-10-08 20:26:16 +01:00
paulsnoops
04c7b5eded Diminished Returner oracle fix 2022-10-08 20:15:47 +01:00
paulsnoops
b197af93bc Tiana, Angelic Mechanic fixes 2022-10-08 20:05:37 +01:00
Paul Hammerton
8ed5e8f033 Merge pull request #1656 from Simisays/fix
Update vodalian_tide_mage.txt
2022-10-08 18:51:40 +01:00
Simisays
966ec39a0e Update vodalian_tide_mage.txt 2022-10-08 19:49:14 +02:00
Simisays
a91cc1201c Update vodalian_tide_mage.txt 2022-10-08 19:48:35 +02:00
Paul Hammerton
dcb689fb76 Merge pull request #1654 from paulsnoops/new_edition_stuff
Edition updates P30A, YDMU, DMR, BRO, BRR, 40K, 30A, PR23, SLC
2022-10-08 18:09:54 +01:00
paulsnoops
d6fb986aa5 test_fixes_2 2022-10-08 18:06:25 +01:00
paulsnoops
5cb1024a50 test_fix 2022-10-08 17:52:15 +01:00
paulsnoops
529c3c74ca Edition updates for P30A, YDMU, DMR, BRO, BRR, 40K & new editions for 30A, PR23, SLC 2022-10-08 17:44:30 +01:00
Chris H
4a29db029c Update ARN Challenge 2U The Saltrem Tor.dck (#1652) 2022-10-08 11:40:26 +03:00
Simisays
c4b8e7543b YDMU 7 more (#1641)
* Add files via upload

* Update ghitu_embercoiler.txt

* update

* Update ghitu_embercoiler.txt

* Update ghitu_embercoiler.txt

* Add files via upload

* Update slimefoot_thallid_transplant .txt

* Rename slimefoot_thallid_transplant .txt to slimefoot_thallid_transplant.txt

* Update nantuko_slicer.txt

* Update nantuko_slicer.txt

With just "targeted" you also create a duplicate of the card you returned from your graveyard

* Update coalition_construct.txt

* Update ghitu_embercoiler.txt

* Update juggernaut_peddler.txt

* Update slimefoot_thallid_transplant.txt

* Update tiana_angel_mechanic.txt

* Update reezug_the_bonecobbler.txt

* Update nantuko_slicer.txt

* Update nantuko_slicer.txt

* Update reezug_the_bonecobbler.txt

* Update reezug_the_bonecobbler.txt

* Update coalition_construct.txt

* Update reezug_the_bonecobbler.txt

* Update nantuko_slicer.txt

* Update juggernaut_peddler.txt
2022-10-08 11:39:53 +03:00
rikimbo
737df41517 Adventure: Add a few new enemies (#1647)
* Fix treasure chest in Kavu Lair.

* Adventure: Add new enemies.
2022-10-08 11:39:41 +03:00
Northmoc
2834993cb5 Refactor K:Unblockable > Static (#1551)
* round 1

* round 2

* 10 more (Oct 1)

* attempt to add "Pump" to EffectAi

* more 10/4

* more/fixes 10/4

* more 10/4 (80 to go...)

* more 10/4 (70 to go...)

* 10/5 (60 to go...)

* more 10/5 (50 to go...)

* more 10/5 (40 to go...)

* more 10/5 (30 to go...)

* 10/6 (20 to go...)

* more 10/6 (10 to go...)

* more 10/6 (last of pump -> effect)

* more 10/6 (continuous kw static > cantblockby... 30 to go)

* more 10/6 (continuous > cantblockby... 20 to go)

* more 10/6 (continuous > cantblockby... 10 to go)

* last 10/6 (continuous > cantblockby)

* Final keyword cleanup?

* GameSimulationTest.testEquippedAbilities use Shroud instead of Unblockable

* fish token!

* CreatureEvaluator evaluate for unblockable

* AttachAi evaluate for unblockable
2022-10-08 11:39:26 +03:00
Northmoc
53c3bebaf2 Year of The Tiger 2022.txt update 2022-10-07 16:24:39 -04:00
Suthro
e18f7fd44e BRO: Urza, Lord Protector + The Mightstone and Weakstone (#1650)
* BRO: Urza, Lord Protector + The Mightstone and Weakstone Meld Pair

BRO: Add working scripts for two BRO cards following the recent Meld engine changes, + one token script.

- Urza, Lord Protector
- The Mightstone and Weakstone
- 1/1 colorless artifact Soldier creature token

* Update urza_lord_protector_urza_planeswalker.txt

* Update urza_lord_protector_urza_planeswalker.txt
2022-10-07 22:18:54 +03:00
Simisays
4279acb478 Update MeldEffect.java 2022-10-07 20:15:43 +02:00
Suthro
bd7272f66e Update urza_lord_protector_urza_planeswalker.txt 2022-10-07 11:48:59 -05:00
Suthro
fb60d5f349 Update urza_lord_protector_urza_planeswalker.txt 2022-10-07 11:34:37 -05:00
Suthro
660050a18b BRO: Urza, Lord Protector + The Mightstone and Weakstone Meld Pair
BRO: Add working scripts for two BRO cards following the recent Meld engine changes, + one token script.

- Urza, Lord Protector
- The Mightstone and Weakstone
- 1/1 colorless artifact Soldier creature token
2022-10-07 11:28:39 -05:00
tool4ever
453d83ea67 Few fixes (#1649) 2022-10-07 16:25:04 +00:00
JohnWilliams77
3c843fc4ae Update Secret Lair Drop Series.txt (#1640) 2022-10-07 14:27:08 +03:00
Northmoc
37bce90529 A bit more with AI for Pump + KWChoice (#1637)
* some more tweaks

* PlayerControllerAi.chooseKeywordForPump refine some more

* SpecialCardAi remove Gideon keyword stuff

* PlayerControllerAi.chooseKeywordForPump improve further

* Card.associatedWithColor and Card.canProduceColorMana checks

* restore imports
2022-10-07 14:20:42 +03:00
Simisays
fca48c333d Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-07 10:21:10 +02:00
Simisays
96109129b2 Update MeldEffect.java 2022-10-06 19:15:01 +02:00
Simisays
da8e702468 Update MeldEffect.java 2022-10-06 17:30:52 +02:00
Simisays
7714840909 Update MeldEffect.java 2022-10-06 17:21:50 +02:00
Simisays
d4cf3bcc38 Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 12:00:03 +02:00
Simisays
e718f49f4f Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 11:58:38 +02:00
Simisays
c815461ded Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 11:05:18 +02:00
Simisays
c9b23c1e85 Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 10:47:32 +02:00
Simisays
ed815bc308 Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 10:43:28 +02:00
Simisays
8bafa4458d Update MeldEffect.java 2022-10-06 10:42:22 +02:00
Simisays
c11163d768 Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 10:39:36 +02:00
Simisays
f71a21df6b Update MeldEffect.java 2022-10-06 10:34:16 +02:00
Simisays
8a85f50d69 Update TokenEffect.java 2022-10-06 10:33:52 +02:00
Simisays
cbdf834741 Update MeldEffect.java 2022-10-06 10:33:27 +02:00
Simisays
aa4e541d5f Merge branch 'Card-Forge:master' into Mishra 2022-10-06 10:17:31 +02:00
Simisays
b34dea90ba Update mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 08:54:40 +02:00
Simisays
ecd25c70d2 Update and rename mishra_claimed_by_gix.txt to mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt 2022-10-06 08:45:39 +02:00
t-w-o-s-a-t
a20a54d779 Update de-DE.properties (#1642)
lblChooseKeyword translation DE
2022-10-06 08:10:27 +03:00
Simisays
a7ca7ab87a YDMU 6 more + 2 fix (#1633)
* update

* update

* Create bloodsprout_talisman.txt

* Update vodalian_wavemage.txt

* Update vodalian_wavemage.txt

* cleanup

* update
2022-10-06 08:10:03 +03:00
Simisays
b36e9d76c1 update 2022-10-05 23:23:13 +02:00
Simisays
e87ae7b0ec Update mishra_claimed_by_gix.txt 2022-10-05 22:56:14 +02:00
Simisays
9c2899564a update 2022-10-05 22:48:04 +02:00
Simisays
f57bbc5ef6 YDMU 5 cards + Urza Fix (#1625)
* update

* Update wandering_treefolk.txt

* Update niambi_beloved_protector.txt

* Update wandering_treefolk.txt

* Update smogbelcher_chariot.txt

* Update diminished_returner.txt

* Update skywriter_djinn.txt

* update

* Update urza_chief_artificer.txt

* Update niambi_beloved_protector.txt
2022-10-04 12:02:40 +03:00
Northmoc
95e986e124 YDMU: Darigaaz, Shivan Champion and support (#1639)
* darigaaz_shivan_champion.txt

* MakeCardEffect support "WithCounter" and "FaceDown"
2022-10-04 11:46:33 +03:00
tool4ever
1c3ed5e1ff Update arashin_sovereign.txt 2022-10-04 08:46:53 +02:00
tool4ever
e1d68a96a0 Update berserkers_frenzy.txt 2022-10-04 08:44:11 +02:00
tool4ever
0b451424df Cleanup & fixes (#1636)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-10-03 19:01:18 +03:00
Paul Hammerton
8f51f24387 Merge pull request #1635 from paulsnoops/brawl_update
Add Arcane Signet & Command Tower to Brawl format and ANB edition
2022-10-03 09:42:00 +01:00
paulsnoops
42057a1004 Add Arcane Signet & Command Tower to Brawl format and ANB edition 2022-10-03 09:35:01 +01:00
Anthony Calosa
54f39e1dd6 Merge pull request #1622 from tool4ever/meldfix
Fix crash from meld missing backside for new Urza
2022-10-03 13:00:22 +08:00
Anthony Calosa
8b47d273ab Merge pull request #1634 from rikimbo/ai_support_reduce_costs_for_card_type
Add basic AI logic for reducing costs for chosen card type
2022-10-03 12:58:00 +08:00
Northmoc
c9b40977fd 40K: Mutalith Vortex Beast and support (#1624)
* FlipCoinEffect.resolve support "ForEachPlayer"

* mutalith_vortex_beast.txt

* PumpEffect.resolve tidy

* yusri_fortunes_flame.txt fix desc
2022-10-03 06:43:59 +03:00
Agetian
300f9d671f Added 4 Possibility Storm puzzles (#1631)
* - Update Gideon Blackblade AI logic.

* - Update imports.

* - Update imports.

* - Modify the method name to make more sense in the updated context.

* - Added 4 Possibility Storm puzzles.
2022-10-03 06:43:26 +03:00
Eric
b16b7ce21a Add basic AI logic for cards that reduce costs for spells of a chosen card type. 2022-10-02 16:40:13 -05:00
Agetian
614e067bc9 Update Gideon Blackblade AI logic (#1630)
* - Update Gideon Blackblade AI logic.

* - Update imports.

* - Update imports.

* - Modify the method name to make more sense in the updated context.
2022-10-02 19:56:35 +03:00
JohnWilliams77
2f08524bf5 Update Secret Lair Drop Series.txt (#1629) 2022-10-02 07:45:11 +03:00
Northmoc
f1ebac910c move keyword choice to PumpEffect from GenericChoice (#1626)
* move keyword choice to PumpEffect from GenericChoice

* fix silverquill_pledgemage.txt
2022-10-02 07:17:58 +03:00
Anthony Calosa
fde3c19751 Merge pull request #1614 from Northmoc/40k_kharn
40K: Kharn, the Betrayer and support (including another KW to static refactor!)
2022-10-02 07:44:49 +08:00
Paul Hammerton
69016729bd Merge pull request #1628 from paulsnoops/bot_oops
BOT missed one
2022-10-01 23:31:57 +01:00
paulsnoops
7cc94ed480 BOT missed one 2022-10-01 23:27:31 +01:00
Paul Hammerton
8813115806 Merge pull request #1627 from paulsnoops/edition_updates
YDMC, SLD, BRR, BOT edition updates
2022-10-01 23:21:14 +01:00
paulsnoops
1b92490ab8 YDMC, SLD, BRR, BOT edition updates 2022-10-01 23:18:03 +01:00
Simisays
a0edf69da8 BRO 3 cards + some Deckhints stuff for assembly-workers + 3 fix (#1618) 2022-10-01 21:00:27 +00:00
Simisays
99c2aa8bcb BRC Mishra, Eminent One (#1608) 2022-10-01 16:15:44 +00:00
Northmoc
714472c113 BRC: Urza, Chief Artificer and Affinity tweaks (#1619)
* urza_chief_artificer.txt

* CardFactoryUtil.addStaticAbility refine AffinityX string

* junk_winder.txt tidy
2022-10-01 16:15:02 +00:00
Northmoc
963aa87394 40K: 30 Sep (#1616)
* neyam_shai_murad.txt

* the_first_tyrannic_war.txt
2022-10-01 14:14:02 +00:00
Simisays
207781dee6 40k Triumph of Saint Katherine (#1598)
* Create triumph_of_saint_katherine.txt

* Create mutalith_vortex_beast.txt

* Update mutalith_vortex_beast.txt

* Update mutalith_vortex_beast.txt

* Update triumph_of_saint_katherine.txt

* Update triumph_of_saint_katherine.txt

* Update triumph_of_saint_katherine.txt

* Update triumph_of_saint_katherine.txt

* Delete mutalith_vortex_beast.txt

* Update triumph_of_saint_katherine.txt
2022-10-01 09:45:44 -04:00
Northmoc
1d1ea6ea1a Warhammer 40,000.txt remove Kharn diacritical 2022-10-01 09:36:32 -04:00
Northmoc
99742042d4 "must block" KW -> static 2022-10-01 09:36:31 -04:00
Northmoc
010f3f330e noxious_gearhulk.txt tidy up 2022-10-01 09:36:30 -04:00
Northmoc
c376733528 support "TriggeredOriginalController" as defined 2022-10-01 09:36:29 -04:00
Northmoc
671c98cd89 kharn_the_betrayer.txt 2022-10-01 09:36:29 -04:00
tool4EvEr
0e18528bb8 Fix meld missing backside for new Urza 2022-10-01 12:09:02 +02:00
Paul Hammerton
7c6ee502a7 Merge pull request #1621 from paulsnoops/bot_edition
Bot edition
2022-10-01 11:05:35 +01:00
paulsnoops
44007644c5 tokens 2022-10-01 11:00:38 +01:00
paulsnoops
e83d63e3b3 Add BOT edition 2022-10-01 10:59:37 +01:00
Anthony Calosa
00184232fb Merge pull request #1620 from TrueFuFLeaderG/adventure
removed commander only cards and ante cards from the adventure card pool
2022-10-01 08:07:57 +08:00
Grimm
e220bcbef5 removed command only cards and ante from the adventure card pool 2022-10-01 00:03:00 +02:00
Paul Hammerton
7ff7cdf4c2 Merge pull request #1613 from Northmoc/ydmc_oracle
YDMC: Oracle of the Alpha and support
2022-09-30 15:05:55 +01:00
Northmoc
3ae39cd6a7 oracle_of_the_alpha.txt 2022-09-30 08:51:59 -04:00
Northmoc
aae736d3a1 MakeCardEffect support "Names" 2022-09-30 08:51:39 -04:00
Paul Hammerton
71e55031c4 Merge pull request #1612 from paulsnoops/brr_edition
BRR edition
2022-09-30 10:28:00 +01:00
paulsnoops
a97bc77b3a BRR edition 2022-09-30 10:23:17 +01:00
Paul Hammerton
cfaa2b55ad Merge pull request #1611 from paulsnoops/small_migrate
Small script migration
2022-09-30 10:16:04 +01:00
paulsnoops
29a267f425 Small script migration 2022-09-30 10:10:25 +01:00
Anthony Calosa
5d06ab24b0 Merge pull request #1600 from Northmoc/dmu_chaotic_transformation
DMU: Chaotic Transformation and support
2022-09-30 16:50:39 +08:00
Anthony Calosa
c126ffe0bf Merge pull request #1570 from Northmoc/dmc_verrak
DMC: Verrak, Warped Sengir and support
2022-09-30 16:48:01 +08:00
Anthony Calosa
f02feb0cc1 Merge pull request #1609 from paulsnoops/migrate_dmu_dmc
Migrate scripts for DMU, DMC & HBG and fix file name typos
2022-09-30 16:45:38 +08:00
paulsnoops
89a4036a0c WIP: UNF edition 2022-09-30 09:45:07 +01:00
Anthony Calosa
25380c5c1f Merge pull request #1579 from Simisays/Warhammer-Final
40K 10 Cards + Necrodermis Counters
2022-09-30 16:41:35 +08:00
Anthony Calosa
d662cbf909 Merge pull request #1607 from tool4ever/managainfix
Fix crash when spending mana produced by a gained ability with triggers
2022-09-30 16:39:00 +08:00
tool4EvEr
8ffe596f31 Remove Deprecated 2022-09-30 10:30:25 +02:00
paulsnoops
aa26052f85 Migrate scripts for DMU, DMC & HBG and fix file name typos 2022-09-30 08:48:19 +01:00
tool4EvEr
e8c87a8edf Fix crash when spending mana produced by a gained ability with triggers 2022-09-30 09:09:03 +02:00
Paul Hammerton
3acdf1b72f Merge pull request #1606 from paulsnoops/new_editions_bro
Edition files for YDMU, BRO, BRC & SCD and updates to GDY & GN3
2022-09-30 00:13:25 +01:00
paulsnoops
39d92b52e3 Added SCD and tokens for GN3 2022-09-30 00:07:45 +01:00
paulsnoops
5d2782b595 Edition files for YDMU, BRO & BRC and update to GDY 2022-09-29 23:42:35 +01:00
JohnWilliams77
1d395c6b05 Update Secret Lair Drop Series.txt (#1605) 2022-09-29 21:37:23 +03:00
Northmoc
d1b82b8fad put xPaid line back on Ravenous cards (#1601) 2022-09-29 21:37:07 +03:00
tool4ever
7571a29a26 Card cleanup (#1604) 2022-09-29 17:14:40 +00:00
Northmoc
d5685430dc aetherspouts.txt 2022-09-29 10:19:47 -04:00
Paul Hammerton
e6c9a9278e Merge pull request #1599 from JohnWilliams77/patch-43
Update Secret Lair Drop Series.txt
2022-09-29 14:36:00 +01:00
Simisays
a2b0af90e7 Update out_of_the_tombs.txt 2022-09-29 15:25:01 +02:00
Simisays
5a51fe9d3d Update out_of_the_tombs.txt 2022-09-29 15:09:29 +02:00
Simisays
cada56ded4 Update resurrection_orb.txt 2022-09-29 15:06:58 +02:00
Simisays
4bb7fd6bc8 Update sautekh_immortal.txt 2022-09-29 15:06:48 +02:00
Simisays
33e951f8fe Update the_war_in_heaven.txt 2022-09-29 15:06:34 +02:00
Simisays
03d16cc699 Update ghyrson_starn_kelermorph.txt 2022-09-29 14:56:50 +02:00
Simisays
ee5469f1c5 Update ghyrson_starn_kelermorph.txt 2022-09-29 14:55:47 +02:00
Northmoc
16b7120a1e new prompt 2022-09-29 08:40:14 -04:00
Northmoc
7ccfbec86a PlayerControllerHuman.orderMoveToZoneList : add None option 2022-09-29 08:39:57 -04:00
Northmoc
4ce3dca2c8 RepeatEachEffect.resolve : make "ChooseOrder" more robust 2022-09-29 08:39:10 -04:00
Northmoc
4e9b62c2a4 trove_of_temptation.txt improve AI hints 2022-09-29 08:37:46 -04:00
Northmoc
60de9a866e deny_the_witch.txt fix 2022-09-29 08:37:24 -04:00
Northmoc
ad52cbb217 chaotic_transformation.txt fix 2022-09-29 08:36:15 -04:00
JohnWilliams77
3d44916778 Update Secret Lair Drop Series.txt 2022-09-29 12:51:59 +01:00
Simisays
3c081bd555 Update hierophant_biotitan.txt 2022-09-29 09:51:54 +02:00
Simisays
b09ca45b4b Delete mutalith_vortex_beast.txt 2022-09-29 09:51:41 +02:00
Simisays
44f3df967c Delete triumph_of_saint_katherine.txt 2022-09-29 09:51:29 +02:00
Anthony Calosa
ea8af92d27 Merge pull request #1597 from TrueFuFLeaderG/adventure
fixed collision geometry reduction
2022-09-29 06:37:38 +08:00
Anthony Calosa
0f25c4c96c Merge pull request #1465 from tool4ever/mvnGit
Maven: include git history on package
2022-09-29 06:36:02 +08:00
Grimm
6ecf5838ce fixed collision geometry reduction 2022-09-28 22:15:27 +02:00
Grimm
3a289a8a72 Merge remote-tracking branch 'origin/adventure' into adventure
# Conflicts:
#	forge-gui-mobile/src/forge/adventure/stage/MapStage.java
2022-09-28 21:59:13 +02:00
Grimm
2bd1022800 fixed collision geometry reduction 2022-09-28 21:59:00 +02:00
Grimm
8b74a9917e fixed collision geometry reduction 2022-09-28 20:34:17 +02:00
Northmoc
bc48747587 chaotic_transformation.txt 2022-09-28 14:22:44 -04:00
Simisays
865fbfd7b5 Update mutalith_vortex_beast.txt 2022-09-28 19:14:40 +02:00
Simisays
bd0d0901fb Merge branch 'Warhammer-Final' of https://github.com/Simisays/forge into Warhammer-Final 2022-09-28 19:06:15 +02:00
Simisays
53ec70abda Update mutalith_vortex_beast.txt 2022-09-28 19:05:52 +02:00
tool4ever
abf25a50f0 Fix BecomesTarget not triggering for Emblems (#1595)
* Fix BecomesTarget not triggering for Emblems
2022-09-28 15:30:07 +02:00
Simisays
3ee18404ee Small fixes (#1596)
* Update the_red_terror.txt

* Update keldon_strike_team.txt
2022-09-28 15:28:54 +02:00
Simisays
8c778d71c6 40K 10 more (#1577) 2022-09-27 19:53:06 +00:00
tool4ever
df9f62d8cc Fix CostAdjustment being run for Unless Costs (#1593) 2022-09-27 19:52:49 +00:00
tool4ever
5de3e3167f Card cleanup (#1594) 2022-09-27 19:52:40 +00:00
Simisays
3f645710cc Update mutalith_vortex_beast.txt 2022-09-27 19:45:55 +02:00
Simisays
514b82f533 update 2022-09-27 19:44:15 +02:00
Paul Hammerton
cb1f7c17a1 Merge pull request #1592 from JohnWilliams77/patch-42
Update Secret Lair Drop Series.txt
2022-09-27 13:25:09 +01:00
JohnWilliams77
9de484bb64 Update Secret Lair Drop Series.txt 2022-09-27 11:24:55 +01:00
Anthony Calosa
9cc6a0cef2 Merge pull request #1591 from kevlahnota/master
corrected custom card images
2022-09-27 12:09:26 +08:00
Anthony Calosa
a0bfc694da corrected custom card images 2022-09-27 12:08:26 +08:00
Anthony Calosa
8a72ee42eb Merge pull request #1590 from Card-Forge/kevlahnota-patch-6
update custom card images
2022-09-27 11:51:28 +08:00
Anthony Calosa
bd4e3ffa21 Delete deleteme.txt 2022-09-27 11:49:40 +08:00
Anthony Calosa
bafb9da4fc Add files via upload 2022-09-27 11:48:03 +08:00
Anthony Calosa
8c4332efa0 Merge pull request #1589 from TrueFuFLeaderG/adventure
Adventure Castle update
2022-09-27 11:46:01 +08:00
Anthony Calosa
51ba13fe97 Create deleteme.txt 2022-09-27 11:42:23 +08:00
Anthony Calosa
bd4f4051bf Delete forge-gui/res/adventure/Shandalar/custom_card_pics directory 2022-09-27 11:38:24 +08:00
Grimm
34ca9907ca added custom cards to adventure
do not show dialog if all options are invalid
changed castles to have 2 floors
added custom cards for each castle
added possibility for a respawn on maps
2022-09-27 02:04:56 +02:00
Paul Hammerton
85aa57290f Merge pull request #1587 from JohnWilliams77/patch-41
Update Secret Lair Drop Series.txt
2022-09-26 13:18:11 +01:00
JohnWilliams77
540dcccbb7 Update Secret Lair Drop Series.txt 2022-09-26 08:21:43 +01:00
Anthony Calosa
1390568847 Merge pull request #1583 from tool4ever/abilitytriggered
Fix AbilityTriggered failing when cause lacks targets
2022-09-26 08:29:58 +08:00
Anthony Calosa
0d49606041 Merge pull request #1586 from TrueFuFLeaderG/adventure
Adventure ui update and some fixes
2022-09-26 08:29:24 +08:00
Grimm
1734657e4d Merge remote-tracking branch 'origin/adventure' into adventure 2022-09-26 01:41:48 +02:00
Grimm
9d318b257d Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-09-26 01:41:36 +02:00
Grimm
25000faf09 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-09-26 01:23:38 +02:00
Grimm
b0b77f4c88 moved controller support to UIScene and abstract it
uses focus for keyboard and controller
added Keyboard support
Show key hint for buttons
added voice line for dialogs
fixed missing items rewards
fixed some maps
adjusted pile decks
2022-09-26 01:15:49 +02:00
Anthony Calosa
cfe290de89 Merge pull request #1585 from tool4ever/kytheon
Kytheon Fix
2022-09-26 06:46:28 +08:00
tool4EvEr
31c27fb993 Clean up 2022-09-25 23:37:45 +02:00
tool4EvEr
ff5916be38 Kytheon Fix 2022-09-25 23:14:38 +02:00
tool4EvEr
3bca04134c Fix AbilityTriggered failing when cause lacks targets 2022-09-25 21:44:52 +02:00
tool4ever
29fc28be3b Fix Unbound Flourishing triggering for additional X costs (#1581)
* Fix Unbound Flourishing triggering for additional X costs
2022-09-25 19:28:10 +00:00
Simisays
978649d2f1 Update magus_lucea_kane.txt 2022-09-25 11:57:42 +02:00
Simisays
c9eaccfef9 Update triumph_of_saint_katherine.txt 2022-09-25 09:59:58 +02:00
Simisays
0ea037f11a Update triumph_of_saint_katherine.txt 2022-09-25 09:10:39 +02:00
Anthony Calosa
20827bb7f3 Merge pull request #1531 from Northmoc/40k_squad
40K – Squad keyword and cards
2022-09-25 13:24:46 +08:00
Anthony Calosa
b43d0ec890 Merge pull request #1580 from tool4ever/felidar
Fix resolving trigger check using wrong controller
2022-09-25 13:23:31 +08:00
Simisays
6cacf54a90 Update resurrection_orb.txt 2022-09-24 19:34:27 +02:00
Simisays
23a2f66a01 Merge branch 'Warhammer-Final' of https://github.com/Simisays/forge into Warhammer-Final 2022-09-24 18:45:11 +02:00
Simisays
4d14f1970f Update magus_lucea_kane.txt 2022-09-24 18:44:59 +02:00
Simisays
4b8bd0e705 Update triumph_of_saint_katherine.txt 2022-09-24 18:18:42 +02:00
Simisays
4bc424f3f3 update 2022-09-24 18:16:47 +02:00
tool4EvEr
9ff156e070 Fix NPE 2022-09-24 17:35:21 +02:00
tool4EvEr
9509dc5672 Fix resolving trigger check using wrong controller 2022-09-24 17:34:50 +02:00
Simisays
f406f3de02 Update triumph_of_saint_katherine.txt 2022-09-24 15:59:28 +02:00
Simisays
79c8daf0a0 Update the_war_in_heaven.txt 2022-09-24 15:57:59 +02:00
Simisays
b598182098 Update resurrection_orb.txt 2022-09-24 15:57:20 +02:00
Simisays
899855e0fe Update out_of_the_tombs.txt 2022-09-24 15:56:24 +02:00
Simisays
a954355638 Update hierophant_biotitan.txt 2022-09-24 15:55:02 +02:00
Simisays
78b5b49988 Update ghyrson_starn_kelermorph.txt 2022-09-24 15:49:27 +02:00
Simisays
53c1343053 update 2022-09-24 15:23:09 +02:00
Simisays
f86e0b2800 update 2022-09-24 15:10:54 +02:00
Simisays
857ac7092e Update ghyrson_starn_kelermorph.txt 2022-09-24 14:53:06 +02:00
Simisays
211fec8086 update 2022-09-24 14:46:19 +02:00
Simisays
1d9c8a14fa update 2022-09-24 13:56:05 +02:00
Simisays
edd45f3c35 update 2022-09-24 13:20:25 +02:00
Simisays
18719483f7 update 2022-09-24 13:00:57 +02:00
Simisays
c377913927 40K 10 more + 1Fix (#1575)
* Create their_name_is_death.txt

* Create technomancer.txt

* Create redemptor_dreadnought.txt

* UPDATE

* UPDATE

* update

* Update redemptor_dreadnought.txt

* Update space_marine_scout.txt

* Update their_number_is_legion.txt

* Update redemptor_dreadnought.txt

* Update inquisitorial_rosette.txt

* Update primaris_eliminator.txt

* Update redemptor_dreadnought.txt

* Update redemptor_dreadnought.txt

* Update their_number_is_legion.txt

* Update royal_warden.txt

* Update psychomancer.txt

* Update inquisitorial_rosette.txt

* Update inquisitorial_rosette.txt

* Update psychomancer.txt

* Update space_marine_scout.txt

* Update space_marine_scout.txt

* Update technomancer.txt

* Update their_number_is_legion.txt

* Update space_marine_scout.txt

* Update technomancer.txt

* Update their_number_is_legion.txt

* Update their_number_is_legion.txt

* Update technomancer.txt

* Delete redemptor_dreadnought.txt

* Update rasputin_the_oneiromancer.txt

* Update rasputin_the_oneiromancer.txt

* Update their_number_is_legion.txt

* Update psychomancer.txt

* Update technomancer.txt

* Update technomancer.txt
2022-09-24 07:13:38 +03:00
tool4ever
84589e06c5 Redemptor Dreadnought + some fixes (#1578)
* Redemptor Dreadnought

* Cleanup

* Fix Moorland Rescuer

* Fix AttachedTo returning players for valid card params

* Fix cost

* Fixes

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-09-24 07:06:43 +03:00
Simisays
b90a8fc104 update 2022-09-23 19:52:41 +02:00
Paul Hammerton
e9e5303710 Merge pull request #1574 from Northmoc/tweaks
Tweaks
2022-09-23 16:43:25 +01:00
Paul Hammerton
0a8ff73084 Merge pull request #1573 from Simisays/Warhammer-10
40K 11 + 3 tokens + 1 cleanup
2022-09-23 16:43:14 +01:00
Paul Hammerton
e00f1c0866 Merge pull request #1576 from churrufli/master
Net Deck Archive Updates
2022-09-22 20:18:49 +01:00
churrufli
9890be6464 Update net-decks-archive-pauper.txt 2022-09-22 21:03:17 +02:00
Churrufli
378b51dc37 Net Deck Archive Updates 2022-09-22 20:59:22 +02:00
Northmoc
a6c34c51b9 verrak_warped_sengir.txt fix TrigDesc 2022-09-22 14:23:00 -04:00
Northmoc
b783c952ae Trigger.meetsRequirementsOnTriggeredObjects support "Condition$ LifePaid" 2022-09-22 14:21:12 -04:00
Northmoc
e2fa54b8be AbilityUtils.xCount add "TriggeredLifeSpent" 2022-09-22 14:21:12 -04:00
Northmoc
bcde0fba07 verrak_warped_sengir.txt 2022-09-22 14:21:11 -04:00
Northmoc
178c186f17 GameActionUtil.rollbackAbility wipe setPaidLife 2022-09-22 14:21:10 -04:00
Northmoc
e30ac21566 SpellAbility.paidLifeAmount and accessors 2022-09-22 14:21:09 -04:00
Northmoc
d821080389 Player.payLife track amount on sa 2022-09-22 14:21:09 -04:00
Northmoc
5b271ca87c remove SVar X from Ravenous cards that don't need it 2022-09-22 13:50:36 -04:00
Northmoc
540d616886 CardFactoryUtil Ravenous tidy up 2022-09-22 13:50:11 -04:00
Simisays
d70f198988 Update drach_nyen.txt 2022-09-22 10:44:37 +02:00
Simisays
66e9754d95 Update drach_nyen.txt 2022-09-22 10:34:54 +02:00
Simisays
d0e8d21da3 Update inquisitor_eisenhorn.txt 2022-09-22 08:54:19 +02:00
Simisays
d2271c665a Update c_4_4_a_robot_noblock.txt 2022-09-21 22:48:15 +02:00
Simisays
814fb3c6ae Update company_commander.txt 2022-09-21 22:46:22 +02:00
Simisays
a4969d38a1 Update commissar_severina_raine.txt 2022-09-21 22:24:22 +02:00
Simisays
fc1fef87a9 Update inquisitor_eisenhorn.txt 2022-09-21 22:14:07 +02:00
Simisays
3f41bf07b5 Update inquisitor_eisenhorn.txt 2022-09-21 22:11:55 +02:00
Simisays
183c6a16de Update epistolary_librarian.txt 2022-09-21 22:09:58 +02:00
Simisays
aab97e08b2 Update epistolary_librarian.txt 2022-09-21 22:09:45 +02:00
Simisays
8316aa9c1b Update drach_nyen.txt 2022-09-21 22:09:29 +02:00
Northmoc
52b431aa44 Ravenous doesn't have extra info 2022-09-21 15:51:02 -04:00
Northmoc
a35b4714f4 shanna_purifying_blade.txt fix manacost 2022-09-21 15:50:14 -04:00
Northmoc
58d2c4e1cf ravener.txt fix 2022-09-21 15:49:58 -04:00
Simisays
34db474be1 Update convergence_of_dominion.txt 2022-09-21 21:35:43 +02:00
Simisays
9f2a0b259b Merge branch 'Warhammer-10' of https://github.com/Simisays/forge into Warhammer-10 2022-09-21 21:14:26 +02:00
Simisays
1944fe0738 Update sheoldreds_restoration.txt 2022-09-21 21:14:15 +02:00
Simisays
b971415991 Update cherubael.txt 2022-09-21 21:04:10 +02:00
Simisays
2a4bde1b33 Update inquisitor_eisenhorn.txt 2022-09-21 20:59:37 +02:00
Simisays
a3d8480b65 Update inquisitor_eisenhorn.txt 2022-09-21 20:58:31 +02:00
Simisays
b6f196f56a Update inquisitor_eisenhorn.txt 2022-09-21 20:54:47 +02:00
Simisays
2c0557b495 Update defenders_of_humanity.txt 2022-09-21 20:52:10 +02:00
Simisays
5d47bfc0e9 Update epistolary_librarian.txt 2022-09-21 20:49:21 +02:00
Simisays
e35f2a16d6 Update defenders_of_humanity.txt 2022-09-21 20:46:49 +02:00
Simisays
ba7f29f9e2 Update cybernetica_datasmith.txt 2022-09-21 20:44:41 +02:00
Simisays
521a6610cd Update magnus_the_red.txt 2022-09-21 20:40:23 +02:00
Simisays
582a19b6d5 Update inquisitor_eisenhorn.txt 2022-09-21 20:38:58 +02:00
Simisays
a7dd0312bb Update inquisitor_eisenhorn.txt 2022-09-21 20:36:54 +02:00
Simisays
89e36ceb10 Update illuminor_szeras.txt 2022-09-21 20:36:09 +02:00
Simisays
dc5a809d7b Update epistolary_librarian.txt 2022-09-21 20:35:51 +02:00
Simisays
5fd373cc26 Update drach_nyen.txt 2022-09-21 20:35:30 +02:00
Simisays
00f6a2bae1 Update deny_the_witch.txt 2022-09-21 20:35:06 +02:00
Simisays
7b43a0bf80 Update convergence_of_dominion.txt 2022-09-21 20:34:22 +02:00
Simisays
ea1e402992 update 2022-09-21 20:32:19 +02:00
Simisays
522a8d2009 update 2022-09-21 19:57:01 +02:00
Simisays
08d17202af update 2022-09-21 19:35:39 +02:00
Northmoc
3f149743fe 40K: 18 Sep (more) (#1549)
* callidus_assassin.txt

* canoptek_wraith.txt

* chaos_defiler.txt

* celestine_the_living_saint.txt

* chaos_mutation.txt
2022-09-21 18:27:34 +02:00
Simisays
a05d3fb93e update 2022-09-21 17:44:50 +02:00
Northmoc
a22a2df395 40K: other Ravenous card scripts (#1540)
* 40K: remaining Ravenous cards

* spit_flame.txt cleanup

* g_1_1_tyranid.txt token

* tervigon.txt
2022-09-21 16:04:19 +02:00
Simisays
505f3d6d55 Merge branch 'Card-Forge:master' into Warhammer-10 2022-09-21 09:41:15 +02:00
Anthony Calosa
ebc8782882 Merge pull request #1571 from kevlahnota/master
fix windowmode settings
2022-09-21 12:17:09 +08:00
Anthony Calosa
0a7b7ea29f Merge pull request #1539 from Northmoc/40k_ravenous
40K: Ravenous keyword
2022-09-21 12:15:32 +08:00
Anthony Calosa
3c4590951d update pom 2022-09-21 12:12:56 +08:00
Anthony Calosa
ff31fdc509 fix windowmode settings
- Forge mobile port can be run on either windowed or fullscreen via settings
2022-09-21 12:10:50 +08:00
Anthony Calosa
d10d9046d8 Merge pull request #1557 from Simisays/Warhammer-8
40 K 10 more + 2 tokens
2022-09-21 08:52:30 +08:00
Anthony Calosa
705f569ce1 Merge pull request #1565 from TrueFuFLeaderG/adventure
fixed portrait reward scene and  TextraButton.getText with Override
2022-09-21 08:52:07 +08:00
Anthony Calosa
b03dff41e4 Merge pull request #1567 from Simisays/Warhammer-9
40K 12 cards + 1 token
2022-09-21 08:51:50 +08:00
Simisays
3b613e112f UPDATE 2022-09-20 22:01:07 +02:00
Simisays
0143326b26 Update lucius_the_eternal.txt 2022-09-20 20:56:47 +02:00
Simisays
740f325591 Update lychguard.txt 2022-09-20 20:47:38 +02:00
Simisays
3fdf2d256e Update knight_rampager.txt 2022-09-20 20:44:44 +02:00
Simisays
b4e1c5c4d4 Update imotekh_the_stormlord.txt 2022-09-20 20:12:57 +02:00
Simisays
1ef07c3c1a Update plasmancer.txt 2022-09-20 20:12:08 +02:00
Simisays
f122386787 Update tallyman_of_nurgle.txt 2022-09-20 19:27:31 +02:00
Simisays
c4aeaade25 Update knight_rampager.txt 2022-09-20 19:27:00 +02:00
Paul Hammerton
a5d4db8cd0 40k edition tokens with small fixes (#1568)
* 40k edition tokens with small fixes

* ai
2022-09-20 13:25:47 -04:00
Simisays
4daa6aa28a Update knight_rampager.txt 2022-09-20 19:25:27 +02:00
Simisays
de2a99548f Update knight_paladin.txt 2022-09-20 19:24:42 +02:00
Simisays
f52e2ceaf8 Update imotekh_the_stormlord.txt 2022-09-20 19:24:21 +02:00
Simisays
2e153c1c69 Update imotekh_the_stormlord.txt 2022-09-20 19:23:48 +02:00
Simisays
ad8b701644 Update tallyman_of_nurgle.txt 2022-09-20 19:12:40 +02:00
Simisays
02d382ea5f Update mortarion_daemon_primarch.txt 2022-09-20 19:02:47 +02:00
Simisays
539387cf9c update 2022-09-20 19:01:29 +02:00
Simisays
60bdedb04c update 2022-09-20 18:39:42 +02:00
Simisays
81cd9e34bf Update nurgles_rot.txt 2022-09-20 18:25:50 +02:00
Simisays
cd43a71960 Update blue_horror.txt 2022-09-20 18:25:28 +02:00
Paul Hammerton
a3a985df25 Merge pull request #1566 from paulsnoops/b&r_19_sept
Banned and Restricted Announcement for September 19, 2022
2022-09-20 17:23:00 +01:00
Simisays
d75bc9579d Update plaguebearer_of_nurgle.txt 2022-09-20 18:20:47 +02:00
Simisays
555a7c9ead Update blue_horror.txt 2022-09-20 18:20:34 +02:00
Simisays
8beb56a84a Update blue_horror.txt 2022-09-20 18:20:22 +02:00
Simisays
3b4eebe548 Update tallyman_of_nurgle.txt 2022-09-20 18:20:05 +02:00
Simisays
7319088c7a Update nurgles_conscription.txt 2022-09-20 18:19:47 +02:00
paulsnoops
832f5fd743 Banned and Restricted Announcement for September 19, 2022 2022-09-20 17:18:48 +01:00
Simisays
dfb17fca41 update 2022-09-20 17:42:34 +02:00
Grimm
7bf3b2a9ef fixed portrait reward scene
fixed TextraButton.getText with Override
2022-09-20 17:25:49 +02:00
Anthony Calosa
15f4a8573c Merge pull request #1564 from kevlahnota/master
fix DeckSelectScene button size/layout
2022-09-20 20:33:49 +08:00
Anthony Calosa
3697fe3654 fix DeckSelectScene button size/layout 2022-09-20 20:09:23 +08:00
Anthony Calosa
03f1bb3aea Merge pull request #1558 from rikimbo/adventure_add_kavu_lair
Adventure: Add Kavu Lair (new enemy and dungeon)
2022-09-20 19:37:36 +08:00
Anthony Calosa
b32a9a6a28 Merge pull request #1560 from TrueFuFLeaderG/adventure
issue #1340 made it possible to create custom adventures from the use…
2022-09-20 19:35:40 +08:00
Anthony Calosa
ff3eb46046 Merge pull request #1563 from tool4ever/sortCmd
AiBlockController: check commanders in sortPotentialAttackers
2022-09-20 19:35:03 +08:00
tool4EvEr
0a11644f81 fix trigger 2022-09-20 11:20:34 +02:00
tool4EvEr
0bfb28bf03 Card improvements 2022-09-20 11:04:57 +02:00
tool4EvEr
ace730334f AiBlockController: check commanders in sortPotentialAttackers 2022-09-20 11:04:28 +02:00
Simisays
b75096a691 Create poxwalkers.txt 2022-09-20 10:35:38 +02:00
Grimm
3db42fb934 issue #1511 added insane difficulty, added drop multiplier for rewards (only for drops that have a range), added "Pile" as mode where you start with just a pile of cards 2022-09-20 03:37:01 +02:00
Grimm
154b92d6e4 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-09-20 02:07:56 +02:00
Grimm
38748301ae issue #1340 made it possible to create custom adventures from the user data folder 2022-09-20 02:02:52 +02:00
Anthony Calosa
50af236535 Merge pull request #1559 from kevlahnota/master
prevent NPE World generation
2022-09-20 06:57:06 +08:00
Anthony Calosa
78cb1e0207 Merge pull request #1438 from Northmoc/specImages
HBG: Specialize face images for local/FTP
2022-09-20 06:56:47 +08:00
Anthony Calosa
09f266b15f Merge pull request #1542 from Simisays/warhammer-6
40K 12 more
2022-09-20 06:56:17 +08:00
Anthony Calosa
d810f7d086 Merge pull request #1556 from mctubbies/master
Card Script for Trazyn the Infinite
2022-09-20 06:55:52 +08:00
Anthony Calosa
6240cd43a5 Merge branch 'master' into newmaster 2022-09-20 06:52:21 +08:00
Anthony Calosa
d832e21c98 prevent NPE World generation 2022-09-20 06:50:51 +08:00
Simisays
5738c10e01 Update tallyman_of_nurgle.txt 2022-09-19 22:36:07 +02:00
Simisays
e5a44dbfda Update plague_drone.txt 2022-09-19 22:34:51 +02:00
Simisays
b5de56221b Update mandate_of_abaddon.txt 2022-09-19 22:34:35 +02:00
Simisays
51c3560d5b Update lucius_the_eternal.txt 2022-09-19 22:34:10 +02:00
Eric
f8ca06546d Adventure: Add Kavu Lair (new enemy and dungeon). 2022-09-19 15:12:30 -05:00
Simisays
b262ccfe0e Update nurgles_conscription.txt 2022-09-19 22:08:14 +02:00
Simisays
06846274e1 Update nurgles_rot.txt 2022-09-19 22:07:14 +02:00
Simisays
c3b1c49564 Update tallyman_of_nurgle.txt 2022-09-19 22:06:29 +02:00
Simisays
f0907b1efe Update pink_horror.txt 2022-09-19 22:05:59 +02:00
Simisays
36812731e6 Update shadow_in_the_warp.txt 2022-09-19 21:55:44 +02:00
Simisays
d1866ab050 Update pink_horror.txt 2022-09-19 21:55:00 +02:00
Simisays
f7e072cb6b Update pink_horror.txt 2022-09-19 21:54:46 +02:00
Simisays
d9cfdcb77d Update lucius_the_eternal.txt 2022-09-19 21:53:55 +02:00
Simisays
e0eee5d87f Update let_the_galaxy_burn.txt 2022-09-19 21:53:26 +02:00
Simisays
a821732fbc update 2022-09-19 21:52:28 +02:00
Simisays
a463af70b0 update 2022-09-19 21:32:47 +02:00
Simisays
155f450759 Update mandate_of_abaddon.txt 2022-09-19 21:19:59 +02:00
Simisays
3d6b98114c Update nurgles_rot.txt 2022-09-19 21:17:20 +02:00
Simisays
ac3972f464 update 2022-09-19 21:13:56 +02:00
Simisays
a9b2a99d20 Update plague_drone.txt 2022-09-19 20:38:12 +02:00
Simisays
8c858d011d Update tallyman_of_nurgle.txt 2022-09-19 20:36:44 +02:00
Simisays
c139e7fc79 update 2022-09-19 20:31:08 +02:00
Simisays
9ae3042a00 update 2022-09-19 20:11:32 +02:00
Simisays
b6759a548e update 2022-09-19 19:48:37 +02:00
Simisays
30c3469132 Update let_the_galaxy_burn.txt 2022-09-19 19:42:47 +02:00
Simisays
0642b7bd0b Delete great_unclean_one.txt 2022-09-19 17:30:11 +02:00
mctubbies
8483ea7079 Update trazyn_the_infinite.txt 2022-09-19 08:47:17 -05:00
mctubbies
a3aae856ce Card Script for Trazyn the Infinite 2022-09-19 08:23:29 -05:00
Simisays
e9007fc527 Create lucius_the_eternal.txt 2022-09-19 13:51:45 +02:00
Simisays
13fbb9ede2 Rename Tallyman of Nurgle to tallyman_of_nurgle 2022-09-19 13:50:18 +02:00
Simisays
883458b5bf Create Tallyman of Nurgle 2022-09-19 13:49:11 +02:00
Simisays
5e83eb0bfb Create shadow_in_the_warp.txt 2022-09-19 13:47:04 +02:00
Simisays
401623c05d Merge branch 'Card-Forge:master' into Warhammer-8 2022-09-19 13:45:21 +02:00
Northmoc
1c68a89bc6 shadowheart_sharran_cleric.txt (#1526) 2022-09-19 11:26:44 +02:00
Simisays
f1de968c6c Create purestrain_genestealer.txt 2022-09-19 11:22:18 +02:00
Simisays
bd701ceacd Create pink_horror.txt 2022-09-19 11:16:29 +02:00
Simisays
9469cdd126 Update and rename mandate_of_abaddon to mandate_of_abaddon.txt 2022-09-19 11:11:00 +02:00
Paul Hammerton
8e7a63fc07 Merge pull request #1546 from Northmoc/40k_anrakyr
40K: Anrakyr the Traveller and support
2022-09-19 09:45:01 +01:00
Paul Hammerton
360de95c78 Merge pull request #1550 from Northmoc/random
Random little fixes
2022-09-19 09:44:10 +01:00
Simisays
0b8d2a4082 Create plague_drone.txt 2022-09-19 10:02:42 +02:00
Simisays
57b479bce4 Create nurgles_rot.txt 2022-09-19 10:00:02 +02:00
Simisays
2f8c3cf8b7 Create nurgles_conscription.txt 2022-09-19 09:59:27 +02:00
Simisays
633eacbfe8 Create let_the_galaxy_burn.txt 2022-09-19 09:58:37 +02:00
Simisays
4ecd12517c Create mandate_of_abaddon 2022-09-19 09:57:54 +02:00
Simisays
24d60dfc41 Create great_unclean_one.txt 2022-09-19 09:57:24 +02:00
Anthony Calosa
c95d2c80a6 Merge pull request #1555 from kevlahnota/master
fix difficulty selector alignment
2022-09-19 14:09:56 +08:00
Anthony Calosa
1340df7c26 fix difficulty selector alignment 2022-09-19 14:05:48 +08:00
Anthony Calosa
409ba854a5 Merge pull request #1554 from kevlahnota/master
fix crash missing mana label on Android Adventure mode
2022-09-19 11:17:07 +08:00
Anthony Calosa
7a050f7b53 fix crash missing mana label on Android Adventure mode 2022-09-19 11:15:11 +08:00
Anthony Calosa
5870c188f0 Merge pull request #1553 from kevlahnota/master
fix colorlabel color
2022-09-19 10:15:00 +08:00
Anthony Calosa
d4d169fa01 fix colorlabel color 2022-09-19 10:13:14 +08:00
Anthony Calosa
705a43cb2e Merge pull request #1548 from TrueFuFLeaderG/adventure
Adventure
2022-09-19 08:32:00 +08:00
Anthony Calosa
214bf0fac7 Merge pull request #1102 from Northmoc/spires
2X2: Cryptic Spires and support
2022-09-19 08:19:42 +08:00
Anthony Calosa
a6ed1ca187 Merge pull request #1552 from Simisays/Warhammer-7
40K 10 cards + 1 fix
2022-09-19 08:15:51 +08:00
Northmoc
5b01fb8332 PlayEffect move String cost up a bit 2022-09-18 16:40:52 -05:00
Northmoc
44655bb420 capricious_efreet.txt tighten up 2022-09-18 16:38:34 -05:00
Northmoc
9a430333d9 ChooseCardEffect streamline Random UI a bit 2022-09-18 16:38:22 -05:00
Simisays
521a1840d4 Update venomcrawler.txt 2022-09-18 23:25:29 +02:00
Simisays
bef9586102 Update sister_hostpitaller.txt 2022-09-18 23:25:11 +02:00
Simisays
e8267b8cac Update sister_hostpitaller.txt 2022-09-18 23:24:53 +02:00
Simisays
29f9329879 Update night_scythe.txt 2022-09-18 23:24:25 +02:00
Simisays
d5c86451e6 Update necron_overlord.txt 2022-09-18 23:23:47 +02:00
Simisays
17c4a67075 Update necron_monolith.txt 2022-09-18 23:23:08 +02:00
Simisays
b06af752cf Update necron_deathmark.txt 2022-09-18 23:22:49 +02:00
Simisays
f21ff12646 Update chronomancer.txt 2022-09-18 23:22:01 +02:00
Northmoc
439c124391 refactor cards that smash when they damage a player (#1545)
* refactor cards that smash when they damage a player
2022-09-18 20:45:58 +00:00
Northmoc
5fa51dd616 40K: 18 Sep (#1547)
* card scripts

* ChooseTypeEffect.getStackDescription improve

* CostTapType.toString improve auto-pluralization

* elven_bow.txt improve AI hints

* and_they_shall_know_no_fear.txt better AI
2022-09-18 20:12:53 +00:00
Simisays
dd51932c32 Update chronomancer.txt 2022-09-18 21:51:57 +02:00
Simisays
b28b44e3b4 Delete neyam_shai_murad.txt
not working
2022-09-18 21:50:00 +02:00
Simisays
e98c0a7557 update 2022-09-18 21:49:09 +02:00
Grimm
099502bbb9 issue #1443 fix give adventure -x permission 2022-09-18 20:09:45 +02:00
Grimm
af6f79195c issue #1443 fix give adventure -x permission 2022-09-18 20:04:15 +02:00
Simisays
4a9a8ea670 Update necron_deathmark.txt 2022-09-18 19:53:45 +02:00
Simisays
0f0780300f Update trygon_prime.txt 2022-09-18 19:49:40 +02:00
Grimm
d38b80c9da issue #1443 fix give adventure -x permission 2022-09-18 19:17:46 +02:00
Northmoc
54ae16e87f capricious_efreet.txt better Cleanup 2022-09-18 12:12:48 -05:00
Northmoc
a974b9e0d8 darigaaz_the_igniter.txt fix TrigDesc 2022-09-18 12:12:35 -05:00
Northmoc
5d174ecdaa shatterskull_charger.txt fix TrigDesc 2022-09-18 12:12:19 -05:00
Grimm
620cea8243 Merge remote-tracking branch 'origin/adventure' into adventure 2022-09-18 18:36:12 +02:00
Grimm
da504d36a2 Merge remote-tracking branch 'origin/adventure' into adventure 2022-09-18 18:36:03 +02:00
Simisays
344fdd0e7d Update syndicate_recruiter.txt 2022-09-18 18:25:06 +02:00
Grimm
4394b3cf79 Merge remote-tracking branch 'origin/adventure' into adventure 2022-09-18 17:58:24 +02:00
Grimm
ab87a32fc1 fixed item use in poi 2022-09-18 17:58:09 +02:00
Grimm
fa068c168c Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-09-18 17:45:07 +02:00
Grimm
93bdec1f2d integrated Textra for Labels and Buttons
fixed executables for release
2022-09-18 17:44:28 +02:00
JohnWilliams77
0be0c52b06 Update Pro Tour Promos.txt (#1544) 2022-09-18 18:08:08 +03:00
tool4ever
14f04f3ee3 Fix some cost reductions ignoring generic mana (#1541)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-09-18 18:07:14 +03:00
Simisays
d7ad895ed9 update 2022-09-18 17:05:13 +02:00
Simisays
1ca45cb6f9 update 2022-09-18 16:37:14 +02:00
Simisays
77da3b6a4b update 2022-09-18 16:16:32 +02:00
Northmoc
5d0dc395f6 PlayEffect support "ConvertedManaCost" in "PlayCost$" 2022-09-18 09:13:54 -05:00
Northmoc
7ee552b273 anrakyr_the_traveller.txt 2022-09-18 09:13:15 -05:00
Simisays
e595df5eb0 Update grey_knight_paragon.txt 2022-09-18 16:07:20 +02:00
Simisays
a8b5098dcb Merge branch 'warhammer-6' of https://github.com/Simisays/forge into warhammer-6 2022-09-18 16:05:54 +02:00
Simisays
3c73ba8431 Update grey_knight_paragon.txt 2022-09-18 16:05:33 +02:00
Simisays
521312a7fc Update tomb_fortress.txt 2022-09-18 15:25:47 +02:00
Simisays
cf6670e91a 40K 10 Cards (#1537)
* update

* update

* update

* Update dark_apostle.txt

* Update dark_apostle.txt

* Update ghost_ark.txt

* Update dark_apostle.txt

* Update dark_apostle.txt

* Update dark_apostle.txt

* Update dark_apostle.txt

* Update dark_apostle.txt

* Update dark_apostle.txt

* Update cryptothrall.txt

* Update dark_apostle.txt

* Update exalted_flamer_of_tzeentch.txt

* Update hexmark_destroyer.txt

* Update hexmark_destroyer.txt
2022-09-18 08:25:43 -05:00
Simisays
12e46c450b Update thunderwolf_cavalry.txt 2022-09-18 15:24:18 +02:00
Simisays
fe5d203885 Update tomb_blade.txt 2022-09-18 15:24:04 +02:00
Northmoc
2229deb7db aberrant.txt with TriggeredTarget 2022-09-18 08:05:38 -05:00
Simisays
8ce1a49d90 Update grey_knight_paragon.txt 2022-09-18 14:52:18 +02:00
Simisays
c5f449766c Update grey_knight_paragon.txt 2022-09-18 14:51:17 +02:00
Simisays
4b2aec213e update 2022-09-18 10:40:18 +02:00
Simisays
1a98f4a27c Update trygon_prime.txt 2022-09-18 10:38:34 +02:00
Simisays
1a27eea023 Update trygon_prime.txt 2022-09-18 10:37:16 +02:00
Simisays
c0fdfc0ecf Update tomb_fortress.txt 2022-09-18 10:36:32 +02:00
Simisays
77c91ab798 Update triarch_praetorian.txt 2022-09-18 10:35:56 +02:00
Simisays
52c97caf1b Update vexilus_praetor.txt 2022-09-18 10:34:30 +02:00
Simisays
f1dc5c6892 Update thunderwolf_cavalry.txt 2022-09-18 10:16:59 +02:00
Simisays
3ea960b2e2 Update trygon_prime.txt 2022-09-18 10:16:45 +02:00
Paul Hammerton
c638f07eae Merge pull request #1543 from paulsnoops/token_fix
quick token fix
2022-09-18 09:00:31 +01:00
paulsnoops
4cda9d985c quick token fix 2022-09-18 08:55:06 +01:00
Paul Hammerton
be72f354fb Merge pull request #1535 from Simisays/WARHAMMER-4
40K 8 cards + 2 Tokens
2022-09-18 08:47:55 +01:00
Simisays
8d3f7e7e80 Update trygon_prime.txt 2022-09-18 09:47:46 +02:00
Simisays
b789cca419 Update tomb_blade.txt 2022-09-18 09:47:00 +02:00
Simisays
a90af07ef2 Update thunderwolf_cavalry.txt 2022-09-18 09:46:20 +02:00
Simisays
9e46cbc242 Update aspiring_champion.txt 2022-09-18 09:44:22 +02:00
Simisays
b51fe4b142 update 2022-09-18 09:43:33 +02:00
Simisays
ec4544268a update 2022-09-18 09:35:39 +02:00
Simisays
e24916bca1 update 2022-09-18 09:17:46 +02:00
Paul Hammerton
0fb663213e Merge pull request #1529 from Simisays/Warhammer-2
Warhammer 10 cards + 1 tokens
2022-09-18 08:10:18 +01:00
Paul Hammerton
1cab7ae72e Merge pull request #1524 from Northmoc/undersimplify
HBG: Undersimplify and some tweaks
2022-09-18 08:10:08 +01:00
Northmoc
705a570f24 ambuscade_shaman.txt (#1533) 2022-09-18 07:03:10 +00:00
Simisays
b1e9f8e5dd update 2022-09-18 08:55:42 +02:00
Simisays
0ec01bca87 Update the_red_terror.txt 2022-09-18 08:45:30 +02:00
Simisays
65f8841233 Update canoptek_scarab_swarm.txt 2022-09-18 08:44:50 +02:00
Simisays
6ebd819323 Update bloodcrusher_of_khorne.txt 2022-09-18 08:44:27 +02:00
Simisays
5e8883d3a1 Rename b_2_2_necron_warrior.txt to b_2_2_a_necron_warrior.txt 2022-09-18 08:44:05 +02:00
Simisays
8cc8f6e4c5 Update biotransference.txt 2022-09-18 08:43:46 +02:00
Simisays
a4d2654d2d Update biotransference.txt 2022-09-18 08:43:26 +02:00
Simisays
226d419b73 Update aspiring_champion.txt 2022-09-18 08:42:55 +02:00
Simisays
0d4c5ffc0f Update aspiring_champion.txt 2022-09-18 08:40:41 +02:00
Northmoc
40e0187444 broodlord.txt add flavor to Desc 2022-09-17 21:58:27 -05:00
Northmoc
9b9304266d 5x 40K with Ravenous kw 2022-09-17 21:53:38 -05:00
Northmoc
634a6f2509 add Ravenous keyword 2022-09-17 21:53:00 -05:00
Grimm
a601ef5ec7 integrating TextraLabel into adventure ui 2022-09-18 03:10:57 +02:00
Northmoc
0b0037734c Merge pull request #1530 from Simisays/Warhammer-3
40K 8 more + 2 tokens
2022-09-17 19:50:36 -04:00
Northmoc
f726d1957f add Miracle keyword parsing for non instant/sorcery 2022-09-17 18:44:53 -05:00
Northmoc
9d3e9cd4a2 ultramarines_honour_guard.txt fix spelling 2022-09-17 18:39:18 -05:00
Northmoc
fa7b589b70 remaining Squad cards 2022-09-17 18:31:11 -05:00
Paul Hammerton
00f62e7e1a Merge pull request #1538 from paulsnoops/40k_edition_update
40K finalised edition
2022-09-17 22:48:36 +01:00
paulsnoops
b0886d3592 40K finalised edition 2022-09-17 22:44:45 +01:00
Simisays
12dd4b818e update 2022-09-17 22:21:52 +02:00
Simisays
ac04888f18 update 2022-09-17 22:10:10 +02:00
Simisays
7b25493fdf update 2022-09-17 20:13:24 +02:00
Simisays
7040cda9e9 update 2022-09-17 19:45:20 +02:00
Simisays
bc8ffad238 Update c_1_1_a_insect_flying.txt 2022-09-17 00:03:20 +02:00
Simisays
544ea77aea Update canoptek_scarab_swarm.txt 2022-09-16 23:30:54 +02:00
Simisays
40146038ef Update canoptek_scarab_swarm.txt 2022-09-16 23:27:59 +02:00
Simisays
be99787365 Rename c_1_1_insect_artifact_flying.txt to c_1_1_a_insect_flying.txt 2022-09-16 23:27:09 +02:00
Simisays
8f5cbf434c Update aspiring_champion.txt 2022-09-16 23:15:32 +02:00
Simisays
660e802a63 Update aspiring_champion.txt 2022-09-16 23:09:52 +02:00
Simisays
55cd685f54 Update canoptek_scarab_swarm.txt 2022-09-16 23:09:07 +02:00
Simisays
45b77e09d3 Update aspiring_champion.txt 2022-09-16 22:35:56 +02:00
Simisays
707e7ce6e7 Update c_1_1_insect_artifact_flying.txt 2022-09-16 22:12:27 +02:00
Simisays
65486e81f1 Update canoptek_tomb_sentinel.txt 2022-09-16 22:11:51 +02:00
Simisays
acbe1c89ff Update canoptek_spyder.txt 2022-09-16 22:11:14 +02:00
Simisays
1c78f799e2 Update canoptek_scarab_swarm.txt 2022-09-16 22:10:29 +02:00
Simisays
70e5409597 Update bloodthirster.txt 2022-09-16 22:09:41 +02:00
Simisays
caae27144e Update biotransference.txt 2022-09-16 22:09:02 +02:00
Simisays
10e83e0cc9 Update aspiring_champion.txt 2022-09-16 22:08:25 +02:00
Simisays
4aa33f8d53 update 2022-09-16 22:06:41 +02:00
Simisays
6156454f77 Create canoptek_spyder.txt 2022-09-16 21:34:17 +02:00
Simisays
c1ede1f43b update 2022-09-16 21:28:05 +02:00
Simisays
2e3632441f update 2022-09-16 20:59:12 +02:00
Simisays
9dc796b5dc update 2022-09-16 20:44:20 +02:00
Grimm
fbd888f290 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure
 Conflicts:
	forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java
	forge-gui-mobile/src/forge/adventure/scene/HudScene.java
	forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java
	forge-gui-mobile/src/forge/adventure/scene/RewardScene.java
	forge-gui-mobile/src/forge/adventure/scene/SaveLoadScene.java
	forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java
	forge-gui-mobile/src/forge/adventure/scene/StartScene.java
	forge-gui-mobile/src/forge/adventure/scene/UIScene.java
	forge-gui-mobile/src/forge/adventure/stage/GameHUD.java
	forge-gui-mobile/src/forge/adventure/stage/GameStage.java
	forge-gui-mobile/src/forge/adventure/stage/MapStage.java
	forge-gui-mobile/src/forge/adventure/stage/WorldStage.java
2022-09-16 18:35:47 +02:00
Grimm
0777d84325 Merge remote-tracking branch 'origin/adventure' into adventure
# Conflicts:
#	forge-gui-mobile/src/forge/adventure/world/World.java
#	forge-gui/res/adventure/Shandalar/world/tilesets/autotiles.png
#	forge-gui/res/adventure/Shandalar/world/tilesets/structures.png
2022-09-16 18:14:39 +02:00
Grimm
5bae834f09 Render world map with more details
Changed SpellSmithScene to not display empty edition and fixed edition filter.
2022-09-16 18:13:13 +02:00
Paul Hammerton
6f64c7851d Merge pull request #1532 from paulsnoops/edition_updates
Update editions, DMU rankings and TypeLists (for 40k)
2022-09-16 08:19:28 +01:00
paulsnoops
904a98a1bf update dmu draft 2022-09-16 08:16:34 +01:00
paulsnoops
0dd2efe2f5 Update editions and TypeLists.txt 2022-09-16 08:09:13 +01:00
Simisays
91d227e910 Update tyranid_invasion.txt 2022-09-16 08:41:28 +02:00
Simisays
56272e3752 Update malanthrope.txt 2022-09-16 08:40:45 +02:00
Simisays
ab34e089ed Update lictor.txt 2022-09-16 08:40:32 +02:00
Anthony Calosa
a4bacaef52 Merge pull request #1527 from Northmoc/1520
fixes for 40k cards
2022-09-16 10:34:20 +08:00
Grimm
b61a48514e Render world map with more details
Changed SpellSmithScene to not display empty edition and fixed edition filter.
2022-09-16 02:28:43 +02:00
Northmoc
d7a51ece0e Squad keyword and vanguard_suppressor.txt 2022-09-15 20:15:56 -04:00
Simisays
1921c0861b Update winged_hive_tyrant.txt 2022-09-15 21:32:53 +02:00
Simisays
d2c9456bac Update lictor.txt 2022-09-15 21:23:09 +02:00
Simisays
ef4836ca10 Update keeper_of_secrets.txt 2022-09-15 21:22:28 +02:00
Simisays
ed915e3650 Update malanthrope.txt 2022-09-15 21:21:12 +02:00
Simisays
3c331ca854 update 2022-09-15 21:17:40 +02:00
Simisays
7f26bf79e4 update 2022-09-15 21:11:45 +02:00
Simisays
53711512e6 update 2022-09-15 21:04:21 +02:00
Simisays
c6bc55ea9e update 2022-09-15 20:55:09 +02:00
Simisays
2cfe56a967 update 2022-09-15 20:27:24 +02:00
Simisays
b0882d64a9 update 2022-09-15 20:15:06 +02:00
Simisays
3fae821354 Update winged_hive_tyrant.txt 2022-09-15 20:10:01 +02:00
Simisays
624f9ae2c8 update 2022-09-15 20:01:36 +02:00
Simisays
253f6a7e5d Update genestealer_patriarch.txt 2022-09-15 19:58:44 +02:00
Simisays
1e4c2707f1 Update haruspex.txt 2022-09-15 19:49:59 +02:00
Simisays
82b89f9633 Update the_red_terror.txt 2022-09-15 19:48:01 +02:00
Simisays
b3788ce84c Update the_red_terror.txt 2022-09-15 19:47:46 +02:00
Simisays
f81c391f26 Update old_one_eye.txt 2022-09-15 19:46:37 +02:00
Simisays
eba7837c0e Update nexos.txt 2022-09-15 19:45:36 +02:00
Simisays
0e13f289cb Update genestealer_patriarch.txt 2022-09-15 19:45:20 +02:00
Simisays
8f4c873d8e Update haruspex.txt 2022-09-15 19:44:19 +02:00
Simisays
57c832b854 Update genestealer_patriarch.txt 2022-09-15 19:42:38 +02:00
Simisays
60bcccc55b Update genestealer_patriarch.txt 2022-09-15 19:42:19 +02:00
Simisays
035c3ce147 Update genestealer_patriarch.txt 2022-09-15 19:41:58 +02:00
Simisays
c1a1a6a139 Update genestealer_locus.txt 2022-09-15 19:41:05 +02:00
Grimm
f9de0c1678 Merge branch 'adventure' of https://github.com/TrueFuFLeaderG/forge into adventure 2022-09-15 19:32:55 +02:00
Simisays
662b543a84 Update nexos.txt 2022-09-15 19:14:03 +02:00
Simisays
a44b2f83a9 Update genestealer_patriarch.txt 2022-09-15 19:13:35 +02:00
Simisays
9624aef096 Update old_one_eye.txt 2022-09-15 19:12:31 +02:00
Simisays
135524cc9d Update clamavus.txt 2022-09-15 18:53:52 +02:00
Simisays
69fe301334 update 2022-09-15 18:45:30 +02:00
Northmoc
f9fb372d2e biophagus.txt use AddsCounters!!! 2022-09-15 12:31:21 -04:00
Northmoc
9496b22a81 noise_marine.txt fix 2022-09-15 11:52:42 -04:00
Northmoc
0c55f3b46f fixes for 40k cards 2022-09-15 11:50:24 -04:00
Northmoc
311bc0163c Fixes (#1525)
* burning_hands.txt refactor

* psychic_pickpocket.txt fix typo
2022-09-15 15:48:55 +00:00
Grimm
9097c728f6 Merge remote-tracking branch 'origin/adventure' into adventure
# Conflicts:
#	forge-gui-mobile/src/forge/adventure/util/CardUtil.java
2022-09-15 17:30:35 +02:00
Grimm
8e544633a2 crash fix for lazy loading
Fixed 500 card adventure starting deck
2022-09-15 17:29:54 +02:00
Grimm
e193c4881a crash fix for lazy loading
Fixed 500 card adventure starting deck
2022-09-15 17:29:45 +02:00
Grimm
96635fe7a4 crash fix for lazy loading 2022-09-15 17:20:38 +02:00
tool4ever
63f9cbd446 Cleanup + fixes (#1523)
* Fix activator

* Clean up
2022-09-15 15:12:40 +00:00
Northmoc
644bdba15a undersimplify.txt 2022-09-15 11:11:34 -04:00
Northmoc
bdb8dc075c AbilityUtils.getDefinedPlayers add "TargetedSource" to noop list 2022-09-15 11:09:50 -04:00
Northmoc
3cc2ed553f AbilityFactory.readTarget add "Spell" to commonStuff 2022-09-15 11:08:55 -04:00
Paul Hammerton
4270f371c7 Merge pull request #1522 from Northmoc/imoen
imoen_trickster_friend.txt fixup
2022-09-15 15:33:22 +01:00
Northmoc
dd720a6e27 Merge branch 'master' into imoen 2022-09-15 10:26:03 -04:00
Northmoc
d52bc3352d imoen_trickster_friend.txt fixup 2022-09-15 10:22:21 -04:00
Northmoc
680b5471a8 boareskyr_tollkeeper.txt (#1480) 2022-09-15 12:50:17 +00:00
Anthony Calosa
6b75905bdc Merge pull request #1521 from Simisays/imoen
Update imoen_trickster_friend.txt
2022-09-15 13:45:56 +08:00
Simisays
42da546c9f Update imoen_trickster_friend.txt 2022-09-15 07:42:41 +02:00
Simisays
3ac78f79b7 10 40K (#1520)
* update

* update

* update

* update

* update

* Update tatyova_steward_of_tides.txt

* Update tatyova_steward_of_tides.txt

* Update atlan_jackal.txt

* Update biophagus.txt

* Update bone_sabres.txt

* Update Belakor_the_dark_master.txt

* Update marneus_calgar.txt

* Update acolyte_hybrid.txt

* Update toxicrene.txt

* Update the_first_tyrannic_war.txt

* Update the_first_tyrannic_war.txt

* Delete the_first_tyrannic_war.txt
2022-09-15 08:25:43 +03:00
Simisays
be248f8645 update 2022-09-14 23:26:41 +02:00
Simisays
749191c19b update 2022-09-14 23:13:18 +02:00
Simisays
7354994bd5 update 2022-09-14 23:00:45 +02:00
Simisays
4f7fb28c70 update 2022-09-14 22:49:20 +02:00
Simisays
068898a0fb Update genestealer_patriarch.txt 2022-09-14 22:47:46 +02:00
Simisays
99037bcb2a Update clamavus.txt 2022-09-14 22:26:42 +02:00
Simisays
03d7c130c6 Add files via upload 2022-09-14 21:38:41 +02:00
Grimm
b63944c220 Added item use support
Added mana for item usage
Added new AI art
Added particle effect system
Added capitals
Added some map modifications like hiding and flying
Added a arena to the capitals
Made more items findable
2022-09-14 21:21:05 +02:00
Grimm
98f833f019 Added item use support
Added mana for item usage
Added new AI art
Added particle effect system
Added capitals
Added some map modifications like hiding and flying
Added a arena to the capitals
Made more items findable
2022-09-14 21:18:31 +02:00
Northmoc
4a65999444 HBG: Mephit's Enthusiasm and a little QoL (#1515)
* EffectEffect handle chosen numbers and "SetChosenNumber"

* mephits_enthusiasm.txt

* dragonborn_immolator.txt improve

* dragonborn_immolator.txt oops
2022-09-14 17:03:34 +00:00
Northmoc
d2bdabc938 HBG: Jaheira, Harper Emissary and a little QoL (#1516)
* jaheira_harper_emissary.txt

* Card.keywordsToText() improve Hexproof a bit
2022-09-14 17:01:01 +00:00
Northmoc
8e778f4e14 HBG: 13 Sep (#1517)
* laezel_githyanki_warrior.txt

* vhal_eager_scholar.txt

* herald_of_the_forgotten.txt fix prompt
2022-09-14 16:13:21 +00:00
Grimm
1fe6cf911f added capitals 2022-09-14 16:52:47 +02:00
Grimm
784590bde0 added capitals 2022-09-14 16:49:02 +02:00
Northmoc
eb5be783a5 Merge pull request #1518 from paulsnoops/fix_curly
QoL card script fixes
2022-09-14 08:46:55 -04:00
paulsnoops
214274f45b QoL card script fixes 2022-09-14 09:01:44 +01:00
Simisays
22fd173e3b HBG 14 Cards + 3 fix (#1498)
* Create wilson_bear_comrade.txt

* Create skanos_dragon_vassal.txt

* Create valiant_farewell.txt

* cleanup

* Update valiant_farewell.txt

* Create champions_of_tyr.txt

* Create unexpected_allies.txt

* Update wilson_bear_comrade.txt

* Update unexpected_allies.txt

* Update skanos_dragon_vassal.txt

* Update champions_of_tyr.txt

* Update champions_of_tyr.txt

* Update unexpected_allies.txt

* Update wilson_bear_comrade.txt

* Update champions_of_tyr.txt

* Update champions_of_tyr.txt

* Update champions_of_tyr.txt

* update

* update

* Update imoen_trickster_friend.txt

* update

* update

* Update

* Update stroke_of_luck.txt

* Create sewer_plague.txt

* Update sewer_plague.txt

* Update sewer_plague.txt

* Create sarevok_the_usurper.txt

* Create lulu_forgetful_hollyphant.txt

* Update lulu_forgetful_hollyphant.txt

* Update lulu_forgetful_hollyphant.txt

* Update flames_of_moradin.txt

* Update sarevok_the_usurper.txt

* Update wilson_bear_comrade.txt

* Update rivaz_of_the_claw.txt

* Rename ambergris_citadel_agent .txt to ambergris_citadel_agent.txt

* Update gale_conduit.txt

* Update gale_conduit.txt

* Update gale_conduit.txt

* Update gale_conduit.txt

* Update imoen_trickster_friend.txt

* Update ambergris_citadel_agent.txt

* Update flames_of_moradin.txt

* update

* Update sarevok_the_usurper.txt

* Update imoen_trickster_friend.txt

* Update xira_the_golden_sting.txt

* Update gale_conduit.txt

* Update imoen_trickster_friend.txt

* Update ambergris_citadel_agent.txt

* Update ambergris_citadel_agent.txt

* Update tatyova_steward_of_tides.txt
2022-09-14 06:00:26 +03:00
Paul Hammerton
6f5a2f5b18 Merge pull request #1514 from Northmoc/fixes1488
fixes from PR 1488
2022-09-13 18:45:08 +01:00
Northmoc
0d88f3a8a4 Merge pull request #1513 from paulsnoops/sotc_fix
Fix strength_of_the_coalition.txt
2022-09-13 13:02:48 -04:00
Northmoc
4b25fb2358 urborg_repossession.txt don't target for kicker if not kicked 2022-09-13 13:01:02 -04:00
Northmoc
393af02620 fixes from PR 1488 2022-09-13 12:53:12 -04:00
paulsnoops
bec81cd294 Add TgtPrompt 2022-09-13 17:50:55 +01:00
t-w-o-s-a-t
00f11f6a07 Update de-DE.properties (#1509)
translated lblSpecialized and lblArtist
2022-09-13 16:29:55 +00:00
paulsnoops
7785a160e1 Fix strength_of_the_coalition.txt 2022-09-13 17:24:48 +01:00
tool4ever
344b562390 Rain of Gore fix (#1510)
* Rain of Gore fix

* Guile fix

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-09-13 11:50:34 +03:00
tool4ever
b340f2b27b Fix cards (#1508)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-09-13 06:53:24 +03:00
Anthony Calosa
abba95edb9 Merge pull request #1506 from rikimbo/ai_support_fiery_justice
Add AI support for Fiery Justice
2022-09-12 18:54:39 +08:00
Agetian
9a63bb0606 - Added DMU/DMC/HBG achievements by Marek14. (#1505) 2022-09-12 09:25:38 +03:00
Eric
c094721b60 Add AI support for Fiery Justice. 2022-09-11 20:56:56 -05:00
Anthony Calosa
e54f0e0f41 Merge pull request #1504 from kevlahnota/master
update Adventure dependency for controller
2022-09-10 17:36:02 +08:00
Anthony Calosa
64e3b40639 update repo 2022-09-10 17:31:46 +08:00
Anthony Calosa
31572d1e58 update Adventure dependency for controller 2022-09-10 17:25:40 +08:00
Anthony Calosa
f27d8252a1 Merge pull request #1464 from add-le/master
2700+ cards translated in french
2022-09-10 16:59:00 +08:00
Anthony Calosa
eaa86135af Merge pull request #1467 from tool4ever/namesort
Fix card name sorting ignoring other locale
2022-09-10 16:35:25 +08:00
Anthony Calosa
67bbe4975c Merge pull request #1470 from rikimbo/adventure_no_warn_about_ai_cards
Adventure: Don't warn about cards the AI can't play well
2022-09-10 16:34:29 +08:00
Anthony Calosa
6dc36d0691 Merge pull request #1502 from tool4ever/mutatefix
Fix mutated cards disappearing when top is token
2022-09-10 16:33:40 +08:00
Northmoc
e8ac211e7e HBG: Thayan Evokers and support (ConjureAll trigger) (#1473)
* add Conjure$ to existing cards

* thayan_evokers.txt

* cards refactor Double Team > Double team

* Card.keywordsToText() add Double team to list

* CardFactoryUtil tidy up Double team, add Conjure$

* MakeCardEffect run TriggerConjureAll

* TriggerConjureAll

* TriggerType.ConjureAll

* Keyword.DOUBLE_TEAM refactor Team > team
2022-09-10 07:39:24 +03:00
tool4EvEr
63d7036786 Fix mutated cards disappearing when top is token 2022-09-09 17:28:46 +02:00
Suthro
9f84db95d3 DMU: 3 kicker cards (#1499) 2022-09-09 08:53:10 +02:00
Simisays
18857bb074 9 DMU + some cleanup (#1488) 2022-09-08 11:04:41 +00:00
tool4ever
38f8e784b1 TapsForMana corner cases with Piracy affecting wrong player (#1497) 2022-09-08 08:01:14 +00:00
Paul Hammerton
6df0a4771d Merge pull request #1459 from Northmoc/hbg_favored
HBG: Favored Enemy and support
2022-09-08 08:10:46 +01:00
Paul Hammerton
c9b4839593 Merge pull request #1484 from Northmoc/hbg_mace
HBG: Mace of Disruption and support
2022-09-08 08:10:30 +01:00
Simisays
2d322baa5c DMU 10 Cards + 2 cleanup (#1495)
* update

* update

* Update tatyova_steward_of_tides.txt

* Update tear_asunder.txt

* Update talas_lookout.txt

* cleanup
2022-09-08 08:55:35 +03:00
Northmoc
0e3a258799 liara_of_the_flaming_fist.txt 2022-09-07 16:27:43 -04:00
Northmoc
3cc9e823a2 Card.keywordsToText() better handle keywords with internal caps 2022-09-07 16:27:42 -04:00
Northmoc
836d4504a1 tenacious_pup.txt 2022-09-07 16:27:42 -04:00
Northmoc
a8e1e7d450 mace_of_disruption.txt 2022-09-07 16:27:41 -04:00
tool4ever
67aac7840b Refactor HighestCMC (#1491)
Co-authored-by: TRT <>
2022-09-07 21:42:36 +03:00
add-le
e1197c1f5f Merge branch 'Card-Forge:master' into master 2022-09-07 19:07:03 +02:00
Northmoc
4fc08a1415 Merge pull request #1493 from paulsnoops/40k_cards
40K: three Legendaries
2022-09-07 09:59:49 -04:00
Paul Hammerton
75e957cb45 Merge pull request #1494 from Northmoc/tests
Rework some Tests to allow for recent Shivan Dragon printings
2022-09-07 14:45:49 +01:00
Northmoc
c6eaae3766 CardDbCardMockTestCase.testGetCardFromEditionsWrongInputReturnsNull allow for P30H 2 treatments of Shivan Dragon 2022-09-07 09:22:33 -04:00
Northmoc
152e435f7a CardDbCardMockTestCase.testNullAndBoundaryDateValuesForGetCardFromEditionsWithDateRestrictions allow for future-dated latestShivanDragon 2022-09-07 09:20:28 -04:00
Northmoc
65348e85be correctly future date P30H 2022-09-07 09:19:02 -04:00
paulsnoops
0c804949d8 additions 2022-09-07 13:01:35 +01:00
paulsnoops
285b8a1bb0 40K: three Legendaries 2022-09-07 12:42:48 +01:00
Northmoc
580264f61a HBG: 6 Sep (#1486)
* update war_falcon.txt

* wyll_pact_bound_duelist.txt

* klement_novice_acoltye.txt
2022-09-07 13:35:12 +03:00
squee1968
a770c0ab72 3 DMU cards from squee (#1485)
* 3 DMU cards from squee

* Update heros_heirloom.txt
2022-09-07 13:34:54 +03:00
Hans Mackowiak
2f4a8f2992 Update goblin_sappers.txt 2022-09-07 12:29:25 +02:00
Paul Hammerton
a0d16b30a6 Merge pull request #1490 from paulsnoops/40k_edition
Update 40k edition
2022-09-07 10:54:39 +01:00
paulsnoops
4ec6ee35cb Update 40k edition 2022-09-07 10:48:58 +01:00
Northmoc
212439b066 Fix Monstrous War-Leech (#1474) 2022-09-07 10:34:48 +02:00
Northmoc
dbd68739dc allow for X=0 Ob Nix casualty corner case (#1482) 2022-09-07 09:24:11 +02:00
Northmoc
a53bd569e8 RewardActor update boolean to String 2022-09-06 21:35:40 -04:00
Northmoc
1615516a18 improve image fetching for Specialize cards 2022-09-06 21:20:43 -04:00
Paul Hammerton
454f76fb63 Merge pull request #1476 from Simisays/DMU-14
DMU 11 Cards
2022-09-06 21:28:28 +01:00
Paul Hammerton
3fede83d6b Merge pull request #1481 from paulsnoops/dmu_edition_fix
DMU edition small name change fix
2022-09-06 21:21:34 +01:00
paulsnoops
ac6d79c23a DMU edition small name change fix 2022-09-06 21:17:43 +01:00
Simisays
a18b0b3602 Update voda_sea_scavenger.txt 2022-09-06 21:05:39 +02:00
JohnWilliams77
505ffbb81f Update Secret Lair Drop Series.txt (#1477) 2022-09-06 21:54:53 +03:00
tool4ever
1ca6b8c56c Improved Domain handling (#1479)
* Improved Domain handling

* Card fixes

* Update cards

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-09-06 21:54:14 +03:00
Simisays
3f8e741f46 Merge branch 'DMU-14' of https://github.com/Simisays/forge into DMU-14 2022-09-06 20:08:26 +02:00
Simisays
3760144ffe Update tribute_to_urborg.txt 2022-09-06 17:31:30 +02:00
Simisays
18fa9dcf8f Update tribute_to_urborg.txt 2022-09-06 17:30:06 +02:00
Simisays
dafa03e862 Update tribute_to_urborg.txt 2022-09-06 17:12:39 +02:00
Simisays
c9318f24f9 Update walking_bulwark.txt 2022-09-06 17:08:48 +02:00
Simisays
d37a60a056 Update voda_sea_scavenger.txt 2022-09-06 17:07:13 +02:00
Simisays
cd3aa0b393 Update urborg_repossession.txt 2022-09-06 17:03:26 +02:00
Simisays
97a84349e7 Update tura_kennerud_skyknight.txt 2022-09-06 16:47:09 +02:00
Simisays
ed7de3b834 Update tura_kennerud_skyknight.txt 2022-09-06 16:46:51 +02:00
Simisays
d5283a9b30 Update tura_kennerud_skyknight.txt 2022-09-06 16:46:35 +02:00
Simisays
0a6c4c53a1 Update tribute_to_urborg.txt 2022-09-06 16:46:20 +02:00
Simisays
512eb936a6 Update voda_sea_scavenger.txt 2022-09-06 16:45:16 +02:00
Simisays
fc57bdc3cb Update tribute_to_urborg.txt 2022-09-06 16:43:37 +02:00
Simisays
03c50fbd59 Update urborg_repossession.txt 2022-09-06 14:57:00 +02:00
Simisays
7351815b52 Update urborg_repossession.txt 2022-09-06 14:43:53 +02:00
Simisays
cb5548aefa Update voda_sea_scavenger.txt 2022-09-06 14:40:32 +02:00
Simisays
0848e7ff7c Update urborg_repossession.txt 2022-09-06 14:37:36 +02:00
Simisays
ff42e513f7 Update walking_bulwark.txt 2022-09-06 14:33:41 +02:00
Simisays
75aac80b7a Update walking_bulwark.txt 2022-09-06 14:28:32 +02:00
Simisays
672bc0d5eb Update walking_bulwark.txt 2022-09-06 14:10:48 +02:00
Simisays
9648fbb790 Update walking_bulwark.txt 2022-09-06 14:03:15 +02:00
Simisays
7389290af3 Update urborg_repossession.txt 2022-09-06 13:58:12 +02:00
Simisays
3107f3e407 update 2022-09-06 13:56:21 +02:00
Simisays
d7bf1d20a8 update 2022-09-06 10:30:59 +02:00
Simisays
a92d04672a Update urborg_repossession.txt 2022-09-06 10:22:46 +02:00
Simisays
62aa6f739e Update serra_paragon.txt 2022-09-06 10:16:34 +02:00
Simisays
2ac9e036ac update 2022-09-06 10:13:37 +02:00
Simisays
24ecd59de4 update 2022-09-06 09:43:27 +02:00
Paul Hammerton
62193bfdf4 Merge pull request #1468 from Simisays/DMU-13
DMU 8 Cards + 2 Fix
2022-09-06 08:10:03 +01:00
Simisays
54c1eee068 Update soul_of_windgrace.txt 2022-09-06 00:08:00 +02:00
Simisays
33cda22419 Update sheoldreds_restoration.txt 2022-09-06 00:00:47 +02:00
Simisays
871cf14645 Update soul_of_windgrace.txt 2022-09-05 23:30:19 +02:00
Simisays
91b5a409d2 Update sheoldreds_restoration.txt 2022-09-05 23:29:50 +02:00
Simisays
b264d45819 Update vodalian_mindsinger.txt 2022-09-05 23:29:24 +02:00
Simisays
9e81d57ecc Update vodalian_mindsinger.txt 2022-09-05 23:27:29 +02:00
Simisays
4e86b02030 Update soul_of_windgrace.txt 2022-09-05 23:24:03 +02:00
Simisays
96a10709e9 Update sheoldreds_restoration.txt 2022-09-05 23:23:35 +02:00
Simisays
a52dddf8a2 Update scout_the_wilderness.txt 2022-09-05 23:21:08 +02:00
Simisays
ac0c3d7d23 Rename braids_frightful_return.txt to braidss_frightful_return.txt 2022-09-05 23:20:36 +02:00
Northmoc
9dfd86244e Merge pull request #1469 from paulsnoops/hbg_edition_fix
Small HBG fixes
2022-09-05 17:14:10 -04:00
paulsnoops
101f565c7c karlach 2022-09-05 22:08:22 +01:00
paulsnoops
360786946b remove specialize sides 2022-09-05 21:30:50 +01:00
Simisays
dee3d95bb6 Merge branch 'DMU-13' of https://github.com/Simisays/forge into DMU-13 2022-09-05 22:25:31 +02:00
Simisays
e7273f247d update 2022-09-05 22:25:28 +02:00
Simisays
540be0604c Update soul_of_windgrace.txt 2022-09-05 22:20:58 +02:00
Simisays
f2d08f81bd Update shield_wall_sentinel.txt 2022-09-05 22:19:03 +02:00
Simisays
f88137974a Update scout_the_wilderness.txt 2022-09-05 22:17:32 +02:00
paulsnoops
2f1fb02568 Small fixes 2022-09-05 21:16:42 +01:00
Simisays
eea769ff5c Update shadow_prophecy.txt 2022-09-05 22:16:33 +02:00
Eric
4b2ecafc6b In Adventure matches, don't warn about cards the AI can't play well. 2022-09-05 15:08:23 -05:00
Simisays
248f251d80 Update shield_wall_sentinel.txt 2022-09-05 21:55:47 +02:00
Northmoc
e1bc571c45 HBG: Gut, Fanatical Priestess and support (also Rasaad) (#1437)
* rasaad_monk_of_selune.txt

* SpellAbilityEffect.registerDelayedTrigger add potential for Player$ param

* SpellAbilityEffect.replaceDying TrigDesc tweaks

* SpellAbilityEffect.replaceDying support ReplaceDyingRemember

* ChangeZoneEffect.changeKnownOriginResolve handle "RememberToEffectSource" from ReplaceDying

* gut_fanatical_priestess.txt

* gut_fanatical_priestess.txt add AI hint
2022-09-05 22:37:02 +03:00
Northmoc
8536979939 HBG: Boons (#1440)
* arcane_archery.txt

* flaming_fist_duskguard.txt

* SpellAbilityEffect.createEffect setBoon here similar to emblem

* TrackableProperty.IsBoon

* Card.setBoon and Card.isBoon

* CardDetailUtil.composeCardText Boon label

* CardView.isBoon and CardView.updateBoon

* EffectEffect.resolve boon/effect naming updates

* flaming_fist_duskguard.txt fix Desc

* dragonborn_immolator.txt
2022-09-05 22:36:24 +03:00
Simisays
5113dac947 Update sheoldreds_restoration.txt 2022-09-05 20:39:39 +02:00
Simisays
c6120f585c Update soul_of_windgrace.txt 2022-09-05 20:38:52 +02:00
Simisays
8623dba32e Update sheoldreds_restoration.txt 2022-09-05 20:36:13 +02:00
Simisays
d2ae475660 Delete serra_paragon.txt 2022-09-05 20:35:25 +02:00
Simisays
dac3bd6a5e Update sheoldreds_restoration.txt 2022-09-05 20:31:55 +02:00
Simisays
8226143e43 update 2022-09-05 20:21:43 +02:00
Simisays
5752d2376b update 2022-09-05 20:00:56 +02:00
tool4EvEr
275f653e4a Fix card name sorting ignoring other locale 2022-09-05 18:10:56 +02:00
Paul Hammerton
03ce704356 Merge pull request #1463 from Simisays/DOM11
DMU 10 Cards + 3 card fixes
2022-09-05 15:51:30 +01:00
Paul Hammerton
0b5521a6ae Merge pull request #1466 from Simisays/DMU12
DMU 10 Cards
2022-09-05 15:51:01 +01:00
Paul Hammerton
be6892757a Merge pull request #1449 from Simisays/Dom8
DMU 4 + DMC 1
2022-09-05 15:50:21 +01:00
Simisays
3815b79cf8 Update rulik_mons_warren_chief.txt 2022-09-05 15:49:41 +02:00
Simisays
18fe5bc290 Update sengir_connoisseur.txt 2022-09-05 15:48:54 +02:00
Simisays
4228089aba Update shore_up.txt 2022-09-05 15:48:26 +02:00
Simisays
62e6e86ad8 Update smash_to_dust.txt 2022-09-05 15:47:49 +02:00
Northmoc
1aabf6d336 ChooseTypeEffect.resolve refactor Deck -> Zone 2022-09-05 09:47:39 -04:00
Northmoc
c5fe581e38 refactor Deck -> Zone 2022-09-05 09:36:42 -04:00
Simisays
173169ed8d Update ratadrabik_of_urborg.txt 2022-09-05 15:34:49 +02:00
Simisays
a9ceb64934 Update slimefoots_survey.txt 2022-09-05 15:24:29 +02:00
Simisays
f2d0dc544d Update smash_to_dust.txt 2022-09-05 15:23:22 +02:00
Simisays
80682bb762 Update ratadrabik_of_urborg.txt 2022-09-05 15:20:26 +02:00
Simisays
07ab2e0d97 Update raff_weatherlight_stalwart.txt 2022-09-05 15:19:45 +02:00
Simisays
abdec2dfad Update rulik_mons_warren_chief.txt 2022-09-05 13:30:18 +02:00
Simisays
fcbc4f5a47 Update rulik_mons_warren_chief.txt 2022-09-05 13:18:37 +02:00
Simisays
dc07420a96 Update raff_weatherlight_stalwart.txt 2022-09-05 13:17:51 +02:00
Simisays
59c9b160d9 Update rulik_mons_warren_chief.txt 2022-09-05 13:16:21 +02:00
Simisays
424cc1b18d Update ratadrabik_of_urborg.txt 2022-09-05 13:15:21 +02:00
Simisays
a638088e75 Update rulik_mons_warren_chief.txt 2022-09-05 13:13:10 +02:00
Simisays
e164d49964 update 2022-09-05 12:58:04 +02:00
tool4EvEr
9d8cdd71cb Maven: include git history on package 2022-09-05 12:12:39 +02:00
Simisays
89e404e896 update 2022-09-05 10:41:25 +02:00
Simisays
4c13d40db5 update 2022-09-05 10:17:33 +02:00
Northmoc
ff8a07e239 Merge pull request #1450 from Northmoc/dmu_scrutiny
silver_scrutiny.txt w/ support in StaticAbilityCastWithFlash
2022-09-04 20:17:01 -04:00
Simisays
3ae58e8a51 Update queen_allenal_of_ruadach.txt 2022-09-05 00:08:22 +02:00
add-le
f3b988772a Merge branch 'Card-Forge:master' into master 2022-09-04 22:55:33 +02:00
add-le
950b5a36a3 Delete cardnames-fr-FR-missing.txt 2022-09-04 22:55:03 +02:00
add-le
ba1f362ed6 french translation of 2720 cards 2022-09-04 22:52:00 +02:00
add-le
044cbdb5ee french scrap script restart where its stop 2022-09-04 22:51:22 +02:00
Simisays
95b0aa6f44 update 2022-09-04 20:59:32 +02:00
Simisays
82b7c5a436 update 2022-09-04 20:52:30 +02:00
Simisays
594c5fedd5 Update rosnakht_heir_of_rohgahh.txt 2022-09-04 18:27:03 +02:00
add-le
2e2eb77a72 add manual scrap on the script 2022-09-04 16:01:12 +02:00
Simisays
3672976c14 Update najal_the_storm_runner.txt 2022-09-04 15:25:05 +02:00
Simisays
57282b2e11 Update haunting_figment.txt 2022-09-04 14:58:22 +02:00
add-le
dda677224f add scrap script for french translation 2022-09-04 13:58:12 +02:00
Northmoc
83a62a5f5d HBG: Jon Irenicus, the Exile (#1460)
* jon_irenicus_the_exile.txt

* refactor a few old cards for consistency

* fix note
2022-09-04 09:45:07 +00:00
Simisays
10a6fe6e99 Update karns_sylex.txt 2022-09-04 11:10:52 +02:00
Simisays
62ff715412 Update haunting_figment.txt 2022-09-04 11:10:16 +02:00
Simisays
a7573545c8 update 2022-09-04 10:47:25 +02:00
Simisays
2e6e396ee4 DMU 14 Cards (#1456) 2022-09-04 08:35:12 +00:00
Northmoc
37a5a84c76 baru_wurmspeaker.txt fix (#1461) 2022-09-04 08:31:55 +00:00
Simisays
cb3a8585e8 update 2022-09-04 09:54:12 +02:00
Simisays
a6765dc3eb Update leyline_binding.txt 2022-09-04 09:36:25 +02:00
Anthony Calosa
601e4f5471 Merge pull request #1462 from Card-Forge/vigilanceRework
Vigilance as StaticAbility for Johan
2022-09-04 13:24:36 +08:00
Hans Mackowiak
99bdb0f380 Vigilance as StaticAbility for Johan 2022-09-04 01:17:34 +02:00
Northmoc
6b6f757f31 ChooseTypeEffect implement "MostPrevalentInDefinedDeck" 2022-09-03 18:42:17 -04:00
Northmoc
dc28a2225b ForgeScript.cardStateHasProperty add "NotedType" 2022-09-03 18:41:41 -04:00
Northmoc
04e8100fe1 favored_enemy.txt 2022-09-03 18:41:18 -04:00
add-le
4ce2d71312 Merge branch 'master' of https://github.com/add-le/forge 2022-09-03 23:07:08 +02:00
add-le
b3a354b7f9 fix french translation 2022-09-03 23:06:07 +02:00
Simisays
4bed1faa17 Create nishoba_brawler.txt 2022-09-03 22:06:55 +02:00
Simisays
145776223b update 2022-09-03 22:04:24 +02:00
Simisays
11fb5d2118 update 2022-09-03 21:55:50 +02:00
Simisays
9cbb67152f Update rivaz_of_the_claw.txt 2022-09-03 17:52:19 +02:00
Simisays
da5020c8c2 Update llanowar_greenwidow.txt 2022-09-03 17:51:38 +02:00
Simisays
0652ba4baa Update fallaji_wayfarer.txt 2022-09-03 17:50:29 +02:00
Simisays
91952e5cf8 Merge branch 'Dom8' of https://github.com/Simisays/forge into Dom8 2022-09-03 17:41:08 +02:00
Simisays
d95b5d2d08 Threats Undetected and support (#1455) 2022-09-03 11:56:48 +00:00
Northmoc
d02ab39f96 Tidy up some cards (#1454)
* battlewing_mystic.txt tidy

* boggart_sprite_chaser.txt tidy

* taste_of_paradise.txt match Text: to Oracle:

* taste_of_paradise.txt more

* battlewing_mystic.txt better AI

* boggart_sprite_chaser.txt better AI
2022-09-03 10:39:09 +00:00
Paul Hammerton
dfb8490b24 Merge pull request #1453 from paulsnoops/update_p22_edition
Update P22 edition
2022-09-02 21:10:13 +01:00
paulsnoops
52d44c090b Update P22 edition 2022-09-02 21:05:39 +01:00
Simisays
6efa0174e5 DMU 10 cards (#1452) 2022-09-02 17:03:51 +00:00
Northmoc
7ae40f8da8 ForgeScript.spellAbilityHasProperty add "XCost" for comparisons 2022-09-02 11:43:34 -04:00
Northmoc
611edd5107 SpellAbilityRestriction.canPlay anyWithFlashNeedsTargeting > Info 2022-09-02 11:43:01 -04:00
Northmoc
35e0ab688e StaticAbilityCastWithFlash refactor 2022-09-02 11:42:30 -04:00
Northmoc
c1b1ea2d17 timely_ward.txt update 2022-09-02 11:42:14 -04:00
Northmoc
ca29f4fbaa silver_scrutiny.txt 2022-09-02 11:41:59 -04:00
Grimm
b5a2aa7558 Merge remote-tracking branch 'origin/adventure' into adventure
# Conflicts:
#	forge-gui/res/adventure/Shandalar/maps/main.tiled-session
2022-09-02 15:24:21 +02:00
Grimm
f0daceef25 reworkd adventure main call
added particle effects
2022-09-02 15:23:23 +02:00
Northmoc
8b0b766d16 silver_scrutiny.txt w/ support in StaticAbilityCastWithFlash 2022-09-02 09:08:09 -04:00
Simisays
f176fec4c5 Delete threats_undetected.txt 2022-09-02 14:54:14 +02:00
Simisays
8176d29801 Update llanowar_loamspeaker.txt 2022-09-02 14:53:56 +02:00
Simisays
816a4b017a Update threats_undetected.txt 2022-09-02 14:53:24 +02:00
Simisays
9d26b4646e Update leyline_binding.txt 2022-09-02 14:50:54 +02:00
Simisays
8f64bb2020 update 2022-09-02 14:19:18 +02:00
Simisays
adaa07c4ff DMU 9 Cards (#1433)
* update

* update

* update

* up

* Create furious_bellow.txt

* update

* Update choking_miasma.txt

* update

* Update choking_miasma.txt
2022-09-02 13:16:39 +03:00
tool4ever
c8d7dc27b8 Card fixes (#1448)
Co-authored-by: TRT <>
2022-09-02 13:16:30 +03:00
Simisays
e1c820d767 Update fallaji_wayfarer.txt 2022-09-02 12:03:53 +02:00
Simisays
1114ae4b86 Update threats_undetected.txt 2022-09-02 11:53:09 +02:00
Simisays
54f2c87a8b Update temporary_lockdown.txt 2022-09-02 11:51:16 +02:00
Simisays
2cd8206739 Update rivaz_of_the_claw.txt 2022-09-02 11:50:46 +02:00
Simisays
b61843bcf9 Update llanowar_greenwidow.txt 2022-09-02 11:50:13 +02:00
Simisays
ba0870aa51 Create llanowar_greenwidow.txt 2022-09-02 11:35:22 +02:00
Simisays
1073dfbac7 update 2022-09-02 10:55:31 +02:00
Anthony Calosa
9ba96f31ea Merge pull request #1447 from kevlahnota/master
Enable controller listener when adventure mode starts
2022-09-02 09:38:54 +08:00
Anthony Calosa
b62f3f4eed Merge branch 'master' into newmaster 2022-09-02 09:24:20 +08:00
Anthony Calosa
79c58053fe Enable controller listener when adventure mode starts
- Controller listener needs continuous rendering like Adventure mode. Classic mode only shouldn't be affected by continuous rendering unless the listener has already started.
2022-09-02 09:12:16 +08:00
Simisays
31f3281b03 DMU 10 Cards (#1442) 2022-09-01 20:38:31 +00:00
Simisays
e9a265b4e4 update 2022-09-01 20:58:36 +02:00
Northmoc
d5f205ee75 Typos (#1444)
* dega_disciple.txt cleanup

* explore_the_underdark.txt fix AI typo
2022-09-01 17:05:10 +00:00
add-le
77df6ce696 Add french translation (#1436)
* add fil properties for french

* add french translation

* update pom file

* fix some translations of french

* Revert "update pom file"
2022-09-01 19:10:54 +03:00
Simisays
fb29d13985 Create rivaz_of_the_claw.txt 2022-09-01 15:09:37 +02:00
Anthony Calosa
200d7805f7 Merge pull request #1441 from kevlahnota/master
add DPAD selector for gamepad in ListChooser
2022-09-01 20:14:32 +08:00
Anthony Calosa
017a403389 Merge branch 'master' into newmaster 2022-09-01 20:11:10 +08:00
Anthony Calosa
b6cab2ac5c remove comment 2022-09-01 20:10:28 +08:00
Anthony Calosa
3421b3bdd7 update controls 2022-09-01 20:03:33 +08:00
Anthony Calosa
4bde4911ea add DPAD selector for gamepad in ListChooser
also add a way to select player using back button (select button on ds4), highlight player using left analog down, then press the back button to select player
2022-09-01 19:02:31 +08:00
Paul Hammerton
ce7f78c813 Merge pull request #1432 from Simisays/DMU5
DMU 8 Cards
2022-09-01 09:26:57 +01:00
Simisays
b0b1e0b307 Update relic_of_legends.txt 2022-09-01 08:28:05 +02:00
Anthony Calosa
aa1b15a525 Update token-images.txt
added DMU/DMC Tokens
2022-09-01 14:00:42 +08:00
Simisays
557ab5ba49 Update the_weatherseed_treaty.txt 2022-08-31 23:43:19 +02:00
Anthony Calosa
e81c20e7c8 Merge pull request #1420 from squee1968/5-DMU-cards
5 DMU cards
2022-09-01 05:29:06 +08:00
Anthony Calosa
a8e60eb1ba Merge pull request #1439 from kevlahnota/master
fix hovering with gamepad on android
2022-09-01 05:28:23 +08:00
Anthony Calosa
aa12e751a1 Merge branch 'master' into newmaster 2022-09-01 05:16:59 +08:00
Northmoc
60b2ea2546 first stab 2022-08-31 17:14:58 -04:00
Anthony Calosa
6ad0b32c64 add bypass for android version displaying magnification on hover (when using gamepad) 2022-09-01 05:11:12 +08:00
Anthony Calosa
b2139061e6 Merge pull request #1402 from Suthro/forge_dmu
DMU: Golden Argosy + 5 cards
2022-09-01 05:06:36 +08:00
Anthony Calosa
7267b715e3 Update golden_argosy.txt 2022-09-01 05:06:02 +08:00
Anthony Calosa
5a6acc362f Update ronas_vortex.txt 2022-09-01 05:04:51 +08:00
Anthony Calosa
c2ce461d02 Update golden_argosy.txt 2022-09-01 05:04:19 +08:00
Anthony Calosa
937005de7b Update archangel_of_wrath.txt 2022-09-01 05:03:11 +08:00
Anthony Calosa
00b8c69162 Merge pull request #1392 from Simisays/DoubleTeamBis
HBG Double Team Ability + 13 cards
2022-09-01 05:01:20 +08:00
squee1968
50367219ee Update djinn_of_the_fountain.txt 2022-08-31 16:00:12 -05:00
Anthony Calosa
d6cf7a31fe Merge pull request #1434 from kevlahnota/master
Gamepad for Adventure Mode
2022-09-01 04:57:36 +08:00
Simisays
4dbb97e262 Update urza_assembles_the_titans.txt 2022-08-31 22:32:16 +02:00
Simisays
200a9920bc update 2022-08-31 22:29:11 +02:00
Paul Hammerton
63d95294a0 Merge pull request #1435 from Northmoc/fixes
Fixes
2022-08-31 21:24:46 +01:00
Anthony Calosa
33d927f71f Update CardZoom.java 2022-09-01 04:11:19 +08:00
Northmoc
d80964b366 divine_purge.txt fix 2022-08-31 16:08:46 -04:00
Northmoc
597ef64fae patriars_humiliation.txt improve Desc 2022-08-31 16:08:28 -04:00
Anthony Calosa
39a44eb354 unused import 2022-09-01 04:03:39 +08:00
Anthony Calosa
5f1c29b823 Gamepad for Adventure Mode 2022-09-01 03:55:11 +08:00
tool4ever
3ddec8a7d1 Venture Forth follow-up (#1431) 2022-08-31 18:12:24 +00:00
Simisays
a1bc0f0b34 Update ulder_ravengard_marshal.txt 2022-08-31 18:45:22 +02:00
Northmoc
dd4b86d12c Merge pull request #1427 from paulsnoops/dmu_draft
DMU Booster Draft
2022-08-31 12:36:19 -04:00
Paul Hammerton
125d34b468 Merge pull request #1363 from Northmoc/viconia
HBG: Viconia, Nightsinger's Disciple and support
2022-08-31 17:29:08 +01:00
squee1968
bf2956b1fa Update fires_of_victory.txt 2022-08-31 08:59:03 -05:00
Simisays
e502c69d69 Update urza_assembles_the_titans.txt 2022-08-31 15:40:17 +02:00
Simisays
7cb740a4a4 Merge branch 'DMU5' of https://github.com/Simisays/forge into DMU5 2022-08-31 15:39:09 +02:00
Simisays
ce3e0e278e commit 2022-08-31 15:38:41 +02:00
Simisays
64c38763dc Update urza_assembles_the_titans.txt 2022-08-31 12:29:02 +02:00
Simisays
1e6cc9b8df Update the_weatherseed_treaty.txt 2022-08-31 12:27:14 +02:00
Simisays
228c140159 update 2022-08-31 12:24:12 +02:00
Simisays
8c3a2ef92a update 2022-08-31 12:20:10 +02:00
Simisays
1259ca051a update 2022-08-31 11:54:15 +02:00
squee1968
4b2159ea27 Update fires_of_victory.txt 2022-08-31 02:26:13 -05:00
squee1968
f4a655cd38 Update coral_colony.txt 2022-08-31 02:21:23 -05:00
squee1968
dcfbd9e25e Update djinn_of_the_fountain.txt 2022-08-31 02:20:47 -05:00
tool4ever
0f0fef3933 Misc script fixes (#1430) 2022-08-31 06:38:49 +00:00
Simisays
1cdf81fa1f Update sworn_to_the_legion.txt 2022-08-31 07:09:49 +02:00
Northmoc
e3258b5890 MakeCardEffect.resolve allow for multiple "DefinedName" 2022-08-30 18:11:14 -04:00
Northmoc
b2593f2d84 viconia_nightsingers_disciple.txt 2022-08-30 17:54:15 -04:00
Anthony Calosa
0615cb3a53 Merge pull request #1417 from rikimbo/fix_adventure_card_reward_bonus
Adventure: Fix "Card Reward Bonus" to properly max at 3
2022-08-31 05:46:43 +08:00
Anthony Calosa
743a1b90ff Merge pull request #1422 from rikimbo/fix_adventure_dungeon_effect
Adventure: Fix Dungeon Effect that adds Creatures to the field
2022-08-31 05:46:15 +08:00
Simisays
9a11575a12 Update ulder_ravengard_marshal.txt 2022-08-30 21:26:39 +02:00
Simisays
ccce87f353 update 2022-08-30 21:23:51 +02:00
Simisays
e7566034bc Update tiefling_outcasts.txt 2022-08-30 19:28:47 +02:00
Simisays
892334eb93 Merge branch 'Card-Forge:master' into DoubleTeamBis 2022-08-30 19:18:33 +02:00
Northmoc
0aaac12b78 Merge pull request #1429 from Northmoc/tokenCard
delineate playtest "token card" from other MakeCard stuff
2022-08-30 13:01:33 -04:00
Simisays
3c83042c70 Update ulder_ravengard_marshal.txt 2022-08-30 19:01:21 +02:00
Simisays
a41f3603f9 Update sworn_to_the_legion.txt 2022-08-30 18:58:56 +02:00
Simisays
35b2ad8fc8 Update gnoll_hunting_party.txt 2022-08-30 18:57:56 +02:00
Simisays
b9bd074566 Update genasi_rabble_rouser.txt 2022-08-30 18:57:04 +02:00
paulsnoops
d4ccc3356e BoosterMustContain 2022-08-30 17:53:51 +01:00
Simisays
815fb74de8 Update MakeCardEffect.java 2022-08-30 18:52:54 +02:00
Northmoc
fa77ee62c0 delineate playtest "token card" from other MakeCard stuff 2022-08-30 12:46:35 -04:00
Simisays
8f2946ed37 Update MakeCardEffect.java 2022-08-30 18:40:02 +02:00
Simisays
56352c41a0 revert 2022-08-30 18:04:49 +02:00
Simisays
4790a199cb Update 2022-08-30 18:01:48 +02:00
Northmoc
ec2d34ea8c Merge pull request #1397 from Simisays/Stangg
DMC Stangg Echo Warrior
2022-08-30 11:53:13 -04:00
Simisays
1c404e37f6 Update stangg_echo_warrior.txt 2022-08-30 17:48:57 +02:00
Simisays
03790f9853 add 2022-08-30 17:21:29 +02:00
Simisays
acdbd3269c Merge branch 'Card-Forge:master' into DoubleTeamBis 2022-08-30 14:18:56 +02:00
paulsnoops
ada408e6f7 WIP: DMU Booster Draft 2022-08-30 12:09:57 +01:00
Simisays
aca3bbc167 update 2022-08-30 12:59:42 +02:00
Paul Hammerton
cef8309116 Merge pull request #1426 from paulsnoops/dmu_formats_update
Update formats for DMU
2022-08-30 11:35:20 +01:00
paulsnoops
da7ef5ab73 Update formats for DMU 2022-08-30 11:32:03 +01:00
Paul Hammerton
7248a29b57 Merge pull request #1425 from paulsnoops/plist_update
Update The List (PLIST) for DMU
2022-08-30 11:26:57 +01:00
paulsnoops
e66c120f43 fix_test 2022-08-30 11:23:54 +01:00
Simisays
5b40a461b3 DMU 6 Cards + 2 tokens (#1421) 2022-08-30 10:19:25 +00:00
Simisays
4f792282dd DMU 7 cards (#1418) 2022-08-30 10:19:00 +00:00
paulsnoops
06d4802cae PLIST update for DMU 2022-08-30 11:14:24 +01:00
Eric
5f0ae9eca1 Changed RegisteredPlayer.addExtraCardsOnBattlefield() so that when called multiple times, it adds to the existing set of cards each time. Fixes Adventure dungeon effects that add creatures to the battlefield. 2022-08-29 21:15:48 -05:00
squee1968
6374132295 Update djinn_of_the_fountain.txt 2022-08-29 14:06:20 -05:00
ZacharyDeganutti
547e7c12ba DMU: Implement 4 cards (#1410)
* DMU: Implement 4 cards

- Aether Channeler
- Cult Conscript
- Phoenix Chick
- Urborg Lhurgoyf

* Simplify counter attachment and fix copy paste remnants
2022-08-29 18:23:53 +03:00
tool4ever
b4c81fd154 Advanced Search for Artists (#1419)
* Advanced Search for Artists

* Clean up

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-08-29 17:45:09 +03:00
squee1968
ae18b848a6 5 DMU cards 2022-08-29 05:41:03 -05:00
Paul Hammerton
1aaeeab25d Merge pull request #1416 from JohnWilliams77/patch-38
Update Media Inserts.txt
2022-08-28 22:30:39 +01:00
Eric
c9bf08f0d2 Fix AdventurePlayer.bonusDeckCards() to properly cap out at 3. 2022-08-28 12:53:16 -05:00
Simisays
d8df024c2e Merge branch 'Card-Forge:master' into Stangg 2022-08-28 18:26:32 +02:00
Simisays
9456c64dea Merge branch 'Card-Forge:master' into DoubleTeamBis 2022-08-28 18:25:43 +02:00
JohnWilliams77
bc9eaa453f Update Media Inserts.txt 2022-08-28 16:38:26 +01:00
Hans Mackowiak
0c3536a561 Read ahead Saga Ability (#1413) 2022-08-28 17:28:55 +03:00
squee1968
17cf2c3945 Create leaf-crowned_visionary.txt (#1412) 2022-08-28 16:13:33 +03:00
Simisays
69a77412d9 Add files via upload (#1411) 2022-08-28 16:13:26 +03:00
squee1968
7b0f32be63 Rundvelt Hordemaster (#1408)
* Rundvelt Hordemaster

* Update rundvelt_hordemaster.txt

* Update rundvelt_hordemaster.txt

* Update rundvelt_hordemaster.txt
2022-08-28 09:21:56 +03:00
Simisays
c259f81b47 DMU 11 Cards (#1403)
* Create academy_loremaster.txt

* DMU 10 Cards

* Create academy_wall.txt

* Update anointed_peacekeeper.txt

* Update anointed_peacekeeper.txt

* Update battlewing_mystic.txt

* Update benalish_sleeper.txt

* Update battlewing_mystic.txt

* Update benalish_sleeper.txt

* Update balduvian_atrocity.txt

* Update anointed_peacekeeper.txt

* Update academy_wall.txt

* Update

* Update academy_loremaster.txt

* Update balduvian_atrocity.txt

* Update ivy_gleeful_spellthief.txt

* Update balduvian_atrocity.txt

* Update academy_wall.txt

* Update ivy_gleeful_spellthief.txt

* Update academy_loremaster.txt

* Update ivy_gleeful_spellthief.txt

* Update academy_loremaster.txt

* Update balduvian_atrocity.txt

* Update academy_loremaster.txt
2022-08-28 06:41:04 +03:00
Simisays
743fd20776 DMU 8 Cards (#1407)
* DMU 8 Cards

* Update colossal_growth.txt

* Update charismatic_vanguard.txt

* Update silverback_elder.txt

* Update silverback_elder.txt
2022-08-28 06:40:52 +03:00
tool4ever
a35ffbcb0f Rith, Liberated Primeval and support (#1409)
* Rith, Liberated Primeval and support

* Add AI hints

Co-authored-by: TRT <>
2022-08-28 06:40:44 +03:00
Simisays
4d6a0ff5db Update seatower_imprisonment.txt 2022-08-27 16:24:03 +02:00
Simisays
1fb056c4f6 update 2022-08-27 16:16:42 +02:00
Suthro
ba8df4cd71 DMU: Queen Allenal of Ruadach + 5 cards, 1 token (#1404)
DMU: Add scripts for 6 new DMU cards, plus 1 token

- Bortuk Bonerattle
- King Darien XLVIII
- Lagomos, Hand of Hatred
- Queen Allenal of Ruadach
- Sphinx of Clear Skies
- Uurg, Spawn of Turg

Token:

- 2/1 red Elemental creature with trample and haste
2022-08-27 14:08:48 +02:00
Simisays
5d410d9a61 DMU 5 Jumpstart Cards (#1399) 2022-08-27 14:00:57 +02:00
Paul Hammerton
e34d95260a Merge pull request #1406 from paulsnoops/dmu_dmc
DMU quick fix
2022-08-27 00:33:09 +01:00
paulsnoops
5b8e26d909 DMU quick fix 2022-08-27 00:16:49 +01:00
Paul Hammerton
bd5ccd250a Merge pull request #1405 from paulsnoops/dmu_dmc_edition_update
Update DMU & DMC editions
2022-08-26 23:56:27 +01:00
paulsnoops
1ca077cc57 add_all_but_two 2022-08-26 23:53:27 +01:00
paulsnoops
34fa0de248 WIP: Final DMU & DMC edition lists 2022-08-26 22:56:55 +01:00
Simisays
6c49ccbefc Update genasi_rabble_rouser.txt 2022-08-26 22:56:30 +02:00
Paul Hammerton
cf46dd9d00 Merge pull request #1330 from Northmoc/specialize
HBG: Specialize mechanic
2022-08-26 21:51:10 +01:00
Paul Hammerton
16211e7371 Merge pull request #1321 from Northmoc/ysnc_racketeer_boss
YSNC: Racketeer Boss
2022-08-26 21:49:16 +01:00
Northmoc
979805c920 EffectEffect.resolve support "ForgetOnCast" 2022-08-26 16:22:05 -04:00
Northmoc
d3acef97ad racketeer_boss.txt (thanks Simisays) 2022-08-26 16:22:04 -04:00
Northmoc
e2e3b58dea CostChooseColor.isUndoable and CostChooseColor.refund 2022-08-26 16:05:56 -04:00
Northmoc
6b551e0852 HumanCostDecision.visit(CostDiscard) handle corner case opened up by Specialize costs 2022-08-26 16:05:54 -04:00
Northmoc
2979f2ea87 TriggerSpecializes.java 2022-08-26 16:05:53 -04:00
Northmoc
0b0722f5f1 TriggerType.Specializes 2022-08-26 16:05:51 -04:00
Northmoc
fcb567f3f5 SetStateEffect.resolve run TriggerSpecializes 2022-08-26 16:05:50 -04:00
Northmoc
6538cf795e SetStateEffect.resolve allow Specialize in other zones 2022-08-26 16:05:49 -04:00
Northmoc
4335fce675 karlach_raging_tiefling.txt 2022-08-26 16:05:47 -04:00
Northmoc
cb978890bf lukamina_moon_druid.txt add Specializes trigger 2022-08-26 16:05:46 -04:00
Northmoc
3333038a99 Card.changeCardState remove unneeded note 2022-08-26 16:05:45 -04:00
Northmoc
708934a7a6 lblSpecialized for TriggerSpecializes 2022-08-26 16:05:43 -04:00
Northmoc
815f3c2493 Card.getFaceupCardStateName handle Specialized 2022-08-26 16:05:42 -04:00
Northmoc
e466400745 Card.keywordsToText remove "Specialize" from bad list 2022-08-26 16:05:40 -04:00
Northmoc
3e19ff2c48 CardFactoryUtil support condition detail for Specialize 2022-08-26 16:05:39 -04:00
Northmoc
3c35381a6a Card.keywordsToText add "Specialize" to don't parse list 2022-08-26 16:05:37 -04:00
Northmoc
7e289012a9 KeywordWithCost.cost avoid bad cost parse for complicated keywords 2022-08-26 16:05:35 -04:00
Northmoc
0298d0da9e SetStateEffect.resolve allow Unspecialize in any zone 2022-08-26 16:05:34 -04:00
Northmoc
5f4c4067e9 GameAction.changeZone avoid resetting state if Specialized 2022-08-26 16:05:32 -04:00
Northmoc
747c964f59 SetStateEffect.resolve setSpecialized as appropriate 2022-08-26 16:05:31 -04:00
Northmoc
55c51be63c lukamina_moon_druid.txt incomplete 2022-08-26 16:05:30 -04:00
Northmoc
3c6bb641e4 CardFactoryUtil.addSpellAbility add additional fields/parsing to Specialize keyword 2022-08-26 16:05:28 -04:00
Northmoc
b7d38c92fa CardFactory.copyCard copy Specialized boolean 2022-08-26 16:05:27 -04:00
Northmoc
afd193505c Card.changeCardState support "Unspecialize" 2022-08-26 16:05:26 -04:00
Northmoc
c7404192b3 Card.changeCardState ensure card can Specialize before changing state 2022-08-26 16:05:24 -04:00
Northmoc
25cfb3e0df Card.isSpecialized/setSpecialized/canSpecialize 2022-08-26 16:05:23 -04:00
Northmoc
33550baada Card.specialized private boolean 2022-08-26 16:05:21 -04:00
Northmoc
e6486fbdaf SetStateEffect.resolve clean up ChosenColor 2022-08-26 16:05:20 -04:00
Northmoc
b951478d24 SetStateEffect.getStackDescription support Specialize 2022-08-26 16:05:18 -04:00
Northmoc
b773dc59d5 CardFactoryUtil.addSpellAbility improve Specialize KW 2022-08-26 16:05:17 -04:00
Northmoc
a3238ee657 Cost.parseCostPart add ChooseColor 2022-08-26 16:05:15 -04:00
Northmoc
8a691a5114 CostChooseColor.java 2022-08-26 16:05:13 -04:00
Northmoc
6f3a117836 CostDiscard.canPay workaround for discarding card of chosen color when color not yet chosen 2022-08-26 16:05:12 -04:00
Northmoc
09208ba1be ForgeScript.cardStateHasProperty "AssociatedWithChosenColor" 2022-08-26 16:05:11 -04:00
Northmoc
2155fa0f2e PaymentDecision support CostChooseColor 2022-08-26 16:05:09 -04:00
Northmoc
dd262636a2 ICostVisitor add CostChooseColor 2022-08-26 16:05:08 -04:00
Northmoc
4970359dfa HumanCostDecision.visit for CostChooseColor 2022-08-26 16:05:07 -04:00
Northmoc
9492e4212c AiCostDecision.visit for CostChooseColor 2022-08-26 16:05:05 -04:00
Northmoc
67c285c9b0 Card.changeCardState support Specialize 2022-08-26 16:05:04 -04:00
Northmoc
c6d91f170f SetStateEffect.resolve add "Specialize" mode support 2022-08-26 16:05:03 -04:00
Northmoc
84384981be CardRules.Reader.getCard support additional faces for Specialize 2022-08-26 16:05:01 -04:00
Northmoc
4dbc3ae49a CardFactoryUtil.addSpellAbility rough in Specialize KW 2022-08-26 16:05:00 -04:00
Northmoc
3ad89fbca7 CardFactory.readCard handle Specialize states 2022-08-26 16:04:58 -04:00
Northmoc
58a96a6acc CardSplitType.Specialize 2022-08-26 16:04:57 -04:00
Northmoc
6d14daaa76 CardStateName for Specialize 2022-08-26 16:04:55 -04:00
Northmoc
8221dd73d2 Keyword.SPECIALIZE 2022-08-26 16:04:54 -04:00
Northmoc
5c14fd06e4 CardRules support multiple specialize faces 2022-08-26 16:04:53 -04:00
Northmoc
47333d29b4 Card.keywordsToText() add Specialize to list for now 2022-08-26 16:04:52 -04:00
Northmoc
9a6c45726f alora_merry_thief.txt don't fire deltrig if nothing affected 2022-08-26 16:04:50 -04:00
Northmoc
1e3a54e01d alora_rogue_companion.txt 2022-08-26 16:04:49 -04:00
Simisays
db51065962 Update sworn_to_the_legion.txt 2022-08-26 21:43:46 +02:00
Simisays
0cbed42dff Update CardFactoryUtil.java 2022-08-26 19:53:28 +02:00
Simisays
c47c9ffca7 Update CardFactoryUtil.java 2022-08-26 19:49:19 +02:00
Simisays
1c677adc1d Update CardFactoryUtil.java 2022-08-26 19:24:08 +02:00
Suthro
5a0d938965 Delete r_2_1_elemental_trample_haste.txt 2022-08-26 12:18:23 -05:00
Suthro
f1ed6b64ff Delete uurg_spawn_of_turg.txt 2022-08-26 12:18:17 -05:00
Suthro
c93a7a817a Delete sphinx_of_clear_skies.txt 2022-08-26 12:18:10 -05:00
Suthro
88025370b3 Delete queen_allenal_of_ruadach.txt 2022-08-26 12:18:02 -05:00
Suthro
d56d048cbb Delete lagomos_hand_of_hatred.txt 2022-08-26 12:17:56 -05:00
Suthro
59209d5526 Delete king_darien_xlviii.txt 2022-08-26 12:17:49 -05:00
Suthro
a926402f82 Delete bortuk_bonerattle.txt 2022-08-26 12:17:17 -05:00
Suthro
53d78244b1 DMU: Queen Allenal + 5 cards
DMU: Add scripts for 6 new DMU cards, plus 1 token

- Bortuk Bonerattle
- King Darien XLVIII
- Lagomos, Hand of Hatred
- Queen Allenal of Ruadach
- Sphinx of Clear Skies
- Uurg, Spawn of Turg

Token:

- 2/1 red Elemental creature with trample and haste
2022-08-26 12:16:45 -05:00
Suthro
e33d4931c6 Update rona_sheoldreds_faithful.txt 2022-08-26 10:37:21 -05:00
Simisays
77ed724edb DMC 8 cards + 1 Fix (#1388) 2022-08-26 17:30:05 +02:00
Simisays
4f656a004e Update CardFactoryUtil.java 2022-08-26 17:28:34 +02:00
Simisays
d469fa2934 update 2022-08-26 16:55:38 +02:00
Grimm
f8710974e3 reworkd adventure main call
added particle effects
2022-08-26 16:43:36 +02:00
Suthro
895cffffde DMC: Bladewing, Deathless Tyrant + 6 cards (#1394) 2022-08-26 10:12:22 +02:00
Simisays
0dac718115 DMC 6 Cards (#1389)
* Update

* Update

* update

* Update gerrards_hourglass_endant.txt

* Update stangg_echo_warrior.txt

* Update gerrards_hourglass_endant.txt

* Update stangg_echo_warrior.txt

* Update stangg_echo_warrior.txt

* Update tobias_conqueror_of_bad_luck.txt

* Update torsten_founder_of_benalia.txt

* Update orca_siege_demon.txt

* Delete stangg_echo_warrior.txt

* Update gerrards_hourglass_endant.txt
2022-08-26 06:42:38 +03:00
Suthro
a8f766d7fb DMU: Golden Argosy + 5 cards
DMU: Add scripts for 6 new DMU cards

- Archangel of Wrath
- Aron, Benalia's Ruin
- Garna, Bloodfist of Keld
- Golden Argosy
- Rona, Sheoldred's Faithful
- Rona's Vortex
2022-08-25 16:05:01 -05:00
tool4ever
6c0b3e97ed Some card fixes (#1401) 2022-08-25 22:38:55 +02:00
Paul Hammerton
1faece5e50 Merge pull request #1400 from paulsnoops/dmu_dmc_edition_updates
DMU & DMC edition updates
2022-08-25 19:48:41 +01:00
Simisays
b4c43d3523 Update stangg_echo_warrior.txt 2022-08-25 20:39:55 +02:00
paulsnoops
eaacf0f0f0 DMU & DMC edition updates 2022-08-25 19:37:25 +01:00
Simisays
275b6ad5df Update stangg_echo_warrior.txt 2022-08-25 20:00:37 +02:00
Simisays
8d9fba0ee0 Update CardFactoryUtil.java 2022-08-25 18:23:11 +02:00
Simisays
257dbc6b51 Update CardFactoryUtil.java 2022-08-25 18:22:27 +02:00
Simisays
0639e0b908 Update CardFactoryUtil.java 2022-08-25 18:22:03 +02:00
Simisays
b43b1401e2 Update CardFactoryUtil.java 2022-08-25 18:21:39 +02:00
Simisays
f645c672ab Update CardFactoryUtil.java 2022-08-25 18:21:14 +02:00
Simisays
32be4628f2 Update CardFactoryUtil.java 2022-08-25 18:20:16 +02:00
Simisays
0ff9a3505b Update CardFactoryUtil.java 2022-08-25 18:19:41 +02:00
Simisays
d8db68796b Update CardFactoryUtil.java 2022-08-25 18:18:53 +02:00
Simisays
c12c6645f9 Update CardFactoryUtil.java 2022-08-25 18:03:14 +02:00
Simisays
77b752cf53 DMU 9 Cards + Phyresis counter support (#1395)
* update

* update

* Create wingmantle_chaplain.txt

* Update vohar_vodalian_desecrator.txt

* Update vohar_vodalian_desecrator.txt

* Update jodah_the_unifier.txt

* Delete walking_bulwark.txt

* Update weatherlight_compleated.txt

* Update wingmantle_chaplain.txt

* Update vohar_vodalian_desecrator.txt

* Update vohar_vodalian_desecrator.txt

* Update zar_ojanen_scion_of_efrava.txt

* Update wingmantle_chaplain.txt

* Update vohar_vodalian_desecrator.txt

* update

* Update vesuvan_duplimancy.txt

* Update vesuvan_duplimancy.txt

* Update vohar_vodalian_desecrator.txt

* Update weatherlight_compleated.txt

* Update wingmantle_chaplain.txt

* Update writhing_necromass.txt

* Update zar_ojanen_scion_of_efrava.txt
2022-08-25 16:54:59 +03:00
Agetian
4b40ff9a36 - Fix last state battlefield check on replacement abilities such as Temple of the Dragon Queen (#1398) 2022-08-25 14:24:42 +03:00
Simisays
a79c98173d Update 2022-08-25 13:22:16 +02:00
Simisays
e3fda367db update 2022-08-25 11:06:34 +02:00
Simisays
64d4004bdc Create champions_of_tyr.txt 2022-08-25 10:45:05 +02:00
Simisays
d6900e249d update 2022-08-25 10:29:59 +02:00
Simisays
9b350cb9ee Create sworn_to_the_legion.txt 2022-08-25 10:28:16 +02:00
Simisays
a5caf799de Merge branch 'Card-Forge:master' into DoubleTeamBis 2022-08-25 08:45:03 +02:00
Simisays
a4d700db7a stangg 2022-08-25 08:37:53 +02:00
Simisays
bafa5d2b16 HBG 4 Cards (#1338)
* Add files via upload

* Update flames_of_moradin.txt

* Update water_weird.txt

* Update water_weird.txt

* Update water_weird.txt

* Update water_weird.txt

* Update mind_spike.txt

* Update yuan_ti_scaleshield.txt

* Update water_weird.txt

* Update mind_spike.txt

* Update mind_spike.txt

* Update mind_spike.txt

* Update flames_of_moradin.txt

* Update flames_of_moradin.txt

Targeting a Token still makes Forge Crash

* Update flames_of_moradin.txt

* Update water_weird.txt

* Update yuan_ti_scaleshield.txt

* update

* Update flames_of_moradin.txt

* Update flames_of_moradin.txt

* Create arcane_archery.txt

* Update arcane_archery.txt

* Update water_weird.txt

* Delete flames_of_moradin.txt

* Update yuan_ti_scaleshield.txt

* Update water_weird.txt
2022-08-25 08:11:30 +03:00
Simisays
920b9d3177 update 2022-08-24 22:59:07 +02:00
Simisays
5ef1637238 Update 2022-08-24 22:56:29 +02:00
Suthro
9e61916405 DMU: 5 cards + Ingenuity counter support for Jhoira (#1374)
* DMU: 5 cards + Ingenuity Counter support for Jhoira

DMU: Add scripts for 5 DMU cards, and mdofiy CounterEnumType.java to recognize Ingenuity counters for new Jhoira

- Balmor, Battlemage Captain
- Cut Down
- Danitha, Benalia's Hope
- Elas il-Kor, Sadistic Pilgrim
- Ertai Resurrected

* Update danitha_benalias_hope.txt

Fixed CARDNAME/NICKNAME disparity from Oracle text

* Update ertai_resurrected.txt

Added missing Flash keyword in Oracle text
2022-08-24 22:17:59 +03:00
Simisays
cf3294306a DMC 6 More (#1381) 2022-08-24 20:49:39 +02:00
mctubbies
ed3324c863 Card script for Meria, Scholar of Antiquity (#1393) 2022-08-24 20:48:53 +02:00
Simisays
b35eec7c55 DMC 7 cards (#1359) 2022-08-24 18:13:05 +02:00
Simisays
8bbabdc868 [SQUASH MERGE] HBG 5 cards (#1327) 2022-08-24 14:36:17 +02:00
Simisays
e87ebf2de7 Update 2022-08-24 10:12:38 +02:00
Paul Hammerton
46b4a6a63f Merge pull request #1390 from paulsnoops/edition_updates
DMU & DMC edition updates
2022-08-23 16:34:00 +01:00
paulsnoops
e548808b08 DMU & DMC edition updates 2022-08-23 16:27:26 +01:00
Simisays
19ee29c628 update 2022-08-23 16:36:00 +02:00
Paul Hammerton
bebb143eb2 Merge pull request #1387 from paulsnoops/test_fix
Temporary fix for failing CardDbCardMockTestCase
2022-08-23 00:14:00 +01:00
paulsnoops
e3c92451e2 idkwhatthisdoes 2022-08-23 00:10:27 +01:00
paulsnoops
248c1c6603 date 2022-08-22 23:56:41 +01:00
paulsnoops
8eee9da612 date 2022-08-22 23:52:29 +01:00
paulsnoops
455f3fbc67 newtest2 2022-08-22 23:45:07 +01:00
paulsnoops
b7d3057da9 newtest 2022-08-22 23:40:33 +01:00
paulsnoops
9e3ada1905 Fix for failing CardDbCardMockTestCase 2022-08-22 23:10:22 +01:00
Paul Hammerton
ded27a6d3f Merge pull request #1386 from paulsnoops/sld_update
SLD August Super Drop
2022-08-22 22:55:03 +01:00
paulsnoops
402520d357 undo-test 2022-08-22 22:54:31 +01:00
paulsnoops
74b568524f test 2022-08-22 22:46:52 +01:00
paulsnoops
b66663a950 SLD August Super Drop 2022-08-22 22:12:09 +01:00
Chris H
ffd0c91843 Merge pull request #1384 from paulsnoops/p30h
Add P30H edition file
2022-08-22 12:35:43 -04:00
paulsnoops
221addc6bc Add P30H edition file 2022-08-22 17:18:16 +01:00
Paul Hammerton
a5f5d1fffb Merge pull request #1385 from paulsnoops/fix_test
Fix CardEditionCollectionCardMockTestCase again
2022-08-22 17:13:47 +01:00
paulsnoops
079ab6fa0c Fix CardEditionCollectionCardMockTestCase again 2022-08-22 17:08:13 +01:00
Grimm
1a112ae7c6 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-08-22 14:46:49 +02:00
Grimm
6d009f552b reworkd adventure main call
added particle effects
2022-08-22 14:46:34 +02:00
tool4ever
f9a1485b45 Ramses, Assassin Lord and support (#1382)
Co-authored-by: TRT <>
2022-08-21 22:25:26 +03:00
Suthro
e80ecf4e24 DMU: Karn, Living Legacy + Powerstone token, engine support (#1376)
* DMU: Karn, Living Legacy, Powerstone token, and engine support

DMU: Add script for Karn, Living Legacy; Powerstone token; and engine support for mana restriction "can't be spent to cast nonartifact spells"

* Update c_a_powerstone.txt

* Add Powerstone to TypeLists.txt

* Update TypeLists.txt
2022-08-21 22:12:57 +03:00
t-w-o-s-a-t
795a796983 Update de-DE.properties (#1380)
translated lblChooseFromSpellbook
2022-08-21 16:21:07 +03:00
Simisays
6eb6b7e36b 6 more DMC + 2 Tokenscripts (#1372)
* 5 more DMC

* Update the_reaver_cleaver.txt

* Update and rename rasputin_the_neiromancer.txt to rasputin_the_oneiromancer.txt

* Rename w_2_2_knight_protectionred.txt to w_2_2_knight_pro_red.txt

* Rename two-headed_hellkite.txt to two_headed_hellkite.txt

* Update rasputin_the_oneiromancer.txt

* Egg

* Update xira_the_golden_sting.txt

* Update xira_the_golden_sting.txt

* Update the_reaver_cleaver.txt

* Update xira_the_golden_sting.txt

* Update rasputin_the_oneiromancer.txt

* Update mana_cannons.txt

* Update the_reaver_cleaver.txt

* Update xira_the_golden_sting.txt

* Update the_reaver_cleaver.txt

* Update zeriam_golden_wind.txt
2022-08-21 16:20:43 +03:00
Northmoc
bb52a6b2bb DMC: Jared Carthalion and support (#1368)
* add text to all color tokens

* all_3_3_kavu_trample.txt

* ColorSet.isAllColors boolean

* ForgeScript.cardStateHasProperty "AllColors"

* CountersPutEffect.resolvePerType "CounterNumPerDefined"

* jared_carthalion.txt
2022-08-21 16:20:21 +03:00
Hans Mackowiak
ce89121ba3 Card: add Stun Counter Effect (#1379) 2022-08-21 13:59:13 +03:00
Paul Hammerton
8503131782 Merge pull request #1378 from JohnWilliams77/patch-37
Update Secret Lair Drop Series.txt
2022-08-21 11:45:52 +01:00
Northmoc
4b8fea8f70 PlayerControllerHuman.DevModeCheats.addCardToZone set "back side" as appropriate when adding cards to play with dev mode (#1351) 2022-08-21 11:37:22 +02:00
JohnWilliams77
c40f37fe5a Update Secret Lair Drop Series.txt 2022-08-21 09:40:38 +01:00
Paul Hammerton
1bc51fa8de Merge pull request #1377 from paulsnoops/dmu_dmc_edition_updates
DMU & DMC edition updates
2022-08-21 08:53:45 +01:00
paulsnoops
38cbaccff9 DMU & DMC edition updates 2022-08-21 08:49:24 +01:00
Paul Hammerton
93a33310a9 Migrate card scripts from released sets (#1370) 2022-08-21 07:58:32 +03:00
Northmoc
88b866d967 HBG: Follow the Tracks and support (#1328)
* follow_the_tracks.txt

* GameAction.changeZone add made cards to inbound tokens for rep effects

* MakeCardEffect.resolve support "Spellbook" and "AtRandom" for Conjure stuff

* tome_of_the_infinite.txt streamline

* MakeCardEffect.resolve clean up unused params

* MakeCardEffect Spellbook choice prompt
2022-08-21 07:57:30 +03:00
Paul Hammerton
3371b8cc6f Merge pull request #1373 from paulsnoops/update_archived_formats
Update archived formats for DMU
2022-08-20 12:44:51 +01:00
paulsnoops
652d91dd7a Update archived formats for DMU 2022-08-20 12:38:57 +01:00
Paul Hammerton
a78849c59c Merge pull request #1371 from paulsnoops/dmu_dmc_edition_updates
DMU & DMC edition updates
2022-08-20 11:50:53 +01:00
paulsnoops
cf59db94ff DMU & DMC edition updates 2022-08-20 11:42:22 +01:00
Paul Hammerton
d56668f10a Merge pull request #1356 from Suthro/master
DMU: 6 new cards, 1 token script
2022-08-20 10:56:17 +01:00
Paul Hammerton
5de958d254 Merge pull request #1366 from Northmoc/baird
DMU: Baird, Argivian Recruiter and support
2022-08-20 10:56:01 +01:00
Paul Hammerton
404c11977a Merge pull request #1367 from Northmoc/fixes
Random card fixes
2022-08-20 10:55:34 +01:00
Paul Hammerton
49a4caafcc Merge pull request #1369 from paulsnoops/fix_edition
Fix PLG22 edition
2022-08-20 10:53:09 +01:00
paulsnoops
c65ca778cf Fix PLG22 edition 2022-08-20 10:49:30 +01:00
Anthony Calosa
53e1e55c14 update textratypist 2022-08-20 12:22:44 +08:00
Northmoc
37479b109d kaito_shizuki.txt improve AI and Oracle 2022-08-19 22:56:51 -04:00
Northmoc
2599165433 growing_rites_of_itlimoc_itlimoc_cradle_of_the_sun.txt use IsPresent 2022-08-19 21:22:28 -04:00
Northmoc
c59c0b82b8 CardProperty.cardHasProperty "powerGTbasePower" 2022-08-19 20:31:53 -04:00
Northmoc
e976fd25c7 baird_argivian_recruiter.txt 2022-08-19 20:31:23 -04:00
Paul Hammerton
f2c3e65956 Merge pull request #1365 from paulsnoops/update_the_list
Update The List (PLIST) for CLB
2022-08-19 23:50:48 +01:00
paulsnoops
90c006e241 Update The List (PLIST) for CLB 2022-08-19 23:39:07 +01:00
Paul Hammerton
e8c254ce2d Merge pull request #1364 from paulsnoops/post_the_enchanter
Post the Enchanter
2022-08-19 23:02:46 +01:00
paulsnoops
4ff2ec4ca9 Post the Enchanter 2022-08-19 22:58:55 +01:00
Northmoc
5a874310dc garruk_wrath_of_the_wilds.txt streamline, add AI hints 2022-08-19 17:03:54 -04:00
Northmoc
4896041125 codie_vociferous_codex.txt add Desc to static 2022-08-19 17:03:41 -04:00
Suthro
9d7aa0ca5a Update solkanar_the_tainted.txt 2022-08-19 16:00:34 -05:00
Suthro
ce49d02bc8 Update zur_eternal_schemer.txt 2022-08-19 15:59:49 -05:00
Suthro
8d244ce024 Update solkanar_the_tainted.txt 2022-08-19 15:58:34 -05:00
Suthro
d9f066009c Update solkanar_the_tainted.txt 2022-08-19 15:58:01 -05:00
Suthro
83918c2db7 Update solkanar_the_tainted.txt 2022-08-19 15:57:24 -05:00
Suthro
8c932d86d3 Update sheoldred_the_apocalypse.txt 2022-08-19 15:56:54 -05:00
Suthro
6cd5bee51c Update nemata_primeval_warden.txt 2022-08-19 15:55:23 -05:00
Suthro
187acaf4a5 Update astor_bearer_of_blades.txt 2022-08-19 15:50:36 -05:00
Suthro
fd81d0d7a8 Update zur_eternal_schemer.txt 2022-08-19 15:45:10 -05:00
Suthro
99ab4cf189 Update solkanar_the_tainted.txt 2022-08-19 15:36:51 -05:00
Suthro
63aace2ab4 Update squee_dubious_monarch.txt 2022-08-19 15:35:45 -05:00
Suthro
0ab91e8a15 Update zur_eternal_schemer.txt 2022-08-19 15:33:21 -05:00
Suthro
efa81a38b2 Update astor_bearer_of_blades.txt 2022-08-19 15:32:01 -05:00
Suthro
7148c0e407 Update nemata_primeval_warden.txt 2022-08-19 13:58:08 -05:00
Suthro
4295fc3448 Update the_raven_man.txt 2022-08-19 13:34:27 -05:00
Suthro
d58704062b Update herd_migration.txt 2022-08-19 13:33:35 -05:00
Suthro
d018101763 Update braids_arisen_nightmare.txt 2022-08-19 13:32:51 -05:00
Suthro
c0e9cfc733 Update braids_arisen_nightmare.txt 2022-08-19 13:30:51 -05:00
Suthro
8306336ab0 Update braids_arisen_nightmare.txt 2022-08-19 13:19:01 -05:00
Suthro
875148ad08 Update ajani_sleeper_agent.txt 2022-08-19 13:05:30 -05:00
Suthro
f4575ce062 Update nemata_primeval_warden.txt 2022-08-19 11:48:11 -05:00
Suthro
83b2f61d55 Update jhoira_ageless_innovator.txt 2022-08-19 11:47:53 -05:00
Suthro
62fe018875 Update braids_arisen_nightmare.txt 2022-08-19 11:47:26 -05:00
Suthro
6d8461f6c2 Update ajani_sleeper_agent.txt 2022-08-19 11:47:05 -05:00
Suthro
4947498469 Update squee_dubious_monarch.txt 2022-08-19 11:46:32 -05:00
Anthony Calosa
bbc2491720 Merge pull request #1362 from kevlahnota/master
show messages for doppelganger if player is using custom decks
2022-08-19 22:01:24 +08:00
Anthony Calosa
700d2182cb remove parenthesis 2022-08-19 21:56:52 +08:00
Anthony Calosa
520876f0de show messages for doppelganger if player is using custom decks in adventure 2022-08-19 21:55:05 +08:00
Anthony Calosa
1a70d45d6a Merge pull request #1361 from kevlahnota/master
Adventure Custom StarterDecks
2022-08-19 21:33:08 +08:00
Anthony Calosa
797ff625db Adventure Custom StarterDecks
- add support loading custom starterdeck in adventure mode, custom->starterdecks on user folder before starting Forge
2022-08-19 21:28:23 +08:00
Paul Hammerton
c5e4fb93c6 Merge pull request #1358 from paulsnoops/edition_updates
Some edition updates
2022-08-19 09:05:36 +01:00
paulsnoops
bb9ec4e982 Some edition updates 2022-08-19 09:02:08 +01:00
Suthro
c419c1748d Update and rename nemata_primal_guardian.txt to nemata_primeval_warden.txt 2022-08-19 00:41:41 -05:00
Suthro
cfd05b287c Update herd_migration.txt 2022-08-19 00:00:30 -05:00
Suthro
a21c49203c DMU: Braids, Arisen Nightmare + 4 cards
DMU: Add scripts for 5 DMU cards

- Astor, Bearer of Blades
- Braids, Arisen Nightmare
- Herd Migration
- Nemata, Primal Guardian
- Sheoldred, the Apocalypse
2022-08-18 23:56:39 -05:00
Suthro
9f223396b7 Merge branch 'Card-Forge:master' into master 2022-08-18 17:46:31 -05:00
Anthony Calosa
008d5bdbaa Fix test 2022-08-19 05:48:01 +08:00
Suthro
b794e045de Update ajani_sleeper_agent.txt 2022-08-18 14:51:46 -05:00
Suthro
570a3ea770 Merge branch 'Card-Forge:master' into master 2022-08-18 14:50:45 -05:00
Suthro
f9f1ef2268 DMU: 6 new cards, 1 token
DMU: Add scripts for six new DMU legends, plus one token script

- Ajani, Sleeper Agent
- Jhoira, Ageless Innovator
- Sol'Kanar the Tainted
- Squee, Dubious Monarch
- The Raven Man
- Zur, Eternal Schemer
- 1/1 black Bird token, can't block
2022-08-18 14:49:05 -05:00
Paul Hammerton
1aed30c499 Merge pull request #1352 from paulsnoops/edition_updates
Edition updates: DMU, DMC, DMR, P30A, 40K
2022-08-18 20:14:56 +01:00
paulsnoops
7dcae6e98c tokens 2022-08-18 20:05:35 +01:00
paulsnoops
6b937c358f couple more cards 2022-08-18 19:51:05 +01:00
paulsnoops
34e7bba2c1 more cards 2022-08-18 19:46:06 +01:00
paulsnoops
12975c512b date 2022-08-18 19:28:33 +01:00
paulsnoops
48589fd06b more cards 2022-08-18 19:27:34 +01:00
paulsnoops
780bf9f5d5 WIP: DMU, editions updates & new editions 2022-08-18 18:55:16 +01:00
tool4ever
427d0c3397 Card fixes (#1350) 2022-08-18 14:56:47 +02:00
Grimm
b3d7d26ac3 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure
 Conflicts:
	forge-gui-mobile/src/forge/adventure/stage/WorldStage.java
2022-08-18 14:21:26 +02:00
Grimm
f14771b09a added usable items 2022-08-18 14:18:19 +02:00
Anthony Calosa
6d23bb4184 Merge pull request #1349 from kevlahnota/master
crash fix using textratypist on Android
2022-08-18 15:44:17 +08:00
Anthony Calosa
89319f95ab crash fix using textratypist on Android 2022-08-18 15:39:51 +08:00
Anthony Calosa
a60ba55986 Merge pull request #1348 from kevlahnota/master
revert flip
2022-08-18 07:19:50 +08:00
Anthony Calosa
0349f45a9b revert flip 2022-08-18 07:19:00 +08:00
Anthony Calosa
11de68f123 Merge pull request #1347 from kevlahnota/master
fix autosave flip preview
2022-08-18 04:39:46 +08:00
Anthony Calosa
c595cf7896 fix autosave flip preview
- the screenshot is already flipped to render correctly so we don't need to flip it again
2022-08-18 04:33:59 +08:00
Anthony Calosa
57362c1ef8 Merge pull request #1346 from kevlahnota/master
fix save preview for some android devices
2022-08-18 03:30:12 +08:00
Anthony Calosa
8493c151c7 fix save preview for some android devices
- take screenshot and redraw it on a new framebuffer so it renders properly on some android devices that don't support RGBA framebuffer directly.
2022-08-18 03:22:09 +08:00
Grimm
d022fdc507 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-08-17 16:58:33 +02:00
Grimm
1656541254 expanded teleport actor on maps added capitals 2022-08-17 16:58:11 +02:00
Grimm
745e9bc3ee expanded teleport actor on maps added capitals 2022-08-17 16:57:56 +02:00
Paul Hammerton
c6bec5f7a1 Merge pull request #1345 from JohnWilliams77/patch-36
Update Secret Lair Drop Series.txt
2022-08-17 11:03:07 +01:00
JohnWilliams77
4c75268fe1 Update Secret Lair Drop Series.txt 2022-08-17 10:14:43 +01:00
Paul Hammerton
dc0763a36c Merge pull request #1341 from JohnWilliams77/patch-35
Create Summer Vacation Promos 2022.txt
2022-08-17 08:27:48 +01:00
Anthony Calosa
c157ee709a Merge pull request #1344 from kevlahnota/master
add TextraTypist
2022-08-17 13:52:36 +08:00
Anthony Calosa
003ec159c8 unused import 2022-08-17 13:37:06 +08:00
Anthony Calosa
7170b2d282 add TextraTypist
for Font Effects, Styles, etc..
2022-08-17 13:32:17 +08:00
Anthony Calosa
03e2c8b572 Merge pull request #1342 from t-w-o-s-a-t/master
Update de-DE.properties
2022-08-17 08:31:59 +08:00
Anthony Calosa
f8dc0f6ff7 Update sharpshooter_elf.txt 2022-08-17 08:27:04 +08:00
t-w-o-s-a-t
00480d95fc Update de-DE.properties
found a changed var-name
2022-08-16 17:44:49 +02:00
JohnWilliams77
11fb6826ae Create Summer Vacation Promos 2022.txt 2022-08-16 12:58:18 +01:00
Anthony Calosa
04a6847576 Merge pull request #1339 from kevlahnota/master
fix captured image
2022-08-16 14:36:24 +08:00
Anthony Calosa
49e1df5682 .. 2022-08-16 14:32:46 +08:00
Anthony Calosa
9a0a5e3c85 Merge branch 'master' into newmaster 2022-08-16 14:31:49 +08:00
Anthony Calosa
aa1d639855 fix captured image
- on some android devices, it doesn't support RGBA Framebuffer, this should fix the lastScreenTexture rendering black
2022-08-16 14:20:10 +08:00
Paul Hammerton
f8b7a74518 Merge pull request #1337 from JohnWilliams77/patch-34
Update Secret Lair Drop Series.txt
2022-08-15 16:52:06 +01:00
JohnWilliams77
7524bc675f Update Secret Lair Drop Series.txt 2022-08-15 10:36:14 +01:00
Anthony Calosa
dd217cf81a Merge pull request #1336 from kevlahnota/master
prevent NPE
2022-08-15 08:28:06 +08:00
Anthony Calosa
1f9d212dfd prevent NPE 2022-08-15 08:25:15 +08:00
Paul Hammerton
af1a05df45 Merge pull request #1335 from paulsnoops/typo
Small editions clean up
2022-08-14 20:51:35 +01:00
paulsnoops
98f171a75a Small editions clean up 2022-08-14 20:48:06 +01:00
Paul Hammerton
252254b343 Merge pull request #1334 from JohnWilliams77/patch-33
Update Secret Lair Drop Series.txt
2022-08-14 20:19:43 +01:00
Anthony Calosa
08c4017dad fix Nezahal, Primal Tide return abililty 2022-08-14 18:00:35 +08:00
JohnWilliams77
6393f68556 Update Secret Lair Drop Series.txt 2022-08-14 10:40:23 +01:00
Anthony Calosa
8599c60177 Update StartScene.java 2022-08-14 10:12:09 +08:00
Anthony Calosa
be6b9ecca3 Update SaveLoadScene.java 2022-08-14 10:04:34 +08:00
Anthony Calosa
c625cf8ef4 Merge pull request #1333 from kevlahnota/master
set 250 as minimum value for temp health boost
2022-08-14 09:48:03 +08:00
Anthony Calosa
6ad81080fc set 250 as minimum value for temp health boost 2022-08-14 09:32:37 +08:00
Anthony Calosa
f1ccf6c3cd Merge pull request #1332 from tool4ever/canttargetfix
CantTarget "as you cast it" is checked on resolve
2022-08-14 09:21:54 +08:00
Paul Hammerton
211ae630d4 Merge pull request #1331 from JohnWilliams77/patch-32
Update 30th Anniversary Promos.txt
2022-08-13 21:52:13 +01:00
JohnWilliams77
3323437fe2 Update 30th Anniversary Promos.txt 2022-08-13 21:17:53 +01:00
tool4EvEr
98215c324c CantTarget "as you cast it" is checked on resolve 2022-08-13 21:57:24 +02:00
JohnWilliams77
7ec155496e Update 30th Anniversary Promos.txt 2022-08-13 13:26:38 +01:00
Anthony Calosa
fcecec09d6 Update InnScene.java
move computation on scene enter
2022-08-13 20:17:36 +08:00
Anthony Calosa
2952fc9692 Merge pull request #1212 from Card-Forge/autoHealWhenEnteringTowns
Auto heal when entering towns
2022-08-13 18:15:37 +08:00
Anthony Calosa
f3f9c222b0 Merge branch 'master' into autoHealWhenEnteringTowns 2022-08-13 17:53:30 +08:00
Anthony Calosa
b9a3189849 Update GameHUD.java 2022-08-13 17:31:40 +08:00
Anthony Calosa
5e5117315b colored lifepoints 2022-08-13 17:26:14 +08:00
Anthony Calosa
7d13763219 Update zh-CN.properties 2022-08-13 16:59:32 +08:00
Anthony Calosa
f9552fd6f7 Update pt-BR.properties 2022-08-13 16:59:00 +08:00
Anthony Calosa
a07787e6d5 Update ja-JP.properties 2022-08-13 16:58:21 +08:00
Anthony Calosa
2153c3d8aa Update it-IT.properties 2022-08-13 16:57:33 +08:00
Anthony Calosa
6543fa1ed8 Update es-ES.properties 2022-08-13 16:56:52 +08:00
Anthony Calosa
7d4c9f1b53 Update de-DE.properties 2022-08-13 16:48:48 +08:00
Anthony Calosa
140345a31a Update AiController.java 2022-08-13 16:35:28 +08:00
Paul Hammerton
2109d7c436 Merge pull request #1325 from paulsnoops/oops
Fix for A-Druidic Ritual and Signature Spells
2022-08-13 09:26:40 +01:00
Anthony Calosa
cf1e5fc856 fix heal 2022-08-13 14:33:41 +08:00
Anthony Calosa
22365a3c10 Update AdventurePlayer.java 2022-08-13 14:24:22 +08:00
Anthony Calosa
661600d680 Update AdventurePlayer.java 2022-08-13 14:23:07 +08:00
Anthony Calosa
ece2fc575f Update AdventurePlayer.java 2022-08-13 14:19:52 +08:00
Anthony Calosa
9651812b0d Update TileMapScene.java 2022-08-13 14:15:45 +08:00
Anthony Calosa
86927e8076 add simple check for full heal 2022-08-13 14:13:11 +08:00
Anthony Calosa
007757187a Update Forge.java
unused import
2022-08-13 13:11:36 +08:00
Anthony Calosa
f1185707ee Update InnScene.java
add default message if localizer can't find the translation
2022-08-13 13:10:32 +08:00
Anthony Calosa
659f20edff Update TileMapScene.java 2022-08-13 13:07:42 +08:00
Anthony Calosa
f33ec785b0 move the code to tilemapscene 2022-08-13 13:05:44 +08:00
Anthony Calosa
60347103ec Merge pull request #1329 from kevlahnota/master
prevent NPE when overriding CardView for HumanCostDecision
2022-08-13 09:15:26 +08:00
Anthony Calosa
e8152ef621 NPE check on dispose (this is called also on destroy event) 2022-08-13 09:12:02 +08:00
Anthony Calosa
5af8a3939a prevent NPE when overriding CardView for HumanCostDecision 2022-08-13 08:41:51 +08:00
Anthony Calosa
5cd838a354 Merge pull request #1326 from kevlahnota/master
update Flashback Zone on Mobile
2022-08-12 08:49:15 +08:00
Anthony Calosa
c49521e063 update Flashback Zone on Mobile 2022-08-12 08:44:59 +08:00
Anthony Calosa
0dc5ff4a57 Merge pull request #1320 from tool4ever/paymanafix
payManaOptional fix
2022-08-12 08:06:15 +08:00
paulsnoops
bd00781bd9 Fix for A-Druidic Ritual and Signature Spells 2022-08-11 19:51:38 +01:00
Paul Hammerton
90f5845dcd Merge pull request #1324 from Northmoc/fix
sparas_bodyguard.txt fixup
2022-08-11 19:16:49 +01:00
Paul Hammerton
b1abebcc60 Merge pull request #1316 from paulsnoops/11_08_22_rebalanced
Alchemy Rebalancing for August 11, 2022
2022-08-11 19:14:30 +01:00
tool4EvEr
ecd3e66c5e Fixes 2022-08-11 19:15:01 +02:00
Northmoc
7b5da7420d sparas_bodyguard.txt fixup 2022-08-11 12:49:35 -04:00
Paul Hammerton
6e129c9584 Merge pull request #1322 from Northmoc/ysnc_choice
YSNC: choice_of_fortunes.txt
2022-08-11 17:48:37 +01:00
Northmoc
14066db56a choice_of_fortunes.txt 2022-08-11 12:07:08 -04:00
Simisays
62053cfeab [Squash Merge] YSNC 12 cards (#1274)
* Create xanders_wake.txt

* Create shattering_finale.txt

* Create giant_regrowth.txt

* Create verdant_rejuvenation.txt

* Create vladimir_and_godfrey.txt

* Create wizened_githzerai.txt

* Update wizened_githzerai.txt

* Update vladimir_and_godfrey.txt

* Update vladimir_and_godfrey.txt

* Patch

* Create graven_archfiend.txt

* Create sparas_bodyguard.txt

* add

* Riveteers Provocateur

Works but Blitz cost appears double

* Delete .gitignore

* Revert "Delete .gitignore"

This reverts commit 7efbc47330.

* Effluence Devourer

I can't get the tokens to not have 0/0 pt

* Update effluence_devourer.txt

* Update effluence_devourer.txt

* Update effluence_devourer.txt

Card works now.
SVar:X:Exiled$CardPower was what was needed

* Update

* Pass the Torch

* Delete choice_of_fortunes.txt

not ready

* Changes

* Update giant_regrowth.txt

* Update effluence_devourer.txt

Still not working correctly

* Update giant_regrowth.txt

* Delete verdant_rejuvenation.txt

* Delete wizened_githzerai.txt

* Delete vladimir_and_godfrey.txt

* Update traumatic_prank.txt

* Update traumatic_prank.txt

* Update traumatic_prank.txt

* Create incessant_provocation.txt

* Revert "Delete vladimir_and_godfrey.txt"

This reverts commit c7c5f2b99d.

* Revert "Delete wizened_githzerai.txt"

This reverts commit d9c5fe8c42.

* Revert "Delete verdant_rejuvenation.txt"

This reverts commit 2861ca2bfd.

* Fix

* Update shattering_finale.txt

* Update rope_line_attendant.txt

* Update sparas_bodyguard.txt

* Update xanders_wake.txt

* Update traumatic_prank.txt

* Update racketeer_boss.txt

* Update pass_the_torch.txt

* put in Cardfolder

* Update nightclub_bouncer.txt

* Update cabaretti_revels.txt

* Update effluence_devourer.txt

* Update giant_regrowth.txt

* Update effluence_devourer.txt

* Update giant_regrowth.txt

* Update effluence_devourer.txt

* Update incessant_provocation.txt

still doesn't force attack

* Update incessant_provocation.txt

* Update effluence_devourer.txt

* Update effluence_devourer.txt

* Update nightclub_bouncer.txt

* Update pass_the_torch.txt

* Update pass_the_torch.txt

* Update pass_the_torch.txt

* Update incessant_provocation.txt

finally made it work !

* Fix

Hopefully last edit

* Update incessant_provocation.txt

* Update riveteers_provocateur.txt

* Update incessant_provocation.txt

* Update incessant_provocation.txt

* Update incessant_provocation.txt

* Update wizened_githzerai.txt

* Update wizened_githzerai.txt

* Update xanders_wake.txt

* Update vladimir_and_godfrey.txt

* Update traumatic_prank.txt

* Update shattering_finale.txt

* Update shattering_finale.txt

* Update sparas_bodyguard.txt

* Update nightclub_bouncer.txt

* Update traumatic_prank.txt

* Update incessant_provocation.txt

* Update effluence_devourer.txt

* Update racketeer_boss.txt

* Update effluence_devourer.txt

Due to the weird wording of this card, saccing a token with the croc in play should give a trigger that does nothing. This however causes Forge to crash meaning we need a conditioncheck in line 7 to prevent Forge from giving the effect to a token while still making it trigger.

* Update effluence_devourer.txt

in Last version coudn't get the trigger when I sac the croq while it's not a creature. Now it works

* Update rope_line_attendant.txt

* Update pass_the_torch.txt

* Update riveteers_provocateur.txt

* Update racketeer_boss.txt

* Update rope_line_attendant.txt

* Update

* Final ? update

* update

* Update verdant_rejuvenation.txt

* Delete follow_the_tracks.txt

* Delete racketeer_boss.txt

* Update incessant_provocation.txt

* Update cabaretti_revels.txt

* Update incessant_provocation.txt

* Update sparas_bodyguard.txt

* Update traumatic_prank.txt

* Update vladimir_and_godfrey.txt

* Update sparas_bodyguard.txt

* Update sparas_bodyguard.txt

* Update xanders_wake.txt

* Update xanders_wake.txt
2022-08-11 15:24:21 +00:00
Paul Hammerton
d1823766a2 Merge pull request #1303 from Northmoc/ysnc_hov
YSNC: herald_of_vengeance.txt
2022-08-11 16:23:18 +01:00
Northmoc
1ddb5e98cb YSNC: Bank Job and support (#1228)
* bank_job.txt

* CardProperty.cardHasProperty support for "BottomLibrary_Creature"

* psychic_theft.txt clean up

* bank_job.txt v 2.0

* planeswalkers_mischief.txt refactor

* psychic_theft.txt refactor

* desc tweak

* bank_job.txt use RememberedLKI

* planeswalkers_mischief.txt use RememberedLKI, remove OppOwn

* psychic_theft.txt use RememberedLKI, remove OppOwn and unneeded line

* bank_job.txt improve DelayedTrigger
2022-08-11 15:18:09 +00:00
tool4EvEr
4ee0c40719 Clean up 2022-08-11 16:57:08 +02:00
tool4EvEr
772dfae275 payManaOptional fix 2022-08-11 16:56:45 +02:00
tool4ever
7e52459ed4 Merge pull request #1315 from Card-Forge/bondEffect
Bond effect cleanup
2022-08-11 16:52:41 +02:00
tool4ever
9478d7c3cd Merge pull request #1301 from Northmoc/ysnc_28
YSNC: back_alley_gardener.txt
2022-08-11 16:50:46 +02:00
tool4ever
538e9a48a4 Merge pull request #1302 from Northmoc/ysnc_9
YSNC - 9 Aug
2022-08-11 16:50:33 +02:00
Paul Hammerton
0ac46b4c04 Update you_come_to_a_river.txt 2022-08-11 15:45:24 +01:00
Paul Hammerton
96273d0273 Update a-you_come_to_a_river.txt 2022-08-11 15:45:21 +01:00
Paul Hammerton
6c1a8096cd Update circle_of_the_land_druid.txt 2022-08-11 15:29:21 +01:00
Paul Hammerton
6fead80b6c Update a-circle_of_the_land_druid.txt 2022-08-11 15:28:56 +01:00
Paul Hammerton
27311ed3af Update blessed_hippogriff_tyrs_blesing.txt 2022-08-11 15:28:05 +01:00
Paul Hammerton
ed26d31c29 Update a-blessed_hippogriff_tyrs_blesing.txt 2022-08-11 15:27:43 +01:00
Northmoc
7b507820ae Merge pull request #1295 from Suthro/master
HBG: Snowborn Simulacra
2022-08-11 10:06:28 -04:00
Anthony Calosa
4c356aa9f1 Merge pull request #1319 from TrueFuFLeaderG/adventure
Fixed chaosBattle doppelganger
2022-08-11 20:53:25 +08:00
Anthony Calosa
cc215499c5 cleanup 2022-08-11 20:47:49 +08:00
Anthony Calosa
3c186e38de Update DuelScene.java
fix avatar and player extra cards overwritten by blank effects.. (effect cards uses setcardsonbattlefields)
2022-08-11 20:43:05 +08:00
Grimm
acaec64078 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure
 Conflicts:
	forge-gui-mobile/src/forge/adventure/scene/DuelScene.java
2022-08-11 13:15:57 +02:00
Grimm
618b272166 fixed Doppelgänger in chaos mode 2022-08-11 13:14:33 +02:00
Anthony Calosa
b2363f2cfb Merge pull request #1318 from kevlahnota/master
reverse check
2022-08-11 19:11:50 +08:00
Anthony Calosa
1d8dd61f26 reverse check
- prevent NPE
2022-08-11 18:51:06 +08:00
Anthony Calosa
158cd7760f Merge pull request #1317 from kevlahnota/master
revert multiplayer battle
2022-08-11 18:41:06 +08:00
Anthony Calosa
481d00bfc5 unused import 2022-08-11 18:37:16 +08:00
Anthony Calosa
05475a8339 revert multiplayer battle
- should fix crash when encountering doppelganger/copyplayerdeck AI
2022-08-11 18:30:55 +08:00
Paul Hammerton
79035210d7 Update Alchemy Horizons Baldur's Gate.txt 2022-08-11 11:07:41 +01:00
Paul Hammerton
a2d8e98bc2 Create a-you_come_to_a_river.txt 2022-08-11 10:55:18 +01:00
Paul Hammerton
424c693b5f Create a-druidic_ritual.txt 2022-08-11 10:46:28 +01:00
Paul Hammerton
bf42c30583 Create a-navigation_orb.txt 2022-08-11 10:35:31 +01:00
Paul Hammerton
924da0b635 Create a-lantern_of_revealing.txt 2022-08-11 10:34:01 +01:00
Paul Hammerton
66b4df708e Create a-jade_orb_of_dragonkind.txt 2022-08-11 10:31:29 +01:00
Paul Hammerton
a7bfe02fde Create a-lapis_orb_of_dragonkind.txt 2022-08-11 10:29:02 +01:00
Paul Hammerton
dabcc08eda Create a-carnelian_orb_of_dragonkind.txt 2022-08-11 10:26:49 +01:00
Paul Hammerton
5f890461f4 Create a-blessed_hippogriff_tyrs_blesing.txt 2022-08-11 10:23:43 +01:00
Paul Hammerton
a6af5f6d4b Create a-steadfast_unicorn.txt 2022-08-11 10:22:14 +01:00
Paul Hammerton
21ff30e45d Create a-split_the_spoils.txt 2022-08-11 10:20:10 +01:00
Paul Hammerton
256f0ff187 Create a-emerald_dragon_dissonant_wave.txt 2022-08-11 10:18:15 +01:00
Paul Hammerton
8959c5a5de Create a-circle_of_the_land_druid.txt 2022-08-11 10:10:17 +01:00
Paul Hammerton
bb1e50aba6 Create a-young_red_dragon_bathe_in_gold.txt 2022-08-11 10:08:42 +01:00
Paul Hammerton
ee82953019 Create a-sigil_of_myrkul.txt 2022-08-11 10:06:38 +01:00
Paul Hammerton
ae0bba1a68 Create a-eyes_of_the_beholder.txt 2022-08-11 10:04:08 +01:00
Paul Hammerton
b9db3f0a3f Create a-baleful_beholder.txt 2022-08-11 09:58:47 +01:00
Anthony Calosa
93e18656c1 Update AiController.java (#1314)
- closes #1313
2022-08-11 11:57:41 +03:00
Paul Hammerton
6534ced8c7 Create a-manticore.txt 2022-08-11 09:56:43 +01:00
Paul Hammerton
4ff8622dec Create a-guildsworn_prowler.txt 2022-08-11 09:54:31 +01:00
Paul Hammerton
5f391cda85 Create a-goggles_of_night.txt 2022-08-11 09:53:07 +01:00
Paul Hammerton
e8cb592556 Create a-kenku_artificer.txt 2022-08-11 09:51:00 +01:00
Paul Hammerton
f567a71770 Create a-young_blue_dragon_sand_augury.txt 2022-08-11 09:48:42 +01:00
Paul Hammerton
f7467443f5 Create a-pseudodragon_familiar.txt 2022-08-11 09:46:30 +01:00
Paul Hammerton
e836a3120c Create a-dragonborn_looter.txt 2022-08-11 09:40:15 +01:00
Suthro
83b58df1be Update snowborn_simulacra.txt 2022-08-11 00:44:38 -05:00
Hans Mackowiak
78ada14de6 More Options for AI 2022-08-11 06:57:27 +02:00
Hans Mackowiak
cd6e322c7c Player.isInGame 2022-08-11 06:57:27 +02:00
Hans Mackowiak
840bf26065 BondEffect: update 2022-08-11 06:57:27 +02:00
Anthony Calosa
7535a72ecd Merge pull request #1290 from tool4ever/delayTrig
Fix some bugs related to delayed triggers
2022-08-11 08:33:14 +08:00
Anthony Calosa
08f039fc65 Merge pull request #1304 from Northmoc/wulfgar
StaticAbilityPanharmonicon support ValidCause for Wulfgar
2022-08-11 08:27:42 +08:00
Anthony Calosa
9e554c466d Merge pull request #1305 from Northmoc/totem
grinning_totem.txt refactor
2022-08-11 08:26:43 +08:00
Anthony Calosa
2ed2147e33 Merge pull request #1306 from Northmoc/memories
Distant Memories refactor and related
2022-08-11 08:26:23 +08:00
Anthony Calosa
3cc7e79ec0 Merge pull request #1312 from Northmoc/waylay
waylay.txt fixup
2022-08-11 08:25:12 +08:00
Northmoc
a7cd792626 waylay.txt fixup 2022-08-10 15:43:11 -04:00
Northmoc
125f9d2567 use ReplacementResult$ Updated 2022-08-10 15:03:17 -04:00
Northmoc
c26d51e2fe StaticAbilityPanharmonicon remove unneeded checks 2022-08-10 14:53:29 -04:00
Northmoc
152418976a grinning_totem.txt fix the bad stuff 2022-08-10 13:05:50 -04:00
Paul Hammerton
98b836cee4 Merge pull request #1311 from paulsnoops/sld_update
SLD edition update
2022-08-10 15:21:53 +01:00
paulsnoops
2eb1bd0fe9 SLD edition update 2022-08-10 15:18:09 +01:00
Anthony Calosa
a20b2c2854 Merge pull request #1310 from kevlahnota/master
prevent startup crash adventure (ExceptionInInitializerError)
2022-08-10 21:35:32 +08:00
Anthony Calosa
e4560f3714 prevent startup crash adventure (ExceptionInInitializerError)
- if not using classpath, it will fail to get the fallback_skin hidden inside the jar, to prevent crash use dummy instead;
2022-08-10 21:29:20 +08:00
Anthony Calosa
0d699b9e83 Merge pull request #1309 from kevlahnota/master
Add progressbar on adventure loading transition
2022-08-10 19:58:54 +08:00
Anthony Calosa
112a2ce18f unused imports 2022-08-10 19:35:48 +08:00
Anthony Calosa
9209c64399 Add progressbar on adventure loading transition 2022-08-10 19:31:53 +08:00
Anthony Calosa
8653f57b04 Merge pull request #1308 from kevlahnota/master
match color identity for random deck in chaos mode
2022-08-10 12:45:26 +08:00
Anthony Calosa
d38b82867a unused imports 2022-08-10 12:34:40 +08:00
Anthony Calosa
e5a2d6a054 match color identity for random deck in chaos mode
- update colorid selector if chaos mode is chosen
2022-08-10 12:32:15 +08:00
Anthony Calosa
6d67e87903 Merge pull request #1307 from kevlahnota/master
update DeckProxy
2022-08-10 09:20:37 +08:00
Anthony Calosa
6762756f83 update DeckProxy
- replaced easystarter to custom since it is using definition from JSON now on adventure
2022-08-10 09:15:07 +08:00
Anthony Calosa
d96bbfe450 Merge pull request #1299 from TrueFuFLeaderG/adventure
Adventure starting deck rework
2022-08-10 08:55:27 +08:00
Northmoc
cb8c9694b5 ChooseGenericEffectAi match Sin Prodder logic to new UI 2022-08-09 19:55:27 -04:00
Northmoc
b04b1b89d3 sin_prodder.txt shouldn't use Mill 2022-08-09 19:51:40 -04:00
Northmoc
836ab10c90 nature_demands_an_offering.txt "UnImprint" > "Unimprint" 2022-08-09 19:47:38 -04:00
Northmoc
3b8d335023 sin_prodder.txt tighten up UI 2022-08-09 19:47:15 -04:00
Northmoc
555257c448 distant_memories.txt refactor like Sin Prodder 2022-08-09 19:46:59 -04:00
Northmoc
0ebb717057 grinning_totem.txt refactor 2022-08-09 19:21:06 -04:00
Northmoc
39db05f97a spelldrain_assassin.txt add AI hints 2022-08-09 19:18:32 -04:00
Northmoc
b2364ccce8 StaticAbilityPanharmonicon.applyPanharmoniconAbility support ValidCause for Wulfgar 2022-08-09 17:46:35 -04:00
Northmoc
231a85847e herald_of_vengeance.txt 2022-08-09 17:15:40 -04:00
Northmoc
da5d61307d brokers_safeguard.txt fix StackDesc 2022-08-09 17:12:14 -04:00
Northmoc
a7666c1c51 brokers_safeguard.txt 2022-08-09 17:08:58 -04:00
Northmoc
c921371667 teyo_aegis_adept.txt add Perpetual Effect name 2022-08-09 14:48:49 -04:00
Northmoc
d52ce4b810 diviner_of_fates.txt 2022-08-09 14:46:46 -04:00
tool4EvEr
3abd532216 Update TgtPrompt 2022-08-09 20:18:24 +02:00
Grimm
4bb9c37b92 removed unused list 2022-08-09 18:48:42 +02:00
Grimm
d1d65c7d57 removed unused list 2022-08-09 18:46:10 +02:00
Grimm
2ad0d598eb Added multiplayer fights 2022-08-09 18:38:43 +02:00
tool4ever
bed7321d65 Merge pull request #1296 from JohnWilliams77/patch-31
Update Love Your LGS 2022.txt
2022-08-09 18:32:00 +02:00
tool4ever
0b09a953a9 Merge pull request #1300 from Northmoc/tidy
Tidy up some old cards
2022-08-09 18:18:58 +02:00
Northmoc
5dac35ed66 winds_of_qal_sisma.txt streamline 2022-08-09 11:57:23 -04:00
Northmoc
0a900a5dbe dark_temper.txt remove weird TgtPrompt 2022-08-09 11:57:11 -04:00
Northmoc
fe57c69096 improve cards that care about certain planeswalker type 2022-08-09 11:56:25 -04:00
Northmoc
9b5115dd75 streamline sanctuary cycle 2022-08-09 11:55:24 -04:00
Grimm
eb33540143 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-08-09 16:05:02 +02:00
Grimm
9402a15502 Adventure player reworked colorid to support multicolor 2022-08-09 16:04:30 +02:00
Grimm
af10670060 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure
 Conflicts:
	forge-gui-mobile/src/forge/adventure/world/WorldSave.java
2022-08-09 13:50:01 +02:00
Anthony Calosa
8def90cd58 Merge pull request #1297 from kevlahnota/master
update newgame+
2022-08-09 19:48:11 +08:00
Grimm
70ef2a13a0 reworked starting deck to jumpstart, constructed or chaos
support localization in UIData and removed it from code (only NewGameScene for now)
2022-08-09 13:46:56 +02:00
Anthony Calosa
f93db8ce92 unused import 2022-08-09 19:43:18 +08:00
Anthony Calosa
cf1385666a update newgame+
- add highlight to difficulty selector
2022-08-09 19:37:52 +08:00
Grimm
c1a6313b1e reworked starting deck to jumpstart, constructed or chaos
support localization in UIData and removed it from code (only NewGameScene for now)
2022-08-09 13:33:06 +02:00
JohnWilliams77
b7657c60f4 Update Love Your LGS 2022.txt 2022-08-09 10:09:28 +01:00
Suthro
c3609fe625 Merge branch 'Card-Forge:master' into master 2022-08-08 22:55:18 -05:00
Suthro
ef74f5e288 HBG: Snowborn Simulacra 2022-08-08 22:54:37 -05:00
Northmoc
3c7d993982 big_spender.txt (#1294) 2022-08-09 06:54:00 +03:00
Anthony Calosa
e8745c3da2 Merge pull request #1293 from kevlahnota/master
reformat code
2022-08-09 09:27:44 +08:00
Anthony Calosa
c8073a333c reformat code
- fix color identity
- service pool is working good on android now so use it on generating map
2022-08-09 09:17:19 +08:00
Anthony Calosa
8f9e14cc05 Merge pull request #1292 from kevlahnota/master
fix loading world in android
2022-08-08 21:48:45 +08:00
Anthony Calosa
36e7687034 unused import 2022-08-08 21:43:11 +08:00
Anthony Calosa
790db23367 fix loading world in android 2022-08-08 21:40:13 +08:00
Anthony Calosa
aaa2084f49 Merge pull request #1291 from TrueFuFLeaderG/adventure
Structure improvement
2022-08-08 21:37:42 +08:00
Grimm
2e9dc4791d Fixed enemy spawning in structures
reduced segmented WaveFunctionCollapse calculation for better performance
added flying to enemies
2022-08-08 15:08:02 +02:00
tool4EvEr
3d33b955c0 matchesValid delayed trigger support 2022-08-08 14:56:48 +02:00
tool4EvEr
a06367dfc6 Switch to SpawningAbility 2022-08-08 14:53:03 +02:00
tool4EvEr
ed48bc027e Fix Emblem targeting 2022-08-08 12:48:38 +02:00
tool4EvEr
fe6ccc0f31 Fix Epic + Stifle 2022-08-08 12:44:04 +02:00
tool4EvEr
b96365e6da Rework DelayedTrigger controller 2022-08-08 12:43:23 +02:00
Anthony Calosa
d1cb4c3825 Merge pull request #1289 from TrueFuFLeaderG/adventure
threaded WaveFunctionCollapse
2022-08-08 18:04:19 +08:00
Anthony Calosa
ade04c2290 Merge pull request #1288 from kevlahnota/master
catch unloaded card images
2022-08-08 18:03:27 +08:00
Anthony Calosa
08f61bc891 Update World.java 2022-08-08 18:03:06 +08:00
Anthony Calosa
670f35ddec use threadutil servicepool 2022-08-08 17:38:12 +08:00
Grimm
c382555261 adventure Editor rework 2022-08-08 11:10:18 +02:00
Anthony Calosa
fb18f59586 update check 2022-08-08 16:35:01 +08:00
Anthony Calosa
91e89c6c97 catch unloaded images
- either due to being corrupted, invalid header or libgdx failed to load dependency (wrong path, etc..)
2022-08-08 16:28:15 +08:00
Anthony Calosa
d1f06e0353 Merge pull request #1284 from TrueFuFLeaderG/adventure
Adventure
2022-08-08 11:34:27 +08:00
Anthony Calosa
0b2075d1d3 Update ImageCache.java
revert
2022-08-08 11:25:45 +08:00
Anthony Calosa
cc78dee5b5 Update VCardDisplayArea.java
revert
2022-08-08 11:25:18 +08:00
Anthony Calosa
e1c33dd589 Update CardView.java
revert
2022-08-08 11:22:52 +08:00
Anthony Calosa
2c326f8ff9 Update CardView.java
revert
2022-08-08 11:21:49 +08:00
Anthony Calosa
3093d9f617 Update GuiChoose.java
revert
2022-08-08 11:18:40 +08:00
Anthony Calosa
138068e087 Update frost_bite.txt
revert
2022-08-08 11:16:12 +08:00
Anthony Calosa
abe0d82a3f Delete loose_in_the_park.txt
revert
2022-08-08 11:15:23 +08:00
Anthony Calosa
2a748d0e73 Delete menagerie_curator.txt
revert
2022-08-08 11:14:51 +08:00
Anthony Calosa
3d381687a9 Update HumanCostDecision.java
revert
2022-08-08 11:13:44 +08:00
Anthony Calosa
1e0ff83082 Update Forge.java 2022-08-08 11:10:39 +08:00
Anthony Calosa
244c611c97 Update SplashScreen.java 2022-08-08 11:06:47 +08:00
Anthony Calosa
6827a83596 Update SplashScreen.java
to override the startup you don't need to modify the splashscreen, it should be afterdbloaded
2022-08-08 11:05:20 +08:00
Grimm
19feb55641 merged kev change by hand 2022-08-07 23:20:03 +02:00
Grimm
79e85bda06 Adventure
removed BufferdImage dependency
  rolled back import changes
2022-08-07 23:14:08 +02:00
Simisays
8d76e23585 YSNC Menagerie Curator (#1280)
* Create menagerie_curator.txt

* Update menagerie_curator.txt
2022-08-07 22:52:33 +02:00
Anthony Calosa
a5caf970ed Update frost_bite.txt 2022-08-07 22:52:33 +02:00
Anthony Calosa
5204c735ac fix black texture on adventure mode list view
- needs to clear card art cache when unloading card textures
- minor speedup on startup on selector adventure settings
2022-08-07 22:52:33 +02:00
Simisays
f8188e851d YSNC Loose in the Park (#1265)
* Create loose_in_the_park.txt

Card script for the card Loose in the Park from New Capenna Alchemy
https://scryfall.com/card/ysnc/14/loose-in-the-park

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt
2022-08-07 22:52:33 +02:00
tool4EvEr
5569a5619a display expected P/T for unanimated vehicles 2022-08-07 22:52:32 +02:00
Simisays
a05e9951ac YSNC Menagerie Curator (#1280)
* Create menagerie_curator.txt

* Update menagerie_curator.txt
2022-08-07 22:04:35 +03:00
Anthony Calosa
112f7d15ce Merge pull request #1286 from Card-Forge/kevlahnota-patch-4
Update frost_bite.txt
2022-08-07 22:21:31 +08:00
Anthony Calosa
ffe451246c Merge pull request #1287 from kevlahnota/master
fix black texture on card list view
2022-08-07 22:20:53 +08:00
Anthony Calosa
7cea9c3973 fix black texture on adventure mode list view
- needs to clear card art cache when unloading card textures
- minor speedup on startup on selector adventure settings
2022-08-07 22:14:58 +08:00
Anthony Calosa
7803a54857 Update frost_bite.txt 2022-08-07 21:05:19 +08:00
Simisays
b77464622b YSNC Loose in the Park (#1265)
* Create loose_in_the_park.txt

Card script for the card Loose in the Park from New Capenna Alchemy
https://scryfall.com/card/ysnc/14/loose-in-the-park

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt

* Update loose_in_the_park.txt
2022-08-07 08:08:27 +03:00
Anthony Calosa
d584b4195d Merge branch 'master' into newmaster 2022-08-07 07:42:10 +08:00
Anthony Calosa
acd06a2d94 Merge pull request #1285 from tool4ever/viewPT
CardView: display expected P/T for unanimated vehicles
2022-08-07 07:39:18 +08:00
tool4EvEr
f3949a7177 display expected P/T for unanimated vehicles 2022-08-07 00:17:29 +02:00
Grimm
f9be819925 Adventure
removed debug log
  adjusted some terrain
2022-08-06 22:40:26 +02:00
Grimm
f45555686e changed road algo
added WaveFunctionCollapse to create biome structures
changed world generation.
added overworld collision for enemies.
2022-08-06 21:46:54 +02:00
Grimm
7dd79768e4 adventure Editor rework 2022-08-06 21:46:54 +02:00
Anthony Calosa
6ae171f7fc fix dual choices and alternate view on confirm action 2022-08-06 21:45:57 +02:00
Grimm
bc16d30ce5 Merge remote-tracking branch 'origin/adventure' into adventure
# Conflicts:
#	forge-adventure/src/main/java/forge/adventure/editor/BiomeEdit.java
#	forge-adventure/src/main/java/forge/adventure/editor/BiomeStructureEdit.java
#	forge-adventure/src/main/java/forge/adventure/editor/BiomeTerrainEdit.java
#	forge-adventure/src/main/java/forge/adventure/editor/EditorMainWindow.java
#	forge-adventure/src/main/java/forge/adventure/editor/PointOfInterestEdit.java
#	forge-adventure/src/main/java/forge/adventure/editor/RewardEdit.java
#	forge-adventure/src/main/java/forge/adventure/editor/StructureEditor.java
#	forge-adventure/src/main/java/forge/adventure/editor/SwingAtlas.java
#	forge-adventure/src/main/java/forge/adventure/editor/SwingAtlasPreview.java
#	forge-adventure/src/main/java/forge/adventure/editor/WorldEditor.java
#	forge-gui-mobile/src/forge/adventure/data/BiomeData.java
#	forge-gui-mobile/src/forge/adventure/data/BiomeStructureData.java
#	forge-gui-mobile/src/forge/adventure/data/WorldData.java
#	forge-gui-mobile/src/forge/adventure/util/RewardActor.java
#	forge-gui-mobile/src/forge/adventure/world/BiomeStructure.java
#	forge-gui-mobile/src/forge/adventure/world/BiomeTexture.java
#	forge-gui-mobile/src/forge/adventure/world/World.java
#	forge-gui/res/adventure/Shandalar/world/green.json
#	forge-gui/res/adventure/Shandalar/world/tilesets/forest.png
2022-08-06 21:11:56 +02:00
Grimm
f6bec79a28 changed road algo
added WaveFunctionCollapse to create biome structures
changed world generation.
added overworld collision for enemies.
2022-08-06 21:10:18 +02:00
Anthony Calosa
235d357844 Merge branch 'master' into newmaster 2022-08-07 00:13:12 +08:00
Anthony Calosa
4d9c357962 Merge pull request #1278 from kevlahnota/master
fix dual choices and alternate view on confirm action
2022-08-06 21:16:54 +08:00
Anthony Calosa
d963a3e13c Merge branch 'master' into newmaster 2022-08-06 13:02:15 +08:00
Anthony Calosa
4cdf7829c2 fix dual choices and alternate view on confirm action 2022-08-06 12:32:43 +08:00
Grimm
03aac93b26 Merge branch 'master' of https://github.com/TrueFuFLeaderG/forge into adventure
 Conflicts:
	forge-adventure/src/main/java/forge/adventure/editor/BiomeEdit.java
	forge-adventure/src/main/java/forge/adventure/editor/BiomeStructureEdit.java
	forge-adventure/src/main/java/forge/adventure/editor/BiomeTerrainEdit.java
	forge-adventure/src/main/java/forge/adventure/editor/EditorMainWindow.java
	forge-adventure/src/main/java/forge/adventure/editor/PointOfInterestEdit.java
	forge-adventure/src/main/java/forge/adventure/editor/RewardEdit.java
	forge-adventure/src/main/java/forge/adventure/editor/StructureEditor.java
	forge-adventure/src/main/java/forge/adventure/editor/SwingAtlasPreview.java
	forge-adventure/src/main/java/forge/adventure/editor/WorldEditor.java
	forge-gui-mobile/src/forge/adventure/data/BiomeData.java
	forge-gui-mobile/src/forge/adventure/data/BiomeStructureData.java
	forge-gui-mobile/src/forge/adventure/data/WorldData.java
	forge-gui-mobile/src/forge/adventure/stage/GameHUD.java
	forge-gui-mobile/src/forge/adventure/world/BiomeStructure.java
	forge-gui-mobile/src/forge/adventure/world/BiomeTexture.java
	forge-gui-mobile/src/forge/adventure/world/World.java
	forge-gui/res/adventure/Shandalar/world/green.json
2022-08-05 22:47:31 +02:00
Grimm
605c232dea wavefunction collapse first integration 2022-08-05 22:41:05 +02:00
Grimm
cdd72d138b AdventureEditor: added editors 2022-08-05 22:41:05 +02:00
Grimm
93ac9fd7fe adventure Editor rework 2022-08-05 18:14:51 +02:00
Anthony Calosa
d2338261fd Merge pull request #1276 from kevlahnota/master
try to fix bug getting default font not correctly setting the scale to 1
2022-08-05 20:58:05 +08:00
Anthony Calosa
4e2435ebf7 try to fix bug getting default font not correctly setting the scale to 1 2022-08-05 20:50:01 +08:00
Paul Hammerton
c069941f85 Merge pull request #1275 from Card-Forge/kevlahnota-patch-3
Create altar_of_bhaal_bone_offering.txt
2022-08-05 10:47:59 +01:00
Anthony Calosa
eed64fd84e Create altar_of_bhaal_bone_offering.txt 2022-08-05 17:44:00 +08:00
Anthony Calosa
205973858f Merge pull request #1272 from kevlahnota/master
landscape and portrait settings for reward/shop card display/tooltips
2022-08-05 16:37:47 +08:00
Anthony Calosa
6b0847159d unused import 2022-08-05 14:23:01 +08:00
Anthony Calosa
d15cf79598 cleanup 2022-08-05 14:17:22 +08:00
Anthony Calosa
99222e6fa5 landscape and portrait settings for reward/shop card display/tooltips
- user can adjust the values seperately for landscape or portrait mode
2022-08-05 14:12:22 +08:00
Suthro
f595978575 HBG: 6 card scripts (#1267)
* HBG: Calim, Djinn Emperor + 2 cards

HBG: Add scripts for Calim, Oyaminartok, and You Line Up the Shot.

- Calim, Djinn Emperor
- Oyaminartok, Polar Werebear
- You Line Up the Shot

* HBG: 6 cards

HBG: Add scripts for six HBG alchemy cards

- Chaos Balor
- Craving of Yeenoghu
- Grave Choice
- Hook Horror
- Patriar's Humiliation
- Seek New Knowledge

* HBG: Signature Spells + 2 cards

HBG: Add scripts for 3 HBG alchemy cards

- Signature Spells
- Sune's Intervention
- Uthgardt Fury
2022-08-05 07:20:37 +03:00
Suthro
a633687acf Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-08-04 21:59:05 -05:00
Suthro
671254c3ef HBG: Signature Spells + 2 cards
HBG: Add scripts for 3 HBG alchemy cards

- Signature Spells
- Sune's Intervention
- Uthgardt Fury
2022-08-04 21:59:02 -05:00
Anthony Calosa
1759a94cdc remove duplicate setting 2022-08-05 10:46:44 +08:00
Anthony Calosa
e718bd7050 Merge pull request #1271 from kevlahnota/master
setting for card display/tooltip on adventure rewards/shops
2022-08-05 10:32:15 +08:00
Anthony Calosa
745d71745e setting for card display/tooltip on adventure rewards/shops
- add support for various display aspect ratio
2022-08-05 10:26:32 +08:00
Anthony Calosa
f04b34e137 Merge pull request #1270 from kevlahnota/master
minor adjustments on tooltips
2022-08-05 06:50:18 +08:00
Anthony Calosa
f8b5736866 Merge pull request #1268 from Simisays/master
YSNC Syndicate Recruiter
2022-08-05 06:48:22 +08:00
Anthony Calosa
efc5002bb7 minor adjustments on tooltips 2022-08-05 06:46:02 +08:00
Anthony Calosa
68eadd65b3 Merge pull request #1266 from tool4ever/fewfixes
Fix PT update before turning into creature
2022-08-05 06:24:18 +08:00
tool4EvEr
caad3bff44 Fix logic from refactoring 2022-08-04 23:04:35 +02:00
tool4EvEr
e75c456524 Extort fix 2022-08-04 21:23:16 +02:00
Simisays
2566029996 Merge pull request #2 from Simisays/Simisays-patch-2
YSNC Syndicate Recruiter
2022-08-04 21:12:44 +02:00
Simisays
189149eb90 Create syndicate_recruiter.txt 2022-08-04 21:09:18 +02:00
Suthro
c6807f1b14 Merge branch 'Card-Forge:master' into master 2022-08-04 13:51:05 -05:00
Suthro
02480233a9 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-08-04 13:50:49 -05:00
Suthro
3c2769dcd5 HBG: 6 cards
HBG: Add scripts for six HBG alchemy cards

- Chaos Balor
- Craving of Yeenoghu
- Grave Choice
- Hook Horror
- Patriar's Humiliation
- Seek New Knowledge
2022-08-04 13:50:46 -05:00
Paul Hammerton
91c389318f Merge pull request #1261 from Simisays/Simisays-patch-1
[YSNC] Spelldrain Assassin
2022-08-04 18:37:04 +01:00
tool4EvEr
f1fb414ebe Fix targeting abilities 2022-08-04 19:29:22 +02:00
Simisays
b6868be9cc Update spelldrain_assassin.txt 2022-08-04 19:28:54 +02:00
tool4EvEr
ca30c31975 View fix 2022-08-04 19:28:45 +02:00
Suthro
da634f541a HBG: Calim, Djinn Emperor + 2 cards (#1263)
HBG: Add scripts for Calim, Oyaminartok, and You Line Up the Shot.

- Calim, Djinn Emperor
- Oyaminartok, Polar Werebear
- You Line Up the Shot
2022-08-04 18:50:31 +03:00
Northmoc
b1fbc3cefd YSNC: Celestial Vault and support (#1226)
* celestial_vault.txt

* celestial_vault.txt AI hint to help with spellbook

* DraftEffect.getStackDescription fix zones and support ExileFaceDown

* DraftEffect.resolve track Exiling and support "ExileFaceDown"
2022-08-04 18:49:28 +03:00
Northmoc
fff9968b5b CLB: Volo, Journal, support, etc. (#1211)
* volo_itinerant_scholar.txt

* volos_journal.txt

* TrackableProperty.NotedTypes

* ChooseTypeEffect.resolve implement "TypesFromDefined"

* ChooseTypeEffect.resolve implement "Note"

* CardView.getNotedTypes / CardView.updateNotedTypes

* CardDetailUtil.composeCardText add noted type area

* Card.java implement notedTypes

* AbilityUtils.xCount "CardNumNotedTypes"
2022-08-04 18:49:09 +03:00
Simisays
b149a35be7 Merge branch 'Card-Forge:master' into Simisays-patch-1 2022-08-04 14:14:59 +02:00
Anthony Calosa
7870b27734 Merge pull request #1264 from kevlahnota/master
minor adjustments
2022-08-04 14:28:36 +08:00
Anthony Calosa
74c5c3d720 fix for drawables 2022-08-04 14:05:00 +08:00
Suthro
7a8bd6ad88 Merge branch 'Card-Forge:master' into master 2022-08-04 01:00:46 -05:00
Suthro
d08338f2bc Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-08-04 01:00:28 -05:00
Suthro
e74ebfd6de HBG: Calim, Djinn Emperor + 2 cards
HBG: Add scripts for Calim, Oyaminartok, and You Line Up the Shot.

- Calim, Djinn Emperor
- Oyaminartok, Polar Werebear
- You Line Up the Shot
2022-08-04 01:00:27 -05:00
Anthony Calosa
e0c919741e Merge branch 'master' into newmaster 2022-08-04 12:20:39 +08:00
Anthony Calosa
50cd549840 Merge pull request #1262 from kevlahnota/master
update Assets
2022-08-04 11:26:01 +08:00
Anthony Calosa
946c046f94 Update RewardActor.java 2022-08-04 11:15:31 +08:00
Anthony Calosa
9e6ec34659 Update RewardScene.java 2022-08-04 11:13:08 +08:00
Anthony Calosa
beca83a97c adjust tooltips for screens without navigation menu 2022-08-04 11:00:33 +08:00
Anthony Calosa
dbe8e94900 Update Main.java 2022-08-04 09:31:54 +08:00
Anthony Calosa
a468d19408 update Assets
- load bitmapfonts to assetmanager
- load adventure skinfile to assetmanager
- update ondestroy on android to dispose assets
- fix confirmpayment on mobile not displaying card images on hidden zone (ie shocklands that were put into play from library to battlefield)
- increase pagesize for CJK Fonts
2022-08-04 08:57:22 +08:00
Simisays
34088df53c Update spelldrain_assassin.txt 2022-08-03 19:47:48 +02:00
Simisays
7a6838d339 Add files via upload
Hello, first time contributor here 

I've created a script for the card "Spelldrain Assassin" from the New Capenna Alchemy set.
I've tested it out and it worked fine. 

Since i'm new to this sort of thing, some feedback on the code would be welcome :)
2022-08-03 18:55:28 +02:00
Anthony Calosa
9aedef3a4a Merge branch 'master' into newmaster 2022-08-03 22:51:26 +08:00
Grimm
aa9d15a908 adventure Editor rework 2022-08-03 16:26:46 +02:00
Anthony Calosa
7d297926a3 Merge pull request #1260 from tool4ever/onlyonce
Panharmonicon + "triggers only once"
2022-08-03 20:53:50 +08:00
tool4EvEr
b3510ab7ff Panharmonicon + "triggers only once" 2022-08-03 12:20:03 +02:00
Anthony Calosa
a94cde2da9 Merge branch 'master' into newmaster 2022-08-03 08:19:52 +08:00
tool4ever
688dd57e33 Fix noncreature permanents having P/T (#1259)
Co-authored-by: TRT <>
2022-08-02 19:40:41 +03:00
Grimm
95fba3d0cb WaveFunctionCollapse editor 2022-08-02 17:59:30 +02:00
Anthony Calosa
ca02fb50df Merge branch 'master' into newmaster 2022-08-02 13:54:58 +08:00
tool4ever
78b6062a15 Merge pull request #1258 from tool4ever/minFix
Minor fixes
2022-08-01 21:20:16 +02:00
tool4EvEr
5b47d7e20d Fix Haldan + Adventures from creatures 2022-08-01 21:16:58 +02:00
tool4EvEr
94d3c70d44 AI fix 2022-08-01 21:15:45 +02:00
tool4EvEr
e1d443b84f Fix counting 2022-08-01 21:15:18 +02:00
Anthony Calosa
558086ce03 Merge branch 'master' into newmaster 2022-08-01 16:43:51 +08:00
Anthony Calosa
12cde6fd4b Merge pull request #1255 from kevlahnota/master
get screensize for Android
2022-08-01 16:39:35 +08:00
Anthony Calosa
adb0540e92 Merge pull request #1256 from t-w-o-s-a-t/master
Update de-DE.properties
2022-08-01 16:39:19 +08:00
t-w-o-s-a-t
43d08c76b1 Update de-DE.properties
translated lblChangeCombatantOption
2022-08-01 10:23:36 +02:00
Anthony Calosa
f5bfdf3fda Update RewardScene.java
minor adjustment
2022-08-01 16:14:34 +08:00
Anthony Calosa
27877ab102 Update Main.java 2022-08-01 16:09:49 +08:00
Anthony Calosa
9505657e30 add alternate method 2022-08-01 15:57:15 +08:00
Anthony Calosa
e739198e98 Merge remote-tracking branch 'core/master' into newmaster 2022-08-01 15:39:53 +08:00
Anthony Calosa
f840bd118f Update RewardScene.java 2022-08-01 09:49:20 +08:00
Anthony Calosa
b3e4e4013f update check 2022-08-01 09:47:42 +08:00
Anthony Calosa
2a0f25a5f7 Update Main.java 2022-08-01 09:31:12 +08:00
Anthony Calosa
a72164d5f4 Update Main.java 2022-08-01 09:02:56 +08:00
Anthony Calosa
2c0075fae3 Update Main.java 2022-08-01 08:53:10 +08:00
Anthony Calosa
9266183cd9 Merge branch 'master' into newmaster 2022-08-01 08:48:25 +08:00
Anthony Calosa
6b1c8d30f4 get realScreen size for android
- to check if the app renders different resolution and update the tooltips size
2022-08-01 08:46:47 +08:00
Anthony Calosa
7ee6704d27 Merge pull request #1254 from kevlahnota/master
revert inputconfirm for desktop version
2022-08-01 08:45:09 +08:00
Anthony Calosa
c0514f8ab1 Update HumanCostDecision.java 2022-08-01 08:17:39 +08:00
Anthony Calosa
002591fa48 revert inputconfirm for desktop version 2022-08-01 05:58:10 +08:00
Anthony Calosa
680451065b Merge pull request #1253 from kevlahnota/master
update RewardScene & RewardActor for various screen display
2022-08-01 05:55:20 +08:00
Anthony Calosa
6b04ab36a1 update alignment 2022-08-01 05:38:47 +08:00
Anthony Calosa
67a599a892 update dimension 2022-08-01 05:04:09 +08:00
Anthony Calosa
7306b2e371 unused import 2022-08-01 04:27:53 +08:00
Anthony Calosa
7d8534204d update RewardScene & RewardActor for various screen display
- support for tall phones, ultra wide and unfolded screen (11.2:9)
- tested with simulated display aspect ratio of (4:3, 5:4, 16:9, 16:10, 18:9, 19:9, 21:9)
2022-08-01 03:40:24 +08:00
Anthony Calosa
e7a5f7ad32 Merge pull request #1252 from kevlahnota/master
update remaining confirm action for human decision
2022-07-31 20:40:07 +08:00
Anthony Calosa
ddbe8e7899 Update PlayerControllerHuman.java 2022-07-31 19:17:32 +08:00
Anthony Calosa
b82b79ca7c Update HumanCostDecision.java 2022-07-31 19:16:54 +08:00
Anthony Calosa
44997b55cd update remaining confirm action for human decision
- to show relevant card and fix message title (removing "\n").
2022-07-31 19:02:34 +08:00
Anthony Calosa
37354d3aa7 Merge pull request #1250 from tool4ever/cleanstuff2
Cleanup & fix few more
2022-07-31 12:08:55 +08:00
Anthony Calosa
8961e77cbc Merge pull request #1251 from kevlahnota/master
fix LibGDXImageFetcher not deleting .tmp files
2022-07-31 12:08:33 +08:00
Anthony Calosa
194d5b00dc fix LibGDXImageFetcher not deleting .tmp files
- removed unnecessary keys for 2nd variants displaying first art.
  should fix displaying duplicated art when using image fetcher
2022-07-31 12:04:57 +08:00
tool4EvEr
4e1ff60db5 Cleanup & fix few more 2022-07-30 23:35:16 +02:00
Agetian
8807a0a056 - Added puzzles PS_SNC3 - PS_SNC5. (#1248) 2022-07-30 14:03:27 +03:00
tool4ever
569e948068 Fix Second Guess (#1246)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-07-30 14:01:46 +03:00
Anthony Calosa
63914dbe35 Merge pull request #1244 from kevlahnota/master
support setlookup on ImageFetcher
2022-07-30 18:24:54 +08:00
Anthony Calosa
a60c39cfc1 update setlookup for scryfall.. 2022-07-30 18:21:45 +08:00
Paul Hammerton
4af5e6eb61 Merge pull request #1245 from paulsnoops/sld_update
SLD edition update
2022-07-30 10:21:44 +01:00
paulsnoops
3edc12b623 SLD edition update 2022-07-30 10:17:37 +01:00
Anthony Calosa
61fa890e7e support setlookup on ImageFetcher
- currently looks the files in the FTP for cards
- closes #1223
2022-07-30 17:13:15 +08:00
Anthony Calosa
b32e7ab137 Merge pull request #1243 from kevlahnota/master
support lookup file for rewardActor
2022-07-30 13:04:22 +08:00
Anthony Calosa
d369b45e60 support lookup card 2022-07-30 12:58:54 +08:00
Anthony Calosa
9e602202a8 update counter 2022-07-30 12:08:57 +08:00
Anthony Calosa
3195df6ad3 Merge pull request #1241 from tool4ever/cleanstuff
Card cleanup and small fixes
2022-07-30 11:28:16 +08:00
Anthony Calosa
f4e6599d6b Merge pull request #1242 from kevlahnota/master
fix some leaks on RewardActor
2022-07-30 11:22:06 +08:00
Anthony Calosa
2e0e287ead update comment 2022-07-30 11:19:16 +08:00
Anthony Calosa
b318b74ab4 fix some leaks on RewardActor
- fix not clearing RewardActor upon exiting scene
- use direct loading from assetmanager to prevent black texture
- clear card textures upon exiting scene to save RAM
2022-07-30 11:12:45 +08:00
tool4EvEr
1db274ddd6 Card cleanup and small fixes 2022-07-29 22:36:31 +02:00
Paul Hammerton
de26b0180c Merge pull request #1239 from paulsnoops/ha6_ea1_updates
Update HA6 & EA1 editions
2022-07-29 18:25:13 +01:00
paulsnoops
7bdae816f9 Update HA6 & EA1 editions 2022-07-29 17:30:55 +01:00
Anthony Calosa
1cd6dbb737 Merge pull request #1238 from kevlahnota/master
fix plural ends with "ds"
2022-07-29 21:20:40 +08:00
Anthony Calosa
74f5bb6999 Merge pull request #1237 from JohnWilliams77/patch-30
Update Secret Lair Drop Series.txt
2022-07-29 21:20:26 +08:00
Anthony Calosa
31bd2ff572 fix plural ends with "ds" 2022-07-29 21:07:48 +08:00
JohnWilliams77
c087a23ec0 Update Secret Lair Drop Series.txt 2022-07-29 13:26:34 +01:00
Paul Hammerton
64468db40d Merge pull request #1236 from JohnWilliams77/patch-29
Regional Championship Qualifiers 2022 Promos
2022-07-29 11:41:30 +01:00
JohnWilliams77
497103dd10 Create Regional Championship Qualifiers 2022.txt 2022-07-29 11:29:21 +01:00
Anthony Calosa
8f111680b1 Merge pull request #1234 from kevlahnota/master
add switchbutton on HoldTooltip
2022-07-29 18:25:39 +08:00
Anthony Calosa
4532320545 Merge pull request #1235 from JohnWilliams77/patch-28
Update Secret Lair Drop Series.txt
2022-07-29 18:25:24 +08:00
JohnWilliams77
ab66afd63d Update Secret Lair Drop Series.txt 2022-07-29 10:31:57 +01:00
Anthony Calosa
368abbf0b4 add switchbutton on HoldTooltip
- also update coloridentity based on selected deck
- highlight deck text for empty deck
2022-07-29 16:40:33 +08:00
Anthony Calosa
0de036b932 Merge pull request #1232 from kevlahnota/master
fix memory tracking computation
2022-07-29 13:12:02 +08:00
Anthony Calosa
aa61fc1031 add starterdecks to res 2022-07-29 13:10:56 +08:00
Anthony Calosa
cb7c9eee6e fix memory tracking computation
compute the probable Texture usaga
2022-07-29 12:50:03 +08:00
friarsol
fb8f1fdeb9 Remove some useless comments 2022-07-28 23:15:25 -04:00
Anthony Calosa
d77bba0f05 Merge pull request #1231 from kevlahnota/master
Starter deck for AdventurePlayer
2022-07-29 04:55:38 +08:00
Anthony Calosa
2be8d83304 Starter deck for AdventurePlayer 2022-07-29 04:42:55 +08:00
Anthony Calosa
d5ec0632f5 Merge pull request #1227 from tool4ever/blockAI
AiBlockController: Performance
2022-07-29 00:05:07 +08:00
Anthony Calosa
0aa93a25a6 Merge pull request #1230 from kevlahnota/master
support showing back face on shops and loot on adventure mode
2022-07-29 00:01:39 +08:00
Anthony Calosa
70bd8bddf8 support showing back face on shops and loot on adventure mode
- for mobile backport, hover the card and left click to switch the tooltip
- for android, double tap the image before holdtouching to switch tooltip
2022-07-28 23:52:12 +08:00
Northmoc
41ab7d840e CLB: 26 Jul (#1206)
* sculpted_sunburst.txt

* ChooseCardEffect.getStackDescription tweak for weird case

* sigil_of_myrkul.txt

* stonespeaker_crystal.txt

* thunderwave.txt remove bad param

* tlincalli_hunter_retrieve_prey.txt

* topaz_dragon_entropic_cloud.txt
2022-07-28 18:15:28 +03:00
Northmoc
62ebee0130 Merge pull request #1209 from Northmoc/clb_26b
CLB: 26 Jul (more)
2022-07-28 10:59:54 -04:00
Northmoc
7bedcf8483 back_alley_gardener.txt 2022-07-28 10:49:42 -04:00
tool4ever
b10fe427d5 Creature.Self -> Card.Self for Myrkul ETBs (#1225)
* Creature.Self -> Card.Self for Myrkul ETBs

* Clean up

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-07-28 17:33:06 +03:00
Northmoc
8994f3d44b Merge pull request #1221 from Suthro/master
DMU + DMC: Temporal Firestorm; Ramirez DePietro, Pillager; Tor Wauki the Younger
2022-07-28 09:54:19 -04:00
tool4EvEr
d8826bb1c4 Performance 2022-07-28 15:49:00 +02:00
Grimm
42ae9dda06 wavefunction collapse first integration 2022-07-28 11:55:05 +02:00
Grimm
dc06bab331 AdventureEditor: added editors 2022-07-28 11:54:35 +02:00
Suthro
3b8d6b2bb3 Update temporal_firestorm.txt 2022-07-27 22:32:23 -05:00
Suthro
8d739cdb32 Update ramirez_depietro_pillager.txt 2022-07-27 22:31:54 -05:00
Suthro
c11a4d69c5 Update jasmine_boreal_of_the_seven.txt 2022-07-27 22:31:32 -05:00
Anthony Calosa
e24259b500 Merge pull request #1222 from kevlahnota/master
fix onfetched for RewardActor
2022-07-28 10:30:42 +08:00
Anthony Calosa
720afb044d fix onfetched for RewardActor
- should fix the issue of not loading the images downloaded. This should method should get directly from the assetmanager.
2022-07-28 10:24:39 +08:00
friarsol
2a12f830aa Update inn portrait with false life 2022-07-27 22:17:15 -04:00
friarsol
c9aa5baa83 Improve messaging for costs 2022-07-27 22:16:00 -04:00
friarsol
a42cb4f273 Convert heal to temp HP bonus for $200+ gold 2022-07-27 22:15:59 -04:00
Grimm
7b680c8692 Merge remote-tracking branch 'origin/adventure' into adventure
# Conflicts:
#	forge-gui-mobile/src/forge/adventure/util/RewardActor.java
2022-07-28 04:15:21 +02:00
Grimm
97b2fe505f wavefunction collapse first integration 2022-07-28 04:13:26 +02:00
Grimm
dbbc065ead AdventureEditor: added editors 2022-07-28 04:12:51 +02:00
Grimm
cfd2e3723e Merge remote-tracking branch 'origin/adventure' into adventure 2022-07-28 04:12:36 +02:00
Grimm
cee28bb62a wavefunction collapse first integration 2022-07-28 04:12:17 +02:00
Anthony Calosa
2396e7d1d0 Merge pull request #1220 from Northmoc/tweaks
Card tweaks (recently added and related)
2022-07-28 08:15:30 +08:00
Anthony Calosa
8fa383b0d4 Merge pull request #1207 from Northmoc/showdown
CLB: Spectacular Showdown and support
2022-07-28 08:14:34 +08:00
Suthro
bd55792bdf Update jasmine_boreal_of_the_seven.txt 2022-07-27 14:12:15 -05:00
Suthro
67b7407836 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-07-27 13:47:30 -05:00
Suthro
ea0ae56fe2 DMC: Jasmine Boreal of the Seven
DMC: Add script for Jasmine Boreal of the Seven
2022-07-27 13:47:12 -05:00
Suthro
626c7853ab Update temporal_firestorm.txt
Fixed awkward StackDescription
2022-07-27 13:37:45 -05:00
Suthro
2f2fa15f30 Merge branch 'Card-Forge:master' into master 2022-07-27 13:23:33 -05:00
Suthro
c36346eb81 DMU + DMC: Temporal Firestorm; Ramirez DePietro, Pillager; Tor Wauki the Younger
DMU + DMC: Add scripts for one DMU card, two DMC cards:

- Temporal Firestorm
- Ramirez DePietro, Pillager
- Tor Wauki the Younger
2022-07-27 13:21:57 -05:00
tool4ever
452f4e26f7 Durnan fix (#1219)
Co-authored-by: TRT <>
2022-07-27 19:13:34 +03:00
Northmoc
ac6347c94b GameEntityCounterTable.replaceCounterEffect dodge NPE 2022-07-27 11:48:42 -04:00
Northmoc
21da14e5cf agitator_ant.txt spectacular_showdown.txt refactor to "RememberPut" 2022-07-27 11:33:38 -04:00
Northmoc
2717862ca7 GameEntityCounterTable.replaceCounterEffect support "RememberPut" 2022-07-27 11:33:04 -04:00
Northmoc
b6bf1097bd clarify usage in CountersPutEffect and CountersPutAllEffect 2022-07-27 11:32:44 -04:00
Northmoc
498d6892ab druidic_ritual.txt remove unneeded 2022-07-27 10:59:06 -04:00
Northmoc
22dfd94818 Dominaria United.txt add monk token 2022-07-27 10:58:55 -04:00
Northmoc
74f4e7f4b4 jaya_fiery_negotiator.txt better cleanups for -1 2022-07-27 09:05:15 -04:00
Northmoc
b4ef91dab3 jaya_fiery_negotiator.txt clean up 2022-07-27 08:57:00 -04:00
Northmoc
c23129155f channel_harm.txt fix bad placeholder 2022-07-27 08:38:47 -04:00
Northmoc
e77cc20da9 skyline_savior.txt tighten up 2022-07-27 08:30:48 -04:00
Northmoc
37f7265199 evolved_sleeper.txt AI hint 2022-07-27 08:30:15 -04:00
Northmoc
28625790b8 crystal_dragon_rob_the_hoard.txt AI hint 2022-07-27 08:30:04 -04:00
Anthony Calosa
e9f330d514 Create forge-adventure-mac.sh
startup command for mac users
2022-07-27 17:27:05 +08:00
Anthony Calosa
2de4c3daed Merge pull request #1218 from kevlahnota/master
fix android tooltip after fetching card image
2022-07-27 17:09:13 +08:00
Anthony Calosa
b1bb24add7 fix android tooltip after fetching card image 2022-07-27 16:38:32 +08:00
Anthony Calosa
d974d2ba08 Merge pull request #1208 from Northmoc/planetar
CLB: Windshaper Planetar and support
2022-07-27 15:02:31 +08:00
Anthony Calosa
f61228f985 Merge pull request #1210 from Suthro/master
CLB: 5 scripts, incl. 2 backgrounds
2022-07-27 14:59:52 +08:00
Suthro
9e8179a778 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-07-27 01:47:11 -05:00
Suthro
3f6d3180c8 DMU: Jaya, Fiery Negotiator + Token, + Evolved Sleeper
DMU: Added scripts for newly spoiled cards

- Jaya, Fiery Negotiator
- 1/1 red Monk creature token with prowess
- Evolved Sleeper
2022-07-27 01:47:09 -05:00
Northmoc
ecbc4ffdc8 Sarevok's Tome (CLB) and related tweaks (#1205)
* sarevoks_tome.txt

* DigUntilEffect.getStackDescription use exile verb when appropriate, better untilAmount parse

* DigUntilEffect.getStackDescription support "NoPutDesc"

* somewhat related old card tweaks

* DigUntilEffect.getStackDescription missing ')'

* sarevoks_tome.txt add DefinedDesc
2022-07-27 08:47:00 +02:00
Northmoc
2312dc27b8 TwoPiles streamline (+ CLB Split the Spoils) (#1200)
* remove cleanups from old TwoPiles cards

* TwoPilesEffect.resolve clear remembered after each pile sub

* split_the_spoils.txt

* split_the_spoils.txt fix

* epiphany_at_the_drownyard.txt too

* stand_or_fall.txt tighten up more

* TwoPilesEffect.resolve add "RememberChosen" as shortcut past ChosenPile -> Pump remember/imprint

* make_an_example.txt and stand_or_fall.txt with "RememberChosen"

* split_the_spoils.txt Defined -> Chooser
2022-07-27 08:45:10 +02:00
Anthony Calosa
b747edfa9f Merge pull request #1214 from kevlahnota/master
refactor RewardActor
2022-07-27 14:41:47 +08:00
Anthony Calosa
8f691f05d8 remove unnecesary loop 2022-07-27 14:33:18 +08:00
Anthony Calosa
4855ddcf5c refactor RewardActor
- fetched images online should update and appear immediately after download on Adventure mode on RewardScene (Shop, Loot)
2022-07-27 14:26:08 +08:00
Suthro
0f3fcdb1fd Update crystal_dragon_rob_the_hoard.txt 2022-07-26 23:46:49 -05:00
Suthro
d93b7b7547 Update criminal_past.txt 2022-07-26 23:45:56 -05:00
Suthro
d46f2677fa Update coronation_of_chaos.txt 2022-07-26 23:45:37 -05:00
Suthro
d99a5e7af0 Update cloudkill.txt 2022-07-26 23:45:04 -05:00
squee1968
08dfc4fcb1 Create skyline_savior.txt (#1213) 2022-07-27 07:27:38 +03:00
Suthro
95cc0fdbf6 Merge branch 'Card-Forge:master' into master 2022-07-26 17:16:17 -05:00
Suthro
f98a4a4eb1 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-07-26 17:15:33 -05:00
Suthro
7ee4d74290 CLB: 2 backgrounds+ 3 other scripts
CLB: Added scripts

- Cloudkill
- Coronation of Chaos
- Criminal Past
- Crystal Dragon // Rob the Hoard
- Cultist of the Absolute
2022-07-26 17:15:31 -05:00
Northmoc
d2e4cfb185 two_handed_axe_sweeping_cleave.txt 2022-07-26 18:02:34 -04:00
Northmoc
e8e3db2f43 viconia_drow_apostate.txt 2022-07-26 18:02:22 -04:00
Northmoc
49861df4fc CountersPutAllEffect move Remember after replacement 2022-07-26 17:14:47 -04:00
Northmoc
0965d108f0 ChangeCombatantsEffect.resolve support "Optional" and better support multiple target cards 2022-07-26 17:06:14 -04:00
Northmoc
d4b4fc9467 Prompt - lblChangeCombatantOption 2022-07-26 17:05:37 -04:00
Northmoc
768ac96a6a portal_mage.txt tidy 2022-07-26 17:05:02 -04:00
Northmoc
77b3ba62a2 windshaper_planetar.txt 2022-07-26 17:04:51 -04:00
Northmoc
ed467fa2d1 CountersPutAllEffect.resolve add "RememberCards" 2022-07-26 16:12:06 -04:00
Northmoc
75264c6115 GoadEffect.getStackDescription support "DefinedDesc" for when Defined isn't filled at time of StackDesc 2022-07-26 16:11:44 -04:00
Northmoc
29ba41d20f spectacular_showdown.txt 2022-07-26 16:10:57 -04:00
tool4ever
0f0df7e6ea PlayerFactory: Fix protection zones (#1204) 2022-07-26 16:34:24 +00:00
tool4ever
5540102b67 Fix Chooser$ defaults & Evolve for non-creatures (#1202)
Co-authored-by: TRT <>
2022-07-26 17:52:22 +03:00
Anthony Calosa
e6066c6d41 Merge pull request #1198 from Northmoc/clb_25
CLB - 25 Jul
2022-07-26 09:16:17 +08:00
Anthony Calosa
92bf495ee5 Merge pull request #1199 from kevlahnota/master
refactor loading defaultImage
2022-07-26 09:05:01 +08:00
Anthony Calosa
9b37b25a74 Update CardImageRenderer.java 2022-07-26 08:18:52 +08:00
Anthony Calosa
052a2bd16a refactor defaultImage
- use assetmanager to handle defaultImage
2022-07-26 08:11:13 +08:00
Northmoc
0157000144 popular_entertainer.txt fix Desc 2022-07-25 18:43:23 -04:00
Northmoc
c4fd300369 beacon_bolt.txt streamline 2022-07-25 18:42:47 -04:00
Northmoc
c161fab748 sailors_bane.txt streamline 2022-07-25 18:41:43 -04:00
Northmoc
4b16dccd4a tavern_brawler.txt 2022-07-25 16:53:09 -04:00
Northmoc
7330e27839 popular_entertainer.txt 2022-07-25 16:50:48 -04:00
Northmoc
55f742d32a passionate_archaeologist.txt 2022-07-25 16:49:31 -04:00
Northmoc
8b14f69da6 sapphire_dragon_psionic_pulse.txt 2022-07-25 16:48:14 -04:00
Northmoc
f88e3ab59a sailors_bane.txt 2022-07-25 16:47:47 -04:00
Anthony Calosa
e612076a4d Merge branch 'master' into newmaster 2022-07-26 02:29:17 +08:00
Anthony Calosa
ca1de6aacf prevent NPE 2022-07-26 02:25:23 +08:00
Anthony Calosa
9d2024b1ab Merge branch 'master' into newmaster 2022-07-26 01:19:39 +08:00
Anthony Calosa
bcb9ba16e8 Merge pull request #1195 from Card-Forge/kevlahnota-patch-2
update rewardactor
2022-07-26 01:17:55 +08:00
Anthony Calosa
637744e3cc update imagecache 2022-07-26 01:10:16 +08:00
Anthony Calosa
dd42977ac0 update reward actor 2022-07-26 01:08:25 +08:00
Anthony Calosa
027312e34c Merge branch 'master' into newmaster 2022-07-26 00:03:34 +08:00
Anthony Calosa
b2a0bf8a3a clear cardartCache on image fetched 2022-07-25 23:36:54 +08:00
Anthony Calosa
4601db0939 Merge branch 'master' into newmaster 2022-07-25 22:44:50 +08:00
Northmoc
c28a1f0f98 CLB - 22 Jul (more) (#1174)
* druidic_ritual.txt

* en-US.properties better Mill prompt

* fraying_line.txt

* barrowin_of_clan_undurr.txt should not target

* emerald_dragon_dissonant_wave.txt

* flaming_fist.txt

* drillworks_mole.txt

* CounterEnumType.ROPE

* druidic_ritual.txt just one ChangeZone

* ChangeZoneEffect.changeZonePlayerInvariant support ChangeType$ EACH X & Y

* ChangeZoneEffect.changeHiddenOriginStackDescription improve Yard -> Hand
2022-07-25 09:58:47 +03:00
Anthony Calosa
350af10aa7 Merge branch 'master' into newmaster 2022-07-25 07:51:43 +08:00
Anthony Calosa
bc8388ba3b Update MANUAL.txt 2022-07-25 07:49:11 +08:00
Anthony Calosa
dc810ae1cf Merge pull request #1184 from Northmoc/clb_23
CLB - 23 Jul
2022-07-25 07:02:56 +08:00
Anthony Calosa
9c67c1e797 Merge pull request #1187 from Northmoc/protect
Protection from player display updates (CLB Noble Heritage)
2022-07-25 07:02:22 +08:00
Anthony Calosa
0e79ddf8d8 fix check imagekey 2022-07-25 07:00:48 +08:00
Anthony Calosa
613deeddb7 Merge pull request #1192 from tool4ever/spectra
Fix Spectra Ward preventing attaching more aura (indirectly)
2022-07-25 06:56:56 +08:00
Anthony Calosa
d4c450b14f Merge branch 'master' into newmaster 2022-07-25 06:30:19 +08:00
tool4EvEr
df2341fc66 Fix Spectra Ward preventing attaching more aura (indirectly) 2022-07-24 21:01:12 +02:00
squee1968
f1c69d5275 Update baeloth_barrityl_entertainer.txt (#1191) 2022-07-24 17:31:28 +00:00
Paul Hammerton
1dee82a7f0 Merge pull request #1190 from paulsnoops/unf_edition_update
UNF edition update
2022-07-24 17:56:58 +01:00
paulsnoops
403131bdc9 UNF edition update 2022-07-24 17:52:40 +01:00
Anthony Calosa
dcf91806b5 Merge branch 'master' into newmaster 2022-07-24 18:18:20 +08:00
Anthony Calosa
744bf3ef4e Merge pull request #1188 from tool4ever/baeloth
Fix Baeloth and some others
2022-07-24 18:13:29 +08:00
tool4EvEr
c86c1d7c1b Fix Baeloth and some others 2022-07-24 11:49:37 +02:00
Anthony Calosa
5d719cad5d Merge branch 'master' into newmaster 2022-07-24 17:45:01 +08:00
Anthony Calosa
0eabb47003 Update kopala_warden_of_waves.txt 2022-07-24 17:41:33 +08:00
Anthony Calosa
da435cd8b9 Update kopala_warden_of_waves.txt 2022-07-24 17:41:19 +08:00
Anthony Calosa
33fd254229 Merge pull request #1186 from Northmoc/clb_23a
CLB - 23 Jul (more)
2022-07-24 16:36:22 +08:00
Anthony Calosa
a74fa5a39a Merge branch 'master' into newmaster 2022-07-24 14:27:33 +08:00
Northmoc
0c3375c36a eon_frolicker.txt update 2022-07-24 00:59:23 -04:00
Northmoc
36e1a8a5a3 noble_heritage.txt 2022-07-24 00:59:06 -04:00
Northmoc
4da6f5039d Player.updateKeywordCardAbilityText improve Protection keyword parsing 2022-07-24 00:58:23 -04:00
Northmoc
773bd38a5f PumpEffect.resolve clarify parse of DefinedKW for Protection from specific players 2022-07-24 00:54:14 -04:00
Northmoc
e8806920d4 PlayerFactoryUtil minor fix 2022-07-24 00:52:54 -04:00
Northmoc
521c8b6da4 pack_attack.txt 2022-07-24 00:43:27 -04:00
Anthony Calosa
c2abcf52e6 update HumanCostDecision (#1185)
shows card intended for confirmaction
- closes #1177
2022-07-24 07:36:20 +03:00
Northmoc
7fdea62fcb selvalas_charge.txt fix bad param 2022-07-24 00:20:19 -04:00
Anthony Calosa
0db7825c58 Merge branch 'master' into newmaster 2022-07-24 10:15:29 +08:00
Northmoc
d287aa2b66 nautiloid_ship.txt 2022-07-23 18:21:08 -04:00
Northmoc
ca3645d3c2 nimbleclaw_adept.txt 2022-07-23 17:43:05 -04:00
Northmoc
2b38752f53 nefarious_imp.txt 2022-07-23 17:39:40 -04:00
Northmoc
07a040a070 owlbear_cub.txt 2022-07-23 17:33:45 -04:00
Northmoc
7ca51f3c3c nalfeshnee.txt some AI hints 2022-07-23 14:54:08 -04:00
Northmoc
e61101e931 horn_of_valhalla_ysgards_call.txt 2022-07-23 14:50:39 -04:00
Northmoc
30dbfd695a from_the_catacombs.txt 2022-07-23 14:43:03 -04:00
Northmoc
2fa0b01448 inspiring_leader.txt 2022-07-23 14:27:59 -04:00
Northmoc
16e1c4f0d8 intellect_devourer.txt 2022-07-23 14:23:30 -04:00
Northmoc
cb1e434c76 CLB - 22 Jul (even more) (#1175)
* laezels_acrobatics.txt

* majestic_genesis.txt

* loot_dispute.txt

* journey_to_the_lost_city.txt

* modify_memory.txt

* loot_dispute.txt improve AI

* modify_memory.txt improve draw condition
2022-07-23 21:23:24 +03:00
Northmoc
00f4b64e17 Clean up a few cards (#1181)
* navigation_orb.txt add Cleanup

* overwhelming_encounter.txt tidy Desc and AI

* skyway_robber.txt remove # line
2022-07-23 21:23:08 +03:00
squee1968
d2fe95f7a1 Create psionic_ritual.txt (#1164)
* Create psionic_ritual.txt

-closes #927

* Update psionic_ritual.txt
2022-07-23 21:22:42 +03:00
Northmoc
692951280f guildsworn_prowler.txt 2022-07-23 14:18:55 -04:00
Anthony Calosa
008fc2d304 Merge branch 'master' into newmaster 2022-07-23 20:12:49 +08:00
Anthony Calosa
bce9b5a17c Merge pull request #1160 from tool4ever/jaxis
Fix Jaxis
2022-07-23 20:12:20 +08:00
Anthony Calosa
0d80b863d4 Merge branch 'master' into newmaster 2022-07-23 19:53:40 +08:00
Anthony Calosa
c670ee2da1 Merge pull request #1180 from paulsnoops/jmd_fix
Fix scripts causing deck editor crash
2022-07-23 19:52:46 +08:00
Anthony Calosa
e896c30485 Merge branch 'master' into newmaster 2022-07-23 19:43:13 +08:00
paulsnoops
31f69347d8 Fix scripts causing deck editor crash 2022-07-23 12:41:55 +01:00
Anthony Calosa
2d2f0343e1 Merge pull request #1178 from Card-Forge/kevlahnota-patch-2
some CLB cards..
2022-07-23 18:38:39 +08:00
Anthony Calosa
3ac72eb88c Update mystery_key.txt 2022-07-23 18:29:59 +08:00
Anthony Calosa
de2ca1ec57 Update mystery_key.txt 2022-07-23 18:12:57 +08:00
Anthony Calosa
ddc2b0c017 Merge pull request #1172 from Northmoc/clb_22
CLB - 22 Jul
2022-07-23 16:26:45 +08:00
Anthony Calosa
e94e3310ae Merge pull request #1165 from Card-Forge/kevlahnota-patch-1
some CLB cards
2022-07-23 16:26:10 +08:00
Anthony Calosa
9b59a5b7db Create recruitment_drive.txt 2022-07-23 16:05:05 +08:00
Anthony Calosa
2801339524 Create oceanus_dragon.txt 2022-07-23 15:50:58 +08:00
Anthony Calosa
513e992940 Create overwhelming_encounter.txt 2022-07-23 15:43:53 +08:00
Anthony Calosa
d858f3f0b9 Create nothic.txt 2022-07-23 15:09:14 +08:00
Anthony Calosa
e01456259e Create mystery_key.txt 2022-07-23 14:43:31 +08:00
Anthony Calosa
1583a5721d Merge branch 'master' into newmaster 2022-07-23 14:00:42 +08:00
Anthony Calosa
c84185a28c Update guiding_bolt.txt 2022-07-23 13:54:43 +08:00
Northmoc
aca45368a7 CLB: Nalfeshnee & support (#1176)
* nalfeshnee.txt

* CardFactory.copySpellHost support "RememberNewCard"

* nalfeshnee.txt better AI
2022-07-23 08:49:54 +03:00
Northmoc
1f3c2aa157 death_kiss.txt improve AI 2022-07-23 01:35:53 -04:00
Anthony Calosa
8aa243f8b3 Update CopySpellAbilityEffect.java 2022-07-23 07:23:33 +08:00
Anthony Calosa
a8cfea22c2 Delete nalfeshnee.txt 2022-07-23 07:22:05 +08:00
Northmoc
7abe34b06f death_kiss.txt 2022-07-22 17:05:12 -04:00
Northmoc
bc37db49fa cut_a_deal.txt 2022-07-22 16:58:56 -04:00
Northmoc
6cf263b6a3 thallid.txt tidy up 2022-07-22 16:54:26 -04:00
Northmoc
1aeeae74ac grixis_battlemage.txt add AI 2022-07-22 16:54:13 -04:00
Northmoc
0b824698dd dragonborn_looter.txt 2022-07-22 16:54:01 -04:00
Northmoc
e6d8373e44 dire_mimic.txt 2022-07-22 16:53:11 -04:00
Northmoc
d085419a92 descent_into_avernus.txt and CounterEnumType.DESCENT 2022-07-22 16:48:51 -04:00
Paul Hammerton
028e94c7bc Merge pull request #1169 from JohnWilliams77/patch-27
2 DMU cards
2022-07-22 18:04:20 +01:00
Northmoc
a9d1632cf4 Merge pull request #1171 from paulsnoops/qol_stuff
DeckHas for treasure QoL stuff
2022-07-22 13:04:01 -04:00
paulsnoops
eb19ce0a3e DeckHas for treasure QoL stuff 2022-07-22 17:55:45 +01:00
paulsnoops
f006a2f043 DeckHas for treasure QoL stuff 2022-07-22 17:12:53 +01:00
Anthony Calosa
5217393bc7 Update firbolg_flutist.txt 2022-07-23 00:11:49 +08:00
JohnWilliams77
b1654bd400 Update llanowar_loamspeaker.txt 2022-07-22 16:56:15 +01:00
Anthony Calosa
854559ce25 Update nalfeshnee.txt 2022-07-22 23:47:19 +08:00
Anthony Calosa
d899b5ed45 Update mighty_servant_of_leuk_o.txt 2022-07-22 23:45:36 +08:00
Anthony Calosa
6fbc490143 Update lurking_green_dragon.txt 2022-07-22 23:44:43 +08:00
Anthony Calosa
5b51242336 Update guiding_bolt.txt 2022-07-22 23:43:41 +08:00
Anthony Calosa
d7ed10bd8f Update greatsword_of_tyr.txt 2022-07-22 23:42:31 +08:00
Anthony Calosa
36e295864c Update gray_harbor_merfolk.txt 2022-07-22 23:40:25 +08:00
Anthony Calosa
8210504253 Update genasi_enforcers.txt 2022-07-22 23:38:42 +08:00
Anthony Calosa
8caa9dc6c8 Update firbolg_flutist.txt 2022-07-22 23:36:56 +08:00
Anthony Calosa
88f6afe62d Update font_of_magic.txt 2022-07-22 23:33:52 +08:00
Northmoc
5de7b2bfec tome_of_legends.txt remove bad AI line (#1170) 2022-07-22 17:14:11 +02:00
JohnWilliams77
3bd9a14018 Update llanowar_loamspeaker.txt 2022-07-22 14:28:22 +01:00
Anthony Calosa
2ef4637502 Update mighty_servant_of_leuk_o.txt 2022-07-22 21:15:15 +08:00
Anthony Calosa
4dd6bfb0aa Update icewind_stalwart.txt 2022-07-22 21:11:40 +08:00
Anthony Calosa
9e156995db Update inspired_tinkering.txt 2022-07-22 21:10:33 +08:00
Anthony Calosa
fdb3aa4fe5 Create myrkuls_invoker.txt 2022-07-22 21:06:50 +08:00
Anthony Calosa
157426b0a2 Create nalfeshnee.txt 2022-07-22 20:58:36 +08:00
Anthony Calosa
90c207cbda add UnearthEffect
for copied permanent spell
2022-07-22 20:57:18 +08:00
JohnWilliams77
13e22376ab Create llanowar_loamspeaker.txt 2022-07-22 13:53:55 +01:00
JohnWilliams77
b43dbe4e33 Create shivan_devastator.txt 2022-07-22 13:52:31 +01:00
Anthony Calosa
e4a508eb7b Update jaheiras_respite.txt 2022-07-22 18:01:15 +08:00
Anthony Calosa
3259ae4b42 Update greatsword_of_tyr.txt 2022-07-22 18:00:28 +08:00
Anthony Calosa
4c8252933f Update jaheiras_respite.txt 2022-07-22 16:50:05 +08:00
Anthony Calosa
dd745b76b7 Update greatsword_of_tyr.txt 2022-07-22 16:43:53 +08:00
Anthony Calosa
f291526984 Update juvenile_mist_dragon.txt 2022-07-22 16:40:19 +08:00
Anthony Calosa
3097395007 Update greatsword_of_tyr.txt 2022-07-22 16:33:07 +08:00
Anthony Calosa
015e32b43b Update jaheiras_respite.txt 2022-07-22 16:28:04 +08:00
Paul Hammerton
09e898a4eb Merge pull request #1168 from paulsnoops/formats_update
Add 2X2, HA6, EA1 to formats
2022-07-22 08:34:08 +01:00
paulsnoops
554886a25d Add 2X2, HA6, EA1 to formats 2022-07-22 08:30:10 +01:00
Paul Hammerton
3c283482ad Merge pull request #1167 from paulsnoops/edition_updates
SLD edition update & add P30A edition
2022-07-22 08:22:01 +01:00
paulsnoops
3df8707727 SLD edition update & add P30A edition 2022-07-22 08:16:53 +01:00
Anthony Calosa
01dfc23077 Create myconid_spore_tender.txt 2022-07-22 14:51:38 +08:00
Anthony Calosa
85a8d06fe1 Create mighty_servant_of_leuk_o.txt 2022-07-22 14:44:27 +08:00
Anthony Calosa
8bfe9e3186 add ValidCrewAmount 2022-07-22 14:42:15 +08:00
Anthony Calosa
433ffcb9dc Create lurking_green_dragon.txt 2022-07-22 12:14:22 +08:00
Anthony Calosa
3829008a81 Create juvenile_mist_dragon.txt 2022-07-22 12:08:44 +08:00
Anthony Calosa
1973a7f945 Create javelin_of_lightning.txt 2022-07-22 12:03:01 +08:00
Anthony Calosa
cc382dc1a0 Create jaheiras_respite.txt 2022-07-22 11:58:52 +08:00
Anthony Calosa
caf42953d6 Create insufferable_balladeer.txt 2022-07-22 11:33:25 +08:00
Anthony Calosa
2704deaf02 Create inspired_tinkering.txt 2022-07-22 11:23:40 +08:00
Anthony Calosa
ac51206aa5 Create icewind_stalwart.txt 2022-07-22 09:19:06 +08:00
Anthony Calosa
6e972014e1 Create guiding_bolt.txt 2022-07-22 09:11:26 +08:00
Anthony Calosa
6c50c71baf Create greatsword_of_tyr.txt 2022-07-22 09:05:51 +08:00
Anthony Calosa
1975dbe9c1 Create gray_harbor_merfolk.txt 2022-07-22 09:00:41 +08:00
Anthony Calosa
a14db3ad3e Create goggles_of_night.txt 2022-07-22 08:51:41 +08:00
Anthony Calosa
93ec29a3e3 Create genasi_enforcers.txt 2022-07-22 08:46:06 +08:00
Anthony Calosa
15810482f0 Create font_of_magic.txt 2022-07-22 08:39:33 +08:00
Paul Hammerton
72c229b593 Merge pull request #1166 from paulsnoops/new_editions
DMU, DMC, HA6, EA1 new editions & GDY, SCH edition updates
2022-07-22 00:32:31 +01:00
paulsnoops
7d97faa647 DMU, DMC, HA6, EA1 new editions & GDY, SCH edition updates 2022-07-22 00:23:41 +01:00
Anthony Calosa
281905dede Create firbolg_flutist.txt 2022-07-22 07:05:26 +08:00
Anthony Calosa
471b8adb93 Merge branch 'master' into newmaster 2022-07-22 06:08:12 +08:00
Northmoc
3e45ab1f1c Merge pull request #1058 from mctubbies/mctubbies-zellix
Card Script for Zellix, Sanity Flayer
2022-07-21 14:03:41 -04:00
Anthony Calosa
43e0f0a703 Merge pull request #1162 from Card-Forge/kevlahnota-patch-6
some CLB cards
2022-07-21 21:01:31 +08:00
Anthony Calosa
432ce551d2 Merge pull request #1161 from squee1968/Pact-Weapon
Create pact_weapon.txt
2022-07-21 19:02:54 +08:00
Anthony Calosa
1b84bfd4c0 Update swashbuckler_extraordinaire.txt 2022-07-21 18:58:28 +08:00
Anthony Calosa
8de6b73ec2 Create nimblewright_schematic.txt 2022-07-21 18:57:27 +08:00
Anthony Calosa
5f8c0ffede Create poison_the_blade.txt 2022-07-21 18:43:48 +08:00
Anthony Calosa
972757c5de Create pseudodragon_familiar.txt 2022-07-21 18:38:49 +08:00
Anthony Calosa
34a6c00714 Create reckless_barbarian.txt 2022-07-21 18:19:04 +08:00
Anthony Calosa
9702939c42 Create rescuer_chwinga.txt 2022-07-21 18:16:13 +08:00
Anthony Calosa
16a069c8be Update scouting_hawk.txt 2022-07-21 18:05:07 +08:00
Anthony Calosa
e4feb82f40 Update AbilityUtils.java 2022-07-21 18:01:11 +08:00
Anthony Calosa
90bb1106f4 Create rug_of_smothering.txt 2022-07-21 18:00:23 +08:00
Anthony Calosa
6eccddbb7d Create saddle_of_the_cavalier.txt 2022-07-21 17:40:26 +08:00
Anthony Calosa
457c23bb2f Create scouting_hawk.txt 2022-07-21 17:32:07 +08:00
Anthony Calosa
a3eb6e2d02 Update swashbuckler_extraordinaire.txt 2022-07-21 17:24:56 +08:00
Anthony Calosa
2cfc0f93d8 Create sharpshooter_elf.txt 2022-07-21 17:22:35 +08:00
Anthony Calosa
969c405dc0 Update swashbuckler_extraordinaire.txt 2022-07-21 16:32:36 +08:00
tool4EvEr
4e5d273588 Clean up 2022-07-21 09:37:49 +02:00
squee1968
d46bf31487 Update pact_weapon.txt 2022-07-21 01:46:37 -05:00
Anthony Calosa
8903d52186 Create steadfast_unicorn.txt 2022-07-21 13:24:55 +08:00
Anthony Calosa
cfe15d45fe Create stoneskin.txt 2022-07-21 13:09:53 +08:00
Anthony Calosa
900159cb2b Create stunning_strike.txt 2022-07-21 13:00:23 +08:00
Anthony Calosa
103c4f2eb6 Create swashbuckler_extraordinaire.txt 2022-07-21 12:36:52 +08:00
Anthony Calosa
48b1e604f1 Merge branch 'master' into newmaster 2022-07-21 11:41:53 +08:00
Anthony Calosa
7ef35d4337 Update balor.txt 2022-07-21 11:40:48 +08:00
squee1968
0723069473 Update pact_weapon.txt 2022-07-20 20:16:38 -05:00
squee1968
85437913b7 Update pact_weapon.txt 2022-07-20 17:21:48 -05:00
squee1968
6d6e8d15f0 Update pact_weapon.txt 2022-07-20 17:17:12 -05:00
tool4EvEr
28d516b079 Update cards 2022-07-20 22:56:33 +02:00
squee1968
7cc238df23 Create pact_weapon.txt
-closes #918
2022-07-20 15:30:53 -05:00
Anthony Calosa
15b4c4a24b Merge branch 'master' into newmaster 2022-07-21 01:25:45 +08:00
Anthony Calosa
6d0ad64bfc Merge pull request #1151 from Suthro/master
CLB: Ancient Gold Dragon, Bane's Contingency, Barroom Brawl
2022-07-21 00:03:17 +08:00
Anthony Calosa
3a4dab2cc0 Merge pull request #1158 from tool4ever/rollDie
RolledDie: support (un)natural results
2022-07-21 00:01:51 +08:00
Suthro
da982571f9 Update multiclass_baldric.txt 2022-07-20 10:14:32 -05:00
TRT
35663092bd Fix Jaxis 2022-07-20 16:53:39 +02:00
Suthro
6ca6af6dd7 Update solemn_doomguide.txt 2022-07-20 09:37:04 -05:00
Suthro
64029578c6 Update multiclass_baldric.txt 2022-07-20 09:36:30 -05:00
Suthro
b6d1dfbfb2 Update harper_recruiter.txt 2022-07-20 09:35:18 -05:00
Suthro
b939c54d7c Update clan_crafter.txt 2022-07-20 09:34:48 -05:00
Suthro
e5f6ef243b Update barroom_brawl.txt 2022-07-20 09:34:25 -05:00
TRT
e311e497b8 Clean cards 2022-07-20 15:41:06 +02:00
TRT
39e2588d5c Clean up 2022-07-20 15:22:38 +02:00
TRT
8b51190f7e RolledDie: support (un)natural results 2022-07-20 14:49:26 +02:00
Paul Hammerton
12f410e093 Merge pull request #1156 from paulsnoops/p22_fix
P22 edition fix
2022-07-20 12:57:46 +01:00
paulsnoops
4f09e7f48c P22 edition fix 2022-07-20 12:53:23 +01:00
Anthony Calosa
728b2e4e0e Merge pull request #1153 from Card-Forge/kevlahnota-patch-5
some CLB cards
2022-07-20 19:14:59 +08:00
Paul Hammerton
3019ef84ba Merge pull request #1155 from paulsnoops/hbg_number_fix
HBG number fix
2022-07-20 12:03:43 +01:00
paulsnoops
01949a9f16 HBG number fix 2022-07-20 11:58:53 +01:00
Anthony Calosa
68f1b6dbda Update uchuulon.txt 2022-07-20 18:10:16 +08:00
Anthony Calosa
ce720c7232 Update youve_been_caught_stealing.txt 2022-07-20 18:05:06 +08:00
Anthony Calosa
b0815ab122 Update youve_been_caught_stealing.txt 2022-07-20 17:42:29 +08:00
Anthony Calosa
8b3929976b Update DestroyEffect.java 2022-07-20 17:37:06 +08:00
Anthony Calosa
77294d7baf Update wild_magic_surge.txt 2022-07-20 17:35:35 +08:00
Anthony Calosa
386c747e06 Update DestroyEffect.java 2022-07-20 17:34:25 +08:00
Anthony Calosa
9d0351c7c4 Update you_look_upon_the_tarrasque.txt 2022-07-20 17:17:08 +08:00
Anthony Calosa
a9d1b6a850 Update warehouse_thief.txt 2022-07-20 16:57:00 +08:00
Anthony Calosa
bfac75feee Update vexing_puzzlebox.txt 2022-07-20 16:54:49 +08:00
Anthony Calosa
cfdc4ffa42 Update youve_been_caught_stealing.txt 2022-07-20 16:53:44 +08:00
Anthony Calosa
d848293dfa Update uchuulon.txt 2022-07-20 16:46:41 +08:00
Anthony Calosa
ae2dde4018 Update uchuulon.txt 2022-07-20 16:46:12 +08:00
Anthony Calosa
2efa18ba09 Update thunderwave.txt 2022-07-20 16:45:30 +08:00
Anthony Calosa
c53ef50609 Update the_council_of_four.txt 2022-07-20 16:43:00 +08:00
Anthony Calosa
d209c14b7c Update taunting_kobold.txt 2022-07-20 16:42:23 +08:00
Suthro
2832d15fb3 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-07-20 02:05:01 -05:00
Suthro
80eeb61f18 CLB: Missing party cards 2022-07-20 02:04:59 -05:00
Anthony Calosa
3716eee735 Create tabaxi_toucaneers.txt 2022-07-20 14:26:57 +08:00
Anthony Calosa
8ef0809d62 Create taunting_kobold.txt 2022-07-20 14:24:23 +08:00
Anthony Calosa
39a2d19fea Create the_council_of_four.txt 2022-07-20 14:15:11 +08:00
Anthony Calosa
97df2fd2ec Update thunderwave.txt 2022-07-20 13:43:32 +08:00
Anthony Calosa
3b1587fad8 Update uchuulon.txt 2022-07-20 13:41:29 +08:00
Anthony Calosa
3eae3183e9 Update uchuulon.txt 2022-07-20 13:40:11 +08:00
Suthro
1c901f574d Update clan_crafter.txt 2022-07-20 00:22:58 -05:00
Anthony Calosa
863850cc15 Create thunderwave.txt 2022-07-20 13:12:01 +08:00
squee1968
560fc28d14 Create nalia_dearnise.txt (#1081)
* Create nalia_dearnise.txt

-closes #906

* Update nalia_dearnise.txt
2022-07-20 08:07:59 +03:00
Anthony Calosa
5f560b1bae Create tiamats_fanatics.txt 2022-07-20 12:34:37 +08:00
Anthony Calosa
5ff29afee2 Create uchuulon.txt 2022-07-20 12:03:57 +08:00
Suthro
ab314615c6 Update banes_contingency.txt 2022-07-19 22:57:22 -05:00
Suthro
e5c2c3c30e Update candlekeep_inspiration.txt 2022-07-19 22:57:06 -05:00
Anthony Calosa
c5ef8a7bcf Create undercellar_myconid.txt 2022-07-20 11:42:08 +08:00
Anthony Calosa
cbd4cc4ba6 Create vexing_puzzlebox.txt 2022-07-20 11:27:35 +08:00
Anthony Calosa
36d7740d5a Create vrock.txt 2022-07-20 09:33:05 +08:00
Anthony Calosa
5372f3259c Create warehouse_thief.txt 2022-07-20 09:14:37 +08:00
Anthony Calosa
baa9fd662e Create wild_magic_surge.txt 2022-07-20 09:01:07 +08:00
Anthony Calosa
e50d8af95a Create winter_eladrin.txt
closes #975
2022-07-20 08:41:53 +08:00
Anthony Calosa
deb03ae45d Create wyrms_crossing_patrol.txt 2022-07-20 08:38:34 +08:00
Anthony Calosa
0653d99ed1 Create you_look_upon_the_tarrasque.txt 2022-07-20 08:18:57 +08:00
Anthony Calosa
2f0f19b569 Create youre_confronted_by_robbers.txt 2022-07-20 08:05:21 +08:00
Anthony Calosa
fbff00ba74 Update youve_been_caught_stealing.txt 2022-07-20 08:04:27 +08:00
Anthony Calosa
309022e87b Create youve_been_caught_stealing.txt 2022-07-20 07:52:36 +08:00
Anthony Calosa
12890658ae Create your_temple_is_under_attack.txt 2022-07-20 07:31:30 +08:00
Anthony Calosa
2b4077c5f7 Merge branch 'master' into newmaster 2022-07-20 06:20:06 +08:00
Suthro
5e78f38b9f Update banes_contingency.txt 2022-07-19 14:28:51 -05:00
Suthro
c3220cf6f1 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-07-19 14:10:54 -05:00
Suthro
9675e07f36 CLB: 4 more CLB scripts 2022-07-19 14:10:52 -05:00
Suthro
ea01ab3b9d Merge branch 'Card-Forge:master' into master 2022-07-19 13:01:23 -05:00
Suthro
4cdffbab2b CLB: Ancient Gold Dragon + more CLB cards
Scripts for CLB cards:

- Ancient Gold Dragon
- Bane's Contingency
- Barroom Brawl
2022-07-19 13:00:45 -05:00
Paul Hammerton
9354f7d2e6 Merge pull request #1145 from Card-Forge/kevlahnota-patch-4-1
Create circle_of_the_land_druid.txt
2022-07-19 17:03:25 +01:00
Anthony Calosa
f8d229f8a9 Merge pull request #1149 from paulsnoops/desc_fix
Bronze Walrus desc fix oops
2022-07-20 00:02:02 +08:00
Anthony Calosa
67a932a4d1 Merge pull request #1150 from tool4ever/NPEcontrol
ControlGain: Fix NPE
2022-07-20 00:00:07 +08:00
Anthony Calosa
8fe5c253c3 Update circle_of_the_land_druid.txt 2022-07-19 23:59:03 +08:00
Paul Hammerton
f6c8f7bd3f Merge pull request #1143 from Card-Forge/kevlahnota-patch-3
Create astral_confrontation.txt
2022-07-19 16:53:27 +01:00
tool4EvEr
58f8d55977 ControlGain: Fix NPE 2022-07-19 17:53:11 +02:00
Anthony Calosa
5cfe5c6e72 Update circle_of_the_land_druid.txt 2022-07-19 23:51:42 +08:00
paulsnoops
0e54175907 Bronze Walrus desc fix oops 2022-07-19 16:51:05 +01:00
Anthony Calosa
f95fdfd565 Update astral_confrontation.txt 2022-07-19 23:45:20 +08:00
Paul Hammerton
f912645167 Merge pull request #1148 from paulsnoops/hbg_basics
Add HBG Basic Lands to edition file
2022-07-19 16:42:21 +01:00
Paul Hammerton
ae703b7ccf Merge pull request #1144 from Card-Forge/kevlahnota-patch-4
Create bronze_walrus.txt
2022-07-19 16:38:33 +01:00
Paul Hammerton
e212cb224d Merge pull request #1146 from Card-Forge/kevlahnota-patch-4-2
Create clockwork_fox.txt
2022-07-19 16:37:16 +01:00
Paul Hammerton
c181014d63 Merge pull request #1147 from JohnWilliams77/patch-26
Update Judge Gift Cards 2022.txt
2022-07-19 16:35:55 +01:00
paulsnoops
3b9df1eefd Add HBG Basic Lands to edition file 2022-07-19 16:34:59 +01:00
Anthony Calosa
7d7fce347b Update AbilityUtils.java 2022-07-19 23:30:20 +08:00
Anthony Calosa
c0dcec80c5 Update clockwork_fox.txt 2022-07-19 22:55:29 +08:00
JohnWilliams77
70431a5dbf Update Judge Gift Cards 2022.txt 2022-07-19 15:46:23 +01:00
Anthony Calosa
f32ac38c66 Create clockwork_fox.txt
closes #828
2022-07-19 22:33:29 +08:00
Anthony Calosa
b8f87cc191 Create circle_of_the_land_druid.txt
closes #825
2022-07-19 22:26:15 +08:00
Anthony Calosa
a684f7498a Create bronze_walrus.txt
closes #817
2022-07-19 22:17:04 +08:00
Anthony Calosa
41f966eb05 Create astral_confrontation.txt
closes #681
2022-07-19 22:03:11 +08:00
Anthony Calosa
ac2a15ccc0 Merge branch 'master' into newmaster 2022-07-19 12:57:39 +08:00
Anthony Calosa
e3c3dd9fc8 Merge pull request #1136 from tool4ever/castSACMC
Remove CastSACMC
2022-07-19 12:56:01 +08:00
Anthony Calosa
0b51fd5eb0 Merge branch 'master' into newmaster 2022-07-19 12:42:54 +08:00
Anthony Calosa
a1457c4666 update image counter 2022-07-19 12:41:19 +08:00
Anthony Calosa
c4fd16a67f Merge pull request #1140 from kevlahnota/master
refactor Assets
2022-07-19 12:34:32 +08:00
Anthony Calosa
7cc6ee18fd Update ImageCache.java 2022-07-19 12:17:44 +08:00
Anthony Calosa
7d9401df02 Merge branch 'master' into newmaster 2022-07-19 12:12:19 +08:00
Anthony Calosa
e14afcc1aa unused import 2022-07-19 12:08:54 +08:00
Anthony Calosa
80a48b7c2c refactor Assets
- modify fps display to show card images re/loaded
- also restore basicland rewards
2022-07-19 11:36:00 +08:00
Anthony Calosa
5f4c2fbf12 Merge pull request #1130 from tool4ever/untilHostLeavesPlay
Simultaneous untilHostLeavesPlay trigger
2022-07-19 11:11:45 +08:00
Anthony Calosa
8ce3b8921b Merge pull request #1139 from Card-Forge/saveInTowns
Allow saving from towns.
2022-07-19 11:11:21 +08:00
tool4EvEr
a1a91d7aa2 Clean up 2022-07-18 19:07:05 +02:00
TRT
999454c3cb Cleanup StaticAbility.parseParams 2022-07-18 12:17:28 +02:00
TRT
149902fd7e Update cards 2022-07-18 10:45:18 +02:00
Paul Hammerton
a184035391 Merge pull request #704 from Suthro/master
CLB: Nine-Fingers Keene
2022-07-18 07:52:24 +01:00
friarsol
121f7d8012 Allow saving from towns.
If you save from a town, make sure to restore the town as the current scene
2022-07-17 22:48:26 -04:00
Anthony Calosa
001bd07c94 Merge pull request #1135 from tool4ever/cleancards
Cleanup cards
2022-07-18 06:07:08 +08:00
Anthony Calosa
cc935575d2 Merge pull request #1133 from Card-Forge/kevlahnota-patch-3
Create storm_kings_thunder.txt
2022-07-18 05:55:26 +08:00
Anthony Calosa
523c3da134 Merge pull request #1132 from Card-Forge/kevlahnota-patch-2
Create mahadi_emporium_master.txt
2022-07-18 05:55:07 +08:00
Suthro
fadabfa8f9 Update tasha_unholy_archmage.txt 2022-07-17 15:16:43 -05:00
tool4EvEr
c307cab789 Elminster fix 2022-07-17 22:10:06 +02:00
tool4EvEr
d011c219b9 Remove CastSACMC 2022-07-17 21:51:10 +02:00
tool4EvEr
f940a24805 Cleanup cards 2022-07-17 21:38:48 +02:00
Anthony Calosa
729a81aab6 Update mahadi_emporium_master.txt 2022-07-18 00:04:46 +08:00
Anthony Calosa
9a6e1a886f Create storm_kings_thunder.txt 2022-07-17 18:46:42 +08:00
Anthony Calosa
7ec729fa08 Create mahadi_emporium_master.txt
closes #687
2022-07-17 18:24:36 +08:00
Suthro
a31fa11e42 Delete cliffgate.txt 2022-07-16 09:52:30 -05:00
Suthro
5524b5919c Delete citadel_gate.txt 2022-07-16 09:52:18 -05:00
tool4ever
809e2f256e Fix NPE (#1131)
* Fix NPE

* Cleanup
2022-07-16 08:56:31 +00:00
Suthro
4ab1b17bf6 Update tasha_unholy_archmage.txt 2022-07-15 16:40:40 -05:00
Suthro
6a8522767b Update tasha_unholy_archmage.txt 2022-07-15 16:00:26 -05:00
Suthro
3f789e76fe Update navigation_orb.txt 2022-07-15 12:40:00 -05:00
Suthro
b0e04da69c Update navigation_orb.txt 2022-07-15 12:38:20 -05:00
Suthro
e71c1571c3 Update tasha_unholy_archmage.txt 2022-07-15 12:28:39 -05:00
TRT
ae1861691a Simultaneous untilHostLeavesPlay trigger 2022-07-15 18:12:15 +02:00
Agetian
f44bb44e0f - Added puzzles PS_SNC3 - PS_SNC5. (#1129) 2022-07-15 18:12:15 +03:00
Anthony Calosa
4fc25d57a0 Merge pull request #1126 from tool4ever/stateTrig
Fix multiple state trigger
2022-07-15 17:43:51 +08:00
tool4EvEr
4fb84a1045 Fix multiple state trigger 2022-07-15 08:48:58 +02:00
Anthony Calosa
d8519d372c Merge pull request #1127 from churrufli/master
Net Deck Archive Updates
2022-07-15 11:35:55 +08:00
Churrufli
7cc5b51000 Merge branch 'master' of https://github.com/Card-Forge/forge 2022-07-15 00:33:02 +02:00
Churrufli
5bba608965 Net Deck Archive Updates 2022-07-15 00:29:52 +02:00
Anthony Calosa
da7f63d951 Merge pull request #1087 from Northmoc/clb_9
CLB: 9 July
2022-07-15 03:37:31 +08:00
Anthony Calosa
612714aca5 Update jade_orb_of_dragonkind.txt 2022-07-15 03:28:41 +08:00
Anthony Calosa
2a37888748 Update jade_orb_of_dragonkind.txt 2022-07-15 03:10:44 +08:00
Anthony Calosa
3532cbec3f Merge pull request #1123 from tool4ever/trigfix
Fix copied trigger not resetting numberTurnActivations
2022-07-15 01:47:29 +08:00
Anthony Calosa
5b39471fe6 Merge pull request #1124 from kevlahnota/master
(Adventure) Double Tap Avatar to show Menu buttons
2022-07-15 01:46:16 +08:00
Anthony Calosa
c05ea97822 update controls 2022-07-15 01:01:41 +08:00
Anthony Calosa
02f7b7f383 make avatar semi transparent inside tiledmap 2022-07-15 00:48:02 +08:00
Anthony Calosa
462c20af86 (Adventure) Double Tap Avatar to show Menu buttons
- useful for Android devices without navigation buttons (back key to show menu by default)
(Gesture detections like Edge detection needs AppCompatActivity which is missing on Forge Android)
2022-07-15 00:35:44 +08:00
tool4EvEr
acf0670b76 Use ActivationTable for triggers with Limit 2022-07-14 17:55:39 +02:00
tool4EvEr
30819f2ad1 Fix copied trigger not resetting numberTurnActivations 2022-07-14 16:28:49 +02:00
Anthony Calosa
d962d20fd9 Merge pull request #1076 from tool4ever/charming
Make charm choices of triggers for each while it gets added to stack, not before
2022-07-14 14:33:42 +08:00
Anthony Calosa
e0e95c689e Merge pull request #1106 from tool4ever/REfix
LastState: pass through from GameAction into ReplacementHandler & performance fixes
2022-07-14 14:30:09 +08:00
Anthony Calosa
f379fb7725 Merge pull request #1120 from CCTV-1/master
Updated simplified chinese translation
2022-07-14 14:24:21 +08:00
Anthony Calosa
50b9a04caf Merge pull request #1121 from kevlahnota/master
Support for preferred Skin sleeves
2022-07-14 14:23:58 +08:00
Anthony Calosa
26d906a89a Support for preferred Skin sleeves 2022-07-14 14:12:45 +08:00
CCTV-1
b4751cdc61 translate new setting texts. 2022-07-14 12:12:09 +08:00
Grimm
9b8dba2169 AdventureEditor: added editors 2022-07-14 03:11:17 +02:00
Anthony Calosa
70fe578262 Merge pull request #1112 from xaviermd/CardScript--CLB--Marching-Duodrone--and--Lantern-of-Revealing
Card scripts for Lantern of Revealing and Marching Duodrone
2022-07-14 08:27:54 +08:00
tool4ever
14d7c0fb11 Fix NPE when copying spell with failed targeting (#1118)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-07-13 20:56:48 +03:00
Xavier
14134f15a1 Addressed comments on PR 2022-07-13 08:45:31 -04:00
Anthony Calosa
bf481ea746 Update AdventurePlayer.java 2022-07-13 18:33:45 +08:00
Anthony Calosa
5c26394ad0 missing ";" 2022-07-13 18:28:19 +08:00
Paul Hammerton
1a5581c079 Merge pull request #1028 from xaviermd/CardScript--CLB--Jon-Irenicus-Shattered-One
Created card script for Jon Irenicus, Shattered One.
2022-07-13 09:23:16 +01:00
Austere Grim
5280e26066 Rebalance defeat gold loss (#1111)
added percent loss to defeated
changed gold loss to be calculated by a variable percentage loss not static divide by two.
2022-07-13 08:34:42 +03:00
xaviermd
5d4fcb55db CardScript for Iron Mastiff and changes to RollDiceEffect (#1104)
* First draft for Iron Mastiff and changes to RollDiceEffect

* Removed unnecessary DamageDesc.
2022-07-13 08:33:57 +03:00
Xavier
c5abdcd975 Card scripts for Lantern of Revealing and Marching Duodrone. 2022-07-12 19:12:33 -04:00
Northmoc
d4db167070 GameAction help AI use Spires 2022-07-12 15:51:49 -04:00
tool4EvEr
d8588842fe Add extra sanity check 2022-07-12 19:21:35 +02:00
Anthony Calosa
3e76254aaa Merge pull request #1110 from kevlahnota/master
Card Audit for Mobile
2022-07-13 00:02:42 +08:00
Anthony Calosa
b2984de2d4 unused import 2022-07-12 23:33:12 +08:00
Anthony Calosa
5054ca19a8 add Card Auditer to Mobile 2022-07-12 23:15:59 +08:00
Anthony Calosa
47f240af0c return Pair values 2022-07-12 21:38:00 +08:00
Anthony Calosa
4fb89c121f update check 2022-07-12 21:13:13 +08:00
Anthony Calosa
7f6bbfea3c move audit to StaticData
- fix cards with setlookup
closes #1096
2022-07-12 19:02:35 +08:00
Anthony Calosa
a71148cfe3 fix auditer
closes #1096
2022-07-12 18:36:59 +08:00
Anthony Calosa
9257b7331e Merge pull request #1109 from kevlahnota/master
stretchedArt for saga/class/dungeon, prevent NPE
2022-07-12 17:42:33 +08:00
Anthony Calosa
1710447322 update 2022-07-12 14:55:59 +08:00
Anthony Calosa
7874178f8b add stretchedArt for saga/class/dungeon 2022-07-12 14:42:52 +08:00
Anthony Calosa
3a061ae3be update ImageFetcher and setlookup
- use newWorkStealingPool
- update setlookup method
2022-07-12 11:22:40 +08:00
Anthony Calosa
b664acc3fc Merge branch 'master' into newmaster 2022-07-12 10:33:11 +08:00
Anthony Calosa
3ac2f00f46 prevent NPE 2022-07-12 10:23:17 +08:00
tool4EvEr
cb2fc04f6a Performance fixes 2022-07-11 19:15:26 +02:00
tool4EvEr
cf03361a62 LastState: pass through from GameAction into ReplacementHandler 2022-07-11 19:13:57 +02:00
Paul Hammerton
d823f8e54c Merge pull request #1105 from paulsnoops/mh2_j21_rebalanced_fix
Move MH2 rebalanced to J21
2022-07-11 13:47:31 +01:00
paulsnoops
4b4d0b7cab Move MH2 rebalanced to J21 2022-07-11 13:42:40 +01:00
Anthony Calosa
1a9f319f40 Merge pull request #1103 from kevlahnota/master
move skin and art related objects to Assets
2022-07-11 11:15:28 +08:00
Anthony Calosa
9dd5d9282d move skin and art related objects to Assets 2022-07-11 10:53:14 +08:00
Anthony Calosa
59a06428f6 Merge pull request #1091 from Northmoc/clb_baot
CLB: Battle Angels of Tyr + Neera, Wild Mage
2022-07-11 10:49:25 +08:00
Northmoc
52df5b9e22 Merge pull request #1095 from xaviermd/CardScript--CLB--Call-to-the-Void
Card script for Call to the Void and changes to ChooseCardEffect to enable card mechanisms.
2022-07-10 15:16:37 -04:00
Xavier
b606393344 Removed Cleanup 2022-07-10 12:16:56 -04:00
Xavier
eb4400a8bf Added Oracle, removed remembered, and removed unnecessary spaces. 2022-07-10 12:10:44 -04:00
Anthony Calosa
8ef980e268 Merge pull request #1101 from kevlahnota/master
update ImageCache check
2022-07-10 22:25:38 +08:00
Anthony Calosa
3686294e3c Merge branch 'master' into newmaster 2022-07-10 22:18:08 +08:00
Northmoc
5d8d211a60 cryptic_spires.txt 2022-07-10 10:16:29 -04:00
Northmoc
99c253375b GameAction.runPreOpeningHandActions hardwire Cryptic Spires 2022-07-10 10:16:16 -04:00
Anthony Calosa
31e089993d update ImageCache check
- update some variables, prevent NPE on font on reload
2022-07-10 22:14:41 +08:00
tool4EvEr
2a7ccd69d6 Just check for UnlessCost 2022-07-10 16:03:27 +02:00
tool4EvEr
aff63c5315 Use canPay check 2022-07-10 15:53:23 +02:00
Northmoc
5c3f75d0d9 CLB: Illithid Harvester // Plant Tadpoles and support (#1056)
* illithid_harvester_plant_tadpoles.txt

* SetStateEffect.setFaceDownState

* tidy up the tadpoles

* CardFactoryUtil.setFaceDownState

* ChangeZoneEffect remove setFaceDownState

* SetStateEffect remove setFaceDownState

* ChangeZoneEffect.changeZonePlayerInvariant call CardFactoryUtil too
2022-07-10 16:52:15 +03:00
tool4ever
ec3f7e00ca Fix AI casting suspended spells against Drannith Magistrate (#1098)
* Cleanup cards

* Fix AI casting suspended spells against Drannith Magistrate

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-07-10 16:51:56 +03:00
tool4EvEr
8f4c5039ed Cleanup AI 2022-07-10 15:07:47 +02:00
tool4EvEr
d247b22e0a Clean up Fabricate 2022-07-10 15:07:39 +02:00
Northmoc
c40129cb43 Merge pull request #1099 from t-w-o-s-a-t/master
Update de-DE.properties
2022-07-10 08:51:00 -04:00
t-w-o-s-a-t
ecb54c6fce Update de-DE.properties
translated lblAttackers
2022-07-10 14:46:55 +02:00
Paul Hammerton
33660aad01 Merge pull request #1097 from paulsnoops/rescue_foal
Rescue the Foal add Oracle:
2022-07-10 12:32:32 +01:00
paulsnoops
1714cac0c2 Rescue the Foal add Oracle: 2022-07-10 12:25:10 +01:00
Anthony Calosa
f2e71eaf6a Merge pull request #1094 from kevlahnota/master
use single assetmanager
2022-07-10 17:00:47 +08:00
Anthony Calosa
edbef89cfa unused imports 2022-07-10 16:56:16 +08:00
Anthony Calosa
8cb8fb2bba refactor overlay to use text mode
- update assetmanager on resume
2022-07-10 16:44:59 +08:00
Xavier
be885d8656 CardScript for Call to the Void and changes to ChooseCardEffect
- Created CardScript for call to the void.
- Added "ControlAndNot" parameter to ChooseCardEffect as suggested by @northmoc on discord (https://discord.com/channels/267367946135928833/994588726254633090/994610830815539370)
- Added and implemented "SecretlyChoose".
- Added RevealTitle.
2022-07-10 01:55:52 -04:00
Anthony Calosa
a744758823 Merge branch 'master' into newmaster 2022-07-10 13:37:26 +08:00
Anthony Calosa
00130296d8 use single assetmanager
- add seperate set to determine cards loaded
2022-07-10 13:35:17 +08:00
Northmoc
617b1dd832 CLB Adventure commons (#1092)
* ettercap_web_shot.txt

* gray_slaad_entropic_decay.txt

* hezrou_demonic_stench.txt

* guardian_naga_banishing_coils.txt

* sword_coast_serpent_capsizing_wave.txt

* pegasus_guardian_rescue_the_foal.txt

* colossal_badger_dig_deep.txt

* CountersPutEffect.getStackDescription better handle "for each"

* sword_coast_serpent_capsizing_wave.txt fix
2022-07-10 07:18:17 +03:00
Xavier
9e5f2d4859 Deleted Description$ Test from script. 2022-07-10 00:03:43 -04:00
Northmoc
7a90d9b0b7 neera_wild_mage.txt 2022-07-09 20:36:13 -04:00
Northmoc
fd85179c45 DigUntilEffect support "NoMoveRevealed" 2022-07-09 20:36:12 -04:00
Anthony Calosa
b9a188b45d Merge pull request #1093 from kevlahnota/master
move skin and adventure fonts to Assets
2022-07-10 08:01:01 +08:00
Anthony Calosa
09d8cc99d0 Merge branch 'master' into newmaster 2022-07-10 07:59:00 +08:00
Anthony Calosa
e298364513 Merge pull request #1090 from Northmoc/tweak
Fix typos/add AI
2022-07-10 07:56:50 +08:00
Anthony Calosa
8e8072e95d Merge pull request #1089 from Northmoc/missinglbl
add lblAttacker from TriggerAttackerBlockedOnce
2022-07-10 07:55:19 +08:00
Anthony Calosa
2d607bf289 move skin and adventure fonts to Assets 2022-07-10 07:49:31 +08:00
Northmoc
017e5a610f battle_angels_of_tyr.txt 2022-07-09 19:27:04 -04:00
Northmoc
abdaf039a5 ephemerate.txt tidy 2022-07-09 19:14:16 -04:00
Northmoc
dea4e07dcc cathedral_sanctifier.txt AI hint 2022-07-09 18:54:13 -04:00
Northmoc
a50e608f86 aerial_predation.txt clean up 2022-07-09 18:53:42 -04:00
Northmoc
cf8f584106 add lblAttacker from TriggerAttackerBlockedOnce 2022-07-09 18:39:57 -04:00
Anthony Calosa
7f9d327e43 Merge pull request #1044 from xaviermd/CardScript--CLB--Alaundo-the-Seer
Card Script for Alaundo the Seer.
2022-07-10 06:39:34 +08:00
tool4EvEr
2e78de34b4 check for canReceiveCounters 2022-07-10 00:11:26 +02:00
Northmoc
4364f4d5c8 marut.txt 2022-07-09 16:43:10 -04:00
Northmoc
4fd216f441 ingenious_artillerist.txt 2022-07-09 16:42:55 -04:00
Northmoc
a225366cd4 street_urchin.txt 2022-07-09 16:38:46 -04:00
Northmoc
50b516784c Merge pull request #1086 from JohnWilliams77/patch-25
CLB Minthara Merciless Soul
2022-07-09 16:19:09 -04:00
JohnWilliams77
1a956d62f5 Update minthara_merciless_soul.txt 2022-07-09 21:02:41 +01:00
Suthro
45f773e6c4 Update tasha_unholy_archmage.txt 2022-07-09 14:25:25 -05:00
Suthro
d4d27ee43c Update navigation_orb.txt 2022-07-09 14:23:00 -05:00
Suthro
593a8d27f2 Update gond_gate.txt 2022-07-09 14:22:33 -05:00
Northmoc
0d36510a6c jade_orb_of_dragonkind.txt 2022-07-09 13:43:48 -04:00
Northmoc
fddcdd4f90 astral_dragon.txt 2022-07-09 13:42:32 -04:00
JohnWilliams77
1d91146cef Create minthara_merciless_soul.txt 2022-07-09 17:17:02 +01:00
tool4EvEr
207a29079e Fabricate fix 2022-07-09 17:53:41 +02:00
Northmoc
373e4d59e6 CLB: Stick Together and support (#1062)
* stick_together.txt

* ChooseCardEffect support "Choose Party"
2022-07-09 18:35:28 +03:00
tool4EvEr
3c5a3b426c No SpellAbilityRestriction in Subs (performance + fix AI mayplay Charms) 2022-07-09 17:29:41 +02:00
Xavier
aa395db234 CleanUp -> Cleanup 2022-07-09 11:24:03 -04:00
Paul Hammerton
ba54f0f05e Merge pull request #1085 from paulsnoops/archive_fix
Add HBG to formats
2022-07-09 15:38:58 +01:00
paulsnoops
5eac162377 Add HBG to formats 2022-07-09 15:35:21 +01:00
JohnWilliams77
2556547840 2 more CLB cards (#1083)
* Create patron_of_the_arts.txt

* Create earth_tremor.txt
2022-07-09 13:47:35 +00:00
tool4ever
241467c34c Northmocs Zangief and support, round two (#1074)
* Northmocs Zangief and support, round two

* Cleanup Elminster

Co-authored-by: TRT <>
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-07-09 16:39:56 +03:00
Northmoc
b1224cb37e TriggerMilledAll (for Zellix [CLB]) (#1064)
* TriggerMilledAll.java

* TriggerType.MilledAll

* Player.mill run MilledAll trigger

* CardZoneTable remove redundant Map
2022-07-09 16:39:30 +03:00
Northmoc
4f39d0cf08 Merge pull request #1039 from paulsnoops/alchemy_rebalanced_7_july
Alchemy Rebalancing for July 7, 2022
2022-07-09 09:17:25 -04:00
Anthony Calosa
6915b0d7a4 adjust label width
should fix portrait mode
2022-07-09 20:27:56 +08:00
Anthony Calosa
9d90b697d7 Merge pull request #1082 from kevlahnota/master
move tmx textures to Assets
2022-07-09 18:54:49 +08:00
Anthony Calosa
421c210252 move tmx textures to Assets 2022-07-09 18:42:37 +08:00
Anthony Calosa
6d5da60ff7 Merge pull request #1080 from kevlahnota/master
move misc to Assets
2022-07-09 17:32:07 +08:00
Anthony Calosa
ffef4c6191 unused import 2022-07-09 17:23:35 +08:00
Anthony Calosa
3c4f31d37c remove extra 2022-07-09 17:17:07 +08:00
Anthony Calosa
2b9fa901c6 unused import 2022-07-09 17:15:36 +08:00
Anthony Calosa
2f4481e76f Merge branch 'master' into newmaster 2022-07-09 17:08:43 +08:00
Anthony Calosa
fb67263b5f Merge pull request #1079 from kevlahnota/master
refactor libgdx static objects to be disposed
2022-07-09 17:03:33 +08:00
Anthony Calosa
3e3abed344 misc moved to Assets 2022-07-09 17:01:20 +08:00
Anthony Calosa
fe5cc6f829 missing import 2022-07-09 16:54:55 +08:00
Anthony Calosa
e5727c60d5 revert override 2022-07-09 16:53:45 +08:00
Anthony Calosa
24069c2b2a Update SplashScreen.java 2022-07-09 16:45:45 +08:00
Anthony Calosa
b385fe8033 remove unused function 2022-07-09 16:40:07 +08:00
paulsnoops
d3460d1901 edition_fix 2022-07-09 09:29:41 +01:00
Anthony Calosa
4b5ebf2575 refactor libgdx static objects to be disposed
-fixes memory leaks since these objects are not properly disposed by the GC
-Textures, BitmapFonts and others should be disposed manually if not loaded in the assetmanager
2022-07-09 15:53:19 +08:00
TRT
495cd22897 Clean up 2022-07-08 22:06:54 +02:00
mctubbies
3b0b7ff9e9 Card Script for Blur (#1059)
* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Delete Blur.txt
2022-07-08 22:38:33 +03:00
mctubbies
ce6e20ff82 Card Script for Haunted One (#1060)
* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Delete Haunted One.txt

* Add files via upload

* Delete Haunted One.txt

* Add files via upload

* Add files via upload
2022-07-08 22:38:27 +03:00
Paul Hammerton
b59064979f Merge pull request #1075 from paulsnoops/hbg_edition
Alchemy Horizons: Baldur's Gate edition file
2022-07-08 20:32:20 +01:00
paulsnoops
93e199fb57 Alchemy Horizons: Baldur's Gate edition file 2022-07-08 20:28:47 +01:00
mctubbies
2d81a1ad08 Gluntch - Fixing Legendary Tag (#1073)
* Add files via upload

* Correcting Gluntch's Legendary tag

Previous merge did not have Gluntch marked correctly as legendary.
2022-07-08 18:41:24 +02:00
tool4ever
dbaa2394c2 Merge branch 'Card-Forge:master' into charming 2022-07-08 17:19:46 +02:00
Anthony Calosa
dd8de283c9 Merge pull request #1072 from kevlahnota/master
prevent NPE
2022-07-08 22:11:30 +08:00
Anthony Calosa
fdff74d84c prevent NPE 2022-07-08 22:06:18 +08:00
Anthony Calosa
29a5215e3d Merge pull request #1071 from kevlahnota/master
fix crash
2022-07-08 21:57:11 +08:00
Anthony Calosa
d186991107 fix crash
closes #1068
2022-07-08 21:55:14 +08:00
Anthony Calosa
267ec6f1d7 Update borderlessCardList.txt 2022-07-08 19:21:00 +08:00
Anthony Calosa
0d49774c49 Merge pull request #1070 from kevlahnota/master
Fix loading fallback_skin, delay setlookup file
2022-07-08 14:45:18 +08:00
Suthro
5c416b556a Merge branch 'Card-Forge:master' into master 2022-07-08 01:43:36 -05:00
Suthro
9624ff9cdf Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-07-08 01:43:16 -05:00
Suthro
09b4358e9b HBG: Tasha, Unholy Archmage
HBG: Added script for Tasha, Unholy Archmage
2022-07-08 01:43:13 -05:00
Anthony Calosa
77678b4cbc Fix loading fallback_skin, delay setlookup file 2022-07-08 14:38:43 +08:00
Suthro
38e1d520f6 Update navigation_orb.txt 2022-07-08 00:18:36 -05:00
Suthro
274cbbb42a Update navigation_orb.txt 2022-07-07 23:48:46 -05:00
Suthro
2c79b891c8 Update navigation_orb.txt 2022-07-07 23:48:27 -05:00
Suthro
36d4cd09e9 Update navigation_orb.txt 2022-07-07 23:48:03 -05:00
Suthro
7a64e21389 Update cliffgate.txt 2022-07-07 23:45:53 -05:00
Suthro
8dbeb8d513 Update citadel_gate.txt 2022-07-07 23:45:39 -05:00
Suthro
aa1c30af21 Update black_dragon_gate.txt 2022-07-07 23:45:16 -05:00
Suthro
20bf39770a Update manor_gate.txt 2022-07-07 23:45:02 -05:00
Suthro
c3d2d4ae27 Update heap_gate.txt 2022-07-07 23:44:22 -05:00
Suthro
f7fcd8a857 Update gond_gate.txt 2022-07-07 23:43:28 -05:00
Xavier
6bd5ad8a06 Added TargetedCard to getDefinedCards() and to the filtered options in getDefinedPlayers() 2022-07-08 00:26:27 -04:00
Anthony Calosa
0ae6fcd161 Merge pull request #1069 from kevlahnota/master
add EvictingQueue for loaded images
2022-07-08 11:27:05 +08:00
Anthony Calosa
fed4ab99c1 add EvictingQueue for loaded images
-use the Queue as reference for removing old entries on the AssetManager
-fix cardArtCache storing forgeArt, should fix missing cardArt
2022-07-08 11:04:53 +08:00
Anthony Calosa
88744b56b0 Merge pull request #1042 from Northmoc/terramancer
CLB: Deep Gnome Terramancer and support
2022-07-08 07:26:34 +08:00
Anthony Calosa
446e0a48aa Merge pull request #1055 from kevlahnota/master
Refactor FSkin to use Assetmanager
2022-07-08 07:25:49 +08:00
Xavier
80472b27f7 Added DeckHints 2022-07-07 19:09:55 -04:00
Paul Hammerton
e4a038788a Merge pull request #1065 from mctubbies/patch-2
Update CONTRIBUTORS.txt
2022-07-07 21:20:20 +01:00
Paul Hammerton
1ffbff4f5a Merge pull request #1067 from paulsnoops/sld_update
SLD Fortnite update
2022-07-07 21:18:12 +01:00
paulsnoops
599ad6980d SLD Fortnite update 2022-07-07 21:11:10 +01:00
mctubbies
3b34258302 Update CONTRIBUTORS.txt 2022-07-07 14:47:58 -05:00
Paul Hammerton
252c9ee060 Merge pull request #1057 from mctubbies/Gluntch
Card Script for Gluntch, the Bestower
2022-07-07 20:47:56 +01:00
mctubbies
a0aaa49c01 Add files via upload 2022-07-07 14:18:59 -05:00
mctubbies
e4f887bf38 Add files via upload 2022-07-07 14:17:05 -05:00
mctubbies
037fcc27a7 Delete b_1_1_horror.txt 2022-07-07 14:16:42 -05:00
mctubbies
0aabab4a91 Delete Zellix, Sanity Flayer.txt 2022-07-07 14:14:40 -05:00
mctubbies
08546ef063 Add files via upload 2022-07-07 14:14:30 -05:00
tool4ever
24587febf2 Update gluntch_the_bestower.txt 2022-07-07 18:33:06 +00:00
tool4ever
929114dc16 Rename gluntch, the Bestower.txt to gluntch_the_bestower.txt 2022-07-07 18:29:14 +00:00
tool4ever
b01fe99954 Rename Gluntch, the Bestower.txt to gluntch, the Bestower.txt 2022-07-07 18:28:32 +00:00
tool4ever
a895c8c059 Delete Gluntch, the Bestower.txt 2022-07-07 18:27:55 +00:00
mctubbies
2133a6782b Add files via upload 2022-07-07 13:04:54 -05:00
Paul Hammerton
afb1744664 Merge pull request #1063 from paulsnoops/wilson
Move and rename Wilson
2022-07-07 19:03:19 +01:00
paulsnoops
ba236597ad Move and rename Wilson 2022-07-07 18:59:28 +01:00
Northmoc
255c29ed21 Merge pull request #1061 from mctubbies/mctubbies-wilson
Card Script for Wilson, Refined Grizzly
2022-07-07 13:26:32 -04:00
mctubbies
2d86526998 Add files via upload 2022-07-07 11:29:18 -05:00
mctubbies
2c2f934e03 Delete Haunted One.txt 2022-07-07 11:19:05 -05:00
mctubbies
7a938c084c Add files via upload 2022-07-07 11:17:53 -05:00
Northmoc
b57d935674 PhaseHandler set Cause to sa for triggerChangesZoneAll 2022-07-07 12:16:22 -04:00
mctubbies
6d2f016276 Add files via upload 2022-07-07 10:56:47 -05:00
mctubbies
cc235f1772 Add files via upload 2022-07-07 10:51:50 -05:00
mctubbies
d736aba74f Add files via upload 2022-07-07 10:50:29 -05:00
Northmoc
0526e91444 SpellAbility.isValid add LandAbility, support ! prefix 2022-07-07 11:36:46 -04:00
Northmoc
7bda8790ab deep_gnome_terramancer.txt 2022-07-07 11:36:46 -04:00
mctubbies
5b7d67f997 Add files via upload 2022-07-07 10:22:07 -05:00
mctubbies
3ab9289b33 Add files via upload 2022-07-07 10:21:35 -05:00
mctubbies
8d1b96df5a Add files via upload 2022-07-07 10:16:17 -05:00
squee1968
6fd49d8bdf Moonshae Pixie & Myrkul's Edict (#1048)
* Moonshae Pixie & Myrkul's Edict

-closes #899
-closes #902

* Update moonshae_pixie.txt

* Update myrkuls_edict.txt
2022-07-07 17:24:57 +03:00
Anthony Calosa
8e4cca7fe8 Update ImageCache.java 2022-07-07 21:37:05 +08:00
Anthony Calosa
acea266dc0 remove extra entries 2022-07-07 21:27:13 +08:00
Anthony Calosa
d0fbd4beaa Merge pull request #1054 from JohnWilliams77/patch-23
4 CLB Cards
2022-07-07 21:08:47 +08:00
Anthony Calosa
18e3def8b7 Refactor FSkin to use Assetmanager 2022-07-07 21:07:40 +08:00
JohnWilliams77
8e5b05b075 Create draconic_lore.txt 2022-07-07 11:52:46 +01:00
JohnWilliams77
5679cf6873 Create decanter_of_endless_water.txt 2022-07-07 11:52:06 +01:00
JohnWilliams77
424f4ad88e Create cloak_of_the_bat.txt 2022-07-07 11:51:33 +01:00
JohnWilliams77
4d9d060e9d Create chardalyn_dragon.txt 2022-07-07 11:50:35 +01:00
Xavier
901a7bd670 First working draft. 2022-07-07 00:57:06 -04:00
Northmoc
2373596796 CLB: Elminster and support (#1053)
* elminster.txt

* TypeLists add Elminster to [WalkerTypes]

* TriggerScry ScryNum for setTriggeringObjects and getImportantStackObjects

* TriggerHandler.runSingleTriggerInternal implement RememberAmount for integer

* StaticAbility.toString allow for INSERT tag

* GameAction.scry track numLookedAt for trigger

* DigEffect.getStackDescription check for exile first in verb parsing

* AbilityKey add ScryNum
2022-07-07 07:20:44 +03:00
Northmoc
dc28481270 Merge pull request #1052 from t-w-o-s-a-t/master
Update de-DE.properties
2022-07-06 18:50:55 -04:00
Xavier
54ed9790cc CleanUp -> Cleanup 2022-07-06 17:11:31 -04:00
t-w-o-s-a-t
6b11e0b5d1 Update de-DE.properties
reworked translation of DisposeTextures
there multiple possible translations of 'save' with totally different meanings - hard to decided wich to use for an nonnative speaker
that's why we work together - everyone does his share :)
2022-07-06 19:35:45 +02:00
JohnWilliams77
9f180759b8 2 CLB Cards (#1047)
* Create prized_statue.txt

* Create patriars_seal.txt
2022-07-06 16:55:19 +00:00
Xavier
6ba164ebad Card Script for Alaundo the Seer WithCountersType and WithCountersAmount, and modifications to ChangeZoneEffect.
This commit adds code to ChangeZoneEffect which enables WithCountersType and WithCountersAmount with an SVar dependent on Remembered when exiling.
2022-07-06 12:45:26 -04:00
Xavier
3fdff97f9f Card Script for Alaundo the Seer using PutCounters. 2022-07-06 12:39:41 -04:00
Anthony Calosa
cdc2cab9ce Merge pull request #1049 from kevlahnota/master
Assets class
2022-07-06 22:12:27 +08:00
Anthony Calosa
51b1391aee prevent NPE 2022-07-06 22:09:01 +08:00
Anthony Calosa
6851bc025e Merge branch 'master' into newmaster 2022-07-06 21:58:55 +08:00
Northmoc
fa2aa9afc8 Merge pull request #1050 from Northmoc/drafteffectfix
DraftEffect fix bad comment lines
2022-07-06 09:54:45 -04:00
Anthony Calosa
8ca8e145e4 remove static reference 2022-07-06 21:53:14 +08:00
Northmoc
c266da76ec DraftEffect fix bad comment lines 2022-07-06 09:48:43 -04:00
Anthony Calosa
c838b60b7a Assets class 2022-07-06 21:32:37 +08:00
Paul Hammerton
33fc17a936 Some CLB Dragon cards and Obscura Polymorphist (#1045)
Some CLB Dragon cards and Obscura Polymorphist
2022-07-06 14:38:54 +02:00
paulsnoops
09313773e2 descriptions 2022-07-06 13:28:35 +01:00
Northmoc
801ee89391 Merge pull request #1041 from squee1968/Mocking-Doppelganger
Create mocking_doppelganger.txt
2022-07-06 07:47:01 -04:00
JohnWilliams77
ee228e3fd7 3 CLB cards (#1037)
* Create bonecaller_cleric.txt

* Create carefree_swinemaster.txt

* Create chain_devil.txt
2022-07-06 13:28:30 +02:00
Northmoc
558f79c2b2 Merge pull request #1007 from paulsnoops/hourglass_coven
(YCLB) The Hourglass Coven and spellbook cards
2022-07-06 07:21:07 -04:00
Northmoc
2f7bf741f3 Merge pull request #1008 from Northmoc/drafteffect
Give Alchemy mechanic Spellbook Draft its own API
2022-07-06 07:19:56 -04:00
Anthony Calosa
42c59b773b Merge pull request #1040 from Northmoc/carnelian
CLB: Carnelian Orb of Dragonkind and support
2022-07-06 18:06:09 +08:00
Anthony Calosa
51dd0ef84a Merge pull request #1046 from kevlahnota/master
clear generated cards
2022-07-06 18:01:33 +08:00
Anthony Calosa
b65c7607d4 clear generated cards 2022-07-06 17:55:47 +08:00
Anthony Calosa
845cf33683 Merge pull request #1043 from kevlahnota/master
[Mobile] Assetmanager for card texture & texture atlas
2022-07-06 17:08:49 +08:00
Anthony Calosa
b1e307747f remove loadingCache and use card assetmanager exclusively 2022-07-06 16:29:57 +08:00
Anthony Calosa
c81158530f add otherTextureManager 2022-07-06 15:10:00 +08:00
Anthony Calosa
ecdd4b2d77 update description 2022-07-06 12:38:40 +08:00
Xavier
cf148f4b2c Card Script for Alaundo the Seer. 2022-07-05 23:58:52 -04:00
Xavier
0b70fd0724 Draft of Call to the Void. 2022-07-05 22:44:02 -04:00
Anthony Calosa
616637d160 [Mobile] Assetmanager for card texture & texture atlas
- texture atlas manager for adventure & card texture manager for card images
- Assetmanager is automatically used except when UI_ENABLE_BORDER_MASKING = Full
- makes dispose textures option effective (free up some RAM)
2022-07-06 08:42:54 +08:00
squee1968
0748b58a3a Update mocking_doppelganger.txt 2022-07-05 19:33:38 -05:00
paulsnoops
1762c7a0d8 editions 2022-07-05 21:59:48 +01:00
squee1968
55783fbc73 Create mocking_doppelganger.txt
-closes #897

Co-Authored-By: Northmoc <103371817+Northmoc@users.noreply.github.com>
Co-Authored-By: tool4ever <8506892+tool4ever@users.noreply.github.com>
2022-07-05 15:10:39 -05:00
paulsnoops
35710e31f2 scripts 2022-07-05 20:54:42 +01:00
Northmoc
508b6b4e90 refactor param name 2022-07-05 14:49:36 -04:00
Northmoc
0acad1ecd5 SpellAbility.applyPayingManaEffects use isValid instead of hasStringType 2022-07-05 14:49:16 -04:00
Northmoc
9740e1e75b refactor old cards 2022-07-05 14:48:27 -04:00
Northmoc
de4b089033 carnelian_orb_of_dragonkind.txt refine value 2022-07-05 14:48:17 -04:00
Northmoc
9442f4c4d7 carnelian_orb_of_dragonkind.txt 2022-07-05 14:40:52 -04:00
Northmoc
d7eff45cd1 GN3: Imaryll, Elfhame Elite (+ refactor another quasi-keyword -> static) (#1033)
* AI stuff refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked

* ComputerUtilCombat refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked

* CreatureEvaluator refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked

* Combat.java refactor keyword to check StaticAbilityAssignCombatDamageAsUnblocked

* AnimateAllEffect.resolve support "staticAbilities" for garruk_savage_herald.txt

* imaryll_elfhame_elite.txt

* StaticAbilityAssignCombatDamageAsUnblocked.java

* refactor old cards

* AnimateAllEffect remove no longer needed

* AiBlockController.makeGoodBlocks restore lost '!'
2022-07-05 21:23:40 +03:00
Northmoc
ce90e3358e MakeCardEffect use made card in new zone for trigger, etc 2022-07-05 13:12:43 -04:00
Northmoc
212f883d8f DraftEffect use made card in new zone for trigger, etc 2022-07-05 13:12:32 -04:00
paulsnoops
a972221408 Alchemy Rebalancing for July 7, 2022 2022-07-05 18:12:13 +01:00
xaviermd
0fdfe26eff Card script for CLB - Aboleth Spawn and modifications to TriggerAbilityTriggered to make it work. (#1035)
* Created the card script for Aboleth Spawn, and made the necessary modifications to TriggerAbilityTriggered to allow the identification of self-targeting triggered abilities.

* Changed the Aboleth Spawn card script, and TriggerAbilityTriggered.java following feedback on PR.
2022-07-05 16:57:25 +03:00
xaviermd
1527167c5e Card script for CLB - Bane Lord of Darkness (#1026)
* Created card script for Bane, Lord of Darkness.

* Minor edit to Bane, Lord of Darkness card script.

* Cleaned up card script and replaced Play with ChangeZone.

* Replaced You with Controller for consistent description.
2022-07-05 16:56:25 +03:00
Northmoc
bf6d41672d CLB: Firkraag, Cunning Instigator and support (#1019)
* firkraag_cunning_instigator.txt

* CardProperty.cardHasProperty add "mustAttack"

* AttackRequirement.hasRequirement fix (thanks TRT)

* Add timestamp check

* Don't treat Trove of Temptation Requirement as Restriction

* Clean up

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-07-05 13:49:10 +03:00
tool4ever
3decca4752 Fix 2 NPE (#1036)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-07-05 11:23:49 +03:00
JohnWilliams77
dee309a9a7 GN 22 Nogi, Draco Zealot (#1025)
* Create nogi_draco_zealot.txt
2022-07-05 07:29:48 +02:00
Northmoc
1df114d694 GN3: Maeve, Insidious Singer (+implement GoadEffect.getStackDescription) (#1034)
* maeve_insidious_singer.txt

* GoadEffect.getStackDescription
2022-07-05 07:28:01 +02:00
squee1968
e1c08ef5af Add Mirror of Life Trapping
Add Mirror of Life Trapping
2022-07-05 07:17:47 +02:00
Paul Hammerton
51a29e3d80 Merge pull request #1032 from paulsnoops/gn3
Game Night 2022 edition file
2022-07-04 22:12:23 +01:00
paulsnoops
8ecec15f0a number fix 2022-07-04 22:09:05 +01:00
paulsnoops
a9043a193a Game Night 2022 edition file 2022-07-04 22:06:19 +01:00
Anthony Calosa
04360e3705 Merge pull request #1023 from Northmoc/clb_3
CLB: 3 July
2022-07-05 04:26:52 +08:00
Northmoc
4333d95f5b shadowheart_dark_justiciar.txt use X:Sacrificed 2022-07-04 15:21:59 -04:00
Xavier Morin Duchesne
d1e1adf46d Cleaned up descriptions, added Duration$ Permanent to goaded, and fixed ValidCard$ for Attacks trigger. 2022-07-04 13:25:57 -04:00
Xavier Morin Duchesne
321516f691 Cleaning up card script. 2022-07-04 12:04:45 -04:00
Xavier Morin Duchesne
2ee5755085 Created card script for Jon Irenicus, Shattered One. 2022-07-04 11:58:26 -04:00
Northmoc
ebc92dc90f CLB: Vhal, Candlekeep Researcher and support (#1022)
* AbilityManaPart.meetsManaRestrictions add zone restrictions

* vhal_candelkeep_researcher.txt

* AbilityManaPart.meetsManaRestrictions tidier

* AbilityManaPart.meetsManaRestrictions fix for AI
2022-07-04 18:14:14 +03:00
Hans Mackowiak
a536a340d2 Blitz Again (#1001) 2022-07-04 18:13:34 +03:00
tool4ever
3d634b6dac Global DamageHistory (#622)
* Global DamageHistory

* Add new cards

* Improve Ogre Enforcer

* Clean up

* Minor fixes
2022-07-04 13:27:44 +00:00
Northmoc
584c768039 TokenEffect stackDesc improve X parsing (#370) 2022-07-04 13:14:37 +00:00
Northmoc
d2f223dc4e Merge pull request #1021 from JohnWilliams77/patch-19
2 GN cards 1 CLB card
2022-07-03 20:27:01 -04:00
Northmoc
d9a18269d6 skanos_dragonheart.txt 2022-07-03 20:20:42 -04:00
Northmoc
80000dc5ba sivriss_nightmare_speaker.txt 2022-07-03 20:20:33 -04:00
Northmoc
e86904c62c shadowheart_dark_justiciar.txt 2022-07-03 20:20:27 -04:00
Northmoc
ace7f5adb7 mold_folk.txt fix desc 2022-07-03 20:15:26 -04:00
JohnWilliams77
878fb42c52 Update zamriel_seraph_of_steel.txt 2022-07-03 23:25:10 +01:00
JohnWilliams77
9126287814 Update flaming_fist_officer.txt 2022-07-03 23:24:24 +01:00
JohnWilliams77
4c2814c191 Update zamriel_seraph_of_steel.txt 2022-07-03 12:51:28 +01:00
JohnWilliams77
e1fce28cfe Update vogar_necropolis_tyrant.txt 2022-07-03 12:50:52 +01:00
Paul Hammerton
b1c6e00ec5 HBG Rebalancd cards (#1018) 2022-07-03 12:36:07 +03:00
JohnWilliams77
cea0e73c2b Create zamriel_seraph_of_steel.txt 2022-07-03 09:44:27 +01:00
JohnWilliams77
c18c44f580 Create vogar_necropolis_tyrant.txt 2022-07-03 09:43:51 +01:00
JohnWilliams77
0a5610b029 Create flaming_fist_officer.txt 2022-07-03 09:41:49 +01:00
squee1968
f7ec3bc5b5 5 more from Squee (#1015)
* 5 more from Squee

-closes #885
-closes #692
-closes #481
-closes #694
-closes #402

* Delete Mold Folk.txt

* Update kenku_artificer.txt

* edited

* readded

* Update wrathful_red_dragon.txt

* Update kenku_artificer.txt

* Update venture_forth.txt

* Update wrathful_red_dragon.txt

* Update wrathful_red_dragon.txt

* Update kenku_artificer.txt

* Update mold_folk.txt

* Update robe_of_the_archmagi.txt

* Update wrathful_red_dragon.txt
2022-07-03 08:12:37 +03:00
Paul Hammerton
76d29e78a2 Merge pull request #1017 from JohnWilliams77/patch-18
Update Secret Lair Drop Series.txt
2022-07-01 14:24:05 +01:00
JohnWilliams77
b994e36297 Update Secret Lair Drop Series.txt 2022-07-01 14:12:33 +01:00
Anthony Calosa
75ba4665d6 Update token-images.txt 2022-07-01 20:47:09 +08:00
Anthony Calosa
b174178d32 Update token-images.txt 2022-07-01 20:39:51 +08:00
Anthony Calosa
5aa6971245 Update token-images.txt 2022-07-01 20:36:36 +08:00
Anthony Calosa
502ac356cc Merge pull request #992 from tool4ever/getAlternativeCosts
only reset castFaceDown when making a full spell copy
2022-06-30 15:44:16 +08:00
Anthony Calosa
8237a01e6d Merge pull request #1014 from kevlahnota/master
handle 301.5c
2022-06-30 15:41:45 +08:00
Anthony Calosa
6bde762a15 Merge branch 'master' into newmaster 2022-06-30 15:34:54 +08:00
Anthony Calosa
beb6917a30 Merge pull request #1013 from tool4ever/unmorph
Fix unmorphing being prevented by invalid static
2022-06-30 15:33:13 +08:00
Anthony Calosa
85ddcb8ff6 handle 301.5c
closes #1012
2022-06-30 15:31:27 +08:00
TRT
8b7fbd63cc Fix unmorphing being prevented by invalid static 2022-06-29 21:02:05 +02:00
squee1968
23a820527b Create kagha_shadow_archdruid.txt (#1009)
* Create kagha_shadow_archdruid.txt

-closes #884

* Update kagha_shadow_archdruid.txt

* Update kagha_shadow_archdruid.txt

* Update kagha_shadow_archdruid.txt

* Update kagha_shadow_archdruid.txt

* Update kagha_shadow_archdruid.txt

* Update kagha_shadow_archdruid.txt

* Update kagha_shadow_archdruid.txt
2022-06-29 18:55:26 +03:00
TRT
e029bc1a54 WithCountersPlacer 2022-06-29 17:41:25 +02:00
tool4ever
7ed781f3d2 Cleanup some cards (#1011)
Co-authored-by: TRT <>
2022-06-29 09:48:51 +03:00
paulsnoops
fe8175169a fixes 2022-06-28 17:50:33 +01:00
Northmoc
4613b76bfa DraftEffect.resolve add ChangesZoneAll trigger 2022-06-28 12:03:45 -04:00
Northmoc
bfd421bf98 MakeCardEffect.resolve add ChangesZoneAll trigger 2022-06-28 12:03:27 -04:00
TRT
4d52b495eb With counters added directly 2022-06-28 17:16:59 +02:00
tool4ever
fb3ff29092 Update ertais_meddling.txt 2022-06-28 11:07:04 +02:00
JohnWilliams77
f05b0e0d9e CLB Banishment&Wyll Blade of Frontiers (#728)
* CLB Banishment

* Create wyll_blade_of_frontiers.txt

* Update wyll_blade_of_frontiers.txt

* Update banishment.txt

* Update banishment.txt

* Update wyll_blade_of_frontiers.txt
2022-06-28 11:54:21 +03:00
paulsnoops
3fea3fae5a hourglass_coven 2022-06-28 09:05:14 +01:00
Magpie
1975cb1131 Adventure mode - Adjustments (#1006)
* Fix incorrect card name.

Co-authored-by: Magpie <magpie514@users.noreply.github.com>
2022-06-28 09:52:33 +03:00
Northmoc
92f3298366 DraftEffect newline at file end 2022-06-27 23:50:26 -04:00
Northmoc
156b988c0d update existing cards 2022-06-27 23:47:07 -04:00
Northmoc
902706afd4 SpellApiToAi.apiToClass handle DraftEffect 2022-06-27 23:46:42 -04:00
Northmoc
2b67c8c497 DraftEffect.java 2022-06-27 23:46:15 -04:00
Northmoc
e61e251026 ChooseCardNameEffect.resolve remove Draft support 2022-06-27 23:46:06 -04:00
Northmoc
69a46da4c1 ApiType add DraftEffect 2022-06-27 23:45:40 -04:00
paulsnoops
127e5b1a66 2 more hags 2022-06-27 18:53:59 +01:00
paulsnoops
8a201afb27 WIP: The Hourglass Coven and spellbook cards 2022-06-27 18:18:03 +01:00
TRT
5b6f54b6dd Fix for Ertai's Meddling 2022-06-26 22:41:44 +02:00
tool4ever
7420900ad6 Fix cards (#1004) 2022-06-26 15:01:02 +02:00
Paul Hammerton
cef7b64ee4 Merge pull request #986 from squee1968/5moresqueecards
5moresqueecards
2022-06-26 13:38:15 +01:00
squee1968
aade9289c1 Update green_slime.txt 2022-06-26 07:03:55 -05:00
Paul Hammerton
7a1b05b122 Merge pull request #1003 from paulsnoops/legendary_fixes
Baeloth Type fix
2022-06-26 09:32:22 +01:00
paulsnoops
21906e62f3 Baeloth Type fix 2022-06-26 09:27:06 +01:00
Northmoc
a852a36e81 fix ganax_astral_hunter.txt PT (#1000) 2022-06-26 08:45:33 +03:00
Magpie
51034b18c2 Adventure mode - Adjustments (#1002)
* Goblin fixes.

Co-authored-by: Magpie <magpie514@users.noreply.github.com>
2022-06-26 08:44:53 +03:00
TRT
c93487e048 Support for Grell 2022-06-25 21:01:59 +02:00
Northmoc
07f7573595 Merge pull request #998 from paulsnoops/2x2_draft
2X2 Booster Draft
2022-06-25 14:52:30 -04:00
Anthony Calosa
10451fcc01 Merge pull request #999 from paulsnoops/burakos_commander_fix
Burakos commander fix
2022-06-25 21:20:17 +08:00
paulsnoops
82c7101605 Burakos Type fix 2022-06-25 14:11:26 +01:00
paulsnoops
c019d2b21e undo 2022-06-25 14:09:25 +01:00
paulsnoops
49dead9a14 burakos_commander_fix 2022-06-25 14:08:31 +01:00
paulsnoops
b601b106fc 2X2 Booster Draft 2022-06-25 13:56:00 +01:00
Paul Hammerton
3a57e2aa8a Merge pull request #997 from paulsnoops/2x2_update
2X2 edition rarity fixes
2022-06-25 08:52:30 +01:00
paulsnoops
14fcb11079 2X2 edition rarity fixes 2022-06-25 08:49:35 +01:00
paulsnoops
3fc975db1f Merge branch 'master' of https://github.com/Card-Forge/forge
 Conflicts:
	forge-gui/res/editions/Double Masters 2022.txt
2022-06-25 08:42:29 +01:00
paulsnoops
b415f0781c 2X2 edition update 2022-06-25 08:33:33 +01:00
Anthony Calosa
56c6395fcb Update Double Masters 2022.txt 2022-06-25 12:55:40 +08:00
squee1968
b5fb0a4cc1 Update ghost_lantern_bind_spirit.txt 2022-06-24 21:04:28 -05:00
squee1968
8765ab646e Update hammers_of_moradin.txt 2022-06-24 18:31:50 -05:00
squee1968
6a35b73839 Update green_slime.txt 2022-06-24 18:29:55 -05:00
squee1968
b5be71b143 Update green_slime.txt 2022-06-24 18:29:03 -05:00
squee1968
bda561f97a Update ghost_lantern_bind_spirit.txt 2022-06-24 18:26:03 -05:00
Northmoc
b4e55c7520 Merge pull request #995 from t-w-o-s-a-t/master
Update de-DE.properties
2022-06-24 15:27:39 -04:00
Paul Hammerton
4f2ef04291 Merge pull request #993 from JohnWilliams77/patch-17
CLB Ghastly Death Tyrant
2022-06-24 17:59:44 +01:00
Paul Hammerton
0e26120d3d undo 2022-06-24 17:56:40 +01:00
Paul Hammerton
6e7edc3a4b Update ghastly_death_tyrant.txt 2022-06-24 17:52:01 +01:00
t-w-o-s-a-t
9b2a8eeced Update de-DE.properties
corrected translation selectormode
translated changed entries historic -> archived
2022-06-24 17:07:26 +02:00
Northmoc
6dc868a0c9 Merge pull request #994 from paulsnoops/YCLB_gate_cycle
YCLB Land Gate cycle
2022-06-24 10:30:10 -04:00
paulsnoops
66349ee05d add_missing_card_detail 2022-06-24 15:08:14 +01:00
paulsnoops
f4c4e63ad7 YCLB Land Gate cycle 2022-06-24 14:08:27 +01:00
JohnWilliams77
69c02b104f Update ghastly_death_tyrant.txt 2022-06-24 12:30:55 +01:00
JohnWilliams77
df15e79d22 Update ghastly_death_tyrant.txt 2022-06-24 11:59:22 +01:00
JohnWilliams77
bdfc97a00c Create ghastly_death_tyrant.txt 2022-06-24 11:55:51 +01:00
squee1968
03993e3aa0 Update grell_philosopher.txt 2022-06-24 05:35:35 -05:00
tool4EvEr
f7f1faffed only reset castFaceDown when making a full spell copy 2022-06-24 12:23:14 +02:00
Anthony Calosa
89d6c71881 Merge pull request #989 from magpie514/master
Adventure mode - Adjustments
2022-06-24 15:30:30 +08:00
Magpie
7667c4522d Adventure mode - Adjustments
* Fixed gold display on SpellSmithScene.java.
* Added Spirit Guard icon.
2022-06-24 09:23:01 +02:00
Anthony Calosa
d1597b5bbb Merge pull request #988 from magpie514/master
Adventure Mode - Update
2022-06-24 15:07:48 +08:00
Magpie
546d068bae Adventure mode - Adjustments
Reformatted Reward.java so it's cleaner to modify.
2022-06-24 08:26:46 +02:00
Magpie
d2fddb3ac5 Adventure mode - Adjustments
Reformatted Reward.java so it's cleaner to modify.
2022-06-24 08:22:04 +02:00
Magpie
babca60f2f Adventure mode - Adjustments
* Easy mode starts with Leather Boots instead of a Jungle Shield.
* Added boss flag for enemies.
* Fixed fences without collision.
* Purge all reward objects after leaving reward scenes, might fix reported leaks.
* Added spellsmith.
* Renamed Steel gear to Iron, renamed Mithril gear to Steel.
* Catch incorrect or non-existent items on load.
* Added ability to blacklist cards and editions from the card pool. This allows removing the Power Nine and other powerful or useless cards (like Commander specific ones).
* UI: Gave selectbox a 9patch background.
* Removed basic lands from rewards.
* Some adjustments to player and enemy avatars.
* Cleaning up of maps and removal of multi-area maps (cemeteries and crypt remain).
* Better cleanup of stale data in NG+ and on loading saved games.
* Random ColorID for fantasy mode.
* Reorganized AdventurePlayer.java so it's easier to modify.
* Colored bosses now give Moxen cards as opposed to items. The two final bosses still drop items.
* Colorless Castle moved to closer to the center of the map.
* Removed unused items.
* Tweaked value for sold items.
* Added Golem and Sliver shops.
* Corrected some misaligned sprites in the shop atlas.
* Added Skep with boss.
* Added mage tower in blue areas that requires the blue key for some good treasure.
* Update wastes and plains towns.
2022-06-24 08:20:22 +02:00
squee1968
770719908d Update grell_philosopher.txt 2022-06-23 22:39:53 -05:00
squee1968
9735a56737 Update ghost_lantern_bind_spirit.txt 2022-06-23 22:37:39 -05:00
tool4ever
8c537c2d1f Fix Oni-Cult Anvil not triggering when sac itself (#774)
Co-authored-by: TRT <>
2022-06-24 06:30:00 +03:00
JohnWilliams77
9078742611 CLD Duke Ulder Ravenguard (#981)
* Create duke_ulder_ravenguard.txt

* Update duke_ulder_ravenguard.txt
2022-06-24 06:29:52 +03:00
squee1968
e5edd3e9a0 Create grell_philosopher.txt 2022-06-23 22:02:23 -05:00
squee1968
e21c33e243 5moresqueecards
-closes #804
-closes #544
-closes #805
-closes #806
-closes #866
2022-06-23 21:54:08 -05:00
Paul Hammerton
be52ccbf06 Merge pull request #985 from paulsnoops/annoyance
Annoyance: remove space
2022-06-23 22:26:23 +01:00
paulsnoops
ce73b83f78 Annoyance: remove space 2022-06-23 22:20:58 +01:00
Paul Hammerton
3941d16399 Merge pull request #867 from JohnWilliams77/patch-15
2 CLB Cards
2022-06-23 13:25:36 +01:00
JohnWilliams77
693ce69526 Update and rename young_red_dragon.txt to young_red_dragon_bathe_in_gold.txt 2022-06-23 13:20:05 +01:00
JohnWilliams77
3b9322ab06 Rename young_blue_dragon.txt to young_blue_dragon_sand_augury.txt 2022-06-23 13:19:33 +01:00
JohnWilliams77
6f26ea3fc6 Create young_red_dragon.txt 2022-06-23 11:37:59 +01:00
JohnWilliams77
66d6e1e98e Create young_blue_dragon.txt 2022-06-23 11:37:00 +01:00
Paul Hammerton
391a2374b5 Merge pull request #773 from squee1968/letstrytheseagain
letstrytheseagain
2022-06-23 09:11:17 +01:00
squee1968
24f9ae83f4 Update cone_of_cold.txt 2022-06-23 03:03:58 -05:00
squee1968
253d495288 Update cone_of_cold.txt 2022-06-23 00:02:59 -05:00
Suthro
6a3ef23550 Merge branch 'Card-Forge:master' into master 2022-06-22 23:32:17 -05:00
Suthro
742d4ba734 CLB: Remaining Gates + Navigation Orb
CLB: Scripts for the 8 remaining Gate lands, + Navigation Orb
2022-06-22 23:32:05 -05:00
squee1968
6a466d1953 letstrytheseagain
-closes #688
-closes #740
-closes #741
-closes #480
2022-06-22 23:28:11 -05:00
Anthony Calosa
ad4a430649 Merge pull request #772 from kevlahnota/master
PlayerPanel sort by variant
2022-06-23 12:07:22 +08:00
squee1968
35b08d08a9 5squeecards (#753)
* 5squeecards

-closes #742
-closes #752
-closes #693

* Update earthquake_dragon.txt

* Update elturel_survivors.txt

* Update elturel_survivors.txt

* Update endless_evil.txt
2022-06-23 05:55:22 +03:00
Agetian
907117f88d Merge pull request #771 from Card-Forge/confirmActionParams
confirmAction: add Map Params
2022-06-23 05:53:44 +03:00
Anthony Calosa
64580cb7f3 refactor typo UI_APPLIED_VARIANTS 2022-06-23 10:40:34 +08:00
Anthony Calosa
a73ff0427c PlayerPanel sort by variant
- sort initialize method by last used variant on startup
2022-06-23 10:37:03 +08:00
Hans Mackowiak
fb559886df ~ fix AiController 2022-06-22 23:36:07 +02:00
Hans Mackowiak
e92198c254 confirmAction: add Map Params 2022-06-22 23:32:57 +02:00
Paul Hammerton
a812c3b550 Merge pull request #761 from paulsnoops/2x2_update
2X2 edition update
2022-06-22 17:38:10 +01:00
paulsnoops
1b10dc344c 2X2 edition update 2022-06-22 17:34:17 +01:00
Chris H
fb918a0cf4 Merge pull request #157 from paulsnoops/archive_formats
"Historic" formats re-work - Part 2: Re-name to "Archived"
2022-06-22 08:37:17 -04:00
Anthony Calosa
a3de0c89bd Merge pull request #754 from tool4ever/feather
Fix Feather, the Redeemed and some others
2022-06-22 15:08:17 +08:00
tool4EvEr
b3d6f8a2af Fix Feather, the Redeemed and some others 2022-06-22 08:19:47 +02:00
Agetian
6b10053d86 Merge pull request #750 from squee1968/5morefromsquee
newcards
2022-06-22 06:48:13 +03:00
squee1968
fb80967e07 Delete cloakwood_swarmkeeper.txt 2022-06-21 16:46:55 -05:00
squee1968
080abe6b49 Delete balor.txt 2022-06-21 16:44:03 -05:00
squee1968
3c60eaa5e4 Delete cone_of_cold.txt 2022-06-21 16:43:18 -05:00
squee1968
61dc950afb Delete displacer_kitten.txt 2022-06-21 14:51:50 -05:00
squee1968
bdcef57b57 Update displacer_kitten.txt 2022-06-21 14:47:52 -05:00
squee1968
eb0b4abc36 Update displacer_kitten.txt 2022-06-21 06:12:20 -05:00
squee1968
8228f39178 Update cone_of_cold.txt 2022-06-21 05:53:47 -05:00
squee1968
f59877db17 Update balor.txt 2022-06-21 05:26:23 -05:00
Hans Mackowiak
a8aa75304b CardType: better handling for multiword types (#720) 2022-06-21 11:58:23 +02:00
squee1968
373702d1a5 Update cone_of_cold.txt 2022-06-21 02:50:42 -05:00
squee1968
aaea3c7370 Update burakos_party_leader.txt 2022-06-21 01:46:44 -05:00
squee1968
84a3cf08e4 Merge branch '5morefromsquee' of https://github.com/squee1968/forge into 5morefromsquee 2022-06-21 01:42:57 -05:00
squee1968
e6a4ee7c20 updatedunicode 2022-06-21 01:41:20 -05:00
squee1968
dd86d16b00 Delete displacer_kitten.txt 2022-06-21 00:40:43 -05:00
squee1968
a46377680b Delete cloakwood_swarmkeeper.txt 2022-06-21 00:40:09 -05:00
squee1968
9ee2b5655b Delete cone_of_cold.txt 2022-06-21 00:38:21 -05:00
squee1968
e01e9d3559 Update cone_of_cold.txt 2022-06-21 00:02:52 -05:00
squee1968
a5ebacf225 newcards 2022-06-20 23:33:11 -05:00
Agetian
19eac35351 Merge pull request #733 from squee1968/master
5cards
2022-06-21 06:49:18 +03:00
squee1968
f7d7c7aa57 Update blood_money.txt 2022-06-20 18:39:07 -05:00
squee1968
f11488702c Update blessed_hippogriff_tyrs_blesing.txt 2022-06-20 18:35:02 -05:00
squee1968
6c48533539 Update baeloth_barrityl_entertainer.txt 2022-06-20 18:32:59 -05:00
squee1968
b93df499b2 Update ambitious_dragonborn.txt 2022-06-20 18:15:12 -05:00
Anthony Calosa
ee1d67f7d7 Merge pull request #732 from kevlahnota/master
[Mobile] Update LobbyScreen variants
2022-06-21 03:00:16 +08:00
Anthony Calosa
10f1b0c62d update Localizer 2022-06-21 02:55:44 +08:00
paul_snoops
c905f96800 ANNOUNCEMENTS.txt 2022-06-20 19:49:36 +01:00
paul_snoops
d818a9da06 explorer date fix 2022-06-20 19:49:36 +01:00
paul_snoops
5374556c6d new_sets_added 2022-06-20 19:49:35 +01:00
Paul Hammerton
3e69decb5e Rename 2022-05-12 to 2022-05-12.txt 2022-06-20 19:49:35 +01:00
Paul Hammerton
02fd236d8c explorer_bans 2022-06-20 19:49:35 +01:00
paul_snoops
e5f11d5ac1 properties 2022-06-20 19:49:35 +01:00
paul_snoops
be075c5ccb log 2022-06-20 19:49:34 +01:00
paul_snoops
fb48847a5d explorer_fix 2022-06-20 19:49:34 +01:00
paul_snoops
712372063d archive to archived 2022-06-20 19:49:33 +01:00
paul_snoops
7dfeb79618 WIP: "Historic" formats re-work - Part 2: Re-name to Archive 2022-06-20 19:49:09 +01:00
Anthony Calosa
c48de6afe1 [Mobile] Update LobbyScreen variants
- apply last used variants on LobbyScreen on startup
2022-06-21 02:35:53 +08:00
Anthony Calosa
78c9d8a52a Merge pull request #726 from kevlahnota/master
fix duplicate deck storage
2022-06-21 02:05:12 +08:00
squee1968
9d19d91dad 5cards 2022-06-20 06:45:25 -05:00
JohnWilliams77
f899abd928 CLB 19/06 (#721)
* Create armor of shadows, arms of hadar, atrocious experiment
2022-06-20 12:41:52 +02:00
Anthony Calosa
2daa7f0382 Merge branch 'master' into newmaster 2022-06-20 18:35:56 +08:00
Anthony Calosa
14904be5e4 fix duplicate deck storage 2022-06-20 18:31:27 +08:00
Paul Hammerton
0e9186503f Merge pull request #724 from paulsnoops/edition_updates
Edition and Draft Ranking updates (CLB, YSNC, 2X2, SNC)
2022-06-20 10:03:03 +01:00
paulsnoops
75a8bcb693 oops 2022-06-20 09:59:58 +01:00
paulsnoops
4e67964d17 update_2x2 2022-06-20 09:58:27 +01:00
paulsnoops
071fcd14ed Edition and Draft Ranking updates (CLB, YSNC, SNC) 2022-06-20 09:56:06 +01:00
Agetian
13e7670682 Merge pull request #723 from squee1968/squee's2ndBranch
2ndAttemptAtContrabandLivestock
2022-06-20 07:18:10 +03:00
Anthony Calosa
b62eaaf9d5 Merge pull request #722 from tool4ever/etbREfix
Extrinsic ETB tapped: fix for double triggers
2022-06-20 07:55:34 +08:00
squee1968
ed85c0e5eb 2ndAttemptAtContrabandLivestock 2022-06-19 14:13:39 -05:00
tool4EvEr
14fa511c28 Extrinsic ETB tapped: fix for double triggers 2022-06-19 13:43:18 +02:00
Anthony Calosa
3600bbdf6a Merge pull request #717 from Card-Forge/etbCounterAdditional
GameAction: better handle etb counter + doubler + same time
2022-06-18 17:58:58 +08:00
Anthony Calosa
44b6046aa8 Update ReplaceAddCounter.java 2022-06-18 17:55:15 +08:00
Anthony Calosa
da622b6ebe Update ReplaceAddCounter.java 2022-06-18 17:50:39 +08:00
Anthony Calosa
560e18c501 Merge pull request #718 from kevlahnota/master
Add Exit Dialog on Adventure StartScene
2022-06-18 17:35:06 +08:00
Anthony Calosa
65d55ce30f Merge pull request #716 from churrufli/master
Net Deck Archive Updates
2022-06-18 17:34:16 +08:00
Anthony Calosa
48264dfed9 Add Exit Dialog on Adventure StartScene 2022-06-18 17:31:01 +08:00
Hans Mackowiak
52b5dad79f ~fix NPE 2022-06-18 11:00:04 +02:00
Hans Mackowiak
41197902ab GameAction: better handle etb counter + doubler + same time 2022-06-18 10:19:22 +02:00
Churrufli
6918151807 Net Deck Archive Updates 2022-06-18 08:53:48 +02:00
Suthro
8f75d32b83 Merge branch 'Card-Forge:master' into master 2022-06-17 22:47:44 -05:00
Anthony Calosa
49462192f1 Merge pull request #715 from tool4ever/minorcardfixes
Fix scripts
2022-06-18 03:07:47 +08:00
tool4EvEr
ea38eb9baf Clean up 2022-06-17 19:21:56 +02:00
tool4EvEr
10b55bbae7 Fix scripts 2022-06-17 19:21:39 +02:00
tool4EvEr
dca37beeec Fix controllerChangeZoneCorrection being applied during LKI checks 2022-06-17 09:08:57 +02:00
Anthony Calosa
1351c42dfe Merge pull request #711 from tool4ever/fixmisc
Fix Companion and some others
2022-06-16 20:22:07 +08:00
tool4EvEr
fb204d4471 Better check for mutated commanders when not on top 2022-06-16 12:23:50 +02:00
tool4EvEr
bd64bd202e Fix Henzie removing additional costs 2022-06-16 12:23:27 +02:00
tool4EvEr
122dead35e Fix Companion & SVars 2022-06-16 12:22:37 +02:00
tool4EvEr
d9ca0067aa Card fixes 2022-06-16 12:22:09 +02:00
Anthony Calosa
4bb8165b12 revert Ancient Brass Dragon
fix trigger
2022-06-16 10:40:34 +08:00
Anthony Calosa
c46db291d5 Merge pull request #705 from kevlahnota/master
update check for generateRandomCommanderDeck
2022-06-16 07:26:38 +08:00
Anthony Calosa
dccea5de97 update check for generateRandomCommanderDeck
- additional check for canBePartnerCommander
2022-06-16 07:24:20 +08:00
Suthro
40b330d64e Update nine-fingers_keene.txt 2022-06-15 15:56:38 -05:00
Suthro
e807dfba79 Merge branch 'Card-Forge:master' into master 2022-06-15 15:55:31 -05:00
Suthro
85296f3689 CLB: Nine-Fingers Keene
CLB: Added script for CLB legend Nine-Fingers Keene
2022-06-15 15:55:15 -05:00
Northmoc
80e325913a scion_of_halaster.txt remove unneeded Y (#700)
* scion_of_halaster.txt remove unneeded Y and SecondSVar stuff
2022-06-15 14:46:25 +02:00
Agetian
5057e1eb5a Merge pull request #667 from tool4ever/lupinefix
Fix Lupine Harbingers
2022-06-15 13:52:41 +03:00
Agetian
8d009dcf0e Merge pull request #660 from Northmoc/various
fix Toluz + various minor tweaks (mostly AI hints)
2022-06-15 13:52:31 +03:00
Agetian
ea849f337a Merge pull request #625 from Card-Forge/blitzV2
Blitz Toolbox
2022-06-15 13:51:51 +03:00
Agetian
5df07d236a Merge pull request #701 from Northmoc/tweaks
recent card tweaks
2022-06-15 13:51:18 +03:00
Anthony Calosa
47d033756b Merge pull request #703 from kevlahnota/master
refactor check
2022-06-15 17:53:53 +08:00
Anthony Calosa
5bdb4d19fd refactor check
-fix Garth One-Eye activated ability crash
2022-06-15 17:44:49 +08:00
Paul Hammerton
a78d1286ff Merge pull request #702 from paulsnoops/precon_fixes
Pre-con Commander deck fixes
2022-06-15 08:27:23 +01:00
paul_snoops
e6b005fb61 Pre-con Commander deck fixes 2022-06-15 08:22:48 +01:00
Paul Hammerton
4d6a863d57 Merge pull request #540 from riku4470/master
Added 60 Pre-con Commander Decks
2022-06-15 07:56:44 +01:00
Hans Mackowiak
d85e623bff GameAction: fix timestamp and trigger for etb (#670)
* GameAction: fix trigger by etb counter
2022-06-15 07:24:24 +02:00
Northmoc
e581d6eda5 recent card tweaks 2022-06-14 20:44:51 -04:00
Anthony Calosa
864572a06e Merge pull request #699 from kevlahnota/master
clear generated rewards
2022-06-14 19:47:54 +08:00
Anthony Calosa
aab450767c clear generated rewards
- add touch listener for RewardActor for android
2022-06-14 19:38:36 +08:00
Paul Hammerton
a840fd842d Merge pull request #698 from paulsnoops/sld_update
SLD June Drop
2022-06-14 09:54:35 +01:00
paul_snoops
35ee645004 SLD June Drop 2022-06-14 09:43:40 +01:00
Anthony Calosa
b75a193e41 Merge pull request #697 from kevlahnota/master
update fix
2022-06-14 16:30:02 +08:00
Anthony Calosa
3ce1b2858c update fix 2022-06-14 16:22:50 +08:00
Anthony Calosa
09b51f6880 Merge pull request #696 from kevlahnota/master
clear holdToolTip
2022-06-14 14:08:47 +08:00
Anthony Calosa
74dbff58f8 Merge branch 'master' into newmaster 2022-06-14 14:04:04 +08:00
Anthony Calosa
09682ecf3a clear holdToolTip
-should fix stuck card background on RewardScene
2022-06-14 14:00:02 +08:00
Paul Hammerton
a336d1a96c Merge pull request #669 from Suthro/master
CLB + YSNC: Faldorn, Dread Wolf Herald + 7 cards
2022-06-13 17:03:19 +01:00
Suthro
6a295a3991 Update agent_of_raffine.txt 2022-06-13 09:54:15 -05:00
Anthony Calosa
3eabc06afd Merge pull request #671 from Card-Forge/commanderFix
Player: fix Commander Effect
2022-06-13 17:37:51 +08:00
Hans Mackowiak
29de00ae73 Player: fix Commander Effect 2022-06-13 07:58:17 +02:00
Suthro
928bab5ea9 Update agent_of_raffine.txt
Fixed bug where activating twice in a single turn caused no conjuring of duplicate to occur
2022-06-12 23:02:08 -05:00
Suthro
3e565e3a41 Update bind_to_secrecy.txt
Fixed bug where the second mode of Bind to Secrecy would not apply the cast-with-any-color perpetual effect to the conjured card
2022-06-12 21:44:28 -05:00
Suthro
5be2fac7c8 YSNC: Agent of Raffine + Bind to Secrecy
YSNC: Added scripts for two SNC alchemy cards:
- Agent of Raffine
- Bind to Secrecy
2022-06-12 20:22:12 -05:00
Suthro
f68e10f24f Merge branch 'Card-Forge:master' into master 2022-06-12 20:02:21 -05:00
Suthro
e5a86a3ba6 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-06-12 20:02:03 -05:00
Suthro
f7b550eac4 CLB: Durnan of the Yawning Portal + Delayed Blast Fireball
CLB: Scripts for two CLB cards
2022-06-12 20:02:00 -05:00
Anthony Calosa
3b5df21d9b Update majestic_metamorphosis.txt 2022-06-13 06:50:37 +08:00
Suthro
b1f313bc00 Update ancient_bronze_dragon.txt 2022-06-12 14:10:28 -05:00
Suthro
beb0b95ebb Update ancient_silver_dragon.txt 2022-06-12 14:08:52 -05:00
Suthro
4bdedb7425 Merge branch 'Card-Forge:master' into master 2022-06-12 12:59:50 -05:00
Suthro
ae138c6ecc CLB: Faldorn, Dread Wolf Herald + 3 Dragons
CLB: Added scripts for 4 CLB cards, including two legends
2022-06-12 12:59:27 -05:00
Hans Mackowiak
c6542347ea Card: add Table for ChangedSVars (#426)
* Card: add Table for ChangedSVars
2022-06-12 19:41:49 +02:00
tool4EvEr
478ffbc345 Fix Lupine Harbingers 2022-06-12 11:23:18 +02:00
Agetian
783b58d66e Merge pull request #666 from Agetian/master
Added 2 draft cubes from XMage.
2022-06-12 09:08:37 +03:00
Agetian
92e00bae33 Merge branch 'Card-Forge:master' into master 2022-06-12 09:07:51 +03:00
Michael Kamensky
bbad864db1 - Add MTGO Khans Expanded Cube and MTGO Vintage Cube February 2022. 2022-06-12 09:07:26 +03:00
Anthony Calosa
a071df4340 Merge pull request #665 from Northmoc/halaster
Scion of Halaster fix better
2022-06-12 13:48:31 +08:00
Hans Mackowiak
5f9a7f4521 Update GameActionUtil.java 2022-06-12 07:34:37 +02:00
Hans Mackowiak
d63d3202d3 AI: add flag to check for Blitz restriction 2022-06-12 07:34:37 +02:00
Hans Mackowiak
d46168f51d Update GameActionUtil.java
fix cost
2022-06-12 07:34:37 +02:00
Hans Mackowiak
64eef69aaa Update GameActionUtil.java
better fix for Disturb
2022-06-12 07:34:37 +02:00
Hans Mackowiak
9de1dfa429 Update henzie_toolbox_torre.txt 2022-06-12 07:34:37 +02:00
Hans Mackowiak
61d8ca80d9 add LegalAfterStack check 2022-06-12 07:34:37 +02:00
Hans Mackowiak
422db8f319 GameActionUtil: check for Card on the Stack 2022-06-12 07:34:37 +02:00
Hans Mackowiak
4cfad0a001 GameAction: 400.7a to keep Keyword from static ability 2022-06-12 07:34:37 +02:00
Agetian
a3e0141f62 Merge pull request #663 from Card-Forge/goneInternalETB
Remove InternalETB and replace with UpdateResult
2022-06-12 06:55:25 +03:00
Northmoc
7971aa0175 remove unneeded whitespace 2022-06-11 22:05:34 -04:00
Northmoc
2ce6eec7b9 CardTraitBase.meetsCommonRequirements add "CheckSecondSVar" 2022-06-11 22:01:06 -04:00
Northmoc
e8c57322a3 scion_of_halaster.txt tighten up 2022-06-11 22:00:40 -04:00
Northmoc
6cfcad0622 toluz_clever_conductor.txt add remember 2022-06-11 21:30:24 -04:00
Anthony Calosa
bb591db7e3 Merge pull request #664 from kevlahnota/master
[mobile] default startup
2022-06-12 08:29:56 +08:00
Anthony Calosa
e8b15cbf24 Merge branch 'master' into newmaster 2022-06-12 08:23:19 +08:00
Anthony Calosa
3c9d2e47e1 add default startup 2022-06-12 08:14:42 +08:00
Northmoc
0b7033dbb9 Continuous + MayPlayWithFlash -> CastWithFlash (#661)
* Continuous + MayPlayWithFlash -> CastWithFlash
2022-06-11 21:55:57 +00:00
Hans Mackowiak
22c889d1e0 Remove InternalETB and replace with UpdateResult 2022-06-11 22:42:05 +02:00
Agetian
550b44c99e Merge pull request #662 from tool4ever/capri
Capricopian PW fix
2022-06-11 20:06:37 +03:00
tool4EvEr
1c65c6c3cc Capricopian PW fix 2022-06-11 17:32:42 +02:00
Northmoc
a2dcfd95c3 add exiled with statics to toluz_clever_conductor.txt 2022-06-11 10:49:24 -04:00
Northmoc
d04c4041c8 various minor tweaks (mostly AI hints) 2022-06-11 10:45:11 -04:00
Agetian
d485bc44cc Merge pull request #657 from tool4ever/initiative
Initiative fix
2022-06-11 15:32:17 +03:00
Agetian
8bdb7078ea Merge pull request #652 from Suthro/master
CLB: Artificer Class script
2022-06-11 15:32:04 +03:00
tool4EvEr
a19f90db50 Initiative fix 2022-06-11 14:03:59 +02:00
Agetian
cae5aa6bab Merge pull request #656 from Agetian/master
Prepare Forge for Android publish 1.6.53.001 [incremental].
2022-06-11 13:19:18 +03:00
Michael Kamensky
693152cda6 - Prepare Forge for Android publish 1.6.53.001 [incremental]. 2022-06-11 13:18:25 +03:00
Michael Kamensky
cff5e36d9e [maven-release-plugin] prepare for next development iteration 2022-06-11 13:06:54 +03:00
Michael Kamensky
d3c411d097 [maven-release-plugin] prepare release forge-1.6.53 2022-06-11 13:06:46 +03:00
Michael Kamensky
761b10eba4 [maven-release-plugin] prepare for next development iteration 2022-06-11 12:55:35 +03:00
Michael Kamensky
bd2a42b435 [maven-release-plugin] prepare release forge-1.6.52 2022-06-11 12:55:27 +03:00
Michael Kamensky
20de403e64 [maven-release-plugin] prepare for next development iteration 2022-06-11 12:50:40 +03:00
Michael Kamensky
6c1fe344e1 [maven-release-plugin] prepare release forge-1.6.51 2022-06-11 12:48:23 +03:00
Agetian
3161033675 Merge pull request #655 from Agetian/master
Added puzzles PS_SNC1 and PS_SNC2
2022-06-11 12:43:03 +03:00
Michael Kamensky
ede000f264 - Different (working) implementation for PS_SNC2. 2022-06-11 12:40:17 +03:00
ZacharyDeganutti
4e99f80f56 Implement Jan Jansen, Chaos Crafter (#651)
* Implement Jan Jansen, Chaos Crafter
2022-06-11 08:56:40 +00:00
Michael Kamensky
5c807f1ee7 - Slight tweak to PS_SNC2. 2022-06-11 09:15:09 +03:00
Agetian
25f60fb237 Merge branch 'Card-Forge:master' into master 2022-06-11 09:07:16 +03:00
Michael Kamensky
8cc48fdfd7 - Added puzzles PS_SNC1 and PS_SNC2. 2022-06-11 09:06:22 +03:00
Agetian
42da203998 Merge pull request #653 from Agetian/master
Ignore changes to Maven local settings when preparing a release
2022-06-11 08:29:10 +03:00
Michael Kamensky
74249924da - Ignore changes to Maven local settings when preparing a release 2022-06-11 08:28:25 +03:00
Agetian
3c0d8660c7 Merge pull request #646 from Northmoc/clbSarevok
CLB: Sarevok, Deathbringer and support
2022-06-11 08:22:59 +03:00
Suthro
7d683c4416 Merge branch 'Card-Forge:master' into master 2022-06-10 23:57:07 -05:00
Suthro
718e8da968 CLB: Artificer Class
CLB: Add script for card Artificer Class
2022-06-10 23:56:02 -05:00
Anthony Calosa
1d3a277485 Merge pull request #650 from Northmoc/clb10
CLB: 10 June
2022-06-11 09:01:56 +08:00
Northmoc
35acb80ee9 feywild_visitor.txt 2022-06-10 20:30:03 -04:00
Northmoc
8ddc803852 renari_merchant_of_marvels.txt 2022-06-10 20:22:03 -04:00
Northmoc
a851fc850c breath_of_the_sleepless.txt fix typo 2022-06-10 20:20:52 -04:00
Northmoc
05fdaf2482 CountersPutAllEffect add Default to CounterNum 2022-06-10 20:20:35 -04:00
Northmoc
a11a3007a1 lulu_loyal_hollyphant.txt 2022-06-10 20:20:02 -04:00
Northmoc
1cf84f69cc scion_of_halaster.txt fix 2022-06-10 20:16:21 -04:00
Northmoc
d6e6f86dcc fang_dragon_forktail_sweep.txt 2022-06-10 20:16:13 -04:00
Chris H
8f0dc73931 Merge pull request #649 from paulsnoops/a-fates_reversal_fix
A-Fates' Reversal cost fix
2022-06-10 17:45:06 -04:00
paul_snoops
0108dc9e1d A-Fates' Reversal cost fix 2022-06-10 22:04:51 +01:00
Paul Hammerton
c128be1816 Merge pull request #647 from FLAREdirector-mse/master
Create arming_gala.txt
2022-06-10 20:01:07 +01:00
FLAREdirector-mse
75a9795a4d Create arming_gala.txt
Arming Gala
I don't know if the SVar:Update and DBUpdate lines are necessary, but Freyalise has them so I figured, hey, can't hurt.
2022-06-10 11:55:32 -05:00
Northmoc
d3ebc9497f CardTraitBase.meetsCommonRequirements support Revolt$ None 2022-06-10 12:18:10 -04:00
Northmoc
637234870c sarevok_deathbringer.txt 2022-06-10 12:17:41 -04:00
Hans Mackowiak
8e8b3eece8 Merge pull request #645 from Northmoc/backgroundFix
CLB: better Background check for commander decks
2022-06-10 16:25:53 +02:00
Northmoc
4e636857c2 better Background check for decks 2022-06-10 09:03:54 -04:00
Paul Hammerton
9f581d0bc1 Merge pull request #642 from paulsnoops/remaining_clb_edition_cards
CLB edition - remaining cards
2022-06-10 09:07:39 +01:00
paul_snoops
fd39200fa6 CLB edition - remaining cards 2022-06-10 09:04:41 +01:00
Anthony Calosa
8c558a28d1 Merge pull request #637 from kevlahnota/master
catch exception
2022-06-10 08:14:22 +08:00
Anthony Calosa
77e1621932 catch exception 2022-06-10 08:09:08 +08:00
Paul Hammerton
712724c29a Merge pull request #636 from paulsnoops/small_fixes
Remove unneeded from Rasaad and fix PPRO edition
2022-06-09 19:30:40 +01:00
paul_snoops
61a483f53f CN_fix 2022-06-09 19:27:51 +01:00
paul_snoops
6d2334e94b Remove unneeded from Rasaad and fix PPRO edition 2022-06-09 19:13:44 +01:00
Paul Hammerton
447fc7b8f3 Merge pull request #502 from Northmoc/clbInitiativeUndercity
CLB: Initiative and Undercity
2022-06-09 13:34:15 +01:00
Paul Hammerton
ebd9969228 Merge pull request #538 from Northmoc/clbInitiative2
CLB: remaining initiative cards (until they add more anyway)
2022-06-09 13:09:53 +01:00
Paul Hammerton
27480926b7 Merge pull request #633 from Card-Forge/a-goldspan_dragon_edit
Update A-Goldspan Dragon
2022-06-09 12:07:08 +01:00
Paul Hammerton
1816bfaed7 Merge pull request #634 from JohnWilliams77/patch-12
Update Media Inserts.txt
2022-06-09 11:16:34 +01:00
JohnWilliams77
17fa6f550f Update Pro Tour Promos.txt 2022-06-09 11:07:34 +01:00
JohnWilliams77
af00bc605e Update Pro Tour Promos.txt 2022-06-09 10:00:55 +01:00
JohnWilliams77
a7a9985629 Update Media Inserts.txt 2022-06-09 09:59:39 +01:00
Paul Hammerton
0243c02537 Update a-goldspan_dragon.txt 2022-06-09 08:24:15 +01:00
Agetian
c9657558dd Merge pull request #632 from Northmoc/clb7
CLB: 5 more "Choose a Background" legends
2022-06-09 07:10:17 +03:00
Northmoc
d04ef252ab karlach_fury_of_avernus.txt 2022-06-08 21:17:46 -04:00
Northmoc
8053e16663 gut_true_soul_zealot.txt 2022-06-08 21:17:39 -04:00
Northmoc
bd78906c6e anje_maid_of_dishonor.txt remove unneeded ';' 2022-06-08 21:14:38 -04:00
Northmoc
9e7a202e5c goldspan_dragon.txt fix cost parsing and add AI hints 2022-06-08 21:14:06 -04:00
Northmoc
2ddddd6e97 citanul_hierophants.txt style fix 2022-06-08 21:13:45 -04:00
Northmoc
2e312cf27a b_4_1_skeleton_menace.txt 2022-06-08 21:13:34 -04:00
Northmoc
ebc2708af6 TypeLists.txt add Gith to CreatureTypes 2022-06-08 21:13:21 -04:00
Northmoc
3c2216481e laezel_vlaakiths_champion.txt 2022-06-08 21:13:06 -04:00
Northmoc
db6b524c5a Merge pull request #615 from paulsnoops/edition_updates
CLB, SLD edition updates and new YSNC edition
2022-06-08 21:04:04 -04:00
Northmoc
e6240a0ea8 jaheira_friend_of_the_forest.txt 2022-06-08 20:54:39 -04:00
Northmoc
da4e2bd03b undermountain_adventurer.txt remove unneeded 2022-06-08 19:20:34 -04:00
Northmoc
8134908a81 Merge pull request #305 from AvacynAngel/master
Create cliffgate.txt
2022-06-08 19:08:48 -04:00
Northmoc
ecaaf3a951 Player.createInitiativeEffect correct ValidSource 2022-06-08 19:06:55 -04:00
Northmoc
23a2fc2fd4 Player.createInitiativeEffect - use new TriggerDamageDoneOnceByController 2022-06-08 19:06:54 -04:00
Northmoc
55e58f29e8 RestartGameEffect.resolve add setHasInitiative(null) 2022-06-08 19:06:53 -04:00
Northmoc
b689a960b4 passageway_seer.txt better check 2022-06-08 19:06:53 -04:00
Northmoc
dd220ec270 GameAction.takeInitiative fix indent 2022-06-08 19:06:52 -04:00
Northmoc
4771088676 undercellar_sweep.txt 2022-06-08 19:06:52 -04:00
Northmoc
096d0e6a99 AbilityUtils.calculateAmount "PlayerCountDefined" support 2022-06-08 19:06:51 -04:00
Northmoc
ac4e03082f Player.createInitiativeEffect DamageDoneOnce not DamageDone 2022-06-08 19:06:51 -04:00
Northmoc
b04461ac10 TriggerDamageDoneOnce.setTriggeringObjects AttackingPlayer 2022-06-08 19:06:50 -04:00
Northmoc
dce11aa70d PlayerProperty.playerHasProperty "hasInitiative" 2022-06-08 19:06:50 -04:00
Northmoc
9f64006739 passageway_seer.txt 2022-06-08 19:06:49 -04:00
Northmoc
dfbbf49d2e AbilityUtils > xCount add "Initiative" 2022-06-08 19:06:49 -04:00
Northmoc
0e7d730b1f dungeoneers_pack.txt 2022-06-08 19:06:49 -04:00
Northmoc
c6d779ff08 rilsa_rael_kingpin.txt 2022-06-08 19:06:48 -04:00
Northmoc
fe25c7d2c4 BecomeMonarchEffect improve getStackDescription 2022-06-08 19:06:47 -04:00
Northmoc
ffc24faa5a TakeInitiativeEffect improve stackDesc and Resolve 2022-06-08 19:06:47 -04:00
Northmoc
f34f7810ce undercity.txt fix/improve Throne 2022-06-08 19:06:46 -04:00
Northmoc
b19806eea2 make Initiative trigger able to work right away 2022-06-08 19:06:46 -04:00
Northmoc
e527c2f9a6 TakeInitiativeEffect remove unneeded imports 2022-06-08 19:06:46 -04:00
Northmoc
ae345b6468 aarakocra_sneak.txt 2022-06-08 19:06:45 -04:00
Northmoc
929de7181c ApiType add TakeInitiative 2022-06-08 19:06:45 -04:00
Northmoc
d4eaba43f6 Undercity Catacombs skeleton token 2022-06-08 19:06:44 -04:00
Northmoc
180a90e0a1 CardRules isEnterableDungeon boolean 2022-06-08 19:06:44 -04:00
Northmoc
faea325473 DigEffect WithCounterNum for Throne of the Dead Three (Undercity) 2022-06-08 19:06:43 -04:00
Northmoc
2fa38e2ecf Game track who has initiative, handle that player losing 2022-06-08 19:06:43 -04:00
Northmoc
0d030976bc GameAction takeInitiative 2022-06-08 19:06:42 -04:00
Northmoc
b66d73162a Player - create, has, remove for InitiativeEffect 2022-06-08 19:06:42 -04:00
Northmoc
ca9f20281a SpellApiToAi - add TakeInitiative 2022-06-08 19:06:41 -04:00
Northmoc
dd5a2f16b4 TakeInitiativeEffect.java 2022-06-08 19:06:41 -04:00
Northmoc
38ea1fad46 TriggerTakesInitiative.java 2022-06-08 19:06:40 -04:00
Northmoc
684cb4115d TriggerType add TakesInitiative 2022-06-08 19:06:40 -04:00
Northmoc
b996ce4720 undercity.txt fix Arena RoomName 2022-06-08 19:06:39 -04:00
Northmoc
e3dba72bf2 VentureEffect: support "Dungeon" + check for Enterable boolean 2022-06-08 19:06:39 -04:00
Northmoc
8608a0e438 undercity.txt 2022-06-08 19:06:38 -04:00
Northmoc
5fdd62358d Merge pull request #628 from paulsnoops/gold_token_fix
Rename c_a_gold_draw > c_a_gold_sac
2022-06-08 19:03:07 -04:00
paul_snoops
cdbbb3eb4b unfinity corrected release date 2022-06-08 20:18:53 +01:00
paul_snoops
3a5ec9e846 Rename c_a_gold_draw > c_a_gold_sac 2022-06-08 20:04:25 +01:00
Paul Hammerton
a4591b5254 Update Commander Legends Battle for Baldur's Gate.txt 2022-06-08 10:37:20 +01:00
Paul Hammerton
1c7a3b92ab Update Secret Lair Drop Series.txt 2022-06-08 09:52:34 +01:00
Paul Hammerton
2735f598ff Update Alchemy New Capenna.txt 2022-06-08 09:50:08 +01:00
Anthony Calosa
02ae6282ba Merge pull request #624 from churrufli/master
Net Deck Archive Updates
2022-06-08 07:22:14 +08:00
Churrufli
e585239866 Net Deck Archive Updates 2022-06-07 23:38:12 +02:00
Paul Hammerton
886fcf3d2f Merge pull request #623 from paulsnoops/bans76222
Format updates: Added CLB, YSNC and Pioneer Bans 7 June 2022
2022-06-07 19:23:16 +01:00
paul_snoops
dbcb8b9a71 Format updates: Added CLB, YSNC and Pioneer Bans 7 June 2022 2022-06-07 19:18:26 +01:00
Northmoc
a5e65c9563 gut_true_soul_zealot.txt 2022-06-07 13:57:53 -04:00
Northmoc
9f21108218 ganax_astral_hunter.txt 2022-06-07 13:57:46 -04:00
Agetian
4c98a1a5fa Merge pull request #621 from Card-Forge/dungeonFixes
CardType: add Dungeon SubTypes
2022-06-05 20:59:21 +03:00
Hans Mackowiak
c893a01bb8 CardType: add Dungeon SubTypes 2022-06-05 19:51:46 +02:00
Anthony Calosa
6207db6bd8 Merge pull request #619 from kevlahnota/master
Fix Continue button
2022-06-05 00:35:11 +08:00
Anthony Calosa
dff30a09c6 cleanup 2022-06-05 00:29:01 +08:00
Anthony Calosa
62c9c0e9da Merge branch 'master' into newmaster 2022-06-05 00:25:06 +08:00
Anthony Calosa
5c96a624f2 Fix Continue button
-refactor some collection for FSkinFont & ImageCache
2022-06-05 00:21:58 +08:00
Agetian
1e814caec4 Merge pull request #618 from Card-Forge/triggerDamageByController
TriggerDamageDoneOnceByController
2022-06-04 17:22:27 +03:00
Hans Mackowiak
f556d5a24d TriggerDamageDoneOnceByController 2022-06-04 16:13:39 +02:00
Agetian
fcbd98d3e6 Merge pull request #617 from tool4ever/thefallen
Fix The Fallen ignoring planeswalkers
2022-06-04 15:43:54 +03:00
tool4EvEr
2b3522205d Fix counting when type didn't match 2022-06-04 14:13:28 +02:00
tool4EvEr
185598ab9c Fix NPE 2022-06-04 14:12:45 +02:00
tool4EvEr
aa40b9c64a Card fix 2022-06-04 14:12:15 +02:00
tool4EvEr
0750ae52bb Fix The Fallen ignoring planeswalkers 2022-06-04 14:11:42 +02:00
Agetian
9d0b1128e0 Merge pull request #561 from Northmoc/clbRasaad
CLB: Rasaad yn Bashir and support ("combat damage from toughness" non-keyword keyword -> static)
2022-06-03 23:06:06 +03:00
Anthony Calosa
b54b6e83c2 Merge pull request #616 from Jakob002/evangelyne_fix
Fixed quest deck 'Evangelyne (hard)'
2022-06-03 14:52:56 +08:00
Jakob002
5ee8f949e8 Fixed quest deck 'Evangelyne (hard)' 2022-06-03 06:19:12 +02:00
Agetian
978e6b4568 Merge pull request #614 from tool4ever/tokencreated
Fix TokenCreated counting
2022-06-03 06:24:06 +03:00
paul_snoops
1a20722fdb WIP: CLB, SLD edition updates and new YSNC edition 2022-06-02 09:43:33 +01:00
tool4EvEr
636ad404c7 Fix TokenCreated counting 2022-06-02 09:29:41 +02:00
Anthony Calosa
06f8944d2b Merge pull request #612 from kevlahnota/master
update translation
2022-06-01 06:01:28 +08:00
Anthony Calosa
4645e32ab7 update translation 2022-06-01 05:58:52 +08:00
Anthony Calosa
86be83ff44 Merge pull request #584 from Northmoc/clbBackgroundMostLife
CLB: support for "if no opponent has more life than that player" (Background)
2022-06-01 05:49:29 +08:00
Anthony Calosa
c4b8d52abc Merge pull request #607 from Northmoc/clbEllyn
CLB: Ellyn Harbreeze, Busybody and DigEffect stackDesc update
2022-06-01 05:48:11 +08:00
Anthony Calosa
da9978a063 Merge pull request #603 from henges/add_continue_button
[Adventure] Add continue button to main menu
2022-06-01 05:47:17 +08:00
Agetian
2655b4a626 Merge pull request #611 from tool4ever/tovolar
Fix Tovolar, Dire Overlord counting Changelings twice
2022-05-31 22:02:35 +03:00
tool4EvEr
728191ca1e Fix Tovolar, Dire Overlord counting Changelings twice 2022-05-31 20:57:55 +02:00
Northmoc
f1516060c9 Merge pull request #610 from Northmoc/clb31CaB
CLB: Choose a Background cards (31 May)
2022-05-31 13:35:34 -04:00
Northmoc
6db9e0b7d1 Merge pull request #537 from Northmoc/clbBackground2
CLB: Background type cards (30 May)
2022-05-31 13:35:04 -04:00
Agetian
de063350d6 Merge pull request #604 from CCTV-1/master
update simplified chinese translation
2022-05-31 20:10:59 +03:00
Northmoc
3e7a84759e gale_waterdeep_prodigy.txt 2022-05-31 11:47:12 -04:00
Northmoc
8306da261c erinis_gloom_stalker.txt 2022-05-31 11:29:26 -04:00
Northmoc
18683d713a abdel_adrian_gorions_ward.txt 2022-05-31 11:29:11 -04:00
Northmoc
cb4e0be196 DigEffect.getStackDescription better X handling 2022-05-31 09:57:05 -04:00
Northmoc
118c79c572 ellyn_harbreeze_busybody.txt 2022-05-31 09:55:43 -04:00
Northmoc
91187af7f7 faceless_one.txt 2022-05-31 09:51:58 -04:00
Northmoc
03c9a12826 amber_gristle_omaul.txt 2022-05-31 09:48:17 -04:00
CCTV-1
3583bc1e11 translate new effect text. 2022-05-31 20:07:46 +08:00
Alexander Jones
6d83c439a8 Support portrait mode 2022-05-31 19:34:28 +08:00
Alexander Jones
fae435a29f Remove logging imports 2022-05-31 19:33:42 +08:00
Alexander Jones
139160c32d [Adv] Add a continue button to the main menu 2022-05-31 19:29:23 +08:00
Suthro
e16a80e822 CLB: Cadira, Caller of the Small + 4 cards (#586)
- Archivist of Oghma
- Ascend from Avernus
- Astarion's Thirst
- Baldur's Gate
- Cadira, Caller of the Small
- Token: 1/1 white Rabbit creature
2022-05-31 09:00:04 +02:00
Anthony Calosa
0a79fa4c20 Merge pull request #602 from kevlahnota/master
add Selector Mode option
2022-05-31 11:51:00 +08:00
Anthony Calosa
44d45cef91 add Selector Mode option
- Default enables the selector, Adventure or Classic will open their main screen at startup.
2022-05-31 11:46:13 +08:00
Anthony Calosa
566768bbd8 Merge pull request #601 from Northmoc/conniveFix
ConniveEffect.resolve avoid potential infinite loop
2022-05-31 09:10:19 +08:00
Suthro
fb9a9065f1 Update astarions_thirst.txt 2022-05-30 19:28:45 -05:00
Northmoc
a97c18a16b ConniveEffect.resolve avoid potential infinite loop 2022-05-30 20:07:29 -04:00
Suthro
d95dc9451b Update astarions_thirst.txt 2022-05-30 18:23:40 -05:00
Suthro
f1eea28c58 Update astarions_thirst.txt 2022-05-30 18:19:32 -05:00
Northmoc
4997ddc0e2 far_traveler.txt 2022-05-30 19:06:35 -04:00
Northmoc
e044abf20c hama_pashar_ruin_seeker.txt tidy and AI 2022-05-30 19:06:23 -04:00
Northmoc
296ddf63ed dungeon_delver.txt 2022-05-30 19:06:04 -04:00
Suthro
f028da6b9f Update ascend_from_avernus.txt 2022-05-30 17:00:20 -05:00
Northmoc
c7dd68749d agent_of_the_shadow_thieves.txt revis 2022-05-30 17:50:58 -04:00
Northmoc
9724786d8d guild_artisan.txt 2022-05-30 17:50:15 -04:00
Northmoc
d9dae5be6e hardy_outlander.txt 2022-05-30 17:48:26 -04:00
Northmoc
bfa75b4042 sword_coast_sailor.txt 2022-05-30 17:43:01 -04:00
Northmoc
61763c9bb8 veteran_soldier.txt +AI flag 2022-05-30 17:42:46 -04:00
Northmoc
90d4eb0846 veteran_soldier.txt 2022-05-30 17:41:35 -04:00
Northmoc
23799411e6 Trigger.meetsRequirementsOnTriggeredObjects add "NoOpponentHasMoreLifeThanAttacked" 2022-05-30 17:41:26 -04:00
Suthro
cacf854683 Update cadira_caller_of_the_small.txt 2022-05-30 16:05:25 -05:00
Suthro
15ed877279 Update astarions_thirst.txt 2022-05-30 16:02:17 -05:00
Suthro
19b0137a86 Update ascend_from_avernus.txt 2022-05-30 16:01:51 -05:00
Suthro
e8511db24e Update archivist_of_oghma.txt 2022-05-30 16:01:03 -05:00
Northmoc
01b7aa1818 hardy_outlander.txt 2022-05-30 15:22:34 -04:00
Northmoc
d898ca7987 agent_of_the_shadow_thieves.txt 2022-05-30 15:22:33 -04:00
Northmoc
8773ae34fb Merge pull request #585 from Northmoc/myrkul_fix
myrkul_lord_of_bones.txt - copy card as it was in graveyard
2022-05-30 15:06:24 -04:00
riku4470
0310053ad8 Update precon-images.txt 2022-05-30 13:33:16 -05:00
riku4470
8d4187f36a Update precon-images.txt 2022-05-30 13:32:19 -05:00
riku4470
2275003c50 Update Witherbloom Witchcraft.dck 2022-05-30 13:31:31 -05:00
riku4470
29dc80373f Update Wade into Battle.dck 2022-05-30 13:31:03 -05:00
riku4470
25ff7e9cbc Update Vampiric Bloodlust.dck 2022-05-30 13:30:41 -05:00
riku4470
6fdc6c8ff1 Update Vampiric Bloodline.dck 2022-05-30 13:30:14 -05:00
riku4470
0d945eefcf Update Upgrades Unleashed.dck 2022-05-30 13:29:42 -05:00
riku4470
a969417683 Update Undead Unleashed.dck 2022-05-30 13:29:14 -05:00
riku4470
d015fb523c Update Timeless Wisdom.dck 2022-05-30 13:28:46 -05:00
riku4470
2e77f2bace Update Symbiotic Swarm.dck 2022-05-30 13:28:20 -05:00
riku4470
d8fe39b61c Update Sworn to Darkness.dck 2022-05-30 13:27:44 -05:00
riku4470
ff1c7eed16 Update Swell the Host.dck 2022-05-30 13:27:02 -05:00
riku4470
91af27cc9c Update Stalwart Unity.dck 2022-05-30 13:26:24 -05:00
riku4470
2e67c8ffb8 Update Spirit Squadron.dck 2022-05-30 13:25:44 -05:00
riku4470
ca2344a02b Update Sneak Attack.dck 2022-05-30 13:25:09 -05:00
riku4470
cbe547f282 Update Silverquill Statement.dck 2022-05-30 13:24:43 -05:00
riku4470
dac76e9ef6 Update Seize Control.dck 2022-05-30 13:23:19 -05:00
riku4470
7d50c81bc6 Update Ruthless Regiment.dck 2022-05-30 13:22:22 -05:00
riku4470
da9bfbffa1 Update Reap the Tide.dck 2022-05-30 13:21:53 -05:00
riku4470
aa1cb31704 Update Quantum Quandrix.dck 2022-05-30 13:21:24 -05:00
riku4470
8b544421c1 Update Prismari Performance.dck 2022-05-30 13:20:53 -05:00
riku4470
8f54d1f4be Update Primal Genesis.dck 2022-05-30 13:20:15 -05:00
riku4470
4a94725d0b Update Power Hungry.dck 2022-05-30 13:19:46 -05:00
riku4470
d05ad87dff Update Political Puppets.dck 2022-05-30 13:19:05 -05:00
riku4470
5e5e8c9320 Update Plunder the Graves.dck 2022-05-30 13:16:28 -05:00
riku4470
be9d45812a Update Planar Portal.dck 2022-05-30 13:15:45 -05:00
riku4470
dbb637f325 Update Phantom Premonition.dck 2022-05-30 13:15:14 -05:00
riku4470
00a05979bd Update Peer Through Time.dck 2022-05-30 13:14:44 -05:00
riku4470
d5c66cdcbf Update Open Hostility.dck 2022-05-30 13:14:17 -05:00
riku4470
e4cb56b1e2 Update Nature of the Beast.dck 2022-05-30 13:13:08 -05:00
riku4470
363df7c078 Update Mystic Intellect.dck 2022-05-30 13:12:22 -05:00
riku4470
666c969109 Update Mirror Mastery.dck 2022-05-30 13:09:42 -05:00
riku4470
3a863f0e84 Update Mind Seize.dck 2022-05-30 13:06:27 -05:00
riku4470
077327dc0d Update Merciless Rage.dck 2022-05-30 13:05:48 -05:00
riku4470
a92a069191 Update Lorehold Legacies.dck 2022-05-30 13:05:02 -05:00
Agetian
928f5457d8 Merge pull request #587 from tool4ever/immediatetrig
Fix AI not playing or confirming bad ImmediateTrigger
2022-05-30 21:04:45 +03:00
riku4470
edca5c0c7f Update Land's Wrath.dck 2022-05-30 13:04:13 -05:00
riku4470
ea00601327 Update Invent Superiority.dck 2022-05-30 13:03:30 -05:00
riku4470
7d0b7cbbea Update Heavenly Inferno.dck 2022-05-30 13:02:33 -05:00
riku4470
467302d049 Update Heads I Win, Tails You Lose.dck 2022-05-30 12:58:37 -05:00
riku4470
abc8f5d333 Update Guided by Nature.dck 2022-05-30 12:58:05 -05:00
riku4470
c10baffd14 Update Forged in Stone.dck 2022-05-30 12:57:31 -05:00
riku4470
e00bebeabf Update Feline Ferocity.dck 2022-05-30 12:56:53 -05:00
riku4470
5171978611 Update Faceless Menace.dck 2022-05-30 12:56:09 -05:00
riku4470
4f6f438e7a Update Evasive Maneuvers.dck 2022-05-30 12:55:31 -05:00
riku4470
907e5dde66 Update Eternal Bargain.dck 2022-05-30 12:54:50 -05:00
riku4470
c65928f018 Update Entropic Uprising.dck 2022-05-30 12:54:01 -05:00
riku4470
db33687856 Update Enhanced Evolution.dck 2022-05-30 12:53:27 -05:00
riku4470
29cee295f3 Update Elven Empire.dck 2022-05-30 12:51:57 -05:00
riku4470
e4d6fe9ef6 Update Dungeons of Death.dck 2022-05-30 12:51:13 -05:00
riku4470
4bc904b2d0 Update Draconic Rage.dck 2022-05-30 12:50:09 -05:00
riku4470
f6dd88840d Update Draconic Rage.dck 2022-05-30 12:49:48 -05:00
riku4470
bf4577bd50 Update Draconic Domination.dck 2022-05-30 12:49:07 -05:00
riku4470
d4f9aaff98 Update Draconic Domination.dck 2022-05-30 12:48:45 -05:00
riku4470
39406bafd5 Update Devour for Power.dck 2022-05-30 12:47:38 -05:00
tool4EvEr
5131d9ed96 Fix AI not playing or confirming bad ImmediateTrigger 2022-05-30 19:42:48 +02:00
riku4470
d94bfc1ad8 Update Coven Counters.dck 2022-05-30 12:42:22 -05:00
Suthro
09b884a6d1 Merge branch 'Card-Forge:master' into master 2022-05-30 12:42:06 -05:00
riku4470
13d9879c9b Update Counterpunch.dck 2022-05-30 12:41:06 -05:00
Michael Kamensky
888d49a43f [maven-release-plugin] prepare for next development iteration 2022-05-30 20:40:26 +03:00
Michael Kamensky
b9897ecb00 [maven-release-plugin] prepare release forge-1.6.50 2022-05-30 20:40:16 +03:00
riku4470
81442f2a4d Update Call the Spirits.dck 2022-05-30 12:39:15 -05:00
riku4470
ae8a12a991 Update Call the Spirits.dck 2022-05-30 12:38:35 -05:00
riku4470
7db13acdf4 Update Built from Scratch.dck 2022-05-30 12:37:57 -05:00
riku4470
0a7a43ba95 Update Buckle Up.dck 2022-05-30 12:37:10 -05:00
riku4470
a2ecc1e9bf Update Aura of Courage.dck 2022-05-30 12:35:24 -05:00
riku4470
8190b814b3 Update Arm for Battle.dck 2022-05-30 12:34:10 -05:00
riku4470
663f5a46b4 Update Arcane Wizardry.dck 2022-05-30 12:33:21 -05:00
riku4470
36874c0f00 Update Arcane Wizardry.dck
arcane_wizardry
2022-05-30 12:32:47 -05:00
riku4470
0229a23b5c cause, Inalla 2022-05-30 12:31:48 -05:00
riku4470
22ba7fd4f6 removed sideboard made commander foil 2022-05-30 12:28:16 -05:00
Suthro
ab0f693b27 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-05-30 12:13:55 -05:00
Suthro
a6778bbae2 CLB: Cadira, Caller of the Small + 4 cards
CLB: Contains scripts for five CBL cards + 1 token script —

- Archivist of Oghma
- Ascend from Avernus
- Astarion's Thirst
- Baldur's Gate
- Cadira, Caller of the Small
- Token: 1/1 white Rabbit creature
2022-05-30 12:13:52 -05:00
Northmoc
93ce8dd188 myrkul_lord_of_bones.txt - copy card as it was in graveyard 2022-05-30 13:02:00 -04:00
Northmoc
eaa84f07ea candlekeep_sage.txt 2022-05-30 11:36:32 -04:00
Northmoc
4db0f4742b acolyte_of_bahamut.txt 2022-05-30 11:36:31 -04:00
Northmoc
15bc4e4d1b agent_of_the_iron_throne.txt 2022-05-30 11:36:31 -04:00
Northmoc
2ba76439e1 scion_of_halaster.txt 2022-05-30 11:36:30 -04:00
Northmoc
51362e8290 CLB: Background mechanic and related cards (#532)
* cloakwood_hermit.txt

* halsin_emerald.archdruid.txt

* master_chef.txt

* Card > keywordsToText() for Choose a Background

* CardRules update for Background

* DeckFormat > get DeckConformanceProblem : update for Background

* TypeLists.txt add Background

* Keyword add Choose a Background

* shameless_charlatan.txt

* raised_by_giants.txt

* alora_merry_thief.txt

* livaan_cultist_of_tiamat.txt
2022-05-30 15:43:35 +02:00
Northmoc
f0414c1ef0 better check for "if you have the initiative" on triggers 2022-05-30 09:24:04 -04:00
Northmoc
1ca5609d1f rasaad_yn_bashir.txt better initiative check 2022-05-30 09:21:17 -04:00
Suthro
f9620ec816 CLB: Brainstealer Dragon, Giant Ankheg + 4 cards (#555)
- Amethyst Dragon // Explosive Crystal
- Ancient Copper Dragon
- Black Market Connections
- Brainstealer Dragon
- Giant Ankheg
- Zhentarim Bandit
2022-05-30 12:33:26 +02:00
Agetian
385fcbe4e8 Merge pull request #577 from tool4ever/manafix
Non-mana abilities incorrectly triggering/replaced
2022-05-30 12:54:52 +03:00
TRT
34e3bd2dc1 Non-mana abilities incorrectly triggering/replaced 2022-05-30 10:38:31 +02:00
Hans Mackowiak
58c738e414 Merge pull request #518 from tool4ever/triggerzones
Add some missing TriggerZones
2022-05-30 10:31:18 +02:00
Paul Hammerton
7e6496551c Merge pull request #576 from paulsnoops/clb_edition_update
CLB edition update
2022-05-30 08:31:18 +01:00
paul_snoops
f8e3032671 CLB edition update 2022-05-30 08:22:16 +01:00
Agetian
103bffa681 Merge pull request #575 from Agetian/master
Further update references to the git repo in pom.xml
2022-05-30 08:42:13 +03:00
Michael Kamensky
e3ba05b612 - Update references to the git repo in pom.xml 2022-05-30 08:41:28 +03:00
Suthro
cb0caf34cd Update c_3_2_shapeshifter_changeling.txt 2022-05-29 21:35:52 -05:00
Anthony Calosa
f8ef3ef186 Merge pull request #574 from Northmoc/typo
pygmy_troll.txt typo
2022-05-30 09:08:17 +08:00
Anthony Calosa
06c742ca2d fix settings label 2022-05-30 07:39:34 +08:00
Northmoc
4787a4c6df old cards use CombatDamageToughness Mode 2022-05-29 17:56:50 -04:00
Northmoc
defc9f41f4 Card.java toughnessAssignsDamage() boolean refactor 2022-05-29 17:56:49 -04:00
Northmoc
35024b49ea GlobalRuleChange remove toughnessAssignsDamage 2022-05-29 17:56:49 -04:00
Northmoc
af22f0e04f StaticAbilityCombatDamageToughness.java 2022-05-29 17:56:49 -04:00
Northmoc
7e31ee6d25 rasaad_yn_bashir.txt 2022-05-29 17:56:48 -04:00
Northmoc
40e62f4665 vicious_battlerager.txt 2022-05-29 17:53:15 -04:00
Northmoc
b68e425d84 underdark_explorer.txt 2022-05-29 17:53:15 -04:00
Northmoc
4f9f755e05 stirring_bard.txt 2022-05-29 17:53:14 -04:00
Northmoc
4bd141d3c0 update AI hints on hit counter cards 2022-05-29 17:53:14 -04:00
Northmoc
0f4a0c58b8 imoen_mystic_trickster.txt 2022-05-29 17:53:13 -04:00
Northmoc
8349cb6df1 trailblazers_torch.txt 2022-05-29 17:53:13 -04:00
Northmoc
6c32809b1a ravenloft_adventurer.txt 2022-05-29 17:53:12 -04:00
Northmoc
029142fbd3 white_plume_adventurer.txt 2022-05-29 17:53:12 -04:00
Northmoc
39394f77fb feywild_caretaker.txt 2022-05-29 17:53:11 -04:00
Northmoc
e76626427d explore_the_underdark.txt 2022-05-29 17:53:11 -04:00
Northmoc
c4223280dd tomb_of_horrors_adventurer.txt 2022-05-29 17:53:10 -04:00
Northmoc
858b911d4b caves_of_chaos_adventurer.txt 2022-05-29 17:53:10 -04:00
Northmoc
da55f6acfe undermountain_adventurer.txt 2022-05-29 17:53:09 -04:00
Northmoc
5e1624a41a goliath_paladin.txt 2022-05-29 17:53:09 -04:00
Northmoc
0b5048cf60 safana_calimport.cutthroat.txt fixup TrigDesc 2022-05-29 17:53:08 -04:00
Northmoc
22aca4e448 bloodboil_sorceror.txt fixup 2022-05-29 17:53:08 -04:00
Northmoc
eba20e3c62 bloodboil_sorceror.txt 2022-05-29 17:53:07 -04:00
Northmoc
6a1ed1de8d safana_calimport.cutthroat.txt 2022-05-29 17:53:07 -04:00
Northmoc
6bee902800 avenging_hunter.txt 2022-05-29 17:53:06 -04:00
Northmoc
29c13ccfc6 pygmy_troll.txt typo 2022-05-29 17:49:14 -04:00
Suthro
f53fb61d3d Update zhentarim_bandit.txt 2022-05-29 16:00:22 -05:00
Suthro
9ab9267fde Update brainstealer_dragon.txt 2022-05-29 15:57:15 -05:00
Suthro
26f158a7ff Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-05-29 15:27:53 -05:00
Suthro
c14b6316ab CLB: Black Market Connections token script
Add missing c_3_2_shapeshifter_changeling token script for CLB card Black Market Connections
2022-05-29 15:27:46 -05:00
Suthro
d3287a7c87 Update black_market_connections.txt 2022-05-29 15:22:28 -05:00
Suthro
b830a82e91 Update ancient_copper_dragon.txt 2022-05-29 15:21:47 -05:00
Anthony Calosa
e583ebf60e Merge pull request #513 from Northmoc/clbDynaheir
CLB: Dynaheir, Inovker Adept and support (kills another non-keyword keyword)
2022-05-30 00:43:37 +08:00
Agetian
d4aaa0751d Merge pull request #564 from tool4ever/aihints
AiHints upgrade
2022-05-29 18:40:24 +03:00
tool4EvEr
76f95bd0a9 AiHints upgrade 2022-05-29 17:35:14 +02:00
Anthony Calosa
149f9f083c Merge pull request #563 from tool4ever/timestampsscripts
Update more cards with timestamps
2022-05-29 19:11:50 +08:00
tool4EvEr
4c172ddb06 Update more cards with timestamps 2022-05-29 11:29:49 +02:00
tool4ever
dfc53cd315 wasAttackedThisCombat restriction for multiplayer (#467)
* wasAttackedThisCombat restriction for multiplayer
2022-05-29 07:56:38 +00:00
tool4ever
5f4e95e392 Update a few damage replacements from Pump to Effect (#466)
* Update a few damage replacements from Pump to Effect
2022-05-29 07:55:53 +00:00
Anthony Calosa
b6c2bf5630 Merge pull request #562 from kevlahnota/master
update ProtocolMethod & access options
2022-05-29 14:38:25 +08:00
Anthony Calosa
be997820a3 update ProtocolMethod & access options
- added access options for Java 11 and up
- fix Netplay Crash on assignGenericAmount
2022-05-29 14:31:15 +08:00
Suthro
a0fe2faedf Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-05-28 19:10:43 -05:00
Suthro
8ffdf02cb7 CBL: Brainstealer Dragon, Giant Ankheg + 4 cards
CBL: Scripts for six CBL cards —

- Amethyst Dragon // Explosive Crystal
- Ancient Copper Dragon
- Black Market Connections
- Brainstealer Dragon
- Giant Ankheg
- Zhentarim Bandit
2022-05-28 19:10:38 -05:00
riku4470
c208acbb49 Update Arcane Maelstrom.dck 2022-05-28 18:36:34 -05:00
riku4470
c71dcb4b3f Update Breed Lethality.dck 2022-05-28 18:31:40 -05:00
riku4470
f76e8b8200 Update Arcane Maelstrom.dck 2022-05-28 18:30:11 -05:00
riku4470
0b575d93eb Update Arcane Maelstrom.dck
Removed sideboard and fixed grammar
2022-05-28 18:27:58 -05:00
Chris H
e1ec1aa2fc Merge pull request #542 from Agetian/master
Update references to the git repo in pom.xml
2022-05-28 19:25:44 -04:00
Creston Davison
568f026440 Baba Lysaga, Night Witch and Oji, the Exquisite Blade (#497)
* Added Baba Lysaga

* Added Oji
2022-05-28 19:34:00 +00:00
Michael Kamensky
262dd1fb85 - Update references to the git repo in pom.xml 2022-05-28 20:58:27 +03:00
Agetian
216e7286ea Merge pull request #541 from Agetian/master
- Update ANNOUNCEMENTS.txt
2022-05-28 19:38:28 +03:00
Michael Kamensky
e43a1d1726 - Update ANNOUNCEMENTS.txt 2022-05-28 19:37:18 +03:00
riku4470
6cc52b24b6 Add files via upload
Added the 60 missing pre con commander decks to the Quest shop. From the original commander set all the way up to Kamaigawa neon.
2022-05-28 09:38:12 -05:00
riku4470
4520459541 Add files via upload
updated precon download list to add 60 Pre con commander decks images
2022-05-28 09:34:12 -05:00
riku4470
8e5341e1c2 Delete precon-images.txt 2022-05-28 09:31:59 -05:00
riku4470
86a5b0abad Add files via upload 2022-05-28 09:31:12 -05:00
Anthony Calosa
6bc2e035b3 Merge pull request #536 from Northmoc/tyvar
Tyvar update
2022-05-28 09:54:39 +08:00
Anthony Calosa
906c66d1a4 Merge pull request #520 from Northmoc/tweak
Housekeeping
2022-05-28 09:53:49 +08:00
Anthony Calosa
07d0e20bc1 Rename forge-gui/res/cardsfolder/upcoming/tymoras_invoker.txt to forge-gui/res/cardsfolder/t/tymoras_invoker.txt 2022-05-28 09:51:36 +08:00
Anthony Calosa
f4a8e1f8b1 Rename forge-gui/res/cardsfolder/upcoming/summon_undead.txt to forge-gui/res/cardsfolder/s/summon_undead.txt 2022-05-28 09:51:16 +08:00
Anthony Calosa
447cfdbdb1 Rename forge-gui/res/cardsfolder/upcoming/silvanuss_invoker.txt to forge-gui/res/cardsfolder/s/silvanuss_invoker.txt 2022-05-28 09:50:57 +08:00
Anthony Calosa
ec1dff4bab Rename forge-gui/res/cardsfolder/upcoming/eldritch_pact.txt to forge-gui/res/cardsfolder/e/eldritch_pact.txt 2022-05-28 09:50:32 +08:00
Anthony Calosa
61747fcd75 Rename forge-gui/res/cardsfolder/upcoming/citadel_gate.txt to forge-gui/res/cardsfolder/c/citadel_gate.txt 2022-05-28 09:50:11 +08:00
Anthony Calosa
186d71e452 Rename forge-gui/res/cardsfolder/upcoming/bhaals_invoker.txt to forge-gui/res/cardsfolder/b/bhaals_invoker.txt 2022-05-28 09:49:49 +08:00
Anthony Calosa
9e6125d649 Rename forge-gui/res/cardsfolder/upcoming/banes_invoker.txt to forge-gui/res/cardsfolder/b/banes_invoker.txt 2022-05-28 09:48:37 +08:00
Northmoc
e0464d8b87 Tyvar update 2022-05-27 16:15:04 -04:00
Northmoc
36ad56e6d7 dynaheir_invoker_adept.txt remove Duration + fix TrigDesc 2022-05-27 08:29:07 -04:00
Northmoc
9c4e44dc37 AI hints Type$ not Types$ 2022-05-27 08:21:06 -04:00
Northmoc
d733291b78 move CLB cards back to upcoming and add .txt to one 2022-05-27 08:19:09 -04:00
Agetian
ae9b1745c6 Merge pull request #524 from tool4ever/tappingai
Fix Tap trigger decisions
2022-05-27 13:09:38 +03:00
Agetian
7701ba4990 Merge pull request #525 from tool4ever/aicheat
Fix AI cheating when chaining dmg spells with DividedAsYouChoose
2022-05-27 13:08:45 +03:00
tool4EvEr
5e5ce90fa9 Fix AI cheating when chaining dmg spells with DividedAsYouChoose 2022-05-27 11:35:04 +02:00
tool4EvEr
496ab01599 Fix Tap trigger decisions 2022-05-27 10:26:43 +02:00
Chris H
9a14ec945a Merge pull request #523 from Card-Forge/migrate-capenna
Migrate cards for release
2022-05-26 21:35:07 -04:00
friarsol
07cacc406b Migrate cards for release 2022-05-26 21:30:24 -04:00
Anthony Calosa
39d74f5df2 Merge pull request #509 from Northmoc/clbNemesis
CLB: Nemesis Phoenix and support
2022-05-27 08:33:01 +08:00
Anthony Calosa
edbce270ae Merge pull request #519 from kevlahnota/master
update Adventure Chaos Mode
2022-05-27 08:32:09 +08:00
Anthony Calosa
63406fbca5 Merge branch 'master' into newmaster 2022-05-27 08:24:47 +08:00
Anthony Calosa
846e1e95bc update Adventure Chaos Mode
- Genetic AI Decks is available on some enemies on Hard Difficulty on Adventure Chaos Mode
2022-05-27 08:21:03 +08:00
Northmoc
e215eceafc Merge pull request #517 from tool4ever/controlfix
ControlGain: Fix NPE
2022-05-26 20:03:04 -04:00
Northmoc
36401b05ee "Affected" -> "ValidCard" and zone restriction 2022-05-26 19:55:36 -04:00
Paul Hammerton
a9715e4489 Merge pull request #514 from Northmoc/various
various random fixes
2022-05-26 20:45:18 +01:00
tool4EvEr
4c805f5e55 Add some missing TriggerZones 2022-05-26 21:16:28 +02:00
tool4EvEr
aee9a3a41d Fix NPE 2022-05-26 21:15:53 +02:00
Northmoc
830e1d0469 various random fixes 2022-05-26 14:02:23 -04:00
Northmoc
4a1ac0e90c thousand_year_elixir.txt change static to ActivateAbilityAsIfHaste 2022-05-26 14:01:35 -04:00
Northmoc
01a2dfe5fc StaticAbilityActivateAbilityAsIfHaste.java 2022-05-26 14:01:07 -04:00
Agetian
628993f86d Merge pull request #512 from Northmoc/crashFix
ControlGainEffect fix crash
2022-05-26 21:00:59 +03:00
Northmoc
742395d1a1 ForgeScript > spellAbilityHasProperty add "ManaSpent" 2022-05-26 14:00:04 -04:00
Northmoc
a1dcb3617c CostUntap change keyword check to static check 2022-05-26 13:59:19 -04:00
Northmoc
a10e906ddb CostTap change keyword check to static check 2022-05-26 13:58:59 -04:00
Northmoc
6be30ee2e4 ControlGainEffect fix crash 2022-05-26 13:56:31 -04:00
Northmoc
a87ca115f1 dynaheir_invoker_adept.txt 2022-05-26 13:53:09 -04:00
Northmoc
dbd9e7f61d Combat getAttackedOpponents streamline a bit more 2022-05-26 12:48:42 -04:00
Northmoc
942998585c Combat getAttackedOpponents streamline 2022-05-26 12:44:40 -04:00
Northmoc
167a774c2a remove rogue } 2022-05-26 12:17:09 -04:00
Northmoc
fea06524bd AbilityUtils > playerXProperty add "OpponentsAttackedThisCombat" 2022-05-26 11:50:03 -04:00
Northmoc
38b4fc2087 ChangeZoneEffect stackDescs reflect Attacking$ 2022-05-26 11:49:23 -04:00
Northmoc
40b140a580 Combat add getAttackedOpponents 2022-05-26 11:48:47 -04:00
Northmoc
f10537c1e7 nemesis_phoenix.txt 2022-05-26 11:42:29 -04:00
Northmoc
c3715fd4eb Merge pull request #490 from Northmoc/clb24
CLB: 24 May
2022-05-26 09:48:58 -04:00
Northmoc
b2fcf62d1c commander_liara_portyr.txt +DeckHints 2022-05-26 09:46:03 -04:00
Northmoc
edbc6553f4 raphael_fiendish_savior.txt: don't trigger for tokens 2022-05-26 07:18:39 -04:00
Northmoc
d71213f8f8 lozhan_dragons_legacy.txt +DeckHints 2022-05-26 07:16:57 -04:00
Northmoc
966b9a0121 laurine_the_diversion.txt missing | 2022-05-26 07:16:44 -04:00
Northmoc
f237acdeb8 gorion_wise_mentor.txt AI 2022-05-26 07:16:28 -04:00
Anthony Calosa
a95573fbb7 Merge pull request #506 from kevlahnota/master
update transition screen
2022-05-26 19:13:56 +08:00
Northmoc
2a4311e24b Merge pull request #496 from paulsnoops/clb_raggadragga
CLB: Raggadragga, Goreguts Boss and support
2022-05-26 07:05:44 -04:00
Anthony Calosa
3722fe98b1 update transition screen 2022-05-26 18:49:16 +08:00
Anthony Calosa
cbf0341a2e Merge pull request #504 from kevlahnota/master
Add delay to see attack animation on stage
2022-05-26 17:45:49 +08:00
Anthony Calosa
a264d4a6a0 Merge branch 'master' into newmaster 2022-05-26 13:14:20 +08:00
Anthony Calosa
644b1c051a add delay to see attack animation
- add short delay to see player and mob attack animation before the duel starts
2022-05-26 13:11:15 +08:00
Agetian
f5792e3755 Merge pull request #498 from tool4ever/tempcontroller
Fix removeTempController
2022-05-26 06:18:38 +03:00
Northmoc
757e4b2c92 Merge pull request #486 from Suthro/master
CBL: Astarion, the Decadent + 3 cards
2022-05-25 21:26:03 -04:00
Northmoc
8c5e549a66 Merge pull request #499 from t-w-o-s-a-t/master
Update de-DE.properties
2022-05-25 20:01:47 -04:00
t-w-o-s-a-t
f4db580f6a Update de-DE.properties
translated lblChooseConniver
2022-05-25 23:09:39 +02:00
tool4EvEr
3ade673e74 Fix removeTempController 2022-05-25 22:55:37 +02:00
paul_snoops
6a723b7d13 CLB: Raggadragga, Goreguts Boss and support 2022-05-25 15:43:50 +01:00
Anthony Calosa
6269a07632 Merge pull request #495 from kevlahnota/master
fix clearing screen
2022-05-25 22:08:48 +08:00
Anthony Calosa
e0a16981ff update check 2022-05-25 21:58:45 +08:00
Anthony Calosa
52e5ac04dc revert removed lines
-fix clearing match on adventure
2022-05-25 21:42:58 +08:00
Paul Hammerton
9925610cd8 Merge pull request #493 from paulsnoops/clb_edition_update
CLB edition update
2022-05-25 08:52:04 +01:00
paul_snoops
4bad103bd1 clb_edition_update 2022-05-25 08:46:30 +01:00
Northmoc
62773ab38d CLB: Zevlor, Elturel Exile and support (#462) 2022-05-25 09:42:53 +02:00
Anthony Calosa
f5747193d5 Merge pull request #492 from kevlahnota/master
update chaos battle dialogue
2022-05-25 12:40:01 +08:00
Anthony Calosa
d189212786 unused imports 2022-05-25 12:18:17 +08:00
Anthony Calosa
6f08b0a558 update chaos battle dialogue 2022-05-25 12:04:55 +08:00
Suthro
a436c474c8 Update wizards_of_thay.txt
- Removed redundant Wizard creature type deck hint
2022-05-24 22:08:25 -05:00
Suthro
9656a494ad Update gales_redirection.txt
- Added spell description strings to both effects
- Moved `number VERT` prefixes from static abilities to both effects
2022-05-24 22:07:32 -05:00
Suthro
39747d2be3 Update astarion_the_decadent.txt
- Added Feed/Friends prefix to spell description strings
- Removed redundant creature type deck hint line
2022-05-24 22:01:02 -05:00
Northmoc
f774c7d891 commander_liara_portyr.txt 2022-05-24 22:46:43 -04:00
Northmoc
73a8711108 mazzy_truesword_paladin.txt 2022-05-24 22:20:30 -04:00
Anthony Calosa
d7dff9b06c Merge pull request #377 from Northmoc/nccLethalScheme
NCC: Lethal Scheme and ConniveEffect improvements
2022-05-25 06:33:27 +08:00
tool4EvEr
6f42fcdc26 Make charm choices for triggers more like other SA 2022-05-24 23:38:47 +02:00
Suthro
9e6accc441 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-05-24 15:47:02 -05:00
Suthro
af331e0f07 CBL: Astarion, the Decadent + 3 cards
Add scripts for CBL cards:
- Astarion, the Decadent
- Gale's Redirection
- Legion Loyalty
- Wizards of Thay
2022-05-24 15:46:45 -05:00
Northmoc
9c9cbf5bd3 TriggeredNewCardLKICopy -> Remembered (#479)
* TriggeredNewCardLKICopy -> Remembered for ConditionDefined
2022-05-24 17:51:17 +02:00
Northmoc
8649ccdbf5 lozhan_dragons_legacy.txt 2022-05-24 11:23:40 -04:00
Northmoc
656643c772 raphael_fiendish_savior.txt 2022-05-24 10:57:14 -04:00
Northmoc
467c836476 ConniveEffect eliminate cast 2022-05-24 08:51:01 -04:00
Northmoc
c4f0d4454f ConniveEffect - better name and crash fix 2022-05-24 07:01:10 -04:00
Northmoc
c7fdab7996 ConniveEffect - tidy up 2022-05-24 06:51:15 -04:00
Anthony Calosa
a35bc9c7b6 Merge pull request #469 from Northmoc/clbWyllsReversal
CLB: Wyll's Reversal and support/refactor
2022-05-24 16:42:23 +08:00
Anthony Calosa
066361c9b7 Merge pull request #478 from jyockey/master
Stop unnecessarily directory scanning 1000s of times when downloading images
2022-05-24 13:37:08 +08:00
jyockey
ff5dc62445 Don't need the cache file reference either (wasn't used) 2022-05-23 20:36:45 -07:00
jyockey
49d475a418 Merge branch 'master' of https://github.com/jyockey/forge 2022-05-23 20:21:04 -07:00
jyockey
ba6c09fd63 Make looking up card image files much more efficient 2022-05-23 20:17:09 -07:00
Agetian
cbe816ac7a Merge pull request #477 from Northmoc/clb23
CLB: 23 May
2022-05-24 05:57:11 +03:00
Agetian
a6feacecc3 Merge pull request #434 from Northmoc/nccSeizeTheSpotlight
NCC: Seize the Spotlight and support
2022-05-24 05:56:38 +03:00
Northmoc
34c19db4c2 ConniveEffect according to the latest tweets 2022-05-23 22:13:50 -04:00
Northmoc
691465120a aerie_worshippers.txt tidy + AI 2022-05-23 21:51:19 -04:00
Northmoc
9bb6cf8535 the_hippodrome.txt fix bad restriction 2022-05-23 21:50:50 -04:00
Northmoc
2f923109d1 elminsters_simulacrum.txt 2022-05-23 21:50:17 -04:00
Northmoc
4abf6ed5f8 jeleva_nephalias_scourge.txt NICKNAME and oracle matching 2022-05-23 20:53:38 -04:00
Northmoc
1a9a6042f1 myrkul_lord_of_bones.txt 2022-05-23 20:51:56 -04:00
Anthony Calosa
15d5f9f560 Merge pull request #474 from kevlahnota/master
add Chaos Battle intro messages..
2022-05-24 08:44:59 +08:00
Anthony Calosa
faf42bc29f Merge branch 'master' into newmaster 2022-05-24 08:39:38 +08:00
Anthony Calosa
8bb4fdd110 add Chaos Battle intro messages.. 2022-05-24 08:39:13 +08:00
Anthony Calosa
1fcf6a7c24 Merge pull request #470 from Northmoc/teferi
Teferi's Time Twist tweak
2022-05-24 05:49:49 +08:00
Anthony Calosa
cd441384fe Merge pull request #473 from Northmoc/npeFix
CountersRemoveEffect fix possible NPE at prompt
2022-05-24 05:49:11 +08:00
Northmoc
cbff04ca46 CountersRemoveEffect fix possible NPE at prompt 2022-05-23 17:06:37 -04:00
Northmoc
ef90f497a6 teferis_time_twist.txt revis 2022-05-23 14:20:08 -04:00
Northmoc
b517a9005b remove unused imports 2022-05-23 14:11:34 -04:00
Anthony Calosa
d290566820 Merge pull request #468 from kevlahnota/master
update adventure dialog
2022-05-24 02:05:22 +08:00
Anthony Calosa
c138135376 Merge branch 'master' into newmaster 2022-05-24 02:04:54 +08:00
Northmoc
6788ccd776 old cards refactor targeting and prompts 2022-05-23 13:47:36 -04:00
Northmoc
4898ce557c wylls_reversal.txt 2022-05-23 13:46:44 -04:00
Northmoc
18733e046f TargetSelection > chooseCardFromList do some CARDNAME replacements 2022-05-23 13:46:26 -04:00
Northmoc
e5773a5e24 TargetRestrictions remove singleTarget stuff 2022-05-23 13:45:52 -04:00
Northmoc
910065e5a0 SpellAbility > canTargetSpellAbility() remove singleTarget stuff 2022-05-23 13:45:28 -04:00
Northmoc
5918030022 ForgeScript > spellAbilityHasProperty() add "numTargets" 2022-05-23 13:44:49 -04:00
Anthony Calosa
7f5bc60208 update adventure dialog
- show deck color identity for awarded deck ie chaos mode precons, etc
2022-05-24 01:43:36 +08:00
Northmoc
9f17a67a63 AbilityFactory remove "TargetsSingleTarget" 2022-05-23 13:41:54 -04:00
Anthony Calosa
875f6c78c0 Merge pull request #457 from tool4ever/smuggler
Smuggler's Share fix and some others
2022-05-23 20:49:23 +08:00
TRT
a20e6e6a2c Fix RememberObjects$ Valid remembering players 2022-05-23 13:16:01 +02:00
TRT
ebee360cda Don't grant abilities (PumpAll -> Effect) 2022-05-23 13:11:19 +02:00
TRT
25e47f2836 Fix Maddening Imp 2022-05-23 11:58:03 +02:00
TRT
ca9e80ddb7 Clean up 2022-05-23 10:15:09 +02:00
TRT
c9a37c01bf Merge branch 'smuggler' of https://github.com/tool4ever/forge.git into smuggler 2022-05-23 10:04:52 +02:00
TRT
b732e14012 Timing fixes 2022-05-23 10:04:28 +02:00
tool4ever
8b9caeb2a6 Merge branch 'Card-Forge:master' into smuggler 2022-05-23 10:03:30 +02:00
Anthony Calosa
21bfcf92c6 Update ravenous_trap.txt 2022-05-23 12:51:25 +08:00
Anthony Calosa
7c66787a32 Merge pull request #465 from kevlahnota/master
fix oathbreaker signature spell not recognized
2022-05-23 12:45:29 +08:00
Anthony Calosa
6721fc5970 disable some test since it doesn't check the game modes for oathbreaker
- todo make the test relevant for the actual game mode
2022-05-23 12:42:06 +08:00
Northmoc
72ee0066ce NCC: Wave of Rats and support (#458)
* wave_of_rats.txt

* CardProperty > cardHasProperty() expand to GameObject
2022-05-23 06:38:39 +02:00
Agetian
2880a704e3 Merge pull request #443 from cfdavison/master
Dread Linnorm // Scale Deflection, Monster Manual // Zoological Study, Stirge
2022-05-23 07:11:45 +03:00
Agetian
ca28ab16a0 Merge pull request #459 from Northmoc/various
Various little fixes
2022-05-23 07:10:02 +03:00
Agetian
4b710354a6 Merge pull request #460 from Northmoc/ncc22
NCC: 22 April
2022-05-23 07:09:40 +03:00
Agetian
122629477b Merge pull request #448 from Northmoc/nccSkywayRobber
NCC: Skyway Robber and support
2022-05-23 07:08:42 +03:00
Anthony Calosa
ff7e0f4870 fix oathbreaker signature spell not recognized 2022-05-23 11:47:58 +08:00
Creston Davison
404e2912cb DeckHas:Ability$Mill|Graveyard 2022-05-22 18:38:28 -05:00
Creston Davison
1a1f36a759 Removed trailing whitespace 2022-05-22 18:27:29 -05:00
Northmoc
e403720ab9 turf_war.txt and contested counter 2022-05-22 18:13:52 -04:00
Northmoc
672b06fb4c xanders_pact.txt 2022-05-22 18:09:36 -04:00
Northmoc
b9ba160117 writ_of_return.txt 2022-05-22 18:09:36 -04:00
Northmoc
4506bb57d8 viviens_stampede.txt 2022-05-22 18:09:35 -04:00
Northmoc
0ba7238360 DiscardEffect.java > getStackDescription() improve 2022-05-22 18:07:23 -04:00
Northmoc
7420f9a6b0 gravewaker.txt improve 2022-05-22 18:06:58 -04:00
tool4EvEr
26a335e115 Smuggler's Share fix 2022-05-22 20:30:40 +02:00
Anthony Calosa
4f2f54207e Merge pull request #456 from kevlahnota/master
added chaos battle on adventure
2022-05-22 21:06:28 +08:00
Anthony Calosa
77562edd43 Merge branch 'master' into newmaster 2022-05-22 20:59:32 +08:00
Anthony Calosa
ab622322b9 added chaos battle on adventure
- mimic (Doppelganger) will use random quest challenge decks on chaos mode. winning the challenge grants 1 life, random amount of gold, 2 rares, 2 uncommons and 3 common cards.
2022-05-22 20:58:07 +08:00
Anthony Calosa
0c23cd661f Merge pull request #451 from kevlahnota/master
minor fixes for adventure mode
2022-05-22 12:23:24 +08:00
Anthony Calosa
3b0f6fc11a Merge branch 'master' into newmaster 2022-05-22 12:19:57 +08:00
Anthony Calosa
e94a0511b6 minor fixes for adventure mode
- fix save dialog now fading out when saving
- fix deck selector for chaos mode as check box
- fix button opacity on tiled map stage
2022-05-22 12:17:55 +08:00
Anthony Calosa
ebbe62b76c Merge pull request #437 from Northmoc/nccSmugglersShare
NCC: Smuggler's Share and support
2022-05-22 10:04:12 +08:00
Anthony Calosa
aad08bb6d9 Merge pull request #428 from Northmoc/nccBeamtown
NCC: The Beamtown Bullies and some related ChangeZoneEffect cleanup
2022-05-22 10:02:29 +08:00
Northmoc
48bc0737ec AbilityUtils > handleRemembering - "RememberCostCards" look at paidHash instead of referencing Cost 2022-05-21 20:25:21 -04:00
Northmoc
ee2ad22967 skyway_robber.txt 2022-05-21 20:23:55 -04:00
Creston Davison
e5bda7b88a Removed unnecessary default values 2022-05-21 16:00:05 -05:00
Creston Davison
9aa93021f8 Removed unnecessary default values
Added Mandatory
2022-05-21 15:58:11 -05:00
Creston Davison
58470cef63 Removed unnecessary default values
Changed ’ to '
Added DeckHas
2022-05-21 15:46:39 -05:00
Creston Davison
997b1462d3 Changed RemeberCards to Targeted
Added DeckHas
2022-05-21 15:44:01 -05:00
Northmoc
578b35107c AbilityUtils > playerXCount() support "Condition" 2022-05-21 15:57:13 -04:00
Northmoc
b373f1c941 smugglers_share.txt 2022-05-21 15:56:58 -04:00
Creston Davison
4737bbb738 Added Bhaal, Lord of Murder 2022-05-21 13:12:47 -05:00
Creston Davison
4567393e75 Added Dread Linnorm // Scale Deflection
Added Monster Manual // Zoological Study
Added Stirge
2022-05-21 11:34:38 -05:00
Northmoc
aa4fad07cb Merge pull request #442 from tool4ever/changeszoneall
PlayEffect: add TriggerChangesZoneAll
2022-05-21 08:25:46 -04:00
tool4EvEr
209488f024 Cause=sa 2022-05-21 11:44:58 +02:00
Agetian
193c58c7fb Merge pull request #438 from tool4ever/cleanupnew
Remove obsolete Game fields
2022-05-21 12:25:21 +03:00
Paul Hammerton
691aaf26ce Merge pull request #441 from paulsnoops/clb_edition_update
clb_edition_update
2022-05-21 10:01:53 +01:00
tool4EvEr
f68e427a18 PlayEffect: add TriggerChangesZoneAll 2022-05-21 10:55:06 +02:00
paul_snoops
5081bf29fb clb_edition_update 2022-05-21 09:48:05 +01:00
Anthony Calosa
031e64827e Merge pull request #440 from kevlahnota/master
refactor deckgen for adventure
2022-05-21 16:42:54 +08:00
Anthony Calosa
bd5a33edff refactor deckgen for adventure
-some phones don't like streams
2022-05-21 16:39:05 +08:00
Anthony Calosa
2ca40f936b Merge pull request #439 from paulsnoops/riveteers_confluence_fix
riveteers_confluence fix
2022-05-21 15:54:20 +08:00
paul_snoops
2b12d0e11a riveteers_confluence fix 2022-05-21 08:52:54 +01:00
tool4EvEr
09f2ecba27 Remove obsolete Game fields 2022-05-21 09:45:48 +02:00
Agetian
876e2749b9 Merge pull request #409 from tool4ever/card_fixes
Card fixes
2022-05-21 07:17:22 +03:00
Agetian
2da6223526 Merge pull request #429 from Northmoc/cleanup
Various card cleanups
2022-05-21 07:16:17 +03:00
Agetian
4f2036270f Merge pull request #421 from Northmoc/nccRainOfRiches
NCC: Rain of Riches and support
2022-05-21 07:15:48 +03:00
Agetian
b45191e6b5 Merge pull request #432 from Northmoc/ncc20
NCC: 20 May
2022-05-21 07:14:59 +03:00
Northmoc
bf80721f13 guess some of those were needed 2022-05-20 23:29:51 -04:00
Northmoc
c3bcee0f8c remove more unused imports 2022-05-20 23:23:58 -04:00
Northmoc
923159bebb remove unused imports 2022-05-20 23:21:41 -04:00
Northmoc
0cf08249ef ControlGainEffect add "Choices" 2022-05-20 23:06:19 -04:00
Northmoc
1716da35d3 seize_the_spotlight.txt 2022-05-20 23:05:22 -04:00
Northmoc
5ae456b3fb scepter_of_celebration.txt 2022-05-20 22:14:54 -04:00
Northmoc
95c72210ab rose_room_treasurer.txt 2022-05-20 21:26:41 -04:00
Anthony Calosa
476a85c658 Update pom.xml
fix warning Deserialization of Untrusted Data in Gson
2022-05-21 08:21:53 +08:00
Northmoc
2a0b53f71b persist.txt tidy 2022-05-20 20:14:07 -04:00
Northmoc
8caa76c0c6 remove weird unused RemMultiplayer 2022-05-20 20:13:36 -04:00
Northmoc
14958c0203 obzedat NICKNAME 2022-05-20 20:12:51 -04:00
Northmoc
a499054865 omnath BuffedBy 2022-05-20 20:12:38 -04:00
Northmoc
1ff3637443 one more – fold "NewController" into "GainControl" 2022-05-20 20:06:43 -04:00
Northmoc
bf44fd78b4 old card – fold "NewController" into "GainControl" 2022-05-20 20:06:08 -04:00
Northmoc
8c95e15b74 ChangeZoneEffect: fold "NewController" into "GainControl" 2022-05-20 20:04:08 -04:00
Northmoc
eebb1b1d37 the_beamtown_bullies.txt 2022-05-20 20:02:59 -04:00
Northmoc
c4561a4fb8 insulate ConniveEffect against case of multiple controllers 2022-05-20 17:45:43 -04:00
Grimm
c2eeef4618 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-05-20 22:34:24 +02:00
Northmoc
d6892f2e77 rain_of_riches.txt use CastSa 2022-05-20 15:08:06 -04:00
Northmoc
685e94233a ForgeScript > spellAbilityHasProperty support "ManaFrom" 2022-05-20 15:08:05 -04:00
Anthony Calosa
8220857193 Merge pull request #427 from kevlahnota/master
add questevent decks for chaos mode
2022-05-21 02:46:54 +08:00
Anthony Calosa
f9ebfddaab add questevent decks for chaos mode
- add dumpEnemyDeckList command
2022-05-21 02:40:09 +08:00
Northmoc
36c7270dbd rain_of_riches.txt 2022-05-20 10:30:51 -04:00
Northmoc
9078724546 riveteers_confluence.txt 2022-05-20 10:29:16 -04:00
Northmoc
ace995973e add Connive prompt 2022-05-20 09:52:41 -04:00
Northmoc
8d87b2b6db restructure multiple connivers to match rules tweet 2022-05-20 09:52:20 -04:00
tool4EvEr
ea57f316c5 Clean up 2022-05-20 13:28:43 +02:00
Agetian
27603a78e2 Merge pull request #406 from Northmoc/canAttackDefender
NCC: Weathered Sentinels and support (Refactor "CARDNAME can attack as though it didn't have defender" to static)
2022-05-20 12:20:05 +03:00
Agetian
347842c7bc Merge pull request #423 from Northmoc/ncc19
NCC: 19 May
2022-05-20 12:19:47 +03:00
Anthony Calosa
0eb04df4b6 Fix tasha missing tokenscript 2022-05-20 15:43:35 +08:00
Anthony Calosa
6537696eef Merge pull request #424 from kevlahnota/master
update deckgen for adventure
2022-05-20 15:05:23 +08:00
Anthony Calosa
b9a01753ed update deckgen for adventure
- merge theme and precons for more random deck on chaos mode
2022-05-20 12:49:42 +08:00
Anthony Calosa
853e8b64f0 Merge pull request #420 from churrufli/master
Net Decks Archive Updates
2022-05-20 08:09:27 +08:00
Churrufli
4a4bd5588a Net Deck Archive Updates 2022-05-19 23:10:34 +02:00
Northmoc
3b43f78e0c protection_racket.txt 2022-05-19 14:16:29 -04:00
Northmoc
b48e72b607 prosperou 2022-05-19 14:12:34 -04:00
Agetian
25bc52f9fe Merge pull request #399 from Suthro/master
CBL: Captain N'ghathrod and Tasha, the Witch Queen
2022-05-19 21:07:41 +03:00
Suthro
a6c29c9cfd Update nobles_purse.txt 2022-05-19 12:54:32 -05:00
Suthro
b4120e0211 Update sea_hag_aquatic_ingress.txt 2022-05-19 12:44:41 -05:00
Suthro
d490a93f53 Update irenicuss_vile_duplication.txt 2022-05-19 12:40:34 -05:00
Suthro
a0e890fc50 Update tasha_the_witch_queen.txt 2022-05-19 12:39:33 -05:00
Northmoc
f3d52fa36f avoid NoSuchElementException in case toConnive is empty 2022-05-19 13:16:06 -04:00
Northmoc
f0e0ff1fa4 Merge pull request #382 from Northmoc/nccParty
NCC: Life of the Party and support
2022-05-19 13:11:43 -04:00
Northmoc
76cc5fa90e rest of the refactored cards 2022-05-19 13:09:09 -04:00
Northmoc
f7b6b99032 nuke it! 2022-05-19 12:37:37 -04:00
Northmoc
0cca0ba206 remove keyword AI references 2022-05-19 12:35:46 -04:00
Northmoc
fe92c79a64 o_kagachi_vengeful_kami.txt refactor 2022-05-19 12:31:52 -04:00
Northmoc
2bcdfcd06b remove "AttackedPlayerWhoAttackedYouLastTurn" condition 2022-05-19 12:31:32 -04:00
Northmoc
90e99f3f66 more old cards 2022-05-19 12:05:46 -04:00
Northmoc
dc796c14f2 remove KW from list 2022-05-19 11:49:39 -04:00
Northmoc
9f297694c9 use StaticAbilityCanAttackDefender canAttack check 2022-05-19 11:33:26 -04:00
Northmoc
b057dcff06 add canAttack boolean and MODE string 2022-05-19 11:32:56 -04:00
Northmoc
960324efca move this to StaticAbilityCanAttackDefender 2022-05-19 11:32:05 -04:00
Northmoc
159682561a use Effect instead of Animate 2022-05-19 11:14:37 -04:00
Northmoc
94a5560db2 don't addAttackedPlayersMyTurn if attacked planeswalker 2022-05-19 11:04:48 -04:00
Northmoc
e6101ba1dd NCC: 18 April (#407) 2022-05-19 12:08:48 +00:00
tool4EvEr
340878f6fb Clean up scripts 2022-05-19 12:41:14 +02:00
tool4EvEr
41b42cd610 Fix some corner cases 2022-05-19 12:41:05 +02:00
tool4EvEr
f1a38d35bf Timing fix 2022-05-19 12:39:46 +02:00
tool4EvEr
969f8d2b17 Clean up 2022-05-19 12:37:37 +02:00
Anthony Calosa
44fd509809 Merge pull request #408 from kevlahnota/master
add Console toggle for android
2022-05-19 17:25:10 +08:00
Anthony Calosa
5cdf780fb4 Merge branch 'master' into newmaster 2022-05-19 15:39:21 +08:00
Anthony Calosa
b17b7a5067 add Console toggle for android
- longpress the GameHud or the avatar to open the console.
2022-05-19 15:32:05 +08:00
tool4ever
bcea70e32c Jabari's Influence: multiplayer fix (#375)
* Jabari's Influence: multiplayer fix
2022-05-19 07:34:13 +02:00
Suthro
78c274a6b5 Update irenicuss_vile_duplication.txt 2022-05-19 00:16:52 -05:00
Suthro
613763b77f Update irenicuss_vile_duplication.txt 2022-05-19 00:16:04 -05:00
Northmoc
04d3d8ded2 refactor some old cards 2022-05-18 22:32:08 -04:00
Northmoc
ebd4870a59 checkDeclaredAttacker support addAttackedPlayersMyTurn 2022-05-18 22:29:50 -04:00
Northmoc
07d9f9e105 track Players attacked 2022-05-18 22:17:18 -04:00
Northmoc
4e83623e69 playerHasProperty() add "attackedYouTheirLastTurn" 2022-05-18 22:14:53 -04:00
Northmoc
d8cc879a1e modify applyCantAttackAbility() "DefenderKeyword" 2022-05-18 22:13:43 -04:00
Northmoc
c9bd1644ba applyAbility() add "CanAttackDefender" mode 2022-05-18 22:11:40 -04:00
Northmoc
c7eba8400d StaticAbilityCanAttackDefender 2022-05-18 22:10:25 -04:00
Northmoc
d13908ed63 weathered_sentinels.txt 2022-05-18 22:09:21 -04:00
Anthony Calosa
bcc15c5857 Merge pull request #405 from kevlahnota/master
GameHUD buttons update
2022-05-19 07:31:28 +08:00
Anthony Calosa
2b15ddae90 GameHUD buttons update 2022-05-19 07:28:25 +08:00
Suthro
ea24f42b26 Merge branch 'master' of https://github.com/Suthro/forge_scripttesting 2022-05-18 15:17:00 -05:00
Suthro
b2e1bb4ef5 CBL: Gorion, Wise Mentor + Uncommons
CBL Scripts for Gorion, Wise Mentor and a handful of lower rarity cards
2022-05-18 15:14:34 -05:00
Suthro
24027156f6 Update: Fix missing commander clause 2022-05-18 14:33:11 -05:00
Suthro
13c3dbe8d0 Update tasha_the_witch_queen.txt 2022-05-18 14:31:38 -05:00
Suthro
3dda45713f Update: Fix file name typo, add rec. changes 2022-05-18 14:29:36 -05:00
Northmoc
ee03f26e04 remove unused import 2022-05-18 14:44:14 -04:00
Agetian
d067e55c23 Merge pull request #380 from Northmoc/ncc17
NCC: 17 April
2022-05-18 21:42:22 +03:00
Northmoc
3501a546e5 make_an_example.txt sacrifice all at once 2022-05-18 14:38:48 -04:00
Northmoc
b1de935c0b Merge pull request #398 from FLAREdirector-mse/master
40K: Abaddon + Blood for the Blood God!
2022-05-18 14:35:59 -04:00
Suthro
e5d73b6d3a Update Tasha: add missing Commander clause
Add after line 4:
"Text:CARDNAME can be your commander."
2022-05-18 13:30:06 -05:00
FLAREdirector-mse
d78108bc54 40K Update 1 2022-05-18 13:13:40 -05:00
Suthro
64063f7388 CBL: Captain N'ghathrod and Tasha, the Witch Queen
Scripts for the CBL cards Captain N'ghathrod and Tasha, the Witch Queen, awaiting review
2022-05-18 12:43:42 -05:00
FLAREdirector-mse
f3e4819a2b 40K: Abaddon + Blood for the Blood God! 2022-05-18 12:37:52 -05:00
Northmoc
59aee823ad support list for Controller$ instead of using only first 2022-05-18 13:28:19 -04:00
Northmoc
4f56632d42 life_of_the_party.txt with Controller$ Opponent 2022-05-18 13:27:43 -04:00
Northmoc
cfacb6be7f tidy up resolve() more 2022-05-18 13:03:41 -04:00
Northmoc
143e353032 remove extra space 2022-05-18 13:03:18 -04:00
Agetian
ef2d5c4d7c Merge pull request #391 from Card-Forge/libgdxUpdate
Update LibGDX 1.11.0
2022-05-18 17:07:25 +03:00
Northmoc
301cf14d7f mezzio_mugger.txt ignore color not type 2022-05-18 09:11:11 -04:00
Northmoc
28858205c6 misfortune_teller.txt typo fix 2022-05-18 09:10:17 -04:00
Northmoc
40ac36a9b5 support "EachCreates" 2022-05-18 09:02:15 -04:00
Northmoc
81f292a194 life_of_the_party.txt without RepeatEach 2022-05-18 09:01:44 -04:00
Anthony Calosa
6afdda9a0f Update GameHUD.java
fix inverted action, hide when buttons are visible
2022-05-18 20:59:39 +08:00
Anthony Calosa
4c3fbb9810 Merge pull request #397 from kevlahnota/master
[Android] GameHUD buttons action for adventure
2022-05-18 20:42:02 +08:00
Anthony Calosa
89b212e9d0 [Android] GameHUD buttons action for adventure
- add move action for GameHUD buttons
2022-05-18 20:37:30 +08:00
Paul Hammerton
ef3f3d44a9 Merge pull request #393 from paulsnoops/clb_edition
CLB edition update
2022-05-18 08:14:07 +01:00
paul_snoops
51c5bbe010 CLB edition update 2022-05-18 08:10:58 +01:00
Anthony Calosa
786c89c185 Merge pull request #392 from kevlahnota/master
refactor generated deck selection for adventure
2022-05-18 14:26:47 +08:00
Anthony Calosa
a664ff6a52 refactor generated deck selection for adventure 2022-05-18 14:24:56 +08:00
Anthony Calosa
8f06aaeb01 Update LibGDX 1.11.0
- see https://libgdx.com/news/2022/05/gdx-1-11
2022-05-18 11:34:11 +08:00
Northmoc
60d8cda45f add "Card" to commonStuff 2022-05-17 20:47:44 -04:00
Northmoc
8cf05af3c5 misfortune_teller.txt 2022-05-17 20:47:19 -04:00
Northmoc
4cc092005a mezzio_mugger.txt 2022-05-17 20:35:16 -04:00
Northmoc
027ca95b7f master_of_ceremonies.txt 2022-05-17 19:59:03 -04:00
Northmoc
33da935a5f mask_of_the_schemer.txt 2022-05-17 19:58:39 -04:00
Northmoc
95a404c5c5 repository_skaab.txt typo 2022-05-17 19:13:23 -04:00
Northmoc
b7b29510c6 make_an_example.txt 2022-05-17 19:13:01 -04:00
Northmoc
2ea006961a maestros_confluence.txt 2022-05-17 19:12:29 -04:00
Northmoc
d9574f9208 support Duration$ Permanent 2022-05-17 18:47:09 -04:00
Northmoc
15fb11eca1 small typo 2022-05-17 18:46:43 -04:00
Northmoc
48b26050d7 life_of_the_party.txt 2022-05-17 18:42:49 -04:00
Northmoc
f31b7f2686 life_insurance.txt 2022-05-17 15:57:23 -04:00
Anthony Calosa
66c6b05397 Merge pull request #378 from kevlahnota/master
[Adventure] Update Deck selector to Chaos Mode
2022-05-18 02:37:30 +08:00
Anthony Calosa
21dce32791 [Adventure] Update Deck selector to Chaos Mode
- Precons, Theme or Random Generated color decks for Enemies, Precons for Player deck on New Game
2022-05-18 02:30:56 +08:00
Northmoc
16f3138e8e missed a Player p :( 2022-05-17 13:03:05 -04:00
Northmoc
f9c8af3296 remove Player p and streamline discarding 2022-05-17 13:00:47 -04:00
Northmoc
a4186102b2 return "" for stackDesc if nothing is conniving 2022-05-17 13:00:06 -04:00
Northmoc
2a89690b4f spacing after keyword for Card Detail 2022-05-17 10:29:57 -04:00
Northmoc
9af710e48d allow ordering of connivers and don't allow discarding the same card multiple times 2022-05-17 10:24:56 -04:00
Northmoc
a37ad6b923 lethal_scheme.txt 2022-05-17 10:21:26 -04:00
Northmoc
73fd071935 killer_service.txt 2022-05-17 09:11:29 -04:00
Anthony Calosa
70bfc13569 Merge pull request #374 from kevlahnota/master
[Adventure] Add Fantasy Mode on Deck Selector
2022-05-17 16:15:33 +08:00
Anthony Calosa
605dfb351f [Adventure] Add Fantasy Mode on Deck Selector
- Fantasy Mode will get Random Preconstructed Decks for Enemies and Player.
2022-05-17 16:03:42 +08:00
Agetian
3e5b4fcf3f Merge pull request #371 from Northmoc/ncc16
NCC: 16 April
2022-05-17 07:38:13 +03:00
tool4ever
a15cfb716c Spy Kit Fix (#368)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-05-17 05:25:29 +02:00
Northmoc
45c7737624 crovax.txt fix ValidTargets 2022-05-16 20:51:44 -04:00
Northmoc
0ff01b9fa6 silhana_wayfinder.txt remove duplicate Param 2022-05-16 20:48:13 -04:00
Northmoc
b8aef0298c crovax.txt typo 2022-05-16 20:47:49 -04:00
Northmoc
7206b42fec jailbreak.txt 2022-05-16 20:46:46 -04:00
Northmoc
f476495958 in_too_deep.txt 2022-05-16 20:46:37 -04:00
Northmoc
fc4b9ffc61 industrial_advancement.txt 2022-05-16 16:41:43 -04:00
Northmoc
ab2e293a29 Merge pull request #363 from t-w-o-s-a-t/master
Update de-DE.properties
2022-05-16 10:30:30 -04:00
t-w-o-s-a-t
0f61b17482 Update de-DE.properties
translated lblWithKindCounter, lblEachOther, lblChooseAnyNumberToPhase
streamlined some translations
2022-05-16 08:41:45 +02:00
Agetian
b47c9f0fec Merge pull request #361 from tool4ever/tezz
Fix Tezzeret, Betrayer of Flesh
2022-05-16 07:19:57 +03:00
tool4EvEr
5a1d740243 Fix Tezzeret, Betrayer of Flesh 2022-05-15 23:36:19 +02:00
Hans Mackowiak
24b2186e0d Card: ignoreLegendRule as StaticAbility (#360)
* Card: ignoreLegendRule as StaticAbility
2022-05-15 21:32:55 +00:00
tool4ever
573e7dfb23 Run AbilityCast triggers for mana abilities (#345)
* Run AbilityCast triggers for mana abilities

* Fix for Vazi

* Update cards

* Make mana abilities undoable if they cause a trigger

* Reset undoable

* Cleanup related to Winter's Night
2022-05-15 21:24:40 +00:00
Agetian
aaee31e1c6 Merge pull request #355 from Northmoc/nccFirstResponder
Fix NCC First Responder
2022-05-14 18:04:46 +03:00
Paul Hammerton
f7556f90a8 Merge pull request #359 from JohnWilliams77/patch-11
Update Secret Lair Drop Series.txt
2022-05-14 10:30:03 +01:00
JohnWilliams77
14460a97bc Update Secret Lair Drop Series.txt 2022-05-14 07:44:11 +01:00
Agetian
9e1c06301f Merge pull request #352 from Northmoc/ncc13
NCC: 13 April
2022-05-14 07:25:18 +03:00
Northmoc
9bde0f210f grime_gorger.txt 2022-05-13 18:32:09 -04:00
Northmoc
defe53894e flawless_forgery.txt 2022-05-13 18:31:58 -04:00
Agetian
ac10d6f499 Merge pull request #354 from Northmoc/nccCurrency
NCC Currency Converter and stackDesc tweaks
2022-05-13 23:04:30 +03:00
Northmoc
73f747b9ea grand_crescendo.txt 2022-05-13 15:13:28 -04:00
Northmoc
2f75053478 dodgy_jalopy.txt 2022-05-13 12:55:41 -04:00
Northmoc
8a86b32655 add RememberLKI to playerinvariant 2022-05-13 12:45:54 -04:00
Northmoc
8996675c91 first_responder.txt without cost 2022-05-13 12:45:19 -04:00
Agetian
1260ae32df Merge pull request #353 from Northmoc/sdFix
CountersPutEffect fix backward stackDesc logic
2022-05-13 19:43:58 +03:00
Northmoc
6dda7422ea better parse wacky stackDesc constructions 2022-05-13 12:14:18 -04:00
Northmoc
19ab071643 changeHiddenOriginStackDesc begin to support Exile origin 2022-05-13 12:13:45 -04:00
Northmoc
84c156f389 currency_converter.txt 2022-05-13 12:10:58 -04:00
Northmoc
9055556d65 CountersPutEffect fix backward logic 2022-05-13 12:06:30 -04:00
Agetian
488cabbde4 Merge pull request #351 from Northmoc/nccFirstResponder
NCC: First Responder and support
2022-05-13 18:36:14 +03:00
Northmoc
1493331238 false_floor.txt 2022-05-13 11:27:00 -04:00
Northmoc
50ff19b442 determined_iteration.txt 2022-05-13 11:25:44 -04:00
Northmoc
ea8ae179a8 calculateAmount support using "Returned" paid list 2022-05-13 11:20:31 -04:00
Northmoc
e3293b8cc0 first_responder.txt 2022-05-13 11:18:36 -04:00
Paul Hammerton
1754459459 Merge pull request #340 from Northmoc/ncc12
NCC: 12 April
2022-05-13 16:02:02 +01:00
Northmoc
c2f0b3cc14 dogged_detective.txt 2022-05-13 10:52:26 -04:00
Northmoc
892f21e8da crash_the_party.txt they're drunk 2022-05-13 07:58:36 -04:00
Northmoc
4ccf2ff0df cryptic_pursuit.txt cast not play 2022-05-13 07:57:52 -04:00
tool4ever
9e5573560c Fix missing check for mana abilities at instant speed (#336)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-05-13 09:58:00 +02:00
Paul Hammerton
b40e971cdd Merge pull request #342 from paulsnoops/new_editions
New edition files: 2X2, 40K, PLG22, SCH
2022-05-13 08:36:51 +01:00
paul_snoops
2c844284a7 New edition files: 2X2, 40K, PLG22, SCH 2022-05-13 08:29:28 +01:00
Agetian
cc266d675b Merge pull request #338 from Northmoc/nccChangeOfPlans
NCC: Change of Plans and support
2022-05-13 06:51:30 +03:00
Northmoc
d307b78dc9 cryptic_pursuit.txt 2022-05-12 20:29:55 -04:00
Northmoc
6380950831 crash_the_party.txt 2022-05-12 19:40:45 -04:00
Northmoc
e78f65558a PhasesEffect choose any number prompt 2022-05-12 19:25:23 -04:00
Northmoc
d8cf7baba1 PhasesEffect support "AnyNumber" 2022-05-12 19:24:52 -04:00
Northmoc
c28e2fbf78 change_of_plans.txt 2022-05-12 19:18:53 -04:00
Northmoc
4902ed4242 cephalid_facetaker.txt 2022-05-12 13:24:19 -04:00
Northmoc
7d6fe5bc5b caldaia_guardian.txt 2022-05-12 13:21:59 -04:00
Northmoc
6fa6ce8680 cabaretti_confluence.txt 2022-05-12 12:43:40 -04:00
Northmoc
64bb51fad4 bosss_chauffeur.txt 2022-05-12 12:43:27 -04:00
Paul Hammerton
b18c086c07 Removal of 3 un-needed "digital" formats (#315) 2022-05-12 17:41:45 +02:00
Northmoc
c55afd50de NCC: Bess, Soul Nourisher and support (#327) 2022-05-12 14:55:30 +02:00
tool4ever
a3b6d34887 Update demonfire.txt (#330) 2022-05-12 14:52:53 +02:00
Agetian
aa6830c454 Merge pull request #329 from Northmoc/ncc11
NCC: 11 April
2022-05-12 07:50:11 +03:00
Anthony Calosa
73690dd461 Merge pull request #324 from magpie514/master
Adventure mode - Small map updates
2022-05-12 08:00:40 +08:00
Northmoc
53a7c0736e audacious_swap.txt add DefinedDesc 2022-05-11 16:42:45 -04:00
Northmoc
7789aeb3be audacious_swap.txt 2022-05-11 16:39:13 -04:00
Northmoc
f2fc19f352 lilianas_standard_bearer.txt simple AI hint 2022-05-11 16:30:49 -04:00
Northmoc
e58e7825bc body_count.txt 2022-05-11 16:30:30 -04:00
Northmoc
496dcd3838 the_grand_tour.txt little typo 2022-05-11 16:23:27 -04:00
Northmoc
2b9ce7df5d bellowing_mauler.txt 2022-05-11 16:23:05 -04:00
Northmoc
49ec28ac24 aerial_extortionist.txt 2022-05-11 15:30:14 -04:00
Magpie
6455a3332c Adventure mode - Small map updates
* Castle gates do not consume keys anymore.
* Prototype waste town update.
2022-05-11 21:22:54 +02:00
tool4ever
57eeb5e0bf Fix NPE with Crystalline Giant (#321)
* Fix Crystalline Giant NPE

* Clean up

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
2022-05-11 16:45:36 +00:00
Agetian
284fbb9d53 Merge pull request #319 from Northmoc/ncc10
NCC: 10 April
2022-05-11 09:15:46 +03:00
Northmoc
b7a9bb9742 sinister_concierge.txt 2022-05-10 22:13:42 -04:00
Northmoc
27af5756e1 waste_management.txt add AI hint 2022-05-10 11:38:17 -04:00
Agetian
0b3e9745f8 Merge pull request #317 from Northmoc/nccSmugBug
NCC: Smuggler's Buggy and a little support
2022-05-10 18:19:02 +03:00
Agetian
4a3eabd690 Merge pull request #318 from paulsnoops/update_snc_draft_rank
Update SNC Draft Ranking
2022-05-10 18:18:52 +03:00
Northmoc
7a7dff9088 Card.java Kicker for non-permanents same spacing in card detail 2022-05-10 11:01:36 -04:00
Northmoc
3dd2a2c076 waste_management.txt 2022-05-10 11:00:53 -04:00
paul_snoops
bac850072a Update SNC Draft Ranking 2022-05-10 15:57:45 +01:00
Northmoc
2e85504747 smugglers_buggy.txt "cast" means ValidSA$ Spell is needed 2022-05-10 10:51:55 -04:00
Northmoc
08c7a3d5b1 PlayEffect optional is not final 2022-05-10 10:27:38 -04:00
Northmoc
d95dd98fce PlayEffect add option to Imprint 2022-05-10 09:51:04 -04:00
Northmoc
771092a2b5 smugglers_buggy.txt 2022-05-10 09:44:25 -04:00
Northmoc
6c9ce36c17 NCC: Gavel of the Righteous and output support (#298) 2022-05-10 14:53:49 +02:00
Northmoc
a49015316e extravagant_replication.txt AI hint 2022-05-10 08:20:38 -04:00
Northmoc
24970bff01 spellbinding_soprano.txt 2022-05-10 08:20:19 -04:00
Hans Mackowiak
6c4367efa4 Merge pull request #274 from tool4ever/slogurk
Fix Slogurk not triggering when dying from SBA legendary
2022-05-10 10:32:01 +02:00
Northmoc
8b84ec9998 NCC: Agent's Toolkit and support (#300)
* agents_toolkit.txt

* CardFactoryUtil support multiple counter kinds for etbCounter

* CountersPutEffect support ETBcounters for CounterTypes

* add " " to syntax
2022-05-10 08:09:37 +02:00
Agetian
083ea2fc69 Merge pull request #310 from tool4ever/cleanstuff
Cleanup some scripts
2022-05-10 08:42:31 +03:00
Agetian
cdd7089534 Merge pull request #311 from Northmoc/ncc9
NCC: 9 April
2022-05-10 08:40:16 +03:00
Agetian
b8334c8891 Merge pull request #314 from CCTV-1/master
update simplified chinese translation
2022-05-10 08:39:32 +03:00
CCTV-1
87bad87d54 translate new strings. 2022-05-10 10:15:35 +08:00
Northmoc
99e00468bc syrix_carrier_of_the_flame.txt remove comment 2022-05-09 19:16:38 -04:00
Northmoc
e931169390 parnesse_the_subtle_brush.txt 2022-05-09 19:13:57 -04:00
Northmoc
f2cefcff5d syrix_carrier_of_the_flame.txt 2022-05-09 18:40:57 -04:00
tool4EvEr
3fe10a24fa Tweak declareAttackers 2022-05-09 22:25:29 +02:00
tool4EvEr
6b84716f53 Cleanup cards 2022-05-09 22:24:59 +02:00
tool4EvEr
e5f3488d5d Clean up 2022-05-09 22:24:41 +02:00
TheBlackMarvel
5e9a76043a NCC Extravagant Replication (#307)
* NCC Extravagant Replication
2022-05-09 13:10:06 +02:00
Northmoc
6b13169fd5 NCC: 8 April (#299)
* familys_favor.txt

* brokers_confluence.txt

* denry_klin_editor_in_chief.txt

* skyboon_evangelist.txt fix Oracle
2022-05-09 06:22:37 +00:00
AvacynAngel
44b839e4f6 Update cliffgate.txt 2022-05-08 20:39:34 -04:00
AvacynAngel
9a0a9ab7fc Create citadel_gate.txt 2022-05-08 20:29:56 -04:00
Anthony Calosa
5427e51a04 Merge pull request #296 from magpie514/master
Adventure mode - Small fixes
2022-05-09 08:10:56 +08:00
Anthony Calosa
f16825acdc Merge pull request #297 from tool4ever/manafix
ComputerUtilMana: Fix payment fails with TapsForMana triggers
2022-05-09 08:09:46 +08:00
Agetian
f481d5d78c Merge pull request #295 from tool4ever/scriptparser
Small improvement to CardScriptParser
2022-05-08 22:37:50 +03:00
tool4EvEr
93e1a58a13 Fix for Reflecting Pool + Wastes 2022-05-08 21:16:14 +02:00
Hans Mackowiak
a028986abf SNC: Lagrella, the Magpie (#293)
* SNC: add Special ReturnAbility for Magpie

* StaticAbilityPanharmonicon: no for delayed trigger
2022-05-08 17:37:54 +02:00
Northmoc
66bcff8eea Merge branch 'master' of https://github.com/Card-Forge/forge 2022-05-08 09:07:14 -04:00
tool4EvEr
43ca318931 Fix payment fails with TapsForMana triggers 2022-05-08 14:52:50 +02:00
Magpie
522ccc2f2d Adventure mode - Small fixes
* Fixed hedge walls not having collisions.
* Variable timer added to reward scenes, it'll wait longer the more rewards are given. It can also be exited by activating the button again after 0.2 seconds (to prevent accidental double clicks).
2022-05-08 14:40:31 +02:00
tool4EvEr
ebe1642bec Small improvement to CardScriptParser 2022-05-08 14:12:38 +02:00
Agetian
e14ae15c70 Merge pull request #294 from Agetian/ai-witnessthefuture
Make Witness the Future AI playable.
2022-05-08 12:41:29 +03:00
Michael Kamensky
75a974165d - Make Witness the Future AI playable. 2022-05-08 12:31:32 +03:00
Anthony Calosa
21fca37c7d Merge pull request #292 from kevlahnota/master
[Adventure] Fix Layout and add Preview Date Time
2022-05-08 14:14:32 +08:00
Anthony Calosa
e88c25ce7c Merge branch 'master' into newmaster 2022-05-08 14:08:19 +08:00
Anthony Calosa
8708b6300c [Adventure] Fix Layout and add Preview Date Time 2022-05-08 14:06:09 +08:00
Anthony Calosa
b4a0f673f6 Merge pull request #289 from kevlahnota/master
[Adventure] Refactor GameHud
2022-05-08 06:50:56 +08:00
Anthony Calosa
ace4ba4aea Merge branch 'master' into newmaster 2022-05-08 05:58:42 +08:00
Anthony Calosa
3c9cabfb7b [Adventure] Refactor GameHud
Make GameHud controls/layout for Android landscape mode identical to Android portrait mode. Desktop Adventure mode retains previous layout and controls.
2022-05-08 05:57:36 +08:00
Anthony Calosa
c039f238d0 Merge pull request #283 from tool4ever/caststuff
Fix casting card copies not being added to stack correctly
2022-05-08 05:53:50 +08:00
Anthony Calosa
864d2caa12 Merge pull request #287 from JohnWilliams77/patch-5
Update Secret Lair Drop Series.txt
2022-05-08 05:53:01 +08:00
Anthony Calosa
dce75c9578 Merge pull request #282 from Northmoc/nccBribeTaker
NCC: Bribe Taker and support
2022-05-08 05:52:33 +08:00
Anthony Calosa
8828003333 Merge pull request #288 from kevlahnota/master
[Mobile] Add Auto AI Deck option
2022-05-08 05:43:08 +08:00
Northmoc
5e8587d786 sewer_crocodile.txt remove bad NonStackingEffect line (#286) 2022-05-07 20:02:49 +00:00
Anthony Calosa
409d18aa06 fix translation 2022-05-08 02:19:46 +08:00
Anthony Calosa
a318749a78 [Mobile] Add Auto AI Deck option 2022-05-08 02:16:36 +08:00
JohnWilliams77
8a05179a74 Update Secret Lair Drop Series.txt 2022-05-07 18:15:43 +01:00
Agetian
1f0c2d4a82 Merge pull request #268 from Northmoc/nccContractual
NCC: Contractual Safeguard, Aven Courier and support
2022-05-07 17:15:54 +03:00
Northmoc
e60b6d00c7 Merge pull request #281 from AvacynAngel/master
Create citadel_gate.txt
2022-05-07 09:56:24 -04:00
AvacynAngel
eb0e97e0d7 Create summon_undead.txt (#255)
* Create summon_undead
2022-05-07 13:55:51 +00:00
Northmoc
e4e0edc217 sewer_crocodile.txt remove bad NonStackingEffect line 2022-05-07 09:50:57 -04:00
TheBlackMarvel
01e8f8e2f2 NCC Park Heights Maverick (#221) 2022-05-07 13:47:46 +00:00
Northmoc
ab2ea6554f bribe_taker.txt fix typo 2022-05-07 09:43:16 -04:00
tool4EvEr
9db791d875 Fix casting card copies not being added to stack correctly 2022-05-07 10:18:19 +02:00
Anthony Calosa
721b284b1b revert 2022-05-07 13:02:20 +08:00
Agetian
e576656d7c Merge pull request #276 from Northmoc/ncc6a
Shield Broker (NCC) and AI for Sewer Crocodile
2022-05-07 07:30:45 +03:00
Northmoc
efb713405f CountersPutEffect support "AltChoiceForEach" 2022-05-06 23:20:13 -04:00
Northmoc
b5267d5a64 bribe_taker.txt 2022-05-06 23:19:35 -04:00
Northmoc
0e203c3327 storm_of_forms.txt 2022-05-06 23:18:20 -04:00
Anthony Calosa
1536c0e589 remove extra code 2022-05-07 11:17:54 +08:00
Anthony Calosa
268b1ea823 prevent NPE 2022-05-07 11:15:26 +08:00
AvacynAngel
774c4ff62d Create citadel_gate.txt 2022-05-06 22:07:04 -04:00
Anthony Calosa
a16fbf15bc add check on selectedDeckType 2022-05-07 10:00:18 +08:00
Anthony Calosa
88adf6a99e Merge pull request #279 from Card-Forge/kevlahnota-patch-1
cleanup
2022-05-07 07:29:34 +08:00
Anthony Calosa
f2fb22328a unused import 2022-05-07 07:22:20 +08:00
Anthony Calosa
472b0b8329 Update RandomDeckGenerator.java 2022-05-07 07:20:19 +08:00
Anthony Calosa
2ecc88cada cleanup 2022-05-07 07:18:17 +08:00
Anthony Calosa
4972823b27 Merge pull request #267 from kevlahnota/diffPlus
[Adventure] difficulty selector on NewGame Plus
2022-05-07 06:49:57 +08:00
Anthony Calosa
af51f1f5a5 Merge pull request #263 from Northmoc/hiddenCZ
various getStackDescription improvements
2022-05-07 06:48:46 +08:00
Anthony Calosa
64cbb0badd Merge pull request #265 from Northmoc/stackDesc
TokenEffect > getStackDescription() try to catch more possibilities
2022-05-07 06:39:31 +08:00
Northmoc
8af0a03ebb sewer_crocodile.txt with NonStackingEffect 2022-05-06 18:37:49 -04:00
Northmoc
2b886345b2 shield_broker.txt 2022-05-06 18:37:31 -04:00
Anthony Calosa
4aca310370 update button text 2022-05-07 06:34:48 +08:00
Anthony Calosa
9cd23e6639 Merge pull request #273 from Northmoc/ncc6
NCC: 6 April
2022-05-07 06:23:13 +08:00
Anthony Calosa
1ceed9e52e Merge pull request #264 from kevlahnota/master
refactor aideck selection
2022-05-07 06:07:00 +08:00
tool4EvEr
d5d7c58bdd Fix Slogurk not triggering when dying from SBA legendary 2022-05-06 22:52:33 +02:00
Northmoc
470e3d4a64 CountersPutEffect support "PutOnDefined" and "OnlyNewKind" 2022-05-06 16:35:35 -04:00
Northmoc
2cdb17f437 aven_courier.txt 2022-05-06 16:33:33 -04:00
Northmoc
c3e6da0d35 NCC AI updates 2022-05-06 15:09:15 -04:00
Northmoc
e7a4dcf394 skyboon_evangelist.txt 2022-05-06 15:08:40 -04:00
Northmoc
3698472ca7 damning_verdict.txt 2022-05-06 15:07:01 -04:00
Paul Hammerton
64a1bff911 Merge pull request #271 from paulsnoops/plist_update
PLIST edition update
2022-05-06 19:45:47 +01:00
paul_snoops
f2de64b1f2 PLIST edition update 2022-05-06 19:41:35 +01:00
paul_snoops
3145fedee4 Revert "PLIST edition update"
This reverts commit ac88f0b437.
2022-05-06 19:40:17 +01:00
paul_snoops
ac88f0b437 PLIST edition update 2022-05-06 19:37:49 +01:00
Northmoc
14608f34c4 CountersPutEffect new Localizer prompts 2022-05-06 13:55:26 -04:00
Northmoc
908be0e653 CountersPutEffect support "PutOnEachOther" 2022-05-06 13:42:12 -04:00
Northmoc
e439e2a975 CountersPutEffect > getStackDescription() updates 2022-05-06 13:40:48 -04:00
Northmoc
ae6f8f8f39 unbreakable_formation.txt minor tweaks 2022-05-06 13:39:16 -04:00
Northmoc
d9fd83bbd3 contractual_safeguard.txt 2022-05-06 13:39:00 -04:00
Northmoc
3f44105d93 NCC: Tenuous Truce (#236)
* tenuous_truce.txt
2022-05-06 17:21:49 +00:00
Anthony Calosa
88914f8fec [Adventure] difficulty selector on NewGame Plus 2022-05-07 00:20:21 +08:00
Anthony Calosa
317623fb34 refactor aideck selection 2022-05-06 21:48:11 +08:00
Northmoc
a5e9e394da Merge pull request #262 from JohnWilliams77/patch-4
Update Secret Lair Drop Series.txt
2022-05-06 09:35:53 -04:00
Northmoc
85c597672a various old card tweaks 2022-05-06 09:29:43 -04:00
Northmoc
1d055682ac MillEffect > getStackDescription() tweaks + support "Optional", "IfDesc" 2022-05-06 09:29:07 -04:00
Northmoc
ff026c59cc ChangeZoneEffect > getHiddenOriginStackDescription() : Origin Graveyard improvements 2022-05-06 09:28:10 -04:00
Northmoc
b6e42301bf AnimateEffect > getStackDescription() tweaks + support "AtEOT" 2022-05-06 09:26:51 -04:00
JohnWilliams77
166c61c7c2 Update Secret Lair Drop Series.txt 2022-05-06 10:54:38 +01:00
Agetian
105f2ce1f3 Merge pull request #244 from tool4ever/lkifix
Update some older cards to use LKI correctly
2022-05-06 10:48:49 +03:00
AvacynAngel
b476797001 Create eldritch_pact.txt (#246)
* Create eldritch_pact.txt
2022-05-06 09:11:23 +02:00
TRT
16c3f4ed14 Card fix 2022-05-06 09:09:41 +02:00
Anthony Calosa
b8288c4e5a Merge pull request #260 from magpie514/master
Adventure mode - Revert RNG
2022-05-06 07:38:41 +08:00
Magpie
78345ade78 Adventure mode - Revert RNG
Better fix for yesterday's revert.
2022-05-06 01:33:51 +02:00
Anthony Calosa
920bb96a57 Merge pull request #257 from tool4ever/chooseCardsToDiscardFrom
Fix chooseCardsToDiscardFrom
2022-05-06 06:34:27 +08:00
Grimm
c444fa5fd8 Merge branch 'master' of https://github.com/Card-Forge/forge into adventure 2022-05-06 00:07:00 +02:00
tool4EvEr
11195e64d2 Fix chooseCardsToDiscardFrom 2022-05-05 22:13:30 +02:00
Agetian
42f98bd8da Merge pull request #211 from Northmoc/nccVazi
NCC: Vazi, Keen Negotiator and support
2022-05-05 22:39:26 +03:00
Northmoc
b5608929fc Merge pull request #245 from paulsnoops/rebalanced_05_may
Alchemy Rebalancing for May 5, 2022
2022-05-05 14:19:37 -04:00
paul_snoops
7a9e9b0e19 type_addition 2022-05-05 18:48:29 +01:00
Anthony Calosa
84e4cf5bd2 Merge pull request #250 from magpie514/master
Adventure mode - Revert RNG
2022-05-05 20:06:45 +08:00
Magpie
e931da7ce0 Adventure mode - Revert RNG
Fix call that assumed MyRandom.
2022-05-05 14:00:43 +02:00
Anthony Calosa
fe0215673b Merge pull request #249 from CCTV-1/master
update simplified chinese translation
2022-05-05 18:40:24 +08:00
Anthony Calosa
c6e8f1d23a Update RandomDeckGenerator.java 2022-05-05 18:36:28 +08:00
CCTV-1
0fbdd526a6 translate lblSelectCounterType and fix lblWinGameWithOutCasting translation. 2022-05-05 18:32:40 +08:00
Anthony Calosa
10af16aa1d [Mobile] Auto select AI Enabled Decks randomly
- Auto select AI Enabled Decks (non generated decks) when the Player Panel is AI and at least more than 10 AI Decks is available randomly
2022-05-05 18:16:54 +08:00
Anthony Calosa
631ae3f9e5 Merge pull request #248 from magpie514/master
Adventure mode - Revert RNG
2022-05-05 13:51:20 +08:00
Magpie
509ba33d8e Adventure mode - Revert RNG
Unused import.
2022-05-05 06:49:45 +02:00
Magpie
b0c545b039 Adventure mode - Revert RNG
This will revert shops back to being handled consistently. Temporary solution, most changes are code re-arranging to prepare for more drastic changes.
The current design for shops doesn't allow for easy dynamic changes, it's going to need to be rewritten so PointOfInterestChanges saves the type and current contents of a shop. As it is, a world will always generate a limited amount of cards unless that's done.
2022-05-05 06:41:18 +02:00
Anthony Calosa
9fd90a63c3 Merge pull request #247 from magpie514/master
Adventure mode - Support to restrict cards from random pool
2022-05-05 12:03:42 +08:00
Magpie
8251c08af0 Adventure mode - Support to restrict cards from random pool
For now we just restrict the Power Nine. They can still be dropped explicitly.
2022-05-05 05:08:31 +02:00
Anthony Calosa
47168e1de7 Update PeekAndRevealAi.java 2022-05-05 04:42:24 +08:00
paul_snoops
40028b77aa description fixes 2022-05-04 20:29:09 +01:00
paul_snoops
ebc12bed0f Alchemy Rebalancing for May 5, 2022 2022-05-04 19:36:39 +01:00
TRT
84bd068a06 Update some older cards to use LKI correctly 2022-05-04 15:51:08 +02:00
Agetian
50e068e047 Merge pull request #243 from tool4ever/cycle
Fix Cycle of Life
2022-05-04 13:15:40 +03:00
TRT
6096207a85 Fix Cycle of Life 2022-05-04 10:01:10 +02:00
Paul Hammerton
9e95c7d2c0 Merge pull request #242 from churrufli/master
Net Deck Archive Updates
2022-05-04 08:47:21 +01:00
churrufli
abb1127fc9 Update net-decks-archive-pauper.txt 2022-05-04 09:34:01 +02:00
Churrufli
ee13d15067 Net Deck Archive Updates 2022-05-04 09:26:41 +02:00
Anthony Calosa
f01b695805 Merge pull request #233 from AvacynAngel/patch-5
Create silvanuss_invoker.txt
2022-05-04 09:48:06 +08:00
Anthony Calosa
d96798edab Merge pull request #229 from Northmoc/ncc2
NCC: 2 May
2022-05-04 09:46:34 +08:00
Anthony Calosa
60f569682d Merge pull request #198 from Northmoc/refact
refactor some DigEffect + NoMove$ cards to PeekAndReveal
2022-05-04 08:43:06 +08:00
Anthony Calosa
c9a02a52fb Update zh-CN.properties 2022-05-04 08:38:46 +08:00
Anthony Calosa
843c54acec Update pt-BR.properties 2022-05-04 08:37:31 +08:00
Anthony Calosa
92c3e98a5a Update ja-JP.properties 2022-05-04 08:35:18 +08:00
Anthony Calosa
2123a8a4db Update it-IT.properties 2022-05-04 08:34:07 +08:00
Anthony Calosa
2c80d2aba3 Update de-DE.properties 2022-05-04 08:31:43 +08:00
Anthony Calosa
ebd0eb3abe Merge pull request #241 from mousep/update-translation-snc-ncc
Update card translations for SNC and NCC
2022-05-04 08:27:27 +08:00
Alumi
cf4707ead7 Update card translations for SNC and NCC 2022-05-04 08:14:49 +09:00
Anthony Calosa
ee516ae5c6 Merge pull request #239 from Northmoc/npe
ManaEffect > getStackDescription() negative restrictions
2022-05-04 06:40:54 +08:00
Northmoc
2298502eb9 Merge pull request #240 from tool4ever/boxing
Fix Boxing Ring
2022-05-03 17:17:33 -04:00
Northmoc
6ba4074362 refactor more DigEffect + NoMove$ cards to PeekAndReveal 2022-05-03 16:54:03 -04:00
Northmoc
2988499ff4 PS_HOU6.pzl refactor CustomScript 2022-05-03 16:53:33 -04:00
Northmoc
769ac2bf61 PeekAndRevealEffect > getStackDescription() more refinements 2022-05-03 16:53:10 -04:00
tool4EvEr
8b50f365a4 Fix Boxing Ring 2022-05-03 22:03:26 +02:00
Northmoc
aadc9c1693 more refactored cards 2022-05-03 15:44:23 -04:00
Northmoc
2bde63260a zurs_weirding.txt with PeekAndReveal 2022-05-03 15:44:23 -04:00
Northmoc
606926db24 lim_duls_vault.txt with PeekAndReveal 2022-05-03 15:44:23 -04:00
Northmoc
ae0cdcd5c4 PeekAndRevealEffect resolve() tweaks 2022-05-03 15:44:23 -04:00
Northmoc
1b5b05b26c aven_windreader.txt with PeekAndRevealEffect 2022-05-03 15:44:23 -04:00
Northmoc
0f20fe4c1c PumpEffect add "IfDesc" support to getStackDescription 2022-05-03 15:44:22 -04:00
Northmoc
0a66acfcbb lblLookingCardFrom for PeekAndRevealEffect 2022-05-03 15:44:22 -04:00
Northmoc
0612c2a35b PeekAndRevealEffect > getStackDescription() improvements 2022-05-03 15:44:22 -04:00
Northmoc
9d337f60c2 Deceiver cycle 2022-05-03 15:44:22 -04:00
Northmoc
0ea643bffe DrawEffect > getStackDescription$ add "NumCardsDesc" 2022-05-03 15:44:22 -04:00
Northmoc
8ca09b4d7e missing "." 2022-05-03 15:44:21 -04:00
Northmoc
ca66cd9caa druidic_satchel.txt with PeekAndRevealEffect 2022-05-03 15:44:21 -04:00
Northmoc
285fae8b72 interpret_the_signs.txt with PeekAndRevealEffect and NumCardsDesc$ 2022-05-03 15:44:21 -04:00
Northmoc
7e19c32b48 refactor Ripple to PeekAndReveal 2022-05-03 15:44:21 -04:00
Northmoc
5a90005622 refactor some DigEffect + NoMove$ cards to PeekAndReveal 2022-05-03 15:44:21 -04:00
Northmoc
468fc92606 "ManaFrom" check with matchesValidParam 2022-05-03 15:38:41 -04:00
Northmoc
d4fd068955 old cards with YouOwn 2022-05-03 15:38:23 -04:00
Northmoc
8aaaa9767b vazi_keen_negotiator.txt with YouOwn 2022-05-03 15:38:03 -04:00
AvacynAngel
8e409e6e3c Update silvanuss_invoker.txt
*Added ".YouCtrl" to line 5
*Added "you control" to TgtPrompt$
*Added DeckHas:Type$Elemental
^^ "DeckHas" I'm figuring goes above "Oracle" but wasn't 100%
2022-05-03 15:31:59 -04:00
Northmoc
2028306b8e ManaEffect > getStackDescription() negative restrictions 2022-05-03 15:17:56 -04:00
Anthony Calosa
5944ffca50 Merge pull request #238 from Northmoc/npe
ManaEffect > getStackDescription() try to dodge NPE
2022-05-04 03:03:02 +08:00
Northmoc
17d41ef165 ManaEffect > getStackDescription() try to dodge NPE 2022-05-03 14:41:45 -04:00
Paul Hammerton
5d3519e533 Merge pull request #235 from JohnWilliams77/patch-3
Update Secret Lair Drop Series.txt
2022-05-03 19:33:14 +01:00
JohnWilliams77
adc336a25a Update Secret Lair Drop Series.txt 2022-05-03 17:54:47 +01:00
Northmoc
387e2007d7 Merge pull request #215 from AvacynAngel/patch-4
Create tymoras_invoker.txt
2022-05-03 12:03:28 -04:00
Northmoc
ce9f13bbe8 Merge pull request #214 from AvacynAngel/patch-3
Create bhaals_invoker.txt
2022-05-03 12:02:25 -04:00
Northmoc
19c5fa069e Merge pull request #213 from AvacynAngel/patch-2
Create banes_invoker.txt
2022-05-03 12:01:22 -04:00
tool4ever
2198947c53 Fix misc stuff (#234) 2022-05-03 15:54:24 +00:00
AvacynAngel
1ba171d669 Create silvanuss_invoker.txt
*Tested 5/3/22
Untaps target land. Animates into an 8/8 Elemental Creature with Trample and Haste until end of turn
2022-05-03 11:09:44 -04:00
Agetian
cb6f28c741 Merge pull request #224 from Northmoc/nccMari
NCC: Mari, the Killing Quill and support
2022-05-03 16:48:12 +03:00
Northmoc
e28ce4b190 swindlers_scheme.txt with Defined 2022-05-03 09:28:22 -04:00
Agetian
f1a9d542d5 Merge pull request #225 from Northmoc/nccBoxing
NCC: Boxing Ring and support
2022-05-03 10:12:34 +03:00
Anthony Calosa
f5f46ebc9b Merge pull request #222 from tool4ever/fixsac
Sheltering Ancient: fix upkeep cost
2022-05-03 12:06:39 +08:00
Anthony Calosa
56413e2c4b Merge pull request #206 from tool4ever/ascendant
Fix Ascendant Acolyte
2022-05-03 12:05:31 +08:00
Anthony Calosa
a48769fc95 Merge pull request #231 from kevlahnota/master
[Adventure] disables Advanced Search
2022-05-03 11:51:49 +08:00
Anthony Calosa
9a61ac45f4 [Adventure] disables Advanced Search
- needs GUI Layout for Landscape mode
- needs override onclose event on internal EditScreen on AdvancedSearchFilter
2022-05-03 11:50:44 +08:00
AvacynAngel
047995c801 Update tymoras_invoker.txt
*Added "PrecostDesc$ Sleight of Hand - "
2022-05-02 20:44:18 -04:00
AvacynAngel
65f3275419 Update bhaals_invoker.txt
*Removed "ValidTgts$ and "TgtPrompt$"
*Added "Defined$ Opponent"
*Added "PrecostDesc$ Scorching Ray - "
2022-05-02 20:38:14 -04:00
AvacynAngel
42ee46a9e7 Update banes_invoker.txt
*Added space before "KW$ Flying"
*Added "Select up to two target creatures" to TgtPrompt$
*Added "|PrecostDesc$ Wind Walk - |" after TgtPrompt$ and before SpellDescription$
2022-05-02 20:17:46 -04:00
Northmoc
568251df4a threefold_signal.txt 2022-05-02 19:57:37 -04:00
Northmoc
f0aa990aba Replicate TriggerDesc add "." 2022-05-02 19:57:20 -04:00
Northmoc
7d9378f73f swindlers_scheme.txt 2022-05-02 18:59:14 -04:00
Northmoc
967122d829 spiteful_repossession.txt 2022-05-02 18:59:13 -04:00
Northmoc
b36bb7a39f boxing_ring.txt 2022-05-02 17:33:32 -04:00
Northmoc
9dcbc956d8 Card.java add foughtThisTurn and cleanup 2022-05-02 17:33:21 -04:00
Northmoc
9ad1d67539 CardProperty "FoughtThisTurn" 2022-05-02 17:32:55 -04:00
Northmoc
803f3d2d9f FightEffect + setFoughtThisTurn 2022-05-02 17:32:36 -04:00
Northmoc
ae417d0200 etrata_the_silencer.txt tidy up 2022-05-02 17:02:25 -04:00
Northmoc
3595e2bd26 CountersRemoveEffect support "Choices" for Mari 2022-05-02 16:56:25 -04:00
Northmoc
b9fb174457 mari_the_killing_quill.txt 2022-05-02 16:56:01 -04:00
tool4EvEr
f76f466c39 Sheltering Ancient: fix upkeep cost 2022-05-02 22:00:45 +02:00
JohnWilliams77
c2bd4c1a4e Update Secret Lair Drop Series.txt (#220) 2022-05-02 19:05:44 +00:00
Northmoc
7910b23a02 Player remove getNumTokensCreatedThisTurn() 2022-05-02 15:03:03 -04:00
Northmoc
78ba4d9ef6 akim_the_soaring_wind.txt tidy only 2022-05-02 15:02:11 -04:00
Northmoc
1a388f6e6b AbilityUtils remove "TokensCreatedThisTurn" 2022-05-02 15:01:51 -04:00
Northmoc
5e9734ec59 refactor old TokensCreatedThisTurn cards 2022-05-02 14:35:45 -04:00
Northmoc
9646771d4c TriggerSpellAbilityCastOrCopy "ManaFrom" use isValid() check 2022-05-02 14:35:45 -04:00
Northmoc
616324d364 TriggerSpellAbilityCastOrCopy support "ManaFrom" 2022-05-02 14:35:44 -04:00
Northmoc
b7293467aa vazi_keen_negotiator.txt 2022-05-02 14:35:44 -04:00
Northmoc
50d015bbb5 TokenEffect > getStackDescription() try to catch more possibilities 2022-05-02 14:34:06 -04:00
TRT
fca6bf245e Update more cards 2022-05-02 18:20:18 +02:00
AvacynAngel
3bed91cba2 Create tymoras_invoker.txt 2022-05-02 11:49:20 -04:00
AvacynAngel
68a6fafa2b Update banes_invoker.txt 2022-05-02 11:47:15 -04:00
AvacynAngel
402835ee52 Create bhaals_invoker.txt 2022-05-02 11:45:44 -04:00
AvacynAngel
aa6e96284f Create banes_invoker.txt 2022-05-02 11:43:29 -04:00
Agetian
a7f88d97bb Merge pull request #208 from Northmoc/npeTweaks
NPE tweaks
2022-05-02 17:27:28 +03:00
TRT
07e9d46c87 Clean up cards 2022-05-02 16:08:45 +02:00
Northmoc
eb88c12d6d DigEffect remove unneeded () 2022-05-02 09:46:21 -04:00
Northmoc
1f1fdeabe4 CopyPermanentEffect > getStackDescription() "AddTriggers" try to avoid NPE 2022-05-02 09:45:47 -04:00
TRT
d40439b2ec Valid check replacement 2022-05-02 15:18:36 +02:00
Agetian
13dc89c3a2 Merge pull request #186 from tool4ever/questdeckfix
Fix duplicating cards in quest mode
2022-05-02 16:12:55 +03:00
TRT
1988d802f0 Fix Ascendant Acolyte 2022-05-02 14:44:01 +02:00
Anthony Calosa
0a50d4bbde Merge pull request #203 from tool4ever/totalcounters
Cleanup Count$TotalCounters
2022-05-02 19:44:41 +08:00
TRT
0fb56e9bc0 Cleanup Count$TotalCounters 2022-05-02 10:59:59 +02:00
Anthony Calosa
8d85df8b63 Merge pull request #202 from tool4ever/arix
GameAction: Add ETB counters before checking statics
2022-05-02 16:58:11 +08:00
TRT
4c7af60445 Add ETB counters before checking statics 2022-05-02 10:19:59 +02:00
Agetian
ff46dc4520 Merge pull request #195 from Northmoc/nccPerrie
NCC: Perrie and support
2022-05-02 07:38:54 +03:00
Agetian
b03c64b110 Merge pull request #200 from Northmoc/nccKros
NCC: kros_defense_contractor.txt
2022-05-02 07:37:32 +03:00
Anthony Calosa
0b5b3ef756 Merge pull request #201 from magpie514/master
Adventure mode - Add doppelganger enemy
2022-05-02 12:04:26 +08:00
Magpie
640a1029f7 Adventure mode - Add doppelganger enemy
Rare overworld spawn, uses same deck as player and can grant a duplicate.
2022-05-02 05:41:04 +02:00
Northmoc
520306da7e kros_defense_contractor.txt 2022-05-01 21:43:29 -04:00
Anthony Calosa
b722aa7b4c Merge pull request #199 from TrueFuFLeaderG/adventure
Adventure: fixed shopList attribute in towns
2022-05-02 06:30:40 +08:00
Grimm
5a24663189 Merge remote-tracking branch 'origin/adventure' into adventure 2022-05-02 00:25:50 +02:00
Grimm
9c6d63ee02 Adventure: fixed shopList attribute in towns 2022-05-02 00:25:32 +02:00
Grimm
dc24da9c2e Adventure: fixed shopList attribute in towns 2022-05-02 00:24:22 +02:00
Anthony Calosa
b2164a239a Merge pull request #191 from Northmoc/ncc_1
NCC: 1 May
2022-05-02 06:04:15 +08:00
Anthony Calosa
7b4c73ed07 Merge pull request #188 from Northmoc/snc_1
SNC: 1 May
2022-05-02 06:03:26 +08:00
Anthony Calosa
53655d8621 Merge pull request #185 from Card-Forge/attachSpellAbility
canEquip checks for SpellAbility
2022-05-02 06:01:14 +08:00
Anthony Calosa
32d0f83fbf Merge pull request #190 from Northmoc/stackdesc
DigEffect getStackDescription() improvements + some card tweaks
2022-05-02 05:59:39 +08:00
Northmoc
cfc10681ba AbilityUtils > xCount() support "DifferentCounterKinds_" 2022-05-01 17:20:12 -04:00
Northmoc
477d62ec92 perrie_the_pulverizer.txt 2022-05-01 17:19:24 -04:00
Northmoc
d08e925e9b kitt_kanto_mayhem_diva.txt 2022-05-01 16:51:27 -04:00
Northmoc
f8b6c61b0d phabine_bosss_confidant.txt 2022-05-01 16:51:17 -04:00
Northmoc
8a684f7d43 prismatic_vista.txt + ChangeTypeDesc$, AIhint 2022-05-01 16:24:43 -04:00
Northmoc
e4cb860d3a eye_of_ugin.txt + ChangeTypeDesc$, AIhints 2022-05-01 16:14:29 -04:00
Northmoc
ce4d308610 DigEffect > getStackDescription() improvements 2022-05-01 16:13:49 -04:00
Northmoc
20d0082822 narset_parter_of_veils.txt + ChangeValidDesc$ 2022-05-01 16:13:01 -04:00
Northmoc
3c222937fc once_upon_a_time.txt + ChangeValidDesc$ 2022-05-01 16:06:51 -04:00
Agetian
843c03899b Merge pull request #187 from tool4ever/exalted
Remove duplicate exalted calculation
2022-05-01 19:03:24 +03:00
tool4EvEr
e0f1a47037 Remove duplicate exalted calculation 2022-05-01 17:29:44 +02:00
tool4EvEr
b41d76749c Fix duplicating cards in quest mode 2022-05-01 17:04:52 +02:00
Northmoc
07bae8be9f pyre_sledge_arsonist.txt 2022-05-01 10:57:42 -04:00
Northmoc
266a905515 citizens_crowbar.txt (thanks Snoops) 2022-05-01 10:57:33 -04:00
tool4ever
8f883168fa Always change zone of cards when they move (#176)
* Always change zone of cards when they move

* Update Zone.java

* update check

* Clean up

Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
Co-authored-by: Anthony Calosa <anthonycalosa@gmail.com>
2022-05-01 14:43:00 +00:00
Paul Hammerton
039f9da107 Merge pull request #179 from Northmoc/sncHoldForRansom
SNC: Hold for Ransom and support
2022-05-01 14:39:05 +01:00
Agetian
78cd586245 Merge pull request #182 from Northmoc/snc30
SNC: 30 April
2022-05-01 16:38:14 +03:00
Northmoc
622752a96b structural_assault.txt add Oracle tag 2022-05-01 07:47:11 -04:00
Northmoc
3529e176ff soul_of_emancipation.txt fix AI tag 2022-05-01 07:46:59 -04:00
Hans Mackowiak
99c10761d1 canEquip checks for SpellAbility 2022-05-01 13:29:58 +02:00
Agetian
71464684ff Merge pull request #184 from tool4ever/hideRandom
Random patch for Hideaway and some cards
2022-05-01 11:54:04 +03:00
tool4EvEr
23da591ff2 Fix scripts 2022-05-01 10:39:22 +02:00
tool4EvEr
e0643ac0ec Hideaway RestRandomOrder 2022-05-01 10:38:56 +02:00
Anthony Calosa
8bfbbe4008 Merge pull request #183 from Northmoc/fix2
More card tweaks
2022-05-01 13:14:56 +08:00
Anthony Calosa
9b714c1e12 Update DeckGeneratorBase.java
fix deck gen not getting duals
2022-05-01 13:04:39 +08:00
Northmoc
34e36498e7 CounterEnumType Stash counters 2022-04-30 22:56:52 -04:00
Northmoc
500548fd24 drowsing_tyrannodon.txt with IsPresent 2022-04-30 22:56:30 -04:00
Northmoc
ba2e3be845 mysterious_limousine.txt use ChangeZoneAll 2022-04-30 22:56:14 -04:00
Northmoc
b2ca13d1f9 soul_of_emancipation.txt (thanks Marvel) 2022-04-30 22:49:58 -04:00
Northmoc
8e75620cca glittering_stockpile.txt (thanks Marvel) 2022-04-30 22:45:33 -04:00
Northmoc
3ecee0c381 structural_assault.txt 2022-04-30 22:42:45 -04:00
Northmoc
6e733af98f backstreet_bruiser.txt 2022-04-30 22:16:18 -04:00
Anthony Calosa
655928d93d Merge pull request #181 from Northmoc/fix
Fix some Rhino stuff
2022-05-01 10:03:28 +08:00
Northmoc
4601e7a7ee SacrificeAllEffect expand getStackDesc 2022-04-30 21:58:10 -04:00
Northmoc
da53a114e7 hold_for_ransom.txt with SacrificeAll 2022-04-30 21:58:10 -04:00
Northmoc
7554d6e9cf rhox_pummeler.txt fix cost and power 2022-04-30 21:56:03 -04:00
Northmoc
117a294539 crashing_footfalls.txt add Colors 2022-04-30 21:55:15 -04:00
Anthony Calosa
fb1ca3461a Update crashing_footfalls.txt 2022-05-01 09:41:58 +08:00
Anthony Calosa
1d58dafa9a Merge pull request #180 from Card-Forge/kevlahnota-patch-revert
revert to prevent crash
2022-05-01 08:31:21 +08:00
Anthony Calosa
dcf820e18d Update sanctum_guardian.txt 2022-05-01 08:28:57 +08:00
Anthony Calosa
76cdd02f7e Update martyrs_cause.txt 2022-05-01 08:27:30 +08:00
Agetian
6bc82564c6 Merge pull request #172 from Northmoc/snc_29
SNC: 29 Apr
2022-04-30 16:38:28 +03:00
Northmoc
3004b0c6ac corpse_explosion.txt add AI 2022-04-30 08:57:04 -04:00
Northmoc
e972b6de47 rogues_gallery.txt +LockInText 2022-04-30 08:57:04 -04:00
Northmoc
1c214e733a structural_assault.txt untested 2022-04-30 08:56:03 -04:00
Northmoc
7afb67a7da hold_for_ransom.txt 2022-04-30 08:40:26 -04:00
Northmoc
ef1781d261 AbilityUtils getDefinedPlayers() support of "OriginalHost" stuff 2022-04-30 08:39:52 -04:00
Northmoc
ef6afbeba1 hold_for_ransom.txt 2022-04-30 08:27:55 -04:00
Agetian
d4d8dc2aac Merge pull request #174 from Northmoc/clean
all_suns_dawn.txt tidy up
2022-04-30 15:14:18 +03:00
Northmoc
e68b4050ed all_suns_dawn.txt add LockInText$ True 2022-04-30 08:11:52 -04:00
tool4ever
040a7e5d03 Merge pull request #177 from paulsnoops/card_fix
SNC card fixes
2022-04-30 10:14:42 +00:00
Agetian
6ddb650e49 Merge pull request #178 from tool4ever/aiattack
Improve AI attack requirements
2022-04-30 13:11:27 +03:00
tool4EvEr
b2f05b51c9 NPE fix 2022-04-30 12:05:59 +02:00
tool4EvEr
1e67365ca0 Improve AI attack requirements 2022-04-30 12:00:06 +02:00
paul_snoops
423c55a3e3 sparas_adjudicators 2022-04-30 10:14:29 +01:00
paul_snoops
81584e4dc9 SNC card fixes 2022-04-30 09:52:44 +01:00
Agetian
b1f405332f Merge pull request #171 from paulsnoops/snc_29_april
SNC - 29 April
2022-04-30 08:26:29 +03:00
Agetian
b6e5c74c1a Merge pull request #173 from Northmoc/costexile
CostExile > toString() improve
2022-04-30 08:25:15 +03:00
Agetian
aad6ffc897 Merge pull request #175 from tool4ever/unlessCost
willPayUnlessCost: teach AI to refuse if Uncounterable already prevents it
2022-04-29 20:52:52 +03:00
paul_snoops
e04085b859 fake_your_own_death fix 2022-04-29 17:40:22 +01:00
tool4EvEr
30dda88adb Clean up 2022-04-29 18:13:14 +02:00
tool4EvEr
52f1dac9c9 willPayUnlessCost: teach AI to refuse if Uncounterable prevents it 2022-04-29 18:09:49 +02:00
paul_snoops
0cca50c934 fake_your_own_death and sewer_crocodile 2022-04-29 16:37:50 +01:00
Northmoc
4877c24e8e restore import IntelliJ said was unneeded :( 2022-04-29 11:00:01 -04:00
Northmoc
a1dd01356c all_suns_dawn.txt tidy up 2022-04-29 10:56:03 -04:00
paul_snoops
c550c4f6c4 fixes 2022-04-29 15:54:15 +01:00
Northmoc
62ff002ffb CostExile > toString() improve 2022-04-29 10:50:27 -04:00
paul_snoops
31fe583ef9 sticky_fingers fix 2022-04-29 14:43:18 +01:00
Hans Mackowiak
8aa798d57d Rename brokers_ascendacy.txt to brokers_ascendancy.txt 2022-04-29 15:08:51 +02:00
paul_snoops
4fe2b9f397 sticky_fingers and fixes 2022-04-29 13:27:16 +01:00
Northmoc
6d9b59074f rogues_gallery.txt 2022-04-29 08:24:48 -04:00
Northmoc
74256f6b25 corpse_explosion.txt 2022-04-29 08:17:17 -04:00
paul_snoops
f54c52e142 WIP: SNC - 29 April 2022-04-29 12:48:46 +01:00
Anthony Calosa
12f6461906 Merge pull request #168 from kevlahnota/master
prevent Crash of FatPack generation
2022-04-29 08:05:44 +08:00
Anthony Calosa
05c8cf112a update check 2022-04-29 07:55:20 +08:00
Anthony Calosa
38027e2441 additional FatPack check 2022-04-29 07:48:42 +08:00
Anthony Calosa
a3172d3275 Merge pull request #166 from tool4ever/esix2
Fix Esix replacing too much from other effects
2022-04-29 05:41:58 +08:00
Anthony Calosa
35940cd409 Merge pull request #167 from kevlahnota/master
fix stackoverflow
2022-04-29 05:38:19 +08:00
Anthony Calosa
2cd6d7a047 fix stackoverflow 2022-04-29 05:33:53 +08:00
Anthony Calosa
6429c94fa9 fix stackoverflow 2022-04-29 05:31:20 +08:00
tool4EvEr
7d0f5a1944 Fix Esix replacing too much from other effects 2022-04-28 20:28:35 +02:00
Anthony Calosa
d118be7ee4 Merge pull request #74 from Northmoc/shieldscripts
SNC: Card scripts using new shield counters
2022-04-29 00:00:08 +08:00
Anthony Calosa
b3aa288687 Merge pull request #158 from Northmoc/sncDuskMangler
SNC: Dusk Mangler and support
2022-04-28 23:57:58 +08:00
Anthony Calosa
09aeae1558 Merge pull request #120 from tool4ever/encore
Refactor Encore & Myriad
2022-04-28 23:56:12 +08:00
Anthony Calosa
f2d6c19d1d Update CONTRIBUTORS.txt 2022-04-28 23:49:55 +08:00
tool4ever
b290ca03fd Merge pull request #161 from Northmoc/snc_27
SNC: 27 April
2022-04-28 14:21:56 +00:00
Northmoc
72afbe8b85 Merge pull request #163 from Northmoc/typo
Crew StackDesc remove random )
2022-04-28 10:16:47 -04:00
Northmoc
6a7f46a102 balan_wandering_knight.txt with IsPresent 2022-04-28 10:14:41 -04:00
Northmoc
c06c39ee6f celestial_regulator.txt 2022-04-28 10:14:41 -04:00
Northmoc
35f003f759 endless_detour.txt (thanks medusa) 2022-04-28 10:14:39 -04:00
Northmoc
92ea874fe4 even_the_score.txt (thanks Marvel) 2022-04-28 10:14:38 -04:00
Northmoc
b0aee6a5ca patch_up.txt 2022-04-28 10:14:38 -04:00
Northmoc
85fbede135 brass_knuckles.txt 2022-04-28 10:14:37 -04:00
Northmoc
392c37cfdf riveteers_ascendancy.txt 2022-04-28 10:14:37 -04:00
Northmoc
72ed9896f7 sleep_with_the_fishes.txt 2022-04-28 10:14:36 -04:00
Northmoc
0e98462096 reservoir_kraken.txt 2022-04-28 10:14:36 -04:00
Northmoc
8ec27032e6 shadow_of_mortality.txt 2022-04-28 10:14:35 -04:00
Northmoc
481e701387 cabaretti_ascendancy.txt 2022-04-28 10:14:34 -04:00
Northmoc
d6d3da2c60 hoard_hauler.txt 2022-04-28 10:14:33 -04:00
Northmoc
b53ed7ade5 freelance_muscle.txt 2022-04-28 10:14:33 -04:00
Northmoc
9275f53d26 syndicate_infiltrator.txt 2022-04-28 10:14:32 -04:00
Northmoc
b77dcaf3a8 call_in_a_professional.txt 2022-04-28 10:14:32 -04:00
Northmoc
d2e6281222 fatal_grudge.txt 2022-04-28 10:14:31 -04:00
Northmoc
648b051a3b sanguine_spy.txt 2022-04-28 10:14:30 -04:00
Northmoc
ce28f04bc6 Card.java remove unneeded () 2022-04-28 10:06:59 -04:00
Northmoc
1ce726b8ef GameActionUtil streamline more 2022-04-28 10:06:38 -04:00
Northmoc
7e61af3dca dusk_mangler.txt 2022-04-28 10:00:05 -04:00
Northmoc
b6f15cf1d7 GameActionUtil > getAdditionalCostSpell() "AlternativeAdditionalCost" refactor to support more than two possible costs 2022-04-28 10:00:03 -04:00
Northmoc
86d1f54830 Cost > IsOnlyManaCost() clarify comment 2022-04-28 10:00:02 -04:00
Northmoc
f859bd951a Card > keywordsToText "AlternativeAdditionalCost" refactor to support more than two possible costs 2022-04-28 10:00:01 -04:00
Chris H
8aa7f958de Merge pull request #164 from tool4ever/brilliant
Brilliant Ultimatum without RepeatEach
2022-04-28 09:04:12 -04:00
tool4ever
f21b202237 Merge pull request #162 from Northmoc/sncZiatorasEnvoy
SNC: Ziatora's Envoy and PlayEffect Support
2022-04-28 12:29:10 +00:00
Northmoc
aa0fd6799c ziatoras_envoy.txt streamline 2022-04-28 08:22:07 -04:00
Northmoc
3d3e8d3a0b Crew remove RemoveCardTypes$ 2022-04-28 07:41:28 -04:00
Northmoc
dc309f57bf Crew remove StackDescription$ 2022-04-28 07:38:42 -04:00
TRT
c426a6b270 Brilliant Ultimatum without RepeatEach 2022-04-28 09:39:00 +02:00
Northmoc
cac6321539 Crew StackDesc remove random ) 2022-04-28 00:21:09 -04:00
Northmoc
66a23715b9 old cards "ForgetTargetRemembered" -> "ForgetPlayed" 2022-04-28 00:09:56 -04:00
Northmoc
0e24e1cd63 PlayEffect: "ForgetTargetRemember" -> "ForgetPlayed", add this to land plays as well 2022-04-28 00:09:21 -04:00
Northmoc
a4f3d44ac7 ziatoras_envoy.txt 2022-04-28 00:08:20 -04:00
Northmoc
68e54eec31 Merge pull request #159 from TheBlackMarvel/master
NCC Bennie Bracks, Zoologist
2022-04-27 23:04:23 -04:00
Northmoc
47859a9119 Merge branch 'master' into shieldscripts 2022-04-27 16:36:31 -04:00
TheBlackMarvel
9ecc5f6f3c Update bennie_bracks_zoologist.txt 2022-04-27 21:36:12 +01:00
Northmoc
4ace4b89f6 Shield -> SHIELD 2022-04-27 15:59:06 -04:00
TheBlackMarvel
9af60bcccf Merge branch 'Card-Forge:master' into master 2022-04-27 20:02:35 +01:00
Agetian
6bc28b894f Merge pull request #148 from Northmoc/sncSchemingFence
SNC: Scheming Fence and support
2022-04-27 20:54:35 +03:00
Northmoc
30f2df407a scheming_fence.txt add static trigger 2022-04-27 11:58:13 -04:00
Northmoc
f99aae23f0 Merge pull request #154 from Agetian/shadow-stinger
Fix Shadow Stinger tap cost restriction.
2022-04-27 10:26:56 -04:00
Northmoc
c0ed6f9f4e Merge pull request #131 from TheBlackMarvel/TheBlackMarvel-patch-3
NCC Resourceful Defense
2022-04-27 10:21:11 -04:00
Northmoc
aaa35aefb6 streamline if clause 2022-04-27 10:19:02 -04:00
Agetian
f902057c2f Merge pull request #153 from Northmoc/snc26
park_heights_pegasus.txt
2022-04-27 15:55:07 +03:00
Northmoc
4a8b4c6e32 park_heights_pegasus.txt fix Oracle 2022-04-27 08:50:46 -04:00
TheBlackMarvel
9b165377ce Merge pull request #4 from TheBlackMarvel/TheBlackMarvel-patch-6
NCC Bennie Bracks, Zoologist
2022-04-27 13:14:10 +01:00
TheBlackMarvel
65d6aed6fa Add files via upload 2022-04-27 13:09:14 +01:00
TheBlackMarvel
166903b156 Merge pull request #2 from TheBlackMarvel/TheBlackMarvel-patch-3
NCC Bennie Bracks, Zoologist
2022-04-27 11:50:52 +01:00
TRT
ee3f3b1844 Clean up 2022-04-27 12:20:59 +02:00
TRT
82c54290ff ReplaceToken: don't merge amounts 2022-04-27 10:47:06 +02:00
TheBlackMarvel
a6f3fadc2c Update resourceful_defense.txt 2022-04-27 08:37:28 +01:00
Agetian
62dfd23d75 Merge pull request #156 from Agetian/master
Added puzzle PS_NEO5.
2022-04-27 09:37:43 +03:00
Michael Kamensky
9e5f2a8577 - Added puzzle PS_NEO5. 2022-04-27 08:16:17 +03:00
Agetian
5d2f5286c3 Merge pull request #150 from Card-Forge/shieldCounterEffect
Card: add Shield counter Replacement Effects
2022-04-27 07:56:07 +03:00
Michael Kamensky
cc78a8623d - Fix Shadow Stinger tap cost restriction. 2022-04-27 07:44:53 +03:00
Agetian
31f5621fee Merge pull request #152 from Northmoc/sncJinnieFay
SNC: Jinnie Fay, Jetmir's Second and support
2022-04-27 06:42:29 +03:00
Northmoc
905c6a1dc2 park_heights_pegasus.txt 2022-04-26 21:25:32 -04:00
Northmoc
5813942580 ReplaceTokenEffect allow looking back for RootAbility 2022-04-26 21:15:23 -04:00
Northmoc
61bad0c6c0 jinnie_fay_jetmirs_second.txt and tokens 2022-04-26 21:14:14 -04:00
Northmoc
22167df44a scheming_fence.txt "GainsLoyaltyAbilities" -> "GainsValidAbilities" 2022-04-26 17:54:40 -04:00
Northmoc
06ac9114fc old cards "GainsLoyaltyAbilities" -> "GainsValidAbilities" 2022-04-26 17:54:11 -04:00
Northmoc
818afe5058 StaticAbilityContinuous: "GainsLoyaltyAbilities" -> "GainsValidAbilities" 2022-04-26 17:53:50 -04:00
Paul Hammerton
1bb8dcd32e Merge pull request #151 from paulsnoops/various_fixes
Update SNC draft ranking and various edition/format fixes
2022-04-26 22:29:59 +01:00
paul_snoops
4eb64b919d Update SNC draft ranking and various edition/format fixes 2022-04-26 22:26:07 +01:00
Hans Mackowiak
dbecd2dabd Card: add shield counter replacement Effects, but kinda hidden 2022-04-26 21:20:33 +02:00
tool4EvEr
6afc18ff5f Encore: switch to effect 2022-04-26 19:18:53 +02:00
Agetian
379869c817 Merge pull request #149 from Agetian/master
Added SNC/NCC achievements by Marek14.
2022-04-26 18:57:37 +03:00
Michael Kamensky
5a46e95699 - Added SNC/NCC achievements by Marek14. 2022-04-26 18:48:55 +03:00
Northmoc
ee071ed703 scheming_fence.txt AI and Desc 2022-04-26 11:35:22 -04:00
tool4EvEr
451fdf47d0 Fix imports 2022-04-26 17:30:04 +02:00
tool4EvEr
9249ac7854 Clean up 2022-04-26 17:23:51 +02:00
TheBlackMarvel
34ccb34b1e Update resourceful_defense.txt 2022-04-26 15:58:13 +01:00
Northmoc
970d88d2f1 ComputerUtilMana support "ActivateIgnoreColor" 2022-04-26 10:56:30 -04:00
Northmoc
b4b607bf49 HumanPlaySpellAbility support "ActivateIgnoreColor" 2022-04-26 10:56:08 -04:00
Northmoc
67158c56b4 StaticAbilityContinuous support "GainsAbilitiesActivateIgnoreColor" 2022-04-26 10:55:27 -04:00
Northmoc
9dd33cadfc scheming_fence.txt 2022-04-26 10:54:50 -04:00
Agetian
1e901fb632 Merge pull request #141 from Northmoc/snc_25
SNC: 25 April
2022-04-26 15:53:57 +03:00
Northmoc
37648b46db Merge pull request #138 from Northmoc/snc_ab_ql
Arcane Bombardment - quality of life
2022-04-26 08:34:19 -04:00
Northmoc
114e2f80ce unlicensed_hearse.txt fix 2022-04-26 08:25:47 -04:00
Northmoc
ab3e15f5d0 rocco_cabaretti_caterer.txt wasCastByYou 2022-04-26 08:25:04 -04:00
tool4EvEr
b3cc66422c Remove unneeded 2022-04-26 12:53:41 +02:00
tool4EvEr
65ec73c803 Rebase Encore 2022-04-26 12:39:14 +02:00
tool4ever
1d6757e4c9 Merge branch 'Card-Forge:master' into encore 2022-04-26 10:21:51 +00:00
tool4ever
be4fa07d70 Merge pull request #127 from tool4ever/controllerduration
Improve DelayedTrigger for effects with "during its controller's next turn"
2022-04-26 10:03:31 +00:00
tool4EvEr
771d9c5ade Fix effects 2022-04-26 12:03:49 +02:00
tool4EvEr
95cec4e49b Duration fix 2022-04-26 11:06:49 +02:00
tool4EvEr
a12041ee8b Fix unplayable AI info not displaying card 2022-04-26 11:06:48 +02:00
tool4EvEr
6c0b1c8ba8 Fix another crash (Lukka, Wayward Bonder) 2022-04-26 11:06:47 +02:00
tool4EvEr
1adc9a9129 Improve DelayedTrigger for effects "during its controller's next turn" 2022-04-26 11:06:46 +02:00
tool4EvEr
7512986748 Fix crash with transformed PW 2022-04-26 11:06:45 +02:00
tool4EvEr
3faf43c65a Fix AI error 2022-04-26 11:05:00 +02:00
tool4EvEr
cf22f5c55c Daghatar without Pump 2022-04-26 11:04:45 +02:00
Agetian
4b3de7d9d8 Merge pull request #146 from tool4ever/leech
Cleanup Leech Bonder
2022-04-26 12:00:02 +03:00
Paul Hammerton
37dda460a8 Merge pull request #147 from paulsnoops/explorer_net_decks
Support for Explorer Net Decks
2022-04-26 09:55:09 +01:00
tool4EvEr
8cdb379489 Improve TgtPrompt 2022-04-26 10:52:12 +02:00
paul_snoops
1517b392ac Support for Explorer Net Decks 2022-04-26 09:49:33 +01:00
TheBlackMarvel
dde867b19d Update resourceful_defense.txt 2022-04-26 09:29:25 +01:00
TheBlackMarvel
f17f7ec8d1 Update resourceful_defense.txt 2022-04-26 09:25:09 +01:00
tool4EvEr
c449d55327 Cleanup Leech Bonder 2022-04-26 09:20:45 +02:00
TheBlackMarvel
16762d9f71 Update resourceful_defense.txt 2022-04-26 08:19:46 +01:00
tool4ever
7babc8709d Merge pull request #140 from Northmoc/tweaks
Old card tweaks
2022-04-26 07:16:59 +00:00
tool4ever
9d23620486 Merge pull request #145 from tool4ever/fixattack
Fix StaticAbilityMustAttack
2022-04-26 06:41:08 +00:00
tool4EvEr
e54ef18f00 Fix StaticAbilityMustAttack 2022-04-26 08:41:15 +02:00
Northmoc
42a4d9caba unlicensed_hearse.txt (thanks medusa) 2022-04-25 21:57:10 -04:00
Northmoc
b4ab85b7f7 rocco_cabaretti_caterer.txt 2022-04-25 21:56:51 -04:00
Northmoc
0ca0ee7d1f obscura_ascendancy.txt and token 2022-04-25 21:56:51 -04:00
Northmoc
68d69640a7 alliance_of_arms.txt remove unused SVar 2022-04-25 21:54:10 -04:00
Northmoc
94ea6c9a11 tidal_influence.txt 2022-04-25 21:53:48 -04:00
tool4ever
d8ecce8760 Merge branch 'master' into encore 2022-04-25 20:45:52 +00:00
Northmoc
6b6636deb3 PlayerControllerHuman: support "OrderDuplicates" on sa 2022-04-25 11:23:29 -04:00
Northmoc
b76061f6d8 arcane_bombardment.txt add "OrderDuplicates" to Trigger 2022-04-25 11:22:59 -04:00
Northmoc
7eb8a437b5 HumanPlay addExiledCard for Delve 2022-04-25 11:22:14 -04:00
Northmoc
05df77cdbe GameState addExiledCard for Exiled with X 2022-04-25 11:21:54 -04:00
Northmoc
8d42c07608 add Exiled list to Card Detail 2022-04-25 11:20:20 -04:00
Northmoc
df67f8c2c6 CardView add getExiledCards() 2022-04-25 11:19:51 -04:00
Northmoc
b895e283a8 include addExiledCard command in Costs that exile cards 2022-04-25 11:19:14 -04:00
Northmoc
fa3f7715a3 Card.java: add exiledCards CardCollection 2022-04-25 11:13:19 -04:00
Northmoc
69377622cc include addExiledCard command in Effects that exile cards 2022-04-25 11:12:16 -04:00
Northmoc
6f7dc38f2a TrackableProperty.java add ExiledCards 2022-04-25 11:10:56 -04:00
TheBlackMarvel
7a56870184 Update resourceful_defense.txt 2022-04-25 08:24:23 +01:00
Northmoc
cec02f3579 titan_of_industry.txt 2022-04-22 19:17:58 -04:00
Northmoc
b925effd22 rigo_streetwise_mentor.txt 2022-04-22 19:17:58 -04:00
Northmoc
59dcc44ea6 undercover_operative.txt 2022-04-22 19:17:57 -04:00
Northmoc
03a231ec54 easy shield counter cards 2022-04-22 19:17:57 -04:00
Northmoc
9d695615c4 disciplined_duelist.txt 2022-04-22 19:17:56 -04:00
Northmoc
85ac95caf3 sanctuary_warden.txt (thanks Marvel) 2022-04-22 19:17:55 -04:00
Northmoc
c96f145246 falco_spara_pactweaver.txt 2022-04-22 19:17:55 -04:00
TheBlackMarvel
9036d7ae8a Add files via upload 2022-04-22 14:51:45 +01:00
TRT
a4504d5d38 Refine comment 2022-02-01 10:50:52 +01:00
TRT
87556f8e9e CloneStates: skip set traits when replacing 2022-02-01 10:50:51 +01:00
TRT
eaaa513096 Refactor Myriad 2022-02-01 10:50:49 +01:00
TRT
a2e64e2abd ReplaceToken: don't merge amounts with ForEach 2022-02-01 10:50:47 +01:00
tool4EvEr
4fd4fa37b3 Fix replaced tokens not gaining additional traits 2022-02-01 10:50:45 +01:00
tool4EvEr
052c82545f Fix ReplaceToken 2022-02-01 10:50:43 +01:00
tool4EvEr
6f9de43e51 Clean up 2022-02-01 10:50:41 +01:00
tool4EvEr
5d9f17f71c Refactor Encore & Myriad 2022-02-01 10:50:38 +01:00
12397 changed files with 288200 additions and 56649 deletions

41
.github/workflows/maven-publish.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Publish Forge
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
deployments: write
packages: write
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: 'maven'
server-id: cardforge-repo
server-username: ${{ secrets.FTP_USERNAME }}
server-password: ${{ secrets.FTP_PASSWORD }}
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Install virtual framebuffer (if not available) to allow running GUI on a headless server
run: command -v Xvfb >/dev/null 2>&1 || { sudo apt update && sudo apt install -y xvfb; }
- name: Configure Git User
run: |
git config user.email "actions@github.com"
git config user.name "GitHub Actions"
- name: Build/Install/Publish to GitHub Packages Apache Maven
run: |
export DISPLAY=":1"
Xvfb :1 -screen 0 800x600x8 &
mvn -U -B clean -P windows-linux install release:clean release:prepare release:perform -T 1C -Dcardforge-repo.username=${{ secrets.FTP_USERNAME }} -Dcardforge-repo.password=${{ secrets.FTP_PASSWORD }}
env:
GITHUB_TOKEN: ${{ github.token }}

33
.github/workflows/stale.yml vendored Normal file
View File

@@ -0,0 +1,33 @@
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Mark stale issues and pull requests
on:
schedule:
- cron: '21 9 * * *'
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: "This issue has not been updated in a while and has now been marked as stale. Stale messages will be auto closed."
stale-pr-message: 'This PR has not been updated in a while nad has been marked on stale. Stale PRs will be auto closed'
close-issue-message: 'This issue was closed because it has been stalled for 5 days with no activity.'
stale-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'
exempt-pr-labels: 'awaiting-approval,work-in-progress'
days-before-issue-stale: 30
days-before-pr-stale: 45
days-before-issue-close: 5
days-before-pr-close: 10

View File

@@ -0,0 +1,48 @@
name: Maven test for settings
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
deployments: write
packages: write
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: 'maven'
server-id: cardforge-repo
server-username: ${{ secrets.FTP_USERNAME }}
server-password: ${{ secrets.FTP_PASSWORD }}
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Check settings after java setup
run: |
cat ${{ github.workspace }}/settings.xml
- name: maven-settings-xml-action
uses: whelk-io/maven-settings-xml-action@v20
with:
servers: '[{ "id": "cardforge-repo", "username": "${{ secrets.FTP_USERNAME }}", "password": "Fake_password" }]'
- name: Check settings after xml action
run: |
cat ~/.m2/settings.xml
- name: Check settings after xml action
run: |
cat ${{ github.workspace }}/.mvn/local-settings.xml
- name: Where are maven settings
run: |
mvn -X clean -Dcardforge-repo.username=${{ secrets.FTP_USERNAME }} -Dcardforge-repo.password=${{ secrets.FTP_PASSWORD }} | grep "settings"

4
.gitignore vendored
View File

@@ -36,6 +36,9 @@ gen
# Ignore macOS Spotlight rubbish
.DS_Store
# ignore vim swapfiles
*.swp
# TODO: specify what these ignores are for (releasing?)
forge.profile.properties
@@ -78,3 +81,4 @@ forge-gui/tools/AllCards.json
forge-gui/tools/EditionTrackingResults
forge-gui/tools/PerSetTrackingResults
*.tiled-session

View File

@@ -12,4 +12,12 @@
<url>http://4thline.org/m2</url>
</mirror>
</mirrors>
<servers>
<server>
<id>cardforge-repo</id>
<username>${cardforge-repo.username}</username>
<password>${cardforge-repo.password}</password>
</server>
</servers>
</settings>

View File

@@ -1 +1,2 @@
--settings ./.mvn/local-settings.xml
--settings
./.mvn/local-settings.xml

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.50-SNAPSHOT</version>
<version>1.6.56</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -11,13 +11,17 @@
<packaging>jar</packaging>
<name>Forge Adventure</name>
<repositories>
<repository>
<id>gdx-nightlies</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<build>
<sourceDirectory>src</sourceDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>${project.basedir}</directory>
@@ -26,6 +30,8 @@
<include>**/*.frag</include>
<include>**/title_bg_lq.png</include>
<include>**/transition.png</include>
<include>**/adv_bg_texture.jpg</include>
<include>**/adv_bg_splash.png</include>
<include>**/bg_splash.png</include>
<include>**/bg_texture.jpg</include>
<include>**/font1.ttf</include>
@@ -54,11 +60,11 @@
</goals>
<configuration>
<headerType>gui</headerType>
<outfile>${project.build.directory}/forge-adventure-java8.exe</outfile>
<outfile>${project.build.directory}/forge-adventure-editor-java8.exe</outfile>
<jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
<dontWrapJar>true</dontWrapJar>
<errTitle>forge</errTitle>
<icon>src/main/config/forge-adventure.ico</icon>
<icon>src/main/config/forge-adventure-editor.ico</icon>
<classPath>
<mainClass>forge.adventure.Main</mainClass>
<addDependencies>false</addDependencies>
@@ -86,9 +92,9 @@
<txtProductVersion>
1.0.0.0
</txtProductVersion>
<productName>forge-adventure</productName>
<internalName>forge-adventure</internalName>
<originalFilename>forge-adventure-java8.exe</originalFilename>
<productName>forge-adventure-editor</productName>
<internalName>forge-adventure-editor</internalName>
<originalFilename>forge-adventure-editor-java8.exe</originalFilename>
</versionInfo>
</configuration>
</execution>
@@ -101,12 +107,12 @@
</goals>
<configuration>
<headerType>gui</headerType>
<outfile>${project.build.directory}/forge-adventure.exe</outfile>
<outfile>${project.build.directory}/forge-adventure-editor.exe</outfile>
<jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
<dontWrapJar>true</dontWrapJar>
<errTitle>forge</errTitle>
<downloadUrl>https://www.oracle.com/java/technologies/downloads/</downloadUrl>
<icon>src/main/config/forge-adventure.ico</icon>
<icon>src/main/config/forge-adventure-editor.ico</icon>
<classPath>
<mainClass>forge.adventure.Main</mainClass>
<addDependencies>false</addDependencies>
@@ -119,10 +125,26 @@
<opts>
<opt>-Dfile.encoding=UTF-8</opt>
<opt>--add-opens java.base/java.lang=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.math=ALL-UNNAMED</opt>
<opt>--add-opens java.base/jdk.internal.misc=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.nio=ALL-UNNAMED</opt>
<opt>--add-opens=java.base/sun.nio.ch=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.util=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.lang.reflect=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.text=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/java.awt=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/java.awt.font=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/java.awt.image=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/java.awt.color=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/sun.awt.image=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/javax.swing=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/javax.swing.border=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/javax.swing.event=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/sun.swing=ALL-UNNAMED</opt>
<opt>--add-opens java.desktop/java.beans=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.util.concurrent=ALL-UNNAMED</opt>
<opt>--add-opens java.base/java.net=ALL-UNNAMED</opt>
<opt>-Dio.netty.tryReflectionSetAccessible=true</opt>
</opts>
</jre>
<versionInfo>
@@ -140,9 +162,9 @@
<txtProductVersion>
1.0.0.0
</txtProductVersion>
<productName>forge-adventure</productName>
<internalName>forge-adventure</internalName>
<originalFilename>forge-adventure.exe</originalFilename>
<productName>forge-adventure-editor</productName>
<internalName>forge-adventure-editor</internalName>
<originalFilename>forge-adventure-editor.exe</originalFilename>
</versionInfo>
</configuration>
</execution>
@@ -164,7 +186,7 @@
</executions>
<configuration>
<basedir>${basedir}/${configSourceDirectory}</basedir>
<filesToInclude>forge-adventure.sh, forge-adventure.command, forge-adventure.cmd</filesToInclude>
<filesToInclude>forge-adventure-editor.sh, forge-adventure-editor-mac.sh, forge-adventure-editor.command, forge-adventure-editor.cmd</filesToInclude>
<outputBasedir>${project.build.directory}</outputBasedir>
<outputDir>.</outputDir>
<regex>false</regex>
@@ -206,38 +228,39 @@
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.github.jetopto1</groupId>
<artifactId>cling</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.badlogicgames.gdx</groupId>
<artifactId>gdx</artifactId>
<version>1.10.0</version>
<version>1.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.badlogicgames.gdx</groupId>
<artifactId>gdx-platform</artifactId>
<version>1.10.0</version>
<version>1.11.0</version>
<classifier>natives-desktop</classifier>
</dependency>
<dependency>
<groupId>com.badlogicgames.gdx</groupId>
<artifactId>gdx-freetype</artifactId>
<version>1.10.0</version>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>com.badlogicgames.gdx</groupId>
<artifactId>gdx-backend-lwjgl3</artifactId>
<version>1.10.0</version>
<artifactId>gdx-backend-lwjgl</artifactId>
<version>1.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.badlogicgames.gdx</groupId>
<artifactId>gdx-tools</artifactId>
<version>1.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.badlogicgames.gdx</groupId>
<artifactId>gdx-freetype-platform</artifactId>
<version>1.10.0</version>
<version>1.11.0</version>
<classifier>natives-desktop</classifier>
</dependency>
<dependency>
@@ -245,16 +268,6 @@
<artifactId>forge-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>forge</groupId>
<artifactId>forge-game</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>forge</groupId>
<artifactId>forge-ai</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>forge</groupId>
<artifactId>forge-gui</artifactId>
@@ -272,10 +285,9 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>forge</groupId>
<artifactId>forge-gui-mobile</artifactId>
<version>1.6.50-SNAPSHOT</version>
<scope>compile</scope>
<groupId>com.badlogicgames.gdx-controllers</groupId>
<artifactId>gdx-controllers-desktop</artifactId>
<version>2.2.3-SNAPSHOT</version>
</dependency>
</dependencies>
@@ -284,4 +296,4 @@
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
</project>

View File

@@ -6,10 +6,11 @@ varying vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
uniform float u_grayness;
uniform float u_bias;
void main() {
vec4 c = v_color * texture2D(u_texture, v_texCoords);
float grey = dot( c.rgb, vec3(0.22, 0.707, 0.071) );
vec3 blendedColor = mix(c.rgb, vec3(grey), u_grayness);
gl_FragColor = vec4(blendedColor.rgb, c.a);
gl_FragColor = mix(vec4(0.0, 0.0, 0.0, 1.0), vec4(blendedColor.rgb, c.a), u_bias);
}

View File

@@ -11,6 +11,7 @@ uniform sampler2D u_texture;
uniform float u_amount;
uniform float u_speed;
uniform float u_time;
uniform float u_bias;
void main () {
vec2 uv = v_texCoords;
@@ -19,5 +20,7 @@ void main () {
uv.x += (sin((uv.y + (u_time * 0.07 * u_speed)) * 15.0) * 0.0029 * u_amount) + (sin((uv.y + (u_time * 0.1 * u_speed)) * 15.0) * 0.002 * u_amount);
gl_FragColor = texture2D(u_texture, uv);
vec4 texColor = texture2D(u_texture, uv);
gl_FragColor = mix(vec4(0.0, 0.0, 0.0, 1.0), texColor, u_bias);
}

View File

@@ -0,0 +1,3 @@
#!/bin/sh
cd $(dirname "${0}")
java -XstartOnFirstThread -Xmx4096m -Dfile.encoding=UTF-8 -jar $project.build.finalName$

View File

@@ -0,0 +1,25 @@
@echo off
pushd %~dp0
java -version 1>nul 2>nul || (
echo no java installed
popd
exit /b 2
)
for /f tokens^=2^ delims^=.-_^+^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j"
if %jver% GEQ 17 (
java --add-opens java.desktop/java.beans=ALL-UNNAMED --add-opens java.desktop/javax.swing.border=ALL-UNNAMED --add-opens java.desktop/javax.swing.event=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/java.awt.image=ALL-UNNAMED --add-opens java.desktop/java.awt.color=ALL-UNNAMED --add-opens java.desktop/sun.awt.image=ALL-UNNAMED --add-opens java.desktop/javax.swing=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED -Dio.netty.tryReflectionSetAccessible=true -Xmx4096m -Dfile.encoding=UTF-8 -jar $project.build.finalName$
popd
exit /b 0
)
if %jver% GEQ 11 (
java --illegal-access=permit -Xmx4096m -Dfile.encoding=UTF-8 -jar $project.build.finalName$
popd
exit /b 0
)
java -Xmx4096m -Dfile.encoding=UTF-8 -jar $project.build.finalName$
popd

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@@ -1,25 +0,0 @@
@echo off
pushd %~dp0
java -version 1>nul 2>nul || (
echo no java installed
popd
exit /b 2
)
for /f tokens^=2^ delims^=.-_^+^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j"
if %jver% GEQ 17 (
java --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED -Xmx4096m -Dfile.encoding=UTF-8 -jar $project.build.finalName$
popd
exit /b 0
)
if %jver% GEQ 11 (
java --illegal-access=permit -Xmx4096m -Dfile.encoding=UTF-8 -jar $project.build.finalName$
popd
exit /b 0
)
java -Xmx4096m -Dfile.encoding=UTF-8 -jar $project.build.finalName$
popd

View File

@@ -1,29 +1,10 @@
package forge.adventure;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Clipboard;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3WindowListener;
import com.badlogic.gdx.graphics.glutils.HdpiMode;
import forge.Forge;
import forge.GuiMobile;
import forge.adventure.editor.EditorMainWindow;
import forge.adventure.util.Config;
import forge.interfaces.IDeviceAdapter;
import forge.util.BuildInfo;
import forge.util.FileUtil;
import forge.util.OperatingSystem;
import forge.util.RestartUtil;
import io.sentry.Sentry;
import forge.gui.GuiBase;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
@@ -33,158 +14,9 @@ import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
Sentry.init(options -> {
options.setEnableExternalConfiguration(true);
options.setRelease(BuildInfo.getVersionString());
options.setEnvironment(System.getProperty("os.name"));
options.setTag("Java Version", System.getProperty("java.version"));
}, true);
// HACK - temporary solution to "Comparison method violates it's general contract!" crash
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
//Turn off the Java 2D system's use of Direct3D to improve rendering speed (particularly when Full Screen)
System.setProperty("sun.java2d.d3d", "false");
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
config.setResizable(false);
ApplicationListener start = Forge.getApp(new Lwjgl3Clipboard(), new DesktopAdapter(""), Files.exists(Paths.get("./res"))?"./":"../forge-gui/", true, false, 0, true, 0, "", "");
if (Config.instance().getSettingData().fullScreen) {
config.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode());
config.setAutoIconify(true);
config.setHdpiMode(HdpiMode.Logical);
} else {
config.setWindowedMode(Config.instance().getSettingData().width, Config.instance().getSettingData().height);
}
config.setTitle("Forge Adventure Mobile");
config.setWindowIcon(Config.instance().getFilePath("forge-adventure.png"));
config.setWindowListener(new Lwjgl3WindowListener() {
@Override
public void created(Lwjgl3Window lwjgl3Window) {
}
@Override
public void iconified(boolean b) {
}
@Override
public void maximized(boolean b) {
}
@Override
public void focusLost() {
}
@Override
public void focusGained() {
}
@Override
public boolean closeRequested() {
//use the device adpater to exit properly
if (Forge.safeToClose)
Forge.exit(true);
return false;
}
@Override
public void filesDropped(String[] strings) {
}
@Override
public void refreshRequested() {
}
});
new Lwjgl3Application(start, config);
}
private static class DesktopAdapter implements IDeviceAdapter {
private final String switchOrientationFile;
private DesktopAdapter(String switchOrientationFile0) {
switchOrientationFile = switchOrientationFile0;
}
//just assume desktop always connected to wifi
@Override
public boolean isConnectedToInternet() {
return true;
}
@Override
public boolean isConnectedToWifi() {
return true;
}
@Override
public String getDownloadsDir() {
return System.getProperty("user.home") + "/Downloads/";
}
@Override
public boolean openFile(String filename) {
try {
Desktop.getDesktop().open(new File(filename));
return true;
}
catch (IOException e) {
e.printStackTrace();
}
return false;
}
@Override
public void restart() {
if (RestartUtil.prepareForRestart()) {
Gdx.app.exit();
System.exit(0);
}
}
@Override
public void exit() {
Gdx.app.exit(); //can just use Gdx.app.exit for desktop
System.exit(0);
}
@Override
public boolean isTablet() {
return true; //treat desktop the same as a tablet
}
@Override
public void setLandscapeMode(boolean landscapeMode) {
//create file to indicate that landscape mode should be used
if (landscapeMode) {
FileUtil.writeFile(switchOrientationFile, "1");
}
else {
FileUtil.deleteFile(switchOrientationFile);
}
}
@Override
public void preventSystemSleep(boolean preventSleep) {
OperatingSystem.preventSystemSleep(preventSleep);
}
@Override
public void convertToJPEG(InputStream input, OutputStream output) throws IOException {
BufferedImage image = ImageIO.read(input);
ImageIO.write(image, "jpg", output);
}
GuiBase.setInterface(new GuiMobile(Files.exists(Paths.get("./res"))?"./":"../forge-gui/"));
GuiBase.setDeviceInfo("", "", 0, 0);
Config.instance();
new EditorMainWindow();
}
}

View File

@@ -0,0 +1,156 @@
package forge.adventure.editor;
import forge.adventure.data.DialogData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class ActionEdit extends FormPanel {
DialogData.ActionData currentData;
JTextField issueQuest = new JTextField();
JTextField mapFlagName = new JTextField();
JTextField questFlagName = new JTextField();
JTextField advanceMapFlag = new JTextField();
JTextField advanceQuestFlag = new JTextField();
JTextField battleWithActorID = new JTextField();
JTextField deleteMapObject = new JTextField();
JTextField setColorIdentity = new JTextField();
JSpinner addReputation = new JSpinner(new SpinnerNumberModel(0, -1000, 1000, 1));
JSpinner addLife = new JSpinner(new SpinnerNumberModel(0, -1000, 1000, 1));
JTextField POIReference = new JTextField();
JTextField removeItem = new JTextField();
JSpinner mapFlagValue = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
JSpinner questFlagValue = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
private boolean updating=false;
public ActionEdit()
{
//todo: add info pane to explain primary usage
add("Issue Quest:",issueQuest);
add("Set Map Flag Name:",mapFlagName);
add("Map Flag value to set:",mapFlagValue);
add("Set Quest Flag name:",questFlagName);
add("Quest Flag value to set:",questFlagValue);
add("Advance Map Flag name:",advanceMapFlag);
add("Advance Quest Flag name:",advanceQuestFlag);
add("Battle with actor ID:",battleWithActorID);
add("Delete map object:",deleteMapObject);
add("Set color identity:",setColorIdentity);
add("Add Reputation:",addReputation);
add("Add Life:",addLife);
add("POI Reference:",POIReference);
add("Remove Item:",removeItem);
issueQuest.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
mapFlagName.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
mapFlagValue.getModel().addChangeListener(e -> ActionEdit.this.updateAction());
questFlagName.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
questFlagValue.getModel().addChangeListener(e -> ActionEdit.this.updateAction());
advanceMapFlag.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
advanceQuestFlag.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
battleWithActorID.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
deleteMapObject.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
setColorIdentity.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
addLife.getModel().addChangeListener(e -> ActionEdit.this.updateAction());
addReputation.getModel().addChangeListener(e -> ActionEdit.this.updateAction());
POIReference.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
removeItem.getDocument().addDocumentListener(new DocumentChangeListener(ActionEdit.this::updateAction));
}
private void updateAction() {
if(updating)
return;
if (currentData == null)
currentData = new DialogData.ActionData();
DialogData.ActionData.QuestFlag mapFlag = new DialogData.ActionData.QuestFlag();
mapFlag.key = mapFlagName.getText();
mapFlag.val = (int)mapFlagValue.getModel().getValue();
currentData.setMapFlag= mapFlag;
DialogData.ActionData.QuestFlag questFlag = new DialogData.ActionData.QuestFlag();
questFlag.key = questFlagName.getText();
questFlag.val = (int)questFlagValue.getModel().getValue();
currentData.setQuestFlag= questFlag;
currentData.issueQuest = issueQuest.getText(); //This is currently a boolean effect, eventually needs arguments
currentData.advanceMapFlag= advanceMapFlag.getText();
currentData.advanceQuestFlag= advanceQuestFlag.getText();
currentData.battleWithActorID= Integer.parseInt(battleWithActorID.getText());
currentData.deleteMapObject= Integer.parseInt(deleteMapObject.getText());
currentData.setColorIdentity= setColorIdentity.getText();
currentData.addLife= (int) addLife.getModel().getValue();
currentData.addMapReputation= (int)addReputation.getModel().getValue();
currentData.POIReference= POIReference.getText();
currentData.removeItem= removeItem.getText();
//These need a dedicated effect editor
// JTextField setEffect = new JTextField();
// JTextField giveBlessing = new JTextField();
// currentData.giveBlessing= giveBlessing.getText();
// currentData.setEffect= setEffect.getText();
//These are valid pre-existing fields, but should be handled through the dedicated rewards editor
// currentData.addGold =;
// currentData.addItem=;
// currentData.grantRewards =;
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
public void addChangeListener(ChangeListener l) {
listenerList.add(ChangeListener.class, l);
}
public void setCurrentAction(DialogData.ActionData data)
{
currentData=data;
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
mapFlagName.setText(currentData.setMapFlag==null?"":currentData.setMapFlag.key);
mapFlagValue.getModel().setValue(currentData.setMapFlag==null?0:currentData.setMapFlag.val);
questFlagName.setText(currentData.setQuestFlag==null?"":currentData.setQuestFlag.key);
questFlagValue.getModel().setValue(currentData.setQuestFlag==null?0:currentData.setQuestFlag.val);
issueQuest.setText(currentData.issueQuest);
advanceMapFlag.setText(currentData.advanceMapFlag);
advanceQuestFlag.setText(currentData.advanceQuestFlag);
battleWithActorID.setText("" + currentData.battleWithActorID);
deleteMapObject.setText("" + currentData.deleteMapObject);
setColorIdentity.setText(currentData.setColorIdentity);
addLife.getModel().setValue(currentData.addLife);
addReputation.getModel().setValue(currentData.addMapReputation);
POIReference.setText(currentData.POIReference);
removeItem.setText(currentData.removeItem);
updating=false;
}
}

View File

@@ -0,0 +1,141 @@
package forge.adventure.editor;
import forge.adventure.data.DialogData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionListener;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class ActionEditor extends JComponent{
DefaultListModel<DialogData.ActionData> model = new DefaultListModel<>();
JList<DialogData.ActionData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
ActionEdit edit=new ActionEdit();
boolean updating;
public class RewardDataRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof DialogData.ActionData))
return label;
DialogData.ActionData action=(DialogData.ActionData) value;
StringBuilder builder=new StringBuilder();
// if(action.type==null||action.type.isEmpty())
builder.append("Action");
// else
// builder.append(action.type);
label.setText(builder.toString());
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public ActionEditor()
{
list.setCellRenderer(new RewardDataRenderer());
list.addListSelectionListener(e -> ActionEditor.this.updateEdit());
addButton("add", e -> ActionEditor.this.addAction());
addButton("remove", e -> ActionEditor.this.remove());
addButton("copy", e -> ActionEditor.this.copy());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(list, BorderLayout.LINE_START);
add(toolBar, BorderLayout.PAGE_START);
add(edit,BorderLayout.CENTER);
edit.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
emitChanged();
}
});
}
protected void emitChanged() {
if (updating)
return;
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
DialogData.ActionData data=new DialogData.ActionData(model.get(selected));
model.add(model.size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrentAction(model.get(selected));
}
void addAction()
{
DialogData.ActionData data=new DialogData.ActionData();
model.add(model.size(),data);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
}
public void setAction(DialogData.ActionData[] actions) {
model.clear();
if(actions==null)
return;
for (int i=0;i<actions.length;i++) {
if (actions[i].grantRewards.length > 0){
continue; //handled in separate editor and joined in on save, will get duplicated if it appears here
}
model.add(i,actions[i]);
}
}
public DialogData.ActionData[] getAction() {
DialogData.ActionData[] action= new DialogData.ActionData[model.getSize()];
for(int i=0;i<model.getSize();i++)
{
action[i]=model.get(i);
}
return action;
}
public void clear(){
updating = true;
model.clear();
updating = false;
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
}

View File

@@ -0,0 +1,125 @@
package forge.adventure.editor;
import forge.adventure.data.BiomeData;
import javax.swing.*;
public class BiomeEdit extends FormPanel {
BiomeData currentData;
public JSpinner startPointX= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JSpinner startPointY= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JSpinner noiseWeight= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JSpinner distWeight= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JTextField name=new JTextField();
public FilePicker tilesetAtlas=new FilePicker(new String[]{"atlas"});
public JTextField tilesetName=new JTextField();
public JSpinner width= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JSpinner height= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JTextField color=new JTextField();
public JCheckBox collision=new JCheckBox();
public TextListEdit spriteNames =new TextListEdit();
public TextListEdit enemies =new TextListEdit();
public TextListEdit pointsOfInterest =new TextListEdit();
public TerrainsEditor terrain =new TerrainsEditor();
public StructureEditor structures =new StructureEditor();
private boolean updating=false;
public BiomeEdit()
{
FormPanel center=new FormPanel() { };
center.add("startPointX:",startPointX);
center.add("startPointY:",startPointY);
center.add("noiseWeight:",noiseWeight);
center.add("distWeight:",distWeight);
center.add("name:",name);
center.add("tilesetAtlas:",tilesetAtlas);
center.add("tilesetName:",tilesetName);
center.add("width:",width);
center.add("height:",height);
center.add("spriteNames:",spriteNames);
center.add("enemies:",enemies);
center.add("POITags:",pointsOfInterest);
center.add("color:",color);
center.add("collision:",collision);
center.add("terrain/structures:",new JLabel(""));
add(center);
add(terrain);
add(structures);
name.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
tilesetName.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
color.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
collision.addChangeListener(e -> BiomeEdit.this.updateTerrain());
spriteNames.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
enemies.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
terrain.addChangeListener(e -> BiomeEdit.this.updateTerrain());
startPointX.addChangeListener(e -> BiomeEdit.this.updateTerrain());
startPointY.addChangeListener(e -> BiomeEdit.this.updateTerrain());
noiseWeight.addChangeListener(e -> BiomeEdit.this.updateTerrain());
distWeight.addChangeListener(e -> BiomeEdit.this.updateTerrain());
tilesetAtlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
width.addChangeListener(e -> BiomeEdit.this.updateTerrain());
height.addChangeListener(e -> BiomeEdit.this.updateTerrain());
refresh();
}
protected void updateTerrain() {
if(currentData==null||updating)
return;
currentData.startPointX = (Float) startPointX.getValue();
currentData.startPointY = (Float) startPointY.getValue();
currentData.noiseWeight = (Float) noiseWeight.getValue();
currentData.distWeight = (Float)distWeight.getValue();
currentData.name = name.getText();
currentData.tilesetAtlas = tilesetAtlas.edit.getText();
currentData.tilesetName = tilesetName.getText();
currentData.terrain = terrain.getBiomeTerrainData();
currentData.structures = structures.getBiomeStructureData();
currentData.width = (Float) width.getValue();
currentData.height = (Float) height.getValue();
currentData.color = color.getText();
currentData.collision = collision.isSelected();
currentData.spriteNames = spriteNames.getList();
currentData.enemies = enemies.getList();
currentData.pointsOfInterest = pointsOfInterest.getList();
}
public void setCurrentBiome(BiomeData data)
{
currentData=data;
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
startPointX.setValue(currentData.startPointX);
startPointY.setValue(currentData.startPointY);
noiseWeight.setValue(currentData.noiseWeight);
distWeight.setValue(currentData.distWeight);
name.setText(currentData.name);
tilesetAtlas.edit.setText( currentData.tilesetAtlas);
tilesetName.setText(currentData.tilesetName);
terrain.setTerrains(currentData);
structures.setStructures(currentData);
width.setValue(currentData.width);
height.setValue(currentData.height);
color.setText(currentData.color);
spriteNames.setText(currentData.spriteNames);
enemies.setText(currentData.enemies);
collision.setSelected(currentData.collision);
pointsOfInterest.setText(currentData.pointsOfInterest);
updating=false;
}
}

View File

@@ -0,0 +1,171 @@
package forge.adventure.editor;
import forge.adventure.data.BiomeStructureData;
import forge.adventure.util.Config;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class BiomeStructureDataMappingEditor extends JComponent {
DefaultListModel<BiomeStructureData.BiomeStructureDataMapping> model = new DefaultListModel<>();
JList<BiomeStructureData.BiomeStructureDataMapping> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
BiomeStructureDataMappingEdit edit=new BiomeStructureDataMappingEdit();
private BiomeStructureData data;
public void setCurrent(BiomeStructureData data) {
this.data=data;
model.clear();
if(data==null||data.mappingInfo==null)
return;
for(int i=0;i<data.mappingInfo.length;i++)
model.addElement(data.mappingInfo[i]);
list.setSelectedIndex(0);
}
public BiomeStructureData.BiomeStructureDataMapping[] getCurrent()
{
BiomeStructureData.BiomeStructureDataMapping[] array=new BiomeStructureData.BiomeStructureDataMapping[model.size()];
for(int i=0;i<array.length;i++)
array[i]=model.get(i);
return array;
}
public class BiomeStructureDataMappingRenderer extends DefaultListCellRenderer {
private final BiomeStructureDataMappingEditor editor;
public BiomeStructureDataMappingRenderer(BiomeStructureDataMappingEditor biomeStructureDataMappingEditor) {
this.editor=biomeStructureDataMappingEditor;
}
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof BiomeStructureData.BiomeStructureDataMapping))
return label;
BiomeStructureData.BiomeStructureDataMapping data=(BiomeStructureData.BiomeStructureDataMapping) value;
// Get the renderer component from parent class
label.setText(data.name);
if(editor.data!=null)
{
SwingAtlas itemAtlas=new SwingAtlas(Config.instance().getFile(editor.data.structureAtlasPath));
if(itemAtlas.has(data.name))
label.setIcon(itemAtlas.get(data.name));
else
{
ImageIcon img=itemAtlas.getAny();
if(img!=null)
label.setIcon(img);
}
}
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public BiomeStructureDataMappingEditor()
{
list.setCellRenderer(new BiomeStructureDataMappingEditor.BiomeStructureDataMappingRenderer(this));
list.addListSelectionListener(e -> BiomeStructureDataMappingEditor.this.updateEdit());
addButton("add", e -> BiomeStructureDataMappingEditor.this.add());
addButton("remove", e -> BiomeStructureDataMappingEditor.this.remove());
addButton("copy", e -> BiomeStructureDataMappingEditor.this.copy());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(new JScrollPane(list), BorderLayout.WEST);
add(toolBar, BorderLayout.NORTH);
add(edit,BorderLayout.CENTER);
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
BiomeStructureData.BiomeStructureDataMapping data=new BiomeStructureData.BiomeStructureDataMapping(model.get(selected));
model.add(model.size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrent(model.get(selected));
}
void add()
{
BiomeStructureData.BiomeStructureDataMapping data=new BiomeStructureData.BiomeStructureDataMapping();
data.name="Structure "+model.getSize();
model.add(model.size(),data);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
}
private class BiomeStructureDataMappingEdit extends FormPanel{
BiomeStructureData.BiomeStructureDataMapping currentData;
public JTextField name=new JTextField();
public JTextField color=new JTextField();
public JCheckBox collision=new JCheckBox();
private boolean updating=false;
public BiomeStructureDataMappingEdit()
{
add("name:",name);
add("color:",color);
add("collision:",collision);
name.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureDataMappingEdit.this.update()));
color.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureDataMappingEdit.this.update()));
collision.addChangeListener(e -> BiomeStructureDataMappingEdit.this.update());
refresh();
}
private void update() {
if(currentData==null||updating)
return;
currentData.name = name.getText();
currentData.color = color.getText();
currentData.collision = collision.isSelected();
}
public void setCurrent(BiomeStructureData.BiomeStructureDataMapping data)
{
currentData=data;
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
name.setText(currentData.name);
color.setText(currentData.color);
collision.setSelected(currentData.collision);
updating=false;
}
}
}

View File

@@ -0,0 +1,136 @@
package forge.adventure.editor;
import forge.adventure.data.BiomeData;
import forge.adventure.data.BiomeStructureData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class BiomeStructureEdit extends FormPanel {
private boolean updating=false;
BiomeStructureData currentData;
BiomeData currentBiomeData;
public JTextField structureAtlasPath=new JTextField();
public FloatSpinner x= new FloatSpinner();
public FloatSpinner y= new FloatSpinner();
public FloatSpinner width= new FloatSpinner();
public FloatSpinner height= new FloatSpinner();
public JCheckBox randomPosition=new JCheckBox();
public IntSpinner N= new IntSpinner();
public JTextField sourcePath= new JTextField();
public JTextField maskPath= new JTextField();
public JCheckBox periodicInput= new JCheckBox();
public IntSpinner ground= new IntSpinner();
public IntSpinner symmetry= new IntSpinner();
public JCheckBox periodicOutput= new JCheckBox();
public BiomeStructureDataMappingEditor data=new BiomeStructureDataMappingEditor();
public BiomeStructureEdit()
{
FormPanel center=new FormPanel();
center.add("structureAtlasPath:",structureAtlasPath);
center.add("x:",x);
center.add("y:",y);
center.add("width:",width);
center.add("height:",height);
center.add("N:",N);
center.add("sourcePath:",sourcePath);
center.add("maskPath:",maskPath);
center.add("periodicInput:",periodicInput);
center.add("ground:",ground);
center.add("symmetry:",symmetry);
center.add("periodicOutput:",periodicOutput);
add(center);
add(data);
structureAtlasPath.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureEdit.this.updateStructure()));
x.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
y.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
width.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
height.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
randomPosition.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
N.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
sourcePath.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureEdit.this.updateStructure()));
maskPath.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureEdit.this.updateStructure()));
periodicInput.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
ground.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
symmetry.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
periodicOutput.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
data.setCurrent(null);
return;
}
updating=true;
structureAtlasPath.setText(currentData.structureAtlasPath);
x.setValue(currentData.x);
y.setValue(currentData.y);
width.setValue(currentData.width);
height.setValue(currentData.height);
randomPosition.setSelected(currentData.randomPosition);
N.setValue(currentData.N);
sourcePath.setText(currentData.sourcePath);
maskPath.setText(currentData.maskPath);
periodicInput.setSelected(currentData.periodicInput);
ground.setValue(currentData.ground);
symmetry.setValue(currentData.symmetry);
periodicOutput.setSelected(currentData.periodicOutput);
data.setCurrent(currentData);
updating=false;
}
public void updateStructure()
{
if(currentData==null||updating)
return;
currentData.structureAtlasPath=structureAtlasPath.getText();
currentData.x= x.floatValue();
currentData.y= y.floatValue();
currentData.width= width.floatValue();
currentData.height= height.floatValue();
currentData.randomPosition=randomPosition.isSelected();
currentData.mappingInfo= data.getCurrent();
currentData.N= N.intValue();
currentData.sourcePath= sourcePath.getText();
currentData.maskPath= maskPath.getText();
currentData.periodicInput= periodicInput.isSelected();
currentData.ground= ground.intValue();
currentData.symmetry= symmetry.intValue();
currentData.periodicOutput= periodicOutput.isSelected();
emitChanged();
}
public void setCurrentStructure(BiomeStructureData biomeTerrainData, BiomeData data) {
currentData =biomeTerrainData;
currentBiomeData=data;
refresh();
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
}

View File

@@ -0,0 +1,84 @@
package forge.adventure.editor;
import forge.adventure.data.BiomeData;
import forge.adventure.data.BiomeTerrainData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class BiomeTerrainEdit extends FormPanel {
SwingAtlasPreview preview=new SwingAtlasPreview(128);
private boolean updating=false;
BiomeTerrainData currentData;
BiomeData currentBiomeData;
public JTextField spriteName=new JTextField();
public JSpinner min= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JSpinner max= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JSpinner resolution= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public BiomeTerrainEdit()
{
FormPanel center=new FormPanel() { };
center.add("spriteName:",spriteName);
center.add("min:",min);
center.add("max:",max);
center.add("resolution:",resolution);
add(center,preview);
spriteName.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeTerrainEdit.this.updateTerrain()));
min.addChangeListener(e -> BiomeTerrainEdit.this.updateTerrain());
max.addChangeListener(e -> BiomeTerrainEdit.this.updateTerrain());
resolution.addChangeListener(e -> BiomeTerrainEdit.this.updateTerrain());
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
spriteName.setText(currentData.spriteName);
min.setValue(currentData.min);
max.setValue(currentData.max);
resolution.setValue(currentData.resolution);
if(currentBiomeData!=null&&currentData!= null)
preview.setSpritePath(currentBiomeData.tilesetAtlas,currentData.spriteName);
updating=false;
}
public void updateTerrain()
{
if(currentData==null||updating)
return;
currentData.spriteName=spriteName.getText();
currentData.min= (float) min.getValue();
currentData.max= (float) max.getValue();
currentData.resolution= (float) resolution.getValue();
preview.setSpritePath(currentBiomeData.tilesetAtlas,currentData.spriteName);
emitChanged();
}
public void setCurrentTerrain(BiomeTerrainData biomeTerrainData, BiomeData data) {
currentData =biomeTerrainData;
currentBiomeData=data;
refresh();
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
}

View File

@@ -0,0 +1,155 @@
package forge.adventure.editor;
import forge.adventure.data.DialogData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
public class DialogEdit extends FormPanel {
private boolean updating=false;
DialogData currentData;
public JTextField name=new JTextField(80);
public JTextField text=new JTextField(80);
public JTextField locname=new JTextField(80);
public JTextField loctext=new JTextField(80);
JPanel namePanel;
JPanel locNamePanel;
public JButton addNode = new JButton("Add node");
public JButton removeNode = new JButton("Remove node");
public DialogEdit()
{
FormPanel center=new FormPanel() { };
name.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
if (!updating)
emitChanged();
}
@Override
public void removeUpdate(DocumentEvent e) {
if (!updating)
emitChanged();
}
@Override
public void changedUpdate(DocumentEvent e) {
if (!updating)
emitChanged();
}
});
text.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
if (!updating)
emitChanged();
}
@Override
public void removeUpdate(DocumentEvent e) {
if (!updating)
emitChanged();
}
@Override
public void changedUpdate(DocumentEvent e) {
if (!updating)
emitChanged();
}
});
JPanel editData = new JPanel();
editData.setLayout(new BoxLayout(editData, BoxLayout.Y_AXIS));
namePanel = new JPanel();
namePanel.setLayout(new FlowLayout());
namePanel.add(new JLabel("Name:"));
namePanel.add(name);
editData.add(namePanel);
JPanel textPanel = new JPanel();
textPanel.setLayout(new FlowLayout());
textPanel.add(new JLabel("Text:"));
textPanel.add(text);
editData.add(textPanel);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
buttonPanel.add(addNode);
buttonPanel.add(removeNode);
editData.add(buttonPanel);
editData.add(new JLabel("localization tokens for translation"));
locNamePanel = new JPanel();
locNamePanel.setLayout(new FlowLayout());
locNamePanel.add(new JLabel("Name Token:"));
locNamePanel.add(locname);
JPanel locTextPanel = new JPanel();
locTextPanel.setLayout(new FlowLayout());
locTextPanel.add(new JLabel("Text Token:"));
locTextPanel.add(loctext);
editData.add(locNamePanel);
editData.add(locTextPanel);
center.add(editData);
add(center);
refresh();
}
public void refresh(){
refresh(false);
}
public void refresh(boolean onRootNode) {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
name.setText(currentData.name);
locname.setText(currentData.locname);
text.setText(currentData.text);
loctext.setText(currentData.loctext);
namePanel.setVisible(!onRootNode);
locNamePanel.setVisible(!onRootNode);
updating=false;
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
}

View File

@@ -0,0 +1,242 @@
package forge.adventure.editor;
import com.google.common.collect.ObjectArrays;
import forge.adventure.data.DialogData;
import forge.adventure.data.RewardData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class DialogEditor extends JComponent{
private boolean updating = false;
private java.util.List<DialogData> allNodes = new ArrayList<>();
public JTextArea text =new JTextArea("(Initial dialog text)", 3, 80);
public RewardsEditor rewardsEditor = new RewardsEditor();
public ActionEditor actionEditor = new ActionEditor();
public DialogOptionEditor optionEditor = new DialogOptionEditor();
public DialogTree navTree = new DialogTree();
public DialogEdit edit = new DialogEdit();
private DialogData root = new DialogData();
private DialogData current = new DialogData();
public DialogEditor(){
buildUI();
navTree.addSelectionListener(q -> loadNewNodeSelection());
edit.addChangeListener(q-> acceptEdits());
edit.addNode.addActionListener(q -> addNode());
edit.removeNode.addActionListener(q -> removeNode());
}
public void loadData(DialogData rootDialogData){
updating = true;
if (rootDialogData == null)
{
rootDialogData = new DialogData();
}
root = rootDialogData;
navTree.loadDialog(rootDialogData);
text.setText(rootDialogData.text);
updating = false;
}
public DialogData getDialogData(){
return root;
}
JTabbedPane tabs = new JTabbedPane();
JToolBar conditionsToolbar = new JToolBar("conditionsToolbar");
JToolBar actionsToolbar = new JToolBar("actionsToolbar");
JToolBar optionsToolbar = new JToolBar("optionsToolbar");
JToolBar tokensToolbar = new JToolBar("tokensToolbar");
JPanel conditionsPanel = new JPanel();
JPanel actionsPanel = new JPanel();
JPanel optionsPanel = new JPanel();
JPanel rewardsPanel = new JPanel();
JPanel tokensPanel = new JPanel();
class QuestTextDocumentListener implements DocumentListener {
public void changedUpdate(DocumentEvent e) {
root.text = text.getText();
emitChanged();
}
public void removeUpdate(DocumentEvent e) {
root.text = text.getText();
emitChanged();
}
public void insertUpdate(DocumentEvent e) {
root.text = text.getText();
emitChanged();
}
}
public void buildUI(){
buildTabs();
BorderLayout layout=new BorderLayout();
setLayout(layout);
JPanel textArea = new JPanel();
textArea.setLayout(new FlowLayout());
textArea.add(new JLabel("Dialog Start"));
textArea.add(text);
text.getDocument().addDocumentListener(new QuestTextDocumentListener());
JSplitPane splitPane = new JSplitPane();
splitPane.setLeftComponent(navTree);
splitPane.setRightComponent(tabs);
splitPane.setResizeWeight(0.2);
splitPane.setDividerLocation(.2);
add(textArea, BorderLayout.NORTH);
add(splitPane, BorderLayout.CENTER);
}
public void loadNewNodeSelection(){
updating = true;
current = navTree.getSelectedData();
edit.currentData = navTree.getSelectedData();
edit.refresh(root.equals(current));
rewardsEditor.clear();
actionEditor.clear();
if (navTree.getSelectedData() != null) {
for (DialogData.ActionData action : navTree.getSelectedData().action) {
if (action.grantRewards != null && action.grantRewards.length > 0)
rewardsEditor.setRewards(action.grantRewards);
}
actionEditor.setAction(navTree.getSelectedData().action);
}
updating = false;
}
public void acceptEdits(){
if (current == null)
return;
current.name = edit.name.getText();
current.text = edit.text.getText();
current.locname = edit.locname.getText();
current.loctext = edit.loctext.getText();
root.text = text.getText();
DialogData.ActionData[] action = actionEditor.getAction();
ArrayList<DialogData.ActionData> actionsList = new ArrayList<>(Arrays.stream(action).collect(Collectors.toList()));
RewardData[] rewards= rewardsEditor.getRewards();
if (rewards.length > 0)
{
DialogData.ActionData rewardAction = new DialogData.ActionData();
rewardAction.grantRewards = rewards;
actionsList.add(rewardAction);
}
current.action = actionsList.toArray(current.action);
navTree.replaceCurrent();
emitChanged();
}
public void addNode(){
DialogData newNode = new DialogData();
newNode.name = "NewResponse";
DialogData parent = navTree.getSelectedData()!=null?navTree.getSelectedData():root;
parent.options = ObjectArrays.concat(parent.options, newNode);
navTree.loadDialog(root);
navTree.setSelectedData(newNode);
emitChanged();
}
public void removeNode(){
if (navTree.getSelectedData() == null)
return;
navTree.removeSelectedData();
emitChanged();
}
public void buildTabs(){
buildToolBars();
actionsPanel.add(actionsToolbar);
actionsPanel.add(actionEditor);
optionsPanel.add(edit);
rewardsPanel.add(rewardsEditor);
rewardsEditor.addChangeListener(e -> DialogEditor.this.acceptEdits());
actionEditor.addChangeListener(e -> DialogEditor.this.acceptEdits());
tokensPanel.add(tokensToolbar);
tokensPanel.add(new JLabel("Insert token editor here"));
tabs.addTab("Options", optionsPanel);
tabs.addTab("Conditions", conditionsPanel);
tabs.addTab("Actions", actionsPanel);
tabs.addTab("Rewards", rewardsPanel);
tabs.addTab("Tokens",tokensPanel);
}
public void buildToolBars(){
conditionsToolbar.setFloatable(false);
actionsToolbar.setFloatable(false);
optionsToolbar.setFloatable(false);
JButton addOption = new JButton("Add Option");
addOption.addActionListener(e -> DialogEditor.this.addOption());
optionsToolbar.add(addOption);
JButton copyOption = new JButton("Copy Selected");
copyOption.addActionListener(e -> DialogEditor.this.copyOption());
optionsToolbar.add(copyOption);
JButton removeOption = new JButton("Remove Selected");
removeOption.addActionListener(e -> DialogEditor.this.removeOption());
optionsToolbar.add(removeOption);
}
public void addOption(){
optionEditor.addOption();
emitChanged();
}
public void copyOption(){
emitChanged();
}
public void removeOption(){
int selected=optionEditor.list.getSelectedIndex();
if(selected<0)
return;
optionEditor.model.remove(selected);
emitChanged();
}
protected void emitChanged() {
if (updating)
return;
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
}

View File

@@ -0,0 +1,85 @@
package forge.adventure.editor;
import forge.adventure.data.DialogData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class DialogOptionEdit extends FormPanel {
DialogData currentData;
JLabel nameLabel = new JLabel("Name (Player dialog / action)");
JLabel textLabel = new JLabel("Text (Game response to Name - Leave blank to end dialog)");
JTextArea text =new JTextArea(3,80);
JTextArea name =new JTextArea(3,80);
JButton add = new JButton();
JButton load = new JButton();
private boolean updating=false;
public DialogOptionEdit()
{
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel upper = new JPanel();
upper.setLayout(new BorderLayout());
upper.add(nameLabel, BorderLayout.NORTH);
upper.add(name, BorderLayout.CENTER);
add(upper);
JPanel middle = new JPanel();
middle.setLayout(new BorderLayout());
middle.add(textLabel, BorderLayout.NORTH);
middle.add(text, BorderLayout.CENTER);
add(middle);
name.getDocument().addDocumentListener(new DocumentChangeListener(() -> DialogOptionEdit.this.updateDialog()));
text.getDocument().addDocumentListener(new DocumentChangeListener(() -> DialogOptionEdit.this.updateDialog()));
}
private void updateDialog() {
if(currentData==null||updating)
return;
currentData.text = text.getText().trim();
currentData.name = name.getText().trim();
//currentData.condition = conditionEditor.getConditions();
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
public void addChangeListener(ChangeListener l) {
listenerList.add(ChangeListener.class, l);
}
public void setCurrentOption(DialogData data)
{
currentData=data;
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
updating=true;
text.setText(currentData.text!=null?currentData.text:"");
name.setText(currentData.name!=null?currentData.name:"");
updating=false;
}
}

View File

@@ -0,0 +1,139 @@
package forge.adventure.editor;
import forge.adventure.data.DialogData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionListener;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class DialogOptionEditor extends JComponent{
DefaultListModel<DialogData> model = new DefaultListModel<>();
JList<DialogData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
DialogOptionEdit edit=new DialogOptionEdit();
public class DialogDataRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof DialogData))
return label;
DialogData dialog=(DialogData) value;
StringBuilder builder=new StringBuilder();
if(dialog.name==null||dialog.name.isEmpty())
builder.append("[[Blank Option]]");
else
builder.append(dialog.name, 0, Math.min(dialog.name.length(), 25));
label.setText(builder.toString());
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public DialogOptionEditor()
{
list.setCellRenderer(new DialogDataRenderer());
list.addListSelectionListener(e -> DialogOptionEditor.this.updateEdit());
addButton("add", e -> DialogOptionEditor.this.addOption());
addButton("remove", e -> DialogOptionEditor.this.remove());
addButton("copy", e -> DialogOptionEditor.this.copy());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(list, BorderLayout.LINE_START);
add(toolBar, BorderLayout.PAGE_START);
toolBar.setFloatable(false);
add(edit,BorderLayout.CENTER);
edit.setVisible(false);
edit.addChangeListener(e -> emitChanged());
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
DialogData data=new DialogData(model.get(selected));
model.add(model.size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
edit.setCurrentOption(new DialogData());
else
edit.setCurrentOption(model.get(selected));
}
void addOption()
{
DialogData data=new DialogData();
model.add(model.size(),data);
edit.setVisible(true);
list.setSelectedIndex(model.size() - 1);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
edit.setVisible(model.size() > 0);
}
public void setOptions(DialogData[] options) {
model.clear();
if(options==null || options.length == 0)
options = new DialogData[0];
for (int i=0;i<options.length;i++) {
model.add(i,options[i]);
}
if (model.size() > 0)
{
edit.setVisible(true);
list.setSelectedIndex(0);
updateEdit();
}
else{
edit.setVisible(false);
}
}
public DialogData[] getOptions() {
DialogData[] options= new DialogData[model.getSize()];
for(int i=0;i<model.getSize();i++)
{
options[i]=model.get(i);
}
return options;
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
}

View File

@@ -0,0 +1,121 @@
package forge.adventure.editor;
import forge.adventure.data.DialogData;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DialogTree extends JPanel {
private JTree dialogTree;
private JScrollPane scrollPane;
public DialogTree(){
setLayout(new BorderLayout());
// Create the JTree component
dialogTree = new JTree();
dialogTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
addSelectionListener();
// Create a scroll pane to contain the JTree
scrollPane = new JScrollPane(dialogTree);
// Add the scroll pane to the panel
add(scrollPane, BorderLayout.CENTER);
}
public void loadDialog(DialogData dialogData){
// rootNode = buildBranches(dialogData);
// ((DefaultTreeModel)dialogTree.getModel()).setRoot(rootNode);
((DefaultTreeModel)dialogTree.getModel()).setRoot(buildBranches(dialogData));
}
public DefaultMutableTreeNode buildBranches(DialogData dialogData)
{
DefaultMutableTreeNode node = new DefaultMutableTreeNode(dialogData);
for (DialogData option : dialogData.options){
node.add(buildBranches(option));
}
return node;
}
private final List<TreeSelectionListener> selectionListeners = new ArrayList<>();
public void addSelectionListener(){
//subscribe to valueChanged, change to that object in edit pane
dialogTree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
emitChanged(e);
}
});
}
public void addSelectionListener(final TreeSelectionListener listener) {
selectionListeners.remove(listener); //ensure listener not added multiple times
selectionListeners.add(listener);
}
protected void emitChanged(TreeSelectionEvent evt) {
if (selectionListeners != null && selectionListeners.size() > 0) {
for (TreeSelectionListener listener : selectionListeners) {
listener.valueChanged(evt);
}
}
}
public void replaceCurrent(){
if (dialogTree.getSelectionPath() == null || dialogTree.getSelectionPath().getLastPathComponent() == null)
return;
dialogTree.updateUI();
}
public DialogData getSelectedData() {
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) dialogTree.getLastSelectedPathComponent();
if (selectedNode != null) {
return (DialogData) selectedNode.getUserObject();
}
return null;
}
public void removeSelectedData() {
//Todo: Enhance this to not collapse any nodes (after setSelectedData other paths are still collapsed)
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) dialogTree.getLastSelectedPathComponent();
DialogData parentData = (DialogData) ((DefaultMutableTreeNode)selectedNode.getParent()).getUserObject();
parentData.options = Arrays.stream(parentData.options).filter(q -> q != selectedNode.getUserObject()).toArray(DialogData[]::new);
((DefaultTreeModel) dialogTree.getModel()).removeNodeFromParent(selectedNode);
((DefaultTreeModel) dialogTree.getModel()).reload();
setSelectedData(parentData);
}
public void setSelectedData(DialogData data) {
// Find the node with the given data object and select it in the tree
DefaultMutableTreeNode node = findNode((DefaultMutableTreeNode)dialogTree.getModel().getRoot(), data);
if (node != null) {
dialogTree.setSelectionPath(new TreePath(node.getPath()));
}
}
private DefaultMutableTreeNode findNode(DefaultMutableTreeNode parent, DialogData data) {
// Search for the node with the given data object in the subtree rooted at the parent node
if (parent.getUserObject() == data) {
return parent;
}
for (int i = 0; i < parent.getChildCount(); i++) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) parent.getChildAt(i);
DefaultMutableTreeNode result = findNode(child, data);
if (result != null) {
return result;
}
}
return null;
}
}

View File

@@ -1,5 +1,9 @@
package forge.adventure.editor;
import com.badlogic.gdx.tools.particleeditor.ParticleEditor;
import javax.swing.*;
import java.awt.*;
@@ -7,18 +11,42 @@ import java.awt.*;
* Editor class to edit configuration, maybe moved or removed
*/
public class EditorMainWindow extends JFrame {
public final static WorldEditor worldEditor = new WorldEditor();
JTabbedPane tabs =new JTabbedPane();
public EditorMainWindow()
{
UIManager.LookAndFeelInfo[] var1 = UIManager.getInstalledLookAndFeels();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
UIManager.LookAndFeelInfo info = var1[var3];
if ("Nimbus".equals(info.getName())) {
try {
UIManager.setLookAndFeel(info.getClassName());
} catch (Throwable var6) {
}
break;
}
}
BorderLayout layout=new BorderLayout();
JToolBar toolBar = new JToolBar("toolbar");
JButton newButton=new JButton("open ParticleEditor");
newButton.addActionListener(e -> EventQueue.invokeLater(() ->new ParticleEditor()));
toolBar.add(newButton);
setLayout(layout);
add(tabs);
toolBar.setFloatable(false);
add(toolBar, BorderLayout.NORTH);
add(tabs, BorderLayout.CENTER);
tabs.addTab("World",worldEditor);
tabs.addTab("POI",new PointOfInterestEditor());
tabs.addTab("World",new WorldEditor());
tabs.addTab("Items",new ItemsEditor());
tabs.addTab("Enemies",new EnemyEditor());
tabs.addTab("Quests",new QuestEditor());
setVisible(true);
setSize(800,600);
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow( this );
}
}

View File

@@ -5,7 +5,6 @@ import forge.adventure.data.EffectData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
public class EffectEditor extends JComponent {
EffectData currentData;
@@ -25,16 +24,15 @@ public class EffectEditor extends JComponent {
if(!isOpponentEffect)
opponent=new EffectEditor(true);
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
JPanel parameters=new JPanel();
FormPanel parameters=new FormPanel();
parameters.setBorder(BorderFactory.createTitledBorder("Effect"));
parameters.setLayout(new GridLayout(7,2)) ;
parameters.add(new JLabel("Name:")); parameters.add(name);
parameters.add(new JLabel("Start with extra cards:")); parameters.add(changeStartCards);
parameters.add(new JLabel("Change life:")); parameters.add(lifeModifier);
parameters.add(new JLabel("Movement speed:")); parameters.add(moveSpeed);
parameters.add(new JLabel("Start battle with cards:")); parameters.add(startBattleWithCard);
parameters.add(new JLabel("color view:")); parameters.add(colorView);
parameters.add("Name:", name);
parameters.add("Start with extra cards:", changeStartCards);
parameters.add("Change life:", lifeModifier);
parameters.add("Movement speed:", moveSpeed);
parameters.add("Start battle with cards:", startBattleWithCard);
parameters.add("color view:", colorView);
add(parameters);
if(!isOpponentEffect)
{ add(new JLabel("Opponent:")); add(opponent);}

View File

@@ -3,68 +3,270 @@ package forge.adventure.editor;
import forge.adventure.data.EnemyData;
import javax.swing.*;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Enumeration;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class EnemyEdit extends JComponent {
public class EnemyEdit extends FormPanel {
EnemyData currentData;
JTextField nameField=new JTextField();
JTextField nameOverride=new JTextField();
JTextField colorField=new JTextField();
JSpinner lifeFiled= new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
JSpinner spawnRate= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1));
JSpinner difficulty= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1));
JSpinner speed= new JSpinner(new SpinnerNumberModel(0.0, 0., 100., 1.0));
JTextField ai=new JTextField();
JCheckBox flying=new JCheckBox();
JCheckBox boss=new JCheckBox();
JCheckBox ignoreDungeonEffect=new JCheckBox();
FloatSpinner lifeFiled= new FloatSpinner(0, 1000, 1);
FloatSpinner spawnRate= new FloatSpinner( 0.f, 1, 0.1f);
FloatSpinner difficulty= new FloatSpinner( 0.f, 1, 0.1f);
FloatSpinner speed= new FloatSpinner( 0.f, 100.f, 1.0f);
FilePicker deck=new FilePicker(new String[]{"dck","json"});
FilePicker atlas=new FilePicker(new String[]{"atlas"});
JTextField equipment=new JTextField();
RewardsEditor rewards=new RewardsEditor();
SwingAtlasPreview preview=new SwingAtlasPreview();
JTextField manualEntry = new JTextField(20);
private boolean updating=false;
DefaultListModel<String> existingModel = new DefaultListModel<>();
DefaultListModel<String> enemyModel = new DefaultListModel<>();
JList<String> existingTags;
JList<String> enemyTags;
public EnemyEdit()
{
setLayout(new BorderLayout());
FormPanel top=new FormPanel() { };
add(top, BorderLayout.NORTH);
JComponent center=new JComponent() { };
center.setLayout(new GridLayout(9,2));
JTabbedPane tabs = new JTabbedPane();
add(tabs, BorderLayout.CENTER);
FormPanel basicInfo=new FormPanel() { };
tabs.addTab("Basic Info", basicInfo);
center.add(new JLabel("Name:")); center.add(nameField);
center.add(new JLabel("Life:")); center.add(lifeFiled);
center.add(new JLabel("Spawn rate:")); center.add(spawnRate);
center.add(new JLabel("Difficulty:")); center.add(difficulty);
center.add(new JLabel("Speed:")); center.add(speed);
center.add(new JLabel("Deck:")); center.add(deck);
center.add(new JLabel("Sprite:")); center.add(atlas);
center.add(new JLabel("Equipment:")); center.add(equipment);
center.add(new JLabel("Colors:")); center.add(colorField);
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(center,BorderLayout.PAGE_START);
add(rewards,BorderLayout.CENTER);
add(preview,BorderLayout.LINE_START);
top.add("Name:",nameField);
top.add("Display Name:", nameOverride);
equipment.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
colorField.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
nameField.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
basicInfo.add("Life:",lifeFiled);
basicInfo.add("Spawn rate:",spawnRate);
basicInfo.add("Difficulty:",difficulty);
basicInfo.add("Speed:",speed);
basicInfo.add("Deck:",deck);
basicInfo.add("Equipment:",equipment);
basicInfo.add("Colors:",colorField);
basicInfo.add("ai:",ai);
basicInfo.add("flying:",flying);
basicInfo.add("boss:",boss);
JPanel visual = new JPanel();
visual.add("Sprite:",atlas);
visual.add(preview);
JPanel tags = new JPanel();
existingTags = new JList<>();
existingTags.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addSelected");
existingTags.getActionMap().put("addSelected", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
addSelected();
int index = existingTags.getSelectedIndex();
String selectedItem = existingTags.getSelectedValue();
if (selectedItem != null) {
enemyModel.addElement(selectedItem);
existingTags.grabFocus();
existingTags.setSelectedIndex(index<existingModel.size()?index:index-1);
}
}
});
existingModel = QuestController.getInstance().getEnemyTags();
existingTags.setModel(existingModel);
enemyTags = new JList<>();
enemyModel = new DefaultListModel<>();
enemyTags.setModel(enemyModel);
enemyTags.getModel().addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
doUpdate();
}
@Override
public void intervalRemoved(ListDataEvent e) {
doUpdate();
}
@Override
public void contentsChanged(ListDataEvent e) {
doUpdate();
}
});
JButton select = new JButton("Select");
select.addActionListener(q -> addSelected());
JButton add = new JButton("Manual Add");
add.addActionListener(q -> manualAdd(enemyModel));
JButton remove = new JButton("Remove Item");
remove.addActionListener(q -> removeSelected());
tags.setLayout(new BorderLayout());
JPanel left = new JPanel();
left.setLayout(new BorderLayout());
left.add(new JLabel("Tags already in use"), BorderLayout.NORTH);
JScrollPane listScroller = new JScrollPane(existingTags);
listScroller.setMinimumSize(new Dimension(400, 800));
left.add(listScroller, BorderLayout.CENTER);
tags.add(left, BorderLayout.WEST);
FormPanel tagEdit = new FormPanel();
tagEdit.setLayout(new BorderLayout());
FormPanel mappedTags = new FormPanel();
mappedTags.setLayout(new BorderLayout());
mappedTags.add(new JLabel("Tags Mapped to this object"), BorderLayout.NORTH);
JScrollPane listScroller2 = new JScrollPane(enemyTags);
listScroller2.setMinimumSize(new Dimension(400, 800));
mappedTags.add(listScroller2, BorderLayout.CENTER);
tagEdit.add(mappedTags,BorderLayout.EAST);
JPanel controlPanel = new JPanel();
controlPanel.add(select);
controlPanel.add(add);
controlPanel.add(manualEntry);
manualEntry.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addTyped");
manualEntry.getActionMap().put("addTyped", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!manualEntry.getText().trim().isEmpty()) {
manualAdd(enemyModel);
manualEntry.grabFocus();
}
}
});
controlPanel.add(remove);
tagEdit.add(controlPanel, BorderLayout.CENTER);
tags.add(tagEdit,BorderLayout.CENTER);
JTextArea right1 = new JTextArea("This is really just to pad some space\n" +
"but also to explain the use of tags.\n" +
"Rather than adding 100's of object names\n" +
"to every quest definition, instead we will\n"+
"categorize enemies and points of interest with\n"+
"tags and reference those categories in quests");
right1.setEnabled(false);
tags.add(right1, BorderLayout.EAST);
tabs.addTab("Sprite", visual);
tabs.addTab("Rewards", rewards);
tabs.addTab("Quest Tags", tags);
equipment.getDocument().addDocumentListener(new DocumentChangeListener(EnemyEdit.this::updateEnemy));
atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(EnemyEdit.this::updateEnemy));
colorField.getDocument().addDocumentListener(new DocumentChangeListener(EnemyEdit.this::updateEnemy));
ai.getDocument().addDocumentListener(new DocumentChangeListener(EnemyEdit.this::updateEnemy));
flying.addChangeListener(e -> EnemyEdit.this.updateEnemy());
boss.addChangeListener(e -> EnemyEdit.this.updateEnemy());
ignoreDungeonEffect.addChangeListener(e -> EnemyEdit.this.updateEnemy());
nameField.getDocument().addDocumentListener(new DocumentChangeListener(EnemyEdit.this::updateEnemy));
nameOverride.getDocument().addDocumentListener(new DocumentChangeListener(EnemyEdit.this::updateEnemy));
deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(EnemyEdit.this::updateEnemy));
lifeFiled.addChangeListener(e -> EnemyEdit.this.updateEnemy());
speed.addChangeListener(e -> EnemyEdit.this.updateEnemy());
difficulty.addChangeListener(e -> EnemyEdit.this.updateEnemy());
spawnRate.addChangeListener(e -> EnemyEdit.this.updateEnemy());
rewards.addChangeListener(e -> EnemyEdit.this.updateEnemy());
lifeFiled.addChangeListener(e -> EnemyEdit.this.updateEnemy());
enemyModel.addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
EnemyEdit.this.updateEnemy();
}
@Override
public void intervalRemoved(ListDataEvent e) {
EnemyEdit.this.updateEnemy();
}
@Override
public void contentsChanged(ListDataEvent e) {
EnemyEdit.this.updateEnemy();
}
});
refresh();
}
private void updateEnemy() {
private void doUpdate(){
EnemyEdit.this.updateEnemy();
}
private void addSelected(){
if (existingTags.getSelectedIndex()>-1)
enemyModel.addElement(existingTags.getModel().getElementAt(existingTags.getSelectedIndex()));
doUpdate();
}
private void removeSelected(){
if (enemyTags.getSelectedIndex()>-1)
enemyModel.remove(enemyTags.getSelectedIndex());
doUpdate();
}
private void filterExisting(DefaultListModel<String> filter){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (Enumeration<String> e = QuestController.getInstance().getEnemyTags().elements(); e.hasMoreElements();){
String toTest = e.nextElement();
if (toTest != null & !filter.contains(toTest)){
toReturn.addElement(toTest);
}
}
existingTags.setModel(toReturn);
}
private void manualAdd(DefaultListModel<String> model){
if (!manualEntry.getText().trim().isEmpty())
model.addElement(manualEntry.getText().trim());
manualEntry.setText("");
doUpdate();
}
public void updateEnemy() {
if(currentData==null||updating)
return;
currentData.name=nameField.getText();
currentData.colors=colorField.getText();
currentData.ai=ai.getText();
currentData.flying=flying.isSelected();
currentData.boss=boss.isSelected();
currentData.life= (int) lifeFiled.getValue();
currentData.sprite= atlas.getEdit().getText();
if(equipment.getText().isEmpty())
@@ -74,9 +276,18 @@ public class EnemyEdit extends JComponent {
currentData.speed= ((Double) speed.getValue()).floatValue();
currentData.spawnRate=((Double) spawnRate.getValue()).floatValue();
currentData.difficulty=((Double) difficulty.getValue()).floatValue();
currentData.deck= deck.getEdit().getText();
currentData.deck= deck.getEdit().getText().split(",");
currentData.rewards= rewards.getRewards();
preview.setSpritePath(currentData.sprite);
ArrayList<String> tags = new ArrayList<>();
for (Enumeration<String> e = enemyModel.elements(); e.hasMoreElements();){
tags.add(e.nextElement());
}
currentData.questTags = tags.toArray(currentData.questTags);
QuestController.getInstance().refresh();
filterExisting(enemyModel);
}
public void setCurrentEnemy(EnemyData data)
@@ -94,18 +305,27 @@ public class EnemyEdit extends JComponent {
updating=true;
nameField.setText(currentData.name);
colorField.setText(currentData.colors);
ai.setText(currentData.ai);
boss.setSelected(currentData.boss);
flying.setSelected(currentData.flying);
lifeFiled.setValue(currentData.life);
atlas.getEdit().setText(currentData.sprite);
if(currentData.equipment!=null)
equipment.setText(String.join(",",currentData.equipment));
else
equipment.setText("");
deck.getEdit().setText(currentData.deck);
deck.getEdit().setText(String.join(",",currentData.deck));
speed.setValue(new Float(currentData.speed).doubleValue());
spawnRate.setValue(new Float(currentData.spawnRate).doubleValue());
difficulty.setValue(new Float(currentData.difficulty).doubleValue());
rewards.setRewards(currentData.rewards);
preview.setSpritePath(currentData.sprite);
enemyModel.clear();
for(String val : currentData.questTags) {
if (val != null)
enemyModel.addElement(val);
}
filterExisting(enemyModel);
updating=false;
}
}

View File

@@ -9,10 +9,7 @@ import forge.adventure.util.Config;
import forge.adventure.util.Paths;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
@@ -61,45 +58,19 @@ public class EnemyEditor extends JComponent {
{
list.setCellRenderer(new EnemyDataRenderer());
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
EnemyEditor.this.updateEdit();
}
});
addButton("add", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.addEnemy();
}
});
addButton("remove", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.remove();
}
});
addButton("copy", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.copy();
}
});
addButton("load", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.load();
}
});
addButton("save", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.save();
}
list.addListSelectionListener(e -> EnemyEditor.this.updateEdit());
addButton("add", e -> EnemyEditor.this.addEnemy());
addButton("remove", e -> EnemyEditor.this.remove());
addButton("copy", e -> EnemyEditor.this.copy());
addButton("load", e -> {
EnemyEditor.this.load();
QuestController.getInstance().load();
});
addButton("save", e -> EnemyEditor.this.save());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(new JScrollPane(list), BorderLayout.LINE_START);
toolBar.setFloatable(false);
add(toolBar, BorderLayout.PAGE_START);
add(edit,BorderLayout.CENTER);
load();
@@ -118,6 +89,7 @@ public class EnemyEditor extends JComponent {
if(selected<0)
return;
edit.setCurrentEnemy(model.get(selected));
edit.updateEnemy();
}
void save()
@@ -138,8 +110,7 @@ public class EnemyEditor extends JComponent {
FileHandle handle = Config.instance().getFile(Paths.ENEMIES);
if (handle.exists())
{
Array readEnemies=json.fromJson(Array.class, EnemyData.class, handle);
allEnemies = readEnemies;
allEnemies = json.fromJson(Array.class, EnemyData.class, handle);
}
for (int i=0;i<allEnemies.size;i++) {
model.add(i,allEnemies.get(i));

View File

@@ -0,0 +1,19 @@
package forge.adventure.editor;
import javax.swing.*;
public class FloatSpinner extends JSpinner{
public FloatSpinner()
{
this( 0.f, 1f, 0.1f);
}
public FloatSpinner(float min,float max,float stepSize)
{
super(new SpinnerNumberModel(new Float(0.0f), new Float(min), new Float (max), new Float(stepSize)));
}
public float floatValue()
{
return ((Float)getValue()).floatValue();
}
}

View File

@@ -0,0 +1,63 @@
package forge.adventure.editor;
import javax.swing.*;
import java.awt.*;
public class FormPanel extends JPanel {
int row=0;
static final int MAXIMUM_LINES=300;
public FormPanel()
{
setLayout(new GridBagLayout()) ;
GridBagConstraints constraint=new GridBagConstraints();
constraint.weightx = 1.0;
constraint.weighty = 1.0;
constraint.gridy=MAXIMUM_LINES;
constraint.gridx=0;
constraint.gridwidth=2;
add(Box.createVerticalGlue(),constraint);
row++;
}
public void add(JComponent name,JComponent element)
{
GridBagConstraints constraint=new GridBagConstraints();
constraint.ipadx = 5;
constraint.ipady = 5;
constraint.weightx = 1.0;
constraint.weighty = 0.0;
constraint.gridy=row;
constraint.gridx=0;
constraint.anchor=GridBagConstraints.NORTHWEST;
add(name,constraint);
constraint.gridy=row;
constraint.gridx=1;
constraint.fill=GridBagConstraints.HORIZONTAL;
constraint.anchor=GridBagConstraints.NORTHEAST;
add(element,constraint);
row++;
}
public void add(String name,JComponent element)
{
add(new JLabel(name),element);
}
public void add(JComponent element)
{
GridBagConstraints constraint=new GridBagConstraints();
constraint.ipadx = 5;
constraint.ipady = 5;
constraint.weightx = 1.0;
constraint.weighty = 0.0;
constraint.gridy=row;
constraint.gridx=0;
constraint.gridwidth=2;
constraint.fill=GridBagConstraints.HORIZONTAL;
constraint.anchor=GridBagConstraints.NORTHEAST;
add(element,constraint);
row++;
}
}

View File

@@ -0,0 +1,20 @@
package forge.adventure.editor;
import javax.swing.*;
public class IntSpinner extends JSpinner {
public IntSpinner()
{
this( 0, 100, 1);
}
public IntSpinner(int min,int max,int stepSize)
{
super(new SpinnerNumberModel(new Integer(0), new Integer(min), new Integer (max), new Integer(stepSize)));
}
public int intValue()
{
return ((Integer)getValue()).intValue();
}
}

View File

@@ -10,8 +10,6 @@ import java.awt.*;
*/
public class ItemEdit extends JComponent {
ItemData currentData;
JTextField nameField=new JTextField();
JTextField equipmentSlot=new JTextField();
JTextField iconName=new JTextField();
@@ -26,19 +24,19 @@ public class ItemEdit extends JComponent {
{
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
JPanel parameters=new JPanel();
FormPanel parameters=new FormPanel();
parameters.setBorder(BorderFactory.createTitledBorder("Parameter"));
parameters.setLayout(new GridLayout(6,2)) ;
parameters.add(new JLabel("Name:")); parameters.add(nameField);
parameters.add(new JLabel("equipmentSlot:")); parameters.add(equipmentSlot);
parameters.add(new JLabel("description:")); parameters.add(description);
parameters.add(new JLabel("iconName")); parameters.add(iconName);
parameters.add(new JLabel("questItem")); parameters.add(questItem);
parameters.add(new JLabel("cost")); parameters.add(cost);
parameters.add("Name:",nameField);
parameters.add("equipmentSlot:",equipmentSlot);
parameters.add("description:",description);
parameters.add("iconName",iconName);
parameters.add("questItem",questItem);
parameters.add("cost",cost);
add(parameters);
add(effect);
add(new Box.Filler(new Dimension(0,0),new Dimension(0,Integer.MAX_VALUE),new Dimension(0,Integer.MAX_VALUE)));
nameField.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));
equipmentSlot.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));

View File

@@ -67,6 +67,7 @@ public class ItemsEditor extends JComponent {
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(new JScrollPane(list), BorderLayout.LINE_START);
toolBar.setFloatable(false);
add(toolBar, BorderLayout.PAGE_START);
add(edit,BorderLayout.CENTER);
load();
@@ -105,8 +106,7 @@ public class ItemsEditor extends JComponent {
FileHandle handle = Config.instance().getFile(Paths.ITEMS);
if (handle.exists())
{
Array readEnemies=json.fromJson(Array.class, ItemData.class, handle);
allEnemies = readEnemies;
allEnemies =json.fromJson(Array.class, ItemData.class, handle);
}
for (int i=0;i<allEnemies.size;i++) {
model.add(i,allEnemies.get(i));

View File

@@ -1,20 +0,0 @@
package forge.adventure.editor;
import forge.GuiMobile;
import forge.adventure.util.Config;
import forge.gui.GuiBase;
import java.nio.file.Files;
import java.nio.file.Paths;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class Main {
public static void main(String[] args) {
GuiBase.setInterface(new GuiMobile(Files.exists(Paths.get("./res"))?"./":"../forge-gui/"));
GuiBase.setDeviceInfo("", "", 0, 0);
Config.instance();
new EditorMainWindow();
}
}

View File

@@ -0,0 +1,274 @@
package forge.adventure.editor;
import forge.adventure.data.PointOfInterestData;
import javax.swing.*;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Enumeration;
public class PointOfInterestEdit extends JComponent {
PointOfInterestData currentData;
JTextField name = new JTextField();
JTextField type = new JTextField();
JSpinner count = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
FilePicker spriteAtlas = new FilePicker(new String[]{"atlas"});
JTextField sprite = new JTextField();
FilePicker map = new FilePicker(new String[]{"tmx"});
JSpinner radiusFactor= new JSpinner(new SpinnerNumberModel(0.0f, 0.0f, 2.0f, 0.1f));
SwingAtlasPreview preview=new SwingAtlasPreview(256,2000);
JTextField manualEntry = new JTextField(20);
DefaultListModel<String> existingModel = new DefaultListModel<>();
DefaultListModel<String> POIModel = new DefaultListModel<>();
JList<String> existingTags;
JList<String> POITags;
private boolean updating=false;
public PointOfInterestEdit()
{
JTabbedPane tabs = new JTabbedPane();
add(tabs, BorderLayout.CENTER);
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
FormPanel parameters=new FormPanel();
//parameters.setLayout(new BoxLayout(parameters, BoxLayout.Y_AXIS));
parameters.setBorder(BorderFactory.createTitledBorder("Parameter"));
JPanel tags = new JPanel();
tabs.addTab("Basic Info", parameters);
tabs.addTab("Quest Tags", tags);
parameters.add("Name:",name);
parameters.add("Type:",type);
parameters.add("Count:",count);
parameters.add("Sprite atlas:",spriteAtlas);
parameters.add("Sprite:",sprite);
parameters.add("Map:",map);
parameters.add("Radius factor:",radiusFactor);
parameters.add(preview);
name.getDocument().addDocumentListener(new DocumentChangeListener(PointOfInterestEdit.this::updateItem));
type.getDocument().addDocumentListener(new DocumentChangeListener(PointOfInterestEdit.this::updateItem));
count.addChangeListener(e -> PointOfInterestEdit.this.updateItem());
spriteAtlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(PointOfInterestEdit.this::updateItem));
sprite.getDocument().addDocumentListener(new DocumentChangeListener(PointOfInterestEdit.this::updateItem));
map.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(PointOfInterestEdit.this::updateItem));
radiusFactor.addChangeListener(e -> PointOfInterestEdit.this.updateItem());
existingTags = new JList<>();
existingTags.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addSelected");
existingTags.getActionMap().put("addSelected", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
int index = existingTags.getSelectedIndex();
String selectedItem = existingTags.getSelectedValue();
if (selectedItem != null) {
POIModel.addElement(selectedItem);
existingTags.grabFocus();
existingTags.setSelectedIndex(index<existingModel.size()?index:index-1);
}
}
});
existingModel = QuestController.getInstance().getPOITags();
existingTags.setModel(existingModel);
POITags = new JList<>();
POIModel = new DefaultListModel<>();
POITags.setModel(POIModel);
POITags.getModel().addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
updateItem();
}
@Override
public void intervalRemoved(ListDataEvent e) {
updateItem();
}
@Override
public void contentsChanged(ListDataEvent e) {
updateItem();
}
});
JButton select = new JButton("Select");
select.addActionListener(q -> addSelected());
JButton add = new JButton("Manual Add");
add.addActionListener(q -> manualAdd(POIModel));
JButton remove = new JButton("Remove Item");
remove.addActionListener(q -> removeSelected());
tags.setLayout(new BorderLayout());
JPanel left = new JPanel();
left.setLayout(new BorderLayout());
left.add(new JLabel("Tags already in use"), BorderLayout.NORTH);
JScrollPane listScroller = new JScrollPane(existingTags);
listScroller.setMinimumSize(new Dimension(400, 800));
left.add(listScroller, BorderLayout.CENTER);
tags.add(left, BorderLayout.WEST);
FormPanel tagEdit = new FormPanel();
tagEdit.setLayout(new BorderLayout());
FormPanel mappedTags = new FormPanel();
mappedTags.setLayout(new BorderLayout());
mappedTags.add(new JLabel("Tags Mapped to this object"), BorderLayout.NORTH);
JScrollPane listScroller2 = new JScrollPane(POITags);
listScroller2.setMinimumSize(new Dimension(400, 800));
mappedTags.add(listScroller2, BorderLayout.CENTER);
tagEdit.add(mappedTags,BorderLayout.EAST);
JPanel controlPanel = new JPanel();
controlPanel.add(select);
controlPanel.add(add);
controlPanel.add(manualEntry);
manualEntry.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addTyped");
manualEntry.getActionMap().put("addTyped", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!manualEntry.getText().trim().isEmpty()) {
manualAdd(POIModel);
manualEntry.grabFocus();
}
}
});
controlPanel.add(remove);
tagEdit.add(controlPanel, BorderLayout.CENTER);
tags.add(tagEdit,BorderLayout.CENTER);
JTextArea right1 = new JTextArea("This is really just to pad some space\n" +
"but also to explain the use of tags.\n" +
"Rather than adding 100's of object names\n" +
"to every quest definition, instead we will\n"+
"categorize enemies and points of interest with\n"+
"tags and reference those categories in quests");
right1.setEnabled(false);
tags.add(right1, BorderLayout.EAST);
refresh();
}
private void updateItem() {
if(currentData==null||updating)
return;
currentData.name=name.getText();
currentData.type= type.getText();
currentData.count= (Integer) count.getValue();
currentData.spriteAtlas=spriteAtlas.getEdit().getText();
currentData.sprite=sprite.getText();
currentData.map=map.getEdit().getText();
currentData.radiusFactor= (Float) radiusFactor.getValue();
ArrayList<String> tags = new ArrayList<>();
for (Enumeration<String> e = POIModel.elements(); e.hasMoreElements();){
tags.add(e.nextElement());
}
currentData.questTags = tags.toArray(currentData.questTags);
QuestController.getInstance().refresh();
filterExisting(POIModel);
}
public void setCurrent(PointOfInterestData data)
{
currentData=data;
refresh();
}
private void addSelected(){
if (existingTags.getSelectedIndex()>-1)
POIModel.addElement(existingTags.getModel().getElementAt(existingTags.getSelectedIndex()));
updateItem();
}
private void removeSelected(){
if (POITags.getSelectedIndex()>-1)
POIModel.remove(POITags.getSelectedIndex());
updateItem();
}
private void filterExisting(DefaultListModel<String> filter){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (Enumeration<String> e = QuestController.getInstance().getPOITags().elements(); e.hasMoreElements();){
String toTest = e.nextElement();
if (toTest != null & !filter.contains(toTest)){
toReturn.addElement(toTest);
}
}
existingTags.setModel(toReturn);
}
private void manualAdd(DefaultListModel<String> model){
if (!manualEntry.getText().trim().isEmpty())
model.addElement(manualEntry.getText().trim());
manualEntry.setText("");
updateItem();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
name.setText(currentData.name);
type.setText(currentData.type);
count.setValue(currentData.count);
spriteAtlas.getEdit().setText(currentData.spriteAtlas);
sprite.setText(currentData.sprite);
map.getEdit().setText(currentData.map);
radiusFactor.setValue(currentData.radiusFactor);
preview.setSpritePath(currentData.spriteAtlas,currentData.sprite);
POIModel.clear();
for(String val : currentData.questTags) {
if (val != null)
POIModel.addElement(val);
}
filterExisting(POIModel);
updating=false;
}
}

View File

@@ -1,6 +1,134 @@
package forge.adventure.editor;
import java.awt.*;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import forge.adventure.data.PointOfInterestData;
import forge.adventure.util.Config;
import forge.adventure.util.Paths;
public class PointOfInterestEditor extends Component {
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.util.HashMap;
public class PointOfInterestEditor extends JComponent {
DefaultListModel<PointOfInterestData> model = new DefaultListModel<>();
JList<PointOfInterestData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
PointOfInterestEdit edit=new PointOfInterestEdit();
static HashMap<String,SwingAtlas> atlas=new HashMap<>();
public static class PointOfInterestRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof PointOfInterestData))
return label;
PointOfInterestData poi=(PointOfInterestData) value;
// Get the renderer component from parent class
label.setText(poi.name);
if(!atlas.containsKey(poi.spriteAtlas))
atlas.put(poi.spriteAtlas,new SwingAtlas(Config.instance().getFile(poi.spriteAtlas)));
SwingAtlas poiAtlas = atlas.get(poi.spriteAtlas);
if(poiAtlas.has(poi.sprite))
label.setIcon(poiAtlas.get(poi.sprite));
else
{
ImageIcon img=poiAtlas.getAny();
if(img!=null)
label.setIcon(img);
}
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public PointOfInterestEditor()
{
list.setCellRenderer(new PointOfInterestEditor.PointOfInterestRenderer());
list.addListSelectionListener(e -> PointOfInterestEditor.this.updateEdit());
addButton("add", e -> PointOfInterestEditor.this.addItem());
addButton("remove", e -> PointOfInterestEditor.this.remove());
addButton("copy", e -> PointOfInterestEditor.this.copy());
addButton("load", e -> PointOfInterestEditor.this.load());
addButton("save", e -> PointOfInterestEditor.this.save());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(new JScrollPane(list), BorderLayout.LINE_START);
toolBar.setFloatable(false);
add(toolBar, BorderLayout.PAGE_START);
add(edit,BorderLayout.CENTER);
load();
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
PointOfInterestData data=new PointOfInterestData(model.get(selected));
model.add(model.size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrent(model.get(selected));
}
void save()
{
Array<PointOfInterestData> allEnemies=new Array<>();
for(int i=0;i<model.getSize();i++)
allEnemies.add(model.get(i));
Json json = new Json(JsonWriter.OutputType.json);
FileHandle handle = Config.instance().getFile(Paths.POINTS_OF_INTEREST);
handle.writeString(json.prettyPrint(json.toJson(allEnemies,Array.class, PointOfInterestData.class)),false);
}
void load()
{
model.clear();
Array<PointOfInterestData> allEnemies=new Array<>();
Json json = new Json();
FileHandle handle = Config.instance().getFile(Paths.POINTS_OF_INTEREST);
if (handle.exists())
{
allEnemies =json.fromJson(Array.class, PointOfInterestData.class, handle);
}
for (int i=0;i<allEnemies.size;i++) {
model.add(i,allEnemies.get(i));
}
QuestController.getInstance().load();
}
void addItem()
{
PointOfInterestData data=new PointOfInterestData();
data.name="PoI "+model.getSize();
model.add(model.size(),data);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
}
}

View File

@@ -0,0 +1,236 @@
package forge.adventure.editor;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import forge.adventure.data.AdventureQuestData;
import forge.adventure.data.EnemyData;
import forge.adventure.data.PointOfInterestData;
import forge.adventure.util.Config;
import forge.adventure.util.Paths;
import javax.swing.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class QuestController {
public final DefaultListModel<String> POITags = new DefaultListModel<>();
public final DefaultListModel<String> enemyTags = new DefaultListModel<>();
public final DefaultListModel<String> questEnemyTags = new DefaultListModel<>();
public final DefaultListModel<String> questTags = new DefaultListModel<>();
public final DefaultListModel<String> questPOITags = new DefaultListModel<>();
private final DefaultListModel<PointOfInterestData> allPOI = new DefaultListModel<>();
private final DefaultListModel<EnemyData> allEnemies = new DefaultListModel<>();
private final DefaultListModel<String> questSourceTags = new DefaultListModel<>();
private final DefaultListModel<AdventureQuestData> allQuests = new DefaultListModel<>();
private static QuestController instance;
public static QuestController getInstance() {
if (instance == null)
instance = new QuestController();
return instance;
}
public DefaultListModel<AdventureQuestData> getAllQuests() {
return allQuests;
}
private QuestController(){
load();
}
public DefaultListModel<String> getEnemyTags(){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (int i = 0; i < enemyTags.size(); i++){
toReturn.removeElement(enemyTags.get(i));
toReturn.addElement(enemyTags.get(i));
}
List<Object> sortedObjects = Arrays.stream(toReturn.toArray()).sorted().collect(Collectors.toList());
toReturn.clear();
for (Object sortedObject : sortedObjects) {
toReturn.addElement((String) sortedObject);
}
return toReturn;
}
public DefaultListModel<String> getPOITags(){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (int i = 0; i < POITags.size(); i++){
toReturn.removeElement(POITags.get(i));
toReturn.addElement(POITags.get(i));
}
List<Object> sortedObjects = Arrays.stream(toReturn.toArray()).sorted().collect(Collectors.toList());
toReturn.clear();
for (Object sortedObject : sortedObjects) {
toReturn.addElement((String) sortedObject);
}
return toReturn;
}
public DefaultListModel<String> getSourceTags(){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (int i = 0; i < questSourceTags.size(); i++)
{
toReturn.removeElement(questSourceTags.get(i));
toReturn.addElement(questSourceTags.get(i));
}
List<Object> sortedObjects = Arrays.stream(toReturn.toArray()).sorted().collect(Collectors.toList());
toReturn.clear();
for (Object sortedObject : sortedObjects) {
toReturn.addElement((String) sortedObject);
}
return toReturn;
}
public void refresh(){
enemyTags.clear();
POITags.clear();
questPOITags.clear();
questEnemyTags.clear();
questTags.clear();
questSourceTags.clear();
for (int i=0;i<allEnemies.size();i++) {
for (String tag : allEnemies.get(i).questTags)
{
enemyTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
enemyTags.addElement(tag);
}
}
for (int i=0;i<allPOI.size();i++) {
for (String tag : allPOI.get(i).questTags)
{
POITags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
POITags.addElement(tag);
}
}
for (int i=0;i<allQuests.size();i++) {
for (String tag : allQuests.get(i).questEnemyTags)
{
questEnemyTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questEnemyTags.addElement(tag);
}
for (String tag : allQuests.get(i).questPOITags)
{
questPOITags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questPOITags.addElement(tag);
}
for (String tag : allQuests.get(i).questSourceTags)
{
questSourceTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questSourceTags.addElement(tag);
}
}
}
public void load()
{
allEnemies.clear();
Array<EnemyData> enemyJSON=new Array<>();
Json json = new Json();
FileHandle handle = Config.instance().getFile(Paths.ENEMIES);
if (handle.exists())
{
enemyJSON = json.fromJson(Array.class, EnemyData.class, handle);
}
for (int i=0;i<enemyJSON.size;i++) {
allEnemies.add(i,enemyJSON.get(i));
for (String tag : enemyJSON.get(i).questTags)
{
enemyTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
enemyTags.addElement(tag);
}
}
allPOI.clear();
Array<PointOfInterestData> POIJSON=new Array<>();
json = new Json();
handle = Config.instance().getFile(Paths.POINTS_OF_INTEREST);
if (handle.exists())
{
POIJSON = json.fromJson(Array.class, PointOfInterestData.class, handle);
}
for (int i=0;i<POIJSON.size;i++) {
allPOI.add(i,POIJSON.get(i));
for (String tag : POIJSON.get(i).questTags)
{
POITags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
POITags.addElement(tag);
}
}
allQuests.clear();
Array<AdventureQuestData> questJSON=new Array<>();
json = new Json();
handle = Config.instance().getFile(Paths.QUESTS);
if (handle.exists())
{
questJSON = json.fromJson(Array.class, AdventureQuestData.class, handle);
}
for (int i=0;i<questJSON.size;i++) {
AdventureQuestData template = questJSON.get(i);
template.isTemplate = true;
allQuests.add(i,template);
for (String tag : template.questEnemyTags)
{
questEnemyTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questEnemyTags.addElement(tag);
}
for (String tag : template.questPOITags)
{
questPOITags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questPOITags.addElement(tag);
}
for (String tag : template.questSourceTags)
{
questSourceTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questSourceTags.addElement(tag);
}
}
}
void save()
{
Json json = new Json(JsonWriter.OutputType.json);
FileHandle handle = Config.instance().getFile(Paths.QUESTS);
AdventureQuestData[] saveData = Arrays.stream(allQuests.toArray()).map(AdventureQuestData.class::cast).toArray(AdventureQuestData[]::new);
handle.writeString(json.prettyPrint(json.toJson(saveData,Array.class, AdventureQuestData.class)),false);
}
}

View File

@@ -0,0 +1,374 @@
package forge.adventure.editor;
import forge.adventure.data.AdventureQuestData;
import javax.swing.*;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Enumeration;
public class QuestEdit extends FormPanel {
AdventureQuestData currentData;
//public JSpinner spawnWeight= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
public JLabel id = new JLabel();
public JTextField name=new JTextField();
public JTextField description=new JTextField();
public JTextField synopsis=new JTextField();
public JCheckBox storyQuest = new JCheckBox();
public JTextField rewardDescription=new JTextField();
public QuestStageEditor stages =new QuestStageEditor();
JTabbedPane tabs =new JTabbedPane();
public DialogEditor prologueEditor =new DialogEditor();
public DialogEditor epilogueEditor =new DialogEditor();
public DialogEditor offerEditor = new DialogEditor();
public DialogEditor failureEditor = new DialogEditor();
public DialogEditor declineEditor = new DialogEditor();
private boolean updating=false;
JTextField manualEntry = new JTextField(20);
DefaultListModel<String> existingModel = new DefaultListModel<>();
DefaultListModel<String> selectedTagModel = new DefaultListModel<>();
JList<String> existingTags;
JList<String> selectedTags;
JPanel tags = new JPanel();
public QuestEdit()
{
FormPanel center=new FormPanel() { };
center.add("Quest ID:", id);
center.add("Name:",name);
//center.add("Synopsis (dev mode):",synopsis);
center.add("Description:",description);
center.add("Reward Description:",rewardDescription);
center.add("Storyline Quest", storyQuest);
add(center);
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(tabs);
tabs.add("Quest Stages", getStagesTab());
tabs.add("Offer Dialog",getOfferTab());
tabs.add("Prologue",getPrologueTab());
tabs.add("Epilogue",getEpilogueTab());
tabs.add("Failure Dialog", getFailureTab());
tabs.add("Decline Dialog",getDeclineTab());
tabs.add("Quest Sources", getSourcesTab());
existingTags = new JList<>();
existingTags.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addSelected");
existingTags.getActionMap().put("addSelected", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
addSelected();
int index = existingTags.getSelectedIndex();
String selectedItem = existingTags.getSelectedValue();
if (selectedItem != null) {
selectedTagModel.addElement(selectedItem);
existingTags.grabFocus();
existingTags.setSelectedIndex(index<existingModel.size()?index:index-1);
}
}
});
existingModel = QuestController.getInstance().getSourceTags();
existingTags.setModel(existingModel);
selectedTags = new JList<>();
selectedTagModel = new DefaultListModel<>();
selectedTags.setModel(selectedTagModel);
selectedTags.getModel().addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
doUpdate();
}
@Override
public void intervalRemoved(ListDataEvent e) {
doUpdate();
}
@Override
public void contentsChanged(ListDataEvent e) {
doUpdate();
}
});
JButton select = new JButton("Select");
select.addActionListener(q -> addSelected());
JButton add = new JButton("Manual Add");
add.addActionListener(q -> manualAdd(selectedTagModel));
JButton remove = new JButton("Remove Item");
remove.addActionListener(q -> removeSelected());
tags.setLayout(new BorderLayout());
JPanel left = new JPanel();
left.setLayout(new BorderLayout());
left.add(new JLabel("Tags already in use"), BorderLayout.NORTH);
JScrollPane listScroller = new JScrollPane(existingTags);
listScroller.setMinimumSize(new Dimension(400, 800));
left.add(listScroller, BorderLayout.CENTER);
tags.add(left, BorderLayout.WEST);
FormPanel tagEdit = new FormPanel();
tagEdit.setLayout(new BorderLayout());
FormPanel mappedTags = new FormPanel();
mappedTags.setLayout(new BorderLayout());
mappedTags.add(new JLabel("Tags Mapped to this object"), BorderLayout.NORTH);
JScrollPane listScroller2 = new JScrollPane(selectedTags);
listScroller2.setMinimumSize(new Dimension(400, 800));
mappedTags.add(listScroller2, BorderLayout.CENTER);
tagEdit.add(mappedTags,BorderLayout.EAST);
JPanel controlPanel = new JPanel();
controlPanel.add(select);
controlPanel.add(add);
controlPanel.add(manualEntry);
manualEntry.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addTyped");
manualEntry.getActionMap().put("addTyped", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!manualEntry.getText().trim().isEmpty()) {
manualAdd(selectedTagModel);
manualEntry.grabFocus();
}
}
});
controlPanel.add(remove);
tagEdit.add(controlPanel, BorderLayout.CENTER);
tags.add(tagEdit,BorderLayout.CENTER);
JTextArea right1 = new JTextArea("This is really just to pad some space\n" +
"but also to explain the use of tags.\n" +
"Rather than adding 100's of object names\n" +
"to every quest definition, instead we will\n"+
"categorize enemies and points of interest with\n"+
"tags and reference those categories in quests");
right1.setEnabled(false);
tags.add(right1, BorderLayout.EAST);
name.getDocument().addDocumentListener(new DocumentChangeListener(QuestEdit.this::updateQuest));
description.getDocument().addDocumentListener(new DocumentChangeListener(QuestEdit.this::updateQuest));
synopsis.getDocument().addDocumentListener(new DocumentChangeListener(QuestEdit.this::updateQuest));
storyQuest.getModel().addChangeListener(q -> QuestEdit.this.updateQuest());
rewardDescription.getDocument().addDocumentListener(new DocumentChangeListener(QuestEdit.this::updateQuest));
stages.addChangeListener(e -> QuestEdit.this.updateQuest());
offerEditor.addChangeListener(e -> QuestEdit.this.updateQuest());
prologueEditor.addChangeListener(e -> QuestEdit.this.updateQuest());
epilogueEditor.addChangeListener(e -> QuestEdit.this.updateQuest());
failureEditor.addChangeListener(e -> QuestEdit.this.updateQuest());
declineEditor.addChangeListener(e -> QuestEdit.this.updateQuest());
stages.addChangeListener(e -> QuestEdit.this.updateQuest());
selectedTagModel.addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
QuestEdit.this.updateQuest();
}
@Override
public void intervalRemoved(ListDataEvent e) {
QuestEdit.this.updateQuest();
}
@Override
public void contentsChanged(ListDataEvent e) {
QuestEdit.this.updateQuest();
}
});
refresh();
}
private void doUpdate(){
QuestEdit.this.updateQuest();
}
private void addSelected(){
if (existingTags.getSelectedIndex()>-1)
selectedTagModel.addElement(existingTags.getModel().getElementAt(existingTags.getSelectedIndex()));
doUpdate();
}
private void removeSelected(){
if (selectedTags.getSelectedIndex()>-1)
selectedTagModel.remove(selectedTags.getSelectedIndex());
doUpdate();
}
private void filterExisting(DefaultListModel<String> filter){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (Enumeration<String> e = QuestController.getInstance().getSourceTags().elements(); e.hasMoreElements();){
String toTest = e.nextElement();
if (toTest != null & !filter.contains(toTest)){
toReturn.addElement(toTest);
}
}
existingTags.setModel(toReturn);
}
private void manualAdd(DefaultListModel<String> model){
if (!manualEntry.getText().trim().isEmpty())
model.addElement(manualEntry.getText().trim());
manualEntry.setText("");
doUpdate();
}
protected void updateQuest() {
if(currentData==null||updating)
return;
currentData.name = name.getText();
currentData.storyQuest = storyQuest.isSelected();
currentData.synopsis = synopsis.getText();
currentData.description = description.getText();
currentData.rewardDescription = rewardDescription.getText();
currentData.stages = stages.getStages();
currentData.offerDialog = offerEditor.getDialogData();
currentData.prologue = prologueEditor.getDialogData();
currentData.epilogue = epilogueEditor.getDialogData();
currentData.failureDialog = failureEditor.getDialogData();
currentData.declinedDialog = declineEditor.getDialogData();
ArrayList<String> tags = new ArrayList<>();
for (Enumeration<String> e = selectedTagModel.elements(); e.hasMoreElements();){
tags.add(e.nextElement());
}
currentData.questSourceTags = tags.toArray(currentData.questSourceTags);
QuestController.getInstance().refresh();
filterExisting(selectedTagModel);
}
public void setCurrentQuest(AdventureQuestData data)
{
currentData=data;
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
setVisible(true);
updating=true;
id.setText(currentData.getID() + "");
name.setText(currentData.name);
description.setText(currentData.description);
synopsis.setText(currentData.synopsis);
storyQuest.getModel().setSelected(currentData.storyQuest);
rewardDescription.setText(currentData.rewardDescription);
stages.setStages(currentData);
offerEditor.loadData(currentData.offerDialog);
prologueEditor.loadData(currentData.prologue);
epilogueEditor.loadData(currentData.epilogue);
failureEditor.loadData(currentData.failureDialog);
declineEditor.loadData(currentData.declinedDialog);
selectedTagModel.clear();
for(String val : currentData.questSourceTags) {
if (val != null)
selectedTagModel.addElement(val);
}
filterExisting(selectedTagModel);
updating=false;
}
public JPanel getOfferTab(){
JPanel offerTab = new JPanel();
offerTab.setLayout(new BoxLayout(offerTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(offerEditor);
offerTab.add(center);
return offerTab;
}
public JPanel getPrologueTab(){
JPanel prologueTab = new JPanel();
prologueTab.setLayout(new BoxLayout(prologueTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(prologueEditor);
prologueTab.add(center);
return prologueTab;
}
public JPanel getEpilogueTab(){
JPanel epilogueTab = new JPanel();
epilogueTab.setLayout(new BoxLayout(epilogueTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(epilogueEditor);
epilogueTab.add(center);
return epilogueTab;
}
public JPanel getFailureTab(){
JPanel failureTab = new JPanel();
failureTab.setLayout(new BoxLayout(failureTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(failureEditor);
failureTab.add(center);
return failureTab;
}
public JPanel getDeclineTab(){
JPanel declineTab = new JPanel();
declineTab.setLayout(new BoxLayout(declineTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(declineEditor);
declineTab.add(center);
return declineTab;
}
public JPanel getStagesTab(){
JPanel stagesTab = new JPanel();
stagesTab.setLayout(new BoxLayout(stagesTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(stages);
stagesTab.add(center);
return stagesTab;
}
public JPanel getSourcesTab(){
JPanel sourcesTab = new JPanel();
sourcesTab.setLayout(new BoxLayout(sourcesTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(tags);
sourcesTab.add(center);
return sourcesTab;
}
}

View File

@@ -0,0 +1,104 @@
package forge.adventure.editor;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import forge.adventure.data.AdventureQuestData;
import forge.adventure.util.Config;
import forge.adventure.util.Paths;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class QuestEditor extends JComponent {
JList<AdventureQuestData> list = new JList<>(QuestController.getInstance().getAllQuests());
JToolBar toolBar = new JToolBar("toolbar");
QuestEdit edit=new QuestEdit();
public class QuestDataRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof AdventureQuestData))
return label;
AdventureQuestData quest=(AdventureQuestData) value;
// Get the renderer component from parent class
label.setText(quest.name);
return label;
}
}
public void addButton(String name,ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public QuestEditor()
{
list.setCellRenderer(new QuestDataRenderer());
list.addListSelectionListener(e -> QuestEditor.this.updateEdit());
addButton("Add Quest", e -> QuestEditor.this.addStage());
addButton("Remove", e -> QuestEditor.this.remove());
addButton("Copy", e -> QuestEditor.this.copy());
addButton("Load", e -> QuestController.getInstance().load());
addButton("Save", e -> QuestEditor.this.save());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(new JScrollPane(list), BorderLayout.LINE_START);
toolBar.setFloatable(false);
add(toolBar, BorderLayout.PAGE_START);
add(edit,BorderLayout.CENTER);
edit.setVisible(false);
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
AdventureQuestData data=new AdventureQuestData(QuestController.getInstance().getAllQuests().get(selected));
data.isTemplate = true;
QuestController.getInstance().getAllQuests().add(QuestController.getInstance().getAllQuests().size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrentQuest(QuestController.getInstance().getAllQuests().get(selected));
}
void save()
{
Array<AdventureQuestData> allQuests=new Array<>();
for(int i=0;i<QuestController.getInstance().getAllQuests().getSize();i++) {
allQuests.add(QuestController.getInstance().getAllQuests().get(i));
}
Json json = new Json(JsonWriter.OutputType.json);
FileHandle handle = Config.instance().getFile(Paths.QUESTS);
handle.writeString(json.prettyPrint(json.toJson(allQuests,Array.class, AdventureQuestData.class)),false);
QuestController.getInstance().save();
}
void addStage()
{
AdventureQuestData data=new AdventureQuestData();
data.name="New Quest "+QuestController.getInstance().getAllQuests().getSize();
data.isTemplate = true;
QuestController.getInstance().getAllQuests().add(QuestController.getInstance().getAllQuests().size(),data);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
QuestController.getInstance().getAllQuests().remove(selected);
edit.setVisible(false);
}
}

View File

@@ -0,0 +1,606 @@
package forge.adventure.editor;
import forge.adventure.data.*;
import forge.adventure.util.AdventureQuestController;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class QuestStageEdit extends FormPanel {
private boolean updating=false;
AdventureQuestStage currentData;
AdventureQuestData currentQuestData;
public JTextField name=new JTextField("", 25);
public JTextField description=new JTextField("", 25);
public TextListEdit itemNames =new TextListEdit();
public TextListEdit spriteNames =new TextListEdit();
public TextListEdit equipNames =new TextListEdit();
public TextListEdit prerequisites =new TextListEdit(currentQuestData!=null?(String[])Arrays.stream(currentQuestData.stages).filter(q -> !q.equals(currentData)).toArray():new String[]{}); //May not be the right way to do this, will come back to it.
JTabbedPane tabs =new JTabbedPane();
DialogEditor prologueEditor = new DialogEditor();
DialogEditor epilogueEditor = new DialogEditor();
public QuestStageEdit()
{
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(getInfoTab());
add(tabs);
tabs.add("Objective", getObjectiveTab());
tabs.add("Prologue",getPrologueTab());
tabs.add("Epilogue",getEpilogueTab());
tabs.add("Prerequisites",getPrereqTab());
//temp
nyi.setForeground(Color.red);
//
addListeners();
}
public JPanel getInfoTab(){
JPanel infoTab = new JPanel();
FormPanel center=new FormPanel();
center.add("name:",name);
center.add("description:",description);
name.setSize(400, name.getHeight());
description.setSize(400, description.getHeight());
infoTab.add(center);
name.getDocument().addDocumentListener(new DocumentChangeListener(QuestStageEdit.this::updateStage));
description.getDocument().addDocumentListener(new DocumentChangeListener(QuestStageEdit.this::updateStage));
prerequisites.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(QuestStageEdit.this::updateStage));
return infoTab;
}
public JPanel getPrologueTab(){
JPanel prologueTab = new JPanel();
prologueTab.setLayout(new BoxLayout(prologueTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(prologueEditor);
prologueTab.add(center);
return prologueTab;
}
public JPanel getEpilogueTab(){
JPanel epilogueTab = new JPanel();
epilogueTab.setLayout(new BoxLayout(epilogueTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(epilogueEditor);
epilogueTab.add(center);
return epilogueTab;
}
private JComboBox<AdventureQuestController.ObjectiveTypes> objectiveType;
private final JLabel nyi = new JLabel("Not yet implemented");
private final JTextField deliveryItem=new JTextField(25);
private final JTextField mapFlag = new JTextField(25);
private Box mapFlagGroup;
private final JSpinner flagSpinner = new JSpinner(new SpinnerNumberModel(1, 1, 1000, 1));
private Box flagValueGroup;
private final JCheckBox anyPOI = new JCheckBox("Any Point of Interest matching");
private final JCheckBox here = new JCheckBox("Use current map instead of selecting tags");
private final JCheckBox mixedEnemies = new JCheckBox("Mixture of enemy types matching");
private final JLabel count1Description = new JLabel("(Count 1 description)");
private final JLabel count2Description = new JLabel("(Count 2 description)");
private final JLabel count3Description = new JLabel("(Count 3 description)");
private final JSpinner count1Spinner = new JSpinner(new SpinnerNumberModel(1, 0, 100, 1));
private final JSpinner count2Spinner = new JSpinner(new SpinnerNumberModel(1, 0, 100, 1));
private final JSpinner count3Spinner = new JSpinner(new SpinnerNumberModel(1, 0, 100, 1));
private final JLabel arenaLabel = new JLabel("Enter the arena and prove your worth. (Note: Please be sure the PoIs selected have an arena)");
private final JLabel clearLabel = new JLabel("Clear all enemies from the target area.");
private final JLabel defeatLabel = new JLabel("Defeat a number of enemies of the indicated type.");
private final JLabel deliveryLabel = new JLabel("Travel to the given destination to deliver an item (not tracked in inventory).");
private final JLabel escortLabel = new JLabel("Protect your target as they travel to their destination.");
private final JLabel fetchLabel = new JLabel("Obtain the requested items (not tracked in inventory).");
private final JLabel findLabel = new JLabel("Locate the and enter a PoI.");
private final JLabel gatherLabel = new JLabel("Have the requested item in your inventory (tracked in inventory)");
private final JLabel giveLabel = new JLabel("Have the requested items removed from your inventory.");
private final JLabel huntLabel = new JLabel("Track down and defeat your target (on the overworld map).");
private final JLabel leaveLabel = new JLabel("Exit the current PoI and return to the overworld map.");
private final JLabel noneLabel = new JLabel("No visible objective. Use in coordination with hidden parallel objectives to track when to progress");
private final JLabel patrolLabel = new JLabel("Get close to generated coordinates before starting your next objective");
private final JLabel rescueLabel = new JLabel("Reach and rescue the target");
private final JLabel siegeLabel = new JLabel("Travel to the target location and defeat enemies attacking it");
private final JLabel mapFlagLabel = new JLabel("Have a map flag set to a minimum value");
private final JLabel questFlagLabel = new JLabel("Have a global quest flag set to a minimum value");
private final JLabel travelLabel = new JLabel("Travel to the given destination.");
private final JLabel useLabel = new JLabel("Use the indicated item from your inventory.");
private JTabbedPane poiPane = new JTabbedPane();
private final QuestTagSelector poiSelector = new QuestTagSelector("Destination Tags", false,true);
private final QuestTagSelector enemySelector = new QuestTagSelector("Enemy Tags", true,false);
private final JTextField poiTokenInput = new JTextField(25);
private final JLabel poiTokenLabel = new JLabel();
private final JLabel poiTokenDescription = new JLabel(
"At the bottom of many objectives involving a PoI, you will see a text field in the format of '$poi_#'." +
"Enter that tag here to ignore the PoI tag selector of this stage and instead use the same PoI that was selected " +
"for that stage as the target PoI for this one as well.");
private void hideAllControls(){
arenaLabel.setVisible(false);
clearLabel.setVisible(false);
deliveryLabel.setVisible(false);
defeatLabel.setVisible(false);
escortLabel.setVisible(false);
fetchLabel.setVisible(false);
findLabel.setVisible(false);
gatherLabel.setVisible(false);
giveLabel.setVisible(false);
huntLabel.setVisible(false);
leaveLabel.setVisible(false);
noneLabel.setVisible(false);
patrolLabel.setVisible(false);
rescueLabel.setVisible(false);
siegeLabel.setVisible(false);
mapFlagLabel.setVisible(false);
questFlagLabel.setVisible(false);
travelLabel.setVisible(false);
useLabel.setVisible(false);
deliveryItem.setVisible(false);
mapFlagGroup.setVisible(false);
flagValueGroup.setVisible(false);
anyPOI.setVisible(false);
here.setVisible(false);
mixedEnemies.setVisible(false);
enemySelector.setVisible(false);
count1Description.setVisible(false);
count2Description.setVisible(false);
count3Description.setVisible(false);
count1Spinner.setVisible(false);
count2Spinner.setVisible(false);
count3Spinner.setVisible(false);
poiPane.setVisible(false);
poiTokenLabel.setVisible(false);
nyi.setVisible(false);
}
private void switchPanels(){
hideAllControls();
if (objectiveType.getSelectedItem() == null){
return;
}
switch(objectiveType.getSelectedItem().toString()){
case "Arena":
arenaLabel.setVisible(true);
poiPane.setVisible(true);
anyPOI.setVisible(true);
here.setVisible(true);
poiTokenLabel.setVisible(true);
break;
case "Clear":
clearLabel.setVisible(true);
nyi.setVisible(true);
poiPane.setVisible(true);
count1Description.setText("Target candidate percentile");
count1Description.setVisible(true);
count1Spinner.setVisible(true);
count2Description.setText("Percent variance");
count2Description.setVisible(true);
count2Spinner.setVisible(true);
anyPOI.setVisible(true);
here.setVisible(true);
poiTokenLabel.setVisible(true);
break;
case "Defeat":
defeatLabel.setVisible(true);
mixedEnemies.setVisible(true);
count1Description.setText("Number to defeat");
count1Description.setVisible(true);
count1Spinner.setVisible(true);
count2Description.setText("Maximum losses");
count2Description.setVisible(true);
count2Spinner.setVisible(true);
enemySelector.setVisible(true);
break;
case "Delivery":
deliveryLabel.setVisible(true);
nyi.setVisible(true);
poiPane.setVisible(true);
anyPOI.setVisible(true);
here.setVisible(true);
deliveryItem.setVisible(true);
poiTokenLabel.setVisible(true);
break;
case "Escort":
escortLabel.setVisible(true);
nyi.setVisible(true);
poiPane.setVisible(true);
here.setVisible(true);
spriteNames.setVisible(true);
poiTokenLabel.setVisible(true);
break;
case "Fetch":
fetchLabel.setVisible(true);
nyi.setVisible(true);
poiPane.setVisible(true);
anyPOI.setVisible(true);
here.setVisible(true);
deliveryItem.setVisible(true);
enemySelector.setVisible(true);
poiTokenLabel.setVisible(true);
break;
case "Find":
findLabel.setVisible(true);
nyi.setVisible(true);
poiPane.setVisible(true);
anyPOI.setVisible(true);
poiTokenLabel.setVisible(true);
break;
case "Gather":
gatherLabel.setVisible(true);
gatherLabel.setVisible(true);
nyi.setVisible(true);
itemNames.setVisible(true);
break;
case "Give":
giveLabel.setVisible(true);
nyi.setVisible(true);
itemNames.setVisible(true);
poiPane.setVisible(true);
poiTokenLabel.setVisible(true);
here.setVisible(true);
break;
case "Hunt":
huntLabel.setVisible(true);
enemySelector.setVisible(true);
count1Description.setText("Lifespan (seconds to complete hunt before despawn)");
count1Description.setVisible(true);
count1Spinner.setVisible(true);
count1Spinner.setVisible(true);
break;
case "Leave":
leaveLabel.setVisible(true);
break;
case "None":
noneLabel.setVisible(true);
nyi.setVisible(true);
break;
case "Patrol":
patrolLabel.setVisible(true);
nyi.setVisible(true);
break;
case "Rescue":
rescueLabel.setVisible(true);
nyi.setVisible(true);
poiPane.setVisible(true);
anyPOI.setVisible(true);
poiTokenLabel.setVisible(true);
here.setVisible(true);
spriteNames.setVisible(true);
enemySelector.setVisible(true);
break;
case "Siege":
siegeLabel.setVisible(true);
nyi.setVisible(true);
poiPane.setVisible(true);
poiTokenLabel.setVisible(true);
anyPOI.setVisible(true);
here.setVisible(true);
enemySelector.setVisible(true);
mixedEnemies.setVisible(true);
break;
case "MapFlag":
mapFlagLabel.setVisible(true);
poiPane.setVisible(true);
here.setVisible(true);
anyPOI.setVisible(true);
mapFlagGroup.setVisible(true);
flagValueGroup.setVisible(true);
break;
case "QuestFlag":
nyi.setVisible(true);
questFlagLabel.setVisible(true);
mapFlagGroup.setVisible(true);
flagValueGroup.setVisible(true);
break;
case "Travel":
travelLabel.setVisible(true);
poiPane.setVisible(true);
poiTokenLabel.setVisible(true);
poiTokenInput.setVisible(true);
anyPOI.setVisible(true);
here.setVisible(true);
count1Description.setText("Target % of possible distances");
count1Description.setVisible(true);
count1Spinner.setVisible(true);
count2Description.setText("Plus or minus %");
count2Description.setVisible(true);
count2Spinner.setVisible(true);
break;
case "Use":
useLabel.setVisible(true);
nyi.setVisible(true);
itemNames.setVisible(true);
poiPane.setVisible(true);
anyPOI.setVisible(true);
here.setVisible(true);
poiTokenLabel.setVisible(true);
here.setVisible(true);
break;
}
}
private void changeObjective(){
if (objectiveType.getSelectedItem() != null)
currentData.objective = AdventureQuestController.ObjectiveTypes.valueOf(objectiveType.getSelectedItem().toString());
switchPanels();
}
private JPanel getObjectiveTab(){
objectiveType = new JComboBox<>(AdventureQuestController.ObjectiveTypes.values());
objectiveType.addActionListener( e -> changeObjective());
JPanel objectiveTab = new JPanel();
JScrollPane scrollPane = new JScrollPane();
objectiveTab.add(scrollPane);
FormPanel center=new FormPanel();
center.add(objectiveType);
scrollPane.add(center);
mapFlagGroup = new Box(BoxLayout.Y_AXIS);
mapFlagGroup.add(new JLabel("Map flag to check"));
mapFlagGroup.add(mapFlag);
flagValueGroup = new Box(BoxLayout.Y_AXIS);
flagValueGroup.add(new JLabel("Flag value to check"));
flagValueGroup.add(flagSpinner);
JPanel poiSelectorPane = new JPanel();
poiSelectorPane.setLayout(new BorderLayout());
poiSelectorPane.add(poiSelector, BorderLayout.CENTER);
JPanel poiTokenPanel = new JPanel();
JPanel tokenPanel = new JPanel();
tokenPanel.add(new JLabel("Token to use:"));
tokenPanel.add(poiTokenInput);
tokenPanel.setBorder(new EmptyBorder(10, 10, 30, 10));
poiTokenPanel.add(poiTokenDescription);
poiTokenPanel.add(tokenPanel);
poiTokenPanel.add(here);
GroupLayout poiTokenLayout = new GroupLayout(poiTokenPanel);
poiTokenLayout.setHorizontalGroup(
poiTokenLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(poiTokenDescription)
.addComponent(tokenPanel,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(here));
poiTokenLayout.setVerticalGroup(
poiTokenLayout.createSequentialGroup()
.addComponent(poiTokenDescription)
.addComponent(tokenPanel,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(here));
poiTokenPanel.setLayout(poiTokenLayout);
poiPane.add("Specific PoI", poiTokenPanel);
poiPane.add("Tag Selector", poiSelectorPane);
poiPane.setPreferredSize(new Dimension(0,200));
center.add(arenaLabel);
center.add(clearLabel);
center.add(defeatLabel);
center.add(deliveryLabel);
center.add(escortLabel);
center.add(fetchLabel);
center.add(findLabel);
center.add(gatherLabel);
center.add(giveLabel);
center.add(huntLabel);
center.add(leaveLabel);
center.add(noneLabel);
center.add(patrolLabel);
center.add(rescueLabel);
center.add(siegeLabel);
center.add(mapFlagLabel);
center.add(questFlagLabel);
center.add(travelLabel);
center.add(useLabel);
center.add(nyi);
center.add(deliveryItem);
center.add(mapFlagGroup);
center.add(flagValueGroup);
center.add(anyPOI);
center.add(mixedEnemies);
center.add(enemySelector);
center.add(count1Description);
center.add(count1Spinner);
center.add(count2Description);
center.add(count2Spinner);
center.add(count3Description);
center.add(count3Spinner);
center.add(poiPane);
center.add(poiTokenLabel);
switchPanels();
poiSelector.selectedItems.addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
rebuildPOIList();
rebuildEnemyList();
}
@Override
public void intervalRemoved(ListDataEvent e) {
rebuildPOIList();
rebuildEnemyList();
}
@Override
public void contentsChanged(ListDataEvent e) {
rebuildPOIList();
rebuildEnemyList();
}
});
return center;
}
private void rebuildPOIList(){
List<String> currentList = new ArrayList<>();
for(int i = 0; i< poiSelector.selectedItems.getSize(); i++){
currentList.add(poiSelector.selectedItems.getElementAt(i));
}
currentData.POITags = currentList;
}
private void rebuildEnemyList(){
List<String> currentList = new ArrayList<>();
for(int i = 0; i< enemySelector.selectedItems.getSize(); i++){
currentList.add(enemySelector.selectedItems.getElementAt(i));
}
currentData.enemyTags = currentList;
}
private JPanel getPrereqTab(){
JPanel prereqTab = new JPanel();
prereqTab.add(new JLabel("Insert Prereq data here"));
return prereqTab;
}
private void refresh() {
if(currentData==null)
{
return;
}
setEnabled(false);
updating=true;
objectiveType.setSelectedItem(currentData.objective);
if (objectiveType.getSelectedItem() != null)
currentData.objective = AdventureQuestController.ObjectiveTypes.valueOf(objectiveType.getSelectedItem().toString()); //Ensuring this gets initialized on new
name.setText(currentData.name);
description.setText(currentData.description);
deliveryItem.setText(currentData.deliveryItem);
if (currentData.enemyTags != null){
DefaultListModel<String> selectedEnemies = new DefaultListModel<>();
for (int i = 0; i < currentData.enemyTags.size(); i++) {
selectedEnemies.add(i, currentData.enemyTags.get(i));
}
enemySelector.load(selectedEnemies);
}
if (currentData.POITags != null){
DefaultListModel<String> selectedPOI = new DefaultListModel<>();
for (int i = 0; i < currentData.POITags.size(); i++) {
selectedPOI.add(i, currentData.POITags.get(i));
}
poiSelector.load(selectedPOI);
}
itemNames.setText(currentData.itemNames);
equipNames.setText(currentData.equipNames);
prologueEditor.loadData(currentData.prologue);
epilogueEditor.loadData(currentData.epilogue);
if (currentData.POITags != null){
DefaultListModel<String> selectedPOI = new DefaultListModel<>();
for (int i = 0; i < currentData.POITags.size(); i++) {
selectedPOI.add(i, currentData.POITags.get(i));
}
poiSelector.load(selectedPOI);
}
here.getModel().setSelected(currentData.here);
poiTokenInput.setText(currentData.POIToken);
poiTokenLabel.setText( "To reference this point of interest: $(poi_" + currentData.id + ")");
ArrayList<String> temp = new ArrayList<>();
for (AdventureQuestStage stage : currentQuestData.stages){
if (stage.equals(currentData))
continue;
temp.add(stage.name);
}
prerequisites.setOptions(temp);
count1Spinner.getModel().setValue(currentData.count1);
count2Spinner.getModel().setValue(currentData.count2);
count3Spinner.getModel().setValue(currentData.count3);
updating=false;
setEnabled(true);
}
public void updateStage()
{
if(currentData==null||updating)
return;
currentData.name=name.getText();
currentData.description= description.getText();
currentData.prologue = prologueEditor.getDialogData();
currentData.epilogue = epilogueEditor.getDialogData();
currentData.deliveryItem = deliveryItem.getText();
currentData.itemNames = itemNames.getList()==null?new ArrayList<>():Arrays.asList(itemNames.getList());
currentData.equipNames = equipNames.getList()==null?new ArrayList<>():Arrays.asList(equipNames.getList());
currentData.anyPOI = anyPOI.getModel().isSelected();
currentData.mapFlag = mapFlag.getText();
currentData.mapFlagValue = Integer.parseInt(flagSpinner.getModel().getValue().toString());
currentData.count1 = Integer.parseInt(count1Spinner.getModel().getValue().toString());
currentData.count2 = Integer.parseInt(count2Spinner.getModel().getValue().toString());
currentData.count3 = Integer.parseInt(count3Spinner.getModel().getValue().toString());
currentData.mixedEnemies = mixedEnemies.getModel().isSelected();
currentData.here = here.getModel().isSelected();
currentData.POIToken = poiTokenInput.getText();
rebuildPOIList();
rebuildEnemyList();
emitChanged();
}
public void setCurrentStage(AdventureQuestStage stageData, AdventureQuestData data) {
if (stageData == null)
stageData = new AdventureQuestStage();
if (data == null)
data = new AdventureQuestData();
currentData =stageData;
currentQuestData=data;
setVisible(true);
refresh();
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
private void addListeners(){
deliveryItem.getDocument().addDocumentListener(new DocumentChangeListener(QuestStageEdit.this::updateStage));
mapFlag.getDocument().addDocumentListener(new DocumentChangeListener(QuestStageEdit.this::updateStage));
flagSpinner.getModel().addChangeListener(q -> QuestStageEdit.this.updateStage());
count1Spinner.getModel().addChangeListener(q -> QuestStageEdit.this.updateStage());
count2Spinner.getModel().addChangeListener(q -> QuestStageEdit.this.updateStage());
count3Spinner.getModel().addChangeListener(q -> QuestStageEdit.this.updateStage());
mixedEnemies.getModel().addChangeListener(q -> QuestStageEdit.this.updateStage());
here.getModel().addChangeListener(q -> QuestStageEdit.this.updateStage());
anyPOI.getModel().addChangeListener(q -> QuestStageEdit.this.updateStage());
deliveryItem.getDocument().addDocumentListener(new DocumentChangeListener(QuestStageEdit.this::updateStage));
mapFlag.getDocument().addDocumentListener(new DocumentChangeListener(QuestStageEdit.this::updateStage));
prologueEditor.addChangeListener(q -> QuestStageEdit.this.updateStage());
epilogueEditor.addChangeListener(q -> QuestStageEdit.this.updateStage());
}
}

View File

@@ -0,0 +1,139 @@
package forge.adventure.editor;
import forge.adventure.data.AdventureQuestData;
import forge.adventure.data.AdventureQuestStage;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionListener;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class QuestStageEditor extends JComponent{
DefaultListModel<AdventureQuestStage> model = new DefaultListModel<>();
JList<AdventureQuestStage> list = new JList<>(model);
JScrollPane scroll;
JToolBar toolBar = new JToolBar("toolbar");
QuestStageEdit edit=new QuestStageEdit();
AdventureQuestData currentData;
public class QuestStageRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof AdventureQuestStage))
return label;
AdventureQuestStage stageData=(AdventureQuestStage) value;
label.setText(stageData.name);
//label.setIcon(new ImageIcon(Config.instance().getFilePath(stageData.sourcePath))); //Type icon eventually?
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public QuestStageEditor()
{
list.setCellRenderer(new QuestStageRenderer());
list.addListSelectionListener(e -> QuestStageEditor.this.updateEdit());
addButton("Add Quest Stage", e -> QuestStageEditor.this.addStage());
addButton("Remove Selected", e -> QuestStageEditor.this.remove());
toolBar.setFloatable(false);
setLayout(new BorderLayout());
scroll = new JScrollPane(list);
add(scroll, BorderLayout.WEST);
JPanel editPanel = new JPanel();
editPanel.setLayout(new BorderLayout());
add(toolBar, BorderLayout.NORTH);
editPanel.add(edit,BorderLayout.CENTER);
add(editPanel);
edit.addChangeListener(e -> emitChanged());
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrentStage(model.get(selected),currentData);
}
void addStage()
{
AdventureQuestStage data=new AdventureQuestStage();
data.name = "New Stage";
model.add(model.size(),data);
edit.setVisible(true);
scroll.setVisible(true);
int id = 0;
for (int i = 0; i < model.size(); i++)
{
if (model.get(i).id >= id)
id = model.get(i).id +1;
}
data.id = id;
if (model.size() == 1){
list.setSelectedIndex(0);
}
emitChanged();
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
edit.setVisible(false);
scroll.setVisible(list.getModel().getSize() > 0);
emitChanged();
}
public void setStages(AdventureQuestData data) {
currentData=data;
model.clear();
if(data==null||data.stages==null || data.stages.length == 0)
{
edit.setVisible(false);
return;
}
for (int i=0;i<data.stages.length;i++) {
model.add(i,data.stages[i]);
}
if (model.size() > 0) {
list.setSelectedIndex(0);
}
}
public AdventureQuestStage[] getStages() {
AdventureQuestStage[] stages= new AdventureQuestStage[model.getSize()];
for(int i=0;i<model.getSize();i++)
{
stages[i]=model.get(i);
}
return stages;
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
}

View File

@@ -0,0 +1,107 @@
package forge.adventure.editor;
import javax.swing.*;
import java.awt.*;
public class QuestTagSelector extends JComponent {
DefaultListModel<String> allItems = new DefaultListModel<>();
DefaultListModel<String> selectedItems = new DefaultListModel<>();
JList<String> unselectedList;
JList<String> selectedList;
boolean useEnemyTags = false;
boolean usePOITags = false;
public QuestTagSelector(String title, boolean useEnemyTags, boolean usePOITags)
{
if (useEnemyTags){
this.useEnemyTags = true;
} else if (usePOITags) {
this.usePOITags = true;
}
else{
return;
}
unselectedList = new JList<>(allItems);
selectedList = new JList<>(selectedItems);
// unselectedList.setCellRenderer(new PointOfInterestEditor.PointOfInterestRenderer()); // Replace with use count of tag?
// selectedList.setCellRenderer(new PointOfInterestEditor.PointOfInterestRenderer());
JButton addButton=new JButton("add");
JButton removeButton=new JButton("remove");
addButton.addActionListener( e -> QuestTagSelector.this.addTag());
removeButton.addActionListener( e -> QuestTagSelector.this.removeTag());
BorderLayout layout=new BorderLayout();
setLayout(layout);
if (title.length() > 0)
add(new JLabel(title),BorderLayout.PAGE_START);
add(new JScrollPane(unselectedList), BorderLayout.LINE_START);
add(new JScrollPane(selectedList), BorderLayout.LINE_END);
JPanel buttonPanel = new JPanel();
GridLayout buttonLayout = new GridLayout(2,0);
buttonPanel.setLayout(buttonLayout);
buttonPanel.add(addButton);
buttonPanel.add(removeButton);
add(buttonPanel);
}
public void addTag(){
if (unselectedList.isSelectionEmpty()){
return;
}
for (String toAdd : unselectedList.getSelectedValuesList())
{
if (selectedItems.contains(toAdd)) continue;
selectedItems.addElement(toAdd);
}
refresh();
}
public void removeTag(){
if (selectedList.isSelectionEmpty()){
return;
}
for (String toRemove : selectedList.getSelectedValuesList())
{
selectedItems.removeElement(toRemove);
}
refresh();
}
public void load(DefaultListModel<String> selectedNames)
{
allItems.clear();
selectedItems.clear();
if (useEnemyTags){
allItems = QuestController.getInstance().getEnemyTags();
}
else if (usePOITags) {
allItems = QuestController.getInstance().getPOITags();
}
unselectedList.setModel(allItems);
for (int i=0;i<allItems.size();i++){
if (selectedNames.contains(allItems.get(i))){
selectedItems.addElement(allItems.get(i));
}
}
}
private boolean updating=false;
private void refresh() {
setEnabled(allItems!=null);
if(allItems==null)
{
return;
}
updating=true;
//unselectedList = new JList<>(allItems);
//selectedList = new JList<>(selectedItems);
updating=false;
}
}

View File

@@ -7,18 +7,15 @@ import forge.game.keyword.Keyword;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class RewardEdit extends JComponent {
public class RewardEdit extends FormPanel {
RewardData currentData;
JComboBox typeField =new JComboBox(new String[] { "card", "gold", "life", "deckCard", "item"});
JComboBox typeField =new JComboBox(new String[] { "card", "gold", "life", "deckCard", "item","shards"});
JSpinner probability = new JSpinner(new SpinnerNumberModel(0f, 0, 1, 0.1f));
JSpinner count = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
JSpinner addMaxCount = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
@@ -38,122 +35,41 @@ public class RewardEdit extends JComponent {
public RewardEdit()
{
setLayout(new GridLayout(16,2));
add(new JLabel("Type:")); add(typeField);
add(new JLabel("probability:")); add(probability);
add(new JLabel("count:")); add(count);
add(new JLabel("addMaxCount:")); add(addMaxCount);
add(new JLabel("cardName:")); add(cardName);
add(new JLabel("itemName:")); add(itemName);
add(new JLabel("editions:")); add(editions);
add(new JLabel("colors:")); add(colors);
add(new JLabel("rarity:")); add(rarity);
add(new JLabel("subTypes:")); add(subTypes);
add(new JLabel("cardTypes:")); add(cardTypes);
add(new JLabel("superTypes:")); add(superTypes);
add(new JLabel("manaCosts:")); add(manaCosts);
add(new JLabel("keyWords:")); add(keyWords);
add(new JLabel("colorType:")); add(colorType);
add(new JLabel("cardText:")); add(cardText);
add("Type:",typeField);
add("probability:",probability);
add("count:",count);
add("addMaxCount:",addMaxCount);
add("cardName:",cardName);
add("itemName:",itemName);
add("editions:",editions);
add("colors:",colors);
add("rarity:",rarity);
add("subTypes:",subTypes);
add("cardTypes:",cardTypes);
add("superTypes:",superTypes);
add("manaCosts:",manaCosts);
add("keyWords:",keyWords);
add("colorType:",colorType);
add("cardText:",cardText);
typeField.addActionListener((new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardEdit.this.updateReward();
}
}));
probability.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
RewardEdit.this.updateReward();
}
});
count.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
RewardEdit.this.updateReward();
}
});
addMaxCount.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
RewardEdit.this.updateReward();
}
});
cardName.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
itemName.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
editions.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
colors.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
rarity.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
subTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
cardTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
superTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
manaCosts.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
keyWords.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
colorType.addActionListener((new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardEdit.this.updateReward();
}
}));
cardText.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
typeField.addActionListener((e -> RewardEdit.this.updateReward()));
probability.addChangeListener(e -> RewardEdit.this.updateReward());
count.addChangeListener(e -> RewardEdit.this.updateReward());
addMaxCount.addChangeListener(e -> RewardEdit.this.updateReward());
cardName.getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
itemName.getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
editions.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
colors.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
rarity.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
subTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
cardTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
superTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
manaCosts.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
keyWords.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
colorType.addActionListener((e -> RewardEdit.this.updateReward()));
cardText.getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
}
@@ -167,7 +83,7 @@ public class RewardEdit extends JComponent {
currentData.count= (int) count.getValue();
currentData.addMaxCount= (int) addMaxCount.getValue();
currentData.cardName = cardName.getText().isEmpty()?null:cardName.getText();
currentData.itemName = itemName.getText().isEmpty()?null:itemName.getText();
currentData.itemNames = itemName.getText().isEmpty()?null:itemName.getText().split(",");
currentData.editions = editions.getList();
currentData.colors = colors.getList();
currentData.rarity = rarity.getList();

View File

@@ -5,10 +5,7 @@ import forge.adventure.data.RewardData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
@@ -19,7 +16,7 @@ public class RewardsEditor extends JComponent{
JList<RewardData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
RewardEdit edit=new RewardEdit();
boolean updating;
public class RewardDataRenderer extends DefaultListCellRenderer {
@@ -59,30 +56,10 @@ public class RewardsEditor extends JComponent{
{
list.setCellRenderer(new RewardDataRenderer());
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
RewardsEditor.this.updateEdit();
}
});
addButton("add", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardsEditor.this.addReward();
}
});
addButton("remove", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardsEditor.this.remove();
}
});
addButton("copy", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardsEditor.this.copy();
}
});
list.addListSelectionListener(e -> RewardsEditor.this.updateEdit());
addButton("add", e -> RewardsEditor.this.addReward());
addButton("remove", e -> RewardsEditor.this.remove());
addButton("copy", e -> RewardsEditor.this.copy());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(list, BorderLayout.LINE_START);
@@ -90,14 +67,11 @@ public class RewardsEditor extends JComponent{
add(edit,BorderLayout.CENTER);
edit.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
emitChanged();
}
});
edit.addChangeListener(e -> emitChanged());
}
protected void emitChanged() {
if (updating)
return;
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
@@ -154,6 +128,12 @@ public class RewardsEditor extends JComponent{
}
return rewards;
}
public void clear(){
updating = true;
model.clear();
updating = false;
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}

View File

@@ -0,0 +1,222 @@
package forge.adventure.editor;
import com.badlogic.gdx.graphics.Color;
import forge.adventure.data.BiomeData;
import forge.adventure.data.BiomeStructureData;
import forge.adventure.util.Config;
import forge.adventure.world.BiomeStructure;
import forge.adventure.world.ColorMap;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class StructureEditor extends JComponent{
DefaultListModel<BiomeStructureData> model = new DefaultListModel<>();
JList<BiomeStructureData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
BiomeStructureEdit edit=new BiomeStructureEdit();
BiomeData currentData;
public class StructureDataRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof BiomeStructureData))
return label;
BiomeStructureData structureData=(BiomeStructureData) value;
label.setText("Structure");
label.setIcon(new ImageIcon(Config.instance().getFilePath(structureData.sourcePath)));
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public StructureEditor()
{
list.setCellRenderer(new StructureDataRenderer());
list.addListSelectionListener(e -> StructureEditor.this.updateEdit());
addButton("add", e -> StructureEditor.this.addStructure());
addButton("remove", e -> StructureEditor.this.remove());
addButton("copy", e -> StructureEditor.this.copy());
addButton("test", e -> StructureEditor.this.test());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(list, BorderLayout.WEST);
add(toolBar, BorderLayout.NORTH);
add(edit,BorderLayout.CENTER);
edit.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
emitChanged();
}
});
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
private void test() {
if (list.isSelectionEmpty())
return;
long start = System.currentTimeMillis();
BiomeStructureData data = model.get(list.getSelectedIndex());
try
{
BiomeStructure struct = new BiomeStructure(data, System.currentTimeMillis(),
(int) (currentData.width * EditorMainWindow.worldEditor.width.intValue() ),
(int) (currentData.width * EditorMainWindow.worldEditor.height.intValue()));
BufferedImage sourceImage= null;
try {
sourceImage = ImageIO.read(new File(struct.sourceImagePath()));
ColorMap sourceColorMap=new ColorMap(sourceImage.getWidth(),sourceImage.getHeight());
for(int y=0;y<sourceColorMap.getHeight();y++)
for(int x=0;x<sourceColorMap.getWidth();x++)
{
Color c =new Color();
Color.argb8888ToColor(c,sourceImage.getRGB(x,y));
sourceColorMap.setColor(x,y,c);
}
BufferedImage maskImage= ImageIO.read(new File(struct.maskImagePath()));
ColorMap maskColorMap=new ColorMap(maskImage.getWidth(),maskImage.getHeight());
for(int y=0;y<maskColorMap.getHeight();y++)
for(int x=0;x<maskColorMap.getWidth();x++)
{
Color c =new Color();
Color.argb8888ToColor(c,maskImage.getRGB(x,y));
maskColorMap.setColor(x,y,c);
}
struct.initialize(sourceColorMap,maskColorMap);
} catch (IOException e) {
throw new RuntimeException(e);
}
float calcTime=(System.currentTimeMillis() - start)/1000f;
JLabel label = new JLabel();
ColorMap colorMap=struct.image;
BufferedImage image = new BufferedImage(colorMap.getWidth(),colorMap.getHeight(),BufferedImage.TYPE_INT_ARGB);
for(int y=0;y<colorMap.getHeight();y++)
for(int x=0;x<colorMap.getWidth();x++)
image.setRGB(x,y,Color.argb8888(colorMap.getColor(x,y)));
if (image.getWidth() < 640 | image.getHeight() < 640) {
if (image.getHeight() > image.getWidth()) {
BufferedImage nimage = new BufferedImage(640, 640 * (image.getWidth() / image.getHeight()), BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(640 / image.getHeight(), 640 / image.getHeight());
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
image = scaleOp.filter(image, nimage);
} else {
BufferedImage nimage = new BufferedImage(640 * (image.getHeight() / image.getWidth()), 640, BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(640 / image.getWidth(), 640 / image.getWidth());
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
image = scaleOp.filter(image, nimage);
}
}
label.setIcon(new ImageIcon(image));
label.setSize(640, 640);
JOptionPane.showMessageDialog(this, label,"Calculating took "+ calcTime+" seconds",JOptionPane.PLAIN_MESSAGE);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "WaveFunctionCollapse was not successful","can not calculate function "+e.getMessage(),JOptionPane.ERROR_MESSAGE);
}
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
BiomeStructureData data=new BiomeStructureData(model.get(selected));
model.add(model.size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrentStructure(model.get(selected),currentData);
}
void addStructure()
{
BiomeStructureData data=new BiomeStructureData();
model.add(model.size(),data);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
}
public void setStructures(BiomeData data) {
currentData=data;
model.clear();
if(data==null||data.structures==null)
{
edit.setCurrentStructure(null,null);
return;
}
for (int i=0;i<data.structures.length;i++) {
model.add(i,data.structures[i]);
}
list.setSelectedIndex(0);
}
public BiomeStructureData[] getBiomeStructureData() {
BiomeStructureData[] rewards= new BiomeStructureData[model.getSize()];
for(int i=0;i<model.getSize();i++)
{
rewards[i]=model.get(i);
}
return rewards;
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
}

View File

@@ -19,13 +19,15 @@ import static java.awt.Image.SCALE_FAST;
*/
public class SwingAtlas {
int imageSize=32;
HashMap<String, ArrayList<ImageIcon>> images=new HashMap<>();
public HashMap<String, ArrayList<ImageIcon>> getImages()
{
return images;
}
public SwingAtlas(FileHandle path)
public SwingAtlas(FileHandle path,int imageSize)
{
this.imageSize=imageSize;
if(!path.exists()||!path.toString().endsWith(".atlas"))
return;
TextureAtlas.TextureAtlasData data=new TextureAtlas.TextureAtlasData(path,path.parent(),false);
@@ -37,20 +39,41 @@ public class SwingAtlas {
images.put(name,new ArrayList<>());
}
ArrayList<ImageIcon> imageList=images.get(name);
try {
try
{
imageList.add(spriteToImage(region));
} catch (IOException e) {
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
private ImageIcon spriteToImage(TextureAtlas.TextureAtlasData.Region sprite) throws IOException {
BufferedImage img = ImageIO.read(sprite.page.textureFile.file());
return new ImageIcon(img.getSubimage(sprite.left,sprite.top, sprite.width, sprite.height).getScaledInstance(32,32,SCALE_FAST));
public SwingAtlas(FileHandle path)
{
this(path,32);
}
private ImageIcon spriteToImage(TextureAtlas.TextureAtlasData.Region sprite) throws IOException {
try
{
BufferedImage img = ImageIO.read(sprite.page.textureFile.file());
if(sprite.width== sprite.height)
return new ImageIcon(img.getSubimage(sprite.left,sprite.top, sprite.width, sprite.height).getScaledInstance(imageSize,imageSize,SCALE_FAST));
if(sprite.width>sprite.height)
return new ImageIcon(img.getSubimage(sprite.left,sprite.top, sprite.width, sprite.height).getScaledInstance(imageSize, (int) (imageSize*(sprite.height/(float)sprite.width)),SCALE_FAST));
return new ImageIcon(img.getSubimage(sprite.left,sprite.top, sprite.width, sprite.height).getScaledInstance((int) (imageSize*(sprite.width/(float)sprite.height)),imageSize,SCALE_FAST));
}
catch (IOException e)
{
return null;
}
}
public ImageIcon get(String name) {
if(images.get(name).size()==0)
return null;
return images.get(name).get(0);
}

View File

@@ -6,6 +6,7 @@ import org.apache.commons.lang3.tuple.Pair;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -13,12 +14,17 @@ import java.util.Map;
* Editor class to edit configuration, maybe moved or removed
*/
public class SwingAtlasPreview extends Box {
int imageSize=32;
private String sprite="";
private String spriteName="";
Timer timer;
public SwingAtlasPreview() {
public SwingAtlasPreview()
{
this(64,200);
}
public SwingAtlasPreview(int imageSize,int timeDelay) {
super(BoxLayout.Y_AXIS);
timer = new Timer(200, new AbstractAction() {
timer = new Timer(timeDelay, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
@@ -27,26 +33,62 @@ public class SwingAtlasPreview extends Box {
}
}
});
this.imageSize=imageSize;
}
static Map<String,Map<Integer,SwingAtlas>> cache=new HashMap<>();
public SwingAtlasPreview(int size) {
this();
imageSize=size;
}
int counter=0;
List<Pair<JLabel,ArrayList<ImageIcon>>> labels=new ArrayList<>();
public void setSpritePath(String sprite) {
if(this.sprite==null||this.sprite.equals(sprite))
setSpritePath(sprite,null);
}
public void setSpritePath(String sprite,String name) {
if(this.sprite==null||sprite==null||(this.sprite.equals(sprite)&&(spriteName != null && spriteName.equals(name))))
return;
removeAll();
counter=0;
labels.clear();
this.sprite=sprite;
SwingAtlas atlas=new SwingAtlas(Config.instance().getFile(sprite));
this.spriteName=name;
SwingAtlas atlas;
if(!cache.containsKey(sprite))
{
cache.put(sprite,new HashMap<>() );
}
if(!cache.get(sprite).containsKey(imageSize))
{
cache.get(sprite).put(imageSize,new SwingAtlas(Config.instance().getFile(sprite),imageSize) );
}
atlas=cache.get(sprite).get(imageSize);
int maxCount=0;
for(Map.Entry<String, ArrayList<ImageIcon>> element:atlas.getImages().entrySet())
{
JLabel image=new JLabel(element.getValue().get(0));
add(new JLabel(element.getKey()));
add(image);
labels.add(Pair.of(image, element.getValue()));
if(name==null||element.getKey().equals(name))
{
JLabel image=new JLabel(element.getValue().get(0));
if(maxCount<element.getValue().size())
maxCount=element.getValue().size();
add(new JLabel(element.getKey()));
add(image);
labels.add(Pair.of(image, element.getValue()));
}
}
timer.restart();
repaint();
if(maxCount<=1)
{
timer.stop();
}
else
{
timer.restart();
}
// doLayout(); //These lines cause images to bleed on to other tabs and don't appear to be needed
// revalidate();
// update(getGraphics());
// repaint();
}
}

View File

@@ -0,0 +1,132 @@
package forge.adventure.editor;
import forge.adventure.data.BiomeData;
import forge.adventure.data.BiomeTerrainData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionListener;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class TerrainsEditor extends JComponent{
DefaultListModel<BiomeTerrainData> model = new DefaultListModel<>();
JList<BiomeTerrainData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
BiomeTerrainEdit edit=new BiomeTerrainEdit();
BiomeData currentData;
public class TerrainDataRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof BiomeTerrainData))
return label;
BiomeTerrainData terrainData=(BiomeTerrainData) value;
StringBuilder builder=new StringBuilder();
builder.append("Terrain");
builder.append(" ");
builder.append(terrainData.spriteName);
label.setText(builder.toString());
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public TerrainsEditor()
{
list.setCellRenderer(new TerrainDataRenderer());
list.addListSelectionListener(e -> TerrainsEditor.this.updateEdit());
addButton("add", e -> TerrainsEditor.this.addTerrain());
addButton("remove", e -> TerrainsEditor.this.remove());
addButton("copy", e -> TerrainsEditor.this.copy());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(list, BorderLayout.LINE_START);
add(toolBar, BorderLayout.PAGE_START);
add(edit,BorderLayout.CENTER);
edit.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
emitChanged();
}
});
}
protected void emitChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
BiomeTerrainData data=new BiomeTerrainData(model.get(selected));
model.add(model.size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrentTerrain(model.get(selected),currentData);
}
void addTerrain()
{
BiomeTerrainData data=new BiomeTerrainData();
model.add(model.size(),data);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
}
public void setTerrains(BiomeData data) {
currentData=data;
model.clear();
if(data==null||data.terrain==null)
return;
for (int i=0;i<data.terrain.length;i++) {
model.add(i,data.terrain[i]);
}
list.setSelectedIndex(0);
}
public BiomeTerrainData[] getBiomeTerrainData() {
BiomeTerrainData[] rewards= new BiomeTerrainData[model.getSize()];
for(int i=0;i<model.getSize();i++)
{
rewards[i]=model.get(i);
}
return rewards;
}
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
}

View File

@@ -1,12 +1,8 @@
package forge.adventure.editor;
import forge.adventure.util.Config;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.awt.*;
import java.util.List;
/**
* Editor class to edit configuration, maybe moved or removed
@@ -18,15 +14,11 @@ public class TextListEdit extends Box {
public TextListEdit(String[] possibleElements) {
super(BoxLayout.X_AXIS);
findButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TextListEdit.this.find();
}
});
findButton.addActionListener(e -> TextListEdit.this.find());
add(edit);
//add(findButton);
edit.setPreferredSize(new Dimension(400,edit.getPreferredSize().height));
add(findButton);
elements= new JComboBox(possibleElements);
add(elements);
@@ -42,23 +34,41 @@ public class TextListEdit extends Box {
}
private void find() {
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File(Config.instance().getFilePath("")));
fc.setMultiSelectionEnabled(false);
if (fc.showOpenDialog(this) ==
JFileChooser.APPROVE_OPTION) {
File selected = fc.getSelectedFile();
edit.setText((edit.getText().trim().length()>0?edit.getText() + ";": "")+elements.getSelectedItem().toString());
elements.remove(elements.getSelectedIndex());
elements.setSelectedIndex(0);
// JFileChooser fc = new JFileChooser();
// fc.setCurrentDirectory(new File(Config.instance().getFilePath("")));
// fc.setMultiSelectionEnabled(false);
// if (fc.showOpenDialog(this) ==
// JFileChooser.APPROVE_OPTION) {
// File selected = fc.getSelectedFile();
//
// try {
// if (selected != null&&selected.getCanonicalPath().startsWith(new File(Config.instance().getFilePath("")).getCanonicalPath())) {
// edit.setText(selected.getCanonicalPath().substring(new File(Config.instance().getFilePath("")).getCanonicalPath().length()+1));
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
}
try {
if (selected != null&&selected.getCanonicalPath().startsWith(new File(Config.instance().getFilePath("")).getCanonicalPath())) {
edit.setText(selected.getCanonicalPath().substring(new File(Config.instance().getFilePath("")).getCanonicalPath().length()+1));
}
} catch (IOException e) {
e.printStackTrace();
}
public void setOptions(List<String> itemNames) {
if(itemNames==null)
elements.removeAllItems();
else {
for(String item: itemNames)
elements.addItem(item);
}
}
public void setText(List<String> itemNames) {
if(itemNames==null)
edit.setText("");
else
edit.setText(String.join(";",itemNames));
}
public void setText(String[] itemName) {
if(itemName==null)
edit.setText("");
@@ -77,7 +87,7 @@ public class TextListEdit extends Box {
{
values.append(intValues[i]);
if(intValues.length>i+2)
values.append(";");
values.append("\n");
}
edit.setText(values.toString());
}
@@ -96,7 +106,7 @@ public class TextListEdit extends Box {
String intName=stringList[i];
try
{
retList[i] = Integer.valueOf(intName);
retList[i] = Integer.parseInt(intName);
}
catch (NumberFormatException e)
{

View File

@@ -1,6 +1,235 @@
package forge.adventure.editor;
import java.awt.*;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import forge.adventure.data.BiomeData;
import forge.adventure.data.WorldData;
import forge.adventure.util.Config;
import forge.adventure.util.Paths;
public class WorldEditor extends Component {
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
public class WorldEditor extends JComponent {
WorldData currentData;
IntSpinner width= new IntSpinner( 0, 100000, 1);
IntSpinner height= new IntSpinner( 0, 100000, 1);
FloatSpinner playerStartPosX= new FloatSpinner( 0, 1, .1f);
FloatSpinner playerStartPosY= new FloatSpinner(0, 1, .1f);
FloatSpinner noiseZoomBiome= new FloatSpinner( 0, 1000f, 1f);
IntSpinner tileSize= new IntSpinner( 0, 100000, 1);
JTextField biomesSprites = new JTextField();
FloatSpinner maxRoadDistance = new FloatSpinner( 0, 100000f, 1f);
TextListEdit biomesNames = new TextListEdit();
DefaultListModel<BiomeData> model = new DefaultListModel<>();
JList<BiomeData> list = new JList<>(model);
BiomeEdit edit=new BiomeEdit();
JTabbedPane tabs =new JTabbedPane();
static HashMap<String,SwingAtlas> atlas=new HashMap<>();
public class BiomeDataRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof BiomeData))
return label;
BiomeData biome=(BiomeData) value;
// Get the renderer component from parent class
label.setText(biome.name);
if(!atlas.containsKey(biome.tilesetAtlas))
atlas.put(biome.tilesetAtlas,new SwingAtlas(Config.instance().getFile(biome.tilesetAtlas)));
SwingAtlas poiAtlas = atlas.get(biome.tilesetAtlas);
if(poiAtlas.has(biome.tilesetName))
label.setIcon(poiAtlas.get(biome.tilesetName));
else
{
ImageIcon img=poiAtlas.getAny();
if(img!=null)
label.setIcon(img);
}
return label;
}
}
/**
*
*/
private void updateBiome() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrentBiome(model.get(selected));
}
public WorldEditor() {
list.setCellRenderer(new BiomeDataRenderer());
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
WorldEditor.this.updateBiome();
}
});
BorderLayout layout = new BorderLayout();
setLayout(layout);
add(tabs);
JSplitPane biomeData=new JSplitPane();
tabs.addTab("BiomeData", biomeData);
FormPanel worldPanel=new FormPanel();
worldPanel.add("width:",width);
worldPanel.add("height:",height);
worldPanel.add("playerStartPosX:",playerStartPosX);
worldPanel.add("playerStartPosY:",playerStartPosY);
worldPanel.add("noiseZoomBiome:",noiseZoomBiome);
worldPanel.add("tileSize:",tileSize);
worldPanel.add("biomesSprites:",biomesSprites);
worldPanel.add("maxRoadDistance:",maxRoadDistance);
worldPanel.add("biomesNames:",biomesNames);
tabs.addTab("WorldData", worldPanel);
JScrollPane pane = new JScrollPane(edit);
biomeData.setLeftComponent(list); biomeData.setRightComponent(pane);
load();
JToolBar toolBar = new JToolBar("toolbar");
add(toolBar, BorderLayout.PAGE_START);
JButton newButton=new JButton("save");
newButton.addActionListener(e -> WorldEditor.this.save());
toolBar.add(newButton);
newButton=new JButton("save selected biome");
newButton.addActionListener(e -> WorldEditor.this.saveBiome());
toolBar.add(newButton);
newButton=new JButton("load");
newButton.addActionListener(e -> WorldEditor.this.load());
toolBar.add(newButton);
toolBar.addSeparator();
newButton=new JButton("test map");
newButton.addActionListener(e -> WorldEditor.this.test());
toolBar.add(newButton);
newButton=new JButton("edit effects");
newButton.addActionListener(e -> WorldEditor.this.startEffectEditor());
toolBar.add(newButton);
}
private void startEffectEditor() {
}
private void test() {
String javaHome = System.getProperty("java.home");
String javaBin = javaHome + File.separator + "bin" + File.separator + "java";
String classpath = System.getProperty("java.class.path");
String className = forge.adventure.Main.class.getName();
ArrayList<String> command = new ArrayList<>();
command.add(javaBin);
command.add("-cp");
command.add(classpath);
command.add(className);
command.add("testMap");
ProcessBuilder build= new ProcessBuilder(command);
build .redirectInput(ProcessBuilder.Redirect.INHERIT)
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
.redirectError(ProcessBuilder.Redirect.INHERIT);
try {
Process process= build.start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
void saveBiome()
{
edit.updateTerrain();
Json json = new Json(JsonWriter.OutputType.json);
FileHandle handle = Config.instance().getFile(currentData.biomesNames[list.getSelectedIndex()]);
handle.writeString(json.prettyPrint(json.toJson(edit.currentData, BiomeData.class)),false);
}
void save()
{
currentData.width=width.intValue();
currentData.height=height.intValue();
currentData.playerStartPosX=playerStartPosX.floatValue();
currentData.playerStartPosY=playerStartPosY.floatValue();
currentData.noiseZoomBiome=noiseZoomBiome.floatValue();
currentData.tileSize=tileSize.intValue();
currentData.biomesSprites=biomesSprites.getText();
currentData.maxRoadDistance=maxRoadDistance.floatValue();
currentData.biomesNames= (biomesNames.getList());
Json json = new Json(JsonWriter.OutputType.json);
FileHandle handle = Config.instance().getFile(Paths.WORLD);
handle.writeString(json.prettyPrint(json.toJson(currentData, WorldData.class)),false);
}
void load()
{
model.clear();
Json json = new Json();
FileHandle handle = Config.instance().getFile(Paths.WORLD);
if (handle.exists())
{
currentData=json.fromJson(WorldData.class, WorldData.class, handle);
}
update();
}
private void update() {
width.setValue(currentData.width);
height.setValue(currentData.height);
playerStartPosX.setValue(currentData.playerStartPosX);
playerStartPosY.setValue(currentData.playerStartPosY);
noiseZoomBiome.setValue(currentData.noiseZoomBiome);
tileSize.setValue(currentData.tileSize);
biomesSprites.setText(currentData.biomesSprites);
maxRoadDistance.setValue(currentData.maxRoadDistance);
biomesNames.setText(currentData.biomesNames);
for(String path:currentData.biomesNames)
{
Json json = new Json();
FileHandle handle = Config.instance().getFile(path);
if (handle.exists())
{
BiomeData data=json.fromJson(BiomeData.class, BiomeData.class, handle);
model.addElement(data);
}
}
}
}

View File

@@ -6,7 +6,7 @@
<parent>
<artifactId>forge</artifactId>
<groupId>forge</groupId>
<version>1.6.50-SNAPSHOT</version>
<version>1.6.56</version>
</parent>
<artifactId>forge-ai</artifactId>

View File

@@ -0,0 +1,121 @@
package forge.ai;
import forge.card.CardRules;
import forge.card.CardType;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.game.card.Card;
import forge.game.player.Player;
import forge.item.PaperCard;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class AIDeckStatistics {
public float averageCMC = 0;
// TODO implement this. Use a numerically stable algorithm from
// https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Weighted_incremental_algorithm
public float stddevCMC = 0;
public int maxCost = 0;
public int maxColoredCost = 0;
// in WUBRGC order from ManaCost.getColorShardCounts()
public int[] maxPips = null;
// public int[] numSources = new int[6];
public int numLands = 0;
public AIDeckStatistics(float averageCMC, float stddevCMC, int maxCost, int maxColoredCost, int[] maxPips, int numLands) {
this.averageCMC = averageCMC;
this.stddevCMC = stddevCMC;
this.maxCost = maxCost;
this.maxColoredCost = maxColoredCost;
this.maxPips = maxPips;
this.numLands = numLands;
}
public static AIDeckStatistics fromCardList(List<CardRules> cards) {
int totalCMC = 0;
int totalCount = 0;
int numLands = 0;
int maxCost = 0;
int[] maxPips = new int[6];
int maxColoredCost = 0;
for (CardRules rules : cards) {
CardType type = rules.getType();
if (type.isLand()) {
numLands += 1;
} else {
int cost = rules.getManaCost().getCMC();
// TODO use alternate casting costs for this, free spells will usually be cast for free
maxCost = Math.max(maxCost, cost);
totalCMC += cost;
totalCount++;
int[] pips = rules.getManaCost().getColorShardCounts();
int colored_pips = 0;
for (int i = 0; i < pips.length; i++) {
maxPips[i] = Math.max(maxPips[i], pips[i]);
if (i < 5) {
colored_pips += pips[i];
}
}
maxColoredCost = Math.max(maxColoredCost, colored_pips);
}
// TODO implement the number of mana sources
// find the sources
// What about non-mana-ability mana sources?
// fetchlands, ramp spells, etc
}
return new AIDeckStatistics(totalCount == 0 ? 0 : totalCMC / (float)totalCount,
0, // TODO use https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
maxCost,
maxColoredCost,
maxPips,
numLands
);
}
public static AIDeckStatistics fromDeck(Deck deck) {
List<CardRules> rules_list = new ArrayList<>();
for (final Map.Entry<DeckSection, CardPool> deckEntry : deck) {
switch (deckEntry.getKey()) {
case Main:
case Commander:
for (final Map.Entry<PaperCard, Integer> poolEntry : deckEntry.getValue()) {
CardRules rules = poolEntry.getKey().getRules();
rules_list.add(rules);
}
break;
default:
break; //ignore other sections
}
}
return fromCardList(rules_list);
}
public static AIDeckStatistics fromPlayer(Player player) {
Deck deck = player.getRegisteredPlayer().getDeck();
if (deck.isEmpty()) {
// we're in a test or some weird match, search through the hand and library and build the decklist
List<CardRules> rules_list = new ArrayList<>();
for (Card c : player.getAllCards()) {
if (c.getPaperCard() == null) {
continue;
}
rules_list.add(c.getRules());
}
return fromCardList(rules_list);
}
return fromDeck(deck);
}
}

View File

@@ -18,9 +18,12 @@
package forge.ai;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import forge.game.staticability.StaticAbilityMustAttack;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate;
@@ -47,6 +50,7 @@ import forge.game.combat.GlobalAttackRestrictions;
import forge.game.cost.Cost;
import forge.game.keyword.Keyword;
import forge.game.player.Player;
import forge.game.player.PlayerCollection;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityPredicates;
import forge.game.trigger.Trigger;
@@ -58,9 +62,6 @@ import forge.util.Expressions;
import forge.util.MyRandom;
import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView;
import forge.util.maps.LinkedHashMapToAmount;
import forge.util.maps.MapToAmount;
import forge.util.maps.MapToAmountUtil;
/**
@@ -75,7 +76,7 @@ public class AiAttackController {
// possible attackers and blockers
private List<Card> attackers;
private final List<Card> blockers;
private List<Card> blockers;
private List<Card> oppList; // holds human player creatures
private List<Card> myList; // holds computer creatures
@@ -98,17 +99,15 @@ public class AiAttackController {
public AiAttackController(final Player ai, boolean nextTurn) {
this.ai = ai;
defendingOpponent = choosePreferredDefenderPlayer(ai);
this.oppList = getOpponentCreatures(defendingOpponent);
defendingOpponent = choosePreferredDefenderPlayer(ai, true);
myList = ai.getCreaturesInPlay();
this.nextTurn = nextTurn;
refreshAttackers(defendingOpponent);
this.blockers = getPossibleBlockers(oppList, this.attackers, this.nextTurn);
refreshCombatants(defendingOpponent);
} // overloaded constructor to evaluate attackers that should attack next turn
public AiAttackController(final Player ai, Card attacker) {
this.ai = ai;
defendingOpponent = choosePreferredDefenderPlayer(ai);
defendingOpponent = choosePreferredDefenderPlayer(ai, true);
this.oppList = getOpponentCreatures(defendingOpponent);
myList = ai.getCreaturesInPlay();
this.nextTurn = false;
@@ -119,13 +118,15 @@ public class AiAttackController {
this.blockers = getPossibleBlockers(oppList, this.attackers, this.nextTurn);
} // overloaded constructor to evaluate single specified attacker
private void refreshAttackers(GameEntity defender) {
private void refreshCombatants(GameEntity defender) {
this.oppList = getOpponentCreatures(defendingOpponent);
this.attackers = new ArrayList<>();
for (Card c : myList) {
if (canAttackWrapper(c, defender)) {
attackers.add(c);
}
}
this.blockers = getPossibleBlockers(oppList, this.attackers, this.nextTurn);
}
public static List<Card> getOpponentCreatures(final Player defender) {
@@ -153,6 +154,7 @@ public class AiAttackController {
public void removeBlocker(Card blocker) {
this.oppList.remove(blocker);
this.blockers.remove(blocker);
}
private boolean canAttackWrapper(final Card attacker, final GameEntity defender) {
@@ -168,13 +170,34 @@ public class AiAttackController {
* No strategy to secure a second place instead, since Forge has no variant for that
*/
public static Player choosePreferredDefenderPlayer(Player ai) {
return choosePreferredDefenderPlayer(ai, false);
}
public static Player choosePreferredDefenderPlayer(Player ai, boolean forCombatDmg) {
Player defender = ai.getWeakestOpponent(); //Concentrate on opponent within easy kill range
// TODO connect with evaluateBoardPosition and only fall back to random when no player is the biggest threat by a fair margin
// TODO for multiplayer combat avoid players with cantLose or (if not playing infect) cantLoseForZeroOrLessLife and !canLoseLife
if (defender.getLife() > 8) {
// TODO connect with evaluateBoardPosition and only fall back to random when no player is the biggest threat by a fair margin
List<Player> opps = Lists.newArrayList(ai.getOpponents());
if (forCombatDmg) {
for (Player p : ai.getOpponents()) {
if (p.isMonarch() && ai.canBecomeMonarch()) {
// just increase the odds for now instead of being fully predictable
// as it could lead to other too complex factors giving this reasoning negative impact
opps.add(p);
}
if (p.hasInitiative()) {
opps.add(p);
}
}
}
if (defender.getLife() > 8) { //Otherwise choose a random opponent to ensure no ganging up on players
// TODO should we cache the random for each turn? some functions like shouldPumpCard base their decisions on the assumption who will be attacked
return Aggregates.random(ai.getOpponents());
//Otherwise choose a random opponent to ensure no ganging up on players
return Aggregates.random(opps);
}
return defender;
}
@@ -234,7 +257,7 @@ public class AiAttackController {
continue;
}
if (sa.getApi() == ApiType.EachDamage && "TriggeredAttacker".equals(sa.getParam("DefinedPlayers"))) {
if (sa.getApi() == ApiType.EachDamage && "TriggeredAttacker".equals(sa.getParam("Defined"))) {
List<Card> valid = CardLists.getValidCards(c.getController().getCreaturesInPlay(), sa.getParam("ValidCards"), c.getController(), c, sa);
// TODO: this assumes that 1 damage is dealt per creature. Improve this to check the parameter/X to determine
// how much damage is dealt by each of the creatures in the valid list.
@@ -356,7 +379,7 @@ public class AiAttackController {
}
});
final List<Card> notNeededAsBlockers = new CardCollection(attackers);
final CardCollection notNeededAsBlockers = new CardCollection(attackers);
// don't hold back creatures that can't block any of the human creatures
final List<Card> blockers = getPossibleBlockers(attackers, opponentsAttackers, true);
@@ -375,7 +398,7 @@ public class AiAttackController {
int thresholdMod = 0;
int lastAcceptableBaselineLife = 0;
if (pilotsNonAggroDeck) {
lastAcceptableBaselineLife = ComputerUtil.predictNextCombatsRemainingLife(ai, playAggro, pilotsNonAggroDeck, 0, new CardCollection(notNeededAsBlockers));
lastAcceptableBaselineLife = ComputerUtil.predictNextCombatsRemainingLife(ai, playAggro, pilotsNonAggroDeck, 0, notNeededAsBlockers);
if (!ai.isCardInPlay("Laboratory Maniac")) {
// AI is getting milled out
thresholdMod += 3 - Math.min(ai.getCardsIn(ZoneType.Library).size(), 3);
@@ -394,7 +417,7 @@ public class AiAttackController {
continue;
}
notNeededAsBlockers.add(c);
int currentBaselineLife = ComputerUtil.predictNextCombatsRemainingLife(ai, playAggro, pilotsNonAggroDeck, 0, new CardCollection(notNeededAsBlockers));
int currentBaselineLife = ComputerUtil.predictNextCombatsRemainingLife(ai, playAggro, pilotsNonAggroDeck, 0, notNeededAsBlockers);
// AI doesn't know from what it will lose, so it might still keep an unnecessary blocker back sometimes
if (currentBaselineLife == Integer.MIN_VALUE) {
notNeededAsBlockers.remove(c);
@@ -538,7 +561,7 @@ public class AiAttackController {
for (Card attacker : categorizedAttackers) {
if (!CombatUtil.canBeBlocked(attacker, accountedBlockers, null)
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")) {
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
unblockedAttackers.add(attacker);
} else {
if (predictEvasion) {
@@ -572,8 +595,7 @@ public class AiAttackController {
if (numExtraBlocks > 0) {
// TODO should be limited to how much getBlockCost the opp can pay
while (numExtraBlocks-- > 0 && !remainingAttackers.isEmpty()) {
blockedAttackers.add(remainingAttackers.get(0));
remainingAttackers.remove(0);
blockedAttackers.add(remainingAttackers.remove(0));
maxBlockersAfterCrew--;
}
}
@@ -581,8 +603,7 @@ public class AiAttackController {
if (remainingAttackers.isEmpty()) {
break;
}
blockedAttackers.add(remainingAttackers.get(0));
remainingAttackers.remove(0);
blockedAttackers.add(remainingAttackers.remove(0));
maxBlockersAfterCrew--;
}
unblockedAttackers.addAll(remainingAttackers);
@@ -605,8 +626,8 @@ public class AiAttackController {
final CardCollection unblockableCantPayFor = new CardCollection();
final CardCollection unblockableWithoutCost = new CardCollection();
// TODO also check poison
for (Card attacker : CardLists.getKeyword(unblockedAttackers, Keyword.TRAMPLE)) {
Cost tax = CombatUtil.getAttackCost(attacker.getGame(), attacker, defendingOpponent);
for (Card attacker : unblockedAttackers) {
Cost tax = CombatUtil.getAttackCost(ai.getGame(), attacker, defendingOpponent);
if (tax == null) {
unblockableWithoutCost.add(attacker);
} else {
@@ -620,19 +641,17 @@ public class AiAttackController {
}
}
int dmgUnblockableAfterPaying = ComputerUtilCombat.sumDamageIfUnblocked(unblockableWithPaying, defendingOpponent);
unblockedAttackers = unblockableWithoutCost;
if (dmgUnblockableAfterPaying > trampleDamage) {
unblockedAttackers.removeAll(unblockableCantPayFor);
unblockedAttackers.removeAll(unblockableWithPaying);
myFreeMana -= unblockableAttackTax;
totalCombatDamage = dmgUnblockableAfterPaying;
// recalculate the trampler damage with the reduced mana available now
myFreeMana -= unblockableAttackTax;
trampleDamage = getDamageFromBlockingTramplers(blockedAttackers, remainingBlockers, myFreeMana).getLeft();
} else {
unblockedAttackers = unblockableWithoutCost;
myFreeMana -= tramplerTaxPaid;
// find out if we can still pay for some left
for (Card attacker : unblockableWithPaying) {
Cost tax = CombatUtil.getAttackCost(attacker.getGame(), attacker, defendingOpponent);
Cost tax = CombatUtil.getAttackCost(ai.getGame(), attacker, defendingOpponent);
int taxCMC = tax.getCostMana().getMana().getCMC();
if (myFreeMana < unblockableAttackTax + taxCMC) {
continue;
@@ -664,7 +683,7 @@ public class AiAttackController {
CardCollection remainingBlockers = new CardCollection(blockers);
for (Card attacker : CardLists.getKeyword(blockedAttackers, Keyword.TRAMPLE)) {
// TODO might sort by quotient of dmg/cost for best combination
Cost tax = CombatUtil.getAttackCost(attacker.getGame(), attacker, defendingOpponent);
Cost tax = CombatUtil.getAttackCost(ai.getGame(), attacker, defendingOpponent);
int taxCMC = tax != null ? tax.getCostMana().getMana().getCMC() : 0;
if (myFreeMana < currentAttackTax + taxCMC) {
continue;
@@ -716,12 +735,24 @@ public class AiAttackController {
* @return a {@link forge.game.combat.Combat} object.
*/
public final int declareAttackers(final Combat combat) {
// something prevents attacking, try another
if (this.attackers.isEmpty() && ai.getOpponents().size() > 1) {
final PlayerCollection opps = ai.getOpponents();
opps.remove(defendingOpponent);
defendingOpponent = Aggregates.random(opps);
refreshCombatants(defendingOpponent);
}
final boolean bAssault = doAssault();
// Determine who will be attacked
GameEntity defender = chooseDefender(combat, bAssault);
// decided to attack another defender so related lists need to be updated
// (though usually rather try to avoid this situation for performance reasons)
if (defender != defendingOpponent) {
refreshAttackers(defender);
defendingOpponent = defender instanceof Player ? (Player) defender : ((Card)defender).getController();
refreshCombatants(defender);
}
if (this.attackers.isEmpty()) {
return aiAggression;
@@ -775,10 +806,7 @@ public class AiAttackController {
if (!nextTurn) {
for (final Card attacker : this.attackers) {
GameEntity mustAttackDef = null;
if (attacker.isGoaded()) {
// TODO this might result into trying to attack the wrong player
mustAttackDef = defender;
} else if (attacker.getSVar("MustAttack").equals("True")) {
if (attacker.getSVar("MustAttack").equals("True")) {
mustAttackDef = defender;
} else if (attacker.hasSVar("EndOfTurnLeavePlay")
&& isEffectiveAttacker(ai, attacker, combat, defender)) {
@@ -787,24 +815,43 @@ public class AiAttackController {
//TODO: if there are other ways to tap this creature (like mana creature), then don't need to attack
mustAttackDef = defender;
} else {
final List<GameEntity> attackRequirements = StaticAbilityMustAttack.entitiesMustAttack(attacker);
if (attackRequirements.contains(attacker)) {
// TODO add cost check here and switch defender if there's one without a cost
// must attack anything
mustAttackDef = defender;
// next check if there's also a specific defender to attack, so don't count them
attackRequirements.removeAll(new CardCollection(attacker));
}
final MapToAmount<GameEntity> amounts = new LinkedHashMapToAmount<>();
amounts.addAll(attackRequirements);
while (!amounts.isEmpty()) {
// check defenders in order of maximum requirements
GameEntity mustAttackDefMaybe = MapToAmountUtil.max(amounts).getKey();
if (combat.getAttackConstraints().getRequirements().get(attacker) == null) continue;
// check defenders in order of maximum requirements
List<Pair<GameEntity, Integer>> reqs = combat.getAttackConstraints().getRequirements().get(attacker).getSortedRequirements();
final GameEntity def = defender;
Collections.sort(reqs, new Comparator<Pair<GameEntity, Integer>>() {
@Override
public int compare(Pair<GameEntity, Integer> r1, Pair<GameEntity, Integer> r2) {
if (r1.getValue() == r2.getValue()) {
// try to attack the designated defender
if (r1.getKey().equals(def) && !r2.getKey().equals(def)) {
return -1;
}
if (r2.getKey().equals(def) && !r1.getKey().equals(def)) {
return 1;
}
// otherwise PW
if (r1.getKey() instanceof Card && r2.getKey() instanceof Player) {
return -1;
}
if (r2.getKey() instanceof Card && r1.getKey() instanceof Player) {
return 1;
}
// or weakest player
if (r1.getKey() instanceof Player && r2.getKey() instanceof Player) {
return ((Player) r1.getKey()).getLife() - ((Player) r2.getKey()).getLife();
}
}
return r2.getValue() - r1.getValue();
}
});
for (Pair<GameEntity, Integer> e : reqs) {
if (e.getRight() == 0) continue;
GameEntity mustAttackDefMaybe = e.getLeft();
if (canAttackWrapper(attacker, mustAttackDefMaybe) && CombatUtil.getAttackCost(ai.getGame(), attacker, mustAttackDefMaybe) == null) {
mustAttackDef = mustAttackDefMaybe;
break;
}
amounts.remove(mustAttackDefMaybe);
}
}
if (mustAttackDef != null) {
@@ -836,6 +883,7 @@ public class AiAttackController {
if (attackMax != -1 && combat.getAttackers().size() >= attackMax)
return aiAggression;
// TODO if lifeInDanger use chance to hold back some
if (canAttackWrapper(attacker, defender) && isEffectiveAttacker(ai, attacker, combat, defender)) {
combat.addAttacker(attacker, defender);
}
@@ -845,7 +893,7 @@ public class AiAttackController {
}
// Cards that are remembered to attack anyway (e.g. temporarily stolen creatures)
if (ai.getController() instanceof PlayerControllerAi) {
if (ai.getController().isAI()) {
// Only do this if |ai| is actually an AI - as we could be trying to predict how the human will attack.
for (Card attacker : this.attackers) {
if (AiCardMemory.isRememberedCard(ai, attacker, AiCardMemory.MemorySet.MANDATORY_ATTACKERS)) {
@@ -891,7 +939,7 @@ public class AiAttackController {
aiAggression = 6;
for (Card attacker : this.attackers) {
// reached max, breakup
if (attackMax != -1 && combat.getAttackers().size() >= attackMax)
if (combat.getAttackers().size() >= attackMax)
break;
if (canAttackWrapper(attacker, defender) && shouldAttack(attacker, this.blockers, combat, defender)) {
combat.addAttacker(attacker, defender);
@@ -926,8 +974,6 @@ public class AiAttackController {
final List<Card> nextTurnAttackers = new ArrayList<>();
int candidateCounterAttackDamage = 0;
final Player opp = defender instanceof Player ? (Player) defender : ((Card)defender).getController();
this.oppList = getOpponentCreatures(opp);
// get the potential damage and strength of the AI forces
final List<Card> candidateAttackers = new ArrayList<>();
int candidateUnblockedDamage = 0;
@@ -936,7 +982,7 @@ public class AiAttackController {
// turn, assume summoning sickness creatures will be able to
if (ComputerUtilCombat.canAttackNextTurn(pCard) && pCard.getNetCombatDamage() > 0) {
candidateAttackers.add(pCard);
candidateUnblockedDamage += ComputerUtilCombat.damageIfUnblocked(pCard, opp, null, false);
candidateUnblockedDamage += ComputerUtilCombat.damageIfUnblocked(pCard, defendingOpponent, null, false);
computerForces++;
}
}
@@ -978,7 +1024,7 @@ public class AiAttackController {
// find the potential damage ratio the AI can cause
double humanLifeToDamageRatio = 1000000;
if (candidateUnblockedDamage > 0) {
humanLifeToDamageRatio = (double) (opp.getLife() - ComputerUtil.possibleNonCombatDamage(ai, opp)) / candidateUnblockedDamage;
humanLifeToDamageRatio = (double) (defendingOpponent.getLife() - ComputerUtil.possibleNonCombatDamage(ai, defendingOpponent)) / candidateUnblockedDamage;
}
// determine if the ai outnumbers the player
@@ -1003,7 +1049,7 @@ public class AiAttackController {
// get list of attackers ordered from low power to high
CardLists.sortByPowerAsc(this.attackers);
// get player life total
int humanLife = opp.getLife();
int humanLife = defendingOpponent.getLife();
// get the list of attackers up to the first blocked one
final List<Card> attritionalAttackers = new ArrayList<>();
for (int x = 0; x < (this.attackers.size() - humanForces); x++) {
@@ -1053,7 +1099,7 @@ public class AiAttackController {
}
}
if (isUnblockableCreature) {
unblockableDamage += ComputerUtilCombat.damageIfUnblocked(attacker, opp, combat, false);
unblockableDamage += ComputerUtilCombat.damageIfUnblocked(attacker, defendingOpponent, combat, false);
}
}
for (final Card attacker : nextTurnAttackers) {
@@ -1067,13 +1113,13 @@ public class AiAttackController {
}
}
if (isUnblockableCreature) {
nextUnblockableDamage += ComputerUtilCombat.damageIfUnblocked(attacker, opp, null, false);
nextUnblockableDamage += ComputerUtilCombat.damageIfUnblocked(attacker, defendingOpponent, null, false);
}
}
if (unblockableDamage > 0 && !opp.cantLoseForZeroOrLessLife() && opp.canLoseLife()) {
turnsUntilDeathByUnblockable = 1 + (opp.getLife() - unblockableDamage) / nextUnblockableDamage;
if (unblockableDamage > 0 && !defendingOpponent.cantLoseForZeroOrLessLife() && defendingOpponent.canLoseLife()) {
turnsUntilDeathByUnblockable = 1 + (defendingOpponent.getLife() - unblockableDamage) / nextUnblockableDamage;
}
if (opp.canLoseLife()) {
if (defendingOpponent.canLoseLife()) {
doUnblockableAttack = true;
}
// *****************
@@ -1130,8 +1176,8 @@ public class AiAttackController {
if ( LOG_AI_ATTACKS )
System.out.println("attackersLeft = " + attackersLeft);
FCollection<GameEntity> possibleDefenders = new FCollection<>(opp);
possibleDefenders.addAll(opp.getPlaneswalkersInPlay());
FCollection<GameEntity> possibleDefenders = new FCollection<>(defendingOpponent);
possibleDefenders.addAll(defendingOpponent.getPlaneswalkersInPlay());
while (!attackersLeft.isEmpty()) {
CardCollection attackersAssigned = new CardCollection();
@@ -1180,7 +1226,7 @@ public class AiAttackController {
if (pwDefending.isEmpty()) {
// TODO for now only looks at same player as we'd have to check the others from start too
//defender = new PlayerCollection(Iterables.filter(possibleDefenders, Player.class)).min(PlayerPredicates.compareByLife());
defender = opp;
defender = defendingOpponent;
} else {
final Card pwNearUlti = ComputerUtilCard.getBestPlaneswalkerToDamage(pwDefending);
defender = pwNearUlti != null ? pwNearUlti : ComputerUtilCard.getBestPlaneswalkerAI(pwDefending);
@@ -1413,16 +1459,30 @@ public class AiAttackController {
// if card has a Exert Trigger which would target,
// but there are no creatures it can target, no need to exert with it
boolean missTarget = false;
for (Trigger t : c.getTriggers()) {
if (!TriggerType.Exerted.equals(t.getMode())) {
for (StaticAbility st : c.getStaticAbilities()) {
if (!"OptionalAttackCost".equals(st.getParam("Mode"))) {
continue;
}
SpellAbility sa = t.ensureAbility();
SpellAbility sa = st.getPayingTrigSA();
if (sa == null) {
continue;
// not the delayed variant
for (Trigger t : c.getTriggers()) {
if (!TriggerType.Exerted.equals(t.getMode())) {
continue;
}
sa = t.ensureAbility();
if (c.getController().isAI()) {
PlayerControllerAi aic = ((PlayerControllerAi) c.getController().getController());
if (!aic.getAi().doTrigger(sa, false)) {
missTarget = true;
break;
}
}
}
break;
}
if (sa.usesTargeting()) {
sa.setActivatingPlayer(c.getController());
sa.setActivatingPlayer(c.getController(), true);
List<Card> validTargets = CardUtil.getValidCardsToTarget(sa.getTargetRestrictions(), sa);
if (validTargets.isEmpty()) {
missTarget = true;

View File

@@ -42,7 +42,9 @@ import forge.game.cost.Cost;
import forge.game.keyword.Keyword;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
import forge.game.staticability.StaticAbilityCantAttackBlock;
import forge.game.staticability.StaticAbilityMustBlock;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType;
@@ -132,9 +134,10 @@ public class AiBlockController {
final CardCollection sortedAttackers = new CardCollection();
CardCollection firstAttacker = new CardCollection();
final FCollectionView<GameEntity> defenders = combat.getDefenders();
final List<Card> attackingCmd = ComputerUtilCombat.getLifeThreateningCommanders(ai, combat);
// If I don't have any planeswalkers then sorting doesn't really matter
if (defenders.size() == 1) {
if (defenders.size() == 1 || !attackingCmd.isEmpty()) {
final CardCollection attackers = combat.getAttackersOf(defenders.get(0));
// Begin with the attackers that pose the biggest threat
ComputerUtilCard.sortByEvaluateCreature(attackers);
@@ -145,7 +148,14 @@ public class AiBlockController {
public int compare(final Card o1, final Card o2) {
if (o1.hasSVar("MustBeBlocked") && !o2.hasSVar("MustBeBlocked")) {
return -1;
} else if (!o1.hasSVar("MustBeBlocked") && o2.hasSVar("MustBeBlocked")) {
}
if (!o1.hasSVar("MustBeBlocked") && o2.hasSVar("MustBeBlocked")) {
return 1;
}
if (attackingCmd.contains(o1) && !attackingCmd.contains(o2)) {
return -1;
}
if (!attackingCmd.contains(o1) && attackingCmd.contains(o2)) {
return 1;
}
return 0;
@@ -165,14 +175,13 @@ public class AiBlockController {
sortedAttackers.addAll(attackers);
} else if (defender instanceof Player && defender.equals(ai)) {
firstAttacker = combat.getAttackersOf(defender);
CardLists.sortByPowerDesc(firstAttacker);
}
}
if (ComputerUtilCombat.lifeInDanger(ai, combat)) {
// add creatures attacking the Player to the front of the list
for (final Card c : firstAttacker) {
sortedAttackers.add(0, c);
}
sortedAttackers.addAll(0, firstAttacker);
} else {
// add creatures attacking the Player to the back of the list
sortedAttackers.addAll(firstAttacker);
@@ -204,7 +213,7 @@ public class AiBlockController {
}
blocker = ComputerUtilCard.getWorstCreatureAI(killingBlockers);
// 2.Blockers that won't get destroyed
} else if (!attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
} else if (!StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)
&& !ComputerUtilCombat.attackerHasThreateningAfflict(attacker, ai)) {
blocker = ComputerUtilCard.getWorstCreatureAI(safeBlockers);
// check whether it's better to block a creature without trample to absorb more damage
@@ -215,7 +224,7 @@ public class AiBlockController {
|| other.hasKeyword(Keyword.TRAMPLE)
|| ComputerUtilCombat.attackerHasThreateningAfflict(other, ai)
|| ComputerUtilCombat.canDestroyBlocker(ai, blocker, other, combat, false)
|| other.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")) {
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(other)) {
continue;
}
@@ -343,7 +352,7 @@ public class AiBlockController {
if (ab.getApi() == ApiType.Pump && "Self".equals(ab.getParam("Defined"))) {
String rawP = ab.getParam("NumAtt");
String rawT = ab.getParam("NumDef");
if ("+X".equals(rawP) && "+X".equals(rawT) && "TriggerCount$NumBlockers".equals(card.getSVar("X"))) {
if ("+X".equals(rawP) && "+X".equals(rawT) && card.getSVar("X").startsWith("Count$Valid Creature.blockingTriggeredAttacker")) {
return true;
}
// TODO: maybe also predict calculated bonus above certain threshold?
@@ -632,7 +641,7 @@ public class AiBlockController {
final Card blocker = ComputerUtilCard.getWorstCreatureAI(killingBlockers);
boolean doTrade = false;
if (ComputerUtilCombat.lifeInDanger(ai, combat)) {
if (lifeInDanger && ComputerUtilCombat.lifeInDanger(ai, combat)) {
// Always trade when life in danger
doTrade = true;
} else {
@@ -646,7 +655,7 @@ public class AiBlockController {
}
}
}
attackersLeft = new ArrayList<>(currentAttackers);
attackersLeft = currentAttackers;
}
// Chump Blocks (should only be made if life is in danger)
@@ -655,20 +664,24 @@ public class AiBlockController {
makeChumpBlocks(combat, currentAttackers);
if (ComputerUtilCombat.lifeInDanger(ai, combat)) {
if (lifeInDanger) {
makeMultiChumpBlocks(combat);
}
}
private void makeChumpBlocks(final Combat combat, List<Card> attackers) {
if (attackers.isEmpty() || !ComputerUtilCombat.lifeInDanger(ai, combat)) {
if (!ComputerUtilCombat.lifeInDanger(ai, combat)) {
lifeInDanger = false;
return;
}
if (attackers.isEmpty()) {
return;
}
Card attacker = attackers.get(0);
if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) > 1
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)
|| ComputerUtilCombat.attackerHasThreateningAfflict(attacker, ai)) {
attackers.remove(0);
makeChumpBlocks(combat, attackers);
@@ -689,7 +702,7 @@ public class AiBlockController {
}
if (other.getNetCombatDamage() >= damageAbsorbed
&& !other.hasKeyword(Keyword.TRAMPLE)
&& !other.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
&& !StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(other)
&& !ComputerUtilCombat.attackerHasThreateningAfflict(other, ai)
&& CombatUtil.canBlock(other, blocker, combat)) {
combat.addBlocker(other, blocker);
@@ -756,7 +769,7 @@ public class AiBlockController {
for (final Card attacker : tramplingAttackers) {
if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) > combat.getBlockers(attacker).size()
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)
|| attacker.hasKeyword("CARDNAME can't be blocked unless all creatures defending player controls block it.")) {
continue;
}
@@ -847,9 +860,8 @@ public class AiBlockController {
}
private void makeChumpBlocksToSavePW(Combat combat) {
if (ai.getLife() <= ai.getStartingLife() / 5 || ComputerUtilCombat.lifeInDanger(ai, combat)) {
// most likely not worth trying to protect planeswalkers when at threateningly low life or in
// dangerous combat which threatens lethal or severe damage to face
if (lifeInDanger) {
// most likely not worth trying to protect planeswalkers when at threateningly low life
return;
}
@@ -945,6 +957,40 @@ public class AiBlockController {
}
}
private void makeRequiredBlocks(Combat combat) {
// assign blockers that have to block
final CardCollection chumpBlockers = new CardCollection();
// if an attacker with lure attacks - all that can block
for (final Card blocker : blockersLeft) {
if (CombatUtil.mustBlockAnAttacker(blocker, combat, null) ||
StaticAbilityMustBlock.blocksEachCombatIfAble(blocker)) {
chumpBlockers.add(blocker);
}
}
if (!chumpBlockers.isEmpty()) {
for (final Card attacker : attackers) {
List<Card> blockers = getPossibleBlockers(combat, attacker, chumpBlockers, false);
for (final Card blocker : blockers) {
if (CombatUtil.canBlock(attacker, blocker, combat) && blockersLeft.contains(blocker)
&& (CombatUtil.mustBlockAnAttacker(blocker, combat, null)
|| StaticAbilityMustBlock.blocksEachCombatIfAble(blocker))) {
combat.addBlocker(attacker, blocker);
if (!blocker.getMustBlockCards().isEmpty()) {
int mustBlockAmt = blocker.getMustBlockCards().size();
final CardCollectionView blockedSoFar = combat.getAttackersBlockedBy(blocker);
boolean canBlockAnother = CombatUtil.canBlockMoreCreatures(blocker, blockedSoFar);
if (!canBlockAnother || mustBlockAmt == blockedSoFar.size()) {
blockersLeft.remove(blocker);
}
} else {
blockersLeft.remove(blocker);
}
}
}
}
}
}
private void clearBlockers(final Combat combat, final List<Card> possibleBlockers) {
for (final Card blocker : CardLists.filterControlledBy(combat.getAllBlockers(), ai)) {
// don't touch other player's blockers
@@ -1008,9 +1054,6 @@ public class AiBlockController {
clearBlockers(combat, possibleBlockers);
List<Card> blockers;
List<Card> chumpBlockers;
diff = (ai.getLife() * 2) - 5; // This is the minimal gain for an unnecessary trade
if (ai.getController().isAI() && diff > 0 && ((PlayerControllerAi) ai.getController()).getAi().getBooleanProperty(AiProps.PLAY_AGGRO)) {
diff = 0;
@@ -1018,7 +1061,7 @@ public class AiBlockController {
// remove all attackers that can't be blocked anyway
for (final Card a : attackers) {
if (!CombatUtil.canBeBlocked(a, ai)) {
if (!CombatUtil.canBeBlocked(a, null, ai)) { // pass null to skip redundant checks for performance
attackersLeft.remove(a);
}
}
@@ -1047,11 +1090,10 @@ public class AiBlockController {
makeTradeBlocks(combat); // choose necessary trade blocks
// if life is still in danger
if (lifeInDanger && ComputerUtilCombat.lifeInDanger(ai, combat)) {
if (lifeInDanger) {
makeChumpBlocks(combat); // choose necessary chump blocks
} else {
lifeInDanger = false;
}
// Reinforce blockers blocking attackers with trample if life is still in danger
if (lifeInDanger && ComputerUtilCombat.lifeInDanger(ai, combat)) {
reinforceBlockersAgainstTrample(combat);
@@ -1065,25 +1107,23 @@ public class AiBlockController {
}
// TODO could be made more accurate if this would be inside each blocker choosing loop instead
lifeInDanger |= removeUnpayableBlocks(combat);
lifeInDanger |= removeUnpayableBlocks(combat) && ComputerUtilCombat.lifeInDanger(ai, combat);
// == 2. If the AI life would still be in danger make a safer approach ==
if (lifeInDanger && ComputerUtilCombat.lifeInDanger(ai, combat)) {
if (lifeInDanger) {
clearBlockers(combat, possibleBlockers); // reset every block assignment
makeTradeBlocks(combat); // choose necessary trade blocks
makeGoodBlocks(combat);
// choose necessary chump blocks if life is still in danger
if (ComputerUtilCombat.lifeInDanger(ai, combat)) {
makeChumpBlocks(combat);
} else {
lifeInDanger = false;
}
makeChumpBlocks(combat);
// Reinforce blockers blocking attackers with trample if life is still in danger
if (lifeInDanger && ComputerUtilCombat.lifeInDanger(ai, combat)) {
reinforceBlockersAgainstTrample(combat);
} else {
lifeInDanger = false;
}
makeGangBlocks(combat);
reinforceBlockersToKill(combat);
}
@@ -1092,51 +1132,31 @@ public class AiBlockController {
if (lifeInDanger && ComputerUtilCombat.lifeInSeriousDanger(ai, combat)) {
clearBlockers(combat, possibleBlockers);
makeChumpBlocks(combat);
if (ComputerUtilCombat.lifeInDanger(ai, combat)) {
if (lifeInDanger && ComputerUtilCombat.lifeInDanger(ai, combat)) {
makeTradeBlocks(combat);
} else {
lifeInDanger = false;
}
if (!ComputerUtilCombat.lifeInDanger(ai, combat)) {
makeGoodBlocks(combat);
} else {
if (lifeInDanger && ComputerUtilCombat.lifeInDanger(ai, combat)) {
reinforceBlockersAgainstTrample(combat);
} else {
lifeInDanger = false;
}
if (!lifeInDanger) {
makeGoodBlocks(combat);
}
makeGangBlocks(combat);
reinforceBlockersToKill(combat);
}
}
// assign blockers that have to block
chumpBlockers = CardLists.getKeyword(blockersLeft, "CARDNAME blocks each combat if able.");
// if an attacker with lure attacks - all that can block
for (final Card blocker : blockersLeft) {
if (CombatUtil.mustBlockAnAttacker(blocker, combat, null)) {
chumpBlockers.add(blocker);
}
}
if (!chumpBlockers.isEmpty()) {
CardLists.shuffle(attackers);
for (final Card attacker : attackers) {
blockers = getPossibleBlockers(combat, attacker, chumpBlockers, false);
for (final Card blocker : blockers) {
if (CombatUtil.canBlock(attacker, blocker, combat) && blockersLeft.contains(blocker)
&& (CombatUtil.mustBlockAnAttacker(blocker, combat, null)
|| blocker.hasKeyword("CARDNAME blocks each combat if able."))) {
combat.addBlocker(attacker, blocker);
if (!blocker.getMustBlockCards().isEmpty()) {
int mustBlockAmt = blocker.getMustBlockCards().size();
final CardCollectionView blockedSoFar = combat.getAttackersBlockedBy(blocker);
boolean canBlockAnother = CombatUtil.canBlockMoreCreatures(blocker, blockedSoFar);
if (!canBlockAnother || mustBlockAmt == blockedSoFar.size()) {
blockersLeft.remove(blocker);
}
} else {
blockersLeft.remove(blocker);
}
}
}
}
}
// block requirements
// TODO because this isn't done earlier, sometimes a good block will enforce a restriction that prevents another for the requirement
makeRequiredBlocks(combat);
// check to see if it's possible to defend a Planeswalker under attack with a chump block,
// unless life is low enough to be more worried about saving preserving the life total
@@ -1186,8 +1206,7 @@ public class AiBlockController {
* Orders a blocker that put onto the battlefield blocking. Depends heavily
* on the implementation of orderBlockers().
*/
public static CardCollection orderBlocker(final Card attacker, final Card blocker,
final CardCollection oldBlockers) {
public static CardCollection orderBlocker(final Card attacker, final Card blocker, final CardCollection oldBlockers) {
// add blocker to existing ordering
// sort by evaluate, then insert it appropriately
// relies on current implementation of orderBlockers()
@@ -1318,7 +1337,7 @@ public class AiBlockController {
}
int evalBlk;
if (blocker.isFaceDown() && blocker.getView().canFaceDownBeShownTo(ai.getView(), false) && blocker.getState(CardStateName.Original).getType().isCreature()) {
if (blocker.isFaceDown() && blocker.getView().canFaceDownBeShownTo(ai.getView()) && blocker.getState(CardStateName.Original).getType().isCreature()) {
// if the blocker is a face-down creature (e.g. cast via Morph, Manifest), evaluate it
// in relation to the original state, not to the Morph state
evalBlk = ComputerUtilCard.evaluateCreature(Card.fromPaperCard(blocker.getPaperCard(), ai), false, true);

View File

@@ -6,12 +6,12 @@
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -27,6 +27,7 @@ import forge.ai.ability.ExploreAi;
import forge.ai.ability.LearnAi;
import forge.ai.simulation.SpellAbilityPicker;
import forge.card.CardStateName;
import forge.card.CardType;
import forge.card.MagicColor;
import forge.card.mana.ManaCost;
import forge.deck.Deck;
@@ -53,6 +54,7 @@ import forge.game.replacement.ReplacementLayer;
import forge.game.replacement.ReplacementType;
import forge.game.spellability.*;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityDisableTriggers;
import forge.game.staticability.StaticAbilityMustTarget;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
@@ -73,7 +75,7 @@ import java.util.*;
* <p>
* AiController class.
* </p>
*
*
* @author Forge
* @version $Id$
*/
@@ -88,6 +90,13 @@ public class AiController {
private SpellAbilityPicker simPicker;
private int lastAttackAggression;
public AiController(final Player computerPlayer, final Game game0) {
player = computerPlayer;
game = game0;
memory = new AiCardMemory();
simPicker = new SpellAbilityPicker(game, player);
}
public boolean canCheatShuffle() {
return cheatShuffle;
}
@@ -99,6 +108,7 @@ public class AiController {
public boolean usesSimulation() {
return this.useSimulation;
}
public void setUseSimulation(boolean value) {
this.useSimulation = value;
}
@@ -141,17 +151,10 @@ public class AiController {
return predictedCombatNextTurn;
}
public AiController(final Player computerPlayer, final Game game0) {
player = computerPlayer;
game = game0;
memory = new AiCardMemory();
simPicker = new SpellAbilityPicker(game, player);
}
private List<SpellAbility> getPossibleETBCounters() {
CardCollection all = new CardCollection(player.getCardsIn(ZoneType.Hand));
CardCollectionView ccvPlayerLibrary = player.getCardsIn(ZoneType.Library);
all.addAll(player.getCardsIn(ZoneType.Exile));
all.addAll(player.getCardsIn(ZoneType.Graveyard));
if (!ccvPlayerLibrary.isEmpty()) {
@@ -164,7 +167,7 @@ public class AiController {
for (final Card c : all) {
for (final SpellAbility sa : c.getNonManaAbilities()) {
if (sa instanceof SpellPermanent) {
sa.setActivatingPlayer(player);
sa.setActivatingPlayer(player, true);
if (checkETBEffects(c, sa, ApiType.Counter)) {
spellAbilities.add(sa);
}
@@ -173,7 +176,7 @@ public class AiController {
}
return spellAbilities;
}
// look for cards on the battlefield that should prevent the AI from using that spellability
private boolean checkCurseEffects(final SpellAbility sa) {
CardCollectionView ccvGameBattlefield = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.hasSVar("AICurseEffect"));
@@ -192,7 +195,7 @@ public class AiController {
} else if ("ChaliceOfTheVoid".equals(curse) && sa.isSpell() && CardFactoryUtil.isCounterable(host)
&& host.getCMC() == c.getCounters(CounterEnumType.CHARGE)) {
return true;
} else if ("BazaarOfWonders".equals(curse) && sa.isSpell() && CardFactoryUtil.isCounterable(host)) {
} else if ("BazaarOfWonders".equals(curse) && sa.isSpell() && CardFactoryUtil.isCounterable(host)) {
String hostName = host.getName();
for (Card card : ccvGameBattlefield) {
if (!card.isToken() && card.sharesNameWith(host)) {
@@ -209,10 +212,15 @@ public class AiController {
}
public boolean checkETBEffects(final Card card, final SpellAbility sa, final ApiType api) {
final Player activatingPlayer = sa.getActivatingPlayer();
// for xPaid stuff
card.setCastSA(sa);
boolean result = checkETBEffectsPreparedCard(card, sa, api);
card.setCastSA(null);
return result;
}
private boolean checkETBEffectsPreparedCard(final Card card, final SpellAbility sa, final ApiType api) {
final Player activator = sa.getActivatingPlayer();
// Replacement effects
for (final ReplacementEffect re : card.getReplacementEffects()) {
@@ -230,7 +238,7 @@ public class AiController {
if (!validCard.contains("Self")) {
continue;
}
if (validCard.contains("notkicked")) {
if (validCard.contains("!kicked")) {
if (sa.isKicked()) {
continue;
}
@@ -251,7 +259,7 @@ public class AiController {
SpellAbility exSA = re.getOverridingAbility();
if (exSA != null) {
exSA = exSA.copy(activatingPlayer);
exSA = exSA.copy(activator);
// ETBReplacement uses overriding abilities.
// These checks only work if the Executing SpellAbility is an Ability_Sub.
@@ -261,11 +269,6 @@ public class AiController {
}
}
if (card.isCreature()
&& game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureETBTriggers)) {
return api == null;
}
boolean rightapi = false;
// Trigger play improvements
@@ -280,12 +283,18 @@ public class AiController {
continue;
}
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(tr.getHostCard());
runParams.put(AbilityKey.Destination, ZoneType.Battlefield.name());
if (StaticAbilityDisableTriggers.disabled(game, tr, runParams)) {
return api == null;
}
if (tr.hasParam("ValidCard")) {
String validCard = tr.getParam("ValidCard");
if (!validCard.contains("Self")) {
continue;
}
if (validCard.contains("notkicked")) {
if (validCard.contains("!kicked")) {
if (sa.isKicked()) {
continue;
}
@@ -294,7 +303,7 @@ public class AiController {
String s = validCard.split("kicked ")[1];
if ("1".equals(s) && !sa.isOptionalCostPaid(OptionalCost.Kicker1)) continue;
if ("2".equals(s) && !sa.isOptionalCostPaid(OptionalCost.Kicker2)) continue;
} else if (!sa.isKicked()) {
} else if (!sa.isKicked()) {
continue;
}
}
@@ -309,17 +318,15 @@ public class AiController {
continue;
}
SpellAbility exSA = tr.ensureAbility().copy(activatingPlayer);
SpellAbility exSA = tr.ensureAbility().copy(activator);
if (api != null) {
if (exSA.getApi() != api) {
continue;
}
rightapi = true;
if (!(exSA instanceof AbilitySub)) {
if (!ComputerUtilCost.canPayCost(exSA, player, true)) {
return false;
}
if (!(exSA instanceof AbilitySub) && !ComputerUtilCost.canPayCost(exSA, player, true)) {
return false;
}
}
@@ -341,13 +348,38 @@ public class AiController {
if (exSA instanceof AbilitySub && !doTrigger(exSA, false)) {
// AI would not run this trigger if given the chance
if (api == null && card.isCreature() && !ComputerUtilAbility.isFullyTargetable(exSA) &&
(ComputerUtil.aiLifeInDanger(activatingPlayer, true, 0) || "BadETB".equals(tr.getParam("AILogic")))) {
(ComputerUtil.aiLifeInDanger(activator, true, 0) || "BadETB".equals(tr.getParam("AILogic")))) {
// trigger will not run due to lack of targets and we 1. desperately need a creature or 2. are happy about that
continue;
}
return false;
}
}
for (final Trigger tr : card.getTriggers()) {
if (!card.hasStartOfKeyword("Saga") && !card.hasStartOfKeyword("Read ahead")) {
break;
}
if (tr.getMode() != TriggerType.CounterAdded) {
continue;
}
SpellAbility exSA = tr.ensureAbility().copy(activator);
if (api != null && exSA.getApi() == api) {
rightapi = true;
}
if (exSA instanceof AbilitySub && !doTrigger(exSA, false)) {
// AI would not run this chapter if given the chance
// TODO eventually we'll want to consider playing it anyway, especially if Read ahead would still allow an immediate benefit
return false;
}
break;
}
if (api != null && !rightapi) {
return false;
}
@@ -369,7 +401,7 @@ public class AiController {
}
private CardCollection filterLandsToPlay(CardCollection landList) {
final CardCollection hand = new CardCollection(player.getCardsIn(ZoneType.Hand));
final CardCollectionView hand = player.getCardsIn(ZoneType.Hand);
CardCollection nonLandList = CardLists.filter(hand, Predicates.not(CardPredicates.Presets.LANDS));
if (landList.size() == 1 && nonLandList.size() < 3) {
CardCollectionView cardsInPlay = player.getCardsIn(ZoneType.Battlefield);
@@ -445,7 +477,7 @@ public class AiController {
CardCollection nonLandsInHand = CardLists.filter(player.getCardsIn(ZoneType.Hand), Predicates.not(CardPredicates.Presets.LANDS));
// Some considerations for Momir/MoJhoSto
boolean hasMomir = player.getZone(ZoneType.Command).contains(CardPredicates.nameEquals("Momir Vig, Simic Visionary Avatar"));
boolean hasMomir = player.isCardInCommand("Momir Vig, Simic Visionary Avatar");
if (hasMomir && nonLandsInHand.isEmpty()) {
// Only do this if we have an all-basic land hand, which covers both stock Momir and MoJhoSto modes
// and also a custom Vanguard setup with a customized basic land deck and Momir as the avatar.
@@ -498,7 +530,7 @@ public class AiController {
if (reSA == null || !ApiType.Tap.equals(reSA.getApi())) {
continue;
}
reSA.setActivatingPlayer(reSA.getHostCard().getController());
reSA.setActivatingPlayer(reSA.getHostCard().getController(), true);
if (reSA.metConditions()) {
foundTapped = true;
break;
@@ -569,7 +601,7 @@ public class AiController {
landList = CardLists.filter(landList, Predicates.not(CardPredicates.Presets.BASIC_LANDS));
}
}
return landList.get(0);
return ComputerUtilCard.getBestLandToPlayAI(landList);
}
// if return true, go to next phase
@@ -582,7 +614,7 @@ public class AiController {
for (final SpellAbility sa : ComputerUtilAbility.getOriginalAndAltCostAbilities(possibleCounters, player)) {
SpellAbility currentSA = sa;
sa.setActivatingPlayer(player);
sa.setActivatingPlayer(player, true);
// check everything necessary
AiPlayDecision opinion = canPlayAndPayFor(currentSA);
@@ -595,7 +627,7 @@ public class AiController {
} else {
// Compare bestSA with this SA
final int restrictionLevel = ComputerUtil.counterSpellRestriction(player, currentSA);
if (restrictionLevel > bestRestriction) {
bestRestriction = restrictionLevel;
bestSA = currentSA;
@@ -612,20 +644,20 @@ public class AiController {
public SpellAbility predictSpellToCastInMain2(ApiType exceptSA) {
return predictSpellToCastInMain2(exceptSA, true);
}
private SpellAbility predictSpellToCastInMain2(ApiType exceptSA, boolean handOnly) {
if (!getBooleanProperty(AiProps.PREDICT_SPELLS_FOR_MAIN2)) {
return null;
}
final CardCollectionView cards = handOnly ? player.getCardsIn(ZoneType.Hand) :
ComputerUtilAbility.getAvailableCards(game, player);
ComputerUtilAbility.getAvailableCards(game, player);
List<SpellAbility> all = ComputerUtilAbility.getSpellAbilities(cards, player);
try {
Collections.sort(all, saComparator); // put best spells first
}
catch (IllegalArgumentException ex) {
} catch (IllegalArgumentException ex) {
System.err.println(ex.getMessage());
String assertex = ComparatorUtil.verifyTransitivity(saComparator, all);
Sentry.captureMessage(ex.getMessage() + "\nAssertionError [verifyTransitivity]: " + assertex);
@@ -633,11 +665,11 @@ public class AiController {
for (final SpellAbility sa : ComputerUtilAbility.getOriginalAndAltCostAbilities(all, player)) {
ApiType saApi = sa.getApi();
if (saApi == ApiType.Counter || saApi == exceptSA) {
continue;
}
sa.setActivatingPlayer(player);
sa.setActivatingPlayer(player, true);
// TODO: this currently only works as a limited prediction of permanent spells.
// Ideally this should cast canPlaySa to determine that the AI is truly able/willing to cast a spell,
// but that is currently difficult to implement due to various side effects leading to stack overflow.
@@ -652,12 +684,15 @@ public class AiController {
public boolean reserveManaSourcesForNextSpell(SpellAbility sa, SpellAbility exceptForSa) {
return reserveManaSources(sa, null, false, true, exceptForSa);
}
public boolean reserveManaSources(SpellAbility sa) {
return reserveManaSources(sa, PhaseType.MAIN2, false, false, null);
}
public boolean reserveManaSources(SpellAbility sa, PhaseType phaseType, boolean enemy) {
return reserveManaSources(sa, phaseType, enemy, true, null);
}
public boolean reserveManaSources(SpellAbility sa, PhaseType phaseType, boolean enemy, boolean forNextSpell, SpellAbility exceptForThisSa) {
ManaCostBeingPaid cost = ComputerUtilMana.calculateManaCost(sa, true, 0);
CardCollection manaSources = ComputerUtilMana.getManaSourcesToPayCost(cost, sa, player);
@@ -703,15 +738,34 @@ public class AiController {
return false;
}
// This is for playing spells regularly (no Cascade/Ripple etc.)
private AiPlayDecision canPlayAndPayFor(final SpellAbility sa) {
if (!sa.canPlay()) {
return AiPlayDecision.CantPlaySa;
}
final Card host = sa.getHostCard();
// state needs to be switched here so API checks evaluate the right face
CardStateName currentState = sa.getCardState() != null && host.getCurrentStateName() != sa.getCardStateName() && !host.isInPlay() ? host.getCurrentStateName() : null;
if (currentState != null) {
host.setState(sa.getCardStateName(), false);
}
AiPlayDecision decision = canPlayAndPayForFace(sa);
if (currentState != null) {
host.setState(currentState, false);
}
return decision;
}
// This is for playing spells regularly (no Cascade/Ripple etc.)
private AiPlayDecision canPlayAndPayForFace(final SpellAbility sa) {
final Card host = sa.getHostCard();
// Check a predefined condition
if (sa.hasParam("AICheckSVar")) {
final Card host = sa.getHostCard();
final String svarToCheck = sa.getParam("AICheckSVar");
String comparator = "GE";
int compareTo = 1;
@@ -734,7 +788,7 @@ public class AiController {
}
int oldCMC = -1;
boolean xCost = sa.costHasX() || sa.getHostCard().hasStartOfKeyword("Strive");
boolean xCost = sa.costHasX() || host.hasStartOfKeyword("Strive");
if (!xCost) {
if (!ComputerUtilCost.canPayCost(sa, player, sa.isTrigger())) {
// for most costs, it's OK to check if they can be paid early in order to avoid running a heavy API check
@@ -742,34 +796,24 @@ public class AiController {
return AiPlayDecision.CantAfford;
}
// TODO check for Reduce too, e.g. Battlefield Thaumaturge could make it castable
if (sa.usesTargeting()) {
if (!sa.getAllTargetChoices().isEmpty()) {
oldCMC = CostAdjustment.adjust(sa.getPayCosts(), sa).getTotalMana().getCMC();
}
}
// state needs to be switched here so API checks evaluate the right face
CardStateName currentState = sa.getCardState() != null && sa.getHostCard().getCurrentStateName() != sa.getCardStateName() && !sa.getHostCard().isInPlay() ? sa.getHostCard().getCurrentStateName() : null;
if (currentState != null) {
sa.getHostCard().setState(sa.getCardStateName(), false);
}
AiPlayDecision canPlay = canPlaySa(sa); // this is the "heaviest" check, which also sets up targets, defines X, etc.
if (currentState != null) {
sa.getHostCard().setState(currentState, false);
}
if (canPlay != AiPlayDecision.WillPlay) {
return canPlay;
}
// Account for possible Ward after the spell is fully targeted
// TODO: ideally, this should be done while targeting, so that a different target can be preferred if the best
// one is warded and can't be paid for.
if (sa.usesTargeting()) {
// one is warded and can't be paid for. (currently it will be stuck with the target until it could pay)
if (sa.usesTargeting() && (!sa.isSpell() || CardFactoryUtil.isCounterable(host))) {
for (Card tgt : sa.getTargets().getTargetCards()) {
// TODO some older cards don't use the keyword, so check for trigger instead
if (tgt.hasKeyword(Keyword.WARD) && tgt.isInPlay() && tgt.getController().isOpponentOf(sa.getHostCard().getController())) {
if (tgt.hasKeyword(Keyword.WARD) && tgt.isInPlay() && tgt.getController().isOpponentOf(host.getController())) {
int amount = 0;
Cost wardCost = ComputerUtilCard.getTotalWardCost(tgt);
if (wardCost.hasManaCost()) {
@@ -778,15 +822,10 @@ public class AiController {
return AiPlayDecision.CantAfford;
}
}
if (wardCost.hasSpecificCostType(CostPayLife.class)) {
int lifeToPay = wardCost.getCostPartByType(CostPayLife.class).convertAmount();
if (lifeToPay > player.getLife() || (lifeToPay == player.getLife() && !player.cantLoseForZeroOrLessLife())) {
return AiPlayDecision.CantAfford;
}
}
if (wardCost.hasSpecificCostType(CostDiscard.class)
&& wardCost.getCostPartByType(CostDiscard.class).convertAmount() > player.getCardsIn(ZoneType.Hand).size()) {
return AiPlayDecision.CantAfford;
SpellAbilityAi topAI = new SpellAbilityAi() {
};
if (!topAI.willPayCosts(player, sa, wardCost, host)) {
return AiPlayDecision.CostNotAcceptable;
}
}
}
@@ -812,9 +851,6 @@ public class AiController {
}
public AiPlayDecision canPlaySa(SpellAbility sa) {
final Card card = sa.getHostCard();
final boolean isRightTiming = sa.canCastTiming(player);
if (!checkAiSpecificRestrictions(sa)) {
return AiPlayDecision.CantPlayAi;
}
@@ -822,6 +858,12 @@ public class AiController {
return canPlaySa(((WrappedAbility) sa).getWrappedAbility());
}
if (!sa.canCastTiming(player)) {
return AiPlayDecision.AnotherTime;
}
final Card card = sa.getHostCard();
// Trying to play a card that has Buyback without a Buyback cost, look for possible additional considerations
if (getBooleanProperty(AiProps.TRY_TO_PRESERVE_BUYBACK_SPELLS)) {
if (card.hasKeyword(Keyword.BUYBACK) && !sa.isBuyBackAbility() && !canPlaySpellWithoutBuyback(card, sa)) {
@@ -888,14 +930,15 @@ public class AiController {
spellHost.setLastKnownZone(game.getStackZone()); // need to add to stack to make check Restrictions respect stack cmc
spellHost.setCastFrom(card.getZone());
}
// TODO maybe other location for this?
if (!sa.isLegalAfterStack()) {
return AiPlayDecision.AnotherTime;
}
if (!sa.checkRestrictions(spellHost, player)) {
return AiPlayDecision.AnotherTime;
}
if (sa instanceof SpellPermanent) {
if (!isRightTiming) {
return AiPlayDecision.AnotherTime;
}
return canPlayFromEffectAI((SpellPermanent)sa, false, true);
return canPlayFromEffectAI((SpellPermanent) sa, false, true);
}
if (sa.usesTargeting()) {
if (!sa.isTargetNumberValid() && sa.getTargetRestrictions().getNumCandidates(sa, true) == 0) {
@@ -906,18 +949,13 @@ public class AiController {
}
}
if (sa instanceof Spell) {
if (ComputerUtil.getDamageForPlaying(player, sa) >= player.getLife()
&& !player.cantLoseForZeroOrLessLife() && player.canLoseLife()) {
if (!player.cantLoseForZeroOrLessLife() && player.canLoseLife() &&
ComputerUtil.getDamageForPlaying(player, sa) >= player.getLife()) {
return AiPlayDecision.CurseEffects;
}
if (!isRightTiming) {
return AiPlayDecision.AnotherTime;
}
return canPlaySpellBasic(card, sa);
}
if (!isRightTiming) {
return AiPlayDecision.AnotherTime;
}
return AiPlayDecision.WillPlay;
}
@@ -931,21 +969,16 @@ public class AiController {
}
private boolean canPlaySpellWithoutBuyback(Card card, SpellAbility sa) {
boolean wasteBuybackAllowed = false;
// About to lose game : allow
if (ComputerUtil.aiLifeInDanger(player, true, 0)) {
wasteBuybackAllowed = true;
}
int copies = CardLists.count(player.getCardsIn(ZoneType.Hand), CardPredicates.nameEquals(card.getName()));
// Have two copies : allow
if (copies >= 2) {
wasteBuybackAllowed = true;
return true;
}
int neededMana = 0;
boolean dangerousRecurringCost = false;
// About to lose game : allow
if (ComputerUtil.aiLifeInDanger(player, true, 0)) {
return true;
}
Cost costWithBuyback = sa.getPayCosts().copy();
for (OptionalCostValue opt : GameActionUtil.getOptionalCostValues(sa)) {
@@ -953,22 +986,19 @@ public class AiController {
costWithBuyback.add(opt.getCost());
}
}
CostAdjustment.adjust(costWithBuyback, sa);
if (costWithBuyback.getCostMana() != null) {
neededMana = costWithBuyback.getCostMana().getMana().getCMC();
}
costWithBuyback = CostAdjustment.adjust(costWithBuyback, sa);
if (costWithBuyback.hasSpecificCostType(CostPayLife.class)
|| costWithBuyback.hasSpecificCostType(CostDiscard.class)
|| costWithBuyback.hasSpecificCostType(CostSacrifice.class)) {
dangerousRecurringCost = true;
// won't be able to afford buyback any time soon
// if Buyback cost includes sacrifice, life, discard
return true;
}
// won't be able to afford buyback any time soon
// if Buyback cost includes sacrifice, life, discard
if (dangerousRecurringCost) {
wasteBuybackAllowed = true;
int neededMana = 0;
if (costWithBuyback.getCostMana() != null) {
neededMana = costWithBuyback.getCostMana().getMana().getCMC();
}
// Memory Crystal-like effects need special handling
for (Card c : game.getCardsIn(ZoneType.Battlefield)) {
for (StaticAbility s : c.getStaticAbilities()) {
@@ -984,10 +1014,10 @@ public class AiController {
int hasMana = ComputerUtilMana.getAvailableManaEstimate(player, false);
if (hasMana < neededMana - 1) {
wasteBuybackAllowed = true;
return true;
}
return wasteBuybackAllowed;
return false;
}
// not sure "playing biggest spell" matters?
@@ -1038,7 +1068,7 @@ public class AiController {
} else if (a1 > 0 && b1 == 0 && ApiType.Mana != b.getApi()) {
return 1;
}
if (a.getHostCard() != null && a.getHostCard().hasSVar("FreeSpellAI")) {
return -1;
} else if (b.getHostCard() != null && b.getHostCard().hasSVar("FreeSpellAI")) {
@@ -1049,11 +1079,9 @@ public class AiController {
// Cheaper Spectacle costs should be preferred
// FIXME: Any better way to identify that these are the same ability, one with Spectacle and one not?
// (looks like it's not a full-fledged alternative cost as such, and is not processed with other alt costs)
if (a.isSpectacle() && !b.isSpectacle()
&& a.getPayCosts().getTotalMana().getCMC() < b.getPayCosts().getTotalMana().getCMC()) {
if (a.isSpectacle() && !b.isSpectacle() && a1 < b1) {
return 1;
} else if (b.isSpectacle() && !a.isSpectacle()
&& b.getPayCosts().getTotalMana().getCMC() < a.getPayCosts().getTotalMana().getCMC()) {
} else if (b.isSpectacle() && !a.isSpectacle() && b1 < a1) {
return 1;
}
}
@@ -1063,7 +1091,7 @@ public class AiController {
return b1 - a1;
}
private int getSpellAbilityPriority(SpellAbility sa) {
int p = 0;
Card source = sa.getHostCard();
@@ -1082,6 +1110,9 @@ public class AiController {
if (source.hasSVar("AIPriorityModifier")) {
p += Integer.parseInt(source.getSVar("AIPriorityModifier"));
}
if (ComputerUtilCard.isCardRemAIDeck(sa.getOriginalHost() != null ? sa.getOriginalHost() : source)) {
p -= 10;
}
// don't play equipments before having any creatures
if (source.isEquipment() && noCreatures) {
p -= 9;
@@ -1193,7 +1224,9 @@ public class AiController {
}
}
for (Card c : inHand) {
if (c.hasSVar("DoNotDiscardIfAble") || c.hasSVar("IsReanimatorCard")) { continue; }
if (c.hasSVar("DoNotDiscardIfAble") || c.hasSVar("IsReanimatorCard")) {
continue;
}
if (c.isCreature() && !ComputerUtilMana.hasEnoughManaSourcesToCast(c.getSpellPermanent(), player)) {
discards.add(c);
}
@@ -1232,8 +1265,7 @@ public class AiController {
discardList.add(prefCard);
validCards.remove(prefCard);
count++;
}
else {
} else {
break;
}
}
@@ -1248,16 +1280,15 @@ public class AiController {
final int numLandsInPlay = CardLists.count(player.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.LANDS_PRODUCING_MANA);
final CardCollection landsInHand = CardLists.filter(validCards, CardPredicates.Presets.LANDS);
final int numLandsInHand = landsInHand.size();
// Discard a land
boolean canDiscardLands = numLandsInHand > 3 || (numLandsInHand > 2 && numLandsInPlay > 0)
|| (numLandsInHand > 1 && numLandsInPlay > 2) || (numLandsInHand > 0 && numLandsInPlay > 5);
boolean canDiscardLands = numLandsInHand > 3 || (numLandsInHand > 2 && numLandsInPlay > 0)
|| (numLandsInHand > 1 && numLandsInPlay > 2) || (numLandsInHand > 0 && numLandsInPlay > 5);
if (canDiscardLands) {
discardList.add(landsInHand.get(0));
validCards.remove(landsInHand.get(0));
}
else { // Discard other stuff
} else { // Discard other stuff
CardLists.sortByCmcDesc(validCards);
int numLandsAvailable = numLandsInPlay;
if (numLandsInHand > 0) {
@@ -1321,7 +1352,7 @@ public class AiController {
return discardList;
}
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if (mode == PlayerActionConfirmMode.AlternativeDamageAssignment) {
return true;
}
@@ -1334,7 +1365,7 @@ public class AiController {
mode);
throw new IllegalArgumentException(exMsg);
}
return SpellApiToAi.Converter.get(api).confirmAction(player, sa, mode, message);
return SpellApiToAi.Converter.get(api).confirmAction(player, sa, mode, message, params);
}
public boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, int bid, Player winner) {
@@ -1346,7 +1377,7 @@ public class AiController {
return false;
default:
return false;
}
}
return false;
}
@@ -1404,8 +1435,8 @@ public class AiController {
if (!checkETBEffects(card, spell, null)) {
return AiPlayDecision.BadEtbEffects;
}
if (damage + ComputerUtil.getDamageFromETB(player, card) >= player.getLife()
&& !player.cantLoseForZeroOrLessLife() && player.canLoseLife()) {
if (!player.cantLoseForZeroOrLessLife() && player.canLoseLife()
&& damage + ComputerUtil.getDamageFromETB(player, card) >= player.getLife()) {
return AiPlayDecision.BadEtbEffects;
}
}
@@ -1448,7 +1479,9 @@ public class AiController {
}
private List<SpellAbility> singleSpellAbilityList(SpellAbility sa) {
if (sa == null) { return null; }
if (sa == null) {
return null;
}
final List<SpellAbility> abilities = Lists.newArrayList();
abilities.add(sa);
@@ -1469,55 +1502,52 @@ public class AiController {
return singleSpellAbilityList(simPicker.chooseSpellAbilityToPlay(null));
}
CardCollection landsWannaPlay = ComputerUtilAbility.getAvailableLandsToPlay(game, player);
CardCollection playBeforeLand = CardLists.filter(
player.getCardsIn(ZoneType.Hand), CardPredicates.hasSVar("PlayBeforeLandDrop")
player.getCardsIn(ZoneType.Hand), CardPredicates.hasSVar("PlayBeforeLandDrop")
);
if (!playBeforeLand.isEmpty()) {
SpellAbility wantToPlayBeforeLand = chooseSpellAbilityToPlayFromList(
ComputerUtilAbility.getSpellAbilities(playBeforeLand, player), false
ComputerUtilAbility.getSpellAbilities(playBeforeLand, player), false
);
if (wantToPlayBeforeLand != null) {
return singleSpellAbilityList(wantToPlayBeforeLand);
}
}
CardCollection landsWannaPlay = ComputerUtilAbility.getAvailableLandsToPlay(game, player);
if (landsWannaPlay != null) {
landsWannaPlay = filterLandsToPlay(landsWannaPlay);
Log.debug("Computer " + game.getPhaseHandler().getPhase().nameForUi);
if (landsWannaPlay != null && !landsWannaPlay.isEmpty()) {
// TODO search for other land it might want to play?
Card land = chooseBestLandToPlay(landsWannaPlay);
if (ComputerUtil.getDamageFromETB(player, land) < player.getLife() || !player.canLoseLife()
|| player.cantLoseForZeroOrLessLife() ) {
if (!game.getPhaseHandler().is(PhaseType.MAIN1) || !isSafeToHoldLandDropForMain2(land)) {
final List<SpellAbility> abilities = Lists.newArrayList();
if ((!player.canLoseLife() || player.cantLoseForZeroOrLessLife() || ComputerUtil.getDamageFromETB(player, land) < player.getLife())
&& (!game.getPhaseHandler().is(PhaseType.MAIN1) || !isSafeToHoldLandDropForMain2(land))) {
final List<SpellAbility> abilities = Lists.newArrayList();
// TODO extend this logic to evaluate MDFC with both sides land
// this can only happen if its a MDFC land
if (!land.isLand()) {
land.setState(CardStateName.Modal, true);
land.setBackSide(true);
}
// TODO extend this logic to evaluate MDFC with both sides land
// this can only happen if its a MDFC land
if (!land.isLand()) {
land.setState(CardStateName.Modal, true);
land.setBackSide(true);
}
LandAbility la = new LandAbility(land, player, null);
LandAbility la = new LandAbility(land, player, null);
la.setCardState(land.getCurrentState());
if (la.canPlay()) {
abilities.add(la);
}
// add mayPlay option
for (CardPlayOption o : land.mayPlay(player)) {
la = new LandAbility(land, player, o.getAbility());
la.setCardState(land.getCurrentState());
if (la.canPlay()) {
abilities.add(la);
}
// add mayPlay option
for (CardPlayOption o : land.mayPlay(player)) {
la = new LandAbility(land, player, o.getAbility());
la.setCardState(land.getCurrentState());
if (la.canPlay()) {
abilities.add(la);
}
}
if (!abilities.isEmpty()) {
return abilities;
}
}
if (!abilities.isEmpty()) {
return abilities;
}
}
}
@@ -1527,7 +1557,7 @@ public class AiController {
}
private boolean isSafeToHoldLandDropForMain2(Card landToPlay) {
boolean hasMomir = player.getZone(ZoneType.Command).contains(CardPredicates.nameEquals("Momir Vig, Simic Visionary Avatar"));
boolean hasMomir = player.isCardInCommand("Momir Vig, Simic Visionary Avatar");
if (hasMomir) {
// Don't do this in Momir variants since it messes with the AI decision making for the avatar.
return false;
@@ -1610,6 +1640,13 @@ public class AiController {
}
for (String sv : card.getSVars().keySet()) {
String varValue = card.getSVar(sv);
if (varValue.equals("Count$Domain")) {
for (String type : landToPlay.getType().getLandTypes()) {
if (CardType.isABasicLandType(type) && CardLists.getType(otb, type).isEmpty()) {
return true;
}
}
}
if (varValue.startsWith("Count$Valid") || sv.equals("BuffedBy")) {
if (varValue.contains("Land") || varValue.contains("Plains") || varValue.contains("Forest")
|| varValue.contains("Mountain") || varValue.contains("Island") || varValue.contains("Swamp")
@@ -1635,11 +1672,14 @@ public class AiController {
return false;
}
// TODO needed to pay propaganda
return true;
}
private final SpellAbility getSpellAbilityToPlay() {
final CardCollection cards = ComputerUtilAbility.getAvailableCards(game, player);
CardCollection cards = ComputerUtilAbility.getAvailableCards(game, player);
cards = ComputerUtilCard.dedupeCards(cards);
List<SpellAbility> saList = Lists.newArrayList();
SpellAbility top = null;
@@ -1665,7 +1705,7 @@ public class AiController {
if (!game.getStack().isEmpty()) {
SpellAbility counter = chooseCounterSpell(getPlayableCounters(cards));
if (counter != null) return counter;
SpellAbility counterETB = chooseSpellAbilityToPlayFromList(getPossibleETBCounters(), false);
if (counterETB != null)
return counterETB;
@@ -1677,8 +1717,9 @@ public class AiController {
Iterables.removeIf(saList, new Predicate<SpellAbility>() {
@Override
public boolean apply(final SpellAbility spellAbility) {
return spellAbility instanceof LandAbility;
public boolean apply(final SpellAbility spellAbility) { //don't include removedAI cards if somehow the AI can play the ability or gain control of unsupported card
// TODO allow when experimental profile?
return spellAbility instanceof LandAbility || (spellAbility.getHostCard() != null && ComputerUtilCard.isCardRemAIDeck(spellAbility.getHostCard()));
}
});
@@ -1697,8 +1738,7 @@ public class AiController {
try {
Collections.sort(all, saComparator); // put best spells first
}
catch (IllegalArgumentException ex) {
} catch (IllegalArgumentException ex) {
System.err.println(ex.getMessage());
String assertex = ComparatorUtil.verifyTransitivity(saComparator, all);
Sentry.captureMessage(ex.getMessage() + "\nAssertionError [verifyTransitivity]: " + assertex);
@@ -1719,7 +1759,7 @@ public class AiController {
}
}
sa.setActivatingPlayer(player);
sa.setActivatingPlayer(player, true);
SpellAbility root = sa.getRootAbility();
if (root.isSpell() || root.isTrigger() || root.isReplacementAbility()) {
@@ -1747,7 +1787,7 @@ public class AiController {
public CardCollection chooseCardsToDelve(int genericCost, CardCollection grave) {
CardCollection toExile = new CardCollection();
int numToExile = Math.min(grave.size(), genericCost);
for (int i = 0; i < numToExile; i++) {
Card chosen = null;
for (final Card c : grave) { // Exile noncreatures first in
@@ -1772,10 +1812,10 @@ public class AiController {
}
return toExile;
}
public boolean doTrigger(SpellAbility spell, boolean mandatory) {
if (spell instanceof WrappedAbility)
return doTrigger(((WrappedAbility)spell).getWrappedAbility(), mandatory);
return doTrigger(((WrappedAbility) spell).getWrappedAbility(), mandatory);
if (spell.getApi() != null)
return SpellApiToAi.Converter.get(spell.getApi()).doTriggerAI(player, spell, mandatory);
if (spell.getPayCosts() == Cost.Zero && !spell.usesTargeting()) {
@@ -1784,7 +1824,7 @@ public class AiController {
}
return false;
}
/**
* Ai should run.
*
@@ -1839,12 +1879,11 @@ public class AiController {
} else if (effect.hasParam("AICheckDredge")) {
return player.getCardsIn(ZoneType.Library).size() > 8 || player.isCardInPlay("Laboratory Maniac");
} else return sa != null && doTrigger(sa, false);
}
public List<SpellAbility> chooseSaToActivateFromOpeningHand(List<SpellAbility> usableFromOpeningHand) {
// AI would play everything. But limits to one copy of (Leyline of Singularity) and (Gemstone Caverns)
List<SpellAbility> result = Lists.newArrayList();
for (SpellAbility sa : usableFromOpeningHand) {
// Is there a better way for the AI to decide this?
@@ -1852,7 +1891,7 @@ public class AiController {
result.add(sa);
}
}
boolean hasLeyline1 = false;
SpellAbility saGemstones = null;
@@ -1878,7 +1917,7 @@ public class AiController {
result.remove(saGemstones);
result.add(saGemstones);
}
return result;
}
@@ -1922,11 +1961,11 @@ public class AiController {
} else if ("LowestLoseLife".equals(logic)) {
return MyRandom.getRandom().nextInt(Math.min(player.getLife() / 3, player.getWeakestOpponent().getLife())) + 1;
} else if ("HighestLoseLife".equals(logic)) {
return Math.min(player.getLife() -1,MyRandom.getRandom().nextInt(Math.max(player.getLife() / 3, player.getWeakestOpponent().getLife())) + 1);
return Math.min(player.getLife() - 1, MyRandom.getRandom().nextInt(Math.max(player.getLife() / 3, player.getWeakestOpponent().getLife())) + 1);
} else if ("HighestGetCounter".equals(logic)) {
return MyRandom.getRandom().nextInt(3);
} else if (source.hasSVar("EnergyToPay")) {
return AbilityUtils.calculateAmount(source, source.getSVar("EnergyToPay"), sa);
} else if (sa.hasSVar("EnergyToPay")) {
return AbilityUtils.calculateAmount(source, sa.getSVar("EnergyToPay"), sa);
} else if ("Vermin".equals(logic)) {
return MyRandom.getRandom().nextInt(Math.max(player.getLife() - 5, 0));
} else if ("SweepCreatures".equals(logic)) {
@@ -1941,6 +1980,21 @@ public class AiController {
return max;
}
public int chooseNumber(SpellAbility sa, String title, List<Integer> options, Player relatedPlayer) {
switch (sa.getApi()) {
case SetLife: // Reverse the Sands
if (relatedPlayer.equals(sa.getHostCard().getController())) {
return Collections.max(options);
} else if (relatedPlayer.isOpponentOf(sa.getHostCard().getController())) {
return Collections.min(options);
} else {
return options.get(0);
}
default:
return options.get(0);
}
}
public boolean confirmPayment(CostPart costPart) {
throw new UnsupportedOperationException("AI is not supposed to reach this code at the moment");
}
@@ -2053,14 +2107,13 @@ public class AiController {
// this is where the computer cheats
// changes AllZone.getComputerPlayer().getZone(Zone.Library)
/**
* <p>
* smoothComputerManaCurve.
* </p>
*
* @param in
* an array of {@link forge.game.card.Card} objects.
*
* @param in an array of {@link forge.game.card.Card} objects.
* @return an array of {@link forge.game.card.Card} objects.
*/
public CardCollectionView cheatShuffle(CardCollectionView in) {
@@ -2088,7 +2141,7 @@ public class AiController {
library.add(8, land.get(2));
library.add(9, land.get(3));
library.add(10, land.get(4));
library.add(12, land.get(5));
library.add(15, land.get(6));
} catch (final IndexOutOfBoundsException e) {
@@ -2106,22 +2159,6 @@ public class AiController {
return library;
} // smoothComputerManaCurve()
public int chooseNumber(SpellAbility sa, String title, List<Integer> options, Player relatedPlayer) {
switch(sa.getApi())
{
case SetLife: // Reverse the Sands
if (relatedPlayer.equals(sa.getHostCard().getController())) {
return Collections.max(options);
} else if (relatedPlayer.isOpponentOf(sa.getHostCard().getController())) {
return Collections.min(options);
} else {
return options.get(0);
}
default:
return 0;
}
}
public boolean chooseDirection(SpellAbility sa) {
if (sa == null || sa.getApi() == null) {
throw new UnsupportedOperationException();
@@ -2176,7 +2213,7 @@ public class AiController {
}
public Card chooseCardToHiddenOriginChangeZone(ZoneType destination, List<ZoneType> origin, SpellAbility sa,
CardCollection fetchList, Player player2, Player decider) {
CardCollection fetchList, Player player2, Player decider) {
if (useSimulation) {
return simPicker.chooseCardToHiddenOriginChangeZone(destination, origin, sa, fetchList, player2, decider);
}

View File

@@ -2,10 +2,12 @@ package forge.ai;
import static forge.ai.ComputerUtilCard.getBestCreatureAI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import forge.card.MagicColor;
import forge.game.cost.*;
import org.apache.commons.lang3.ObjectUtils;
@@ -33,16 +35,11 @@ import forge.util.TextUtil;
import forge.util.collect.FCollectionView;
public class AiCostDecision extends CostDecisionMakerBase {
private final SpellAbility ability;
private final Card source;
private final CardCollection discarded;
private final CardCollection tapped;
public AiCostDecision(Player ai0, SpellAbility sa, final boolean effect) {
super(ai0, effect);
ability = sa;
source = ability.getHostCard();
super(ai0, effect, sa, sa.getHostCard());
discarded = new CardCollection();
tapped = new CardCollection();
@@ -55,6 +52,14 @@ public class AiCostDecision extends CostDecisionMakerBase {
return PaymentDecision.number(c);
}
@Override
public PaymentDecision visit(CostChooseColor cost) {
int c = cost.getAbilityAmount(ability);
List<String> choices = player.getController().chooseColors("Color", ability, c, c,
new ArrayList<>(MagicColor.Constant.ONLY_COLORS));
return PaymentDecision.colors(choices);
}
@Override
public PaymentDecision visit(CostChooseCreatureType cost) {
String choice = player.getController().chooseSomeType("Creature", ability, CardType.getAllCreatureTypes(),
@@ -163,11 +168,11 @@ public class AiCostDecision extends CostDecisionMakerBase {
if (cost.getFrom().equals(ZoneType.Library)) {
return PaymentDecision.card(player.getCardsIn(ZoneType.Library, c));
}
else if (cost.sameZone) {
else if (cost.zoneRestriction == 0) {
// TODO Determine exile from same zone for AI
return null;
} else {
CardCollectionView chosen = ComputerUtil.chooseExileFrom(player, cost.getFrom(), cost.getType(), source, ability.getTargetCard(), c, ability);
CardCollectionView chosen = ComputerUtil.chooseExileFrom(player, cost, source, c, ability);
return null == chosen ? null : PaymentDecision.card(chosen);
}
}
@@ -228,6 +233,13 @@ public class AiCostDecision extends CostDecisionMakerBase {
return res.isEmpty() ? null : PaymentDecision.card(res);
}
@Override
public PaymentDecision visit(final CostEnlist cost) {
CardCollection choices = CostEnlist.getCardsForEnlisting(player);
CardLists.sortByPowerDesc(choices);
return choices.isEmpty() ? null : PaymentDecision.card(choices.getFirst());
}
@Override
public PaymentDecision visit(CostFlipCoin cost) {
int c = cost.getAbilityAmount(ability);
@@ -248,7 +260,8 @@ public class AiCostDecision extends CostDecisionMakerBase {
int c = cost.getAbilityAmount(ability);
final CardCollection typeList = CardLists.getValidCards(player.getGame().getCardsIn(ZoneType.Battlefield), cost.getType().split(";"), player, source, ability);
CardCollection typeList = CardLists.getValidCards(player.getGame().getCardsIn(ZoneType.Battlefield), cost.getType().split(";"), player, source, ability);
typeList = CardLists.filter(typeList, crd -> crd.canBeControlledBy(player));
if (typeList.size() < c) {
return null;
@@ -322,9 +335,9 @@ public class AiCostDecision extends CostDecisionMakerBase {
CardCollectionView list;
if (cost.isSameZone()) {
list = new CardCollection(game.getCardsIn(cost.getFrom()));
list = game.getCardsIn(cost.getFrom());
} else {
list = new CardCollection(player.getCardsIn(cost.getFrom()));
list = player.getCardsIn(cost.getFrom());
}
int c = cost.getAbilityAmount(ability);
@@ -438,7 +451,7 @@ public class AiCostDecision extends CostDecisionMakerBase {
final AiController aic = ((PlayerControllerAi)player.getController()).getAi();
CardCollectionView list = aic.chooseSacrificeType(cost.getType(), ability, isEffect(), c, null);
return PaymentDecision.card(list);
return list == null ? null : PaymentDecision.card(list);
}
@Override
@@ -775,6 +788,11 @@ public class AiCostDecision extends CostDecisionMakerBase {
return PaymentDecision.number(0);
}
@Override
public PaymentDecision visit(CostPayShards cost) {
return PaymentDecision.number(0);
}
@Override
public PaymentDecision visit(CostUnattach cost) {
final Card cardToUnattach = cost.findCardToUnattach(source, player, ability);

View File

@@ -33,6 +33,7 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import forge.ai.AiCardMemory.MemorySet;
import forge.ai.ability.ChooseGenericEffectAi;
import forge.ai.ability.ProtectAi;
import forge.ai.ability.TokenAi;
@@ -65,6 +66,7 @@ import forge.game.combat.Combat;
import forge.game.combat.CombatUtil;
import forge.game.cost.Cost;
import forge.game.cost.CostDiscard;
import forge.game.cost.CostExile;
import forge.game.cost.CostPart;
import forge.game.cost.CostPayment;
import forge.game.cost.CostPutCounter;
@@ -127,14 +129,14 @@ public class ComputerUtil {
if (!sa.isCopied()) {
sa.resetPaidHash();
sa.setPaidLife(0);
}
sa = GameActionUtil.addExtraKeywordCost(sa);
if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) {
if (!CharmEffect.makeChoices(sa)) {
return false;
}
if (sa.getApi() == ApiType.Charm && !CharmEffect.makeChoices(sa)) {
// 603.3c If no mode is chosen, the ability is removed from the stack.
return false;
}
if (chooseTargets != null) {
chooseTargets.run();
@@ -230,7 +232,7 @@ public class ComputerUtil {
// Then base on Targeting Restriction
final String[] validTgts = tgt.getValidTgts();
if ((validTgts.length != 1) || !validTgts[0].equals("Card")) {
if (validTgts.length != 1 || !validTgts[0].equals("Card")) {
restrict += 10;
}
@@ -245,11 +247,18 @@ public class ComputerUtil {
// this is used for AI's counterspells
public static final boolean playStack(SpellAbility sa, final Player ai, final Game game) {
sa.setActivatingPlayer(ai);
sa.setActivatingPlayer(ai, true);
if (!ComputerUtilCost.canPayCost(sa, ai, false))
return false;
final Card source = sa.getHostCard();
Zone fromZone = game.getZoneOf(source);
int zonePosition = 0;
if (fromZone != null) {
zonePosition = fromZone.getCards().indexOf(source);
}
if (sa.isSpell() && !source.isCopiedSpell()) {
sa.setHostCard(game.getAction().moveToStack(source, sa));
}
@@ -257,11 +266,18 @@ public class ComputerUtil {
sa = GameActionUtil.addExtraKeywordCost(sa);
final Cost cost = sa.getPayCosts();
final CostPayment pay = new CostPayment(cost, sa);
// do this after card got added to stack
if (!sa.checkRestrictions(ai)) {
GameActionUtil.rollbackAbility(sa, fromZone, zonePosition, pay, source);
return false;
}
if (cost == null) {
ComputerUtilMana.payManaCost(ai, sa, false);
game.getStack().add(sa);
} else {
final CostPayment pay = new CostPayment(cost, sa);
if (pay.payComputerCosts(new AiCostDecision(ai, sa, false))) {
game.getStack().add(sa);
}
@@ -271,7 +287,7 @@ public class ComputerUtil {
public static final void playSpellAbilityForFree(final Player ai, final SpellAbility sa) {
final Game game = ai.getGame();
sa.setActivatingPlayer(ai);
sa.setActivatingPlayer(ai, true);
final Card source = sa.getHostCard();
if (sa.isSpell() && !source.isCopiedSpell()) {
@@ -283,7 +299,7 @@ public class ComputerUtil {
public static final boolean playSpellAbilityWithoutPayingManaCost(final Player ai, final SpellAbility sa, final Game game) {
SpellAbility newSA = sa.copyWithNoManaCost();
newSA.setActivatingPlayer(ai);
newSA.setActivatingPlayer(ai, true);
if (!CostPayment.canPayAdditionalCosts(newSA.getPayCosts(), newSA) || !ComputerUtilMana.canPayManaCost(newSA, ai, 0, false)) {
return false;
@@ -292,47 +308,60 @@ public class ComputerUtil {
newSA = GameActionUtil.addExtraKeywordCost(newSA);
final Card source = newSA.getHostCard();
Zone fromZone = game.getZoneOf(source);
int zonePosition = 0;
if (fromZone != null) {
zonePosition = fromZone.getCards().indexOf(source);
}
if (newSA.isSpell() && !source.isCopiedSpell()) {
newSA.setHostCard(game.getAction().moveToStack(source, newSA));
if (newSA.getApi() == ApiType.Charm && !newSA.isWrapper()) {
if (!CharmEffect.makeChoices(newSA)) {
return false;
}
if (newSA.getApi() == ApiType.Charm && !CharmEffect.makeChoices(newSA)) {
// 603.3c If no mode is chosen, the ability is removed from the stack.
return false;
}
}
final CostPayment pay = new CostPayment(newSA.getPayCosts(), newSA);
// do this after card got added to stack
if (!sa.checkRestrictions(ai)) {
GameActionUtil.rollbackAbility(sa, fromZone, zonePosition, pay, source);
return false;
}
pay.payComputerCosts(new AiCostDecision(ai, newSA, false));
game.getStack().add(newSA);
return true;
}
public static final void playNoStack(final Player ai, SpellAbility sa, final Game game, final boolean effect) {
sa.setActivatingPlayer(ai);
public static final boolean playNoStack(final Player ai, SpellAbility sa, final Game game, final boolean effect) {
sa.setActivatingPlayer(ai, true);
// TODO: We should really restrict what doesn't use the Stack
if (ComputerUtilCost.canPayCost(sa, ai, effect)) {
final Card source = sa.getHostCard();
if (sa.isSpell() && !source.isCopiedSpell()) {
sa.setHostCard(game.getAction().moveToStack(source, sa));
}
sa = GameActionUtil.addExtraKeywordCost(sa);
final Cost cost = sa.getPayCosts();
if (cost == null) {
ComputerUtilMana.payManaCost(ai, sa, effect);
} else {
final CostPayment pay = new CostPayment(cost, sa);
pay.payComputerCosts(new AiCostDecision(ai, sa, effect));
}
AbilityUtils.resolve(sa);
// destroys creatures if they have lethal damage, etc..
//game.getAction().checkStateEffects();
if (!ComputerUtilCost.canPayCost(sa, ai, effect)) {
return false;
}
final Card source = sa.getHostCard();
if (sa.isSpell() && !source.isCopiedSpell()) {
sa.setHostCard(game.getAction().moveToStack(source, sa));
}
sa = GameActionUtil.addExtraKeywordCost(sa);
final Cost cost = sa.getPayCosts();
if (cost == null) {
ComputerUtilMana.payManaCost(ai, sa, effect);
} else {
final CostPayment pay = new CostPayment(cost, sa);
pay.payComputerCosts(new AiCostDecision(ai, sa, effect));
}
AbilityUtils.resolve(sa);
return true;
}
public static Card getCardPreference(final Player ai, final Card activate, final String pref, final CardCollection typeList) {
@@ -426,14 +455,27 @@ public class ComputerUtil {
}
// try everything when about to die
if (game.getPhaseHandler().getPhase().equals(PhaseType.COMBAT_DECLARE_BLOCKERS)
&& ComputerUtilCombat.lifeInSeriousDanger(ai, game.getCombat())) {
final CardCollection nonCreatures = CardLists.getNotType(typeList, "Creature");
if (!nonCreatures.isEmpty()) {
return ComputerUtilCard.getWorstAI(nonCreatures);
} else if (!typeList.isEmpty()) {
// TODO make sure survival is possible in case the creature blocks a trampler
return ComputerUtilCard.getWorstAI(typeList);
if (game.getPhaseHandler().getPhase().equals(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
// in some rare situations the call to lifeInDanger could lead us back here, this will prevent an overflow
boolean preventReturn = sa != null && sa.isManaAbility();
if (preventReturn) {
AiCardMemory.rememberCard(ai, sa.getHostCard(), MemorySet.HELD_MANA_SOURCES_FOR_NEXT_SPELL);
}
boolean danger = ComputerUtilCombat.lifeInSeriousDanger(ai, game.getCombat());
if (preventReturn) {
AiCardMemory.forgetCard(ai, sa.getHostCard(), MemorySet.HELD_MANA_SOURCES_FOR_NEXT_SPELL);
}
if (danger) {
final CardCollection nonCreatures = CardLists.getNotType(typeList, "Creature");
if (!nonCreatures.isEmpty()) {
return ComputerUtilCard.getWorstAI(nonCreatures);
} else if (!typeList.isEmpty()) {
// TODO make sure survival is possible in case the creature blocks a trampler
return ComputerUtilCard.getWorstAI(typeList);
}
}
}
}
@@ -586,7 +628,7 @@ public class ComputerUtil {
int count = 0;
while (count < amount) {
Card prefCard = getCardPreference(ai, source, "SacCost", typeList);
Card prefCard = getCardPreference(ai, source, "SacCost", typeList, ability);
if (prefCard == null) {
prefCard = ComputerUtilCard.getWorstAI(typeList);
}
@@ -600,9 +642,14 @@ public class ComputerUtil {
return sacList;
}
public static CardCollection chooseExileFrom(final Player ai, final ZoneType zone, final String type, final Card activate,
final Card target, final int amount, SpellAbility sa) {
CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(zone), type.split(";"), activate.getController(), activate, sa);
public static CardCollection chooseExileFrom(final Player ai, CostExile cost, final Card activate, final int amount, SpellAbility sa) {
CardCollection typeList;
if (cost.zoneRestriction != 1) {
typeList = new CardCollection(ai.getGame().getCardsIn(cost.from));
} else {
typeList = new CardCollection(ai.getCardsIn(cost.from));
}
typeList = CardLists.getValidCards(typeList, cost.getType().split(";"), activate.getController(), activate, sa);
// don't exile the card we're pumping
typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, sa, ai);
@@ -817,17 +864,18 @@ public class ComputerUtil {
String logic = source.getParamOrDefault("AILogic", "");
if (logic.startsWith("SacForDamage")) {
if (c.getNetPower() <= 0) {
final int damageAmt = logic.contains("cmc") ? c.getManaCost().getCMC() : c.getNetPower();
if (damageAmt <= 0) {
return false;
} else if (c.getNetPower() >= ai.getOpponentsSmallestLifeTotal()) {
} else if (damageAmt >= ai.getOpponentsSmallestLifeTotal()) {
return true;
} else if (logic.endsWith(".GiantX2") && c.getType().hasCreatureType("Giant")
&& c.getNetPower() * 2 >= ai.getOpponentsSmallestLifeTotal()) {
&& damageAmt * 2 >= ai.getOpponentsSmallestLifeTotal()) {
return true; // TODO: generalize this for any type and actually make the AI prefer giants?
}
}
if ("DesecrationDemon".equals(source.getParam("AILogic"))) {
if ("DesecrationDemon".equals(logic)) {
sacThreshold = SpecialCardAi.DesecrationDemon.getSacThreshold();
} else if (considerSacThreshold != -1) {
sacThreshold = considerSacThreshold;
@@ -931,7 +979,7 @@ public class ComputerUtil {
if (!sa.isActivatedAbility() || sa.getApi() != ApiType.Regenerate) {
continue; // Not a Regenerate ability
}
sa.setActivatingPlayer(controller);
sa.setActivatingPlayer(controller, true);
if (!(sa.canPlay() && ComputerUtilCost.canPayCost(sa, controller, false))) {
continue; // Can't play ability
}
@@ -1026,6 +1074,15 @@ public class ComputerUtil {
}
}
// cast Backup creatures in main 1 to pump attackers
if (cardState.hasKeyword(Keyword.BACKUP)) {
for (Card potentialAtkr: ai.getCreaturesInPlay()) {
if (ComputerUtilCard.doesCreatureAttackAI(ai, potentialAtkr)) {
return true;
}
}
}
// try not to cast Raid creatures in main 1 if an attack is likely
if ("Count$AttackersDeclared".equals(card.getSVar("RaidTest")) && !cardState.hasKeyword(Keyword.HASTE)) {
for (Card potentialAtkr: ai.getCreaturesInPlay()) {
@@ -1039,6 +1096,10 @@ public class ComputerUtil {
return true;
}
if (cardState.hasKeyword(Keyword.EXALTED) || cardState.hasKeyword(Keyword.EXTORT)) {
return true;
}
if (cardState.hasKeyword(Keyword.RIOT) && ChooseGenericEffectAi.preferHasteForRiot(sa, ai)) {
// Planning to choose Haste for Riot, so do this in Main 1
return true;
@@ -1046,6 +1107,7 @@ public class ComputerUtil {
// if we have non-persistent mana in our pool, would be good to try to use it and not waste it
if (ai.getManaPool().willManaBeLostAtEndOfPhase()) {
// TODO should check if some will be kept and skip those
boolean canUseToPayCost = false;
for (byte color : ManaAtom.MANATYPES) {
// tries to reuse any amount of colorless if cost only has generic
@@ -1065,10 +1127,6 @@ public class ComputerUtil {
return true;
}
if (cardState.hasKeyword(Keyword.EXALTED) || cardState.hasKeyword(Keyword.EXTORT)) {
return true;
}
//cast equipments in Main1 when there are creatures to equip and no other unequipped equipment
if (card.isEquipment()) {
boolean playNow = false;
@@ -1077,7 +1135,7 @@ public class ComputerUtil {
playNow = false;
break;
}
if (!playNow && c.isCreature() && ComputerUtilCombat.canAttackNextTurn(c) && c.canBeAttached(card)) {
if (!playNow && c.isCreature() && ComputerUtilCombat.canAttackNextTurn(c) && c.canBeAttached(card, null)) {
playNow = true;
}
}
@@ -1153,7 +1211,7 @@ public class ComputerUtil {
creatures2.add(creatures.get(i));
}
}
if (((creatures2.size() + CardUtil.getThisTurnCast("Creature.YouCtrl", vengevines.get(0), null).size()) > 1)
if (((creatures2.size() + CardUtil.getThisTurnCast("Creature.YouCtrl", vengevines.get(0), null, ai).size()) > 1)
&& card.isCreature() && card.getManaCost().getCMC() <= 3) {
return true;
}
@@ -1227,12 +1285,12 @@ public class ComputerUtil {
final Game game = sa.getActivatingPlayer().getGame();
final PhaseHandler ph = game.getPhaseHandler();
return (sa.getHostCard().isCreature()
return sa.getHostCard().isCreature()
&& sa.getPayCosts().hasTapCost()
&& (ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_BLOCKERS)
&& !ph.getNextTurn().equals(sa.getActivatingPlayer()))
&& !sa.getHostCard().hasSVar("EndOfTurnLeavePlay")
&& !sa.hasParam("ActivationPhases"));
&& !sa.hasParam("ActivationPhases");
}
//returns true if it's better to wait until blockers are declared).
@@ -1506,7 +1564,7 @@ public class ComputerUtil {
if (sa.getApi() != ApiType.DealDamage) {
continue;
}
sa.setActivatingPlayer(ai);
sa.setActivatingPlayer(ai, true);
final String numDam = sa.getParam("NumDmg");
int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), numDam, sa);
if (dmg <= damage) {
@@ -1698,6 +1756,10 @@ public class ComputerUtil {
continue;
}
if (c.getCounters(CounterEnumType.SHIELD) > 0) {
continue;
}
// already regenerated
if (c.getShieldCount() > 0) {
continue;
@@ -1756,8 +1818,7 @@ public class ComputerUtil {
&& (saviourApi == ApiType.ChangeZone || saviourApi == ApiType.Pump || saviourApi == ApiType.PumpAll
|| saviourApi == ApiType.Protection || saviourApi == ApiType.PutCounter || saviourApi == ApiType.PutCounterAll
|| saviourApi == null)) {
final int dmg = -AbilityUtils.calculateAmount(source,
topStack.getParam("NumDef"), topStack);
final int dmg = -AbilityUtils.calculateAmount(source, topStack.getParam("NumDef"), topStack);
for (final Object o : objects) {
if (o instanceof Card) {
final Card c = (Card) o;
@@ -1813,6 +1874,10 @@ public class ComputerUtil {
continue;
}
if (c.getCounters(CounterEnumType.SHIELD) > 0) {
continue;
}
// already regenerated
if (c.getShieldCount() > 0) {
continue;
@@ -2030,7 +2095,7 @@ public class ComputerUtil {
return finalHandSize;
}
CardCollectionView library = ai.getZone(ZoneType.Library).getCards();
CardCollectionView library = ai.getCardsIn(ZoneType.Library);
int landsInDeck = CardLists.count(library, CardPredicates.isType("Land"));
// no land deck, can't do anything better
@@ -2258,23 +2323,31 @@ public class ComputerUtil {
if (goodChoices.isEmpty()) {
goodChoices = validCards;
}
final CardCollection dChoices = new CardCollection();
if (sa.hasParam("DiscardValid")) {
final String validString = sa.getParam("DiscardValid");
if (validString.contains("Creature") && !validString.contains("nonCreature")) {
final Card c = ComputerUtilCard.getBestCreatureAI(goodChoices);
if (c != null) {
dChoices.add(c);
if (min == 1 && max == 1) {
if (sa.hasParam("DiscardValid")) {
final String validString = sa.getParam("DiscardValid");
if (validString.contains("Creature") && !validString.contains("nonCreature")) {
final Card c = ComputerUtilCard.getBestCreatureAI(goodChoices);
if (c != null) {
return new CardCollection(c);
}
}
}
}
// not enough good choices, need to fill the rest
int minDiff = min - goodChoices.size();
if (minDiff > 0) {
goodChoices.addAll(Aggregates.random(CardLists.filter(validCards, Predicates.not(Predicates.in(goodChoices))), minDiff));
return goodChoices;
}
Collections.sort(goodChoices, CardLists.TextLenComparator);
CardLists.sortByCmcDesc(goodChoices);
dChoices.add(goodChoices.get(0));
return Aggregates.random(goodChoices, min, new CardCollection());
return goodChoices.subList(0, max);
}
public static CardCollection getCardsToDiscardFromFriend(Player aiChooser, Player p, SpellAbility sa, CardCollection validCards, int min, int max) {
@@ -2286,7 +2359,9 @@ public class ComputerUtil {
return getCardsToDiscardFromOpponent(aiChooser, p, sa, validCards, min, max);
}
public static String chooseSomeType(Player ai, String kindOfType, String logic, Collection<String> validTypes, List<String> invalidTypes) {
public static String chooseSomeType(Player ai, String kindOfType, SpellAbility sa, Collection<String> validTypes, List<String> invalidTypes) {
final String logic = sa.getParam("AILogic");
if (invalidTypes == null) {
invalidTypes = ImmutableList.of();
}
@@ -2313,6 +2388,23 @@ public class ComputerUtil {
}
}
}
else {
// Are we picking a type to reduce costs for that type?
boolean reducingCost = false;
for (StaticAbility s : sa.getHostCard().getStaticAbilities()) {
if ("ReduceCost".equals(s.getParam("Mode")) && "Card.ChosenType".equals(s.getParam("ValidCard"))) {
reducingCost = true;
break;
}
}
if (reducingCost) {
List<String> valid = Lists.newArrayList(validTypes);
valid.removeAll(invalidTypes);
valid.remove("Land"); // Lands don't have costs to reduce
chosen = ComputerUtilCard.getMostProminentCardType(ai.getAllCards(), valid);
}
}
if (StringUtils.isEmpty(chosen)) {
chosen = validTypes.isEmpty() ? "Creature" : Aggregates.random(validTypes);
}
@@ -2328,15 +2420,16 @@ public class ComputerUtil {
chosen = ComputerUtilCard.getMostProminentType(ai.getCardsIn(ZoneType.Battlefield), valid);
}
else if (logic.equals("MostProminentOppControls")) {
CardCollection list = CardLists.filterControlledBy(game.getCardsIn(ZoneType.Battlefield), ai.getOpponents());
CardCollection list = ai.getOpponents().getCardsIn(ZoneType.Battlefield);
chosen = ComputerUtilCard.getMostProminentType(list, valid);
if (!CardType.isACreatureType(chosen) || invalidTypes.contains(chosen)) {
list = CardLists.filterControlledBy(game.getCardsInGame(), ai.getOpponents());
chosen = ComputerUtilCard.getMostProminentType(list, valid);
}
}
else if (logic.equals("MostProminentInComputerDeck")) {
chosen = ComputerUtilCard.getMostProminentType(ai.getAllCards(), valid);
else if (logic.startsWith("MostProminentInComputerDeck")) {
boolean includeTokens = !logic.endsWith("NonToken");
chosen = ComputerUtilCard.getMostProminentType(ai.getAllCards(), valid, includeTokens);
}
else if (logic.equals("MostProminentInComputerGraveyard")) {
chosen = ComputerUtilCard.getMostProminentType(ai.getCardsIn(ZoneType.Graveyard), valid);
@@ -2349,7 +2442,7 @@ public class ComputerUtil {
} else if (kindOfType.equals("Basic Land")) {
if (logic != null) {
if (logic.equals("MostProminentOppControls")) {
CardCollection list = CardLists.filterControlledBy(game.getCardsIn(ZoneType.Battlefield), ai.getOpponents());
CardCollection list = ai.getOpponents().getCardsIn(ZoneType.Battlefield);
List<String> valid = Lists.newArrayList(CardType.getBasicTypes());
valid.removeAll(invalidTypes);
@@ -2601,8 +2694,7 @@ public class ComputerUtil {
}
public static CardCollection getSafeTargets(final Player ai, SpellAbility sa, CardCollectionView validCards) {
CardCollection safeCards = new CardCollection(validCards);
safeCards = CardLists.filter(safeCards, new Predicate<Card>() {
CardCollection safeCards = CardLists.filter(validCards, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
if (c.getController() == ai) {
@@ -2615,8 +2707,7 @@ public class ComputerUtil {
}
public static Card getKilledByTargeting(final SpellAbility sa, CardCollectionView validCards) {
CardCollection killables = new CardCollection(validCards);
killables = CardLists.filter(killables, new Predicate<Card>() {
CardCollection killables = CardLists.filter(validCards, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return c.getController() != sa.getActivatingPlayer() && c.getSVar("Targeting").equals("Dies");
@@ -2788,7 +2879,7 @@ public class ComputerUtil {
|| type.is(CounterEnumType.GOLD) || type.is(CounterEnumType.MUSIC) || type.is(CounterEnumType.PUPA)
|| type.is(CounterEnumType.PARALYZATION) || type.is(CounterEnumType.SHELL) || type.is(CounterEnumType.SLEEP)
|| type.is(CounterEnumType.SLUMBER) || type.is(CounterEnumType.SLEIGHT) || type.is(CounterEnumType.WAGE)
|| type.is(CounterEnumType.INCARNATION) || type.is(CounterEnumType.RUST);
|| type.is(CounterEnumType.INCARNATION) || type.is(CounterEnumType.RUST) || type.is(CounterEnumType.STUN);
}
// this countertypes has no effect
@@ -2803,7 +2894,7 @@ public class ComputerUtil {
}
return type.is(CounterEnumType.AWAKENING) || type.is(CounterEnumType.MANIFESTATION) || type.is(CounterEnumType.PETRIFICATION)
|| type.is(CounterEnumType.TRAINING);
|| type.is(CounterEnumType.TRAINING) || type.is(CounterEnumType.GHOSTFORM);
}
public static Player evaluateBoardPosition(final List<Player> listToEvaluate) {
@@ -2911,7 +3002,7 @@ public class ComputerUtil {
return false;
}
public static boolean targetPlayableSpellCard(final Player ai, CardCollection options, final SpellAbility sa, final boolean withoutPayingManaCost, boolean mandatory) {
public static boolean targetPlayableSpellCard(final Player ai, Iterable<Card> options, final SpellAbility sa, final boolean withoutPayingManaCost, boolean mandatory) {
// determine and target a card with a SA that the AI can afford and will play
AiController aic = ((PlayerControllerAi) ai.getController()).getAi();
sa.resetTargets();
@@ -2934,7 +3025,7 @@ public class ComputerUtil {
}
SpellAbility abTest = withoutPayingManaCost ? ab.copyWithNoManaCost() : ab.copy();
// at this point, we're assuming that card will be castable from whichever zone it's in by the AI player.
abTest.setActivatingPlayer(ai);
abTest.setActivatingPlayer(ai, true);
abTest.getRestrictions().setZone(c.getZone().getZoneType());
if (AiPlayDecision.WillPlay == aic.canPlaySa(abTest) && ComputerUtilCost.canPayCost(abTest, ai, false)) {
targets.add(c);
@@ -2943,8 +3034,8 @@ public class ComputerUtil {
}
if (targets.isEmpty()) {
if (mandatory && !options.isEmpty()) {
targets = options;
if (mandatory && !Iterables.isEmpty(options)) {
targets.addAll(options);
} else {
return false;
}
@@ -3092,4 +3183,14 @@ public class ComputerUtil {
return remainingLife;
}
public static boolean isETBprevented(Card c) {
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(c);
// don't need to bother with real LKI since this is a passive check and the card isn't going anywhere
repParams.put(AbilityKey.CardLKI, c);
repParams.put(AbilityKey.Origin, c.getLastKnownZone().getZoneType());
repParams.put(AbilityKey.Destination, ZoneType.Battlefield);
List<ReplacementEffect> list = c.getGame().getReplacementHandler().getReplacementList(ReplacementType.Moved, repParams, ReplacementLayer.CantHappen);
return !list.isEmpty();
}
}

View File

@@ -91,7 +91,7 @@ public class ComputerUtilAbility {
List<SpellAbility> originListWithAddCosts = Lists.newArrayList();
for (SpellAbility sa : originList) {
// If this spell has alternative additional costs, add them instead of the unmodified SA itself
sa.setActivatingPlayer(player);
sa.setActivatingPlayer(player, true);
originListWithAddCosts.addAll(GameActionUtil.getAdditionalCostSpell(sa));
}
@@ -115,10 +115,10 @@ public class ComputerUtilAbility {
newAbilities.add(sa);
newAbilities.addAll(otherAltSa);
}
final List<SpellAbility> result = Lists.newArrayList();
for (SpellAbility sa : newAbilities) {
sa.setActivatingPlayer(player);
sa.setActivatingPlayer(player, true);
// Optional cost selection through the AI controller
boolean choseOptCost = false;

File diff suppressed because it is too large Load Diff

View File

@@ -48,6 +48,7 @@ import forge.game.replacement.ReplacementLayer;
import forge.game.replacement.ReplacementType;
import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
import forge.game.staticability.StaticAbilityMustAttack;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
@@ -127,7 +128,7 @@ public class ComputerUtilCombat {
// || (attacker.hasKeyword(Keyword.FADING) && attacker.getCounters(CounterEnumType.FADE) == 0)
// || attacker.hasSVar("EndOfTurnLeavePlay"));
// The creature won't untap next turn
return !attacker.isTapped() || Untap.canUntap(attacker);
return !attacker.isTapped() || (attacker.getCounters(CounterEnumType.STUN) == 0 && Untap.canUntap(attacker));
}
/**
@@ -199,8 +200,8 @@ public class ComputerUtilCombat {
return 0;
}
damage += predictPowerBonusOfAttacker(attacker, null, combat, withoutAbilities);
if (!attacker.hasKeyword(Keyword.INFECT)) {
damage += predictPowerBonusOfAttacker(attacker, null, combat, withoutAbilities);
sum = predictDamageTo(attacked, damage, attacker, true);
if (attacker.hasDoubleStrike()) {
sum *= 2;
@@ -325,13 +326,12 @@ public class ComputerUtilCombat {
final List<Card> blockers = combat.getBlockers(attacker);
if (blockers.size() == 0
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage "
+ "as though it weren't blocked.")) {
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
unblocked.add(attacker);
} else if (attacker.hasKeyword(Keyword.TRAMPLE)
&& getAttack(attacker) > totalShieldDamage(attacker, blockers)) {
if (!attacker.hasKeyword(Keyword.INFECT)) {
damage += getAttack(attacker) - totalShieldDamage(attacker, blockers);
} else if (attacker.hasKeyword(Keyword.TRAMPLE) && !attacker.hasKeyword(Keyword.INFECT)) {
int dmgAfterShielding = getAttack(attacker) - totalShieldDamage(attacker, blockers);
if (dmgAfterShielding > 0) {
damage += dmgAfterShielding;
}
}
}
@@ -367,16 +367,16 @@ public class ComputerUtilCombat {
final List<Card> blockers = combat.getBlockers(attacker);
if (blockers.size() == 0
|| attacker.hasKeyword("You may have CARDNAME assign its combat damage"
+ " as though it weren't blocked.")) {
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
unblocked.add(attacker);
} else if (attacker.hasKeyword(Keyword.TRAMPLE)
&& getAttack(attacker) > totalShieldDamage(attacker, blockers)) {
} else if (attacker.hasKeyword(Keyword.TRAMPLE)) {
int trampleDamage = getAttack(attacker) - totalShieldDamage(attacker, blockers);
if (attacker.hasKeyword(Keyword.INFECT)) {
poison += trampleDamage;
if (trampleDamage > 0) {
if (attacker.hasKeyword(Keyword.INFECT)) {
poison += trampleDamage;
}
poison += predictPoisonFromTriggers(attacker, ai, trampleDamage);
}
poison += predictPoisonFromTriggers(attacker, ai, trampleDamage);
}
}
@@ -388,7 +388,7 @@ public class ComputerUtilCombat {
public static List<Card> getLifeThreateningCommanders(final Player ai, final Combat combat) {
List<Card> res = Lists.newArrayList();
for (Card c : combat.getAttackers()) {
if (c.isCommander()) {
if (c.isCommander() && combat.isAttacking(c, ai)) {
int currentCommanderDamage = ai.getCommanderDamage(c);
if (damageIfUnblocked(c, ai, combat, false) + currentCommanderDamage >= 21) {
res.add(c);
@@ -519,7 +519,7 @@ public class ComputerUtilCombat {
return true;
}
return resultingPoison(ai, combat) > 9;
return resultingPoison(ai, combat) >= ai.getGame().getRules().getPoisonCountersToLose();
}
// This calculates the amount of damage a blockgang can deal to the attacker
@@ -687,7 +687,7 @@ public class ComputerUtilCombat {
final int defenderDefense = blocker.getLethalDamage() - flankingMagnitude + defBushidoMagnitude;
return defenderDefense;
} // shieldDamage
}
// For AI safety measures like Regeneration
/**
@@ -919,7 +919,7 @@ public class ComputerUtilCombat {
final CardCollectionView cardList = CardCollection.combine(game.getCardsIn(ZoneType.Battlefield), game.getCardsIn(ZoneType.Command));
for (final Card card : cardList) {
for (final StaticAbility stAb : card.getStaticAbilities()) {
if (!stAb.getParam("Mode").equals("Continuous")) {
if (!stAb.checkMode("Continuous")) {
continue;
}
if (!stAb.hasParam("Affected") || !stAb.getParam("Affected").contains("blocking")) {
@@ -1181,11 +1181,6 @@ public class ComputerUtilCombat {
public static int predictPowerBonusOfAttacker(final Card attacker, final Card blocker, final Combat combat, boolean withoutAbilities, boolean withoutCombatStaticAbilities) {
int power = 0;
//check Exalted only for the first attacker
if (combat != null && combat.getAttackers().isEmpty()) {
power += attacker.getController().countExaltedBonus();
}
// Serene Master switches power with attacker
if (blocker!= null && blocker.getName().equals("Serene Master")) {
power += blocker.getNetPower() - attacker.getNetPower();
@@ -1213,12 +1208,14 @@ public class ComputerUtilCombat {
theTriggers.addAll(blocker.getTriggers());
}
// TODO consider Exert + Enlist
// look out for continuous static abilities that only care for attacking creatures
if (!withoutCombatStaticAbilities) {
final CardCollectionView cardList = CardCollection.combine(game.getCardsIn(ZoneType.Battlefield), game.getCardsIn(ZoneType.Command));
for (final Card card : cardList) {
for (final StaticAbility stAb : card.getStaticAbilities()) {
if (!stAb.getParam("Mode").equals("Continuous")) {
if (!stAb.checkMode("Continuous")) {
continue;
}
if (!stAb.hasParam("Affected") || !stAb.getParam("Affected").contains("attacking")) {
@@ -1259,7 +1256,7 @@ public class ComputerUtilCombat {
continue;
}
sa.setActivatingPlayer(source.getController());
sa.setActivatingPlayer(source.getController(), true);
if (sa.hasParam("Cost")) {
if (!CostPayment.canPayAdditionalCosts(sa.getPayCosts(), sa)) {
@@ -1268,21 +1265,17 @@ public class ComputerUtilCombat {
}
List<Card> list = Lists.newArrayList();
if (!sa.hasParam("ValidCards")) {
list = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), null);
}
if (sa.hasParam("Defined") && sa.getParam("Defined").startsWith("TriggeredAttacker")) {
list.add(attacker);
}
if (sa.hasParam("ValidCards")) {
if (attacker.isValid(sa.getParam("ValidCards").split(","), source.getController(), source, null)
|| attacker.isValid(sa.getParam("ValidCards").replace("attacking+", "").split(","),
source.getController(), source, null)) {
list.add(attacker);
}
} else {
list = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), null);
}
if (list.isEmpty()) {
continue;
if (sa.hasParam("Defined") && sa.getParam("Defined").startsWith("TriggeredAttacker")) {
list.add(attacker);
}
if (!list.contains(attacker)) {
continue;
@@ -1296,8 +1289,8 @@ public class ComputerUtilCombat {
power += Integer.parseInt(att);
} else {
String bonus = AbilityUtils.getSVar(sa, att);
if (bonus.contains("TriggerCount$NumBlockers")) {
bonus = TextUtil.fastReplace(bonus, "TriggerCount$NumBlockers", "Number$1");
if (bonus.contains("Count$Valid Creature.blockingTriggeredAttacker")) {
bonus = TextUtil.fastReplace(bonus, "Count$Valid Creature.blockingTriggeredAttacker", "Number$1");
} else if (bonus.contains("TriggeredPlayersDefenders$Amount")) { // for Melee
bonus = TextUtil.fastReplace(bonus, "TriggeredPlayersDefenders$Amount", "Number$1");
} else if (bonus.contains("TriggeredAttacker$CardPower")) { // e.g. Arahbo, Roar of the World
@@ -1381,11 +1374,6 @@ public class ComputerUtilCombat {
, boolean withoutAbilities, boolean withoutCombatStaticAbilities) {
int toughness = 0;
//check Exalted only for the first attacker
if (combat != null && combat.getAttackers().isEmpty()) {
toughness += attacker.getController().countExaltedBonus();
}
if (blocker != null && attacker.getName().equals("Shape Stealer")) {
toughness += blocker.getNetToughness() - attacker.getNetToughness();
}
@@ -1448,7 +1436,7 @@ public class ComputerUtilCombat {
if (sa == null) {
continue;
}
sa.setActivatingPlayer(source.getController());
sa.setActivatingPlayer(source.getController(), true);
if (sa.usesTargeting()) {
continue; // targeted pumping not supported
@@ -1464,14 +1452,15 @@ public class ComputerUtilCombat {
toughness -= predictDamageTo(attacker, damage, source, false);
continue;
} else if (ApiType.Pump.equals(sa.getApi())) {
if (!sa.hasParam("NumDef")) {
continue;
}
if (sa.hasParam("Cost")) {
if (!CostPayment.canPayAdditionalCosts(sa.getPayCosts(), sa)) {
continue;
}
}
if (!sa.hasParam("NumDef")) {
continue;
}
final String defined = sa.getParam("Defined");
CardCollection list = AbilityUtils.getDefinedCards(source, defined, sa);
if (defined != null && defined.startsWith("TriggeredAttacker")) {
@@ -1489,14 +1478,17 @@ public class ComputerUtilCombat {
toughness += Integer.parseInt(def);
} else {
String bonus = AbilityUtils.getSVar(sa, def);
if (bonus.contains("TriggerCount$NumBlockers")) {
bonus = TextUtil.fastReplace(bonus, "TriggerCount$NumBlockers", "Number$1");
if (bonus.contains("Count$Valid Creature.blockingTriggeredAttacker")) {
bonus = TextUtil.fastReplace(bonus, "Count$Valid Creature.blockingTriggeredAttacker", "Number$1");
} else if (bonus.contains("TriggeredPlayersDefenders$Amount")) { // for Melee
bonus = TextUtil.fastReplace(bonus, "TriggeredPlayersDefenders$Amount", "Number$1");
}
toughness += AbilityUtils.calculateAmount(source, bonus, sa);
}
} else if (ApiType.PumpAll.equals(sa.getApi())) {
if (!sa.hasParam("NumDef")) {
continue;
}
if (sa.hasParam("Cost")) {
if (!CostPayment.canPayAdditionalCosts(sa.getPayCosts(), sa)) {
continue;
@@ -1506,9 +1498,6 @@ public class ComputerUtilCombat {
if (!sa.hasParam("ValidCards")) {
continue;
}
if (!sa.hasParam("NumDef")) {
continue;
}
if (!attacker.isValid(sa.getParam("ValidCards").replace("attacking+", "").split(","), source.getController(), source, sa)) {
continue;
}
@@ -1521,8 +1510,8 @@ public class ComputerUtilCombat {
toughness += Integer.parseInt(def);
} else {
String bonus = AbilityUtils.getSVar(sa, def);
if (bonus.contains("TriggerCount$NumBlockers")) {
bonus = TextUtil.fastReplace(bonus, "TriggerCount$NumBlockers", "Number$1");
if (bonus.contains("Count$Valid Creature.blockingTriggeredAttacker")) {
bonus = TextUtil.fastReplace(bonus, "Count$Valid Creature.blockingTriggeredAttacker", "Number$1");
} else if (bonus.contains("TriggeredPlayersDefenders$Amount")) { // for Melee
bonus = TextUtil.fastReplace(bonus, "TriggeredPlayersDefenders$Amount", "Number$1");
}
@@ -1639,9 +1628,8 @@ public class ComputerUtilCombat {
* a {@link forge.game.card.Card} object.
* @return a boolean.
*/
public static boolean combatantCantBeDestroyed(Player ai, final Card combatant) {
// either indestructible or may regenerate
if (combatant.hasKeyword(Keyword.INDESTRUCTIBLE) || ComputerUtil.canRegenerate(ai, combatant)) {
public static boolean combatantCantBeDestroyed(final Player ai, final Card combatant) {
if (combatant.getCounters(CounterEnumType.SHIELD) > 0) {
return true;
}
@@ -1650,6 +1638,11 @@ public class ComputerUtilCombat {
return true;
}
// either indestructible or may regenerate
if (combatant.hasKeyword(Keyword.INDESTRUCTIBLE) || ComputerUtil.canRegenerate(ai, combatant)) {
return true;
}
return false;
}
@@ -2047,7 +2040,7 @@ public class ComputerUtilCombat {
final boolean hasTrample = attacker.hasKeyword(Keyword.TRAMPLE);
if (combat != null && hasTrample && attacker.isAttacking()) {
if (combat != null && remaining != null && hasTrample && attacker.isAttacking()) {
// if attacker has trample and some of its blockers are also blocking others it's generally a good idea
// to assign those without trample first so we can maximize the damage to the defender
for (final Card c : remaining) {
@@ -2067,7 +2060,6 @@ public class ComputerUtilCombat {
if (block.size() == 1) {
final Card blocker = block.getFirst();
// trample
if (hasTrample) {
int dmgToKill = getEnoughDamageToKill(blocker, dmgCanDeal, attacker, true);
@@ -2123,7 +2115,7 @@ public class ComputerUtilCombat {
}
}
return damageMap;
} // setAssignedDamage()
}
// how much damage is enough to kill the creature (for AI)
/**
@@ -2158,24 +2150,15 @@ public class ComputerUtilCombat {
* a boolean.
* @return a int.
*/
public static final int getEnoughDamageToKill(final Card c, final int maxDamage, final Card source, final boolean isCombat,
final boolean noPrevention) {
final int killDamage = getDamageToKill(c, false);
public static final int getEnoughDamageToKill(final Card c, final int maxDamage, final Card source, final boolean isCombat, final boolean noPrevention) {
int killDamage = getDamageToKill(c, false);
if (c.hasKeyword(Keyword.INDESTRUCTIBLE) || c.getShieldCount() > 0) {
if (c.hasKeyword(Keyword.INDESTRUCTIBLE) || c.getCounters(CounterEnumType.SHIELD) > 0 || (c.getShieldCount() > 0 && c.canBeShielded())) {
if (!(source.hasKeyword(Keyword.WITHER) || source.hasKeyword(Keyword.INFECT))) {
return maxDamage + 1;
}
} else if (source.hasKeyword(Keyword.DEATHTOUCH) && !c.isPlaneswalker()) {
for (int i = 1; i <= maxDamage; i++) {
if (noPrevention) {
if (c.staticReplaceDamage(i, source, isCombat) > 0) {
return i;
}
} else if (predictDamageTo(c, i, source, isCombat) > 0) {
return i;
}
}
} else if (source.hasKeyword(Keyword.DEATHTOUCH) && c.isCreature()) {
killDamage = 1;
}
for (int i = 1; i <= maxDamage; i++) {
@@ -2203,14 +2186,7 @@ public class ComputerUtilCombat {
*/
public final static int getDamageToKill(final Card c, boolean withShields) {
int damageShield = withShields ? c.getPreventNextDamageTotalShields() : 0;
int killDamage = 0;
if (c.isCreature()) {
killDamage = Math.max(0, c.getLethalDamage());
}
if (c.isPlaneswalker()) {
int killDamagePW = c.getCurrentLoyalty();
killDamage = c.isCreature() ? Math.min(killDamage, killDamagePW) : killDamagePW;
}
int killDamage = c.getExcessDamageValue(false);
if (killDamage > damageShield
&& c.hasSVar("DestroyWhenDamaged")) {
@@ -2340,7 +2316,7 @@ public class ComputerUtilCombat {
* @return transform creature if possible, original creature otherwise
*/
private final static Card canTransform(Card original) {
if (original.isDoubleFaced() && !original.isInAlternateState()) {
if (original.isTransformable() && !original.isInAlternateState()) {
for (SpellAbility sa : original.getSpellAbilities()) {
if (sa.getApi() == ApiType.SetState && ComputerUtilCost.canPayCost(sa, original.getController(), false)) {
Card transformed = CardUtil.getLKICopy(original);
@@ -2418,7 +2394,6 @@ public class ComputerUtilCombat {
// (currently looks for the creature with maximum raw power since that's what the AI usually judges by when
// deciding whether the creature is worth blocking).
// If the creature doesn't change into anything, returns the original creature.
if (attacker == null) { return null; }
Card attackerAfterTrigs = attacker;
// Test for some special triggers that can change the creature in combat
@@ -2489,21 +2464,23 @@ public class ComputerUtilCombat {
}
}
poison += pd;
if (pd > 0 && attacker.hasDoubleStrike()) {
poison += pd;
}
// TODO: Predict replacement effects for counters (doubled, reduced, additional counters, etc.)
}
// intern toxic effect
poison += attacker.getKeywordMagnitude(Keyword.TOXIC);
}
if (attacker.hasDoubleStrike()) {
poison *= 2;
}
return poison;
}
public static GameEntity addAttackerToCombat(SpellAbility sa, Card attacker, FCollection<GameEntity> defenders) {
public static GameEntity addAttackerToCombat(SpellAbility sa, Card attacker, Iterable<? extends GameEntity> defenders) {
Combat combat = sa.getHostCard().getGame().getCombat();
if (combat != null) {
// 1. If the card that spawned the attacker was sent at a planeswalker, attack the same. Consider improving.
GameEntity def = combat.getDefenderByAttacker(sa.getHostCard());
if (def != null && def instanceof Card && ((Card)def).isPlaneswalker() && defenders.contains(def)) {
if (def instanceof Card && ((Card)def).isPlaneswalker() && Iterables.contains(defenders, def)) {
return def;
}
// 2. Otherwise, go through the list of options one by one, choose the first one that can't be blocked profitably.

View File

@@ -7,6 +7,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import forge.ai.AiCardMemory.MemorySet;
import forge.ai.ability.AnimateAi;
import forge.ai.ability.TokenAi;
import forge.card.ColorSet;
import forge.game.Game;
import forge.game.ability.AbilityUtils;
@@ -14,13 +15,13 @@ import forge.game.ability.ApiType;
import forge.game.card.*;
import forge.game.card.CardPredicates.Presets;
import forge.game.combat.Combat;
import forge.game.combat.CombatUtil;
import forge.game.cost.*;
import forge.game.keyword.Keyword;
import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.spellability.Spell;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.WrappedAbility;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
import forge.util.TextUtil;
@@ -233,7 +234,7 @@ public class ComputerUtilCost {
return true;
}
public static boolean checkForManaSacrificeCost(final Player ai, final Cost cost, final Card source, final SpellAbility sourceAbility, final boolean effect) {
public static boolean checkForManaSacrificeCost(final Player ai, final Cost cost, final SpellAbility sourceAbility, final boolean effect) {
// TODO cheating via autopay can still happen, need to get the real ai player from controlledBy
if (cost == null || !ai.isAI()) {
return true;
@@ -246,18 +247,17 @@ public class ComputerUtilCost {
exclude.addAll(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST));
}
if (part.payCostFromSource()) {
list.add(source);
list.add(sourceAbility.getHostCard());
} else if (part.getType().equals("OriginalHost")) {
list.add(sourceAbility.getOriginalHost());
} else if (part.getAmount().equals("All")) {
// Does the AI want to use Sacrifice All?
return false;
} else {
final String amount = part.getAmount();
Integer c = part.convertAmount();
if (c == null) {
c = AbilityUtils.calculateAmount(source, amount, sourceAbility);
c = part.getAbilityAmount(sourceAbility);
}
final AiController aic = ((PlayerControllerAi)ai.getController()).getAi();
CardCollectionView choices = aic.chooseSacrificeType(part.getType(), sourceAbility, effect, c, exclude);
@@ -407,7 +407,7 @@ public class ComputerUtilCost {
}
/**
* Check creature sacrifice cost.
* Check TapType cost.
*
* @param cost
* the cost
@@ -435,9 +435,7 @@ public class ComputerUtilCost {
final int vehicleValue = ComputerUtilCard.evaluateCreature(vehicle);
String totalP = type.split("withTotalPowerGE")[1];
type = TextUtil.fastReplace(type, TextUtil.concatNoSpace("+withTotalPowerGE", totalP), "");
CardCollection exclude = CardLists.getValidCards(
new CardCollection(ai.getCardsIn(ZoneType.Battlefield)), type.split(";"),
source.getController(), source, sa);
CardCollection exclude = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), source.getController(), source, sa);
exclude = CardLists.filter(exclude, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
@@ -525,13 +523,14 @@ public class ComputerUtilCost {
*/
public static boolean canPayCost(final SpellAbility sa, final Player player, final boolean effect) {
if (sa.getActivatingPlayer() == null) {
sa.setActivatingPlayer(player); // complaints on NPE had came before this line was added.
sa.setActivatingPlayer(player, true); // complaints on NPE had came before this line was added.
}
final boolean cannotBeCountered = !CardFactoryUtil.isCounterable(sa.getHostCard());
// Check for stuff like Nether Void
int extraManaNeeded = 0;
if (sa instanceof Spell) {
final boolean cannotBeCountered = !CardFactoryUtil.isCounterable(sa.getHostCard());
for (Card c : player.getGame().getCardsIn(ZoneType.Battlefield)) {
final String snem = c.getSVar("AI_SpellsNeedExtraMana");
if (!StringUtils.isBlank(snem)) {
@@ -591,7 +590,7 @@ public class ComputerUtilCost {
}
// Ward - will be accounted for when rechecking a targeted ability
if (!(sa instanceof WrappedAbility) && sa.usesTargeting()) {
if (!sa.isTrigger() && sa.usesTargeting() && (!sa.isSpell() || !cannotBeCountered)) {
for (Card tgt : sa.getTargets().getTargetCards()) {
if (tgt.hasKeyword(Keyword.WARD) && tgt.isInPlay() && tgt.getController().isOpponentOf(sa.getHostCard().getController())) {
Cost wardCost = ComputerUtilCard.getTotalWardCost(tgt);
@@ -634,7 +633,7 @@ public class ComputerUtilCost {
return ComputerUtilMana.canPayManaCost(sa, player, extraManaNeeded, effect)
&& CostPayment.canPayAdditionalCosts(sa.getPayCosts(), sa);
} // canPayCost()
}
public static boolean willPayUnlessCost(SpellAbility sa, Player payer, Cost cost, boolean alreadyPaid, FCollectionView<Player> payers) {
final Card source = sa.getHostCard();
@@ -691,6 +690,72 @@ public class ComputerUtilCost {
return false;
} else if ("LowPriority".equals(aiLogic) && MyRandom.getRandom().nextInt(100) < 67) {
return false;
} else if (aiLogic != null && aiLogic.startsWith("Fabricate")) {
final int n = Integer.valueOf(aiLogic.substring("Fabricate".length()));
// if host would leave the play or if host is useless, create tokens
if (source.hasSVar("EndOfTurnLeavePlay") || ComputerUtilCard.isUselessCreature(payer, source)) {
return false;
}
// need a copy for one with extra +1/+1 counter boost,
// without causing triggers to run
final Card copy = CardUtil.getLKICopy(source);
copy.setCounters(CounterEnumType.P1P1, copy.getCounters(CounterEnumType.P1P1) + n);
copy.setZone(source.getZone());
// if host would put into the battlefield attacking
Combat combat = source.getGame().getCombat();
if (combat != null && combat.isAttacking(source)) {
final Player defender = combat.getDefenderPlayerByAttacker(source);
if (defender.canLoseLife() && !ComputerUtilCard.canBeBlockedProfitably(defender, copy, true)) {
return true;
}
return false;
}
// if the host has haste and can attack
if (CombatUtil.canAttack(copy)) {
for (final Player opp : payer.getOpponents()) {
if (CombatUtil.canAttack(copy, opp) &&
opp.canLoseLife() &&
!ComputerUtilCard.canBeBlockedProfitably(opp, copy, true))
return true;
}
}
// TODO check for trigger to turn token ETB into +1/+1 counter for host
// TODO check for trigger to turn token ETB into damage or life loss for opponent
// in this cases Token might be prefered even if they would not survive
final Card tokenCard = TokenAi.spawnToken(payer, sa);
// Token would not survive
if (!tokenCard.isCreature() || tokenCard.getNetToughness() < 1) {
return true;
}
// Special Card logic, this one try to median its power with the number of artifacts
if ("Marionette Master".equals(source.getName())) {
CardCollection list = CardLists.filter(payer.getCardsIn(ZoneType.Battlefield), Presets.ARTIFACTS);
return list.size() >= copy.getNetPower();
} else if ("Cultivator of Blades".equals(source.getName())) {
// Cultivator does try to median with number of Creatures
CardCollection list = payer.getCreaturesInPlay();
return list.size() >= copy.getNetPower();
}
// evaluate Creature with +1/+1
int evalCounter = ComputerUtilCard.evaluateCreature(copy);
final CardCollection tokenList = new CardCollection(source);
for (int i = 0; i < n; ++i) {
tokenList.add(TokenAi.spawnToken(payer, sa));
}
// evaluate Host with Tokens
int evalToken = ComputerUtilCard.evaluateCreatureList(tokenList);
return evalToken < evalCounter;
}
// Check for shocklands and similar ETB replacement effects
@@ -709,9 +774,12 @@ public class ComputerUtilCost {
// Check if the AI intends to play the card and if it can pay for it with the mana it has
boolean willPlay = ComputerUtil.hasReasonToPlayCardThisTurn(payer, c);
boolean canPay = c.getManaCost().canBePaidWithAvailable(ColorSet.fromNames(getAvailableManaColors(payer, source)).getColor());
return canPay && willPlay;
if (canPay && willPlay) {
return true;
}
}
}
return false;
}
}
}
@@ -721,6 +789,21 @@ public class ComputerUtilCost {
return false;
}
// ward or human misplay
if (ApiType.Counter.equals(sa.getApi())) {
List<SpellAbility> spells = AbilityUtils.getDefinedSpellAbilities(source, sa.getParamOrDefault("Defined", "Targeted"), sa);
for (SpellAbility toBeCountered : spells) {
if (toBeCountered.isSpell() && !CardFactoryUtil.isCounterable(toBeCountered.getHostCard())) {
return false;
}
// no reason to pay if we don't plan to confirm
if (toBeCountered.isOptionalTrigger() && !SpellApiToAi.Converter.get(toBeCountered.getApi()).doTriggerNoCostWithSubs(payer, toBeCountered, false)) {
return false;
}
// TODO check hasFizzled
}
}
// AI was crashing because the blank ability used to pay costs
// Didn't have any of the data on the original SA to pay dependant costs
@@ -795,7 +878,7 @@ public class ComputerUtilCost {
}
}
val = ObjectUtils.min(val, abCost.getMaxForNonManaX(root, ai, false));
val = ObjectUtils.min(val, abCost.getMaxForNonManaX(root, ai, effect));
if (val != null && val > 0) {
// filter cost parts for preferences, don't choose X > than possible preferences

View File

@@ -82,7 +82,7 @@ public class ComputerUtilMana {
public static boolean hasEnoughManaSourcesToCast(final SpellAbility sa, final Player ai) {
if (ai == null || sa == null)
return false;
sa.setActivatingPlayer(ai);
sa.setActivatingPlayer(ai, true);
return payManaCost(sa, ai, true, 0, false, false);
}
@@ -90,9 +90,10 @@ public class ComputerUtilMana {
int score = 0;
for (SpellAbility ability : card.getSpellAbilities()) {
ability.setActivatingPlayer(card.getController());
ability.setActivatingPlayer(card.getController(), true);
if (ability.isManaAbility()) {
score += ability.calculateScoreForManaAbility();
// TODO check TriggersWhenSpent
}
else if (!ability.isTrigger() && ability.isPossible()) {
score += 13; //add 13 for any non-mana activated abilities
@@ -315,10 +316,6 @@ public class ComputerUtilMana {
continue;
}
if (!ComputerUtilCost.checkForManaSacrificeCost(ai, ma.getPayCosts(), ma.getHostCard(), ma, ma.isTrigger())) {
continue;
}
if (sa.getApi() == ApiType.Animate) {
// For abilities like Genju of the Cedars, make sure that we're not activating the aura ability by tapping the enchanted card for mana
if (saHost.isAura() && "Enchanted".equals(sa.getParam("Defined"))
@@ -376,13 +373,19 @@ public class ComputerUtilMana {
}
final String typeRes = cost.getSourceRestriction();
if (StringUtils.isNotBlank(typeRes) && !paymentChoice.getHostCard().getType().hasStringType(typeRes)) {
if (StringUtils.isNotBlank(typeRes) && !paymentChoice.getHostCard().isValid(typeRes, null, null, null)) {
continue;
}
if (canPayShardWithSpellAbility(toPay, ai, paymentChoice, sa, checkCosts, cost.getXManaCostPaidByColor())) {
return paymentChoice;
if (!canPayShardWithSpellAbility(toPay, ai, paymentChoice, sa, checkCosts, cost.getXManaCostPaidByColor())) {
continue;
}
if (!ComputerUtilCost.checkForManaSacrificeCost(ai, ma.getPayCosts(), ma, ma.isTrigger())) {
continue;
}
return paymentChoice;
}
return null;
}
@@ -393,10 +396,9 @@ public class ComputerUtilMana {
String manaProduced = toPay.isSnow() && hostCard.isSnow() ? "S" : GameActionUtil.generatedTotalMana(saPayment);
//String originalProduced = manaProduced;
final Map<AbilityKey, Object> repParams = AbilityKey.newMap();
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(hostCard);
repParams.put(AbilityKey.Mana, manaProduced);
repParams.put(AbilityKey.Affected, hostCard);
repParams.put(AbilityKey.Player, ai);
repParams.put(AbilityKey.Activator, ai);
repParams.put(AbilityKey.AbilityMana, saPayment); // RootAbility
// TODO Damping Sphere might replace later?
@@ -515,10 +517,9 @@ public class ComputerUtilMana {
// Run triggers like Nissa
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(hostCard);
runParams.put(AbilityKey.Player, ai); // assuming AI would only ever gives itself mana
runParams.put(AbilityKey.Activator, ai); // assuming AI would only ever gives itself mana
runParams.put(AbilityKey.AbilityMana, saPayment);
runParams.put(AbilityKey.Produced, manaProduced);
runParams.put(AbilityKey.Activator, ai);
for (Trigger tr : ai.getGame().getTriggerHandler().getActiveTrigger(TriggerType.TapsForMana, runParams)) {
SpellAbility trSA = tr.ensureAbility();
if (trSA == null) {
@@ -530,7 +531,7 @@ public class ComputerUtilMana {
if (produced.equals("Chosen")) {
produced = MagicColor.toShortString(trSA.getHostCard().getChosenColor());
}
manaProduced += " " + StringUtils.repeat(produced, pAmount);
manaProduced += " " + StringUtils.repeat(produced, " ", pAmount);
} else if (ApiType.ManaReflected.equals(trSA.getApi())) {
final String colorOrType = trSA.getParamOrDefault("ColorOrType", "Color");
// currently Color or Type, Type is colors + colorless
@@ -589,7 +590,7 @@ public class ComputerUtilMana {
final Mana mana = CostPayment.getMana(ai, part, sa, cost.getSourceRestriction(), (byte) -1, cost.getXManaCostPaidByColor());
if (mana != null) {
if (ai.getManaPool().tryPayCostWithMana(sa, cost, mana, false)) {
manaSpentToPay.add(0, mana);
manaSpentToPay.add(mana);
}
}
}
@@ -656,7 +657,7 @@ public class ComputerUtilMana {
ManaPool.refundMana(manaSpentToPay, ai, sa);
return manaSources;
} // getManaSourcesToPayCost()
}
private static boolean payManaCost(final ManaCostBeingPaid cost, final SpellAbility sa, final Player ai, final boolean test, boolean checkPlayable, boolean effect) {
AiCardMemory.clearMemorySet(ai, MemorySet.PAYS_TAP_COST);
@@ -680,14 +681,12 @@ public class ComputerUtilMana {
} else if (mayPlay.hasParam("MayPlayIgnoreType")) {
ignoreType = true;
}
} else if (sa.hasParam("ActivateIgnoreColor")) {
ignoreColor = true;
}
boolean hasConverge = sa.getHostCard().hasConverge();
ListMultimap<ManaCostShard, SpellAbility> sourcesForShards = getSourcesForShards(cost, sa, ai, test,
checkPlayable, manaSpentToPay, hasConverge, ignoreColor, ignoreType);
if (sourcesForShards == null && !purePhyrexian) {
return false; // no mana abilities to use for paying
}
checkPlayable, hasConverge, ignoreColor, ignoreType);
int testEnergyPool = ai.getCounters(CounterEnumType.ENERGY);
final ManaPool manapool = ai.getManaPool();
@@ -708,8 +707,8 @@ public class ComputerUtilMana {
}
manapool.applyCardMatrix(pay);
for (byte color : MagicColor.WUBRGC) {
if (manapool.tryPayCostWithColor(color, sa, cost)) {
for (byte color : ManaAtom.MANATYPES) {
if (manapool.tryPayCostWithColor(color, sa, cost, manaSpentToPay)) {
found = true;
break;
}
@@ -721,6 +720,11 @@ public class ComputerUtilMana {
if (cost.isPaid()) {
break;
}
if (sourcesForShards == null && !purePhyrexian) {
break; // no mana abilities to use for paying
}
toPay = getNextShardToPay(cost);
boolean lifeInsteadOfBlack = toPay.isBlack() && ai.hasKeyword("PayLifeInsteadOf:B");
@@ -884,7 +888,7 @@ public class ComputerUtilMana {
}
return true;
} // payManaCost()
}
private static void resetPayment(List<SpellAbility> payments) {
for (SpellAbility sa : payments) {
@@ -912,13 +916,11 @@ public class ComputerUtilMana {
*/
private static ListMultimap<ManaCostShard, SpellAbility> getSourcesForShards(final ManaCostBeingPaid cost,
final SpellAbility sa, final Player ai, final boolean test, final boolean checkPlayable,
List<Mana> manaSpentToPay, final boolean hasConverge, final boolean ignoreColor, final boolean ignoreType) {
final boolean hasConverge, final boolean ignoreColor, final boolean ignoreType) {
// arrange all mana abilities by color produced.
final ListMultimap<Integer, SpellAbility> manaAbilityMap = groupSourcesByManaColor(ai, checkPlayable);
if (manaAbilityMap.isEmpty()) {
// no mana abilities, bailing out
ManaPool.refundMana(manaSpentToPay, ai, sa);
CostPayment.handleOfferings(sa, test, cost.isPaid());
return null;
}
if (DEBUG_MANA_PAYMENT) {
@@ -958,7 +960,6 @@ public class ComputerUtilMana {
private static void setExpressColorChoice(final SpellAbility sa, final Player ai, ManaCostBeingPaid cost,
ManaCostShard toPay, SpellAbility saPayment) {
AbilityManaPart m = saPayment.getManaPart();
if (m.isComboMana()) {
getComboManaChoice(ai, saPayment, sa, cost);
@@ -966,7 +967,7 @@ public class ComputerUtilMana {
else if (saPayment.getApi() == ApiType.ManaReflected) {
Set<String> reflected = CardUtil.getReflectableManaColors(saPayment);
for (byte c : MagicColor.WUBRG) {
for (byte c : MagicColor.WUBRGC) {
if (ai.getManaPool().canPayForShardWithColor(toPay, c) && reflected.contains(MagicColor.toLongString(c))) {
m.setExpressChoice(MagicColor.toShortString(c));
return;
@@ -1013,7 +1014,7 @@ public class ComputerUtilMana {
if (checkCosts) {
// Check if AI can still play this mana ability
ma.setActivatingPlayer(ai);
ma.setActivatingPlayer(ai, true);
// if the AI can't pay the additional costs skip the mana ability
if (!CostPayment.canPayAdditionalCosts(ma.getPayCosts(), ma)) {
return false;
@@ -1039,7 +1040,7 @@ public class ComputerUtilMana {
if (ma.getApi() == ApiType.ManaReflected) {
Set<String> reflected = CardUtil.getReflectableManaColors(ma);
for (byte c : MagicColor.WUBRG) {
for (byte c : MagicColor.WUBRGC) {
if (toPay == ManaCostShard.COLORED_X && !ManaCostBeingPaid.canColoredXShardBePaidByColor(MagicColor.toShortString(c), xManaCostPaidByColor)) {
continue;
}
@@ -1321,9 +1322,9 @@ public class ComputerUtilMana {
public static ManaCostBeingPaid calculateManaCost(final SpellAbility sa, final boolean test, final int extraMana) {
Card card = sa.getHostCard();
Zone castFromBackup = null;
if (test && sa.isSpell()) {
if (test && sa.isSpell() && !card.isInZone(ZoneType.Stack)) {
castFromBackup = card.getCastFrom();
sa.getHostCard().setCastFrom(card.getZone() != null ? card.getZone() : null);
card.setCastFrom(card.getZone() != null ? card.getZone() : null);
}
Cost payCosts = CostAdjustment.adjust(sa.getPayCosts(), sa);
@@ -1352,7 +1353,10 @@ public class ComputerUtilMana {
manaToAdd = 1;
}
String xColor = sa.getParamOrDefault("XColor", "1");
String xColor = sa.getXColor();
if (xColor == null) {
xColor = "1";
}
if (card.hasKeyword("Spend only colored mana on X. No more than one mana of each color may be spent this way.")) {
xColor = "WUBRGX";
}
@@ -1406,8 +1410,7 @@ public class ComputerUtilMana {
public static int getAvailableManaEstimate(final Player p, final boolean checkPlayable) {
int availableMana = 0;
final CardCollectionView list = new CardCollection(p.getCardsIn(ZoneType.Battlefield));
final List<Card> srcs = CardLists.filter(list, new Predicate<Card>() {
final List<Card> srcs = CardLists.filter(p.getCardsIn(ZoneType.Battlefield), new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return !c.getManaAbilities().isEmpty();
@@ -1422,7 +1425,7 @@ public class ComputerUtilMana {
maxProduced = 0;
for (SpellAbility ma : src.getManaAbilities()) {
ma.setActivatingPlayer(p);
ma.setActivatingPlayer(p, true);
if (!checkPlayable || ma.canPlay()) {
int costsToActivate = ma.getPayCosts().getCostMana() != null ? ma.getPayCosts().getCostMana().convertAmount() : 0;
int producedMana = ma.getParamOrDefault("Produced", "").split(" ").length;
@@ -1461,7 +1464,7 @@ public class ComputerUtilMana {
@Override
public boolean apply(final Card c) {
for (final SpellAbility am : getAIPlayableMana(c)) {
am.setActivatingPlayer(ai);
am.setActivatingPlayer(ai, true);
if (!checkPlayable || (am.canPlay() && am.checkRestrictions(ai))) {
return true;
}
@@ -1518,7 +1521,7 @@ public class ComputerUtilMana {
needsLimitedResources |= !cost.isReusuableResource();
// if the AI can't pay the additional costs skip the mana ability
m.setActivatingPlayer(ai);
m.setActivatingPlayer(ai, true);
if (!CostPayment.canPayAdditionalCosts(m.getPayCosts(), m)) {
continue;
}
@@ -1587,7 +1590,7 @@ public class ComputerUtilMana {
if (DEBUG_MANA_PAYMENT) {
System.out.println("DEBUG_MANA_PAYMENT: groupSourcesByManaColor m = " + m);
}
m.setActivatingPlayer(ai);
m.setActivatingPlayer(ai, true);
if (checkPlayable && !m.canPlay()) {
continue;
}
@@ -1616,10 +1619,9 @@ public class ComputerUtilMana {
// setup produce mana replacement effects
String origin = mp.getOrigProduced();
final Map<AbilityKey, Object> repParams = AbilityKey.newMap();
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(sourceCard);
repParams.put(AbilityKey.Mana, origin);
repParams.put(AbilityKey.Affected, sourceCard);
repParams.put(AbilityKey.Player, ai);
repParams.put(AbilityKey.Activator, ai);
repParams.put(AbilityKey.AbilityMana, m); // RootAbility
List<ReplacementEffect> reList = game.getReplacementHandler().getReplacementList(ReplacementType.ProduceMana, repParams, ReplacementLayer.Other);

View File

@@ -10,6 +10,8 @@ import forge.game.card.CounterEnumType;
import forge.game.cost.CostPayEnergy;
import forge.game.keyword.Keyword;
import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
import forge.game.staticability.StaticAbilityCantAttackBlock;
import forge.game.staticability.StaticAbilityMustAttack;
import java.util.List;
@@ -44,7 +46,7 @@ public class CreatureEvaluator implements Function<Card, Integer> {
value += addValue(toughness * 10, "toughness: " + toughness);
// because backside is always stronger the potential makes it better than a single faced card
if (c.hasKeyword(Keyword.DAYBOUND)) {
if (c.hasKeyword(Keyword.DAYBOUND) && c.isDoubleFaced()) {
value += addValue(power * 10, "transforming");
}
}
@@ -59,10 +61,12 @@ public class CreatureEvaluator implements Function<Card, Integer> {
if (c.hasKeyword(Keyword.HORSEMANSHIP)) {
value += addValue(power * 10, "horses");
}
if (c.hasKeyword("Unblockable")) {
if (StaticAbilityCantAttackBlock.cantBlockBy(c, null)) {
value += addValue(power * 10, "unblockable");
} else {
if (c.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")) {
if (StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c)
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c, false)) {
value += addValue(power * 6, "thorns");
}
if (c.hasKeyword(Keyword.FEAR)) {
@@ -102,10 +106,11 @@ public class CreatureEvaluator implements Function<Card, Integer> {
value += addValue(power * 15, "infect");
}
else if (c.hasKeyword(Keyword.WITHER)) {
value += addValue(power * 10, "Wither");
value += addValue(power * 10, "wither");
}
value += addValue(c.getKeywordMagnitude(Keyword.RAMPAGE), "rampage");
value += addValue(c.getKeywordMagnitude(Keyword.TOXIC) * 5, "toxic");
value += addValue(c.getKeywordMagnitude(Keyword.AFFLICT) * 5, "afflict");
value += addValue(c.getKeywordMagnitude(Keyword.RAMPAGE), "rampage");
}
value += addValue(c.getKeywordMagnitude(Keyword.ANNIHILATOR) * 50, "eldrazi");

View File

@@ -1,29 +1,19 @@
package forge.ai;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.util.Map.Entry;
import com.google.common.collect.*;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import forge.StaticData;
import forge.card.CardEdition;
import forge.card.CardStateName;
import forge.card.MagicColor;
import forge.card.mana.ManaAtom;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameObject;
import forge.game.ability.AbilityFactory;
import forge.game.ability.effects.DetachedCardEffect;
import forge.game.card.Card;
import forge.game.card.CardCloneStates;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardFactory;
import forge.game.card.CounterType;
import forge.game.card.*;
import forge.game.card.token.TokenInfo;
import forge.game.combat.Combat;
import forge.game.combat.CombatUtil;
@@ -38,8 +28,17 @@ import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType;
import forge.item.IPaperCard;
import forge.item.PaperCard;
import forge.item.PaperToken;
import forge.util.TextUtil;
import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Stream;
public abstract class GameState {
private static final Map<ZoneType, String> ZONES = new HashMap<>();
@@ -53,27 +52,24 @@ public abstract class GameState {
ZONES.put(ZoneType.Sideboard, "sideboard");
}
private int humanLife = -1;
private int computerLife = -1;
private String humanCounters = "";
private String computerCounters = "";
private String humanManaPool = "";
private String computerManaPool = "";
private String humanPersistentMana = "";
private String computerPersistentMana = "";
private int humanLandsPlayed = 0;
private int computerLandsPlayed = 0;
private int humanLandsPlayedLastTurn = 0;
private int computerLandsPlayedLastTurn = 0;
static class PlayerState {
private int life = -1;
private String counters = "";
private String manaPool = "";
private String persistentMana = "";
private int landsPlayed = 0;
private int landsPlayedLastTurn = 0;
private String precast = null;
private String putOnStack = null;
private final Map<ZoneType, String> cardTexts = new EnumMap<>(ZoneType.class);
}
private final List<PlayerState> playerStates = new ArrayList<>();
private boolean puzzleCreatorState = false;
private final Map<ZoneType, String> humanCardTexts = new EnumMap<>(ZoneType.class);
private final Map<ZoneType, String> aiCardTexts = new EnumMap<>(ZoneType.class);
private final Map<Integer, Card> idToCard = new HashMap<>();
private final Map<Card, Integer> cardToAttachId = new HashMap<>();
private final Map<Card, Integer> cardToEnchantPlayerId = new HashMap<>();
private final Map<Card, Player> cardToEnchantPlayerId = new HashMap<>();
private final Map<Card, Integer> markedDamage = new HashMap<>();
private final Map<Card, List<String>> cardToChosenClrs = new HashMap<>();
private final Map<Card, CardCollection> cardToChosenCards = new HashMap<>();
@@ -99,12 +95,6 @@ public abstract class GameState {
private String tAdvancePhase = "NONE";
private String precastHuman = null;
private String precastAI = null;
private String putOnStackHuman = null;
private String putOnStackAI = null;
private int turn = 1;
private boolean removeSummoningSickness = false;
@@ -135,32 +125,27 @@ public abstract class GameState {
sb.append("[state]\n");
}
sb.append(TextUtil.concatNoSpace("humanlife=", String.valueOf(humanLife), "\n"));
sb.append(TextUtil.concatNoSpace("ailife=", String.valueOf(computerLife), "\n"));
sb.append(TextUtil.concatNoSpace("humanlandsplayed=", String.valueOf(humanLandsPlayed), "\n"));
sb.append(TextUtil.concatNoSpace("ailandsplayed=", String.valueOf(computerLandsPlayed), "\n"));
sb.append(TextUtil.concatNoSpace("humanlandsplayedlastturn=", String.valueOf(humanLandsPlayedLastTurn), "\n"));
sb.append(TextUtil.concatNoSpace("ailandsplayedlastturn=", String.valueOf(computerLandsPlayedLastTurn), "\n"));
sb.append(TextUtil.concatNoSpace("turn=", String.valueOf(turn), "\n"));
if (!humanCounters.isEmpty()) {
sb.append(TextUtil.concatNoSpace("humancounters=", humanCounters, "\n"));
}
if (!computerCounters.isEmpty()) {
sb.append(TextUtil.concatNoSpace("aicounters=", computerCounters, "\n"));
}
if (!humanManaPool.isEmpty()) {
sb.append(TextUtil.concatNoSpace("humanmanapool=", humanManaPool, "\n"));
}
if (!computerManaPool.isEmpty()) {
sb.append(TextUtil.concatNoSpace("aimanapool=", computerManaPool, "\n"));
}
sb.append(TextUtil.concatNoSpace("activeplayer=", tChangePlayer, "\n"));
sb.append(TextUtil.concatNoSpace("activephase=", tChangePhase, "\n"));
appendCards(humanCardTexts, "human", sb);
appendCards(aiCardTexts, "ai", sb);
int playerIndex = 0;
for (PlayerState p : playerStates) {
String prefix = "p" + playerIndex++;
sb.append(TextUtil.concatNoSpace(prefix + "life=", String.valueOf(p.life), "\n"));
sb.append(TextUtil.concatNoSpace(prefix + "landsplayed=", String.valueOf(p.landsPlayed), "\n"));
sb.append(TextUtil.concatNoSpace(prefix + "landsplayedlastturn=", String.valueOf(p.landsPlayedLastTurn), "\n"));
if (!p.counters.isEmpty()) {
sb.append(TextUtil.concatNoSpace(prefix + "counters=", p.counters, "\n"));
}
if (!p.manaPool.isEmpty()) {
sb.append(TextUtil.concatNoSpace(prefix + "manapool=", p.manaPool, "\n"));
}
if (!p.persistentMana.isEmpty()) {
sb.append(TextUtil.concatNoSpace(prefix + "persistentmana=", p.persistentMana, "\n"));
}
appendCards(p.cardTexts, prefix, sb);
}
return sb.toString();
}
@@ -170,44 +155,32 @@ public abstract class GameState {
}
}
public void initFromGame(Game game) throws Exception {
FCollectionView<Player> players = game.getPlayers();
// Can only serialize a two player game with one AI and one human.
if (players.size() != 2) {
throw new Exception("Game not supported");
public void initFromGame(Game game) {
playerStates.clear();
for (Player player : game.getPlayers()) {
PlayerState p = new PlayerState();
p.life = player.getLife();
p.landsPlayed = player.getLandsPlayedThisTurn();
p.landsPlayedLastTurn = player.getLandsPlayedLastTurn();
p.counters = countersToString(player.getCounters());
p.manaPool = processManaPool(player.getManaPool());
playerStates.add(p);
}
final Player human = game.getPlayers().get(0);
final Player ai = game.getPlayers().get(1);
if (!human.getController().isGuiPlayer() || !ai.getController().isAI()) {
throw new Exception("Game not supported");
}
humanLife = human.getLife();
computerLife = ai.getLife();
humanLandsPlayed = human.getLandsPlayedThisTurn();
computerLandsPlayed = ai.getLandsPlayedThisTurn();
humanLandsPlayedLastTurn = human.getLandsPlayedLastTurn();
computerLandsPlayedLastTurn = ai.getLandsPlayedLastTurn();
humanCounters = countersToString(human.getCounters());
computerCounters = countersToString(ai.getCounters());
humanManaPool = processManaPool(human.getManaPool());
computerManaPool = processManaPool(ai.getManaPool());
tChangePlayer = game.getPhaseHandler().getPlayerTurn() == ai ? "ai" : "human";
tChangePlayer = "p" + game.getPlayers().indexOf(game.getPhaseHandler().getPlayerTurn());
tChangePhase = game.getPhaseHandler().getPhase().toString();
turn = game.getPhaseHandler().getTurn();
aiCardTexts.clear();
humanCardTexts.clear();
// Mark the cards that need their ID remembered for various reasons
cardsReferencedByID.clear();
for (ZoneType zone : ZONES.keySet()) {
for (Card card : game.getCardsIn(zone)) {
for (Card card : game.getCardsIncludePhasingIn(zone)) {
if (card.getExiledWith() != null) {
// Remember the ID of the card that exiled this card
cardsReferencedByID.add(card.getExiledWith());
}
if (zone == ZoneType.Battlefield) {
if (!card.getAttachedCards().isEmpty()) {
if (!card.getAllAttachedCards().isEmpty()) {
// Remember the ID of cards that have attachments
cardsReferencedByID.add(card);
}
@@ -239,33 +212,51 @@ public abstract class GameState {
for (ZoneType zone : ZONES.keySet()) {
// Init texts to empty, so that restoring will clear the state
// if the zone had no cards in it (e.g. empty hand).
aiCardTexts.put(zone, "");
humanCardTexts.put(zone, "");
for (Card card : game.getCardsIn(zone)) {
for (PlayerState p : playerStates) {
p.cardTexts.put(zone, "");
}
for (Card card : game.getCardsIncludePhasingIn(zone)) {
if (card.getName().equals("Puzzle Goal") && card.getOracleText().contains("New Puzzle")) {
puzzleCreatorState = true;
}
if (card instanceof DetachedCardEffect) {
continue;
}
addCard(zone, card.getController() == ai ? aiCardTexts : humanCardTexts, card);
int playerIndex = game.getPlayers().indexOf(card.getController());
addCard(zone, playerStates.get(playerIndex).cardTexts, card);
}
}
}
private String getPlayerString(Player p) {
return "P" + p.getGame().getPlayers().indexOf(p);
}
private Player parsePlayerString(Game game, String str) {
if (str.equalsIgnoreCase("HUMAN")) {
return game.getPlayers().get(0);
} else if (str.equalsIgnoreCase("AI")) {
return game.getPlayers().get(1);
} else if (str.startsWith("P") && Character.isDigit(str.charAt(1))) {
return game.getPlayers().get(Integer.parseInt(String.valueOf(str.charAt(1))));
} else {
return game.getPlayers().get(0);
}
}
private void addCard(ZoneType zoneType, Map<ZoneType, String> cardTexts, Card c) {
StringBuilder newText = new StringBuilder(cardTexts.get(zoneType));
if (newText.length() > 0) {
newText.append(";");
}
if (c.isToken()) {
newText.append("t:").append(new TokenInfo(c).toString());
newText.append("t:").append(new TokenInfo(c));
} else {
if (c.getPaperCard() == null) {
return;
}
if (!c.getMergedCards().isEmpty()) {
if (c.hasMergedCard()) {
// we have to go by the current top card name here
newText.append(c.getTopMergedCard().getPaperCard().getName());
} else {
@@ -282,8 +273,7 @@ public abstract class GameState {
if (zoneType == ZoneType.Battlefield) {
if (c.getOwner() != c.getController()) {
// TODO: Handle more than 2-player games.
newText.append("|Owner:" + (c.getOwner().isAI() ? "AI" : "Human"));
newText.append("|Owner:").append(getPlayerString(c.getOwner()));
}
if (c.isTapped()) {
newText.append("|Tapped");
@@ -298,7 +288,8 @@ public abstract class GameState {
newText.append("|Monstrous");
}
if (c.isPhasedOut()) {
newText.append("|PhasedOut");
newText.append("|PhasedOut:");
newText.append(getPlayerString(c.getPhasedOut()));
}
if (c.isFaceDown()) {
newText.append("|FaceDown");
@@ -317,10 +308,8 @@ public abstract class GameState {
}
if (c.getPlayerAttachedTo() != null) {
// TODO: improve this for game states with more than two players
newText.append("|EnchantingPlayer:");
Player p = c.getPlayerAttachedTo();
newText.append(p.getController().isAI() ? "AI" : "HUMAN");
newText.append(getPlayerString(c.getPlayerAttachedTo()));
} else if (c.isAttachedToEntity()) {
newText.append("|AttachedTo:").append(c.getEntityAttachedTo().getId());
}
@@ -346,11 +335,8 @@ public abstract class GameState {
}
List<String> chosenCardIds = Lists.newArrayList();
for (Object obj : c.getChosenCards()) {
if (obj instanceof Card) {
int id = ((Card)obj).getId();
chosenCardIds.add(String.valueOf(id));
}
for (Card obj : c.getChosenCards()) {
chosenCardIds.add(String.valueOf(obj.getId()));
}
if (!chosenCardIds.isEmpty()) {
newText.append("|ChosenCards:").append(TextUtil.join(chosenCardIds, ","));
@@ -376,7 +362,7 @@ public abstract class GameState {
newText.append("|Imprinting:").append(TextUtil.join(imprintedCardIds, ","));
}
if (!c.getMergedCards().isEmpty()) {
if (c.hasMergedCard()) {
List<String> mergedCardNames = new ArrayList<>();
for (Card merged : c.getMergedCards()) {
if (c.getTopMergedCard() == merged) {
@@ -463,16 +449,36 @@ public abstract class GameState {
public void parse(InputStream in) throws Exception {
final BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
parseLine(line);
}
parse(br.lines());
}
public void parse(List<String> lines) {
for (String line : lines) {
parseLine(line);
parse(lines.stream());
}
public void parse(Stream<String> lines) {
playerStates.clear();
lines.forEach(this::parseLine);
}
private PlayerState getPlayerState(int index) {
while (index >= playerStates.size()) {
playerStates.add(new PlayerState());
}
return playerStates.get(index);
}
private PlayerState getPlayerState(String key) {
if (key.startsWith("human")) {
return getPlayerState(0);
} else if (key.startsWith("ai")) {
return getPlayerState(1);
} else if (key.startsWith("p") && Character.isDigit(key.charAt(1))) {
return getPlayerState(Integer.parseInt(String.valueOf(key.charAt(1))));
} else {
System.err.println("Unknown player state key: " + key);
return new PlayerState();
}
}
@@ -493,142 +499,56 @@ public abstract class GameState {
return;
}
boolean isHuman = categoryName.startsWith("human");
if (categoryName.equals("turn")) {
turn = Integer.parseInt(categoryValue);
}
else if (categoryName.equals("removesummoningsickness")) {
} else if (categoryName.equals("removesummoningsickness")) {
removeSummoningSickness = categoryValue.equalsIgnoreCase("true");
}
else if (categoryName.endsWith("life")) {
if (isHuman)
humanLife = Integer.parseInt(categoryValue);
else
computerLife = Integer.parseInt(categoryValue);
}
else if (categoryName.endsWith("counters")) {
if (isHuman)
humanCounters = categoryValue;
else
computerCounters = categoryValue;
}
else if (categoryName.endsWith("landsplayed")) {
if (isHuman)
humanLandsPlayed = Integer.parseInt(categoryValue);
else
computerLandsPlayed = Integer.parseInt(categoryValue);
}
else if (categoryName.endsWith("landsplayedlastturn")) {
if (isHuman)
humanLandsPlayedLastTurn = Integer.parseInt(categoryValue);
else
computerLandsPlayedLastTurn = Integer.parseInt(categoryValue);
}
else if (categoryName.endsWith("play") || categoryName.endsWith("battlefield")) {
if (isHuman)
humanCardTexts.put(ZoneType.Battlefield, categoryValue);
else
aiCardTexts.put(ZoneType.Battlefield, categoryValue);
}
else if (categoryName.endsWith("hand")) {
if (isHuman)
humanCardTexts.put(ZoneType.Hand, categoryValue);
else
aiCardTexts.put(ZoneType.Hand, categoryValue);
}
else if (categoryName.endsWith("graveyard")) {
if (isHuman)
humanCardTexts.put(ZoneType.Graveyard, categoryValue);
else
aiCardTexts.put(ZoneType.Graveyard, categoryValue);
}
else if (categoryName.endsWith("library")) {
if (isHuman)
humanCardTexts.put(ZoneType.Library, categoryValue);
else
aiCardTexts.put(ZoneType.Library, categoryValue);
}
else if (categoryName.endsWith("exile")) {
if (isHuman)
humanCardTexts.put(ZoneType.Exile, categoryValue);
else
aiCardTexts.put(ZoneType.Exile, categoryValue);
}
else if (categoryName.endsWith("command")) {
if (isHuman)
humanCardTexts.put(ZoneType.Command, categoryValue);
else
aiCardTexts.put(ZoneType.Command, categoryValue);
}
else if (categoryName.endsWith("sideboard")) {
if (isHuman)
humanCardTexts.put(ZoneType.Sideboard, categoryValue);
else
aiCardTexts.put(ZoneType.Sideboard, categoryValue);
}
else if (categoryName.startsWith("ability")) {
} else if (categoryName.endsWith("life")) {
getPlayerState(categoryName).life = Integer.parseInt(categoryValue);
} else if (categoryName.endsWith("counters")) {
getPlayerState(categoryName).counters = categoryValue;
} else if (categoryName.endsWith("landsplayed")) {
getPlayerState(categoryName).landsPlayed = Integer.parseInt(categoryValue);
} else if (categoryName.endsWith("landsplayedlastturn")) {
getPlayerState(categoryName).landsPlayedLastTurn = Integer.parseInt(categoryValue);
} else if (categoryName.endsWith("play") || categoryName.endsWith("battlefield")) {
getPlayerState(categoryName).cardTexts.put(ZoneType.Battlefield, categoryValue);
} else if (categoryName.endsWith("hand")) {
getPlayerState(categoryName).cardTexts.put(ZoneType.Hand, categoryValue);
} else if (categoryName.endsWith("graveyard")) {
getPlayerState(categoryName).cardTexts.put(ZoneType.Graveyard, categoryValue);
} else if (categoryName.endsWith("library")) {
getPlayerState(categoryName).cardTexts.put(ZoneType.Library, categoryValue);
} else if (categoryName.endsWith("exile")) {
getPlayerState(categoryName).cardTexts.put(ZoneType.Exile, categoryValue);
} else if (categoryName.endsWith("command")) {
getPlayerState(categoryName).cardTexts.put(ZoneType.Command, categoryValue);
} else if (categoryName.endsWith("sideboard")) {
getPlayerState(categoryName).cardTexts.put(ZoneType.Sideboard, categoryValue);
} else if (categoryName.startsWith("ability")) {
abilityString.put(categoryName.substring("ability".length()), categoryValue);
}
else if (categoryName.endsWith("precast")) {
if (isHuman)
precastHuman = categoryValue;
else
precastAI = categoryValue;
}
else if (categoryName.endsWith("putonstack")) {
if (isHuman)
putOnStackHuman = categoryValue;
else
putOnStackAI = categoryValue;
}
else if (categoryName.endsWith("manapool")) {
if (isHuman)
humanManaPool = categoryValue;
else
computerManaPool = categoryValue;
}
else if (categoryName.endsWith("persistentmana")) {
if (isHuman)
humanPersistentMana = categoryValue;
else
computerPersistentMana = categoryValue;
}
else {
System.out.println("Unknown key: " + categoryName);
} else if (categoryName.endsWith("precast")) {
getPlayerState(categoryName).precast = categoryValue;
} else if (categoryName.endsWith("putonstack")) {
getPlayerState(categoryName).putOnStack = categoryValue;
} else if (categoryName.endsWith("manapool")) {
getPlayerState(categoryName).manaPool = categoryValue;
} else if (categoryName.endsWith("persistentmana")) {
getPlayerState(categoryName).persistentMana = categoryValue;
} else {
System.err.println("Unknown key: " + categoryName);
}
}
public void applyToGame(final Game game) {
game.getAction().invoke(new Runnable() {
@Override
public void run() {
applyGameOnThread(game);
}
});
game.getAction().invoke(() -> applyGameOnThread(game));
}
protected void applyGameOnThread(final Game game) {
final Player human = game.getPlayers().get(0);
final Player ai = game.getPlayers().get(1);
if (game.getPlayers().size() != playerStates.size()) {
throw new RuntimeException("Non-matching number of players, (" +
game.getPlayers().size() + " vs. " + playerStates.size() + ")");
}
idToCard.clear();
cardToAttachId.clear();
@@ -645,32 +565,21 @@ public abstract class GameState {
cardToScript.clear();
cardAttackMap.clear();
Player newPlayerTurn = tChangePlayer.equalsIgnoreCase("human") ? human : tChangePlayer.equalsIgnoreCase("ai") ? ai : null;
int playerTurn = playerStates.indexOf(getPlayerState(tChangePlayer));
Player newPlayerTurn = game.getPlayers().get(playerTurn);
PhaseType newPhase = tChangePhase.equalsIgnoreCase("none") ? null : PhaseType.smartValueOf(tChangePhase);
PhaseType advPhase = tAdvancePhase.equalsIgnoreCase("none") ? null : PhaseType.smartValueOf(tAdvancePhase);
// Set stack to resolving so things won't trigger/effects be checked right away
game.getStack().setResolving(true);
updateManaPool(human, humanManaPool, true, false);
updateManaPool(ai, computerManaPool, true, false);
updateManaPool(human, humanPersistentMana, false, true);
updateManaPool(ai, computerPersistentMana, false, true);
if (!humanCounters.isEmpty()) {
applyCountersToGameEntity(human, humanCounters);
}
if (!computerCounters.isEmpty()) {
applyCountersToGameEntity(ai, computerCounters);
}
game.getPhaseHandler().devModeSet(newPhase, newPlayerTurn, turn);
game.getTriggerHandler().setSuppressAllTriggers(true);
setupPlayerState(humanLife, humanCardTexts, human, humanLandsPlayed, humanLandsPlayedLastTurn);
setupPlayerState(computerLife, aiCardTexts, ai, computerLandsPlayed, computerLandsPlayedLastTurn);
for (int i = 0; i < playerStates.size(); i++) {
setupPlayerState(game.getPlayers().get(i), playerStates.get(i));
}
handleCardAttachments();
handleChosenEntities();
handleRememberedEntities();
@@ -708,12 +617,16 @@ public abstract class GameState {
game.getAction().checkStateEffects(true); //ensure state based effects and triggers are updated
// prevent interactions with objects from old state
game.copyLastState();
// Set negative or zero life after state effects if need be, important for some puzzles that rely on
// pre-setting negative life (e.g. PS_NEO4).
if (humanLife <= 0) {
human.setLife(humanLife, null);
} else if (computerLife <= 0) {
ai.setLife(computerLife, null);
for (int i = 0; i < playerStates.size(); i++) {
int life = playerStates.get(i).life;
if (life <= 0) {
game.getPlayers().get(i).setLife(life, null);
}
}
}
@@ -744,12 +657,7 @@ public abstract class GameState {
produced.put("PersistentMana", "True");
}
final AbilityManaPart abMana = new AbilityManaPart(dummy, produced);
game.getAction().invoke(new Runnable() {
@Override
public void run() {
abMana.produceMana(null);
}
});
game.getAction().invoke(() -> abMana.produceMana(null));
}
}
@@ -823,14 +731,14 @@ public abstract class GameState {
String id = rememberedEnts.getValue();
Card exiledWith = idToCard.get(Integer.parseInt(id));
exiledWith.addExiledCard(c);
c.setExiledWith(exiledWith);
c.setExiledBy(exiledWith.getController());
}
}
private int parseTargetInScript(final String tgtDef) {
int tgtID = TARGET_NONE;
int tgtID;
if (tgtDef.equalsIgnoreCase("human")) {
tgtID = TARGET_HUMAN;
} else if (tgtDef.equalsIgnoreCase("ai")) {
@@ -861,9 +769,7 @@ public abstract class GameState {
}
if (sa.hasParam("RememberTargets")) {
for (final GameObject o : sa.getTargets()) {
sa.getHostCard().addRemembered(o);
}
sa.getHostCard().addRemembered(sa.getTargets());
}
}
@@ -907,7 +813,6 @@ public abstract class GameState {
for (SpellAbility ab : saList) {
if (ab.getDescription().startsWith("Awaken")) {
ab.setActivatingPlayer(c.getController());
ab.getSubAbility().setActivatingPlayer(c.getController());
// target for Awaken is set in its first subability
handleScriptedTargetingForSA(game, ab.getSubAbility(), tgtID);
sa = kwName.equals("AwakenOnly") ? ab.getSubAbility() : ab;
@@ -972,37 +877,23 @@ public abstract class GameState {
}
private void handlePrecastSpells(final Game game) {
Player human = game.getPlayers().get(0);
Player ai = game.getPlayers().get(1);
if (precastHuman != null) {
String[] spellList = TextUtil.split(precastHuman, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, human, game);
}
}
if (precastAI != null) {
String[] spellList = TextUtil.split(precastAI, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, ai, game);
for (int i = 0; i < playerStates.size(); i++) {
if (playerStates.get(i).precast != null) {
String[] spellList = TextUtil.split(playerStates.get(i).precast, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, game.getPlayers().get(i), game);
}
}
}
}
private void handleAddSAsToStack(final Game game) {
Player human = game.getPlayers().get(0);
Player ai = game.getPlayers().get(1);
if (putOnStackHuman != null) {
String[] spellList = TextUtil.split(putOnStackHuman, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, human, game, true);
}
}
if (putOnStackAI != null) {
String[] spellList = TextUtil.split(putOnStackAI, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, ai, game, true);
for (int i = 0; i < playerStates.size(); i++) {
if (playerStates.get(i).putOnStack != null) {
String[] spellList = TextUtil.split(playerStates.get(i).putOnStack, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, game.getPlayers().get(i), game, true);
}
}
}
}
@@ -1134,18 +1025,13 @@ public abstract class GameState {
Card attachedTo = idToCard.get(entry.getValue());
Card attacher = entry.getKey();
if (attacher.isAttachment()) {
attacher.attachToEntity(attachedTo);
attacher.attachToEntity(attachedTo, null, true);
}
}
// Enchant players by ID
for (Entry<Card, Integer> entry : cardToEnchantPlayerId.entrySet()) {
// TODO: improve this for game states with more than two players
Card attacher = entry.getKey();
Game game = attacher.getGame();
Player attachedTo = entry.getValue() == TARGET_AI ? game.getPlayers().get(1) : game.getPlayers().get(0);
attacher.attachToEntity(attachedTo);
// Enchant players
for (Entry<Card, Player> entry : cardToEnchantPlayerId.entrySet()) {
entry.getKey().attachToEntity(entry.getValue(), null);
}
}
@@ -1180,11 +1066,9 @@ public abstract class GameState {
}
top.addMergedCard(bottom);
if (top.getMutatedTimestamp() != -1) {
top.removeCloneState(top.getMutatedTimestamp());
}
top.removeMutatedStates();
final Long ts = game.getNextTimestamp();
final long ts = game.getNextTimestamp();
top.setMutatedTimestamp(ts);
if (top.getCurrentStateName() != CardStateName.FaceDown) {
final CardCloneStates mutatedStates = CardFactory.getMutatedCloneStates(top, null/*FIXME*/);
@@ -1203,11 +1087,11 @@ public abstract class GameState {
String[] allCounterStrings = counterString.split(",");
for (final String counterPair : allCounterStrings) {
String[] pair = counterPair.split("=", 2);
entity.addCounterInternal(CounterType.getType(pair[0]), Integer.parseInt(pair[1]), null, false, null);
entity.addCounterInternal(CounterType.getType(pair[0]), Integer.parseInt(pair[1]), null, false, null, null);
}
}
private void setupPlayerState(int life, Map<ZoneType, String> cardTexts, final Player p, final int landsPlayed, final int landsPlayedLastTurn) {
private void setupPlayerState(final Player p, final PlayerState state) {
// Lock check static as we setup player state
// Clear all zones first, this ensures that any lingering cards and effects (e.g. in command zone) get cleared up
@@ -1219,14 +1103,14 @@ public abstract class GameState {
p.setCommanders(Lists.newArrayList());
Map<ZoneType, CardCollectionView> playerCards = new EnumMap<>(ZoneType.class);
for (Entry<ZoneType, String> kv : cardTexts.entrySet()) {
for (Entry<ZoneType, String> kv : state.cardTexts.entrySet()) {
String value = kv.getValue();
playerCards.put(kv.getKey(), processCardsForZone(value.isEmpty() ? new String[0] : value.split(";"), p));
}
if (life >= 0) p.setLife(life, null);
p.setLandsPlayedThisTurn(landsPlayed);
p.setLandsPlayedLastTurn(landsPlayedLastTurn);
if (state.life >= 0) p.setLife(state.life, null);
p.setLandsPlayedThisTurn(state.landsPlayed);
p.setLandsPlayedLastTurn(state.landsPlayedLastTurn);
p.clearPaidForSA();
@@ -1275,6 +1159,13 @@ public abstract class GameState {
for (Card cmd : p.getCommanders()) {
p.getZone(ZoneType.Command).add(Player.createCommanderEffect(p.getGame(), cmd));
}
updateManaPool(p, state.manaPool, true, false);
updateManaPool(p, state.persistentMana, false, true);
if (!state.counters.isEmpty()) {
applyCountersToGameEntity(p, state.counters);
}
}
/**
@@ -1307,6 +1198,15 @@ public abstract class GameState {
// TODO Make sure Game State conversion works with new tokens
String tokenStr = cardinfo[0].substring(2);
c = new TokenInfo(tokenStr).makeOneToken(player);
} else if (cardinfo[0].startsWith("T:")) {
String tokenStr = cardinfo[0].substring(2);
PaperToken token = StaticData.instance().getAllTokens().getToken(tokenStr,
setCode != null ? setCode : CardEdition.UNKNOWN.getName());
if (token == null) {
System.err.println("ERROR: Tried to create a non-existent token named " + cardinfo[0] + " when loading game state!");
continue;
}
c = Card.fromPaperCard(token, player, player.getGame());
} else {
PaperCard pc = StaticData.instance().getCommonCards().getCard(cardinfo[0], setCode);
if (pc == null) {
@@ -1329,7 +1229,8 @@ public abstract class GameState {
} else if (info.startsWith("Monstrous")) {
c.setMonstrous(true);
} else if (info.startsWith("PhasedOut")) {
c.setPhasedOut(true);
String tgt = info.substring(info.indexOf(':') + 1);
c.setPhasedOut(parsePlayerString(player.getGame(), tgt));
} else if (info.startsWith("Counters:")) {
applyCountersToGameEntity(c, info.substring(info.indexOf(':') + 1));
} else if (info.startsWith("SummonSick")) {
@@ -1341,15 +1242,18 @@ public abstract class GameState {
}
} else if (info.startsWith("Transformed")) {
c.setState(CardStateName.Transformed, true);
c.setBackSide(true);
} else if (info.startsWith("Flipped")) {
c.setState(CardStateName.Flipped, true);
} else if (info.startsWith("Meld")) {
c.setState(CardStateName.Meld, true);
c.setBackSide(true);
} else if (info.startsWith("Modal")) {
c.setState(CardStateName.Modal, true);
c.setBackSide(true);
}
else if (info.startsWith("OnAdventure")) {
String abAdventure = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ExileOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.nonCopiedSpell";
String abAdventure = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ForgetOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.nonCopiedSpell";
SpellAbility saAdventure = AbilityFactory.getAbility(abAdventure, c);
StringBuilder sbPlay = new StringBuilder();
sbPlay.append("Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonAdventure");
@@ -1371,16 +1275,12 @@ public abstract class GameState {
int id = Integer.parseInt(info.substring(info.indexOf(':') + 1));
cardToAttachId.put(c, id);
} else if (info.startsWith("EnchantingPlayer:")) {
// TODO: improve this for game states with more than two players
String tgt = info.substring(info.indexOf(':') + 1);
cardToEnchantPlayerId.put(c, tgt.equalsIgnoreCase("AI") ? TARGET_AI : TARGET_HUMAN);
cardToEnchantPlayerId.put(c, parsePlayerString(player.getGame(), tgt));
} else if (info.startsWith("Owner:")) {
// TODO: improve this for game states with more than two players
Player human = player.getGame().getPlayers().get(0);
Player ai = player.getGame().getPlayers().get(1);
String owner = info.substring(info.indexOf(':') + 1);
Player controller = c.getController();
c.setOwner(owner.equalsIgnoreCase("AI") ? ai : human);
c.setOwner(parsePlayerString(player.getGame(), owner));
c.setController(controller, c.getGame().getNextTimestamp());
} else if (info.startsWith("Ability:")) {
String abString = info.substring(info.indexOf(':') + 1).toLowerCase();

View File

@@ -1,23 +1,11 @@
package forge.ai;
import java.security.InvalidParameterException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import forge.LobbyPlayer;
import forge.ai.ability.ProtectAi;
import forge.card.CardStateName;
@@ -28,48 +16,26 @@ import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostShard;
import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameObject;
import forge.game.GameType;
import forge.game.*;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardLists;
import forge.game.card.CardPredicates;
import forge.game.ability.effects.CharmEffect;
import forge.game.card.*;
import forge.game.card.CardPredicates.Presets;
import forge.game.card.CardUtil;
import forge.game.card.CardView;
import forge.game.card.CounterType;
import forge.game.combat.Combat;
import forge.game.cost.Cost;
import forge.game.cost.CostAdjustment;
import forge.game.cost.CostExile;
import forge.game.cost.CostEnlist;
import forge.game.cost.CostPart;
import forge.game.cost.CostPartMana;
import forge.game.keyword.Keyword;
import forge.game.keyword.KeywordInterface;
import forge.game.mana.Mana;
import forge.game.mana.ManaConversionMatrix;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
import forge.game.player.DelayedReveal;
import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
import forge.game.player.PlayerController;
import forge.game.player.PlayerView;
import forge.game.player.*;
import forge.game.replacement.ReplacementEffect;
import forge.game.spellability.Ability;
import forge.game.spellability.AbilityStatic;
import forge.game.spellability.AbilitySub;
import forge.game.spellability.LandAbility;
import forge.game.spellability.OptionalCost;
import forge.game.spellability.OptionalCostValue;
import forge.game.spellability.Spell;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices;
import forge.game.spellability.*;
import forge.game.trigger.WrappedAbility;
import forge.game.zone.ZoneType;
import forge.item.PaperCard;
@@ -78,6 +44,12 @@ import forge.util.ITriggerEvent;
import forge.util.MyRandom;
import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import java.security.InvalidParameterException;
import java.util.*;
/**
@@ -114,7 +86,7 @@ public class PlayerControllerAi extends PlayerController {
@Override
public SpellAbility getAbilityToPlay(Card hostCard, List<SpellAbility> abilities, ITriggerEvent triggerEvent) {
if (abilities.size() == 0) {
if (abilities.isEmpty()) {
return null;
}
return abilities.get(0);
@@ -269,8 +241,8 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message) {
return getAi().confirmAction(sa, mode, message);
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return getAi().confirmAction(sa, mode, message, params);
}
@Override
@@ -341,6 +313,21 @@ public class PlayerControllerAi extends PlayerController {
public List<Card> exertAttackers(List<Card> attackers) {
return AiAttackController.exertAttackers(attackers, brains.getAttackAggression());
}
@Override
public List<Card> enlistAttackers(List<Card> attackers) {
CardCollection cards = CostEnlist.getCardsForEnlisting(brains.getPlayer());
cards = CardLists.filter(cards, CardPredicates.hasGreaterPowerThan(0));
CardCollection chosenAttackers = new CardCollection(attackers);
ComputerUtilCard.sortByEvaluateCreature(chosenAttackers);
// do not enlist more than available payment choices (currently ignores multiple instances of Enlist, but can that even happen?)
if (attackers.size() > cards.size()) {
chosenAttackers = chosenAttackers.subList(0, cards.size());
}
// TODO check if not needed as defender
return chosenAttackers;
}
@Override
public CardCollection orderBlocker(Card attacker, Card blocker, CardCollection oldBlockers) {
@@ -576,10 +563,10 @@ public class PlayerControllerAi extends PlayerController {
@Override
public String chooseSomeType(String kindOfType, SpellAbility sa, Collection<String> validTypes, List<String> invalidTypes, boolean isOptional) {
String chosen = ComputerUtil.chooseSomeType(player, kindOfType, sa.getParam("AILogic"), validTypes, invalidTypes);
String chosen = ComputerUtil.chooseSomeType(player, kindOfType, sa, validTypes, invalidTypes);
if (StringUtils.isBlank(chosen) && !validTypes.isEmpty()) {
chosen = validTypes.iterator().next();
System.err.println("AI has no idea how to choose " + kindOfType +", defaulting to arbitrary element: chosen");
System.err.println("AI has no idea how to choose " + kindOfType +", defaulting to arbitrary element: " + chosen);
}
return chosen;
}
@@ -590,8 +577,14 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
public boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question) {
return brains.aiShouldRun(replacementEffect, effectSA, affected);
public String chooseSector(Card assignee, String ai, List<String> sectors) {
return Aggregates.random(sectors);
}
@Override
public PlanarDice choosePDRollToIgnore(List<PlanarDice> rolls) {
//TODO create AI logic for this
return Aggregates.random(rolls);
}
@Override
@@ -697,29 +690,12 @@ public class PlayerControllerAi extends PlayerController {
public boolean payManaOptional(Card c, Cost cost, SpellAbility sa, String prompt, ManaPaymentPurpose purpose) {
// TODO replace with EmptySa
final Ability ability = new AbilityStatic(c, cost, null) { @Override public void resolve() {} };
ability.setActivatingPlayer(c.getController());
ability.setActivatingPlayer(c.getController(), true);
ability.setCardState(sa.getCardState());
// FIXME: This is a hack to check if the AI can play the "exile from library" pay costs (Cumulative Upkeep,
// e.g. Thought Lash). We have to do it and bail early if the AI can't pay, because otherwise the AI will
// pay the cost partially, which should not be possible
int nExileLib = 0;
List<CostPart> parts = CostAdjustment.adjust(cost, sa).getCostParts();
for (final CostPart part : parts) {
if (part instanceof CostExile) {
CostExile exile = (CostExile) part;
if (exile.from == ZoneType.Library) {
nExileLib += exile.convertAmount();
}
}
}
if (nExileLib > c.getController().getCardsIn(ZoneType.Library).size()) {
return false;
}
// - End of hack for Exile a card from library Cumulative Upkeep -
if (ComputerUtilCost.canPayCost(ability, c.getController(), true)) {
ComputerUtil.playNoStack(c.getController(), ability, getGame(), true);
if (ComputerUtil.playNoStack(c.getController(), ability, getGame(), true)) {
// transfer this info for Balduvian Fallen
sa.setPayingMana(ability.getPayingMana());
return true;
}
return false;
@@ -727,7 +703,6 @@ public class PlayerControllerAi extends PlayerController {
@Override
public List<SpellAbility> chooseSaToActivateFromOpeningHand(List<SpellAbility> usableFromOpeningHand) {
// AI would play everything. But limits to one copy of (Leyline of Singularity) and (Gemstone Caverns)
return brains.chooseSaToActivateFromOpeningHand(usableFromOpeningHand);
}
@@ -787,7 +762,7 @@ public class PlayerControllerAi extends PlayerController {
@Override
public boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice, Boolean defaultVal) {
switch(kindOfChoice) {
switch (kindOfChoice) {
case TapOrUntap: return true;
case UntapOrLeaveTapped:
Card source = sa.getHostCard();
@@ -798,7 +773,7 @@ public class PlayerControllerAi extends PlayerController {
case "Never":
return false;
case "NothingRemembered":
if (source.getRememberedCount() == 0) {
if (!source.hasRemembered()) {
return true;
} else {
Card rem = (Card) source.getFirstRemembered();
@@ -808,7 +783,7 @@ public class PlayerControllerAi extends PlayerController {
}
break;
case "BetterTgtThanRemembered":
if (source.getRememberedCount() > 0) {
if (source.hasRemembered()) {
Card rem = (Card) source.getFirstRemembered();
// avoid pumping opponent creature
if (!rem.isInPlay() || rem.getController().isOpponentOf(source.getController())) {
@@ -939,11 +914,81 @@ public class PlayerControllerAi extends PlayerController {
return SpellApiToAi.Converter.get(api).chooseCounterType(options, sa, params);
}
@Override
public String chooseKeywordForPump(final List<String> options, final SpellAbility sa, final String prompt, final Card tgtCard) {
if (options.size() <= 1) {
return Iterables.getFirst(options, null);
}
List<String> possible = Lists.newArrayList();
CardCollection oppUntappedCreatures = CardLists.filter(player.getOpponents().getCreaturesInPlay(), CardPredicates.Presets.UNTAPPED);
if (tgtCard != null) {
for (String kw : options) {
if (tgtCard.hasKeyword(kw)) {
continue;
} else if ("Indestructible".equals(kw)) {
if (oppUntappedCreatures.isEmpty()) {
continue; // no threats on battlefield - removal still a concern perhaps?
} else {
possible.clear();
possible.add(kw); // prefer Indestructible above all else
break;
}
} else if ("Flying".equals(kw)) {
if (oppUntappedCreatures.isEmpty()) {
continue; // no need for evasion
} else {
boolean flyingGood = true;
for (Card c : oppUntappedCreatures) {
if (c.hasKeyword(Keyword.FLYING) || c.hasKeyword(Keyword.REACH)) {
flyingGood = false;
break;
}
}
if (flyingGood) {
possible.clear();
possible.add(kw); // flying is great when no one else has it
break;
} // even if opp has flying or reach, flying might still be useful so we won't skip it
}
} else if (kw.startsWith("Protection from ")) {
//currently, keyword choice lists only include color protection
final String fromWhat = kw.substring(16);
boolean found = false;
for (String color : MagicColor.Constant.ONLY_COLORS) {
if (color.equalsIgnoreCase(fromWhat)) {
CardCollection known = player.getOpponents().getCardsIn(ZoneType.Battlefield);
for (final Card c : known) {
if (c.associatedWithColor(color)) {
found = true;
break;
}
}
}
}
if (!found) {
continue;
}
}
possible.add(kw);
}
}
if (!possible.isEmpty()) {
return Aggregates.random(possible);
} else {
return Aggregates.random(options); // if worst comes to worst, at least do something
}
}
@Override
public boolean confirmPayment(CostPart costPart, String prompt, SpellAbility sa) {
return brains.confirmPayment(costPart); // AI is expected to know what it is paying for at the moment (otherwise add another parameter to this method)
}
@Override
public boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question) {
return brains.aiShouldRun(replacementEffect, effectSA, affected);
}
@Override
public ReplacementEffect chooseSingleReplacementEffect(String prompt, List<ReplacementEffect> possibleReplacers) {
return brains.chooseSingleReplacementEffect(possibleReplacers);
@@ -1017,14 +1062,18 @@ public class PlayerControllerAi extends PlayerController {
final Card source = sa.getHostCard();
// TODO replace with EmptySa
final Ability emptyAbility = new AbilityStatic(source, cost, sa.getTargetRestrictions()) { @Override public void resolve() { } };
emptyAbility.setActivatingPlayer(player);
emptyAbility.setActivatingPlayer(player, true);
emptyAbility.setTriggeringObjects(sa.getTriggeringObjects());
emptyAbility.setSVars(sa.getSVars());
emptyAbility.setCardState(sa.getCardState());
emptyAbility.setXManaCostPaid(sa.getRootAbility().getXManaCostPaid());
if (ComputerUtilCost.willPayUnlessCost(sa, player, cost, alreadyPaid, allPayers) && ComputerUtilCost.canPayCost(emptyAbility, player, true)) {
ComputerUtil.playNoStack(player, emptyAbility, getGame(), true); // AI needs something to resolve to pay that cost
return true;
if (ComputerUtilCost.willPayUnlessCost(sa, player, cost, alreadyPaid, allPayers)) {
boolean result = ComputerUtil.playNoStack(player, emptyAbility, getGame(), true); // AI needs something to resolve to pay that cost
if (!emptyAbility.getPaidHash().isEmpty()) {
// report info to original sa (Argentum Masticore)
sa.setPaidHash(emptyAbility.getPaidHash());
}
return result;
}
return false;
}
@@ -1032,7 +1081,7 @@ public class PlayerControllerAi extends PlayerController {
@Override
public void orderAndPlaySimultaneousSa(List<SpellAbility> activePlayerSAs) {
for (final SpellAbility sa : getAi().orderPlaySa(activePlayerSAs)) {
if (sa.isTrigger()) {
if (sa.isTrigger() && !sa.isCopied()) {
if (prepareSingleSa(sa.getHostCard(), sa, true)) {
ComputerUtil.playStack(sa, player, getGame());
}
@@ -1046,16 +1095,14 @@ public class PlayerControllerAi extends PlayerController {
}
}
/* FIXME: the new implementation (below) requires implementing setupNewTargets in the AI controller, among other possible changes, otherwise breaks AI
if (sa.isMayChooseNewTargets()) {
sa.setupNewTargets(player);
}
*/
if (sa.isMayChooseNewTargets() && !sa.setupTargets()) {
if (sa.isSpell()) {
getGame().getAction().ceaseToExist(sa.getHostCard(), false);
TargetChoices tc = sa.getTargets();
if (!sa.setupTargets()) {
// if AI can't choose targets need to keep old one even if illegal
sa.setTargets(tc);
}
continue;
// FIXME: the new implementation (below) requires implementing setupNewTargets in the AI controller, among other possible changes, otherwise breaks AI
// sa.setupNewTargets(player);
}
}
// need finally add the new spell to the stack
@@ -1065,6 +1112,9 @@ public class PlayerControllerAi extends PlayerController {
}
private boolean prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory) {
if (sa.getApi() == ApiType.Charm) {
return CharmEffect.makeChoices(sa);
}
if (sa.hasParam("TargetingPlayer")) {
Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0);
sa.setTargetingPlayer(targetingPlayer);
@@ -1088,7 +1138,7 @@ public class PlayerControllerAi extends PlayerController {
if (tgtSA instanceof Spell) { // Isn't it ALWAYS a spell?
Spell spell = (Spell) tgtSA;
// TODO if mandatory AI is only forced to use mana when it's already in the pool
if (tgtSA.checkRestrictions(brains.getPlayer()) && (brains.canPlayFromEffectAI(spell, !optional, noManaCost) == AiPlayDecision.WillPlay || !optional)) {
if (brains.canPlayFromEffectAI(spell, !optional, noManaCost) == AiPlayDecision.WillPlay || !optional) {
if (noManaCost) {
return ComputerUtil.playSpellAbilityWithoutPayingManaCost(player, tgtSA, getGame());
}

View File

@@ -17,33 +17,20 @@
*/
package forge.ai;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import forge.game.GameEntity;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.ai.ability.AnimateAi;
import forge.card.ColorSet;
import forge.card.MagicColor;
import forge.card.mana.ManaCost;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameType;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardLists;
import forge.game.card.CardPredicates;
import forge.game.card.CardUtil;
import forge.game.card.CounterEnumType;
import forge.game.card.*;
import forge.game.combat.Combat;
import forge.game.combat.CombatUtil;
import forge.game.cost.CostPart;
@@ -64,6 +51,11 @@ import forge.util.MyRandom;
import forge.util.TextUtil;
import forge.util.maps.LinkedHashMapToAmount;
import forge.util.maps.MapToAmount;
import org.apache.commons.lang3.tuple.Pair;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Special logic for individual cards
@@ -218,7 +210,7 @@ public class SpecialCardAi {
Card animated = AnimateAi.becomeAnimated(sa.getHostCard(), sa.getSubAbility());
if (sa.getHostCard().canReceiveCounters(CounterEnumType.P1P1)) {
animated.addCounterInternal(CounterEnumType.P1P1, 2, ai, false, null);
animated.addCounterInternal(CounterEnumType.P1P1, 2, ai, false, null, null);
}
boolean isOppEOT = ph.is(PhaseType.END_OF_TURN) && ph.getNextTurn() == ai;
boolean isValuableAttacker = ph.is(PhaseType.MAIN1, ai) && ComputerUtilCard.doesSpecifiedCreatureAttackAI(ai, animated);
@@ -609,38 +601,6 @@ public class SpecialCardAi {
}
return true;
}
public static SpellAbility chooseSpellAbility(final Player ai, final SpellAbility sa, final List<SpellAbility> spells) {
// TODO: generalize and improve this so that it acts in a more reasonable way and can potentially be used for other cards too
List<SpellAbility> best = Lists.newArrayList();
List<SpellAbility> possible = Lists.newArrayList();
Card tgtCard = sa.getTargetCard();
if (tgtCard != null) {
for (SpellAbility sp : spells) {
if (SpellApiToAi.Converter.get(sp.getApi()).canPlayAIWithSubs(ai, sp)) {
best.add(sp); // these SAs are prioritized since the AI sees a reason to play them now
}
final List<String> keywords = sp.hasParam("KW") ? Arrays.asList(sp.getParam("KW").split(" & "))
: Lists.newArrayList();
for (String kw : keywords) {
if (!tgtCard.hasKeyword(kw)) {
if ("Indestructible".equals(kw) && ai.getOpponents().getCreaturesInPlay().isEmpty()) {
continue; // nothing to damage or kill the creature with
}
possible.add(sp); // these SAs at least don't duplicate a keyword on the card
break;
}
}
}
}
if (!best.isEmpty()) {
return Aggregates.random(best);
} else if (!possible.isEmpty()) {
return Aggregates.random(possible);
} else {
return Aggregates.random(spells); // if worst comes to worst, it's a PW +1 ability, so do at least something
}
}
}
// Goblin Polka Band

View File

@@ -118,7 +118,7 @@ public abstract class SpellAbilityAi {
protected boolean checkAiLogic(final Player ai, final SpellAbility sa, final String aiLogic) {
if (aiLogic.equals("CheckCondition")) {
SpellAbility saCopy = sa.copy();
saCopy.setActivatingPlayer(ai);
saCopy.setActivatingPlayer(ai, true);
return saCopy.metConditions();
}
@@ -253,7 +253,7 @@ public abstract class SpellAbilityAi {
*/
protected static boolean isSorcerySpeed(final SpellAbility sa, Player ai) {
return (sa.getRootAbility().isSpell() && sa.getHostCard().isSorcery())
|| (sa.getRootAbility().isActivatedAbility() && sa.getRestrictions().isSorcerySpeed())
|| (sa.getRootAbility().isActivatedAbility() && sa.getRootAbility().getRestrictions().isSorcerySpeed())
|| (sa.getRootAbility().isAdventure() && sa.getHostCard().getState(CardStateName.Adventure).getType().isSorcery())
|| (sa.isPwAbility() && !sa.withFlash(sa.getHostCard(), ai));
}
@@ -305,7 +305,7 @@ public abstract class SpellAbilityAi {
return SpellApiToAi.Converter.get(ab.getApi()).chkAIDrawback(ab, aiPlayer) && (subAb == null || chkDrawbackWithSubs(aiPlayer, subAb));
}
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
System.err.println("Warning: default (ie. inherited from base class) implementation of confirmAction is used by " + sa.getHostCard().getName() + " for " + this.getClass().getName() + ". Consider declaring an overloaded method");
return true;
}

View File

@@ -32,6 +32,7 @@ public enum SpellApiToAi {
.put(ApiType.BecomeMonarch, AlwaysPlayAi.class)
.put(ApiType.BecomesBlocked, BecomesBlockedAi.class)
.put(ApiType.BidLife, BidLifeAi.class)
.put(ApiType.BlankLine, AlwaysPlayAi.class)
.put(ApiType.Bond, BondAi.class)
.put(ApiType.Branch, AlwaysPlayAi.class)
.put(ApiType.Camouflage, ChooseCardAi.class)
@@ -40,6 +41,7 @@ public enum SpellApiToAi {
.put(ApiType.ChangeX, AlwaysPlayAi.class)
.put(ApiType.ChangeZone, ChangeZoneAi.class)
.put(ApiType.ChangeZoneAll, ChangeZoneAllAi.class)
.put(ApiType.ChaosEnsues, AlwaysPlayAi.class)
.put(ApiType.Charm, CharmAi.class)
.put(ApiType.ChooseCard, ChooseCardAi.class)
.put(ApiType.ChooseColor, ChooseColorAi.class)
@@ -47,6 +49,7 @@ public enum SpellApiToAi {
.put(ApiType.ChooseEvenOdd, ChooseEvenOddAi.class)
.put(ApiType.ChooseNumber, ChooseNumberAi.class)
.put(ApiType.ChoosePlayer, ChoosePlayerAi.class)
.put(ApiType.ChooseSector, AlwaysPlayAi.class)
.put(ApiType.ChooseSource, ChooseSourceAi.class)
.put(ApiType.ChooseType, ChooseTypeAi.class)
.put(ApiType.Clash, ClashAi.class)
@@ -54,6 +57,7 @@ public enum SpellApiToAi {
.put(ApiType.Cleanup, AlwaysPlayAi.class)
.put(ApiType.Clone, CloneAi.class)
.put(ApiType.CompanionChoose, ChooseCompanionAi.class)
.put(ApiType.Connive, ConniveAi.class)
.put(ApiType.CopyPermanent, CopyPermanentAi.class)
.put(ApiType.CopySpellAbility, CopySpellAbilityAi.class)
.put(ApiType.ControlPlayer, CannotPlayAi.class)
@@ -71,6 +75,7 @@ public enum SpellApiToAi {
.put(ApiType.DigMultiple, DigMultipleAi.class)
.put(ApiType.DigUntil, DigUntilAi.class)
.put(ApiType.Discard, DiscardAi.class)
.put(ApiType.Draft, ChooseCardNameAi.class)
.put(ApiType.DrainMana, DrainManaAi.class)
.put(ApiType.Draw, DrawAi.class)
.put(ApiType.EachDamage, DamageEachAi.class)
@@ -160,6 +165,7 @@ public enum SpellApiToAi {
.put(ApiType.Sacrifice, SacrificeAi.class)
.put(ApiType.SacrificeAll, SacrificeAllAi.class)
.put(ApiType.Scry, ScryAi.class)
.put(ApiType.Seek, AlwaysPlayAi.class)
.put(ApiType.SetInMotion, AlwaysPlayAi.class)
.put(ApiType.SetLife, LifeSetAi.class)
.put(ApiType.SetState, SetStateAi.class)
@@ -169,6 +175,7 @@ public enum SpellApiToAi {
.put(ApiType.StoreSVar, StoreSVarAi.class)
.put(ApiType.Subgame, AlwaysPlayAi.class)
.put(ApiType.Surveil, SurveilAi.class)
.put(ApiType.TakeInitiative, AlwaysPlayAi.class)
.put(ApiType.Tap, TapAi.class)
.put(ApiType.TapAll, TapAllAi.class)
.put(ApiType.TapOrUntap, TapOrUntapAi.class)
@@ -184,7 +191,6 @@ public enum SpellApiToAi {
.put(ApiType.WinsGame, GameWinAi.class)
.put(ApiType.DamageResolve, AlwaysPlayAi.class)
.put(ApiType.InternalEtbReplacement, CanPlayAsDrawbackAi.class)
.put(ApiType.InternalLegendaryRule, LegendaryRuleAi.class)
.put(ApiType.InternalIgnoreEffect, CannotPlayAi.class)
.build());

View File

@@ -1,6 +1,8 @@
package forge.ai.ability;
import java.util.Map;
import forge.ai.SpellAbilityAi;
import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
@@ -16,7 +18,7 @@ public class AlwaysPlayAi extends SpellAbilityAi {
}
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}
}

View File

@@ -29,7 +29,7 @@ public class AmassAi extends SpellAbilityAi {
final Game game = ai.getGame();
if (!aiArmies.isEmpty()) {
return CardLists.count(aiArmies, CardPredicates.canReceiveCounters(CounterEnumType.P1P1)) > 0;
return Iterables.any(aiArmies, CardPredicates.canReceiveCounters(CounterEnumType.P1P1));
}
final String tokenScript = "b_0_0_zombie_army";
final int amount = AbilityUtils.calculateAmount(host, sa.getParamOrDefault("Num", "1"), sa);
@@ -85,7 +85,7 @@ public class AmassAi extends SpellAbilityAi {
}
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}

View File

@@ -240,7 +240,7 @@ public class AnimateAi extends SpellAbilityAi {
}
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return player.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2);
}
@@ -261,10 +261,10 @@ public class AnimateAi extends SpellAbilityAi {
// something is used for animate into creature
if (types.isCreature()) {
final Game game = ai.getGame();
CardCollectionView list = CardLists.getTargetableCards(game.getCardsIn(ZoneType.Battlefield), sa);
CardCollection list = CardLists.getTargetableCards(game.getCardsIn(ZoneType.Battlefield), sa);
// Filter AI-specific targets if provided
list = ComputerUtil.filterAITgts(sa, ai, (CardCollection)list, false);
list = ComputerUtil.filterAITgts(sa, ai, list, false);
// list is empty, no possible targets
if (list.isEmpty() && !alwaysActivatePWAbility) {
@@ -500,17 +500,19 @@ public class AnimateAi extends SpellAbilityAi {
}
// give sVars
if (sVars.size() > 0) {
for (final String s : sVars) {
String actualsVar = source.getSVar(s);
if (sa.hasParam("sVars")) {
Map<String, String> sVarsMap = Maps.newHashMap();
for (final String s : sa.getParam("sVars").split(",")) {
String actualsVar = AbilityUtils.getSVar(sa, s);
String name = s;
if (actualsVar.startsWith("SVar:")) {
actualsVar = actualsVar.split("SVar:")[1];
name = actualsVar.split(":")[0];
actualsVar = actualsVar.split(":")[1];
}
card.setSVar(name, actualsVar);
sVarsMap.put(name, actualsVar);
}
card.addChangedSVars(sVarsMap, timestamp, 0);
}
ComputerUtilCard.applyStaticContPT(game, card, null);
}

View File

@@ -22,7 +22,6 @@ import forge.ai.SpecialCardAi;
import forge.ai.SpellAbilityAi;
import forge.game.Game;
import forge.game.GameObject;
import forge.game.GlobalRuleChange;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
@@ -43,9 +42,9 @@ import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellPermanent;
import forge.game.spellability.TargetRestrictions;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityCantAttackBlock;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType;
@@ -78,9 +77,7 @@ public class AttachAi extends SpellAbilityAi {
}
}
if (!ai.getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule)
&& source.getType().isLegendary() && sa instanceof SpellPermanent
&& ai.isCardInPlay(source.getName())) {
if (source.isAura() && sa.isSpell() && !source.ignoreLegendRule() && ai.isCardInPlay(source.getName())) {
// Don't play the second copy of a legendary enchantment already in play
// TODO: Add some extra checks for where the AI may want to cast a replacement aura
@@ -125,7 +122,7 @@ public class AttachAi extends SpellAbilityAi {
if (ComputerUtilAbility.getAbilitySourceName(sa).equals("Chained to the Rocks")) {
final SpellAbility effectExile = AbilityFactory.getAbility(source.getSVar("TrigExile"), source);
effectExile.setActivatingPlayer(ai);
effectExile.setActivatingPlayer(ai, true);
final TargetRestrictions exile_tgt = effectExile.getTargetRestrictions();
final List<Card> targets = CardUtil.getValidCardsToTarget(exile_tgt, effectExile);
return !targets.isEmpty();
@@ -618,7 +615,7 @@ public class AttachAi extends SpellAbilityAi {
CardCollection preList = new CardCollection(lki);
preList.add(attachSourceLki);
c.getGame().getAction().checkStaticAbilities(false, Sets.newHashSet(preList), preList);
boolean result = lki.canBeAttached(attachSourceLki);
boolean result = lki.canBeAttached(attachSourceLki, null);
//reset static abilities
c.getGame().getAction().checkStaticAbilities(false);
@@ -665,14 +662,14 @@ public class AttachAi extends SpellAbilityAi {
if (card.hasKeyword(Keyword.HORSEMANSHIP)) {
cardPriority += 40;
}
if (card.hasKeyword("Unblockable")) {
//check if card is generally unblockable
if (StaticAbilityCantAttackBlock.cantBlockBy(card, null)) {
cardPriority += 50;
}
// Prefer "tap to deal damage"
// TODO : Skip this one if triggers on combat damage only?
for (SpellAbility sa2 : card.getSpellAbilities()) {
if (ApiType.DealDamage.equals(sa2.getApi())
&& (sa2.getTargetRestrictions().canTgtPlayer())) {
if (ApiType.DealDamage.equals(sa2.getApi()) && sa2.usesTargeting() && sa2.getTargetRestrictions().canTgtPlayer()) {
cardPriority += 300;
}
}
@@ -1307,20 +1304,35 @@ public class AttachAi extends SpellAbilityAi {
* @return the card
*/
private static Card attachToCardAIPreferences(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) {
final TargetRestrictions tgt = sa.getTargetRestrictions();
final Card attachSource = sa.getHostCard();
// TODO AttachSource is currently set for the Source of the Spell, but
// at some point can support attaching a different card
Card attachSource = sa.getHostCard();
if (sa.hasParam("Object")) {
CardCollection objs = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Object"), sa);
if (objs.isEmpty()) {
if (!mandatory) {
return null;
}
} else {
attachSource = objs.get(0);
}
}
// Don't equip if DontEquip SVar is set
if (attachSource.hasSVar("DontEquip")) {
return null;
}
// is no attachment so no using attach
if (!mandatory && !attachSource.isAttachment()) {
return null;
}
final TargetRestrictions tgt = sa.getTargetRestrictions();
// Is a SA that moves target attachment
if ("MoveTgtAura".equals(sa.getParam("AILogic"))) {
CardCollection list = new CardCollection(CardUtil.getValidCardsToTarget(tgt, sa));
list = CardLists.filter(list, Predicates.or(CardPredicates.isControlledByAnyOf(aiPlayer.getOpponents()), new Predicate<Card>() {
CardCollection list = CardLists.filter(CardUtil.getValidCardsToTarget(tgt, sa), Predicates.or(CardPredicates.isControlledByAnyOf(aiPlayer.getOpponents()), new Predicate<Card>() {
@Override
public boolean apply(final Card card) {
return ComputerUtilCard.isUselessCreature(aiPlayer, card.getAttachedTo());
@@ -1329,7 +1341,7 @@ public class AttachAi extends SpellAbilityAi {
return !list.isEmpty() ? ComputerUtilCard.getBestAI(list) : null;
} else if ("Unenchanted".equals(sa.getParam("AILogic"))) {
CardCollection list = new CardCollection(CardUtil.getValidCardsToTarget(tgt, sa));
List<Card> list = CardUtil.getValidCardsToTarget(tgt, sa);
CardCollection preferred = CardLists.filter(list, new Predicate<Card>() {
@Override
public boolean apply(final Card card) {
@@ -1339,31 +1351,26 @@ public class AttachAi extends SpellAbilityAi {
return preferred.isEmpty() ? Aggregates.random(list) : Aggregates.random(preferred);
}
// is no attachment so no using attach
if (!attachSource.isAttachment()) {
return null;
}
// Don't fortify if already fortifying
if (attachSource.isFortification() && attachSource.getAttachedTo() != null
&& attachSource.getAttachedTo().getController() == aiPlayer) {
return null;
}
CardCollection list = null;
List<Card> list = null;
if (tgt == null) {
list = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Defined"), sa);
} else {
list = CardLists.filter(CardUtil.getValidCardsToTarget(tgt, sa), CardPredicates.canBeAttached(attachSource));
list = CardUtil.getValidCardsToTarget(tgt, sa);
}
if (list.isEmpty()) {
return null;
}
CardCollection prefList = list;
CardCollection prefList = CardLists.filter(list, CardPredicates.canBeAttached(attachSource, sa));
// Filter AI-specific targets if provided
prefList = ComputerUtil.filterAITgts(sa, aiPlayer, list, true);
prefList = ComputerUtil.filterAITgts(sa, aiPlayer, prefList, true);
Card c = attachGeneralAI(aiPlayer, sa, prefList, mandatory, attachSource, sa.getParam("AILogic"));
@@ -1404,7 +1411,7 @@ public class AttachAi extends SpellAbilityAi {
}
// avoid randomly moving the equipment back and forth between several creatures in one turn
if (AiCardMemory.isRememberedCard(aiPlayer, sa.getHostCard(), AiCardMemory.MemorySet.ATTACHED_THIS_TURN) && !mandatory) {
if (AiCardMemory.isRememberedCard(aiPlayer, attachSource, AiCardMemory.MemorySet.ATTACHED_THIS_TURN) && !mandatory) {
return null;
}
@@ -1415,12 +1422,13 @@ public class AttachAi extends SpellAbilityAi {
}
}
AiCardMemory.rememberCard(aiPlayer, sa.getHostCard(), AiCardMemory.MemorySet.ATTACHED_THIS_TURN);
AiCardMemory.rememberCard(aiPlayer, attachSource, AiCardMemory.MemorySet.ATTACHED_THIS_TURN);
if (c == null && mandatory) {
CardLists.shuffle(list);
c = list.getFirst();
c = list.get(0);
}
return c;
}
@@ -1555,7 +1563,7 @@ public class AttachAi extends SpellAbilityAi {
}
}
final boolean evasive = keyword.equals("Unblockable") || keyword.equals("Fear")
final boolean evasive = keyword.equals("Fear")
|| keyword.equals("Intimidate") || keyword.equals("Shadow")
|| keyword.equals("Flying") || keyword.equals("Horsemanship")
|| keyword.endsWith("walk") || keyword.equals("All creatures able to block CARDNAME do so.");
@@ -1563,8 +1571,9 @@ public class AttachAi extends SpellAbilityAi {
boolean canBeBlocked = false;
for (Player opp : ai.getOpponents()) {
if (CombatUtil.canBeBlocked(card, opp)) {
if (CombatUtil.canBeBlocked(card, null, opp)) {
canBeBlocked = true;
break;
}
}
@@ -1573,7 +1582,7 @@ public class AttachAi extends SpellAbilityAi {
&& canBeBlocked
&& ComputerUtilCombat.canAttackNextTurn(card);
} else if (keyword.equals("Haste")) {
return card.hasSickness() && ph.isPlayerTurn(sa.getActivatingPlayer()) && !card.isTapped()
return card.hasSickness() && ph.isPlayerTurn(ai) && !card.isTapped()
&& card.getNetCombatDamage() + powerBonus > 0
&& !ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
&& ComputerUtilCombat.canAttackNextTurn(card);
@@ -1609,8 +1618,6 @@ public class AttachAi extends SpellAbilityAi {
&& CombatUtil.canBlock(card, true);
} else if (keyword.equals("Reach")) {
return !card.hasKeyword(Keyword.FLYING) && CombatUtil.canBlock(card, true);
} else if (keyword.equals("CARDNAME can attack as though it didn't have defender.")) {
return card.hasKeyword(Keyword.DEFENDER) && card.getNetCombatDamage() + powerBonus > 0;
} else if (keyword.equals("Shroud") || keyword.equals("Hexproof")) {
return !card.hasKeyword(Keyword.SHROUD) && !card.hasKeyword(Keyword.HEXPROOF);
} else return !keyword.equals("Defender");
@@ -1627,7 +1634,6 @@ public class AttachAi extends SpellAbilityAi {
* @return true, if is useful keyword
*/
private static boolean isUsefulCurseKeyword(final String keyword, final Card card, final SpellAbility sa) {
final Player ai = sa.getActivatingPlayer();
if (!CardUtil.isStackingKeyword(keyword) && card.hasKeyword(keyword)) {
return false;
}
@@ -1667,12 +1673,6 @@ public class AttachAi extends SpellAbilityAi {
if (c == null) {
return false;
}
if (sa.getHostCard() == null) {
// FIXME: Not sure what should the resolution be if a SpellAbility has no host card. This should
// not happen normally. Possibly remove this block altogether? (if it's an impossible condition).
System.out.println("AttachAi: isUsefulAttachAction unexpectedly called with SpellAbility with no host card. Assuming it's a determined useful action.");
return true;
}
// useless to equip a creature that can't attack or block.
return !sa.getHostCard().isEquipment() || !ComputerUtilCard.isUselessCreature(ai, c);
@@ -1736,7 +1736,7 @@ public class AttachAi extends SpellAbilityAi {
}
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}

View File

@@ -29,7 +29,6 @@ public class BecomesBlockedAi extends SpellAbilityAi {
if (tgt != null) {
sa.resetTargets();
CardCollection list = CardLists.filterControlledBy(game.getCardsIn(ZoneType.Battlefield), aiPlayer.getOpponents());
list = CardLists.getValidCards(list, tgt.getValidTgts(), source.getController(), source, sa);
list = CardLists.getTargetableCards(list, sa);
list = CardLists.getNotKeyword(list, Keyword.TRAMPLE);

View File

@@ -26,7 +26,6 @@ public class BidLifeAi extends SpellAbilityAi {
sa.resetTargets();
if (tgt.canTgtCreature()) {
List<Card> list = CardLists.getTargetableCards(AiAttackController.choosePreferredDefenderPlayer(aiPlayer).getCardsIn(ZoneType.Battlefield), sa);
list = CardLists.getValidCards(list, tgt.getValidTgts(), source.getController(), source, sa);
if (list.isEmpty()) {
return false;
}

View File

@@ -1,35 +0,0 @@
package forge.ai.ability;
import forge.ai.SpellAbilityAi;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
public class CanPlayAsDrawbackAi extends SpellAbilityAi {
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility)
*/
@Override
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
return false;
}
/**
* <p>
* copySpellTriggerAI.
* </p>
* @param sa
* a {@link forge.game.spellability.SpellAbility} object.
* @param mandatory
* a boolean.
* @param af
* a {@link forge.game.ability.AbilityFactory} object.
*
* @return a boolean.
*/
@Override
protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) {
return false;
}
}

View File

@@ -11,7 +11,6 @@ import forge.card.MagicColor;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameObject;
import forge.game.GlobalRuleChange;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
@@ -34,7 +33,6 @@ import forge.game.staticability.StaticAbilityMustTarget;
import forge.game.zone.ZoneType;
import forge.util.Aggregates;
import forge.util.MyRandom;
import forge.util.collect.FCollection;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
@@ -124,8 +122,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
return doSacAndReturnFromGraveLogic(aiPlayer, sa);
} else if (aiLogic.equals("Necropotence")) {
return SpecialCardAi.Necropotence.consider(aiPlayer, sa);
} else if (aiLogic.equals("SameName")) { // Declaration in Stone
return doSameNameLogic(aiPlayer, sa);
} else if (aiLogic.equals("ReanimateAll")) {
return SpecialCardAi.LivingDeath.consider(aiPlayer, sa);
} else if (aiLogic.equals("TheScarabGod")) {
@@ -274,13 +270,9 @@ public class ChangeZoneAi extends SpellAbilityAi {
}
}
//Ninjutsu
if (sa.hasParam("Ninjutsu")) {
if (source.getType().isLegendary()
&& !ai.getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule)) {
if (ai.getZone(ZoneType.Battlefield).contains(CardPredicates.nameEquals(source.getName()))) {
return false;
}
if (sa.isNinjutsu()) {
if (!source.ignoreLegendRule() && ai.isCardInPlay(source.getName())) {
return false;
}
if (ai.getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DAMAGE)) {
return false;
@@ -680,10 +672,8 @@ public class ChangeZoneAi extends SpellAbilityAi {
return false;
}
// if (origin.equals("Graveyard")) {
// return this card from graveyard: cards like Hammer of Bogardan
// in general this is cool, but we should add some type of
// restrictions
// in general this is cool, but we should add some type of restrictions
// return this card from battlefield: cards like Blinking Spirit
// in general this should only be used to protect from Imminent Harm
@@ -720,6 +710,10 @@ public class ChangeZoneAi extends SpellAbilityAi {
}
if (destination == ZoneType.Battlefield) {
if (ComputerUtil.isETBprevented(retrieval.get(0))) {
return false;
}
// predict whether something may put a ETBing creature below zero toughness
// (e.g. Reassembing Skeleton + Elesh Norn, Grand Cenobite)
for (final Card c : retrieval) {
@@ -732,18 +726,16 @@ public class ChangeZoneAi extends SpellAbilityAi {
}
}
// predict Legendary cards already present
if (!ai.getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule)) {
boolean nothingWillReturn = true;
for (final Card c : retrieval) {
if (!(c.getType().isLegendary() && ai.isCardInPlay(c.getName()))) {
nothingWillReturn = false;
break;
}
}
if (nothingWillReturn) {
return false;
boolean nothingWillReturn = true;
for (final Card c : retrieval) {
if (!(!c.ignoreLegendRule() && ai.isCardInPlay(c.getName()))) {
nothingWillReturn = false;
break;
}
}
if (nothingWillReturn) {
return false;
}
}
}
@@ -1009,6 +1001,35 @@ public class ChangeZoneAi extends SpellAbilityAi {
return true;
}
// blink logic: get my own permanents back or blink permanents with ETB effects
if (blink) {
CardCollection blinkTargets = CardLists.filter(list, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return !c.isToken() && c.getOwner().equals(ai) && (c.getController().isOpponentOf(ai) || c.hasETBTrigger(false));
}
});
if (!blinkTargets.isEmpty()) {
CardCollection opponentBlinkTargets = CardLists.filterControlledBy(blinkTargets, ai.getOpponents());
// prefer post-combat unless targeting opponent's stuff or part of another ability
if (immediately || sa.getParent() != null || sa.isTrigger() || !opponentBlinkTargets.isEmpty() || !game.getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2)) {
while (!blinkTargets.isEmpty() && sa.canAddMoreTarget()) {
Card choice = null;
// first prefer targeting opponents stuff
if (!opponentBlinkTargets.isEmpty()) {
choice = ComputerUtilCard.getBestAI(opponentBlinkTargets);
opponentBlinkTargets.remove(choice);
}
else {
choice = ComputerUtilCard.getBestAI(blinkTargets);
}
sa.getTargets().add(choice);
blinkTargets.remove(choice);
}
return true;
}
}
}
// bounce opponent's stuff
list = CardLists.filterControlledBy(list, ai.getOpponents());
if (!CardLists.getNotType(list, "Land").isEmpty()) {
@@ -1026,26 +1047,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
}
});
}
// TODO: Blink permanents with ETB triggers
/*else if (!sa.isTrigger() && SpellAbilityAi.playReusable(ai, sa)) {
aiPermanents = CardLists.filter(aiPermanents, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
if (c.hasCounters()) {
return false; // don't blink something with
}
// counters TODO check good and
// bad counters
// checks only if there is a dangerous ETB effect
return !c.equals(sa.getHostCard()) && SpellPermanent.checkETBEffects(c, ai);
}
});
if (!aiPermanents.isEmpty()) {
// Choose "best" of the remaining to save
sa.getTargets().add(ComputerUtilCard.getBestAI(aiPermanents));
return true;
}
}*/
}
} else if (origin.contains(ZoneType.Graveyard)) {
@@ -1089,7 +1090,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
// Exile and bounce opponents stuff
if (destination.equals(ZoneType.Exile) || origin.contains(ZoneType.Battlefield)) {
// don't rush bouncing stuff when not going to attack
if (!immediately && game.getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2)
&& game.getPhaseHandler().isPlayerTurn(ai)
@@ -1216,7 +1216,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
}
}
if (choice == null) { // can't find anything left
if (sa.getTargets().size() == 0 || !sa.isTargetNumberValid()) {
if (sa.getTargets().isEmpty() || !sa.isTargetNumberValid()) {
if (!mandatory) {
sa.resetTargets();
}
@@ -1275,17 +1275,15 @@ public class ChangeZoneAi extends SpellAbilityAi {
// TODO: ideally the AI should consider at this point which targets exactly to pick (e.g. one card in the first player's graveyard
// vs. two cards in the second player's graveyard, which cards are more relevant to be targeted, etc.). Consider improving.
if (sa.getTargetRestrictions().isSingleZone()) {
Card firstTgt = sa.getTargets().getFirstTargetedCard();
Card firstTgt = sa.getTargetCard();
CardCollection toRemove = new CardCollection();
if (firstTgt != null) {
for (Card t : sa.getTargets().getTargetCards()) {
if (!t.getController().equals(firstTgt.getController())) {
toRemove.add(t);
}
}
for (Card dontTarget : toRemove) {
sa.getTargets().remove(dontTarget);
if (!t.getController().equals(firstTgt.getController())) {
toRemove.add(t);
}
}
sa.getTargets().removeAll(toRemove);
}
}
@@ -1359,12 +1357,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
chance = aic.getIntProperty(AiProps.BLINK_RELOAD_PLANESWALKER_CHANCE);
}
if (MyRandom.percentTrue(chance)) {
Collections.sort(aiPlaneswalkers, new Comparator<Card>() {
@Override
public int compare(final Card a, final Card b) {
return a.getCounters(CounterEnumType.LOYALTY) - b.getCounters(CounterEnumType.LOYALTY);
}
});
Collections.sort(aiPlaneswalkers, CardPredicates.compareByCounterType(CounterEnumType.LOYALTY));
for (Card pw : aiPlaneswalkers) {
int curLoyalty = pw.getCounters(CounterEnumType.LOYALTY);
int freshLoyalty = Integer.valueOf(pw.getCurrentState().getBaseLoyalty());
@@ -1439,17 +1432,14 @@ public class ChangeZoneAi extends SpellAbilityAi {
final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
final TargetRestrictions tgt = sa.getTargetRestrictions();
CardCollection list = CardLists.getValidCards(ai.getGame().getCardsIn(tgt.getZone()), tgt.getValidTgts(), ai, source, sa);
list = CardLists.getTargetableCards(list, sa);
list.removeAll(sa.getTargets().getTargetCards());
List<Card> list = CardUtil.getValidCardsToTarget(tgt, sa);
if (list.isEmpty()) {
return false;
}
// target loop
while (sa.getTargets().size() < tgt.getMinTargets(sa.getHostCard(), sa)) {
while (!sa.isMinTargetChosen()) {
// AI Targeting
Card choice = null;
@@ -1746,7 +1736,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
// AI was never asked
return true;
}
@@ -1764,7 +1754,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
public Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable<Player> options, Map<String, Object> params) {
// Called when attaching Aura to player or adding creature to combat
if (params != null && params.containsKey("Attacker")) {
return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection<GameEntity>(options));
return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), options);
}
return AttachAi.attachToPlayerAIPreferences(ai, sa, true, (List<Player>)options);
}
@@ -1772,7 +1762,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
@Override
protected GameEntity chooseSinglePlayerOrPlaneswalker(Player ai, SpellAbility sa, Iterable<GameEntity> options, Map<String, Object> params) {
if (params != null && params.containsKey("Attacker")) {
return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection<GameEntity>(options));
return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), options);
}
// should not be reached
return super.chooseSinglePlayerOrPlaneswalker(ai, sa, options, params);
@@ -1862,80 +1852,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
return false;
}
private boolean doSameNameLogic(Player aiPlayer, SpellAbility sa) {
final Game game = aiPlayer.getGame();
final Card source = sa.getHostCard();
final TargetRestrictions tgt = sa.getTargetRestrictions();
final ZoneType origin = ZoneType.listValueOf(sa.getParam("Origin")).get(0);
CardCollection list = CardLists.getValidCards(game.getCardsIn(origin), tgt.getValidTgts(), aiPlayer,
source, sa);
list = CardLists.filterControlledBy(list, aiPlayer.getOpponents());
if (list.isEmpty()) {
return false; // no valid targets
}
Map<Player, Map.Entry<String, Integer>> data = Maps.newHashMap();
// need to filter for the opponents first
for (final Player opp : aiPlayer.getOpponents()) {
CardCollection oppList = CardLists.filterControlledBy(list, opp);
// no cards
if (oppList.isEmpty()) {
continue;
}
// Compute value for each possible target
Map<String, Integer> values = ComputerUtilCard.evaluateCreatureListByName(oppList);
// reject if none of them can be targeted
oppList = CardLists.filter(oppList, CardPredicates.isTargetableBy(sa));
// none can be targeted
if (oppList.isEmpty()) {
continue;
}
List<String> toRemove = Lists.newArrayList();
for (final String name : values.keySet()) {
if (!Iterables.any(oppList, CardPredicates.nameEquals(name))) {
toRemove.add(name);
}
}
values.keySet().removeAll(toRemove);
// JAVA 1.8 use Map.Entry.comparingByValue()
data.put(opp, Collections.max(values.entrySet(), new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue() - o2.getValue();
}
}));
}
if (!data.isEmpty()) {
// JAVA 1.8 use Map.Entry.comparingByValue() somehow
Map.Entry<Player, Map.Entry<String, Integer>> max = Collections.max(data.entrySet(), new Comparator<Map.Entry<Player, Map.Entry<String, Integer>>>() {
@Override
public int compare(Map.Entry<Player, Map.Entry<String, Integer>> o1, Map.Entry<Player, Map.Entry<String, Integer>> o2) {
return o1.getValue().getValue() - o2.getValue().getValue();
}
});
// filter list again by the opponent and a creature of the wanted name that can be targeted
list = CardLists.filter(CardLists.filterControlledBy(list, max.getKey()),
CardPredicates.nameEquals(max.getValue().getKey()), CardPredicates.isTargetableBy(sa));
// list should contain only one element or zero
sa.resetTargets();
for (Card c : list) {
sa.getTargets().add(c);
return true;
}
}
return false;
}
public boolean doReturnCommanderLogic(SpellAbility sa, Player aiPlayer) {
@SuppressWarnings("unchecked")
Map<AbilityKey, Object> originalParams = (Map<AbilityKey, Object>)sa.getReplacingObject(AbilityKey.OriginalParams);

View File

@@ -1,10 +1,10 @@
package forge.ai.ability;
import java.util.Collections;
import java.util.Map;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.ai.AiController;
import forge.ai.AiPlayerPredicates;
@@ -70,7 +70,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
// ex. "Return all Auras attached to target"
// ex. "Return all blocking/blocked by target creature"
CardCollectionView oppType = CardLists.filterControlledBy(game.getCardsIn(origin), ai.getOpponents());
CardCollectionView oppType = ai.getOpponents().getCardsIn(origin);
CardCollectionView computerType = ai.getCardsIn(origin);
// remove cards that won't be seen in AI's own library if it can't be searched
@@ -196,8 +196,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
// mass zone change for creatures: if in dire danger, do it; otherwise, only do it if the opponent's
// creatures are better in value
if ((CardLists.getNotType(oppType, "Creature").size() == 0)
&& (CardLists.getNotType(computerType, "Creature").size() == 0)) {
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
if (game.getCombat() != null && ComputerUtilCombat.lifeInSeriousDanger(ai, game.getCombat())) {
if (game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)
&& game.getPhaseHandler().getPlayerTurn().isOpponentOf(ai)) {
@@ -224,17 +223,15 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
} else if (origin.equals(ZoneType.Graveyard)) {
if (sa.usesTargeting()) {
// search targetable Opponents
final Iterable<Player> oppList = Iterables.filter(ai.getOpponents(),
PlayerPredicates.isTargetableBy(sa));
final PlayerCollection oppList = ai.getOpponents().filter(PlayerPredicates.isTargetableBy(sa));
if (Iterables.isEmpty(oppList)) {
if (oppList.isEmpty()) {
return false;
}
// get the one with the most in graveyard
// zone is visible so evaluate which would be hurt the most
Player oppTarget = Collections.max(Lists.newArrayList(oppList),
AiPlayerPredicates.compareByZoneValue(sa.getParam("ChangeType"), origin, sa));
Player oppTarget = Collections.max(oppList, AiPlayerPredicates.compareByZoneValue(sa.getParam("ChangeType"), origin, sa));
// set the target
if (!oppTarget.getCardsIn(ZoneType.Graveyard).isEmpty()) {
@@ -269,18 +266,14 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
return (curHandSize + minAdv - 1 < numExiledWithSrc) || (!noDiscard && numExiledWithSrc >= ai.getMaxHandSize());
}
} else if (origin.equals(ZoneType.Stack)) {
// time stop can do something like this:
// Origin$ Stack | Destination$ Exile | SubAbility$ DBSkip
// DBSKipToPhase | DB$SkipToPhase | Phase$ Cleanup
// otherwise, this situation doesn't exist
// TODO
return false;
}
if (destination.equals(ZoneType.Battlefield)) {
if (sa.getParam("GainControl") != null) {
if (sa.hasParam("GainControl")) {
// Check if the cards are valuable enough
if (CardLists.getNotType(oppType, "Creature").size() == 0
&& CardLists.getNotType(computerType, "Creature").size() == 0) {
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
if ((ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard
.evaluateCreatureList(oppType)) < 400) {
return false;
@@ -293,8 +286,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
}
} else {
// don't activate if human gets more back than AI does
if ((CardLists.getNotType(oppType, "Creature").size() == 0)
&& (CardLists.getNotType(computerType, "Creature").size() == 0)) {
if (CardLists.getNotType(oppType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
if (ComputerUtilCard.evaluateCreatureList(computerType) <= (ComputerUtilCard
.evaluateCreatureList(oppType) + 100)) {
return false;
@@ -334,7 +326,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player ai, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player ai, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
final Card source = sa.getHostCard();
final String hostName = source.getName();
final ZoneType origin = ZoneType.listValueOf(sa.getParam("Origin")).get(0);
@@ -353,8 +345,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
return true;
// if AI creature is better than Human Creature
return ComputerUtilCard.evaluateCreatureList(aiCards) >= ComputerUtilCard
.evaluateCreatureList(humanCards);
return ComputerUtilCard.evaluateCreatureList(aiCards) >= ComputerUtilCard.evaluateCreatureList(humanCards);
}
return true;
}
@@ -373,7 +364,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
return Iterables.any(ai.getOpponents().getCardsIn(origin), CardPredicates.Presets.CREATURES);
}
CardCollectionView humanType = CardLists.filterControlledBy(ai.getGame().getCardsIn(origin), ai.getOpponents());
CardCollectionView humanType = ai.getOpponents().getCardsIn(origin);
humanType = AbilityUtils.filterListByType(humanType, sa.getParam("ChangeType"), sa);
CardCollectionView computerType = ai.getCardsIn(origin);
@@ -415,15 +406,13 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
// if the AI is using it defensively, then something else needs to occur
// if only creatures are affected evaluate both lists and pass only
// if human creatures are more valuable
if ((CardLists.getNotType(humanType, "Creature").isEmpty()) && (CardLists.getNotType(computerType, "Creature").isEmpty())) {
if (ComputerUtilCard.evaluateCreatureList(computerType) >= ComputerUtilCard
.evaluateCreatureList(humanType)) {
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
if (ComputerUtilCard.evaluateCreatureList(computerType) >= ComputerUtilCard.evaluateCreatureList(humanType)) {
return false;
}
} // otherwise evaluate both lists by CMC and pass only if human
// permanents are more valuable
else if (ComputerUtilCard.evaluatePermanentList(computerType) >= ComputerUtilCard
.evaluatePermanentList(humanType)) {
else if (ComputerUtilCard.evaluatePermanentList(computerType) >= ComputerUtilCard.evaluatePermanentList(humanType)) {
return false;
}
} else if (origin.equals(ZoneType.Graveyard)) {
@@ -456,11 +445,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
} else if (origin.equals(ZoneType.Exile)) {
} else if (origin.equals(ZoneType.Stack)) {
// time stop can do something like this:
// Origin$ Stack | Destination$ Exile | SubAbility$ DBSkip
// DBSKipToPhase | DB$SkipToPhase | Phase$ Cleanup
// otherwise, this situation doesn't exist
return false;
// currently only exists indirectly (e.g. Summary Dismissal via PlayAi)
}
if (destination.equals(ZoneType.Battlefield)) {
@@ -468,25 +453,22 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
if (mandatory) {
return true;
}
if (sa.getParam("GainControl") != null) {
if (sa.hasParam("GainControl")) {
// Check if the cards are valuable enough
if ((CardLists.getNotType(humanType, "Creature").size() == 0) && (CardLists.getNotType(computerType, "Creature").size() == 0)) {
return (ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard
.evaluateCreatureList(humanType)) >= 1;
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
return (ComputerUtilCard.evaluateCreatureList(computerType) + ComputerUtilCard.evaluateCreatureList(humanType)) >= 1;
} // otherwise evaluate both lists by CMC and pass only if human
// permanents are less valuable
else return (ComputerUtilCard.evaluatePermanentList(computerType) + ComputerUtilCard
return (ComputerUtilCard.evaluatePermanentList(computerType) + ComputerUtilCard
.evaluatePermanentList(humanType)) >= 1;
} else {
// don't activate if human gets more back than AI does
if ((CardLists.getNotType(humanType, "Creature").isEmpty()) && (CardLists.getNotType(computerType, "Creature").isEmpty())) {
return ComputerUtilCard.evaluateCreatureList(computerType) > ComputerUtilCard
.evaluateCreatureList(humanType);
} // otherwise evaluate both lists by CMC and pass only if human
// permanents are less valuable
else return ComputerUtilCard.evaluatePermanentList(computerType) > ComputerUtilCard
.evaluatePermanentList(humanType);
}
// don't activate if human gets more back than AI does
if (CardLists.getNotType(humanType, "Creature").isEmpty() && CardLists.getNotType(computerType, "Creature").isEmpty()) {
return ComputerUtilCard.evaluateCreatureList(computerType) > ComputerUtilCard.evaluateCreatureList(humanType);
} // otherwise evaluate both lists by CMC and pass only if human
// permanents are less valuable
return ComputerUtilCard.evaluatePermanentList(computerType) > ComputerUtilCard.evaluatePermanentList(humanType);
}
return true;

View File

@@ -14,6 +14,7 @@ import forge.ai.SpellAbilityAi;
import forge.game.ability.AbilityUtils;
import forge.game.ability.effects.CharmEffect;
import forge.game.card.Card;
import forge.game.keyword.Keyword;
import forge.game.player.Player;
import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility;
@@ -26,7 +27,6 @@ public class CharmAi extends SpellAbilityAi {
protected boolean checkApiLogic(Player ai, SpellAbility sa) {
final Card source = sa.getHostCard();
List<AbilitySub> choices = CharmEffect.makePossibleOptions(sa);
Collections.shuffle(choices);
final int num;
final int min;
@@ -37,6 +37,11 @@ public class CharmAi extends SpellAbilityAi {
min = sa.hasParam("MinCharmNum") ? AbilityUtils.calculateAmount(source, sa.getParam("MinCharmNum"), sa) : num;
}
// only randomize if not all possible together
if (num < choices.size() || source.hasKeyword(Keyword.ESCALATE)) {
Collections.shuffle(choices);
}
boolean timingRight = sa.isTrigger(); //is there a reason to play the charm now?
// Reset the chosen list otherwise it will be locked in forever by earlier calls
@@ -88,8 +93,7 @@ public class CharmAi extends SpellAbilityAi {
AiController aic = ((PlayerControllerAi) ai.getController()).getAi();
// First pass using standard canPlayAi() for good choices
for (AbilitySub sub : choices) {
sub.setActivatingPlayer(ai);
sub.getRestrictions().setZone(sub.getParent().getRestrictions().getZone());
sub.setActivatingPlayer(ai, true);
if (AiPlayDecision.WillPlay == aic.canPlaySa(sub)) {
chosenList.add(sub);
if (chosenList.size() == num) {
@@ -101,8 +105,6 @@ public class CharmAi extends SpellAbilityAi {
// Second pass using doTrigger(false) to fulfill minimum choice
choices.removeAll(chosenList);
for (AbilitySub sub : choices) {
sub.setActivatingPlayer(ai);
sub.getRestrictions().setZone(sub.getParent().getRestrictions().getZone());
if (aic.doTrigger(sub, false)) {
chosenList.add(sub);
if (chosenList.size() == min) {
@@ -114,8 +116,6 @@ public class CharmAi extends SpellAbilityAi {
if (chosenList.size() < min) {
choices.removeAll(chosenList);
for (AbilitySub sub : choices) {
sub.setActivatingPlayer(ai);
sub.getRestrictions().setZone(sub.getParent().getRestrictions().getZone());
if (aic.doTrigger(sub, true)) {
chosenList.add(sub);
if (chosenList.size() == min) {
@@ -224,14 +224,13 @@ public class CharmAi extends SpellAbilityAi {
List<AbilitySub> chosenList = Lists.newArrayList();
AiController aic = ((PlayerControllerAi) ai.getController()).getAi();
for (AbilitySub sub : choices) {
sub.setActivatingPlayer(ai);
sub.setActivatingPlayer(ai, true);
// Assign generic good choice to fill up choices if necessary
if ("Good".equals(sub.getParam("AILogic")) && aic.doTrigger(sub, false)) {
goodChoice = sub;
} else {
// Standard canPlayAi()
sub.setActivatingPlayer(ai);
sub.getRestrictions().setZone(sub.getParent().getRestrictions().getZone());
sub.setActivatingPlayer(ai, true);
if (AiPlayDecision.WillPlay == aic.canPlaySa(sub)) {
chosenList.add(sub);
if (chosenList.size() == min) {
@@ -255,15 +254,6 @@ public class CharmAi extends SpellAbilityAi {
return Aggregates.random(opponents);
}
@Override
protected boolean doTriggerAINoCost(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) {
// already done by chooseOrderOfSimultaneousStackEntry
if (sa.getChosenList() != null) {
return true;
}
return super.doTriggerAINoCost(aiPlayer, sa, mandatory);
}
@Override
public boolean chkDrawbackWithSubs(Player aiPlayer, AbilitySub ab) {
// choices were already targeted

View File

@@ -162,9 +162,17 @@ public class ChooseCardAi extends SpellAbilityAi {
public Card chooseSingleCard(final Player ai, final SpellAbility sa, Iterable<Card> options, boolean isOptional, Player targetedPlayer, Map<String, Object> params) {
final Card host = sa.getHostCard();
final Player ctrl = host.getController();
final String logic = sa.getParam("AILogic");
String logic = sa.getParamOrDefault("AILogic", "");
if (logic.contains("NotSelf")) {
CardCollection opt = (CardCollection) options;
if (opt.contains(host)) {
opt.remove(host);
}
options = opt;
logic = logic.replace("NotSelf", "");
}
Card choice = null;
if (logic == null) {
if (logic.equals("")) {
// Base Logic is choose "best"
choice = ComputerUtilCard.getBestAI(options);
} else if ("WorstCard".equals(logic)) {
@@ -190,13 +198,6 @@ public class ChooseCardAi extends SpellAbilityAi {
} else if ("RandomNonLand".equals(logic)) {
options = CardLists.getValidCards(options, "Card.nonLand", host.getController(), host, sa);
choice = Aggregates.random(options);
} else if (logic.equals("Untap")) {
final String filter = "Permanent.YouCtrl,Permanent.tapped";
CardCollection newOptions = CardLists.getValidCards(options, filter, ctrl, host, sa);
if (!newOptions.isEmpty()) {
options = newOptions;
}
choice = ComputerUtilCard.getBestAI(options);
} else if (logic.equals("NeedsPrevention")) {
final Game game = ai.getGame();
final Combat combat = game.getCombat();
@@ -294,6 +295,7 @@ public class ChooseCardAi extends SpellAbilityAi {
choice = ComputerUtilCard.getBestCreatureToAttackNextTurnAI(ai, options);
} else {
choice = ComputerUtilCard.getBestAI(options);
System.err.println("Bad ChooseCard AILogic value for " + host.getName() + " - reverting to default");
}
return choice;
}

View File

@@ -1,30 +1,17 @@
package forge.ai.ability;
import java.util.List;
import java.util.Map;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import forge.ai.ComputerUtilAbility;
import forge.ai.ComputerUtilCard;
import forge.ai.ComputerUtilCost;
import forge.ai.SpecialCardAi;
import forge.ai.SpellAbilityAi;
import forge.ai.SpellApiToAi;
import forge.card.MagicColor;
import forge.game.Game;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardLists;
import forge.game.card.CardPredicates.Presets;
import forge.game.card.CardUtil;
import forge.game.card.CounterEnumType;
import forge.game.card.*;
import forge.game.combat.Combat;
import forge.game.combat.CombatUtil;
import forge.game.cost.Cost;
import forge.game.keyword.Keyword;
import forge.game.phase.PhaseHandler;
@@ -36,6 +23,9 @@ import forge.game.zone.ZoneType;
import forge.util.Aggregates;
import forge.util.collect.FCollection;
import java.util.List;
import java.util.Map;
public class ChooseGenericEffectAi extends SpellAbilityAi {
@@ -43,7 +33,7 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
protected boolean checkAiLogic(final Player ai, final SpellAbility sa, final String aiLogic) {
if ("Khans".equals(aiLogic) || "Dragons".equals(aiLogic)) {
return true;
} else if (aiLogic.startsWith("Fabricate") || "Riot".equals(aiLogic)) {
} else if ("Riot".equals(aiLogic)) {
return true;
} else if ("Pump".equals(aiLogic) || "BestOption".equals(aiLogic)) {
for (AbilitySub sb : sa.getAdditionalAbilityList("Choices")) {
@@ -51,8 +41,6 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
return true;
}
}
} else if ("GideonBlackblade".equals(aiLogic)) {
return SpecialCardAi.GideonBlackblade.consider(ai, sa);
} else if ("AtOppEOT".equals(aiLogic)) {
PhaseHandler ph = ai.getGame().getPhaseHandler();
return ph.is(PhaseType.END_OF_TURN) && ph.getNextTurn() == ai;
@@ -103,8 +91,6 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
return spells.get(0);
} else if ("Random".equals(logic)) {
return Aggregates.random(spells);
} else if ("GideonBlackblade".equals(logic)) {
return SpecialCardAi.GideonBlackblade.chooseSpellAbility(player, sa, spells);
} else if ("Phasing".equals(logic)) { // Teferi's Realm : keep aggressive
List<SpellAbility> filtered = Lists.newArrayList(Iterables.filter(spells, new Predicate<SpellAbility>() {
@Override
@@ -116,7 +102,7 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
} else if ("PayUnlessCost".equals(logic)) {
for (final SpellAbility sp : spells) {
String unlessCost = sp.getParam("UnlessCost");
sp.setActivatingPlayer(sa.getActivatingPlayer());
sp.setActivatingPlayer(sa.getActivatingPlayer(), true);
Cost unless = new Cost(unlessCost, false);
SpellAbility paycost = new SpellAbility.EmptySa(sa.getHostCard(), player);
paycost.setPayCosts(unless);
@@ -202,7 +188,7 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
} else if ("SinProdder".equals(logic)) {
SpellAbility allow = null, deny = null;
for (final SpellAbility sp : spells) {
if (sp.getDescription().equals("Allow")) {
if (sp.getDescription().equals("No")) {
allow = sp;
} else {
deny = sp;
@@ -265,83 +251,6 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
}
// if unsure, random?
return Aggregates.random(spells);
} else if (logic.startsWith("Fabricate")) {
final int n = Integer.valueOf(logic.substring("Fabricate".length()));
if(spells.size() < 2) {
// If the creature is no longer on the battlefield, the option
// to add counters is already removed at this point. Return the
// only available option: create servo tokens.
return spells.get(0);
}
SpellAbility counterSA = spells.get(0), tokenSA = spells.get(1);
// check for something which might prevent the counters to be placed on host
if (!host.canReceiveCounters(CounterEnumType.P1P1)) {
return tokenSA;
}
// if host would leave the play or if host is useless, create tokens
if (host.hasSVar("EndOfTurnLeavePlay") || ComputerUtilCard.isUselessCreature(player, host)) {
return tokenSA;
}
// need a copy for one with extra +1/+1 counter boost,
// without causing triggers to run
final Card copy = CardUtil.getLKICopy(host);
copy.setCounters(CounterEnumType.P1P1, copy.getCounters(CounterEnumType.P1P1) + n);
copy.setZone(host.getZone());
// if host would put into the battlefield attacking
if (combat != null && combat.isAttacking(host)) {
final Player defender = combat.getDefenderPlayerByAttacker(host);
if (defender.canLoseLife() && !ComputerUtilCard.canBeBlockedProfitably(defender, copy, true)) {
return counterSA;
}
return tokenSA;
}
// if the host has haste and can attack
if (CombatUtil.canAttack(copy)) {
for (final Player opp : player.getOpponents()) {
if (CombatUtil.canAttack(copy, opp) &&
opp.canLoseLife() &&
!ComputerUtilCard.canBeBlockedProfitably(opp, copy, true))
return counterSA;
}
}
// TODO check for trigger to turn token ETB into +1/+1 counter for host
// TODO check for trigger to turn token ETB into damage or life loss for opponent
// in this cases Token might be prefered even if they would not survive
final Card tokenCard = TokenAi.spawnToken(player, tokenSA);
// Token would not survive
if (!tokenCard.isCreature() || tokenCard.getNetToughness() < 1) {
return counterSA;
}
// Special Card logic, this one try to median its power with the number of artifacts
if ("Marionette Master".equals(sourceName)) {
CardCollection list = CardLists.filter(player.getCardsIn(ZoneType.Battlefield), Presets.ARTIFACTS);
return list.size() >= copy.getNetPower() ? counterSA : tokenSA;
} else if ("Cultivator of Blades".equals(sourceName)) {
// Cultivator does try to median with number of Creatures
CardCollection list = player.getCreaturesInPlay();
return list.size() >= copy.getNetPower() ? counterSA : tokenSA;
}
// evaluate Creature with +1/+1
int evalCounter = ComputerUtilCard.evaluateCreature(copy);
final CardCollection tokenList = new CardCollection(host);
for (int i = 0; i < n; ++i) {
tokenList.add(TokenAi.spawnToken(player, tokenSA));
}
// evaluate Host with Tokens
int evalToken = ComputerUtilCard.evaluateCreatureList(tokenList);
return evalToken >= evalCounter ? tokenSA : counterSA;
} else if ("CombustibleGearhulk".equals(logic)) {
Player controller = sa.getActivatingPlayer();
List<ZoneType> zones = ZoneType.listValueOf("Graveyard, Battlefield, Exile");

View File

@@ -6,7 +6,6 @@ import java.util.Map;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.ai.AiAttackController;
import forge.ai.ComputerUtilCard;
@@ -74,9 +73,11 @@ public class ChooseSourceAi extends SpellAbilityAi {
}
final Card threatSource = topStack.getHostCard();
List<? extends GameObject> objects = getTargets(topStack);
List<? extends GameObject> objects;
if (!topStack.usesTargeting() && topStack.hasParam("ValidPlayers") && !topStack.hasParam("Defined")) {
objects = AbilityUtils.getDefinedPlayers(threatSource, topStack.getParam("ValidPlayers"), topStack);
} else {
objects = getTargets(topStack);
}
if (!objects.contains(ai) || topStack.hasParam("NoPrevention")) {
@@ -201,7 +202,7 @@ public class ChooseSourceAi extends SpellAbilityAi {
private static List<GameObject> getTargets(final SpellAbility sa) {
return sa.usesTargeting() && (!sa.hasParam("Defined"))
? Lists.newArrayList(sa.getTargets())
? sa.getTargets()
: AbilityUtils.getDefinedObjects(sa.getHostCard(), sa.getParam("Defined"), sa);
}
}

View File

@@ -4,8 +4,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import forge.ai.AiCardMemory;
import forge.ai.ComputerUtilAbility;
@@ -82,7 +80,7 @@ public class ChooseTypeAi extends SpellAbilityAi {
if (maxX > 1) {
CardCollection cre = CardLists.filter(aiPlayer.getCardsIn(ZoneType.Battlefield),
Predicates.and(CardPredicates.isType(chosenType), CardPredicates.Presets.UNTAPPED));
CardPredicates.isType(chosenType), CardPredicates.Presets.UNTAPPED);
if (!cre.isEmpty()) {
for (Card c: cre) {
avgPower += c.getNetPower();

View File

@@ -59,7 +59,7 @@ public class ClashAi extends SpellAbilityAi {
@Override
protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable<Player> options, Map<String, Object> params) {
for (Player p : options) {
if (p.getCardsIn(ZoneType.Library).size() == 0)
if (p.getCardsIn(ZoneType.Library).isEmpty())
return p;
}

View File

@@ -69,7 +69,6 @@ public class CloneAi extends SpellAbilityAi {
bFlag = true;
}
}
}
if (!bFlag) { // All of the defined stuff is cloned, not very useful
@@ -154,11 +153,11 @@ public class CloneAi extends SpellAbilityAi {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if (sa.hasParam("AILogic") && (!sa.usesTargeting() || sa.isTargetNumberValid())) {
// Had a special logic for it and managed to target, so confirm if viable
if ("CloneBestCreature".equals(sa.getParam("AILogic"))) {
return ComputerUtilCard.evaluateCreature(sa.getTargets().getFirstTargetedCard()) > ComputerUtilCard.evaluateCreature(sa.getHostCard());
return ComputerUtilCard.evaluateCreature(sa.getTargetCard()) > ComputerUtilCard.evaluateCreature(sa.getHostCard());
} else if ("IfDefinedCreatureIsBetter".equals(sa.getParam("AILogic"))) {
List<Card> defined = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa);
Card bestDefined = ComputerUtilCard.getBestCreatureAI(defined);
@@ -229,7 +228,7 @@ public class CloneAi extends SpellAbilityAi {
tgtCard = cloneTargets.get(0);
}
} else if (sa.hasParam("Choices") && sa.usesTargeting()) {
tgtCard = sa.getTargets().getFirstTargetedCard();
tgtCard = sa.getTargetCard();
}
return tgtCard;

View File

@@ -0,0 +1,116 @@
package forge.ai.ability;
import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilCard;
import forge.ai.ComputerUtilMana;
import forge.ai.SpellAbilityAi;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardLists;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
public class ConniveAi extends SpellAbilityAi {
@Override
protected boolean canPlayAI(Player ai, SpellAbility sa) {
if (!ai.canDraw()) {
return false; // can't draw anything
}
CardCollection list = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
// Filter AI-specific targets if provided
list = ComputerUtil.filterAITgts(sa, ai, list, false);
if ("X".equals(sa.getParam("TargetMax")) && "Count$xPaid".equals(sa.getSVar("X"))) {
// TODO: consider making the library margin (currently hardcoded to 5) a configurable AI parameter
int maxTargets = Math.min(list.size(), Math.max(0, ai.getCardsIn(ZoneType.Library).size() - 5));
maxTargets = Math.min(maxTargets, ComputerUtilMana.getAvailableManaEstimate(ai));
sa.setXManaCostPaid(maxTargets);
}
sa.resetTargets();
while (sa.canAddMoreTarget()) {
if ((list.isEmpty() && sa.isTargetNumberValid() && !sa.getTargets().isEmpty())) {
return true;
}
if (list.isEmpty()) {
// Still an empty list, but we have to choose something (mandatory); expand targeting to
// include AI's own cards to see if there's anything targetable (e.g. Plague Belcher).
list = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
}
if (list.isEmpty()) {
// Not mandatory, or the the list was regenerated and is still empty,
// so return whether or not we found enough targets
return sa.isTargetNumberValid();
}
Card choice = ComputerUtilCard.getBestCreatureAI(list);
if (choice != null) {
sa.getTargets().add(choice);
list.remove(choice);
} else {
// Didn't want to choose anything?
list.clear();
}
}
return !sa.getTargets().isEmpty() && sa.isTargetNumberValid();
}
@Override
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
if (!ai.canDraw() && !mandatory) {
return false; // can't draw anything
}
boolean preferred = true;
CardCollection list = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
// Filter AI-specific targets if provided
list = ComputerUtil.filterAITgts(sa, ai, list, false);
sa.resetTargets();
while (sa.canAddMoreTarget()) {
if (mandatory) {
if ((list.isEmpty() || !preferred) && sa.isTargetNumberValid()) {
return true;
}
if (list.isEmpty() && preferred) {
// If it's required to choose targets and the list is empty, get a new list
list = CardLists.getTargetableCards(ai.getOpponents().getCardsIn(ZoneType.Battlefield), sa);
preferred = false;
}
if (list.isEmpty()) {
// Still an empty list, but we have to choose something (mandatory); expand targeting to
// include AI's own cards to see if there's anything targetable (e.g. Plague Belcher).
list = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
preferred = false;
}
}
if (list.isEmpty()) {
// Not mandatory, or the the list was regenerated and is still empty,
// so return whether or not we found enough targets
return sa.isTargetNumberValid();
}
Card choice = ComputerUtilCard.getBestCreatureAI(list);
if (choice != null) {
sa.getTargets().add(choice);
list.remove(choice);
} else {
// Didn't want to choose anything?
list.clear();
}
}
return true;
}
}

View File

@@ -82,7 +82,7 @@ public class ControlGainAi extends SpellAbilityAi {
// if Defined, then don't worry about targeting
if (tgt == null) {
if (sa.hasParam("AllValid")) {
CardCollectionView tgtCards = CardLists.filterControlledBy(game.getCardsIn(ZoneType.Battlefield), opponents);
CardCollectionView tgtCards = opponents.getCardsIn(ZoneType.Battlefield);
tgtCards = AbilityUtils.filterListByType(tgtCards, sa.getParam("AllValid"), sa);
return !tgtCards.isEmpty();
}
@@ -309,7 +309,7 @@ public class ControlGainAi extends SpellAbilityAi {
if (!sa.usesTargeting()) {
if (sa.hasParam("AllValid")) {
CardCollectionView tgtCards = CardLists.filterControlledBy(game.getCardsIn(ZoneType.Battlefield), ai.getOpponents());
CardCollectionView tgtCards = ai.getOpponents().getCardsIn(ZoneType.Battlefield);
tgtCards = AbilityUtils.filterListByType(tgtCards, sa.getParam("AllValid"), sa);
if (tgtCards.isEmpty()) {
return false;

View File

@@ -34,7 +34,6 @@ import forge.game.player.PlayerActionConfirmMode;
import forge.game.player.PlayerCollection;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.util.collect.FCollection;
public class CopyPermanentAi extends SpellAbilityAi {
@Override
@@ -131,7 +130,7 @@ public class CopyPermanentAi extends SpellAbilityAi {
if (sa.usesTargeting()) {
sa.resetTargets();
CardCollection list = new CardCollection(CardUtil.getValidCardsToTarget(sa.getTargetRestrictions(), sa));
List<Card> list = CardUtil.getValidCardsToTarget(sa.getTargetRestrictions(), sa);
//Nothing to target
if (list.isEmpty()) {
@@ -224,7 +223,7 @@ public class CopyPermanentAi extends SpellAbilityAi {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
//TODO: add logic here
return true;
}
@@ -254,7 +253,7 @@ public class CopyPermanentAi extends SpellAbilityAi {
@Override
protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable<Player> options, Map<String, Object> params) {
if (params != null && params.containsKey("Attacker")) {
return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection<GameEntity>(options));
return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), options);
}
final List<Card> cards = new PlayerCollection(options).getCreaturesInPlay();
Card chosen = ComputerUtilCard.getBestCreatureAI(cards);
@@ -264,7 +263,7 @@ public class CopyPermanentAi extends SpellAbilityAi {
@Override
protected GameEntity chooseSinglePlayerOrPlaneswalker(Player ai, SpellAbility sa, Iterable<GameEntity> options, Map<String, Object> params) {
if (params != null && params.containsKey("Attacker")) {
return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection<GameEntity>(options));
return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), options);
}
// should not be reached
return super.chooseSinglePlayerOrPlaneswalker(ai, sa, options, params);

View File

@@ -71,6 +71,9 @@ public class CopySpellAbilityAi extends SpellAbilityAi {
} else if (top.getApi() == ApiType.CopySpellAbility) {
// Don't try to copy a copy ability, too complex for the AI to handle
return false;
} else if (top.getApi() == ApiType.Mana) {
// would lead to Stack Overflow by trying to play this again
return false;
} else if (top.getApi() == ApiType.DestroyAll || top.getApi() == ApiType.SacrificeAll || top.getApi() == ApiType.ChangeZoneAll || top.getApi() == ApiType.TapAll || top.getApi() == ApiType.UnattachAll) {
if (!top.usesTargeting() || top.getActivatingPlayer().equals(aiPlayer)) {
// If we activated a mass removal / mass tap / mass bounce / etc. spell, or if the opponent activated it but
@@ -134,7 +137,7 @@ public class CopySpellAbilityAi extends SpellAbilityAi {
}
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
// Chain of Acid requires special attention here since otherwise the AI will confirm the copy and then
// run into the necessity of confirming a mandatory Destroy, thus destroying all of its own permanents.
if ("ChainOfAcid".equals(sa.getParam("AILogic"))) {

View File

@@ -64,8 +64,7 @@ public class CounterAi extends SpellAbilityAi {
if (sa.usesTargeting()) {
final SpellAbility topSA = ComputerUtilAbility.getTopSpellAbilityOnStack(game, sa);
if (!CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa) || topSA.getActivatingPlayer() == ai
|| ai.getAllies().contains(topSA.getActivatingPlayer())) {
if ((topSA.isSpell() && !CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa)) || ai.getYourTeam().contains(topSA.getActivatingPlayer())) {
// might as well check for player's friendliness
return false;
} else if (sa.hasParam("ConditionWouldDestroy") && !CounterEffect.checkForConditionWouldDestroy(sa, topSA)) {
@@ -326,7 +325,7 @@ public class CounterAi extends SpellAbilityAi {
leastBadOption = tgtSA;
}
if (!CardFactoryUtil.isCounterableBy(tgtSA.getHostCard(), sa) ||
if ((tgtSA.isSpell() && !CardFactoryUtil.isCounterableBy(tgtSA.getHostCard(), sa)) ||
tgtSA.getActivatingPlayer() == ai ||
!tgtSA.getActivatingPlayer().isOpponentOf(ai)) {
// Is this a "better" least bad option

Some files were not shown because too many files have changed in this diff Show More