summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-12 03:55:34 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-12 03:55:34 +0000
commit7c1e0016bfbaf83edc7ced6c18525b02cef706e8 (patch)
tree77d315f9f55aba8bb2372974b17b8f7dbc26a1b6 /crawl-ref/source
parentb1c63e6499689b802d76caa64f766a36ec081ec2 (diff)
downloadcrawl-ref-7c1e0016bfbaf83edc7ced6c18525b02cef706e8.tar.gz
crawl-ref-7c1e0016bfbaf83edc7ced6c18525b02cef706e8.zip
Incorporating new tiles from Denzi/Mitsuhiro. Rings and amulets now have labels when identified. Centaurs/yaktaurs now display the weapon they're wielding (and look better too). Variations of weapons and armor (i.e. normal, shiny, randart) are now determined automatically from the tile definitions, rather than being hardcoded. Also, improved axe tiles.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6910 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/rltiles/dc-item.txt177
-rw-r--r--crawl-ref/source/rltiles/dc-mon.txt4
-rw-r--r--crawl-ref/source/rltiles/dc-mon/centaur-melee.pngbin0 -> 889 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/centaur_warrior-melee.pngbin0 -> 865 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/centaur_warrior.pngbin973 -> 951 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yaktaur-melee.pngbin0 -> 1080 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yaktaur_captain-melee.pngbin0 -> 981 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yaktaur_captain.pngbin1063 -> 1044 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-c-flight.pngbin0 -> 295 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-clarity.pngbin0 -> 326 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-conservation.pngbin0 -> 272 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-gourmand.pngbin0 -> 429 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-inaccuracy.pngbin0 -> 306 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-r-corrosion.pngbin0 -> 446 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-r-mutation.pngbin0 -> 298 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-r-slow.pngbin0 -> 371 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-rage.pngbin0 -> 366 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/i-warding.pngbin0 -> 237 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-c-teleport.pngbin0 -> 219 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-dex.pngbin0 -> 311 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-evasion.pngbin0 -> 347 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-fire.pngbin0 -> 228 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-hunger.pngbin0 -> 288 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-ice.pngbin0 -> 391 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-int.pngbin0 -> 291 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-invisibility.pngbin0 -> 336 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-levitation.pngbin0 -> 309 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-life-protection.pngbin0 -> 362 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-magical-power.pngbin0 -> 298 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-protection.pngbin0 -> 289 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-r-cold.pngbin0 -> 412 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-r-fire.pngbin0 -> 316 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-r-lightning.pngbin0 -> 295 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-r-magic.pngbin0 -> 288 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-r-poison.pngbin0 -> 323 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-regeneration.pngbin0 -> 287 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-s-abil.pngbin0 -> 298 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-see-invis.pngbin0 -> 318 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-slaying.pngbin0 -> 319 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-str.pngbin0 -> 308 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-sustenance.pngbin0 -> 263 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-teleport.pngbin0 -> 308 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/i-wizardry.pngbin0 -> 366 bytes
-rw-r--r--crawl-ref/source/rltiles/item/rod/i-rod_destruction_lightning.pngbin196 -> 157 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-summoning.pngbin252 -> 323 bytes
-rw-r--r--crawl-ref/source/rltiles/item/staff/i-staff_channeling.pngbin320 -> 286 bytes
-rw-r--r--crawl-ref/source/rltiles/item/staff/i-staff_earth.pngbin236 -> 291 bytes
-rw-r--r--crawl-ref/source/rltiles/item/staff/i-staff_power.pngbin197 -> 226 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-fire.pngbin236 -> 225 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-flame.pngbin168 -> 215 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bardiche.pngbin0 -> 400 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bardiche2.pngbin0 -> 462 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/battle_axe.pngbin569 -> 504 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/battle_axe2.pngbin541 -> 711 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/broad_axe.pngbin0 -> 413 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/broad_axe2.pngbin612 -> 503 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/broad_axe3.pngbin0 -> 612 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/executioner_axe.pngbin582 -> 551 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/executioner_axe2.pngbin492 -> 772 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/falchion.pngbin453 -> 458 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/falchion2.pngbin0 -> 521 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/hand_axe.pngbin426 -> 364 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/hand_axe2.pngbin0 -> 326 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/war_axe.pngbin455 -> 423 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/war_axe2.pngbin0 -> 386 bytes
-rw-r--r--crawl-ref/source/rltiles/tool/tile_colour.cc55
-rw-r--r--crawl-ref/source/rltiles/tool/tile_colour.h3
-rw-r--r--crawl-ref/source/rltiles/tool/tile_convert.cc49
-rw-r--r--crawl-ref/source/rltiles/tool/tile_page.cc51
-rw-r--r--crawl-ref/source/tilemcache.cc16
-rw-r--r--crawl-ref/source/tilemcache.h2
-rw-r--r--crawl-ref/source/tilepick.cc205
-rw-r--r--crawl-ref/source/tilereg.cc44
73 files changed, 410 insertions, 196 deletions
diff --git a/crawl-ref/source/rltiles/dc-item.txt b/crawl-ref/source/rltiles/dc-item.txt
index c21315ed61..81319a5d18 100644
--- a/crawl-ref/source/rltiles/dc-item.txt
+++ b/crawl-ref/source/rltiles/dc-item.txt
@@ -1,3 +1,18 @@
+# A note on variations. To create additional variations for weapons or armour,
+# simply create 1-5 images, e.g.:
+#
+# weapon_normal WEP_SOME_WEAPON
+# weapon_shiny
+# weapon_runed
+# weapon_glowing
+# weapon_randart
+#
+# If only the first line has a define on it, then the following images will be
+# considered as variations. If you don't have five, images will be reused for
+# multiple types. Orcish/elven/dwarven equipment are considered separate items
+# 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
@@ -28,21 +43,21 @@ spwpn_wucad_mu SPWPN_STAFF_OF_WUCAD_MU /* Its power varies in proportion to its
##Blunt
club WPN_CLUB/* D5H4S12 A heavy piece of wood.
mace WPN_MACE/* D8H3S14 A long handle with a heavy lump on one end.
-mace2 WPN_MACE2
+mace2
mace_large WPN_GREAT_MACE/* D16H-3S18 A large and heavy mace.
-mace_large2 WPN_GREAT_MACE2
+mace_large2
flail WPN_FLAIL
-flail2 WPN_FLAIL2
+flail2
spiked_flail WPN_SPIKED_FLAIL
-spiked_flail2 WPN_SPIKED_FLAIL2
+spiked_flail2
great_flail WPN_GREAT_FLAIL
-great_flail2 WPN_GREAT_FLAIL2
+great_flail2
morningstar WPN_MORNINGSTAR
-morningstar2 WPN_MORNINGSTAR2
+morningstar2
eveningstar WPN_EVENINGSTAR
-eveningstar2 WPN_EVENINGSTAR2
+eveningstar2
hammer WPN_HAMMER
-hammer2 WPN_HAMMER2
+hammer2
ankus WPN_ANKUS/* D9H1S14 A large and vicious toothed club.
bullwhip WPN_WHIP/* D3H1S14 A whip.
demon_whip WPN_DEMON_WHIP/* D10H1S14 A terrible weapon, woven in the depths of the inferno.
@@ -57,32 +72,32 @@ orcish_dagger WPN_DAGGER_ORC
elven_dagger WPN_DAGGER_ELF
short_sword WPN_SHORT_SWORD/* D6H5S12 A sword with a short, slashing blade.
-short_sword2 WPN_SHORT_SWORD_1
+short_sword2
orcish_short_sword WPN_SHORT_SWORD_ORC
elven_short_sword WPN_SHORT_SWORD_ELF
long_sword2 WPN_LONG_SWORD/* D10H3S14 A sword with a long, slashing blade.
%rim 0
-long_sword3 WPN_LONG_SWORD_1
+long_sword3
%rim 1
orcish_long_sword WPN_LONG_SWORD_ORC
greatsword WPN_GREAT_SWORD/* D16H-1S17 A sword with a very long, heavy blade and a long handle.
-greatsword2 WPN_GREAT_SWORD_1
+greatsword2
orcish_great_sword WPN_GREAT_SWORD_ORC
falchion WPN_FALCHION/* D8H2S13 A sword with a broad slashing blade.
+falchion2
scimitar WPN_SCIMITAR/* D11H1S14 A long sword with a curved blade.
-scimitar2 WPN_SCIMITAR2
+scimitar2
silver_saber WPN_SABRE/* D7H4S12 A sword with a medium length slashing blade.
-sabre2 WPN_SABRE_1
+sabre2
quickblade WPN_QUICK_BLADE/* D5H6S7 A small and magically quick sword.
-#tsurugi WPN_KATANA
katana2 WPN_KATANA/* D13H4S13 A very rare and extremely effective imported weapon, featuring a long single-edged blade.
-katana3 WPN_KATANA_1
+katana3
double_sword WPN_DOUBLE_SWORD/* D15H3S16 A magical weapon with two razor-sharp blades.
triple_sword WPN_TRIPLE_SWORD/* D19H-1S19 A magical weapon with three great razor-sharp blades.
@@ -90,39 +105,45 @@ demon_blade WPN_DEMON_BLADE/* D13H2S15 A terrible weapon, forged in the fires of
##Axe
hand_axe WPN_HAND_AXE/* D7H2S13 An small axe designed for either hand combat or throwing.
+hand_axe2
war_axe WPN_WAR_AXE/* D11H0S16 An axe intended for hand to hand combat.
-battle_axe2 WPN_BROAD_AXE/* D14H1S17 An axe with a large blade.
+war_axe2
+broad_axe WPN_BROAD_AXE/* D14H1S17 An axe with a large blade.
broad_axe2
+broad_axe3
battle_axe WPN_BATTLEAXE/* D17H-2S18 A large axe with a double-headed blade.
-battle_axe3 WPN_BATTLEAXE_1
+battle_axe2
+battle_axe3
executioner_axe WPN_EXECUTIONERS_AXE /* D20H-4S20 A huge axe.
-executioner_axe2 WPN_EXECUTIONERS_AXE_1
+executioner_axe2
##Ranged
blowgun WPN_BLOWGUN /* D1H0S10 A long, light tube, open at both ends. Doing very little damage, its main use is to fire poisoned needles from afar. It makes very little noise.
-blowgun2 WPN_BLOWGUN1
+blowgun2
sling WPN_SLING /* D1H-1S11 A piece of cloth and leather for launching stones, which do a small amount of damage on impact.
bow WPN_BOW /* D2H-3S11 A curved piece of wood and string, for shooting arrows. It does good damage in combat, and a skilled user can use it to great effect.
-bow2 WPN_BOW1
+bow2
crossbow WPN_CROSSBOW /* D2H-1S15 A piece of machinery used for firing bolts, which takes some time to load and fire. It does very good damage in combat.
-crossbow2 WPN_CROSSBOW1
+crossbow2
hand_crossbow WPN_HAND_CROSSBOW /* D1H-1S15 A small crossbow, for firing darts.
-hand_crossbow2 WPN_HAND_CROSSBOW1
+hand_crossbow2
##Pole
quarterstaff WPN_QUARTERSTAFF /* D7H6S12 A sturdy wooden pole.
elven_spear WPN_SPEAR /* D5H3S13 A long stick with a pointy blade on one end, to be held or thrown.
-spear2 WPN_SPEAR2
+spear2
trident WPN_TRIDENT /* D9H-2S17 A hafted weapon with three points at one end.
-trident2 WPN_TRIDENT2
+trident2
halberd WPN_HALBERD /* D13H-3S19 A long pole with a spiked axe head on one end.
-halberd2 WPN_HALBERD2
+halberd2
scythe WPN_SCYTHE /* D14H-4S22 A farm implement, usually unsuited to combat.
-scythe2 WPN_SCYTHE2
+scythe2
glaive WPN_GLAIVE /* D15H-3S18 A pole with a large, heavy blade on one end.
-glaive2 WPN_GLAIVE2
+glaive2
orcish_glaive WPN_GLAIVE_ORC
+bardiche WPN_BARDICHE
+bardiche2
demon_trident WPN_DEMON_TRIDENT /* D15H-2S17 A terrible weapon, molded by fire and brimstone.
@@ -132,7 +153,7 @@ blessed_blade WPN_BLESSED_BLADE
%rim 1
longbow WPN_LONGBOW
lajatang WPN_LAJATANG
-lajatang2 WPN_LAJATANG2
+lajatang2
lochaber_axe WPN_LOCHABER_AXE
######OBJ_MISSILES
@@ -208,27 +229,27 @@ effect/rock0 MI_LARGE_ROCK0
######OBJ_ARMOUR
%sdir item/armor
robe ARM_ROBE /* A1E0 A cloth robe.
-robe2 ARM_ROBE_1
-robe3 ARM_ROBE_2
+robe2
+robe3
leather_armor2 ARM_LEATHER_ARMOUR /* A2E-1 A suit made of hardened leather.
-breast_plate2 ARM_LEATHER_ARMOUR_1
-leather_armor4 ARM_LEATHER_ARMOUR_2
+breast_plate2
+leather_armor4
orcish_leather_armor ARM_LEATHER_ARMOUR_ORC
elven_leather_armor ARM_LEATHER_ARMOUR_ELF
ring_mail ARM_RING_MAIL /* A4E-2 A leather suit covered in little rings.
-ring_mail2 ARM_RING_MAIL_1
+ring_mail2
orcish_ringmail ARM_RING_MAIL_ORC
elven_ringmail ARM_RING_MAIL_ELF
dwarven_ringmail ARM_RING_MAIL_DWA
scale_mail ARM_SCALE_MAIL /* A5E-2 A leather suit covered in little metal plates.
-scale_mail2 ARM_SCALE_MAIL_2
+scale_mail2
elven_scalemail ARM_SCALE_MAIL_ELF
chain_mail1 ARM_CHAIN_MAIL /* A6E-3 A suit made of interlocking metal rings.
-chain_mail2 ARM_CHAIN_MAIL_1
+chain_mail2
chain_mail3 ARM_CHAIN_MAIL_ELF
orcish_chain_mail ARM_CHAIN_MAIL_ORC
@@ -241,7 +262,7 @@ orcish_platemail ARM_PLATE_MAIL_ORC
crystal_plate_mail ARM_CRYSTAL_PLATE_MAIL /* A16E-8
animal_skin ARM_ANIMAL_SKIN /* A1E0 The skins of several animals.
-animal_skin2 ARM_ANIMAL_SKIN_1
+animal_skin2
troll_hide ARM_TROLL_HIDE /* A1E-1 The stiff and knobbly hide of a troll. I suppose you could wear it if you really wanted to.
troll_leather_armour ARM_TROLL_LEATHER_ARMOUR /* A3E-1 A magical armour, made from the stiff and knobbly skin of a common troll. It magically regenerates its wearer's flesh at a fairly slow rate (unless already a troll).
@@ -270,45 +291,45 @@ centaur_barding_magenta
centaur_barding_red
elven_shield ARM_SHIELD /* A0E0 A piece of metal, to be strapped on one's arm. It is cumbersome to wear, and slightly slows the rate at which you may attack.
-shield_kite2 ARM_SHIELD_1
-shield_round2 ARM_SHIELD_2
+shield_kite2
+shield_round2
#dwarvish_roundshield ARM_BUCKLER
%rim 0
small_shield ARM_BUCKLER /* A small shield.
-small_shield2 ARM_BUCKLER_1
+small_shield2
%rim 1
large_shield ARM_LARGE_SHIELD /* Like a normal shield, only larger. It is very cumbersome to wear, and slows the rate at which you may attack.
-shield_large2 ARM_LARGE_SHIELD_1
-shield_kite3 ARM_LARGE_SHIELD_2
+shield_large2
+shield_kite3
leather_cloak ARM_CLOAK /* A1E0 A cloth cloak.
-cloak2 ARM_CLOAK_1
-cloak3 ARM_CLOAK_2
-cloak4 ARM_CLOAK_3
+cloak2
+cloak3
+cloak4
#####ARM_HELMET
elven_leather_helm THELM_CAP /* A cloth or leather cap.
wizard_hat THELM_WIZARD_HAT /* A conical cloth hat.
-wizard_hat2 THELM_WIZARD_HAT_1
+wizard_hat2
visored_helmet THELM_HELM /* A1E0 A piece of metal headgear.
-etched_helmet THELM_HELM_1
-helm3 THELM_HELM_2
-helm_visor1 THELM_HELM_3
+etched_helmet
+helm3
+helm_visor1
###### GLOVES
glove1 ARM_GLOVES /* A1E0 A pair of gloves.
-glove3 ARM_GLOVES_1
-glove5 ARM_GLOVES_2
-gauntlet2 ARM_GLOVES_3
+glove3
+glove5
+gauntlet2
###### BOOTS
boots_brown1 ARM_BOOTS /* A1E0 A pair of sturdy boots.
-jackboots ARM_BOOTS_1
-boots_stripe1 ARM_BOOTS_2
-boots_green2 ARM_BOOTS_3
+jackboots
+boots_stripe1
+boots_green2
###########OBJ_WANDS
%sdir item/wand
@@ -444,6 +465,36 @@ plain_black
bronze
moonstone
+#########ID-ed
+%rim 0
+%shrink 0
+i-regeneration RING_REGENERATION
+i-protection RING_PROTECTION
+i-r-fire RING_PROTECTION_FROM_FIRE
+i-r-poison RING_POISON_RESISTANCE
+i-r-cold RING_PROTECTION_FROM_COLD
+i-str RING_STRENGTH
+i-slaying RING_SLAYING
+i-see-invis RING_SEE_INVISIBLE
+i-invisibility RING_INVISIBILITY
+i-hunger RING_HUNGER
+i-teleport RING_TELEPORTATION
+i-evasion RING_EVASION
+i-s-abil RING_SUSTAIN_ABILITIES
+i-sustenance RING_SUSTENANCE
+i-dex RING_DEXTERITY
+i-int RING_INTELLIGENCE
+i-wizardry RING_WIZARDRY
+i-magical-power RING_MAGICAL_POWER
+i-levitation RING_LEVITATION
+i-life-protection RING_LIFE_PROTECTION
+i-r-magic RING_PROTECTION_FROM_MAGIC
+i-fire RING_FIRE
+i-ice RING_ICE
+i-c-teleport RING_TELEPORT_CONTROL
+%rim 1
+%shrink 1
+
###amulets
%sdir item/amulet
crystal_white AMU_NORMAL_OFFSET /*zirconium*/
@@ -477,6 +528,22 @@ stone2_blue
crystal_red
eye_green
+%rim 0
+%shrink 0
+### ID-ed amulet
+i-rage AMU_RAGE
+i-r-slow AMU_RESIST_SLOW
+i-clarity AMU_CLARITY
+i-warding AMU_WARDING
+i-r-corrosion AMU_RESIST_CORROSION
+i-gourmand AMU_THE_GOURMAND
+i-conservation AMU_CONSERVATION
+i-c-flight AMU_CONTROLLED_FLIGHT
+i-inaccuracy AMU_INACCURACY
+i-r-mutation AMU_RESIST_MUTATION
+%rim 1
+%shrink 1
+
####################OBJ_POTIONS
%sdir item/potion
clear POTION_OFFSET /*clear*/
@@ -595,7 +662,9 @@ i-staff_enchantment STAFF_ENCHANTMENT
i-staff_summoning STAFF_SUMMONING
i-staff_air STAFF_AIR
i-staff_earth STAFF_EARTH
+%rim 0
i-staff_channeling STAFF_CHANNELING
+%rim 1
%shrink 1
%sdir item/rod
diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt
index 4cbdc25071..9ae29aa02a 100644
--- a/crawl-ref/source/rltiles/dc-mon.txt
+++ b/crawl-ref/source/rltiles/dc-mon.txt
@@ -308,9 +308,13 @@ butterfly6
giant_bat MONS_GIANT_BAT /*'b'*/
centaur MONS_CENTAUR /*'c'*/
+centaur-melee MONS_CENTAUR_MELEE
centaur_warrior MONS_CENTAUR_WARRIOR /*'c'*/
+centaur_warrior-melee MONS_CENTAUR_WARRIOR_MELEE
yaktaur MONS_YAKTAUR /*'c'*/
+yaktaur-melee MONS_YAKTAUR_MELEE
yaktaur_captain MONS_YAKTAUR_CAPTAIN /*'c'*/
+yaktaur_captain-melee MONS_YAKTAUR_CAPTAIN_MELEE
firedrake MONS_FIREDRAKE /*'d'*/
lindwurm MONS_LINDWURM /*'d'*/
diff --git a/crawl-ref/source/rltiles/dc-mon/centaur-melee.png b/crawl-ref/source/rltiles/dc-mon/centaur-melee.png
new file mode 100644
index 0000000000..d5f69cd4c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/centaur-melee.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/centaur_warrior-melee.png b/crawl-ref/source/rltiles/dc-mon/centaur_warrior-melee.png
new file mode 100644
index 0000000000..df6cd18506
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/centaur_warrior-melee.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/centaur_warrior.png b/crawl-ref/source/rltiles/dc-mon/centaur_warrior.png
index c1194031f3..7dfa86b301 100644
--- a/crawl-ref/source/rltiles/dc-mon/centaur_warrior.png
+++ b/crawl-ref/source/rltiles/dc-mon/centaur_warrior.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yaktaur-melee.png b/crawl-ref/source/rltiles/dc-mon/yaktaur-melee.png
new file mode 100644
index 0000000000..0a1d252ae6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/yaktaur-melee.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yaktaur_captain-melee.png b/crawl-ref/source/rltiles/dc-mon/yaktaur_captain-melee.png
new file mode 100644
index 0000000000..caf0ed758e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/yaktaur_captain-melee.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yaktaur_captain.png b/crawl-ref/source/rltiles/dc-mon/yaktaur_captain.png
index 96705225de..d3406b6a16 100644
--- a/crawl-ref/source/rltiles/dc-mon/yaktaur_captain.png
+++ b/crawl-ref/source/rltiles/dc-mon/yaktaur_captain.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-c-flight.png b/crawl-ref/source/rltiles/item/amulet/i-c-flight.png
new file mode 100644
index 0000000000..e898048448
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-c-flight.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-clarity.png b/crawl-ref/source/rltiles/item/amulet/i-clarity.png
new file mode 100644
index 0000000000..84959b68e1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-clarity.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-conservation.png b/crawl-ref/source/rltiles/item/amulet/i-conservation.png
new file mode 100644
index 0000000000..21fa8b2ffd
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-conservation.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-gourmand.png b/crawl-ref/source/rltiles/item/amulet/i-gourmand.png
new file mode 100644
index 0000000000..520fc467bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-gourmand.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-inaccuracy.png b/crawl-ref/source/rltiles/item/amulet/i-inaccuracy.png
new file mode 100644
index 0000000000..80c1c4f424
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-inaccuracy.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-r-corrosion.png b/crawl-ref/source/rltiles/item/amulet/i-r-corrosion.png
new file mode 100644
index 0000000000..b150724916
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-r-corrosion.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-r-mutation.png b/crawl-ref/source/rltiles/item/amulet/i-r-mutation.png
new file mode 100644
index 0000000000..d496a84aea
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-r-mutation.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-r-slow.png b/crawl-ref/source/rltiles/item/amulet/i-r-slow.png
new file mode 100644
index 0000000000..9c73b2afe6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-r-slow.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-rage.png b/crawl-ref/source/rltiles/item/amulet/i-rage.png
new file mode 100644
index 0000000000..2e9440b1cd
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-rage.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/i-warding.png b/crawl-ref/source/rltiles/item/amulet/i-warding.png
new file mode 100644
index 0000000000..c06e77f9be
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/i-warding.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-c-teleport.png b/crawl-ref/source/rltiles/item/ring/i-c-teleport.png
new file mode 100644
index 0000000000..671b94ca93
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-c-teleport.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-dex.png b/crawl-ref/source/rltiles/item/ring/i-dex.png
new file mode 100644
index 0000000000..e419eba2bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-dex.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-evasion.png b/crawl-ref/source/rltiles/item/ring/i-evasion.png
new file mode 100644
index 0000000000..7bdf64f95f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-evasion.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-fire.png b/crawl-ref/source/rltiles/item/ring/i-fire.png
new file mode 100644
index 0000000000..2544bdb2c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-fire.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-hunger.png b/crawl-ref/source/rltiles/item/ring/i-hunger.png
new file mode 100644
index 0000000000..00dd937e99
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-hunger.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-ice.png b/crawl-ref/source/rltiles/item/ring/i-ice.png
new file mode 100644
index 0000000000..6a7d282ce7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-ice.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-int.png b/crawl-ref/source/rltiles/item/ring/i-int.png
new file mode 100644
index 0000000000..24c5c88a0f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-int.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-invisibility.png b/crawl-ref/source/rltiles/item/ring/i-invisibility.png
new file mode 100644
index 0000000000..5af41316f6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-invisibility.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-levitation.png b/crawl-ref/source/rltiles/item/ring/i-levitation.png
new file mode 100644
index 0000000000..02f0390bb2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-levitation.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-life-protection.png b/crawl-ref/source/rltiles/item/ring/i-life-protection.png
new file mode 100644
index 0000000000..13098a66bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-life-protection.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-magical-power.png b/crawl-ref/source/rltiles/item/ring/i-magical-power.png
new file mode 100644
index 0000000000..b31d509d3c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-magical-power.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-protection.png b/crawl-ref/source/rltiles/item/ring/i-protection.png
new file mode 100644
index 0000000000..3d3287f176
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-protection.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-r-cold.png b/crawl-ref/source/rltiles/item/ring/i-r-cold.png
new file mode 100644
index 0000000000..ea5f69972b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-r-cold.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-r-fire.png b/crawl-ref/source/rltiles/item/ring/i-r-fire.png
new file mode 100644
index 0000000000..dde61278ac
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-r-fire.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-r-lightning.png b/crawl-ref/source/rltiles/item/ring/i-r-lightning.png
new file mode 100644
index 0000000000..df96932319
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-r-lightning.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-r-magic.png b/crawl-ref/source/rltiles/item/ring/i-r-magic.png
new file mode 100644
index 0000000000..164f29807a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-r-magic.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-r-poison.png b/crawl-ref/source/rltiles/item/ring/i-r-poison.png
new file mode 100644
index 0000000000..368a1d7b7d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-r-poison.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-regeneration.png b/crawl-ref/source/rltiles/item/ring/i-regeneration.png
new file mode 100644
index 0000000000..cd24c4cfb1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-regeneration.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-s-abil.png b/crawl-ref/source/rltiles/item/ring/i-s-abil.png
new file mode 100644
index 0000000000..bb9ff7bb2e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-s-abil.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-see-invis.png b/crawl-ref/source/rltiles/item/ring/i-see-invis.png
new file mode 100644
index 0000000000..bf54b633f2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-see-invis.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-slaying.png b/crawl-ref/source/rltiles/item/ring/i-slaying.png
new file mode 100644
index 0000000000..c208133cc8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-slaying.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-str.png b/crawl-ref/source/rltiles/item/ring/i-str.png
new file mode 100644
index 0000000000..ac2ab65e8f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-str.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-sustenance.png b/crawl-ref/source/rltiles/item/ring/i-sustenance.png
new file mode 100644
index 0000000000..accee2ac06
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-sustenance.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-teleport.png b/crawl-ref/source/rltiles/item/ring/i-teleport.png
new file mode 100644
index 0000000000..3ece64b9e3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-teleport.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/i-wizardry.png b/crawl-ref/source/rltiles/item/ring/i-wizardry.png
new file mode 100644
index 0000000000..34d4f30a98
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/i-wizardry.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/rod/i-rod_destruction_lightning.png b/crawl-ref/source/rltiles/item/rod/i-rod_destruction_lightning.png
index 44bf3a415f..f1c5131693 100644
--- a/crawl-ref/source/rltiles/item/rod/i-rod_destruction_lightning.png
+++ b/crawl-ref/source/rltiles/item/rod/i-rod_destruction_lightning.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-summoning.png b/crawl-ref/source/rltiles/item/scroll/i-summoning.png
index a6519c333b..db02767fec 100644
--- a/crawl-ref/source/rltiles/item/scroll/i-summoning.png
+++ b/crawl-ref/source/rltiles/item/scroll/i-summoning.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/staff/i-staff_channeling.png b/crawl-ref/source/rltiles/item/staff/i-staff_channeling.png
index 92870bb7ca..6bdea074f3 100644
--- a/crawl-ref/source/rltiles/item/staff/i-staff_channeling.png
+++ b/crawl-ref/source/rltiles/item/staff/i-staff_channeling.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/staff/i-staff_earth.png b/crawl-ref/source/rltiles/item/staff/i-staff_earth.png
index aa90ee24d5..019966d484 100644
--- a/crawl-ref/source/rltiles/item/staff/i-staff_earth.png
+++ b/crawl-ref/source/rltiles/item/staff/i-staff_earth.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/staff/i-staff_power.png b/crawl-ref/source/rltiles/item/staff/i-staff_power.png
index 3205ef1d09..b86f79eeb8 100644
--- a/crawl-ref/source/rltiles/item/staff/i-staff_power.png
+++ b/crawl-ref/source/rltiles/item/staff/i-staff_power.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-fire.png b/crawl-ref/source/rltiles/item/wand/i-fire.png
index 0aea6063f9..a98a911df8 100644
--- a/crawl-ref/source/rltiles/item/wand/i-fire.png
+++ b/crawl-ref/source/rltiles/item/wand/i-fire.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-flame.png b/crawl-ref/source/rltiles/item/wand/i-flame.png
index 80b36ab48f..d2a6a02f3f 100644
--- a/crawl-ref/source/rltiles/item/wand/i-flame.png
+++ b/crawl-ref/source/rltiles/item/wand/i-flame.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bardiche.png b/crawl-ref/source/rltiles/item/weapon/bardiche.png
new file mode 100644
index 0000000000..97d8c3aa93
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bardiche.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bardiche2.png b/crawl-ref/source/rltiles/item/weapon/bardiche2.png
new file mode 100644
index 0000000000..9eaf76990d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bardiche2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/battle_axe.png b/crawl-ref/source/rltiles/item/weapon/battle_axe.png
index 819858411f..6b31b1bf29 100644
--- a/crawl-ref/source/rltiles/item/weapon/battle_axe.png
+++ b/crawl-ref/source/rltiles/item/weapon/battle_axe.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/battle_axe2.png b/crawl-ref/source/rltiles/item/weapon/battle_axe2.png
index 8857cb6c00..a7f2b66d4d 100644
--- a/crawl-ref/source/rltiles/item/weapon/battle_axe2.png
+++ b/crawl-ref/source/rltiles/item/weapon/battle_axe2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/broad_axe.png b/crawl-ref/source/rltiles/item/weapon/broad_axe.png
new file mode 100644
index 0000000000..1262077212
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/broad_axe.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/broad_axe2.png b/crawl-ref/source/rltiles/item/weapon/broad_axe2.png
index 22eec81e19..fd487781b3 100644
--- a/crawl-ref/source/rltiles/item/weapon/broad_axe2.png
+++ b/crawl-ref/source/rltiles/item/weapon/broad_axe2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/broad_axe3.png b/crawl-ref/source/rltiles/item/weapon/broad_axe3.png
new file mode 100644
index 0000000000..22eec81e19
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/broad_axe3.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/executioner_axe.png b/crawl-ref/source/rltiles/item/weapon/executioner_axe.png
index 16e0d109b8..3a992992a4 100644
--- a/crawl-ref/source/rltiles/item/weapon/executioner_axe.png
+++ b/crawl-ref/source/rltiles/item/weapon/executioner_axe.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/executioner_axe2.png b/crawl-ref/source/rltiles/item/weapon/executioner_axe2.png
index 9aa106a73b..4b461c16c6 100644
--- a/crawl-ref/source/rltiles/item/weapon/executioner_axe2.png
+++ b/crawl-ref/source/rltiles/item/weapon/executioner_axe2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/falchion.png b/crawl-ref/source/rltiles/item/weapon/falchion.png
index 35f7653289..ad2012e4b7 100644
--- a/crawl-ref/source/rltiles/item/weapon/falchion.png
+++ b/crawl-ref/source/rltiles/item/weapon/falchion.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/falchion2.png b/crawl-ref/source/rltiles/item/weapon/falchion2.png
new file mode 100644
index 0000000000..f9cc3784ef
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/falchion2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/hand_axe.png b/crawl-ref/source/rltiles/item/weapon/hand_axe.png
index 2991e8ba76..49de03d493 100644
--- a/crawl-ref/source/rltiles/item/weapon/hand_axe.png
+++ b/crawl-ref/source/rltiles/item/weapon/hand_axe.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/hand_axe2.png b/crawl-ref/source/rltiles/item/weapon/hand_axe2.png
new file mode 100644
index 0000000000..c91c787366
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/hand_axe2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/war_axe.png b/crawl-ref/source/rltiles/item/weapon/war_axe.png
index 287f406586..50dcd08c9f 100644
--- a/crawl-ref/source/rltiles/item/weapon/war_axe.png
+++ b/crawl-ref/source/rltiles/item/weapon/war_axe.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/war_axe2.png b/crawl-ref/source/rltiles/item/weapon/war_axe2.png
new file mode 100644
index 0000000000..c0375851b8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/war_axe2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/tool/tile_colour.cc b/crawl-ref/source/rltiles/tool/tile_colour.cc
index 88cb69c75f..69df5e97f7 100644
--- a/crawl-ref/source/rltiles/tool/tile_colour.cc
+++ b/crawl-ref/source/rltiles/tool/tile_colour.cc
@@ -1,4 +1,7 @@
#include "tile_colour.h"
+#include <vector>
+#include <stdio.h>
+#include <png.h>
tile_colour tile_colour::background(71, 108, 108, 255);
tile_colour tile_colour::transparent(0, 0, 0, 0);
@@ -23,3 +26,55 @@ const tile_colour &tile_colour::operator=(const tile_colour &rhs)
return *this;
}
+
+bool write_png(const char *filename, tile_colour *pixels,
+ int width, int height)
+{
+ FILE *fp = fopen(filename, "wb");
+ if (!fp)
+ {
+ fprintf(stderr, "Error: Can't open file '%s' for write.\n", filename);
+ return false;
+ }
+
+ png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
+ NULL, NULL, NULL);
+ if (!png_ptr)
+ return false;
+
+ png_infop info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr)
+ {
+ png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
+ return false;
+ }
+
+ png_init_io(png_ptr, fp);
+
+ int bit_depth = 8;
+ int colour_type = PNG_COLOR_TYPE_RGB_ALPHA;
+ int interlace_type = PNG_INTERLACE_NONE;
+ int compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
+ int filter_method = PNG_FILTER_TYPE_DEFAULT;
+ png_set_IHDR(png_ptr, info_ptr, width, height,
+ bit_depth, colour_type, interlace_type,
+ compression_type, filter_method);
+
+ png_bytep* row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height);
+ for (unsigned int y = 0; y < height; y++)
+ row_pointers[y] = (png_byte*)&pixels[y * width];
+
+ png_set_rows(png_ptr, info_ptr, row_pointers);
+
+ int png_transforms = PNG_TRANSFORM_IDENTITY;
+ png_write_png(png_ptr, info_ptr, png_transforms, NULL);
+ png_write_end(png_ptr, info_ptr);
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+
+ free(row_pointers);
+ fclose(fp);
+
+ return true;
+}
+
+
diff --git a/crawl-ref/source/rltiles/tool/tile_colour.h b/crawl-ref/source/rltiles/tool/tile_colour.h
index f994010bac..f7b5c75dea 100644
--- a/crawl-ref/source/rltiles/tool/tile_colour.h
+++ b/crawl-ref/source/rltiles/tool/tile_colour.h
@@ -22,4 +22,7 @@ public:
static tile_colour black;
};
+bool write_png(const char *filename, tile_colour *pixels,
+ int width, int height);
+
#endif
diff --git a/crawl-ref/source/rltiles/tool/tile_convert.cc b/crawl-ref/source/rltiles/tool/tile_convert.cc
new file mode 100644
index 0000000000..b65518cfb2
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/tile_convert.cc
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <string.h>
+
+// This is a standalone utility to convert old-style palettized BMPs
+// to transparent PNGs.
+
+#include "tile.h"
+
+int main(int argc, char **argv)
+{
+ if (argc < 2)
+ {
+ printf("Usage: %s (filename.bmp)\n", argv[0]);
+ return -1;
+ }
+
+ char dest[1024];
+ strcpy(dest, argv[1]);
+
+ size_t len = strlen(dest);
+ if (strcmp(&dest[len-4], ".bmp"))
+ {
+ printf("File '%s' does not end in bmp.\n", argv[1]);
+ return -2;
+ }
+
+ dest[len-3] = 'p';
+ dest[len-2] = 'n';
+ dest[len-1] = 'g';
+
+ tile conv;
+ if (!conv.load(argv[1]))
+ {
+ printf("Failed to load '%s'.\n", argv[1]);
+ return -3;
+ }
+
+ conv.replace_colour(tile_colour::background, tile_colour::transparent);
+
+ if (!write_png(dest, &conv.get_pixel(0,0), conv.width(), conv.height()))
+ {
+ printf("Failed to write dest '%s'.\n", dest);
+ return -4;
+ }
+
+ printf("Converted '%s'.\n", argv[1]);
+
+ return 0;
+}
diff --git a/crawl-ref/source/rltiles/tool/tile_page.cc b/crawl-ref/source/rltiles/tool/tile_page.cc
index 1d0474d592..29c9ecf65b 100644
--- a/crawl-ref/source/rltiles/tool/tile_page.cc
+++ b/crawl-ref/source/rltiles/tool/tile_page.cc
@@ -1,57 +1,6 @@
#include "tile_page.h"
#include "tile_colour.h"
#include "tile.h"
-#include <png.h>
-
-static bool write_png(const char *filename, tile_colour *pixels,
- int width, int height)
-{
- FILE *fp = fopen(filename, "wb");
- if (!fp)
- {
- fprintf(stderr, "Error: Can't open file '%s' for write.\n", filename);
- return false;
- }
-
- png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
- NULL, NULL, NULL);
- if (!png_ptr)
- return false;
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
- return false;
- }
-
- png_init_io(png_ptr, fp);
-
- int bit_depth = 8;
- int colour_type = PNG_COLOR_TYPE_RGB_ALPHA;
- int interlace_type = PNG_INTERLACE_NONE;
- int compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
- int filter_method = PNG_FILTER_TYPE_DEFAULT;
- png_set_IHDR(png_ptr, info_ptr, width, height,
- bit_depth, colour_type, interlace_type,
- compression_type, filter_method);
-
- png_bytep* row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height);
- for (unsigned int y = 0; y < height; y++)
- row_pointers[y] = (png_byte*)&pixels[y * width];
-
- png_set_rows(png_ptr, info_ptr, row_pointers);
-
- int png_transforms = PNG_TRANSFORM_IDENTITY;
- png_write_png(png_ptr, info_ptr, png_transforms, NULL);
- png_write_end(png_ptr, info_ptr);
- png_destroy_write_struct(&png_ptr, &info_ptr);
-
- free(row_pointers);
- fclose(fp);
-
- return true;
-}
tile_page::tile_page() : m_width(1024), m_height(0)
{
diff --git a/crawl-ref/source/tilemcache.cc b/crawl-ref/source/tilemcache.cc
index 046e4ed08f..6002254d16 100644
--- a/crawl-ref/source/tilemcache.cc
+++ b/crawl-ref/source/tilemcache.cc
@@ -363,6 +363,22 @@ bool mcache_monster::get_weapon_offset(int mon_tile, int &ofs_x, int &ofs_y)
ofs_x = 0;
ofs_y = 0;
break;
+ case TILEP_MONS_CENTAUR_MELEE:
+ ofs_x = -1;
+ ofs_y = -3;
+ break;
+ case TILEP_MONS_CENTAUR_WARRIOR_MELEE:
+ ofs_x = 0;
+ ofs_y = -1;
+ break;
+ case TILEP_MONS_YAKTAUR_MELEE:
+ ofs_x = 2;
+ ofs_y = 0;
+ break;
+ case TILEP_MONS_YAKTAUR_CAPTAIN_MELEE:
+ ofs_x = 4;
+ ofs_y = 0;
+ break;
case TILEP_MONS_ORC:
case TILEP_MONS_URUG:
case TILEP_MONS_BLORK_THE_ORC:
diff --git a/crawl-ref/source/tilemcache.h b/crawl-ref/source/tilemcache.h
index d170ae7de2..1138d2434c 100644
--- a/crawl-ref/source/tilemcache.h
+++ b/crawl-ref/source/tilemcache.h
@@ -26,7 +26,7 @@ public:
tile_draw_info() : idx(~0), ofs_x(0), ofs_y(0) {}
void set(unsigned int _idx, int _ofs_x = 0, int _ofs_y = 0)
- { idx = _idx; _ofs_x = ofs_x; _ofs_y = ofs_y; }
+ { idx = _idx; ofs_x = _ofs_x; ofs_y = _ofs_y; }
unsigned int idx;
int ofs_x;
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 624a06f7b9..02afac3ca2 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -102,7 +102,27 @@ int tile_unseen_flag(const coord_def& gc)
}
}
-static int _tileidx_monster_base(const monsters* mon, bool detected)
+// Special case for *taurs which have a different tile
+// for when they have a bow.
+static int _bow_offset(const monsters *mon)
+{
+ int mon_wep = mon->inv[MSLOT_WEAPON];
+ if (mon_wep == NON_ITEM)
+ return 1;
+
+ switch (mitm[mon_wep].sub_type)
+ {
+ case WPN_BOW:
+ case WPN_LONGBOW:
+ case WPN_CROSSBOW:
+ case WPN_HAND_CROSSBOW:
+ return 0;
+ default:
+ return 1;
+ }
+}
+
+static int _tileidx_monster_base(const monsters *mon, bool detected)
{
int grid = grd(mon->pos());
bool in_water = (grid == DNGN_SHALLOW_WATER || grid == DNGN_DEEP_WATER);
@@ -120,7 +140,7 @@ static int _tileidx_monster_base(const monsters* mon, bool detected)
case MONS_GIANT_BAT:
return TILEP_MONS_GIANT_BAT;
case MONS_CENTAUR:
- return TILEP_MONS_CENTAUR;
+ return TILEP_MONS_CENTAUR + _bow_offset(mon);
case MONS_RED_DEVIL:
return TILEP_MONS_RED_DEVIL;
case MONS_ETTIN:
@@ -365,7 +385,7 @@ static int _tileidx_monster_base(const monsters* mon, bool detected)
case MONS_STORM_DRAGON:
return TILEP_MONS_STORM_DRAGON;
case MONS_YAKTAUR:
- return TILEP_MONS_YAKTAUR;
+ return TILEP_MONS_YAKTAUR + _bow_offset(mon);
case MONS_DEATH_YAK:
return TILEP_MONS_DEATH_YAK;
case MONS_ROCK_TROLL:
@@ -722,9 +742,9 @@ static int _tileidx_monster_base(const monsters* mon, bool detected)
case MONS_MUMMY_PRIEST:
return TILEP_MONS_MUMMY_PRIEST;
case MONS_CENTAUR_WARRIOR:
- return TILEP_MONS_CENTAUR_WARRIOR;
+ return TILEP_MONS_CENTAUR_WARRIOR + _bow_offset(mon);
case MONS_YAKTAUR_CAPTAIN:
- return TILEP_MONS_YAKTAUR_CAPTAIN;
+ return TILEP_MONS_YAKTAUR_CAPTAIN + _bow_offset(mon);
case MONS_KILLER_KLOWN:
return TILEP_MONS_KILLER_KLOWN;
case MONS_ELECTRIC_GOLEM:
@@ -968,25 +988,32 @@ static int _get_etype(const item_def &item)
}
}
-static int _tileidx_weapon(const item_def &item)
+static int _apply_variations(const item_def &item, int tile)
{
- static const int etable[4][4] = {
- {0, 0, 0, 0}, // No ego tile
- {0, 1, 1, 1}, // One ego tile
- {0, 1, 1, 2}, // Two ego tile
- {0, 1, 2, 3}
+ static const int etable[5][5] =
+ {
+ {0, 0, 0, 0, 0},
+ {0, 1, 1, 1, 1},
+ {0, 1, 1, 1, 2},
+ {0, 1, 1, 2, 3},
+ {0, 1, 2, 3, 4}
};
- int race = item.flags & ISFLAG_RACIAL_MASK;
int etype = _get_etype(item);
+ int idx = tile_main_count(tile) - 1;
+ ASSERT(idx < 5);
+ tile += etable[idx][etype];
- if (etype > 1)
- etype--;
+ return tile;
+}
+
+static int _tileidx_weapon_base(const item_def &item)
+{
+ int race = item.flags & ISFLAG_RACIAL_MASK;
switch (item.sub_type)
{
- case WPN_KNIFE:
- return TILE_WPN_KNIFE;
+ case WPN_KNIFE: return TILE_WPN_KNIFE;
case WPN_DAGGER:
if (race == ISFLAG_ORCISH)
@@ -1000,32 +1027,25 @@ static int _tileidx_weapon(const item_def &item)
return TILE_WPN_SHORT_SWORD_ORC;
if (race == ISFLAG_ELVEN)
return TILE_WPN_SHORT_SWORD_ELF;
- return TILE_WPN_SHORT_SWORD + etable[1][etype];
-
- case WPN_QUICK_BLADE:
- return TILE_WPN_QUICK_BLADE;
-
- case WPN_SABRE:
- return TILE_WPN_SABRE + etable[1][etype];
-
- case WPN_FALCHION:
- return TILE_WPN_FALCHION;
+ return TILE_WPN_SHORT_SWORD;
- case WPN_KATANA:
- return TILE_WPN_KATANA + etable[1][etype];
+ case WPN_QUICK_BLADE: return TILE_WPN_QUICK_BLADE;
+ case WPN_SABRE: return TILE_WPN_SABRE;
+ case WPN_FALCHION: return TILE_WPN_FALCHION;
+ case WPN_KATANA: return TILE_WPN_KATANA;
case WPN_LONG_SWORD:
if (race == ISFLAG_ORCISH)
return TILE_WPN_LONG_SWORD_ORC;
- return TILE_WPN_LONG_SWORD + etable[1][etype];
+ return TILE_WPN_LONG_SWORD;
case WPN_GREAT_SWORD:
if (race == ISFLAG_ORCISH)
return TILE_WPN_GREAT_SWORD_ORC;
- return TILE_WPN_GREAT_SWORD + etable[1][etype];
+ return TILE_WPN_GREAT_SWORD;
case WPN_SCIMITAR:
- return TILE_WPN_SCIMITAR + etable[1][etype];
+ return TILE_WPN_SCIMITAR;
case WPN_DOUBLE_SWORD:
return TILE_WPN_DOUBLE_SWORD;
@@ -1040,45 +1060,45 @@ static int _tileidx_weapon(const item_def &item)
return TILE_WPN_WAR_AXE;
case WPN_BROAD_AXE:
- return TILE_WPN_BROAD_AXE + etable[1][etype];
+ return TILE_WPN_BROAD_AXE;
case WPN_BATTLEAXE:
- return TILE_WPN_BATTLEAXE + etable[1][etype];
+ return TILE_WPN_BATTLEAXE;
case WPN_EXECUTIONERS_AXE:
- return TILE_WPN_EXECUTIONERS_AXE + etable[1][etype];
+ return TILE_WPN_EXECUTIONERS_AXE;
case WPN_BLOWGUN:
- return TILE_WPN_BLOWGUN + etable[1][etype];
+ return TILE_WPN_BLOWGUN;
case WPN_SLING:
return TILE_WPN_SLING;
case WPN_BOW:
- return TILE_WPN_BOW + etable[1][etype];
+ return TILE_WPN_BOW;
case WPN_CROSSBOW:
- return TILE_WPN_CROSSBOW + etable[1][etype];
+ return TILE_WPN_CROSSBOW;
case WPN_HAND_CROSSBOW:
- return TILE_WPN_HAND_CROSSBOW + etable[1][etype];
+ return TILE_WPN_HAND_CROSSBOW;
case WPN_SPEAR:
- return TILE_WPN_SPEAR + etable[1][etype];
+ return TILE_WPN_SPEAR;
case WPN_TRIDENT:
- return TILE_WPN_TRIDENT + etable[1][etype];
+ return TILE_WPN_TRIDENT;
case WPN_HALBERD:
- return TILE_WPN_HALBERD + etable[1][etype];
+ return TILE_WPN_HALBERD;
case WPN_SCYTHE:
- return TILE_WPN_SCYTHE + etable[1][etype];
+ return TILE_WPN_SCYTHE;
case WPN_GLAIVE:
if (race == ISFLAG_ORCISH)
return TILE_WPN_GLAIVE_ORC;
- return TILE_WPN_GLAIVE + etable[1][etype];
+ return TILE_WPN_GLAIVE;
case WPN_QUARTERSTAFF:
return TILE_WPN_QUARTERSTAFF;
@@ -1087,28 +1107,28 @@ static int _tileidx_weapon(const item_def &item)
return TILE_WPN_CLUB;
case WPN_HAMMER:
- return TILE_WPN_HAMMER + etable[1][etype];
+ return TILE_WPN_HAMMER;
case WPN_MACE:
- return TILE_WPN_MACE + etable[1][etype];
+ return TILE_WPN_MACE;
case WPN_FLAIL:
- return TILE_WPN_FLAIL + etable[1][etype];
+ return TILE_WPN_FLAIL;
case WPN_SPIKED_FLAIL:
- return TILE_WPN_SPIKED_FLAIL + etable[1][etype];
+ return TILE_WPN_SPIKED_FLAIL;
case WPN_GREAT_MACE:
- return TILE_WPN_GREAT_MACE + etable[1][etype];
+ return TILE_WPN_GREAT_MACE;
case WPN_DIRE_FLAIL:
- return TILE_WPN_GREAT_FLAIL + etable[1][etype];
+ return TILE_WPN_GREAT_FLAIL;
case WPN_MORNINGSTAR:
- return TILE_WPN_MORNINGSTAR + etable[1][etype];
+ return TILE_WPN_MORNINGSTAR;
case WPN_EVENINGSTAR:
- return TILE_WPN_EVENINGSTAR + etable[1][etype];
+ return TILE_WPN_EVENINGSTAR;
case WPN_GIANT_CLUB:
return TILE_WPN_GIANT_CLUB;
@@ -1138,7 +1158,7 @@ static int _tileidx_weapon(const item_def &item)
return TILE_WPN_LONGBOW;
case WPN_LAJATANG:
- return TILE_WPN_LAJATANG + etable[1][etype];
+ return TILE_WPN_LAJATANG;
case WPN_BARDICHE:
return TILE_WPN_LOCHABER_AXE;
@@ -1147,16 +1167,16 @@ static int _tileidx_weapon(const item_def &item)
return TILE_WPN_FALCHION;
case WPN_BLESSED_LONG_SWORD:
- return TILE_WPN_LONG_SWORD + etable[1][etype];
+ return TILE_WPN_LONG_SWORD;
case WPN_BLESSED_SCIMITAR:
- return TILE_WPN_SCIMITAR + etable[1][etype];
+ return TILE_WPN_SCIMITAR;
case WPN_BLESSED_KATANA:
- return TILE_WPN_KATANA + etable[1][etype];
+ return TILE_WPN_KATANA;
case WPN_BLESSED_GREAT_SWORD:
- return TILE_WPN_GREAT_SWORD + etable[1][etype];
+ return TILE_WPN_GREAT_SWORD;
case WPN_BLESSED_DOUBLE_SWORD:
return TILE_WPN_DOUBLE_SWORD;
@@ -1168,6 +1188,12 @@ static int _tileidx_weapon(const item_def &item)
return TILE_ERROR;
}
+static int _tileidx_weapon(const item_def &item)
+{
+ int tile = _tileidx_weapon_base(item);
+ return _apply_variations(item, tile);
+}
+
static int _tileidx_missile(const item_def &item)
{
int brand = item.special;
@@ -1195,31 +1221,21 @@ static int _tileidx_missile(const item_def &item)
return TILE_ERROR;
}
-static int _tileidx_armour(const item_def &item)
+static int _tileidx_armour_base(const item_def &item)
{
int race = item.flags & ISFLAG_RACIAL_MASK;
int type = item.sub_type;
- int etype = _get_etype(item);
-
- static const int etable[5][5] = {
- {0, 0, 0, 0, 0}, // No ego tile
- {0, 1, 1, 1, 1}, // One ego tile
- {0, 1, 1, 1, 2}, // Two ego tile
- {0, 1, 1, 2, 3},
- {0, 1, 2, 3, 4}
- };
-
switch(type)
{
case ARM_ROBE:
- return TILE_ARM_ROBE + etable[2][etype];
+ return TILE_ARM_ROBE;
case ARM_LEATHER_ARMOUR:
if (race == ISFLAG_ORCISH)
return TILE_ARM_LEATHER_ARMOUR_ORC;
if (race == ISFLAG_ELVEN)
return TILE_ARM_LEATHER_ARMOUR_ELF;
- return TILE_ARM_LEATHER_ARMOUR + etable[2][etype];
+ return TILE_ARM_LEATHER_ARMOUR;
case ARM_RING_MAIL:
if (race == ISFLAG_ORCISH)
@@ -1228,19 +1244,19 @@ static int _tileidx_armour(const item_def &item)
return TILE_ARM_RING_MAIL_ELF;
if (race == ISFLAG_DWARVEN)
return TILE_ARM_RING_MAIL_DWA;
- return TILE_ARM_RING_MAIL + etable[1][etype];
+ return TILE_ARM_RING_MAIL;
case ARM_SCALE_MAIL:
if (race == ISFLAG_ELVEN)
return TILE_ARM_SCALE_MAIL_ELF;
- return TILE_ARM_SCALE_MAIL + etable[1][etype];
+ return TILE_ARM_SCALE_MAIL;
case ARM_CHAIN_MAIL:
if (race == ISFLAG_ELVEN)
return TILE_ARM_CHAIN_MAIL_ELF;
if (race == ISFLAG_ORCISH)
return TILE_ARM_CHAIN_MAIL_ORC;
- return TILE_ARM_CHAIN_MAIL + etable[1][etype];
+ return TILE_ARM_CHAIN_MAIL;
case ARM_SPLINT_MAIL:
return TILE_ARM_SPLINT_MAIL;
@@ -1257,40 +1273,40 @@ static int _tileidx_armour(const item_def &item)
return TILE_ARM_CRYSTAL_PLATE_MAIL;
case ARM_SHIELD:
- return TILE_ARM_SHIELD + etable[2][etype];
+ return TILE_ARM_SHIELD;
case ARM_CLOAK:
- return TILE_ARM_CLOAK + etable[3][etype];
+ return TILE_ARM_CLOAK;
case ARM_WIZARD_HAT:
- return TILE_THELM_WIZARD_HAT + etable[1][etype];
+ return TILE_THELM_WIZARD_HAT;
case ARM_CAP:
return TILE_THELM_CAP;
case ARM_HELMET:
- return TILE_THELM_HELM + etable[3][etype];
+ return TILE_THELM_HELM;
case ARM_GLOVES:
- return TILE_ARM_GLOVES + etable[3][etype];
+ return TILE_ARM_GLOVES;
case ARM_BOOTS:
- return TILE_ARM_BOOTS + etable[3][etype];
+ return TILE_ARM_BOOTS;
case ARM_BUCKLER:
- return TILE_ARM_BUCKLER + etable[1][etype];
+ return TILE_ARM_BUCKLER;
case ARM_LARGE_SHIELD:
- return TILE_ARM_LARGE_SHIELD + etable[2][etype];
+ return TILE_ARM_LARGE_SHIELD;
case ARM_CENTAUR_BARDING:
- return TILE_ARM_CENTAUR_BARDING + etable[3][etype];
+ return TILE_ARM_CENTAUR_BARDING;
case ARM_NAGA_BARDING:
- return TILE_ARM_NAGA_BARDING + etable[3][etype];
+ return TILE_ARM_NAGA_BARDING;
case ARM_ANIMAL_SKIN:
- return TILE_ARM_ANIMAL_SKIN + etable[1][etype];
+ return TILE_ARM_ANIMAL_SKIN;
case ARM_TROLL_HIDE:
return TILE_ARM_TROLL_HIDE;
@@ -1344,6 +1360,12 @@ static int _tileidx_armour(const item_def &item)
return TILE_ERROR;
}
+static int _tileidx_armour(const item_def &item)
+{
+ int tile = _tileidx_armour_base(item);
+ return _apply_variations(item, tile);
+}
+
static int _tileidx_food(const item_def &item)
{
switch (item.sub_type)
@@ -1820,13 +1842,19 @@ int tileidx_item(const item_def &item)
return TILE_GOLD;
case OBJ_JEWELLERY:
-
- if (type < AMU_RAGE)
+ if (type < NUM_RINGS)
{
if (is_random_artefact( item ))
return TILE_RING_RANDOM_OFFSET + color - 1;
+ else if (id[ IDTYPE_JEWELLERY][type] == ID_KNOWN_TYPE
+ || (item.flags & ISFLAG_KNOW_TYPE))
+ {
+ return TILE_RING_REGENERATION + type - RING_FIRST_RING;
+ }
else
+ {
return TILE_RING_NORMAL_OFFSET + special % 13;
+ }
}
else
{
@@ -1834,8 +1862,15 @@ int tileidx_item(const item_def &item)
return _tileidx_unrand_artefact(find_unrandart_index(item));
else if (is_random_artefact( item ))
return TILE_AMU_RANDOM_OFFSET + color - 1;
+ else if (id[ IDTYPE_JEWELLERY][type] == ID_KNOWN_TYPE
+ || (item.flags & ISFLAG_KNOW_TYPE))
+ {
+ return TILE_AMU_RAGE + type - AMU_FIRST_AMULET;
+ }
else
+ {
return TILE_AMU_NORMAL_OFFSET + special % 13;
+ }
}
case OBJ_POTIONS:
diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc
index fa27a506bb..c628ab2f37 100644
--- a/crawl-ref/source/tilereg.cc
+++ b/crawl-ref/source/tilereg.cc
@@ -490,7 +490,9 @@ void DungeonRegion::draw_mcache(mcache_entry *entry, unsigned int x, unsigned in
ASSERT(draw_info_count <= sizeof(dinfo) / (sizeof(dinfo[0])));
for (unsigned int i = 0; i < draw_info_count; i++)
+ {
add_quad(TEX_DOLL, dinfo[i].idx, x, y, dinfo[i].ofs_x, dinfo[i].ofs_y);
+ }
}
void DungeonRegion::draw_foreground(unsigned int bg, unsigned int fg, unsigned int x, unsigned int y)
@@ -2283,7 +2285,8 @@ static void _copy_onto(unsigned char *pixels, unsigned int width,
// Copy an image at inf from pixels into dest.
static void _copy_into(unsigned char *dest, unsigned char *pixels,
unsigned int width,
- unsigned int height, const tile_info &inf)
+ unsigned int height, const tile_info &inf,
+ int ofs_x = 0, int ofs_y = 0)
{
unsigned char *src = &pixels[4 * (inf.sy * width + inf.sx)];
@@ -2292,10 +2295,26 @@ static void _copy_into(unsigned char *dest, unsigned char *pixels,
memset(dest, 0, 4 * inf.width * inf.height);
- dest += inf.offset_x * 4 + inf.offset_y * dest_row_size;
-
+ int total_ofs_x = inf.offset_x + ofs_x;
+ int total_ofs_y = inf.offset_y + ofs_y;
int src_height = inf.ey - inf.sy;
int src_width = inf.ex - inf.sx;
+
+ if (total_ofs_x < 0)
+ {
+ src_width += total_ofs_x;
+ src -= 4 * total_ofs_x;
+ total_ofs_x = 0;
+ }
+ if (total_ofs_y < 0)
+ {
+ src_height += total_ofs_y;
+ src -= 4 * width * total_ofs_y;
+ total_ofs_y = 0;
+ }
+
+ dest += total_ofs_x * 4 + total_ofs_y * dest_row_size;
+
for (int r = 0; r < src_height; r++)
{
memcpy(dest, src, src_width * 4);
@@ -2307,7 +2326,8 @@ static void _copy_into(unsigned char *dest, unsigned char *pixels,
// Stores "over" on top of "under" in the location of "over".
static bool _copy_under(unsigned char *pixels, unsigned int width,
- unsigned int height, int idx_under, int idx_over)
+ unsigned int height, int idx_under, int idx_over,
+ int uofs_x = 0, int uofs_y = 0)
{
const tile_info &under = tile_main_info(idx_under);
const tile_info &over = tile_main_info(idx_over);
@@ -2325,7 +2345,7 @@ static bool _copy_under(unsigned char *pixels, unsigned int width,
// Make a copy of the original images.
unsigned char *under_pixels = new unsigned char[image_size];
- _copy_into(under_pixels, pixels, width, height, under);
+ _copy_into(under_pixels, pixels, width, height, under, uofs_x, uofs_y);
unsigned char *over_pixels = new unsigned char[image_size];
_copy_into(over_pixels, pixels, width, height, over);
@@ -2374,6 +2394,20 @@ static bool _process_item_image(unsigned char *pixels,
int tile1 = TILE_ROD_SMITING + i - STAFF_SMITING;
success &= _copy_under(pixels, width, height, tile0, tile1);
}
+ for (int i = RING_FIRST_RING; i < NUM_RINGS; i++)
+ {
+ int special = you.item_description[IDESC_RINGS][i];
+ int tile0 = TILE_RING_NORMAL_OFFSET + special % 13;
+ int tile1 = TILE_RING_REGENERATION + i - RING_FIRST_RING;
+ success &= _copy_under(pixels, width, height, tile0, tile1, -5, -6);
+ }
+ for (int i = AMU_FIRST_AMULET; i < NUM_JEWELLERY; i++)
+ {
+ int special = you.item_description[IDESC_RINGS][i];
+ int tile0 = TILE_AMU_NORMAL_OFFSET + special % 13;
+ int tile1 = TILE_AMU_RAGE + i - AMU_FIRST_AMULET;
+ success &= _copy_under(pixels, width, height, tile0, tile1);
+ }
return true;
}