My goal for this thread is to establish a community for playing MtG online with custom cards.
First I will briefly explain how to play with custom cards using Cockatrice. Then I will describe what I think needs to happen to make playing games with custom cards easy and common. I will describe my progress in generating a program to unify the various MtG related programs
Cockatrice uses a file called cards.xml as its database of cards to use in game. It is human readable and very easy to add cards manually. The two steps for adding your custom cards to Cockatrice are
Edit cards.xml to include your custom cards.
Put images of the new cards somewhere on your computer and make sure that the picURL attribute in each card entry points to this location.
Now, I did not edit cards.xml by hand. I have written a program that converts set files exported from Magic Set Editor into an abstracted (python) data type which I can then convert to files compatible with Cockatrice or any other program. For what it's worth my program also allows advanced sorting and analysis functionality. It is currently command line only (python). My first goal is to develop this program so that we have a single package from converting cards and decks from one program to another.
Playing on Cockatrice with my custom cards was a ridiculous amount of fun. My second goal is to make this easy. In order to make this work I had to email my friend a hacked copy of cards.xml and all of the card renders. It was easy, but too clunky for mass use. What we need is a repository of custom cards that people can selectively import. This would be really easy to do using something like Git, or alternatively the Cockatrice server could provide this functionality. I will be in contact with the Cockatrice devs about this. We would also need a repository of custom card images. If anyone has an idea for how to manage this please speak up.
Important note: I think you can use your own custom cards in Cockatrice games without other players adding them to their local database. If you want your friends to be able to add your custom cards to their own decks, then we need file sharing as described in the previous paragraph.
The final goal is to come up with a way for people looking to play custom games to find each other. This could be something as simple as an identifier to use as your game name in the Cockatrice lobby, eg. "mtgsCustom".
Summary of what's to be done
Get an all purpose converter program up to v 1.0 so everyone can use it.
Establish a way to share custom card data.
Establish a means for players looking for custom card games to find one another online.
Anyone interested in this pursuit please speak up. I have already made a meaningful progress in this direction. I have figured out how to make custom card frames and mana symbols in Magic Set Editor, and I've gotten my custom cards working in Cockatrice. I think accomplishing the goals outlined here would be a big step for the custom card community and would be a stupid amount of fun.
EDIT: Here's a link to the MSE->Cockatrice convertermagicHack
I'm extremely interested. I love the cockatrice platform and have made my own plugins and played with my own sets using it. Sadly, I was never able to figure out how to make a plugin that didn't overwrite cards.xml completely, so my cards were always standalone, but it still worked quite well and was some of the most meaningful online playtesting I'd done.
I'd love to help out as much as I can. About half of the time I have a ton of free time, even at work, and can put in a lot of time on projects such as this. However, the other half of the time I get so busy that I disappear completely on the internet, sometimes for weeks or even months. But, within those confines I'd love to do what I can to help you. Hell, I'm already going to be working on this kinda thing for Apoquallyp anyway (if you haven't checked out his sets, Iamur and Paiura, you should do so. They're really good!)
I would love to get my hands on your exporter... a lot of the work I had to do on my plugin was by hand, mostly because I couldn't find a decent exporter or even instructions on how to create one.
Thanks for your reply. Glad to know I'm not the only one who is interested in this. I emailed the Cockatrice dev and we'll see what he says about supporting a repository directly through Cockatrice.
Since you're interested let me ask what programming languages are you comfortable with? I do all of my prototyping in python but for a distribution class program I'd rather use Either Java or C with Qt for the GUI. Any of that your cup of tea? I could maybe be convinced to use PyQt and keep everything in python since the converter is pretty lightweight and everyone seems to know python these days.
I think the first order of business should be to completely lock in the converter and get it up to version 1.0. I'd be happy to share the source via sourceforge. If that sounds good let me know and I'll make it a project. We're going to have to think of a good name I was thinking maybe mtgHack. Maybe that's stupid, I dunno.
You say you sometimes disappear off the face of the net. That's fine but it is my experience that momentum must be maintained for these projects to actually get finished so I should say that I intend on getting the converter done within a couple weeks, and setting up at least a preliminary repository for custom sets within a month, max.
EDIT: In case it wasn't clear the name mtgHack is in respect to one of my favorite cards, Magical Hack
This is awesome, I can't wait til we get more support.
I'm glad you're stoked, because I'm stoked. I don't play around. I've already figured out how to make custom card frames and mana symbols in Magic Set Editor and I've actually played with those cards in Cockatrice. I'm not stopping until I can sit down and play random people online with full renders of their own cards.
Can you really do something to remove the need to share a modified cards.xml? As far as I know, you'll need to share that file if you want pictures on the cards. It'd require a major redesign (I suspect) if they tried to change Cockatrice to handle it without passing on the file.
I'd love to see the source code on your exporter as well, it sounds really useful. I've been looking at making something like that myself, but if you've already done the work...
Can you really do something to remove the need to share a modified cards.xml? As far as I know, you'll need to share that file if you want pictures on the cards.
This is why I said I "think" you can do it without the xml file. Actually, now I think you are correct that without matching databases the pictures don't work. I've emailed the Cockatrice dev and we'll see what he/she has to say.
I'd love to see the source code on your exporter as well, it sounds really useful. I've been looking at making something like that myself, but if you've already done the work...
Indeed and I'd like to share it with you. Please suggest a medium. I like sourceforge but I need at least one "yea" from the crowd before I pull the trigger on that.
Though connecting to the lobby is frustrating, I've never been bothered by the UI itself - in fact, it seems quite similar to MTGO. One of the main reasons I prefer Cockatrice over MWS is that it looks so much better (IMO).
Hope things go well with the Cockatrice Dev. I'm not a real programmer, not like some of the others who've replied in this thread, I just dabble, but especially if there's an exporter out there I can be pretty good at making a plugin with that, cleaning up any issues that may come with it along the way (big thing in cockatrice is making sure pic names are the right format - tedious, but something I can do to kill time)
As you said, because of my random inactivity it's best not to have me on anything that would slow things down, but anything I can do to chip in that wouldn't hinder the main project, let me know.
I have always had a massive distaste for Cockatrice because of its catastrophically awful user interface, and if I recall correctly, you can't play without connecting to the lobby server - right?
Anyway, I don't really have a lot of time these days, but I'm a programmer by profession. Years of experience with Python, C, C++, C#, blah blah blah. I wrote Egg of P'an Ku years ago because I wanted to play L5R online. (Don't look at the code, it's nasty. I wasn't very good at Python at the time.)
I hate reinventing the wheel, but one of these days someone ought to make an M:tG client that doesn't look like arse... and supports custom sets trivially easily.
I agree that the Cockatrice interface isn't super beautiful. As far as requiring the server, you can play local games without it, and I believe you can download the server program and run your own for local network games, although I haven't tried. I would be interested in developing better custom card support, but I think the correct way to do that is to have each set in its own card database file, which should be a trivial change to Cockatrice.
Now, one of the main things holding me back from even thinking about writing a new game program is that I've never written a networking backend myself. If you want to help me with that something interesting might come out of it. I know a lot about networking code using python's Twisted, but I've never done it myself.
Hope things go well with the Cockatrice Dev. I'm not a real programmer, not like some of the others who've replied in this thread, I just dabble, but especially if there's an exporter out there I can be pretty good at making a plugin with that, cleaning up any issues that may come with it along the way (big thing in cockatrice is making sure pic names are the right format - tedious, but something I can do to kill time)
What do you mean by "plugin"?
BTW - I cleaned up the exporter last night and it's in good shape. If we think something like magicalHack is a good name I'll post it.
BTW - I cleaned up the exporter last night and it's in good shape. If we think something like magicalHack is a good name I'll post it.
I assumed your exporter helped turn sets into 'plugins' that can then be downloaded and installed for people already running cockatrice. ie; Gatecrash comes out, the first thing people will do is download the official gatecrash plugin so that their cards.xml file contains the gatecrash cards.
As far as the name... I'm not a fan of it, I think hack brings about negative connotation that you might not want associated with the project (keeping in mind that this project, if you take it as far as it can go, could potentially receive negative attention from Hasbro's legal dept.). Then again, it's not my project - I just think it's a great idea and want to help where I can.
I assumed your exporter helped turn sets into 'plugins' that can then be downloaded and installed for people already running cockatrice. ie; Gatecrash comes out, the first thing people will do is download the official gatecrash plugin so that their cards.xml file contains the gatecrash cards.
My "exporter" does the following things
Load a .txt file exported from MSE in MTGS forum format into memory. Each card is represented by an instance of a Card class.
Sorts and otherwise analyzes available cards according to any sorting function defined by the user. Enormous flexibility there.
Write a set of cards to disk in a format compatible with Cockatrice. Here you have a couple options. You can write your cards to their own .xml file, or you can append to an existing one. What I'm working on right now is a function that will load a Cockatrice card database and covert to my Card class. That way you can add your own cards to the database without creating duplicates.
I don't think this is the "plugin" functionality you're talking about. How do I do that?
As far as the name... I'm not a fan of it, I think hack brings about negative connotation that you might not want associated with the project (keeping in mind that this project, if you take it as far as it can go, could potentially receive negative attention from Hasbro's legal dept.). Then again, it's not my project - I just think it's a great idea and want to help where I can.
My goal in life is to not ever talk to a lawyer. Any ideas on a name?
I am these days of the opinion that Python is unsuitable for large, interface-heavy applications at any rate.
I completely agree and have been spending time trying to relearn how to do anything in C++. I get the feeling I do NOT want to use the Windows tools but rather an independent GUI library like Qt. Any advice?
For EOPK, I didn't use Twisted; I feel that Twisted just made things more complicated than they needed to be. EOPK just uses straight up BSD sockets
I'm looking at your source code presently. Is there some way we could communicate if I have questions? This forum is probably not the best place for that.
Load a .txt file exported from MSE in MTGS forum format into memory. Each card is represented by an instance of a Card class.
Sorts and otherwise analyzes available cards according to any sorting function defined by the user. Enormous flexibility there.
Write a set of cards to disk in a format compatible with Cockatrice. Here you have a couple options. You can write your cards to their own .xml file, or you can append to an existing one. What I'm working on right now is a function that will load a Cockatrice card database and covert to my Card class. That way you can add your own cards to the database without creating duplicates.
I don't think this is the "plugin" functionality you're talking about. How do I do that?
Here's what I was able to do in the past
Export a set from MSE to a .txt file that could then be put into the cards.xml file in Cockatrice. Unfortunately, every time I tried to append the file, the program would never recognize my cards (some sort of flag was missing in the file, I assume), so I simply made it so that my set was a completely new file.
Export images from MSE, go in and edit them by hand (very time consuming) to conform to Cockatrice's standards.
Package it all in a self-extracting RAR archive so that common users who weren't savvy enough to copy the files over themselves could still use the plugin. I also included a batch file for uninstallation that would replace the default cardlist.
This is how I made my 'ghetto' plugin. However, you'll see that the official cockatrice plugins can all be installed from the cockatrice launcher. How to do that I have no idea, but if you want it to have broad support for custom sets this is probably something I'd talk to the developer about. Maybe even get him/her into this thread so they can see what we're talking about doing.
Export a set from MSE to a .txt file that could then be put into the cards.xml file in Cockatrice. Unfortunately, every time I tried to append the file, the program would never recognize my cards (some sort of flag was missing in the file, I assume), so I simply made it so that my set was a completely new file.
Export images from MSE, go in and edit them by hand (very time consuming) to conform to Cockatrice's standards.
Package it all in a self-extracting RAR archive so that common users who weren't savvy enough to copy the files over themselves could still use the plugin. I also included a batch file for uninstallation that would replace the default cardlist.
Well, my little program can certainly append to the existing card database... that's not a problem. What I'd like to get working before I distribute is the ability to load the xml file from Cockatrice into memory so I can intelligently add cards to the database without the duplication that occurs if you simply append. By the way, getting the image file paths right was really easy so I'm not sure what your past problem was o.O
My favorite GUI library for C/C++ is wxWidgets, as it uses native controls on the platforms it supports, which is every major platform. The #1 usability faux pas is not using native controls. Cockatrice, I'm looking at you. However, I think Qt also uses native controls, so I'm not at all averse to using that.
Thank you for this advice. I am trying to learn a lot of things at once but I have faith. I will probably use Qt because that's what MSE uses and thus I have people to ask questions. Problem is I have to relearn C++. Any advice on setting that up for someone who hasn't done it in ten years?
I love this idea, and I hope you get it working. I am unable at the moment volunteer my programing services due to constraints on my time, but if you get this working, this could be a lot of fun.
I love this idea, and I hope you get it working. I am unable at the moment volunteer my programing services due to constraints on my time, but if you get this working, this could be a lot of fun.
I have been working on this nonstop for about a week. This will get done. I'm working on it right now. Holy crap I've learned a lot about parsing strings. I really hope you find time to help out because this is a lot of work!
You should call it Nord. Because these sets will have no r&d!:tongue:
I think a program like this would be amazing, especially if people could download- and then play- a full custom block format online, or even a homemade standard format all from one- or a few- users.
I have no skill at programming, but I do work with photo, journalism, InDesign, Vector... If you have any need of those skills during this, just send me a beam.
Private Mod Note
():
Rollback Post to RevisionRollBack
Modern WSoul SistersW
Commander WIsperia the InscrutableU WGaddock TeegG UTomorrow, Azami's FamiliarU
You should call it Nord. Because these sets will have no r&d!:tongue:
I think a program like this would be amazing, especially if people could download- and then play- a full custom block format online, or even a homemade standard format all from one- or a few- users.
I have no skill at programming, but I do work with photo, journalism, InDesign, Vector... If you have any need of those skills during this, just send me a beam.
"Nord" is on the list of possibilities. Thanks
Thank you for offering your skills. I am very much in programming phase but will be using this thread to find people willing to help at all stages.
EDIT: Progress update. Lots of bugs fixed today. I think within 2 days I will be releasing a command line tool for exporting/importing cards from Magic Workstation, Cockatrice, and even from text copy/pasted from this forum. Note that MSE can export Magic Workstation files so the ability to import from Magic Workstation covers MSE. Also, image file paths are easily included so that you can see your cards in Cockatrice.
EDIT 2: I just got a really basic chat server working on my computer. This is good because it means that if it comes down to it I can probably write my own server to do whatever we need.
EDIT 3: Still no response from the Cockatrice dev.
EDIT 5: I need a break. If anyone wants to have a go with my custom cards tomorrow lemme know (send me a message or something) and we'll set up a game
EDIT 6: Emailed the Cockatrice dev again. If anyone else knows how to contact him please let me know.
I hate reinventing the wheel, but one of these days someone ought to make an M:tG client that doesn't look like arse... and supports custom sets trivially easily.
And scripting! Seriously, magic already uses a very strict grammar across most all its cards. Letting the cards do what they tell you to do removes so much unnecessary clicking from the game and simplifies the UI requirements so much that it's not even funny.
All the extra clicking, explaining exactly what you're doing through chat, no enforcement of steps and phases, and misunderstandings and misplays that happen online with no rules enforcement and no judges to help resolve disputes are all things that have driven me away from using MWS, Octogon, Cockatrice...
An ad-hoc repository system would be pretty easy to do with all the free cloud storage options running around today (dropbox, google drive, etc), if Cockatrices' developers aren't compliant. Dropbox and Google Drive provide SDKs for interfacing with their services, and Google Drive lets you share files and folders with "anyone with the link" via a link so a manual distribution wouldn't even be terribly hard (upload to drive, share link / click link, download file, run the OP's card importer utility) renders can be zipped up with the cards file and distributed in the same manner.
@Move: How's the wxWidgets toolchain work? I've looked into QT before, and I have to say I hate the amount of preprocessor magic that's going on there, and while the ide is nice, it's not really comparable to vs. :/
This whole idea is a god-send. I really need to test out my main set's cards in a draft environment and I really did not want to print out that many dummy cards or proxies for testing.
I was looking into this before because someone had done a really minor version of this, but I just flat gave up on it.
I'll throw my full support at this project, if you can do this you have no idea how helpful this'll be for those of us who are seriously pursuing creating custom sets. I'd seriously donate to a Paypal fund if this project gets going if it incentivizes it more.
Also while the Cockatrice dev is here.
Any chance we could see a faux-draft mode built into the Cockatrice client? The set information is already there, having more information provided so that the client can randomize boosters and let players draft would go miles towards making drafting on cockatrice easier (at the moment we go to external sites, draft, put the drafted cards into decks on cockatrice, then join games and manually match ourselves up)
Example:
-Each card stored in data would also have to have a rarity value assigned, and the full set dataset would have to have a pack distribution notation at the top so the program understands how many cards per pack of each rarity, etc. If you allowed cards to be set as multiple rarities, it could also mean we could bypass issues with sets with weird distributions (INN/DKA for example, you could set all DFC's as both their normal rarity and DFC, then the final card in the pack is always from the DFC rarity, etc.) and would put the work in the hands of the data creators.
Also I kinda agree with a lot of Vig's notes, I love Cockatrice, but the UI is rather counter-productive at times.
I finished a pretty reasonable version of the converter program and have shared it with one user to make sure it's fit for distribution. As soon as I hear back that it's ok I'll post a download location.
The way to go is probably to modularise the database in such a way that multiple files (e.g. regular Magic cards, custom sets, whatever) can be used in parallel so they can be shared more easily without having to overwrite anything.
An ad-hoc repository system would be pretty easy to do with all the free cloud storage options running around today (dropbox, google drive, etc), if Cockatrices' developers aren't compliant. Dropbox and Google Drive provide SDKs for interfacing with their services, and Google Drive lets you share files and folders with "anyone with the link" via a link so a manual distribution wouldn't even be terribly hard (upload to drive, share link / click link, download file, run the OP's card importer utility) renders can be zipped up with the cards file and distributed in the same manner.
Max,
I agree with you completely. I think each set should reside in its own database file. The only tricky part is dealing with cards that exist in multiple sets, ie. "Forest." I believe the proper way to deal with that is to have Cockatrice detect multiple instances when it loads a new database and deal with it's internal memory structure accordingly.
Now I want to talk about what ryzorz said. I strongly believe that the correct way to deal with custom sets data is not to have Cockatrice host the data directly. If we establish a standard file format for set representation then all the various programs could speak the same language! I'm proposing that we establish a standard representation of a card set and set up so that users can create sets somewhere universal. As ryzorz says Google drive and dropbox would work but I'd prefer something independent. Let's generate some discussion here. As for the format I currently favor the way MWS stores cards because it's human readable and really easy to parse, but I don't really care as long as it makes sense. Also, I strongly believe that card images should be stored separately from the data. There are a number of details that must be considered
How do we deal with the namespace? I think sets should be organized by author, and then if they are widely accepted and used a group of moderators could promote the set to a "universe" repository in which all sets have a unique name.
Should entire card renders be expected?
Should programs render the cards automatically from data and a card frame, or just import a complete render. I think real time rendering is too complicated. This is basically what MSE does and the scripting is horrendous. If that MSE code could be extracted and made a universal tool...
If entire renders are stored, what's the format? Size? Does it matter?
...you have no idea how helpful this'll be for those of us who are seriously pursuing creating custom sets.
Sure I do, that's why I started this thread. I'm working seriously on two sets and that's what go me started on all this. The feedback I've gotten on my cards by playing a few games in cockatrice has been great.
I'd seriously donate to a Paypal fund if this project gets going if it incentivizes it more.
I actually appreciate this very much. Perhaps when I publicly release the converter (couple days) I'll drop a link for donations. Anything at all would be very much appreciated.
Guys, there are a lot of great suggestions regarding improvements to Cockatrice but let's stay on topic. We're not here to redesign Cockatrice, we're here to get custom sets working Cockatrice has a message board, and I'm sure the developer would love it to be used!
EDIT: I am so happy that this idea is generating interest. I love this game and I love the open source software community.
Not necessarily. I would also be content with e.g. one file for all of WotC's cards, one for person X's custom cards, one for person Y's custom cards etc.
The only tricky part is dealing with cards that exist in multiple sets, ie. "Forest." I believe the proper way to deal with that is to have Cockatrice detect multiple instances when it loads a new database and deal with it's internal memory structure accordingly.
Unless I'm overlooking something, this seems trivial.
It's not, but if there is going to be some kind of central repository that can be accessed in a unified way, it'll be quite easy to include an interface to that in Cockatrice, and possibly in other applications. Nobody cares about the details of the file format as long as it is reasonably machine readable (read: easy to convert on the fly).
The easy answer that satisfies everyone is to just treat all source files equally and merge them all into one pool of cards and present them to the user based on other things (like the set they appear in). That way people can organize cards into files however they like and whether you have twenty .xml files for every set or one big file with every WOTC card ever released is irrelevant as far as the program cares.
Just as a final point before this thread becomes cluttered with stuff that doesn't really belong here...
I already requested that you stop posting this stuff here, and you just pointed out that it "doesn't really belong here". Here's a link to the Cockatrice message board. Documentation is really important and I hope you'll post this useful information that you have in the proper place
Max,
Can we make a gameplan for breaking out sets into multiple database files. I imagine this is a really easy job in Cockatrice. If you don't have time I'll do it but I'd ask for a five minute introduction to the code base via gchat or something. I'd like to get at least that going as soon as possible so we can move on to building a public standardized database of card sets. With that in place, plus my converter which will be released any day now (as soon as my correspondent gets back to me with feedback) we'll have a reasonable work flow for people to play with their custom sets! I'm really excited!
The user to which I sent my converter program seems to be really busy or something because he hasn't gotten back to me. If someone else who's familiar with python could please volunteer I'll give you the program for testing.
Testing in this case just means that you would have a custom set in MSE, and use my program to export it to Cockatrice by following the instructions that come with the program. Basically I would like to get feedback from one or two people so I can make improvements before posting it for general use.
You sent me a PM, I said I'd be open (but no guarantees), and you never followed up. If all you need is someone to run through an example, I could almost certainly do it.
I'm moderately experienced with python. I haven't used it a ton, but I know enough to get by, and I've got plenty experience with other languages.
You have my apology for not following up previously. I sent it to someone else and neglected to tell you. I will PM you momentarily... and thanks for doing this.
The converter is really close to done. We're just working through some corner cases and bringing it up to user friendliness. There's a little issue that came up that needs to be dealt with now with thoughts directed toward our final goal of a standardized set repository.
The basic issue is how to specify things like card names. Should we require ASCII or allow unicode? If unicode which encoding (probably UTF-8)?
Annoyingly, Cockatrice uses unicode characters in rules text but replaces the Ae symbol in things like Aether Adept with ASCII characters "AE". This inconsistency really bothers me and I personally think we should not tie our standard to Cockatrice; we should go for Unicode, annoyances of alphabetization be damned. In this case, the exporter would internally use unicode strings and make replacements as necessary when exporting to the various applications, 'cuz that's kind of the point of the converter.
The one problem with that is that if I import stuff from Cockatrice I'm going to have a card called "AEther Adept". If I have a reprint in my custom set, it will be called "Aether Adept" (with a unicode Ae). Therefore, collision detection won't work. I think a reasonable solution is to have each application's import routine supply a list of replacements, eg. for Cockatrice ASCII "AE" goes to unicode Ae.
I'd like any feedback and opinions. I don't want to make any stupid decisions early on.
P.S. As soon as we release the converter we should steer this thread back to making the universal repository and use the Source Forge project for development of the converter program.
My goal for this thread is to establish a community for playing MtG online with custom cards.
First I will briefly explain how to play with custom cards using Cockatrice. Then I will describe what I think needs to happen to make playing games with custom cards easy and common. I will describe my progress in generating a program to unify the various MtG related programs
Cockatrice uses a file called cards.xml as its database of cards to use in game. It is human readable and very easy to add cards manually. The two steps for adding your custom cards to Cockatrice are
Now, I did not edit cards.xml by hand. I have written a program that converts set files exported from Magic Set Editor into an abstracted (python) data type which I can then convert to files compatible with Cockatrice or any other program. For what it's worth my program also allows advanced sorting and analysis functionality. It is currently command line only (python). My first goal is to develop this program so that we have a single package from converting cards and decks from one program to another.
Playing on Cockatrice with my custom cards was a ridiculous amount of fun. My second goal is to make this easy. In order to make this work I had to email my friend a hacked copy of cards.xml and all of the card renders. It was easy, but too clunky for mass use. What we need is a repository of custom cards that people can selectively import. This would be really easy to do using something like Git, or alternatively the Cockatrice server could provide this functionality. I will be in contact with the Cockatrice devs about this. We would also need a repository of custom card images. If anyone has an idea for how to manage this please speak up.
Important note: I think you can use your own custom cards in Cockatrice games without other players adding them to their local database. If you want your friends to be able to add your custom cards to their own decks, then we need file sharing as described in the previous paragraph.
The final goal is to come up with a way for people looking to play custom games to find each other. This could be something as simple as an identifier to use as your game name in the Cockatrice lobby, eg. "mtgsCustom".
Summary of what's to be done
Anyone interested in this pursuit please speak up. I have already made a meaningful progress in this direction. I have figured out how to make custom card frames and mana symbols in Magic Set Editor, and I've gotten my custom cards working in Cockatrice. I think accomplishing the goals outlined here would be a big step for the custom card community and would be a stupid amount of fun.
EDIT: Here's a link to the MSE->Cockatrice converter magicHack
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
I'd love to help out as much as I can. About half of the time I have a ton of free time, even at work, and can put in a lot of time on projects such as this. However, the other half of the time I get so busy that I disappear completely on the internet, sometimes for weeks or even months. But, within those confines I'd love to do what I can to help you. Hell, I'm already going to be working on this kinda thing for Apoquallyp anyway (if you haven't checked out his sets, Iamur and Paiura, you should do so. They're really good!)
I would love to get my hands on your exporter... a lot of the work I had to do on my plugin was by hand, mostly because I couldn't find a decent exporter or even instructions on how to create one.
My custom sets:
Caeia Block (Released - Beta)
Generals of Dareth (In Design)
Thanks for your reply. Glad to know I'm not the only one who is interested in this. I emailed the Cockatrice dev and we'll see what he says about supporting a repository directly through Cockatrice.
Since you're interested let me ask what programming languages are you comfortable with? I do all of my prototyping in python but for a distribution class program I'd rather use Either Java or C with Qt for the GUI. Any of that your cup of tea? I could maybe be convinced to use PyQt and keep everything in python since the converter is pretty lightweight and everyone seems to know python these days.
I think the first order of business should be to completely lock in the converter and get it up to version 1.0. I'd be happy to share the source via sourceforge. If that sounds good let me know and I'll make it a project. We're going to have to think of a good name I was thinking maybe mtgHack. Maybe that's stupid, I dunno.
You say you sometimes disappear off the face of the net. That's fine but it is my experience that momentum must be maintained for these projects to actually get finished so I should say that I intend on getting the converter done within a couple weeks, and setting up at least a preliminary repository for custom sets within a month, max.
EDIT: In case it wasn't clear the name mtgHack is in respect to one of my favorite cards, Magical Hack
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
I'm glad you're stoked, because I'm stoked. I don't play around. I've already figured out how to make custom card frames and mana symbols in Magic Set Editor and I've actually played with those cards in Cockatrice. I'm not stopping until I can sit down and play random people online with full renders of their own cards.
YEAH!
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
I'd love to see the source code on your exporter as well, it sounds really useful. I've been looking at making something like that myself, but if you've already done the work...
This is why I said I "think" you can do it without the xml file. Actually, now I think you are correct that without matching databases the pictures don't work. I've emailed the Cockatrice dev and we'll see what he/she has to say.
Indeed and I'd like to share it with you. Please suggest a medium. I like sourceforge but I need at least one "yea" from the crowd before I pull the trigger on that.
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
Hope things go well with the Cockatrice Dev. I'm not a real programmer, not like some of the others who've replied in this thread, I just dabble, but especially if there's an exporter out there I can be pretty good at making a plugin with that, cleaning up any issues that may come with it along the way (big thing in cockatrice is making sure pic names are the right format - tedious, but something I can do to kill time)
As you said, because of my random inactivity it's best not to have me on anything that would slow things down, but anything I can do to chip in that wouldn't hinder the main project, let me know.
My custom sets:
Caeia Block (Released - Beta)
Generals of Dareth (In Design)
I agree that the Cockatrice interface isn't super beautiful. As far as requiring the server, you can play local games without it, and I believe you can download the server program and run your own for local network games, although I haven't tried. I would be interested in developing better custom card support, but I think the correct way to do that is to have each set in its own card database file, which should be a trivial change to Cockatrice.
Now, one of the main things holding me back from even thinking about writing a new game program is that I've never written a networking backend myself. If you want to help me with that something interesting might come out of it. I know a lot about networking code using python's Twisted, but I've never done it myself.
What do you mean by "plugin"?
BTW - I cleaned up the exporter last night and it's in good shape. If we think something like magicalHack is a good name I'll post it.
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
I assumed your exporter helped turn sets into 'plugins' that can then be downloaded and installed for people already running cockatrice. ie; Gatecrash comes out, the first thing people will do is download the official gatecrash plugin so that their cards.xml file contains the gatecrash cards.
As far as the name... I'm not a fan of it, I think hack brings about negative connotation that you might not want associated with the project (keeping in mind that this project, if you take it as far as it can go, could potentially receive negative attention from Hasbro's legal dept.). Then again, it's not my project - I just think it's a great idea and want to help where I can.
My custom sets:
Caeia Block (Released - Beta)
Generals of Dareth (In Design)
My "exporter" does the following things
I don't think this is the "plugin" functionality you're talking about. How do I do that?
My goal in life is to not ever talk to a lawyer. Any ideas on a name?
I completely agree and have been spending time trying to relearn how to do anything in C++. I get the feeling I do NOT want to use the Windows tools but rather an independent GUI library like Qt. Any advice?
I'm looking at your source code presently. Is there some way we could communicate if I have questions? This forum is probably not the best place for that.
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
Here's what I was able to do in the past
This is how I made my 'ghetto' plugin. However, you'll see that the official cockatrice plugins can all be installed from the cockatrice launcher. How to do that I have no idea, but if you want it to have broad support for custom sets this is probably something I'd talk to the developer about. Maybe even get him/her into this thread so they can see what we're talking about doing.
My custom sets:
Caeia Block (Released - Beta)
Generals of Dareth (In Design)
Well, my little program can certainly append to the existing card database... that's not a problem. What I'd like to get working before I distribute is the ability to load the xml file from Cockatrice into memory so I can intelligently add cards to the database without the duplication that occurs if you simply append. By the way, getting the image file paths right was really easy so I'm not sure what your past problem was o.O
Thank you for this advice. I am trying to learn a lot of things at once but I have faith. I will probably use Qt because that's what MSE uses and thus I have people to ask questions. Problem is I have to relearn C++. Any advice on setting that up for someone who hasn't done it in ten years?
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
I have been working on this nonstop for about a week. This will get done. I'm working on it right now. Holy crap I've learned a lot about parsing strings. I really hope you find time to help out because this is a lot of work!
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
I think a program like this would be amazing, especially if people could download- and then play- a full custom block format online, or even a homemade standard format all from one- or a few- users.
I have no skill at programming, but I do work with photo, journalism, InDesign, Vector... If you have any need of those skills during this, just send me a beam.
WSoul SistersW
Commander
WIsperia the InscrutableU
WGaddock TeegG
UTomorrow, Azami's FamiliarU
Archester
Custom Cube
"Nord" is on the list of possibilities. Thanks
Thank you for offering your skills. I am very much in programming phase but will be using this thread to find people willing to help at all stages.
EDIT: Progress update. Lots of bugs fixed today. I think within 2 days I will be releasing a command line tool for exporting/importing cards from Magic Workstation, Cockatrice, and even from text copy/pasted from this forum. Note that MSE can export Magic Workstation files so the ability to import from Magic Workstation covers MSE. Also, image file paths are easily included so that you can see your cards in Cockatrice.
EDIT 2: I just got a really basic chat server working on my computer. This is good because it means that if it comes down to it I can probably write my own server to do whatever we need.
EDIT 3: Still no response from the Cockatrice dev.
EDIT 5: I need a break. If anyone wants to have a go with my custom cards tomorrow lemme know (send me a message or something) and we'll set up a game
EDIT 6: Emailed the Cockatrice dev again. If anyone else knows how to contact him please let me know.
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
All the extra clicking, explaining exactly what you're doing through chat, no enforcement of steps and phases, and misunderstandings and misplays that happen online with no rules enforcement and no judges to help resolve disputes are all things that have driven me away from using MWS, Octogon, Cockatrice...
An ad-hoc repository system would be pretty easy to do with all the free cloud storage options running around today (dropbox, google drive, etc), if Cockatrices' developers aren't compliant. Dropbox and Google Drive provide SDKs for interfacing with their services, and Google Drive lets you share files and folders with "anyone with the link" via a link so a manual distribution wouldn't even be terribly hard (upload to drive, share link / click link, download file, run the OP's card importer utility) renders can be zipped up with the cards file and distributed in the same manner.
@Move: How's the wxWidgets toolchain work? I've looked into QT before, and I have to say I hate the amount of preprocessor magic that's going on there, and while the ide is nice, it's not really comparable to vs. :/
Lyzolda, the Blood Witch | Maga, Traitor to Mortals | Mayael the Anima | Rafiq of the Many | Rhys the Redeemed
Sasaya, Oorochi Ascendant | Sygg, River Cutthroat | Thada Adel, Acquisitor | Ulamog, the Infinite Gyre
I was looking into this before because someone had done a really minor version of this, but I just flat gave up on it.
I'll throw my full support at this project, if you can do this you have no idea how helpful this'll be for those of us who are seriously pursuing creating custom sets. I'd seriously donate to a Paypal fund if this project gets going if it incentivizes it more.
Also while the Cockatrice dev is here.
Any chance we could see a faux-draft mode built into the Cockatrice client? The set information is already there, having more information provided so that the client can randomize boosters and let players draft would go miles towards making drafting on cockatrice easier (at the moment we go to external sites, draft, put the drafted cards into decks on cockatrice, then join games and manually match ourselves up)
Example:
-Each card stored in data would also have to have a rarity value assigned, and the full set dataset would have to have a pack distribution notation at the top so the program understands how many cards per pack of each rarity, etc. If you allowed cards to be set as multiple rarities, it could also mean we could bypass issues with sets with weird distributions (INN/DKA for example, you could set all DFC's as both their normal rarity and DFC, then the final card in the pack is always from the DFC rarity, etc.) and would put the work in the hands of the data creators.
Also I kinda agree with a lot of Vig's notes, I love Cockatrice, but the UI is rather counter-productive at times.
RRR Khorenthos - The Red Block (Feedback needed!) RRR
Max,
I agree with you completely. I think each set should reside in its own database file. The only tricky part is dealing with cards that exist in multiple sets, ie. "Forest." I believe the proper way to deal with that is to have Cockatrice detect multiple instances when it loads a new database and deal with it's internal memory structure accordingly.
Now I want to talk about what ryzorz said. I strongly believe that the correct way to deal with custom sets data is not to have Cockatrice host the data directly. If we establish a standard file format for set representation then all the various programs could speak the same language! I'm proposing that we establish a standard representation of a card set and set up so that users can create sets somewhere universal. As ryzorz says Google drive and dropbox would work but I'd prefer something independent. Let's generate some discussion here. As for the format I currently favor the way MWS stores cards because it's human readable and really easy to parse, but I don't really care as long as it makes sense. Also, I strongly believe that card images should be stored separately from the data. There are a number of details that must be considered
Sure I do, that's why I started this thread. I'm working seriously on two sets and that's what go me started on all this. The feedback I've gotten on my cards by playing a few games in cockatrice has been great.
I actually appreciate this very much. Perhaps when I publicly release the converter (couple days) I'll drop a link for donations. Anything at all would be very much appreciated.
Guys, there are a lot of great suggestions regarding improvements to Cockatrice but let's stay on topic. We're not here to redesign Cockatrice, we're here to get custom sets working Cockatrice has a message board, and I'm sure the developer would love it to be used!
EDIT: I am so happy that this idea is generating interest. I love this game and I love the open source software community.
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
Sure, that makes sense too.
Agreed.
Glad we all agree on how this should work.
I already requested that you stop posting this stuff here, and you just pointed out that it "doesn't really belong here". Here's a link to the Cockatrice message board. Documentation is really important and I hope you'll post this useful information that you have in the proper place
Max,
Can we make a gameplan for breaking out sets into multiple database files. I imagine this is a really easy job in Cockatrice. If you don't have time I'll do it but I'd ask for a five minute introduction to the code base via gchat or something. I'd like to get at least that going as soon as possible so we can move on to building a public standardized database of card sets. With that in place, plus my converter which will be released any day now (as soon as my correspondent gets back to me with feedback) we'll have a reasonable work flow for people to play with their custom sets! I'm really excited!
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
Testing in this case just means that you would have a custom set in MSE, and use my program to export it to Cockatrice by following the instructions that come with the program. Basically I would like to get feedback from one or two people so I can make improvements before posting it for general use.
Thanks ^^
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
I'm moderately experienced with python. I haven't used it a ton, but I know enough to get by, and I've got plenty experience with other languages.
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE
The converter is really close to done. We're just working through some corner cases and bringing it up to user friendliness. There's a little issue that came up that needs to be dealt with now with thoughts directed toward our final goal of a standardized set repository.
The basic issue is how to specify things like card names. Should we require ASCII or allow unicode? If unicode which encoding (probably UTF-8)?
Annoyingly, Cockatrice uses unicode characters in rules text but replaces the Ae symbol in things like Aether Adept with ASCII characters "AE". This inconsistency really bothers me and I personally think we should not tie our standard to Cockatrice; we should go for Unicode, annoyances of alphabetization be damned. In this case, the exporter would internally use unicode strings and make replacements as necessary when exporting to the various applications, 'cuz that's kind of the point of the converter.
The one problem with that is that if I import stuff from Cockatrice I'm going to have a card called "AEther Adept". If I have a reprint in my custom set, it will be called "Aether Adept" (with a unicode Ae). Therefore, collision detection won't work. I think a reasonable solution is to have each application's import routine supply a list of replacements, eg. for Cockatrice ASCII "AE" goes to unicode Ae.
I'd like any feedback and opinions. I don't want to make any stupid decisions early on.
P.S. As soon as we release the converter we should steer this thread back to making the universal repository and use the Source Forge project for development of the converter program.
Come help develop the color yellow in MtG
We're making online play with custom sets easy!
Tutorials
custom mana symbols in MSE
custom card frames in MSE