mse version: 0.3.7
short name: Yu-Gi-Oh!
installer group: Yugioh/Game Files
icon: card-back.png
position hint: 4

version: 2008-11-13

############################################################## Functions & filters
## Copied and Pasted from vs.mse-game, with a few modifications
# General functions
init script:
	# the rule text filter
	#  - adds continuous symbols
	#  - adds counter symbols
	#  - adds equipment symbols
	#  - adds field symbols
	#  - adds quickplay symbols
	#  - adds ritual symbols
	#  - adds level symbols
	#  - adds infinity symbols
	#  - makes text in parentheses italic
	text_filter := 
		# step 1 : remove all automatic tags
		tag_remove_rule(tag: "<sym-auto>") +
		# step 2 : expand shortcut words ~ and CARDNAME
		replace_rule(
			match: "~|~THIS~|CARDNAME",
			in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
			replace: "<atom-cardname></atom-cardname>"
			) +
		# step 3 : fill in the cardname atom field
		tag_contents_rule(
			tag: "<atom-cardname>",
			contents: { if card.name=="" then "CARDNAME" else card.name }
			) +
		# step 4 : symbols
		replace_rule(
			match: "[|@|*|?|]",
			replace: "<sym-auto>&</sym-auto>" );
	level_filter := 
		# step 1 : remove all automatic tags
		tag_remove_rule(tag: "<sym-auto>") +
		# step 2 : symbols
		replace_rule(
			match: "[|%|!|+|&|$|#|*|^|]",
			replace: "<sym-auto>&</sym-auto>" );
	a_and_d_filter := 
		# step 1 : remove all automatic tags
		tag_remove_rule(tag: "<sym-auto>") +
		# step 2 : infinity
		replace_rule(
			match: "@",
			replace: "<sym-auto>&</sym-auto>" ) +
		# step 3 : question mark
		replace_rule(
			match: "\\?",
			replace: "<sym-auto>&</sym-auto>" );
	copyright_filter :=
		# step 1 : trademark symbol
		replace_rule(
			match: "TM",
			replace: "™") +
		# step 2 : copyright symbol
		replace_rule(
			match: "CR|\\(C\\)",
			replace: "©")
	
	# the flavor text filter
	flavor_text_filter :=
		# step 1 : remove italic tags
		tag_remove_rule(tag: "<i-flavor>") +
		# step 2 : surround by <i> tags
		{ "<i-flavor>" + input + "</i-flavor>" };
	
	type_over_list := replace_rule(match:" ?-$", replace:"")
	
	monster_type_filter :=
		tag_remove_rule(tag: "<word-list-") +
		type_over_list +
		{ "<word-list-monster>{input}</word-list-monster>" }
	
	space_to_wltags := replace_rule(match:"( +|<soft> </soft>)",
	                                replace:{"</word-list-{list_type}>{_1}<word-list-{list_type}>"})
	
	card_class_filter :=
		tag_remove_rule(tag: "<word-list-") +
		type_over_list +
		{ "<word-list-card>{input}</word-list-card>" }
	
	# Determine type of card
	card_type := {
		if	card.attribute	== "spell"								then "spell card"
		else if	contains(card.level, match:"Spell Card")						then "spell card"
		else if card.attribute	== "trap"								then "trap card"
		else if	contains(card.level, match:"Trap Card")							then "trap card"
		else if card.type1	== "<word-list-monster>Divine-Beast</word-list-monster>"		then "obelisk"
		else if card.type1	== "<word-list-monster>Legendary Dragon</word-list-monster>"		then "legendary dragons"
		else if	contains(card.type2, match:"Fusion")							then "fusion monster"
		else if	contains(card.type2, match:"Ritual")							then "ritual monster"
		else if	contains(card.type2, match:"Dark Synchro")						then "dark synchro monster"
		else if	contains(card.type2, match:"Dark Tuner")						then "effect monster"
		else if	contains(card.type2, match:"Synchro")							then "synchro monster"
		else if	contains(card.type2, match:"Effect")							then "effect monster"
		else if	contains(card.type2, match:"Spirit")							then "effect monster"
		else if	contains(card.type2, match:"Toon")							then "effect monster"
		else if	contains(card.type2, match:"Tuner")							then "effect monster"
		else if	contains(card.type2, match:"Union")							then "effect monster"
		else                                         	 						     "normal monster"
	}
	# Default 'attribute' of card
	attribute := {
		if      is_spell_card() then "Spell"
		else if is_trap_card()  then "Trap"
		else                         "none"
	}
	# Default foil for a card
	foil := {
		if	card.rarity == "super rare"	then "holo image"
		else if card.rarity == "ultra rare"	then "holo image"
		else if card.rarity == "secret rare"	then "secret holo image"
		else if card.rarity == "ultimate rare"	then "holo image"
		else if card.rarity == "parallel rare"	then "parallel holo image"
		else if card.rarity == "gold tech"	then "gold tech holo image"
		else if card.rarity == "promo"		then "secret holo image"
		else					     "none"
	}
	
	############### Type of card
	
	nm_ext_querry := {
		if set.gods_have_effects == "no" then is_normal_monster_extended(value)
		else is_normal_monster(value)
	}
	is_nmonster := {
		card.card_type == "spell card" or
	        card.card_type == "trap card"
	}
	is_monster := {
		card.card_type == "normal monster" or
	        card.card_type == "effect monster" or
	        card.card_type == "ritual monster" or
		card.card_type == "dark synchro monster" or
	        card.card_type == "synchro monster" or
	        card.card_type == "fusion monster" or
	        card.card_type == "token monster" or
		card.card_type == "obelisk"        or
		card.card_type == "slifer"	   or
		card.card_type == "ra"		   or
		card.card_type == "legendary dragons"
	}
	is_normal_monster_extended := {
		card.card_type == "normal monster" or
		card.card_type == "obelisk"        or
		card.card_type == "slifer"	   or
		card.card_type == "ra"		   or
		card.card_type == "legendary dragons"
	}
	is_normal_monster := {
		card.card_type == "normal monster"
	}
	is_spell_card := {
		card.card_type == "spell card"	or
		card.attribute == "spell"	or
		card.level     == "Spell"
	}
	is_trap_card := {
	        card.card_type == "trap card"	or
		card.attribute == "trap"	or
		card.level     == "Trap"
	}
	############### Determine Card Position
	
	type_sort := {
		type := card.card_type
		if chosen(choice:"normal monster", type) then "A"
		else if chosen(choice:"ra", type) then "B"
		else if chosen(choice:"effect monster", type) then "C"
		else if chosen(choice:"slifer", type) then "D"
		else if chosen(choice:"ritual monster", type) then "E"
		else if chosen(choice:"obelisk", type) then "F"
		else if chosen(choice:"fusion monster", type) then "G"
		else if chosen(choice:"synchro monster", type) then "H"
		else if chosen(choice:"dark synchro monster", type) then "I"
		else if chosen(choice:"token monster", type) then "J"
		else if chosen(choice:"legendary dragons", type) then "K"
		else if chosen(choice:"spell card", type) then "L"
		else if chosen(choice:"trap card", type) then "M"
		else "N"
	}
	
	pos_of_card := {
		position(
			of: card
			in: set
			order_by: {
				type_sort() + card.attribute + card.monster_type + card.name
			}) + 1
	}

############################################################## Set fields
set field:
	type: info
	name: Set Information
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: boolean
	name: gods have effects
	description: Should god cards have effects?
	initial: yes
############################# Default style
default set style:
	title:
		padding left: 2
		font:
			size: 16
############################################################## Card fields
############################# Background stuff
card field:
	type: choice
	name: card type
	choice: normal monster
	choice: effect monster
	choice: ritual monster
	choice: synchro monster
	choice: dark synchro monster
	choice: fusion monster
	choice: token monster
	choice: obelisk
	choice: slifer
	choice: ra
	choice: legendary dragons
	choice: spell card
	choice: trap card
	default: card_type()
	choice colors cardlist:
		normal monster:	   rgb(120,18,0)
		effect monster:	   rgb(120,18,0)
		ritual monster:	   rgb(26,26,26)
		synchro monster:   rgb(26,26,26)
		dark synchro monster:   rgb(26,26,26)
		fusion monster:	   rgb(26,26,26)
		token monster:	   rgb(120,18,0)
		obelisk:	   rgb(26,26,26)
		slifer:		   rgb(26,26,26)
		ra:		   rgb(26,26,26)
		legendary dragons: rgb(26,26,26)
		spell card:	   rgb(80,80,80)
		trap card:	   rgb(30,110,0)
card field:
	type: choice
	name: foils
	editable: false
	choice: none
	choice: holo image
	choice: secret holo image
	choice: parallel holo image
	choice: gold tech holo image
	default: foil()
############################# Name line
card field:
	type: text
	name: name
	identifying: true
	show statistics: false
	card list visible: true
	card list column: 1
card field:
	type: choice
	name: attribute
	choice: none
	choice: earth
	choice: water
	choice: fire
	choice: wind
	choice: light
	choice: dark
	choice: divine
	choice: spell
	choice: trap
	default: attribute()
	card list visible: true
	card list column: 2
card field:
	type: text
	name: level
	description: `=] * = star, % = continuous, ! = counter, + = equipment, & = field, $ = quickplay, # = ritual
	script: level_filter(value)

############################# Image
card field:
	type: image
	name: image
	show statistics: false
############################# Card type
card field:
	type: text
	name: type1
	script: monster_type_filter(value)
	default: " "
	editable: false
card field:
	type: text
	name: separator
	script: if nm_ext_querry(value) then "  " else " / "
	show statistics: false
	editable: false
card field:
	type: text
	name: type2
	script: card_class_filter(value)
	editable: false
card field:
	type: text
	name: monster type
	script:
		# Either just monster, monster / type1
		combined_editor(
			field1: card.type1,
			separator: card.separator,
			field2: card.type2,
			soft_before_empty: true,
			hide_when_empty: true,
			type_over1: " /",
			type_over2: "/"
		)
	card list visible: true
	card list column: 3
############################# Edition and Card ID
card field:
	type: text
	name: number
	script:
		set.code
		+ "-" +
		set.language +
		if pos_of_card()<=9 then "00" + pos_of_card(value) else
		if pos_of_card()>=9 and pos_of_card()<=99 then "0" + pos_of_card(value) else
		"" + pos_of_card(value)
	card list visible: true
	card list column: 6
	card list width: 55
	card list name: #
	editable: false
	save value: false
	show statistics: false
card field:
	type: text
	name: edition
	default: set.edition
	show statistics: false
############################# Text box
card field:
	type: text
	name: rules
	script: text_filter(value)
	editable: false
	show statistics: false
card field:
	type: text
	name: rule text
	multi line: true
	save value: true
	show statistics: false
	script:
		if nm_ext_querry(value) then flavor_text_filter(value)
		else text_filter(value)
	default: card.rules
############################# Attack/Defense
card field:
	type: text
	name: attack
	save value: true
	script: a_and_d_filter(value)
	card list visible: true
	card list column: 4
	card list width: 33
	card list name: ATK
card field:
	type: text
	name: defense
	save value: true
	script: a_and_d_filter(value)
	card list visible: true
	card list column: 5
	card list width: 33
	card list name: DEF

############################# Copyright stuff
card field:
	type: text
	name: gamecode
	show statistics: false
card field:
	type: choice
	name: rarity
	show statistics: true
	choice: common
	choice: rare
	choice: super rare
	choice: ultra rare
	choice: secret rare
	choice: ultimate rare
	choice: parallel rare
	choice: gold tech
	choice: promo
	card list visible: true
	card list column: 7
card field:
	type: choice
	name: corner foil
	choice: stamp
	editable: false
card field:
	type: text
	name: copyright
	default: set.copyright
	script: copyright_filter(value)
	show statistics: false

############################################################## Word lists

word list:
	name: monster
	word: Aqua
	word: Beast
	word: Beast-Warrior
	word: Dinosaur
	word: Divine-Beast
	word: Dragon
	word: Fairy
	word: Fiend
	word: Fish
	word: Insect
	word: Legendary Dragon
	word: Machine
	word: Plant
	word: Pyro
	word: Psychic
	word: Reptile
	word: Rock
	word: Sea Serpent
	word: Spellcaster
	word: Thunder
	word: Warrior
	word: Winged Beast
	word: Zombie
word list:
	name: card
	word: Dark Synchro
	word: Dark Tuner
	word: Effect
	word: Fusion
	word: Ritual
	word: Spirit
	word: Synchro
	word: Toon
	word: Tuner
	word: Union
############################################################## Card pack items
pack item:
	name: rare
	filter: card.rarity != "common"
pack item:
	name: common
	filter: card.rarity == "common"
pack item:
	name: gold
	filter: card.rarity == "gold tech"
pack item:
	name: card
	filter: card.number != ""
############################################################## Card packs
pack type:
	name: booster pack
	item:
		name: rare
		amount: 1
	item:
		name: common
		amount: 8
pack type:
	name: champion pack
	item:
		name: rare
		amount: 1
	item:
		name: common
		amount: 2
pack type:
	name: duelist pack
	item:
		name: rare
		amount: 1
	item:
		name: common
		amount: 5
pack type:
	name: gold series
	item:
		name: gold
		amount: 3
	item:
		name: common
		amount: 22
pack type:
	name: movie pack
	item:
		name: rare
		amount: 3
	item:
		name: common
		amount: 5
pack type:
	name: premium pack
	item:
		name: rare
		amount: 5
pack type:
	name: tournament pack
	item:
		name: card
		amount: 3
pack type:
	name: additional rare
	item:
		name: rare
pack type:
	name: additional common
	item:
		name: common
pack type:
	name: additional gold
	item:
		name: gold
pack type:
	name: additional card
	item:
		name: card
