Initial commit
189
data/space.mse-game/auto_replace
Normal file
@@ -0,0 +1,189 @@
|
||||
############################################################## Auto replace
|
||||
auto replace:
|
||||
match: (C)
|
||||
replace: ©
|
||||
auto replace:
|
||||
match: AE
|
||||
replace: Æ
|
||||
whole word: false
|
||||
auto replace:
|
||||
match: TM
|
||||
replace: ™
|
||||
whole word: false
|
||||
auto replace:
|
||||
match: --
|
||||
replace: —
|
||||
auto replace:
|
||||
# note the spaces
|
||||
match:
|
||||
-
|
||||
replace:
|
||||
—
|
||||
auto replace:
|
||||
match: CIP
|
||||
replace: comes into play
|
||||
auto replace:
|
||||
match: AAA
|
||||
replace: as an additional cost to play
|
||||
auto replace:
|
||||
match: @
|
||||
replace: LEGENDNAME
|
||||
auto replace:
|
||||
match: ~
|
||||
replace: CARDNAME
|
||||
auto replace:
|
||||
match: '
|
||||
replace: ’
|
||||
auto replace:
|
||||
match: Land
|
||||
replace: Resource
|
||||
auto replace:
|
||||
match: land
|
||||
replace: resource
|
||||
auto replace:
|
||||
match: Artifact
|
||||
replace: Device
|
||||
auto replace:
|
||||
match: artifact
|
||||
replace: device
|
||||
auto replace:
|
||||
match: Plains
|
||||
replace: Lux
|
||||
auto replace:
|
||||
match: Island
|
||||
replace: Gelidine
|
||||
auto replace:
|
||||
match: Swamp
|
||||
replace: Necroleum
|
||||
auto replace:
|
||||
match: Mountain
|
||||
replace: Carbos
|
||||
auto replace:
|
||||
match: Forest
|
||||
replace: Biolute
|
||||
auto replace:
|
||||
match: attack
|
||||
replace: assault
|
||||
auto replace:
|
||||
match: combat
|
||||
replace: assault
|
||||
auto replace:
|
||||
match: deal
|
||||
replace: inflict
|
||||
whole word: false
|
||||
auto replace:
|
||||
match: Creature
|
||||
replace: Unit
|
||||
auto replace:
|
||||
match: creature
|
||||
replace: unit
|
||||
auto replace:
|
||||
match: Instant
|
||||
replace: Tactic
|
||||
auto replace:
|
||||
match: instant
|
||||
replace: tactic
|
||||
auto replace:
|
||||
match: Sorcery
|
||||
replace: strategy
|
||||
auto replace:
|
||||
match: sorcery
|
||||
replace: strategy
|
||||
auto replace:
|
||||
match: Counter
|
||||
replace: Disrupt
|
||||
auto replace:
|
||||
match: counter
|
||||
replace: disrupt
|
||||
auto replace:
|
||||
match: spell
|
||||
replace: action
|
||||
auto replace:
|
||||
match: library
|
||||
replace: archive
|
||||
auto replace:
|
||||
match: Graveyard
|
||||
replace: Void
|
||||
auto replace:
|
||||
match: graveyard
|
||||
replace: void
|
||||
auto replace:
|
||||
match: Control
|
||||
replace: Command
|
||||
auto replace:
|
||||
match: life
|
||||
replace: control
|
||||
auto replace:
|
||||
match: mana
|
||||
replace: psi
|
||||
auto replace:
|
||||
match: destroyed
|
||||
replace: annihilated
|
||||
auto replace:
|
||||
match: destroy
|
||||
replace: annihilate
|
||||
auto replace:
|
||||
match: Enchantment
|
||||
replace: Augment
|
||||
auto replace:
|
||||
match: enchantment
|
||||
replace: augment
|
||||
auto replace:
|
||||
match: enchanted
|
||||
replace: modified
|
||||
auto replace:
|
||||
match: enchanting
|
||||
replace: modifying
|
||||
auto replace:
|
||||
match: Aura
|
||||
replace: Graft
|
||||
auto replace:
|
||||
match: blocker
|
||||
replace: interceptor
|
||||
auto replace:
|
||||
match: block
|
||||
replace: intercept
|
||||
whole word: false
|
||||
auto replace:
|
||||
match: sacrificed
|
||||
replace: forfeited
|
||||
auto replace:
|
||||
match: Sacrifice
|
||||
replace: Forfeit
|
||||
auto replace:
|
||||
match: sacrifice
|
||||
replace: forfeit
|
||||
auto replace:
|
||||
match: white
|
||||
replace: crystal
|
||||
auto replace:
|
||||
match: blue
|
||||
replace: cryo
|
||||
auto replace:
|
||||
match: black
|
||||
replace: shadow
|
||||
auto replace:
|
||||
match: red
|
||||
replace: pyre
|
||||
auto replace:
|
||||
match: green
|
||||
replace: xeno
|
||||
auto replace:
|
||||
match: regenerated
|
||||
replace: shielded
|
||||
auto replace:
|
||||
match: pool
|
||||
replace: cache
|
||||
auto replace:
|
||||
match: Planeswalker
|
||||
replace: Warlord
|
||||
auto replace:
|
||||
match: planeswalker
|
||||
replace: warlord
|
||||
auto replace:
|
||||
match: colored
|
||||
replace: aligned
|
||||
whole word: false
|
||||
auto replace:
|
||||
match: color
|
||||
replace: alignment
|
||||
BIN
data/space.mse-game/card-back.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
249
data/space.mse-game/card_fields
Normal file
@@ -0,0 +1,249 @@
|
||||
############################################################## Card fields
|
||||
############################# Automatic fields
|
||||
card field:
|
||||
type: text
|
||||
name: full name
|
||||
save value: false
|
||||
show statistics: false
|
||||
editable: false
|
||||
card list visible: true
|
||||
card list name: Name
|
||||
card list column: 1
|
||||
card list width: 150
|
||||
description: The name of the card
|
||||
script: card.name
|
||||
############################# Background stuff
|
||||
card field:
|
||||
type: color
|
||||
name: border color
|
||||
default: set.border_color
|
||||
choice:
|
||||
name: black
|
||||
color: rgb(0,0,0)
|
||||
choice:
|
||||
name: white
|
||||
color: rgb(255,255,255)
|
||||
choice:
|
||||
name: silver
|
||||
color: rgb(128,128,128)
|
||||
choice:
|
||||
name: gold
|
||||
color: rgb(200,180,0)
|
||||
show statistics: false
|
||||
description: The border of the card; can be any solid color.
|
||||
card field:
|
||||
type: multiple choice
|
||||
name: card color
|
||||
empty choice: colorless
|
||||
choice: crystal
|
||||
choice: cryo
|
||||
choice: shadow
|
||||
choice: pyre
|
||||
choice:
|
||||
name: xeno
|
||||
line below: true
|
||||
choice: device
|
||||
choice: resource
|
||||
choice: multicolor
|
||||
choice:
|
||||
name: hybrid
|
||||
enabled: { card_color_color_count(card.card_color) >= 2 }
|
||||
line below: true
|
||||
choice:
|
||||
name: horizontal
|
||||
enabled: { card_color_color_count(card.card_color) >= 2 }
|
||||
type: radio
|
||||
choice:
|
||||
name: vertical
|
||||
enabled: { card_color_color_count(card.card_color) >= 2 }
|
||||
type: radio
|
||||
choice:
|
||||
name: radial
|
||||
enabled: { card_color_color_count(card.card_color) >= 2 }
|
||||
type: radio
|
||||
choice:
|
||||
name: overlay
|
||||
enabled: { card_color_color_count(card.card_color) == 2 and chosen(choice:"hybrid",card.card_color) }
|
||||
type: radio
|
||||
choice:
|
||||
name: reversed
|
||||
enabled: { card_color_color_count(card.card_color) >= 2 and not chosen(choice:"overlay",card.card_color) }
|
||||
script: card_color_filter(value)
|
||||
default: card_color(casting_cost: card.casting_cost, rules_text: card.rule_text, type: card.super_type, watermark: card.watermark, card_name: card.name)
|
||||
show statistics: false
|
||||
description: The frame of the card, used to indicate card color.
|
||||
############################# Name line
|
||||
card field:
|
||||
type: text
|
||||
name: name
|
||||
card list visible: false
|
||||
identifying: true
|
||||
show statistics: false
|
||||
description: The name of the card
|
||||
card field:
|
||||
type: text
|
||||
name: casting cost
|
||||
icon: stats/casting_cost.png
|
||||
position hint: 1
|
||||
script: psi_filter(value)
|
||||
card list visible: true
|
||||
card list column: 2
|
||||
card list alignment: right
|
||||
card list width: 50
|
||||
card list name: CC
|
||||
description: The casting cost of the card
|
||||
############################# Image
|
||||
card field:
|
||||
type: image
|
||||
name: image
|
||||
show statistics: false
|
||||
description: The image of the card
|
||||
############################# Card type
|
||||
card field:
|
||||
type: text
|
||||
name: super type
|
||||
icon: stats/card_type.png
|
||||
position hint: 30
|
||||
editable: false
|
||||
script: super_type_filter(value)
|
||||
card field:
|
||||
type: text
|
||||
name: sub type
|
||||
icon: stats/creature_type.png
|
||||
position hint: 31
|
||||
script: sub_type_filter(value, type:card.super_type)
|
||||
editable: false
|
||||
card field:
|
||||
type: text
|
||||
name: type
|
||||
show statistics: false
|
||||
save value: false
|
||||
script:
|
||||
# Either just supertype, or subtype - supertype
|
||||
combined_editor(
|
||||
field1: card.super_type,
|
||||
separator: " — ",
|
||||
field2: card.sub_type,
|
||||
soft_before_empty: true,
|
||||
hide_when_empty: true
|
||||
)
|
||||
card list visible: true
|
||||
card list column:4
|
||||
description: The type of this card, type - to go the sub type
|
||||
card field:
|
||||
type: choice
|
||||
name: rarity
|
||||
icon: stats/rarity.png
|
||||
position hint: 100
|
||||
choice: basic resource
|
||||
choice: common
|
||||
choice: uncommon
|
||||
choice: rare
|
||||
choice: mythic rare
|
||||
choice: special
|
||||
initial: common
|
||||
card list visible: true
|
||||
card list column: 6
|
||||
description: The rarity of the card, to edit the symbol switch to the 'set info' tab
|
||||
choice colors:
|
||||
basic resource: rgb(109,62,39)
|
||||
common: rgb(33,33,33)
|
||||
uncommon: rgb(224,224,224)
|
||||
mythic rare: rgb(202, 49, 35)
|
||||
rare: rgb(255,207,52)
|
||||
special: rgb(190,0,255)
|
||||
############################# Text box
|
||||
card field:
|
||||
type: text
|
||||
name: rule text
|
||||
script: text_filter(input: value, card_name: card.name)
|
||||
show statistics: false
|
||||
multi line: true
|
||||
description: The rules text for the card
|
||||
card field:
|
||||
type: text
|
||||
name: flavor text
|
||||
script: flavor_text_filter(value)
|
||||
show statistics: false
|
||||
multi line: true
|
||||
description: The flavor text for the card
|
||||
card field:
|
||||
type: text
|
||||
name: text
|
||||
multi line: true
|
||||
save value: false
|
||||
show statistics: false
|
||||
script:
|
||||
combined_editor(field1: card.rule_text, separator: "<line>\n</line>", field2: card.flavor_text)
|
||||
description: The rules and flavor text for the card; use up and down arrows to switch
|
||||
############################# Loyalty
|
||||
############################# PT
|
||||
card field:
|
||||
type: text
|
||||
name: power
|
||||
icon: stats/power.png
|
||||
show statistics: false
|
||||
script: type_over_pt(value)
|
||||
description: The power of a unit
|
||||
card field:
|
||||
type: text
|
||||
name: toughness
|
||||
show statistics: false
|
||||
icon: stats/toughness.png
|
||||
description: The toughness of a unit
|
||||
card field:
|
||||
type: text
|
||||
name: pt
|
||||
save value: false
|
||||
script:
|
||||
combined_editor(
|
||||
field1: card.power,
|
||||
separator: "/",
|
||||
field2: card.toughness,
|
||||
soft_before_empty: true,
|
||||
hide_when_empty: true
|
||||
)
|
||||
card list visible: true
|
||||
card list column: 5
|
||||
card list width: 50
|
||||
card list name: P/T
|
||||
description: Power/toughness of a unit
|
||||
show statistics: false
|
||||
############################# Card sorting / numbering
|
||||
card field:
|
||||
type: text
|
||||
name: card number
|
||||
save value: false
|
||||
script: card_number() + "/" + card_count()
|
||||
sort script: rarity_sort() + card.card_number
|
||||
card list visible: true
|
||||
card list column: 10
|
||||
card list width: 50
|
||||
card list name: #
|
||||
card list alignment: right
|
||||
editable: false
|
||||
show statistics: false
|
||||
############################# Copyright stuff
|
||||
card field:
|
||||
type: text
|
||||
name: illustrator
|
||||
icon: stats/illustrator.png
|
||||
position hint: 210
|
||||
default: set.artist
|
||||
description: Illustrator of this card, the default value can be changed on the 'set info' tab
|
||||
card field:
|
||||
type: text
|
||||
name: copyright
|
||||
default: set.copyright
|
||||
show statistics: false
|
||||
card field:
|
||||
type: text
|
||||
name: copyright line
|
||||
save value: false
|
||||
show statistics: false
|
||||
script:
|
||||
if set.automatic_card_numbers then
|
||||
combined_editor(field1: card.copyright, separator: " ", field2: card.card_number)
|
||||
else
|
||||
forward_editor(field: card.copyright)
|
||||
description: Copyright of this card and cardnumber, the default value can be changed on the 'set info' tab
|
||||
47
data/space.mse-game/game
Normal file
@@ -0,0 +1,47 @@
|
||||
mse version: 2.0.0
|
||||
short name: Space
|
||||
full name: Space the Convergence
|
||||
installer group: Space/Game Files
|
||||
icon: card-back.png
|
||||
position hint: 11
|
||||
|
||||
version: 2014-01-25
|
||||
depends on:
|
||||
package: space-blends.mse-include
|
||||
version: 2007-12-19
|
||||
|
||||
#By: Pichoro
|
||||
############################################################## The script
|
||||
|
||||
init script: include file: script
|
||||
|
||||
############################################################## Lots of lists
|
||||
|
||||
include file: card_fields
|
||||
include file: set_fields
|
||||
include file: statistics
|
||||
include file: packs
|
||||
include file: keywords
|
||||
include file: word_lists
|
||||
include file: auto_replace
|
||||
|
||||
############################################################## Other stuff
|
||||
|
||||
card list color script:
|
||||
input := card.card_color
|
||||
if input == "crystal" then rgb(156,130,90)
|
||||
else if input == "cryo" then rgb(0,64,168)
|
||||
else if input == "shadow" then rgb(0,0,0)
|
||||
else if input == "pyre" then rgb(168,0,0)
|
||||
else if input == "xeno" then rgb(0,168,0)
|
||||
else (
|
||||
device := chosen(choice:"device")
|
||||
resource := chosen(choice:"resource")
|
||||
multi := chosen(choice:"multicolor")
|
||||
hybrid := chosen(choice:"hybrid")
|
||||
if resource then rgb(109,62,39) # resource
|
||||
else if multi and input != "device, multicolor" then rgb(130,110,0) # multicolor
|
||||
else if hybrid then rgb(115,0,160) # hybrid
|
||||
else if device then rgb(72,90,100) # device
|
||||
else rgb(119,83,83) # colorless
|
||||
)
|
||||
BIN
data/space.mse-game/icons/number_cards_after.png
Normal file
|
After Width: | Height: | Size: 632 B |
BIN
data/space.mse-game/icons/number_cards_mixed.png
Normal file
|
After Width: | Height: | Size: 613 B |
BIN
data/space.mse-game/icons/number_cards_separate.png
Normal file
|
After Width: | Height: | Size: 628 B |
1263
data/space.mse-game/keywords
Normal file
59
data/space.mse-game/packs
Normal file
@@ -0,0 +1,59 @@
|
||||
############################################################## Card pack items
|
||||
pack type:
|
||||
name: common
|
||||
filter: card.rarity == "common"
|
||||
pack type:
|
||||
name: uncommon
|
||||
filter: card.rarity == "uncommon"
|
||||
pack type:
|
||||
name: rare
|
||||
filter: card.rarity == "rare"
|
||||
pack type:
|
||||
name: special
|
||||
filter: card.rarity == "special"
|
||||
pack type:
|
||||
name: basic land
|
||||
filter: card.rarity == "basic land"
|
||||
select: equal
|
||||
############################################################## Card packs
|
||||
pack type:
|
||||
name: tournament pack
|
||||
item:
|
||||
name: rare
|
||||
amount: 3
|
||||
item:
|
||||
name: uncommon
|
||||
amount: 9
|
||||
item:
|
||||
name: common
|
||||
amount: 33
|
||||
item:
|
||||
name: basic land
|
||||
amount: 30
|
||||
pack type:
|
||||
name: booster pack
|
||||
item:
|
||||
name: rare
|
||||
amount: 1
|
||||
item:
|
||||
name: uncommon
|
||||
amount: 3
|
||||
item:
|
||||
name: common
|
||||
amount: 11
|
||||
pack type:
|
||||
name: additional common
|
||||
item:
|
||||
name: common
|
||||
pack type:
|
||||
name: additional uncommon
|
||||
item:
|
||||
name: uncommon
|
||||
pack type:
|
||||
name: additional rare
|
||||
item:
|
||||
name: rare
|
||||
pack type:
|
||||
name: additional special
|
||||
item:
|
||||
name: special
|
||||
472
data/space.mse-game/script
Normal file
@@ -0,0 +1,472 @@
|
||||
############################################################## Sorting mana symbols
|
||||
# correctly sort a psi symbol (no guild psi)
|
||||
psi_sort := sort_text@(order: "XYZ[0123456789](WUBRG)")
|
||||
# correctly sort guild psi
|
||||
psi_sort_guild := sort_text@(order: "[XYZ01234567890WUBRG/]") +
|
||||
replace@(
|
||||
# No lookbehind :(
|
||||
#match: "(?<!/)(./.|././.|./././.|.[|])(?!/)",
|
||||
match: "./.|././.|./././.|.[|]",
|
||||
in_context: "(^|[^/])<match>($|[^/])",
|
||||
replace: {sort_text(order:"in_place((WUBRG)")}
|
||||
)
|
||||
psi_has_guild := match@(match: "[/]") # Is there guild psi in the input?
|
||||
# A psi cost can contain both regular and hybrid psi
|
||||
psi_filter := to_upper + {
|
||||
if psi_has_guild() then psi_sort_guild()
|
||||
else psi_sort()
|
||||
}
|
||||
# Like psi filter, only also allow tap symbols:
|
||||
tap_filter := sort_text@(order: "<TQ>")
|
||||
psi_filter_t := replace@( # Remove [] used for forcing psi symbols
|
||||
match: "[\\[\\]]",
|
||||
replace: ""
|
||||
) + { tap_filter() + psi_filter() }
|
||||
|
||||
############################################################## Determine card color
|
||||
# Names of colors
|
||||
color_name := {
|
||||
if input = "W" then "crystal"
|
||||
else if input = "U" then "cryo"
|
||||
else if input = "B" then "shadow"
|
||||
else if input = "R" then "pyre"
|
||||
else if input = "G" then "xeno"
|
||||
else ""
|
||||
}
|
||||
color_names_1 := { color_name(colors.0) }
|
||||
color_names_2 := { color_name(colors.0) + ", " + color_name(colors.1) }
|
||||
color_names_3 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) }
|
||||
color_names_4 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) }
|
||||
color_names_5 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) + ", " + color_name(colors.4) }
|
||||
# color based on mana cost, input = a psi cost
|
||||
color_filter := sort_text@(order: "<WUBRG>")
|
||||
color_filterH := sort_text@(order: "</>")
|
||||
psi_to_color := {
|
||||
count := number_of_items(in: colors)
|
||||
if hybrid == "" then
|
||||
# not a hybrid
|
||||
if count == 0 then "colorless"
|
||||
else if count == 1 then color_names_1()
|
||||
else if set.set_info.use_gradient_multicolor == "no" then "multicolor" # stop here
|
||||
else if count == 2 then color_names_2() + ", multicolor"
|
||||
else if set.set_info.use_gradient_multicolor != "yes" then "multicolor" # stop here
|
||||
else if count == 3 then color_names_3() + ", multicolor"
|
||||
else if count == 4 then color_names_4() + ", multicolor"
|
||||
else if count == 5 then color_names_5() + ", multicolor"
|
||||
else "multicolor"
|
||||
else
|
||||
# hybrid
|
||||
if count == 0 then "colorless"
|
||||
else if count == 1 then color_names_1()
|
||||
else if count == 2 then color_names_2() + ", hybrid"
|
||||
else if count == 3 then color_names_3() + ", hybrid"
|
||||
else "multicolor"
|
||||
}
|
||||
|
||||
# color based on resource text box, input = textbox contents
|
||||
color_text_filter :=
|
||||
# remove activation costs
|
||||
replace@(
|
||||
match: "<sym[^>]*>[^<]+</sym[^>]*>"
|
||||
in_context: "(?ix) (\\n|^)[^:]*<match>(,|:) | (pays?|additional|costs?)[ ]<match>",
|
||||
replace: ""
|
||||
) +
|
||||
# keep only psi
|
||||
filter_text@(match: "<sym[^>]*>([^<]+)") + color_filter;
|
||||
# get the resource frame for a "WUBRG"-style input.
|
||||
resource_multicolor := {
|
||||
count := number_of_items(in: colors)
|
||||
if count == 0 then "resource"
|
||||
else if count == 1 then color_names_1() + ", resource"
|
||||
else if count == 2 then color_names_2() + ", resource"
|
||||
else if count == 3 then color_names_3() + ", resource"
|
||||
else "resource, multicolor"
|
||||
}
|
||||
# Look for a CDA that defines colors
|
||||
text_to_color := {
|
||||
# Note: running filter_text is quite slow, do a quick 'contains' check first
|
||||
if contains(match: card_name) then (
|
||||
text := filter_text(match: regex_escape(card_name)+"(</[-a-z]+>)? is (colorless|all colors|((cryo|crystal|xeno|pyre|shadow)((,|,? and) (cryo|crystal|xeno|pyre|shadow))*))\\.")
|
||||
if text != "" then (
|
||||
if contains(text, match: "all colors") then (
|
||||
colors := "WUBRG"
|
||||
if resource = "resource" then resource_multicolor()
|
||||
else psi_to_color(hybrid: "")
|
||||
) else (
|
||||
colors := ""
|
||||
if contains(text, match: "crystal") then colors := colors + "W"
|
||||
if contains(text, match: "cryo") then colors := colors + "U"
|
||||
if contains(text, match: "shadow") then colors := colors + "B"
|
||||
if contains(text, match: "pyre") then colors := colors + "R"
|
||||
if contains(text, match: "xeno") then colors := colors + "G"
|
||||
if resource = "resource" then resource_multicolor()
|
||||
else psi_to_color(hybrid: "")
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
# The color of a card
|
||||
is_unit := match@(match: "(?i)Unit")
|
||||
is_tribal := match@(match: "(?i)Tribal")
|
||||
is_device := match@(match: "(?i)Device")
|
||||
is_resource := match@(match: "(?i)Resource")
|
||||
is_augment := match@(match: "(?i)Augment")
|
||||
is_action := match@(match: "(?i)Tactic|Strategy")
|
||||
card_color := {
|
||||
# usually the color of psi
|
||||
text_color := text_to_color(rules_text, resource: is_resource(type));
|
||||
if text_color == "" then (
|
||||
psi_color := psi_to_color(colors: color_filter(casting_cost), hybrid: color_filterH(casting_cost))
|
||||
if psi_color == "colorless" and is_resource (type) then resource_multicolor(colors:color_text_filter(input: card.rule_text))
|
||||
else if psi_color == "colorless" and is_device(type) then "device"
|
||||
else psi_color
|
||||
)
|
||||
else text_color
|
||||
};
|
||||
|
||||
# Number of colors in a card_color
|
||||
card_color_color_count := count_chosen@(choices: "crystal,cryo,shadow,pyre,xeno,device")
|
||||
# Clean up color field
|
||||
card_color_filter := {
|
||||
colors := card_color_color_count()
|
||||
if colors > 2 then
|
||||
input := remove_choice(choice: "overlay")
|
||||
if colors > 1 then (
|
||||
input := require_choice(choices: "multicolor, hybrid, resource, device")
|
||||
input := exclusive_choice(choices: "multicolor, hybrid")
|
||||
input := require_exclusive_choice(choices: "horizontal, vertical, radial, overlay")
|
||||
) else
|
||||
input := remove_choice(choices: "radial, horizontal, vertical, overlay, hybrid, reversed")
|
||||
if chosen(choice:"overlay") then
|
||||
input := remove_choice(choice: "reversed")
|
||||
input
|
||||
}
|
||||
|
||||
# needed by all style files anyway
|
||||
include file: /space-blends.mse-include/new-blends
|
||||
############################################################## Card number
|
||||
# Index for sorting, white cards are first, so white->A, blue->B, .. ,
|
||||
# The code consists of 4 parts:
|
||||
# Process the name for sorting rules
|
||||
sort_name :=
|
||||
# Remove "The", "A", and "And" at the beginning
|
||||
replace@(match: "^(The|An?) ", replace: "") +
|
||||
# Remove commas and apostrophes
|
||||
replace@(match: "(,|'|’)", replace: "") +
|
||||
# Remove bold and italic tags
|
||||
replace@(match: "(<b>|<i>|</b>|</i>)", replace: "") +
|
||||
# Make lowercase
|
||||
to_lower
|
||||
|
||||
is_multicolor := { chosen(choice: "multicolor") and input != "device, multicolor" }
|
||||
is_null_cost := { input == "" or input == "0" }
|
||||
is_hybrid_cost := { contains(card.casting_cost, match: "W/") or contains(card.casting_cost, match: "U/") or contains(card.casting_cost, match: "B/") or contains(card.casting_cost, match: "R/") or contains(card.casting_cost, match: "G/") }
|
||||
basic_resource_sort := {
|
||||
if contains(card.name, match:"Lux") then "LB" # Plains
|
||||
else if contains(card.name, match:"Gelidine") then "LC" # Islands
|
||||
else if contains(card.name, match:"Necroleum") then "LD" # Swamps
|
||||
else if contains(card.name, match:"Carbos") then "LE" # Mountains
|
||||
else if contains(card.name, match:"Biolute") then "LF" # Forests
|
||||
else "LA" # other basic lands
|
||||
}
|
||||
color_of_card := {
|
||||
card_color := card.card_color
|
||||
casting_cost := card.casting_cost
|
||||
if chosen(choice: "resource", card_color) then (
|
||||
if card.rarity != "basic resource" then "K" # Nonbasic Land
|
||||
else basic_resource_sort()
|
||||
) else if is_null_cost(casting_cost) then (
|
||||
if chosen(choice: "hybrid", card_color) then "G" # Hybrids
|
||||
else if is_multicolor(card_color) then "F" # Multicolor
|
||||
else if chosen(choice:"crystal", card_color) then "A" # White
|
||||
else if chosen(choice:"cryo", card_color) then "B" # Blue
|
||||
else if chosen(choice:"shadow", card_color) then "C" # Black
|
||||
else if chosen(choice:"pyre", card_color) then "D" # Red
|
||||
else if chosen(choice:"xeno", card_color) then "E" # Green
|
||||
else "I" # Colorless / Artifact
|
||||
) else (
|
||||
# use the casting cost
|
||||
colors := sort_text(casting_cost, order: "<WUBRG>")
|
||||
if colors == "" then "I" # Colorless / Artifact
|
||||
else if colors == "W" then "A" # White
|
||||
else if colors == "U" then "B" # Blue
|
||||
else if colors == "B" then "C" # Black
|
||||
else if colors == "R" then "D" # Red
|
||||
else if colors == "G" then "E" # Green
|
||||
else if is_hybrid_cost() then "G" #Hybrid
|
||||
else if contains(casting_cost, match:"/") and contains(card_color, match:"device") then "I" # Colorless/Artifact
|
||||
else "F" # Multicolor
|
||||
)
|
||||
}
|
||||
|
||||
rarity_sort := {
|
||||
if set.sort_special_rarity == "with the rest" or card.rarity != "special" then " "
|
||||
else "S"
|
||||
}
|
||||
set_filter := {
|
||||
# TODO: what about rulestips?
|
||||
if set.sort_special_rarity != "separate numbering" then
|
||||
nil
|
||||
else if card.rarity == "special" then
|
||||
{ card.rarity == "special" }
|
||||
else
|
||||
{ card.rarity != "special" }
|
||||
}
|
||||
|
||||
card_number := {
|
||||
position (
|
||||
of: card
|
||||
in: set
|
||||
order_by: { rarity_sort() + color_of_card() + sort_name(card.name) }
|
||||
filter: set_filter()
|
||||
) + 1
|
||||
}
|
||||
card_count := {
|
||||
number_of_items(in: set, filter: set_filter())
|
||||
}
|
||||
|
||||
############################################################## Utilities for keywords
|
||||
# replaces — correctly
|
||||
add := "" # default is nothing
|
||||
separate_words := remove_tags + trim + replace@(match:" ", replace: {spacer})
|
||||
for_psi_costs := format_cost := {
|
||||
if input.separator_before == "—" and contains(input.param, match: " ") then (
|
||||
if contains(input.param, match:",") then (
|
||||
if match(match: "^[TQXYZWUBRG0-9/|]+,", input.param) then
|
||||
"{add}<param-cost>{combined_cost(input.param)}</param-cost>"
|
||||
else "<param-cost>{combined_cost(input.param)}</param-cost>"
|
||||
) else
|
||||
"<param-cost>{alternative_cost(input.param)}</param-cost>"
|
||||
) else
|
||||
"{add}<param-psi>{input.param}</param-psi>"
|
||||
}
|
||||
alternative_cost := replace@(match:"^[A-Z]", replace: { to_lower() })
|
||||
combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+
|
||||
replace@(match:",", replace:" and")+
|
||||
replace@(match:"^[TQXYZWUBRG0-9/|]", in_context: "(^|[[:space:]])<match>", replace: "<sym-auto>&</sym-auto>")+
|
||||
replace@(match:"^[A-Z]", replace: { to_lower() })
|
||||
long_dash := replace@(match:"-", replace:"—")
|
||||
# Utilities for keywords
|
||||
has_cc := { card.casting_cost != "" }
|
||||
has_pt := { card.pt != "" }
|
||||
contains_target := match@(match:"(?i)([^a-z]|^)target([^a-z]|$)")
|
||||
is_targeted := { contains_target(card.rule_text) }
|
||||
|
||||
############################################################## The text box
|
||||
# Filters for the text box
|
||||
# context in which mana symbols are found
|
||||
psi_context :=
|
||||
"(?ix) # case insensitive, ignore whitespace
|
||||
(^|[[:space:]\"(“']) # start of a word
|
||||
( <match>: # G: something
|
||||
| <match>, # G, tap: something
|
||||
| <match>[ ]can[ ]be[ ]pay
|
||||
| (pays?|additional|costs?|the # pay X. creatures cost 1 less. pay an additional G.
|
||||
|adds?|pay(ed)?[ ](with|using)
|
||||
)
|
||||
([ ]either)? # pay either X or Y
|
||||
([ ]<sym[^>]*>[TQXYZWUBRG0-9/|]+</sym[^>]*>,)* # pay X, Y or Z
|
||||
([ ]<sym[^>]*>[STQXYZWUBRG0-9/|]+</sym[^>]*>[ ](and|or|and/or))* # pay X or Y
|
||||
[ ]<match>
|
||||
([,.)]|$ # (end of word)
|
||||
|[ ][^ .,]*$ # still typing...
|
||||
|[ ]( or | and | in | less | more | to ) # or next word is ...
|
||||
)
|
||||
)
|
||||
| <param-psi><match></param-psi> # keyword argument that is declared as mana
|
||||
| <param-cost>[ ]*<match></param-cost> # keyword argument that is declared as cost
|
||||
| <param-cost><match>, # keyword argument that is declared as cost
|
||||
";
|
||||
# truncates the name of legends
|
||||
legend_filter := replace@(match:"(, | of | the ).*", replace: "" )
|
||||
# the rule text filter
|
||||
# - adds psi symbols
|
||||
# - makes text in parentheses italic
|
||||
text_filter :=
|
||||
# step 1 : remove all automatic tags
|
||||
remove_tag@(tag: "<sym-auto>") +
|
||||
remove_tag@(tag: "<i-auto>") +
|
||||
remove_tag@(tag: "<nospellcheck") +
|
||||
# step 2 : reminder text for keywords
|
||||
expand_keywords@(
|
||||
condition: {
|
||||
correct_case or (mode != "pseudo" and not used_placeholders)
|
||||
}
|
||||
default_expand: {
|
||||
chosen(choice:if correct_case then mode else "lower case", set.automatic_reminder_text)
|
||||
},
|
||||
combine: {
|
||||
keyword := "<nospellcheck>{keyword}</nospellcheck>"
|
||||
reminder := process_english_hints(reminder)
|
||||
if mode == "pseudo" then "<i-auto>{keyword}</i-auto>"
|
||||
else keyword + if expand then "<atom-reminder-{mode}> ({reminder})</atom-reminder-{mode}>"
|
||||
}) +
|
||||
# step 2b : move action keywords' reminder text to the end of the line
|
||||
replace@(
|
||||
match: "(<atom-reminder-action>(?:(?!<kw-).)*</atom-reminder-action></kw[^>]*>)(((?!<atom-reminder| ?<kw-)[^\n(])+)",
|
||||
replace: "\\2\\1"
|
||||
) +
|
||||
# step 2c : remove duplicate reminder text
|
||||
replace@(
|
||||
match: "(<atom-reminder-[^>]*>[^)]+[)]</atom-reminder-[^>]*>)([^\n]+)\\1"
|
||||
replace: "\\2\\1"
|
||||
) +
|
||||
# step 3a : expand shortcut words ~ and CARDNAME
|
||||
replace@(
|
||||
match: "CARDNAME",
|
||||
in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
|
||||
replace: "<atom-cardname></atom-cardname>"
|
||||
) +
|
||||
# step 3b : expand shortcut words ` and shortened LEGENDNAME
|
||||
replace@(
|
||||
match: "LEGENDNAME",
|
||||
in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
|
||||
replace: "<atom-legname></atom-legname>"
|
||||
) +
|
||||
# step 3c : fill in atom fields
|
||||
tag_contents@(
|
||||
tag: "<atom-cardname>",
|
||||
contents: { if card_name=="" then "CARDNAME" else card_name }
|
||||
) +
|
||||
tag_contents@(
|
||||
tag: "<atom-legname>",
|
||||
contents: { if card_name=="" then "LEGENDNAME" else legend_filter(card_name) }
|
||||
) +
|
||||
# step 4 : explict non psi symbols
|
||||
replace@(
|
||||
match: "\\][TQXYZWUBRG0-9/|]+\\[",
|
||||
replace: {"<nosym>" + psi_filter_t() + "</nosym>"} ) +
|
||||
# step 5 : add psia & tap symbols
|
||||
replace@(
|
||||
match: "[TQXYZWUBRG0-9/|]+",
|
||||
in_context: psi_context,
|
||||
replace: {"<sym-auto>" + psi_filter_t() + "</sym-auto>"} ) +
|
||||
# step 5b : add explict psi symbols
|
||||
replace@(
|
||||
match: "\\[[TQXYZWUBRG0-9/|]+\\]",
|
||||
replace: {"<sym>" + psi_filter_t() + "</sym>"} ) +
|
||||
# step 7 : italic reminder text
|
||||
replace@(
|
||||
match: "[(]([^)\n]|[(][^)\n]*[)])*[)]?",
|
||||
in_context: "(^|[[:space:]])<match>|<atom-keyword><match></",
|
||||
replace: "<i-auto>&</i-auto>") +
|
||||
# step 8 : automatic capitalization
|
||||
replace@(
|
||||
match: "[a-z]",
|
||||
in_context: "[ ]*: <match>|—<match>| — <match>",
|
||||
replace: to_upper) +
|
||||
curly_quotes
|
||||
|
||||
############################################################## Other boxes
|
||||
# the flavor text filter
|
||||
# - makes all text italic
|
||||
flavor_text_filter :=
|
||||
# step 1 : remove italic tags
|
||||
remove_tag@(tag: "<i-flavor>") +
|
||||
# step 2 : surround by <i> tags
|
||||
{ "<i-flavor>" + input + "</i-flavor>" } +
|
||||
# curly quotes
|
||||
curly_quotes
|
||||
|
||||
# Move the cursor past the separator in the p/t and type boxes
|
||||
type_over_pt := replace@(match:"/$", replace:"")
|
||||
type_over_type := replace@(match:" ?-$", replace:"")
|
||||
|
||||
super_type_filter :=
|
||||
remove_tag@(tag: "<word-list-") +
|
||||
type_over_type +
|
||||
{ "<word-list-type>{input}</word-list-type>" }
|
||||
|
||||
space_to_wltags := replace@(match:"( +|<soft> </soft>)",
|
||||
replace:{"</word-list-{list_type}>{_1}<word-list-{list_type}>"})
|
||||
sub_type_filter :=
|
||||
remove_tag@(tag: "<word-list-") +
|
||||
replace@(match: " </soft>$", replace: "") + # remove trailing soft space
|
||||
remove_tag@(tag: "<soft") +
|
||||
{ list_type := if is_unit(type) then "class"
|
||||
else if is_resource(type) then "resource"
|
||||
else if is_device(type) then "device"
|
||||
else if is_augment(type) then "augment"
|
||||
else if is_action(type) then "action"
|
||||
if is_unit(type) or is_tribal(type) then (
|
||||
first := "<word-list-race>{ only_first(input) }</word-list-race>"
|
||||
next := only_next(input)
|
||||
if input == "" then list_type := "" # only edit the race
|
||||
else if next == "" then first := first + "<soft> </soft>"
|
||||
else first := first + " "
|
||||
input := next
|
||||
) else (
|
||||
first := ""
|
||||
)
|
||||
if list_type != "" then (
|
||||
if input != "" then input := input + "<soft> </soft>" # Add a new box at the end
|
||||
first + "<word-list-{list_type}>{ space_to_wltags(input) }</word-list-{list_type}>"
|
||||
) else first + input
|
||||
}
|
||||
|
||||
# all sub types, for word list
|
||||
space_to_comma := replace@(match:" ", replace:",")
|
||||
only_first := replace@(match:" .*", replace:"")
|
||||
only_next := replace@(match:"^[^ ]* ?", replace:"")
|
||||
all_sub_types := {
|
||||
for each card in set do
|
||||
if contains(card.super_type) then "," + space_to_comma(to_text(card.sub_type))
|
||||
}
|
||||
all_races := {
|
||||
for each card in set do
|
||||
if is_unit(card.super_type) or is_tribal(card.super_type) then
|
||||
"," + only_first(to_text(card.sub_type))
|
||||
}
|
||||
all_classes := {
|
||||
for each card in set do
|
||||
if contains(card.super_type, match:"Unit") then
|
||||
"," + space_to_comma(only_next(to_text(card.sub_type)))
|
||||
}
|
||||
|
||||
colorless_color := {
|
||||
if card.card_color=="crystal" then "w"
|
||||
else if card.card_color=="cryo" then "u"
|
||||
else if card.card_color=="shadow" then "b"
|
||||
else if card.card_color=="pyre" then "r"
|
||||
else if card.card_color=="xeno" then "g"
|
||||
else "c"
|
||||
}
|
||||
|
||||
############################################################## Statistics utilities
|
||||
# Converted psi cost
|
||||
is_half_psi := match@(match: "1/2|[|][WUBRG]")
|
||||
is_colored_psi := match@(match: "[WUBRG]")
|
||||
only_numbers := filter_text@(match: "^[0123456789]+")
|
||||
cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRG] | [0-9]+(?!/[WUBRGTQ2]) | [WUBRG0-9](/[WUBRG])\{0,4} ")
|
||||
cmc := {to_number(
|
||||
for each sym in cmc_split() do (
|
||||
numbers := only_numbers(sym)
|
||||
if is_half_psi(sym) then 0.5
|
||||
else if numbers != "" then max(1, to_int(numbers))
|
||||
else 1 # all other symbols are 1
|
||||
))
|
||||
}
|
||||
|
||||
colored_psi := {to_number(
|
||||
for each sym in cmc_split() do (
|
||||
numbers := only_numbers(sym)
|
||||
if is_colored_psi(sym) then
|
||||
if is_half_psi(sym) then 0.5 else 1
|
||||
else 0
|
||||
))
|
||||
}
|
||||
|
||||
primary_card_color := {
|
||||
device := chosen(choice:"device")
|
||||
resource := chosen(choice:"resource")
|
||||
multi := chosen(choice:"multicolor")
|
||||
hybrid := chosen(choice:"hybrid")
|
||||
if resource then "resource"
|
||||
else if multi and input != "device, multicolor" then "multicolor"
|
||||
else if hybrid then "hybrid"
|
||||
else if device then "device"
|
||||
else input
|
||||
}
|
||||
|
||||
word_count := break_text@(match:"[^[:space:]]+") + length
|
||||
142
data/space.mse-game/set_fields
Normal file
@@ -0,0 +1,142 @@
|
||||
############################################################## Set fields
|
||||
set field:
|
||||
type: info
|
||||
name: Set Information
|
||||
set field:
|
||||
type: text
|
||||
name: title
|
||||
identifying: true
|
||||
set field:
|
||||
type: text
|
||||
name: description
|
||||
multi line: true
|
||||
set field:
|
||||
type: text
|
||||
name: artist
|
||||
set field:
|
||||
type: text
|
||||
name: copyright
|
||||
set field:
|
||||
type: symbol
|
||||
name: symbol
|
||||
description: The symbol for this set, double click to edit
|
||||
set field:
|
||||
type: info
|
||||
name: Defaults and Automation
|
||||
set field:
|
||||
type: color
|
||||
name: border color
|
||||
description: The default border color for cards
|
||||
choice:
|
||||
name: black
|
||||
color: rgb(0,0,0)
|
||||
choice:
|
||||
name: white
|
||||
color: rgb(255,255,255)
|
||||
choice:
|
||||
name: silver
|
||||
color: rgb(128,128,128)
|
||||
choice:
|
||||
name: gold
|
||||
color: rgb(200,180,0)
|
||||
set field:
|
||||
type: multiple choice
|
||||
name: automatic reminder text
|
||||
choice: old
|
||||
choice: core
|
||||
choice: expert
|
||||
choice: pseudo
|
||||
choice: action
|
||||
choice: custom
|
||||
choice: lower case
|
||||
initial: old, core, expert, pseudo, action, custom
|
||||
# Convert from older mse versions
|
||||
script:
|
||||
if value = "yes" then "old, core, expert, custom"
|
||||
else if value = "no" then ""
|
||||
else value
|
||||
description: For which kinds of keywords should reminder text be added by default? Note: you can enable/disable reminder text by right clicking the keyword.
|
||||
set field:
|
||||
type: boolean
|
||||
name: automatic card numbers
|
||||
description: Should card numbers be shown on the cards?
|
||||
set field:
|
||||
type: choice
|
||||
name: sort special rarity
|
||||
description: Determines how cards with special rarity are sorted.
|
||||
choice: with the rest
|
||||
choice: after other cards
|
||||
choice: separate numbering
|
||||
initial: after other cards
|
||||
set field:
|
||||
type: boolean
|
||||
name: mark errors
|
||||
description: Marks errors on cards, for example wording and spelling errors, non unique card names, etc.
|
||||
set field:
|
||||
type: choice
|
||||
name: use gradient multicolor
|
||||
choice: yes
|
||||
choice: only for two color cards
|
||||
choice: no
|
||||
description: Use gradients on multicolor cards by default, you can always change it be clicking on the card border.
|
||||
initial: no
|
||||
############################# Default style
|
||||
default set style:
|
||||
title:
|
||||
padding left: 2
|
||||
font:
|
||||
size: 16
|
||||
symbol:
|
||||
max aspect ratio: 2.5
|
||||
variation:
|
||||
name: common
|
||||
border radius: 0.10
|
||||
fill type: solid
|
||||
fill color: rgb(0,0,0)
|
||||
border color: rgb(255,255,255)
|
||||
variation:
|
||||
name: uncommon
|
||||
border radius: 0.07
|
||||
fill type: linear gradient
|
||||
fill color 1: rgb(224,224,224)
|
||||
fill color 2: rgb(84, 84, 84)
|
||||
border color 1: rgb(0, 0, 0)
|
||||
border color 2: rgb(0, 0, 0)
|
||||
variation:
|
||||
name: rare
|
||||
border radius: 0.07
|
||||
fill type: linear gradient
|
||||
fill color 1: rgb(214,196,94)
|
||||
fill color 2: rgb(95, 84, 40)
|
||||
border color 1: rgb(0, 0, 0)
|
||||
border color 2: rgb(0, 0, 0)
|
||||
variation:
|
||||
name: mythic rare
|
||||
border radius: 0.07
|
||||
fill type: linear gradient
|
||||
fill color 1: rgb(255, 160, 40)
|
||||
fill color 2: rgb(202, 49, 35)
|
||||
border color 1: rgb(0, 0, 0)
|
||||
border color 2: rgb(0, 0, 0)
|
||||
variation:
|
||||
name: special
|
||||
border radius: 0.10
|
||||
fill type: linear gradient
|
||||
fill color 1: rgb(224,170,247)
|
||||
fill color 2: rgb(58,7,80)
|
||||
border color 1: rgb(255,255,255)
|
||||
border color 2: rgb(255,255,255)
|
||||
automatic reminder text:
|
||||
render style: checklist
|
||||
direction: vertical
|
||||
sort special rarity:
|
||||
render style: both
|
||||
choice images:
|
||||
with the rest: /space.mse-game/icons/number_cards_mixed.png
|
||||
after other cards: /space.mse-game/icons/number_cards_after.png
|
||||
separate numbering: /space.mse-game/icons/number_cards_separate.png
|
||||
use gradient multicolor:
|
||||
render style: both
|
||||
choice images:
|
||||
yes: script: built_in_image("bool_yes")
|
||||
no: script: built_in_image("bool_no")
|
||||
84
data/space.mse-game/statistics
Normal file
@@ -0,0 +1,84 @@
|
||||
############################################################## Statistics dimensions
|
||||
statistics dimension:
|
||||
name: card color
|
||||
position hint: 0
|
||||
script: primary_card_color(card.card_color)
|
||||
icon: stats/card_color.png
|
||||
colors:
|
||||
crystal : rgb(255,237,202)
|
||||
cryo : rgb(42,141,255)
|
||||
shadow : rgb(33,33,33)
|
||||
pyre : rgb(255,52,0)
|
||||
xeno : rgb(138,230,0)
|
||||
colorless : rgb(122,85,85)
|
||||
device : rgb(188,192,195)
|
||||
multicolor : rgb(255,188,14)
|
||||
resource : rgb(109,62,39)
|
||||
hybrid : rgb(243,26,136)
|
||||
group: crystal
|
||||
group: cryo
|
||||
group: shadow
|
||||
group: pyre
|
||||
group: xeno
|
||||
group: colorless
|
||||
group: device
|
||||
group: multicolor
|
||||
group: resource
|
||||
group: hybrid
|
||||
statistics dimension:
|
||||
position hint: 2
|
||||
name: converted psi cost
|
||||
script: cmc(card.casting_cost)
|
||||
numeric: true
|
||||
icon: stats/casting_cost.png
|
||||
statistics dimension:
|
||||
position hint: 3
|
||||
name: colored psi cost
|
||||
script: colored_psi(card.casting_cost)
|
||||
numeric: true
|
||||
icon: stats/colored_casting_cost.png
|
||||
statistics dimension:
|
||||
position hint: 50
|
||||
name: power
|
||||
script: card.power
|
||||
numeric: true
|
||||
icon: stats/power.png
|
||||
statistics dimension:
|
||||
position hint: 51
|
||||
name: toughness
|
||||
script: card.toughness
|
||||
numeric: true
|
||||
icon: stats/toughness.png
|
||||
statistics dimension:
|
||||
name: keywords
|
||||
position hint: 1000
|
||||
script: keyword_usage(unique:true)
|
||||
show empty: false
|
||||
split list: true
|
||||
icon: stats/keywords.png
|
||||
statistics dimension:
|
||||
name: text length (words)
|
||||
position hint: 100
|
||||
script: word_count(to_text(card.rule_text))
|
||||
numeric: true
|
||||
bin size: 5
|
||||
icon: stats/text_length.png
|
||||
statistics dimension:
|
||||
name: race
|
||||
position hint: 32
|
||||
icon: stats/creature_race.png
|
||||
description: Race of unit and tribal cards
|
||||
script:
|
||||
if is_unit(card.super_type) or is_tribal(card.super_type) then
|
||||
only_first(card.sub_type)
|
||||
show empty: false
|
||||
statistics dimension:
|
||||
name: class
|
||||
position hint: 33
|
||||
icon: stats/creature_class.png
|
||||
description: Class of unit cards
|
||||
script:
|
||||
if is_unit(card.super_type) then
|
||||
space_to_comma(trim(remove_tags(only_next(card.sub_type))))
|
||||
show empty: false
|
||||
split list: true
|
||||
BIN
data/space.mse-game/stats/card_color.png
Normal file
|
After Width: | Height: | Size: 876 B |
BIN
data/space.mse-game/stats/card_type.png
Normal file
|
After Width: | Height: | Size: 400 B |
BIN
data/space.mse-game/stats/casting_cost.png
Normal file
|
After Width: | Height: | Size: 877 B |
BIN
data/space.mse-game/stats/colored_casting_cost.png
Normal file
|
After Width: | Height: | Size: 1014 B |
BIN
data/space.mse-game/stats/creature_class.png
Normal file
|
After Width: | Height: | Size: 672 B |
BIN
data/space.mse-game/stats/creature_race.png
Normal file
|
After Width: | Height: | Size: 706 B |
BIN
data/space.mse-game/stats/creature_type.png
Normal file
|
After Width: | Height: | Size: 416 B |
BIN
data/space.mse-game/stats/illustrator.png
Normal file
|
After Width: | Height: | Size: 394 B |
BIN
data/space.mse-game/stats/keywords.png
Normal file
|
After Width: | Height: | Size: 674 B |
BIN
data/space.mse-game/stats/power.png
Normal file
|
After Width: | Height: | Size: 576 B |
BIN
data/space.mse-game/stats/pt.png
Normal file
|
After Width: | Height: | Size: 1000 B |
BIN
data/space.mse-game/stats/rarity.png
Normal file
|
After Width: | Height: | Size: 860 B |
BIN
data/space.mse-game/stats/text_length.png
Normal file
|
After Width: | Height: | Size: 118 B |
BIN
data/space.mse-game/stats/toughness.png
Normal file
|
After Width: | Height: | Size: 702 B |
102
data/space.mse-game/word_lists
Normal file
@@ -0,0 +1,102 @@
|
||||
############################################################## Space word lists
|
||||
word list:
|
||||
name: type
|
||||
word:
|
||||
name: Raw
|
||||
is prefix: true
|
||||
word:
|
||||
name: Unique
|
||||
is prefix: true
|
||||
word:
|
||||
name: Tribal
|
||||
is prefix: true
|
||||
word: Unit
|
||||
word: Device
|
||||
word: Device Unit
|
||||
word: Augment
|
||||
word: Tactic
|
||||
word: Strategy
|
||||
word: Resource
|
||||
word: Warlord
|
||||
word list:
|
||||
name: race
|
||||
word:
|
||||
script: all_races()
|
||||
line below: true
|
||||
word: Alien
|
||||
word: Animal
|
||||
word: Anthroform
|
||||
word: Bug
|
||||
word: Capital-ship
|
||||
word: Cruiser
|
||||
word: Cyborg
|
||||
word: Drone
|
||||
word: Herbiform
|
||||
word: Human
|
||||
word: Mutant
|
||||
word: Nanite
|
||||
word: Robot
|
||||
word: Starship
|
||||
word: Swarm
|
||||
word: Transcended
|
||||
word: Vehicle
|
||||
word: Weapon
|
||||
word list:
|
||||
name: class
|
||||
word:
|
||||
script: all_classes()
|
||||
line below: true
|
||||
word: Agent
|
||||
word: Artillery
|
||||
word: Boat
|
||||
word: Bomb
|
||||
word: Carrier
|
||||
word: Colonist
|
||||
word: Councillor
|
||||
word: Engineer
|
||||
word: Fighter
|
||||
word: Helo
|
||||
word: Hunter
|
||||
word: Infantry
|
||||
word: Laser
|
||||
word: Marksman
|
||||
word: Mercenary
|
||||
word: Merchant
|
||||
word: Mystic
|
||||
word: Scout
|
||||
word: Sentry
|
||||
word: Submarine
|
||||
word: Tactician
|
||||
word: Tank
|
||||
word: Warrior
|
||||
word list:
|
||||
name: device
|
||||
word:
|
||||
name:
|
||||
line below: true
|
||||
word: Outfitting
|
||||
word list:
|
||||
name: resource
|
||||
word:
|
||||
script: all_sub_types(match: "Resource")
|
||||
line below: true
|
||||
word: Lux
|
||||
word: Gelidine
|
||||
word: Necroleum
|
||||
word: Carbos
|
||||
word: Biolute
|
||||
word: Quareen
|
||||
word: Dome
|
||||
word list:
|
||||
name: augment
|
||||
word:
|
||||
name:
|
||||
line below: true
|
||||
word: Graft
|
||||
word list:
|
||||
name: action
|
||||
word:
|
||||
name:
|
||||
line below: true
|
||||
word: Drug
|
||||
word: Trap
|
||||