-
Notifications
You must be signed in to change notification settings - Fork 782
Developer HOWTO Guides
theelk801 edited this page Apr 14, 2018
·
25 revisions
Before proceed read getting started guide about tools and project structure.
Below you can found howto guides or developer's checklist.
- Select card to implement (example: "Anvilwrought Raptor");
- Find out all info about card (example from scryfall);
- Make sure it's not implemented yet -- search source code for "card name";
- Find old card with the same or similar abilities (use scryfall advanced oracle search or source code search);
- Prepare empty card stub:
- Use the perl script (explained in the getting started guide)
- Add card's abilities:
- Use copy paste code from same card;
- Change and setup that code to your cards, e.g. change filter or condition;
- Use IDE code complete to hint correct class and method access (they all have same names as they describe on card. Example for flying ability:
this.addAbility(FlyingAbility.getInstance());
);
- All done, now time to test:
- Restart test server and client from your source in test mode (see testing strategy info);
- If xmage can't find your card name (see errors log or check it in deck editor) then delete all
cards*.db
files in developer folder -- it's force to recreate new database; - Make sure your card work fine and have same text as it have on paper (hint: if card's have wrong or missing text then ability settings was incorrect -- try to fix it first);
- Run all xmage tests, they all must be green (see xmage testing tools);
- Try to download card image (use xmage download images window for card's set);
- Commit changes (new card file and changes set file) and pull request it.
TODO
- Create new set's java file in
..\Mage.Sets\src\mage\sets\
folder by copy-paste template from any other set (example:ExplorersOfIxalan.java
); - Setup official set code and release date (use scryfall for set's info);
- Add new cards to set (see above);
- Add new tokens to set (see above);
- Setup set symbols download options:
- Go to
..\Mage.Client\src\main\java\org\mage\plugins\card\dl\sources\GathererSets.java
; - Add set's code to one of the supported list (example:
symbolsBasic
); - Add replace code when source uses non standard codes (example:
codeReplacements.put("CMA", "CM1");
);
- Go to
- Setup card images download options:
- Find current supporting images sources
DownloadSources
in..\Mage.Client\src\main\java\org\mage\plugins\card\images\DownloadPictures.java
file; - For each image source that you can download go to class file and add set's code to support list;
- Add set's code to supported (example for scryfall:
supportedSets.add("OGW");
); - Add replace code when source uses non standard codes (example for scryfall:
put("DD3GVL", "gvl");
);
- Add set's code to supported (example for scryfall:
- If set's can be downloaded then remove that code from global ignore list (
ignore.urls
inC:\mage\Mage.Client\src\main\resources\image.url.properties
file);
- Find current supporting images sources
- Setup token images download options:
- Some sources can support tokens download: if so then repeat cards images setup but search source code for tokens data (start with
getTokenImages()
method from java class, example:..\Mage.Client\src\main\java\org\mage\plugins\card\dl\sources\TokensMtgImageSource.java
); - Add tokens data to
..\Mage.Client\src\main\resources\card-pictures-tok.txt
; - Find each new token class and add set's code to supported list
tokenImageSets.addAll
(example:..\Mage\src\main\java\mage\game\permanent\token\SaprolingToken.java
-- it's will help xmage to select token image on battlefield by set's priority (seeimage.url.properties
file);
- Some sources can support tokens download: if so then repeat cards images setup but search source code for tokens data (start with
If you want to test other pull request before merge.
Simple way:
- Use github hints by click on "view command line instructions":
Difficult way:
- Go to pull request page and save it's number like #4306;
- Open git and run command to fetch new pull request to new branch:
git fetch origin pull/4306/head:test-pull-request
where:
-
origin
-- name of the xmage repository (to find out it in IntellJ IDEA go toVCS -> Git -> Remotes
); -
4306
-- pull request number; -
test-pull-request
-- temporary branch for test;
- Open new created branch by
checkout test-pull-request
;
If you want to build your own release (nightly build) and distribute it your friends then follow that:
- Install IDE and setup it to build xmage projects (see Developer Getting Started);
- Build full source code for client and server by
clean install -DskipTests
maven command: - Build release packs for client and server by
assembly:assembly
maven command: - Download official release, run it, update all files, clean up it and prepare for re-release:
- Delete folder
..xmage\java
(you can't distribute with client -- each OS used different java versions and must download it by launcher); - Open
installed.properties
file in launcher folder and remove linejava.version=...
(it's help launcher to download new java on startup); - Delete all files and folders in
..xmage\mage-client\plugins\images
(if you want distribute your client with card images and icons then do not clean it); - Delete all files in
..xmage\mage-client\db
and in..\xmage\mage-server\db
(it's help to re-create update cards data);
- Copy zip-files and unpack it to that release folder with file replacement:
-
..\Mage.Client\target\mage-client.zip
; -
..\Mage.Server\target\mage-server.zip
;
- Zip all xmage folder and release that pack -- Other users must download it, unzip, run launcher, update java and start to play (do not use "update" again after java download -- it's will rewrite your files with official release;
- Some versions is not fully compatible with current official servers and potential can cause bugs and freezes -- try to use it with new server.