-
Notifications
You must be signed in to change notification settings - Fork 842
Developer HOWTO Guides
Oleg Agafonov edited this page Jan 21, 2020
·
25 revisions
Before proceed read getting started guide about tools and project structure.
Below you can found howto guides or developer's checklist. XMage have some usefull perl scripts in game's folder to generate code, build or process other dev tasks. But all actions can be done manually without perl installation.
- Make your own copy of xmage repository (fork it from xmage page):
- Go to your project page and make new branch for all changes:
- Use IDE tools to clone your github project:
- Switch to your branch by IDE and make any commits to it;
- Open your repository on github and press "new pull request button" to create PR for main xmage repository:
- 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 -- generate it by perl script or files copy-paste:
- By use of the perl script (explained in the getting started guide);
- By create new java class file and copy paste source code from any other card to it:
- Rename java class to card name in Camel Case Notation without any special chars or spaces (example:
Angrath, the Flame-Chained->AngrathTheFlameChained); - Check out card type, cost and subtype of new card;
- Remove not necessary abilities or code from old card;
- Rename java class to card name in Camel Case Notation without any special chars or spaces (example:
- Add card's abilities:
- Use copy paste code from similar 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()););
- Add new card to set's list (no need if you use perl script -- it's add cards to the list automatically):
- Find set's file in
..\Mage.Sets\src\mage\sets\YOUR_SET_NAME.java; - Card's list by alphabetically order;
- Copy paste line from any other card near and change it to your card;
- Check out
card name,card number,card rarityandcard class name; - If your card have different images then add new line for each image but with different card numbers like "123a", "123b", "123c";
- Find set's file in
- 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*.dbfiles 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
DownloadSourcesin..\Mage.Client\src\main\java\org\mage\plugins\card\images\DownloadPictures.javafile; - 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.urlsinC:\mage\Mage.Client\src\main\resources\image.url.propertiesfile);
- 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.propertiesfile);
- 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-requestwhere:
-
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 to 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 -DskipTestsmaven command:
- Build release packs for client and server by
assembly:assemblymaven 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.propertiesfile in launcher folder and remove linejava.version=...(it's help launcher to download new java on startup); - You can also edit line
xmage.version=1.4.29V4 (2018-05-01)to change it to current versions -- it's help disable update notification about "new version available" 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\dband 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.