Compare commits

..

5093 Commits

Author SHA1 Message Date
GitHub Actions
5cade5443f [maven-release-plugin] prepare release forge-1.6.54 2023-01-26 02:20:15 +00:00
Chris H
7f297a2ec2 Update pom.xml 2023-01-25 21:08:07 -05: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
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
Chris H
1056a4b978 Enable github actions for creating a desktop release (#539)
Using working publish scripts
2023-01-23 23:38:52 -05: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
Anthony Calosa
c42f1b8149 Merge pull request #2297 from tool4ever/sbafix
Increase SBA check precision
2023-01-22 21:59:30 +08:00
tool4EvEr
fd604e3ce6 Increase SBA check precision 2023-01-22 10:49:34 +01:00
Simisays
3f05e28ab3 update 2023-01-21 16:29:06 +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
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
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
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
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
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
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
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
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
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
9716 changed files with 209924 additions and 45359 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 }}

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"

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>

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.54</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -11,13 +11,24 @@
<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>
<repository>
<id>4thline-repo</id>
<url>http://4thline.org/m2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<sourceDirectory>src</sourceDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>${project.basedir}</directory>
@@ -26,6 +37,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 +67,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 +99,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 +114,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 +132,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 +169,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 +193,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 +235,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>
@@ -272,10 +302,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>

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,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("pointsOfInterest:",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

@@ -1,5 +1,9 @@
package forge.adventure.editor;
import com.badlogic.gdx.tools.particleeditor.ParticleEditor;
import javax.swing.*;
import java.awt.*;
@@ -7,17 +11,37 @@ 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);
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());
setVisible(true);
setSize(800,600);
}

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,21 +3,21 @@ package forge.adventure.editor;
import forge.adventure.data.EnemyData;
import javax.swing.*;
import java.awt.*;
/**
* 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 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();
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();
@@ -28,27 +28,34 @@ public class EnemyEdit extends JComponent {
public EnemyEdit()
{
JComponent center=new JComponent() { };
center.setLayout(new GridLayout(9,2));
FormPanel center=new FormPanel() { };
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);
center.add("Name:",nameField);
center.add("Life:",lifeFiled);
center.add("Spawn rate:",spawnRate);
center.add("Difficulty:",difficulty);
center.add("Speed:",speed);
center.add("Deck:",deck);
center.add("Sprite:",atlas);
center.add("Equipment:",equipment);
center.add("Colors:",colorField);
center.add("ai:",ai);
center.add("flying:",flying);
center.add("boss:",boss);
add(preview);
add(center);
add(rewards);
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());
nameField.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
lifeFiled.addChangeListener(e -> EnemyEdit.this.updateEnemy());
@@ -65,6 +72,9 @@ public class EnemyEdit extends JComponent {
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,7 +84,7 @@ 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);
}
@@ -94,13 +104,16 @@ 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());

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

@@ -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,88 @@
package forge.adventure.editor;
import forge.adventure.data.PointOfInterestData;
import javax.swing.*;
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);
private boolean updating=false;
public PointOfInterestEdit()
{
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
FormPanel parameters=new FormPanel();
parameters.setBorder(BorderFactory.createTitledBorder("Parameter"));
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);
add(parameters);
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());
refresh();
}
private void updateItem() {
if(currentData==null||updating)
return;
currentData.name=name.getText();
currentData.type= type.getText();
currentData.count= ((Integer) count.getValue()).intValue();
currentData.spriteAtlas=spriteAtlas.getEdit().getText();
currentData.sprite=sprite.getText();
currentData.map=map.getEdit().getText();
currentData.radiusFactor=((Float) radiusFactor.getValue()).floatValue();
}
public void setCurrent(PointOfInterestData data)
{
currentData=data;
refresh();
}
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);
updating=false;
}
}

View File

@@ -1,6 +1,132 @@
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 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);
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())
{
Array readEnemies=json.fromJson(Array.class, PointOfInterestData.class, handle);
allEnemies = readEnemies;
}
for (int i=0;i<allEnemies.size;i++) {
model.add(i,allEnemies.get(i));
}
}
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

@@ -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","mana"});
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;
/**
@@ -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);

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();
}
}
}
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());
return new ImageIcon(img.getSubimage(sprite.left,sprite.top, sprite.width, sprite.height).getScaledInstance(32,32,SCALE_FAST));
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(32,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&&name!=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())
{
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()));
}
}
if(maxCount<=1)
{
timer.stop();
}
else
{
timer.restart();
}
doLayout();
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

@@ -3,10 +3,12 @@ package forge.adventure.editor;
import forge.adventure.util.Config;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* Editor class to edit configuration, maybe moved or removed
@@ -26,6 +28,7 @@ public class TextListEdit extends Box {
});
add(edit);
edit.setPreferredSize(new Dimension(400,edit.getPreferredSize().height));
//add(findButton);
elements= new JComboBox(possibleElements);
add(elements);
@@ -59,6 +62,12 @@ public class TextListEdit extends Box {
}
}
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 +86,7 @@ public class TextListEdit extends Box {
{
values.append(intValues[i]);
if(intValues.length>i+2)
values.append(";");
values.append("\n");
}
edit.setText(values.toString());
}

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.54</version>
</parent>
<artifactId>forge-ai</artifactId>

View File

@@ -20,7 +20,7 @@ package forge.ai;
import java.util.ArrayList;
import java.util.List;
import forge.game.staticability.StaticAbilityMustAttack;
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate;
@@ -47,6 +47,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 +59,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 +73,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 +96,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 +115,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 +151,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 +167,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 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
if (defender.getLife() > 8) { //Otherwise choose a random opponent to ensure no ganging up on players
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);
}
}
}
// 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;
}
@@ -356,7 +376,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 +395,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 +414,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 +558,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 +592,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 +600,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 +623,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 +638,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 +680,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 +732,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 +803,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 +812,19 @@ 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()) {
if (combat.getAttackConstraints().getRequirements().get(attacker) == null) continue;
// check defenders in order of maximum requirements
GameEntity mustAttackDefMaybe = MapToAmountUtil.max(amounts).getKey();
for (Pair<GameEntity, Integer> e : combat.getAttackConstraints().getRequirements().get(attacker).getSortedRequirements()) {
if (e.getRight() == 0) continue;
GameEntity mustAttackDefMaybe = e.getLeft();
// Gideon Jura returns LKI
if (mustAttackDefMaybe instanceof Card) {
mustAttackDefMaybe = ai.getGame().getCardState((Card) mustAttackDefMaybe);
}
if (canAttackWrapper(attacker, mustAttackDefMaybe) && CombatUtil.getAttackCost(ai.getGame(), attacker, mustAttackDefMaybe) == null) {
mustAttackDef = mustAttackDefMaybe;
break;
}
amounts.remove(mustAttackDefMaybe);
}
}
if (mustAttackDef != null) {
@@ -836,6 +856,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 +866,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 +912,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 +947,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 +955,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 +997,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 +1022,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 +1072,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 +1086,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 +1149,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 +1199,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);
@@ -1422,7 +1441,7 @@ public class AiAttackController {
continue;
}
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;
}
// 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

@@ -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;
@@ -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;
}
@@ -141,13 +150,6 @@ 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);
@@ -164,7 +166,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);
}
@@ -261,11 +263,6 @@ public class AiController {
}
}
if (card.isCreature()
&& game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureETBTriggers)) {
return api == null;
}
boolean rightapi = false;
// Trigger play improvements
@@ -280,6 +277,12 @@ 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")) {
@@ -445,7 +448,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 +501,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;
@@ -582,7 +585,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);
@@ -637,7 +640,7 @@ public class AiController {
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.
@@ -709,9 +712,10 @@ public class AiController {
return AiPlayDecision.CantPlaySa;
}
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 +738,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,21 +746,21 @@ 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;
CardStateName currentState = sa.getCardState() != null && host.getCurrentStateName() != sa.getCardStateName() && !host.isInPlay() ? host.getCurrentStateName() : null;
if (currentState != null) {
sa.getHostCard().setState(sa.getCardStateName(), false);
host.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);
host.setState(currentState, false);
}
if (canPlay != AiPlayDecision.WillPlay) {
@@ -765,11 +769,11 @@ public class AiController {
// 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 +782,9 @@ 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 +810,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 +817,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,13 +889,14 @@ 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);
}
if (sa.usesTargeting()) {
@@ -906,18 +908,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;
}
@@ -1049,11 +1046,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;
}
}
@@ -1082,6 +1077,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;
@@ -1321,7 +1319,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 +1332,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) {
@@ -1404,8 +1402,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;
}
}
@@ -1469,11 +1467,9 @@ 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")
);
if (!playBeforeLand.isEmpty()) {
SpellAbility wantToPlayBeforeLand = chooseSpellAbilityToPlayFromList(
ComputerUtilAbility.getSpellAbilities(playBeforeLand, player), false
@@ -1483,15 +1479,15 @@ public class AiController {
}
}
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)) {
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
@@ -1521,13 +1517,12 @@ public class AiController {
}
}
}
}
return singleSpellAbilityList(getSpellAbilityToPlay());
}
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 +1605,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")
@@ -1639,7 +1641,8 @@ public class AiController {
}
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;
@@ -1677,8 +1680,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()));
}
});
@@ -1719,7 +1723,7 @@ public class AiController {
}
}
sa.setActivatingPlayer(player);
sa.setActivatingPlayer(player, true);
SpellAbility root = sa.getRootAbility();
if (root.isSpell() || root.isTrigger() || root.isReplacementAbility()) {
@@ -1839,7 +1843,6 @@ 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) {
@@ -1925,8 +1928,8 @@ public class AiController {
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 +1944,22 @@ 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");
}
@@ -2106,22 +2125,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();

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;
@@ -55,6 +57,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(),
@@ -438,7 +448,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

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;
@@ -127,15 +128,15 @@ 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)) {
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();
if (!sa.isTargetNumberValid()) {
@@ -230,7 +231,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 +246,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 +265,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 +286,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 +298,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,17 +307,30 @@ 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)) {
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);
@@ -310,7 +338,7 @@ public class ComputerUtil {
}
public static final void playNoStack(final Player ai, SpellAbility sa, final Game game, final boolean effect) {
sa.setActivatingPlayer(ai);
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();
@@ -329,9 +357,6 @@ public class ComputerUtil {
}
AbilityUtils.resolve(sa);
// destroys creatures if they have lethal damage, etc..
//game.getAction().checkStateEffects();
}
}
@@ -426,8 +451,20 @@ public class ComputerUtil {
}
// try everything when about to die
if (game.getPhaseHandler().getPhase().equals(PhaseType.COMBAT_DECLARE_BLOCKERS)
&& ComputerUtilCombat.lifeInSeriousDanger(ai, game.getCombat())) {
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);
@@ -437,6 +474,7 @@ public class ComputerUtil {
}
}
}
}
else if (pref.contains("DiscardCost")) { // search for permanents with DiscardMe
for (int ip = 0; ip < 6; ip++) { // priority 0 is the lowest, priority 5 the highest
final int priority = 6 - ip;
@@ -586,7 +624,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);
}
@@ -817,17 +855,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 +970,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
}
@@ -1039,6 +1078,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 +1089,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 +1109,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 +1117,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;
}
}
@@ -1227,12 +1267,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 +1546,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) {
@@ -2030,7 +2070,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 +2298,31 @@ public class ComputerUtil {
if (goodChoices.isEmpty()) {
goodChoices = validCards;
}
final CardCollection dChoices = new CardCollection();
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) {
dChoices.add(c);
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 new CardCollection(Aggregates.random(goodChoices, max));
}
public static CardCollection getCardsToDiscardFromFriend(Player aiChooser, Player p, SpellAbility sa, CardCollection validCards, int min, int max) {
@@ -2286,7 +2334,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 +2363,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 +2395,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 +2417,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 +2669,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 +2682,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 +2854,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 +2869,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 +2977,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 +3000,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 +3009,8 @@ public class ComputerUtil {
}
if (targets.isEmpty()) {
if (mandatory && !options.isEmpty()) {
targets = options;
if (mandatory && !Iterables.isEmpty(options)) {
targets.addAll(options);
} else {
return false;
}

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));
}
@@ -118,7 +118,7 @@ public class ComputerUtilAbility {
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;

View File

@@ -45,6 +45,7 @@ import forge.game.combat.CombatUtil;
import forge.game.cost.Cost;
import forge.game.cost.CostPayEnergy;
import forge.game.cost.CostRemoveCounter;
import forge.game.cost.CostUntap;
import forge.game.keyword.Keyword;
import forge.game.keyword.KeywordCollection;
import forge.game.keyword.KeywordInterface;
@@ -385,6 +386,9 @@ public class ComputerUtilCard {
* @return the card
*/
public static Card getBestCreatureAI(final Iterable<Card> list) {
if (Iterables.size(list) == 1) {
return Iterables.get(list, 0);
}
return Aggregates.itemWithMax(Iterables.filter(list, CardPredicates.Presets.CREATURES), ComputerUtilCard.creatureEvaluator);
}
@@ -397,6 +401,9 @@ public class ComputerUtilCard {
* @return a {@link forge.game.card.Card} object.
*/
public static Card getWorstCreatureAI(final Iterable<Card> list) {
if (Iterables.size(list) == 1) {
return Iterables.get(list, 0);
}
return Aggregates.itemWithMin(Iterables.filter(list, CardPredicates.Presets.CREATURES), ComputerUtilCard.creatureEvaluator);
}
@@ -410,6 +417,9 @@ public class ComputerUtilCard {
* @return a {@link forge.game.card.Card} object.
*/
public static Card getBestCreatureToBounceAI(final CardCollectionView list) {
if (Iterables.size(list) == 1) {
return Iterables.get(list, 0);
}
final int tokenBonus = 60;
Card biggest = null;
int biggestvalue = -1;
@@ -678,7 +688,7 @@ public class ComputerUtilCard {
if (!ComputerUtilCost.canPayCost(sa, opp, sa.isTrigger())) {
continue;
}
sa.setActivatingPlayer(opp);
sa.setActivatingPlayer(opp, true);
if (sa.canTarget(card)) {
continue;
}
@@ -753,30 +763,21 @@ public class ComputerUtilCard {
return maxName;
}
public static String getMostProminentBasicLandType(final CardCollectionView list) {
return getMostProminentType(list, CardType.getBasicTypes());
public static String getMostProminentType(final CardCollectionView list, final Collection<String> valid) {
return getMostProminentType(list, valid, true);
}
/**
* <p>
* getMostProminentCreatureType.
* </p>
*
* @param list
* @return a {@link java.lang.String} object.
*/
public static String getMostProminentCreatureType(final CardCollectionView list) {
return getMostProminentType(list, CardType.getAllCreatureTypes());
}
public static String getMostProminentType(final CardCollectionView list, final Collection<String> valid) {
public static String getMostProminentType(final CardCollectionView list, final Collection<String> valid, boolean includeTokens) {
if (list.size() == 0) {
return "";
}
final Map<String, Integer> typesInDeck = Maps.newHashMap();
// TODO JAVA 8 use getOrDefault
for (final Card c : list) {
if (!includeTokens && c.isToken()) {
continue;
}
// Changeling are all creature types, they are not interesting for
// counting creature types
if (c.hasStartOfKeyword(Keyword.CHANGELING.toString())) {
@@ -794,15 +795,20 @@ public class ComputerUtilCard {
continue;
}
// Cards in hand and commanders are worth double, as they are more likely to be played.
int weight = 1;
if (c.isInZone(ZoneType.Hand) || c.isRealCommander()) {
weight = 2;
}
Set<String> cardCreatureTypes = c.getType().getCreatureTypes();
for (String type : cardCreatureTypes) {
Integer count = typesInDeck.get(type);
if (count == null) {
count = 0;
}
typesInDeck.put(type, count + 1);
Integer count = typesInDeck.getOrDefault(type, 0);
typesInDeck.put(type, count + weight);
}
//also take into account abilities that generate tokens
if (includeTokens) {
for (SpellAbility sa : c.getAllSpellAbilities()) {
if (sa.getApi() != ApiType.Token) {
continue;
@@ -812,11 +818,8 @@ public class ComputerUtilCard {
if (!CardType.isACreatureType(var)) {
continue;
}
Integer count = typesInDeck.get(var);
if (count == null) {
count = 0;
}
typesInDeck.put(var, count + 1);
Integer count = typesInDeck.getOrDefault(var, 0);
typesInDeck.put(var, count + weight);
}
}
}
@@ -831,21 +834,16 @@ public class ComputerUtilCard {
if (!CardType.isACreatureType(var)) {
continue;
}
Integer count = typesInDeck.get(var);
if (count == null) {
count = 0;
}
typesInDeck.put(var, count + 1);
Integer count = typesInDeck.getOrDefault(var, 0);
typesInDeck.put(var, count + weight);
}
}
}
// special rule for Fabricate and Servo
if (c.hasStartOfKeyword(Keyword.FABRICATE.toString())) {
Integer count = typesInDeck.get("Servo");
if (count == null) {
count = 0;
Integer count = typesInDeck.getOrDefault("Servo", 0);
typesInDeck.put("Servo", count + weight);
}
typesInDeck.put("Servo", count + 1);
}
} // for
@@ -864,6 +862,41 @@ public class ComputerUtilCard {
return maxType;
}
public static String getMostProminentCardType(final CardCollectionView list, final Collection<String> valid) {
if (list.isEmpty() || valid.isEmpty()) {
return "";
}
final Map<String, Integer> typesInDeck = Maps.newHashMap();
for (String type : valid) {
typesInDeck.put(type, 0);
}
for (final Card c : list) {
Iterable<CardType.CoreType> cardTypes = c.getType().getCoreTypes();
for (CardType.CoreType type : cardTypes) {
Integer count = typesInDeck.get(type.toString());
if (count != null) {
typesInDeck.put(type.toString(), count + 1);
}
}
}
int max = 0;
String maxType = "";
for (final Entry<String, Integer> entry : typesInDeck.entrySet()) {
final String type = entry.getKey();
if (max < entry.getValue()) {
max = entry.getValue();
maxType = type;
}
}
return maxType;
}
/**
* <p>
* getMostProminentColor.
@@ -1034,7 +1067,8 @@ public class ComputerUtilCard {
}
if (chosen.isEmpty()) {
chosen.add(MagicColor.Constant.GREEN);
//chosen.add(MagicColor.Constant.GREEN);
chosen.add(getMostProminentColor(ai.getAllCards(), colorChoices));
}
return chosen;
}
@@ -1384,14 +1418,16 @@ public class ComputerUtilCard {
double nonCombatChance = 0.0f;
double combatChance = 0.0f;
// non-combat Haste: has an activated ability with tap cost
if (c.isAbilitySick()) {
for (SpellAbility ab : c.getSpellAbilities()) {
Cost abCost = ab.getPayCosts();
if (abCost != null && abCost.hasTapCost()
&& (!abCost.hasManaCost() || ComputerUtilMana.canPayManaCost(ab, ai, 0, false))) {
if (abCost != null && (abCost.hasTapCost() || abCost.hasSpecificCostType(CostUntap.class))
&& (!abCost.hasManaCost() || ComputerUtilMana.canPayManaCost(ab, ai, sa.getPayCosts().getTotalMana().getCMC(), false))) {
nonCombatChance += 0.5f;
break;
}
}
}
// combat Haste: only grant it if the creature will attack
if (doesSpecifiedCreatureAttackAI(ai, pumped)) {
combatChance += 0.5f + (0.5f * ComputerUtilCombat.damageIfUnblocked(pumped, opp, combat, true) / opp.getLife());
@@ -1675,7 +1711,7 @@ public class ComputerUtilCard {
pumped.addPTBoost(power + berserkPower, toughness, timestamp, 0);
if (!kws.isEmpty()) {
pumped.addChangedCardKeywords(kws, null, false, timestamp, 0);
pumped.addChangedCardKeywords(kws, null, false, timestamp, 0, false);
}
if (!hiddenKws.isEmpty()) {
pumped.addHiddenExtrinsicKeywords(timestamp, 0, hiddenKws);
@@ -1696,7 +1732,8 @@ public class ComputerUtilCard {
}
}
final long timestamp2 = c.getGame().getNextTimestamp(); //is this necessary or can the timestamp be re-used?
pumped.addChangedCardKeywordsInternal(toCopy, null, false, timestamp2, 0, true);
pumped.addChangedCardKeywordsInternal(toCopy, null, false, timestamp2, 0, false);
pumped.updateKeywordsCache(pumped.getCurrentState());
applyStaticContPT(ai.getGame(), pumped, new CardCollection(c));
return pumped;
}
@@ -1883,7 +1920,7 @@ public class ComputerUtilCard {
}
}
if (!canBeBlocked) {
boolean threat = atk.getNetCombatDamage() >= ai.getLife() - lifeInDanger;
boolean threat = ComputerUtilCombat.getAttack(atk) >= ai.getLife() - lifeInDanger;
if (!priorityRemovalOnlyInDanger || threat) {
priorityCards.add(atk);
}
@@ -2019,6 +2056,28 @@ public class ComputerUtilCard {
return false;
}
public static CardCollection dedupeCards(CardCollection cc) {
if (cc.size() <= 1) {
return cc;
}
CardCollection deduped = new CardCollection();
for (Card c : cc) {
boolean unique = true;
if (c.isInZone(ZoneType.Hand)) {
for (Card d : deduped) {
if (d.isInZone(ZoneType.Hand) && d.getOwner().equals(c.getOwner()) && d.getName().equals(c.getName())) {
unique = false;
break;
}
}
}
if (unique) {
deduped.add(c);
}
}
return deduped;
}
// Determine if the AI has an AI:RemoveDeck:All or an AI:RemoveDeck:Random hint specified.
// Includes a NPE guard on getRules() which might otherwise be tripped on some cards (e.g. tokens).
public static boolean isCardRemAIDeck(final Card card) {

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;
@@ -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,18 +367,18 @@ 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 (trampleDamage > 0) {
if (attacker.hasKeyword(Keyword.INFECT)) {
poison += trampleDamage;
}
poison += predictPoisonFromTriggers(attacker, ai, trampleDamage);
}
}
}
poison += sumPoisonIfUnblocked(unblocked, ai);
@@ -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
/**
@@ -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();
@@ -1259,7 +1254,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 +1263,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 +1287,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 +1372,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 +1434,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 +1450,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 +1476,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 +1496,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 +1508,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");
}
@@ -2067,7 +2054,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 +2109,7 @@ public class ComputerUtilCombat {
}
}
return damageMap;
} // setAssignedDamage()
}
// how much damage is enough to kill the creature (for AI)
/**
@@ -2489,11 +2475,13 @@ 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;
}
@@ -2503,7 +2491,7 @@ public class ComputerUtilCombat {
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() && defenders.contains(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
@@ -525,13 +525,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 +592,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 +635,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 +692,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,10 +776,13 @@ 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 +791,17 @@ 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;
}
// 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 +876,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
@@ -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,6 +681,8 @@ 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,
@@ -708,7 +711,7 @@ public class ComputerUtilMana {
}
manapool.applyCardMatrix(pay);
for (byte color : MagicColor.WUBRGC) {
for (byte color : ManaAtom.MANATYPES) {
if (manapool.tryPayCostWithColor(color, sa, cost)) {
found = true;
break;
@@ -884,7 +887,7 @@ public class ComputerUtilMana {
}
return true;
} // payManaCost()
}
private static void resetPayment(List<SpellAbility> payments) {
for (SpellAbility sa : payments) {
@@ -958,7 +961,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 +968,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 +1015,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 +1041,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;
}
@@ -1406,8 +1408,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 +1423,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 +1462,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 +1519,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 +1588,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 +1617,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,7 +10,10 @@ import forge.game.card.CounterEnumType;
import forge.game.cost.CostPayEnergy;
import forge.game.keyword.Keyword;
import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked;
import forge.game.staticability.StaticAbilityMustAttack;
import forge.game.zone.ZoneType;
import java.util.List;
@@ -44,7 +47,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.hasBackSide()) {
value += addValue(power * 10, "transforming");
}
}
@@ -59,10 +62,19 @@ public class CreatureEvaluator implements Function<Card, Integer> {
if (c.hasKeyword(Keyword.HORSEMANSHIP)) {
value += addValue(power * 10, "horses");
}
if (c.hasKeyword("Unblockable")) {
boolean unblockable = false;
for (final Card ca : c.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
for (final StaticAbility stAb : ca.getStaticAbilities()) {
if (stAb.applyAbility("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.")) {
unblockable = true;
break;
}
}
}
if (!unblockable) {
if (StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c)
|| StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c, false)) {
value += addValue(power * 6, "thorns");
}
if (c.hasKeyword(Keyword.FEAR)) {
@@ -102,10 +114,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");
@@ -314,13 +305,13 @@ public abstract class GameState {
newText.append("|Meld");
} else if (c.getCurrentStateName().equals(CardStateName.Modal)) {
newText.append("|Modal");
} else if (c.getCurrentStateName().equals(CardStateName.Converted)) {
newText.append("|Converted");
}
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 +337,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 +364,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 +451,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 +501,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 +567,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 +619,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 +659,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 +733,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 +771,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 +815,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,38 +879,24 @@ 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 (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, human, game);
precastSpellFromCard(spell, game.getPlayers().get(i), game);
}
}
if (precastAI != null) {
String[] spellList = TextUtil.split(precastAI, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, ai, 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 (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, human, game, true);
precastSpellFromCard(spell, game.getPlayers().get(i), game, true);
}
}
if (putOnStackAI != null) {
String[] spellList = TextUtil.split(putOnStackAI, ';');
for (String spell : spellList) {
precastSpellFromCard(spell, ai, game, true);
}
}
}
@@ -1134,18 +1027,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 +1068,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 +1089,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 +1105,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 +1161,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 +1200,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 +1231,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,12 +1244,15 @@ 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";
@@ -1371,16 +1277,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,12 +1,9 @@
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 java.util.*;
import forge.game.keyword.Keyword;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
@@ -34,6 +31,7 @@ import forge.game.GameObject;
import forge.game.GameType;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
import forge.game.ability.effects.CharmEffect;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
@@ -45,8 +43,6 @@ 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.CostPart;
import forge.game.cost.CostPartMana;
import forge.game.keyword.KeywordInterface;
@@ -269,8 +265,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
@@ -576,10 +572,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 +586,8 @@ 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
@@ -697,29 +693,13 @@ 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);
// transfer this info for Balduvian Fallen
sa.setPayingMana(ability.getPayingMana());
return true;
}
return false;
@@ -727,7 +707,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);
}
@@ -798,7 +777,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 +787,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 +918,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,7 +1066,7 @@ 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());
@@ -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);
TargetChoices tc = sa.getTargets();
if (!sa.setupTargets()) {
// if AI can't choose targets need to keep old one even if illegal
sa.setTargets(tc);
}
*/
if (sa.isMayChooseNewTargets() && !sa.setupTargets()) {
if (sa.isSpell()) {
getGame().getAction().ceaseToExist(sa.getHostCard(), false);
}
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

@@ -47,6 +47,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)
@@ -71,6 +72,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)
@@ -169,6 +171,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 +187,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,7 +42,6 @@ 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.trigger.Trigger;
@@ -78,9 +76,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 +121,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 +614,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,8 +661,14 @@ public class AttachAi extends SpellAbilityAi {
if (card.hasKeyword(Keyword.HORSEMANSHIP)) {
cardPriority += 40;
}
if (card.hasKeyword("Unblockable")) {
//check if card is generally unblockable
for (final Card ca : card.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
for (final StaticAbility stAb : ca.getStaticAbilities()) {
if (stAb.applyAbility("CantBlockBy", card, null)) {
cardPriority += 50;
break;
}
}
}
// Prefer "tap to deal damage"
// TODO : Skip this one if triggers on combat damage only?
@@ -1307,16 +1309,20 @@ 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")) {
attachSource = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Object"), sa).get(0);
}
// Don't equip if DontEquip SVar is set
if (attachSource.hasSVar("DontEquip")) {
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));
@@ -1354,7 +1360,7 @@ public class AttachAi extends SpellAbilityAi {
if (tgt == null) {
list = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Defined"), sa);
} else {
list = CardLists.filter(CardUtil.getValidCardsToTarget(tgt, sa), CardPredicates.canBeAttached(attachSource));
list = CardLists.filter(CardUtil.getValidCardsToTarget(tgt, sa), CardPredicates.canBeAttached(attachSource, sa));
}
if (list.isEmpty()) {
@@ -1555,7 +1561,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 +1569,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 +1580,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 +1616,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 +1632,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;
}
@@ -1736,7 +1740,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

@@ -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;
@@ -124,8 +123,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,14 +271,10 @@ 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()))) {
if (sa.isNinjutsu()) {
if (!source.ignoreLegendRule() && ai.isCardInPlay(source.getName())) {
return false;
}
}
if (ai.getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DAMAGE)) {
return false;
}
@@ -732,10 +725,9 @@ 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()))) {
if (!(!c.ignoreLegendRule() && ai.isCardInPlay(c.getName()))) {
nothingWillReturn = false;
break;
}
@@ -745,7 +737,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
}
}
}
}
final AbilitySub subAb = sa.getSubAbility();
return subAb == null || SpellApiToAi.Converter.get(subAb.getApi()).chkDrawbackWithSubs(ai, subAb);
@@ -1009,6 +1000,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 +1046,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)) {
@@ -1275,7 +1275,7 @@ 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()) {
@@ -1283,9 +1283,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
toRemove.add(t);
}
}
for (Card dontTarget : toRemove) {
sa.getTargets().remove(dontTarget);
}
sa.getTargets().removeAll(toRemove);
}
}
@@ -1746,7 +1744,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;
}
@@ -1862,80 +1860,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,6 +1,7 @@
package forge.ai.ability;
import java.util.Collections;
import java.util.Map;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
@@ -70,7 +71,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
@@ -277,7 +278,7 @@ public class ChangeZoneAllAi extends SpellAbilityAi {
}
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) {
@@ -334,7 +335,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);
@@ -373,7 +374,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);

View File

@@ -88,8 +88,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 +100,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 +111,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 +219,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 +249,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)) {
@@ -294,6 +302,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

@@ -154,11 +154,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 +229,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

@@ -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

@@ -131,7 +131,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 +224,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;
}

View File

@@ -134,7 +134,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,7 +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
if ((topSA.isSpell() && !CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa)) || topSA.getActivatingPlayer() == ai
|| ai.getAllies().contains(topSA.getActivatingPlayer())) {
// might as well check for player's friendliness
return false;
@@ -326,7 +326,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

View File

@@ -214,7 +214,7 @@ public class CountersMoveAi extends SpellAbilityAi {
private static int calcAmount(final SpellAbility sa, final CounterType cType) {
final Card host = sa.getHostCard();
final String amountStr = sa.getParam("CounterNum");
final String amountStr = sa.getParamOrDefault("CounterNum", "1");
// TODO handle proper calculation of X values based on Cost
int amount = 0;
@@ -349,6 +349,9 @@ public class CountersMoveAi extends SpellAbilityAi {
}
}
return false;
} else if (sa.getMaxTargets() == 2) {
// TODO
return false;
} else {
// SA uses target for Defined
@@ -361,20 +364,24 @@ public class CountersMoveAi extends SpellAbilityAi {
}
final Card src = srcCards.get(0);
if (cType != null) {
if (src.getCounters(cType) <= 0) {
if (cType != null && src.getCounters(cType) <= 0) {
return false;
}
Card lkiWithCounters = CardUtil.getLKICopy(src);
Card lkiWithoutCounters = CardUtil.getLKICopy(src);
if (cType == null) {
lkiWithoutCounters.clearCounters();
} else {
lkiWithoutCounters.setCounters(cType, 0);
}
Card lki = CardUtil.getLKICopy(src);
if (cType == null) {
lki.clearCounters();
} else {
lki.setCounters(cType, 0);
}
// need to fake animate it for P/T
lkiWithCounters.addType("Creature");
lkiWithoutCounters.addType("Creature");
// go for opponent when higher value implies debuff
if (ComputerUtilCard.evaluateCreature(src) > ComputerUtilCard.evaluateCreature(lki)) {
if (ComputerUtilCard.evaluateCreature(lkiWithCounters) > ComputerUtilCard.evaluateCreature(lkiWithoutCounters)) {
List<Card> aiList = CardLists.filterControlledBy(tgtCards, ai);
if (!aiList.isEmpty()) {
List<Card> best = CardLists.filter(aiList, new Predicate<Card>() {

View File

@@ -5,6 +5,8 @@ import java.util.List;
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.ComputerUtil;
@@ -97,7 +99,21 @@ public class CountersMultiplyAi extends SpellAbilityAi {
@Override
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
return !sa.usesTargeting() || setTargets(ai, sa) || mandatory;
if (!sa.usesTargeting()) {
return true;
}
if (setTargets(ai, sa)) {
return true;
} else if (mandatory) {
CardCollection list = CardLists.getTargetableCards(ai.getGame().getCardsIn(ZoneType.Battlefield), sa);
if (list.isEmpty()) {
return false;
}
Card safeMatch = Iterables.getFirst(Iterables.filter(list, Predicates.not(CardPredicates.hasCounters())), null);
sa.getTargets().add(safeMatch == null ? list.getFirst() : safeMatch);
return true;
}
return mandatory;
}
private CounterType getCounterType(SpellAbility sa) {

View File

@@ -302,8 +302,8 @@ public class CountersPutAi extends CountersAi {
}
CardCollection oppCreats = CardLists.filter(ai.getOpponents().getCreaturesInPlay(),
Predicates.and(Predicates.not(CardPredicates.hasCounter(CounterType.getType(type))),
CardPredicates.isTargetableBy(sa)));
Predicates.not(CardPredicates.hasCounter(CounterType.getType(type))),
CardPredicates.isTargetableBy(sa));
if (!oppCreats.isEmpty()) {
Card bestCreat = ComputerUtilCard.getBestCreatureAI(oppCreats);
@@ -341,7 +341,7 @@ public class CountersPutAi extends CountersAi {
if (sa.hasParam("Bolster")) {
CardCollection creatsYouCtrl = ai.getCreaturesInPlay();
CardCollection leastToughness = new CardCollection(Aggregates.listWithMin(creatsYouCtrl, CardPredicates.Accessors.fnGetDefense));
CardCollection leastToughness = new CardCollection(Aggregates.listWithMin(creatsYouCtrl, CardPredicates.Accessors.fnGetNetToughness));
if (leastToughness.isEmpty()) {
return false;
}
@@ -427,7 +427,7 @@ public class CountersPutAi extends CountersAi {
}
// need to set Activating player
oa.setActivatingPlayer(ai);
oa.setActivatingPlayer(ai, true);
CardCollection targets = CardLists.getTargetableCards(ai.getOpponents().getCreaturesInPlay(), oa);
if (!targets.isEmpty()) {
@@ -460,12 +460,12 @@ public class CountersPutAi extends CountersAi {
// only evaluates case where all tokens are placed on a single target
if (sa.usesTargeting() && sa.getMinTargets() < 2) {
if (ComputerUtilCard.canPumpAgainstRemoval(ai, sa)) {
Card c = sa.getTargets().getFirstTargetedCard();
Card c = sa.getTargetCard();
if (sa.getTargets().size() > 1) {
sa.resetTargets();
sa.getTargets().add(c);
}
sa.addDividedAllocation(sa.getTargetCard(), amount);
sa.addDividedAllocation(c, amount);
return true;
} else {
return false;
@@ -680,7 +680,7 @@ public class CountersPutAi extends CountersAi {
CardCollection list = null;
if (sa.isCurse()) {
list = CardLists.filterControlledBy(game.getCardsIn(ZoneType.Battlefield), ai.getOpponents());
list = ai.getOpponents().getCardsIn(ZoneType.Battlefield);
} else {
list = new CardCollection(ai.getCardsIn(ZoneType.Battlefield));
}
@@ -752,22 +752,25 @@ public class CountersPutAi extends CountersAi {
final int amount = AbilityUtils.calculateAmount(source, amountStr, sa);
int left = amount;
final String[] types;
String type = "";
if (sa.hasParam("CounterType")) {
// TODO some cards let you choose types, should check each
types = sa.getParam("CounterType").split(",");
} else {
type = types[0];
} else if (sa.hasParam("CounterTypes")) {
// all types will be added
types = sa.getParam("CounterTypes").split(",");
type = types[0];
}
final String type = types[0];
if (!sa.usesTargeting()) {
// No target. So must be defined
list = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
if (amountStr.equals("X")
&& root.getXManaCostPaid() != null /* SubAbility on something that already had set PayX, e.g. Endless One ETB counters */
&& sa.hasParam(amountStr) && sa.getSVar(amountStr).equals("Count$xPaid")) {
&& root.getXManaCostPaid() == null
&& source.getXManaCostPaid() == 0 /* SubAbility on something that already had set PayX, e.g. Endless One ETB counters */
&& sa.hasSVar(amountStr) && sa.getSVar(amountStr).equals("Count$xPaid")) {
// detect if there's more than one X in the cost (Hangarback Walker, Walking Ballista, etc.)
SpellAbility testSa = sa;
@@ -911,7 +914,7 @@ public class CountersPutAi extends CountersAi {
}
@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) {
final Card source = sa.getHostCard();
if (mode == PlayerActionConfirmMode.Tribute) {
// add counter if that opponent has a giant creature

View File

@@ -1,6 +1,7 @@
package forge.ai.ability;
import java.util.List;
import java.util.Map;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
@@ -151,7 +152,7 @@ public class CountersPutAllAi 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) {
return player.getCreaturesInPlay().size() >= player.getWeakestOpponent().getCreaturesInPlay().size();
}

View File

@@ -20,11 +20,13 @@ 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 forge.ai.ComputerUtil;
import forge.ai.ComputerUtilCard;
import forge.ai.SpellAbilityAi;
import forge.game.Game;
import forge.game.GlobalRuleChange;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
@@ -37,6 +39,7 @@ import forge.game.player.Player;
import forge.game.player.PlayerController.BinaryChoiceType;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType;
/**
* <p>
@@ -97,13 +100,19 @@ public class CountersPutOrRemoveAi extends SpellAbilityAi {
return true;
} else {
// currently only Clockspinning
boolean noLegendary = game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule);
// logic to remove some counter
CardCollection countersList = CardLists.filter(list, CardPredicates.hasCounters());
if (!countersList.isEmpty()) {
if (!ai.isCardInPlay("Marit Lage") || noLegendary) {
CardCollectionView marit = ai.getCardsIn(ZoneType.Battlefield, "Marit Lage");
boolean maritEmpty = marit.isEmpty() || Iterables.contains(marit, new Predicate<Card>() {
@Override
public boolean apply(Card input) {
return input.ignoreLegendRule();
}
});
if (maritEmpty) {
CardCollectionView depthsList = CardLists.filter(countersList,
CardPredicates.nameEquals("Dark Depths"), CardPredicates.hasCounter(CounterEnumType.ICE));
@@ -197,11 +206,7 @@ public class CountersPutOrRemoveAi extends SpellAbilityAi {
*/
@Override
public CounterType chooseCounterType(List<CounterType> options, SpellAbility sa, Map<String, Object> params) {
if (options.size() > 1) {
final Player ai = sa.getActivatingPlayer();
final Game game = ai.getGame();
boolean noLegendary = game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule);
Card tgt = (Card) params.get("Target");
@@ -230,7 +235,15 @@ public class CountersPutOrRemoveAi extends SpellAbilityAi {
} else {
// this counters are treat first to be removed
if ("Dark Depths".equals(tgt.getName()) && options.contains(CounterType.get(CounterEnumType.ICE))) {
if (!ai.isCardInPlay("Marit Lage") || noLegendary) {
CardCollectionView marit = ai.getCardsIn(ZoneType.Battlefield, "Marit Lage");
boolean maritEmpty = marit.isEmpty() || Iterables.contains(marit, new Predicate<Card>() {
@Override
public boolean apply(Card input) {
return input.ignoreLegendRule();
}
});
if (maritEmpty) {
return CounterType.get(CounterEnumType.ICE);
}
} else if (tgt.hasKeyword(Keyword.UNDYING) && options.contains(CounterType.get(CounterEnumType.P1P1))) {
@@ -246,7 +259,6 @@ public class CountersPutOrRemoveAi extends SpellAbilityAi {
}
}
}
}
return super.chooseCounterType(options, sa, params);
}
@@ -262,12 +274,10 @@ public class CountersPutOrRemoveAi extends SpellAbilityAi {
public boolean chooseBinary(BinaryChoiceType kindOfChoice, SpellAbility sa, Map<String, Object> params) {
if (kindOfChoice.equals(BinaryChoiceType.AddOrRemove)) {
final Player ai = sa.getActivatingPlayer();
final Game game = ai.getGame();
Card tgt = (Card) params.get("Target");
CounterType type = (CounterType) params.get("CounterType");
boolean noLegendary = game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule);
if (tgt.getController().isOpponentOf(ai)) {
if (type.is(CounterEnumType.LOYALTY) && tgt.isPlaneswalker()) {
return false;
@@ -276,7 +286,15 @@ public class CountersPutOrRemoveAi extends SpellAbilityAi {
return ComputerUtil.isNegativeCounter(type, tgt);
} else {
if (type.is(CounterEnumType.ICE) && "Dark Depths".equals(tgt.getName())) {
if (!ai.isCardInPlay("Marit Lage") || noLegendary) {
CardCollectionView marit = ai.getCardsIn(ZoneType.Battlefield, "Marit Lage");
boolean maritEmpty = marit.isEmpty() || Iterables.contains(marit, new Predicate<Card>() {
@Override
public boolean apply(Card input) {
return input.ignoreLegendRule();
}
});
if (maritEmpty) {
return false;
}
} else if (type.is(CounterEnumType.M1M1) && tgt.hasKeyword(Keyword.PERSIST)) {

View File

@@ -3,7 +3,9 @@ package forge.ai.ability;
import java.util.List;
import java.util.Map;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilCard;
@@ -11,7 +13,6 @@ import forge.ai.ComputerUtilCost;
import forge.ai.SpellAbilityAi;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GlobalRuleChange;
import forge.game.ability.AbilityUtils;
import forge.game.card.Card;
import forge.game.card.CardCollection;
@@ -102,13 +103,12 @@ public class CountersRemoveAi extends SpellAbilityAi {
final Game game = ai.getGame();
final String type = sa.getParam("CounterType");
final String amountStr = sa.getParam("CounterNum");
final String amountStr = sa.getParamOrDefault("CounterNum", "1");
// remove counter with Time might use Exile Zone too
final TargetRestrictions tgt = sa.getTargetRestrictions();
CardCollection list = new CardCollection(game.getCardsIn(tgt.getZone()));
// need to targetable
list = CardLists.getTargetableCards(list, sa);
CardCollection list = CardLists.getTargetableCards(game.getCardsIn(tgt.getZone()), sa);
if (list.isEmpty()) {
return false;
@@ -117,16 +117,21 @@ public class CountersRemoveAi extends SpellAbilityAi {
// Filter AI-specific targets if provided
list = ComputerUtil.filterAITgts(sa, ai, list, false);
boolean noLegendary = game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule);
CardCollectionView marit = ai.getCardsIn(ZoneType.Battlefield, "Marit Lage");
boolean maritEmpty = marit.isEmpty() || Iterables.contains(marit, new Predicate<Card>() {
@Override
public boolean apply(Card input) {
return input.ignoreLegendRule();
}
});
if (type.matches("All")) {
// Logic Part for Vampire Hexmage
// Break Dark Depths
if (!ai.isCardInPlay("Marit Lage") || noLegendary) {
if (maritEmpty) {
CardCollectionView depthsList = ai.getCardsIn(ZoneType.Battlefield, "Dark Depths");
depthsList = CardLists.filter(depthsList, CardPredicates.isTargetableBy(sa),
CardPredicates.hasCounter(CounterEnumType.ICE, 3));
if (!depthsList.isEmpty()) {
sa.getTargets().add(depthsList.getFirst());
return true;
@@ -161,7 +166,7 @@ public class CountersRemoveAi extends SpellAbilityAi {
}
// try to remove them from Dark Depths and Planeswalkers too
if (!ai.isCardInPlay("Marit Lage") || noLegendary) {
if (maritEmpty) {
CardCollectionView depthsList = ai.getCardsIn(ZoneType.Battlefield, "Dark Depths");
depthsList = CardLists.filter(depthsList, CardPredicates.isTargetableBy(sa),
CardPredicates.hasCounter(CounterEnumType.ICE));
@@ -407,9 +412,6 @@ public class CountersRemoveAi extends SpellAbilityAi {
*/
@Override
public CounterType chooseCounterType(List<CounterType> options, SpellAbility sa, Map<String, Object> params) {
if (options.size() <= 1) {
return super.chooseCounterType(options, sa, params);
}
Player ai = sa.getActivatingPlayer();
GameEntity target = (GameEntity) params.get("Target");

View File

@@ -2,6 +2,7 @@ package forge.ai.ability;
import com.google.common.collect.Iterables;
import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilCombat;
import forge.ai.SpellAbilityAi;
import forge.game.Game;
@@ -54,13 +55,14 @@ public abstract class DamageAiBase extends SpellAbilityAi {
final Game game = comp.getGame();
Player enemy = comp.getWeakestOpponent();
boolean dmgByCardsInHand = false;
Card hostcard = sa.getHostCard();
if ("X".equals(sa.getParam("NumDmg")) && sa.getHostCard() != null && sa.hasSVar(sa.getParam("NumDmg")) &&
if ("X".equals(sa.getParam("NumDmg")) && hostcard != null && sa.hasSVar(sa.getParam("NumDmg")) &&
sa.getSVar(sa.getParam("NumDmg")).equals("TargetedPlayer$CardsInHand")) {
dmgByCardsInHand = true;
}
// Not sure if type choice implemented for the AI yet but it should at least recognize this spell hits harder on larger enemy hand size
if ("Blood Oath".equals(sa.getHostCard().getName())) {
if ("Blood Oath".equals(hostcard.getName())) {
dmgByCardsInHand = true;
}
@@ -71,9 +73,13 @@ public abstract class DamageAiBase extends SpellAbilityAi {
return false;
}
// If the opponent will gain life (ex. Fiery Justice), not beneficial unless life gain is harmful or ignored
if ("OpponentGainLife".equals(sa.getParam("AILogic")) && ComputerUtil.lifegainPositive(enemy, hostcard)) {
return false;
}
// Benefits hitting players?
// If has triggered ability on dealing damage to an opponent, go for it!
Card hostcard = sa.getHostCard();
for (Trigger trig : hostcard.getTriggers()) {
if (trig.getMode() == TriggerType.DamageDone) {
if ("Opponent".equals(trig.getParam("ValidTarget"))
@@ -94,17 +100,16 @@ public abstract class DamageAiBase extends SpellAbilityAi {
return false;
}
if (!noPrevention) {
restDamage = ComputerUtilCombat.predictDamageTo(enemy, restDamage, sa.getHostCard(), false);
} else {
restDamage = enemy.staticReplaceDamage(restDamage, sa.getHostCard(), false);
}
if (restDamage == 0) {
if (!enemy.canLoseLife()) {
return false;
}
if (!enemy.canLoseLife()) {
if (!noPrevention) {
restDamage = ComputerUtilCombat.predictDamageTo(enemy, restDamage, hostcard, false);
} else {
restDamage = enemy.staticReplaceDamage(restDamage, hostcard, false);
}
if (restDamage == 0) {
return false;
}

View File

@@ -25,6 +25,7 @@ import forge.ai.SpecialCardAi;
import forge.ai.SpellAbilityAi;
import forge.card.mana.ManaCost;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameObject;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
@@ -53,6 +54,7 @@ import forge.util.MyRandom;
public class DamageDealAi extends DamageAiBase {
@Override
public boolean chkAIDrawback(SpellAbility sa, Player ai) {
final SpellAbility root = sa.getRootAbility();
final String damage = sa.getParam("NumDmg");
Card source = sa.getHostCard();
int dmg = AbilityUtils.calculateAmount(source, damage, sa);
@@ -76,7 +78,7 @@ public class DamageDealAi extends DamageAiBase {
if (dmg > energy || dmg < 1) {
continue; // in case the calculation gets messed up somewhere
}
source.setSVar("EnergyToPay", "Number$" + dmg);
root.setSVar("EnergyToPay", "Number$" + dmg);
return true;
}
}
@@ -208,7 +210,7 @@ public class DamageDealAi extends DamageAiBase {
if (ai.getGame().getPhaseHandler().is(PhaseType.END_OF_TURN)) {
boolean doTarget = damageTargetAI(ai, sa, dmg, true);
if (doTarget) {
Card tgt = sa.getTargets().getFirstTargetedCard();
Card tgt = sa.getTargetCard();
if (tgt != null) {
return ai.getGame().getPhaseHandler().getPlayerTurn() == tgt.getController();
}
@@ -671,7 +673,7 @@ public class DamageDealAi extends DamageAiBase {
c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, false);
if (c != null) {
//option to hold removal instead only applies for single targeted removal
if (sa.isSpell() && !divided && !immediately && tgt.getMaxTargets(sa.getHostCard(), sa) == 1) {
if (sa.isSpell() && !divided && !immediately && tgt.getMaxTargets(source, sa) == 1) {
if (!ComputerUtilCard.useRemovalNow(sa, c, dmg, ZoneType.Graveyard)) {
return false;
}
@@ -722,7 +724,7 @@ public class DamageDealAi extends DamageAiBase {
final Card c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, mandatory);
if (c != null) {
//option to hold removal instead only applies for single targeted removal
if (!immediately && tgt.getMaxTargets(sa.getHostCard(), sa) == 1 && !divided) {
if (!immediately && tgt.getMaxTargets(source, sa) == 1 && !divided) {
if (!ComputerUtilCard.useRemovalNow(sa, c, dmg, ZoneType.Graveyard)) {
return false;
}
@@ -780,6 +782,13 @@ public class DamageDealAi extends DamageAiBase {
sa.resetTargets();
return false;
}
// if opponent will gain life (ex. Fiery Justice), don't target only enemy player unless life gain is harmful or ignored
if ("OpponentGainLife".equals(logic) && tcs.size() == 1 && tcs.contains(enemy) && ComputerUtil.lifegainPositive(enemy, source)) {
sa.resetTargets();
return false;
}
return true;
}
@@ -797,11 +806,11 @@ public class DamageDealAi extends DamageAiBase {
*/
private boolean damageChooseNontargeted(Player ai, final SpellAbility saMe, final int dmg) {
// TODO: Improve circumstances where the Defined Damage is unwanted
final List<GameObject> objects = AbilityUtils.getDefinedObjects(saMe.getHostCard(), saMe.getParam("Defined"), saMe);
final List<GameEntity> objects = AbilityUtils.getDefinedEntities(saMe.getHostCard(), saMe.getParam("Defined"), saMe);
boolean urgent = false; // can it wait?
boolean positive = false;
for (final Object o : objects) {
for (final GameEntity o : objects) {
if (o instanceof Card) {
Card c = (Card) o;
final int restDamage = ComputerUtilCombat.predictDamageTo(c, dmg, saMe.getHostCard(), false);
@@ -1075,6 +1084,11 @@ public class DamageDealAi extends DamageAiBase {
return null;
}
// chaining to this could miscalculate
if (sa.isDividedAsYouChoose()) {
return null;
}
// Try to chain damage/debuff effects
if (StringUtils.isNumeric(damage) || (damage.startsWith("-") && StringUtils.isNumeric(damage.substring(1)))) {
// currently only works for predictable numeric damage

View File

@@ -1,5 +1,7 @@
package forge.ai.ability;
import java.util.Map;
import forge.ai.SpellAbilityAi;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
@@ -30,7 +32,7 @@ public class DayTimeAi 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

@@ -68,7 +68,6 @@ public class DebuffAi extends SpellAbilityAi {
if (!sa.usesTargeting()) {
List<Card> cards = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
final Combat combat = game.getCombat();
return Iterables.any(cards, new Predicate<Card>() {
@Override
@@ -121,7 +120,6 @@ public class DebuffAi extends SpellAbilityAi {
final TargetRestrictions tgt = sa.getTargetRestrictions();
sa.resetTargets();
CardCollection list = getCurseCreatures(ai, sa, kws == null ? Lists.newArrayList() : kws);
list = CardLists.getValidCards(list, tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getHostCard(), sa);
// several uses here:
// 1. make human creatures lose evasion when they are attacking
@@ -205,9 +203,7 @@ public class DebuffAi extends SpellAbilityAi {
}
// Remove anything that's already been targeted
for (final Card c : sa.getTargets().getTargetCards()) {
list.remove(c);
}
list.removeAll(sa.getTargets().getTargetCards());
final CardCollection pref = CardLists.filterControlledBy(list, ai.getOpponents());
final CardCollection forced = CardLists.filterControlledBy(list, ai);

View File

@@ -26,7 +26,7 @@ public class DelayedTriggerAi extends SpellAbilityAi {
if (trigsa == null) {
return false;
}
trigsa.setActivatingPlayer(ai);
trigsa.setActivatingPlayer(ai, true);
if (trigsa instanceof AbilitySub) {
return SpellApiToAi.Converter.get(trigsa.getApi()).chkDrawbackWithSubs(ai, (AbilitySub)trigsa);
@@ -43,7 +43,7 @@ public class DelayedTriggerAi extends SpellAbilityAi {
}
AiController aic = ((PlayerControllerAi)ai.getController()).getAi();
trigsa.setActivatingPlayer(ai);
trigsa.setActivatingPlayer(ai, true);
if (!sa.hasParam("OptionalDecider")) {
return aic.doTrigger(trigsa, true);
@@ -164,7 +164,7 @@ public class DelayedTriggerAi extends SpellAbilityAi {
if (trigsa == null) {
return false;
}
trigsa.setActivatingPlayer(ai);
trigsa.setActivatingPlayer(ai, true);
return AiPlayDecision.WillPlay == ((PlayerControllerAi)ai.getController()).getAi().canPlaySa(trigsa);
}

View File

@@ -353,9 +353,7 @@ public class DestroyAi extends SpellAbilityAi {
// Filter AI-specific targets if provided
preferred = ComputerUtil.filterAITgts(sa, ai, preferred, true);
for (final Card c : preferred) {
list.remove(c);
}
list.removeAll(preferred);
if (preferred.isEmpty() && !mandatory) {
return false;

View File

@@ -209,7 +209,7 @@ public class DigAi extends SpellAbilityAi {
* @see forge.card.ability.SpellAbilityAi#confirmAction(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) {
Card topc = player.getZone(ZoneType.Library).get(0);
// AI actions for individual cards (until this AI can be generalized)

View File

@@ -1,5 +1,7 @@
package forge.ai.ability;
import java.util.Map;
import forge.ai.AiAttackController;
import forge.ai.ComputerUtil;
import forge.ai.SpellAbilityAi;
@@ -94,7 +96,7 @@ public class DigMultipleAi extends SpellAbilityAi {
* @see forge.card.ability.SpellAbilityAi#confirmAction(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) {
return true;
}
}

View File

@@ -1,6 +1,7 @@
package forge.ai.ability;
import java.util.List;
import java.util.Map;
import forge.ai.AiAttackController;
import forge.ai.ComputerUtilCost;
@@ -122,7 +123,7 @@ public class DigUntilAi extends SpellAbilityAi {
* @see forge.card.ability.SpellAbilityAi#confirmAction(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")) {
final String logic = sa.getParam("AILogic");
if ("OathOfDruids".equals(logic)) {

View File

@@ -2,6 +2,7 @@ package forge.ai.ability;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilAbility;
@@ -211,11 +212,11 @@ public class DiscardAi extends SpellAbilityAi {
return true;
}
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 (mode == PlayerActionConfirmMode.Random) {
// TODO For now AI will always discard Random used currently with: Balduvian Horde and similar cards
return true;
}
return super.confirmAction(player, sa, mode, message);
return super.confirmAction(player, sa, mode, message, params);
}
}

View File

@@ -18,6 +18,8 @@
*/
package forge.ai.ability;
import java.util.Map;
import forge.ai.AiCostDecision;
import forge.ai.AiProps;
import forge.ai.ComputerUtil;
@@ -508,7 +510,7 @@ public class DrawAi extends SpellAbilityAi {
}
if (numCards >= computerLibrarySize - 3) {
if (ai.isCardInPlay("Laboratory Maniac")) {
if (ai.isCardInPlay("Laboratory Maniac") && !ai.cantWin()) {
return true;
}
// Don't deck yourself
@@ -541,7 +543,7 @@ public class DrawAi 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) {
int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumCards"), sa) : 1;
// AI shouldn't mill itself
if (numCards < player.getZone(ZoneType.Library).size())

View File

@@ -22,6 +22,7 @@ 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.combat.Combat;
import forge.game.combat.CombatUtil;
import forge.game.phase.PhaseHandler;
@@ -69,10 +70,10 @@ public class EffectAi extends SpellAbilityAi {
randomReturn = true;
}
} else if (logic.equals("Fog")) {
if (game.getPhaseHandler().isPlayerTurn(sa.getActivatingPlayer())) {
if (phase.isPlayerTurn(sa.getActivatingPlayer())) {
return false;
}
if (!game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
if (!phase.is(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
return false;
}
if (!game.getStack().isEmpty()) {
@@ -114,8 +115,7 @@ public class EffectAi extends SpellAbilityAi {
}
randomReturn = true;
} else if (logic.equals("ChainVeil")) {
if (!phase.isPlayerTurn(ai) || !phase.getPhase().equals(PhaseType.MAIN2)
|| CardLists.getType(ai.getCardsIn(ZoneType.Battlefield), "Planeswalker").isEmpty()) {
if (!phase.isPlayerTurn(ai) || !phase.getPhase().equals(PhaseType.MAIN2) || ai.getPlaneswalkersInPlay().isEmpty()) {
return false;
}
randomReturn = true;
@@ -215,6 +215,17 @@ public class EffectAi extends SpellAbilityAi {
return topStack.getActivatingPlayer().isOpponentOf(ai) && topStack.getApi() == ApiType.GainLife;
} else if (logic.equals("Fight")) {
return FightAi.canFightAi(ai, sa, 0, 0);
} else if (logic.equals("Pump")) {
List<Card> options = CardUtil.getValidCardsToTarget(sa.getTargetRestrictions(), sa);
options = CardLists.filterControlledBy(options, ai);
if (sa.getPayCosts().hasTapCost()) {
options.remove(sa.getHostCard());
}
if (!options.isEmpty() && phase.isPlayerTurn(ai) && phase.getPhase().isBefore(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
sa.getTargets().add(ComputerUtilCard.getBestCreatureAI(options));
return true;
}
return false;
} else if (logic.equals("Burn")) {
// for DamageDeal sub-abilities (eg. Wild Slash, Skullcrack)
SpellAbility burn = sa.getSubAbility();
@@ -232,8 +243,7 @@ public class EffectAi extends SpellAbilityAi {
}
return true;
} else if (logic.equals("ReplaySpell")) {
CardCollection list = new CardCollection(game.getCardsIn(ZoneType.Graveyard));
list = CardLists.getValidCards(list, sa.getTargetRestrictions().getValidTgts(), ai, sa.getHostCard(), sa);
CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Graveyard), sa.getTargetRestrictions().getValidTgts(), ai, sa.getHostCard(), sa);
if (!ComputerUtil.targetPlayableSpellCard(ai, list, sa, false, false)) {
return false;
}
@@ -241,7 +251,7 @@ public class EffectAi extends SpellAbilityAi {
Card host = sa.getHostCard();
Combat combat = game.getCombat();
if (combat != null && combat.isAttacking(host, ai) && !combat.isBlocked(host)
&& game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)
&& phase.is(PhaseType.COMBAT_DECLARE_BLOCKERS)
&& !AiCardMemory.isRememberedCard(ai, host, AiCardMemory.MemorySet.ACTIVATED_THIS_TURN)) {
AiCardMemory.rememberCard(ai, host, AiCardMemory.MemorySet.ACTIVATED_THIS_TURN); // ideally needs once per combat or something
return true;
@@ -285,12 +295,10 @@ public class EffectAi extends SpellAbilityAi {
@Override
protected boolean doTriggerAINoCost(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) {
String aiLogic = sa.getParamOrDefault("AILogic", "");
// E.g. Nova Pentacle
if (aiLogic.equals("RedirectFromOppToCreature")) {
if (sa.usesTargeting() && !sa.getTargetRestrictions().canTgtPlayer()) {
// try to target the opponent's best targetable permanent, if able
CardCollection oppPerms = CardLists.getValidCards(aiPlayer.getOpponents().getCardsIn(ZoneType.Battlefield), sa.getTargetRestrictions().getValidTgts(), aiPlayer, sa.getHostCard(), sa);
CardCollection oppPerms = CardLists.getValidCards(aiPlayer.getOpponents().getCardsIn(sa.getTargetRestrictions().getZone()), sa.getTargetRestrictions().getValidTgts(), aiPlayer, sa.getHostCard(), sa);
if (!oppPerms.isEmpty()) {
sa.resetTargets();
sa.getTargets().add(ComputerUtilCard.getBestAI(oppPerms));
@@ -299,7 +307,7 @@ public class EffectAi extends SpellAbilityAi {
if (mandatory) {
// try to target the AI's worst targetable permanent, if able
CardCollection aiPerms = CardLists.getValidCards(aiPlayer.getCardsIn(ZoneType.Battlefield), sa.getTargetRestrictions().getValidTgts(), aiPlayer, sa.getHostCard(), sa);
CardCollection aiPerms = CardLists.getValidCards(aiPlayer.getCardsIn(sa.getTargetRestrictions().getZone()), sa.getTargetRestrictions().getValidTgts(), aiPlayer, sa.getHostCard(), sa);
if (!aiPerms.isEmpty()) {
sa.resetTargets();
sa.getTargets().add(ComputerUtilCard.getWorstAI(aiPerms));

View File

@@ -70,7 +70,7 @@ public final class EncodeAi extends SpellAbilityAi {
* 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) {
// only try to encode if there is a creature it can be used on
return chooseCard(player, player.getCreaturesInPlay(), true) != null;
}
@@ -102,7 +102,7 @@ public final class EncodeAi extends SpellAbilityAi {
public boolean apply(final Card c) {
boolean canAttackOpponent = false;
for (Player opp : ai.getOpponents()) {
if (CombatUtil.canAttack(c, opp) && !CombatUtil.canBeBlocked(c, opp)) {
if (CombatUtil.canAttack(c, opp) && !CombatUtil.canBeBlocked(c, null, opp)) {
canAttackOpponent = true;
break;
}

View File

@@ -1,5 +1,7 @@
package forge.ai.ability;
import java.util.Map;
import com.google.common.base.Predicate;
import forge.ai.SpellAbilityAi;
import forge.game.card.Card;
@@ -42,7 +44,7 @@ public class FlipOntoBattlefieldAi 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

@@ -20,7 +20,7 @@ public class ImmediateTriggerAi extends SpellAbilityAi {
return false;
}
trigsa.setActivatingPlayer(ai);
trigsa.setActivatingPlayer(ai, true);
if (trigsa instanceof AbilitySub) {
return SpellApiToAi.Converter.get(trigsa.getApi()).chkDrawbackWithSubs(ai, (AbilitySub)trigsa);
@@ -31,6 +31,11 @@ public class ImmediateTriggerAi extends SpellAbilityAi {
@Override
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
// always add to stack, targeting happens after payment
if (mandatory) {
return true;
}
String logic = sa.getParamOrDefault("AILogic", "");
SpellAbility trigsa = sa.getAdditionalAbility("Execute");
@@ -43,13 +48,9 @@ public class ImmediateTriggerAi extends SpellAbilityAi {
}
AiController aic = ((PlayerControllerAi)ai.getController()).getAi();
trigsa.setActivatingPlayer(ai);
trigsa.setActivatingPlayer(ai, true);
if (!sa.hasParam("OptionalDecider")) {
return aic.doTrigger(trigsa, true);
} else {
return aic.doTrigger(trigsa, !sa.getParam("OptionalDecider").equals("You"));
}
return aic.doTrigger(trigsa, !"You".equals(sa.getParamOrDefault("OptionalDecider", "You")));
}
@Override
@@ -64,7 +65,7 @@ public class ImmediateTriggerAi extends SpellAbilityAi {
return false;
}
trigsa.setActivatingPlayer(ai);
trigsa.setActivatingPlayer(ai, true);
return AiPlayDecision.WillPlay == ((PlayerControllerAi)ai.getController()).getAi().canPlaySa(trigsa);
}

View File

@@ -1,6 +1,8 @@
package forge.ai.ability;
import java.util.Map;
import forge.ai.SpellAbilityAi;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
@@ -20,7 +22,7 @@ public class InvestigateAi 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

@@ -1,6 +1,8 @@
package forge.ai.ability;
import java.util.Map;
import forge.ai.ComputerUtilCard;
import forge.ai.PlayerControllerAi;
import forge.ai.SpellAbilityAi;
@@ -32,7 +34,7 @@ public class LearnAi 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;
}

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