GithubHelp home page GithubHelp logo

magarena / magarena Goto Github PK

View Code? Open in Web Editor NEW
402.0 23.0 95.0 379.72 MB

Magarena is a single-player fantasy card game played against a computer opponent.

Home Page: http://magarena.github.io

License: GNU General Public License v3.0

Shell 0.03% Awk 0.19% Ruby 0.02% Makefile 0.53% Groovy 30.51% Java 66.55% C 0.57% HTML 1.29% CSS 0.03% Scala 0.06% Python 0.22% Batchfile 0.01% sed 0.01%
game card

magarena's Introduction

Magarena - a single player fantasy card game

CircleCI Codacy Latest version Latest version total downloads All versions total downloads

Homepage: http://magarena.github.io

Forum : http://www.slightlymagic.net/forum/viewforum.php?f=82

Requires Java 8 or greater (see Getting Started).

Thanks to

  • ubeefx for creating such a great game
  • epiko for creating the first Magarena splash screen and the amazing color themes
  • Salasnet, pedro1973, and elias for creating beautiful themes, http://www.slightlymagic.net/forum/viewforum.php?f=89
  • IcoJoy, http://www.icojoy.com/blogs/, for the nice free mage logo and icon
  • singularita for creating the scripts to add over 300 additional creature cards
  • glorfindel, Old Nick, David, Grundomu, jeffwadsworth, Kuno, LSK, sponeta,
  • day5ive, and Excedrin for contributing premade decks
  • mtgrares for the publicity
  • Goblin Hero for providing the images for some of the symbols
  • Melvin Zhang for implementing the Monte Carlo Tree Search AI and general code cleanup/bug fixes
  • IanGrainger for contributing a patch to allow text search in the Card Explorer
  • Rachel for making it possible to cancel image download and fixing incorrect images
  • beholder for implementing new cards and general usability improvements
  • johncpatterson for helping to test the Mac startup script
  • wait321 for creating a deck editor and other UI improvements
  • missalexis for creating an application bundle to improve Mac installation
  • goonjamin for contributing a patch that makes Magarena easier to use on touchscreens
  • Lodici for improving the duel screen and general UI enhancements
  • frank for extensive play testing and bug reporting
  • PalladiaMors, PhazedOut, Aunukia, nado18, Erkcan Özcan, kdesmond, a.
  • benedict balbuena, spartan vi, Braullynn, mecheng, pcastellazzi, rasdel,
  • Tyrael, hong yie, ember hauler, Hector Marin, drooone, jericho.pumpkin,
  • Mike, and Guest for implementing new cards
  • ShawnieBoy for implementing new cards, the M logo, and general image enhancements
  • PalladiaMors for the Portuguese UI translation
  • kannikkiy for the Russian UI translation
  • Zac610 for the Italian UI translation
  • LoubiTek for the French UI translation
  • Pichoro, Acorntail and all at http://magicseteditor.sourceforge.net for CardBuilder components
  • XMage for the ArrowBuilder code
  • neoedmund for the download images-on-demand implementation
  • http://mtgjson.com for card script data
  • http://magiccards.info for card images
  • http://game-icons.net for UI icons
  • http://soundbible.com, http://www.freesound.org for sound effects
  • everyone on the CCGHQ forum, http://slightlymagic.net/forum/

Thank you for your support and have fun!

magarena's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

magarena's Issues

Add UI sounds setting

Currently the sound played when there is a new version or missing image alert is tied into the game sound effects setting. Should be a separate setting for UI sounds.

Cancel block refinement

Currently if you click on a permanent to block you have to select the target. You cannot cancel the block (or at least no way I can see). Once assigned to a target you can then click on the blocking permanent to remove it from blocking but it needs to be clearer - a common mistake is to think that the Undo button will undo the block but in fact jumps back to your last turn!

Git question.

I am currently working on a feature branch for saving game state for use with test scenarios. Since the feature branch was created a number of updates have been made to master on github including a recent commit to fix an error with test scenarios. I would like to have this fix in my local feature branch so that I can test stuff without it falling over and was planning to use

git checkout master
git pull origin master
git checkout save-game-state   #feature branch
git merge master

Is this the correct way to do this such that it will have minimal impact when I eventually merge save-game-state into master prior to pushing to github? If possible, when I merge into master I only want it to have the net commit not the whole feature branch history which contains loads of checkpoint commits which would be of no interest to anyone but me.

Zur the Enchanter and functionality

When Zur's ability is triggered and I choose an aura from the library, the chosen card isn't put into battlefield but instead into the graveyard. It doesn't even prompt me an attachment choice for the aura but it's abilities are activated as if it has been played normally then put into graveyard.
Gamelog: http://pastebin.com/bKtuLkPw.

Quoting http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=121162:

If you use Zur the Enchanter's triggered ability to search for an Aura, it will be put onto the battlefield attached to an appropriate permanent. It doesn't target that permanent. If no appropriate permanent exists for it to be attached to, that Aura can't be put onto the battlefield and stays in your library.

Card Playability Issue

Reported on old site, Issue 713

Possibiliy of 'allow sensible choices' or mana-generation check preventing cards from being playable. Unable to reproduce - for follow-up

Error in card effect

Land target of Balduvian Frostwaker will lost the hability of (turning creature) in the end of turn. The real effect is permanent.

Replace Merlin with M icon

magarenaicon

The "M" is quite distinctive I think and should scale much better than the wizard and would look good as the application icon. Will need an outline so that it is displayed clearly on backgrounds with similar color to the foreground color of the logo.

1.55 Doesn't work on Linux, same for the previous version

Game starts, you get to play one card, then you can't play again. It keeps thinking forever. Tried other AIs.

Linux Ubuntu 14 64
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

Direct submission of issues using GitHub API

Look at feasibility of using GitHub API to submit issues directly from Magarena. Both exceptions and also card mechanic anomalies. Automatically include crash/game log, game state file, screenshot, etc. User would have option of entering a comment then hit a submit button. Would probably mean user would also require a GitHub account which might be limiting.

Keep the logs of the last N games played.

This would help in retrospectively tracking down issues (AI or general) with gameplay. At the moment a single "game.log" file is used and is overwritten each time you start a new game.

Pausing game on card popup?

One of the updates in 1.56 (f97d149) was to pause the game when the card popup is displayed during a game. The primary rationale behind this was that it could be a bit disconcerting when the AI plays a card and the animation occurs "behind" the open popup - the whole point of the animation being so that you clearly follow what the AI is doing (AI comes across as trying to sneak a play while you are looking at your card!). Also, when manually displaying the popup using the mouse wheel it seems natural to pause the game while you study the card (that is what DOTP does). However, I am not so sure it is desirable when auto-popup is active, where the popup is more likely to be open inadvertently.

Perhaps there should be a clearer indication when the game is paused? Or disable pause when in auto-popup mode? Or make optional by adding a setting to pause game on popup? Or remove pause game option entirely?

Crash log updates

Consider...

  • Overwriting crash.log instead of appending errors indefinitely. Only ever interested in the last error to occur.
  • adding brief instructions at the beginning of crash.log on how to submit to the forum or issue tracker.

check the website instead of tags API to determine when a new release is available

There is usually a lag between when the tag is created and when the release is created as each release must be associated with a tag and sometimes there may be issues publishing the release due to problems uploading the zip files etc.

It is clearer to check the releases API at https://api.github.com/repos/magarena/magarena/releases If the size of the response is an issue, it is possible to restrict the response to just the latest release with the per_page=1 pagination option, eg https://api.github.com/repos/magarena/magarena/releases?per_page=1

Can't choose which totem armor gets destroyed.

There's a ruling stating that, when a creature enchanted with multiple totem armors would be destroyed, its controller gets to choose which (single) totem armor aura is destroyed instead:

If a permanent you control is enchanted with multiple Auras that have totem armor, and the enchanted permanent would be destroyed, one of those Auras is destroyed instead -- but only one of them. You choose which one because you control the enchanted permanent. [emphasis mine]

In Magarena (1.55), computer automatically selects one aura in this case; the player is not given a choice.

Relevant parts from game.log

LOG (P): Tap Dryad Arbor. Pay {G}. Play Spider Umbra.
LOG (P): Enchant target creature (Slippery Bogle) with Spider Umbra.
LOG (P): Tap Razorverge Thicket. Pay {W}. Play Hyena Umbra.
LOG (P): Enchant target creature (Slippery Bogle) with Hyena Umbra.
...
LOG (P): Igor attacks with Slippery Bogle.
MCTS cached=0
MCTS cheat=true index=1 life=5 turn=13 phase=DeclareAttackers sims=569 time=3179
  [67/13/?] (pass)
* [93/556/win:5] (Restoration Angel)
LOG (C): Pay {3}{W}. Tap Gavony Township. Tap Plains. Tap Razorverge Thicket. Tap Sunpetal Grove. Play Restoration Angel.
MCTS cached=0
MCTS cheat=true index=1 life=5 turn=13 phase=DeclareAttackers sims=225 time=990
  [92/77/?] (yes,Blade Splicer)
  [90/62/?] (yes,Noble Hierarch)
* [92/86/win:4] (no,null)
LOG (C): Put Restoration Angel onto the battlefield.
LOG (C): Computer may (no) exile target non-Angel creature Computer control, then return that card to the battlefield under Computer's control.
MCTS cached=0
MCTS cheat=true index=1 life=5 turn=13 phase=DeclareBlockers sims=87 time=330
* [86/77/win:3] (S1 Slippery Bogle=Restoration Angel)
  [68/10/?] (S-2499)
LOG (C): Computer blocks with Restoration Angel.
LOG (P): Remove all damage from Slippery Bogle. Hyena Umbra is destroyed.

Show percentage complete instead of card count on splash.

Currently it displays something like "loading 8692 playable cards...". First the count is not correct because of double-sided cards etc and so does not match the count in the Card Explorer. Second this takes the most time during startup (on my acer 110 netbook across the network it can take well over a minute on first access). It would be much more helpful if it displayed percentage of cards loaded instead.

eg...
mag-splash

Update splash screen

For example, I really like the following from @ShawnieBoy)...

magarena

Even on its own I think it is quite effective although will need to make room for startup progress messages. And will need a bigger version.

damage should have multiple targets

originally reported at http://www.slightlymagic.net/forum/viewtopic.php?f=82&t=3735&p=167490#p166768

jerichopumpkin wrote:
if a creature with trample and equipped with Umezawa's Jitte is blocked by a creature with thoughness less than the attackers power, Umezawa's Jitte gets double the counters. I assume the same issue is true if the attacker is blocked by more than one creature and the damage is assinged to more than one creature (then trample would not matter).

ShawnieBoy wrote:
Yes, this is the multiple-target problem. Trample ends up dealing two 'lots' of damage if 'trampling over' (one amount to the creature, then another to the player as two separate damage assignments), instead of one 'lot' to two targets. Trample and lifelink (two smaller instances of lifelink, instead of a lump-sum), and other effects/triggers that rely on damage being dealt can fire too often.

Rancor stays attached to Treetop Village even when no longer a creature

Computer activated Treetop Village, then played Rancor on the resulting Ape creature. At the end of the turn, Treetop Village turned back into a land - at that point, the enchantment should have dropped of it into the graveyard (and then, specifically in case of Rancor), be returned to owner's hand.

Instead, it remains attached to the land. See screenshot (top row, second from right).

screenshot

Log for this turn (there doesn't seem to be anything useful there, to my untrained eye):

MCTS cached=0
MCTS cheat=true index=1 life=14 turn=13 phase=Draw sims=1894 time=8067
[89/138/?](Mutavault=M, Mutavault=M, Treetop Village=M)

  • [93/318/?](Mutavault=C, Mutavault=M, Treetop Village=M)
    [92/243/?](Mutavault=M, Mutavault=C, Treetop Village=M)
    [92/240/?](Mutavault=C, Mutavault=C, Treetop Village=M)
    [88/106/?](Mutavault=M, Mutavault=M, Treetop Village=C)
    [92/271/?](Mutavault=C, Mutavault=M, Treetop Village=C)
    [93/281/?](Mutavault=M, Mutavault=C, Treetop Village=C)
    [93/297/?](Mutavault=C, Mutavault=C, Treetop Village=C)
    MCTS cached=0
    MCTS cheat=true index=1 life=14 turn=13 phase=FirstMain sims=2072 time=8039
    91/169/?
    [91/156/?](Treetop Village)
    94/341/?
    [93/245/?](River Boa)
  • [94/357/?](Treetop Village)
    [90/147/?](Albino Troll)
    [93/245/?](Joraga Warcaller)
    93/253/?
    91/159/?
    MCTS cached=0
    MCTS cheat=true index=1 life=14 turn=13 phase=FirstMain sims=2007 time=8046
    90/599/?
  • 92/1408/?
    LOG (C): Pay {1}{G}. Tap Forest. Tap Mutavault. Play activated ability of Treetop Village.
    LOG (C): Until end of turn, Treetop Village becomes a 3/3 green Ape creature with trample. It's still a land.
    MCTS cached=0
    MCTS cheat=true index=1 life=14 turn=13 phase=FirstMain sims=2068 time=8036
    91/731/?
  • 92/1138/?
    [87/199/?](River Boa)
    MCTS cached=0
    MCTS cheat=true index=1 life=14 turn=13 phase=FirstMain sims=2154 time=8025
    [88/214/?](Albino Troll)
    [92/917/?](River Boa)
  • [93/1023/?](Treetop Village)
    LOG (C): Pay {G}. Tap Forest. Play Rancor.
    LOG (C): Enchant target creature (Treetop Village) with Rancor.
    MCTS cached=0
    MCTS cheat=true index=1 life=14 turn=13 phase=DeclareAttackers sims=2074 time=8037
  • [94/767/?]([River Boa, Albino Troll, Treetop Village])
    [84/74/?]([River Boa, Albino Troll])
    [93/541/?]([River Boa, Treetop Village])
    [87/116/?]([River Boa])
    [92/322/?]([Albino Troll, Treetop Village])
    [76/31/?]([Albino Troll])
    [89/195/?]([Treetop Village])
    76/28/?
    LOG (C): Computer attacks with Albino Troll, River Boa and Treetop Village.
    LOG (P): Igor blocks with Arcbound Ravager and Eldrazi Spawn.
    LOG (P): {c}Igor loses 5 life.
    LOG (C): Albino Troll is destroyed. Rancor is put into its owner's graveyard.
    LOG (P): Eldrazi Spawn is destroyed.
    LOG (C): Return Rancor from the graveyard to its owner's hand.
    MCTS cached=0
    MCTS cheat=true index=1 life=14 turn=13 phase=SecondMain sims=1448 time=8083
    78/620/?
  • [79/828/?](Treetop Village)
    LOG (C): Play Treetop Village.

Import other deck formats using plug-in interface.

Importing other deck formats is a prime candidate for a plugin-like mechanism. For example, each format could have an associated groovy parser that returns a MagicDeck. Magarena can load these groovy files at runtime each representing a format that can be imported. Means that anyone can create a deck parser (assuming they know groovy) without requiring an rebuild.

Something like...

IDeckParser
    MagicDeck parseDeck(File deckFile);
    String getDeckFormatName();

Elo player rating system?

To give a sense of progression assign a rating to a player profile based on the Elo rating system. This would apply to AI player profiles as well as human. Human players would start at a rating of 1000, AI players maybe more or less considering the perceived strength of the AI. The rating score would go up or down based on the games won/lost and the amount would depend on the rating of the opponent. If you have ever player Virtual Pool this is the system used to rate players.

March of machines when played sends every non creature artifact to the graveyard

originally reported on http://www.slightlymagic.net/forum/viewtopic.php?f=82&t=3735&p=167489#p167308

muaddib wrote:
March of machines doesn't work.

jerichopumpkin wrote:
uh-oh, that's my fault, didn't check it before submit, since it was Opalescence clone (only the filter is different). I'll check it later and resubmit

Edit: can't seem to find what's wrong with it. The groovy code seems fine (exactly the same as Opalescence, except for the accept condition that is not necessary and for the filter). From my tests, it seems to work, but the converted mana cost it gets is alwys zero (as soon as I play it, every non creature artifact is sent to the graveyard).

Find consistent way of displaying ability icon tooltip in popup

Has to work for both manual (mouse-wheel) and auto-popup modes. For example, one way is to hold the L-CTRL key while moving the mouse over the popup which will prevent the popup from closing. It would be nice though to come up with a mouse-only solution which could possibly be achieved by holding the LMB whilst moving the mouse over the popup.

AI takes a lot of time to play even on default setting

AI's take a lot of time to play even on default setting. Not sure how they're limited (if on memory, time to run, or just number of cycles ), but would be nice to be able to decrease that time to run factor.

Can one increase the memory available to magarena? How?

Also, it would be nice to have a "average time taken by the AI's turn" thing of sorts while playing and being able to make changes based on that. In real life it's no problem waiting for the opponent for 4 minutes, but in a computer there's stuff you can do to it so it takes less time ^^;

On another note, on the readme it says:

Selecting the AI to play against:
The desired AI can be selected in the "New duel" dialog (Arena -> New duel).
The difficulty level is the maximum number of seconds the AI has to make a move.

The readme should have a clear description of each AI

Also, there should be a short description in the UI for them.

Should I do this ^ ?

Mulligan screen closes prematurely if re-deal on two card types.

(use buyback-test.dck to replicate) if dealt only two card types and you click re-deal the Mulligan screen will close and you have to continue taking a mulligan the "old way" from the game screen. For example, given the following hand, if I click re-deal the screen will close.
2014-12-02_203125

Crackleburr activated abilities

First issue, Crackleburr does not properly require two untapped red creatures be tapped. I've managed to fire off the 3 damage with a single untapped red creature. Secondly, it doesn't seem like the untap ability is functional at all or at least I'm not allowed the choice to activate during combat which had been the plan :)

crash during removal of MagicChangePlayerStateAction in undo

CRASH REPORT FOR MAGARENA THREAD Thread[pool-4822-thread-1,5,main]
CREATED ON 2014/12/01 15:38:15

MAGARENA VERSION 1.57, JRE 1.7.0_51, OS Linux_3.7.10-101.fc17.x86_64 amd64

Used Memory: 168M
Free Memory: 120M
Total Memory: 288M

Max Memory: 494M

-Xms256M
-Xmx512M
-Xverify:none
-Dcom.sun.management.jmxremote
-Dmagarena.dir=https://buildhive.cloudbees.com/job/magarena/job/magarena/ws/release
-Ddebug=false
-Dgame.log=1417444103.log
-Djava.awt.headless=true

Turn : 16 Phase : EndOfCombat Step : NextPhase Player : jenkins Score : -244
0] Player : jenkins Life : 9 Delayed : Total=0

  • Hand : Dictate of Erebos
  • Hand : Thraben Doomsayer
  • Hand : Woolly Spider
  • Permanent : Bayou Tapped
  • Permanent : Boros Guildmage Power : 2 Toughness : 2 Damage : 1 Tapped
  • Permanent : Darigaaz's Caldera
  • Permanent : Forest Tapped
  • Permanent : Forest
  • Permanent : Ghalma's Warden Power : 2 Toughness : 4 Damage : 2 Tapped
  • Permanent : Glimmerpoint Stag Power : 3 Toughness : 3 Damage : 0 Summoned
  • Permanent : Neurok Replica Power : 1 Toughness : 4 Damage : 0 Tapped
  • Permanent : Quest for Renewal
  • Permanent : Tainted Field Tapped
  • Permanent : Tainted Field Tapped
    1] Player : Les Vegas Life : 7 Delayed : Total=0
  • Hand : Gorilla Warrior
  • Hand : Dinrova Horror
  • Hand : Vivid Creek
  • Graveyard : Mothdust Changeling
  • Graveyard : Crafty Pathmage
  • Permanent : Crosis's Catacombs Tapped
  • Permanent : Forest Tapped
  • Permanent : Forest
  • Permanent : Hinterland Harbor Tapped
  • Permanent : Salt Marsh Tapped
  • Permanent : Sea Sprite Power : 1 Toughness : 1 Damage : 0
  • Permanent : Tanglewalker Power : 2 Toughness : 2 Damage : 2 Summoned
  • Permanent : Tuskguard Captain Power : 2 Toughness : 3 Damage : 0 Tapped
    Stack : 0
    1. MagicMarkerAction = 0
    2. MagicExecuteFirstEventAction = 0
    3. MagicStackResolveAction = 0
    4. MagicExileUntilEndOfTurnAction = 0
    5. MagicRemoveFromPlayAction (Vampiric Link,0) = -711
    6. MagicRemoveFromCombatAction (Vampiric Link) = 0
    7. MagicMoveCardAction (Vampiric Link,Play,Exile) = 0
    8. MagicRemoveTriggersStaticsAction = 0
    9. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    10. MagicMarkerAction = 0
    11. MagicExecuteFirstEventAction = 0
    12. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    13. MagicExecuteFirstEventAction = 0
    14. MagicAddEventAction (EVENT: NONE Declare attackers.) = 0
    15. MagicMarkerAction = 0
    16. MagicExecuteFirstEventAction = 0
    17. MagicDeclareAttackersAction = 0
    18. MagicTapAction (Neurok Replica) = -10
    19. MagicPutItemOnStackAction (MagicTriggerOnStack,Quest for Renewal) = -1
    20. MagicAddEventAction (EVENT: Quest for Renewal Proceed with "may" action?) = 0
    21. MagicTapAction (Boros Guildmage) = -10
    22. MagicPutItemOnStackAction (MagicTriggerOnStack,Quest for Renewal) = -1
    23. MagicAddEventAction (EVENT: Quest for Renewal Proceed with "may" action?) = 0
    24. MagicTapAction (Ghalma's Warden) = -10
    25. MagicPutItemOnStackAction (MagicTriggerOnStack,Quest for Renewal) = -1
    26. MagicAddEventAction (EVENT: Quest for Renewal Proceed with "may" action?) = 0
    27. MagicDeclareAttackerAction = 0
    28. MagicDeclareAttackerAction = 0
    29. MagicDeclareAttackerAction = 0
    30. MagicExecuteFirstEventAction = 0
    31. MagicExecuteFirstEventAction = 0
    32. MagicExecuteFirstEventAction = 0
    33. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    34. MagicExecuteFirstEventAction = 0
    35. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    36. MagicExecuteFirstEventAction = 0
    37. MagicStackResolveAction = 0
    38. MagicChangeCountersAction = 0
    39. MagicStackResolveAction = 0
    40. MagicChangeCountersAction = 0
    41. MagicStackResolveAction = 0
    42. MagicChangeCountersAction = 0
    43. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    44. MagicExecuteFirstEventAction = 0
    45. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    46. MagicExecuteFirstEventAction = 0
    47. MagicAddEventAction (EVENT: NONE Declare blockers.) = 0
    48. MagicExecuteFirstEventAction = 0
    49. MagicDeclareBlockersAction = 0
    50. MagicDeclareBlockerAction = 0
    51. MagicSetBlockerAction = 0
    52. MagicDeclareBlockerAction = 0
    53. MagicSetBlockerAction = 0
    54. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    55. MagicExecuteFirstEventAction = 0
    56. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    57. MagicExecuteFirstEventAction = 0
    58. MagicCombatDamageAction = 0
    59. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    60. MagicExecuteFirstEventAction = 0
    61. MagicAddEventAction (EVENT: NONE Play a card or ability.) = 0
    62. MagicExecuteFirstEventAction = 0
    63. MagicCombatDamageAction = 0
    64. MagicDealDamageAction = 0
    65. MagicDealDamageAction = 0
    66. MagicDealDamageAction = 0
    67. MagicDealDamageAction = 0
    68. MagicDealDamageAction = 0
    69. MagicChangeLifeAction (Les Vegas,-1) = 500
    70. MagicChangePlayerStateAction = 0
    71. MagicAddStaticAction (MagicPermanent.NONE,magic.model.action.MagicChangePlayerStateAction$3@33e2df95) = 0
    72. MagicChangePlayerStateAction = 0
      Score = -244

Exception from controller.runGame: nothing to remove
java.lang.RuntimeException: nothing to remove
at magic.model.mstatic.MagicPermanentStaticMap.remove(MagicPermanentStaticMap.java:89)
at magic.model.MagicGame.removeStatic(MagicGame.java:1198)
at magic.model.action.MagicAddStaticAction.undoAction(MagicAddStaticAction.java:29)
at magic.model.MagicGame.restore(MagicGame.java:599)
at magic.ai.MMAB$MMABWorker.runGame(MMAB.java:178)
at magic.ai.MMAB$MMABWorker.runGame(MMAB.java:220)
at magic.ai.MMAB$MMABWorker.runGame(MMAB.java:220)
at magic.ai.MMAB$MMABWorker.evaluateGame(MMAB.java:245)
at magic.ai.MMAB$1.run(MMAB.java:88)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

Suppress overlay if card image is too small.

For example the following is TestAbilities where the battlefield permanents are completely hidden by their overlays which in the case of the P/T overlay is unreadable anyway...
screenshot1
Not sure how realistic this scenario is but it can be solved simply by skipping overlays when the image is below a certain size.

Test Issue Tracker

Put the github issue tracker through its paces.

  • not able to add label.
  • no "UI" label.

EDIT: update original comment.

TRANSLUCENT translucency is not supported.

From Agetian in forum...

I got this fatal exception when trying to start a new game in Magarena 1.56 on a Linux Mint desktop system.

Exception from controller.runGame: TRANSLUCENT translucency is not supported.
java.lang.UnsupportedOperationException: TRANSLUCENT translucency is not supported.
        at java.awt.Window.setOpacity(Window.java:3598)
        at magic.ui.card.MagicInfoWindow.setVisible(MagicInfoWindow.java:104)
        at magic.ui.card.MagicInfoWindow.<init>(MagicInfoWindow.java:27)
        at magic.ui.card.AnnotatedCardPanel.<init>(AnnotatedCardPanel.java:71)
        at magic.ui.duel.DuelPanel.<init>(DuelPanel.java:75)
        at magic.ui.screen.DuelGameScreen.getScreenContent(DuelGameScreen.java:66)
        at magic.ui.screen.DuelGameScreen.access$100(DuelGameScreen.java:22)
        at magic.ui.screen.DuelGameScreen$1.done(DuelGameScreen.java:41)
        at javax.swing.SwingWorker$5.run(SwingWorker.java:737)
        at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
        at sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
        at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
        at javax.swing.Timer.fireActionPerformed(Timer.java:312)
        at javax.swing.Timer$DoPostEvent.run(Timer.java:244)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:694)
        at java.awt.EventQueue$3.run(EventQueue.java:692)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Look and Feel Color Picker

For a bit of added customisability (and not sure how awkward this would be to implement) having a color-picker option to choose the color of the menu border/background. I'm personally not too keen on this blue color when I've been used to it being black ;)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.