Commit graph

23925 commits

Author SHA1 Message Date
spjspj
da76c7687d Missing deovid type background 2018-03-04 02:17:21 +11:00
spjspj
374774c7b9
Merge pull request #4564 from spjspj/master
For actual cards on modo, the full background is always printed to it…
2018-03-03 23:14:23 +10:00
spjspj
8cf065e345 For actual cards on modo, the full background is always printed to it (not just part of the top left corner of the background). 2018-03-03 23:51:47 +11:00
Oleg Agafonov
08f15416ba * Add new full set Masters 25 (only Karona's Zealot must be implemented); 2018-03-02 22:06:24 +04:00
Oleg Agafonov
ae99a1b444 Fixed tests 2018-03-02 21:42:16 +04:00
Christiaan
f2410b7ef1 Fixed creatures not getting tapped by Uphill Battle
The condition was checking if the Uphill Battle was cast from hand, instead of the actual card entering the battlefield
2018-03-02 14:32:12 +01:00
spjspj
550b98509c
Merge pull request #4562 from spjspj/master
Fix zendikar full art land drawings.  (Travis build failed but didn't seem to be related to Mage.Client)
2018-03-02 17:33:11 +10:00
spjspj
60cc0525da Fix zendikar full art land drawings.
- Realized curve fits part of an off-centered ellipse
  (a 295x700 sized ellipse, with the top left being 197 pixels off the top of the top of the curved image on a scanned ZEN forest with bounding rects of: 293x337)
2018-03-02 18:22:09 +11:00
Danny Plenge
07c76e0784 Test file for Uphill Battle card. 2018-03-01 17:11:52 +01:00
Marc Zwart
fa36c9080c fixed typo in checksumhelper 2018-03-01 17:10:13 +01:00
Christiaan
e5a5e74862 added MMQ UphillBattle
added MercadianMasques card Uphill Battle
2018-03-01 16:50:46 +01:00
L_J
b32c8f6bb0
Merge pull request #4547 from Zzooouhh/Zzooouhh-bog
Implemented Blaze of Glory and Portal cards (& finished a todo in MustBlockAny checking)
2018-03-01 07:05:11 +01:00
LevelX2
86287f71c8 Merge origin/master 2018-02-28 17:25:24 +01:00
LevelX2
8c8b4ce019 * Added a check if life of players is going down during infinite loop check. Is so no Draw check message is shown (fixes #4557). 2018-02-28 17:24:42 +01:00
spjspj
d6910897e3
Merge pull request #4559 from spjspj/master
Zen lands slightly offcenter
2018-02-28 23:50:10 +10:00
spjspj
8c614a9006 slightly offcenter 2018-03-01 00:49:43 +11:00
spjspj
8887cca387 slightly offcenter 2018-03-01 00:32:30 +11:00
spjspj
6516e7eea4
Merge pull request #4556 from spjspj/master
Adding in way to render BFZ style full art lands (BFZ and HOU full ar…
2018-02-28 00:54:04 +10:00
spjspj
596ca5be86 Adding in way to render BFZ style full art lands (BFZ and HOU full art lands)
Things still to do:
1) Get everyone to download the full art Face images ...
2) Add in the collector number to the Face images (<ImageDirector>/FACE/ZEN/Island.<numberneeded>.jpg for example)
4) Maybe even add in an UST (Unstable) way of rendering lands (with the swoosh of opaque full art down the bottom).
2018-02-28 01:25:29 +11:00
spjspj
154c2121b1
Merge pull request #4555 from spjspj/master
Modifying zendikar curved box to use a path instead. (Will be easier …
2018-02-28 00:35:02 +11:00
spjspj
a28e273dcc Modifying zendikar curved box to use a path instead. (Will be easier to then draw BFZ lands similarly). 2018-02-28 00:02:14 +11:00
Shaun Hannah
7c7f88ab3c [WIP] S3 Upload of JSON log 2018-02-27 05:17:20 -05:00
Shaun Hannah
7f94c724af Git ignore the game-<UUID>.json logs 2018-02-26 19:25:00 -05:00
Shaun Hannah
4b331355de [WIP] SPIKE - gson @Expose 2018-02-26 19:24:00 -05:00
Shaun Hannah
6aeb3c7c3a [WIP] Consumable JSON game logs
As discussed in https://github.com/magefree/mage/issues/4515

This exposes a JSON log of game interactions that can be analyzed.

This is just a first pass, to get up to speed with how the messaging works. It'd like to trim down the messages much
further so they don't include redundant information in each message. Also gson supports much more advances serialization
options; such as using the @Expose annotation. We should probably use that, but I ran into some issues (I'm not a java
developer, so still learning).

TODO:
  These currently only exist on the client side; ideally we'd submit this logs back up to a central server after the
  games completion; thinking this could be simple via an S3 file drop, and a Lambda function to process and expose the
  logs; maybe via a kafka stream.

Examples of log messages are below:

```
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "GAME_SELECT",
  "value": {
    "gameView": {
      "priorityTime": 3000,
      "players": [
        {
          "name": "computer",
          "life": 20,
          "counters": {}
        },
        {
          "name": "hooptie",
          "life": 20,
          "counters": {}
        }
      ],
      "hand": {
        "425d774f-ee0c-4a9b-8516-c98f886943f0": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "425d774f-ee0c-4a9b-8516-c98f886943f0"
        },
        "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": {
          "name": "Blade of the Bloodchief",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff"
        },
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": {
          "name": "Ornithopter",
          "power": "0",
          "toughness": "2",
          "loyalty": "",
          "manaCost": [
            "{0}"
          ],
          "convertedManaCost": 0,
          "type": 0,
          "paid": false,
          "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
        },
        "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64"
        },
        "91239f4f-9003-4c48-8ca1-4c318f892489": {
          "name": "Cranial Plating",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "91239f4f-9003-4c48-8ca1-4c318f892489"
        },
        "feb268d8-0535-4a9c-8915-83dd92a08c4c": {
          "name": "Arcbound Ravager",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c"
        }
      },
      "canPlayInHand": [
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
      ],
      "stack": {},
      "combat": [],
      "phase": "PRECOMBAT_MAIN",
      "step": "PRECOMBAT_MAIN"
    },
    "message": "Play spells and abilities.",
    "options": {
      "queryType": "SELECT"
    }
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "SEND_PLAYER_UUID",
  "value": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "GAME_CHOOSE_PILE",
  "value": {
    "choices": {
      "1ecf8671-be4c-4060-a76b-af614235a5b7": "Cast Ornithopter"
    }
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4",
  "type": "GAME_INIT",
  "value": {
    "priorityTime": 3000,
    "players": [
      {
        "name": "computer",
        "life": 20,
        "counters": {}
      },
      {
        "name": "hooptie",
        "life": 20,
        "counters": {}
      }
    ],
    "hand": {
      "425d774f-ee0c-4a9b-8516-c98f886943f0": {
        "name": "Springleaf Drum",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{1}"
        ],
        "convertedManaCost": 1,
        "type": 0,
        "paid": false,
        "id": "425d774f-ee0c-4a9b-8516-c98f886943f0"
      },
      "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": {
        "name": "Blade of the Bloodchief",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{1}"
        ],
        "convertedManaCost": 1,
        "type": 0,
        "paid": false,
        "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff"
      },
      "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": {
        "name": "Ornithopter",
        "power": "0",
        "toughness": "2",
        "loyalty": "",
        "manaCost": [
          "{0}"
        ],
        "convertedManaCost": 0,
        "type": 0,
        "paid": false,
        "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
      },
      "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": {
        "name": "Springleaf Drum",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{1}"
        ],
        "convertedManaCost": 1,
        "type": 0,
        "paid": false,
        "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64"
      },
      "91239f4f-9003-4c48-8ca1-4c318f892489": {
        "name": "Cranial Plating",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{2}"
        ],
        "convertedManaCost": 2,
        "type": 0,
        "paid": false,
        "id": "91239f4f-9003-4c48-8ca1-4c318f892489"
      },
      "feb268d8-0535-4a9c-8915-83dd92a08c4c": {
        "name": "Arcbound Ravager",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{2}"
        ],
        "convertedManaCost": 2,
        "type": 0,
        "paid": false,
        "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c"
      }
    },
    "canPlayInHand": [
      "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
    ],
    "stack": {},
    "combat": [],
    "phase": "PRECOMBAT_MAIN",
    "step": "PRECOMBAT_MAIN"
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4",
  "type": "GAME_SELECT",
  "value": {
    "gameView": {
      "priorityTime": 3000,
      "players": [
        {
          "name": "computer",
          "life": 20,
          "counters": {}
        },
        {
          "name": "hooptie",
          "life": 20,
          "counters": {}
        }
      ],
      "hand": {
        "425d774f-ee0c-4a9b-8516-c98f886943f0": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "425d774f-ee0c-4a9b-8516-c98f886943f0"
        },
        "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": {
          "name": "Blade of the Bloodchief",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff"
        },
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": {
          "name": "Ornithopter",
          "power": "0",
          "toughness": "2",
          "loyalty": "",
          "manaCost": [
            "{0}"
          ],
          "convertedManaCost": 0,
          "type": 0,
          "paid": false,
          "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
        },
        "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64"
        },
        "91239f4f-9003-4c48-8ca1-4c318f892489": {
          "name": "Cranial Plating",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "91239f4f-9003-4c48-8ca1-4c318f892489"
        },
        "feb268d8-0535-4a9c-8915-83dd92a08c4c": {
          "name": "Arcbound Ravager",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c"
        }
      },
      "canPlayInHand": [
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
      ],
      "stack": {},
      "combat": [],
      "phase": "PRECOMBAT_MAIN",
      "step": "PRECOMBAT_MAIN"
    },
    "message": "Play spells and abilities.",
    "options": {
      "queryType": "SELECT"
    }
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "SEND_PLAYER_UUID",
  "value": "1ecf8671-be4c-4060-a76b-af614235a5b7"
}
```
2018-02-26 19:23:00 -05:00
Jeff
fe3a023c36 - Fixed Djinn Illuminatus #4552 2018-02-26 11:18:17 -06:00
LevelX2
79939c5ee7 Merge origin/master 2018-02-26 16:17:48 +01:00
LevelX2
5f98cb685e * Hushwing Gryff - Fixed that log message was sent out too often (fixes #4548). 2018-02-26 16:17:16 +01:00
Oleg Agafonov
aeb1fa6bb3 Card text fixes 2018-02-26 16:48:38 +04:00
Oleg Agafonov
ed8b59ff6f
Merge pull request #4553 from lcoviedo/master
spells cost reduction text
2018-02-26 16:46:56 +04:00
lcoviedo
1dd88b0ea7
spells cost reduction text 2018-02-26 12:27:19 +00:00
spjspj
871b035bb4
Merge pull request #4551 from spjspj/master
Adding in way to render Zendikar full art lands.
2018-02-26 15:31:10 +11:00
spjspj
afeb1c16ac Adding in way to render Zendikar full art lands.
Things still to do:
1) Get everyone to download the full art Face images
2) Add in the collector number to the Face images (<ImageDirector>/FACE/ZEN/Island.<numberneeded>.jpg for example)
3) Add in the ability to draw say BFZ / HOU full art lands as well.
4) Maybe even add in an UST (Unstable) way of rendering lands (with the swoosh of opaque full art down the bottom).
2018-02-26 15:22:59 +11:00
spjspj
576c1aec57 Adding in way to render Zendikar full art lands.
Things still to do:
1) Get everyone to download the full art Face images
2) Add in the collector number to the Face images (<ImageDirector>/FACE/ZEN/Island.<numberneeded>.jpg for example)
3) Add in the ability to draw say BFZ / HOU full art lands as well.
4) Maybe even add in an UST (Unstable) way of rendering lands (with the swoosh of opaque full art down the bottom).
2018-02-26 12:47:18 +11:00
L_J
2da32a767c
Implemented Just Fate 2018-02-25 21:44:52 +00:00
L_J
5246b96005
Implemented Heavy Fog 2018-02-25 21:43:58 +00:00
L_J
a87cbc12c7
Implemented cards 2018-02-25 21:42:46 +00:00
L_J
84f2d5cb27
Implemented cards 2018-02-25 21:42:07 +00:00
L_J
5104442d6d
Implemented Warrior's Stand 2018-02-25 21:41:18 +00:00
L_J
3af8e03350
Implemented Kongming's Contraptions 2018-02-25 21:40:30 +00:00
L_J
2892573fd3
Implemented Just Fate 2018-02-25 21:39:57 +00:00
L_J
47c3117dd3
Implemented Heavy Fog 2018-02-25 21:39:25 +00:00
L_J
cb677fa983
Implemented Goblin War Cry 2018-02-25 21:38:47 +00:00
L_J
9e2fda2a77
Implemented Eunuchs' Intrigues 2018-02-25 21:38:05 +00:00
LevelX2
ba483dd87a * Added a test for the new Blood Moon rule (set to @Ignored) because new rule is not implemented. 2018-02-25 21:59:06 +01:00
LevelX2
2fceafda93 * Fixed a bug that mana in the mana pool could not be used to pay mana costs that could only be payed with "you may spend mana as thought" effects (fixes #2581). 2018-02-25 21:53:47 +01:00
L_J
5fac17c0d4
Implemented Deep Wood 2018-02-25 15:24:55 +00:00
L_J
7e83497ba4
Implemented cards 2018-02-25 15:24:30 +00:00
L_J
b347ab3eb8
Implemented Temporary Truce 2018-02-25 15:22:41 +00:00
L_J
5152d34c41
Implemented Cruel Fate 2018-02-25 15:21:05 +00:00