summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/art-data.txt548
-rw-r--r--crawl-ref/source/artefact.cc4
-rw-r--r--crawl-ref/source/artefact.h2
-rw-r--r--crawl-ref/source/makefile_tiles.mgw2
-rw-r--r--crawl-ref/source/makefile_tiles.unix2
-rw-r--r--crawl-ref/source/makeitem.cc2
-rw-r--r--crawl-ref/source/rltiles/dc-item.txt24
-rw-r--r--crawl-ref/source/rltiles/dc-unrand.txt84
-rw-r--r--crawl-ref/source/rltiles/dc-urand.txt70
-rw-r--r--crawl-ref/source/rltiles/tiledef-unrand.cc90
-rw-r--r--crawl-ref/source/rltiles/tiledef-unrand.h6
-rw-r--r--crawl-ref/source/tilepick.cc102
-rwxr-xr-xcrawl-ref/source/util/art-data.pl154
13 files changed, 676 insertions, 414 deletions
diff --git a/crawl-ref/source/art-data.txt b/crawl-ref/source/art-data.txt
index b77e472d78..3b1ec64a08 100644
--- a/crawl-ref/source/art-data.txt
+++ b/crawl-ref/source/art-data.txt
@@ -13,6 +13,9 @@
# Changing the name of an unrand will change its automatically
# generated enumeration, unless its enumeration is forced with ENUM.
#
+# "ENUM: FOO" can be used to force the enumeration for an unrand to be
+# "UNRAND_FOO", for cases where the automatically generated enumerations
+# of different unrandarts conflict.
#
# Add new artefact definitions at the end of the file; doing so should cause
# no problems with save-file compatibilty, but for tile builds it will
@@ -21,13 +24,34 @@
# strange behaviour in games saved previous to the change, and deleting
# definitions will break savefile compatibility.
#
+# ####### TILES #############################
+#
# Each unrandart needs two tiles, one item tile and one equipment tile for the
-# player doll. The former needs to be placed into rltiles/item and defined in
-# dc-item.txt, the latter in the appropriate player/ subfolder and defined in
-# dc-player.txt. In tilepick.cc the unrandart must then be assigned to the tile
-# name defined in the dc-***.txt.
-# For a start, placeholders (e.g. reference to the base type tiles) are fine,
-# but they'll eventually need to be replaced with proper tiles.
+# player doll. For the former, you can define the image file within this
+# file using the keyword TILE. The files are assumed to be png and the syntax
+# does not include the file type. The artefacts' base type decides where a
+# tile needs to be placed. These are as follows:
+# Weapons: rltiles/item/weapon/artefact
+# Armour: rltiles/item/armour/artefact
+# Rings: rltiles/item/ring/artefact
+# Amulets: rltiles/item/amulet/artefact
+#
+# For a start, placeholders (e.g. the base type tiles) are fine, but they'll
+# eventually need to be replaced with proper tiles.
+# If the tile requires a black outline (because it would be hard to see
+# otherwise) add "BOOL: tilerim". Otherwise the image is used without
+# modification.
+#
+# For the equipment tile, place the tile into the appropriate subfolder of
+# player/ subfolder and define it in dc-player.txt. You'll also need to assign
+# these tiles to the corresponding artefacts in tilepick.cc, using the keyword
+# "TILEP_" plus the equipment slot (as defined by the most recent "parts_ctg"
+# in dc-player.txt) plus the actual definition, e.g. TILEP_CLOAK_RATSKIN_CLOAK.
+# To find the places where you'll need to add your new tile, simply search
+# tilepick.cc for another artefact of the same base type. If no special tile
+# has been defined the code will fall through to tiles according to the
+# base type and colour.
+#
#############################################################################
@@ -51,6 +75,7 @@
# * poison: Grants poison resistance.
# * rnd_tele: Induces random teleportation.
# * seeinv: Lets wearer see invisible.
+# * tilerim: Adds a black outline to the tile, see above section.
# ENUM: Forces the artefact's enumeration literal to something specific.
# For example, "ENUM: FOO" gives the enumeration "UNRAND_FOO". The
@@ -66,9 +91,9 @@
# OBJ: The enumerations of the base type and sub type of the artefact,
# separated by a dash. E.g., OBJ_WEAPONS/WPN_SWORD
-# PLUS: The pluses of artefact. For an object with two pluses,
-# is specified with "plus/plus2". For an object with just one plus,
-# is specified with "plus".
+# PLUS: The pluses of the artefact. For an object with two pluses,
+# this is specified with "plus/plus2". For an object with just one plus,
+# this is specified with "plus".
#####
@@ -102,6 +127,8 @@
# MUTATE: Gives artifact mutagenic glow.
# STEALTH: Stealth modifier.
# STR: Strenght modifier.
+# TILE: The file containing the artefact's tile, with file type png.
+# See Tiles section above.
#################################################################3
@@ -120,6 +147,7 @@ APPEAR: golden long sword
OBJ: OBJ_WEAPONS/WPN_LONG_SWORD
PLUS: +7/+7
COLOUR: YELLOW
+TILE: spwpn_singing_sword
DESC_ID: This blessed weapon loves nothing more than to sing to its owner,
whether they want it to or not.
@@ -128,6 +156,7 @@ APPEAR: bloodstained battleaxe
OBJ: OBJ_WEAPONS/WPN_BATTLEAXE
PLUS: +3/+11
COLOUR: RED
+TILE: spwpn_wrath_of_trog
DESC_ID: This was the favourite weapon of the old god Trog, before it was
lost one day. It induces a bloodthirsty berserker rage in anyone
who uses it to strike another.
@@ -137,6 +166,7 @@ APPEAR: shimmering mace
OBJ: OBJ_WEAPONS/WPN_MACE
PLUS: 0/0 # Set on generation
COLOUR: BLACK # Set on generation
+TILE: spwpn_mace_of_variability
DESC_ID: It is rather unreliable.
NAME: Glaive of Prune
@@ -144,6 +174,7 @@ APPEAR: purple glaive
OBJ: OBJ_WEAPONS/WPN_GLAIVE
PLUS: 0/+12
COLOUR: MAGENTA
+TILE: spwpn_glaive_of_prune
DESC_ID: It is the creation of a mad god, and carries a curse which
transforms anyone possessing it into a prune. Fortunately, the
curse works very slowly, and one can use it briefly with no
@@ -154,6 +185,8 @@ APPEAR: chunky great sword
OBJ: OBJ_WEAPONS/WPN_GREAT_SWORD
PLUS: 0/0 # Set on wield
COLOUR: RED
+TILE: spwpn_sword_of_power
+BOOL: tilerim
DESC_ID: It rewards the powerful with power and the meek with weakness.
NAME: Staff of Olgreb
@@ -161,6 +194,7 @@ APPEAR: green glowing staff
OBJ: OBJ_WEAPONS/WPN_QUARTERSTAFF
PLUS: 0/0 # Set on wield
COLOUR: GREEN
+TILE: spwpn_staff_of_olgreb
BRAND: SPWPN_VENOM
BOOL: poison
DESC_ID: It was the magical weapon wielded by the mighty wizard Olgreb
@@ -173,6 +207,7 @@ APPEAR: ephemeral quarterstaff
OBJ: OBJ_WEAPONS/WPN_QUARTERSTAFF
PLUS: 0/0 # Set on wield
COLOUR: BROWN
+TILE: spwpn_wucad_mu
DESC_ID: Its power varies in proportion to its wielder's intelligence.
Using it can be a bit risky.
@@ -181,6 +216,7 @@ APPEAR: ivory dagger
OBJ: OBJ_WEAPONS/WPN_DAGGER
PLUS: +3/+4
COLOUR: WHITE
+TILE: spwpn_vampires_tooth
BRAND: SPWPN_VAMPIRICISM
DESC_ID: It is lethally vampiric.
@@ -189,6 +225,7 @@ APPEAR: warped scythe
OBJ: OBJ_WEAPONS/WPN_SCYTHE
PLUS: +13/+13
COLOUR: DARKGREY
+TILE: spwpn_scythe_of_curses
BOOL: cursed
DESC_ID: This weapon carries a terrible and highly irritating curse.
@@ -197,6 +234,8 @@ APPEAR: jewelled golden mace
OBJ: OBJ_WEAPONS/WPN_MACE
PLUS: +7/+6
COLOUR: YELLOW
+TILE: spwpn_sceptre_of_torment
+BOOL: tilerim
DESC_ID: This truly accursed weapon is an instrument of Hell.
NAME: Sword of Zonguldrok
@@ -204,22 +243,27 @@ APPEAR: bone long sword
OBJ: OBJ_WEAPONS/WPN_LONG_SWORD
PLUS: +9/+9
COLOUR: LIGHTGREY
+TILE: spwpn_sword_of_zonguldrok
+BOOL: tilerim
DESC_ID: This dreadful weapon is used at the user's peril.
-NAME: Sword of Cerebov
-APPEAR: great serpentine sword
-OBJ: OBJ_WEAPONS/WPN_GREAT_SWORD
-PLUS: +6/+6
-COLOUR: YELLOW
-BRAND: SPWPN_FLAMING
-BOOL: cursed
-DESC: Eerie flames cover its twisted blade.
+NAME: Sword of Cerebov
+APPEAR: great serpentine sword
+OBJ: OBJ_WEAPONS/WPN_GREAT_SWORD
+PLUS: +6/+6
+COLOUR: YELLOW
+TILE: spwpn_sword_of_cerebov
+BRAND: SPWPN_FLAMING
+BOOL: cursed, tilerim
+DESC: Eerie flames cover its twisted blade.
NAME: Staff of Dispater
APPEAR: golden staff
OBJ: OBJ_WEAPONS/WPN_QUARTERSTAFF
PLUS: +4/+4
COLOUR: YELLOW
+TILE: spwpn_staff_of_dispater
+BOOL: tilerim
DESC_ID: This legendary item can unleash the fury of Hell.
NAME: Sceptre of Asmodeus
@@ -227,6 +271,8 @@ APPEAR: ruby sceptre
OBJ: OBJ_WEAPONS/WPN_QUARTERSTAFF
PLUS: +7/+7
COLOUR: RED
+TILE: spwpn_sceptre_of_asmodeus
+BOOL: tilerim
DESC_ID: It carries some of the powers of the arch-fiend Asmodeus.
##################### End of old fixed arts.
@@ -236,63 +282,69 @@ APPEAR: blackened long sword
OBJ: OBJ_WEAPONS/WPN_LONG_SWORD
PLUS: +7/+8
COLOUR: DARKGREY
+TILE: urand_bloodbane
BRAND: SPWPN_VORPAL
ANGRY: 1
BOOL: berserk
STEALTH: -20
-NAME: scimitar of Flaming Death
-APPEAR: smoking scimitar
-OBJ: OBJ_WEAPONS/WPN_SCIMITAR
-PLUS: +7/+5
-COLOUR: RED
-BRAND: SPWPN_FLAMING
-FIRE: 2
-COLD: -1
-BOOL: poison
-MAGIC: 20
+NAME: scimitar of Flaming Death
+APPEAR: smoking scimitar
+OBJ: OBJ_WEAPONS/WPN_SCIMITAR
+PLUS: +7/+5
+COLOUR: RED
+TILE: urand_flaming_death
+BRAND: SPWPN_FLAMING
+FIRE: 2
+COLD: -1
+BOOL: poison
+MAGIC: 20
NAME: mace of Brilliance
APPEAR: brightly glowing mace
OBJ: OBJ_WEAPONS/WPN_MACE
PLUS: +5/+5
COLOUR: WHITE
+TILE: urand_brilliance
BRAND: SPWPN_HOLY_WRATH
AC: 5
INT: 5
STEALTH: -20
BOOL: life, seeinv
-NAME: demon blade "Leech"
-APPEAR: runed demon blade
-OBJ: OBJ_WEAPONS/WPN_DEMON_BLADE
-PLUS: +13/+4
-COLOUR: MAGENTA
-BRAND: SPWPN_VAMPIRICISM
-EV: -1
-STR: -1
-INT: -1
-DEX: -1
-BOOL: life
-CURSED: 4
-
-NAME: dagger of Chilly Death
-APPEAR: sapphire dagger
-OBJ: OBJ_WEAPONS/WPN_DAGGER
-PLUS: +5/+7
-COLOUR: LIGHTBLUE
-BRAND: SPWPN_FREEZING
-FIRE: -1
-COLD: 2
-MAGIC: 20
-BOOL: poison
-DESC: A dagger made of one huge piece of sapphire.
+NAME: demon blade "Leech"
+APPEAR: runed demon blade
+OBJ: OBJ_WEAPONS/WPN_DEMON_BLADE
+PLUS: +13/+4
+COLOUR: MAGENTA
+TILE: urand_leech
+BRAND: SPWPN_VAMPIRICISM
+EV: -1
+STR: -1
+INT: -1
+DEX: -1
+BOOL: life
+CURSED: 4
+
+NAME: dagger of Chilly Death
+APPEAR: sapphire dagger
+OBJ: OBJ_WEAPONS/WPN_DAGGER
+PLUS: +5/+7
+COLOUR: LIGHTBLUE
+TILE: urand_chilly_death
+BRAND: SPWPN_FREEZING
+FIRE: -1
+COLD: 2
+MAGIC: 20
+BOOL: poison
+DESC: A dagger made of one huge piece of sapphire.
NAME: dagger "Morg"
APPEAR: rusty dagger
OBJ: OBJ_WEAPONS/WPN_DAGGER
PLUS: -1/+4
COLOUR: LIGHTRED
+TILE: urand_morg
BRAND: SPWPN_PAIN
INT: 5
MAGIC: 30
@@ -300,24 +352,26 @@ DESC: An ugly rusty dagger.
DESC_END: Many years ago it was the property of a powerful mage called Boris.
He got lost in the Dungeon while seeking the Orb.
-NAME: scythe "Finisher"
-APPEAR: blackened scythe
-OBJ: OBJ_WEAPONS/WPN_SCYTHE
-PLUS: +3/+5
-COLOUR: DARKGREY
-BRAND: SPWPN_SPEED
-STR: 3
-BOOL: cursed
-DESC: A long and sharp scythe, specially modified for combat purposes.
-
-NAME: sling "Punk"
-APPEAR: blue sling
-OBJ: OBJ_WEAPONS/WPN_SLING
-PLUS: +9/+12
-COLOUR: LIGHTBLUE
-BRAND: SPWPN_FROST
-COLD: 1
-DESC: A sling made of weird blue leather.
+NAME: scythe "Finisher"
+APPEAR: blackened scythe
+OBJ: OBJ_WEAPONS/WPN_SCYTHE
+PLUS: +3/+5
+COLOUR: DARKGREY
+TILE: urand_finisher
+BRAND: SPWPN_SPEED
+STR: 3
+BOOL: cursed
+DESC: A long and sharp scythe, specially modified for combat purposes.
+
+NAME: sling "Punk"
+APPEAR: blue sling
+OBJ: OBJ_WEAPONS/WPN_SLING
+PLUS: +9/+12
+COLOUR: LIGHTBLUE
+TILE: urand_punk
+BRAND: SPWPN_FROST
+COLD: 1
+DESC: A sling made of weird blue leather.
ENUM: KRISHNA
NAME: bow of Krishna "Sharnga"
@@ -325,6 +379,7 @@ APPEAR: golden bow
OBJ: OBJ_WEAPONS/WPN_BOW
PLUS: +8/+8
COLOUR: YELLOW
+TILE: urand_krishna
BRAND: SPWPN_SPEED
DEX: 3
BOOL: seeinv
@@ -332,19 +387,21 @@ DESC: A wonderful golden bow.
DESC_END: It once belonged to a foreign god. It works best with special
arrows which are not generally available.
-NAME: giant club "Skullcrusher"
-APPEAR: brutal giant club
-OBJ: OBJ_WEAPONS/WPN_GIANT_CLUB
-PLUS: +0/+5
-COLOUR: BROWN
-BRAND: SPWPN_SPEED
-STR: 5
+NAME: giant club "Skullcrusher"
+APPEAR: brutal giant club
+OBJ: OBJ_WEAPONS/WPN_GIANT_CLUB
+PLUS: +0/+5
+COLOUR: BROWN
+TILE: urand_skullcrusher
+BRAND: SPWPN_SPEED
+STR: 5
NAME: glaive of the Guard
APPEAR: polished glaive
OBJ: OBJ_WEAPONS/WPN_GLAIVE
PLUS: +5/+8
COLOUR: LIGHTCYAN
+TILE: urand_guard
BRAND: SPWPN_ELECTROCUTION
AC: 5
BOOL: seeinv, berserk
@@ -356,31 +413,34 @@ APPEAR: crystal sword
OBJ: OBJ_WEAPONS/WPN_LONG_SWORD
PLUS: +12/+10
COLOUR: WHITE
+TILE: urand_jihad
BRAND: SPWPN_HOLY_WRATH
EV: 3
-ANGRY: 1
-BOOL: life
MAGIC: 20
+ANGRY: 1
STEALTH: -50
+BOOL: life
DESC_END: This sword was The Shining One's gift to a worshipper.
DESC: A long sword made of one huge piece of crystal.
-NAME: crossbow "Hellfire"
-APPEAR: flaming crossbow
-OBJ: OBJ_WEAPONS/WPN_CROSSBOW
-PLUS: +6/+9
-COLOUR: LIGHTRED
-BRAND: SPWPN_FLAME
-FIRE: 2
-COLD: -1
-MAGIC: 40
-DESC: A flaming crossbow, forged in the fires of the Hells.
+NAME: crossbow "Hellfire"
+APPEAR: flaming crossbow
+OBJ: OBJ_WEAPONS/WPN_CROSSBOW
+PLUS: +6/+9
+COLOUR: LIGHTRED
+TILE: urand_fiery_devil
+BRAND: SPWPN_FLAME
+FIRE: 2
+COLD: -1
+MAGIC: 40
+DESC: A flaming crossbow, forged in the fires of the Hells.
NAME: sword of the Doom Knight
APPEAR: adamantine great sword
OBJ: OBJ_WEAPONS/WPN_GREAT_SWORD
PLUS: +13/+13
COLOUR: BLUE
+TILE: urand_doom_knight
BRAND: SPWPN_PAIN
MAGIC: 50
BOOL: nospell
@@ -391,6 +451,7 @@ APPEAR: encrusted morningstar
OBJ: OBJ_WEAPONS/WPN_MORNINGSTAR
PLUS: +5/+5
COLOUR: LIGHTCYAN
+TILE: urand_eos
BRAND: SPWPN_ELECTROCUTION
BOOL: elec, seeinv, notelep
@@ -403,6 +464,7 @@ APPEAR: ebony spear
OBJ: OBJ_WEAPONS/WPN_SPEAR
PLUS: +2/+10
COLOUR: DARKGREY
+TILE: urand_botono
BRAND: SPWPN_VAMPIRICISM
STEALTH: -30
BOOL: poison, life, noises
@@ -413,6 +475,7 @@ APPEAR: mangy trident
OBJ: OBJ_WEAPONS/WPN_TRIDENT
PLUS: +10/+4
COLOUR: CYAN
+TILE: urand_octopus_king
BRAND: SPWPN_VENOM
BOOL: elec, poison
MAGIC: 50
@@ -425,6 +488,7 @@ APPEAR: mithril axe
OBJ: OBJ_WEAPONS/WPN_WAR_AXE
PLUS: +10/+6
COLOUR: WHITE
+TILE: urand_arga
BRAND: SPWPN_SPEED
STR: 2
MAGIC: 30
@@ -435,6 +499,7 @@ APPEAR: black staff
OBJ: OBJ_WEAPONS/WPN_QUARTERSTAFF
PLUS: +3/+1
COLOUR: DARKGREY
+TILE: urand_elemental
BRAND: SPWPN_PROTECTION
FIRE: 2
COLD: 2
@@ -444,23 +509,25 @@ BOOL: noises
DESC_END: This powerful staff used to belong to the leader of the Guild of
Five Elements.
-NAME: hand crossbow "Sniper"
-APPEAR: black crossbow
-OBJ: OBJ_WEAPONS/WPN_HAND_CROSSBOW
-PLUS: +10/+0
-COLOUR: DARKGREY
-BRAND: SPWPN_VENOM
-BOOL: seeinv
-DESC: A hand crossbow made of some black material.
-
-NAME: longbow "Piercer"
-APPEAR: very long metal bow
-OBJ: OBJ_WEAPONS/WPN_LONGBOW
-PLUS: +2/+10
-COLOUR: CYAN
-BRAND: SPWPN_VORPAL
-EV: -2
-DESC: An exceptionally large metal longbow.
+NAME: hand crossbow "Sniper"
+APPEAR: black crossbow
+OBJ: OBJ_WEAPONS/WPN_HAND_CROSSBOW
+PLUS: +10/+0
+COLOUR: DARKGREY
+TILE: urand_sniper
+BRAND: SPWPN_VENOM
+BOOL: seeinv
+DESC: A hand crossbow made of some black material.
+
+NAME: longbow "Piercer"
+APPEAR: very long metal bow
+OBJ: OBJ_WEAPONS/WPN_LONGBOW
+PLUS: +2/+10
+COLOUR: CYAN
+TILE: urand_piercer
+BRAND: SPWPN_VORPAL
+EV: -2
+DESC: An exceptionally large metal longbow.
ENUM: BLOWGUN_ASSASSIN
NAME: blowgun of the Assassin
@@ -468,8 +535,9 @@ APPEAR: tiny blowgun
OBJ: OBJ_WEAPONS/WPN_BLOWGUN
PLUS: +6/+6
COLOUR: WHITE
+TILE: urand_blowgun
STEALTH: 60
-BOOL: inv
+BOOL: inv, tilerim
DESC: It is designed for easy concealment, but still packs a nasty punch.
NAME: Wyrmbane
@@ -477,16 +545,19 @@ APPEAR: scale-covered lance
OBJ: OBJ_WEAPONS/WPN_SPEAR
PLUS: +9/+6
COLOUR: LIGHTGREEN
+TILE: urand_wyrmbane
BRAND: SPWPN_DRAGON_SLAYING
AC: 5
FIRE: 1
-BOOL: poison, berserk
+BOOL: poison, berserk, tilerim
NAME: Spriggan's Knife
APPEAR: dainty little knife
OBJ: OBJ_WEAPONS/WPN_KNIFE
PLUS: +4/+10
COLOUR: LIGHTCYAN
+TILE: urand_spriggans_knife
+BOOL: tilerim
EV: 4
DEX: 4
MAGIC: 20
@@ -501,26 +572,29 @@ APPEAR: glowing long sword
OBJ: OBJ_WEAPONS/WPN_LONG_SWORD
PLUS: +12/+16
COLOUR: LIGHTGREEN
+TILE: urand_plutonium
MUTATE: 6
CURSED: 1
STEALTH: -20
DESC: A long sword made of weird glowing metal.
-NAME: great mace "Undeadhunter"
-APPEAR: great steel mace
-OBJ: OBJ_WEAPONS/WPN_GREAT_MACE
-PLUS: +7/+7
-COLOUR: LIGHTGREY
-BRAND: SPWPN_HOLY_WRATH
-BOOL: life
+NAME: great mace "Undeadhunter"
+APPEAR: great steel mace
+OBJ: OBJ_WEAPONS/WPN_GREAT_MACE
+PLUS: +7/+7
+COLOUR: LIGHTGREY
+TILE: urand_undeadhunter
+BRAND: SPWPN_HOLY_WRATH
+BOOL: life
NAME: whip "Serpent-Scourge"
APPEAR: forked whip
OBJ: OBJ_WEAPONS/WPN_WHIP
PLUS: +5/+10
COLOUR: DARKGREY
+TILE: urand_serpent_scourge
BRAND: SPWPN_VENOM
-BOOL: poison
+BOOL: poison, tilerim
DESC_ID: A double-ended whip made from the cured hides of the Lair of Beasts'
deadly grey snakes.
@@ -529,6 +603,8 @@ APPEAR: thin dagger
OBJ: OBJ_WEAPONS/WPN_DAGGER
PLUS: +27/-1
COLOUR: LIGHTCYAN
+TILE: urand_knife_of_accuracy
+BOOL: tilerim
DESC_END: It is almost unerringly accurate.
# A play on the spell of the same name. Colour taken from crystal walls.
@@ -538,35 +614,39 @@ APPEAR: crystal spear
OBJ: OBJ_WEAPONS/WPN_SPEAR
PLUS: +6/+6
COLOUR: GREEN
+TILE: urand_crystal_spear
INT: 3
DESC_END: Presumably this relic led to the invention of the famous spell, or maybe the other way around.
-NAME: shield of Ignorance
-APPEAR: dull large shield
-OBJ: OBJ_ARMOUR/ARM_LARGE_SHIELD
-PLUS: +5
-COLOUR: BROWN
-AC: 2
-EV: 2
-INT: -6
-BOOL: life
-CURSED: 3
-
-NAME: robe of Augmentation
-APPEAR: silk robe
-OBJ: OBJ_ARMOUR/ARM_ROBE
-PLUS: +4
-COLOUR: LIGHTRED
-STR: 2
-INT: 2
-DEX: 2
-DESC: A robe made of the finest silk.
+NAME: shield of Ignorance
+APPEAR: dull large shield
+OBJ: OBJ_ARMOUR/ARM_LARGE_SHIELD
+PLUS: +5
+COLOUR: BROWN
+TILE: urand_ignorance
+AC: 2
+EV: 2
+INT: -6
+BOOL: life
+CURSED: 3
+
+NAME: robe of Augmentation
+APPEAR: silk robe
+OBJ: OBJ_ARMOUR/ARM_ROBE
+PLUS: +4
+COLOUR: LIGHTRED
+TILE: urand_augmentation
+STR: 2
+INT: 2
+DEX: 2
+DESC: A robe made of the finest silk.
NAME: cloak of the Thief
APPEAR: tattered cloak
OBJ: OBJ_ARMOUR/ARM_CLOAK
PLUS: +1
COLOUR: DARKGREY
+TILE: urand_thief
EV: 2
DEX: 2
DAM: -3
@@ -574,28 +654,31 @@ STEALTH: 60
BOOL: seeinv, inv, lev
DESC_END: It allows its wearer to excel in the arts of thievery.
-NAME: shield "Bullseye"
-APPEAR: round shield
-OBJ: OBJ_ARMOUR/ARM_SHIELD
-PLUS: +10
-COLOUR: RED
-EV: -5
+NAME: shield "Bullseye"
+APPEAR: round shield
+OBJ: OBJ_ARMOUR/ARM_SHIELD
+PLUS: +10
+COLOUR: RED
+TILE: urand_bullseye
+EV: -5
-NAME: crown of Dyrovepreva
-APPEAR: jewelled bronze crown
-OBJ: OBJ_ARMOUR/ARM_CAP
-PLUS: +3
-COLOUR: BROWN
-INT: 2
-METAB: 1
-BOOL: elec, seeinv
-DESC: A large crown of dull bronze, set with a dazzling array of gemstones.
+NAME: crown of Dyrovepreva
+APPEAR: jewelled bronze crown
+OBJ: OBJ_ARMOUR/ARM_CAP
+PLUS: +3
+COLOUR: BROWN
+TILE: urand_dyrovepreva
+INT: 2
+METAB: 1
+BOOL: elec, seeinv
+DESC: A large crown of dull bronze, set with a dazzling array of gemstones.
NAME: robe of Misfortune
APPEAR: fabulously ornate robe
OBJ: OBJ_ARMOUR/ARM_ROBE
PLUS: -5
COLOUR: MAGENTA
+TILE: urand_misfortune
EV: -4
STR: -2
INT: -2
@@ -611,6 +694,7 @@ APPEAR: vibrating cloak
OBJ: OBJ_ARMOUR/ARM_CLOAK
PLUS: +3
COLOUR: RED
+TILE: urand_flash
EV: 4
BOOL: lev, cantelep
DESC: A vibrating cloak.
@@ -621,6 +705,7 @@ APPEAR: soft boots
OBJ: OBJ_ARMOUR/ARM_BOOTS
PLUS: +2
COLOUR: BROWN
+TILE: urand_assassin
DEX: 3
STEALTH: 80
BOOL: inv
@@ -633,17 +718,19 @@ APPEAR: golden chain mail
OBJ: OBJ_ARMOUR/ARM_CHAIN_MAIL
PLUS: -1
COLOUR: YELLOW
+TILE: urand_lear
DEX: -3
-BOOL: nospell, cursed
+BOOL: cursed, nospell
DESC: A chain mail made of pure gold.
-NAME: skin of Zhor
-APPEAR: smelly skin
-OBJ: OBJ_ARMOUR/ARM_ANIMAL_SKIN
-PLUS: +4
-COLOUR: BROWN
-COLD: 2
-DESC: The skin of some strange animal.
+NAME: skin of Zhor
+APPEAR: smelly skin
+OBJ: OBJ_ARMOUR/ARM_ANIMAL_SKIN
+PLUS: +4
+COLOUR: BROWN
+TILE: urand_zhor
+COLD: 2
+DESC: The skin of some strange animal.
ENUM: SALAMANDER
NAME: salamander hide armour
@@ -651,6 +738,7 @@ APPEAR: red leather armour
OBJ: OBJ_ARMOUR/ARM_LEATHER_ARMOUR
PLUS: +3
COLOUR: RED
+TILE: urand_salamander
FIRE: 2
BOOL: berserk
DESC: A leather armour made of a salamander's skin.
@@ -660,6 +748,7 @@ APPEAR: thick gauntlets
OBJ: OBJ_ARMOUR/ARM_GLOVES
PLUS: +3
COLOUR: BROWN
+TILE: urand_war
ACC: 3
DAM: 3
@@ -668,6 +757,7 @@ APPEAR: bronze shield
OBJ: OBJ_ARMOUR/ARM_SHIELD
PLUS: +3
COLOUR: LIGHTRED
+TILE: urand_resistance
FIRE: 1
COLD: 1
MAGIC: 40
@@ -678,6 +768,7 @@ APPEAR: dull robe
OBJ: OBJ_ARMOUR/ARM_ROBE
PLUS: -1
COLOUR: LIGHTGREY
+TILE: urand_folly
INT: -5
CURSED: 2
BOOL: nospell
@@ -689,25 +780,28 @@ APPEAR: weird-looking armour
OBJ: OBJ_ARMOUR/ARM_PLATE_MAIL
PLUS: +10
COLOUR: LIGHTGREEN
+TILE: urand_maxwell
BOOL: nospell, notelep, cursed
DESC: A weird-looking armour.
-ENUM: DRAGONMASK
-NAME: mask of the Dragon
-APPEAR: blue mask
-OBJ: OBJ_ARMOUR/ARM_CAP
-COLOUR: BLUE
-MAGIC: 40
-ACC: 2
-DAM: 2
-BOOL: seeinv
-DESC: A blue mask.
+ENUM: DRAGONMASK
+NAME: mask of the Dragon
+APPEAR: blue mask
+OBJ: OBJ_ARMOUR/ARM_CAP
+COLOUR: BLUE
+TILE: urand_dragonmask
+MAGIC: 40
+ACC: 2
+DAM: 2
+BOOL: seeinv
+DESC: A blue mask.
NAME: robe of Night
APPEAR: black robe
OBJ: OBJ_ARMOUR/ARM_ROBE
PLUS: +4
COLOUR: DARKGREY
+TILE: urand_night
MAGIC: 30
STEALTH: 50
BOOL: seeinv, inv
@@ -715,38 +809,42 @@ DESC: A long black robe made of strange glossy material.
DESC_END: According to legend, this robe was the gift of Ratri the Goddess
of the Night to one of her followers.
-NAME: armour of the Dragon King
-APPEAR: shiny dragon armour
-OBJ: OBJ_ARMOUR/ARM_GOLD_DRAGON_ARMOUR
-PLUS: +5
-COLOUR: YELLOW
-MAGIC: 50
-
-NAME: hat of the Alchemist
-APPEAR: dirty hat
-OBJ: OBJ_ARMOUR/ARM_WIZARD_HAT
-PLUS: +2
-COLOUR: MAGENTA
-FIRE: 1
-COLD: 1
-MAGIC: 30
-BOOL: elec
-DESC: A dirty hat.
+NAME: armour of the Dragon King
+APPEAR: shiny dragon armour
+OBJ: OBJ_ARMOUR/ARM_GOLD_DRAGON_ARMOUR
+PLUS: +5
+COLOUR: YELLOW
+TILE: urand_dragon_king
+MAGIC: 50
-NAME: Fencer's gloves
-APPEAR: silk gloves
-OBJ: OBJ_ARMOUR/ARM_GLOVES
-PLUS: +2
-COLOUR: WHITE
-EV: 3
-DEX: 3
-ACC: 5
-DESC: A pair of gloves made of white silk.
+NAME: hat of the Alchemist
+APPEAR: dirty hat
+OBJ: OBJ_ARMOUR/ARM_WIZARD_HAT
+PLUS: +2
+COLOUR: MAGENTA
+TILE: urand_alchemist
+FIRE: 1
+COLD: 1
+MAGIC: 30
+BOOL: elec
+DESC: A dirty hat.
+
+NAME: Fencer's gloves
+APPEAR: silk gloves
+OBJ: OBJ_ARMOUR/ARM_GLOVES
+PLUS: +2
+COLOUR: WHITE
+TILE: urand_fencer
+EV: 3
+DEX: 3
+ACC: 5
+DESC: A pair of gloves made of white silk.
NAME: cloak of Starlight
APPEAR: phosphorescent cloak
OBJ: OBJ_ARMOUR/ARM_CLOAK
COLOUR: WHITE
+TILE: urand_starlight
EV: 4
COLD: 1
STEALTH: -30
@@ -759,6 +857,7 @@ APPEAR: motley cloak
OBJ: OBJ_ARMOUR/ARM_CLOAK
PLUS: +1
COLOUR: LIGHTRED
+TILE: urand_ratskin_cloak
INT: -1
DEX: -1
BOOL: life, poison
@@ -772,6 +871,7 @@ NAME: amulet of the Air
APPEAR: sky-blue amulet
OBJ: OBJ_JEWELLERY/AMU_CONTROLLED_FLIGHT
COLOUR: LIGHTCYAN
+TILE: urand_air
EV: 3
STEALTH: 50
BOOL: elec, lev
@@ -781,31 +881,35 @@ NAME: ring of Shadows
APPEAR: black ring
OBJ: OBJ_JEWELLERY/RING_INVISIBILITY
COLOUR: DARKGREY
+TILE: urand_shadows
EV: 4
ACC: -3
-BOOL: life, seeinv
STEALTH: 40
+BOOL: life, seeinv
NAME: amulet of Cekugob
APPEAR: crystal amulet
OBJ: OBJ_JEWELLERY/AMU_WARDING
COLOUR: LIGHTGREY
+TILE: urand_cekugob
AC: 1
EV: 1
-METAB: 2
BOOL: elec, poison, life, notelep
+METAB: 2
-NAME: amulet of the Four Winds
-APPEAR: jade amulet
-OBJ: OBJ_JEWELLERY/AMU_CLARITY
-COLOUR: LIGHTGREEN
-BOOL: life
-MAGIC: 100
+NAME: amulet of the Four Winds
+APPEAR: jade amulet
+OBJ: OBJ_JEWELLERY/AMU_CLARITY
+COLOUR: LIGHTGREEN
+TILE: urand_four_winds
+BOOL: life
+MAGIC: 100
NAME: necklace of Bloodlust
APPEAR: blood-stained necklace
OBJ: OBJ_JEWELLERY/AMU_RAGE
COLOUR: RED
+TILE: urand_bloodlust
STR: 2
INT: -2
MAGIC: 30
@@ -814,29 +918,33 @@ DAM: 3
CURSED: 3
STEALTH: -20
-NAME: ring of Shaolin
-APPEAR: jade ring
-OBJ: OBJ_JEWELLERY/RING_EVASION
-PLUS: +8
-COLOUR: LIGHTGREEN
-
-NAME: ring of Robustness
-APPEAR: steel ring
-OBJ: OBJ_JEWELLERY/RING_PROTECTION
-PLUS: +8
-COLOUR: LIGHTGREY
-
-NAME: ring of the Mage
-APPEAR: sapphire ring
-OBJ: OBJ_JEWELLERY/RING_WIZARDRY
-COLOUR: LIGHTBLUE
-INT: 3
-MAGIC: 50
+NAME: ring of Shaolin
+APPEAR: jade ring
+OBJ: OBJ_JEWELLERY/RING_EVASION
+PLUS: +8
+COLOUR: LIGHTGREEN
+TILE: urand_shaolin
+
+NAME: ring of Robustness
+APPEAR: steel ring
+OBJ: OBJ_JEWELLERY/RING_PROTECTION
+PLUS: +8
+COLOUR: LIGHTGREY
+TILE: urand_robustness
+
+NAME: ring of the Mage
+APPEAR: sapphire ring
+OBJ: OBJ_JEWELLERY/RING_WIZARDRY
+COLOUR: LIGHTBLUE
+TILE: urand_mage
+INT: 3
+MAGIC: 50
NAME: brooch of Shielding
APPEAR: shield-shaped amulet
OBJ: OBJ_JEWELLERY/AMU_WARDING
COLOUR: LIGHTBLUE
+TILE: urand_brooch_of_shielding
AC: 4
EV: 4
DESC: A shield-shaped amulet.
diff --git a/crawl-ref/source/artefact.cc b/crawl-ref/source/artefact.cc
index 5fd86bab22..f4698f4e05 100644
--- a/crawl-ref/source/artefact.cc
+++ b/crawl-ref/source/artefact.cc
@@ -326,7 +326,7 @@ bool is_unrandom_artefact( const item_def &item )
bool is_special_unrandom_artefact( const item_def &item )
{
return (item.flags & ISFLAG_UNRANDART
- && get_unrand_specialness(item.special) == UNRANDPSEC_SPECIAL);
+ && get_unrand_specialness(item.special) == UNRANDSPEC_SPECIAL);
}
unique_item_status_type get_unique_item_status(const item_def& item)
@@ -1612,7 +1612,7 @@ unrand_special_type get_unrand_specialness(int unrand_index)
if (unrand_index >= UNRAND_SINGING_SWORD
&& unrand_index <= UNRAND_ASMODEUS)
{
- return (UNRANDPSEC_SPECIAL);
+ return (UNRANDSPEC_SPECIAL);
}
return (UNRANDSPEC_NORMAL);
}
diff --git a/crawl-ref/source/artefact.h b/crawl-ref/source/artefact.h
index 5379e66a00..38ee3344d4 100644
--- a/crawl-ref/source/artefact.h
+++ b/crawl-ref/source/artefact.h
@@ -24,7 +24,7 @@ enum unrand_special_type
{
UNRANDSPEC_EITHER,
UNRANDSPEC_NORMAL,
- UNRANDPSEC_SPECIAL
+ UNRANDSPEC_SPECIAL
};
// NOTE: This enumeration is automatically generated from art-data.txt
diff --git a/crawl-ref/source/makefile_tiles.mgw b/crawl-ref/source/makefile_tiles.mgw
index 1d4af35827..67b9801f1b 100644
--- a/crawl-ref/source/makefile_tiles.mgw
+++ b/crawl-ref/source/makefile_tiles.mgw
@@ -48,7 +48,7 @@ PCRELIBA := lib$(PCRELIB).a
RLTILES = rltiles
EXTRA_INCLUDES += -I$(RLTILES)
-TILEDEFS = dngn main player
+TILEDEFS = dngn main player unrand
TILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)
TILEDEFOBJS = $(TILEDEFPRES:%=%.o)
TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)
diff --git a/crawl-ref/source/makefile_tiles.unix b/crawl-ref/source/makefile_tiles.unix
index 9541d2a279..234d02125b 100644
--- a/crawl-ref/source/makefile_tiles.unix
+++ b/crawl-ref/source/makefile_tiles.unix
@@ -85,7 +85,7 @@ RLTILES = rltiles
EXTRA_INCLUDES += -I$(RLTILES)
-TILEDEFS = dngn main player
+TILEDEFS = dngn main player unrand
TILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)
TILEDEFOBJS = $(TILEDEFPRES:%=%.o)
TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)
diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc
index 40cf5bd8fd..203f4b6447 100644
--- a/crawl-ref/source/makeitem.cc
+++ b/crawl-ref/source/makeitem.cc
@@ -891,7 +891,7 @@ static bool _try_make_item_special_unrand(item_def& item, int force_type,
bool abyss = item_level == level_id(LEVEL_ABYSS).absdepth();
int idx = find_okay_unrandart(item.base_type, force_type,
- UNRANDPSEC_SPECIAL, abyss);
+ UNRANDSPEC_SPECIAL, abyss);
if (idx != -1)
{
diff --git a/crawl-ref/source/rltiles/dc-item.txt b/crawl-ref/source/rltiles/dc-item.txt
index 75f0ee504a..66e64ad254 100644
--- a/crawl-ref/source/rltiles/dc-item.txt
+++ b/crawl-ref/source/rltiles/dc-item.txt
@@ -13,28 +13,8 @@
# with respect to variations and will not share variations with the base
# equipment. See tilepick.cc for more details.
-#####OBJ_WEAPONS
-#####ARTIFACTS
-%sdir item/weapon/artefact
-spwpn_singing_sword SPWPN_SINGING_SWORD
-spwpn_wrath_of_trog SPWPN_WRATH_OF_TROG
-spwpn_scythe_of_curses SPWPN_SCYTHE_OF_CURSES
-spwpn_mace_of_variability SPWPN_MACE_OF_VARIABILITY
-spwpn_glaive_of_prune SPWPN_GLAIVE_OF_PRUNE
-%rim 1
-spwpn_sceptre_of_torment SPWPN_SCEPTRE_OF_TORMENT
-spwpn_sword_of_zonguldrok SPWPN_SWORD_OF_ZONGULDROK
-spwpn_sword_of_cerebov SPWPN_SWORD_OF_CEREBOV
-spwpn_staff_of_dispater SPWPN_STAFF_OF_DISPATER
-spwpn_sceptre_of_asmodeus SPWPN_SCEPTRE_OF_ASMODEUS
-spwpn_sword_of_power SPWPN_SWORD_OF_POWER
-%rim 0
-spwpn_staff_of_olgreb SPWPN_STAFF_OF_OLGREB
-spwpn_vampires_tooth SPWPN_VAMPIRES_TOOTH
-spwpn_wucad_mu SPWPN_STAFF_OF_WUCAD_MU
-
-##### Unrandom artifacts
-%include dc-urand.txt
+##### Artefacts (fixed and unrandart)
+%include dc-unrand.txt
#####NORMAL
%sdir item/weapon
diff --git a/crawl-ref/source/rltiles/dc-unrand.txt b/crawl-ref/source/rltiles/dc-unrand.txt
new file mode 100644
index 0000000000..62df756cc5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-unrand.txt
@@ -0,0 +1,84 @@
+%sdir item/armour/artefact
+urand_ignorance UNRAND_IGNORANCE
+urand_augmentation UNRAND_AUGMENTATION
+urand_thief UNRAND_THIEF
+urand_bullseye UNRAND_BULLSEYE
+urand_dyrovepreva UNRAND_DYROVEPREVA
+urand_misfortune UNRAND_MISFORTUNE
+urand_flash UNRAND_FLASH
+urand_assassin UNRAND_BOOTS_ASSASSIN
+urand_lear UNRAND_LEAR
+urand_zhor UNRAND_ZHOR
+urand_salamander UNRAND_SALAMANDER
+urand_war UNRAND_WAR
+urand_resistance UNRAND_RESISTANCE
+urand_folly UNRAND_FOLLY
+urand_maxwell UNRAND_MAXWELL
+urand_dragonmask UNRAND_DRAGONMASK
+urand_night UNRAND_NIGHT
+urand_dragon_king UNRAND_DRAGON_KING
+urand_alchemist UNRAND_ALCHEMIST
+urand_fencer UNRAND_FENCERS_GLOVES
+urand_starlight UNRAND_STARLIGHT
+urand_ratskin_cloak UNRAND_RATSKIN_CLOAK
+
+%sdir item/weapon/artefact
+spwpn_singing_sword UNRAND_SINGING_SWORD
+spwpn_wrath_of_trog UNRAND_TROG
+spwpn_mace_of_variability UNRAND_VARIABILITY
+spwpn_glaive_of_prune UNRAND_PRUNE
+spwpn_staff_of_olgreb UNRAND_OLGREB
+spwpn_wucad_mu UNRAND_WUCAD_MU
+spwpn_vampires_tooth UNRAND_VAMPIRES_TOOTH
+spwpn_scythe_of_curses UNRAND_CURSES
+urand_bloodbane UNRAND_BLOODBANE
+urand_flaming_death UNRAND_FLAMING_DEATH
+urand_brilliance UNRAND_BRILLIANCE
+urand_leech UNRAND_LEECH
+urand_chilly_death UNRAND_CHILLY_DEATH
+urand_morg UNRAND_MORG
+urand_finisher UNRAND_FINISHER
+urand_punk UNRAND_PUNK
+urand_krishna UNRAND_KRISHNA
+urand_skullcrusher UNRAND_SKULLCRUSHER
+urand_guard UNRAND_GUARD
+urand_jihad UNRAND_JIHAD
+urand_fiery_devil UNRAND_HELLFIRE
+urand_doom_knight UNRAND_DOOM_KNIGHT
+urand_eos UNRAND_EOS
+urand_botono UNRAND_BOTONO
+urand_octopus_king UNRAND_OCTOPUS_KING
+urand_arga UNRAND_ARGA
+urand_elemental UNRAND_ELEMENTAL_STAFF
+urand_sniper UNRAND_SNIPER
+urand_piercer UNRAND_PIERCER
+urand_plutonium UNRAND_PLUTONIUM_SWORD
+urand_undeadhunter UNRAND_UNDEADHUNTER
+urand_crystal_spear UNRAND_CRYSTAL_SPEAR
+%rim 1
+spwpn_sword_of_power UNRAND_POWER
+spwpn_sceptre_of_torment UNRAND_TORMENT
+spwpn_sword_of_zonguldrok UNRAND_ZONGULDROK
+spwpn_sword_of_cerebov UNRAND_CEREBOV
+spwpn_staff_of_dispater UNRAND_DISPATER
+spwpn_sceptre_of_asmodeus UNRAND_ASMODEUS
+urand_blowgun UNRAND_BLOWGUN_ASSASSIN
+urand_wyrmbane UNRAND_WYRMBANE
+urand_spriggans_knife UNRAND_SPRIGGANS_KNIFE
+urand_serpent_scourge UNRAND_SERPENT_SCOURGE
+urand_knife_of_accuracy UNRAND_ACCURACY
+%rim 0
+
+%sdir item/amulet/artefact
+urand_air UNRAND_AIR
+urand_cekugob UNRAND_CEKUGOB
+urand_four_winds UNRAND_FOUR_WINDS
+urand_bloodlust UNRAND_BLOODLUST
+urand_brooch_of_shielding UNRAND_SHIELDING
+
+%sdir item/ring/artefact
+urand_shadows UNRAND_SHADOWS
+urand_shaolin UNRAND_SHAOLIN
+urand_robustness UNRAND_ROBUSTNESS
+urand_mage UNRAND_MAGE
+
diff --git a/crawl-ref/source/rltiles/dc-urand.txt b/crawl-ref/source/rltiles/dc-urand.txt
deleted file mode 100644
index 83f15f1585..0000000000
--- a/crawl-ref/source/rltiles/dc-urand.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-%sdir item/weapon/artefact
-urand_bloodbane URAND_BLOODBANE
-urand_flaming_death URAND_FLAMING_DEATH
-urand_brilliance URAND_BRILLIANCE
-urand_leech URAND_LEECH
-urand_chilly_death URAND_CHILLY_DEATH
-urand_morg URAND_MORG
-urand_finisher URAND_FINISHER
-urand_punk URAND_PUNK
-urand_krishna URAND_KRISHNA
-urand_skullcrusher URAND_SKULLCRUSHER
-urand_guard URAND_GUARD
-urand_jihad URAND_JIHAD
-urand_fiery_devil URAND_FIERY_DEVIL
-urand_doom_knight URAND_DOOM_KNIGHT
-urand_eos URAND_EOS
-urand_botono URAND_BOTONO
-urand_octopus_king URAND_OCTOPUS_KING
-urand_arga URAND_ARGA
-urand_elemental URAND_ELEMENTAL
-urand_sniper URAND_SNIPER
-urand_piercer URAND_PIERCER
-urand_plutonium URAND_PLUTONIUM
-urand_undeadhunter URAND_UNDEADHUNTER
-urand_crystal_spear URAND_CRYSTAL_SPEAR
-%rim 1
-urand_blowgun URAND_BLOWGUN_ASSASSIN
-urand_serpent_scourge URAND_SERPENT_SCOURGE
-urand_wyrmbane URAND_WYRMBANE
-urand_spriggans_knife URAND_SPRIGGANS_KNIFE
-urand_knife_of_accuracy URAND_KNIFE_OF_ACCURACY
-%rim 0
-
-%sdir item/armour/artefact
-urand_ignorance URAND_IGNORANCE
-urand_augmentation URAND_AUGMENTATION
-urand_thief URAND_THIEF
-urand_bullseye URAND_BULLSEYE
-urand_dyrovepreva URAND_DYROVEPREVA
-urand_misfortune URAND_MISFORTUNE
-urand_flash URAND_FLASH
-urand_assassin URAND_BOOTS_ASSASSIN
-urand_lear URAND_LEAR
-urand_zhor URAND_ZHOR
-urand_salamander URAND_SALAMANDER
-urand_war URAND_WAR
-urand_resistance URAND_RESISTANCE
-urand_folly URAND_FOLLY
-urand_maxwell URAND_MAXWELL
-urand_dragonmask URAND_DRAGONMASK
-urand_night URAND_NIGHT
-urand_dragon_king URAND_DRAGON_KING
-urand_alchemist URAND_ALCHEMIST
-urand_fencer URAND_FENCER
-urand_starlight URAND_STARLIGHT
-urand_ratskin_cloak URAND_RATSKIN_CLOAK
-
-%sdir item/ring/artefact
-urand_shadows URAND_SHADOWS
-urand_shaolin URAND_SHAOLIN
-urand_robustness URAND_ROBUSTNESS
-urand_mage URAND_MAGE
-
-%sdir item/amulet/artefact
-urand_cekugob URAND_CEKUGOB
-urand_four_winds URAND_FOUR_WINDS
-urand_bloodlust URAND_BLOODLUST
-urand_brooch_of_shielding URAND_BROOCH_OF_SHIELDING
-urand_air URAND_AIR
-
diff --git a/crawl-ref/source/rltiles/tiledef-unrand.cc b/crawl-ref/source/rltiles/tiledef-unrand.cc
new file mode 100644
index 0000000000..177e996618
--- /dev/null
+++ b/crawl-ref/source/rltiles/tiledef-unrand.cc
@@ -0,0 +1,90 @@
+// This file has been automatically generated.
+
+#include "AppHdr.h"
+#include "tiledef-unrand.h"
+
+#include "artefact.h"
+#include "tiledef-main.h"
+
+int unrandart_to_tile(int unrand)
+{
+ switch (unrand)
+ {
+ case UNRAND_SINGING_SWORD: return TILE_UNRAND_SINGING_SWORD;
+ case UNRAND_TROG: return TILE_UNRAND_TROG;
+ case UNRAND_VARIABILITY: return TILE_UNRAND_VARIABILITY;
+ case UNRAND_PRUNE: return TILE_UNRAND_PRUNE;
+ case UNRAND_POWER: return TILE_UNRAND_POWER;
+ case UNRAND_OLGREB: return TILE_UNRAND_OLGREB;
+ case UNRAND_WUCAD_MU: return TILE_UNRAND_WUCAD_MU;
+ case UNRAND_VAMPIRES_TOOTH: return TILE_UNRAND_VAMPIRES_TOOTH;
+ case UNRAND_CURSES: return TILE_UNRAND_CURSES;
+ case UNRAND_TORMENT: return TILE_UNRAND_TORMENT;
+ case UNRAND_ZONGULDROK: return TILE_UNRAND_ZONGULDROK;
+ case UNRAND_CEREBOV: return TILE_UNRAND_CEREBOV;
+ case UNRAND_DISPATER: return TILE_UNRAND_DISPATER;
+ case UNRAND_ASMODEUS: return TILE_UNRAND_ASMODEUS;
+ case UNRAND_BLOODBANE: return TILE_UNRAND_BLOODBANE;
+ case UNRAND_FLAMING_DEATH: return TILE_UNRAND_FLAMING_DEATH;
+ case UNRAND_BRILLIANCE: return TILE_UNRAND_BRILLIANCE;
+ case UNRAND_LEECH: return TILE_UNRAND_LEECH;
+ case UNRAND_CHILLY_DEATH: return TILE_UNRAND_CHILLY_DEATH;
+ case UNRAND_MORG: return TILE_UNRAND_MORG;
+ case UNRAND_FINISHER: return TILE_UNRAND_FINISHER;
+ case UNRAND_PUNK: return TILE_UNRAND_PUNK;
+ case UNRAND_KRISHNA: return TILE_UNRAND_KRISHNA;
+ case UNRAND_SKULLCRUSHER: return TILE_UNRAND_SKULLCRUSHER;
+ case UNRAND_GUARD: return TILE_UNRAND_GUARD;
+ case UNRAND_JIHAD: return TILE_UNRAND_JIHAD;
+ case UNRAND_HELLFIRE: return TILE_UNRAND_HELLFIRE;
+ case UNRAND_DOOM_KNIGHT: return TILE_UNRAND_DOOM_KNIGHT;
+ case UNRAND_EOS: return TILE_UNRAND_EOS;
+ case UNRAND_BOTONO: return TILE_UNRAND_BOTONO;
+ case UNRAND_OCTOPUS_KING: return TILE_UNRAND_OCTOPUS_KING;
+ case UNRAND_ARGA: return TILE_UNRAND_ARGA;
+ case UNRAND_ELEMENTAL_STAFF: return TILE_UNRAND_ELEMENTAL_STAFF;
+ case UNRAND_SNIPER: return TILE_UNRAND_SNIPER;
+ case UNRAND_PIERCER: return TILE_UNRAND_PIERCER;
+ case UNRAND_BLOWGUN_ASSASSIN: return TILE_UNRAND_BLOWGUN_ASSASSIN;
+ case UNRAND_WYRMBANE: return TILE_UNRAND_WYRMBANE;
+ case UNRAND_SPRIGGANS_KNIFE: return TILE_UNRAND_SPRIGGANS_KNIFE;
+ case UNRAND_PLUTONIUM_SWORD: return TILE_UNRAND_PLUTONIUM_SWORD;
+ case UNRAND_UNDEADHUNTER: return TILE_UNRAND_UNDEADHUNTER;
+ case UNRAND_SERPENT_SCOURGE: return TILE_UNRAND_SERPENT_SCOURGE;
+ case UNRAND_ACCURACY: return TILE_UNRAND_ACCURACY;
+ case UNRAND_CRYSTAL_SPEAR: return TILE_UNRAND_CRYSTAL_SPEAR;
+ case UNRAND_IGNORANCE: return TILE_UNRAND_IGNORANCE;
+ case UNRAND_AUGMENTATION: return TILE_UNRAND_AUGMENTATION;
+ case UNRAND_THIEF: return TILE_UNRAND_THIEF;
+ case UNRAND_BULLSEYE: return TILE_UNRAND_BULLSEYE;
+ case UNRAND_DYROVEPREVA: return TILE_UNRAND_DYROVEPREVA;
+ case UNRAND_MISFORTUNE: return TILE_UNRAND_MISFORTUNE;
+ case UNRAND_FLASH: return TILE_UNRAND_FLASH;
+ case UNRAND_BOOTS_ASSASSIN: return TILE_UNRAND_BOOTS_ASSASSIN;
+ case UNRAND_LEAR: return TILE_UNRAND_LEAR;
+ case UNRAND_ZHOR: return TILE_UNRAND_ZHOR;
+ case UNRAND_SALAMANDER: return TILE_UNRAND_SALAMANDER;
+ case UNRAND_WAR: return TILE_UNRAND_WAR;
+ case UNRAND_RESISTANCE: return TILE_UNRAND_RESISTANCE;
+ case UNRAND_FOLLY: return TILE_UNRAND_FOLLY;
+ case UNRAND_MAXWELL: return TILE_UNRAND_MAXWELL;
+ case UNRAND_DRAGONMASK: return TILE_UNRAND_DRAGONMASK;
+ case UNRAND_NIGHT: return TILE_UNRAND_NIGHT;
+ case UNRAND_DRAGON_KING: return TILE_UNRAND_DRAGON_KING;
+ case UNRAND_ALCHEMIST: return TILE_UNRAND_ALCHEMIST;
+ case UNRAND_FENCERS_GLOVES: return TILE_UNRAND_FENCERS_GLOVES;
+ case UNRAND_STARLIGHT: return TILE_UNRAND_STARLIGHT;
+ case UNRAND_RATSKIN_CLOAK: return TILE_UNRAND_RATSKIN_CLOAK;
+ case UNRAND_AIR: return TILE_UNRAND_AIR;
+ case UNRAND_SHADOWS: return TILE_UNRAND_SHADOWS;
+ case UNRAND_CEKUGOB: return TILE_UNRAND_CEKUGOB;
+ case UNRAND_FOUR_WINDS: return TILE_UNRAND_FOUR_WINDS;
+ case UNRAND_BLOODLUST: return TILE_UNRAND_BLOODLUST;
+ case UNRAND_SHAOLIN: return TILE_UNRAND_SHAOLIN;
+ case UNRAND_ROBUSTNESS: return TILE_UNRAND_ROBUSTNESS;
+ case UNRAND_MAGE: return TILE_UNRAND_MAGE;
+ case UNRAND_SHIELDING: return TILE_UNRAND_SHIELDING;
+ default: return -1;
+ }
+}
+
diff --git a/crawl-ref/source/rltiles/tiledef-unrand.h b/crawl-ref/source/rltiles/tiledef-unrand.h
new file mode 100644
index 0000000000..866135ab1d
--- /dev/null
+++ b/crawl-ref/source/rltiles/tiledef-unrand.h
@@ -0,0 +1,6 @@
+#ifndef TILEDEF_UNRAND_H
+#define TILEDEF_UNRAND_H
+
+int unrandart_to_tile(int unrand);
+
+#endif
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 0e719e0bea..ca4667954a 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -30,6 +30,7 @@ REVISION("$Rev$");
#include "tiles.h"
#include "tilemcache.h"
#include "tiledef-dngn.h"
+#include "tiledef-unrand.h"
#include "traps.h"
#include "travel.h"
#include "view.h"
@@ -1081,90 +1082,11 @@ static int _tileidx_monster(int mon_idx, bool detected)
static int _tileidx_unrand_artefact(int idx)
{
- switch (idx)
- {
- case UNRAND_SINGING_SWORD: return TILE_SPWPN_SINGING_SWORD;
- case UNRAND_TROG: return TILE_SPWPN_WRATH_OF_TROG;
- case UNRAND_CURSES: return TILE_SPWPN_SCYTHE_OF_CURSES;
- case UNRAND_VARIABILITY: return TILE_SPWPN_MACE_OF_VARIABILITY;
- case UNRAND_PRUNE: return TILE_SPWPN_GLAIVE_OF_PRUNE;
- case UNRAND_TORMENT: return TILE_SPWPN_SCEPTRE_OF_TORMENT;
- case UNRAND_ZONGULDROK: return TILE_SPWPN_SWORD_OF_ZONGULDROK;
- case UNRAND_CEREBOV: return TILE_SPWPN_SWORD_OF_CEREBOV;
- case UNRAND_DISPATER: return TILE_SPWPN_STAFF_OF_DISPATER;
- case UNRAND_ASMODEUS: return TILE_SPWPN_SCEPTRE_OF_ASMODEUS;
- case UNRAND_POWER: return TILE_SPWPN_SWORD_OF_POWER;
- case UNRAND_OLGREB: return TILE_SPWPN_STAFF_OF_OLGREB;
- case UNRAND_VAMPIRES_TOOTH: return TILE_SPWPN_VAMPIRES_TOOTH;
- case UNRAND_WUCAD_MU: return TILE_SPWPN_STAFF_OF_WUCAD_MU;
-
- // Weapons
- case UNRAND_BLOODBANE: return TILE_URAND_BLOODBANE;
- case UNRAND_FLAMING_DEATH: return TILE_URAND_FLAMING_DEATH;
- case UNRAND_BRILLIANCE: return TILE_URAND_BRILLIANCE;
- case UNRAND_LEECH: return TILE_URAND_LEECH;
- case UNRAND_CHILLY_DEATH: return TILE_URAND_CHILLY_DEATH;
- case UNRAND_MORG: return TILE_URAND_MORG;
- case UNRAND_FINISHER: return TILE_URAND_FINISHER;
- case UNRAND_PUNK: return TILE_URAND_PUNK;
- case UNRAND_KRISHNA: return TILE_URAND_KRISHNA;
- case UNRAND_SKULLCRUSHER: return TILE_URAND_SKULLCRUSHER;
- case UNRAND_BLOWGUN_ASSASSIN: return TILE_URAND_BLOWGUN_ASSASSIN;
- case UNRAND_GUARD: return TILE_URAND_GUARD;
- case UNRAND_JIHAD: return TILE_URAND_JIHAD;
- case UNRAND_DOOM_KNIGHT: return TILE_URAND_DOOM_KNIGHT;
- case UNRAND_EOS: return TILE_URAND_EOS;
- case UNRAND_BOTONO: return TILE_URAND_BOTONO;
- case UNRAND_OCTOPUS_KING: return TILE_URAND_OCTOPUS_KING;
- case UNRAND_ARGA: return TILE_URAND_ARGA;
- case UNRAND_ELEMENTAL_STAFF: return TILE_URAND_ELEMENTAL;
- case UNRAND_SNIPER: return TILE_URAND_SNIPER;
- case UNRAND_PLUTONIUM_SWORD: return TILE_URAND_PLUTONIUM;
- case UNRAND_UNDEADHUNTER: return TILE_URAND_UNDEADHUNTER;
- case UNRAND_WYRMBANE: return TILE_URAND_WYRMBANE;
- case UNRAND_SPRIGGANS_KNIFE: return TILE_URAND_SPRIGGANS_KNIFE;
- case UNRAND_SERPENT_SCOURGE: return TILE_URAND_SERPENT_SCOURGE;
- case UNRAND_ACCURACY: return TILE_URAND_KNIFE_OF_ACCURACY;
- case UNRAND_HELLFIRE: return TILE_URAND_FIERY_DEVIL;
- case UNRAND_PIERCER: return TILE_URAND_PIERCER;
- case UNRAND_CRYSTAL_SPEAR: return TILE_URAND_CRYSTAL_SPEAR;
-
- // Armour
- case UNRAND_IGNORANCE: return TILE_URAND_IGNORANCE;
- case UNRAND_AUGMENTATION: return TILE_URAND_AUGMENTATION;
- case UNRAND_THIEF: return TILE_URAND_THIEF;
- case UNRAND_BULLSEYE: return TILE_URAND_BULLSEYE;
- case UNRAND_DYROVEPREVA: return TILE_URAND_DYROVEPREVA;
- case UNRAND_MISFORTUNE: return TILE_URAND_MISFORTUNE;
- case UNRAND_FLASH: return TILE_URAND_FLASH;
- case UNRAND_LEAR: return TILE_URAND_LEAR;
- case UNRAND_ZHOR: return TILE_URAND_ZHOR;
- case UNRAND_SALAMANDER: return TILE_URAND_SALAMANDER;
- case UNRAND_WAR: return TILE_URAND_WAR;
- case UNRAND_RESISTANCE: return TILE_URAND_RESISTANCE;
- case UNRAND_FOLLY: return TILE_URAND_FOLLY;
- case UNRAND_MAXWELL: return TILE_URAND_MAXWELL;
- case UNRAND_DRAGONMASK: return TILE_URAND_DRAGONMASK;
- case UNRAND_NIGHT: return TILE_URAND_NIGHT;
- case UNRAND_DRAGON_KING: return TILE_URAND_DRAGON_KING;
- case UNRAND_ALCHEMIST: return TILE_URAND_ALCHEMIST;
- case UNRAND_FENCERS_GLOVES: return TILE_URAND_FENCER;
- case UNRAND_BOOTS_ASSASSIN: return TILE_URAND_BOOTS_ASSASSIN;
- case UNRAND_STARLIGHT: return TILE_URAND_STARLIGHT;
- case UNRAND_RATSKIN_CLOAK: return TILE_URAND_RATSKIN_CLOAK;
-
- // Jewellery
- case UNRAND_SHADOWS: return TILE_URAND_SHADOWS;
- case UNRAND_AIR: return TILE_URAND_AIR;
- case UNRAND_CEKUGOB: return TILE_URAND_CEKUGOB;
- case UNRAND_FOUR_WINDS: return TILE_URAND_FOUR_WINDS;
- case UNRAND_BLOODLUST: return TILE_URAND_BLOODLUST;
- case UNRAND_SHAOLIN: return TILE_URAND_SHAOLIN;
- case UNRAND_ROBUSTNESS: return TILE_URAND_ROBUSTNESS;
- case UNRAND_MAGE: return TILE_URAND_MAGE;
- case UNRAND_SHIELDING: return TILE_URAND_BROOCH_OF_SHIELDING;
- default: return TILE_TODO;
- }
+ const int tile = unrandart_to_tile(idx);
+ if (tile != -1)
+ return tile;
+
+ return TILE_TODO;
}
static int _get_etype(const item_def &item)
@@ -3529,7 +3451,7 @@ int tilep_equ_armour(const item_def &item)
if (is_unrandom_artefact( item ))
{
- switch (find_unrandart_index(item) + 1)
+ switch (find_unrandart_index(item))
{
case UNRAND_AUGMENTATION: return TILEP_BODY_ROBE_WHITE_BLUE;
case UNRAND_MISFORTUNE: return TILEP_BODY_ROBE_MISFORTUNE;
@@ -3612,7 +3534,7 @@ int tilep_equ_shield(const item_def &item)
if (is_unrandom_artefact( item ))
{
- switch (find_unrandart_index(item) + 1)
+ switch (find_unrandart_index(item))
{
case UNRAND_IGNORANCE: return TILEP_HAND2_SHIELD_OF_IGNORANCE;
case UNRAND_BULLSEYE: return TILEP_HAND2_BULLSEYE;
@@ -3640,7 +3562,7 @@ int tilep_equ_cloak(const item_def &item)
if (is_unrandom_artefact( item ))
{
- switch (find_unrandart_index(item) + 1)
+ switch (find_unrandart_index(item))
{
case UNRAND_RATSKIN_CLOAK: return TILEP_CLOAK_RATSKIN_CLOAK;
default: break;
@@ -3678,7 +3600,7 @@ int tilep_equ_helm(const item_def &item)
if (is_unrandom_artefact(item))
{
- switch (find_unrandart_index(item) + 1)
+ switch (find_unrandart_index(item))
{
case UNRAND_DYROVEPREVA: return TILEP_HELM_DYROVEPREVA;
case UNRAND_DRAGONMASK: return TILEP_HELM_ART_DRAGONHELM;
@@ -3810,7 +3732,7 @@ int tilep_equ_gloves(const item_def &item)
if (is_unrandom_artefact(item))
{
- switch (find_unrandart_index(item) + 1)
+ switch (find_unrandart_index(item))
{
case UNRAND_WAR: return TILEP_ARM_GLOVE_BLACK;
case UNRAND_FENCERS_GLOVES: return TILEP_ARM_GLOVE_WHITE;
@@ -3866,7 +3788,7 @@ int tilep_equ_boots(const item_def &item)
if (is_unrandom_artefact(item))
{
- switch (find_unrandart_index(item) + 1)
+ switch (find_unrandart_index(item))
{
case UNRAND_BOOTS_ASSASSIN: return TILEP_BOOTS_MIDDLE_GRAY;
default: break;
diff --git a/crawl-ref/source/util/art-data.pl b/crawl-ref/source/util/art-data.pl
index 3eb5b53453..afb8dd93f2 100755
--- a/crawl-ref/source/util/art-data.pl
+++ b/crawl-ref/source/util/art-data.pl
@@ -7,7 +7,7 @@ my @errors = ();
my @all_artefacts = ();
my %used_names = ();
my %used_appears = ();
-my %used_enums = ();
+my %used_enums = ();
my %field_type = (
AC => "num",
@@ -22,9 +22,6 @@ my %field_type = (
COLOUR => "enum",
CURSED => "num",
DAM => "num",
- DESC => "str",
- DESC_END => "str",
- DESC_ID => "str",
DEX => "num",
ELEC => "bool",
EV => "num",
@@ -48,6 +45,12 @@ my %field_type = (
STEALTH => "num",
STR => "num",
+ DESC => "str",
+ DESC_END => "str",
+ DESC_ID => "str",
+ TILE => "str",
+ TILERIM => "bool",
+
plus => "num",
plus2 => "num",
base_type => "enum",
@@ -76,7 +79,7 @@ sub error
$msg .= $str;
- $artefact->{_ERRROR} = 1;
+ $artefact->{_ERROR} = 1;
push(@errors, $msg);
}
@@ -356,7 +359,7 @@ sub process_line
{
if (exists($artefact->{NAME}))
{
- eror($artefact, "ENUM must be before NAME");
+ error($artefact, "ENUM must be before NAME");
return;
}
$enum = "$value";
@@ -629,6 +632,142 @@ sub write_enums
close(ENUM_OUT);
}
+sub write_tiles
+{
+ my $tilefile = "dc-unrand.txt";
+ print "Updating $tilefile...\n";
+
+ die "Can't write to $tilefile\n" if (-e $tilefile && !-w $tilefile);
+ unless (open(TILES, ">$tilefile"))
+ {
+ die "Couldn't open '$tilefile' for writing: $!\n";
+ }
+
+ my %art_by_type = ();
+ foreach my $artefact (@all_artefacts)
+ {
+ next if ($artefact->{NAME} =~ /DUMMY/);
+
+ if ($artefact->{TILE} eq "")
+ {
+ print STDERR "No tile defined for '$artefact->{NAME}'\n";
+ next;
+ }
+
+ # The path always has the form /item/$folder/artefact.
+ my $type = $artefact->{base_type} || "";
+ my $folder = "";
+ if ($type eq "OBJ_WEAPONS")
+ {
+ $folder = "weapon";
+ }
+ elsif ($type eq "OBJ_ARMOUR")
+ {
+ $folder = "armour";
+ }
+ elsif ($type eq "OBJ_JEWELLERY")
+ {
+ if ($artefact->{sub_type} =~ /RING_/)
+ {
+ $folder = "ring";
+ }
+ else
+ {
+ $folder = "amulet";
+ }
+ }
+ else
+ {
+ next;
+ }
+
+ my $definition = "$artefact->{TILE} UNRAND_$artefact->{_ENUM}";
+ my $needrim = ($artefact->{TILERIM} ? "1" : "0");
+ if (defined $art_by_type{$folder})
+ {
+ if (defined $art_by_type{$folder}{$needrim})
+ {
+ push @{$art_by_type{$folder}{$needrim}}, $definition;
+ }
+ else
+ {
+ $art_by_type{$folder}{$needrim} = [$definition];
+ }
+ }
+ else
+ {
+ $art_by_type{$folder} = {$needrim => [$definition]};
+ }
+ }
+
+ # Output the tile definitions sorted by type (and thus path).
+ foreach my $type (keys %art_by_type)
+ {
+ print TILES "%sdir item/$type/artefact\n";
+
+ foreach my $needrim (sort keys %{$art_by_type{$type}})
+ {
+ print TILES "%rim 1\n" if ($needrim);
+ foreach my $def (@{$art_by_type{$type}{$needrim}})
+ {
+ print TILES "$def\n";
+ }
+ print TILES "%rim 0\n" if ($needrim);
+ }
+ print TILES "\n";
+ }
+ close(TILES);
+
+ # Create tiledef-unrand.cc for the function unrandart_to_tile().
+ # Should we also create tiledef-unrand.h this way?
+ $tilefile = "tiledef-unrand.cc";
+ print "Updating $tilefile...\n";
+
+ die "Can't write to $tilefile\n" if (-e $tilefile && !-w $tilefile);
+ unless (open(TILES, ">$tilefile"))
+ {
+ die "Couldn't open '$tilefile' for writing: $!\n";
+ }
+
+ print TILES << "HEADER_END";
+// This file has been automatically generated.
+
+#include "AppHdr.h"
+#include "tiledef-unrand.h"
+
+#include "artefact.h"
+#include "tiledef-main.h"
+
+int unrandart_to_tile(int unrand)
+{
+ switch (unrand)
+ {
+HEADER_END
+
+ my $longest_enum = 0;
+ foreach my $artefact (@all_artefacts)
+ {
+ my $enum = $artefact->{_ENUM};
+ my $len = length($enum);
+ $longest_enum = $len if ($len > $longest_enum);
+ }
+ $longest_enum += length("UNRAND_");
+
+ foreach my $artefact (@all_artefacts)
+ {
+ next if ($artefact->{NAME} =~ /DUMMY/);
+ next if ($artefact->{TILE} eq "");
+
+ my $enum = "UNRAND_$artefact->{_ENUM}";
+ print TILES (" " x 4) . "case $enum:"
+ . " " x ($longest_enum - length($enum) + 2) . "return TILE_$enum;\n";
+ }
+ print TILES (" " x 4) . "default: return -1;\n";
+ print TILES (" " x 4) . "}\n";
+ print TILES "}\n\n";
+ close(TILES);
+}
+
###############################################################3
###############################################################3
###############################################################3
@@ -704,4 +843,7 @@ if (@errors > 0)
write_data();
write_enums();
+chdir("rltiles");
+write_tiles();
+
exit (0);