Magic Set Editor for Charm Cards and sundry other powers

For sharing official, 3rd party and homebrew tools and resources for helping run games
Post Reply
User avatar
Tikor
Posts: 46
Joined: Sat May 01, 2021 3:39 am
Has thanked: 10 times
Been thanked: 45 times

Magic Set Editor is a program used primarily to make custom Magic: The Gathering cards.
 
Where can you get it?  The mediafire mirror, here.

What else does it do besides MTG cards? Uses (customizable) templates to make custom cards.
 
Why would you want to? Exalted Charm cards that aren't Solar. As well as Anima powers, Evocations, spells, ect. Ect. Check out my physical tips and tricks for visual aids with Exalted post.

Here's a Solar Anima power: 
 Image
 Here are some of my Dragon-Blooded results (I give each player a symbols explainer card, too):
ImageImageImageImageImageImageImage
 (I switched to landscape because Charm names are loooong)

 
How does MSE make custom cards?  Now we're into the meat of the post.
 
First, an admission, that I don't understand everything going on under the hood in this process. I've got a buddy that passed me some code, and I've been modifying it ever since.
 
Once you've downloaded and launched MSE you'll see something like this (I may be using an outdated version):

Image
 Where you can start a new set and select a template:

Image

Where you can enter words into the various boxes of the template, and load images, etc. etc.

Image

I won't go too far into MSE's standard features, as they are pretty point and click, familiar to anyone who's wrangled text boxes in powerpoint. I want to go back to the template step, where you might have seen a custom entry: Age of Sorrows:

 
MSE knows that I have defined custom templates because I've placed folders with the necessary files in the program folder structure here:
 
(wherever you installed it) \Magic Set Editor 2\data
 
I named mine “aos.mse-game”, “aos-charms.mse-style”, and “aos-symbols.mse-symbol-font” and while I'm pretty sure this has a degree of customization, the “mse-” stuff seems important.
 
So, what's in these folders?
 
aos.mse-game: the setup
icon.png - this is just the image shown in the template select screen all the way to the right.
game – this is some setup code which I've included in this spoiler below (no extension. The below filenames without extensions are intentionally labeled as such.)
 
aos-charms.mse-style: the style of the template
The “style” file has all the code that interacts with the “game” code, and looks like the code snippet below.
 
Also, include all the pictures referenced by the above “style” code in this folder.
 
aos-symbols.mse-symbol-font: fancy word-to-picture substitutions
This is a handy feature for magic players that want to use 'blue mana' and '3 colorless mana' as symbols instead of words (which is very handy for conserving card real-estate). I use the feature to sub in elemental symbols, some keywords, etc. To do that, the relevant bit of code is in a file named “symbol-font” looks like the final code snippet.
 
Also, include all the pictures referenced by the above “symbol-font” code in this folder.

 

Code: Select all

#game
mse version: 0.3.6
short name: aos
full name: Age of Sorrows
installer group: Age of Sorrows/Game Files
icon: icon.png
position hint: 13

version: 2008-5-19

#By: Arkaal, minor modifications by Tikor
############################################################## Functions & filters
## Copied and Pasted from vs.mse-game, with a few modifications
# General functions
init script:
	text_filter := 
		# step 1 : remove all automatic tags
		tag_remove_rule(tag: "<sym-auto>") +
		tag_remove_rule(tag: "<i-auto>")   +
		replace_rule(
			match: "~|~THIS~|CARDNAME",
			in_context: "(^|[[:space:]]|\\()<match>",
			replace: "<atom-cardname></atom-cardname>"
			) +
		# step 2 : fill in atom fields
		tag_contents_rule(
			tag: "<atom-cardname>",
			contents: { if card.name=="" then "CARDNAME" else card.name }
			)	
	bold_filter := 
		# step 1 : remove italic tags
		tag_remove_rule(tag: "<b>") +
		# step 2 : surround by <i> tags
		{ "<b>" + input + "</b>" };
	
############################################################## Set fields
set field:
	type: text
	name: title
	description: This information will not appear on the card.
set field:
	type: text
	name: code
	description: Recommended only 3 Capital digits. Will appear before card number. ex: LOB-XX101
set field:
	type: text
	name: language
	description: Recommended 2 - 3 Captital digits. Will appear before the card number, after the code. ex: XXX-EN101
set field:
	type: text
	name: description
	multi line: true
	description: This information will not appear on the card.
set field:
	type: text
	name: edition
	description: Editting this will set 1 edition for all the cards and will appear in the edition bar below the picture. ex-> LIMITED EDITION
set field:
	type: text
	name: copyright
	description: Copyright information. This will not appear on the card.
set field:
	type: text
	name: designer
	description: Designer(s) of the set.
set field:
	type: text
	name: date
	description: Date
set field:
	type: text
	name: players
	description: Players
set field:
	type: boolean
	name: Extended Card Info
	initial: no
	description: Show set code and set language with card number
############################################################## Card fields
############################# Background stuff
card field:
	type: choice
	name: card type
	choice: card
	default: "card"
	editable: false
	
card field:
	type: choice
	name: card sub type
	choice: card
	default: "card"
	editable: false
############################# Name line
card field:
	type: text
	name: name
	identifying: true
	show statistics: false
	card list visible: true
	card list name: Name
	card list column: 2
	card list width: 350
	description: The name of the card
card field:
	type: text
	name: type
	
card field:
	type: text
	name: health
	card list visible: true
	card list name: Health
	card list column: 3
	card list width: 50
card field:
	type: text
	name: defense
	card list visible: true
	card list name: DV
	card list column: 4
	card list width: 25
card field:
	type: text
	name: move
	card list visible: true
	card list name: Move
	card list column: 5
	card list width: 25
card field:
	type: text
	name: fate
	card list visible: true
	card list name: Fate
	card list column: 1
	card list width: 35
	
card field:
	type: text
	name: casting_cost
	card list visible: true
	card list name: casting_cost
	card list column: 1
	card list width: 35
############################# Image
card field:
	type: image
	name: image
	show statistics: false
############################# power texts

card field:
	type: text
	name: power count
	editable: false
	show statistics: false

############################# power 1
card field:
	type: text
	name: power cost 1
	show statistics: false

card field:
	type: text
	name: power title 1
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 1
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 1
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_1, separator: ":", field2: card.power_line_1)

card field:
	type: text
	name: power detail 1
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false

############################# power 2
card field:
	type: text
	name: power cost 2
	show statistics: false

card field:
	type: text
	name: power title 2
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 2
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 2
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_2, separator: ":", field2: card.power_line_2)

card field:
	type: text
	name: power detail 2
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false

############################# power 3
card field:
	type: text
	name: power cost 3
	show statistics: false

card field:
	type: text
	name: power title 3
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 3
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 3
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_3, separator: ":", field2: card.power_line_3)

card field:
	type: text
	name: power detail 3
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false

############################# power 4
card field:
	type: text
	name: power cost 4
	show statistics: false

card field:
	type: text
	name: power title 4
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 4
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 4
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_4, separator: ":", field2: card.power_line_4)

card field:
	type: text
	name: power detail 4
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false
		

############################# power 5
card field:
	type: text
	name: power cost 5
	show statistics: false

card field:
	type: text
	name: power title 5
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 5
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 5
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_5, separator: ":", field2: card.power_line_5)

card field:
	type: text
	name: power detail 5
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false
		

############################# power 6
card field:
	type: text
	name: power cost 6
	show statistics: false

card field:
	type: text
	name: power title 6
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 6
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 6
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_6, separator: ":", field2: card.power_line_6)

card field:
	type: text
	name: power detail 6
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false
		


############################# power 7
card field:
	type: text
	name: power cost 7
	show statistics: false

card field:
	type: text
	name: power title 7
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 7
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 7
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_7, separator: ":", field2: card.power_line_7)

card field:
	type: text
	name: power detail 7
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false
		


############################# power 8
card field:
	type: text
	name: power cost 8
	show statistics: false

card field:
	type: text
	name: power title 8
	script: bold_filter(value)
	show statistics: false
	editable: false

card field:
	type: text
	name: power line 8
	show statistics: false
	editable: false
	
card field:
	type: text
	name: power main line 8
	save value: false
	show statistics: false
	script:
		combined_editor(field1: card.power_title_8, separator: ":", field2: card.power_line_8)

card field:
	type: text
	name: power detail 8
	multi line: true
	script: text_filter(input: value, card_name: card.name)
	show statistics: false


############################# Passive Powers

card field:
	type: text
	name: passive text 1
	show statistics: false
card field:
	type: text
	name: passive text 2
	show statistics: false
card field:
	type: text
	name: passive text 3
	show statistics: false
	
############################# Copyright stuff
card field:
	type: text
	name: gamecode
card field:
	type: text
	name: copyright
	default: set.copyright
############################ Automatic Text Replacements
auto replace:
	match: --
	replace: —
auto replace:
	# note the spaces
	match:
		 - 
	replace:
		 — 
############################# Keywords
has keywords: false

Code: Select all

#style
mse version: 0.3.6
game: aos
short name: Charm
full name: Charm
installer group: Age of Sorrows/Event
icon: sample.png
position hint: 1

version: 2008-5-19
depends on:
	package: aos.mse-game
	version: 2008-5-14

card background: white
card width: 527
card height: 375
card dpi: 300

############################################################## Functions & filters
# General functions
init script:
	top_by_top := {
		if (val <= 74) then 72
		else if (val <= 114) then 112
		else if (val <= 158) then 156 
		else if (val <= 201) then 199 
		else if (val <= 244) then 242 
		else if (val <= 287) then 285 
		else if (val <= 327) then 325 
		#else if (val <= 369) then 367 
		else 999}
	left_by_top := {
		if (val <= 74) then 46
		else if (val <= 114) then 31 
		else if (val <= 158) then 30 
		else if (val <= 201) then 30 
		else if (val <= 244) then 31 
		else if (val <= 287) then 33 
		else if (val <= 327) then 38 
		#else if (val <= 369) then 47 
		else 999}
	width_by_top := {
		if (val <= 74) then 320 - 46
		else if (val <= 114) then 320 - 31 
		else if (val <= 158) then 320 - 30 
		else if (val <= 201) then 320 - 30 
		else if (val <= 244) then 320 - 31 
		else if (val <= 287) then 320 - 33 
		else if (val <= 327) then 320 - 38 
		#else if (val <= 369) then 320 - 47 
		else 0}
	text_box_right := 525
	title_box_height := 30	
	text_box_height := {
		 if (val == "") then 5 
		 else if (contains(val, match:"\n")) then 45
		 else 40
	}
		
		
############################################################## Extra scripts
############################################################## Set info fields
set info style:
	title:
		padding left: 2
		font:
			size: 16
############################################################## Extra style
############################################################## Card fields
card style:
	############################# Background stuff
	card type:
		left:	0
		top:	0
		width:	527
		height:	375
		z index: -2
		render style: image
		choice images:
			card:		charm_card.png
	############################# Name line
	name:
		left: 100
		top : 28
		width: 450
		height: 35
		alignment: middle
		padding bottom: 0
		z index: 2
		font:
			name: MatrixBoldSmallCaps
			size: 20
			color: 
				script: rgb(0,0,0)
	type:
		left: 38
		top : 450
		height: 35
		width: 450
		z index: 2
		alignment: middle
		padding bottom: 0
		font:
			name: MatrixBoldSmallCaps
			size: 19
			
	############################# Image, deleted, no mask needed
	############################# "Powers"

	power detail 1:
		left: 38
		top : 75
		width: 475
		height: 270
		font:
			name: Times New Roman
			italic name: Times New Roman Italic
			size: 22
			scale down to: 14
			color: rgb(0,0,0)
		symbol font:
			name: aos-symbols
			size: 16
			alignment: center middle
		alignment: top left
		z index: 3
		padding left:   6
		padding top:    2
		padding right:  4
		padding bottom: 2
		line height hard: 1.2
		line height line: 1.5
		always symbol: true
		
		
	power detail 2:
		left: 447
		top : 295
		width: 60
		height: 60
		font:
			name: Times New Roman
			italic name: Times New Roman Italic
			size: 22
			scale down to: 14
			color: rgb(0,0,0)
		symbol font:
			name: aos-symbols
			size: 16
			alignment: center middle
		alignment: top left
		z index: 3
		padding left:   6
		padding top:    2
		padding right:  4
		padding bottom: 2
		line height hard: 1.2
		line height line: 1.5
		always symbol: true
		
	power detail 3:
		left: 447
		top : 235
		width: 60
		height: 60
		font:
			name: Times New Roman
			italic name: Times New Roman Italic
			size: 22
			scale down to: 14
			color: rgb(0,0,0)
		symbol font:
			name: aos-symbols
			size: 16
			alignment: center middle
		alignment: top left
		z index: 3
		padding left:   6
		padding top:    2
		padding right:  4
		padding bottom: 2
		line height hard: 1.2
		line height line: 1.5
		always symbol: true
		
	power detail 4:
		left: 447
		top : 175
		width: 60
		height: 60
		font:
			name: Times New Roman
			italic name: Times New Roman Italic
			size: 22
			scale down to: 14
			color: rgb(0,0,0)
		symbol font:
			name: aos-symbols
			size: 16
			alignment: center middle
		alignment: top left
		z index: 3
		padding left:   6
		padding top:    2
		padding right:  4
		padding bottom: 2
		line height hard: 1.2
		line height line: 1.5
		always symbol: true
		
	power detail 5:
		left: 447
		top : 115
		width: 60
		height: 60
		font:
			name: Times New Roman
			italic name: Times New Roman Italic
			size: 22
			scale down to: 14
			color: rgb(0,0,0)
		symbol font:
			name: aos-symbols
			size: 16
			alignment: center middle
		alignment: top left
		z index: 3
		padding left:   6
		padding top:    2
		padding right:  4
		padding bottom: 2
		line height hard: 1.2
		line height line: 1.5
		always symbol: true

Code: Select all

#symbol-font
mse version: 0.3.9
version: 2011-04-18
# Symbol font in the 'popup' style, used for casting costs on modern cards
short name: aos-symbols
installer group: Age of Sorrows/Symbols/Standard
position hint: 002
icon: mote.png

Charm Keywords
#Balanced
symbol:
	code: YINYANG
	image: yinyang.jpg
	image font size: 50
#Perilous
symbol:
	code: PERILOUS
	image: Perilous.png
	image font size: 50
#Mute
symbol:
	code: MUTE
	image: Mute2.png
	image font size: 50
#Simple
symbol:
	code: SIMPLE
	image: Fist2.png
	image font size: 50
#Element Varies
symbol:
	code: VARIES
	image: QuestionCircle.png
	image font size: 50
#Scenelong
symbol:
	code: SC_ENELONG
	image: Scenelong.png
	image font size: 50

 
What all have you made in card form for Exalted, Tikor? I honestly just use it as-needed for Charms my player characters actually know. As such, I have no complete Charm sets, just scattered bits of everything.
 
What else, non-Exalted? I do some custom boardgame prototyping, and it felt obligatory to use it to make an actual set of Magic: The Gathering cards. It came in handy when making the Sidereals Charm cascades, because I'm a novice at actual graphic design and I've already climbed this particular learning curve.
 
That's the tea on MSE.
 
Future posts: Tips and tricks for visual aids with Exalted – Roll20
My AO3 Exalted fanfiction
Sidereals: Charm Jumpstart Sidereals: Charm Cascades
Alchemical: Charm Jumpstart Alchemical: Charm Cascades

Tags:
User avatar
andrix
Site Admin
Posts: 537
Joined: Mon Mar 29, 2021 7:31 pm
Has thanked: 425 times
Been thanked: 349 times
Contact:

This is another of those things I really wish I was able to give more likes to than I can already. The background of graphic design shows through in how you approach stuff.

I'm moving this to the Resources forum because like a few other things it really deserves to be able to sit there and have people looking for tools for running games come across it, or at least the idea is to archive that stuff there.

I'm going to make sure to post a link on your other thread however to make sure there's multiple places it's getting attention.
Sword of Creation Site Admin
Please consider giving input on the feedback forums about things you like or want changed
If you have any issues feel free to message me
User avatar
Tikor
Posts: 46
Joined: Sat May 01, 2021 3:39 am
Has thanked: 10 times
Been thanked: 45 times

Thanks, admin!
My AO3 Exalted fanfiction
Sidereals: Charm Jumpstart Sidereals: Charm Cascades
Alchemical: Charm Jumpstart Alchemical: Charm Cascades
Post Reply