summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-05 01:33:53 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-05 01:33:53 +0000
commit62f7040f14b39e67042be98f951575fbc819e84e (patch)
treed4fa0598a1bee1d34fff81e2c150de08c2256753 /crawl-ref
parent19155f1f85058ef9d65d11e60c63cc69c36d4e8a (diff)
downloadcrawl-ref-62f7040f14b39e67042be98f951575fbc819e84e.tar.gz
crawl-ref-62f7040f14b39e67042be98f951575fbc819e84e.zip
Tiles!
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3194 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/docs/crawl_manual.txt9
-rw-r--r--crawl-ref/docs/crawl_options.txt9
-rw-r--r--crawl-ref/init.txt4
-rw-r--r--crawl-ref/source/AppHdr.h12
-rw-r--r--crawl-ref/source/acr.cc77
-rw-r--r--crawl-ref/source/beam.cc39
-rw-r--r--crawl-ref/source/chardump.cc4
-rw-r--r--crawl-ref/source/cio.cc14
-rw-r--r--crawl-ref/source/cio.h10
-rw-r--r--crawl-ref/source/command.cc4
-rw-r--r--crawl-ref/source/debug.cc7
-rw-r--r--crawl-ref/source/defines.h28
-rw-r--r--crawl-ref/source/describe.cc22
-rw-r--r--crawl-ref/source/direct.cc65
-rw-r--r--crawl-ref/source/direct.h6
-rw-r--r--crawl-ref/source/enum.h9
-rw-r--r--crawl-ref/source/externs.h26
-rw-r--r--crawl-ref/source/files.cc7
-rw-r--r--crawl-ref/source/food.cc10
-rw-r--r--crawl-ref/source/food.h4
-rw-r--r--crawl-ref/source/guic-win.cc999
-rw-r--r--crawl-ref/source/guic-x11.cc1052
-rw-r--r--crawl-ref/source/guic.cc773
-rw-r--r--crawl-ref/source/guic.h464
-rw-r--r--crawl-ref/source/initfile.cc29
-rw-r--r--crawl-ref/source/invent.cc32
-rw-r--r--crawl-ref/source/invent.h1
-rw-r--r--crawl-ref/source/item_use.cc191
-rw-r--r--crawl-ref/source/item_use.h17
-rw-r--r--crawl-ref/source/items.cc1
-rw-r--r--crawl-ref/source/libgui.cc2172
-rw-r--r--crawl-ref/source/libgui.h164
-rw-r--r--crawl-ref/source/libunix.cc2
-rw-r--r--crawl-ref/source/libunix.h5
-rw-r--r--crawl-ref/source/libutil.cc21
-rw-r--r--crawl-ref/source/libutil.h4
-rw-r--r--crawl-ref/source/libw32c.cc2
-rw-r--r--crawl-ref/source/libw32c.h2
-rw-r--r--crawl-ref/source/libwt.cc540
-rw-r--r--crawl-ref/source/libx11.cc478
-rw-r--r--crawl-ref/source/macro.cc6
-rw-r--r--crawl-ref/source/makefile.x11365
-rw-r--r--crawl-ref/source/makefile_tiles.mgw242
-rw-r--r--crawl-ref/source/menu.cc32
-rw-r--r--crawl-ref/source/menu.h4
-rw-r--r--crawl-ref/source/message.cc17
-rw-r--r--crawl-ref/source/misc.cc13
-rw-r--r--crawl-ref/source/mutation.cc2
-rw-r--r--crawl-ref/source/newgame.cc7
-rw-r--r--crawl-ref/source/output.cc87
-rw-r--r--crawl-ref/source/player.cc21
-rw-r--r--crawl-ref/source/randart.cc5
-rw-r--r--crawl-ref/source/randart.h1
-rw-r--r--crawl-ref/source/rltiles/blank.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/bmp2png/README69
-rw-r--r--crawl-ref/source/rltiles/bmp2png/bmp2png.c1078
-rw-r--r--crawl-ref/source/rltiles/bmp2png/bmp2png.dsp112
-rw-r--r--crawl-ref/source/rltiles/bmp2png/bmphed.h84
-rw-r--r--crawl-ref/source/rltiles/bmp2png/common.c748
-rw-r--r--crawl-ref/source/rltiles/bmp2png/common.h196
-rw-r--r--crawl-ref/source/rltiles/bmp2png/makefile.bcc52
-rw-r--r--crawl-ref/source/rltiles/bmp2png/makefile.dj254
-rw-r--r--crawl-ref/source/rltiles/bmp2png/makefile.lin48
-rw-r--r--crawl-ref/source/rltiles/bmp2png/png2bmp.c647
-rw-r--r--crawl-ref/source/rltiles/bmp2png/png2bmp.dsp111
-rw-r--r--crawl-ref/source/rltiles/dc-2d.txt32
-rw-r--r--crawl-ref/source/rltiles/dc-co.txt256
-rw-r--r--crawl-ref/source/rltiles/dc-dngn.txt161
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_beogh.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_elyvilon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_kikubaaqudgha.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_lugonu.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_makhleb.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_nemelex_xobeh.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_okawaru.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_shining_one.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_sif_muna.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_trog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_vehumet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_xom.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_yredelemnul.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_altar_zin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_blue_fountain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_branch_stairs.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_closed_door.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_deep_water.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_dry_fountain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_abyss.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_cocytus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_dis.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_gehenna.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_hell.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_labyrinth.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_pandemonium.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_shop.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_enter_tartarus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_entrance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_exit.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_floor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_granite_statue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_green_crystal_wall.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_ice_statue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_lava.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_metal_wall.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_open_door.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_orange_crystal_statue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_orcish_idol.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_return.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_down.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_up.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_00.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_01.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_02.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_03.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_04.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_05.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_06.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_07.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_08.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_09.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_10.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_11.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_12.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_13.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_14.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_15.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_shallow_water.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_silver_statue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_sparkling_fountain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_stone_arch.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_stone_wall.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_transit_pandemonium.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_trap_iii.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_trap_magical.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_trap_mechanical.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_unseen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/dngn_wax_wall.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/bog_green0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/bog_green1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/bog_green2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/bog_green3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/brick_gray0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/brick_gray1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/brick_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/brick_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt0.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt1.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt2.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_e.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_full.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_n.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_ne.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_nw.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_s.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_se.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_sw.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/dirt_w.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass0.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass1.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass2.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_e.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_full.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_n.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_ne.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_nw.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_s.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_se.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_sw.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/grass_w.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/hive0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/hive1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/hive2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/hive3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/ice0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/ice1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/ice2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/ice3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lair0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lair1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lair2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lair3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lava0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lava1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lava2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/lava3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/mesh0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/mesh1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/mesh2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/mesh3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_e.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_full.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_n.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_ne.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_nw.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_s.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_se.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_sw.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/pedestal_w.bmpbin0 -> 3126 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rect_gray0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rect_gray1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rect_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rect_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_brown0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_brown1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_brown3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_red0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_red1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/rough_red3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/snake0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/snake1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/snake2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/snake3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/swamp0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/swamp1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/swamp2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/swamp3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/tomb0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/tomb1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/tomb2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/floor/tomb3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/rock_stairs_down.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/rock_stairs_up.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/stone_stairs_down.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/stone_stairs_up.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_brown0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_brown1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_brown3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_gray0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_gray1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/brick_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/hive0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/hive1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/hive2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/hive3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/ice0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/ice1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/ice2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/ice3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/lair0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/lair1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/lair2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/lair3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/marble_green0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/marble_green1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/marble_green2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/marble_green3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/pebble_red0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/pebble_red1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/pebble_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/pebble_red3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/relief0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/relief1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/relief2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/relief3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/slime0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/slime1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/slime2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/slime3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/snake0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/snake1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/snake2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/snake3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone_gray0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone_gray1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/stone_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/tomb0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/tomb1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/tomb2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/tomb3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/undead0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/undead1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/undead2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/undead3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/vault0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/vault1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/vault2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/vault3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_blue0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_blue1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_blue2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_blue3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_gray0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_gray1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_green0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_green1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_green2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_green3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_red0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_red1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_red3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-item.txt598
-rw-r--r--crawl-ref/source/rltiles/dc-misc.txt167
-rw-r--r--crawl-ref/source/rltiles/dc-misc/blood_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/blood_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/blood_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/blood_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char20.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char28.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char30.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char38.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char40.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char48.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char50.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char58.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char60.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char68.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char70.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/char78.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/cursor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/cursor_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/cursor_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/error.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/heart.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/magicmap.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/mask_deep_water.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/mask_lava.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/mask_shallow_water.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/may_stab_brand.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/ray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/sink_mask.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/slot.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/slot_cursed.bmpbin0 -> 582 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/slot_eq.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/slot_eq_cursed.bmpbin0 -> 582 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/something_under.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/stab_brand.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/txt1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/txt2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/txt3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/txt4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/unseen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/unseen_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/unseen_item.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/unseen_monster.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-misc/unseen_weapon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon.txt494
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_large.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_large1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_large2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_large3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_large4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_large5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_large6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/abomination_small.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/acid_blob.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/adolf.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/agnes.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/air_elemental.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ancient_lich.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/angel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/antaeus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/asmodeus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/azure_jelly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ball_lightning.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/balrug.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/bear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/beast.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/big_fish.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/big_kobold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/black_bear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/black_snake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/blink_frog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/blork_the_orc0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/blue_death.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/blue_devil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/boggart.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/boring_beetle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/boris.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/boulder_beetle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/brain_worm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/brown_ooze.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/brown_snake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/bumblebee.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/butterfly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/butterfly1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/butterfly2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/butterfly3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/butterfly4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/butterfly5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/butterfly6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/cacodemon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/centaur.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/centaur_warrior.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/cerebov.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/clay_golem.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/crystal_golem.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/curse_skull.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/curse_toe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/cyclops.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/daeva.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/death_cob.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/death_drake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/death_ooze.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/death_yak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_annihilator.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_blademaster.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_conjurer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_death_mage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_demonologist.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_fighter0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_high_priest.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_knight0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_mage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_master_archer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_priest.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_soldier0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_sorcerer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_elf_summoner.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/deep_troll.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/demonic_crawler.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/dispater.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/donald.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/duane0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/earth_elemental.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/edmund0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/efreet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/electric_golem.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/electrical_eel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/elephant_slug.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/elf.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ereshkigal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/erica.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/erolcha.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ettin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/executioner.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/eye_of_devastation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/eye_of_draining.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/fiend.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/fire_elemental.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/fire_giant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/fire_vortex.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/firedrake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/flayed_ghost.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/flying_skull.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/frances0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/francis.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/frederick.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/freezing_wraith.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/frost_giant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/fungus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/gargoyle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/geryon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ghost.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ghoul.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_amoeba.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_ant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_bat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_beetle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_blowfly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_brown_frog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_centipede.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_cockroach.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_eyeball.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_frog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_gecko.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_goldfish.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_iguana.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_lizard.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_mite.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_mosquito.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_newt.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_orange_brain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_slug.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_snail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/giant_spore.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/gila_monster.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/gloorx_vloq.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/glowing_shapeshifter.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/gnoll0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/goblin0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/golden_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/great_orb_of_eyes.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/greater_mummy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/greater_naga0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/green_death.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/green_rat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/grey_rat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/grey_snake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/griffon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/grizzly_bear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/guardian_mummy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/guardian_naga.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hairy_devil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/harold0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hell_hog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hell_hound.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hell_knight.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hellion.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hellwing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hill_giant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hippogriff.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hobgoblin0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hound.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/human.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hungry_ghost.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hydra1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hydra2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hydra3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hydra4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/hydra5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ice_beast.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ice_devil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ice_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ice_fiend.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ijyb0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/imp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/insubstantial_wisp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/iron_devil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/iron_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/iron_golem.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/iron_troll.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/jackal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/jelly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/jellyfish.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/jessica.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/joseph0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/josephine.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/jozef0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/killer_bee.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/killer_bee_larva.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/killer_klown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/kobold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/kobold_demonologist.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/komodo_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/large_mimic.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lava_fish.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lava_snake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lava_worm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lemure.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lich.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lindwurm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lom_lobon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/lorocyproca.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/louise.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/manes.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/manticore.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/margery.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/maud0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/metal_gargoyle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/michael.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/midge.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/minotaur.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/mnoleg.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/molten_gargoyle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/moth_of_wrath.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/mottled_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/mummy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/mummy_priest.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/murray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/naga0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/naga_mage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/naga_warrior0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/necromancer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/necrophage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/neqoxec.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/norbert.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/norris2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ogre.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ogre_mage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/oklob_plant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ooze.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orange_demon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orange_rat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orb_guardian.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orb_of_fire.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc_high_priest.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc_knight0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc_priest.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc_sorcerer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc_warlord0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc_warrior0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/orc_wizard.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/pandemonium_demon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/phantom.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/pit_fiend.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/plant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/polar_bear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/polyphemus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/program_bug.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/psyche.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/pulsating_lump.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/quasit.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/queen_ant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/queen_bee.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/quicksilver_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/quokka.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/rakshasa.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/rakshasa_fake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/rat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/reaper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/red_devil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/red_wasp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/redback.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/rock_troll.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/rotting_devil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/rotting_hulk.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/royal_jelly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/rupert0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/salamander.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/scorpion.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/serpent_of_hell.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shadow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shadow_demon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shadow_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shadow_fiend.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shadow_imp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shadow_wraith.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shapeshifter.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/sheep.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/shining_eye.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/sigmund.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/simulacrum_large.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/simulacrum_small.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/skeletal_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/skeletal_warrior0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/skeleton_large.bmpbin0 -> 2103 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/skeleton_small.bmpbin0 -> 2103 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/slime_creature.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/small_snake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/smoke_demon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/snake.bmpbin0 -> 2103 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/snorg.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/soldier_ant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/soul_eater.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/spatial_vortex.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/spectral_thing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/spectral_warrior.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/sphinx.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/spiny_frog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/spiny_worm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/steam_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/stone_giant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/stone_golem.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/storm_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/sun_demon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/swamp_dragon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/swamp_drake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/swamp_worm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/tentacled_monstrosity.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/terence0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/tiamat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/titan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/toenail_golem.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/tormentor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/troll.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/two_headed_ogre.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ufetubus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ugly_thing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/unseen_horror.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/urug0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/vampire.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/vampire_knight.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/vampire_mage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/vapour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/vault_guard0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/very_ugly_thing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wandering_mushroom.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/war_dog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/warg.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/water_elemental.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wayne0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/white_imp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wight.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wizard.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wolf.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wolf_spider.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wood_golem.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/worm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wraith.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/wyvern.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/xtahua.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yaktaur.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yaktaur_captain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yellow_snake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/yellow_wasp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/ynoxinul.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/zombie_large.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/zombie_small.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-pl.txt853
-rw-r--r--crawl-ref/source/rltiles/dc-urand.txt54
-rw-r--r--crawl-ref/source/rltiles/dc-wall2d.txt289
-rw-r--r--crawl-ref/source/rltiles/effect/acid_venom.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/arrow7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/blinding_venom.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt01.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt02.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt03.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt04.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt05.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt06.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt07.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt08.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/bolt7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/boomerang1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/boomerang2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_black_smoke.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_blue_smoke.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_cold0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_cold1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_cold2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_fire0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_fire1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_fire2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_grey_smoke.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_miasma.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_poison0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_poison1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_poison2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/cloud_purp_smoke.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/dart7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/engulf8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_black8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_blue8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_brown8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_darkblue8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_green8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_purple8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/explode_red8.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/javelin7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/needle7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/net_trap.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/resist1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/resist2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/resist3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/resist4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/rock0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/sling_bullet0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/stone0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/throwing_net7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_acid0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_acid1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_acid2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_acid3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_black0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_black1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_black2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_black3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_dig.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_elec0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_elec1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_elec2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_elec3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_fire0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_fire1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_fire2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_fire3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_flash.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_gas0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_gas1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_gas2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_gas3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_ice0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_ice1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_ice2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_ice3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_magic0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_magic1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_magic2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_magic3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_sleep0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_sleep1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_sleep2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zap_sleep3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zigzag1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zigzag2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zigzag3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/effect/zigzag4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/amulet_of_yendor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/bone_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/cameo_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/cameo_orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/celtic_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/celtic_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/celtic_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/circular.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/concave.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/crystal_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/crystal_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/crystal_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/cylinder_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/eye_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/eye_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/eye_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/face1_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/face2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/hexagonal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/octagonal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/oval.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/penta_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/penta_orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/pyramidal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/ring_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/ring_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/ring_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/spherical.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/square.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone1_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone1_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone1_pink.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone2_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone2_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone2_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone3_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone3_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/stone3_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/triangular.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/urand_bloodlust.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/urand_cekugob.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/amulet/urand_four_winds.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/alchemy_smock.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/animal_skin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/animal_skin2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/banded_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/black_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/black_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/blue_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/blue_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_blue1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_brown1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_green1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_green2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_iron1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_iron2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_iron3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_stripe1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/boots_yellow1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/breast_plate1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/breast_plate2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/bronze_plate_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/buckled_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/cap1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/cap2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/cap3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/centaur_barding.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/chain_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/chain_mail1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/chain_mail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/chain_mail3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/cloak2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/cloak3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/cloak4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/combat_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/cornuthaum.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/crested_helmet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/crystal_plate_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/dented_pot.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/dunce_cap.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/dwarven_ringmail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/dwarvish_cloak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/dwarvish_iron_helm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/dwarvish_mithril_coat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/dwarvish_roundshield.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/elven_cloak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/elven_leather_armor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/elven_leather_helm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/elven_mithril_coat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/elven_ringmail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/elven_scalemail.bmpbin0 -> 2106 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/elven_shield.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/etched_helmet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/fedora.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/fencing_gloves.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/gauntlet1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/gauntlet2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/glove1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/glove2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/glove3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/glove4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/glove5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/glove6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/gold_dragon_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/gold_dragon_hide.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/gray_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/gray_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/green_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/green_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/hat1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/hawaiian_shirt.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/helm2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/helm3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/helm_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/helm_visor1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/hiking_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/ice_dragon_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/ice_dragon_hide.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/iron_shoes.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/jackboots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/jungle_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/large_shield.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/leather_armor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/leather_armor2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/leather_armor3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/leather_armor4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/leather_armour2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/leather_cloak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/leather_jacket.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/low_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/mottled_dragon_hide.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/mpttled_dragon_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/mud_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/mummy_wrapping.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/naga_barding.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/oilskin_cloak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/old_gloves.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/opera_cloak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orange_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orange_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_chain_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_cloak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_helm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_leather_armor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_platemail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_ring_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_ringmail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/orcish_shield.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/ornamental_cope.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/padded_gloves.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/piece_of_cloth.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/plate_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/plate_mail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/plumed_helmet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/red_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/red_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/riding_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/riding_gloves.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/ring_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/ring_mail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/robe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/robe2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/robe3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/s_suit.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/scale_mail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_gondor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_kite2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_kite3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_large2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_large3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_large4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_of_reflection.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_rohan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shield_round2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shimmering_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/shimmering_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/silver_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/silver_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/small_shield.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/small_shield2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/snow_boots.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/splint_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/studded_leather_armor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/swamp_dragon_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/swamp_dragon_hide.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/t_shirt.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/tattered_cape.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/troll_hide.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/troll_leather_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_alchemist.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_assassin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_augmentation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_bullseye.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_dragon_king.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_dragonmask.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_dyrovepreva.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_edison.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_fencer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_flash.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_folly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_ignorance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_lear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_misfortune.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_night.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_resistance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_salamander.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_thief.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_war.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_zhor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/urand_zin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/uruk_hai_shield.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/visored_helmet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/white_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/white_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/wizard_hat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/wizard_hat2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/yellow_dragon_scale_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/armor/yellow_dragon_scales.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/blank_paper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/book_of_the_dead.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/bronze.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/cloth.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/copper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/dark_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/dark_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/dark_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/dark_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/dog_eared.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/dull.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/dusty.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/glittering.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/indigo.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/leather.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/light_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/light_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/light_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/light_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/metal_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/metal_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/metal_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/mottled.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/parchment.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/pink.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/plaid.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/ragged.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/shining.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/silver.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/stained.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/tan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/thick.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/thin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/turquoise.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/vellum.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/velvet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/violet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/wrinkled.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/book/yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/apple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/apricot.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/banana.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/beef_jerky.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/bone.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/bread0.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/bread_ration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/c_ration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/candy_bar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/carrot.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/cheese.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/chocorate.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/choko.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/clove_of_garlic.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/corpse.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/corpse_rotten.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/cram_ration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/cream_pie.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/egg.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/eucalyptus_leaf.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/food_ration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/fortune_cookie.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/grape.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/honeycomb.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/huge_chunk_of_meat.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/k_ration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/kelp_frond.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/lembas_wafer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/lemon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/lump_of_royal_jelly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/lychee.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/meat_ring.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/meat_stick.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/meatball.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/melon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/pancake.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/pear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/pizza.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/rambutan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/sausage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/slime_mold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/snozzcumber.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/sprig_of_wolfsbane.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/strawberry.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/sultana.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/tin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/food/tripe_ration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/boulder.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/gold_piece.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/grey_stone.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/rock.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/stone.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/violet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/gem/yellowish_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/beartrap.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/bell.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/bell_of_opening.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/blindfold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/brass_lantern.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/bugle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/can_of_grease.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/candelabrum_of_invocation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/chest.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/credit_card.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/crystal_ball.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/drum.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/expensive_camera.bmpbin0 -> 2103 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/figurine.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/flute.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/grappling_hook.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/harp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/heavy_iron_ball.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/horn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/ice_box.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/iron_chain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/lamp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/land_mine.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/large_box.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/leash.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/lenses.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/lock_pick.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/magic_marker.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/mirror.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_altar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_book.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_bottle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_box.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_crystal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_deck.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_disc.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_fan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_horn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_lamp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_lantern.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_orb.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_rune.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/misc_stone.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/pick_axe.bmpbin0 -> 2103 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/sack.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/saddle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/skeleton_key.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/statue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/stethoscope.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/tallow_candle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/tin_opener.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/tinning_kit.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/towel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/unicorn_horn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/wax_candle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/misc/whistle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/brilliant_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/bubbly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/clear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/cloudy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/dark.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/dark_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/effervescent.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/emerald.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/fizzy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/golden.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-berserk-rage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-blood.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-confusion.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-cure-mutation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-decay.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-degeneration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-experience.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-gain-dexterity.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-gain-intelligence.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-gain-strength.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-heal-wounds.bmpbin0 -> 2102 bytes
-rwxr-xr-xcrawl-ref/source/rltiles/item/potion/i-heal-wounds.bmp2bin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-heal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-invisibility.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-label.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-label2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-levitation.bmpbin0 -> 2102 bytes
-rwxr-xr-xcrawl-ref/source/rltiles/item/potion/i-levitation.bmp2bin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-magic.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-might.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-mutation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-paralysis.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-poison.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-porridge.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-resistance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-restore-abilities.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-slowing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-speed.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-strong-poison.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/i-water.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/milky.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/murky.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/pink.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/puce.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/purple_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/ruby.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/silver.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/sky_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/smoky.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/swirly.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/potion/yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/agate.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/black_onyx.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/brass.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/bronze.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/clay.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/copper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/coral.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/diamond.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/emerald.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/engagement.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/glass.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/gold_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/granite.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/iron.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/ivory.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/jade.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/moonstone.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/opal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/pearl.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_dark.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/plain_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/ruby.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/sapphire.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/shiny.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/silver.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/steel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/tiger_eye.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/topaz.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/twisted.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/urand_mage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/urand_robustness.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/urand_shadows.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/urand_shaolin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/wire.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/ring/wooden.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/andova_begarin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/blank_paper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/daiyen_fooels.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/duam_xnaht.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/elam_ebow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/elbib_yloh.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/foobie_bletch.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/garven_deh.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/hackem_muche.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-acquirement.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-blinking.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-curse_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-curse_weapon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-detect_curse.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-enchant-weapon1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-enchant-weapon2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-enchant-weapon3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-enchant_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-fear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-foregetfulness.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-identify.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-immolation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-magic_mapping.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-noise.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-random_uselessness.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-recharging.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-remove_curse.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-summoning.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-teleportation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-torment.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/i-vorpalize-weapon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/juyed_awk_yacc.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/kernod_wel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/kirje.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/lep_gex_ven_zea.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/nr_9.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/pratyavayah.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/prirutsenie.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/read_me.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/temov.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/tharr.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/ve_forbryderne.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/velox_neb.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/venzar_borgavve.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/verr_yed_horre.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/xixaxa_xoxaxa_xuxaxa.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/yum_yum.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/scroll/zelgo_mer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/aluminum.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/balsa.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/brass.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/copper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/crystal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/curved.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/ebony.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/forked.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_bone.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_brass.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_bronze.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_copper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_glass.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_iron.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_ivory.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_lead.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_plastic.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_silver.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/gem_wood.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/glass.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/hexagonal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-cold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-confusion.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-digging.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-disintegration.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-draining.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-enslavement.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-fire.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-fireball.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-flame.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-frost.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-hasting.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-healing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-invisibility.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-label.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-lightning.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-magic_darts.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-paralysis.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-polymorph_other.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-random_effects.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-slowing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/i-teleportation.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/iridium.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/iron.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/jeweled.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/long.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/maple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/marble.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/oak.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/pine.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/platinum.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/runed.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/short.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/silver.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/spiked.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff00.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff01.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff02.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff03.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff04.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff05.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff06.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff07.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff08.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/staff09.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/steel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/tin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/uranium.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/wand/zinc.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/aklys.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/ancient_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/ancus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/arrow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/athame.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bardiche.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/battle_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/battle_axe2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/battle_axe3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bec_de_corbin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bill_guisarme.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/blessed_blade.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/blowgun.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/blowgun2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/boomerang.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bow2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/broad_axe2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/broadsword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/bullwhip.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/club.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/crossbow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/crossbow2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/crossbow_bolt.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/crysknife.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/dagger.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/dart-p.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/dart.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/demon_blade.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/demon_trident.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/demon_whip.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/double_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/dwarvish_mattock.bmpbin0 -> 2103 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/dwarvish_short_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/dwarvish_spear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/elven_arrow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/elven_bow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/elven_broadsword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/elven_dagger.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/elven_short_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/elven_spear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/eveningstar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/eveningstar2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/executioner_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/executioner_axe2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/falchion.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/fauchard.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/flail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/flail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/flail_angmar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/giant_club.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/giant_spiked_club.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/glaive.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/glaive2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/great_flail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/great_flail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/greatsword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/greatsword2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/guisarme.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/halberd.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/halberd2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/hammer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/hammer2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/hand_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/hand_crossbow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/hand_crossbow2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/javelin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/katana.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/katana2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/katana3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/knife.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/lajatang.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/lance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/lochaber_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/long_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/long_sword2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/long_sword3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/longbow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/lucern_hammer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/mace.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/mace2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/mace3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/mace_large.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/mace_large2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/morning_star.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/morningstar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/morningstar2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/needle-p.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/needle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_arrow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_bow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_dagger.bmpbin0 -> 2106 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_glaive.bmpbin0 -> 2106 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_great_sword.bmpbin0 -> 2106 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_long_sword.bmpbin0 -> 2106 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_short_sword.bmpbin0 -> 2106 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/orcish_spear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/partisan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/quarterstaff.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/quickblade.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/ranseur.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/rubber_hose.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/runesword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/sabre2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/scalpel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/scimitar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/scimitar2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/scythe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/scythe2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/short_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/short_sword2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/shuriken.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/silver_arrow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/silver_dagger.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/silver_saber.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/silver_spear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/sling.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/sling_bullet.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spear.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spear2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spetum.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spiked_flail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spiked_flail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_glaive_of_prune.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_knife_of_accuracy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_mace_of_variability.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_olgreb.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_cerebov.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_vampires_tooth.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/stiletto.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/sword_orcish.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/throwing_net.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/trident.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/trident2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/triple_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/tsurugi.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/two_handed_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_arga.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_bloodbane.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_blowgun.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_brilliance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_chilly_death.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_doom_knight.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_elemental.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_eos.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_erchidel.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_fiery_devil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_finisher.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_fkaming_death.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_guard.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_jihad.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_krishna.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_leech.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_morg.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_octopus_king.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_plutonium.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_punk.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_skullcrusher.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_sniper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_undeadhunter.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/urand_voo_doo.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/voulge.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/war_axe.bmpbin0 -> 2106 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/war_hammer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/worm_tooth.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/ya.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/yumi.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/license.txt17
-rw-r--r--crawl-ref/source/rltiles/makefile.mgw121
-rw-r--r--crawl-ref/source/rltiles/makefile.unix121
-rw-r--r--crawl-ref/source/rltiles/player/arm/claws.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/gauntlet_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_black2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_chunli.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_grayfist.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_short_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_short_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_short_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_short_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_short_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_short_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/arm/glove_wrist_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/barding/centaur_barding.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/barding/naga_barding.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/centaur_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/centaur_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/deep_elf_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/deep_elf_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/demigod_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/demigod_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/demonspawn_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/demonspawn_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_black_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_black_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_gold_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_gold_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_gray_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_gray_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_green_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_green_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_mottled_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_mottled_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_pale_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_pale_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_purple_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_purple_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_red_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_red_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_white_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/draconian_white_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/dwarf_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/dwarf_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/elf_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/elf_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/ghoul_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/ghoul_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/gnome_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/gnome_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/halfling_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/halfling_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/human_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/human_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/kenku_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/kenku_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/kobold_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/kobold_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/merfolk_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/merfolk_fs.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/merfolk_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/merfolk_ms.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/merfolk_water_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/merfolk_water_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/minotaur_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/minotaur_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/mummy_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/mummy_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/naga_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/naga_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/ogre_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/ogre_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/ogre_mage_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/ogre_mage_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/orc_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/orc_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/shadow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/spriggan_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/spriggan_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/troll_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/troll_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/vampire_f.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/base/vampire_m.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/long_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/long_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/long_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/long_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/pj.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/short_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/short_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/short_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/beard/short_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/animal_skin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/aragorn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/aragorn2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/armor_blue_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/armor_mummy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/arwen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/banded.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/banded2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/belt1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/belt2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/bikini_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/bloody.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/boromir.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/bplate_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/bplate_metal1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/breast_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/chainmail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/chainmail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/chainmail3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/china_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/china_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/chunli.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/coat_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/coat_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/crystal_plate.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonarm_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonarm_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonarm_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonarm_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonarm_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonarm_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonarm_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonsc_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonsc_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonsc_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonsc_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonsc_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonsc_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dragonsc_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dress_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/dress_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/edison.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/frodo.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/gandalf_g.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/gil-galad.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/gimli.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/green_chain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/green_susp.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/half_plate.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/half_plate2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/half_plate3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/isildur.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/jacket2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/jacket3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/jacket_stud.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/jessica.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/karate.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/karate2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/lears_chain_mail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_armour.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_armour2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_armour3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_heavy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_jacket.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_metal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_short.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/leather_stud.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/legolas.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/merry.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/mesh_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/mesh_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/metal_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/monk_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/monk_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/neck.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/pipin.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/pj.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/plate.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/plate2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/plate_and_cloth.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/plate_and_cloth2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/plate_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/ringmail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_black_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_black_hood.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_black_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_blue_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_blue_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_brown3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_gray2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_green_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_of_night.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_rainbow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_red3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_red_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_white2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_white_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_white_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/robe_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/sailor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/sam.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/saruman.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/scalemail.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/scalemail2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_black3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_black_and_cloth.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_check.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_hawaii.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_vest.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_white1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_white2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_white3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shirt_white_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/shoulder_pad.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/skirt_onep_grey.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/slit_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/susp_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/troll_hide.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/vanhel1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/vest_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/vest_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/body/zhor.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/blue_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/hooves.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/long_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/long_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/mesh_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/mesh_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/mesh_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/mesh_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_brown3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/middle_ybrown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/pj.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/short_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/short_brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/short_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/boot/short_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/cloak/yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_grey.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_mottled.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_pale.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drchead/drchead_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_grey.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_mottled.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_pale.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/drcwing/drcwing_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/aragorn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/arwen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/boromir.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/brown1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/brown2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/elf_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/elf_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/elf_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/elf_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/fem_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/fem_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/fem_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/fem_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/frodo.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/legolas.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/long_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/long_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/long_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/long_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/merry.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/pigtail_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/pj.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/sam.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/short_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/short_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/short_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hair/short_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/aragorn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/arga.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/arwen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/asmodeus.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe_blood.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe_double.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe_executioner.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe_short.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe_small.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/axe_trog.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/black_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/black_whip.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bladehands.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/blessed_blade.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bloodbane.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/blowgun.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bone_lantern.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/boromir.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bottle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bow2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bow3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/bow_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/box.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/broadsword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/chilly_death.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/club.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/club2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/club3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/club_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/crossbow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/crossbow2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/crossbow3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/crossbow4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/crossbow_fire.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/crystal.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/d_glaive.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/dagger.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/dagger_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/deck.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/dirt.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/disc.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/dispater.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/doom_knight.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/double_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/elemental_staff.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/eveningstar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/falchion.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/finisher.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fire_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fire_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fire_dark.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fire_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fire_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fire_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fire_white2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/flaming_death.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/fork2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_ball.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_ball2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_ball3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_ball4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_balls.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_spike.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_stick.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frail_stick_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/frodo.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/gandalf.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/giant_club.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/giant_club_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/giant_club_spike.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/giant_club_spike_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/gimli.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/glaive.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/glaive2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/glaive3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/glaive_of_prune.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/great_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/great_bow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/great_staff.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/great_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/great_sword_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/halberd.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/hammer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/hammer2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/hammer3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/hand_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/head.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/heavy_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/hook.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/horn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/jihad.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/katana.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/katana_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/knife.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/krishna.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/lance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/lance2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/lantern.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/large_mace.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/leech.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/legolas.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/light_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/light_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/light_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/long_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/long_sword_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/mace.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/mace2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/mace3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/mace_of_variability.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/mace_ruby.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/morg.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/morningstar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/morningstar2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/nunchaku.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/olgreb.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/orb.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/pick_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/pike.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/plutonium_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/pole_forked.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/punk.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/quarterstaff1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/quarterstaff2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/quarterstaff3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/quarterstaff4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sabre.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/saruman.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sceptre.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/scimitar.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/scimitar2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/scythe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/scythe_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/short_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/short_sword2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/short_sword_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sickle.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/singing_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/skull.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sling.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sniper.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/spark.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/spear1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/spear2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/spear3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/spear4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/spear5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_evil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_fork.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_large.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_mage.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_mage2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_mummy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_ring_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_ruby.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/staff_skull.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/stick.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/stone.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword_breaker.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword_jag.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword_seven.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword_thief.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword_tri.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/sword_twist.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/trident.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/trident2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/trident3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/trident_demon.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/trident_elec.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/triple_sword.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/voodoo.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/war_axe.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/whip.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/zonguldrok.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/bladehands.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_blue_dim.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_cyan_dim.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_green_dim.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_magenta_dim.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_red_dim.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_sky.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/book_yellow_dim.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/boromir.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/bullseye.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/dagger.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/fire_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/fire_dark.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/fire_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/fire_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/fire_white2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/gil-galad.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/lantern.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/light_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/light_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/light_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/pj.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/sabre.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_diamond_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_kite1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_kite2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_kite3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_kite4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_knight_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_knight_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_knight_rw.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_long_cross.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_long_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_middle_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_middle_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_middle_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_middle_ethn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_middle_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_middle_round.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_middle_unicorn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_of_resistance.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round4.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round5.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round6.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round7.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round_small.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round_small2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_round_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_shaman.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/shield_skull.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/short_sword_slant.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/spark.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/torch.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand2/torsh2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/art_dragonhelm.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/band_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/band_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/band_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/band_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/band_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/bandana_ybrown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/black_horn.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/black_horn2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/blue_horn_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/brown_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/cap_black1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/cap_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/chain.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/cheek_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/clown1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/cone_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/cone_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/crown_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/dyrovepreva.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/feather_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/feather_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/feather_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/feather_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/feather_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/fhelm_gray3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/fhelm_horn2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/fhelm_horn_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/full_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/full_gold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/gandalf.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hat_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/healer.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/helm_gimli.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/helm_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/helm_plume.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/helm_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_black2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_cyan.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_green2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_red2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_white2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/hood_ybrown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/horn_evil.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/horn_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/horned.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/horns1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/horns2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/horns3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/iron1.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/iron2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/iron3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/iron_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/isildur.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/mummy.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/ninja_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/straw.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/taiso_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/taiso_magenta.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/taiso_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/taiso_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/taiso_yellow.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/turban_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/turban_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/turban_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_blackgold.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_blackred.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_bluegreen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_darkgreen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_purple.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/wizard_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/head/yellow_wing.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/belt_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/belt_redbrown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/bikini_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/chunli.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/garter.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/leg_armor00.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/leg_armor01.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/leg_armor02.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/leg_armor03.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/leg_armor04.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/leg_armor05.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/loincloth_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/long_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/metal_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/metal_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants16.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_black.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_darkgreen.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_l_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_orange.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_short_brown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_short_brown3.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_short_darkbrown.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pants_short_gray.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/pj.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/skirt_blue.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/skirt_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/skirt_red.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/skirt_white.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/skirt_white2.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/player/leg/trouser_green.bmpbin0 -> 2102 bytes
-rw-r--r--crawl-ref/source/rltiles/tool/bm.c558
-rw-r--r--crawl-ref/source/rltiles/tool/bm.h26
-rw-r--r--crawl-ref/source/rltiles/tool/dcpl.c581
-rw-r--r--crawl-ref/source/rltiles/tool/dcqv.c847
-rw-r--r--crawl-ref/source/rltiles/tool/dcreverse.c216
-rw-r--r--crawl-ref/source/rltiles/tool/dctile.c642
-rw-r--r--crawl-ref/source/rltiles/tool/mkmap.c408
-rw-r--r--crawl-ref/source/rltiles/tool/mkmapq.c783
-rw-r--r--crawl-ref/source/rltiles/tool/palette.h355
-rw-r--r--crawl-ref/source/rltiles/tool/shade.c254
-rw-r--r--crawl-ref/source/rltiles/walls2d/hall.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/hall.pngbin0 -> 3148 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/hive.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/hive.pngbin0 -> 4079 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/ice.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/ice.pngbin0 -> 3698 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/lair.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/lair.pngbin0 -> 3883 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/normal.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/normal.pngbin0 -> 3413 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/orc.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/orc.pngbin0 -> 3883 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/slime.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/slime.pngbin0 -> 3792 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/snake.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/snake.pngbin0 -> 3284 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/swamp.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/swamp.pngbin0 -> 3902 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/tomb.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/tomb.pngbin0 -> 3212 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/undead.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/undead.pngbin0 -> 3717 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/vault.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/vault.pngbin0 -> 3333 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_blue.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_blue.pngbin0 -> 3574 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_cyan.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_cyan.pngbin0 -> 3572 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_gray.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_gray.pngbin0 -> 3528 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_green.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_green.pngbin0 -> 3572 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_magenta.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_magenta.pngbin0 -> 3573 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_red.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_red.pngbin0 -> 3563 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_yellow.bmpbin0 -> 9270 bytes
-rw-r--r--crawl-ref/source/rltiles/walls2d/z_yellow.pngbin0 -> 3572 bytes
-rw-r--r--crawl-ref/source/shopping.cc8
-rw-r--r--crawl-ref/source/spells2.cc15
-rw-r--r--crawl-ref/source/stuff.cc12
-rw-r--r--crawl-ref/source/tags.cc197
-rw-r--r--crawl-ref/source/tags.h1
-rw-r--r--crawl-ref/source/tile1.cc3813
-rw-r--r--crawl-ref/source/tile2.cc3023
-rw-r--r--crawl-ref/source/tiles.h213
-rw-r--r--crawl-ref/source/tutorial.cc4
-rw-r--r--crawl-ref/source/view.cc211
-rw-r--r--crawl-ref/source/view.h2
-rw-r--r--crawl-ref/wininit.txt30
2441 files changed, 26569 insertions, 109 deletions
diff --git a/crawl-ref/docs/crawl_manual.txt b/crawl-ref/docs/crawl_manual.txt
index 11762ea8d4..ef19868f9e 100644
--- a/crawl-ref/docs/crawl_manual.txt
+++ b/crawl-ref/docs/crawl_manual.txt
@@ -2237,6 +2237,15 @@ Stashes:
Ctrl-E Erase stash (ignores the square from stash
tracking if using 'stash_tracking = explicit').
+Tiles:
+ - Edit player doll. This makes it possible to change
+ the appearance of the player and to override the
+ defaults, which are to mimic the current player's
+ equipment and any species defaults. These options
+ are saved into the dolls.txt file.
+ Ctrl-Q Modify screen size preferences. These changes
+ are saved into the wininit.txt file.
+
Level map ('X')
---------------
The level map (brought up by 'X' in the main screen) uses the whole
diff --git a/crawl-ref/docs/crawl_options.txt b/crawl-ref/docs/crawl_options.txt
index 7cc9df4322..9368dfd02d 100644
--- a/crawl-ref/docs/crawl_options.txt
+++ b/crawl-ref/docs/crawl_options.txt
@@ -70,6 +70,8 @@ The contents of this text are:
autoinscribe
4-n Macro related Options.
flush.failure, flush.command, flush.message
+4-o Tiles Options.
+ show_items
5- Character Dump.
5-a Items and Kills.
kill_map, dump_kill_places, dump_item_origins,
@@ -1217,6 +1219,13 @@ flush.message = false
command -- whenever the game is about to get the next command
message -- whenever the game outputs a non-mute message
+4-o Tiles Options
+---------------------
+show_items = <glyphs>
+ This options controls the order and presence of items in the tiles
+ inventory. By default, its value is !?/%=([)X}+\_. The underscore
+ represents empty slots.
+
5- Character Dump.
===================
diff --git a/crawl-ref/init.txt b/crawl-ref/init.txt
index 4f2dbc2bae..ce7a0e60af 100644
--- a/crawl-ref/init.txt
+++ b/crawl-ref/init.txt
@@ -231,6 +231,10 @@ message_colour = lightcyan:LOW MAGIC WARNING
# flush.command = true
# flush.message = true
+##### 4-t Tile related Options ##################
+
+show_items = !?/%=([)X}+\_.
+
##### 5- Dump File #################################################
#
##### 5-a Items and Kill List ###################
diff --git a/crawl-ref/source/AppHdr.h b/crawl-ref/source/AppHdr.h
index 2f0d01ab0a..899a818d53 100644
--- a/crawl-ref/source/AppHdr.h
+++ b/crawl-ref/source/AppHdr.h
@@ -104,8 +104,10 @@
#define FILE_SEPARATOR '/'
#define CHARACTER_SET 0
+#ifndef USE_TILE
#define USE_ASCII_CHARACTERS
#define USE_CURSES
+#endif
#define EOL "\n"
// Unix builds use curses/ncurses, which supports colour.
@@ -178,8 +180,10 @@
#include <dos.h>
-#elif defined(WIN32CONSOLE)
- #include "libw32c.h"
+#elif defined(WIN32CONSOLE) || defined(WIN32TILES)
+ #if defined(WIN32CONSOLE)
+ #include "libw32c.h"
+ #endif
#define EOL "\n"
#define CHARACTER_SET A_ALTCHARSET
#define getstr(X,Y) get_console_string(X,Y)
@@ -198,6 +202,10 @@
#error Missing platform #define or unsupported compiler.
#endif
+#ifdef USE_TILE
+ #include "libgui.h"
+#endif
+
// =========================================================================
// Defines for dgamelaunch-specific things.
// =========================================================================
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index c3b65b061b..2c89e5eaf9 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -138,6 +138,8 @@
#include "stash.h"
#include "xom.h"
+#include "tiles.h"
+
crawl_environment env;
player you;
system_environment SysEnv;
@@ -191,7 +193,11 @@ static void read_messages();
It all starts here. Some initialisations are run first, then straight to
new_game and then input.
*/
+#ifdef WIN32TILES
+int old_main( int argc, char *argv[] )
+#else
int main( int argc, char *argv[] )
+#endif
{
// Load in the system environment variables
get_system_environment();
@@ -257,7 +263,9 @@ int main( int argc, char *argv[] )
input();
// Should never reach this stage, right?
-#ifdef UNIX
+#if defined(USE_TILE)
+ libgui_shutdown();
+#elif defined(UNIX)
unixcurses_shutdown();
#endif
@@ -1360,7 +1368,11 @@ static void input()
// Enable the cursor to read input. The cursor stays on while
// the command is being processed, so subsidiary prompts
// shouldn't need to turn it on explicitly.
+#ifdef USE_TILE
+ cursor_control con(false);
+#else
cursor_control con(true);
+#endif
crawl_state.waiting_for_command = true;
c_input_reset(true);
@@ -1633,6 +1645,39 @@ void process_command( command_type cmd )
switch (cmd)
{
+#ifdef USE_TILE
+ case CMD_EDIT_PREFS:
+ edit_prefs();
+ break;
+
+ case CMD_USE_ITEM:
+ {
+ int idx;
+ InvAction act;
+ gui_get_mouse_inv(idx, act);
+ use_item(idx, act);
+ }
+ break;
+
+ case CMD_VIEW_ITEM:
+ {
+ int idx;
+ InvAction act;
+ gui_get_mouse_inv(idx, act);
+
+ if (idx < 0)
+ describe_item(mitm[-idx]);
+ else
+ describe_item(you.inv[idx]);
+ redraw_screen();
+ }
+ break;
+
+ case CMD_EDIT_PLAYER_TILE:
+ TilePlayerEdit();
+ break;
+#endif // USE_TILE
+
case CMD_OPEN_DOOR_UP_RIGHT: open_door(-1, -1); break;
case CMD_OPEN_DOOR_UP: open_door( 0, -1); break;
case CMD_OPEN_DOOR_UP_LEFT: open_door( 1, -1); break;
@@ -2088,9 +2133,11 @@ void process_command( command_type cmd )
// because we want to have CTRL-Y available...
// and unfortunately they tend to be stuck together.
clrscr();
+#ifndef USE_TILE
unixcurses_shutdown();
kill(0, SIGTSTP);
unixcurses_startup();
+#endif
redraw_screen();
break;
#endif
@@ -3118,6 +3165,13 @@ command_type keycode_to_command( keycode_type key )
{
switch ( key )
{
+#ifdef USE_TILE
+ case '-': return CMD_EDIT_PLAYER_TILE;
+ case CK_MOUSE_DONE: return CMD_NEXT_CMD;
+ case CK_MOUSE_B1ITEM: return CMD_USE_ITEM;
+ case CK_MOUSE_B2ITEM: return CMD_VIEW_ITEM;
+#endif // USE_TILE
+
case KEY_MACRO_DISABLE_MORE: return CMD_DISABLE_MORE;
case KEY_MACRO_ENABLE_MORE: return CMD_ENABLE_MORE;
case KEY_REPEAT_KEYS: return CMD_REPEAT_KEYS;
@@ -3225,7 +3279,11 @@ command_type keycode_to_command( keycode_type key )
case CONTROL('M'): return CMD_NO_CMD;
case CONTROL('O'): return CMD_EXPLORE;
case CONTROL('P'): return CMD_REPLAY_MESSAGES;
+#ifdef USE_TILE
+ case CONTROL('Q'): return CMD_EDIT_PREFS;
+#else
case CONTROL('Q'): return CMD_NO_CMD;
+#endif
case CONTROL('R'): return CMD_REDRAW_SCREEN;
case CONTROL('S'): return CMD_MARK_STASH;
case CONTROL('V'): return CMD_TOGGLE_AUTOPRAYER;
@@ -3244,7 +3302,18 @@ keycode_type get_next_keycode()
keycode_type keyin;
flush_input_buffer( FLUSH_BEFORE_COMMAND );
+
+#ifdef USE_TILE
+ tile_draw_inv(-1, REGION_INV1);
+#ifdef USE_X11
+ update_screen();
+#endif
+ mouse_set_mode(MOUSE_MODE_COMMAND);
+ keyin = unmangle_direction_keys(getch_with_command_macros());
+ mouse_set_mode(MOUSE_MODE_NORMAL);
+#else // !USE_TILE
keyin = unmangle_direction_keys(getch_with_command_macros());
+#endif
if (!is_synthetic_key(keyin))
mesclr();
@@ -3563,6 +3632,12 @@ static bool initialise(void)
you.wizard = true;
#endif
+#ifdef USE_TILE
+ TilePlayerInit();
+ TileInitItems();
+ TileNewLevel(true);
+#endif
+
init_properties();
burden_change();
make_hungry(0,true);
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 65ba80d43a..8ad73623d2 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -64,6 +64,8 @@
#include "view.h"
#include "xom.h"
+#include "tiles.h"
+
#define BEAM_STOP 1000 // all beams stopped by subtracting this
// from remaining range
#define MON_RESIST 0 // monster resisted
@@ -179,9 +181,14 @@ void zap_animation( int colour, const monsters *mon, bool force )
if (in_los_bounds(drawx, drawy))
{
+#ifdef USE_TILE
+ TileDrawBolt(drawx-1, drawy-1, tileidx_zap(colour));
+#else
view_update();
- gotoxy( drawx, drawy );
+ gotoxy( drawx, drawy , GOTO_DNGN );
put_colour_ch( colour, dchar_glyph( DCHAR_FIRED_ZAP ) );
+#endif
+
update_screen();
delay(50);
}
@@ -1301,6 +1308,17 @@ void fire_beam( bolt &pbolt, item_def *item )
beam_message_cache.clear();
+#ifdef USE_TILE
+ int tile_beam = -1;
+
+ if (item)
+ {
+ tile_beam = tileidx_item_throw(*item,
+ pbolt.target_x-pbolt.source_x,
+ pbolt.target_y-pbolt.source_y);
+ }
+#endif
+
#if DEBUG_DIAGNOSTICS
if (pbolt.flavour != BEAM_LINE_OF_SIGHT)
{
@@ -1481,6 +1499,18 @@ void fire_beam( bolt &pbolt, item_def *item )
// draw new position
int drawx = grid2viewX(tx);
int drawy = grid2viewY(ty);
+
+#ifdef USE_TILE
+ if (tile_beam == -1)
+ tile_beam = tileidx_bolt(pbolt);
+ if (tile_beam != -1 && in_los_bounds(drawx, drawy) &&
+ (tx != you.x_pos || ty != you.y_pos))
+ {
+ TileDrawBolt(drawx-1, drawy-1, tile_beam);
+ delay(15);
+ }
+ else
+#endif
// bounds check
if (in_los_bounds(drawx, drawy))
{
@@ -4723,14 +4753,19 @@ static void explosion_cell(bolt &beam, int x, int y, bool drawOnly)
if (see_grid(realx, realy) || (realx == you.x_pos && realy == you.y_pos))
{
+#ifdef USE_TILE
+ if (in_los_bounds(drawx, drawy))
+ TileDrawBolt(drawx-1, drawy-1, tileidx_bolt(beam));
+#else
// bounds check
if (in_los_bounds(drawx, drawy))
{
- gotoxy(drawx, drawy);
+ gotoxy(drawx, drawy, GOTO_DNGN);
put_colour_ch(
beam.colour == BLACK ? random_colour() : beam.colour,
dchar_glyph( DCHAR_EXPLOSION ) );
}
+#endif
}
}
}
diff --git a/crawl-ref/source/chardump.cc b/crawl-ref/source/chardump.cc
index 478ad3657e..841423b2bb 100644
--- a/crawl-ref/source/chardump.cc
+++ b/crawl-ref/source/chardump.cc
@@ -1240,6 +1240,10 @@ void display_notes()
void resists_screen()
{
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_MORE);
+#endif
+
std::vector<formatted_string> vfs = get_full_detail(false);
clrscr();
gotoxy(1,1);
diff --git a/crawl-ref/source/cio.cc b/crawl-ref/source/cio.cc
index 12909bf5e2..fcaaa7adc1 100644
--- a/crawl-ref/source/cio.cc
+++ b/crawl-ref/source/cio.cc
@@ -121,7 +121,9 @@ void get_input_line( char *const buff, int len )
return;
}
-#if defined(UNIX)
+#if defined(USE_TILE)
+ get_input_line_gui( buff, len );
+#elif defined(UNIX)
get_input_line_from_curses( buff, len ); // implemented in libunix.cc
#elif defined(WIN32CONSOLE)
getstr( buff, len );
@@ -169,13 +171,15 @@ int c_getch()
// cursoring over darkgray or black causes problems.
void cursorxy(int x, int y)
{
-#ifdef UNIX
+#if defined(USE_TILE)
+ tile_place_cursor(x-1, y-1, true);
+#elif defined(UNIX) && !defined(USE_TILE)
if (Options.use_fake_cursor)
fakecursorxy(x, y);
else
- gotoxy(x, y);
+ gotoxy(x, y, GOTO_DNGN);
#else
- gotoxy(x, y);
+ gotoxy(x, y, GOTO_DNGN);
#endif
}
@@ -317,7 +321,7 @@ void line_reader::cursorto(int ncx)
{
int x = (start_x + ncx - 1) % wrapcol + 1;
int y = start_y + (start_x + ncx - 1) / wrapcol;
- ::gotoxy(x, y);
+ ::gotoxy(x, y, GOTO_LAST);
}
int line_reader::read_line(bool clear_previous)
diff --git a/crawl-ref/source/cio.h b/crawl-ref/source/cio.h
index 026ac42179..93e6471df4 100644
--- a/crawl-ref/source/cio.h
+++ b/crawl-ref/source/cio.h
@@ -184,6 +184,16 @@ enum KEYS
// Mouse codes.
CK_MOUSE_MOVE = 10001,
+#ifdef USE_TILE
+ CK_MOUSE_DONE,
+ CK_MOUSE_B1,
+ CK_MOUSE_B2,
+ CK_MOUSE_B3,
+ CK_MOUSE_B4,
+ CK_MOUSE_B5,
+ CK_MOUSE_B1ITEM,
+ CK_MOUSE_B2ITEM,
+#endif
CK_MOUSE_CLICK
};
diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc
index 55c16e5c78..3f1d62435a 100644
--- a/crawl-ref/source/command.cc
+++ b/crawl-ref/source/command.cc
@@ -97,6 +97,10 @@ static const char *features[] = {
#ifdef UNICODE_GLYPHS
"Unicode glyphs",
#endif
+
+#ifdef USE_TILE
+ "Tile support",
+#endif
};
void version(void)
diff --git a/crawl-ref/source/debug.cc b/crawl-ref/source/debug.cc
index 8d76a489df..07fcc1e5d7 100644
--- a/crawl-ref/source/debug.cc
+++ b/crawl-ref/source/debug.cc
@@ -86,6 +86,7 @@
#include "state.h"
#include "stuff.h"
#include "terrain.h"
+#include "tiles.h"
#include "traps.h"
#include "travel.h"
#include "version.h"
@@ -641,7 +642,11 @@ static void wizard_go_to_level(const level_pos &pos)
you.where_are_you = static_cast<branch_type>(pos.id.branch);
you.your_level = abs_depth;
- load(stair_taken, LOAD_ENTER_LEVEL, old_level_type, old_level, old_where);
+ const bool newlevel = load(stair_taken, LOAD_ENTER_LEVEL, old_level_type,
+ old_level, old_where);
+#ifdef USE_TILE
+ TileNewLevel(newlevel);
+#endif
save_game_state();
new_level();
viewwindow(1, true);
diff --git a/crawl-ref/source/defines.h b/crawl-ref/source/defines.h
index fccbcf37ba..c7b994134d 100644
--- a/crawl-ref/source/defines.h
+++ b/crawl-ref/source/defines.h
@@ -120,9 +120,15 @@ const int LABYRINTH_BORDER = 4;
#define ENV_SHOW_OFFSET (LOS_RADIUS + 1)
#define ENV_SHOW_DIAMETER (ENV_SHOW_OFFSET * 2 + 1)
+#ifdef USE_TILE
+#define VIEW_BASE_WIDTH (tile_dngn_x)
+#define VIEW_MIN_WIDTH (tile_dngn_x)
+#define VIEW_MIN_HEIGHT (tile_dngn_y)
+#else
#define VIEW_BASE_WIDTH 33
#define VIEW_MIN_WIDTH 17
#define VIEW_MIN_HEIGHT 17
+#endif
// max traps per level
#define MAX_TRAPS 100
@@ -304,4 +310,26 @@ const int LABYRINTH_BORDER = 4;
#define KEY_MACRO_ENABLE_MORE -2
#define KEY_REPEAT_KEYS -3
+// gotoxy regions
+enum GotoRegion
+{
+ GOTO_CRT, // cprintf > crt
+ GOTO_MSG, // cprintf > message
+ GOTO_STAT, // cprintf > character status
+ GOTO_DNGN, // cprintf > dungeon screen
+ GOTO_LAST // cprintf > last active region or CRT, if none
+};
+
+// Mouse modes (for tiles)
+enum MouseMode
+{
+ MOUSE_MODE_NORMAL,
+ MOUSE_MODE_COMMAND,
+ MOUSE_MODE_TARGET,
+ MOUSE_MODE_TARGET_DIR,
+ MOUSE_MODE_MORE,
+ MOUSE_MODE_MACRO
+};
+
+
#endif
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index d67c27fde0..28f38c0574 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -1687,7 +1687,11 @@ void describe_feature_wide(int x, int y)
clrscr();
print_description(desc);
-
+
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_MORE);
+#endif
+
if (Options.tutorial_left)
tutorial_describe_feature(grd[x][y]);
@@ -1848,6 +1852,10 @@ void describe_spell(spell_type spelled)
clrscr();
print_description(description);
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_MORE);
+#endif
+
if (getch() == 0)
getch();
} // end describe_spell()
@@ -2137,6 +2145,10 @@ void describe_monsters(monsters& mons)
clrscr();
print_description(description.str());
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_MORE);
+#endif
+
if (Options.tutorial_left)
tutorial_describe_monster(static_cast<const monsters*>(&mons));
@@ -2553,14 +2565,18 @@ void describe_god( god_type which_god, bool give_title )
if ( which_god == you.religion )
{
if (you.religion == GOD_ZIN)
- gotoxy(1, get_number_of_lines() - 1);
+ gotoxy(1, get_number_of_lines() - 1, GOTO_MSG);
else
- gotoxy(1, get_number_of_lines() - 2);
+ gotoxy(1, get_number_of_lines() - 2, GOTO_MSG);
textcolor(LIGHTGRAY);
cprintf(get_linebreak_string(religion_help(which_god),
numcols).c_str());
}
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_MORE);
+#endif
+
get_ch();
}
diff --git a/crawl-ref/source/direct.cc b/crawl-ref/source/direct.cc
index 0c5cdd769a..36925ca8df 100644
--- a/crawl-ref/source/direct.cc
+++ b/crawl-ref/source/direct.cc
@@ -50,6 +50,7 @@
#include "stuff.h"
#include "spells4.h"
#include "stash.h"
+#include "tiles.h"
#include "terrain.h"
#include "traps.h"
#include "travel.h"
@@ -114,6 +115,10 @@ void direction_choose_compass( dist& moves, targeting_behaviour *beh)
moves.isCancel = false;
moves.dx = moves.dy = 0;
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_TARGET_DIR);
+#endif
+
beh->compass = true;
do {
@@ -219,6 +224,9 @@ static const char *target_mode_help_text(int mode)
static void draw_ray_glyph(const coord_def &pos, int colour,
int glych, int mcol)
{
+#ifdef USE_TILE
+ tile_place_ray(pos);
+#else
int mid = mgrd(pos);
if (mid != NON_MONSTER)
{
@@ -230,9 +238,10 @@ static void draw_ray_glyph(const coord_def &pos, int colour,
}
}
const coord_def vp = grid2view(pos);
- gotoxy(vp.x, vp.y);
+ gotoxy(vp.x, vp.y, GOTO_DNGN);
textcolor( real_colour(colour) );
putch(glych);
+#endif
}
// We handle targeting for repeating commands and re-doing the
@@ -487,7 +496,35 @@ void direction(dist& moves, targeting_type restricts,
key_command = CMD_TARGET_CYCLE_FORWARD; // find closest enemy
}
else
+ {
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_TARGET);
+#endif
key_command = beh->get_command();
+ }
+
+#ifdef USE_TILE
+ // if a mouse command, update location to mouse position...
+ if ( key_command == CMD_TARGET_MOUSE_MOVE ||
+ key_command == CMD_TARGET_MOUSE_SELECT )
+ {
+ coord_def gc;
+ if (gui_get_mouse_grid_pos(gc))
+ {
+ moves.tx = gc.x;
+ moves.ty = gc.y;
+
+ if ( key_command == CMD_TARGET_MOUSE_SELECT )
+ {
+ key_command = CMD_TARGET_SELECT;
+ }
+ }
+ else
+ {
+ key_command = CMD_NO_CMD;
+ }
+ }
+#endif
if (target_unshifted && moves.tx == you.x_pos && moves.ty == you.y_pos
&& restricts != DIR_TARGET)
@@ -879,9 +916,16 @@ void direction(dist& moves, targeting_type restricts,
terse_describe_square(moves.target());
}
+#ifdef USE_TILE
+ // tiles always need a beam redraw if show_beam is true (and if valid...)
+ if (show_beam && find_ray(you.x_pos, you.y_pos, moves.tx, moves.ty,
+ true, ray, 0, true) || need_beam_redraw )
+ {
+#else
if ( need_beam_redraw )
{
viewwindow(true, false);
+#endif
if ( show_beam &&
in_vlos(grid2viewX(moves.tx), grid2viewY(moves.ty)) &&
moves.target() != you.pos() )
@@ -902,7 +946,15 @@ void direction(dist& moves, targeting_type restricts,
raycopy.advance_through(moves.target());
}
textcolor(LIGHTGREY);
+#ifdef USE_TILE
+ draw_ray_glyph(moves.target(), MAGENTA, '*',
+ MAGENTA | COLFLAG_REVERSE);
+ }
+ viewwindow(true, false);
+#else
}
+#endif
+
}
skip_iter = false; // only skip one iteration at most
}
@@ -2138,6 +2190,10 @@ targeting_behaviour::~targeting_behaviour()
int targeting_behaviour::get_key()
{
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_TARGET_DIR);
+#endif
+
if (!crawl_state.is_replaying_keys())
flush_input_buffer(FLUSH_BEFORE_COMMAND);
@@ -2153,7 +2209,12 @@ command_type targeting_behaviour::get_command(int key)
switch ( key )
{
case ESCAPE: case 'x': return CMD_TARGET_CANCEL;
-
+
+#ifdef USE_TILE
+ case CK_MOUSE_MOVE: return CMD_TARGET_MOUSE_MOVE;
+ case CK_MOUSE_CLICK: return CMD_TARGET_MOUSE_SELECT;
+#endif
+
#ifdef WIZARD
case 'F': return CMD_TARGET_WIZARD_MAKE_FRIENDLY;
case 's': return CMD_TARGET_WIZARD_MAKE_SHOUT;
diff --git a/crawl-ref/source/direct.h b/crawl-ref/source/direct.h
index ad4f6f3b44..839b84ebe9 100644
--- a/crawl-ref/source/direct.h
+++ b/crawl-ref/source/direct.h
@@ -16,6 +16,7 @@
#include "externs.h"
#include "enum.h"
+#include "libgui.h"
#include "ray.h"
class crawl_view_buffer
@@ -214,6 +215,11 @@ inline coord_def view2show(const coord_def &pos)
return (pos - crawl_view.vlos1 + coord_def(1, 1));
}
+inline coord_def show2view(const coord_def &pos)
+{
+ return (pos + crawl_view.vlos1 - coord_def(1, 1));
+}
+
inline coord_def grid2show(const coord_def &pos)
{
return (view2show(grid2view(pos)));
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 83d63b4c3d..69332130f6 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -581,6 +581,15 @@ enum command_type
CMD_TARGET_WIZARD_GIVE_ITEM,
CMD_TARGET_HELP,
+#ifdef USE_TILE
+ CMD_TARGET_MOUSE_MOVE,
+ CMD_TARGET_MOUSE_SELECT,
+ CMD_EDIT_PREFS,
+ CMD_EDIT_PLAYER_TILE,
+ CMD_USE_ITEM,
+ CMD_VIEW_ITEM,
+#endif
+
// Disable/enable -more- prompts.
CMD_DISABLE_MORE,
CMD_ENABLE_MORE,
diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h
index d6c0ed410e..bdaa02b36f 100644
--- a/crawl-ref/source/externs.h
+++ b/crawl-ref/source/externs.h
@@ -34,6 +34,15 @@
#include "mpr.h"
#include "store.h"
+#ifdef USE_TILE
+struct TileFlavor
+{
+ char floor;
+ char wall;
+ char special;
+};
+#endif
+
#define INFO_SIZE 200 // size of message buffers
#define ITEMNAME_SIZE 200 // size of item names/shop names/etc
#define HIGHSCORE_SIZE 800 // <= 10 Lines for long format scores
@@ -1332,6 +1341,16 @@ public:
FixedArray<unsigned short, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER>
show_col; // view window colour
+#ifdef USE_TILE
+ // indexed by grid coords
+ FixedArray<unsigned short,GXM, GYM> tile_bk_fg; // tile fg
+ FixedArray<unsigned short,GXM, GYM> tile_bk_bg; // tile bg
+ FixedArray<TileFlavor, GXM, GYM> tile_flavor;
+ // indexed by (show-1) coords
+ FixedArray<unsigned short,ENV_SHOW_DIAMETER-2,ENV_SHOW_DIAMETER-2> tile_fg;
+ FixedArray<unsigned short,ENV_SHOW_DIAMETER-2,ENV_SHOW_DIAMETER-2> tile_bg;
+#endif
+
FixedVector< cloud_struct, MAX_CLOUDS > cloud; // cloud list
unsigned char cloud_no;
@@ -1736,6 +1755,13 @@ public:
std::vector<std::string> fsim_kit;
#endif // WIZARD
+#ifdef USE_TILE
+ char show_items[20];
+#endif
+#ifdef WIN32TILES
+ bool use_dos_char;
+#endif
+
typedef std::map<std::string, std::string> opt_map;
opt_map named_options; // All options not caught above are
// recorded here.
diff --git a/crawl-ref/source/files.cc b/crawl-ref/source/files.cc
index 6af6196a0c..78d8edb5ef 100644
--- a/crawl-ref/source/files.cc
+++ b/crawl-ref/source/files.cc
@@ -87,6 +87,7 @@
#include "state.h"
#include "stuff.h"
#include "tags.h"
+#include "tiles.h"
#include "terrain.h"
#include "travel.h"
#include "tutorial.h"
@@ -1090,7 +1091,9 @@ bool load( dungeon_feature_type stair_taken, load_mode_type load_mode,
if (timeval > 0)
{
you.time_taken = timeval;
+#ifndef USE_TILE
viewwindow(true, false);
+#endif
handle_monsters();
}
}
@@ -1354,6 +1357,10 @@ void load_ghost(void)
menv[imn].set_ghost(ghosts[0]);
menv[imn].ghost_init();
+#ifdef USE_TILE
+ TileGhostInit(ghosts[0]);
+#endif
+
ghosts.erase(ghosts.begin());
}
}
diff --git a/crawl-ref/source/food.cc b/crawl-ref/source/food.cc
index f0074f4ec7..6f7133cd2e 100644
--- a/crawl-ref/source/food.cc
+++ b/crawl-ref/source/food.cc
@@ -452,7 +452,7 @@ static bool userdef_eat_food()
#endif
}
-bool prompt_eat_from_inventory(void)
+bool prompt_eat_from_inventory(int slot)
{
if (inv_count() < 1)
{
@@ -460,7 +460,7 @@ bool prompt_eat_from_inventory(void)
return (false);
}
- int which_inventory_slot =
+ int which_inventory_slot = (slot != -1)? slot:
prompt_invent_item(
"Eat which item?",
MT_INVLIST,
@@ -505,7 +505,7 @@ bool prompt_eat_from_inventory(void)
}
// [ds] Returns true if something was eaten
-bool eat_food(bool run_hook)
+bool eat_food(bool run_hook, int slot)
{
if (you.is_undead == US_UNDEAD)
{
@@ -528,7 +528,7 @@ bool eat_food(bool run_hook)
return (false);
}
- if (igrd[you.x_pos][you.y_pos] != NON_ITEM)
+ if (igrd[you.x_pos][you.y_pos] != NON_ITEM && slot == -1)
{
const int res = eat_from_floor();
if ( res == 1 )
@@ -537,7 +537,7 @@ bool eat_food(bool run_hook)
return false;
}
- return (prompt_eat_from_inventory());
+ return (prompt_eat_from_inventory(slot));
} // end eat_food()
/*
diff --git a/crawl-ref/source/food.h b/crawl-ref/source/food.h
index 2aba226354..63277b3002 100644
--- a/crawl-ref/source/food.h
+++ b/crawl-ref/source/food.h
@@ -53,7 +53,7 @@ bool butchery(void);
/* ***********************************************************************
* called from: acr
* *********************************************************************** */
-bool eat_food(bool run_hook = true);
+bool eat_food(bool run_hook = true, int slot = -1);
// last updated 19jun2000 {dlb}
@@ -92,7 +92,7 @@ int eat_from_floor();
void eat_from_inventory(int which_inventory_slot);
-bool prompt_eat_from_inventory(void);
+bool prompt_eat_from_inventory(int slot = -1);
void chunk_nutrition_message(int nutrition);
diff --git a/crawl-ref/source/guic-win.cc b/crawl-ref/source/guic-win.cc
new file mode 100644
index 0000000000..7624f44334
--- /dev/null
+++ b/crawl-ref/source/guic-win.cc
@@ -0,0 +1,999 @@
+// Windows wb_[ t@C:
+#include <windows.h>
+#include <commdlg.h>
+#include <commctrl.h>
+
+// C ^C wb_[ t@C
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <memory.h>
+#include <tchar.h>
+
+// WinClass & RegionClass definitions
+#include "guic.h"
+
+static HINSTANCE hInst;
+static int nCmdShow;
+
+// colors
+static COLORREF term_pix[MAX_TERM_COL];
+BYTE pix_transparent;
+BYTE pix_black;
+BYTE pix_white;
+BYTE pix_magenta;
+BYTE pix_rimcolor;
+
+RGBQUAD RegionClass::std_palette[256];
+
+bool GuicInit(HINSTANCE h, int nCmd)
+{
+ int i;
+ hInst = h;
+ nCmdShow = nCmd;
+
+ for (i=0; i< MAX_TERM_COL; i++)
+ {
+ int *c = (int *)&term_colors[i];
+ term_pix[i] =PALETTERGB( c[0], c[1], c[2] );
+ }
+ return true;
+}
+
+void GuicDeinit()
+{
+
+}
+
+void WinClass::SysInit()
+{
+ hWnd = NULL;
+}
+
+void WinClass::SysDeinit()
+{}
+
+void RegionClass::SysInit()
+{
+ font = NULL;
+}
+
+void RegionClass::SysDeinit()
+{
+ if (font != NULL && !font_copied) DeleteObject(font);
+}
+
+void RegionClass::sys_flush()
+{}
+
+void TextRegionClass::SysInit(int x, int y, int cx, int cy)
+{
+ dos_char = false;
+}
+
+void TextRegionClass::SysDeinit()
+{}
+
+void TileRegionClass::SysInit(int mx0, int my0, int dx0, int dy0)
+{}
+
+void TileRegionClass::SysDeinit()
+{}
+
+void MapRegionClass::SysInit(int x, int y, int o_x, int o_y)
+{}
+
+void MapRegionClass::SysDeinit()
+{}
+
+void RegionClass::init_font(const char *name, int height)
+{
+ int wid, hgt;
+ LOGFONT lf;
+ HFONT ftmp;
+
+ strcpy(lf.lfFaceName, name);
+ lf.lfHeight = height;
+ lf.lfWidth = 0;
+ lf.lfEscapement = 0;
+ lf.lfOrientation = lf.lfEscapement;
+ lf.lfWeight = FW_NORMAL;
+ lf.lfItalic = FALSE;
+ lf.lfUnderline = FALSE;
+ lf.lfStrikeOut = FALSE;
+ lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
+ lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ lf.lfQuality = DEFAULT_QUALITY;
+#ifdef JP
+ lf.lfCharSet = (dos_char) ? OEM_CHARSET:SHIFTJIS_CHARSET;
+ lf.lfPitchAndFamily= FF_DONTCARE|FIXED_PITCH;
+#else
+ lf.lfCharSet = (dos_char) ? OEM_CHARSET:ANSI_CHARSET;
+ lf.lfPitchAndFamily= FF_MODERN|FIXED_PITCH;
+#endif
+ ftmp = CreateFontIndirect( &lf );
+
+ if (!ftmp)
+ {
+ if (font) return;
+ exit(1);
+ }
+ font = ftmp;
+
+ wid = lf.lfWidth;
+ hgt = lf.lfHeight;
+ /* This part is taken from angband */
+ /* Hack -- Unknown size */
+ if (!wid || !hgt)
+ {
+ HDC hdcDesktop;
+ HFONT hfOld;
+ TEXTMETRIC tm;
+
+ /* all this trouble to get the cell size */
+ hdcDesktop = GetDC(HWND_DESKTOP);
+ hfOld = (HFONT)SelectObject(hdcDesktop, font);
+ GetTextMetrics(hdcDesktop, &tm);
+ SelectObject(hdcDesktop, hfOld);
+ ReleaseDC(HWND_DESKTOP, hdcDesktop);
+
+ /* Font size info */
+ wid = tm.tmAveCharWidth;
+ hgt = tm.tmHeight;
+ }
+
+ fx = dx = wid;
+ fy = dy = hgt;
+}
+
+void RegionClass::change_font(const char *name, int height)
+{
+ if (font != NULL) DeleteObject(font);
+ init_font(name, height);
+}
+
+void RegionClass::copy_font(RegionClass *r)
+{
+ fx = r->fx;
+ fy = r->fy;
+ dx = r->dx;
+ dy = r->dy;
+ font = r->font;
+}
+
+void RegionClass::set_std_palette(RGBQUAD *pPal)
+{
+ int i;
+ for(i=0;i<256;i++)
+ {
+ std_palette[i].rgbRed = pPal[i].rgbRed ;
+ std_palette[i].rgbGreen = pPal[i].rgbGreen;
+ std_palette[i].rgbBlue = pPal[i].rgbBlue ;
+
+ if ( (pPal[i].rgbRed == 0)
+ &&(pPal[i].rgbGreen == 0)
+ &&(pPal[i].rgbBlue == 0) )
+ pix_black = i;
+
+ //(255, 255, 255)̔ԍi[
+ if ( (pPal[i].rgbRed == 255)
+ &&(pPal[i].rgbGreen == 255)
+ &&(pPal[i].rgbBlue == 255) )
+ pix_white = i;
+
+ //}[^(255, 0, 255)̔ԍi[
+ if ( (pPal[i].rgbRed == 255)
+ &&(pPal[i].rgbGreen == 0 )
+ &&(pPal[i].rgbBlue == 255) )
+ pix_magenta = i;
+
+ //̐F(1, 1, 1)̔ԍi[
+ if ( (pPal[i].rgbRed == 1)
+ &&(pPal[i].rgbGreen == 1)
+ &&(pPal[i].rgbBlue == 1) )
+ pix_rimcolor = i;
+ }
+
+ std_palette[pix_transparent].rgbRed = 0;
+ std_palette[pix_transparent].rgbGreen = 0;
+ std_palette[pix_transparent].rgbBlue = 0;
+}
+
+void RegionClass::init_backbuf(RGBQUAD *pPal, int ncolor)
+{
+ int i;
+
+ // first time
+ if (backbuf == NULL)
+ {
+ // alloc for misc info
+ backbuf = (dib_pack *)GlobalAlloc(GPTR, sizeof(dib_pack));
+
+ // alloc for header+palette data
+ backbuf->pDib = (LPBITMAPINFO)GlobalAlloc(GPTR,
+ (sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)) );
+
+ // set header data
+ backbuf->pDib->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ backbuf->pDib->bmiHeader.biPlanes = 1;
+ backbuf->pDib->bmiHeader.biBitCount = 8;
+ backbuf->pDib->bmiHeader.biCompression=BI_RGB;
+ backbuf->pDib->bmiHeader.biSizeImage=0;
+ backbuf->pDib->bmiHeader.biXPelsPerMeter=0;
+ backbuf->pDib->bmiHeader.biYPelsPerMeter=0;
+ backbuf->pDib->bmiHeader.biClrUsed=0;
+ backbuf->pDib->bmiHeader.biClrImportant=0;
+
+ // set palette data
+ for (i = 0; i < ncolor; i++)
+ {
+ // copy palette from given palette pPal
+ backbuf->pDib->bmiColors[i].rgbRed = pPal[i].rgbRed ;
+ backbuf->pDib->bmiColors[i].rgbGreen = pPal[i].rgbGreen;
+ backbuf->pDib->bmiColors[i].rgbBlue = pPal[i].rgbBlue ;
+ }
+ }
+ // set dimension
+ backbuf->pDib->bmiHeader.biWidth = mx*dx;
+ backbuf->pDib->bmiHeader.biHeight = my*dy;
+ backbuf->Width = mx * dx;
+ backbuf->Height= my * dy;
+
+ if (win != NULL)
+ {
+ // this routine should be called after the window is initialized
+ if (win->hWnd != NULL)
+ {
+ HDC hdc1 = GetDC(0);
+ HDC hdc2 = GetDC(win->hWnd);
+ // alloc a region of the window
+ backbuf->hDib = CreateDIBSection(hdc1, backbuf->pDib,
+ DIB_RGB_COLORS, (VOID **)&(backbuf->pDibBits), NULL, 0);
+ backbuf->hDC = CreateCompatibleDC(hdc2);
+ SelectObject(backbuf->hDC, backbuf->hDib);
+ ReleaseDC(win->hWnd, hdc2);
+ ReleaseDC(0, hdc1);
+ }
+ }
+ backbuf->pDibZero = (backbuf->pDibBits)
+ + (backbuf->Height -1) * backbuf->Width;
+}
+
+void RegionClass::resize_backbuf()
+{
+ int i;
+
+ // discard it for resize
+ if (backbuf->hDC != NULL) DeleteDC(backbuf->hDC);
+ if (backbuf->hDib != NULL) DeleteObject(backbuf->hDib);
+
+ // set dimension
+ backbuf->pDib->bmiHeader.biWidth = mx*dx;
+ backbuf->pDib->bmiHeader.biHeight = my*dy;
+ backbuf->Width = mx * dx;
+ backbuf->Height= my * dy;
+
+ HDC hdc1 = GetDC(0);
+ HDC hdc2 = GetDC(win->hWnd);
+ // alloc a region of the window
+ backbuf->hDib = CreateDIBSection(hdc1, backbuf->pDib,
+ DIB_RGB_COLORS, (VOID **)&(backbuf->pDibBits), NULL, 0);
+ backbuf->hDC = CreateCompatibleDC(hdc2);
+ SelectObject(backbuf->hDC, backbuf->hDib);
+ ReleaseDC(win->hWnd, hdc2);
+ ReleaseDC(0, hdc1);
+
+ backbuf->pDibZero = (backbuf->pDibBits)
+ + (backbuf->Height -1) * backbuf->Width;
+
+ for (i = 0; i< mx*dx*my*dy; i++)
+ *(backbuf->pDibBits + i) = pix_black;
+}
+
+void MapRegionClass::resize_backbuf()
+{
+ RegionClass::resize_backbuf();
+}
+
+void TileRegionClass::resize_backbuf()
+{
+ RegionClass::resize_backbuf();
+}
+
+void TextRegionClass::init_backbuf()
+{
+ /* not use */
+}
+
+void TileRegionClass::init_backbuf(RGBQUAD *pPal)
+{
+ int i;
+ if (!pPal)
+ RegionClass::init_backbuf(std_palette, 256);
+ else
+ RegionClass::init_backbuf(pPal, 256);
+
+ for (i = 0; i< mx*dx*my*dy; i++)
+ *(backbuf->pDibBits + i) = pix_black;
+
+}
+
+void MapRegionClass::init_backbuf()
+{
+//~j}bvppbg̍쐬
+ BYTE black = 0;
+ RGBQUAD scol[MAX_MAP_COL];
+ int i;
+
+ for (i=0; i< MAX_MAP_COL;i++)
+ {
+ scol[i].rgbBlue = map_colors[i][2];
+ scol[i].rgbGreen = map_colors[i][1];
+ scol[i].rgbRed = map_colors[i][0];
+ scol[i].rgbReserved = 0;
+ }
+
+ // just resize
+ if (backbuf != NULL)
+ RegionClass::init_backbuf(NULL, 0);
+ else
+ RegionClass::init_backbuf(scol, MAX_MAP_COL);
+
+ for (i = 0; i < MAX_MAP_COL; i++)
+ {
+ //(0, 0, 0)̔ԍi[
+ if ( (backbuf->pDib->bmiColors[i].rgbRed == 0)
+ &&(backbuf->pDib->bmiColors[i].rgbGreen == 0)
+ &&(backbuf->pDib->bmiColors[i].rgbBlue == 0) )
+ black = i;
+ }
+
+ for (i = 0; i< mx*dx*my*dy; i++)
+ *(backbuf->pDibBits + i) = black; //Ŗ߂B
+}
+
+// defined to object, not to class
+void TextRegionClass::draw_string(int x, int y, unsigned char *buf,
+ int len, int col)
+{
+ HDC hdc = GetDC(win->hWnd);
+ RECT rc;
+ rc.left = ox + x * dx;
+ rc.right = rc.left + len * dx;
+ rc.top = oy + y * dy;
+ rc.bottom = rc.top + dy;
+ SelectObject(hdc, font);
+ SetBkColor(hdc, term_pix[col>>4]);
+ SetTextColor(hdc, term_pix[col&0x0f]);
+ ExtTextOut(hdc, rc.left, rc.top, ETO_CLIPPED, &rc,
+ (char *)buf, len, NULL);
+ ReleaseDC(win->hWnd, hdc);
+}
+
+void TextRegionClass::draw_cursor(int x, int y)
+{
+ RECT rc;
+ HDC hdc;
+
+ int cx = x - cx_ofs;
+ int cy = y - cy_ofs;
+
+ if(!flag)return;
+
+ hdc =GetDC(win->hWnd);
+ SelectObject(hdc, font);
+
+ rc.left = ox + cx * dx ;
+ rc.right = rc.left + (2 * dx);
+ rc.top = oy + cy * dy;
+ rc.bottom = rc.top + dy;
+
+ SetBkMode(hdc, TRANSPARENT);
+ SetTextColor(hdc, term_pix[0x0f]);
+ ExtTextOut(hdc, rc.left, rc.top, ETO_CLIPPED, &rc,
+ "_ ", 2, NULL);
+ ReleaseDC(win->hWnd, hdc);
+}
+
+void TextRegionClass::erase_cursor(){
+
+ int x0 = cursor_x;
+ int y0 = cursor_y;
+ int adrs = y0 * mx + x0;
+ int col = abuf[adrs];
+
+ if(!flag)return;
+
+ RECT rc;
+ HDC hdc =GetDC(win->hWnd);
+ SelectObject(hdc, font);
+
+ //restore previous cursor cell
+ rc.left = ox + x0 * dx;
+ rc.right= rc.left + (2 * dx);
+ rc.top = oy + y0 * dy;
+ rc.bottom = rc.top + dy;
+ unsigned char rchar[3];
+
+ SetBkColor(hdc, term_pix[col>>4]);
+ SetTextColor(hdc, term_pix[col&0x0f]);
+ rchar[0] = cbuf[adrs];
+#ifdef JP
+ if ( (rchar[0]&0x80) && !dos_char /*_ismbblead( rchar[0])*/ )
+ {
+ rchar[1] = cbuf[adrs+1];
+ rchar[2] = '\0';
+ ExtTextOut(hdc, rc.left, rc.top, ETO_CLIPPED, &rc,
+ (char *)&rchar, 2, NULL);
+ }
+ else
+#endif
+ {
+ rchar[1] = '\0';
+ ExtTextOut(hdc, rc.left, rc.top, ETO_CLIPPED, &rc,
+ (char *)&rchar, 1, NULL);
+ }
+ ReleaseDC(win->hWnd, hdc);
+}
+
+
+void WinClass::clear()
+{
+ fillrect(0, 0, wx-1, wy-1, PIX_BLACK);
+}
+
+void RegionClass::clear()
+{
+ fillrect(0, 0, wx-1, wy-1, PIX_BLACK);
+}
+
+void TileRegionClass::clear()
+{
+ RegionClass::clear();
+}
+
+void MapRegionClass::clear()
+{
+ int i;
+
+ for (i=0; i<mx2*my2; i++)
+ {
+ mbuf[i]=PIX_BLACK;
+ }
+ RegionClass::clear();
+}
+
+void TextRegionClass::clear()
+{
+ int i;
+
+ for (i=0; i<mx*my; i++)
+ {
+ cbuf[i]=' ';
+ abuf[i]=0;
+ }
+ RegionClass::clear();
+}
+
+BOOL WinClass::create(const char *name)
+{
+
+ RECT rc;
+ rc.left = 0;
+ rc.right = wx;
+ rc.top = 0;
+ rc.bottom = wy;
+
+ //game_state = STAT_NORMAL;
+
+ if ( GetSystemMetrics(SM_CYSCREEN) < (oy + wy) ) oy =0;
+ if ( GetSystemMetrics(SM_CXSCREEN) < (ox + wx) ) ox =0;
+
+ AdjustWindowRectEx(&rc,
+ (WS_OVERLAPPED | WS_SYSMENU |
+ WS_MINIMIZEBOX | WS_CAPTION |
+ WS_VISIBLE),
+ false, 0);
+
+ if (hWnd == NULL)
+ {
+ hWnd = CreateWindowEx(0, "CrawlList",name,
+ (WS_OVERLAPPED | WS_SYSMENU |
+ WS_MINIMIZEBOX | WS_CAPTION |
+ WS_VISIBLE),
+ ox, oy, //pos
+ rc.right - rc.left, rc.bottom - rc.top, //size
+ HWND_DESKTOP, NULL, hInst, NULL);
+ ShowWindow( hWnd, nCmdShow );
+ }
+ if( !hWnd )
+ {
+ return FALSE;
+ }
+
+ clear();
+
+#if 0
+ // Init pending backbuf of regions
+ std::vector<RegionClass *>::iterator r;
+
+ for (r = regions.begin();r != regions.end();r++)
+ {
+ if ( (*r)->backbuf != NULL)
+ {
+ img_type b = (*r)->backbuf;
+ HDC hdc1 = GetDC(0);
+ HDC hdc2 = GetDC(hWnd);
+ b->hDib = CreateDIBSection(hdc1, b->pDib, DIB_RGB_COLORS,
+ (VOID **)&(b->pDibBits), NULL, 0);
+ b->hDC = CreateCompatibleDC(hdc2);
+ SelectObject(b->hDC, b->hDib);
+ ReleaseDC(hWnd, hdc2);
+ ReleaseDC(0, hdc1);
+ }
+ }
+#endif
+ return TRUE;
+}
+
+void WinClass::move()
+{
+ SetWindowPos(hWnd, 0, ox, oy, wx, wy, SWP_NOSIZE);
+ UpdateWindow( hWnd );
+}
+
+void WinClass::resize()
+{
+ RECT rc;
+ rc.left = 0;
+ rc.right = wx;
+ rc.top = 0;
+ rc.bottom = wy;
+
+ AdjustWindowRectEx(&rc,
+ (WS_OVERLAPPED | WS_SYSMENU |
+ WS_MINIMIZEBOX | WS_CAPTION |
+ WS_VISIBLE),
+ false, 0);
+
+ SetWindowPos(hWnd, 0, ox, oy,
+ rc.right - rc.left,
+ rc.bottom - rc.top,
+ SWP_NOMOVE);
+ UpdateWindow( hWnd );
+}
+
+
+void TileRegionClass::redraw(int x1, int y1, int x2, int y2)
+{
+ if (!flag) return;
+ if (!is_active()) return;
+
+ HDC hdc = GetDC(win->hWnd);
+ BitBlt(hdc, ox, oy, mx*dx, my*dy,
+ backbuf->hDC, 0, 0, SRCCOPY);
+ ReleaseDC(win->hWnd, hdc);
+}
+
+void MapRegionClass::redraw(int x1, int y1, int x2, int y2)
+{
+ if (!flag) return;
+ if (!is_active()) return;
+ HDC hdc =GetDC(win->hWnd);
+ BitBlt(hdc, ox, oy, dx*mx, dy*my,
+ backbuf->hDC, 0, 0, SRCCOPY);
+ ReleaseDC(win->hWnd, hdc);
+}
+
+void MapRegionClass::draw_data(unsigned char *buf){
+ int i, j, x, y, col;
+ int dx2, dy2;
+ static int px = 0;
+ static int py = 0;
+
+ if(!flag)return;
+
+ LPBYTE ppix ,dpix;
+ // OA x, y [vł̃AhX
+ int inc_x, inc_y, inc_x0, inc_y0;
+ int bufx = mx * dx;
+ int bufy = my * dy;
+
+ bufx = (bufx+3)/4;
+ bufx *=4;
+#define BUF_IDX(x,y, x1, y1) ((x)*dx-(y)*dy*bufx + (x1) - (y1)*bufx)
+#define BUF_IDX_ISO(x,y, x1, y1) ((x-y+my2-1)*dx-(x+y)*dy*bufx + (x1)-(y1)*bufx)
+ // upper left corner
+ LPBYTE pDibBit0 = backbuf->pDibBits + bufx*(bufy-1);
+
+ dx2 = dx;
+ dy2 = dy;
+ ppix = pDibBit0;
+
+ inc_x = dx;
+ inc_x0 = 1;
+
+ // dy mmapDibX
+ inc_y = - mx2 * inc_x + BUF_IDX(0, 1, 0, 0);
+ // 1 dx
+ inc_y0 = - dx2 * inc_x0 + BUF_IDX(0, 0, 0, 1);
+
+ // Draw gauge
+ // erase old
+ for (j = 0; j < dy*2; j++)
+ {
+ *(pDibBit0 + BUF_IDX(px, 0, dx/2, j)) = MAP_BLACK;
+ }
+ for (j = 0; j < dx*2; j++)
+ {
+ *(pDibBit0 + BUF_IDX(0, py, j, dy/2)) = MAP_BLACK;
+ }
+
+ dpix = ppix;
+ for (j = 0; j < my2; j++)
+ {
+ for (i = 0; i < mx2; i++)
+ {
+ col=buf[(i+x_margin) + (j+y_margin)*(mx2 + x_margin*2)];
+ if (col == MAP_WHITE)
+ {
+ px = i;
+ py = j;
+ }
+ if ( (col != get_col(i,j)) || force_redraw)
+ {
+ dpix = ppix;
+ for (y=0; y<dy2; y++)
+ {
+ for (x=0; x<dx2; x++)
+ {
+ *dpix = col;
+ dpix += inc_x0;
+ }
+ dpix += inc_y0;
+ }
+ set_col(col, i,j);
+ }
+ ppix += inc_x;
+ }
+ ppix += inc_y;
+ }
+
+ // draw gauge
+ for (j = 0; j < dy*2; j++)
+ {
+ *(pDibBit0 + BUF_IDX(px, 0, dx/2, j)) = MAP_WHITE;
+ }
+ for (j = 0; j < dx*2; j++)
+ {
+ *(pDibBit0 + BUF_IDX(0, py, j, dy/2)) = MAP_WHITE;
+ }
+
+ redraw();
+ force_redraw = false;
+}
+
+/* XXXXX
+ * img_type related
+ */
+
+LPBYTE dib_ref_pixel(dib_pack* dib, int x, int y)
+{
+ int w = ((3 + dib->Width)/4)*4;
+ LPBYTE ref = dib->pDibBits + x + (dib->Height -1 -y) * w;
+ return ref;
+}
+
+bool ImgIsTransparentAt(img_type img, int x, int y)
+{
+ if (pix_transparent == *( dib_ref_pixel(img, x, y) )) return true;
+ return false;
+}
+void ImgSetTransparentPix(img_type img)
+{
+ pix_transparent = (BYTE)*(img->pDibZero);
+}
+
+img_type ImgCreateSimple(int wx, int wy)
+{
+ if (wx ==0 || wy == 0) return NULL;
+ dib_pack *ptr = (dib_pack *)GlobalAlloc(GPTR, sizeof(dib_pack));
+
+ ptr->pDibBits = (LPBYTE)GlobalAlloc(GPTR, wx*wy );
+ ptr->pDibZero = ptr->pDibBits + (wy -1)* wx;
+ ptr->Width = wx;
+ ptr->Height = wy;
+
+ ptr->pDib = NULL;
+ ptr->hDib = NULL;
+ ptr->hDC = NULL;
+
+ return ptr;
+}
+
+void ImgDestroy(img_type img)
+{
+ if (!img) return;
+
+ //if (img->pDibBits) GlobalFree(img->pDibBits);
+ if (img->pDib) GlobalFree(img->pDib);
+ if (img->hDC) DeleteDC (img->hDC);
+ if (img->hDib) DeleteObject(img->hDib);
+
+ GlobalFree(img);
+}
+
+img_type ImgLoadFile(const char *name)
+{
+ HANDLE fh;
+ DWORD dummy;
+ BITMAPFILEHEADER bmHead;
+ int BitsSize;
+ HDC hdc1;
+ dib_pack *img;
+
+ hdc1 = GetDC(0);
+
+ fh=CreateFile(name, GENERIC_READ,0,NULL,OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,NULL);
+ if (fh == INVALID_HANDLE_VALUE) return NULL;
+
+ SetFilePointer(fh,0,NULL,FILE_BEGIN);
+
+ if (!ReadFile(fh,&bmHead, sizeof(BITMAPFILEHEADER), &dummy, NULL))
+ return NULL;
+
+ img = (dib_pack *) GlobalAlloc(GPTR, sizeof(dib_pack));
+ if (!img) return NULL;
+
+ img->pDib = (LPBITMAPINFO)GlobalAlloc(GPTR,
+ (sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)) );
+ if (img->pDib == NULL)
+ {
+ GlobalFree(img);
+ return NULL;
+ }
+
+ SetFilePointer(fh, sizeof(BITMAPFILEHEADER), NULL, FILE_BEGIN);
+ if (!ReadFile(fh,img->pDib, sizeof(BITMAPINFOHEADER)+ 256 * sizeof(RGBQUAD),
+ &dummy, NULL))
+ {
+ GlobalFree(img->pDib);
+ GlobalFree(img);
+ return NULL;
+ }
+
+ //DIB쐬
+ img->hDib = CreateDIBSection(hdc1, img->pDib, DIB_RGB_COLORS,
+ (VOID **)&(img->pDibBits), NULL,0);
+ if (img->hDib == NULL)
+ {
+ GlobalFree(img->pDib);
+ GlobalFree(img);
+ return NULL;
+ }
+
+
+ //摜̃rbg̃TCY
+ BitsSize = bmHead.bfSize-bmHead.bfOffBits;
+ //rbgz|Cg
+ SetFilePointer(fh, bmHead.bfOffBits, NULL, FILE_BEGIN);
+
+ //ǂݍ
+ if (!ReadFile(fh, img->pDibBits, BitsSize, &dummy, NULL))
+ {
+ GlobalFree(img->hDib);
+ GlobalFree(img->pDib);
+ GlobalFree(img);
+ return NULL;
+ }
+
+ CloseHandle(fh); //t@C‚
+
+ //QƗp̍\̂Ɋi[
+ img->Width = img->pDib->bmiHeader.biWidth ;
+ img->Height = img->pDib->bmiHeader.biHeight;
+ img->pDibZero = img->pDibBits + (img->Height - 1) * img->Width;
+
+ ReleaseDC(0, hdc1);
+ return img;
+}
+
+void ImgClear(img_type img)
+{
+ int i;
+ for (i = 0; i< (img->Width * img->Height); i++)
+ *(img->pDibBits + i) = pix_transparent;
+}
+
+// Copy internal image to another internal image
+void ImgCopy(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, int copy)
+{
+ int x, y;
+ BYTE pix;
+
+ if(copy)
+ {
+ for(x=0;x<wx;x++){
+ for(y=0;y<wy;y++){
+ pix = *( dib_ref_pixel(src, sx+x, sy+y) );
+ *( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
+ }}
+ }
+ else
+ {
+ for(x=0;x<wx;x++){
+ for(y=0;y<wy;y++){
+ pix = *( dib_ref_pixel(src, sx+x, sy+y) );
+ if(pix!=pix_transparent)
+ *( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
+ }}
+ }
+}
+
+// Copy internal image to another internal image
+void ImgCopyH(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, int copy)
+{
+ int x, y;
+ BYTE pix;
+
+ if(copy)
+ {
+ for(x=0;x<wx;x++){
+ for(y=0;y<wy;y++){
+ pix = *( dib_ref_pixel(src, sx+x, sy+y) );
+ if (pix == pix_rimcolor) pix = pix_magenta;
+ *( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
+ }}
+ }
+ else
+ {
+ for(x=0;x<wx;x++){
+ for(y=0;y<wy;y++){
+ pix = *( dib_ref_pixel(src, sx+x, sy+y) );
+ if (pix == pix_rimcolor) pix = pix_magenta;
+ if(pix!=pix_transparent) *( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
+ }}
+ }
+}
+
+
+// Copy internal image to another internal image
+void ImgCopyMasked(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, char *mask)
+{
+ int x, y;
+ BYTE pix;
+ int count = 0;
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ pix = *( dib_ref_pixel(src, sx+x, sy+y) );
+ if (mask[count]==0 && pix != pix_transparent)
+ *( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
+ count++;
+ }}
+}
+
+// Copy internal image to another internal image
+void ImgCopyMaskedH(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, char *mask)
+{
+ int x, y;
+ BYTE pix;
+ int count = 0;
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ pix = *( dib_ref_pixel(src, sx+x, sy+y) );
+ if (pix == pix_rimcolor) pix = pix_magenta;
+ if (mask[count]==0 && pix != pix_transparent)
+ *( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
+ count++;
+ }}
+}
+
+void WinClass::fillrect(int left, int top, int right, int bottom, int color)
+{
+ HDC hdc = GetDC(hWnd);
+
+ HBRUSH curbrush;
+ HDC curbrushhdc = NULL;
+ RECT currect;
+ curbrush = CreateSolidBrush(term_pix[color]);
+ currect.left = left;
+ currect.right = right;
+ currect.top = top;
+ currect.bottom= bottom;
+ SelectObject(curbrushhdc, curbrush);
+ FillRect(hdc, &currect, curbrush);
+ DeleteObject(curbrush);
+ DeleteDC(curbrushhdc);
+
+ ReleaseDC(hWnd, hdc);
+}
+
+
+void TileRegionClass::DrawPanel(int left, int top, int width, int height)
+{
+ framerect(left, top , left + width, top + height, PIX_WHITE);
+ framerect(left + 1, top + 1, left + width, top + height, PIX_DARKGREY);
+ fillrect (left + 1, top + 1, left + width - 1, top + height -1, PIX_LIGHTGREY);
+}
+
+void RegionClass::framerect(int left, int top, int right, int bottom, int color)
+{
+ HDC hdc = GetDC(win->hWnd);
+
+ HBRUSH curbrush;
+ HDC curbrushhdc = NULL;
+ RECT currect;
+ curbrush = CreateSolidBrush(term_pix[color]);
+ currect.left = sx+left;
+ currect.right = sx+right;
+ currect.top = sy+top;
+ currect.bottom= sy+bottom;
+ SelectObject(curbrushhdc, curbrush);
+ FrameRect(hdc, &currect, curbrush);
+ DeleteObject(curbrush);
+ DeleteDC(curbrushhdc);
+
+ ReleaseDC(win->hWnd, hdc);
+}
+
+void TileRegionClass::framerect(int left, int top, int right, int bottom,
+ int color)
+{
+ HDC dhdc = backbuf->hDC;
+ HBRUSH curbrush;
+ HDC curbrushhdc = NULL;
+ RECT currect;
+ curbrush = CreateSolidBrush(term_pix[color]);
+ currect.left = left;
+ currect.right = right;
+ currect.top = top;
+ currect.bottom= bottom;
+ SelectObject(curbrushhdc, curbrush);
+ FrameRect(dhdc, &currect, curbrush);
+ DeleteObject(curbrush);
+ DeleteDC(curbrushhdc);
+}
+
+void RegionClass::fillrect(int left, int top, int right, int bottom, int color)
+{
+ HDC hdc = GetDC(win->hWnd);
+
+ HBRUSH curbrush;
+ HDC curbrushhdc = NULL;
+ RECT currect;
+ curbrush = CreateSolidBrush(term_pix[color]);
+ currect.left = sx+left;
+ currect.right = sx+right;
+ currect.top = sy+top;
+ currect.bottom= sy+bottom;
+ SelectObject(curbrushhdc, curbrush);
+ FillRect(hdc, &currect, curbrush);
+ DeleteObject(curbrush);
+ DeleteDC(curbrushhdc);
+
+ ReleaseDC(win->hWnd, hdc);
+}
+
+void TileRegionClass::fillrect(int left, int top, int right, int bottom,
+ int color)
+{
+ HDC dhdc = backbuf->hDC;
+ HBRUSH curbrush;
+ HDC curbrushhdc = NULL;
+ RECT currect;
+ curbrush = CreateSolidBrush(term_pix[color]);
+ currect.left = left;
+ currect.right = right;
+ currect.top = top;
+ currect.bottom= bottom;
+ SelectObject(curbrushhdc, curbrush);
+ FillRect(dhdc, &currect, curbrush);
+ DeleteObject(curbrush);
+ DeleteDC(curbrushhdc);
+}
+
diff --git a/crawl-ref/source/guic-x11.cc b/crawl-ref/source/guic-x11.cc
new file mode 100644
index 0000000000..cbf2f045ab
--- /dev/null
+++ b/crawl-ref/source/guic-x11.cc
@@ -0,0 +1,1052 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/X.h>
+#include <X11/Xutil.h>
+#include <X11/Xlocale.h>
+#include <X11/keysym.h>
+#include <X11/keysymdef.h>
+#include <X11/Xmd.h>
+
+#if DEBUG
+#define ASSERT(p) {if (!(p)) printf( __FILE__, __LINE__);}
+#else
+#define ASSERT(p) ((void) 0)
+#endif
+
+#include "guic.h"
+
+static Display *display;
+static int screen;
+static GC term_gc[MAX_TERM_COL];
+static GC map_gc[MAX_MAP_COL];
+static unsigned long term_pix[MAX_TERM_COL];
+static unsigned long map_pix[MAX_MAP_COL];
+static unsigned long pix_transparent;
+static unsigned long pix_hilite;
+static unsigned long pix_black;
+static unsigned long pix_rimcolor;
+static int x11_byte_per_pixel_ximage();
+static unsigned long create_pixel(unsigned int red, unsigned int green,
+ unsigned int blue);
+static XImage *read_png(const char *fname);
+
+/*******************************************************/
+void WinClass::SysInit()
+{
+ win = (Window)NULL;
+}
+
+void WinClass::SysDeinit()
+{}
+
+void RegionClass::SysInit()
+{
+ font = NULL;
+}
+
+void RegionClass::SysDeinit()
+{
+ if (font != NULL && !font_copied) XFreeFont(display, font);
+}
+
+void TextRegionClass::SysInit(int x, int y, int cx, int cy)
+{}
+
+void TextRegionClass::SysDeinit()
+{}
+
+void TileRegionClass::SysInit(int mx0, int my0, int dx0, int dy0)
+{}
+
+void TileRegionClass::SysDeinit()
+{}
+
+void MapRegionClass::SysInit(int x, int y, int o_x, int o_y)
+{}
+
+void MapRegionClass::SysDeinit()
+{}
+
+void RegionClass::init_font(const char *name){
+ /*** Large part of this routine was copied from Hengband ***/
+ int ascent, descent, width;
+
+ font = XLoadQueryFont(display, name);
+ if (!font)
+ {
+ fprintf(stderr,"Error! Can't load font %s\n",name);
+ exit(1);
+ }
+ width = font->max_bounds.width;
+ ascent = font->ascent;
+ descent = font->descent;
+
+ int i;
+ for (i=0;i<MAX_TERM_COL;i++)
+ XSetFont(display, term_gc[i], font->fid);
+
+ fx = dx = width;
+ fy = dy = ascent + descent;
+ asc = ascent;
+ font_copied = false;
+}
+
+void RegionClass::copy_font(RegionClass *r)
+{
+ fx = r->fx;
+ fy = r->fy;
+ dx = r->dx;
+ dy = r->dy;
+ asc = r->asc;
+ font = r->font;
+ font_copied = true;
+}
+
+void RegionClass::sys_flush()
+{
+ XFlush(display);
+}
+
+void RegionClass::init_backbuf()
+{
+}
+
+void TextRegionClass::init_backbuf()
+{
+}
+
+void TileRegionClass::init_backbuf()
+{
+ int x, y;
+
+ backbuf = ImgCreateSimple(mx*dx, my*dy);
+ for (x = 0; x < mx*dx; x++)
+ for (y = 0; y < my*dy; y++)
+ XPutPixel(backbuf, x, y, pix_black);
+}
+
+void TileRegionClass::resize_backbuf()
+{
+ if (backbuf != NULL) ImgDestroy(backbuf);
+ init_backbuf();
+}
+
+void RegionClass::resize_backbuf()
+{
+ if (backbuf != NULL) ImgDestroy(backbuf);
+ init_backbuf();
+}
+
+void MapRegionClass::init_backbuf()
+{
+ int x, y;
+ backbuf = ImgCreateSimple(mx*dx, my*dy);
+ for (x = 0; x < mx*dx; x++)
+ for (y = 0; y < my*dy; y++)
+ XPutPixel(backbuf, x, y, pix_black);
+}
+
+void MapRegionClass::resize_backbuf()
+{
+ if (backbuf != NULL)
+ ImgDestroy(backbuf);
+ init_backbuf();
+}
+
+void TextRegionClass::draw_string(int x, int y, unsigned char *buf,
+ int len, int col)
+{
+ XFillRectangle(display, win->win, term_gc[col>>4],
+ x*dx+ox, y*dy+oy, dx * len, dy);
+ XDrawString(display, win->win, term_gc[col&0x0f], x*dx+ox, y*dy+asc+oy,
+ (char *)&cbuf[y*mx+x], len);
+}
+
+void TextRegionClass::draw_cursor(int x, int y)
+{
+ if(!flag)return;
+
+ XDrawString(display, win->win, term_gc[0x0f], x*dx+ox, y*dy+asc+oy,
+ "_", 1);
+ sys_flush();
+}
+
+void TextRegionClass::erase_cursor()
+{
+ WinClass *w = win;
+
+ int x0 = cursor_x;
+ int y0 = cursor_y;
+ int width = 1;
+ int adrs = y0 * mx + x0;
+ int col = abuf[adrs];
+ int x1 = x0;;
+ if(!flag)return;
+
+ XFillRectangle(display, w->win, term_gc[col>>4],
+ x1*dx + ox, y0*dy +oy, dx*width, dy);
+
+ XDrawString(display, w->win,
+ term_gc[col&0x0f], x0*dx+ ox, y0*dy+asc+ oy,
+ (char *)&cbuf[adrs], width );
+}
+
+
+void WinClass::clear()
+{
+ fillrect(0, 0, wx, wy, PIX_BLACK);
+ XFlush(display);
+}
+
+void RegionClass::clear()
+{
+ fillrect(0, 0, wx, wy, PIX_BLACK);
+ XFlush(display);
+}
+
+void TileRegionClass::clear()
+{
+ RegionClass::clear();
+}
+
+void MapRegionClass::clear()
+{
+ int i;
+
+ for (i=0; i<mx2*my2; i++)
+ {
+ mbuf[i]=PIX_BLACK;
+ }
+
+ RegionClass::clear();
+}
+
+void TextRegionClass::clear()
+{
+ int i;
+
+ for (i=0; i<mx*my; i++)
+ {
+ cbuf[i]=' ';
+ abuf[i]=0;
+ }
+
+ RegionClass::clear();
+}
+
+void WinClass::create(char *name)
+{
+
+ if (!win)
+ {
+ win = XCreateSimpleWindow(display, RootWindow(display,screen),
+ 10,10, wx, wy, 0,
+ BlackPixel(display,screen), BlackPixel(display,screen));
+
+ XMapWindow(display, win);
+ XSelectInput(display, win, ExposureMask | KeyPressMask
+ | ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
+ LeaveWindowMask | EnterWindowMask | StructureNotifyMask );
+ move(ox, oy);
+ }
+ else
+ resize(0,0);
+
+ clear();
+}
+
+void WinClass::move()
+{
+ XMoveWindow(display, win, ox, oy);
+}
+
+void WinClass::resize()
+{
+ XResizeWindow(display, win, wx, wy);
+}
+
+void TileRegionClass::redraw(int x1, int y1, int x2, int y2)
+{
+ int wwx = x2-x1+1;
+ int wwy = y2-y1+1;
+
+ if (x1<0)
+ {
+ wwx += x1;
+ x1 = 0;
+ }
+
+ if (y1<0)
+ {
+ wwy += y1;
+ y1 = 0;
+ }
+
+ if (x2 >= mx*dx)
+ {
+ wwx -= x2-mx*dx+1;
+ }
+
+ if (y2 >= my*dy)
+ {
+ wwy -= y2-my*dy+1;
+ }
+
+ XPutImage(display, win->win, term_gc[0],
+ backbuf, x1, y1, x1+ox, y1+oy, wwx, wwy);
+}
+
+void MapRegionClass::redraw(int x1, int y1, int x2, int y2)
+{
+ if (!flag)
+ return;
+
+ XPutImage(display, win->win, term_gc[0],
+ backbuf, x1*dx, y1*dy,
+ x1*dx+ox, y1*dy+oy,
+ (x2-x1+1)*dx, (y2-y1+1)*dy);
+}
+
+void MapRegionClass::draw_data(unsigned char *buf){
+ int x, y, xx, yy;
+ static int px = 0;
+ static int py = 0;
+
+ if (!flag)
+ return;
+
+ for(yy=0;yy<dy*2;yy++)
+ {
+ XPutPixel(backbuf, px*dx+dx/2, yy, map_pix[MAP_BLACK]);
+ }
+ for(xx=0;xx<dx*2;xx++)
+ {
+ XPutPixel(backbuf, xx, py*dy+dy/2, map_pix[MAP_BLACK]);
+ }
+
+ for (y = 0; y < my; y++)
+ {
+ unsigned char *ptr =
+ &buf[x_margin + (y_margin + y)*(mx2 + x_margin*2)];
+ for (x = 0; x < mx; x++)
+ {
+ int col = ptr[x];
+ // Hack :remember player position
+ if (col == MAP_WHITE)
+ {
+ px = x;
+ py = y;
+ }
+ if(col != get_col(x, y) || force_redraw)
+ {
+ for(xx=0; xx<dx; xx++)
+ for(yy=0; yy<dy; yy++)
+ XPutPixel(backbuf, x*dx+xx, y*dy+yy, map_pix[col]);
+
+ set_col(col, x, y);
+ }
+ }
+ }
+ for(yy=0;yy<dy*2;yy++)
+ {
+ XPutPixel(backbuf, px*dx+dx/2, yy, map_pix[MAP_WHITE]);
+ }
+ for(xx=0;xx<dx*2;xx++)
+ {
+ XPutPixel(backbuf, xx, py*dy+dy/2, map_pix[MAP_WHITE]);
+ }
+
+ redraw();
+ XFlush(display);
+ force_redraw = false;
+}
+
+/* XXXXX
+ * img_type related
+ */
+
+bool ImgIsTransparentAt(img_type img, int x, int y)
+{
+ ASSERT(x>=0);
+ ASSERT(y>=0);
+ ASSERT(x<(img->width));
+ ASSERT(y<(img->height));
+
+ return (pix_transparent == XGetPixel(img, x, y)) ? true:false;
+}
+
+void ImgSetTransparentPix(img_type img)
+{
+ pix_transparent = XGetPixel(img, 0, 0);
+}
+
+void ImgDestroy(img_type img)
+{
+ XDestroyImage(img);
+}
+
+img_type ImgCreateSimple(int wx, int wy)
+{
+ if (wx ==0 || wy == 0) return NULL;
+ char *buf = (char *)malloc(x11_byte_per_pixel_ximage()* wx * wy);
+
+ img_type res= XCreateImage(display, DefaultVisual(display, screen),
+ DefaultDepth(display, screen),
+ ZPixmap, 0, buf, wx, wy, 8, 0);
+ return(res);
+}
+
+img_type ImgLoadFile(const char *name)
+{
+ return read_png(name);
+}
+
+void ImgClear(img_type img)
+{
+ int x,y;
+ ASSERT(img != NULL);
+ for(y=0;y<img->height;y++)
+ for(x=0;x<img->width;x++)
+ XPutPixel(img, x, y, pix_transparent);
+}
+
+// Copy internal image to another internal image
+void ImgCopy(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, int copy)
+{
+ int x, y;
+ int bpp = src->bytes_per_line / src->width;
+ int bpl_s = src->bytes_per_line;
+ int bpl_d = dest->bytes_per_line;
+
+ ASSERT(sx>=0);
+ ASSERT(sy>=0);
+ ASSERT(sx+wx<=(src->width));
+ ASSERT(sy+wy<=(src->height));
+ ASSERT(dx>=0);
+ ASSERT(dy>=0);
+ ASSERT(dx+wx<=(dest->width));
+ ASSERT(dy+wy<=(dest->height));
+
+ if(copy==1)
+ {
+ char *p_src = (char *)(src->data + bpl_s * sy + sx * bpp);
+ char *p_dest = (char *)(dest->data + bpl_d * dy + dx * bpp);
+
+ for(y=0;y<wy;y++){
+ memcpy(p_dest, p_src, wx * bpp);
+ p_src += bpl_s;
+ p_dest += bpl_d;
+ }
+ }
+ else if(bpp<=1)
+ {
+ CARD8 *p_src = (CARD8 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD8 *p_dest = (CARD8 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] != pix_transparent)
+ p_dest[x] = p_src[x];
+ }
+ p_src += bpl_s;
+ p_dest += bpl_d;
+ }
+ }
+ else if(bpp<=2)
+ {
+ CARD16 *p_src = (CARD16 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD16 *p_dest = (CARD16 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] != pix_transparent)
+ p_dest[x] = p_src[x];
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+ else if(bpp<=4)
+ {
+ CARD32 *p_src = (CARD32 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD32 *p_dest = (CARD32 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] != pix_transparent)
+ p_dest[x] = p_src[x];
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+
+}
+
+// Copy internal image to another internal image
+void ImgCopyH(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, int copy)
+{
+ int x, y;
+ int bpp = src->bytes_per_line / src->width;
+ int bpl_s = src->bytes_per_line;
+ int bpl_d = dest->bytes_per_line;
+
+ ASSERT(sx>=0);
+ ASSERT(sy>=0);
+ ASSERT(sx+wx<=(src->width));
+ ASSERT(sy+wy<=(src->height));
+ ASSERT(dx>=0);
+ ASSERT(dy>=0);
+ ASSERT(dx+wx<=(dest->width));
+ ASSERT(dy+wy<=(dest->height));
+
+ if(copy==1)
+ {
+ char *p_src = (char *)(src->data + bpl_s * sy + sx * bpp);
+ char *p_dest = (char *)(dest->data + bpl_d * dy + dx * bpp);
+
+ for(y=0;y<wy;y++){
+ memcpy(p_dest, p_src, wx * bpp);
+ p_src += bpl_s;
+ p_dest += bpl_d;
+ }
+ }
+ else if(bpp<=1)
+ {
+ CARD8 *p_src = (CARD8 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD8 *p_dest = (CARD8 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] == pix_rimcolor)
+ p_dest[x] = pix_hilite;
+
+ else if(p_src[x] != pix_transparent)
+ p_dest[x] = p_src[x];
+ }
+ p_src += bpl_s;
+ p_dest += bpl_d;
+ }
+ }
+ else if(bpp<=2)
+ {
+ CARD16 *p_src = (CARD16 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD16 *p_dest = (CARD16 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] == pix_rimcolor)
+ p_dest[x] = pix_hilite;
+
+ else if(p_src[x] != pix_transparent)
+ p_dest[x] = p_src[x];
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+ else if(bpp<=4)
+ {
+ CARD32 *p_src = (CARD32 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD32 *p_dest = (CARD32 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] == pix_rimcolor)
+ p_dest[x] = pix_hilite;
+
+ else if(p_src[x] != pix_transparent)
+ p_dest[x] = p_src[x];
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+
+}
+
+
+// Copy internal image to another internal image
+void ImgCopyMasked(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, char *mask)
+{
+ int x, y, count;
+ int bpp = src->bytes_per_line / src->width;
+ int bpl_s = src->bytes_per_line;
+ int bpl_d = dest->bytes_per_line;
+ ASSERT(sx>=0);
+ ASSERT(sy>=0);
+ ASSERT(sx+wx<=(src->width));
+ ASSERT(sy+wy<=(src->height));
+ ASSERT(dx>=0);
+ ASSERT(dy>=0);
+ ASSERT(dx+wx<=(dest->width));
+ ASSERT(dy+wy<=(dest->height));
+
+
+ count = 0;
+
+ if(bpp<=1)
+ {
+ CARD8 *p_src = (CARD8 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD8 *p_dest = (CARD8 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] != pix_transparent && mask[count]==0)
+ p_dest[x] = p_src[x];
+ count++;
+ }
+ p_src += bpl_s;
+ p_dest += bpl_d;
+ }
+ }
+ else if(bpp<=2)
+ {
+ CARD16 *p_src = (CARD16 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD16 *p_dest = (CARD16 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] != pix_transparent && mask[count]==0)
+ p_dest[x] = p_src[x];
+ count++;
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+ else if(bpp<=4)
+ {
+ CARD32 *p_src = (CARD32 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD32 *p_dest = (CARD32 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] != pix_transparent && mask[count]==0)
+ p_dest[x] = p_src[x];
+ count++;
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+
+}
+
+// Copy internal image to another internal image
+void ImgCopyMaskedH(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, char *mask)
+{
+ int x, y, count;
+ int bpp = src->bytes_per_line / src->width;
+ int bpl_s = src->bytes_per_line;
+ int bpl_d = dest->bytes_per_line;
+ ASSERT(sx>=0);
+ ASSERT(sy>=0);
+ ASSERT(sx+wx<=(src->width));
+ ASSERT(sy+wy<=(src->height));
+ ASSERT(dx>=0);
+ ASSERT(dy>=0);
+ ASSERT(dx+wx<=(dest->width));
+ ASSERT(dy+wy<=(dest->height));
+
+
+ count = 0;
+
+ if(bpp<=1)
+ {
+ CARD8 *p_src = (CARD8 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD8 *p_dest = (CARD8 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] == pix_rimcolor)
+ p_dest[x] = pix_hilite;
+ else if(p_src[x] != pix_transparent && mask[count]==0)
+ p_dest[x] = p_src[x];
+
+ count++;
+ }
+ p_src += bpl_s;
+ p_dest += bpl_d;
+ }
+ }
+ else if(bpp<=2)
+ {
+ CARD16 *p_src = (CARD16 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD16 *p_dest = (CARD16 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] == pix_rimcolor)
+ p_dest[x] = pix_hilite;
+ else if(p_src[x] != pix_transparent && mask[count]==0)
+ p_dest[x] = p_src[x];
+ count++;
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+ else if(bpp<=4)
+ {
+ CARD32 *p_src = (CARD32 *)(src->data + bpl_s * sy + sx * bpp);
+ CARD32 *p_dest = (CARD32 *)(dest->data + bpl_d * dy + dx * bpp);
+ for(y=0;y<wy;y++){
+ for(x=0;x<wx;x++){
+ //X11 specific
+ if(p_src[x] == pix_rimcolor)
+ p_dest[x] = pix_hilite;
+ else if(p_src[x] != pix_transparent && mask[count]==0)
+ p_dest[x] = p_src[x];
+ count++;
+ }
+ p_src += bpl_s/bpp;
+ p_dest += bpl_d/bpp;
+ }
+ }
+
+}
+
+void TileRegionClass::DrawPanel(int left, int top, int width, int height)
+{
+ framerect(left, top , left + width, top + height, PIX_WHITE);
+ framerect(left + 1, top + 1, left + width, top + height, PIX_DARKGREY);
+ fillrect (left + 1, top + 1, left + width - 1, top + height -1, PIX_LIGHTGREY);
+}
+
+void RegionClass::framerect(int left, int top, int right, int bottom,
+ int color)
+{
+ XDrawRectangle(display, win->win, term_gc[color&0xf],
+ ox+left, oy+top, right-left, bottom-top);
+}
+
+void TileRegionClass::framerect(int left, int top, int right, int bottom,
+ int color)
+{
+ int x,y;
+ int pix = term_pix[color];
+
+ for (x=left; x<=right; x++){
+ XPutPixel(backbuf, x, top, pix);
+ XPutPixel(backbuf, x, bottom, pix);
+ }
+
+ for (y=top+1; y< bottom; y++){
+ XPutPixel(backbuf, left, y, pix);
+ XPutPixel(backbuf, right, y, pix);
+ }
+}
+
+void WinClass::fillrect(int left, int top, int right, int bottom,
+ int color)
+{
+ XFillRectangle(display, win, term_gc[color&0xf],
+ top, left, right-left+1, bottom-top+1);
+}
+
+void RegionClass::fillrect(int left, int top, int right, int bottom,
+ int color)
+{
+ XFillRectangle(display, win->win, term_gc[color&0xf],
+ ox+left, oy+top, right-left, bottom-top);
+}
+
+void TileRegionClass::fillrect(int left, int top, int right, int bottom,
+ int color)
+{
+ int x,y;
+ int pix = term_pix[color];
+
+ ASSERT(left>=0);
+ ASSERT(top>=0);
+ ASSERT(right<mx);
+ ASSERT(bottom<my);
+
+ for (x=left; x<=right; x++){
+ for (y=top; y<= bottom; y++){
+ XPutPixel(backbuf, x, y, pix);
+ }}
+}
+
+/********************************************/
+
+bool GuicInit(Display **d, int *s)
+{
+ int i;
+ setlocale(LC_ALL, "");
+ display= XOpenDisplay("");
+ if (!display)
+ {
+ fprintf(stderr,"Cannot open display\n");
+ return false;
+ }
+ screen=DefaultScreen(display);
+
+ *d = display;
+ *s = screen;
+
+ // for text display
+ for(i=0;i<MAX_TERM_COL;i++)
+ {
+ const int *c = term_colors[i];
+ term_pix[i] = create_pixel(c[0],c[1],c[2]);
+ term_gc[i]= XCreateGC(display,RootWindow(display,screen),0,0);
+ XSetForeground(display,term_gc[i], term_pix[i]);
+ }
+ // for text display
+ for(i=0;i<MAX_MAP_COL;i++)
+ {
+ const int *c = map_colors[i];
+ map_pix[i] = create_pixel(c[0],c[1],c[2]);
+ map_gc[i]= XCreateGC(display,RootWindow(display,screen),0,0);
+ XSetForeground(display, map_gc[i], map_pix[i]);
+ }
+
+ // for Image manipulation
+ pix_black = term_pix[PIX_BLACK] ;
+ pix_hilite = term_pix[PIX_LIGHTMAGENTA] ;
+ pix_rimcolor = create_pixel(1,1,1);
+
+ return true;
+}
+
+void GuicDeinit()
+{
+ int i;
+
+ for(i=0;i<MAX_TERM_COL;i++)
+ XFreeGC(display,term_gc[i]);
+
+ for(i=0;i<MAX_MAP_COL;i++)
+ XFreeGC(display,map_gc[i]);
+
+ XCloseDisplay(display);
+}
+
+static int x11_byte_per_pixel_ximage()
+{
+ int i = 1;
+ int j = (DefaultDepth(display, screen) - 1) >> 2;
+ while (j >>= 1) i <<= 1;
+ return i;
+}
+
+unsigned long create_pixel(unsigned int red, unsigned int green,
+ unsigned int blue)
+{
+ Colormap cmap = DefaultColormapOfScreen(DefaultScreenOfDisplay(display));
+ XColor xcolour;
+
+ xcolour.red = red * 256;
+ xcolour.green = green * 256;
+ xcolour.blue = blue * 256;
+ xcolour.flags = DoRed | DoGreen | DoBlue;
+
+ XAllocColor(display, cmap, &xcolour);
+ return (xcolour.pixel);
+}
+
+/*
+ Copied from pngtopnm.c and modified by M.Itakura
+ (mostly omitted and added a few lines)
+ only color paletted image is handled
+*/
+
+/*
+** pngtopnm.c -
+** read a Portable Network Graphics file and produce a portable anymap
+**
+** Copyright (C) 1995,1998 by Alexander Lehmann <alex@hal.rhein-main.de>
+** and Willem van Schaik <willem@schaik.com>
+**
+** Permission to use, copy, modify, and distribute this software and its
+** documentation for any purpose and without fee is hereby granted, provided
+** that the above copyright notice appear in all copies and that both that
+** copyright notice and this permission notice appear in supporting
+** documentation. This software is provided "as is" without express or
+** implied warranty.
+**
+** modeled after giftopnm by David Koblas and
+** with lots of bits pasted from libpng.txt by Guy Eric Schalnat
+*/
+
+#define VERSION "2.37.1 (3 July 1998)"
+
+#include "png.h"
+
+#define pm_message printf
+#define pm_error(x) {fprintf(stderr,x);return NULL;}
+
+# define TRUE 1
+# define FALSE 0
+# define NONE 0
+
+#define SIG_CHECK_SIZE 4
+
+XImage *read_png (const char *fname)
+{
+ char sig_buf [SIG_CHECK_SIZE];
+ png_struct *png_ptr;
+ png_info *info_ptr;
+ png_byte **png_image;
+ png_byte *png_pixel;
+ unsigned int x, y;
+ int linesize;
+ png_uint_16 c;
+ unsigned int i;
+
+ //X11
+ XImage *res;
+ unsigned long pix_table[256];
+
+
+ FILE *ifp = fopen(fname,"r");
+
+ if(!ifp) { fprintf(stderr, "File not found: %s", fname); return NULL; }
+
+ if (fread (sig_buf, 1, SIG_CHECK_SIZE, ifp) != SIG_CHECK_SIZE)
+ pm_error ("input file empty or too short");
+ if (png_sig_cmp ((unsigned char *)sig_buf, (png_size_t) 0, (png_size_t) SIG_CHECK_SIZE) != 0)
+ pm_error ("input file not a PNG file");
+
+ png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+ if (png_ptr == NULL) {
+ pm_error ("cannot allocate LIBPNG structure");
+ }
+ info_ptr = png_create_info_struct (png_ptr);
+ if (info_ptr == NULL) {
+ png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+ pm_error ("cannot allocate LIBPNG structures");
+ }
+
+ if (setjmp (png_ptr->jmpbuf)) {
+ png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+ free (png_ptr);
+ free (info_ptr);
+ pm_error ("setjmp returns error condition");
+ }
+
+ png_init_io (png_ptr, ifp);
+ png_set_sig_bytes (png_ptr, SIG_CHECK_SIZE);
+ png_read_info (png_ptr, info_ptr);
+
+
+
+ png_image = (png_byte **)malloc (info_ptr->height * sizeof (png_byte*));
+ if (png_image == NULL) {
+ free (png_ptr);
+ free (info_ptr);
+ pm_error ("couldn't alloc space for image");
+ }
+
+ if (info_ptr->bit_depth == 16)
+ linesize = 2 * info_ptr->width;
+ else
+ linesize = info_ptr->width;
+
+ if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ linesize *= 2;
+ else
+ if (info_ptr->color_type == PNG_COLOR_TYPE_RGB)
+ linesize *= 3;
+ else
+ if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+ linesize *= 4;
+
+ for (y = 0 ; y < info_ptr->height ; y++) {
+ png_image[y] = (png_byte *)malloc (linesize);
+ if (png_image[y] == NULL) {
+ for (x = 0 ; x < y ; x++)
+ free (png_image[x]);
+ free (png_image);
+ free (png_ptr);
+ free (info_ptr);
+ pm_error ("couldn't alloc space for image");
+ }
+ }
+
+ if (info_ptr->bit_depth < 8)
+ png_set_packing (png_ptr);
+
+ /* sBIT handling is very tricky. If we are extracting only the image, we
+ can use the sBIT info for grayscale and color images, if the three
+ values agree. If we extract the transparency/alpha mask, sBIT is
+ irrelevant for trans and valid for alpha. If we mix both, the
+ multiplication may result in values that require the normal bit depth,
+ so we will use the sBIT info only for transparency, if we know that only
+ solid and fully transparent is used */
+
+ if (info_ptr->valid & PNG_INFO_sBIT) {
+
+ if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
+ info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
+ info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) &&
+ (info_ptr->sig_bit.red != info_ptr->sig_bit.green ||
+ info_ptr->sig_bit.red != info_ptr->sig_bit.blue) ) {
+ pm_message ("different bit depths for color channels not supported");
+ pm_message ("writing file with %d bit resolution", info_ptr->bit_depth);
+ } else
+ if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) &&
+ (info_ptr->sig_bit.red < 255)) {
+ for (i = 0 ; i < info_ptr->num_palette ; i++) {
+ info_ptr->palette[i].red >>= (8 - info_ptr->sig_bit.red);
+ info_ptr->palette[i].green >>= (8 - info_ptr->sig_bit.green);
+ info_ptr->palette[i].blue >>= (8 - info_ptr->sig_bit.blue);
+ }
+
+ } else
+ if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
+ info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) &&
+ (info_ptr->sig_bit.gray < info_ptr->bit_depth)) {
+ png_set_shift (png_ptr, &(info_ptr->sig_bit));
+ }
+
+
+ }
+
+ if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
+ {
+//X11
+ for (i = 0 ; i < info_ptr->num_palette ; i++)
+ pix_table[i] = create_pixel(info_ptr->palette[i].red,
+ info_ptr->palette[i].green, info_ptr->palette[i].blue);
+ }
+ else
+ if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)
+ {
+ for (i = 0 ; i < 256 ; i++)
+//X11
+ pix_table[i] = create_pixel(i, i, i);
+ }
+
+ png_read_image (png_ptr, png_image);
+ png_read_end (png_ptr, info_ptr);
+
+ res = ImgCreateSimple(info_ptr->width, info_ptr->height);
+
+ for (y = 0 ; y < info_ptr->height ; y++) {
+ png_pixel = png_image[y];
+ for (x = 0 ; x < info_ptr->width ; x++) {
+ c = *png_pixel;
+ png_pixel++;
+ XPutPixel(res, x, y, pix_table[c]);
+ }
+ }
+
+ for (y = 0 ; y < info_ptr->height ; y++)
+ free (png_image[y]);
+ free (png_image);
+ free (png_ptr);
+ free (info_ptr);
+
+ fclose(ifp);
+ return res;
+}
diff --git a/crawl-ref/source/guic.cc b/crawl-ref/source/guic.cc
new file mode 100644
index 0000000000..5c29797a5c
--- /dev/null
+++ b/crawl-ref/source/guic.cc
@@ -0,0 +1,773 @@
+/* 1) Image manipulation routines
+ * 2) WinClass and RegionClass system independent imprementaions
+ * see guic-*.cc for system dependent implementations
+ */
+
+// Class defines
+#include "guic.h"
+
+#ifdef WIN32TILES
+#else
+#define dos_char false;
+#endif
+
+int TextRegionClass::print_x;
+int TextRegionClass::print_y;
+TextRegionClass *TextRegionClass::text_mode = NULL;
+int TextRegionClass::text_col = 0;
+
+TextRegionClass *TextRegionClass::cursor_region= NULL;
+int TextRegionClass::cursor_flag = 0;
+int TextRegionClass::cursor_x;
+int TextRegionClass::cursor_y;
+
+// more logical color naming
+const int map_colors[MAX_MAP_COL][3]=
+{
+ { 0, 0, 0}, // BLACK
+ {128, 128, 128}, // DKGREY
+ {160, 160, 160}, // MDGREY
+ {192, 192, 192}, // LTGREY
+ {255, 255, 255}, // WHITE
+
+ { 0, 64, 255}, // BLUE (actually cyan-blue)
+ {128, 128, 255}, // LTBLUE
+ { 0, 32, 128}, // DKBLUE (maybe too dark)
+
+ { 0, 255, 0}, // GREEN
+ {128, 255, 128}, // LTGREEN
+ { 0, 128, 0}, // DKGREEN
+
+ { 0, 255, 255}, // CYAN
+ { 64, 255, 255}, // LTCYAN (maybe too pale)
+ { 0, 128, 128}, // DKCYAN
+
+ {255, 0, 0}, // RED
+ {255, 128, 128}, // LTRED (actually pink)
+ {128, 0, 0}, // DKRED
+
+ {192, 0, 255}, // MAGENTA (actually blue-magenta)
+ {255, 128, 255}, // LTMAGENTA
+ { 96, 0, 128}, // DKMAGENTA
+
+ {255, 255, 0}, // YELLOW
+ {255, 255, 64}, // LTYELLOW (maybe too pale)
+ {128, 128, 0}, // DKYELLOW
+
+ {165, 91, 0}, // BROWN
+};
+
+const int term_colors[MAX_TERM_COL][3]=
+{
+ { 0, 0, 0}, // BLACK
+ { 0, 82, 255}, // BLUE
+ {100, 185, 70}, // GREEN
+ { 0, 180, 180}, // CYAN
+ {255, 48, 0}, // RED
+ {238, 92, 238}, // MAGENTA
+ {165, 91, 0}, // BROWN
+ {162, 162, 162}, // LIGHTGREY
+ { 82, 82, 82}, // DARKGREY
+ { 82, 102, 255}, // LIGHTBLUE
+ { 82, 255, 82}, // LIGHTGREEN
+ { 82, 255, 255}, // LIGHTCYAN
+ {255, 82, 82}, // LIGHTRED
+ {255, 82, 255}, // LIGHTMAGENTA
+ {255, 255, 82}, // YELLOW
+ {255, 255, 255} // WHITE
+};
+/*------------------------------------------*/
+
+// ������
+WinClass::WinClass()
+{
+ // Minimum;
+ wx = 10;
+ wy = 10;
+
+ ox = 0;
+ oy = 0;
+ SysInit();
+}
+
+// �I��
+WinClass::~WinClass()
+{
+ SysDeinit();
+ regions.clear();
+ layers.clear();
+}
+
+void WinClass::placeRegion(RegionClass *r, int layer0,
+ int x, int y,
+ int margin_top, int margin_left,
+ int margin_bottom, int margin_right)
+{
+ if (r->win == NULL)
+ {
+ regions.push_back(r);
+ layers.push_back(layer0);
+ }
+
+ r->win = this;
+ r->layer = layer0;
+ r->flag = true;
+
+ r->sx = x;
+ r->sy = y;
+
+ r->ox = r->sx + margin_left;
+ r->oy = r->sy + margin_top;
+ r->wx = r->dx * r->mx + margin_left + margin_right;
+ r->wy = r->dy * r->my + margin_top + margin_bottom;
+ r->ex = r->sx + r->wx;
+ r->ey = r->sy + r->wy;
+ if (r->ex > wx) wx = r->ex;
+ if (r->ey > wy) wy = r->ey;
+}
+
+void WinClass::placeRegion(RegionClass *r, int layer0,
+ RegionClass *neighbor, int pflag,
+ int margin_top, int margin_left,
+ int margin_bottom, int margin_right)
+{
+ int sx0 =0;
+ int sy0 =0;
+ int ex0 =0;
+ int ey0 =0;
+
+ int x = 0;
+ int y = 0;
+
+ if (neighbor!=NULL)
+ {
+ sx0 = neighbor->sx;
+ sy0 = neighbor->sy;
+ ex0 = neighbor->ex;
+ ey0 = neighbor->ey;
+ }
+
+ if (pflag == PLACE_RIGHT)
+ {
+ x = ex0;
+ y = sy0;
+ }
+ else
+ {
+ x = sx0;
+ y = ey0;
+ }
+ placeRegion(r, layer0, x, y, margin_top, margin_left,
+ margin_bottom, margin_right);
+
+}
+
+void WinClass::redraw(int x1, int y1, int x2, int y2)
+{
+ std::vector <RegionClass *>::iterator r;
+ int cx1, cx2, cy1, cy2;
+ for (r = regions.begin();r != regions.end();r++)
+ {
+ if (!(*r)->is_active()) continue;
+ if( (*r)->convert_redraw_rect(x1, y1, x2, y2, &cx1, &cy1, &cx2, &cy2))
+ {
+ (*r)->redraw(cx1, cy1, cx2, cy2);
+ }
+ }
+}
+
+void WinClass::redraw()
+{
+ redraw(0, 0, wx-1, wy-1);
+}
+
+void WinClass::move(int ox0, int oy0)
+{
+ ox = ox0;
+ oy = oy0;
+ move(); // system dependent
+}
+
+void WinClass::resize(int wx0, int wy0)
+{
+ if (wx0>0) wx = wx0;
+ if (wy0>0) wy = wy0;
+ resize(); // system dependent
+}
+
+/*------------------------------------------*/
+
+/* �������̏���
+ * 0 (�e�N���X�̏����A����)
+ * 1 �@�틤�ʏ���
+ * 2 �@���ˑ�����
+ *
+ * �I�������̏���
+ * 1 �@���ˑ�����
+ * 2 �@�틤�ʏ���
+ * (3) (�e�N���X�̏����A����)
+ */
+
+
+//������
+RegionClass::RegionClass()
+{
+ flag = false;
+ win = NULL;
+ backbuf = NULL;
+ SysInit();
+ ox = oy = 0;
+ dx = dy = 1;
+ font_copied = false;
+ id = 0;
+}
+
+//�I������
+RegionClass::~RegionClass()
+{
+ SysDeinit();
+ // �o�b�N�o�b�t�@����
+ if (backbuf != NULL) ImgDestroy(backbuf);
+}
+
+void TextRegionClass::resize(int x, int y)
+{
+ int i;
+ free(cbuf);
+ free(abuf);
+ cbuf = (unsigned char *)malloc(x*y);
+ abuf = (unsigned char *)malloc(x*y);
+ for (i=0; i<x*y; i++)
+ {
+ cbuf[i]=' ';
+ abuf[i]=0;
+ }
+ mx = x;
+ my = y;
+}
+
+// ������
+TextRegionClass::TextRegionClass(int x, int y, int cx, int cy)
+{
+ cbuf = NULL;
+ abuf = NULL;
+ resize(x, y);
+
+ // Cursor Offset
+ cx_ofs = cx;
+ cy_ofs = cy;
+
+ //�@���ˑ�����
+ SysInit(x, y, cx, cy);
+}
+
+//�I������
+TextRegionClass::~TextRegionClass()
+{
+ SysDeinit();
+ free(cbuf);
+ free(abuf);
+}
+
+//������
+TileRegionClass::TileRegionClass(int mx0, int my0, int dx0, int dy0)
+{
+ // Unit size
+ dx = dx0;
+ dy = dy0;
+
+ mx = mx0;
+ my = my0;
+ force_redraw = false;
+
+ //�@���ˑ�����
+ SysInit(mx0, my0, dx0, dy0);
+}
+
+//�I������
+TileRegionClass::~TileRegionClass()
+{
+ SysDeinit();
+}
+
+void TileRegionClass::resize(int mx0, int my0, int dx0, int dy0)
+{
+ if (mx0 != 0) mx = mx0;
+ if (my0 != 0) my = my0;
+ if (dx0 != 0) dx = dx0;
+ if (dy0 != 0) dy = dy0;
+}
+
+// ������
+MapRegionClass::MapRegionClass(int x, int y, int o_x, int o_y, bool iso)
+{
+ int i;
+
+ mx2 = x;
+ my2 = y;
+ mx = mx2;
+ my = my2;
+
+ mbuf = (unsigned char *)malloc(mx2*my2);
+
+ for (i=0; i<mx2*my2; i++)
+ {
+ mbuf[i]=0;
+ }
+ x_margin = o_x;
+ y_margin = o_y;
+ force_redraw = false;
+
+ //�@���ˑ�����
+ SysInit(x, y, o_x, o_y);
+}
+
+//�I������
+MapRegionClass::~MapRegionClass()
+{
+ SysDeinit();
+ free(mbuf);
+}
+
+void MapRegionClass::resize(int mx0, int my0, int dx0, int dy0)
+{
+ if (mx0 != 0) mx2 = mx0;
+ if (my0 != 0) my2 = my0;
+ if (dx0 != 0) dx = dx0;
+ if (dy0 != 0) dy = dy0;
+ if (mx0 != 0 || my0 != 0)
+ {
+ int i;
+ free(mbuf);
+ mbuf = (unsigned char *)malloc(mx2*my2);
+ for (i=0; i<mx2*my2; i++) mbuf[i]=0;
+ }
+}
+
+/*------------------------------------------*/
+
+bool RegionClass::is_active()
+{
+ if (!flag) return false;
+ if (win->active_layer == layer)
+ return true;
+ else return false;
+}
+
+void RegionClass::make_active()
+{
+ if (!flag) return;
+ win->active_layer = layer;
+}
+
+void RegionClass::redraw(int x1, int y1, int x2, int y2)
+{
+}
+
+void RegionClass::redraw()
+{
+ redraw(0, 0, mx-1, my-1);
+}
+
+void MapRegionClass::redraw()
+{
+ redraw(0, 0, mx-1, my-1);
+}
+
+void TileRegionClass::redraw()
+{
+ redraw(0, 0, mx*dx-1, my*dy-1);
+}
+
+void MapRegionClass::set_col(int col, int x, int y)
+{
+ mbuf[x + y * mx2] = col;
+}
+
+int MapRegionClass::get_col(int x, int y)
+{
+ return mbuf[x + y * mx2];
+}
+
+/*------------------------------------------*/
+bool RegionClass::convert_redraw_rect(int x1, int y1, int x2, int y2,
+ int *rx1, int *ry1, int *rx2, int *ry2)
+{
+ int cx1 = x1-ox;
+ int cy1 = y1-oy;
+ int cx2 = x2-ox;
+ int cy2 = y2-oy;
+
+ if ( (cx2 < 0) || (cy2 < 0) || (cx1 >= dx*mx) || (cy1 >=dy*my))
+ return false;
+
+ cx1 /= dx;
+ cy1 /= dy;
+ cx2 /= dx;
+ cy2 /= dy;
+
+ if(cx2>=mx-1)cx2=mx-1;
+ if(cy2>=my-1)cy2=my-1;
+ if(cx1<0) cx1=0;
+ if(cy1<0) cy1=0;
+
+ *rx1 = cx1;
+ *ry1 = cy1;
+ *rx2 = cx2;
+ *ry2 = cy2;
+
+ return true;
+}
+
+bool TileRegionClass::convert_redraw_rect(int x1, int y1, int x2, int y2,
+ int *rx1, int *ry1, int *rx2, int *ry2)
+{
+ int cx1 = x1-ox;
+ int cy1 = y1-oy;
+ int cx2 = x2-ox;
+ int cy2 = y2-oy;
+
+ int wwx = dx*mx;
+ int wwy = dy*my;
+
+ if ( (cx2 < 0) || (cy2 < 0) || (cx1 >= wwx) || (cy1 >=wwy))
+ return false;
+
+ if(cx2>=wwx-1)cx2=wwx-1;
+ if(cy2>=wwy-1)cy2=wwy-1;
+ if(cx1<0) cx1=0;
+ if(cy1<0) cy1=0;
+
+ *rx1 = cx1;
+ *ry1 = cy1;
+ *rx2 = cx2;
+ *ry2 = cy2;
+
+ return true;
+}
+
+bool RegionClass::mouse_pos(int mouse_x, int mouse_y, int *cx, int *cy)
+{
+ int x = mouse_x - ox;
+ int y = mouse_y - oy;
+ if (!is_active()) return false;
+ if ( x < 0 || y < 0 ) return false;
+ x /= dx;
+ y /= dy;
+ if (x >= mx || y >= my) return false;
+ *cx = x;
+ *cy = y;
+ return true;
+}
+
+bool MapRegionClass::mouse_pos(int mouse_x, int mouse_y, int *cx, int *cy)
+{
+ int x = mouse_x - ox;
+ int y = mouse_y - oy;
+ if ( x < 0 || y < 0 ) return false;
+ x /= dx;
+ y /= dy;
+ if (x >= mx || y >= my) return false;
+ if (!is_active()) return false;
+
+ *cx = x;
+ *cy = y;
+ return true;
+}
+
+bool TileRegionClass::mouse_pos(int mouse_x, int mouse_y, int *cx, int *cy)
+{
+ int x = mouse_x - ox;
+ int y = mouse_y - oy;
+ if (!is_active()) return false;
+ if ( x < 0 || y < 0 ) return false;
+ if ( x >= dx*mx || y >= dy*my ) return false;
+
+ x /= dx;
+ y /= dy;
+ *cx = x;
+ *cy = y;
+
+ return true;
+}
+
+/*
+ * Text related
+ */
+
+void TextRegionClass::scroll()
+{
+ int idx;
+
+ if(!flag)
+ return;
+
+ for(idx=0; idx<mx*(my-1);idx++)
+ {
+ cbuf[idx] = cbuf[idx + mx];
+ abuf[idx] = abuf[idx + mx];
+ }
+
+ for(idx=mx*(my-1);idx<mx*my;idx++)
+ {
+ cbuf[idx] = ' ';
+ abuf[idx] = 0;
+ }
+ redraw(0, 0, mx-1, my-1);
+}
+
+void TextRegionClass::adjust_region(int *x1, int *x2, int y)
+{
+#ifdef JP
+ if (dos_char)
+ {
+ *x2 = *x2 + 1;
+ return;
+ }
+
+ int nx1 = 0;
+ int nx2 = mx;
+ unsigned char *ptr = &cbuf[y * mx];
+ int x = 0;
+
+ while (x<mx)
+ {
+ if(x<=*x1) nx1=x;
+ if(x>*x2)
+ {
+ nx2=x;
+ break;
+ }
+ if (ptr[x] & 0x80) x+=2;
+ else x++;
+ }
+ *x1 = nx1;
+ *x2 = nx2;
+#else
+ *x2 = *x2 + 1;
+#endif
+}
+
+void TextRegionClass::addstr(char *buffer)
+{
+ int i,j;
+ char buf2[1024];
+ int len = strlen(buffer);
+
+ if(!flag)return;
+
+ j=0;
+
+ for(i=0;i<len+1;i++)
+ {
+ char c = buffer[i];
+ bool newline=false;
+ if (c== '\n' || c== '\r')
+ {
+ c=0;
+ newline = true;
+ if (buffer[i+1]=='\n' || buffer[i+1]=='\r')
+ i++;
+ }
+ buf2[j] = c;
+ j++;
+ if(c==0)
+ {
+ if (j-1 != 0)
+ addstr_aux(buf2, j - 1); // draw it
+ if (newline)
+ {
+ print_x = cx_ofs;
+ print_y++;
+ j=0;
+
+ if(print_y - cy_ofs == my)
+ {
+ scroll();
+ print_y--;
+ }
+ }
+ }
+ }
+ if (cursor_flag) gotoxy(print_x+1, print_y+1);
+}
+
+void TextRegionClass::addstr_aux(char *buffer, int len)
+{
+ int i;
+ int x = print_x - cx_ofs;
+ int y = print_y - cy_ofs;
+ int adrs = y * mx;
+ int head = x;
+ int tail = x + len - 1;
+
+ if(!flag)return;
+
+ adjust_region(&head, &tail, y);
+
+#ifdef JP
+ // prevent half displayed kanji
+ cbuf[adrs+head] = ' ';
+ abuf[adrs+head] = text_col;
+ cbuf[adrs+tail-1] = ' ';
+ abuf[adrs+tail-1] = text_col;
+#endif
+
+ for (i=0; i < len && x + i < mx;i++)
+ {
+ cbuf[adrs+x+i]=buffer[i];
+ abuf[adrs+x+i]=text_col;
+ }
+ draw_string(head, y, &cbuf[adrs+head], tail-head, text_col);
+ print_x += len;
+}
+
+void TextRegionClass::redraw(int x1, int y1, int x2, int y2)
+{
+ int x, y;
+ if(!flag)return;
+
+ for(y=y1;y<=y2;y++)
+ {
+ unsigned char *a = &abuf[y * mx];
+ unsigned char *c = &cbuf[y * mx];
+ int head = x1;
+ int tail = x2;
+ adjust_region(&head, &tail, y);
+
+ x=head;
+ int col = a[x];
+
+ while (x<=tail)
+ {
+ int oldcol = col;
+ if (x==tail)
+ col = -1;
+ else
+ col = a[x];
+ if (oldcol != col)
+ {
+ draw_string(head, y, &c[head], x-head, oldcol);
+ head = x;
+ }
+#ifdef JP
+ if ( ((c[x] & 0x80) == 0x80) && (dos_char == false))
+ x+=2;
+ else
+ x++;
+#else
+ x++;
+#endif
+ }
+ }
+
+ if(cursor_region == this && cursor_flag == 1)
+ draw_cursor(cursor_x, cursor_y);
+
+ sys_flush();
+}
+
+void TextRegionClass::clear_to_end_of_line()
+{
+ int i;
+ int cx = print_x - cx_ofs;
+ int cy = print_y - cy_ofs;
+ int col = text_col;
+ int adrs = cy * mx;
+
+ if(!flag)return;
+
+ for(i=cx; i<mx; i++){
+ cbuf[adrs+i]=' ';
+ abuf[adrs+i]=col;
+ }
+ redraw(cx, cy, mx-1, cy);
+}
+
+void TextRegionClass::clear_to_end_of_screen()
+{
+ int i;
+ int cy = print_y - cy_ofs;
+ int col = text_col;
+
+ if(!flag)return;
+
+ for(i=cy*mx; i<mx*my; i++){
+ cbuf[i]=' ';
+ abuf[i]=col;
+ }
+ redraw(0, cy, mx-1, my-1);
+}
+
+void TextRegionClass::putch(unsigned char ch)
+{
+ if (ch==0) ch=32;
+ addstr_aux((char *)&ch, 1);
+}
+
+void TextRegionClass::writeWChar(unsigned char *ch)
+{
+ addstr_aux((char *)ch, 2);
+}
+
+void TextRegionClass::textcolor(int color)
+{
+ text_col = color;
+}
+
+void TextRegionClass::textbackground(int col)
+{
+ textcolor(col*16 + (text_col & 0xf));
+}
+
+void TextRegionClass::gotoxy(int x, int y)
+{
+ print_x = x-1;
+ print_y = y-1;
+
+ if (cursor_region != NULL && cursor_flag)
+ {
+ cursor_region ->erase_cursor();
+ cursor_region = NULL;
+ }
+
+ if (cursor_flag)
+ {
+ text_mode->draw_cursor(print_x, print_y);
+ cursor_x = print_x;
+ cursor_y = print_y;
+ cursor_region = text_mode;
+ }
+}
+
+int TextRegionClass::wherex()
+{
+ return print_x + 1;
+}
+
+int TextRegionClass::wherey()
+{
+ return print_y + 1;
+}
+
+void TextRegionClass::_setcursortype(int curstype)
+{
+ cursor_flag = curstype;
+ if (cursor_region != NULL)
+ cursor_region ->erase_cursor();
+
+ if (curstype)
+ {
+ text_mode->draw_cursor(print_x, print_y);
+ cursor_x = print_x;
+ cursor_y = print_y;
+ cursor_region = text_mode;
+ }
+}
+
+#if 0
+int TextRegionClass::get_number_of_lines()
+{
+ return (text_mode->cx_ofs + text_mode->my);
+}
+#endif
diff --git a/crawl-ref/source/guic.h b/crawl-ref/source/guic.h
new file mode 100644
index 0000000000..56a4785f14
--- /dev/null
+++ b/crawl-ref/source/guic.h
@@ -0,0 +1,464 @@
+#ifdef USE_X11
+#include <X11/Xlib.h>
+#include <X11/X.h>
+bool GuicInit(Display **d, int *s);
+void GuicDeinit();
+
+#elif defined(WIN32TILES)
+#include <windows.h>
+#include <commdlg.h>
+bool GuicInit(HINSTANCE h, int nCmdShow);
+void GuicDeinit();
+
+#elif defined(SOME_OS)
+#include <some-headers.h>
+bool GuicInit(some args);
+#endif
+
+#include <vector>
+
+/*
+ * Internal Image types
+ */
+
+#ifdef USE_X11
+/*********** X11 ********/
+typedef XImage *img_type;
+#define ImgWidth(img) (img->width)
+#define ImgHeight(img) (img->height)
+
+#elif defined(WIN32TILES)
+/********** Windows *****/
+// struct for DIB info
+typedef struct dib_pack
+{
+ LPBITMAPINFO pDib ; //^CDIB̃wb_+pbgւ̃|C^
+ HBITMAP hDib ; //^CDIBƂĕێ
+ HDC hDC ; //^C̃foCReLXgnh
+ LPBYTE pDibBits ; //DIB̐擪oCgւ̃|C^
+ LPBYTE pDibZero ; //DIB(0,0)_̃oCgւ̃|C^
+ int Width ; //DIB̕
+ int Height ; //DIB̍
+} dib_pack;
+typedef dib_pack *img_type;
+#define ImgWidth(img) (img->Width)
+#define ImgHeight(img) (img->Height)
+
+#elif defined(SOME_OS)
+typedef sometype *img_type;
+#define ImgWidth(img) (img->x)
+#define ImgHeight(img) (img->y)
+#endif
+
+// Image overlay/copy between internal images,
+// implemented in winclass-*.cc
+void ImgCopy(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, int copy);
+// hilight rim color #010101 to magenta
+void ImgCopyH(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, int copy);
+// maskout by char array mask
+void ImgCopyMasked(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, char *mask);
+// maskout+hilight
+void ImgCopyMaskedH(img_type src, int sx, int sy, int wx, int wy,
+ img_type dest, int dx, int dy, char *mask);
+
+// create internal buffer (not assosiated to any window)
+img_type ImgCreateSimple(int wx, int wy);
+// create it from file
+img_type ImgLoadFile(const char *name);
+
+// destroy
+void ImgDestroy(img_type img);
+// clear by transparent color
+void ImgClear(img_type img);
+// if it is pix_transparent #476c6c
+bool ImgIsTransparentAt(img_type img, int x, int y);
+void ImgSetTransparentPix(img_type img);
+
+/*
+ * Windows and internal regions (text, dungeon, map, etc)
+ */
+
+class WinClass
+{
+ public:
+ int ox; //Offset x in dots
+ int oy; //Offset y in dots
+
+ int wx; //width in dots
+ int wy; //height in dots
+
+ std::vector<class RegionClass *> regions;
+ std::vector<int> layers;
+
+ // EBhEŃ_W/CxgȂǓꏊ
+ // \؂ւꍇɎgp
+ int active_layer;
+
+ // Pointer to the window
+#ifdef USE_X11
+ Window win;
+#elif defined(WIN32TILES)
+ HWND hWnd;
+#elif defined(SOME_OS)
+ somewindowtype win;
+#endif
+
+ //
+ WinClass();
+
+ // @ˑlj
+ void SysInit();
+ void SysDeinit();
+
+ // I
+ ~WinClass();
+
+ // fillout with black: Sys dep
+ void clear();
+ // create: Sys dep
+#ifdef USE_X11
+ void create(char *name);
+#elif defined(WIN32TILES)
+ BOOL create(const char *name);
+#elif defined(SOME_OS)
+ void create(some args);
+#endif
+
+ void resize(int wx, int wy);
+ void resize();
+ void move(int ox, int oy);
+ void move();
+
+ // place Regions inside it
+ void placeRegion(class RegionClass *r, int layer,
+ class RegionClass *neighbor,
+ int pflag,
+ int margin_top = 0, int margin_left = 0,
+ int margin_bottom = 0, int margin_right = 0);
+
+ void placeRegion(class RegionClass *r, int layer,
+ int x, int y,
+ int margin_top = 0, int margin_left = 0,
+ int margin_bottom = 0, int margin_right = 0);
+
+ // fillout a rectangle
+ void fillrect(int left, int right, int top, int bottom, int color);
+
+ // redraw for exposure, etc
+ void redraw(int x1, int y1, int x2, int y2);
+ void redraw();
+};
+
+class RegionClass
+{
+ public:
+
+ WinClass *win;
+ int layer;
+
+ // Geometry
+ // <-----------------wx----------------------->
+ // sx ox ex
+ // |margin| text/tile area |margin|
+
+ int ox; //Offset x in dots
+ int oy; //Offset y in dots
+
+ int dx; //unit width
+ int dy; //unit height
+
+ int mx; //window width in dx
+ int my; //window height in dy
+
+ int wx; //width in dots = dx*mx + margins
+ int wy; //height in dots = dy*my + margins
+
+ int sx; //Left edge pos
+ int sy; //Top edge pos
+ int ex; //right edge pos
+ int ey; //bottom edge pos
+
+ bool flag;// use or no
+
+ int id; // for general purpose
+
+ // pointer to internal backup image buffer
+ // used for redraw and supplessing flicker
+ // Win ł ^Cƃ}bvA X11 ł̓^CŎgp
+ img_type backbuf;
+#ifdef WIN32TILES
+ static void set_std_palette(RGBQUAD *pPal);
+ static RGBQUAD std_palette[256];
+ void init_backbuf(RGBQUAD *pPal = NULL, int ncol = 0);
+ bool dos_char;
+#else
+ void init_backbuf();
+#endif
+ void resize_backbuf();
+
+ // font-related
+ int fx; // font height and width (can differ from dx, dy)
+ int fy;
+#ifdef USE_X11
+ int asc; //font ascent
+ #ifdef JP
+ XFontSet font; //fontset
+ #else
+ XFontStruct *font;
+ #endif
+ void init_font(const char *name);
+#elif defined(WIN32TILES)
+ HFONT font;
+ void init_font(const char *name, int height);
+ void change_font(const char *name, int height);
+#elif defined(SOME_OS)
+ sometype font;
+ void init_font(some args);
+#endif
+
+ bool font_copied;
+
+ void copy_font(RegionClass *r);
+
+ // init/deinit
+ RegionClass();
+ virtual ~RegionClass();
+
+ // system-dependent init/deinit
+ void SysInit();
+ void SysDeinit();
+
+ // Sys indep
+ bool is_active();
+ void make_active();
+
+ //ȉ̓eLXg/}bv/^C̔hNXŋς
+
+ //Sys indep
+ //}EXʒu_WʒuɕϊA͈͓Ȃ true Ԃ
+ // convert mouse point into logical position
+ virtual bool mouse_pos(int mouse_x, int mouse_y, int *cx, int *cy);
+
+ //`̈W region W
+ virtual bool convert_redraw_rect(int x1, int y1, int x2, int y2,
+ int *rx1, int *ry1, int *rx2, int *ry2);
+
+ //Sys dep
+ // exposure Ȃǂ̍ĕ`
+ virtual void redraw(int x1, int y1, int x2, int y2);
+ virtual void redraw();
+ void sys_flush();
+
+ //჌x` J[\p
+ // TileRegionClass ł ʂłȂobNobt@C[Wɂ`
+ //`h‚Ԃ
+ virtual void fillrect(int left, int right, int top, int bottom, int color);
+ //``
+ virtual void framerect(int left, int right, int top, int bottom, int color);
+
+ // Sys dep
+ // œh
+ virtual void clear();
+};
+
+
+// h
+class TextRegionClass :public RegionClass
+{
+ public:
+ // init/deinit
+ TextRegionClass(int x, int y , int cx, int cy);
+ ~TextRegionClass();
+
+ // os dependent init/deinit
+ void SysInit(int x, int y, int cx, int cy);
+ void SysDeinit();
+
+ // where now printing? what color?
+ static int print_x;
+ static int print_y;
+ static int text_col;
+ // which region now printing?
+ static class TextRegionClass *text_mode;
+ // display cursor? where is the cursor now?
+ static int cursor_flag;
+ static class TextRegionClass *cursor_region;
+ static int cursor_x;
+ static int cursor_y;
+
+ // class methods
+ static void gotoxy(int x, int y);
+ static int wherex();
+ static int wherey();
+ //static int get_number_of_lines(void);
+ static void _setcursortype(int curstype);
+ static void textbackground(int bg);
+ static void textcolor(int col);
+
+ // Object's method
+ void clear_to_end_of_line(void);
+ void clear_to_end_of_screen(void);
+ void putch(unsigned char chr);
+ void writeWChar(unsigned char *ch);
+
+ unsigned char *cbuf; //text backup
+ unsigned char *abuf; //textcolor backup
+
+ int cx_ofs; //cursor x offset
+ int cy_ofs; //cursor y offset
+
+ void addstr(char *buffer);
+ void addstr_aux(char *buffer, int len);
+ void adjust_region(int *x1, int *x2, int y);
+ void scroll();
+ //bool mouse_pos(int mouse_x, int mouse_y, int *cx, int *cy);
+
+ //Sys dep
+ void draw_string(int x, int y, unsigned char *buf, int len, int col);
+ void draw_cursor(int x, int y, int width);
+ void draw_cursor(int x, int y);
+ void erase_cursor();
+ void clear();
+ void init_backbuf();
+ void redraw(int x1, int y1, int x2, int y2);
+ void resize(int x, int y);
+};
+
+class TileRegionClass :public RegionClass
+{
+ public:
+ bool force_redraw;
+
+ void DrawPanel(int left, int top, int width, int height);
+ //obNobt@Œ`h‚Ԃ
+ void fillrect(int left, int right, int top, int bottom, int color);
+ //obNobt@Œ``
+ void framerect(int left, int right, int top, int bottom, int color);
+
+ bool mouse_pos(int mouse_x, int mouse_y, int *cx, int *cy);
+ virtual bool convert_redraw_rect(int x1, int y1, int x2, int y2,
+ int *rx1, int *ry1, int *rx2, int *ry2);
+ void redraw(int x1, int y1, int x2, int y2);
+ void redraw();
+ void clear();
+
+ //Sys dep
+ void resize(int x, int y, int dx, int dy);
+
+#ifdef WIN32TILES
+ void init_backbuf(RGBQUAD *pPal = NULL);
+#else
+ void init_backbuf();
+#endif
+ void resize_backbuf();
+
+ //
+ TileRegionClass(int mx0, int my0, int dx0, int dy0);
+
+ // @ˑlj
+ void SysInit(int mx0, int my0, int dx0, int dy0);
+ void SysDeinit();
+
+ //I
+ ~TileRegionClass();
+};
+
+class MapRegionClass :public RegionClass
+{
+ public:
+ int mx2;
+ int my2;
+ int x_margin;
+ int y_margin;
+ unsigned char *mbuf;
+ bool force_redraw;
+ bool mouse_pos(int mouse_x, int mouse_y, int *cx, int *cy);
+ void draw_data(unsigned char *buf);
+ void redraw(int x1, int y1, int x2, int y2);
+ void redraw();
+ void clear();
+
+ //Sys dep
+ void init_backbuf();
+ void resize_backbuf();
+ void resize(int mx0, int my0, int dx0, int dy0);
+
+ void set_col(int col, int x, int y);
+ int get_col(int x, int y);
+
+ //
+ MapRegionClass(int x, int y, int o_x, int o_y, bool iso);
+
+ // @ˑlj
+ void SysInit(int x, int y, int o_x, int o_y);
+ void SysDeinit();
+
+ //I
+ ~MapRegionClass();
+};
+
+#define PLACE_RIGHT 0
+#define PLACE_BOTTOM 1
+#define PLACE_FORCE 2
+
+// Graphics Colors
+#define PIX_BLACK 0
+#define PIX_BLUE 1
+#define PIX_GREEN 2
+#define PIX_CYAN 3
+#define PIX_RED 4
+#define PIX_MAGENTA 5
+#define PIX_BROWN 6
+#define PIX_LIGHTGREY 7
+#define PIX_DARKGREY 8
+#define PIX_LIGHTBLUE 9
+#define PIX_LIGHTGREEN 10
+#define PIX_LIGHTCYAN 11
+#define PIX_LIGHTRED 12
+#define PIX_LIGHTMAGENTA 13
+#define PIX_YELLOW 14
+#define PIX_WHITE 15
+#define MAX_TERM_COL 16
+
+
+#define MAP_BLACK 0
+#define MAP_DKGREY 1
+#define MAP_MDGREY 2
+#define MAP_LTGREY 3
+#define MAP_WHITE 4
+
+#define MAP_BLUE 5
+#define MAP_LTBLUE 6
+#define MAP_DKBLUE 7
+
+#define MAP_GREEN 8
+#define MAP_LTGREEN 9
+#define MAP_DKGREEN 10
+
+#define MAP_CYAN 11
+#define MAP_LTCYAN 12
+#define MAP_DKCYAN 13
+
+#define MAP_RED 14
+#define MAP_LTRED 15
+#define MAP_DKRED 16
+
+#define MAP_MAGENTA 17
+#define MAP_LTMAGENTA 18
+#define MAP_DKMAGENTA 19
+
+#define MAP_YELLOW 20
+#define MAP_LTYELLOW 21
+#define MAP_DKYELLOW 22
+
+#define MAP_BROWN 23
+
+#define MAX_MAP_COL 24
+
+
+extern const int term_colors[MAX_TERM_COL][3];
+extern const int map_colors[MAX_MAP_COL][3];
+
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index d17dcd6df1..d2b5421992 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -654,7 +654,11 @@ void game_options::reset_options()
detected_item_colour = GREEN;
detected_monster_colour= LIGHTRED;
+#ifdef USE_TILE
+ classic_item_colours = true;
+#else
classic_item_colours = false;
+#endif
easy_exit_menu = true;
#ifdef DOS
@@ -742,6 +746,14 @@ void game_options::reset_options()
wiz_mode = WIZ_NO;
#endif
+#ifdef USE_TILE
+ show_items[0] = '0';
+#endif
+
+#ifdef WIN32TILES
+ use_dos_char = true;
+#endif
+
// map each colour to itself as default
#ifdef USE_8_COLOUR_TERM_MAP
for (int i = 0; i < 16; i++)
@@ -1613,6 +1625,7 @@ void game_options::read_option_line(const std::string &str, bool runscript)
player_name = field;
}
#endif
+#ifndef USE_TILE
else if (key == "char_set" || key == "ascii_display")
{
bool valid = true;
@@ -1642,6 +1655,7 @@ void game_options::read_option_line(const std::string &str, bool runscript)
}
}
}
+#endif
else if (key == "default_autopickup")
{
// should autopickup default to on or off?
@@ -2602,6 +2616,21 @@ void game_options::read_option_line(const std::string &str, bool runscript)
else
pickup_mode = read_bool_or_number(field, pickup_mode, "auto:");
}
+
+#ifdef USE_TILE
+ else if (key == "show_items" )
+ {
+ strncpy(show_items, field.c_str(), 18);
+ }
+#endif
+
+#ifdef WIN32TILES
+ else if (key == "use_dos_char" )
+ {
+ use_dos_char = read_bool( field, use_dos_char );
+ }
+#endif
+
// Catch-all else, copies option into map
else if (runscript)
{
diff --git a/crawl-ref/source/invent.cc b/crawl-ref/source/invent.cc
index f55cdd856b..49e497070a 100644
--- a/crawl-ref/source/invent.cc
+++ b/crawl-ref/source/invent.cc
@@ -44,6 +44,8 @@
#include "menu.h"
#include "randart.h"
+#include "tiles.h"
+
///////////////////////////////////////////////////////////////////////////////
// Inventory menu shenanigans
@@ -350,6 +352,36 @@ void InvMenu::load_inv_items(int item_selector,
}
}
+void InvMenu::draw_stock_item(int index, const MenuEntry *me) const
+{
+#ifdef USE_TILE
+ const InvEntry *ie = dynamic_cast<const InvEntry*>(me);
+ if (ie && me->quantity > 0)
+ {
+ int draw_quantity = ie->quantity > 1 ? ie->quantity : -1;
+ bool is_item_on_floor = true;
+ bool is_item_tried = false;
+ char c = 0;
+ int idx = -1;
+ if (ie->item)
+ {
+ is_item_on_floor = ie->item->x != -1;
+ is_item_tried = item_type_tried(*ie->item);
+ c = ie->hotkeys.size() > 0 ? ie->hotkeys[0] : 0;
+ idx = (is_item_on_floor ? ie->item->index() :
+ letter_to_index(c));
+ }
+
+ TileDrawOneItem(REGION_INV2, get_entry_index(ie), c,
+ idx, tileidx_item(*ie->item), draw_quantity,
+ is_item_on_floor, ie->selected(), ie->is_item_equipped(),
+ is_item_tried, ie->is_item_cursed());
+ }
+#endif
+
+ Menu::draw_stock_item(index, me);
+}
+
template <std::string (*proc)(const InvEntry *a)>
int compare_item_str(const InvEntry *a, const InvEntry *b)
{
diff --git a/crawl-ref/source/invent.h b/crawl-ref/source/invent.h
index 74386687f0..747ebac85f 100644
--- a/crawl-ref/source/invent.h
+++ b/crawl-ref/source/invent.h
@@ -152,6 +152,7 @@ protected:
void sort_menu(std::vector<InvEntry*> &items,
const menu_sort_condition *cond);
const menu_sort_condition *find_menu_sort_condition() const;
+ virtual void draw_stock_item(int index, const MenuEntry *me) const;
protected:
menu_type type;
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 5aeccf8cf1..509aacc3aa 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -73,6 +73,7 @@
#include "spl-util.h"
#include "state.h"
#include "stuff.h"
+#include "tiles.h"
#include "transfor.h"
#include "tutorial.h"
#include "view.h"
@@ -220,7 +221,8 @@ bool wield_weapon(bool auto_wield, int slot, bool show_weff_messages)
// Prompt if not using the auto swap command, or if the swap slot
// is empty.
- if (!auto_wield || !is_valid_item(you.inv[item_slot]) || !good_swap)
+ if (item_slot != PROMPT_GOT_SPECIAL &&
+ (!auto_wield || !is_valid_item(you.inv[item_slot]) || !good_swap))
{
if (!auto_wield)
item_slot = prompt_invent_item(
@@ -731,11 +733,13 @@ static bool cloak_is_being_removed( void )
// wear_armour
//
//---------------------------------------------------------------
-void wear_armour(void)
+void wear_armour( int slot )
{
int armour_wear_2 = 0;
- if (!armour_prompt("Wear which item?", &armour_wear_2, OPER_WEAR))
+ if (slot != -1)
+ armour_wear_2 = slot;
+ else if (!armour_prompt("Wear which item?", &armour_wear_2, OPER_WEAR))
return;
if (safe_to_remove_or_wear(you.inv[armour_wear_2], false))
@@ -1175,7 +1179,7 @@ bool takeoff_armour(int item)
return true;
} // end takeoff_armour()
-void throw_anything(void)
+void throw_anything( int slot )
{
struct bolt beam;
int throw_slot;
@@ -1191,7 +1195,10 @@ void throw_anything(void)
return;
}
- throw_slot = prompt_invent_item( "Throw which item? (* to show all)",
+ if (slot != -1)
+ throw_slot = slot;
+ else
+ throw_slot = prompt_invent_item( "Throw which item? (* to show all)",
MT_INVLIST,
OBJ_MISSILES, true, true, true, 0, NULL,
OPER_THROW );
@@ -3121,7 +3128,7 @@ bool remove_ring(int slot, bool announce)
return (true);
} // end remove_ring()
-void zap_wand(void)
+void zap_wand( int slot )
{
bolt beam;
dist zap_wand;
@@ -3145,7 +3152,10 @@ void zap_wand(void)
return;
}
- item_slot = prompt_invent_item( "Zap which item?",
+ if (slot != -1)
+ item_slot = slot;
+ else
+ item_slot = prompt_invent_item( "Zap which item?",
MT_INVLIST,
OBJ_WANDS,
true, true, true, 0, NULL,
@@ -3325,7 +3335,7 @@ void inscribe_item()
}
}
-void drink(void)
+void drink( int slot )
{
int item_slot;
@@ -3335,11 +3345,14 @@ void drink(void)
return;
}
- if (grd[you.x_pos][you.y_pos] == DNGN_BLUE_FOUNTAIN
- || grd[you.x_pos][you.y_pos] == DNGN_SPARKLING_FOUNTAIN)
+ if (slot == -1)
{
- if (drink_fountain())
- return;
+ if (grd[you.x_pos][you.y_pos] == DNGN_BLUE_FOUNTAIN
+ || grd[you.x_pos][you.y_pos] == DNGN_SPARKLING_FOUNTAIN)
+ {
+ if (drink_fountain())
+ return;
+ }
}
if (inv_count() == 0)
@@ -3360,7 +3373,10 @@ void drink(void)
return;
}
- item_slot = prompt_invent_item( "Drink which item?",
+ if (slot != -1)
+ item_slot = slot;
+ else
+ item_slot = prompt_invent_item( "Drink which item?",
MT_INVLIST, OBJ_POTIONS,
true, true, true, 0, NULL,
OPER_QUAFF );
@@ -3824,7 +3840,7 @@ static void handle_read_book( int item_slot )
}
}
-void read_scroll(void)
+void read_scroll( int slot )
{
int affected = 0;
int i;
@@ -3847,7 +3863,9 @@ void read_scroll(void)
return;
}
- int item_slot = prompt_invent_item(
+ int item_slot = (slot != -1) ?
+ slot :
+ prompt_invent_item(
"Read which item?",
MT_INVLIST,
OBJ_SCROLLS,
@@ -4351,3 +4369,146 @@ bool wearing_slot(int inv_slot)
return true;
return false;
}
+
+#ifdef USE_TILE
+// Interactive menu for item drop/use
+void use_item(int idx, InvAction act)
+{
+ if (act == INV_PICKUP)
+ {
+ pickup_single_item(idx, mitm[idx].quantity);
+ return;
+ }
+ else if (act == INV_DROP)
+ {
+#ifdef USE_TILE
+ TileMoveInvCursor(-1);
+#endif
+ drop_item(idx, you.inv[idx].quantity);
+ return;
+ }
+ else if (act != INV_USE)
+ {
+ return;
+ }
+
+ // Equipped?
+ bool equipped = false;
+ for (unsigned int i=0; i< NUM_EQUIP;i++)
+ {
+ if (you.equip[i] == idx)
+ {
+ equipped = true;
+ break;
+ }
+ }
+
+#ifdef USE_TILE
+ TileMoveInvCursor(-1);
+#endif
+
+ // Special case for folks who are wielding something
+ // that they shouldn't be wielding.
+ if (you.equip[EQ_WEAPON] == idx)
+ {
+ if (!check_warning_inscriptions(you.inv[idx], OPER_WIELD))
+ return;
+
+ wield_weapon(true, PROMPT_GOT_SPECIAL);
+ return;
+ }
+
+ // Use it
+ switch (you.inv[idx].base_type)
+ {
+ case OBJ_WEAPONS:
+ case OBJ_STAVES:
+ if (!check_warning_inscriptions(you.inv[idx], OPER_WIELD))
+ return;
+ if (equipped)
+ wield_weapon(true, PROMPT_GOT_SPECIAL);
+ else
+ wield_weapon(true, idx);
+ return;
+
+ case OBJ_MISCELLANY:
+ if (equipped)
+ {
+ if (!check_warning_inscriptions(you.inv[idx], OPER_EVOKE))
+ return;
+ evoke_wielded();
+ }
+ else
+ {
+ if (!check_warning_inscriptions(you.inv[idx], OPER_WIELD))
+ return;
+ wield_weapon(true, idx);
+ }
+ return;
+
+ case OBJ_MISSILES:
+ if (!check_warning_inscriptions(you.inv[idx], OPER_THROW))
+ return;
+ throw_anything(idx);
+ return;
+
+ case OBJ_ARMOUR:
+ if (equipped)
+ {
+ if (!check_warning_inscriptions(you.inv[idx], OPER_TAKEOFF))
+ return;
+ takeoff_armour(idx);
+ }
+ else
+ {
+ if (!check_warning_inscriptions(you.inv[idx], OPER_WEAR))
+ return;
+ wear_armour(idx);
+ }
+ return;
+
+ case OBJ_WANDS:
+ if (!check_warning_inscriptions(you.inv[idx], OPER_ZAP))
+ return;
+ zap_wand(idx);
+ return;
+
+ case OBJ_FOOD:
+ if (!check_warning_inscriptions(you.inv[idx], OPER_EAT))
+ return;
+ eat_food(false, idx);
+ return;
+
+ case OBJ_SCROLLS:
+ case OBJ_BOOKS:
+ if (!check_warning_inscriptions(you.inv[idx], OPER_READ))
+ return;
+ read_scroll(idx);
+ return;
+
+ case OBJ_JEWELLERY:
+ if (equipped)
+ {
+ if (!check_warning_inscriptions(you.inv[idx], OPER_REMOVE))
+ return;
+ remove_ring(idx);
+ }
+ else
+ {
+ if (!check_warning_inscriptions(you.inv[idx], OPER_PUTON))
+ return;
+ puton_ring(idx, false);
+ }
+ return;
+
+ case OBJ_POTIONS:
+ if (!check_warning_inscriptions(you.inv[idx], OPER_QUAFF))
+ return;
+ drink(idx);
+ return;
+
+ default:
+ return;
+ }
+}
+#endif
diff --git a/crawl-ref/source/item_use.h b/crawl-ref/source/item_use.h
index e191c6833d..e4d09c72a3 100644
--- a/crawl-ref/source/item_use.h
+++ b/crawl-ref/source/item_use.h
@@ -64,7 +64,7 @@ bool takeoff_armour(int index);
/* ***********************************************************************
* called from: acr
* *********************************************************************** */
-void drink(void);
+void drink(int slot = -1);
bool elemental_missile_beam(int launcher_brand, int ammo_brand);
@@ -88,7 +88,7 @@ bool puton_ring(int slot = -1, bool prompt_finger = true);
/* ***********************************************************************
* called from: acr
* *********************************************************************** */
-void read_scroll(void);
+void read_scroll(int slot = -1);
// last updated 12may2000 {dlb}
@@ -111,14 +111,14 @@ void shoot_thing(void);
/* ***********************************************************************
* called from: acr
* *********************************************************************** */
-void throw_anything(void);
+void throw_anything(int slot = -1);
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: acr
* *********************************************************************** */
-void wear_armour( void );
+void wear_armour( int slot = -1 );
bool can_wear_armour(const item_def &item, bool verbose, bool ignore_temporary);
@@ -147,7 +147,7 @@ bool wield_weapon(bool auto_wield, int slot = -1, bool show_we_messages = true);
/* ***********************************************************************
* called from: acr
* *********************************************************************** */
-void zap_wand(void);
+void zap_wand(int slot = -1);
// last updated 15jan2001 {gdl}
@@ -184,4 +184,11 @@ int item_special_wield_effect(const item_def &item);
bool wearing_slot(int inv_slot);
+#ifdef USE_TILE
+/* ***********************************************************************
+ * * called from: acr
+ * * *********************************************************************** */
+void use_item(int idx, InvAction act);
+#endif
+
#endif
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc
index 184a24eecc..d5346e87c6 100644
--- a/crawl-ref/source/items.cc
+++ b/crawl-ref/source/items.cc
@@ -67,6 +67,7 @@
#include "spl-util.h"
#include "stuff.h"
#include "stash.h"
+#include "tiles.h"
#include "state.h"
#include "terrain.h"
#include "transfor.h"
diff --git a/crawl-ref/source/libgui.cc b/crawl-ref/source/libgui.cc
new file mode 100644
index 0000000000..08e00b2a5d
--- /dev/null
+++ b/crawl-ref/source/libgui.cc
@@ -0,0 +1,2172 @@
+/*
+ * File: libx11.cc
+ * Summary: Functions for x11
+ * Written by: M.Itakura
+ *
+ * Change History (most recent first):
+ *
+ * <1> 03/08/11 Ita copied from liblinux.cc and modified
+ *
+ */
+
+#define deblog(x) {FILE *ddfp=fopen("log.txt","a");fprintf(ddfp,x);fprintf(ddfp,"\n");fclose(ddfp);}
+#define deblog2(x,y) {FILE *ddfp=fopen("log.txt","a");fprintf(ddfp,"%s %d\n",x,y);fclose(ddfp);}
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "AppHdr.h"
+#include "cio.h"
+#include "defines.h"
+#include "describe.h"
+#include "direct.h"
+#include "files.h"
+#include "itemname.h"
+#include "items.h"
+#include "externs.h"
+#include "guic.h"
+#include "message.h"
+#include "player.h"
+#include "stash.h"
+#include "state.h"
+#include "stuff.h"
+#include "terrain.h"
+#include "tiles.h"
+#include "travel.h"
+#include "version.h"
+#include "view.h"
+
+int tile_dngn_x;
+int tile_dngn_y;
+#define DCX (tile_dngn_x/2)
+#define DCY (tile_dngn_y/2)
+
+// libx11.cc or libwt.cc
+extern void update_tip_text(const char *tip);
+extern void libgui_init_sys();
+extern void libgui_shutdown_sys();
+extern void GetNextEvent(int *etype,
+ int *key, bool *shift, bool *ctrl,
+ int *x1, int *y1, int *x2, int *y2);
+#ifdef WIN32TILES
+// libwt.cc
+extern bool windows_change_font(char *font_name, int *font_size, bool dos);
+extern void windows_get_winpos(int *x, int *y);
+extern void TileInitWin();
+#endif
+
+// Main window
+WinClass *win_main;
+// Regions
+TextRegionClass *region_crt = NULL;
+MapRegionClass *region_map = NULL;
+TileRegionClass *region_tile = NULL;
+TextRegionClass *region_stat = NULL;
+TextRegionClass *region_msg = NULL;
+TextRegionClass *region_dngn = NULL;
+TextRegionClass *region_xmap = NULL;
+TextRegionClass *region_tip = NULL;
+
+TileRegionClass *region_item = NULL;
+TileRegionClass *region_item2 = NULL;
+
+// Raw tile images
+img_type TileImg, TileIsoImg;
+img_type PlayerImg;
+img_type WallImg;
+
+extern bool force_redraw_tile;
+extern bool force_redraw_inv;
+
+// for item use gui
+#define MAX_ITEMLIST 60
+extern int itemlist[MAX_ITEMLIST];
+extern int itemlist_num[MAX_ITEMLIST];
+extern int itemlist_idx[MAX_ITEMLIST];
+extern char itemlist_key[MAX_ITEMLIST];
+extern int itemlist_iflag[MAX_ITEMLIST];
+extern int itemlist_flag;
+extern int itemlist_n;
+
+static bool gui_smart_cursor = false;
+
+// Window prefs
+static int crt_x = 80;
+static int crt_y = 30;
+static int map_px = 3;
+static int msg_x = 80, msg_y = 8;
+static int dngn_x = 17, dngn_y = 17;
+static int winox = 0, winoy = 0;
+#define MAX_PREF_CHAR 256
+
+#ifdef USE_X11
+#define UseDosChar false
+static char font_name[MAX_PREF_CHAR+1] = "8x16";
+#endif
+
+#ifdef WIN32TILES
+static char font_name[MAX_PREF_CHAR+1] = "courier";
+#define UseDosChar (Options.use_dos_char)
+static char dos_font_name[MAX_PREF_CHAR+1] = "Terminal";
+static int dos_font_size = 16;
+#endif
+
+static int font_size = 12;
+
+#define PREF_MODE_TEXT 0
+#define PREF_MODE_TILE 1
+#define PREF_MODE_ISO 2
+#define PREF_MODE_NUM 3
+static const char *pref_mode_name[PREF_MODE_NUM]
+ ={ "Text", "Tile", "Iso"};
+
+typedef struct prefs
+{
+ const char *name;
+ const char *tagname;
+ char type;
+ void *ptr;
+ int min, max;
+ int dummy_idx;
+}prefs;
+
+#ifdef WIN32TILES
+#define MAX_PREFS 11
+#else
+#define MAX_PREFS 9
+#endif
+
+#define MAX_EDIT_PREFS 5
+static int dummy_int[PREF_MODE_NUM][8];
+static char dummy_str[PREF_MODE_NUM][2][MAX_PREF_CHAR+1];
+struct prefs pref_data[MAX_PREFS] =
+{
+ {"DUNGEON X", "DngnX", 'I', &dngn_x, 17, 35, 0},
+ {"DUNGEON Y", "DngnY", 'I', &dngn_y, 17, 35, 1},
+ {"MAP PX ", "MapPx", 'I', &map_px, 1, 10, 2},
+ {"MSG X ", "MsgX", 'I', &msg_x, 40, 80, 3},
+ {"MSG Y ", "MsgY", 'I', &msg_y, 8, 20, 4},
+ {"WIN TOP ", "WindowTop", 'I', &winox, -100, 2000, 5},
+ {"WIN LEFT ", "WindowLeft",'I', &winoy, -100, 2000, 6},
+ {"FONT ", "FontName", 'S', font_name, 0,0, 0},
+ {"FONT SIZE", "FontSize", 'I', &font_size, 8,24, 7}
+#ifdef WIN32TILES
+ ,{"DOS FONT", "DosFontName", 'S', dos_font_name, 0,0, 1},
+ {"DOS FONT SIZE", "DosFontSize", 'I', &dos_font_size, 8,24, 8}
+#endif
+};
+
+static int pref_mode = 0;
+static void libgui_load_prefs();
+static void libgui_save_prefs();
+
+//Internal variables
+
+static int mouse_mode = MOUSE_MODE_NORMAL;
+// hack: prevent clrscr for some region
+static bool region_lock[NUM_REGIONS];
+static bool toggle_telescope;
+
+#define char_is_wall(ch) (ch == 127 || (ch >= 137 && ch <= 140) \
+ || ch == 177 || ch == 176 || ch == '#')
+
+#define char_is_item(ch) ( (ch == 33)||(ch == 34)||(ch == 36)||(ch == 37) \
+ ||(ch == 40) ||(ch == 41)||(ch == 43)||(ch == 47)||(ch == 48) \
+ ||(ch == 58) ||(ch == 61)||(ch == 63)||(ch == 88)||(ch == 91) \
+ ||(ch == 92) ||(ch == 93)||(ch == 125) || (ch == '~'))
+
+#define char_is_monster(ch) ( (ch>='@' && ch<='Z') || (ch>='a' && ch<='z') \
+ || ch=='&' || (ch>='1' && ch<='5') || ch == ';')
+
+/***********************************************************/
+//micromap color array
+#define MAP_XMAX GXM
+#define MAP_YMAX GYM
+
+static unsigned char gmap_data[GXM][GYM];
+static int gmap_min_x, gmap_max_x;
+static int gmap_min_y, gmap_max_y;
+static int gmap_ox, gmap_oy;
+
+// redefine color constants with shorter name to save space
+#define PX_0 MAP_BLACK //unseen
+#define PX_F MAP_LTGREY //floor
+#define PX_W MAP_DKGREY //walls
+#define PX_D MAP_BROWN //doors
+#define PX_WB MAP_LTBLUE //blue wall
+#define PX_I MAP_GREEN //items
+#define PX_M MAP_RED //monsters
+#define PX_US MAP_BLUE //upstair
+#define PX_DS MAP_MAGENTA //downstair
+#define PX_SS MAP_CYAN //special stair
+#define PX_WT MAP_MDGREY //water
+#define PX_LV MAP_MDGREY //lava
+#define PX_T MAP_YELLOW //trap
+#define PX_MS MAP_CYAN //misc
+
+ static const char gmap_col[256] = {
+ /* 0x00 */ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0x08 */ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0x10 */ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0x18 */ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+
+ /* ' ' '!' '"' '#' '$' '%' '&' ''' */
+ /* 0x20 */ PX_0, PX_I, PX_I, PX_F, PX_I, PX_I, PX_M, PX_D,
+ /* '(' ')' '*' '+' ',' '-' '.' '/' */
+ /* 0x28 */ PX_I, PX_I, PX_WB,PX_I, PX_F, PX_0, PX_F, PX_I,
+ /* 0 1 2 3 4 5 6 7 */
+ /* 0x30 */ PX_0, PX_M, PX_M, PX_M, PX_M, PX_M, PX_0, PX_0,
+ /* 8 9 : ; < = > ? */
+ /* 0x38 */ PX_MS,PX_0, PX_0, PX_M, PX_US,PX_I, PX_DS,PX_I,
+ /* @ A B C D E F G */
+ /* 0x40 */ PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M,
+ /* H I J K L M N O */
+ /* 0x48 */ PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M,
+ /* P Q R S T U V W */
+ /* 0x50 */ PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M,
+ /* X Y Z [ \ ] ^ _ */
+ /* 0x58 */ PX_M, PX_M, PX_M, PX_I, PX_I, PX_I, PX_T, PX_MS,
+ /* ` a b c d e f g */
+ /* 0x60 */ PX_0, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M,
+ /* h i j k l m n o */
+ /* 0x68 */ PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M,
+ /* p q r s t u v w */
+ /* 0x70 */ PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M, PX_M,
+ /* x y z { | } ~ WALL */
+ /* 0x78 */ PX_M, PX_M, PX_M, PX_WT,PX_0, PX_I, PX_I, PX_W,
+ /* old cralwj symbols */
+ /* �� �s �E �� �� �� �� �� */
+ /* 0x80 */ PX_D, PX_SS,PX_F, PX_MS,PX_MS,PX_MS,PX_D, PX_WT,
+ /* �t �� �� �� �� �� �� */
+ /* 0x88 */ PX_SS,PX_W, PX_W, PX_W, PX_W, PX_LV, PX_I, PX_0,
+ /**/
+ /* 0x90 144*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0x98 152*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xa0 160*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xa8 168*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xb0 176*/ PX_WB,PX_W, PX_W, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xb8 184*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xc0 192*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xc8 200*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xd0 208*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xd8 216*/ PX_0, PX_0, PX_0, PX_0, PX_MS, PX_0, PX_0, PX_0,
+ /* 0xe0 224*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0,
+ /* 0xe8 232*/ PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_0, PX_MS,
+ /* 0xf0 240*/ PX_0, PX_0, PX_0, PX_0, PX_MS,PX_0, PX_0, PX_WT,
+ /* 0xf8 248*/ PX_0, PX_F, PX_F, PX_0, PX_0, PX_0, PX_D, PX_0
+};
+
+int mouse_grid_x;
+int mouse_grid_y;
+bool mouse_in_dngn = false;
+
+void gui_set_mouse_view_pos(bool in_dngn, int cx, int cy)
+{
+ const coord_def& gc = view2grid(coord_def(cx,cy));
+ mouse_grid_x = gc.x;
+ mouse_grid_y = gc.y;
+ ASSERT(!in_dngn || gc.x >= 0 && gc.y >= 0 && gc.x < GXM && gc.y < GYM);
+
+ mouse_in_dngn = in_dngn;
+}
+
+bool gui_get_mouse_grid_pos(coord_def &gc)
+{
+ if (mouse_in_dngn)
+ {
+ gc.x = mouse_grid_x;
+ gc.y = mouse_grid_y;
+ ASSERT(gc.x >= 0 && gc.y >= 0 && gc.x < GXM && gc.y < GYM);
+ }
+
+ return mouse_in_dngn;
+}
+
+int inv_idx = 0;
+InvAction inv_action = INV_NUMACTIONS;
+
+void gui_set_mouse_inv(int idx, InvAction act)
+{
+ inv_idx = idx;
+ inv_action = act;
+}
+
+void gui_get_mouse_inv(int &idx, InvAction &act)
+{
+ idx = inv_idx;
+ act = inv_action;
+}
+
+int tile_idx_unseen_terrain(int x, int y, int what)
+{
+ const coord_def gc(x,y);
+ unsigned int feature = grd(gc);
+
+ unsigned int grid_symbol;
+ unsigned short grid_color;
+ get_item_symbol(feature, &grid_symbol, &grid_color);
+
+ if (feature == DNGN_SECRET_DOOR)
+ feature = (unsigned int)grid_secret_door_appearance(x, y);
+
+ int t = tileidx_feature(feature);
+ if (t == TILE_ERROR || what == ' ')
+ t = tileidx_unseen(what, gc);
+
+ t |= tile_unseen_flag(gc);
+
+ return t;
+}
+
+void GmapUpdate(int x, int y, int what, bool upd_tile)
+{
+ int c;
+ const coord_def gc(x,y);
+ unsigned int feature = grd(gc);
+
+ unsigned int grid_symbol;
+ unsigned short grid_color;
+ get_item_symbol(feature, &grid_symbol, &grid_color);
+
+ switch (what)
+ {
+ // In some cases (like smoke), update the gmap with the ground color
+ // instead. This keeps it prettier in the case of lava + smoke.
+ case '#':
+ c = gmap_col[grid_symbol & 0xff];
+ break;
+ default:
+ c = gmap_col[what & 0xff];
+ break;
+ }
+
+ int oldc = gmap_data[x][y];
+ gmap_data[x][y] = c;
+
+ // NOTE: In the case of a magic mapping, we really want the
+ // map to update with the correct feature (stone instead of rock wall,
+ // fountains instead of TILE_ERROR). tileidx_unseen won't give that
+ // to us. However, we can't give the player all the information,
+ // since that might be cheating in some cases. This could be rewritten.
+ int t = tile_idx_unseen_terrain(x, y, what);
+
+ if (c!=0 && c!= oldc && upd_tile)
+ {
+ if (c == PX_I || c == PX_M)
+ {
+ env.tile_bk_fg[x][y]= t;
+ if (env.tile_bk_bg[x][y] == 0)
+ env.tile_bk_bg[x][y] = tileidx_feature(DNGN_UNSEEN);
+ }
+ else
+ {
+ env.tile_bk_bg[x][y] = t;
+ }
+ }
+ else if (c==0)
+ {
+ // forget map
+ env.tile_bk_fg[x][y]=0;
+ env.tile_bk_bg[x][y]=t;
+ return;
+ }
+
+ if (x < gmap_min_x) gmap_min_x = x;
+ else
+ if (x > gmap_max_x) gmap_max_x = x;
+
+ if (y < gmap_min_y) gmap_min_y = y;
+ else
+ if (y > gmap_max_y) gmap_max_y = y;
+}
+
+void GmapInit(bool upd_tile)
+{
+ int x, y;
+ gmap_min_x = gmap_max_x = you.x_pos -1;
+ gmap_min_y = gmap_max_y = you.y_pos -1;
+
+ for (y = 0; y < GYM; y++)
+ {
+ for (x = 0; x < GXM; x++)
+ {
+ GmapUpdate(x, y, env.map[x][y].glyph(), upd_tile);
+ }
+ }
+}
+
+void GmapDisplay(int linex, int liney)
+{
+ static unsigned char buf2[GXM*GYM];
+
+ int x,y;
+ int count=0;
+ int ox, oy;
+
+ for (x = 0; x < GXM*GYM; x++)
+ {
+ buf2[x] = 0;
+ }
+
+ ox = ( gmap_min_x + (GXM -1 - gmap_max_x) ) / 2;
+ oy = ( gmap_min_y + (GYM -1 - gmap_max_y) ) / 2;
+ count = ox + oy * GXM;
+ gmap_ox = ox - gmap_min_x;
+ gmap_oy = oy - gmap_min_y;
+
+ for (y = gmap_min_y; y <= gmap_max_y; y++)
+ {
+ for (x = gmap_min_x; x <= gmap_max_x; x++)
+ {
+ if ( (count>=0)&&(count<GXM*GYM) )
+ buf2[count] = gmap_data[x][y];
+ count += 1;
+ }
+ count += GXM - (gmap_max_x - gmap_min_x + 1);
+ }
+
+ if ( (you.level_type != LEVEL_LABYRINTH)&&(you.level_type != LEVEL_ABYSS) )
+ {
+ ox += linex - gmap_min_x;
+ oy += liney - gmap_min_y;
+ buf2[ ox + oy * GXM] = MAP_WHITE;
+ }
+
+ region_map->flag = true;
+ region_map->draw_data(buf2);
+}
+
+/* initialize routines */
+static void do_layout()
+{
+#define LAYER_NML 0
+#define LAYER_CRT 1
+#define LAYER_XMAP 2
+ win_main->wx = win_main->wy = 10;
+
+ int tm = region_crt->dx;
+
+ if (UseDosChar)
+ win_main->placeRegion(region_xmap, LAYER_XMAP, 0, 0, tm, tm, tm, tm);
+
+ RegionClass *lowest;
+
+ // tile 2d mode
+ win_main->placeRegion(region_tile, LAYER_NML, 0, 0);
+ win_main->placeRegion(region_msg, LAYER_NML, region_tile, PLACE_BOTTOM,
+ tm, tm, tm, tm);
+
+ int sx = std::max(region_msg->ex + region_msg->dx, region_tile->ex);
+ int sy = 0;
+ win_main->placeRegion(region_stat, LAYER_NML, sx, sy);
+
+ win_main->placeRegion(region_map, LAYER_NML, region_stat, PLACE_BOTTOM);
+
+ if (region_tip)
+ {
+ win_main->placeRegion(region_tip, LAYER_NML, region_map, PLACE_BOTTOM);
+ lowest = region_tip;
+ }
+ else
+ {
+ lowest = region_map;
+ }
+
+ int item_x = (win_main->wx-2*tm) / TILE_X;
+ int item_y = (52 + item_x -1) / item_x;
+
+ region_item2 -> resize(item_x, item_y, TILE_X, TILE_Y);
+
+ // Update crt size appropriately, based on the window size.
+ int crt_pwx = win_main->wx;
+ int crt_wx = crt_pwx / region_crt->dx;
+ int crt_pwy = win_main->wy - 2*tm - item_y * region_item2->dy;
+ int crt_wy = crt_pwy / region_crt->dy;
+ region_crt->resize(crt_wx, crt_wy);
+
+ win_main->placeRegion(region_crt, LAYER_CRT, 0, 0, tm, tm, tm, tm);
+ win_main->placeRegion (region_item2, LAYER_CRT, region_crt, PLACE_BOTTOM,
+ tm, tm, tm, tm);
+
+ if (Options.show_items[0] != 0)
+ {
+ item_x = (win_main->wx - lowest->sx) / TILE_X;
+ item_y = (win_main->wy - lowest->ey) / TILE_Y;
+ RegionClass *r0 = lowest;
+ int place = PLACE_BOTTOM;
+
+ int item_x2 = (win_main->wx - region_msg->ex) / TILE_X;
+ int item_y2 = (win_main->wy - region_msg->sy) / TILE_Y;
+
+ if (item_x * item_y < item_x2 * item_y2 &&
+ lowest->ey < region_msg->sy)
+ {
+ item_x = item_x2;
+ item_y = item_y2;
+ r0 = region_msg;
+ place = PLACE_RIGHT;
+ }
+ while(item_x * item_y < 40) item_y++;
+ region_item -> resize(item_x, item_y, TILE_X, TILE_Y);
+ win_main->placeRegion (region_item, LAYER_NML, r0, place);
+ }
+}
+
+void libgui_init()
+{
+ int i;
+ int map_margin = 2;
+
+ libgui_init_sys();
+
+ for(i=0;i<NUM_REGIONS;i++)
+ region_lock[i] = false;
+
+ pref_mode = PREF_MODE_TILE;
+
+ libgui_load_prefs();
+
+ // Adjust sizes
+ if (dngn_x & 1 ==0) dngn_x++;
+ if (dngn_y & 1 ==0) dngn_y++;
+ if (font_size &1 == 1) font_size--;
+
+ tile_dngn_x = dngn_x;
+ tile_dngn_y = dngn_y;
+
+ /****************************************************/
+
+ win_main = new WinClass();
+ win_main->ox = winox;
+ win_main->oy = winoy;
+
+
+ region_crt = new TextRegionClass(crt_x, crt_y, 0, 0);
+ region_crt->id = REGION_CRT;
+ TextRegionClass::text_mode = region_crt;
+
+ region_map =
+ new MapRegionClass(MAP_XMAX-map_margin*2,
+ MAP_YMAX-map_margin*2,
+ map_margin, map_margin,
+ false);
+ region_map->id = REGION_MAP;
+ region_map->dx = map_px;
+ region_map->dy = map_px;
+
+ TileInit();
+
+#ifdef WIN32TILES
+ TileInitWin();
+#endif
+
+ if (Options.show_items[0] != 0)
+ {
+ // temporal size
+ region_item = new TileRegionClass(1, 1, TILE_X, TILE_Y);
+ region_item->id = REGION_INV1;
+ }
+ // temporal size
+ region_item2 = new TileRegionClass(1, 1, TILE_X, TILE_Y);
+ region_item2->id = REGION_INV2;
+
+ region_tile =
+ new TileRegionClass(tile_dngn_x, tile_dngn_y,
+ TILE_UX_NORMAL, TILE_UY_NORMAL);
+ region_tile->id = REGION_DNGN;
+
+#if DEBUG_DIAGNOSTICS
+ // one more line for debug GPS
+ region_stat = new TextRegionClass(40, 17, 0, 0);
+#else
+ region_stat = new TextRegionClass(40, 16, 0, 0);
+#endif
+ region_stat->id = REGION_STAT;
+ region_msg = new TextRegionClass(msg_x, msg_y, 0, 0);
+ region_msg->id = REGION_MSG;
+
+ if (UseDosChar)
+ {
+ region_xmap = new TextRegionClass(crt_x, crt_y, 0, 0);
+ region_xmap->id = REGION_XMAP;
+ }
+
+#ifdef WIN32TILES
+ region_crt->init_font(font_name, font_size);
+ region_stat->copy_font(region_crt);
+ region_msg->copy_font(region_crt);
+
+ if (UseDosChar)
+ {
+ region_xmap->dos_char = true;
+ region_xmap->init_font(dos_font_name, dos_font_size);
+ }
+
+#elif defined(USE_X11)
+ region_tip = new TextRegionClass(region_stat->mx, 1, 0, 0);
+ region_tip->id = REGION_TIP;
+
+ region_crt->init_font(font_name);
+ region_stat->init_font(font_name);
+ region_msg->init_font(font_name);
+ region_tip->init_font(font_name);
+ if (region_dngn) region_dngn->init_font(font_name);
+#endif
+
+ do_layout();
+
+ win_main->create((char*)(CRAWL " " VERSION));
+
+ region_map->init_backbuf();
+
+ region_tile -> init_backbuf();
+ region_item2->init_backbuf();
+ if (region_item) region_item->init_backbuf();
+}
+
+void libgui_shutdown()
+{
+
+ if(TileImg) ImgDestroy(TileImg);
+ if(PlayerImg) ImgDestroy(PlayerImg);
+ if(WallImg) ImgDestroy(WallImg);
+ if(TileIsoImg) ImgDestroy(TileIsoImg);
+
+ // do this before delete win_main
+ libgui_save_prefs();
+
+ std::vector<RegionClass *>::iterator r;
+ for (r = win_main->regions.begin();r != win_main->regions.end();r++)
+ {
+ RegionClass* pRegion = *r;
+ delete (pRegion);
+ }
+
+ delete win_main;
+
+
+ libgui_shutdown_sys();
+}
+
+/*** Save, Load, and Edit window prefs ***/
+static void libgui_load_prefs()
+{
+ int i, mode;
+ FILE *fp;
+ char buf[256];
+ char tagbuf[256];
+
+ // set default
+ for (mode = 0; mode < PREF_MODE_NUM; mode++)
+ {
+ for(i=0;i<MAX_PREFS;i++)
+ {
+ struct prefs *p = &pref_data[i];
+ int idx = p->dummy_idx;
+ if (p->type == 'I')
+ dummy_int[mode][idx] = *(int *)p->ptr;
+ else if (p->type == 'S')
+ strncpy(dummy_str[mode][idx], (char *)p->ptr, MAX_PREF_CHAR);
+ }
+ }
+
+ const char *baseTxt = "wininit.txt";
+ std::string winTxtString = datafile_path(baseTxt, true, true);
+ const char *winTxt = winTxtString.c_str()[0] == 0 ?
+ baseTxt : winTxtString.c_str();
+
+ if ( (fp = fopen(winTxt, "r")) != NULL )
+ {
+ while(!feof(fp))
+ {
+ fgets(buf, 250, fp);
+ i = 0;
+ while(buf[i] >= 32 && i< 120) i++;
+ buf[i] = 0;
+
+ for(i=0;i<MAX_PREFS;i++)
+ {
+ struct prefs *p = &pref_data[i];
+ for (mode = 0; mode < PREF_MODE_NUM; mode++)
+ {
+ sprintf(tagbuf, "%s:%s",
+ pref_mode_name[mode], p->tagname);
+ if(strncmp(buf, tagbuf, strlen(tagbuf)) == 0)
+ {
+ char *dat = &buf[strlen(tagbuf)+1];
+ if (p->type == 'I')
+ {
+ int val = atoi(dat);
+ if (val > p->max) val = p->max;
+ if (val < p->min) val = p->min;
+ dummy_int[mode][p->dummy_idx] = val;
+ if (mode == pref_mode)
+ *(int *)p->ptr = val;
+ }
+ if (p->type == 'S')
+ {
+ strncpy(dummy_str[mode][p->dummy_idx], dat,
+ MAX_PREF_CHAR);
+ if (mode == pref_mode)
+ strncpy((char *)p->ptr, dat, MAX_PREF_CHAR);
+ }
+ break;
+ }// tag match
+ } //mode
+ }//i
+ }// while
+ }
+}
+
+static void libgui_save_prefs()
+{
+ int i, mode;
+ FILE *fp;
+
+ winox = win_main->ox;
+ winoy = win_main->oy;
+#ifdef WIN32TILES
+ windows_get_winpos(&winox, &winoy);
+#endif
+
+ for(i=0;i<MAX_PREFS;i++)
+ {
+ struct prefs *p = &pref_data[i];
+ int idx = p->dummy_idx;
+ if (p->type == 'I')
+ dummy_int[pref_mode][idx] = *(int *)p->ptr;
+ else if (p->type == 'S')
+ strncpy(dummy_str[pref_mode][idx], (char *)p->ptr, MAX_PREF_CHAR);
+ }
+
+ const char *baseTxt = "wininit.txt";
+ std::string winTxtString = datafile_path(baseTxt, false, true);
+ const char *winTxt = winTxtString.c_str()[0] == 0 ?
+ baseTxt : winTxtString.c_str();
+
+ if ( (fp = fopen(winTxt, "w")) != NULL )
+ {
+ for (mode = 0; mode < PREF_MODE_NUM; mode++)
+ {
+ for(i=0;i<MAX_PREFS;i++)
+ {
+ struct prefs *p = &pref_data[i];
+ int idx = p->dummy_idx;
+ if (p->type == 'I')
+ fprintf(fp, "%s:%s=%d\n", pref_mode_name[mode],
+ p->tagname, dummy_int[mode][idx]);
+ if (p->type == 'S')
+ fprintf(fp, "%s:%s=%s\n", pref_mode_name[mode],
+ p->tagname, dummy_str[mode][idx]);
+ }
+ fprintf(fp, "\n");
+ }
+ fclose(fp);
+ }
+}
+
+static void draw_hgauge(int x, int y, int ofs, int region, int len, int col)
+{
+ int i;
+ gotoxy(x, y, region);
+ textcolor(col);
+ for (i=0; i < len; i++)
+ {
+ switch((i+ ofs) % 10)
+ {
+ case 0: cprintf("%c",'+');break;
+ case 4: cprintf("%c",'0' + (1+(i+ofs)/10)%10);break;
+ case 5: cprintf("%c",'0');break;
+ default: cprintf("%c",'-');
+ }
+ }
+}
+
+static void draw_vgauge(int x, int y, int ofs, int region, int len, int col)
+{
+ int i;
+ textcolor(col);
+ for (i=0; i < len; i++)
+ {
+ gotoxy(x, y+i, region);
+ cprintf("%02d", ofs+i);
+ }
+}
+
+void edit_prefs()
+{
+
+ int i;
+ int cur_pos = 0;
+ cursor_control cs(false);
+ bool need_draw_stat = true;
+ bool need_draw_msg = true;
+
+ if (region_tip)
+ region_tip->clear();
+ region_stat->clear();
+ region_msg->clear();
+ viewwindow(true, false);
+
+ while(1)
+ {
+ bool upd_msg = false;
+ bool upd_dngn = false;
+ bool upd_crt = false;
+ bool upd_map = false;
+ bool need_resize = false;
+ int inc = 0;
+
+ if (need_draw_msg)
+ {
+ textcolor(LIGHTGREY);
+ region_msg->clear();
+
+ textcolor(WHITE);
+ gotoxy (4, 4, GOTO_MSG);
+ cprintf("j, k, up, down : Select pref");
+ gotoxy (4, 5, GOTO_MSG);
+ cprintf("h, l, left, right : Decrease/Increase");
+ gotoxy (4, 6, GOTO_MSG);
+ cprintf("H, L : Dec/Inc by 10");
+ need_draw_msg = false;
+ }
+
+ if (need_draw_stat)
+ {
+ region_stat->clear();
+ for(i=0; i<MAX_EDIT_PREFS;i++)
+ {
+ struct prefs *p = &pref_data[i];
+ gotoxy(2, i+2, GOTO_STAT);
+ if (i == cur_pos)
+ {
+ textcolor(0xf0);
+ cprintf(">");
+ }
+ else
+ {
+ textcolor(LIGHTGREY);
+ cprintf(" ");
+ }
+ if (pref_data[i].type == 'I')
+ cprintf(" %s: %3d ", p->name, *(int *)p->ptr);
+ else
+ cprintf(" %s: %s", p->name, (char *)p->ptr);
+ }
+ textcolor(LIGHTGREY);
+
+#ifdef WIN32TILES
+ gotoxy(4, MAX_EDIT_PREFS+3, GOTO_STAT);
+ cprintf("FONT: %s %d",font_name, font_size);
+ if (UseDosChar)
+ {
+ gotoxy(4, MAX_EDIT_PREFS+4, GOTO_STAT);
+ cprintf("DOSFONT: %s %d", dos_font_name, dos_font_size);
+ }
+#else
+ gotoxy(4, MAX_EDIT_PREFS+3, GOTO_STAT);
+ cprintf("FONT: %s",font_name);
+#endif
+
+
+ int *dat = (int *)pref_data[cur_pos].ptr;
+#define WHITEIF(x) (dat == &x)?0xf0:LIGHTGREY
+
+ draw_hgauge(3, 1, 3, GOTO_MSG, msg_x-2, WHITEIF(msg_x));
+ clear_to_end_of_line();
+ draw_vgauge(1, 1, 1, GOTO_MSG, msg_y, WHITEIF(msg_y));
+ need_draw_stat = false;
+ }
+
+ int key = getch();
+
+ struct prefs *p = &pref_data[cur_pos];
+ int *dat = (int *)p->ptr;
+
+ if (key == 0x1b || key == '\r') break;
+ if (key == 'j' || key == CK_DOWN)
+ {
+ cur_pos++;
+ need_draw_stat = true;
+ }
+ if (key == 'k' || key == CK_UP)
+ {
+ cur_pos--;
+ need_draw_stat = true;
+ }
+ if (key == CK_LEFT) key = 'h';
+ if (key == CK_RIGHT) key = 'l';
+
+ cur_pos = (cur_pos + MAX_EDIT_PREFS) % MAX_EDIT_PREFS;
+
+ switch(key)
+ {
+ case 'l': inc=1; break;
+ case 'L': inc=10; break;
+ case 'h': inc=-1; break;
+ case 'H': inc=-10; break;
+ }
+
+ int crt_x_old = crt_x;
+ int crt_y_old = crt_y;
+ int map_px_old = map_px;
+ int msg_x_old = msg_x;
+ int msg_y_old = msg_y;
+ int dngn_x_old = dngn_x;
+ int dngn_y_old = dngn_y;
+
+ if ( (p->type == 'I') && inc != 0)
+ {
+ if (dat == &dngn_x || dat == &dngn_y )
+ {
+ if (inc==1) inc=2;
+ if (inc==-1) inc=-2;
+ }
+ int olddat = *dat;
+ (*dat)+= inc;
+
+ if (*dat > p->max) *dat = p->max;
+ if (*dat < p->min) *dat = p->min;
+
+ if (olddat == *dat) continue;
+ need_resize = true;
+ }// changed
+
+ if (need_resize)
+ {
+ need_draw_stat = need_draw_msg = true;
+
+ // crt screen layouts
+
+ // resize msg?
+ if (msg_x != msg_x_old || msg_y != msg_y_old)
+ {
+ upd_msg = true;
+ region_msg->resize(msg_x, msg_y);
+ }
+ // resize crt?
+ if (crt_x != crt_x_old || crt_y != crt_y_old)
+ {
+ upd_crt = true;
+ region_crt->resize(crt_x, crt_y);
+ }
+ // resize map?
+ if (map_px != map_px_old)
+ {
+ upd_map = true;
+ region_map->resize( 0, 0, map_px, map_px);
+ }
+
+ // resize dngn tile screen?
+ if (dngn_x != dngn_x_old || dngn_y != dngn_y_old)
+ {
+ clrscr();
+ upd_dngn = true;
+ tile_dngn_x = dngn_x;
+ tile_dngn_y = dngn_y;
+ region_tile->resize(dngn_x, dngn_y, 0, 0);
+ }
+
+ do_layout();
+ win_main->resize();
+ win_main->clear();
+
+ // Now screens are all black
+
+ if (upd_map)
+ region_map->resize_backbuf();
+ if (upd_dngn)
+ {
+ region_tile -> resize_backbuf();
+ force_redraw_tile = true;
+ TileResizeScreen(dngn_x, dngn_y);
+ }
+ if (region_item)
+ region_item->resize_backbuf();
+ if (region_item2)
+ region_item2->resize_backbuf();
+ force_redraw_inv = true;
+ tile_draw_inv(-1, REGION_INV1);
+
+ region_map->force_redraw = true;
+ viewwindow(true, true);
+ region_tile->redraw();
+ region_item->redraw();
+ }// need resize
+ }//while
+ clrscr();
+ redraw_screen();
+ mpr("Done.");
+}
+
+// Tiptext help info
+typedef struct tip_info
+{
+ int sx;
+ int ex;
+ int sy;
+ int ey;
+ const char *tiptext;
+ const char *tipfilename;
+} tip_info;
+
+static int old_tip_idx = -1;
+
+void tip_grid(int gx, int gy, bool do_null = true, int minimap=0)
+{
+ mesclr();
+ const coord_def gc(gx,gy);
+ terse_describe_square(gc);
+}
+
+int tile_cursor_x = -1;
+int tile_cursor_y = -1;
+int tile_cursor_flag=0;
+
+void tile_place_cursor(int x, int y, bool display)
+{
+ if (tile_cursor_x != -1)
+ {
+ // erase old cursor
+ TileDrawCursor(tile_cursor_x, tile_cursor_y, tile_cursor_flag);
+ }
+ if (!display)
+ {
+ tile_cursor_x = -1;
+ return;
+ }
+
+ int new_flag = TILE_FLAG_CURSOR1;
+ const coord_def gc = view2grid(coord_def(x+1, y+1));
+ if (gc.x < 0 || gc.y < 0 || gc.x >= GXM || gc.y >= GYM)
+ {
+ // off the dungeon...
+ tile_cursor_x = -1;
+ return;
+ }
+ else if (!map_bounds(gc))
+ {
+ new_flag = TILE_FLAG_CURSOR2;
+ }
+ else
+ {
+ unsigned char ch = env.map[gc.x][gc.y].glyph() & 0xff;
+ if (ch==0 || ch==' ' || char_is_wall(ch))
+ new_flag = TILE_FLAG_CURSOR2;
+ }
+ tile_cursor_x = x;
+ tile_cursor_y = y;
+ tile_cursor_flag = TileDrawCursor(x, y, new_flag);
+}
+
+int convert_cursor_pos(int mx, int my, int *cx, int *cy)
+{
+ std::vector <RegionClass *>::iterator r;
+ WinClass *w = win_main;
+ int id = REGION_NONE;
+ int x, y;
+ int mx0 = 0;
+
+ for (r = w->regions.begin();r != w->regions.end();r++)
+ {
+ if (! (*r)->is_active()) continue;
+ if( (*r)->mouse_pos(mx, my, cx, cy))
+ {
+ id = (*r)->id;
+ mx0 = (*r)->mx;
+ break;
+ }
+ }
+
+ x = *cx;
+ y = *cy;
+
+/********************************************/
+ if(id == REGION_TDNGN)
+ {
+ x--;
+ if (!in_viewport_bounds(x+1,y+1)) return REGION_NONE;
+ }
+
+ if (id == REGION_MAP)
+ {
+ x = x - gmap_ox + region_map->x_margin + 1;
+ y = y - gmap_oy + region_map->y_margin + 1;
+ }
+
+ if (id == REGION_INV1 || id == REGION_INV2)
+ {
+ x = x + y * mx0;
+ y = 0;
+ }
+
+ if (id == REGION_DNGN)
+ {
+ // Out of LOS range
+ if (!in_viewport_bounds(x+1,y+1))
+ return REGION_NONE;
+ }
+
+ *cx = x;
+ *cy = y;
+
+ return id;
+}
+
+static int handle_mouse_motion(int mouse_x, int mouse_y, bool init)
+{
+ int cx = -1;
+ int cy = -1;
+ int mode = 0;
+
+ static int oldcx = -1;
+ static int oldcy = -1;
+ static int oldmode = -1;
+ static int olditem = -1;
+
+ if (init)
+ {
+ oldcx = -1;
+ oldcy = -1;
+ oldmode = -1;
+ old_tip_idx = -1;
+ olditem = -1;
+ return 0;
+ }
+
+ switch(mouse_mode)
+ {
+ case MOUSE_MODE_NORMAL:
+ case MOUSE_MODE_MORE:
+ case MOUSE_MODE_MACRO:
+ return 0;
+ break;
+ }
+
+ if (mouse_x < 0)
+ {
+ mode = 0;
+ oldcx = oldcy = -10;
+ }
+ else
+ mode = convert_cursor_pos(mouse_x, mouse_y, &cx, &cy);
+ if (oldcx == cx && oldcy == cy && oldmode == mode) return 0;
+
+ // erase old cursor
+ if ( oldmode == REGION_DNGN && mode != oldmode)
+ {
+ oldcx = -10;
+ //_setcursortype(0);
+ }
+
+ if (olditem != -1)
+ {
+ oldcx = -10;
+ TileMoveInvCursor(-1);
+ olditem = -1;
+ }
+
+ if ( oldmode == REGION_DNGN && mode != oldmode)
+ {
+ oldcx = -10;
+ tile_place_cursor(0, 0, false);
+ }
+
+ if (toggle_telescope && mode != REGION_MAP)
+ {
+ TileDrawDungeon(NULL);
+ toggle_telescope = false;
+ }
+
+ bool valid_tip_region = (mode == REGION_MAP || mode == REGION_DNGN ||
+ mode == REGION_INV1 || mode == REGION_INV2 || mode == REGION_MSG);
+
+ if (valid_tip_region && mode != oldmode)
+ {
+ update_tip_text("");
+ }
+
+ if (toggle_telescope && mode == REGION_MAP)
+ {
+ oldmode = mode;
+ oldcx = cx;
+ oldcy = cy;
+ tip_grid(cx-1, cy-1, 1);
+ TileDrawFarDungeon(cx-1, cy-1);
+ return 0;
+ }
+
+ if (mode == REGION_INV1 || mode == REGION_INV2)
+ {
+ oldcx = cx;
+ oldcy = cy;
+ oldmode = mode;
+ int ix = TileInvIdx(cx);
+ std::string desc;
+ if (ix != -1)
+ {
+ bool display_actions = mode == REGION_INV1;
+
+ if (itemlist_iflag[cx] & TILEI_FLAG_FLOOR)
+ {
+ if (itemlist_key[cx])
+ {
+ desc = itemlist_key[cx];
+ desc += " - ";
+ }
+ desc += mitm[ix].name(DESC_NOCAP_A);
+ if (display_actions)
+ desc += EOL "[L-Click] *Pickup(g)";
+ }
+ else
+ {
+ desc = you.inv[ix].name(DESC_INVENTORY_EQUIP);
+
+ if (display_actions)
+ {
+ desc += EOL "[L-Click] ";
+ int type = you.inv[ix].base_type;
+
+ if (itemlist_iflag[cx] & TILEI_FLAG_EQUIP)
+ type += 18;
+
+ switch (type)
+ {
+ case OBJ_JEWELLERY + 18:
+ desc += "*(R)emove";
+ break;
+ case OBJ_WEAPONS:
+ case OBJ_STAVES:
+ desc += "*(w)ield";
+ break;
+ case OBJ_MISSILES:
+ desc += "*(t)hrow";
+ break;
+ case OBJ_WANDS:
+ desc += "*(z)ap";
+ break;
+ case OBJ_SCROLLS:
+ case OBJ_BOOKS:
+ desc += "*(r)ead";
+ break;
+ case OBJ_JEWELLERY:
+ desc += "*(P)ut on";
+ break;
+ case OBJ_POTIONS:
+ desc += "*(q)uaff";
+ break;
+ default:
+ desc += "*Use it";
+ }
+
+ desc += EOL "[R-Click] Info";
+ desc += EOL "[Shift-L-Click] *(d)rop";
+ }
+ }
+ update_tip_text(desc.c_str());
+ itemlist_flag = mode;
+ TileMoveInvCursor(cx);
+ olditem = cx;
+ }
+ else
+ update_tip_text("");
+
+ return 0;
+ }
+
+ if (mouse_mode == MOUSE_MODE_TARGET ||
+ mouse_mode == MOUSE_MODE_TARGET_DIR)
+ {
+ if (mode == REGION_DNGN || mode == REGION_TDNGN)
+ {
+ oldcx = cx;
+ oldcy = cy;
+ oldmode = mode;
+
+ gui_set_mouse_view_pos(true, cx+1, cy+1);
+
+ return CK_MOUSE_MOVE;
+ }
+ }
+
+ gui_set_mouse_view_pos(false, -1, -1);
+
+ if (mode==REGION_TDNGN || mode==REGION_DNGN)
+ {
+ oldcx = cx;
+ oldcy = cy;
+ oldmode = mode;
+
+ if(mode==REGION_DNGN)
+ tile_place_cursor(cx, cy, true);
+
+ if(mode==REGION_TDNGN)
+ {
+ gotoxy(cx+2, cy+1, GOTO_DNGN);
+ }
+
+ int gx = view2gridX(cx) + 1;
+ int gy = view2gridY(cy) + 1;
+ tip_grid(gx, gy);
+
+ return 0;
+ }
+
+ if (mode == REGION_MAP && mouse_mode == MOUSE_MODE_COMMAND)
+ {
+ if (oldmode != REGION_MAP)
+ {
+ update_tip_text("[L-Click] Travel / [R-Click] View");
+ }
+ else
+ {
+ tip_grid(cx - 1, cy - 1, false, 1);
+ }
+
+ oldmode = mode;
+ oldcx = cx;
+ oldcy = cy;
+
+ return 0;
+ }
+
+ if (mode == REGION_MSG && mouse_mode == MOUSE_MODE_COMMAND)
+ {
+ if (oldmode != REGION_MSG)
+ update_tip_text("[L-Click] Browse message history");
+ oldmode = mode;
+ oldcx = cx;
+ oldcy = cy;
+ return 0;
+ }
+
+#if 0
+ if (mode == REGION_STAT && mouse_mode == MOUSE_MODE_COMMAND)
+ {
+ oldcx = cx;
+ oldcy = cy;
+ oldmode = mode;
+
+ int i = 0;
+ while( Tips[i].tiptext != NULL)
+ {
+ if (cx >= Tips[i].sx && cx <= Tips[i].ex &&
+ cy >= Tips[i].sy && cy <= Tips[i].ey)
+ break;
+ i++;
+ }
+ if (Tips[i].tiptext == NULL) i = -1;
+
+ if (i == old_tip_idx) return 0;
+
+ if (old_tip_idx != -1)
+ hilite_tip_text(old_tip_idx, false);
+
+ old_tip_idx = i;
+ if (i != -1)
+ {
+ hilite_tip_text(i, true);
+ update_tip_text((char *)Tips[i].tiptext);
+ }
+ else
+ update_tip_text("");
+ return 0;
+ }
+#endif
+ return 0;
+}
+static int handle_mouse_button(int mx, int my, int button,
+ bool shift, bool ctrl)
+{
+ int dir;
+ const int dx[9]={-1,0,1, -1,0,1, -1,0,1};
+ const int dy[9]={1,1,1,0,0,0,-1,-1,-1};
+
+ const int cmd_n[9]={'b', 'j', 'n', 'h', '.', 'l', 'y', 'k', 'u'};
+ const int cmd_s[9]={'B', 'J', 'N', 'H', '5', 'L', 'Y', 'K', 'U'};
+
+ const int cmd_c[9]={
+ CONTROL('B'), CONTROL('J'), CONTROL('N'), CONTROL('H'),
+ 'X', CONTROL('L'), CONTROL('Y'), CONTROL('K'), CONTROL('U'),
+ };
+ const int cmd_dir[9]={'1','2','3','4','5','6','7','8','9'};
+
+ int trig = CK_MOUSE_B1;
+ if (button == 2) trig = CK_MOUSE_B2;
+ if (button == 3) trig = CK_MOUSE_B3;
+ if (button == 4) trig = CK_MOUSE_B4;
+ if (button == 5) trig = CK_MOUSE_B5;
+ if (shift) trig |= 512;
+ if (ctrl) trig |= 1024;
+
+ switch(mouse_mode)
+ {
+ case MOUSE_MODE_NORMAL:
+ return trig;
+ break;
+ case MOUSE_MODE_MORE:
+ return '\r';
+ break;
+ }
+
+ int cx,cy;
+ int mode;
+ static int oldcx = -1;
+ static int oldcy = -1;
+
+ static bool enable_wheel = true;
+ static int old_button = 0;
+ static int old_hp = 0;
+
+ mode = convert_cursor_pos(mx, my, &cx, &cy);
+
+ // prevent accidental wheel slip and subsequent char death
+ if (mouse_mode==MOUSE_MODE_COMMAND && (button == 4 || button == 5)
+ && button == old_button && oldcx == cx && oldcy == cy)
+ {
+ if(!enable_wheel) return 0;
+ if (you.hp < old_hp)
+ {
+ mpr("Wheel move aborted (rotate opposite to resume)");
+ enable_wheel = false;
+ return 0;
+ }
+ }
+ old_hp = you.hp;
+ enable_wheel = true;
+ old_button = button;
+ oldcx = cx;
+ oldcy = cy;
+
+ if (toggle_telescope)
+ {
+ // quit telescope mode
+ TileDrawDungeon(NULL);
+ toggle_telescope = false;
+ }
+
+ // item clicked
+ if (mode == REGION_INV1 || mode == REGION_INV2)
+ {
+ int ix = TileInvIdx(cx);
+
+ if (ix != -1)
+ {
+ if (button == 2)
+ {
+ // describe item
+ if (itemlist_iflag[cx] & TILEI_FLAG_FLOOR)
+ gui_set_mouse_inv(-ix, INV_VIEW);
+ else
+ gui_set_mouse_inv(ix, INV_VIEW);
+ TileMoveInvCursor(-1);
+ return CK_MOUSE_B2ITEM;
+ }
+ else if(button == 1)
+ {
+ // Floor item
+ if (itemlist_iflag[cx] & TILEI_FLAG_FLOOR)
+ {
+ // try pick up one item
+ if (button != 1) return 0;
+ gui_set_mouse_inv(ix, INV_PICKUP);
+ return CK_MOUSE_B1ITEM;
+ }
+ // use item
+ if (shift)
+ gui_set_mouse_inv(ix, INV_DROP);
+ else
+ gui_set_mouse_inv(ix, INV_USE);
+ return CK_MOUSE_B1ITEM;
+ }
+ }
+ return trig;
+ }
+
+ if (mode == REGION_MSG && mouse_mode == MOUSE_MODE_COMMAND)
+ {
+ return CONTROL('P');
+ }
+
+#if 0
+ if (mode == REGION_STAT && mouse_mode == MOUSE_MODE_COMMAND)
+ {
+ int i = 0;
+ while( Tips[i].tiptext != NULL)
+ {
+ if (cx >= Tips[i].sx && cx <= Tips[i].ex &&
+ cy >= Tips[i].sy && cy <= Tips[i].ey)
+ break;
+ i++;
+ }
+
+ if (Tips[i].tipfilename)
+ {
+ char fname[256];
+ snprintf(fname, 250, "tips_e/%s.txt", Tips[i].tipfilename);
+ ViewTextFile(fname);
+ redraw_screen();
+ return CK_MOUSE_DONE;
+ }
+ return 0;
+ }
+#endif
+
+ if((mouse_mode==MOUSE_MODE_COMMAND || mouse_mode == MOUSE_MODE_MACRO) &&
+ (mode == REGION_DNGN || mode == REGION_TDNGN))
+ {
+ if (button == 2)
+ {
+ // describe yourself (char info)
+ if (cx == DCX && cy == DCY) return '%';
+
+ // trigger
+ if (mouse_mode == MOUSE_MODE_MACRO)
+ return trig;
+
+ // Right Click: try to describe grid
+ // otherwise return trigger key
+ if (!in_los_bounds(cx+1,cy+1))
+ return CK_MOUSE_B2;
+ const coord_def ep = view2show(coord_def(cx, cy));
+ if (env.show(ep) == 0)
+ return trig;
+
+ int mid = mgrd[cx][cy];
+ if (mid == NON_MONSTER || !player_monster_visible( &menv[mid] ))
+ {
+ return trig;
+ }
+
+ describe_monsters( menv[ mid ] );
+ redraw_screen();
+ mesclr( true );
+ return CK_MOUSE_DONE;
+ }
+
+ // button = 1 or 4, 5
+ // first, check if 3x3 grid around @ is clicked.
+ // if so, return equivalent numpad key
+ int adir = -1;
+ for(dir=0;dir<9;dir++)
+ {
+ if( DCX+dx[dir] == cx && DCY+dy[dir]==cy)
+ {
+ adir = dir;
+ break;
+ }
+ }
+
+ if (adir != -1)
+ {
+ if (shift)
+ return cmd_s[adir];
+ else if (ctrl)
+ return cmd_c[adir];
+ else return cmd_n[dir];
+ }
+ if (button != 1) return trig;
+
+ // otherwise travel to that grid
+ const coord_def gc = view2grid(coord_def(cx+1, cy+1));
+ if (!map_bounds(gc)) return 0;
+
+ // Activate travel
+ start_travel(gc.x, gc.y);
+ return CK_MOUSE_DONE;
+ }
+
+ if(mouse_mode==MOUSE_MODE_COMMAND && mode == REGION_MAP)
+ {
+ // begin telescope mode
+ if (button == 2)
+ {
+ toggle_telescope = true;
+ StoreDungeonView(NULL);
+ TileDrawFarDungeon(cx-1,cy-1);
+ return 0;
+ }
+
+ if (button != 1) return trig;
+
+ // L-click: try to travel to the grid
+ const coord_def gc(cx-1, cy-1);
+ if (!map_bounds(gc)) return 0;
+
+ // Activate travel
+ start_travel(gc.x, gc.y);
+ return CK_MOUSE_DONE;
+ }
+
+ // target selection
+ if((mouse_mode==MOUSE_MODE_TARGET || mouse_mode==MOUSE_MODE_TARGET_DIR)
+ && button == 1 && (mode == REGION_DNGN || mode == REGION_TDNGN))
+ {
+ gui_set_mouse_view_pos(true, cx+1, cy+1);
+ return CK_MOUSE_CLICK;
+ }
+
+ gui_set_mouse_view_pos(false, 0, 0);
+
+ if(mouse_mode==MOUSE_MODE_TARGET_DIR && button == 1 &&
+ (mode == REGION_DNGN || mode == REGION_TDNGN))
+ {
+ if (cx < DCX-1 || cy < DCY-1 || cx > DCX+1 || cy > DCY+1) return 0;
+ for(dir=0;dir<9;dir++)
+ {
+ if( DCX+dx[dir] == cx && DCY+dy[dir]==cy)
+ {
+ return cmd_dir[dir];
+ }
+ }
+ return 0;
+ }
+
+ return trig;
+}
+
+static int handle_mouse_unbutton(int mx, int my, int button)
+{
+ if (toggle_telescope)
+ {
+ TileDrawDungeon(NULL);
+ }
+
+ toggle_telescope = false;
+ return 0;
+}
+
+int getch_ck()
+{
+ int etype = 0;
+ int x1,y1,x2,y2;
+ int key;
+ bool sh, ct;
+ int k;
+
+ while(1)
+ {
+ k = 0;
+ GetNextEvent(&etype, &key, &sh, &ct, &x1, &y1, &x2, &y2);
+ switch(etype)
+ {
+ case EV_BUTTON:
+ k = handle_mouse_button(x1, y1, key, sh, ct);
+ break;
+
+ case EV_MOVE:
+ k = handle_mouse_motion(x1, y1, false);
+ break;
+
+ case EV_UNBUTTON:
+ k = handle_mouse_unbutton(x1, y1, key);
+ break;
+
+ case EV_KEYIN:
+ k = key;
+ break;
+
+ default:
+ break;
+ } // switch
+
+ if (k != 0) break;
+ }/*while*/
+
+ return k;
+}
+
+int getch()
+{
+ static int ck_tr[] =
+ {
+ 'k', 'j', 'h', 'l', '.', 'y', 'b', '.', 'u', 'n',
+ 'K', 'J', 'H', 'L', '5', 'Y', 'B', '5', 'U', 'N',
+ 11, 10, 8, 12, '0', 25, 2, 'C', 21, 14
+ };
+
+ int keyin = getch_ck();
+ if (keyin >= CK_UP && keyin <= CK_CTRL_PGDN)
+ return ck_tr[ keyin - CK_UP ];
+ if (keyin == CK_DELETE)
+ return '.';
+ return keyin;
+}
+
+int m_getch()
+{
+ return getch();
+}
+
+void set_mouse_enabled(bool enabled)
+{
+ crawl_state.mouse_enabled = enabled;
+}
+
+void mouse_set_mode(int mode)
+{
+ mouse_mode = mode;
+ // init cursor etc
+ handle_mouse_motion(0, 0, true);
+}
+
+int mouse_get_mode()
+{
+ return mouse_mode;
+}
+
+void gui_init_view_params(coord_def &termsz, coord_def &viewsz,
+ coord_def &msgp, coord_def &msgsz, coord_def &hudp, coord_def &hudsz)
+{
+ // TODO enne - set these other params too?
+ msgsz.x = msg_x;
+ msgsz.y = msg_y;
+}
+
+void lock_region(int r)
+{
+ if (r >= 0 && r < NUM_REGIONS)
+ region_lock[r] = true;
+}
+
+void unlock_region(int r)
+{
+ if (r >= 0 && r < NUM_REGIONS)
+ region_lock[r] = false;
+}
+
+/*
+ * Wrapper
+ */
+
+void clrscr()
+{
+ win_main->clear();
+ TextRegionClass::cursor_region = NULL;
+
+ // clear Text regions
+ if (!region_lock[REGION_CRT])
+ region_crt->clear();
+ if (region_msg && !region_lock[REGION_MSG])
+ region_msg->clear();
+ if (region_stat && !region_lock[REGION_STAT])
+ region_stat->clear();
+ if (region_dngn && !region_lock[REGION_TDNGN])
+ region_dngn->clear();
+ if (region_tip && !region_lock[REGION_TIP])
+ region_tip->clear();
+
+ // Hack: Do not erase the backbuffer. Instead just hide it.
+ if (region_map)
+ {
+ if(region_lock[REGION_MAP])
+ region_map->redraw();
+ else
+ region_map->flag = false;
+ }
+ if (region_item)
+ {
+ if (region_lock[REGION_INV1])
+ region_item->redraw();
+ else
+ region_item->flag = false;
+ }
+ if (region_item2)
+ {
+
+ if (region_lock[REGION_INV2])
+ region_item2->redraw();
+ else
+ {
+ TileClearInv(REGION_INV2);
+ region_item2->flag = false;
+ }
+ }
+
+ gotoxy(1, 1);
+}
+
+void putch(unsigned char chr)
+{
+ // object's method
+ TextRegionClass::text_mode->putch(chr);
+}
+
+void putwch(unsigned chr)
+{
+ // No unicode support.
+ putch(static_cast<unsigned char>(chr));
+}
+
+void writeWChar(unsigned char *ch)
+{
+ // object's method
+ TextRegionClass::text_mode->writeWChar(ch);
+}
+
+void clear_to_end_of_line()
+{
+ // object's method
+ TextRegionClass::text_mode->clear_to_end_of_line();
+}
+
+void clear_to_end_of_screen()
+{
+ // object's method
+ TextRegionClass::text_mode->clear_to_end_of_screen();
+}
+
+void get_input_line_gui(char *const buff, int len)
+{
+ int y, x;
+ int k = 0;
+ int prev = 0;
+ int done = 0;
+ int kin;
+ TextRegionClass *r = TextRegionClass::text_mode;
+
+ static char last[128];
+ static int lastk = 0;
+
+ if(!r->flag)return;
+
+ /* Locate the cursor */
+ x = wherex();
+ y = wherey();
+
+ /* Paranoia -- check len */
+ if (len < 1) len = 1;
+
+ /* Restrict the length */
+ if (x + len > r->mx) len = r->mx - x;
+ if (len > 40) len = 40;
+
+ /* Paranoia -- Clip the default entry */
+ buff[len] = '\0';
+ buff[0] = '\0';
+
+ r->gotoxy(x, y);
+ putch('_');
+
+ /* Process input */
+ while (!done)
+ {
+ /* Get a key */
+ kin = getch_ck();
+
+ /* Analyze the key */
+ switch (kin)
+ {
+ case 0x1B:
+ k = 0;
+ done = 1;
+ break;
+
+ case '\n':
+ case '\r':
+ k = strlen(buff);
+ done = 1;
+ lastk = k;
+ strncpy(last, buff, k);
+ break;
+
+ case CK_UP: // history
+ if (lastk != 0)
+ {
+ k = lastk;
+ strncpy(buff, last, k);
+ }
+ break;
+
+ case 0x7F:
+ case '\010':
+ k = prev;
+ break;
+
+ // Escape conversion. (for ^H, etc)
+ case CONTROL('V'):
+ kin = getch();
+ // fallthrough
+
+ default:
+ {
+ if (k < len &&
+ (
+ isprint(kin)
+ || (kin >= CONTROL('A') && kin <= CONTROL('Z'))
+ || (kin >= 0x80 && kin <=0xff)
+ )
+ )
+ buff[k++] = kin;
+ break;
+ }
+
+ }
+ /* Terminate */
+ buff[k] = '\0';
+
+ /* Update the entry */
+ r->gotoxy(x, y);
+ int i;
+
+ //addstr(buff);
+ for(i=0;i<k;i++)
+ {
+ prev = i;
+ int c = (unsigned char)buff[i];
+ if (c>=0x80)
+ {
+ if (buff[i+1]==0) break;
+ writeWChar((unsigned char *)&buff[i]);
+ i++;
+ }
+ else
+ if (c >= CONTROL('A') && c<= CONTROL('Z'))
+ {
+ putch('^');
+ putch(c + 'A' - 1);
+ }
+ else
+ putch(c);
+ }
+ r->addstr((char *)"_ ");
+ r->gotoxy(x+k, y);
+ }/* while */
+}
+
+void cprintf(const char *format,...)
+{
+ char buffer[2048]; // One full screen if no control seq...
+ va_list argp;
+ va_start(argp, format);
+ vsprintf(buffer, format, argp);
+ va_end(argp);
+ // object's method
+ TextRegionClass::text_mode->addstr(buffer);
+ TextRegionClass::text_mode->make_active();
+}
+
+void textcolor(int color)
+{
+ TextRegionClass::textcolor(color);
+}
+
+void textbackground(int bg)
+{
+ TextRegionClass::textbackground(bg);
+}
+
+void gotoxy(int x, int y, int region)
+{
+ if (region == GOTO_LAST)
+ {
+ // nothing
+ }
+ else if (region == GOTO_CRT)
+ TextRegionClass::text_mode = region_crt;
+ else if (region == GOTO_MSG)
+ TextRegionClass::text_mode = region_msg;
+ else if (region == GOTO_STAT)
+ TextRegionClass::text_mode = region_stat;
+
+ TextRegionClass::text_mode->flag = true;
+ TextRegionClass::gotoxy(x, y);
+}
+
+void _setcursortype(int curstype)
+{
+ TextRegionClass::_setcursortype(curstype);
+}
+
+void enable_smart_cursor(bool cursor)
+{
+ gui_smart_cursor = cursor;
+}
+
+bool is_smart_cursor_enabled()
+{
+ return (gui_smart_cursor);
+}
+
+void set_cursor_enabled(bool enabled)
+{
+ if (gui_smart_cursor) return;
+ if (enabled) TextRegionClass::_setcursortype(1);
+ else TextRegionClass::_setcursortype(0);
+}
+
+bool is_cursor_enabled()
+{
+ if (TextRegionClass::cursor_flag) return true;
+ return false;
+}
+
+int wherex()
+{
+ return TextRegionClass::wherex();
+}
+
+int wherey()
+{
+ return TextRegionClass::wherey();
+}
+
+int get_number_of_lines()
+{
+#ifdef USE_X11
+ // Lie about the number of lines so that we can reserve the
+ // bottom one for tooltips...
+ return region_crt->my - 1;
+#else
+ return region_crt->my;
+#endif
+}
+
+int get_number_of_cols()
+{
+ return std::min(region_crt->mx, region_msg->mx);
+}
+
+void message_out(int which_line, int colour, const char *s, int firstcol,
+ bool newline)
+{
+ if (!firstcol)
+ firstcol = Options.delay_message_clear ? 2 : 1;
+
+ gotoxy(firstcol, which_line + 1, GOTO_MSG);
+ textcolor(colour);
+
+ cprintf("%s", s);
+
+ if (newline && which_line == crawl_view.msgsz.y - 1)
+ region_msg->scroll();
+}
+
+void clear_message_window()
+{
+ region_msg->clear();
+}
+
+void put_colour_ch(int colour, unsigned ch)
+{
+ textcolor(colour);
+ putwch(ch);
+}
+
+void puttext(int sx, int sy, int ex, int ey, unsigned char *buf, bool mono,
+ int where)
+{
+ TextRegionClass *r = (where == 1) ?region_crt:region_dngn;
+
+ if (where==1 && UseDosChar) r=region_xmap;
+
+ int xx, yy;
+ unsigned char *ptr = buf;
+ //gotoxy(1, 1, GOTO_CRT);
+ for(yy= sy-1; yy<= ey-1; yy++)
+ {
+ unsigned char *c = &(r->cbuf[yy*(r->mx)+sx-1]);
+ unsigned char *a = &(r->abuf[yy*(r->mx)+sx-1]);
+ for(xx= sx-1; xx<= ex-1; xx++)
+ {
+ *c = *ptr;
+ if (*c==0) *c=32;
+#if 0 //deb
+ if (*c==177) *c=2;
+ if (*c==176) *c=2;
+ if (*c==249) *c=31;
+#endif
+ ptr++;
+
+ if (mono)
+ {
+ *a = WHITE;
+ }
+ else
+ {
+ *a = *ptr;
+ ptr++;
+ }
+ c++;
+ a++;
+ }
+ }
+ r->make_active();
+ r->redraw(sx-1, sy-1, ex-1, ey-1);
+}
+
+void ViewTextFile(const char *name)
+{
+ FILE *fp = fopen(name, "r");
+ int max = get_number_of_lines();
+
+ // Hack
+#define MAXTEXTLINES 100
+
+#define DELIMITER_END "-------------------------------------------------------------------------------"
+#define DELIMITER_MORE "...(more)... "
+ unsigned char buf[80*MAXTEXTLINES], buf2[84];
+ int nlines = 0;
+ int cline = 0;
+ int i;
+
+ if (!fp)
+ {
+ mpr("Couldn't open file.");
+ return;
+ }
+
+ for (i=0; i<80*MAXTEXTLINES; i++) buf[i] = ' ';
+
+ while(nlines<MAXTEXTLINES)
+ {
+ fgets((char *)buf2, 82, fp);
+ if (feof(fp)) break;
+ i = 0;
+ while(i<79 && buf2[i] !=13 && buf2[i] != 10) i++;
+ memcpy(&buf[nlines*80], buf2, i);
+ nlines++;
+ }
+ fclose(fp);
+ clrscr();
+
+ while(1)
+ {
+ gotoxy(1, 1);
+ if (cline == 0)
+ cprintf(DELIMITER_END);
+ else
+ cprintf(DELIMITER_MORE);
+
+ puttext(1, 2, 80, max, &buf[cline*80], true, 1);
+
+ gotoxy(1, max);
+
+ if (cline + max-2 >= nlines)
+ cprintf(DELIMITER_END);
+ else
+ cprintf(DELIMITER_MORE);
+
+ gotoxy(14, max);
+ cprintf("[j/k/+/-/SPACE/b: scroll q/ESC/RETURN: exit]");
+ mouse_set_mode(MOUSE_MODE_MORE);
+ int key = getch();
+ mouse_set_mode(MOUSE_MODE_NORMAL);
+ if (key == 'q' || key == ESCAPE || key =='\r') break;
+ if (key == '-' || key == 'b') cline -= max-2;
+ if (key == 'k') cline --;
+ if (key == '+' || key == ' ') cline += max-2;
+ if (key == 'j') cline ++;
+ if (key == CK_MOUSE_B4) cline--;
+ if (key == CK_MOUSE_B5) cline++;
+
+ if (cline + max-2 > nlines) cline = nlines-max + 2;
+ if (cline < 0) cline = 0;
+ }
+}
+
+void window(int x1, int y1, int x2, int y2)
+{
+}
diff --git a/crawl-ref/source/libgui.h b/crawl-ref/source/libgui.h
new file mode 100644
index 0000000000..6e42ae0bae
--- /dev/null
+++ b/crawl-ref/source/libgui.h
@@ -0,0 +1,164 @@
+#ifndef LIBGUI_H
+#define LIBGUI_H
+#ifdef USE_TILE
+
+#ifdef USE_X11
+ #include <X11/Xlib.h>
+ #include <X11/X.h>
+#elif defined(WINDOWS)
+ #include <windows.h>
+ // windows.h defines 'near' as an empty string for compatibility.
+ // This breaks the use of that as a variable name. Urgh.
+ #ifdef near
+ #undef near
+ #endif
+ #include <commdlg.h>
+#endif
+
+#include "defines.h"
+
+typedef unsigned int screen_buffer_t;
+
+void libgui_init();
+void libgui_shutdown();
+
+void edit_prefs();
+/* ***********************************************************************
+ Minimap related
+ * called from: misc view spells2
+ * *********************************************************************** */
+void GmapInit(bool upd_tile);
+void GmapDisplay(int linex, int liney);
+void GmapUpdate(int x, int y, int what, bool upd_tile = true);
+
+//dungeon display size
+extern int tile_dngn_x;
+extern int tile_dngn_y;
+
+void set_mouse_enabled(bool enabled);
+
+// mouse ops
+// set mouse op mode
+void mouse_set_mode(int mode);
+// get mouse mode
+int mouse_get_mode();
+
+class mouse_control
+{
+public:
+ mouse_control(int mode)
+ {
+ oldmode = mouse_get_mode();
+ mouse_set_mode(mode);
+ }
+
+ ~mouse_control()
+ {
+ mouse_set_mode(oldmode);
+ }
+private:
+ int oldmode;
+};
+
+class coord_def;
+
+void gui_init_view_params(coord_def &termsz, coord_def &viewsz,
+ coord_def &msgp, coord_def &msgsz, coord_def &hudp, coord_def &hudsz);
+
+// If mouse on dungeon map, returns true and sets gc.
+// Otherwise, it just returns false.
+bool gui_get_mouse_grid_pos(coord_def &gc);
+
+enum InvAction
+{
+ INV_DROP,
+ INV_USE,
+ INV_PICKUP,
+ INV_VIEW,
+ INV_SELECT,
+ INV_NUMACTIONS
+};
+
+void gui_set_mouse_inv(int idx, InvAction act);
+void gui_get_mouse_inv(int &idx, InvAction &act);
+
+void tile_place_cursor(int x, int y, bool display);
+
+void lock_region(int r);
+void unlock_region(int r);
+
+enum ScreenRegion
+{
+ REGION_NONE,
+ REGION_CRT,
+ REGION_STAT,
+ REGION_MSG,
+ REGION_MAP,
+ REGION_DNGN,
+ REGION_TDNGN,
+ REGION_INV1,
+ REGION_INV2,
+ REGION_XMAP,
+ REGION_TIP,
+ NUM_REGIONS
+};
+
+/* text display */
+void clrscr(void);
+void textcolor(int color);
+void gotoxy(int x, int y, int region = GOTO_CRT);
+void message_out(int mline, int colour, const char *str, int firstcol = 0,
+ bool newline = true);
+void clear_message_window();
+int wherex();
+int wherey();
+void cprintf(const char *format,...);
+void clear_to_end_of_line(void);
+void clear_to_end_of_screen(void);
+int get_number_of_lines(void);
+int get_number_of_cols(void);
+void get_input_line_gui(char *const buff, int len);
+void _setcursortype(int curstype);
+void textbackground(int bg);
+void textcolor(int col);
+void putch(unsigned char chr);
+void putwch(unsigned chr);
+void put_colour_ch(int colour, unsigned ch);
+void writeWChar(unsigned char *ch);
+
+void puttext(int x, int y, int lx, int ly, unsigned char *buf,
+ bool mono = false, int where = 0);
+void ViewTextFile(const char *name);
+
+#define textattr(x) textcolor(x)
+void set_cursor_enabled(bool enabled);
+bool is_cursor_enabled();
+void enable_smart_cursor(bool);
+bool is_smart_cursor_enabled();
+
+#ifdef USE_X11
+char *strlwr(char *str); // non-unix
+int itoa(int value, char *strptr, int radix); // non-unix
+int stricmp(const char *str1, const char *str2); // non-unix
+#endif
+
+void delay(unsigned long time);
+int kbhit(void);
+void window(int x1, int y1, int x2, int y2);
+void update_screen(void);
+int getch();
+int getch_ck();
+
+// types of events
+#define EV_KEYIN 1
+#define EV_MOVE 2
+#define EV_BUTTON 3
+#define EV_UNBUTTON 4
+
+#define _NORMALCURSOR 1
+#define _NOCURSOR 0
+
+#define textcolor_cake(col) textcolor((col)<<4 | (col))
+
+#endif // USE_TILE
+#endif // LIBGUI_H
diff --git a/crawl-ref/source/libunix.cc b/crawl-ref/source/libunix.cc
index ba28a4039c..a2f1cc2fbc 100644
--- a/crawl-ref/source/libunix.cc
+++ b/crawl-ref/source/libunix.cc
@@ -855,7 +855,7 @@ void textbackground(int col)
}
-int gotoxy(int x, int y)
+int gotoxy_sys(int x, int y)
{
return (move(y - 1, x - 1));
}
diff --git a/crawl-ref/source/libunix.h b/crawl-ref/source/libunix.h
index b1c5bbb81d..1f834af44f 100644
--- a/crawl-ref/source/libunix.h
+++ b/crawl-ref/source/libunix.h
@@ -1,6 +1,8 @@
#ifndef LIBUNIX_H
#define LIBUNIX_H
+#ifndef USE_TILE
+
// Some replacement routines missing in gcc
#ifndef O_BINARY
@@ -25,7 +27,7 @@ int get_number_of_cols();
int getch_ck(void);
int clrscr(void);
int cprintf(const char *format,...);
-int gotoxy(int x, int y);
+int gotoxy_sys(int x, int y);
void fakecursorxy(int x, int y);
int itoa(int value, char *strptr, int radix);
int kbhit(void);
@@ -74,3 +76,4 @@ extern "C"
#endif
+#endif
diff --git a/crawl-ref/source/libutil.cc b/crawl-ref/source/libutil.cc
index 8b5bb7bbac..7c6a412303 100644
--- a/crawl-ref/source/libutil.cc
+++ b/crawl-ref/source/libutil.cc
@@ -13,6 +13,7 @@
#include "AppHdr.h"
#include "defines.h"
+#include "direct.h"
#include "initfile.h"
#include "libutil.h"
#include "externs.h"
@@ -24,7 +25,7 @@
#include <stdarg.h>
#include <string.h>
-#ifdef WIN32CONSOLE
+#if defined(WIN32CONSOLE) || defined(WIN32TILES)
#include <windows.h>
#ifdef WINMM_PLAY_SOUNDS
@@ -567,6 +568,24 @@ int snprintf( char *str, size_t size, const char *format, ... )
#endif
+#ifndef USE_TILE
+void gotoxy(int x, int y, int region)
+{
+ switch(region)
+ {
+ case GOTO_STAT:
+ gotoxy_sys(x + crawl_view.hudp.x - 1, y + crawl_view.hudp.y - 1);
+ break;
+ case GOTO_MSG:
+ gotoxy_sys(x + crawl_view.msgp.x - 1, y + crawl_view.msgp.y - 1);
+ break;
+ case GOTO_CRT:
+ default:
+ gotoxy_sys(x, y);
+ break;
+ }
+}
+#endif
///////////////////////////////////////////////////////////////////////
// Pattern matching
diff --git a/crawl-ref/source/libutil.h b/crawl-ref/source/libutil.h
index f0f4c1a4ce..db63e6ff6c 100644
--- a/crawl-ref/source/libutil.h
+++ b/crawl-ref/source/libutil.h
@@ -150,6 +150,10 @@ void usleep( unsigned long time );
int snprintf( char *str, size_t size, const char *format, ... );
#endif
+#ifndef USE_TILE
+void gotoxy(int x, int y, int region = GOTO_CRT);
+#endif
+
template <typename T>
class unwind_var
{
diff --git a/crawl-ref/source/libw32c.cc b/crawl-ref/source/libw32c.cc
index 8749f70469..786d50f17d 100644
--- a/crawl-ref/source/libw32c.cc
+++ b/crawl-ref/source/libw32c.cc
@@ -501,7 +501,7 @@ void clrscr(void)
gotoxy(1,1);
}
-void gotoxy(int x, int y)
+void gotoxy_sys(int x, int y)
{
// always flush on goto
bFlush();
diff --git a/crawl-ref/source/libw32c.h b/crawl-ref/source/libw32c.h
index 46146a920b..a0a79eced0 100644
--- a/crawl-ref/source/libw32c.h
+++ b/crawl-ref/source/libw32c.h
@@ -25,7 +25,7 @@ bool is_cursor_enabled();
void clrscr(void);
void clear_to_end_of_line();
-void gotoxy(int x, int y);
+void gotoxy_sys(int x, int y);
void textcolor(int c);
void textattr(int c);
void cprintf( const char *format, ... );
diff --git a/crawl-ref/source/libwt.cc b/crawl-ref/source/libwt.cc
new file mode 100644
index 0000000000..e3e2ec3b46
--- /dev/null
+++ b/crawl-ref/source/libwt.cc
@@ -0,0 +1,540 @@
+// Windows wb_[ t@C:
+#include <windows.h>
+#include <windowsx.h>
+#include <commdlg.h>
+#include <commctrl.h>
+
+// GDT_NONE in commctrl.h conflicts with enum.h
+#ifdef GDT_NONE
+#undef GDT_NONE
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <memory.h>
+#include <tchar.h>
+
+#include "AppHdr.h"
+#include "cio.h"
+#include "externs.h"
+#include "files.h"
+#include "guic.h"
+#include "itemprop.h"
+#include "state.h"
+#include "tiles.h"
+
+// acr.cc
+extern int old_main(int argc, char *argv[]);
+
+extern WinClass *win_main;
+extern TileRegionClass *region_tile;
+extern img_type TileImg;
+extern BYTE pix_transparent;
+
+typedef struct ev_data
+{
+ int type;
+ int key;
+ int x1, y1;
+ bool sh, ct;
+}ev_data;
+
+#define EV_MAX 1024
+struct ev_data ev_cue[EV_MAX];
+
+static int ev_head = 0;
+static int ev_tail = 0;
+void ev_push(struct ev_data *e);
+static bool skip_key = false;
+
+// Tip text
+static TOOLINFO tiTip;
+static HWND hTool;
+static HWND pWin;
+
+#ifdef USE_TILE
+#define PAL_STD 0 //standard palette
+#define PAL_BER 1 //berserk palette
+#define PAL_SHA 2 //shadow palette
+static int palette = PAL_STD;
+LPBYTE lpPalettes[3] ;
+#endif
+
+#define DF_TOOLTIP_WIDTH 300
+
+ATOM MyRegisterClass( HINSTANCE hInstance );
+BOOL InitInstance( HINSTANCE, int );
+LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
+
+bool libgui_init_sys();
+void libgui_shutdown_sys();
+void update_tip_text(const char *tip);
+
+void GetNextEvent(int *etype, int *key, bool *shift, bool *ctrl,
+ int *x1, int *y1, int *x2, int *y2);
+void TileInitWin();
+void delay(unsigned long ms);
+int kbhit();
+
+/***************************/
+#ifdef USE_TILE
+void TileInitWin()
+{
+ int i;
+
+ //Fɓւ
+ TileImg->pDib->bmiColors[pix_transparent].rgbRed = 0;
+ TileImg->pDib->bmiColors[pix_transparent].rgbGreen = 0;
+ TileImg->pDib->bmiColors[pix_transparent].rgbBlue = 0;
+
+ RegionClass::set_std_palette(&TileImg->pDib->bmiColors[0]);
+
+ //obNobt@ppbg̍쐬
+ WORD chcol; //OCXP[vZp
+ lpPalettes[0] = (LPBYTE) (&TileImg->pDib->bmiColors[0]);
+ lpPalettes[1] = (LPBYTE)GlobalAlloc(GPTR, 256 * sizeof(RGBQUAD) ); //o[T[Npbgׂ̃m
+ lpPalettes[2] = (LPBYTE)GlobalAlloc(GPTR, 256 * sizeof(RGBQUAD) ); //VhEpbgׂ̃m
+ for (i = 0; i < 256; i++)
+ {
+ //o[T[Nppbg
+ chcol = (TileImg->pDib->bmiColors[i].rgbRed * 30
+ + TileImg->pDib->bmiColors[i].rgbGreen * 59
+ + TileImg->pDib->bmiColors[i].rgbBlue * 11)/100;
+ LPBYTE ptr = lpPalettes[1] + i * sizeof(RGBQUAD);
+ ptr[2] = (BYTE)chcol;
+ ptr[0] = (BYTE)( (chcol +1)/6 );
+ ptr[1] = (BYTE)( (chcol +1)/6 );
+
+ ptr = lpPalettes[2] + i * sizeof(RGBQUAD);
+ //VhEppbg
+ ptr[2] = ptr[0] = ptr[1] = (BYTE)chcol;
+ }
+}
+#endif
+
+void update_tip_text(const char *tip)
+{
+#define MAXTIP 512
+ static char oldtip[MAXTIP+1];
+ if (strncmp(oldtip, tip, MAXTIP)==0) return;
+ strncpy(oldtip, tip, MAXTIP);
+ tiTip.lpszText = (char *)tip;
+ SendMessage(hTool, TTM_UPDATETIPTEXT, 0, (LPARAM)&tiTip);
+}
+
+bool libgui_init_sys( )
+{
+ return true;
+}
+
+void libgui_shutdown_sys()
+{
+#ifdef USE_TILE
+ GlobalFree(lpPalettes[1]); //o[T[Nppbg
+ GlobalFree(lpPalettes[2]); //VhEppbg
+#endif
+ DestroyWindow( pWin );
+}
+
+void GetNextEvent(int *etype, int *key, bool *sh, bool *ct,
+ int *x1, int *y1, int *x2, int *y2)
+{
+ MSG msg;
+
+ while( GetMessage(&msg, NULL, 0, 0) )
+ {
+ TranslateMessage( &msg );
+ DispatchMessage( &msg );
+ if(ev_tail != ev_head) break;
+ }
+ struct ev_data *e = &ev_cue[ev_head];
+ ev_head++;
+ if(ev_head == EV_MAX)
+ ev_head = 0;
+
+ *etype = e->type;
+ *key = e->key;
+ *sh = e->sh;
+ *ct = e->ct;
+ *x1 = e->x1;
+ *y1 = e->y1;
+}
+
+void ev_push(struct ev_data *e)
+{
+ ev_cue[ev_tail] = *e;
+ ev_tail++;
+ if(ev_tail == EV_MAX)
+ ev_tail = 0;
+}
+
+//FAR PASCAL
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine, int nCmdShow )
+{
+ MSG msg;
+
+ MyRegisterClass( hInstance );
+
+ GuicInit(hInstance, nCmdShow);
+
+ // after handing the controll to the main code,
+ // libgui_init , libgui_init_sys will be called
+ old_main(0, NULL);
+
+ return msg.wParam;
+}
+
+
+ATOM MyRegisterClass( HINSTANCE hInstance )
+{
+ WNDCLASSEX wcex;
+
+ wcex.cbSize = sizeof(WNDCLASSEX);
+
+ wcex.style = CS_HREDRAW | CS_VREDRAW;
+ wcex.lpfnWndProc = (WNDPROC)WndProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = hInstance;
+ wcex.hIcon = LoadIcon(hInstance, TEXT("CRAWL_ICON"));
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+ wcex.lpszMenuName = "CRAWL";
+ wcex.lpszClassName = "CrawlList";
+ wcex.hIconSm = NULL;//LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
+
+ return RegisterClassEx( &wcex );
+}
+
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ int wmId, wmEvent;
+ PAINTSTRUCT ps;
+ HDC hdc;
+
+ struct ev_data ev;
+ static int clix = 0;
+ static int cliy = 0;
+
+ // For keypad
+ const unsigned char ck_table[9]=
+ {
+ CK_END, CK_DOWN, CK_PGDN,
+ CK_LEFT, CK_INSERT, CK_RIGHT,
+ CK_HOME, CK_UP, CK_PGUP
+ };
+
+ switch( message )
+ {
+ case WM_CREATE:
+ {
+ pWin = hWnd;
+
+ // TOOLTIP eLXg̐ݒ
+ // Example taken from
+ // http://black.sakura.ne.jp/~third/system/winapi/common10.html
+ InitCommonControls();
+ hTool = CreateWindowEx( 0 , TOOLTIPS_CLASS ,
+ NULL , TTS_ALWAYSTIP ,
+ CW_USEDEFAULT , CW_USEDEFAULT ,
+ CW_USEDEFAULT , CW_USEDEFAULT ,
+ hWnd , NULL , ((LPCREATESTRUCT)(lParam))->hInstance ,
+ NULL
+ );
+ GetClientRect(hWnd , &tiTip.rect);
+
+ tiTip.cbSize = sizeof (TOOLINFO);
+ tiTip.uFlags = TTF_SUBCLASS;
+ tiTip.hwnd = hWnd;
+ tiTip.lpszText = (char *)
+ "This text will tell you" EOL
+ " what you are pointing";
+ SendMessage(hTool, TTM_ADDTOOL , 0 , (LPARAM)&tiTip);
+ // Allow line wrap
+ SendMessage(hTool, TTM_SETMAXTIPWIDTH, 0, DF_TOOLTIP_WIDTH);
+ return 0;
+ }
+
+ case WM_RBUTTONDOWN:
+ case WM_LBUTTONDOWN:
+ case WM_MBUTTONDOWN:
+ {
+ ev.type = EV_BUTTON;
+ ev.x1 = LOWORD(lParam);
+ ev.y1 = HIWORD(lParam);
+ ev.key = 1;
+ ev.sh = ((GetKeyState(VK_SHIFT) & 0x80)!=0)? true:false;
+ ev.ct = ((GetKeyState(VK_CONTROL) & 0x80)!=0)? true:false;
+ if (message == WM_RBUTTONDOWN) ev.key = 2;
+ if (message == WM_MBUTTONDOWN) ev.key = 3;
+ ev_push(&ev);
+ return 0;
+ }
+
+ case WM_RBUTTONUP:
+ //case WM_LBUTTONDOWN:
+ {
+ ev.type = EV_UNBUTTON;
+ ev.x1 = LOWORD(lParam);
+ ev.y1 = HIWORD(lParam);
+ ev.key = 1;
+ if (message == WM_RBUTTONUP) ev.key = 2;
+ if (message == WM_MBUTTONUP) ev.key = 3;
+ ev_push(&ev);
+ return 0;
+ }
+
+ case WM_MOUSEWHEEL:
+ {
+ int z = (short)HIWORD(wParam);
+ ev.x1 = LOWORD(lParam) - clix;
+ ev.y1 = HIWORD(lParam) - cliy;
+ ev.type = EV_BUTTON;
+ ev.sh = ((GetKeyState(VK_SHIFT) & 0x80)!=0)? true:false;
+ ev.ct = ((GetKeyState(VK_CONTROL) & 0x80)!=0)? true:false;
+ ev.key = (z>0)? 4:5;
+ ev_push(&ev);
+ return 0;
+ }
+
+ case WM_MOUSEMOVE:
+ {
+ ev.type = EV_MOVE;
+ ev.x1 = LOWORD(lParam);
+ ev.y1 = HIWORD(lParam);
+ ev_push(&ev);
+ return 0;
+ }
+
+ case WM_KEYDOWN:
+ {
+ int ch=(int)wParam;
+ int result = 0;
+ int dir = 0;
+ bool fs = ((GetKeyState(VK_SHIFT) & 0x80)!=0)? true:false;
+ bool fc = ((GetKeyState(VK_CONTROL)& 0x80)!=0)? true:false;
+ bool fa = ((GetKeyState(VK_MENU) & 0x80)!=0)? true:false;
+
+ if (ch >= VK_NUMPAD1 && ch <= VK_NUMPAD9)
+ {
+ skip_key = true;
+ dir = ch - VK_NUMPAD0;
+ }
+ else
+ if ((VK_PRIOR <= ch && ch <=VK_DOWN) || (ch == VK_CLEAR) )
+ {
+ switch(ch)
+ {
+ case VK_LEFT: dir = 4; break;
+ case VK_RIGHT: dir = 6; break;
+ case VK_UP: dir = 8; break;
+ case VK_DOWN: dir = 2; break;
+ case VK_HOME: dir = 7; break;
+ case VK_PRIOR: dir = 9; break;
+ case VK_NEXT: dir = 3; break;
+ case VK_END: dir = 1; break;
+ case VK_CLEAR: dir = 5; break;
+ }
+ }
+
+ if (dir != 0)
+ {
+ ch = ck_table[dir-1];
+ if (fc)
+ ch += CK_CTRL_UP - CK_UP;
+ if (fs)
+ ch += CK_SHIFT_UP - CK_UP;
+
+ if (fa) ch |= 2048;
+ ev.key = ch;
+ ev.type = EV_KEYIN;
+ ev_push(&ev);
+ return 0;
+ } // dir!=0
+
+ else
+ if ( ch >= VK_PAUSE
+ && !(ch >= VK_CAPITAL && ch <= VK_SPACE)
+ && ch !=VK_PROCESSKEY
+ && ch != VK_NUMLOCK
+ && !(ch >=VK_LSHIFT && ch<= VK_RMENU)
+ && !(ch >= 0x30 && ch<= 0x39)
+ && !(ch >= 0x41 && ch<= 0x5a)
+ && !(ch >= 0xa6 && ch<= 0xe4)
+ ) result = 300+ch;
+
+ if (result)
+ {
+ if (fs) result |= 512;
+ if (fc) result |= 1024;
+ if (fa) result |= 2048;
+ ev.key = result;
+ ev.type = EV_KEYIN;
+ ev_push(&ev);
+ }
+
+ return 0;
+ }
+
+ case WM_CHAR:
+ {
+ if (skip_key)
+ {
+ skip_key = false;
+ return 0;
+ }
+ ev.key = (int)wParam;
+ ev.type = EV_KEYIN;
+ ev_push(&ev);
+ return 0;
+ }
+
+ case WM_PAINT:
+ {
+ hdc = BeginPaint(hWnd, &ps);
+ /*
+ int x1 = ps.rcPaint.left;
+ int x2 = ps.rcPaint.right;
+ int y1 = ps.rcPaint.top;
+ int y2 = ps.rcPaint.bottom;
+
+ int dx = xwin.dx;
+ int dy = xwin.dy;
+ */
+ win_main->redraw();
+ EndPaint(hWnd, &ps);
+ //ValidateRect(hWnd, NULL);
+ return 0;
+ }
+
+ case WM_MOVE:
+ {
+ clix = LOWORD(lParam);
+ cliy = HIWORD(lParam);
+ return 0;
+ }
+
+ case WM_COMMAND:
+ {
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+ switch( wmId )
+ {
+ default:
+ return DefWindowProc( hWnd, message, wParam, lParam );
+ }
+ return 0;
+ }
+ case WM_CLOSE:
+ if ( (mouse_get_mode() == MOUSE_MODE_COMMAND)
+ ||(!crawl_state.need_save) )
+ {
+ if (crawl_state.need_save)
+ {
+ save_game(true);
+ }
+ libgui_shutdown();
+ }
+ break;
+ case WM_DESTROY:
+ {
+ PostQuitMessage( 0 );
+ exit(0);
+ break;
+ }
+ default:
+ return DefWindowProc( hWnd, message, wParam, lParam );
+ }
+ return 0;
+}
+
+#ifdef USE_TILE
+void TileDrawDungeonAux(){
+ dib_pack *pBuf = region_tile->backbuf;
+
+ int new_palette = PAL_STD;
+ if (you.duration[DUR_BERSERKER]) new_palette = PAL_BER;
+ if (you.special_wield == SPWLD_SHADOW) new_palette = PAL_SHA;
+
+ if (new_palette != palette)
+ {
+ palette = new_palette;
+ SetDIBColorTable(pBuf->hDC, 0, 256, (RGBQUAD *)lpPalettes[palette]);
+ }
+}
+#endif
+
+bool windows_change_font(char *font_name, int *font_size, bool dos)
+{
+ CHOOSEFONT cf;
+
+ memset(&cf, 0, sizeof(cf));
+ cf.lStructSize = sizeof(cf);
+ cf.iPointSize = *font_size;
+ cf.nSizeMin = 8;
+ cf.nSizeMax = 24;
+ cf.Flags = CF_SCREENFONTS | CF_FIXEDPITCHONLY | CF_NOVERTFONTS
+ | CF_INITTOLOGFONTSTRUCT | CF_LIMITSIZE | CF_FORCEFONTEXIST;
+
+ LOGFONT lf;
+ strcpy(lf.lfFaceName, font_name);
+ lf.lfHeight = 16;
+ lf.lfWidth = 0;
+ lf.lfEscapement = 0;
+ lf.lfOrientation = lf.lfEscapement;
+ lf.lfWeight = FW_NORMAL;
+ lf.lfItalic = FALSE;
+ lf.lfUnderline = FALSE;
+ lf.lfStrikeOut = FALSE;
+ lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
+ lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ lf.lfQuality = DEFAULT_QUALITY;
+ lf.lfPitchAndFamily= FF_MODERN|FIXED_PITCH;
+ lf.lfCharSet = (dos)? OEM_CHARSET:ANSI_CHARSET;
+ cf.lpLogFont = &lf;
+
+ if (ChooseFont(&cf))
+ {
+ *font_size = (cf.iPointSize / 10);
+ strcpy(font_name, lf.lfFaceName);
+ return true;
+ }
+ return false;
+}
+
+void windows_get_winpos(int *x, int *y)
+{
+ WINDOWPLACEMENT wndpl;
+
+ // set length
+ wndpl.length = sizeof( WINDOWPLACEMENT );
+
+ if( GetWindowPlacement( win_main->hWnd, &wndpl ) != 0 )
+ {
+ *x = wndpl.rcNormalPosition.top;
+ *y = wndpl.rcNormalPosition.left;
+ }
+}
+
+void delay(unsigned long ms)
+{
+ Sleep((DWORD)ms);
+}
+
+int kbhit()
+{
+ MSG msg;
+
+ if (PeekMessage(&msg, NULL, WM_CHAR, WM_CHAR, PM_NOREMOVE)
+ || PeekMessage(&msg, NULL, WM_KEYDOWN, WM_KEYDOWN, PM_NOREMOVE)
+ /* || PeekMessage(&msg, NULL, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_NOREMOVE)*/ )
+ return 1;
+ else
+ return 0;
+}
+
+void update_screen()
+{
+}
diff --git a/crawl-ref/source/libx11.cc b/crawl-ref/source/libx11.cc
new file mode 100644
index 0000000000..cf291db862
--- /dev/null
+++ b/crawl-ref/source/libx11.cc
@@ -0,0 +1,478 @@
+#include "AppHdr.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef USE_X11 //Sys dep
+#include <X11/Xlib.h>
+#include <X11/X.h>
+#include <X11/Xutil.h>
+#include <X11/Xlocale.h>
+#include <X11/keysym.h>
+#include <X11/keysymdef.h>
+#include <X11/Xmd.h>
+#endif
+
+#include "cio.h"
+#include "enum.h"
+#include "externs.h"
+#include "guic.h"
+#include "libutil.h"
+
+/*
+ * Tile related stuff
+ */
+#ifdef USE_TILE
+
+#include "tiles.h"
+
+static Display *display=NULL;
+static int screen;
+
+static int x11_keypress(XKeyEvent *xev);
+static void x11_check_exposure(XEvent *xev);
+
+extern WinClass *win_main;
+
+void GetNextEvent(int *etype, int *key, bool *shift, bool *ctrl,
+ int *x1, int *y1, int *x2, int *y2)
+{
+ XEvent xev;
+
+ while(1)
+ {
+ XNextEvent(display, &xev);
+
+ if(xev.type==KeyPress)
+ {
+ *etype = EV_KEYIN;
+ *key = x11_keypress(&(xev.xkey));
+ break;
+ }
+ else if(xev.type==Expose)
+ {
+ x11_check_exposure(&xev);
+ }
+ else if(xev.type == ConfigureNotify)
+ {
+ win_main->ox = xev.xconfigure.x;
+ win_main->oy = xev.xconfigure.y;
+ break;
+ }
+ else if(xev.type==ButtonPress)
+ {
+ *etype = EV_BUTTON;
+ int button = xev.xbutton.button;
+ *shift = (xev.xkey.state & ShiftMask) ? true : false;
+ *ctrl = (xev.xkey.state & ControlMask) ? true : false;
+ *x1 = xev.xbutton.x;
+ *y1 = xev.xbutton.y;
+
+ if (button == 3) button = 2;
+ else if (button==2) button=3;
+ *key = button;
+ break;
+ }
+ else if(xev.type==MotionNotify || xev.type==EnterNotify)
+ {
+ *etype = EV_MOVE;
+ *x1 = xev.xbutton.x;
+ *y1 = xev.xbutton.y;
+ break;
+ }
+ else if (xev.type==LeaveNotify)
+ {
+ *etype = EV_MOVE;
+ *x1 = -100;
+ *y1 = -100;
+ break;
+ }
+ else if(xev.type==ButtonRelease)
+ {
+ *etype = EV_UNBUTTON;
+ int button = xev.xbutton.button;
+ if (button == 3) button = 2;
+ else if (button==2) button=3;
+
+ *x1 = xev.xbutton.x;
+ *y1 = xev.xbutton.y;
+ *key = button;
+ break;
+ }
+ }/*while*/
+}
+
+char *my_getenv(const char *envname, const char *def)
+{
+ const char *result = getenv(envname);
+ if (!result) result = def;
+ return (char *)result;
+}
+
+int my_getenv_int(const char *envname, int def)
+{
+ const char *rstr = getenv(envname);
+ if (!rstr) return def;
+ return atoi(rstr);
+}
+
+#if 0
+void libgui_load_prefs(struct pref_data *pref, int nprefs)
+{
+ int i;
+ strcpy(font_name, my_getenv("CRAWL_X11_FONT",
+ "-alias-fixed-bold-r-normal--16-*"));
+ strcpy(font_name, my_getenv("CRAWL_X11_FONT", "9x15"));
+ *crt_x = my_getenv_int("CRAWL_X11_CRTX",80);
+ *crt_y = my_getenv_int("CRAWL_X11_CRTY",25);
+ *msg_x = my_getenv_int("CRAWL_X11_MSGX",80);
+ *msg_y = my_getenv_int("CRAWL_X11_MSGY",8);
+ *map_x = my_getenv_int("CRAWL_X11_MAPX",3);
+ *map_y = my_getenv_int("CRAWL_X11_MAPY",3);
+ *dngn_x = my_getenv_int("CRAWL_X11_DNGNX",17);
+ *dngn_y = my_getenv_int("CRAWL_X11_DNGNY",17);
+}
+
+void libgui_save_prefs()
+{
+}
+#endif
+
+extern WinClass *win_main;
+extern TextRegionClass *region_tip;
+void update_tip_text(const char *tip)
+{
+ static char newtip[512];
+ static char oldtip[512];
+ char tbuf[35];
+
+ strncpy(newtip, tip, 500);
+ char* pc = strchr(newtip, '\n');
+ if (pc)
+ *pc = 0;
+
+ if (strncmp(oldtip, newtip, 500)==0)
+ return;
+ strncpy(oldtip, newtip, 500);
+
+ strncpy(tbuf,tip,34);
+ tbuf[34]=0;
+
+ if (win_main->active_layer == 0)
+ {
+ // avoid overruns...
+ if ((int)strlen(newtip) > region_tip->mx)
+ {
+ // try to remove inscriptions
+ char *ins = strchr(newtip, '{');
+ if (ins && ins[-1] == ' ') ins--;
+ if (ins && (ins - newtip <= region_tip->mx))
+ {
+ *ins = 0;
+ }
+ else
+ {
+ // try to remove state, e.g. "(worn)"
+ char *state = strchr(newtip, '(');
+ if (state && state[-1] == ' ') state--;
+ if (state && (state - newtip <= region_tip->mx))
+ {
+ *state = 0;
+ }
+ else
+ {
+ // if nothing else...
+ newtip[region_tip->mx] = 0;
+ newtip[region_tip->mx-1] = '.';
+ newtip[region_tip->mx-2] = '.';
+ }
+ }
+ }
+
+ region_tip->clear();
+ region_tip->gotoxy(1,1);
+ region_tip->addstr(newtip);
+ region_tip->make_active();
+ }
+ else
+ {
+ textattr( WHITE );
+ gotoxy(1, get_number_of_lines() + 1);
+ cprintf("%s", oldtip);
+ clear_to_end_of_line();
+ }
+}
+
+void TileDrawDungeonAux()
+{
+}
+
+#endif /* USE_TILE */
+
+/* X11 */
+void x11_check_exposure(XEvent *xev){
+ int sx, sy, ex, ey;
+
+ sx = xev->xexpose.x;
+ ex = xev->xexpose.x + (xev->xexpose.width)-1;
+ sy = xev->xexpose.y;
+ ey = xev->xexpose.y + (xev->xexpose.height)-1;
+
+ if (xev->xany.window != win_main->win) return;
+
+ win_main->redraw(sx,sy,ex,ey);
+}
+
+/* X11 */
+// This routine is taken from Angband main-x11.c
+int x11_keypress(XKeyEvent *xev)
+{
+
+#define IsSpecialKey(keysym) \
+ ((unsigned)(keysym) >= 0xFF00)
+
+ const unsigned int ck_table[9]=
+ {
+ CK_END, CK_DOWN, CK_PGDN,
+ CK_LEFT, CK_INSERT, CK_RIGHT,
+ CK_HOME, CK_UP, CK_PGUP
+ };
+
+ int dir, base;
+
+ int n;
+ bool mc, ms, ma;
+ unsigned int ks1;
+
+ XKeyEvent *ev = (XKeyEvent*)(xev);
+ KeySym ks;
+ char buf[256];
+
+ n = XLookupString(ev, buf, 125, &ks, NULL);
+ buf[n] = '\0';
+
+ if (IsModifierKey(ks)) return 0;
+
+ /* Extract "modifier flags" */
+ mc = (ev->state & ControlMask) ? true : false;
+ ms = (ev->state & ShiftMask) ? true : false;
+ ma = (ev->state & Mod1Mask) ? true : false;
+
+ /* Normal keys */
+ if (n && !IsSpecialKey(ks))
+ {
+ buf[n] = 0;
+
+ //Hack Ctrl+[0-9] etc.
+ if (mc && ((ks>='0' && ks<='9') || buf[0]>=' '))
+ {
+ return 1024|ks;
+ }
+
+ if (!ma)
+ {
+ return buf[0];
+ }
+
+ /* Alt + ? */
+ return 2048|buf[0];
+ }
+
+ /* Hack -- convert into an unsigned int */
+ ks1 = (uint)(ks);
+
+ /* Handle a few standard keys (bypass modifiers) XXX XXX XXX */
+ base = dir = 0;
+ switch (ks1)
+ {
+ case XK_Escape:
+ base = 0x1b;
+ break;
+ case XK_Return:
+ base = '\r';
+ break;
+ case XK_Tab:
+ base = '\t';
+ break;
+ case XK_Delete:
+ case XK_BackSpace:
+ base = '\010';
+ break;
+
+ // for menus
+ case XK_Down:
+ return CK_DOWN;
+ case XK_Up:
+ return CK_UP;
+ case XK_Left:
+ return CK_LEFT;
+ case XK_Right:
+ return CK_RIGHT;
+
+ /*
+ * Keypad
+ */
+
+ case XK_KP_1:
+ case XK_KP_End:
+ dir = 1;
+ break;
+
+ case XK_KP_2:
+ case XK_KP_Down:
+ dir = 2;
+ break;
+
+ case XK_KP_3:
+ case XK_KP_Page_Down:
+ dir = 3;
+ break;
+
+ case XK_KP_6:
+ case XK_KP_Right:
+ dir = 6;
+ break;
+
+ case XK_KP_9:
+ case XK_KP_Page_Up:
+ dir = 9;
+ break;
+
+ case XK_KP_8:
+ case XK_KP_Up:
+ dir = 8;
+ break;
+
+ case XK_KP_7:
+ case XK_KP_Home:
+ dir = 7;
+ break;
+
+ case XK_KP_4:
+ case XK_KP_Left:
+ dir = 4;
+ break;
+
+ case XK_KP_5:
+ dir = 5;
+ break;
+ }/* switch */
+
+ //Handle keypad first
+ if (dir != 0)
+ {
+ int result = ck_table[dir-1];
+
+ if (ms) result += CK_SHIFT_UP - CK_UP;
+ if (mc) result += CK_CTRL_UP - CK_UP;
+ return result;
+ }
+
+ if (base != 0)
+ {
+ if (ms) base |= 1024;
+ if (mc) base |= 2048;
+ if (ma) base |= 4096;
+ return base;
+ }
+ //Hack Special key
+ if (ks1 >=0xff00)
+ {
+ base = 512 + ks1 - 0xff00;
+ if (ms) base |= 1024;
+ if (mc) base |= 2048;
+ if (ma) base |= 4096;
+ return base;
+ }
+
+ return 0;
+}
+
+void libgui_init_sys()
+{
+ GuicInit(&display, &screen);
+}
+
+void libgui_shutdown_sys()
+{
+ GuicDeinit();
+}
+
+void update_screen()
+{
+ XFlush(display);
+}
+
+int kbhit()
+{
+ XEvent xev;
+
+ if (XCheckMaskEvent(display,
+ KeyPressMask | ButtonPressMask, &xev))
+ {
+ XPutBackEvent(display, &xev);
+ return 1;
+ }
+ return 0;
+}
+
+void delay( unsigned long time )
+{
+ usleep( time * 1000 );
+}
+
+/* Convert value to string */
+int itoa(int value, char *strptr, int radix)
+{
+ unsigned int bitmask = 32768;
+ int ctr = 0;
+ int startflag = 0;
+
+ if (radix == 10)
+ {
+ sprintf(strptr, "%i", value);
+ }
+ if (radix == 2) /* int to "binary string" */
+ {
+ while (bitmask)
+ {
+ if (value & bitmask)
+ {
+ startflag = 1;
+ sprintf(strptr + ctr, "1");
+ }
+ else
+ {
+ if (startflag)
+ sprintf(strptr + ctr, "0");
+ }
+
+ bitmask = bitmask >> 1;
+ if (startflag)
+ ctr++;
+ }
+
+ if (!startflag) /* Special case if value == 0 */
+ sprintf((strptr + ctr++), "0");
+
+ strptr[ctr] = (char) NULL;
+ }
+ return (0); /* Me? Fail? Nah. */
+}
+
+
+// Convert string to lowercase.
+char *strlwr(char *str)
+{
+ unsigned int i;
+
+ for (i = 0; i < strlen(str); i++)
+ str[i] = tolower(str[i]);
+
+ return (str);
+}
+
+int stricmp( const char *str1, const char *str2 )
+{
+ return (strcmp(str1, str2));
+}
diff --git a/crawl-ref/source/macro.cc b/crawl-ref/source/macro.cc
index a87e86172d..e069e630dd 100644
--- a/crawl-ref/source/macro.cc
+++ b/crawl-ref/source/macro.cc
@@ -794,7 +794,11 @@ void macro_add_query( void )
"buggy") : "",
(keymap ? "keymap" : "macro") );
- keyseq key = getch_mul();
+ keyseq key;
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_MACRO);
+#endif
+ key = getch_mul();
cprintf( "%s" EOL, (vtostr( key )).c_str() ); // echo key to screen
diff --git a/crawl-ref/source/makefile.x11 b/crawl-ref/source/makefile.x11
new file mode 100644
index 0000000000..4eebd58053
--- /dev/null
+++ b/crawl-ref/source/makefile.x11
@@ -0,0 +1,365 @@
+# -*- Makefile -*- for Dungeon Crawl (unix)
+
+#
+# Modified for Crawl Reference by $Author: dshaligram $ on $Date: 2007-06-24T16:27:58.475101Z $
+#
+
+GAME = crawl
+
+# this file contains a list of the libraries.
+# it will make a variable called OBJECTS that contains all the libraries
+include makefile.obj
+
+OBJECTS += libgui.o tile1.o tile2.o libx11.o guic.o guic-x11.o
+
+CXX = g++
+DELETE = rm -f
+COPY = cp
+OS_TYPE = UNIX
+EXTRA_INCLUDES = -DUSE_X11 -DUSE_TILE
+
+# Change this to y if you want to use Unicode glyphs in the map, and you have
+# libncursesw available.
+UNICODE_GLYPHS = n
+
+# If you have lex and yacc, set DOYACC to y (lowercase y).
+DOYACC := y
+
+# Permissions to set on the game executable.
+MCHMOD := 2755
+
+# Permissions to set on the save directory.
+MCHMOD_SAVEDIR := 775
+
+# The user:group to install the game as.
+INSTALL_UGRP := games:games
+
+INSTALLDIR := /usr/games/crawl
+
+# If you're installing Crawl for multiple users, you *must* set this to a
+# valid path before building Crawl. This is not necessary if you are building
+# Crawl for a single user.
+
+# SAVEDIR := /usr/games/crawl/saves/
+# DATADIR := /usr/games/crawl/data/
+
+LEX := flex
+YACC := bison -y
+
+ifeq ($(UNICODE_GLYPHS),y)
+# Include path for (n)curses with Unicode support.
+INCLUDES = -I/usr/include/ncursesw
+
+# Your ncurses library may include Unicode support, and you may not have a
+# separate libncursesw; in that case, change this line accordingly.
+LIBCURS = ncursesw
+EXTRA_FLAGS += -DUNICODE_GLYPHS
+
+# The standard ncurses library also supports Unicode on Mac OS/Darwin.
+ifeq ($(shell uname),Darwin)
+LIBCURS = ncurses
+endif
+
+else
+# Include path for curses or ncurses (non-Unicode).
+INCLUDES = -I/usr/include/ncurses
+LIBCURS = ncurses
+endif
+
+ifeq ($(LUASRC),)
+LUASRC := util/lua/src
+endif
+
+LUALIB = lua
+LUALIBA = l$(LUALIB).a
+EXTRA_DEPENDS += $(LUASRC)$(LUALIBA)
+
+DBH_FILE := /usr/include/db.h
+NDBM_FILE := /usr/include/ndbm.h
+
+HAVE_DBH := $(shell [ -f $(DBH_FILE) ] && echo y)
+HAVE_NDBM := $(shell [ -f $(NDBM_FILE) ] && echo y)
+
+ifeq ($(HAVE_DBH),y)
+ifneq ($(shell grep dbm_open $(DBH_FILE)),)
+SELDBM := -DDB_DBH
+LIBDBM := -ldb
+endif
+endif
+
+ifeq ($(HAVE_NDBM),y)
+SELDBM ?= -DDB_NDBM
+ifeq ($(SELDBM),-DDB_NDBM)
+LIBDBM := -ldbm
+endif
+endif
+
+SQLSRC := util/sqlite
+SQLLIB := sqlite3
+SQLLIBA := lib$(SQLLIB).a
+FSQLLIBA := $(SQLSRC)/$(SQLLIBA)
+
+ifeq ($(LIBDBM),)
+LIBDBM := -L$(SQLSRC) -lsqlite3
+EXTRA_INCLUDES += -I$(SQLSRC)
+EXTRA_DEPENDS += $(FSQLLIBA)
+endif
+
+LIB = -l$(LIBCURS) -L$(LUASRC) -l$(LUALIB) $(LIBDBM) -L/usr/X11R6/lib -lX11 -lpng
+
+
+INCLUDES := $(INCLUDES) -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES)
+
+CFWARN := -Wall -Wwrite-strings \
+ -Wshadow -pedantic
+
+CFOTHERS := -fsigned-char -D$(OS_TYPE) $(EXTRA_FLAGS)
+
+ifneq ($(SAVEDIR),)
+CFOTHERS += '-DSAVE_DIR_PATH="$(SAVEDIR)"'
+endif
+
+ifneq ($(DATADIR),)
+CFOTHERS += '-DDATA_DIR_PATH="$(DATADIR)"'
+endif
+
+CFOTHERS += $(SELDBM)
+
+CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS)
+YCFLAGS := $(INCLUDES) $(CFOTHERS)
+
+UTIL = util/
+
+YTABC := levcomp.tab.c
+YTABH := levcomp.tab.h
+
+RLTILES = rltiles/
+
+TILEHEADERS = \
+tiledef.h \
+tiledef-p.h \
+tiledef-w2d.h \
+tilecount-w2d.h \
+tilep-cmt.h
+
+TILEFILES = \
+ tile.png \
+ player.png \
+ wall2d.png
+DESTTILEFILES = $(TILEFILES:%=dat/tiles/%)
+
+EXTRA_DEPENDS += $(TILEHEADERS) $(DESTTILEFILES)
+
+OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS)
+
+ifeq ($(LEX),)
+DOYACC :=
+endif
+
+ifeq ($(YACC),)
+DOYACC :=
+endif
+
+GAME_DEPENDS := $(EXTRA_DEPENDS) $(OBJECTS)
+SRC_PKG_BASE := stone_soup
+SRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | \
+ egrep -o '[0-9]\.[0-9](\.[0-9])?')
+PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-src
+SRC_PKG_TAR := $(PKG_SRC_DIR).tbz2
+SRC_PKG_ZIP := $(PKG_SRC_DIR).zip
+
+PKG_TIDY_LIST := $(UTIL)*.o $(LEVCOMP) *.o \
+ $(UTIL)*.tab.cc $(UTIL)*.tab.h $(UTIL)*.lex.cc *.ixx
+PKG_EXCLUDES := $(PWD)/misc/src-pkg-excludes.lst
+
+##########################################################################
+
+all: $(GAME)
+
+##########################################################################
+# Dependencies
+
+DEPENDENCY_MKF := makefile.dep
+
+depend: $(OBJECTS:.o=.cc)
+ rm -f $(DEPENDENCY_MKF)
+ @for i in $^; do \
+ echo "Updating dependencies for $$i"; \
+ $(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF) 2>/dev/null; \
+ done
+
+-include $(DEPENDENCY_MKF)
+
+##########################################################################
+# The level compiler
+#
+
+ifeq ($(DOYACC),y)
+
+prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc
+ cp $^ prebuilt/
+
+$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp
+ cd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \
+ && mv $(YTABC) levcomp.tab.cc || false
+
+$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp
+ cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp
+
+else
+
+# Pull the level-compiler stuff up from prebuilt/
+
+$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc
+ cp prebuilt/*.h $(UTIL)
+ cp $< $@
+
+
+$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc
+ cp $< $@
+
+endif
+
+##########################################################################
+# RLTiles
+#
+
+ORIGTILEHEADERS = $(TILEHEADERS:%=$(RLTILES)%)
+ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)%)
+
+$(ORIGTILEHEADERS): makerltiles
+
+makerltiles:
+ cd $(RLTILES) && make -f makefile.unix all && cd ..
+
+$(TILEHEADERS): $(ORIGTILEHEADERS)
+ cp $(RLTILES)$@ .
+
+$(ORIGTILEFILES): makerltiles
+
+dat/tiles/%.png: rltiles/%.png
+ mkdir -p dat/tiles
+ $(COPY) $< $@
+
+clean-rltiles:
+ cd $(RLTILES) && make -f makefile.unix distclean && cd ..
+ $(DELETE) $(TILEHEADERS)
+
+##########################################################################
+
+
+##########################################################################
+# The actual build targets
+#
+
+install: $(GAME)
+ [ -d $(INSTALLDIR) ] || mkdir -p $(INSTALLDIR)
+ $(COPY) $(GAME) $(INSTALLDIR)
+ chown $(INSTALL_UGRP) $(INSTALLDIR)/$(GAME)
+ chmod ${MCHMOD} ${INSTALLDIR}/$(GAME)
+ifeq ($(DATADIR),)
+ $(error DATADIR not set! Set DATADIR and run make clean install again)
+endif
+ mkdir -p $(DATADIR)/dat/clua
+ cp dat/*.des $(DATADIR)/dat
+ cp dat/*.txt $(DATADIR)/dat
+ cp dat/clua/*.lua $(DATADIR)/dat/clua
+ cp -r lua $(DATADIR)/dat
+ mkdir -p $(DATADIR)/docs
+ cp ../docs/*.txt $(DATADIR)/docs
+ mkdir -p $(DATADIR)/dat/tiles
+ cp dat/tiles/*.png $(DATADIR)/dat/tiles
+ chown -R $(INSTALL_UGRP) $(DATADIR)
+ifneq ($(SAVEDIR),)
+ mkdir -p $(SAVEDIR)
+ chown $(INSTALL_UGRP) $(SAVEDIR)
+ chmod $(MCHMOD_SAVEDIR) $(SAVEDIR)
+endif
+ ln -s $(INSTALLDIR)/$(GAME) /usr/local/bin/
+
+clean:
+ $(DELETE) *.o
+ $(DELETE) $(UTIL)*.o
+ $(DELETE) $(LEVCOMP)
+ $(DELETE) $(UTIL)*.tab.cc $(UTIL)*.tab.c $(UTIL)*.tab.h $(UTIL)*.lex.cc
+ $(DELETE) *.ixx
+
+clean-lua:
+ cd $(LUASRC) && $(MAKE) clean
+
+clean-sql:
+ cd $(SQLSRC) && $(MAKE) clean
+
+distclean: clean clean-lua clean-sql clean-rltiles
+ $(DELETE) bones.*
+ $(DELETE) morgue.txt
+ $(DELETE) scores
+ $(DELETE) $(GAME)
+ $(DELETE) *.sav
+ $(DELETE) core
+ $(DELETE) *.0*
+ $(DELETE) *.lab
+ $(DELETE) $(DEPENDENCY_MKF)
+
+$(GAME): $(GAME_DEPENDS)
+ ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
+
+debug: $(GAME_DEPENDS)
+ ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
+
+profile: $(GAME_DEPENDS)
+ ${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
+
+.cc.o:
+ ${CXX} ${CFLAGS} -c $<
+
+# [ds] Note we don't use the standard CFLAGS here; that's intentional, most
+# flex/bison combos I've tried don't produce code that passes the warnings
+# test.
+$(UTIL)%.o: $(UTIL)%.cc
+ $(CXX) $(YCFLAGS) -o $@ -c $<
+
+#############################################################################
+# Build Lua
+
+$(LUASRC)$(LUALIBA):
+ echo Building Lua...
+ cd $(LUASRC) && $(MAKE) crawl_unix
+
+#############################################################################
+# Build SQLite
+
+$(FSQLLIBA):
+ echo Building SQLite
+ cd $(SQLSRC) && $(MAKE)
+
+#############################################################################
+# Packaging a source tarball for release
+#
+
+# To package, you *must* have lex and yacc to generate the intermediates.
+ifeq ($(DOYACC),y)
+package-source: distclean prebuildyacc pkgtidy depend removeold vlink \
+ pkgtarbz2 pkgzip
+
+pkgtidy:
+ $(DELETE) $(PKG_TIDY_LIST)
+
+removeold:
+ if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fi
+ if [ -f ../../$(SRC_PKG_ZIP) ]; then $(DELETE) ../../$(SRC_PKG_ZIP); fi
+
+# [ds] Existing directory names could produce a bad package!
+vlink:
+ cd .. && WHERE=$$PWD && cd .. && \
+ ( [ -e $(PKG_SRC_DIR) ] || ln -sf $$WHERE $(PKG_SRC_DIR) )
+
+pkgtarbz2:
+ cd ../.. && tar -ch --bzip2 -f $(SRC_PKG_TAR) \
+ -X $(PKG_EXCLUDES) $(PKG_SRC_DIR)
+
+pkgzip:
+ cd ../.. && zip -rq $(SRC_PKG_ZIP) $(PKG_SRC_DIR) \
+ -x@$(PKG_EXCLUDES)
+
+endif
diff --git a/crawl-ref/source/makefile_tiles.mgw b/crawl-ref/source/makefile_tiles.mgw
new file mode 100644
index 0000000000..67c517a81d
--- /dev/null
+++ b/crawl-ref/source/makefile_tiles.mgw
@@ -0,0 +1,242 @@
+# -*- Makefile -*- for Dungeon Crawl (Win32, MinGW)
+
+# makefile.obj includes a list of object files needed to build Crawl.
+include makefile.obj
+
+ifeq ($(DEBUG_CRAWL),)
+OPATH := rel
+else
+OPATH := dbg
+endif
+
+# need .exe so make will find the right file
+APPNAME = $(OPATH)\crawl.exe
+CXX = g++
+DELETE = del
+COPY = copy
+OS_TYPE = WIN32TILES
+
+INSTALLDIR := $(OPATH)
+
+# If you don't have flex or bison, set DOYACC to N or empty.
+DOYACC := n
+
+LEX := flex
+YACC := bison -y
+
+ifeq ($(LUASRC),)
+LUASRC := util\lua\src
+endif
+
+LUALIB = lua
+LUALIBA = lib$(LUALIB).a
+
+SQLSRC := util\sqlite
+SQLLIB := sqlite3
+SQLIBA := lib$(SQLLIB).a
+FSQLLIBA := $(SQLLIB)\$(SQLIBA)
+
+LIB = -static -lwinmm -mwindows -lcomctl32 -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB)
+INCLUDES := -Iutil -I. -I$(LUASRC) -I$(SQLSRC)
+
+CFWARN := -Wall -Wwrite-strings \
+ -Werror \
+ -pedantic
+# -Wshadow
+
+CFOTHERS := -fsigned-char \
+ -fstrict-aliasing \
+ -pedantic \
+ -D$(OS_TYPE) $(EXTRA_FLAGS) \
+ -DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS \
+ -DUSE_TILE -DWINVER=0x0400 -D_WIN32_IE=0x0400
+# -DREGEX_PCRE
+
+CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS)
+YCFLAGS := $(INCLUDES) $(CFOTHERS)
+
+OBJECTS := $(OBJECTS) libgui.o tile1.o tile2.o libwt.o guic.o guic-win.o
+
+LDFLAGS =
+
+UTIL = util/
+
+YTABC := levcomp.tab.c
+YTABH := levcomp.tab.h
+
+RLTILES = rltiles
+
+TILEHEADERS = \
+tiledef.h \
+tiledef-p.h \
+tiledef-w2d.h \
+tilecount-w2d.h \
+tilep-cmt.h
+
+TILEFILES = \
+tile.bmp \
+player.bmp \
+wall2d.bmp
+DESTTILEFILES = $(TILEFILES:%=dat\tiles\\%)
+
+ifeq ($(LEX),)
+DOYACC :=
+endif
+
+ifeq ($(YACC),)
+DOYACC :=
+endif
+
+# Do the levcomp stuff first because that's the most likely to fail.
+OBJECTS := levcomp.tab.o levcomp.lex.o \
+ $(OBJECTS)
+
+OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file))
+
+GAME_DEPENDS := prepare $(LUASRC)\$(LUALIBA) $(FSQLLIBA) $(TILEHEADERS) $(DESTTILEFILES) $(OBJECTS)
+
+##########################################################################
+
+all: $(APPNAME)
+
+prepare:
+ if not exist $(OPATH) mkdir $(OPATH)
+
+DEPENDENCY_MKF := makefile.dep
+-include $(DEPENDENCY_MKF)
+
+##########################################################################
+# The level compiler
+#
+ifeq ($(DOYACC),y)
+
+# [ds] A plague on the broken copy command on Windoze.
+prebuildyacc: $(UTIL)levcomp.lex.cc $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h
+ $(subst /,\,for %%f in ($^) do $(COPY) %%f prebuilt)
+
+$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp
+ $(subst /,\, cd $(UTIL)) && $(YACC) -d -b levcomp levcomp.ypp
+ $(subst /,\, cd $(UTIL)) && move $(YTABC) levcomp.tab.cc
+
+$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp
+ $(subst /,\, cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp)
+
+else
+
+$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc
+ $(subst /,\,$(COPY) prebuilt/*.h $(UTIL))
+ $(subst /,\,$(COPY) $< $@)
+
+$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc
+ $(subst /,\,$(COPY) $< $@)
+
+endif
+
+##########################################################################
+# RLTiles
+#
+
+ORIGTILEHEADERS = $(TILEHEADERS:%=$(RLTILES)\\%)
+ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)\\%)
+
+$(ORIGTILEHEADERS): makerltiles
+
+makerltiles:
+ pushd $(RLTILES) && $(MAKE) -f makefile.mgw all && popd
+
+$(TILEHEADERS): $(ORIGTILEHEADERS)
+ copy /y $(RLTILES)\$@ .
+
+$(ORIGTILEFILES): makerltiles
+
+dat\tiles\\%.bmp: rltiles\\%.bmp
+ mkdir dat\tiles 2>nul || echo "" >nul
+ $(COPY) $< $@
+
+clean-rltiles:
+ pushd $(RLTILES) && $(MAKE) -f makefile.mgw distclean && popd
+ $(DELETE) $(TILEHEADERS)
+
+##########################################################################
+
+
+##########################################################################
+
+install: $(APPNAME)
+ifneq ($(OPATH),$(INSTALLDIR))
+ $(COPY) $(APPNAME) ${INSTALLDIR}
+endif
+ mkdir $(INSTALLDIR)\dat 2>nul || echo "" >nul
+ mkdir $(INSTALLDIR)\dat\clua 2>null || echo "">nul
+ copy /y dat\*.des $(INSTALLDIR)\dat
+ copy /y dat\*.txt $(INSTALLDIR)\dat
+ copy /y dat\clua\*.lua $(INSTALLDIR)\dat\clua
+ copy /y ..\init.txt $(INSTALLDIR)
+ mkdir $(INSTALLDIR)\dat\tiles 2>nul || echo "" > nul
+ copy /y dat\tiles\*.bmp $(INSTALLDIR)\dat\tiles
+
+clean:
+ $(DELETE) $(OPATH)\*.o
+ $(subst /,\,$(DELETE) $(UTIL)*.o)
+ $(subst /,\,$(DELETE) $(UTIL)*.exe)
+ $(subst /,\,$(DELETE) $(UTIL)*.lex.cc)
+ $(subst /,\,$(DELETE) $(UTIL)*.tab.cc)
+ $(subst /,\,$(DELETE) $(UTIL)*.tab.h)
+ $(subst /,\,$(DELETE) $(UTIL)*.tab.c)
+ $(subst /,\,$(DELETE) *.ixx)
+
+clean-lua:
+ cd $(LUASRC) && $(MAKE) clean_win
+
+clean-sql:
+ cd $(SQLSRC) && $(MAKE) "RM_F=del /f" clean
+
+distclean: clean clean-lua clean-sql clean-rltiles
+ $(DELETE) $(OPATH)\*.o
+ $(DELETE) *.o
+ $(DELETE) bones.*
+ $(DELETE) $(OPATH)\bones.*
+ $(DELETE) morgue.txt
+ $(DELETE) $(OPATH)\morgue.txt
+ $(DELETE) scores
+ $(DELETE) $(OPATH)\scores
+ $(DELETE) crawl.exe
+ $(DELETE) $(subst /,\,$(APPNAME))
+ $(DELETE) *.sav
+ $(DELETE) $(OPATH)\*.sav
+ $(DELETE) core
+ $(DELETE) $(OPATH)\core
+ $(DELETE) *.0*
+ $(DELETE) $(OPATH)\*.0*
+ $(DELETE) *.lab
+ $(DELETE) $(OPATH)\*.lab
+
+$(APPNAME): $(GAME_DEPENDS)
+ ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
+ strip $(APPNAME)
+
+debug: $(GAME_DEPENDS)
+ ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
+
+profile: $(GAME_DEPENDS)
+ ${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
+
+$(OPATH)/%.o: %.cc
+ ${CXX} ${CFLAGS} -o $@ -c $<
+
+$(OPATH)/%.o: $(UTIL)%.cc
+ $(CXX) $(YCFLAGS) -o $@ -c $<
+
+#############################################################################
+# Build Lua
+
+$(LUASRC)\$(LUALIBA):
+ @echo Building Lua...
+ @cd $(LUASRC) && $(MAKE) crawl_mingw
+
+#############################################################################
+# Build SQLite
+
+$(FSQLLIBA):
+ @echo Building SQLite
+ cd $(SQLSRC) && $(MAKE)
diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc
index a486b9cea9..48aa0100bc 100644
--- a/crawl-ref/source/menu.cc
+++ b/crawl-ref/source/menu.cc
@@ -12,6 +12,7 @@
#include "macro.h"
#include "message.h"
#include "player.h"
+#include "tiles.h"
#include "tutorial.h"
#include "view.h"
#include "initfile.h"
@@ -128,8 +129,11 @@ void Menu::do_menu()
alive = true;
while (alive)
{
+#ifdef USE_TILE
+ TileRedrawInv(REGION_INV2);
+#endif
int keyin = getchm(c_getch);
-
+
if (!process_key( keyin ))
return;
}
@@ -522,6 +526,20 @@ void Menu::select_index( int index, int qty )
}
}
+int Menu::get_entry_index( const MenuEntry *e ) const
+{
+ int index = 0;
+ for (unsigned int i = first_entry; i < items.size(); i++)
+ {
+ if (items[i] == e)
+ return index;
+ if (items[i]->quantity != 0)
+ index++;
+ }
+
+ return -1;
+}
+
void Menu::draw_menu()
{
clrscr();
@@ -542,6 +560,10 @@ void Menu::draw_menu()
gotoxy( 1, y_offset + pagesize - count_linebreaks(more) );
more.display();
}
+
+#ifdef USE_TILE
+ TileRedrawInv(REGION_INV2);
+#endif
}
void Menu::update_title()
@@ -871,7 +893,7 @@ int slider_menu::item_colour(int index, const MenuEntry *me) const
int colour = Menu::item_colour(index, me);
if (index == selected && selected != -1)
{
-#if defined(WIN32CONSOLE) || defined(DOS)
+#if defined(WIN32CONSOLE) || defined(DOS) || defined (USE_TILE)
colour = dos_brand(colour, CHATTR_REVERSE);
#else
colour |= COLFLAG_REVERSE;
@@ -1475,9 +1497,15 @@ bool formatted_scroller::process_key( int keyin )
case CK_ESCAPE:
return false;
case ' ': case '+': case '=': case CK_PGDN: case '>': case '\'':
+#ifdef USE_TILE
+ case CK_MOUSE_B5:
+#endif
repaint = page_down();
break;
case '-': case CK_PGUP: case '<': case ';':
+#ifdef USE_TILE
+ case CK_MOUSE_B4:
+#endif
repaint = page_up();
break;
case CK_UP:
diff --git a/crawl-ref/source/menu.h b/crawl-ref/source/menu.h
index 014932cd77..86bdc4f246 100644
--- a/crawl-ref/source/menu.h
+++ b/crawl-ref/source/menu.h
@@ -46,6 +46,7 @@ struct menu_letter
};
struct item_def;
+class Menu;
int menu_colour(const std::string &itemtext,
const std::string &prefix = "",
@@ -218,6 +219,9 @@ public:
size_t item_count() const { return items.size(); }
+ // Get entry index, skipping quantity 0 entries. Returns -1 if not found.
+ int get_entry_index( const MenuEntry *e ) const;
+
public:
typedef std::string (*selitem_tfn)( const std::vector<MenuEntry*> *sel );
typedef void (*drawitem_tfn)(int index, const MenuEntry *me);
diff --git a/crawl-ref/source/message.cc b/crawl-ref/source/message.cc
index 72dcc74086..1f36b305db 100644
--- a/crawl-ref/source/message.cc
+++ b/crawl-ref/source/message.cc
@@ -758,6 +758,10 @@ void more(void)
message_out(crawl_view.msgsz.y - 1,
LIGHTGREY, "--more--", 2, false);
+#ifdef USE_TILE
+ mouse_control mc(MOUSE_MODE_MORE);
+#endif
+
do
keypress = getch();
while (keypress != ' ' && keypress != '\r' && keypress != '\n');
@@ -808,7 +812,7 @@ std::string get_last_messages(int mcount)
void replay_messages(void)
{
int win_start_line = 0;
- unsigned char keyin;
+ int keyin;
bool full_buffer = true;
int num_msgs = NUM_STORED_MESSAGES;
@@ -844,7 +848,7 @@ void replay_messages(void)
{
clrscr();
- gotoxy(1, 1);
+ gotoxy(1, 1, GOTO_CRT);
for (int i = 0; i < num_lines - 2; i++)
{
@@ -880,7 +884,7 @@ void replay_messages(void)
break;
case FSOP_TEXT:
textcolor( colour );
- gotoxy(curcol, wherey());
+ gotoxy(curcol, wherey(), GOTO_CRT);
cprintf(fs.ops[j].text.c_str());
curcol += multibyte_strlen(fs.ops[j].text);
break;
@@ -923,7 +927,7 @@ void replay_messages(void)
cprintf( "<< Lines %d-%d of %d (Up: k<-8, Down: j>+2) >>",
rel_start, rel_end, num_msgs );
- keyin = get_ch();
+ keyin = getch();
if ((full_buffer && NUM_STORED_MESSAGES > num_lines - 2)
|| (!full_buffer && Next_Message > num_lines - 2))
@@ -931,6 +935,11 @@ void replay_messages(void)
int new_line;
int end_mark;
+#ifdef USE_TILE
+ if (keyin == CK_MOUSE_B4) keyin = '8';
+ if (keyin == CK_MOUSE_B5) keyin = '2';
+#endif
+
if (keyin == 'k' || keyin == '8' || keyin == '-' || keyin == '<')
{
new_line = win_start_line - (num_lines - 2);
diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc
index 4ae926d439..9d55eeda9d 100644
--- a/crawl-ref/source/misc.cc
+++ b/crawl-ref/source/misc.cc
@@ -71,6 +71,7 @@
#include "stash.h"
#include "state.h"
#include "stuff.h"
+#include "tiles.h"
#include "terrain.h"
#include "transfor.h"
#include "traps.h"
@@ -1193,6 +1194,16 @@ void down_stairs( int old_level, dungeon_feature_type force_stair,
&& !level_type_exits_down(old_level_type))
you.your_level--;
+
+#ifdef USE_TILE
+ // init micromap
+ GmapInit(false); // do not erase tile backup data
+ TileLoadWall(false);
+ tile_clear_buf();
+ if (newlevel)
+ tile_init_flavor();
+#endif // USE_TILE
+
switch (you.level_type)
{
case LEVEL_ABYSS:
@@ -1329,7 +1340,7 @@ void new_level(void)
{
textcolor(LIGHTGREY);
- gotoxy(crawl_view.hudp.x + 6, 12);
+ gotoxy(7, 12, GOTO_STAT);
#if DEBUG_DIAGNOSTICS
cprintf( "(%d) ", you.your_level + 1 );
diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc
index a970cb99e9..767eea665d 100644
--- a/crawl-ref/source/mutation.cc
+++ b/crawl-ref/source/mutation.cc
@@ -27,7 +27,7 @@
#include <conio.h>
#endif
-#ifdef UNIX
+#if defined(UNIX) && !defined(USE_TILE)
#include "libunix.h"
#endif
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index d5cb61f633..3da0bd96f6 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -2268,6 +2268,11 @@ static void enter_player_name(bool blankOK)
if (!read_player_name(name, kNameLen, existing_chars, char_menu))
end(0);
+#ifdef USE_TILE
+ clrscr();
+ gotoxy(1, 1);
+#endif
+
// Laboriously trim the damn thing.
std::string read_name = name;
trim_string(read_name);
@@ -2280,7 +2285,7 @@ static void enter_player_name(bool blankOK)
static bool validate_player_name(bool verbose)
{
-#if defined(DOS) || defined(WIN32CONSOLE)
+#if defined(DOS) || defined(WIN32CONSOLE) || defined(WIN32TILES)
// quick check for CON -- blows up real good under DOS/Windows
if (stricmp(you.your_name, "con") == 0
|| stricmp(you.your_name, "nul") == 0
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index 2d3ce26638..234ec87019 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -40,6 +40,8 @@
#include "stuff.h"
#include "transfor.h"
+#include "tiles.h"
+
static int bad_ench_colour( int lvl, int orange, int red )
{
if (lvl > red)
@@ -71,7 +73,7 @@ void update_message_status()
{
textcolor(LIGHTBLUE);
- gotoxy(crawl_view.hudp.x + 35, 2);
+ gotoxy(36, 2, GOTO_STAT);
if (SysEnv.have_messages)
cprintf("(msg)");
else
@@ -94,19 +96,54 @@ void update_turn_count()
// FIXME: Create some kind of layout manager class so we can
// templatise the heads-up display layout and stop hardcoding
// these coords.
- gotoxy(crawl_view.hudp.x + 21, 10);
+ gotoxy(22, 10, GOTO_STAT);
textcolor(LIGHTGREY);
// Show the turn count starting from 1. You can still quit on turn 0.
cprintf("%ld", you.num_turns);
}
+#ifdef USE_TILE
+void draw_hp_bar(int hp, int maxhp)
+{
+#define HPBAR_OX 20
+#define HPBAR_OY 3
+#define HPBAR_WIDTH (40-HPBAR_OX)
+
+ static int oldhp = 0;
+ static int oldhx = 0;
+ int cx;
+ int hx = HPBAR_WIDTH * hp / maxhp;
+
+ gotoxy(HPBAR_OX, HPBAR_OY, GOTO_STAT);
+
+ for (cx=0;cx<HPBAR_WIDTH;cx++)
+ {
+ textcolor(BLACK + DARKGRAY*16);
+
+ if (cx<hx)
+ textcolor(BLACK + GREEN*16);
+ else if (oldhp>hp && oldhx>hx && cx<oldhx && cx>=hx)
+ textcolor(BLACK + RED*16);
+
+ putch(' ');
+ }
+
+ textcolor(LIGHTGREY);
+ oldhp=hp;
+ oldhx=hx;
+}
+#endif
+
void print_stats(void)
{
textcolor(LIGHTGREY);
- const int xcol = crawl_view.hudp.x;
-
+#ifdef USE_TILE
+ if (you.redraw_armour_class || you.wield_change)
+ TilePlayerRefresh();
+#endif
+
// Displayed evasion is now tied to dex.
if (you.redraw_dexterity)
you.redraw_evasion = true;
@@ -130,7 +167,7 @@ void print_stats(void)
}
}
- gotoxy(xcol + 4, 3);
+ gotoxy(5, 3, GOTO_STAT);
cprintf( "%d", you.hp );
@@ -142,6 +179,10 @@ void print_stats(void)
clear_to_end_of_line();
you.redraw_hit_points = 0;
+
+#ifdef USE_TILE
+ draw_hp_bar(you.hp, you.hp_max);
+#endif
}
if (you.redraw_magic_points)
@@ -160,7 +201,7 @@ void print_stats(void)
break;
}
}
- gotoxy(xcol + 7, 4);
+ gotoxy(8, 4, GOTO_STAT);
cprintf( "%d", you.magic_points);
@@ -181,7 +222,7 @@ void print_stats(void)
if (you.max_strength > 72)
you.max_strength = 72;
- gotoxy(xcol + 5, 7);
+ gotoxy(6, 7, GOTO_STAT);
if (you.duration[DUR_MIGHT])
textcolor(LIGHTBLUE); // no end of effect warning
@@ -211,7 +252,7 @@ void print_stats(void)
if (you.max_intel > 72)
you.max_intel = 72;
- gotoxy(xcol + 5, 8);
+ gotoxy(6, 8, GOTO_STAT);
if (you.intel < you.max_intel)
textcolor(YELLOW);
@@ -237,7 +278,7 @@ void print_stats(void)
if (you.max_dex > 72)
you.max_dex = 72;
- gotoxy(xcol + 5, 9);
+ gotoxy(6, 9, GOTO_STAT);
if (you.dex < you.max_dex)
textcolor(YELLOW);
@@ -255,7 +296,7 @@ void print_stats(void)
if (you.redraw_armour_class)
{
- gotoxy(xcol + 4, 5);
+ gotoxy(5, 5, GOTO_STAT);
if (you.duration[DUR_STONEMAIL])
dur_colour( BLUE, (you.duration[DUR_STONEMAIL] <= 6) );
@@ -265,7 +306,7 @@ void print_stats(void)
cprintf( "%d ", player_AC() );
textcolor( LIGHTGREY );
- gotoxy(xcol + 10, 5);
+ gotoxy(11, 5, GOTO_STAT);
if (you.duration[DUR_CONDENSATION_SHIELD]) //jmf: added 24mar2000
textcolor( LIGHTBLUE ); // no end of effect warning
@@ -278,7 +319,7 @@ void print_stats(void)
if (you.redraw_evasion)
{
- gotoxy(xcol + 4, 6);
+ gotoxy(5, 6, GOTO_STAT);
if (you.duration[DUR_FORESCRY])
textcolor(LIGHTBLUE); // no end of effect warning
@@ -291,14 +332,14 @@ void print_stats(void)
if (you.redraw_gold)
{
- gotoxy(xcol + 6, 10);
+ gotoxy(7, 10, GOTO_STAT);
cprintf( "%-8d", you.gold );
you.redraw_gold = 0;
}
if (you.redraw_experience)
{
- gotoxy(xcol + 12, 11);
+ gotoxy(13, 11, GOTO_STAT);
#if DEBUG_DIAGNOSTICS
cprintf( "%d/%lu (%d/%d)",
@@ -315,9 +356,9 @@ void print_stats(void)
if (you.wield_change)
{
- gotoxy(xcol, 13);
+ gotoxy(1, 13, GOTO_STAT);
clear_to_end_of_line();
- gotoxy(xcol, 13);
+ gotoxy(1, 13, GOTO_STAT);
if (you.weapon())
{
@@ -359,9 +400,9 @@ void print_stats(void)
if (you.redraw_status_flags & REDRAW_LINE_1_MASK)
{
- gotoxy(xcol, 14);
+ gotoxy(1, 14, GOTO_STAT);
clear_to_end_of_line();
- gotoxy(xcol, 14);
+ gotoxy(1, 14, GOTO_STAT);
switch (you.burden_state)
{
@@ -430,9 +471,9 @@ void print_stats(void)
if (you.redraw_status_flags & REDRAW_LINE_2_MASK)
{
- gotoxy(xcol, 15);
+ gotoxy(1, 15, GOTO_STAT);
clear_to_end_of_line();
- gotoxy(xcol, 15);
+ gotoxy(1, 15, GOTO_STAT);
// Max length of this line = 8 * 5 - 1 = 39
if (you.duration[DUR_PRAYER])
@@ -527,9 +568,9 @@ void print_stats(void)
if (you.redraw_status_flags & REDRAW_LINE_3_MASK)
{
- gotoxy(xcol, 16);
+ gotoxy(1, 16, GOTO_STAT);
clear_to_end_of_line();
- gotoxy(xcol, 16);
+ gotoxy(1, 16, GOTO_STAT);
// Max length of this line = 7 * 5 + 3 - 1 = 37
// Note the usage of bad_ench_colour() correspond to levels that
@@ -615,7 +656,7 @@ void print_stats(void)
#if DEBUG_DIAGNOSTICS
// debug mode GPS
- gotoxy(xcol, 17);
+ gotoxy(1, 17, GOTO_STAT);
cprintf( "Position (%2d,%2d)", you.x_pos, you.y_pos );
#endif
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 6b0ba6ef97..f2f69df1dc 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -70,6 +70,7 @@
#include "travel.h"
#include "tutorial.h"
#include "view.h"
+#include "tiles.h"
#include "xom.h"
std::string pronoun_you(description_level_type desc)
@@ -256,6 +257,17 @@ bool move_player_to_grid( int x, int y, bool stepped, bool allow_shift,
// move the player to location
you.moveto(x, y);
+#ifdef USE_TILE
+ // We could check for this above, but we need to do this post-move
+ // to force the merfolk tile to be out of water.
+ if ((!grid_is_water(new_grid) && grid_is_water(old_grid) ||
+ grid_is_water(new_grid) && !grid_is_water(old_grid))
+ && you.species == SP_MERFOLK)
+ {
+ TilePlayerRefresh();
+ }
+#endif
+
viewwindow( true, false );
// Other Effects:
@@ -2626,6 +2638,10 @@ void forget_map(unsigned char chance_forgotten, bool force)
}
}
}
+#ifdef USE_TILE
+ GmapInit(false);
+ tile_clear_buf();
+#endif
} // end forget_map()
void gain_exp( unsigned int exp_gained, unsigned int* actual_gain,
@@ -2979,6 +2995,9 @@ void level_change(bool skip_ability_increase)
case SP_BASE_DRACONIAN:
if (you.experience_level == 7)
{
+#ifdef USE_TILE
+ TilePlayerRefresh();
+#endif
switch (you.species)
{
case SP_RED_DRACONIAN:
@@ -3746,7 +3765,7 @@ void redraw_skill(const std::string &your_name, const std::string &class_name)
title = trimmed_name + ", " + class_name;
}
- gotoxy(crawl_view.hudp.x, 1);
+ gotoxy(1, 1, GOTO_STAT);
textcolor( LIGHTGREY );
cprintf( "%-41s", title.c_str() );
diff --git a/crawl-ref/source/randart.cc b/crawl-ref/source/randart.cc
index ec20c82896..c01c0a6a9c 100644
--- a/crawl-ref/source/randart.cc
+++ b/crawl-ref/source/randart.cc
@@ -1859,6 +1859,11 @@ static unrandart_entry *seekunrandart( const item_def &item )
return &unranddata[idx];
}
+int find_unrandart_index(int item_number)
+{
+ return find_unrandart_index(mitm[item_number]);
+}
+
int find_okay_unrandart(unsigned char aclass, unsigned char atype)
{
int ret = -1;
diff --git a/crawl-ref/source/randart.h b/crawl-ref/source/randart.h
index 726b94396a..795ee11099 100644
--- a/crawl-ref/source/randart.h
+++ b/crawl-ref/source/randart.h
@@ -113,5 +113,6 @@ void set_unrandart_exist(int whun, bool is_exist);
* called from: items
* *********************************************************************** */
int find_unrandart_index(const item_def& artefact);
+int find_unrandart_index(const item_def &item);
#endif
diff --git a/crawl-ref/source/rltiles/blank.bmp b/crawl-ref/source/rltiles/blank.bmp
new file mode 100644
index 0000000000..ff49258a5d
--- /dev/null
+++ b/crawl-ref/source/rltiles/blank.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/bmp2png/README b/crawl-ref/source/rltiles/bmp2png/README
new file mode 100644
index 0000000000..b4ace21f2d
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/README
@@ -0,0 +1,69 @@
+bmp2png / png2bmp version 1.62 - Sep 04, 2005
+---------------------------------------------
+
+bmp2png/png2bmp is a pair of simple command-line utilities that convert
+between Windows BMP format and PNG (Portable Network Graphics).
+
+This software is freeware.
+
+
+Using them
+----------
+
+The basic command line is:
+
+ bmp2png [-options] list of bmp files ...
+ png2bmp [-options] list of png files ...
+
+The input files are not modified; the output data is written to files
+which have the same names except for extension. bmp2png always uses
+".png" for the output file name's extension; png2bmp uses ".bmp".
+
+To list the options, simply type "bmp2png" or "png2bmp" with no
+arguments.
+
+
+Copyright notice, and license
+-----------------------------
+
+bmp2png --- conversion from (Windows or OS/2 style) BMP to PNG
+png2bmp --- conversion from PNG to (Windows style) BMP
+
+Copyright (C) 1999-2005 MIYASAKA Masaru <alkaid@coral.ocn.ne.jp>
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and
+that both that copyright notice and this permission notice appear
+in supporting documentation. This software is provided "as is"
+without express or implied warranty.
+
+
+The latest version
+------------------
+
+To get the latest version of bmp2png/png2bmp, please visit the
+bmp2png/png2bmp home page:
+
+ http://hp.vector.co.jp/authors/VA010446/b2p-home/
+
+
+Major changes
+-------------
+
+version 1.60 [August 25, 2004]
+ bmp2png now can read all types of BMP file, including
+ 16/32 bits/pixel BMP, bitfield BMP, and RLE-encoded BMP.
+ Added -P option to bmp2png, which allows to make one particular
+ color fully transparent.
+
+version 1.61 [September 4, 2004]
+ (executable) Fixed a file-corruption bug which was introduced
+ in libpng 1.2.6.
+ (source code) Added support for emx complier (not tested).
+
+version 1.62 [September 4, 2005]
+ Added alpha channel support. (Added -A, -B and -R options.)
+
+
+[end]
diff --git a/crawl-ref/source/rltiles/bmp2png/bmp2png.c b/crawl-ref/source/rltiles/bmp2png/bmp2png.c
new file mode 100644
index 0000000000..245013e7c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/bmp2png.c
@@ -0,0 +1,1078 @@
+/*
+** bmp2png --- conversion from (Windows or OS/2 style) BMP to PNG
+**
+** Copyright (C) 1999-2005 MIYASAKA Masaru
+**
+** For conditions of distribution and use,
+** see copyright notice in common.h.
+*/
+
+#include "common.h"
+#include "bmphed.h"
+
+#define BMP2PNG_VERSION "1.62 (Sep 4, 2005)"
+#define BMP2PNG_COPYRIGHT "Copyright (C) 1999-2005 MIYASAKA Masaru"
+
+char outnam[FILENAME_MAX];
+char outdir[FILENAME_MAX];
+int deletesrc = 0;
+int copytime = 0;
+int complevel = 6;
+int interlace = 0;
+int filters = 0;
+int alpha_bmp = 0;
+
+#define B2P_TRANSPARENT_NONE 0
+#define B2P_TRANSPARENT_RGB 1
+#define B2P_TRANSPARENT_PALETTE 2
+
+int trans_type = B2P_TRANSPARENT_NONE;
+png_color_16 trans_values;
+
+#if defined(WIN32) || defined(MSDOS)
+const char errlogfile[] = ".\\B2PERROR.LOG";
+#else
+const char errlogfile[] = "./b2perror.log";
+#endif
+
+ /* error messages */
+#ifdef JAPANESE /* ---------- */
+const char wrn_invalidtrans[] =
+ "WARNING: Fw̌`܂(܂) - '%s'\n";
+const char wrn_notranscolor[] =
+ "WARNING: w肳ꂽFɈvF܂ - %s\n"
+ "WARNING: -> -P IvV ł̓Fw͖܂\n";
+const char wrn_transtruecolor[] =
+ "WARNING: 摜̓tJ[`ł - %s\n"
+ "WARNING: -> -P IvV ł̓Fw͖܂\n";
+const char wrn_imagehasalpha[] =
+ "WARNING: At@`lt̉摜ł - %s\n"
+ "WARNING: -> -P IvV ł̓Fw͖܂\n";
+const char wrn_alphaallzero[] =
+ "WARNING: SԖڂ̃`l̓At@`lł͂Ȃ悤ł(ׂĂO) - %s\n"
+ "WARNING: -> SԖڂ̃`l(At@`l)͔j܂\n";
+const char wrn_mkdirfail[] =
+ "WARNING: o͐fBNg܂ - %s\n"
+ "WARNING: -> -%c IvV ł̏o͐w͖܂\n";
+const char err_ropenfail[] = "SKIPPED: Yt@C܂ - %s\n";
+const char err_wopenfail[] = "SKIPPED: o̓t@C쐬ł܂ - %s\n";
+const char err_outofmemory[] = "SKIPPED: Ɨpmۂł܂ - %s\n";
+ /* -- */
+const char err_readeof[] = "SKIPPED: t@CrŐ؂Ă܂ - %s\n";
+const char err_readerr[] = "SKIPPED: ǂݍ݃G[܂ - %s\n";
+const char err_not_a_bmp[] = "SKIPPED: BMP t@Cł͂܂ - %s\n";
+const char err_invalid_hed[] =
+ "SKIPPED: BMP t@C̃wb_TCYł - %s\n";
+const char err_width_zero[] = "SKIPPED: 摜̕O(܂͕)ł - %s\n";
+const char err_height_zero[] = "SKIPPED: 摜̍O(܂͕)ł - %s\n";
+const char err_compression[] = "SKIPPED: sȈk^Cvł - %s\n";
+const char err_invalid_bpp[] = "SKIPPED: 摜̐Fł - %s\n";
+const char err_no_palette[] = "SKIPPED: pbgĂ܂ - %s\n";
+#else /* ------------------- */
+const char wrn_invalidtrans[] =
+ "WARNING: Invalid transparent color specifier - '%s'. ignored.\n";
+const char wrn_notranscolor[] =
+ "WARNING: Specified transparent color is not present in palette - %s\n"
+ "WARNING: -> Transparent color specified by '-P' will be ignored.\n";
+const char wrn_transtruecolor[] =
+ "WARNING: Image is truecolor format - %s\n"
+ "WARNING: -> Transparent color specified by '-P' will be ignored.\n";
+const char wrn_imagehasalpha[] =
+ "WARNING: Image has an alpha channel - %s\n"
+ "WARNING: -> Transparent color specified by '-P' will be ignored.\n";
+const char wrn_alphaallzero[] =
+ "WARNING: The 4th channel doesn't seem to be an alpha channel (all zero) - %s\n"
+ "WARNING: -> The 4th channel (alpha channel) will be discarded.\n";
+const char wrn_mkdirfail[] =
+ "WARNING: Cannot create a directory - %s\n"
+ "WARNING: -> Output directory specified by '-%c' will be ignored.\n";
+const char err_ropenfail[] = "SKIPPED: No such file or directory - %s\n";
+const char err_wopenfail[] = "SKIPPED: Cannot create - %s\n";
+const char err_outofmemory[] = "SKIPPED: Out of memory - %s\n";
+ /* -- */
+const char err_readeof[] = "SKIPPED: Premature end of BMP file - %s\n";
+const char err_readerr[] = "SKIPPED: Read operation failed - %s\n";
+const char err_not_a_bmp[] = "SKIPPED: Not a BMP file - %s\n";
+const char err_invalid_hed[] = "SKIPPED: Invalid header size in BMP file - %s\n";
+const char err_width_zero[] = "SKIPPED: Invalid image width - %s\n";
+const char err_height_zero[] = "SKIPPED: Invalid image height - %s\n";
+const char err_compression[] = "SKIPPED: Unknown compression type - %s\n";
+const char err_invalid_bpp[] = "SKIPPED: Invalid bit depth in BMP file - %s\n";
+const char err_no_palette[] = "SKIPPED: Palette is missing - %s\n";
+#endif /* ------------------- */
+
+static int transparent_color(png_color_16p, const char *);
+static int png_filters(const char *);
+static BOOL read_bmp(char *, IMAGE *);
+static BOOL is_4th_alpha(IMAGE *);
+static const char *read_rgb_bits(IMAGE *, FILE *);
+static const char *read_bitfield_bits(IMAGE *, FILE *, DWORD *, UINT);
+static const char *decompress_rle_bits(IMAGE *, FILE *);
+static unsigned long mgetdwl(void *);
+static unsigned int mgetwl(void *);
+static BOOL write_png(char *, IMAGE *);
+static void usage_exit(char *, int);
+
+
+
+/*
+** C
+*/
+int main(int argc, char *argv[])
+{
+ char outf[FILENAME_MAX];
+ IMAGE image;
+ int opt;
+ char *arg;
+ char *p, c;
+ int r_stdin, w_stdout;
+ int failure = 0, success = 0;
+
+#ifdef __LCC__ /* lcc-win32 */
+ char **envp;
+ void _GetMainArgs(int *, char ***, char ***, int);
+ _GetMainArgs(&argc, &argv, &envp, 1);
+#endif
+#ifdef __EMX__
+ _wildcard(&argc, &argv);
+#endif
+ envargv(&argc, &argv, "B2P");
+
+ r_stdin = !isatty(fileno(stdin));
+ w_stdout = !isatty(fileno(stdout));
+
+ while (parsearg(&opt, &arg, argc, argv, "DdOoFfPp")) {
+ if (isdigit(opt)) { /* Zlib Compression Level (0-9) */
+ complevel = opt - '0';
+ continue;
+ }
+ switch (toupper(opt)) {
+ case 'I': interlace ^= 1; break;
+ case 'E': deletesrc ^= 1; break;
+ case 'T': copytime ^= 1; break;
+ case 'Q': quietmode ^= 1; break;
+ case 'L': errorlog ^= 1; break;
+
+ case 'X':
+ r_stdin = 0;
+ w_stdout = 0;
+ break;
+
+ case 'A':
+ alpha_bmp ^= 1;
+ break;
+
+ case 'B':
+ alpha_bmp ^= 1;
+ break;
+
+ case 'R':
+ /* '-R' option of png2bmp (ignored on bmp2png) */
+ break;
+
+ case 'F': /* filter types to be used in libpng */
+ filters = png_filters(arg);
+ break;
+
+ case 'P': /* transparent color */
+ trans_type = transparent_color(&trans_values, arg);
+ break;
+
+ case 'D': /* output directory */
+ if (*arg == '-') arg = NULL;
+ if (arg == NULL) {
+ outdir[0] = '\0';
+ } else {
+ strcpy(outdir, arg);
+ addslash(outdir);
+ if (makedir(outdir) != 0) {
+ xxprintf(wrn_mkdirfail, outdir, 'D');
+ outdir[0] = '\0';
+ }
+ }
+ break;
+
+ case 'O': /* output filename */
+ if (arg == NULL) {
+ outnam[0] = '\0';
+ } else {
+ strcpy(outnam, arg);
+ p = basname(outnam);
+ c = *p; *p = '\0';
+ if (makedir(outnam) != 0) {
+ xxprintf(wrn_mkdirfail, outnam, 'O');
+ outnam[0] = '\0';
+ } else {
+ *p = c;
+ }
+ }
+ break;
+
+ case 0x00: /* input file spec */
+ if (outnam[0] != '\0') {
+ strcpy(outf, outnam);
+ outnam[0] = '\0';
+ } else if (w_stdout) {
+ if (!read_bmp(arg, &image)) return 1;
+ if (!write_png(NULL, &image)) return 1;
+ if (deletesrc) remove(arg);
+ return 0;
+ } else {
+ if (outdir[0] != '\0') {
+ strcat(strcpy(outf, outdir), basname(arg));
+ } else {
+ strcpy(outf, arg);
+ }
+#ifdef WIN32_LFN
+ strcpy(suffix(outf), is_dos_filename(outf) ? ".PNG" : ".png");
+#else
+ strcpy(suffix(outf), ".png");
+#endif
+ }
+ /* ---------------------- */
+ if (!read_bmp(arg, &image)) {
+ failure++;
+ break;
+ }
+ renbak(outf);
+ if (!write_png(outf, &image)) {
+ failure++;
+ break;
+ }
+ /* ---------------------- */
+ if (copytime) cpyftime(arg, outf);
+ if (deletesrc) remove(arg);
+ /* ---------------------- */
+ success++;
+ break;
+
+ default:
+ ; /* Ignore unknown option */
+ }
+ }
+ if (failure == 0 && success == 0) {
+ if (!r_stdin) usage_exit(argv[0], 255);
+ if (!read_bmp(NULL, &image)) return 1;
+ if (outnam[0] != '\0') {
+ renbak(outnam);
+ return !write_png(outnam, &image);
+ } else if (w_stdout) {
+ return !write_png(NULL, &image);
+ } else {
+ strcat(strcpy(outf, outdir), "___stdin.png");
+ renbak(outf);
+ return !write_png(outf, &image);
+ }
+ }
+
+ return (failure > 255) ? 255 : failure;
+}
+
+
+#define elemsof(a) (sizeof(a) / sizeof((a)[0]))
+
+/*
+** PNG ̃tB^ʎwǂ
+*/
+static int png_filters(const char *arg)
+{
+ static const struct { char name[8]; int flag; } filter[] = {
+ { "NONE", PNG_FILTER_NONE }, { "SUB" , PNG_FILTER_SUB },
+ { "UP" , PNG_FILTER_UP }, { "AVERAGE", PNG_FILTER_AVG },
+ { "AVG" , PNG_FILTER_AVG }, { "PAETH" , PNG_FILTER_PAETH },
+ { "ALL" , PNG_ALL_FILTERS },
+ { "AUTO", 0 }, { "DEFAULT", 0 }
+ };
+ char c, buf[64];
+ int i, flags = 0;
+
+ if (arg == NULL) return 0; /* auto/default */
+
+ do {
+ i = 0;
+ while (c = *(arg++), c != ',' && c != '\0')
+ if (i < sizeof(buf) - 1) buf[i++] = toupper(c);
+ buf[i] = '\0';
+
+ for (i = 0; i < elemsof(filter); i++) {
+ if (strcmp(buf, filter[i].name) == 0) {
+ if (filter[i].flag == 0) flags = 0; /* auto/default */
+ else flags |= filter[i].flag;
+ }
+ }
+ } while (c != '\0');
+
+ return flags;
+}
+
+
+/*
+** Fwǂ
+*/
+static int transparent_color(png_color_16p trans_values, const char *arg)
+{
+ char c, buf[32];
+ int i, n;
+
+ if (arg == NULL) return B2P_TRANSPARENT_NONE;
+
+ for (i = 0; (c = arg[i]) != '\0' && i < sizeof(buf)-1; i++)
+ buf[i] = toupper(c);
+ buf[i] = '\0';
+
+ if (strcmp(buf, "NONE") == 0) {
+ return B2P_TRANSPARENT_NONE;
+ }
+ if (buf[0] == '#') {
+ n = sscanf(buf, "#%2hx%2hx%2hx", &trans_values->red,
+ &trans_values->green, &trans_values->blue);
+ if (n == 3 && i >= 7) {
+ return B2P_TRANSPARENT_RGB;
+ }
+ } else {
+ n = sscanf(buf, "%hu,%hu,%hu", &trans_values->red,
+ &trans_values->green, &trans_values->blue);
+ if (n == 3 && trans_values->red <= 255 &&
+ trans_values->green <= 255 && trans_values->blue <= 255) {
+ return B2P_TRANSPARENT_RGB;
+ }
+ if (n == 1 && trans_values->red <= 255) {
+ trans_values->index = (png_byte)trans_values->red;
+ return B2P_TRANSPARENT_PALETTE;
+ }
+ }
+
+ xxprintf(wrn_invalidtrans, arg);
+
+ return B2P_TRANSPARENT_NONE;
+}
+
+
+/* -----------------------------------------------------------------------
+** BMP t@C̓ǂݍ
+*/
+
+#define ERROR_ABORT(s) do { errmsg = (s); goto error_abort; } while (0)
+
+/*
+** .bmp t@C̓ǂݍ
+*/
+static BOOL read_bmp(char *fn, IMAGE *img)
+{
+ BYTE bfh[FILEHED_SIZE + BMPV5HED_SIZE];
+ BYTE *const bih = bfh + FILEHED_SIZE;
+ BYTE rgbq[RGBQUAD_SIZE];
+ DWORD offbits, bihsize, skip;
+ DWORD compression, color_mask[4];
+ UINT palette_size, true_pixdepth;
+ BOOL alpha_check;
+ PALETTE *pal;
+ const char *errmsg;
+ FILE *fp;
+ int i;
+
+ imgbuf_init(img);
+
+ if (fn == NULL) { /* read from stdin */
+ fn = " (stdin)";
+ fp = binary_stdio(fileno(stdin));
+ } else {
+ fp = fopen(fn, "rb");
+ }
+ if (fp == NULL) ERROR_ABORT(err_ropenfail);
+
+ set_status("Reading %.80s", basname(fn));
+
+ /* ------------------------------------------------------ */
+
+ for (i = 0; ; i++) { /* skip macbinary header */
+ if (fread(bfh, (FILEHED_SIZE + BIHSIZE_SIZE), 1, fp) != 1)
+ ERROR_ABORT(ferror(fp) ? err_readerr : err_readeof);
+ if (mgetwl(bfh + BFH_WTYPE) == BMP_SIGNATURE) break;
+ if (i != 0) ERROR_ABORT(err_not_a_bmp);
+ if (fread(bfh, (128 - FILEHED_SIZE - BIHSIZE_SIZE), 1, fp) != 1)
+ ERROR_ABORT(ferror(fp) ? err_readerr : err_readeof);
+ }
+ offbits = mgetdwl(bfh + BFH_DOFFBITS);
+ bihsize = mgetdwl(bfh + BFH_DBIHSIZE);
+ skip = offbits - bihsize - FILEHED_SIZE;
+ if (bihsize < COREHED_SIZE || bihsize > BMPV5HED_SIZE ||
+ offbits < (bihsize + FILEHED_SIZE)) ERROR_ABORT(err_invalid_hed);
+
+ if (fread((bih + BIHSIZE_SIZE), (bihsize - BIHSIZE_SIZE), 1, fp) != 1)
+ ERROR_ABORT(ferror(fp) ? err_readerr : err_readeof);
+
+ if (bihsize >= INFOHED_SIZE) { /* Windows-style BMP */
+ img->width = mgetdwl(bih + BIH_LWIDTH);
+ img->height = mgetdwl(bih + BIH_LHEIGHT);
+ img->pixdepth = mgetwl(bih + BIH_WBITCOUNT);
+ img->topdown = FALSE;
+ compression = mgetdwl(bih + BIH_DCOMPRESSION);
+ palette_size = RGBQUAD_SIZE;
+ if (img->height < 0) {
+ img->height = -img->height;
+ img->topdown = TRUE; /* top-down BMP */
+ }
+ } else { /* OS/2-style BMP */
+ img->width = mgetwl(bih + BCH_WWIDTH);
+ img->height = mgetwl(bih + BCH_WHEIGHT);
+ img->pixdepth = mgetwl(bih + BCH_WBITCOUNT);
+ img->topdown = FALSE;
+ compression = BI_RGB;
+ palette_size = RGBTRIPLE_SIZE;
+ }
+ img->alpha = FALSE;
+ alpha_check = FALSE;
+ true_pixdepth = img->pixdepth;
+
+ if (img->width <= 0) ERROR_ABORT(err_width_zero);
+ if (img->height <= 0) ERROR_ABORT(err_height_zero);
+
+ switch (compression) {
+ case BI_RGB:
+ if (img->pixdepth != 1 && img->pixdepth != 4 &&
+ img->pixdepth != 8 && img->pixdepth != 16 &&
+ img->pixdepth != 24 && img->pixdepth != 32)
+ ERROR_ABORT(err_invalid_bpp);
+
+ if (img->pixdepth == 32 && alpha_bmp)
+ alpha_check = TRUE;
+
+ if (img->pixdepth == 16) {
+ color_mask[3] = 0x0000; /* alpha */
+ color_mask[2] = 0x7C00; /* red */
+ color_mask[1] = 0x03E0; /* green */
+ color_mask[0] = 0x001F; /* blue */
+ compression = BI_BITFIELDS;
+ }
+ break;
+
+ case BI_BITFIELDS:
+ if (img->pixdepth != 16 && img->pixdepth != 32)
+ ERROR_ABORT(err_invalid_bpp);
+
+ if (bihsize < INFOHED_SIZE + 12) {
+ if (skip < (INFOHED_SIZE + 12 - bihsize))
+ ERROR_ABORT(err_invalid_hed);
+ if (fread((bih + bihsize), (INFOHED_SIZE + 12 - bihsize), 1, fp)
+ != 1) ERROR_ABORT(ferror(fp) ? err_readerr : err_readeof);
+ skip -= (INFOHED_SIZE + 12 - bihsize);
+ }
+ color_mask[3] = 0x00000000; /* alpha */
+ color_mask[2] = mgetdwl(bih + B4H_DREDMASK); /* red */
+ color_mask[1] = mgetdwl(bih + B4H_DGREENMASK); /* green */
+ color_mask[0] = mgetdwl(bih + B4H_DBLUEMASK); /* blue */
+
+ if (img->pixdepth == 32 && alpha_bmp &&
+ bihsize >= INFOHED_SIZE + 16) {
+ color_mask[3] = mgetdwl(bih + B4H_DALPHAMASK); /* alpha */
+ if (color_mask[3] != 0x00000000)
+ img->alpha = TRUE;
+ }
+
+ if (img->pixdepth == 32 && color_mask[0] == 0x000000FF &&
+ color_mask[1] == 0x0000FF00 && color_mask[2] == 0x00FF0000 &&
+ (color_mask[3] == 0xFF000000 || color_mask[3] == 0x00000000)) {
+ compression = BI_RGB;
+ }
+ break;
+
+ case BI_RLE8:
+ if (img->pixdepth != 8)
+ ERROR_ABORT(err_invalid_bpp);
+ break;
+
+ case BI_RLE4:
+ if (img->pixdepth != 4)
+ ERROR_ABORT(err_invalid_bpp);
+ break;
+
+ default:
+ ERROR_ABORT(err_compression);
+ }
+
+ if (img->pixdepth == 16) img->pixdepth = 24;
+
+ if (img->pixdepth <= 8) {
+ if (skip >= palette_size << img->pixdepth) {
+ img->palnum = 1 << img->pixdepth;
+ skip -= palette_size << img->pixdepth;
+ } else {
+ img->palnum = skip / palette_size;
+ skip = skip % palette_size;
+ }
+ if (img->palnum == 0)
+ ERROR_ABORT(err_no_palette);
+ } else {
+ img->palnum = 0;
+ }
+ if (!imgbuf_alloc(img)) ERROR_ABORT(err_outofmemory);
+
+ /* ------------------------------------------------------ */
+
+ for (pal = img->palette, i = img->palnum; i > 0; pal++, i--) {
+ if (fread(rgbq, palette_size, 1, fp) != 1)
+ ERROR_ABORT(ferror(fp) ? err_readerr : err_readeof);
+ pal->red = rgbq[RGBQ_RED];
+ pal->green = rgbq[RGBQ_GREEN];
+ pal->blue = rgbq[RGBQ_BLUE];
+ }
+ for ( ; skip > 0; skip--) {
+ if (fgetc(fp) == EOF)
+ ERROR_ABORT(ferror(fp) ? err_readerr : err_readeof);
+ }
+
+ /* ------------------------------------------------------ */
+
+ img->sigbit.red = img->sigbit.green = img->sigbit.blue = 8;
+ img->sigbit.gray = img->sigbit.alpha = 8;
+
+ switch (compression) {
+ case BI_RGB:
+ errmsg = read_rgb_bits(img, fp);
+ break;
+ case BI_BITFIELDS:
+ errmsg = read_bitfield_bits(img, fp, color_mask, true_pixdepth);
+ break;
+ case BI_RLE8:
+ case BI_RLE4:
+ errmsg = decompress_rle_bits(img, fp);
+ break;
+ default:
+ errmsg = err_compression;
+ }
+ if (errmsg != NULL) ERROR_ABORT(errmsg);
+
+ if (alpha_check) {
+ img->alpha = is_4th_alpha(img);
+ if (!img->alpha)
+ xxprintf(wrn_alphaallzero, fn);
+ }
+
+ /* ------------------------------------------------------ */
+
+ set_status("Read OK %.80s", basname(fn));
+
+ if (fp != stdin) fclose(fp);
+
+ return TRUE;
+
+error_abort: /* error */
+ xxprintf(errmsg, fn);
+ if (fp != stdin && fp != NULL) fclose(fp);
+ imgbuf_free(img);
+
+ return FALSE;
+}
+
+
+/*
+** S̃`lAt@`lǂׂ
+*/
+static BOOL is_4th_alpha(IMAGE *img)
+{
+ LONG w, h;
+ BYTE *p;
+
+ if (img->pixdepth == 32) { /* failsafe */
+ for (h = img->height, p = img->bmpbits + 3; --h >= 0; )
+ for (w = img->width; --w >= 0; p += 4)
+ if (*p != 0) return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+/*
+** BI_RGB (k) `̉摜f[^ǂ
+*/
+static const char *read_rgb_bits(IMAGE *img, FILE *fp)
+{
+#if 1
+ DWORD rd = 16*1024*1024;
+ DWORD num = img->imgbytes;
+ BYTE *ptr = img->bmpbits;
+
+ while (num > 0) {
+ if (rd > num) rd = num;
+
+ if (fread(ptr, rd, 1, fp) != 1)
+ return ferror(fp) ? err_readerr : err_readeof;
+
+ ptr += rd; num -= rd;
+ }
+#else
+ if (fread(img->bmpbits, img->imgbytes, 1, fp) != 1)
+ return ferror(fp) ? err_readerr : err_readeof;
+#endif
+ return NULL;
+}
+
+
+/*
+** BI_BITFIELDS `̉摜f[^ǂ
+*/
+static const char *read_bitfield_bits(IMAGE *img, FILE *fp, DWORD *color_mask,
+ UINT true_pixdepth)
+{
+ int color_shift[4];
+ int color_sigbits[4];
+ BYTE color_tbl[4][1<<7];
+ DWORD true_rowbytes;
+ BYTE *row, *p, *q;
+ LONG w, h;
+ DWORD v, u;
+ int i, j, k;
+
+ for (i = 0; i < 4; i++) {
+ v = color_mask[i];
+ if (v == 0) {
+ color_shift[i] = 0;
+ color_sigbits[i] = 8;
+ } else {
+ for (j = 0; (v & 1) == 0; v >>= 1, j++) ;
+ for (k = 0; (v) != 0; v >>= 1, k++) ;
+ color_shift[i] = j;
+ color_sigbits[i] = k;
+ }
+ if (color_sigbits[i] <= 7) {
+ k = (1 << color_sigbits[i]) - 1;
+ for (j = 0; j <= k; j++)
+ color_tbl[i][j] = (0xFF * j + k/2) / k;
+ }
+ }
+
+ if (color_sigbits[3] < 8) img->sigbit.alpha = color_sigbits[3];
+ if (color_sigbits[2] < 8) img->sigbit.red = color_sigbits[2];
+ if (color_sigbits[1] < 8) img->sigbit.green = color_sigbits[1];
+ if (color_sigbits[0] < 8) img->sigbit.blue = color_sigbits[0];
+
+ true_rowbytes = ((DWORD)img->width * (true_pixdepth/8) + 3) & (~3UL);
+
+ for (h = img->height, row = img->bmpbits; --h >= 0;
+ row += img->rowbytes) {
+ if (fread(row, true_rowbytes, 1, fp) != 1)
+ return ferror(fp) ? err_readerr : err_readeof;
+
+ switch (true_pixdepth) {
+ case 16:
+ for (w = img->width, p = row + (w-1)*2, q = row + (w-1)*3;
+ --w >= 0; p -= 2, q -= 3) {
+ v = ((UINT)p[0]) + ((UINT)p[1] << 8);
+ for (i = 0; i < 3; i++) {
+ u = (v & color_mask[i]) >> color_shift[i];
+ if (color_sigbits[i] <= 7)
+ u = color_tbl[i][u];
+ else if (color_sigbits[i] >= 9)
+ u >>= (color_sigbits[i] - 8);
+ q[i] = (BYTE) u;
+ }
+ }
+ break;
+
+ case 32:
+ for (w = img->width, p = row; --w >= 0; p += 4) {
+ v = ((DWORD)p[0] ) + ((DWORD)p[1] << 8) +
+ ((DWORD)p[2] << 16) + ((DWORD)p[3] << 24);
+ for (i = 0; i < 4; i++) {
+ u = (v & color_mask[i]) >> color_shift[i];
+ if (color_sigbits[i] <= 7)
+ u = color_tbl[i][u];
+ else if (color_sigbits[i] >= 9)
+ u >>= (color_sigbits[i] - 8);
+ p[i] = (BYTE) u;
+ }
+ }
+ break;
+ }
+ }
+
+ return NULL;
+}
+
+
+/*
+** BI_RLE8/BI_RLE4 `̉摜f[^ǂ
+*/
+static const char *decompress_rle_bits(IMAGE *img, FILE *fp)
+{
+ BYTE buf[1024]; /* 258 or above */
+ BYTE *bfptr = buf;
+ UINT bfcnt = 0;
+ UINT rd, reclen;
+ BYTE *row = img->bmpbits;
+ LONG x = 0, y = 0;
+ BYTE *p, c;
+ int n;
+
+ memset(img->bmpbits, 0, img->imgbytes);
+
+ for (;;) {
+ while (bfcnt < (reclen = 2) ||
+ (bfptr[0] == 0 &&
+ ((bfptr[1] == 2 && bfcnt < (reclen += 2)) ||
+ (bfptr[1] >= 3 &&
+ bfcnt < (reclen += (bfptr[1] * img->pixdepth + 15) / 16 * 2)
+ )))) {
+ if (bfptr != buf && bfcnt != 0) memmove(buf, bfptr, bfcnt);
+ if ((rd = fread(buf+bfcnt, 1, sizeof(buf)-bfcnt, fp)) == 0) {
+ if (x >= img->width) { /*x = 0;*/ y += 1; }
+ if (y >= img->height) return NULL; /* missing EoB marker */
+ else return ferror(fp) ? err_readerr : err_readeof;
+ }
+ bfptr = buf;
+ bfcnt += rd;
+ }
+ if (y >= img->height) {
+ /* We simply discard the remaining records */
+ if (bfptr[0] == 0 && bfptr[1] == 1) break; /* EoB marker */
+ bfptr += reclen;
+ bfcnt -= reclen;
+ continue;
+ }
+ if (bfptr[0] != 0) { /* Encoded-mode record */
+ n = bfptr[0]; c = bfptr[1];
+ switch (img->pixdepth) {
+ case 8: /* BI_RLE8 */
+ while (n > 0 && x < img->width) {
+ row[x] = c;
+ n--; x++;
+ }
+ break;
+ case 4: /* BI_RLE4 */
+ if (x % 2 != 0 && x < img->width) {
+ c = (c >> 4) | (c << 4);
+ row[x/2] = (row[x/2] & 0xF0) | (c & 0x0F);
+ n--; x++;
+ }
+ while (n > 0 && x < img->width) {
+ row[x/2] = c;
+ n-=2; x+=2;
+ }
+ if (n < 0) x--;
+ break;
+ }
+ } else if (bfptr[1] >= 3) { /* Absolute-mode record */
+ n = bfptr[1]; p = bfptr + 2;
+ switch (img->pixdepth) {
+ case 8: /* BI_RLE8 */
+ while (n > 0 && x < img->width) {
+ row[x] = *p;
+ n--; x++; p++;
+ }
+ break;
+ case 4: /* BI_RLE4 */
+ if (x % 2 != 0) {
+ if (x < img->width) {
+ row[x/2] = (row[x/2] & 0xF0) | (*p >> 4);
+ n--; x++;
+ }
+ while (n > 0 && x < img->width) {
+ row[x/2] = (p[0] << 4) | (p[1] >> 4);
+ n-=2; x+=2; p++;
+ }
+ if (n < 0) x--;
+ } else {
+ while (n > 0 && x < img->width) {
+ row[x/2] = *p;
+ n-=2; x+=2; p++;
+ }
+ if (n < 0) x--;
+ }
+ break;
+ }
+ } else if (bfptr[1] == 2) { /* Delta record */
+ x += bfptr[2]; y += bfptr[3];
+ row += bfptr[3] * img->rowbytes;
+ } else if (bfptr[1] == 0) { /* End of line marker */
+ x = 0; y += 1;
+ row += img->rowbytes;
+ } else /*if (bfptr[1] == 1)*/ { /* End of bitmap marker */
+ break;
+ }
+ bfptr += reclen;
+ bfcnt -= reclen;
+ }
+
+ return NULL;
+}
+
+
+/*
+** little-endien ` 4oCgǂ
+*/
+static unsigned long mgetdwl(void *ptr)
+{
+ unsigned char *p = ptr;
+
+ return ((unsigned long)p[0] ) + ((unsigned long)p[1] << 8) +
+ ((unsigned long)p[2] << 16) + ((unsigned long)p[3] << 24);
+}
+
+
+/*
+** little-endien ` 2oCgǂ
+*/
+static unsigned int mgetwl(void *ptr)
+{
+ unsigned char *p = ptr;
+
+ return ((unsigned int)p[0]) + ((unsigned int)p[1] << 8);
+}
+
+
+/* -----------------------------------------------------------------------
+** PNG t@C̏
+*/
+
+/*
+** .png t@C̏
+*/
+static BOOL write_png(char *fn, IMAGE *img)
+{
+ png_structp png_ptr;
+ png_infop info_ptr;
+ int bit_depth;
+ int color_type;
+ int interlace_type;
+ png_byte trans[256];
+ unsigned i;
+ const char *errmsg;
+ FILE *fp;
+
+ if (fn == NULL) {
+ fn = " (stdout)";
+ fp = binary_stdio(fileno(stdout));
+ } else {
+ fp = fopen(fn, "wb");
+ }
+ if (fp == NULL) ERROR_ABORT(err_wopenfail);
+
+ set_status("Writing %.80s", basname(fn));
+
+ /* ------------------------------------------------------ */
+
+ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, fn,
+ png_my_error, png_my_warning);
+ if (png_ptr == NULL) {
+ ERROR_ABORT(err_outofmemory);
+ }
+ info_ptr = png_create_info_struct(png_ptr);
+ if (info_ptr == NULL) {
+ png_destroy_write_struct(&png_ptr, NULL);
+ ERROR_ABORT(err_outofmemory);
+ }
+ if (setjmp(png_jmpbuf(png_ptr))) {
+ /* If we get here, we had a problem reading the file */
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ ERROR_ABORT(NULL);
+ }
+ png_init_io(png_ptr, fp);
+ png_set_compression_level(png_ptr, complevel);
+ if (filters != 0)
+ png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, filters);
+
+ /* ------------------------------------------------------ */
+
+ if (img->pixdepth == 24 || img->pixdepth == 32) {
+ bit_depth = 8;
+ color_type = (img->pixdepth == 32 && img->alpha) ?
+ PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB;
+ png_set_compression_mem_level(png_ptr, MAX_MEM_LEVEL);
+ } else {
+ bit_depth = img->pixdepth;
+ color_type = PNG_COLOR_TYPE_PALETTE;
+ png_set_PLTE(png_ptr, info_ptr, img->palette, img->palnum);
+ }
+ interlace_type = (interlace) ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
+
+ png_set_IHDR(png_ptr, info_ptr, img->width, img->height, bit_depth,
+ color_type, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT,
+ PNG_FILTER_TYPE_DEFAULT);
+
+ if (img->sigbit.red != 8 || img->sigbit.green != 8 || img->sigbit.blue != 8
+ || (color_type == PNG_COLOR_TYPE_RGB_ALPHA && img->sigbit.alpha != 8))
+ png_set_sBIT(png_ptr, info_ptr, &img->sigbit);
+
+ switch (trans_type) {
+ case B2P_TRANSPARENT_RGB:
+ switch (color_type) {
+ case PNG_COLOR_TYPE_PALETTE:
+ for (i = 0; i < img->palnum; i++) {
+ if (img->palette[i].red == trans_values.red &&
+ img->palette[i].green == trans_values.green &&
+ img->palette[i].blue == trans_values.blue) {
+ trans[i++] = 0x00;
+ break;
+ }
+ trans[i] = 0xFF;
+ }
+ if (trans[i-1] == 0x00) {
+ png_set_tRNS(png_ptr, info_ptr, trans, i, NULL);
+ } else {
+ xxprintf(wrn_notranscolor, fn);
+ }
+ break;
+ case PNG_COLOR_TYPE_RGB:
+ png_set_tRNS(png_ptr, info_ptr, NULL, 0, &trans_values);
+ break;
+ case PNG_COLOR_TYPE_RGB_ALPHA:
+ xxprintf(wrn_imagehasalpha, fn);
+ break;
+ }
+ break;
+ case B2P_TRANSPARENT_PALETTE:
+ switch (color_type) {
+ case PNG_COLOR_TYPE_PALETTE:
+ if (trans_values.index < img->palnum) {
+ for (i = 0; i < trans_values.index; i++) trans[i] = 0xFF;
+ trans[i++] = 0x00;
+ png_set_tRNS(png_ptr, info_ptr, trans, i, NULL);
+ } else {
+ xxprintf(wrn_notranscolor, fn);
+ }
+ break;
+ case PNG_COLOR_TYPE_RGB:
+ xxprintf(wrn_transtruecolor, fn);
+ break;
+ case PNG_COLOR_TYPE_RGB_ALPHA:
+ xxprintf(wrn_imagehasalpha, fn);
+ break;
+ }
+ break;
+ }
+
+ png_write_info(png_ptr, info_ptr);
+
+ /* ------------------------------------------------------ */
+
+ if (img->pixdepth == 32 && !img->alpha)
+ png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
+
+ if (img->pixdepth == 24 || img->pixdepth == 32)
+ png_set_bgr(png_ptr);
+
+ /* ------------------------------------------------------ */
+
+ png_set_write_status_fn(png_ptr, row_callback);
+ init_progress_meter(png_ptr, img->width, img->height);
+
+ png_write_image(png_ptr, img->rowptr);
+
+ png_write_end(png_ptr, info_ptr);
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+
+ /* ------------------------------------------------------ */
+
+ set_status("OK %.80s", basname(fn));
+ feed_line();
+
+ fflush(fp);
+ if (fp != stdout) fclose(fp);
+ imgbuf_free(img);
+
+ return TRUE;
+
+error_abort: /* error */
+ if (errmsg != NULL) xxprintf(errmsg, fn);
+ if (fp != stdout && fp != NULL) fclose(fp);
+ imgbuf_free(img);
+
+ return FALSE;
+}
+
+
+/* -----------------------------------------------------------------------
+** wvXN[̕\
+*/
+
+/*
+** gp@\
+*/
+static void usage_exit(char *argv0, int status)
+{
+ static const char str_usage[] =
+#ifdef JAPANESE /* -------------------------- */
+#ifdef SJIS_ESCAPE
+#define SJ_ESC(esc,raw) esc
+#else
+#define SJ_ESC(esc,raw) raw
+#endif
+ "bmp2png, BMP -> PNG Ro[^ - version " BMP2PNG_VERSION "\n"
+ " " BMP2PNG_COPYRIGHT "\n"
+ " Compiled with libpng " PNG_LIBPNG_VER_STRING " and zlib " ZLIB_VERSION ".\n"
+ "\n"
+ "g : %s [-XCb`] ̓t@C ...\n"
+ " : ... | %s [-XCb`] | ...\n"
+ "\n"
+ "̓t@Cɂ̓ChJ[hg܂ (* ?)\n"
+ "o̓t@C͓̓t@C̊gq .png ɕςOɂȂ܂\n"
+ "\n"
+ "XCb`IvV (ł) :\n"
+ " -0..-9 kx (ftHg -6)\n"
+ " -I C^[[X` PNG t@C쐬\n"
+ " -P color w肵F𓧖Fɂ\n"
+ " color: #RRGGBB(html16i) / RR,GG,BB(10iRGB) / NN(pbgԍ)\n"
+ " -F type[,...] PNG ̈kɎgtB^E^Cvw肷\n"
+ " type: none,sub,up,average(avg),paeth,all,auto(default)\n"
+ " -A, -B At@`lۑ\n"
+ " -O name o̓t@Cw肷\n"
+ " -D dir t@Co͂fBNgw肷\n"
+ " -E ϊꍇɂ͓̓t@C폜\n"
+ " -T ̓t@C̃^CX^vo̓t@Cɐݒ肷\n"
+ " -Q , ؂" SJ_ESC("\\","\") "Ȃ\n"
+ " -L ̃G[Ot@C(%s)ɋL^\n"
+ " -X Ẃ^Wo͂ϊ𖳌ɂ\n";
+#else /* ----------------------------------- */
+ "bmp2png, a BMP-to-PNG converter - version " BMP2PNG_VERSION "\n"
+ " " BMP2PNG_COPYRIGHT "\n"
+ " Compiled with libpng " PNG_LIBPNG_VER_STRING " and zlib " ZLIB_VERSION ".\n"
+ "\n"
+ "Usage: %s [-switches] inputfile(s) ...\n"
+ " or: ... | %s [-switches] | ...\n"
+ "\n"
+ "List of input files may use wildcards (* and ?)\n"
+ "Output filename is same as input filename, but extension .png\n"
+ "\n"
+ "Switches (case-insensitive) :\n"
+ " -0..-9 Compression level (default: -6)\n"
+ " -I Create interlaced PNG files\n"
+ " -P color Mark the specified color as transparent\n"
+ " color: #RRGGBB(html hex) / RR,GG,BB(decimal) / NN(palette index)\n"
+ " -F type[,...] Specify filter type(s) used to create PNG files\n"
+ " type: none,sub,up,average(avg),paeth,all,auto(default)\n"
+ " -A, -B Preserve alpha channel\n"
+ " -O name Specify name for output file\n"
+ " -D dir Output files into dir\n"
+ " -E Delete input files after successful conversion\n"
+ " -T Set the timestamp of input file on output file\n"
+ " -Q Quiet mode\n"
+ " -L Log errors to %s file\n"
+ " -X Disable conversion through standard input/output\n";
+#endif /* ----------------------------------- */
+#if defined(WIN32) || defined(MSDOS)
+ char exename[FILENAME_MAX];
+ char *p;
+
+ argv0 = strcpy(exename, basname(argv0));
+ for (p = argv0; *p != '\0'; p++) *p = tolower(*p);
+#endif
+ xxprintf(str_usage, argv0, argv0, errlogfile);
+
+ exit(status);
+}
+
+
+/* -----------------------------------------------------------------------
+*/
+
+#if (PNG_LIBPNG_VER >= 10007)
+/*
+** dummy - see png_reset_zstream() in png.c
+*/
+int inflateReset(z_streamp z)
+{
+ return Z_OK;
+}
+#endif
diff --git a/crawl-ref/source/rltiles/bmp2png/bmp2png.dsp b/crawl-ref/source/rltiles/bmp2png/bmp2png.dsp
new file mode 100644
index 0000000000..e38022696e
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/bmp2png.dsp
@@ -0,0 +1,112 @@
+# Microsoft Developer Studio Project File - Name="bmp2png" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** ҏWȂł **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=bmp2png - Win32 Release
+!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB
+!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ
+!MESSAGE
+!MESSAGE NMAKE /f "bmp2png.mak".
+!MESSAGE
+!MESSAGE NMAKE ̎sɍ\wł܂
+!MESSAGE ײݏϸۂ̐ݒ`܂B:
+!MESSAGE
+!MESSAGE NMAKE /f "bmp2png.mak" CFG="bmp2png - Win32 Release"
+!MESSAGE
+!MESSAGE I”\ Ӱ:
+!MESSAGE
+!MESSAGE "bmp2png - Win32 Release" ("Win32 (x86) Console Application" p)
+!MESSAGE "bmp2png - Win32 Debug" ("Win32 (x86) Console Application" p)
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "bmp2png - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "PNG_USER_CONFIG" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\libpng" /I "..\zlib" /D "NDEBUG" /D "PNG_USER_CONFIG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GF /c
+# ADD BASE RSC /l 0x411 /d "NDEBUG"
+# ADD RSC /l 0x411 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 setargv.obj libpng.lib zlib.lib /nologo /subsystem:console /map /machine:I386 /libpath:"..\libpng\release" /libpath:"..\zlib\release" /opt:nowin98
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "bmp2png - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "PNG_USER_CONFIG" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\libpng" /I "..\zlib" /D "_DEBUG" /D "PNG_USER_CONFIG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /Fr /YX /FD /GZ /c
+# ADD BASE RSC /l 0x411 /d "_DEBUG"
+# ADD RSC /l 0x411 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 setargv.obj libpng.lib zlib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\libpng\debug" /libpath:"..\zlib\debug"
+# SUBTRACT LINK32 /map
+
+!ENDIF
+
+# Begin Target
+
+# Name "bmp2png - Win32 Release"
+# Name "bmp2png - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\bmp2png.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\common.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\bmphed.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\common.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/crawl-ref/source/rltiles/bmp2png/bmphed.h b/crawl-ref/source/rltiles/bmp2png/bmphed.h
new file mode 100644
index 0000000000..4799b5e4d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/bmphed.h
@@ -0,0 +1,84 @@
+/*
+** bmphed.h - .bmp file header macros
+**
+** Public domain by MIYASAKA Masaru (July 13, 2004)
+*/
+
+#ifndef BMPHED_H
+#define BMPHED_H
+
+ /* BMP file signature */
+#define BMP_SIGNATURE 0x4D42
+#define BMP_SIG_BYTES 2
+
+ /* BITMAPFILEHEADER */
+#define BFH_WTYPE 0 /* WORD bfType; */
+#define BFH_DSIZE 2 /* DWORD bfSize; */
+#define BFH_WRESERVED1 6 /* WORD bfReserved1; */
+#define BFH_WRESERVED2 8 /* WORD bfReserved2; */
+#define BFH_DOFFBITS 10 /* DWORD bfOffBits; */
+#define BFH_DBIHSIZE 14 /* DWORD biSize; */
+#define FILEHED_SIZE 14 /* sizeof(BITMAPFILEHEADER) */
+#define BIHSIZE_SIZE 4 /* sizeof(biSize) */
+
+ /* BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADER */
+#define BIH_DSIZE 0 /* DWORD biSize; */
+#define BIH_LWIDTH 4 /* LONG biWidth; */
+#define BIH_LHEIGHT 8 /* LONG biHeight; */
+#define BIH_WPLANES 12 /* WORD biPlanes; */
+#define BIH_WBITCOUNT 14 /* WORD biBitCount; */
+#define BIH_DCOMPRESSION 16 /* DWORD biCompression; */
+#define BIH_DSIZEIMAGE 20 /* DWORD biSizeImage; */
+#define BIH_LXPELSPERMETER 24 /* LONG biXPelsPerMeter; */
+#define BIH_LYPELSPERMETER 28 /* LONG biYPelsPerMeter; */
+#define BIH_DCLRUSED 32 /* DWORD biClrUsed; */
+#define BIH_DCLRIMPORANT 36 /* DWORD biClrImportant; */
+#define B4H_DREDMASK 40 /* DWORD bV4RedMask; */
+#define B4H_DGREENMASK 44 /* DWORD bV4GreenMask; */
+#define B4H_DBLUEMASK 48 /* DWORD bV4BlueMask; */
+#define B4H_DALPHAMASK 52 /* DWORD bV4AlphaMask; */
+#define B4H_DCSTYPE 56 /* DWORD bV4CSType; */
+#define B4H_XENDPOINTS 60 /* CIEXYZTRIPLE bV4Endpoints; */
+#define B4H_DGAMMARED 96 /* DWORD bV4GammaRed; */
+#define B4H_DGAMMAGREEN 100 /* DWORD bV4GammaGreen; */
+#define B4H_DGAMMABLUE 104 /* DWORD bV4GammaBlue; */
+#define B5H_DINTENT 108 /* DWORD bV5Intent; */
+#define B5H_DPROFILEDATA 112 /* DWORD bV5ProfileData; */
+#define B5H_DPROFILESIZE 116 /* DWORD bV5ProfileSize; */
+#define B5H_DRESERVED 120 /* DWORD bV5Reserved; */
+#define INFOHED_SIZE 40 /* sizeof(BITMAPINFOHEADER) */
+#define BMPV4HED_SIZE 108 /* sizeof(BITMAPV4HEADER) */
+#define BMPV5HED_SIZE 124 /* sizeof(BITMAPV5HEADER) */
+
+ /* BITMAPCOREHEADER */
+#define BCH_DSIZE 0 /* DWORD bcSize; */
+#define BCH_WWIDTH 4 /* WORD bcWidth; */
+#define BCH_WHEIGHT 6 /* WORD bcHeight; */
+#define BCH_WPLANES 8 /* WORD bcPlanes; */
+#define BCH_WBITCOUNT 10 /* WORD bcBitCount; */
+#define COREHED_SIZE 12 /* sizeof(BITMAPCOREHEADER) */
+
+ /* RGBQUAD */
+#define RGBQ_BLUE 0 /* BYTE rgbBlue; */
+#define RGBQ_GREEN 1 /* BYTE rgbGreen; */
+#define RGBQ_RED 2 /* BYTE rgbRed; */
+#define RGBQ_RESERVED 3 /* BYTE rgbReserved; */
+#define RGBQUAD_SIZE 4 /* sizeof(RGBQUAD) */
+
+ /* RGBTRIPLE */
+#define RGBT_BLUE 0 /* BYTE rgbtBlue; */
+#define RGBT_GREEN 1 /* BYTE rgbtGreen; */
+#define RGBT_RED 2 /* BYTE rgbtRed; */
+#define RGBTRIPLE_SIZE 3 /* sizeof(RGBTRIPLE) */
+
+ /* Constants for the biCompression field */
+#ifndef BI_RGB
+#define BI_RGB 0L /* Uncompressed */
+#define BI_RLE8 1L /* RLE (8 bits/pixel) */
+#define BI_RLE4 2L /* RLE (4 bits/pixel) */
+#define BI_BITFIELDS 3L /* Bitfield */
+#define BI_JPEG 4L /* JPEG Extension */
+#define BI_PNG 5L /* PNG Extension */
+#endif
+
+#endif /* BMPHED_H */
diff --git a/crawl-ref/source/rltiles/bmp2png/common.c b/crawl-ref/source/rltiles/bmp2png/common.c
new file mode 100644
index 0000000000..2d6042ae85
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/common.c
@@ -0,0 +1,748 @@
+/*
+** bmp2png --- conversion from (Windows or OS/2 style) BMP to PNG
+** png2bmp --- conversion from PNG to (Windows style) BMP
+**
+** Copyright (C) 1999-2005 MIYASAKA Masaru
+**
+** For conditions of distribution and use,
+** see copyright notice in common.h.
+*/
+
+#include "common.h"
+
+#if defined(__DJGPP__) /* DJGPP V.2 */
+#include <crt0.h>
+int _crt0_startup_flags = _CRT0_FLAG_DISALLOW_RESPONSE_FILES;
+unsigned short _djstat_flags = /* for stat() */
+ _STAT_INODE | _STAT_EXEC_EXT | _STAT_EXEC_MAGIC | _STAT_DIRSIZE |
+ _STAT_ROOT_TIME;
+#endif
+
+#if defined(__BORLANDC__) /* Borland C++ */
+#include <wildargs.h>
+typedef void _RTLENTRY (* _RTLENTRY _argv_expand_fnc)(char *, _PFN_ADDARG);
+typedef void _RTLENTRY (* _RTLENTRY _wargv_expand_fnc)(wchar_t *, _PFN_ADDARG);
+_argv_expand_fnc _argv_expand_ptr = _expand_wild; /* expand wild cards */
+_wargv_expand_fnc _wargv_expand_ptr = _wexpand_wild;
+#endif
+
+
+/* -----------------------------------------------------------------------
+** screen management
+*/
+
+#define LINE_LEN 79
+#define STATUS_LEN 22
+#define PROGBAR_MAX (LINE_LEN - STATUS_LEN - 1)
+
+static char status_msg[128];
+static int progbar_scale = 0;
+static int progbar_len = 0;
+static int progbar_pos = -1;
+
+int quietmode = 0; /* -Q option */
+int errorlog = 0; /* -L option */
+
+
+static void print_status(void)
+{
+ if (quietmode) return;
+
+ fprintf(stderr, "\r%-*.*s ", STATUS_LEN, STATUS_LEN, status_msg);
+ fflush(stderr);
+ progbar_pos = 0;
+}
+
+static void put_dots(int dotchar, int num)
+{
+ int i;
+
+ if (num > PROGBAR_MAX) num = PROGBAR_MAX;
+ if (progbar_pos == -1) print_status();
+
+ for (i = progbar_pos; i < num; i++)
+ fputc(dotchar, stderr);
+
+ if (progbar_pos < num) {
+ progbar_pos = num;
+ fflush(stderr);
+ }
+}
+
+static void print_scale(void)
+{
+ if (progbar_pos != 0) print_status();
+ put_dots('.', progbar_len);
+ print_status();
+ progbar_scale = 1;
+}
+
+static void init_progress_bar(int max)
+{
+ if (quietmode) return;
+
+ progbar_len = max;
+ print_scale();
+}
+
+static void update_progress_bar(int num)
+{
+ if (quietmode) return;
+
+ if (!progbar_scale) print_scale();
+ put_dots('o', num);
+}
+
+static void clear_line(void)
+{
+ if (quietmode) return;
+
+ fprintf(stderr, "\r%*c\r", LINE_LEN, ' ');
+ progbar_scale = 0;
+ progbar_pos = -1;
+}
+
+void xxprintf(const char *fmt, ...)
+{
+ va_list ap;
+ FILE *f;
+
+ if (quietmode) return;
+
+ va_start(ap, fmt);
+
+ clear_line();
+ vfprintf(stderr, fmt, ap);
+ fflush(stderr);
+
+ if (errorlog && (f = fopen(errlogfile, "a")) != NULL) {
+ vfprintf(f, fmt, ap);
+ fclose(f);
+ }
+
+ va_end(ap);
+}
+
+void set_status(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (quietmode) return;
+
+ va_start(ap, fmt);
+ vsprintf(status_msg, fmt, ap);
+ va_end(ap);
+
+ print_status();
+}
+
+void feed_line(void)
+{
+ if (quietmode) return;
+
+ fputc('\n', stderr);
+ fflush(stderr);
+ progbar_scale = 0;
+ progbar_pos = -1;
+}
+
+
+/* -----------------------------------------------------------------------
+** libpng progress meter
+*/
+
+/*
+ * -------------------------------------------------------------
+ *
+ * PNG ̃C^[X` "Adam7" ̉摜p[^F
+ *
+ * pX Jn_ ʐϔ is
+ * pass width height origin area progress
+ * 0 1/8 1/8 (0,0) 1/64 1/64 ( 1.6%)
+ * 1 1/8 1/8 (4,0) 1/64 1/32 ( 3.1%)
+ * 2 1/4 1/8 (0,4) 1/32 1/16 ( 6.3%)
+ * 3 1/4 1/4 (2,0) 1/16 1/8 ( 12.5%)
+ * 4 1/2 1/4 (0,2) 1/8 1/4 ( 25.0%)
+ * 5 1/2 1/2 (1,0) 1/4 1/2 ( 50.0%)
+ * 6 1 1/2 (0,1) 1/2 1/1 (100.0%)
+ *
+ * Adam7 ̎̐is󋵎Zo@F
+ *
+ * (width / 8) * 1 ̃sNZO[vPubNƍlA
+ * ̃ubNʎZło͂Őis󋵂ZoB
+ * Ⴆ pass 0 ̎́Ả摜 1/8 Ȃ̂ŁA
+ * R[obN֐Ă΂(so͂)ƂɂPubN
+ * o͂ƂɂȂApass 4 ̎(lɍl)SubN
+ * o͂ƂɂȂB
+ * ̌vZ@ɂƁÃpX݂ȂȂ悤
+ * ɒ[ɏ摜łȂ( maxcount_adam7() Q)A
+ * 摜Ŝ̑ubN (height * 8) ɓȂB
+ *
+ * ۂɂ̕Őis󋵂\Ă݂ƁAO(pass0-5)
+ * 㔼(pass6)is悤ɌB́A
+ * Adam7 ̓ƂăsNZcoɊԈĕ
+ * ĂAɉɊԈĂ pass0-5 (O)
+ * ł͉摜̍č\ɎԂĂ̂ƎvB
+ *
+ * -------------------------------------------------------------
+ */
+
+static png_uint_32 counter;
+static png_uint_32 maxcount;
+static int barlen;
+
+
+static png_uint_32
+ maxcount_adam7(png_uint_32 width, png_uint_32 height)
+{
+ png_uint_32 c = 0;
+
+ if ( 1 ) c += ((height - 0 + 7) / 8) * 1; /* Pass 0 */
+ if (width > 4) c += ((height - 0 + 7) / 8) * 1; /* Pass 1 */
+ if ( 1 ) c += ((height - 4 + 7) / 8) * 2; /* Pass 2 */
+ if (width > 2) c += ((height - 0 + 3) / 4) * 2; /* Pass 3 */
+ if ( 1 ) c += ((height - 2 + 3) / 4) * 4; /* Pass 4 */
+ if (width > 1) c += ((height - 0 + 1) / 2) * 4; /* Pass 5 */
+ if ( 1 ) c += ((height - 1 + 1) / 2) * 8; /* Pass 6 */
+
+ return c;
+}
+
+
+/*
+** initialize the progress meter
+*/
+void init_progress_meter(png_structp png_ptr, png_uint_32 width,
+ png_uint_32 height)
+{
+ enum { W = 1024, H = 768 };
+
+ if (png_set_interlace_handling(png_ptr) == 7) {
+ maxcount = maxcount_adam7(width, height); /* interlaced image */
+ } else {
+ maxcount = height; /* non-interlaced image */
+ }
+ if (height > ((png_uint_32)W * H) / width) {
+ barlen = PROGBAR_MAX;
+ } else {
+ barlen = (PROGBAR_MAX * width * height + (W * H - 1)) / (W * H);
+ }
+ counter = 0;
+ init_progress_bar(barlen);
+}
+
+
+/*
+** row callback function for progress meter
+*/
+void row_callback(png_structp png_ptr, png_uint_32 row, int pass)
+{
+/* static const png_byte step[] = { 1, 1, 2, 2, 4, 4, 8 }; */
+
+ if (row == 0) pass--;
+ /*
+ * libpng's bug ?? : In the case of interlaced image,
+ * this function is called with row=0 and pass=current_pass+1
+ * when the row should be equal to height and the pass should
+ * be equal to current_pass.
+ */
+
+ counter += (1 << (pass >> 1)); /* step[pass]; */
+ update_progress_bar(barlen * counter / maxcount);
+}
+
+
+/* -----------------------------------------------------------------------
+** libpng error handling
+*/
+
+/*
+** fatal error handling function
+*/
+void png_my_error(png_structp png_ptr, png_const_charp message)
+{
+ xxprintf("ERROR(libpng): %s - %s\n", message,
+ (char *)png_get_error_ptr(png_ptr));
+ longjmp(png_jmpbuf(png_ptr), 1);
+}
+
+
+/*
+** non-fatal error handling function
+*/
+void png_my_warning(png_structp png_ptr, png_const_charp message)
+{
+ xxprintf("WARNING(libpng): %s - %s\n", message,
+ (char *)png_get_error_ptr(png_ptr));
+}
+
+
+/* -----------------------------------------------------------------------
+** image buffer management
+*/
+
+/*
+** allocate image buffer
+*/
+BOOL imgbuf_alloc(IMAGE *img)
+{
+ BYTE *bp, **rp;
+ LONG n;
+
+ if (img->palnum > 0) {
+ img->palette = malloc((size_t)img->palnum * sizeof(PALETTE));
+ if (img->palette == NULL) { imgbuf_init(img); return FALSE; }
+ } else {
+ img->palette = NULL;
+ }
+ img->rowbytes = ((DWORD)img->width * img->pixdepth + 31) / 32 * 4;
+ img->imgbytes = img->rowbytes * img->height;
+ img->rowptr = malloc((size_t)img->height * sizeof(BYTE *));
+ img->bmpbits = malloc((size_t)img->imgbytes);
+
+ if (img->rowptr == NULL || img->bmpbits == NULL) {
+ imgbuf_free(img); imgbuf_init(img); return FALSE;
+ }
+
+ n = img->height;
+ rp = img->rowptr;
+ bp = img->bmpbits;
+
+ if (img->topdown) {
+ while (--n >= 0) {
+ *(rp++) = bp;
+ bp += img->rowbytes;
+ /* ((DWORD *)bp)[-1] = 0; */
+ }
+ } else { /* bottom-up */
+ bp += img->imgbytes;
+ while (--n >= 0) {
+ /* fill zeros to padding bytes (for write_bmp()) */
+ ((DWORD *)bp)[-1] = 0;
+ bp -= img->rowbytes;
+ *(rp++) = bp;
+ }
+ }
+
+ return TRUE;
+}
+
+
+/*
+** free image buffer allocated by imgbuf_alloc()
+*/
+void imgbuf_free(IMAGE *img)
+{
+ free(img->palette);
+ free(img->rowptr);
+ free(img->bmpbits);
+}
+
+
+/*
+** init image buffer to empty
+*/
+void imgbuf_init(IMAGE *img)
+{
+ img->palette = NULL;
+ img->rowptr = NULL;
+ img->bmpbits = NULL;
+}
+
+
+/* -----------------------------------------------------------------------
+** R}hC̏
+*/
+
+#define isoption(p) (IsOptChar((p)[0]) && (p)[1]!='\0')
+
+/*
+** R}hCǂ
+*/
+int parsearg(int *opt, char **arg, int argc, char **argv, char *aopts)
+{
+ static int agi = 1;
+ static char *agp = NULL;
+ char *p;
+ int c, i;
+
+ if (agp != NULL && *agp == '\0') {
+ agp = NULL;
+ agi++;
+ }
+ if (agi >= argc) return 0; /* end */
+
+ if (p = argv[agi], agp == NULL && !isoption(p)) {
+ /* non-option element */
+ c = 0;
+ agi++;
+ } else {
+ if (agp == NULL) agp = p + 1;
+ if (c = (*agp & 0xFF), strchr(aopts, c) != NULL) {
+ /* option with an argument */
+ if (p = agp + 1, *p != '\0') {
+ /*NULL*/;
+ } else if (i = agi + 1, p = argv[i], i < argc && !isoption(p)) {
+ agi = i;
+ } else {
+ p = NULL;
+ }
+ agp = NULL;
+ agi++;
+ } else {
+ /* option without an argument */
+ p = NULL;
+ agp++;
+ }
+ }
+ *opt = c;
+ *arg = p;
+
+ return 1;
+}
+
+
+/*
+** ‹ϐŎw肳ĂIvV argc, argv ɕ
+*/
+char **envargv(int *argcp, char ***argvp, const char *envn)
+{
+ int argc, nagc, envc, i;
+ char **argv, **nagv, *envs, *ep;
+
+ ep = getenv(envn);
+ if (ep == NULL || ep[0] == '\0') return NULL;
+
+ envs = malloc(strlen(ep) + 1);
+ if (envs == NULL) return NULL;
+ strcpy(envs, ep);
+
+ envc = tokenize(envs, envs);
+ if (envc == 0) { free(envs); return NULL; }
+
+ argc = *argcp;
+ argv = *argvp;
+ nagv = malloc((argc + envc + 1) * sizeof(char *));
+ if (nagv == NULL) { free(envs); return NULL; }
+
+ nagc = 1;
+ nagv[0] = argv[0];
+
+ for (i = 0; i < envc; i++) {
+ nagv[nagc++] = envs;
+ while (*(envs++) != '\0') ;
+ }
+ for (i = 1; i < argc; i++) {
+ nagv[nagc++] = argv[i];
+ }
+ nagv[nagc] = NULL;
+
+ *argcp = nagc;
+ *argvp = nagv;
+
+ return argv;
+}
+
+
+/*
+** 󔒕(Xy[X/^u/s)̏ŋ؂(NI[gt)
+** ؂ꂽ̐Ԃ
+*/
+int tokenize(char *buf, const char *str)
+{
+ enum { STR = 0x01, QUOTE = 0x02 };
+ int flag = 0;
+ int num = 0;
+ char c;
+ int i;
+
+ while ((c = *str++) != '\0') {
+ if (!(flag & QUOTE) &&
+ (c == ' ' || c == '\t' || c == '\n' || c == '\r')) {
+ if (flag & STR) {
+ flag &= ~STR;
+ *buf++ = '\0';
+ }
+ } else {
+ if (!(flag & STR)) {
+ flag |= STR;
+ num++;
+ }
+ switch (c) {
+ case '\\':
+ /*
+ * Escaping of `"' is the same as
+ * command-line parsing of MS-VC++.
+ *
+ * ex.) " -> quote
+ * \" -> "
+ * \\" -> \ + quote
+ * \\\" -> \ + "
+ * \\\\" -> \\ + quote
+ * \\\\\ -> \\\\\
+ */
+ for (i = 1; (c = *str) == '\\'; str++, i++) ;
+ if (c == '"') {
+ while ((i -= 2) >= 0)
+ *buf++ = '\\';
+ if (i == -1) {
+ *buf++ = '"';
+ str++;
+ }
+ } else {
+ while ((--i) >= 0)
+ *buf++ = '\\';
+ }
+ break;
+
+ case '"':
+ flag ^= QUOTE;
+ break;
+
+ default:
+ *buf++ = c;
+ }
+ }
+ }
+ if (flag & STR) *buf = '\0';
+
+ return num;
+}
+
+
+/* -----------------------------------------------------------------------
+** t@CɊւGp
+*/
+
+/*
+** Kw̃fBNgxɍ쐬
+*/
+int makedir(const char *path)
+{
+ char dir[FILENAME_MAX];
+ struct stat sbuf;
+ char *p, c;
+ int r;
+
+ delslash(strcpy(dir, path));
+ if (stat(dir, &sbuf) == 0) {
+ if ((sbuf.st_mode & S_IFMT) == S_IFDIR) return 0;
+ /* errno = EEXIST; */
+ return -1;
+ }
+ p = path_skiproot(dir);
+ do {
+ p = path_nextslash(p);
+ c = *p; *p = '\0';
+ r = MKDIR(dir, 0777);
+ *p++ = c;
+ } while (c != '\0');
+
+ return r;
+}
+
+
+/*
+** ̓t@CobNAbv(l[)
+*/
+int renbak(const char *path)
+{
+ char bak[FILENAME_MAX];
+ struct stat sbuf;
+ char *sfx;
+ int i;
+
+ strcpy(bak, path);
+ if (stat(bak, &sbuf) != 0) return 0;
+
+#ifdef MSDOS
+ sfx = suffix(bak);
+#else
+ sfx = bak + strlen(bak);
+#endif
+ strcpy(sfx, ".bak");
+ i = 0;
+ while (1) {
+ if (stat(bak, &sbuf) != 0 && rename(path, bak) == 0) return 0;
+ if (i >= 1000) break;
+ sprintf(sfx, ".%03d", i++);
+ }
+ return -1;
+}
+
+
+/*
+** t@C̃^CX^vRs[
+*/
+int cpyftime(const char *srcf, const char *dstf)
+{
+ struct stat sbuf;
+ struct utimbuf ubuf;
+
+ if (stat(srcf, &sbuf) != 0) return -1;
+
+ ubuf.actime = sbuf.st_atime;
+ ubuf.modtime = sbuf.st_mtime;
+
+ return utime(dstf, &ubuf);
+}
+
+
+/*
+** oCi[h̕Wo̓Xg[擾
+*/
+FILE *binary_stdio(int fd)
+{
+ FILE *fp;
+
+ if (fd != 0 && fd != 1) return NULL;
+
+#ifdef BINSTDIO_FDOPEN
+ fp = fdopen(fd, (fd==0)? "rb":"wb");
+#else
+#ifdef BINSTDIO_SETMODE
+ setmode(fd, O_BINARY);
+#endif
+ fp = (fd == 0) ? stdin : stdout;
+#endif
+ return fp;
+}
+
+
+/* -----------------------------------------------------------------------
+** path functions
+*/
+
+/*
+** Return a pointer that points the suffix of the PATH
+** ex.) c:\dosuty\log\test.exe -> .exe
+** ex.) c:\dosuty\log\test.tar.gz -> .gz
+*/
+char *suffix(const char *path)
+{
+ char c, *p, *q, *r;
+
+ for (r = q = p = basname(path); (c = *p) != '\0'; p++)
+ if (c == '.') q = p;
+ if (q == r) q = p; /* dotfile with no suffix */
+
+ return q;
+}
+
+
+/*
+** Return a pointer that points the basename of the PATH
+** ex.) c:\dos\format.exe -> format.exe
+*/
+char *basname(const char *path)
+{
+ const char *p, *q;
+
+ for (p = path_skiproot(path);
+ *(q = path_nextslash(p)) != '\0'; p = q + 1) ;
+
+ return (char *)p;
+}
+
+
+/*
+** Append a path-delimiter to the PATH. If the PATH is a string
+** like "c:\", "\", "c:", "", do nothing.
+** ex.) c:\dos -> c:\dos\
+*/
+char *addslash(char *path)
+{
+ char *p, *q;
+
+ for (p = path_skiproot(path);
+ *(q = path_nextslash(p)) != '\0'; p = q + 1) ;
+ /*
+ * s = path_skiproot( path );
+ * if( q==s && q==p ) - s is a mull string.
+ * if( q!=s && q==p ) - s is followed by a path delimiter.
+ * if( q!=s && q!=p ) - s is not followed by a path delimiter.
+ */
+ if (q != p) {
+ *q++ = PATHDELIM;
+ *q = '\0';
+ }
+
+ return path;
+}
+
+
+/*
+** Remove a path-delimiter at the end of the PATH. If the PATH is
+** a string like "c:\", "\", "c:", "", append a dot.
+** ex.) c:\dos\ -> c:\dos
+** c:\ -> c:\.
+*/
+char *delslash(char *path)
+{
+ char *p, *q, *s;
+
+ for (p = s = path_skiproot(path);
+ *(q = path_nextslash(p)) != '\0'; p = q + 1) ;
+ /*
+ * if( q==s && q==p ) - s is a mull string.
+ * if( q!=s && q==p ) - s is followed by a path delimiter.
+ * if( q!=s && q!=p ) - s is not followed by a path delimiter.
+ */
+ if (q == s) {
+ *q++ = '.';
+ *q = '\0';
+ } else if (q == p) {
+ *--q = '\0';
+ }
+
+ return path;
+}
+
+
+char *path_skiproot(const char *path)
+{
+#ifdef DRIVESUFFIX
+ if (isalpha((unsigned char)path[0])
+ && path[1] == DRIVESUFFIX) path += 2;
+#endif
+ if (IsPathDelim(path[0])) path++;
+ return (char *)path;
+}
+
+
+char *path_nextslash(const char *path)
+{
+ char c;
+
+ for (; (c = *path) != '\0'; path++) {
+ if (IsDBCSLead((unsigned char)c)) {
+ if (*(++path) == '\0') break;
+ continue;
+ }
+ if (IsPathDelim(c)) break;
+ }
+ return (char *)path;
+}
+
+#ifdef WIN32_LFN
+
+/*
+** return TRUE if the PATH is a dos-style filename.
+*/
+int is_dos_filename(const char *path)
+{
+ unsigned char c;
+ char *b, *p;
+
+ for (b = p = basname(path); (c = *p) != '\0' && c != '.'; p++)
+ if (islower(c)) return 0;
+ if ((p - b) == 0 || (p - b) > 8) return 0;
+ if (c == '.') {
+ for (b = ++p; (c = *p) != '\0'; p++)
+ if (islower(c) || c == '.') return 0;
+ if ((p - b) == 0 || (p - b) > 3) return 0;
+ }
+ return 1;
+}
+
+#endif /* WIN32_LFN */
diff --git a/crawl-ref/source/rltiles/bmp2png/common.h b/crawl-ref/source/rltiles/bmp2png/common.h
new file mode 100644
index 0000000000..ad5a341e92
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/common.h
@@ -0,0 +1,196 @@
+/*
+** bmp2png --- conversion from (Windows or OS/2 style) BMP to PNG
+** png2bmp --- conversion from PNG to (Windows style) BMP
+**
+** Copyright (C) 1999-2005 MIYASAKA Masaru <alkaid@coral.ocn.ne.jp>
+**
+** Permission to use, copy, modify, and distribute this software and
+** its documentation for any purpose and without fee is hereby granted,
+** provided that the above copyright notice appear in all copies and
+** that both that copyright notice and this permission notice appear
+** in supporting documentation. This software is provided "as is"
+** without express or implied warranty.
+**
+** NOTE: Comments are partly written in Japanese. Sorry.
+*/
+
+#ifndef COMMON_H
+#define COMMON_H
+
+#if defined(__RSXNT__) && defined(__CRTRSXNT__)
+# include <crtrsxnt.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdarg.h>
+
+ /* for stat() */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+ /* for utime() */
+#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__)
+# include <sys/utime.h>
+# if defined(__LCC__)
+ int utime(const char *, struct _utimbuf *);
+# endif
+#else
+# include <utime.h>
+#endif
+ /* for isatty() */
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) || \
+ defined(__LCC__)
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
+ /* for mkdir() */
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) || \
+ defined(__LCC__)
+# include <direct.h>
+# if defined(__MINGW32__)
+# define MKDIR(d,m) _mkdir(d)
+# else
+# define MKDIR(d,m) mkdir(d)
+# endif
+#else
+# if defined(__GO32__) && !defined(__DJGPP__) /* DJGPP v.1 */
+# include <osfcn.h>
+# else
+# include <sys/stat.h>
+# endif
+# define MKDIR(d,m) mkdir(d,m)
+#endif
+
+#if !defined(BINSTDIO_FDOPEN) && !defined(BINSTDIO_SETMODE)
+# if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__EMX__) || \
+ defined(_MSC_VER) || defined(__BORLANDC__) || defined(__LCC__) || \
+ defined(__DJGPP__) || defined(__GO32__)
+# define BINSTDIO_SETMODE
+# endif
+# if 0 /* defined(__YOUR_COMPLIER_MACRO__) */
+# define BINSTDIO_FDOPEN
+# endif
+#endif
+ /* for setmode() */
+#ifdef BINSTDIO_SETMODE
+# include <io.h>
+# include <fcntl.h>
+#endif
+
+#include "png.h"
+
+#if (PNG_LIBPNG_VER < 10004)
+# error libpng version 1.0.4 or later is required.
+#endif
+
+#if (PNG_LIBPNG_VER == 10207) || (PNG_LIBPNG_VER == 10206) || \
+ (PNG_LIBPNG_VER == 10017) || (PNG_LIBPNG_VER == 10016)
+# error Libpng versions 1.2.7, 1.2.6, 1.0.17, and 1.0.16
+# error have a bug that will cause png2bmp to crash.
+# error Update your libpng to latest version.
+# error "http://www.libpng.org/pub/png/libpng.html"
+#endif
+
+#if !defined(PNG_READ_tRNS_SUPPORTED) || !defined(PNG_WRITE_tRNS_SUPPORTED)
+# error This software requires tRNS chunk support.
+#endif
+
+#ifndef png_jmpbuf /* pngconf.h (libpng 1.0.6 or later) */
+# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
+#endif
+
+#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
+# define WIN32
+#endif
+#if defined(__MSDOS__) && !defined(MSDOS)
+# define MSDOS
+#endif
+#if defined(__CYGWIN__)
+# undef WIN32
+# undef MSDOS
+#endif
+
+#if defined(WIN32) || defined(__DJGPP__)
+# define WIN32_LFN /* Win32-style long filename */
+#endif
+
+#if defined(WIN32) || defined(MSDOS)
+# define PATHDELIM '\\'
+# define DRIVESUFFIX ':'
+# define IsPathDelim(c) ((c)==PATHDELIM || (c)=='/')
+# define IsOptChar(c) ((c)=='-' || (c)=='/')
+# ifdef JAPANESE
+# define IsDBCSLead(c) ((0x81<=(c) && (c)<=0x9F) || (0xE0<=(c) && (c)<=0xFC))
+# else
+# define IsDBCSLead(c) (0)
+# endif
+#else /* UNIX */
+# define PATHDELIM '/'
+# define IsPathDelim(c) ((c)==PATHDELIM)
+# define IsOptChar(c) ((c)=='-')
+# define IsDBCSLead(c) (0)
+#endif
+
+typedef char CHAR;
+typedef unsigned char BYTE;
+typedef short SHORT;
+typedef unsigned short WORD;
+typedef int INT;
+typedef unsigned int UINT;
+typedef long LONG;
+typedef unsigned long DWORD;
+typedef enum { FALSE = 0, TRUE = 1 } BOOL;
+
+typedef png_color PALETTE;
+typedef struct tagIMAGE {
+ LONG width;
+ LONG height;
+ UINT pixdepth;
+ UINT palnum;
+ BOOL topdown;
+ BOOL alpha;
+ /* ----------- */
+ DWORD rowbytes;
+ DWORD imgbytes;
+ PALETTE *palette;
+ BYTE **rowptr;
+ BYTE *bmpbits;
+ /* ----------- */
+ png_color_8 sigbit;
+} IMAGE;
+
+extern int quietmode;
+extern int errorlog;
+extern const char errlogfile[];
+
+void xxprintf(const char *, ...);
+void set_status(const char *, ...);
+void feed_line(void);
+void init_progress_meter(png_structp, png_uint_32, png_uint_32);
+void row_callback(png_structp, png_uint_32, int);
+void png_my_error(png_structp, png_const_charp);
+void png_my_warning(png_structp, png_const_charp);
+BOOL imgbuf_alloc(IMAGE *);
+void imgbuf_free(IMAGE *);
+void imgbuf_init(IMAGE *);
+int parsearg(int *, char **, int, char **, char *);
+char **envargv(int *, char ***, const char *);
+int tokenize(char *, const char *);
+int makedir(const char *);
+int renbak(const char *);
+int cpyftime(const char *, const char *);
+FILE *binary_stdio(int);
+char *suffix(const char *);
+char *basname(const char *);
+char *addslash(char *);
+char *delslash(char *);
+char *path_skiproot(const char *);
+char *path_nextslash(const char *);
+#ifdef WIN32_LFN
+int is_dos_filename(const char *);
+#endif
+
+#endif /* COMMON_H */
diff --git a/crawl-ref/source/rltiles/bmp2png/makefile.bcc b/crawl-ref/source/rltiles/bmp2png/makefile.bcc
new file mode 100644
index 0000000000..b90f278fb0
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/makefile.bcc
@@ -0,0 +1,52 @@
+#--------------------------------
+# bmp2png.exe & png2bmp.exe
+# makefile for Borland C++ 5.5
+#--------------------------------
+
+!ifndef srcdir
+srcdir = .
+!endif
+.path.c = $(srcdir)
+.path.h = $(srcdir)
+
+ZINC = $(srcdir)/../zlib
+PINC = $(srcdir)/../libpng
+ZLIB = $(srcdir)/../zlib
+PLIB = $(srcdir)/../libpng
+
+CC = bcc32
+LD = bcc32
+CFLAGS = $(MODEL) -q -d -O2 -OS -Oi -Oc -DPNG_USER_CONFIG -I$(PINC) \
+ -I$(ZINC) $(COPT)
+LDFLAGS = $(MODEL) -q -WC -L$(PLIB) -L$(ZLIB) $(LOPT)
+
+LIBS = libpng.lib zlib.lib noeh32.lib
+B2POBJ = bmp2png.obj common.obj
+P2BOBJ = png2bmp.obj common.obj
+
+
+all : bmp2png.exe png2bmp.exe
+
+bmp2png.exe : $(B2POBJ)
+ $(LD) $(LDFLAGS) -e$@ $(B2POBJ) $(LIBS)
+
+png2bmp.exe : $(P2BOBJ)
+ $(LD) $(LDFLAGS) -e$@ $(P2BOBJ) $(LIBS)
+
+.c.obj :
+ $(CC) $(CFLAGS) -c $*.c
+
+.c.asm :
+ $(CC) $(CFLAGS) -S $*.c
+
+clean : mostlyclean
+ if exist *.exe del *.exe
+
+mostlyclean :
+ if exist *.obj del *.obj
+ if exist *.tds del *.tds
+
+bmp2png.obj : bmp2png.c common.h bmphed.h
+png2bmp.obj : png2bmp.c common.h bmphed.h
+common.obj : common.c common.h
+
diff --git a/crawl-ref/source/rltiles/bmp2png/makefile.dj2 b/crawl-ref/source/rltiles/bmp2png/makefile.dj2
new file mode 100644
index 0000000000..c8f6b8aabf
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/makefile.dj2
@@ -0,0 +1,54 @@
+#-----------------------------
+# bmp2png.exe & png2bmp.exe
+# makefile for DJGPP V.2
+#-----------------------------
+
+srcdir = .
+VPATH = $(srcdir)
+
+ZINC = $(srcdir)/../zlib
+PINC = $(srcdir)/../libpng
+ZLIB = $(srcdir)/../zlib
+PLIB = $(srcdir)/../libpng
+
+CC = gcc
+LD = gcc
+CFLAGS = -O2 -Wall -mcpu=pentium -march=i386 -DPNG_USER_CONFIG \
+ -I$(PINC) -I$(ZINC) $(COPT)
+LDFLAGS = -s -L$(PLIB) -L$(ZLIB) $(LOPT)
+
+LIBS = -lpng -lz -lm
+B2POBJ = bmp2png.o common.o
+P2BOBJ = png2bmp.o common.o
+B2PMAP = -Wl,-Map,bmp2png.map
+P2BMAP = -Wl,-Map,png2bmp.map
+
+
+all : bmp2png.exe png2bmp.exe
+
+bmp2png.exe : $(B2POBJ)
+ $(LD) $(LDFLAGS) $(B2PMAP) -o $@ $(B2POBJ) $(LIBS)
+
+png2bmp.exe : $(P2BOBJ)
+ $(LD) $(LDFLAGS) $(P2BMAP) -o $@ $(P2BOBJ) $(LIBS)
+
+%.o : %.c
+ $(CC) $(CFLAGS) -c $<
+
+%.s : %.c
+ $(CC) $(CFLAGS) -S -fverbose-asm $<
+
+%.lst : %.s
+ $(CC) -Wa,-a=$@ -c -o NUL $<
+
+clean : mostlyclean
+ if exist *.exe del *.exe
+ if exist *.map del *.map
+
+mostlyclean :
+ if exist *.o del *.o
+
+bmp2png.o : bmp2png.c common.h bmphed.h
+png2bmp.o : png2bmp.c common.h bmphed.h
+common.o : common.c common.h
+
diff --git a/crawl-ref/source/rltiles/bmp2png/makefile.lin b/crawl-ref/source/rltiles/bmp2png/makefile.lin
new file mode 100644
index 0000000000..85136685f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/makefile.lin
@@ -0,0 +1,48 @@
+#-------------------------------------
+# bmp2png & png2bmp
+# makefile for gcc/gmake
+# Thanks to Gary Aviv for this file.
+#-------------------------------------
+
+ifndef BINDIR
+BINDIR = /usr/local/bin
+endif
+
+CC = gcc
+LD = gcc
+ifndef INSTALL
+INSTALL = install -s -m 755
+endif
+ifndef CFLAGS
+CFLAGS = -O2 -g -Wall
+endif
+
+LIBS = -lpng -lz -lm
+B2POBJ = bmp2png.o common.o
+P2BOBJ = png2bmp.o common.o
+
+
+all : bmp2png png2bmp
+
+bmp2png : $(B2POBJ)
+ $(LD) $(LDFLAGS) -o bmp2png $(B2POBJ) $(LIBS)
+
+png2bmp : $(P2BOBJ)
+ $(LD) $(LDFLAGS) -o png2bmp $(P2BOBJ) $(LIBS)
+
+%.o : %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+install :
+ $(INSTALL) bmp2png png2bmp $(BINDIR)
+
+uninstall :
+ rm -f $(BINDIR)/bmp2png $(BINDIR)/png2bmp
+
+clean :
+ rm -f $(B2POBJ) $(P2BOBJ) bmp2png png2bmp
+
+bmp2png.o : bmp2png.c common.h bmphed.h
+png2bmp.o : png2bmp.c common.h bmphed.h
+common.o : common.c common.h
+
diff --git a/crawl-ref/source/rltiles/bmp2png/png2bmp.c b/crawl-ref/source/rltiles/bmp2png/png2bmp.c
new file mode 100644
index 0000000000..d08da6df23
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/png2bmp.c
@@ -0,0 +1,647 @@
+/*
+** png2bmp --- conversion from PNG to (Windows style) BMP
+**
+** Copyright (C) 1999-2005 MIYASAKA Masaru
+**
+** For conditions of distribution and use,
+** see copyright notice in common.h.
+*/
+
+#include "common.h"
+#include "bmphed.h"
+
+#define PNG2BMP_VERSION "1.62 (Sep 4, 2005)"
+#define PNG2BMP_COPYRIGHT "Copyright (C) 1999-2005 MIYASAKA Masaru"
+
+char outnam[FILENAME_MAX];
+char outdir[FILENAME_MAX];
+int deletesrc = 0;
+int copytime = 0;
+
+#define P2B_ALPHABMP_NONE 0
+#define P2B_ALPHABMP_ARGB 1 /* -a option; 32bit ARGB(RGB) BMP */
+#define P2B_ALPHABMP_BITFIELD 2 /* -b option; 32bit Bitfield BMP */
+
+int alpha_format = P2B_ALPHABMP_NONE;
+int expand_trans = 0;
+
+#if defined(WIN32) || defined(MSDOS)
+const char errlogfile[] = ".\\P2BERROR.LOG";
+#else
+const char errlogfile[] = "./p2berror.log";
+#endif
+
+ /* error messages */
+#ifdef JAPANESE /* ---------- */
+const char wrn_mkdirfail[] =
+ "WARNING: o͐fBNg܂ - %s\n"
+ "WARNING: -> -%c IvV ł̏o͐w͖܂\n";
+const char err_ropenfail[] = "SKIPPED: Yt@C܂ - %s\n";
+const char err_wopenfail[] = "SKIPPED: o̓t@C쐬ł܂ - %s\n";
+const char err_outofmemory[] = "SKIPPED: Ɨpmۂł܂ - %s\n";
+ /* -- */
+const char err_writeerr[] = "SKIPPED: ݃G[܂ - %s\n";
+const char err_not_a_png[] = "SKIPPED: PNG t@Cł͂܂ - %s\n";
+#else /* ------------------- */
+const char wrn_mkdirfail[] =
+ "WARNING: Cannot create a directory - %s\n"
+ "WARNING: -> Output directory specified by '-%c' will be ignored.\n";
+const char err_ropenfail[] = "SKIPPED: No such file or directory - %s\n";
+const char err_wopenfail[] = "SKIPPED: Cannot create - %s\n";
+const char err_outofmemory[] = "SKIPPED: Out of memory - %s\n";
+ /* -- */
+const char err_writeerr[] = "SKIPPED: Write operation failed - %s\n";
+const char err_not_a_png[] = "SKIPPED: Not a PNG file - %s\n";
+#endif /* ------------------- */
+
+static BOOL read_png(char *, IMAGE *);
+static int skip_macbinary(png_structp);
+static void to4bpp(png_structp, png_row_infop, png_bytep);
+static BOOL write_bmp(char *, IMAGE *);
+static const char *write_rgb_bits(IMAGE *, FILE *);
+static void mputdwl(void *, unsigned long);
+static void mputwl(void *, unsigned int);
+static void usage_exit(char *, int);
+
+
+
+/*
+** C
+*/
+int main(int argc, char *argv[])
+{
+ char outf[FILENAME_MAX];
+ IMAGE image;
+ int opt;
+ char *arg;
+ char *p, c;
+ int r_stdin, w_stdout;
+ int failure = 0, success = 0;
+
+#ifdef __LCC__ /* lcc-win32 */
+ char **envp;
+ void _GetMainArgs(int *, char ***, char ***, int);
+ _GetMainArgs(&argc, &argv, &envp, 1);
+#endif
+#ifdef __EMX__
+ _wildcard(&argc, &argv);
+#endif
+ envargv(&argc, &argv, "B2P");
+
+ r_stdin = !isatty(fileno(stdin));
+ w_stdout = !isatty(fileno(stdout));
+
+ while (parsearg(&opt, &arg, argc, argv, "DdOoFfPp")) {
+ switch (toupper(opt)) {
+ case 'E': deletesrc ^= 1; break;
+ case 'T': copytime ^= 1; break;
+ case 'Q': quietmode ^= 1; break;
+ case 'L': errorlog ^= 1; break;
+
+ case 'X':
+ r_stdin = 0;
+ w_stdout = 0;
+ break;
+
+ case 'A':
+ alpha_format = (alpha_format == P2B_ALPHABMP_ARGB) ?
+ P2B_ALPHABMP_NONE : P2B_ALPHABMP_ARGB;
+ break;
+
+ case 'B':
+ alpha_format = (alpha_format == P2B_ALPHABMP_BITFIELD) ?
+ P2B_ALPHABMP_NONE : P2B_ALPHABMP_BITFIELD;
+ break;
+
+ case 'R':
+ expand_trans ^= 1;
+ break;
+
+ case 'F':
+ /* '-F' option of bmp2png (ignored on png2bmp) */
+ break;
+
+ case 'P':
+ /* '-P' option of bmp2png (ignored on png2bmp) */
+ break;
+
+ case 'D': /* output directory */
+ if (*arg == '-') arg = NULL;
+ if (arg == NULL) {
+ outdir[0] = '\0';
+ } else {
+ strcpy(outdir, arg);
+ addslash(outdir);
+ if (makedir(outdir) != 0) {
+ xxprintf(wrn_mkdirfail, outdir, 'D');
+ outdir[0] = '\0';
+ }
+ }
+ break;
+
+ case 'O': /* output filename */
+ if (arg == NULL) {
+ outnam[0] = '\0';
+ } else {
+ strcpy(outnam, arg);
+ p = basname(outnam);
+ c = *p; *p = '\0';
+ if (makedir(outnam) != 0) {
+ xxprintf(wrn_mkdirfail, outnam, 'O');
+ outnam[0] = '\0';
+ } else {
+ *p = c;
+ }
+ }
+ break;
+
+ case 0x00: /* input file spec */
+ if (outnam[0] != '\0') {
+ strcpy(outf, outnam);
+ outnam[0] = '\0';
+ } else if (w_stdout) {
+ if (!read_png(arg, &image)) return 1;
+ if (!write_bmp(NULL, &image)) return 1;
+ if (deletesrc) remove(arg);
+ return 0;
+ } else {
+ if (outdir[0] != '\0') {
+ strcat(strcpy(outf, outdir), basname(arg));
+ } else {
+ strcpy(outf, arg);
+ }
+#ifdef WIN32_LFN
+ strcpy(suffix(outf), is_dos_filename(outf) ? ".BMP" : ".bmp");
+#else
+ strcpy(suffix(outf), ".bmp");
+#endif
+ }
+ /* ---------------------- */
+ if (!read_png(arg, &image)) {
+ failure++;
+ break;
+ }
+ renbak(outf);
+ if (!write_bmp(outf, &image)) {
+ failure++;
+ break;
+ }
+ /* ---------------------- */
+ if (copytime) cpyftime(arg, outf);
+ if (deletesrc) remove(arg);
+ /* ---------------------- */
+ success++;
+ break;
+
+ default:
+ ; /* Ignore unknown option */
+ }
+ }
+ if (failure == 0 && success == 0) {
+ if (!r_stdin) usage_exit(argv[0], 255);
+ if (!read_png(NULL, &image)) return 1;
+ if (outnam[0] != '\0') {
+ renbak(outnam);
+ return !write_bmp(outnam, &image);
+ } else if (w_stdout) {
+ return !write_bmp(NULL, &image);
+ } else {
+ strcat(strcpy(outf, outdir), "___stdin.bmp");
+ renbak(outf);
+ return !write_bmp(outf, &image);
+ }
+ }
+
+ return (failure > 255) ? 255 : failure;
+}
+
+
+/* -----------------------------------------------------------------------
+** PNG t@C̓ǂݍ
+*/
+
+#define ERROR_ABORT(s) do { errmsg = (s); goto error_abort; } while (0)
+
+/*
+** .pngt@C̓ǂݍ
+*/
+static BOOL read_png(char *fn, IMAGE *img)
+{
+ png_structp png_ptr;
+ png_infop info_ptr, end_info;
+ png_uint_32 width, height;
+ int bit_depth, color_type;
+ int xbit_depth, xcolor_type, xchannels;
+ const char *errmsg;
+ FILE *fp;
+
+ imgbuf_init(img);
+
+ if (fn == NULL) {
+ fn = " (stdin)";
+ fp = binary_stdio(fileno(stdin));
+ } else {
+ fp = fopen(fn, "rb");
+ }
+ if (fp == NULL) ERROR_ABORT(err_ropenfail);
+
+ set_status("Reading %.80s", basname(fn));
+
+ /* ------------------------------------------------------ */
+
+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, fn,
+ png_my_error, png_my_warning);
+ if (png_ptr == NULL) {
+ ERROR_ABORT(err_outofmemory);
+ }
+ info_ptr = png_create_info_struct(png_ptr);
+ end_info = png_create_info_struct(png_ptr);
+ if (info_ptr == NULL || end_info == NULL) {
+ png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+ ERROR_ABORT(err_outofmemory);
+ }
+ if (setjmp(png_jmpbuf(png_ptr))) {
+ /* If we get here, we had a problem writing the file */
+ png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+ ERROR_ABORT(NULL);
+ }
+ png_init_io(png_ptr, fp);
+ png_set_sig_bytes(png_ptr, skip_macbinary(png_ptr));
+
+ /* ------------------------------------------------------ */
+
+ png_read_info(png_ptr, info_ptr);
+
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth,
+ &color_type, NULL, NULL, NULL);
+
+ /* ------------------------------------------------------ */
+
+ if (color_type & PNG_COLOR_MASK_ALPHA) {
+ if (alpha_format == P2B_ALPHABMP_NONE) {
+ png_set_strip_alpha(png_ptr);
+ color_type &= ~PNG_COLOR_MASK_ALPHA;
+ }
+ } else if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
+ if (alpha_format != P2B_ALPHABMP_NONE && expand_trans) {
+ png_set_tRNS_to_alpha(png_ptr);
+ color_type |= PNG_COLOR_MASK_ALPHA;
+ color_type &= ~PNG_COLOR_MASK_PALETTE;
+ }
+ }
+ if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+ png_set_gray_to_rgb(png_ptr);
+ }
+ if (color_type == PNG_COLOR_TYPE_RGB ||
+ color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
+ png_set_bgr(png_ptr);
+ }
+ if (!(color_type & PNG_COLOR_MASK_ALPHA) && bit_depth == 2) {
+ png_set_user_transform_info(png_ptr, NULL, 4, 1);
+ png_set_read_user_transform_fn(png_ptr, to4bpp);
+ }
+ if (bit_depth == 16)
+ png_set_strip_16(png_ptr);
+
+ png_read_update_info(png_ptr, info_ptr);
+
+ /* ------------------------------------------------------ */
+
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &xbit_depth,
+ &xcolor_type, NULL, NULL, NULL);
+ xchannels = png_get_channels(png_ptr, info_ptr);
+
+ img->width = (LONG)width;
+ img->height = (LONG)height;
+ img->pixdepth = (UINT)xbit_depth * xchannels;
+ img->palnum = (img->pixdepth <= 8) ? (1 << img->pixdepth) : 0;
+ img->topdown = FALSE;
+ img->alpha = (xcolor_type & PNG_COLOR_MASK_ALPHA) ? TRUE : FALSE;
+
+ if (!imgbuf_alloc(img)) {
+ png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+ ERROR_ABORT(err_outofmemory);
+ }
+
+ if (img->palnum > 0) {
+ if (xcolor_type == PNG_COLOR_TYPE_PALETTE) {
+ png_colorp palette;
+ int num_palette;
+ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);
+ if (num_palette > (int)img->palnum) num_palette = img->palnum;
+ memset(img->palette, 0, img->palnum * sizeof(png_color));
+ memcpy(img->palette, palette, num_palette * sizeof(png_color));
+ } else {
+ int depth = (bit_depth == 16) ? 8 : bit_depth;
+ memset(img->palette, 0, img->palnum * sizeof(png_color));
+ png_build_grayscale_palette(depth, img->palette);
+ }
+ }
+
+ /* ------------------------------------------------------ */
+
+ png_set_read_status_fn(png_ptr, row_callback);
+ init_progress_meter(png_ptr, img->width, img->height);
+
+ png_read_image(png_ptr, img->rowptr);
+
+ png_read_end(png_ptr, end_info);
+ png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+
+ /* ------------------------------------------------------ */
+
+ set_status("Read OK %.80s", basname(fn));
+
+ if (fp != stdin) fclose(fp);
+
+ return TRUE;
+
+error_abort: /* error */
+ if (errmsg != NULL) xxprintf(errmsg, fn);
+ if (fp != stdin && fp != NULL) fclose(fp);
+ imgbuf_free(img);
+
+ return FALSE;
+}
+
+
+/*
+** t@C擪ɂ}bNoCiǂݒ΂
+*/
+static int skip_macbinary(png_structp png_ptr)
+{
+#if 0
+ void png_read_data(png_structp, png_bytep, png_size_t);
+ enum { PNG_BYTES_TO_CHECK = 8, MACBIN_SIZE = 128 }; /* ^ in pngrio.c */
+ png_byte buf[MACBIN_SIZE];
+ png_bytep sig;
+
+ png_read_data(png_ptr, buf, PNG_BYTES_TO_CHECK);
+ if (png_sig_cmp(buf, 0, PNG_BYTES_TO_CHECK) == 0)
+ return PNG_BYTES_TO_CHECK;
+
+ png_read_data(png_ptr, buf, MACBIN_SIZE);
+ sig = buf + MACBIN_SIZE - PNG_BYTES_TO_CHECK;
+ if (png_sig_cmp(sig, 0, PNG_BYTES_TO_CHECK) == 0)
+ return PNG_BYTES_TO_CHECK;
+
+ xxprintf(err_not_a_png, (char *)png_get_error_ptr(png_ptr));
+ longjmp(png_jmpbuf(png_ptr), 1);
+
+#endif
+ return 0; /* to quiet compiler warnings */
+}
+
+
+/*
+** 4F` -> 16F`ւ̕ϊ
+*/
+static void to4bpp(png_structp png_ptr, png_row_infop row_info, png_bytep data)
+{
+ static const png_byte pix[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13,
+ 0x20, 0x21, 0x22, 0x23, 0x30, 0x31, 0x32, 0x33,
+ };
+ png_uint_32 rowb;
+ png_bytep p, q;
+ png_byte c;
+
+ rowb = (row_info->width + 1) / 2;
+ q = data + rowb;
+ p = data + rowb / 2;
+
+ if (rowb % 2 == 1) {
+ c = *p;
+ *(--q) = pix[c >> 4];
+ }
+ while (p > data) {
+ c = *(--p);
+ *(--q) = pix[c & 0x0F];
+ *(--q) = pix[c >> 4];
+ }
+ row_info->bit_depth = 4;
+ row_info->pixel_depth = 4;
+ row_info->rowbytes = rowb;
+}
+
+
+/* -----------------------------------------------------------------------
+** BMP t@C̏
+*/
+
+/*
+** .bmp t@C̏
+*/
+static BOOL write_bmp(char *fn, IMAGE *img)
+{
+ BYTE bfh[FILEHED_SIZE + BMPV4HED_SIZE];
+ BYTE *const bih = bfh + FILEHED_SIZE;
+ BYTE rgbq[RGBQUAD_SIZE];
+ BOOL alpha_bitfield;
+ DWORD bihsize, offbits, filesize;
+ PALETTE *pal;
+ const char *errmsg;
+ FILE *fp;
+ UINT i;
+
+ if (fn == NULL) {
+ fn = " (stdout)";
+ fp = binary_stdio(fileno(stdout));
+ } else {
+ fp = fopen(fn, "wb");
+ }
+ if (fp == NULL) ERROR_ABORT(err_wopenfail);
+
+ set_status("Writing %.80s", basname(fn));
+
+ /* ------------------------------------------------------ */
+
+ alpha_bitfield = (img->alpha && alpha_format == P2B_ALPHABMP_BITFIELD);
+ bihsize = (alpha_bitfield) ? BMPV4HED_SIZE : INFOHED_SIZE;
+ offbits = FILEHED_SIZE + bihsize + RGBQUAD_SIZE * img->palnum;
+ filesize = offbits + img->imgbytes;
+
+ memset(bfh, 0, sizeof(bfh));
+
+ mputwl( bfh + BFH_WTYPE , BMP_SIGNATURE);
+ mputdwl(bfh + BFH_DSIZE , filesize);
+ mputdwl(bfh + BFH_DOFFBITS, offbits);
+
+ mputdwl(bih + BIH_DSIZE , bihsize);
+ mputdwl(bih + BIH_LWIDTH , (DWORD)img->width);
+ mputdwl(bih + BIH_LHEIGHT , (DWORD)img->height);
+ mputwl( bih + BIH_WPLANES , 1);
+ mputwl( bih + BIH_WBITCOUNT , img->pixdepth);
+ mputdwl(bih + BIH_DSIZEIMAGE, img->imgbytes);
+
+ if (alpha_bitfield) {
+ mputdwl(bih + BIH_DCOMPRESSION, BI_BITFIELDS);
+ mputdwl(bih + B4H_DALPHAMASK, 0xFF000000);
+ mputdwl(bih + B4H_DREDMASK , 0x00FF0000);
+ mputdwl(bih + B4H_DGREENMASK, 0x0000FF00);
+ mputdwl(bih + B4H_DBLUEMASK , 0x000000FF);
+ }
+
+ if (fwrite(bfh, (FILEHED_SIZE + bihsize), 1, fp) != 1)
+ ERROR_ABORT(err_writeerr);
+
+ /* ------------------------------------------------------ */
+
+ memset(rgbq, 0, sizeof(rgbq));
+
+ for (pal = img->palette, i = img->palnum; i > 0; i--, pal++) {
+ rgbq[RGBQ_RED] = pal->red;
+ rgbq[RGBQ_GREEN] = pal->green;
+ rgbq[RGBQ_BLUE] = pal->blue;
+ if (fwrite(rgbq, RGBQUAD_SIZE, 1, fp) != 1)
+ ERROR_ABORT(err_writeerr);
+ }
+
+ /* ------------------------------------------------------ */
+
+ if ((errmsg = write_rgb_bits(img, fp)) != NULL) ERROR_ABORT(errmsg);
+
+ /* ------------------------------------------------------ */
+
+ set_status("OK %.80s", basname(fn));
+ feed_line();
+
+ fflush(fp);
+ if (fp != stdout) fclose(fp);
+ imgbuf_free(img);
+
+ return TRUE;
+
+error_abort: /* error */
+ xxprintf(errmsg, fn);
+ if (fp != stdout && fp != NULL) fclose(fp);
+ imgbuf_free(img);
+
+ return FALSE;
+}
+
+
+/*
+** BI_RGB (k) `̉摜f[^
+*/
+static const char *write_rgb_bits(IMAGE *img, FILE *fp)
+{
+#if 1
+ DWORD wr = 16*1024*1024;
+ DWORD num = img->imgbytes;
+ BYTE *ptr = img->bmpbits;
+
+ while (num > 0) {
+ if (wr > num) wr = num;
+
+ if (fwrite(ptr, wr, 1, fp) != 1)
+ return err_writeerr;
+
+ ptr += wr; num -= wr;
+ }
+#else
+ if (fwrite(img->bmpbits, img->imgbytes, 1, fp) != 1)
+ return err_writeerr;
+#endif
+ return NULL;
+}
+
+
+/*
+** little-endien ` 4oCg
+*/
+static void mputdwl(void *ptr, unsigned long val)
+{
+ unsigned char *p = ptr;
+
+ p[0] = (unsigned char)(val & 0xFF);
+ p[1] = (unsigned char)(val >> 8 & 0xFF);
+ p[2] = (unsigned char)(val >> 16 & 0xFF);
+ p[3] = (unsigned char)(val >> 24 & 0xFF);
+}
+
+
+/*
+** little-endien ` 2oCg
+*/
+static void mputwl(void *ptr, unsigned int val)
+{
+ unsigned char *p = ptr;
+
+ p[0] = (unsigned char)(val & 0xFF);
+ p[1] = (unsigned char)(val >> 8 & 0xFF);
+}
+
+
+/* -----------------------------------------------------------------------
+** wvXN[̕\
+*/
+
+/*
+** gp@\
+*/
+static void usage_exit(char *argv0, int status)
+{
+ static const char str_usage[] =
+#ifdef JAPANESE /* -------------------------- */
+#ifdef SJIS_ESCAPE
+#define SJ_ESC(esc,raw) esc
+#else
+#define SJ_ESC(esc,raw) raw
+#endif
+ "png2bmp, PNG -> BMP Ro[^ - version " PNG2BMP_VERSION "\n"
+ " " PNG2BMP_COPYRIGHT "\n"
+ " Compiled with libpng " PNG_LIBPNG_VER_STRING " and zlib " ZLIB_VERSION ".\n"
+ "\n"
+ "g : %s [-XCb`] ̓t@C ...\n"
+ " : ... | %s [-XCb`] | ...\n"
+ "\n"
+ "̓t@Cɂ̓ChJ[hg܂ (* ?)\n"
+ "o̓t@C͓̓t@C̊gq .bmp ɕςOɂȂ܂\n"
+ "\n"
+ "XCb`IvV (ł) :\n"
+ " -A At@`lۑ (32bit ARGB BMP `)\n"
+ " -B At@`lۑ (32bit Bitfield BMP `)\n"
+ " -R FAt@`lɕϊ (-A -B ƋɎg)\n"
+ " -O name o̓t@Cw肷\n"
+ " -D dir t@Co͂fBNgw肷\n"
+ " -E ϊꍇɂ͓̓t@C폜\n"
+ " -T ̓t@C̃^CX^vo̓t@Cɐݒ肷\n"
+ " -Q , ؂" SJ_ESC("\\","\") "Ȃ\n"
+ " -L ̃G[Ot@C(%s)ɋL^\n"
+ " -X Ẃ^Wo͂ϊ𖳌ɂ\n";
+#else /* ----------------------------------- */
+ "png2bmp, a PNG-to-BMP converter - version " PNG2BMP_VERSION "\n"
+ " " PNG2BMP_COPYRIGHT "\n"
+ " Compiled with libpng " PNG_LIBPNG_VER_STRING " and zlib " ZLIB_VERSION ".\n"
+ "\n"
+ "Usage: %s [-switches] inputfile(s) ...\n"
+ " or: ... | %s [-switches] | ...\n"
+ "\n"
+ "List of input files may use wildcards (* and ?)\n"
+ "Output filename is same as input filename, but extension .bmp\n"
+ "\n"
+ "Switches (case-insensitive) :\n"
+ " -A Preserve alpha channel (save in 32bit ARGB BMP format)\n"
+ " -B Preserve alpha channel (save in 32bit Bitfield BMP format)\n"
+ " -R Convert transparent color to alpha channel (use with -A or -B)\n"
+ " -O name Specify name for output file\n"
+ " -D dir Output files into dir\n"
+ " -E Delete input files after successful conversion\n"
+ " -T Set the timestamp of input file on output file\n"
+ " -Q Quiet mode\n"
+ " -L Log errors to %s file\n"
+ " -X Disable conversion through standard input/output\n";
+#endif /* ----------------------------------- */
+#if defined(WIN32) || defined(MSDOS)
+ char exename[FILENAME_MAX];
+ char *p;
+
+ argv0 = strcpy(exename, basname(argv0));
+ for (p = argv0; *p != '\0'; p++) *p = tolower(*p);
+#endif
+ fprintf(stdout, str_usage, argv0, argv0, errlogfile);
+
+ exit(status);
+}
+
diff --git a/crawl-ref/source/rltiles/bmp2png/png2bmp.dsp b/crawl-ref/source/rltiles/bmp2png/png2bmp.dsp
new file mode 100644
index 0000000000..9012f86579
--- /dev/null
+++ b/crawl-ref/source/rltiles/bmp2png/png2bmp.dsp
@@ -0,0 +1,111 @@
+# Microsoft Developer Studio Project File - Name="png2bmp" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** ҏWȂł **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=png2bmp - Win32 Debug
+!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB
+!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ
+!MESSAGE
+!MESSAGE NMAKE /f "png2bmp.mak".
+!MESSAGE
+!MESSAGE NMAKE ̎sɍ\wł܂
+!MESSAGE ײݏϸۂ̐ݒ`܂B:
+!MESSAGE
+!MESSAGE NMAKE /f "png2bmp.mak" CFG="png2bmp - Win32 Debug"
+!MESSAGE
+!MESSAGE I”\ Ӱ:
+!MESSAGE
+!MESSAGE "png2bmp - Win32 Release" ("Win32 (x86) Console Application" p)
+!MESSAGE "png2bmp - Win32 Debug" ("Win32 (x86) Console Application" p)
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "png2bmp - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "PNG_USER_CONFIG" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\libpng" /I "..\zlib" /D "NDEBUG" /D "PNG_USER_CONFIG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GF /c
+# ADD BASE RSC /l 0x411 /d "NDEBUG"
+# ADD RSC /l 0x411 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 setargv.obj libpng.lib zlib.lib /nologo /subsystem:console /map /machine:I386 /libpath:"..\libpng\release" /libpath:"..\zlib\release" /opt:nowin98
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "png2bmp - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "PNG_USER_CONFIG" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\libpng" /I "..\zlib" /D "_DEBUG" /D "PNG_USER_CONFIG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /Fr /YX /FD /GZ /c
+# ADD BASE RSC /l 0x411 /d "_DEBUG"
+# ADD RSC /l 0x411 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 setargv.obj libpng.lib zlib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\libpng\debug" /libpath:"..\zlib\debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "png2bmp - Win32 Release"
+# Name "png2bmp - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\common.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\png2bmp.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\bmphed.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\common.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/crawl-ref/source/rltiles/dc-2d.txt b/crawl-ref/source/rltiles/dc-2d.txt
new file mode 100644
index 0000000000..3b0e06c2e7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-2d.txt
@@ -0,0 +1,32 @@
+%tiledef tiledef.h
+%width 30
+%back none
+#%htmlfile tile.htm
+#%tilelist tile.txt
+#%htmlbody
+%name tile
+
+## Dungeon features
+%include dc-dngn.txt
+
+## Set black rim
+## Items
+%include dc-item.txt
+## Monsters
+%include dc-mon.txt
+## Clear black rim
+%rim 0
+
+## Corpse
+%back dc/blood
+%corpse 1
+%include dc-co.txt
+%back none
+%corpse 0
+
+####PLAYER
+####include dc-jobs.txt
+
+#### Effects, etc.
+%include dc-misc.txt
+
diff --git a/crawl-ref/source/rltiles/dc-co.txt b/crawl-ref/source/rltiles/dc-co.txt
new file mode 100644
index 0000000000..ab1fbe20ff
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-co.txt
@@ -0,0 +1,256 @@
+### dungeon crawl monster corpses
+
+%sdir dc-mon
+
+%corpse 1
+%subst large_mimic
+%back dc-misc/blood_red
+glowing_shapeshifter CORPSE_GLOWING_SHAPESHIFTER /* @ */
+hell_knight CORPSE_HELL_KNIGHT /* @ */
+human CORPSE_HUMAN /* @ */
+necromancer CORPSE_NECROMANCER /* @ */
+shapeshifter CORPSE_SHAPESHIFTER /* @ */
+wizard CORPSE_WIZARD /* @ */
+
+%back dc-misc/blood_green
+boring_beetle CORPSE_BORING_BEETLE /* B */
+boulder_beetle CORPSE_BOULDER_BEETLE /* B */
+giant_beetle CORPSE_GIANT_BEETLE /* B */
+
+%back dc-misc/blood_red
+cyclops CORPSE_CYCLOPS /* C */
+fire_giant CORPSE_FIRE_GIANT /* C */
+frost_giant CORPSE_FROST_GIANT /* C */
+hill_giant CORPSE_HILL_GIANT /* C */
+stone_giant CORPSE_STONE_GIANT /* C */
+titan CORPSE_TITAN /* C */
+
+dragon CORPSE_DRAGON /* D */
+golden_dragon CORPSE_GOLDEN_DRAGON /* D */
+hydra5 CORPSE_HYDRA /* D */
+ice_dragon CORPSE_ICE_DRAGON /* D */
+shadow_dragon CORPSE_SHADOW_DRAGON /* D */
+storm_dragon CORPSE_STORM_DRAGON /* D */
+swamp_dragon CORPSE_SWAMP_DRAGON /* D */
+wyvern CORPSE_WYVERN /* D */
+
+blink_frog CORPSE_BLINK_FROG /* F */
+giant_brown_frog CORPSE_GIANT_BROWN_FROG /* F */
+giant_frog CORPSE_GIANT_FROG /* F */
+spiny_frog CORPSE_SPINY_FROG /* F */
+
+eye_of_draining CORPSE_EYE_OF_DRAINING /* G */
+giant_eyeball CORPSE_GIANT_EYEBALL /* G */
+giant_orange_brain CORPSE_GIANT_ORANGE_BRAIN /* G */
+great_orb_of_eyes CORPSE_GREAT_ORB_OF_EYES /* G */
+
+griffon CORPSE_GRIFFON /* H */
+hippogriff CORPSE_HIPPOGRIFF /* H */
+
+giant_amoeba CORPSE_GIANT_AMOEBA /* J */
+
+%back dc-misc/blood_green
+kobold CORPSE_KOBOLD /* K */
+
+%back dc-misc/blood_red
+greater_naga0 CORPSE_GREATER_NAGA /* N */
+guardian_naga CORPSE_GUARDIAN_NAGA /* N */
+naga0 CORPSE_NAGA /* N */
+###naga_mage CORPSE_NAGA_MAGE /* N */
+###naga_warrior CORPSE_NAGA_WARRIOR /* N */
+
+ogre CORPSE_OGRE /* O */
+two_headed_ogre CORPSE_TWO_HEADED_OGRE /* O */
+
+%back dc-misc/blood_green
+queen_ant CORPSE_QUEEN_ANT /* Q */
+queen_bee CORPSE_QUEEN_BEE /* Q */
+
+%back dc-misc/blood_red
+black_snake CORPSE_BLACK_SNAKE /* S */
+brown_snake CORPSE_BROWN_SNAKE /* S */
+grey_snake CORPSE_GREY_SNAKE /* S */
+small_snake CORPSE_SMALL_SNAKE /* S */
+snake CORPSE_SNAKE /* S */
+yellow_snake CORPSE_YELLOW_SNAKE /* S */
+
+deep_troll CORPSE_DEEP_TROLL /* T */
+iron_troll CORPSE_IRON_TROLL /* T */
+rock_troll CORPSE_ROCK_TROLL /* T */
+troll CORPSE_TROLL /* T */
+
+bear CORPSE_BEAR /* U */
+black_bear CORPSE_BLACK_BEAR /* U */
+grizzly_bear CORPSE_GRIZZLY_BEAR /* U */
+polar_bear CORPSE_POLAR_BEAR /* U */
+
+death_yak CORPSE_DEATH_YAK /* Y */
+sheep CORPSE_SHEEP /* Y */
+yak CORPSE_YAK /* Y */
+
+%back dc-misc/blood_green
+giant_ant CORPSE_GIANT_ANT /* a */
+giant_cockroach CORPSE_GIANT_COCKROACH /* a */
+soldier_ant CORPSE_SOLDIER_ANT /* a */
+
+butterfly CORPSE_BUTTERFLY /* b */
+%back dc-misc/blood_red
+giant_bat CORPSE_GIANT_BAT /* b */
+
+centaur CORPSE_CENTAUR /* c */
+###centaur_warrior CORPSE_CENTAUR_WARRIOR /* c */
+yaktaur CORPSE_YAKTAUR /* c */
+###yaktaur_captain CORPSE_YAKTAUR_CAPTAIN /* c */
+
+firedrake CORPSE_FIREDRAKE /* d */
+lindwurm CORPSE_LINDWURM /* d */
+mottled_dragon CORPSE_MOTTLED_DRAGON /* d */
+steam_dragon CORPSE_STEAM_DRAGON /* d */
+swamp_drake CORPSE_SWAMP_DRAKE /* d */
+death_drake CORPSE_DEATH_DRAKE /* d */
+
+##deep_elf_annihilator CORPSE_DEEP_ELF_ANNIHILATOR /* e */
+##deep_elf_conjurer CORPSE_DEEP_ELF_CONJURER /* e */
+##deep_elf_death_mage CORPSE_DEEP_ELF_DEATH_MAGE /* e */
+##deep_elf_demonologist CORPSE_DEEP_ELF_DEMONOLOGIST /* e */
+##deep_elf_fighter CORPSE_DEEP_ELF_FIGHTER /* e */
+##deep_elf_high_priest CORPSE_DEEP_ELF_HIGH_PRIEST /* e */
+##deep_elf_knight CORPSE_DEEP_ELF_KNIGHT /* e */
+##deep_elf_mage CORPSE_DEEP_ELF_MAGE /* e */
+##deep_elf_priest CORPSE_DEEP_ELF_PRIEST /* e */
+##deep_elf_soldier CORPSE_DEEP_ELF_SOLDIER /* e */
+##deep_elf_sorcerer CORPSE_DEEP_ELF_SORCERER /* e */
+##deep_elf_summoner CORPSE_DEEP_ELF_SUMMONER /* e */
+elf CORPSE_ELF /* e */
+
+gnoll0 CORPSE_GNOLL /* g */
+goblin0 CORPSE_GOBLIN /* g */
+hobgoblin0 CORPSE_HOBGOBLIN /* g */
+
+hog CORPSE_HOG /* h */
+hound CORPSE_HOUND /* h */
+warg CORPSE_WARG /* h */
+war_dog CORPSE_WAR_DOG /* h */
+wolf CORPSE_WOLF /* h */
+
+jackal CORPSE_JACKAL /* j */
+
+%back dc-misc/blood_green
+bumblebee CORPSE_BUMBLEBEE /* k */
+killer_bee CORPSE_KILLER_BEE /* k */
+
+%back dc-misc/blood_red
+giant_gecko CORPSE_GIANT_GECKO /* l */
+giant_iguana CORPSE_GIANT_IGUANA /* l */
+giant_lizard CORPSE_GIANT_LIZARD /* l */
+giant_newt CORPSE_GIANT_NEWT /* l */
+gila_monster CORPSE_GILA_MONSTER /* l */
+komodo_dragon CORPSE_KOMODO_DRAGON /* l */
+
+%back dc-misc/blood_green
+elephant_slug CORPSE_ELEPHANT_SLUG /* m */
+giant_slug CORPSE_GIANT_SLUG /* m */
+giant_snail CORPSE_GIANT_SNAIL /* m */
+manticore CORPSE_MANTICORE /* m */
+%back dc-misc/blood_red
+minotaur CORPSE_MINOTAUR /* m */
+
+%back dc-misc/blood_green
+ghoul CORPSE_GHOUL /* n */
+necrophage CORPSE_NECROPHAGE /* n */
+
+%back dc-misc/blood_red
+orc0 CORPSE_ORC /* o */
+###orc_high_priest CORPSE_ORC_HIGH_PRIEST /* o */
+###orc_priest CORPSE_ORC_PRIEST /* o */
+###orc_sorcerer CORPSE_ORC_SORCERER /* o */
+###orc_warlord CORPSE_ORC_WARLORD /* o */
+
+green_rat CORPSE_GREEN_RAT /* r */
+grey_rat CORPSE_GREY_RAT /* r */
+orange_rat CORPSE_ORANGE_RAT /* r */
+quokka CORPSE_QUOKKA /* r */
+rat CORPSE_RAT /* r */
+
+%back dc-misc/blood_green
+giant_centipede CORPSE_GIANT_CENTIPEDE /* s */
+giant_mite CORPSE_GIANT_MITE /* s */
+redback CORPSE_REDBACK /* s */
+scorpion CORPSE_SCORPION /* s */
+wolf_spider CORPSE_WOLF_SPIDER /* s */
+
+ugly_thing CORPSE_UGLY_THING /* u */
+very_ugly_thing CORPSE_VERY_UGLY_THING /* u */
+
+killer_bee_larva CORPSE_ANT_LARVA /* w */
+brain_worm CORPSE_BRAIN_WORM /* w */
+killer_bee_larva CORPSE_KILLER_BEE_LARVA /* w */
+spiny_worm CORPSE_SPINY_WORM /* w */
+worm CORPSE_WORM /* w */
+
+giant_blowfly CORPSE_GIANT_BLOWFLY /* y */
+giant_mosquito CORPSE_GIANT_MOSQUITO /* y */
+red_wasp CORPSE_RED_WASP /* y */
+yellow_wasp CORPSE_YELLOW_WASP /* y */
+
+%sdir player
+%start
+%compose drcwing/drcwing_black
+%compose base/draconian_black_m
+%compose drchead/drchead_black
+%finish CORPSE_DRACONIAN_BLACK
+
+%start
+%compose drcwing/drcwing_brown
+%compose base/draconian_f
+%compose drchead/drchead_brown
+%finish CORPSE_DRACONIAN_BROWN
+
+%start
+%compose drcwing/drcwing_green
+%compose base/draconian_green_m
+%compose drchead/drchead_green
+%finish CORPSE_DRACONIAN_GREEN
+
+%start
+%compose drcwing/drcwing_grey
+%compose base/draconian_gray_f
+%compose drchead/drchead_grey
+%finish CORPSE_DRACONIAN_GREY
+
+%start
+%compose drcwing/drcwing_mottled
+%compose base/draconian_mottled_m
+%compose drchead/drchead_mottled
+%finish CORPSE_DRACONIAN_MOTTLED
+
+%start
+%compose drcwing/drcwing_pale
+%compose base/draconian_pale_f
+%compose drchead/drchead_pale
+%finish CORPSE_DRACONIAN_PALE
+
+%start
+%compose drcwing/drcwing_purple
+%compose base/draconian_purple_m
+%compose drchead/drchead_purple
+%finish CORPSE_DRACONIAN_PURPLE
+
+%start
+%compose drcwing/drcwing_red
+%compose base/draconian_red_f
+%compose drchead/drchead_red
+%finish CORPSE_DRACONIAN_RED
+
+%start
+%compose drcwing/drcwing_white
+%compose base/draconian_white_m
+%compose drchead/drchead_white
+%finish CORPSE_DRACONIAN_WHITE
+
+%start
+%compose drcwing/drcwing_yellow
+%compose base/draconian_gold_f
+%compose drchead/drchead_yellow
+%finish CORPSE_DRACONIAN_YELLOW
+
diff --git a/crawl-ref/source/rltiles/dc-dngn.txt b/crawl-ref/source/rltiles/dc-dngn.txt
new file mode 100644
index 0000000000..de5529bc5e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn.txt
@@ -0,0 +1,161 @@
+%sdir dc-dngn
+
+blank BLANK
+dngn_unseen DNGN_UNSEEN
+
+floor/pebble_gray0 DNGN_FLOOR
+floor/pebble_gray1
+floor/pebble_gray2
+floor/pebble_gray3
+floor/pebble_gray3
+floor/pebble_gray3
+floor/pebble_gray3
+floor/pebble_gray3 DNGN_FLOOR_SPECIAL
+wall/brick_brown0 DNGN_ROCK_WALL_OFS
+wall/brick_brown1
+wall/brick_brown2
+wall/brick_brown3
+wall/brick_brown3
+wall/brick_brown3
+wall/brick_brown3
+wall/brick_brown3
+wall/brick_brown3
+wall/brick_brown3
+wall/brick_brown3
+wall/brick_brown3
+
+floor/lava0 DNGN_LAVA
+floor/lava1
+floor/lava2
+floor/lava3
+dngn_deep_water DNGN_DEEP_WATER
+dngn_deep_water
+dngn_deep_water
+dngn_deep_water
+dngn_shallow_water DNGN_SHALLOW_WATER
+dngn_shallow_water
+dngn_shallow_water
+dngn_shallow_water
+
+wall/stone2_gray0 DNGN_STONE_WALL
+wall/stone2_gray1
+wall/stone2_gray2
+wall/stone2_gray3
+dngn_metal_wall DNGN_METAL_WALL
+dngn_green_crystal_wall DNGN_GREEN_CRYSTAL_WALL
+dngn_wax_wall DNGN_WAX_WALL
+
+#dngn_rock_wall_00 DNGN_ROCK_WALL_OFS
+#dngn_rock_wall_01 IGNORE_COMMENT
+#dngn_rock_wall_02 IGNORE_COMMENT
+#dngn_rock_wall_03 IGNORE_COMMENT
+#dngn_rock_wall_04 IGNORE_COMMENT
+#dngn_rock_wall_05 IGNORE_COMMENT
+#dngn_rock_wall_06 IGNORE_COMMENT
+#dngn_rock_wall_07 IGNORE_COMMENT
+#dngn_rock_wall_08 IGNORE_COMMENT
+#dngn_rock_wall_09 IGNORE_COMMENT
+#dngn_rock_wall_10 IGNORE_COMMENT
+#dngn_rock_wall_11 IGNORE_COMMENT
+#dngn_rock_wall_12 IGNORE_COMMENT
+#dngn_rock_wall_13 IGNORE_COMMENT
+#dngn_rock_wall_14 IGNORE_COMMENT
+#dngn_rock_wall_15 IGNORE_COMMENT
+#dngn_stone_wall DNGN_STONE_WALL
+
+dngn_closed_door DNGN_CLOSED_DOOR
+dngn_open_door DNGN_OPEN_DOOR
+###dc/wal8 DNGN_SECRET_DOOR
+dngn_orcish_idol DNGN_ORCISH_IDOL
+dngn_silver_statue DNGN_SILVER_STATUE
+dngn_granite_statue DNGN_GRANITE_STATUE
+dngn_orange_crystal_statue DNGN_ORANGE_CRYSTAL_STATUE
+dngn_ice_statue DNGN_ICE_STATUE
+
+###dc/wal1 DNGN_PERMAROCK_WALL
+###dc/wal1 DNGN_LAST_SOLID_TILE
+
+dngn_enter_hell DNGN_ENTER_HELL
+dngn_branch_stairs DNGN_BRANCH_STAIRS
+dngn_trap_mechanical DNGN_TRAP_MECHANICAL
+dngn_trap_magical DNGN_TRAP_MAGICAL
+dngn_trap_iii DNGN_TRAP_III
+###847 DNGN_UNDISCOVERED_TRAP
+stone_stairs_down DNGN_STONE_STAIRS_DOWN
+#nh-dngn/staircase_down DNGN_STONE_STAIRS_DOWN_II
+#nh-dngn/staircase_down DNGN_STONE_STAIRS_DOWN_III
+rock_stairs_down DNGN_ROCK_STAIRS_DOWN
+stone_stairs_up DNGN_STONE_STAIRS_UP
+#nh-dngn/staircase_up DNGN_STONE_STAIRS_UP_II
+#nh-dngn/staircase_up DNGN_STONE_STAIRS_UP_III
+rock_stairs_up DNGN_ROCK_STAIRS_UP
+
+dngn_enter_shop DNGN_ENTER_SHOP
+dngn_enter_labyrinth DNGN_ENTER_LABYRINTH
+dngn_enter_dis DNGN_ENTER_DIS
+dngn_enter_gehenna DNGN_ENTER_GEHENNA
+dngn_enter_cocytus DNGN_ENTER_COCYTUS
+dngn_enter_tartarus DNGN_ENTER_TARTARUS
+
+dngn_enter_abyss DNGN_ENTER_ABYSS
+dngn_exit DNGN_EXIT_ABYSS
+
+dngn_stone_arch DNGN_STONE_ARCH
+dngn_enter_pandemonium DNGN_ENTER_PANDEMONIUM
+dngn_exit DNGN_EXIT_PANDEMONIUM
+dngn_transit_pandemonium DNGN_TRANSIT_PANDEMONIUM
+####846 DNGN_BUILDER_SPECIAL_WALL
+####846 DNGN_BUILDER_SPECIAL_FLOOR
+dngn_enter DNGN_ENTER
+#851 DNGN_ENTER_ORCISH_MINES
+#851 DNGN_ENTER_HIVE
+#851 DNGN_ENTER_LAIR
+#851 DNGN_ENTER_SLIME_PITS
+#851 DNGN_ENTER_VAULTS
+#851 DNGN_ENTER_CRYPT
+#851 DNGN_ENTER_HALL_OF_BLADES
+#851 DNGN_ENTER_ZOT
+#851 DNGN_ENTER_TEMPLE
+#851 DNGN_ENTER_SNAKE_PIT
+#851 DNGN_ENTER_ELVEN_HALLS
+#851 DNGN_ENTER_TOMB
+#851 DNGN_ENTER_SWAMP
+dngn_return DNGN_RETURN
+#850 DNGN_RETURN_FROM_ORCISH_MINES
+#850 DNGN_RETURN_FROM_HIVE
+#850 DNGN_RETURN_FROM_LAIR
+#850 DNGN_RETURN_FROM_SLIME_PITS
+#850 DNGN_RETURN_FROM_VAULTS
+#850 DNGN_RETURN_FROM_CRYPT
+#850 DNGN_RETURN_FROM_HALL_OF_BLADES
+#850 DNGN_RETURN_FROM_ZOT
+#850 DNGN_RETURN_FROM_TEMPLE
+#850 DNGN_RETURN_FROM_SNAKE_PIT
+#850 DNGN_RETURN_FROM_ELVEN_HALLS
+#850 DNGN_RETURN_FROM_TOMB
+#850 DNGN_RETURN_FROM_SWAMP
+dngn_altar_zin DNGN_ALTAR_ZIN
+dngn_altar_shining_one DNGN_ALTAR_SHINING_ONE
+dngn_altar_kikubaaqudgha DNGN_ALTAR_KIKUBAAQUDGHA
+dngn_altar_yredelemnul DNGN_ALTAR_YREDELEMNUL
+dngn_altar_xom DNGN_ALTAR_XOM
+dngn_altar_vehumet DNGN_ALTAR_VEHUMET
+dngn_altar_okawaru DNGN_ALTAR_OKAWARU
+dngn_altar_makhleb DNGN_ALTAR_MAKHLEB
+dngn_altar_sif_muna DNGN_ALTAR_SIF_MUNA
+dngn_altar_trog DNGN_ALTAR_TROG
+dngn_altar_nemelex_xobeh DNGN_ALTAR_NEMELEX_XOBEH
+dngn_altar_elyvilon DNGN_ALTAR_ELYVILON
+dngn_altar_lugonu DNGN_ALTAR_LUGONU
+dngn_altar_beogh DNGN_ALTAR_BEOGH
+dngn_blue_fountain DNGN_BLUE_FOUNTAIN
+dngn_dry_fountain DNGN_DRY_FOUNTAIN
+dngn_sparkling_fountain DNGN_SPARKLING_FOUNTAIN
+#858 DNGN_DRY_FOUNTAIN_II
+#858 DNGN_DRY_FOUNTAIN_III
+#858 DNGN_DRY_FOUNTAIN_IV
+#858 DNGN_DRY_FOUNTAIN_V
+#858 DNGN_DRY_FOUNTAIN_VI
+#858 DNGN_DRY_FOUNTAIN_VII
+#858 DNGN_DRY_FOUNTAIN_VIII
+#858 DNGN_PERMADRY_FOUNTAIN
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar.bmp
new file mode 100644
index 0000000000..983ca5d2db
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_beogh.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_beogh.bmp
new file mode 100644
index 0000000000..75a0a83030
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_beogh.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_elyvilon.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_elyvilon.bmp
new file mode 100644
index 0000000000..9b19583893
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_elyvilon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_kikubaaqudgha.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_kikubaaqudgha.bmp
new file mode 100644
index 0000000000..438202cc1e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_kikubaaqudgha.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_lugonu.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_lugonu.bmp
new file mode 100644
index 0000000000..a82fb5be1b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_lugonu.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_makhleb.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_makhleb.bmp
new file mode 100644
index 0000000000..083cd5d396
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_makhleb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_nemelex_xobeh.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_nemelex_xobeh.bmp
new file mode 100644
index 0000000000..2508553b03
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_nemelex_xobeh.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_okawaru.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_okawaru.bmp
new file mode 100644
index 0000000000..c94b90a168
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_okawaru.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_shining_one.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_shining_one.bmp
new file mode 100644
index 0000000000..b6de1141f1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_shining_one.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_sif_muna.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_sif_muna.bmp
new file mode 100644
index 0000000000..0803554fa2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_sif_muna.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_trog.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_trog.bmp
new file mode 100644
index 0000000000..b0f04c2a1f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_trog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_vehumet.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_vehumet.bmp
new file mode 100644
index 0000000000..e8fa3a686a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_vehumet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_xom.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_xom.bmp
new file mode 100644
index 0000000000..307fef9d2d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_xom.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_yredelemnul.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_yredelemnul.bmp
new file mode 100644
index 0000000000..179ed71b66
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_yredelemnul.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_altar_zin.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_zin.bmp
new file mode 100644
index 0000000000..016ab9ef00
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_altar_zin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_blue_fountain.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_blue_fountain.bmp
new file mode 100644
index 0000000000..427b959f82
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_blue_fountain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_branch_stairs.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_branch_stairs.bmp
new file mode 100644
index 0000000000..31b4750c25
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_branch_stairs.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_closed_door.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_closed_door.bmp
new file mode 100644
index 0000000000..84e41753c0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_closed_door.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_deep_water.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_deep_water.bmp
new file mode 100644
index 0000000000..10cbb34f10
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_deep_water.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_dry_fountain.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_dry_fountain.bmp
new file mode 100644
index 0000000000..92e86dc8d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_dry_fountain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter.bmp
new file mode 100644
index 0000000000..857b3e77f0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_abyss.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_abyss.bmp
new file mode 100644
index 0000000000..a08889585e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_abyss.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_cocytus.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_cocytus.bmp
new file mode 100644
index 0000000000..903148c791
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_cocytus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_dis.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_dis.bmp
new file mode 100644
index 0000000000..d6ad591017
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_dis.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_gehenna.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_gehenna.bmp
new file mode 100644
index 0000000000..48217f61d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_gehenna.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_hell.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_hell.bmp
new file mode 100644
index 0000000000..d452436475
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_hell.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_labyrinth.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_labyrinth.bmp
new file mode 100644
index 0000000000..79053cd4bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_labyrinth.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_pandemonium.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_pandemonium.bmp
new file mode 100644
index 0000000000..d6e3fa0e45
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_pandemonium.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_shop.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_shop.bmp
new file mode 100644
index 0000000000..13d8f7110a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_shop.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_enter_tartarus.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_tartarus.bmp
new file mode 100644
index 0000000000..4a4313dd0c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_enter_tartarus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_entrance.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_entrance.bmp
new file mode 100644
index 0000000000..03e3ad8bbc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_entrance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_exit.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_exit.bmp
new file mode 100644
index 0000000000..2f7bba30a5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_exit.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_floor.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_floor.bmp
new file mode 100644
index 0000000000..7e94f91adc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_floor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_granite_statue.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_granite_statue.bmp
new file mode 100644
index 0000000000..e0deaec667
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_granite_statue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_green_crystal_wall.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_green_crystal_wall.bmp
new file mode 100644
index 0000000000..bebde58cb7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_green_crystal_wall.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_ice_statue.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_ice_statue.bmp
new file mode 100644
index 0000000000..9d66adefef
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_ice_statue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_lava.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_lava.bmp
new file mode 100644
index 0000000000..ad0dd0a727
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_lava.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_metal_wall.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_metal_wall.bmp
new file mode 100644
index 0000000000..15d05e369f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_metal_wall.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_open_door.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_open_door.bmp
new file mode 100644
index 0000000000..8a06937a0d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_open_door.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_orange_crystal_statue.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_orange_crystal_statue.bmp
new file mode 100644
index 0000000000..769a80c78f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_orange_crystal_statue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_orcish_idol.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_orcish_idol.bmp
new file mode 100644
index 0000000000..2c53d2817d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_orcish_idol.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_return.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_return.bmp
new file mode 100644
index 0000000000..e427840d7d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_return.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_down.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_down.bmp
new file mode 100644
index 0000000000..5a0870e2f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_down.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_up.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_up.bmp
new file mode 100644
index 0000000000..9aa377babb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_stairs_up.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_00.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_00.bmp
new file mode 100644
index 0000000000..e5aa20100d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_00.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_01.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_01.bmp
new file mode 100644
index 0000000000..9e742f11c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_01.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_02.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_02.bmp
new file mode 100644
index 0000000000..3c82c5f1c3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_02.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_03.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_03.bmp
new file mode 100644
index 0000000000..16b7193824
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_03.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_04.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_04.bmp
new file mode 100644
index 0000000000..2b8d3e6f0e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_04.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_05.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_05.bmp
new file mode 100644
index 0000000000..a8199a0259
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_05.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_06.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_06.bmp
new file mode 100644
index 0000000000..6f3ce1d010
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_06.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_07.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_07.bmp
new file mode 100644
index 0000000000..cf3de687df
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_07.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_08.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_08.bmp
new file mode 100644
index 0000000000..a340189f4a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_08.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_09.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_09.bmp
new file mode 100644
index 0000000000..cdd747071c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_09.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_10.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_10.bmp
new file mode 100644
index 0000000000..f0a1951ff5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_10.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_11.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_11.bmp
new file mode 100644
index 0000000000..4283733402
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_11.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_12.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_12.bmp
new file mode 100644
index 0000000000..e7d5949fdd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_12.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_13.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_13.bmp
new file mode 100644
index 0000000000..354647f4c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_13.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_14.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_14.bmp
new file mode 100644
index 0000000000..54f3c7623e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_14.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_15.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_15.bmp
new file mode 100644
index 0000000000..6db4d03f72
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_rock_wall_15.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_shallow_water.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_shallow_water.bmp
new file mode 100644
index 0000000000..1af58b2261
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_shallow_water.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_silver_statue.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_silver_statue.bmp
new file mode 100644
index 0000000000..c18f22a2e8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_silver_statue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_sparkling_fountain.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_sparkling_fountain.bmp
new file mode 100644
index 0000000000..deacf3e3be
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_sparkling_fountain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_stone_arch.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_stone_arch.bmp
new file mode 100644
index 0000000000..bb7dc72268
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_stone_arch.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_stone_wall.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_stone_wall.bmp
new file mode 100644
index 0000000000..c6e24d7561
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_stone_wall.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_transit_pandemonium.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_transit_pandemonium.bmp
new file mode 100644
index 0000000000..4eca365e71
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_transit_pandemonium.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_trap_iii.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_trap_iii.bmp
new file mode 100644
index 0000000000..a32668841a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_trap_iii.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_trap_magical.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_trap_magical.bmp
new file mode 100644
index 0000000000..6afd70f5ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_trap_magical.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_trap_mechanical.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_trap_mechanical.bmp
new file mode 100644
index 0000000000..9cd689daaa
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_trap_mechanical.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_unseen.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_unseen.bmp
new file mode 100644
index 0000000000..187325f234
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_unseen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/dngn_wax_wall.bmp b/crawl-ref/source/rltiles/dc-dngn/dngn_wax_wall.bmp
new file mode 100644
index 0000000000..28ff4511b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/dngn_wax_wall.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/bog_green0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green0.bmp
new file mode 100644
index 0000000000..427e861462
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/bog_green1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green1.bmp
new file mode 100644
index 0000000000..102e48125a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/bog_green2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green2.bmp
new file mode 100644
index 0000000000..781d43e9f9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/bog_green3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green3.bmp
new file mode 100644
index 0000000000..2e8f00eb5f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/bog_green3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray0.bmp
new file mode 100644
index 0000000000..7489a2d5df
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray1.bmp
new file mode 100644
index 0000000000..38ed87f146
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray2.bmp
new file mode 100644
index 0000000000..2b8d92458e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray3.bmp
new file mode 100644
index 0000000000..fe5aa4a8a0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/brick_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt0.bmp
new file mode 100644
index 0000000000..dce2f44c3d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt1.bmp
new file mode 100644
index 0000000000..ace6d52b97
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt2.bmp
new file mode 100644
index 0000000000..12e63af95e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_e.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_e.bmp
new file mode 100644
index 0000000000..633001a6e5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_e.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_full.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_full.bmp
new file mode 100644
index 0000000000..a343d5b3c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_full.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_n.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_n.bmp
new file mode 100644
index 0000000000..b6fdf3a168
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_n.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_ne.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_ne.bmp
new file mode 100644
index 0000000000..bc43af8829
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_ne.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_nw.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_nw.bmp
new file mode 100644
index 0000000000..b2ff3684cd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_nw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_s.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_s.bmp
new file mode 100644
index 0000000000..2b1d106687
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_s.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_se.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_se.bmp
new file mode 100644
index 0000000000..a8e2cced2d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_se.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_sw.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_sw.bmp
new file mode 100644
index 0000000000..1ccda8db3e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_sw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/dirt_w.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_w.bmp
new file mode 100644
index 0000000000..4e8082e8cc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/dirt_w.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass0.bmp
new file mode 100644
index 0000000000..d74160d511
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass1.bmp
new file mode 100644
index 0000000000..71452c4521
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass2.bmp
new file mode 100644
index 0000000000..06c110607a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_e.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_e.bmp
new file mode 100644
index 0000000000..af82fccdec
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_e.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_full.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_full.bmp
new file mode 100644
index 0000000000..e2599d282d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_full.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_n.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_n.bmp
new file mode 100644
index 0000000000..86449a93ba
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_n.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_ne.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_ne.bmp
new file mode 100644
index 0000000000..6d4b91f3a9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_ne.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_nw.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_nw.bmp
new file mode 100644
index 0000000000..ce7c08ee2c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_nw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_s.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_s.bmp
new file mode 100644
index 0000000000..7fb3bc4178
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_s.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_se.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_se.bmp
new file mode 100644
index 0000000000..622b5b4fff
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_se.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_sw.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_sw.bmp
new file mode 100644
index 0000000000..da164c61af
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_sw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/grass_w.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/grass_w.bmp
new file mode 100644
index 0000000000..96d2589da2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/grass_w.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/hive0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/hive0.bmp
new file mode 100644
index 0000000000..2470e64e98
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/hive0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/hive1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/hive1.bmp
new file mode 100644
index 0000000000..52610448e4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/hive1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/hive2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/hive2.bmp
new file mode 100644
index 0000000000..50ca301a16
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/hive2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/hive3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/hive3.bmp
new file mode 100644
index 0000000000..ec00dd5647
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/hive3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/ice0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/ice0.bmp
new file mode 100644
index 0000000000..ee3618f2cd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/ice0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/ice1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/ice1.bmp
new file mode 100644
index 0000000000..6783636b2c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/ice1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/ice2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/ice2.bmp
new file mode 100644
index 0000000000..0055679b0a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/ice2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/ice3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/ice3.bmp
new file mode 100644
index 0000000000..9aa7fd6f6e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/ice3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lair0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lair0.bmp
new file mode 100644
index 0000000000..56f39a8f77
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lair0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lair1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lair1.bmp
new file mode 100644
index 0000000000..680b25a0df
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lair1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lair2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lair2.bmp
new file mode 100644
index 0000000000..c2eec181f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lair2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lair3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lair3.bmp
new file mode 100644
index 0000000000..189a716a6b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lair3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lava0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lava0.bmp
new file mode 100644
index 0000000000..756fcc99e7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lava0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lava1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lava1.bmp
new file mode 100644
index 0000000000..09554107d5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lava1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lava2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lava2.bmp
new file mode 100644
index 0000000000..3476e59d6f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lava2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/lava3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/lava3.bmp
new file mode 100644
index 0000000000..b8107ca697
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/lava3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/mesh0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/mesh0.bmp
new file mode 100644
index 0000000000..4f6428f827
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/mesh0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/mesh1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/mesh1.bmp
new file mode 100644
index 0000000000..75ed04eeaf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/mesh1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/mesh2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/mesh2.bmp
new file mode 100644
index 0000000000..5bffc4fe45
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/mesh2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/mesh3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/mesh3.bmp
new file mode 100644
index 0000000000..67868234d2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/mesh3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray0.bmp
new file mode 100644
index 0000000000..885ce960d6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray1.bmp
new file mode 100644
index 0000000000..89c9badf98
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray2.bmp
new file mode 100644
index 0000000000..6a12c1372d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray3.bmp
new file mode 100644
index 0000000000..51ae0c5523
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray4.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray4.bmp
new file mode 100644
index 0000000000..e09d2d92fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pebble_gray4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_e.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_e.bmp
new file mode 100644
index 0000000000..25272710bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_e.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_full.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_full.bmp
new file mode 100644
index 0000000000..e260fa08e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_full.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_n.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_n.bmp
new file mode 100644
index 0000000000..484380d71e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_n.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_ne.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_ne.bmp
new file mode 100644
index 0000000000..6dbde654e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_ne.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_nw.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_nw.bmp
new file mode 100644
index 0000000000..46e17c26fe
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_nw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_s.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_s.bmp
new file mode 100644
index 0000000000..1363b0cc9a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_s.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_se.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_se.bmp
new file mode 100644
index 0000000000..4538d006bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_se.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_sw.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_sw.bmp
new file mode 100644
index 0000000000..3ae1e41b5e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_sw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_w.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_w.bmp
new file mode 100644
index 0000000000..969be54370
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/pedestal_w.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray0.bmp
new file mode 100644
index 0000000000..00e1f71c6c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray1.bmp
new file mode 100644
index 0000000000..4e8b5e4b2c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray2.bmp
new file mode 100644
index 0000000000..941e974070
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray3.bmp
new file mode 100644
index 0000000000..1ac988dbf0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rect_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown0.bmp
new file mode 100644
index 0000000000..2470e64e98
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown1.bmp
new file mode 100644
index 0000000000..4b0eede7bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown2.bmp
new file mode 100644
index 0000000000..319b6a5c16
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown3.bmp
new file mode 100644
index 0000000000..48ca9b4222
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_brown3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_red0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red0.bmp
new file mode 100644
index 0000000000..4f57c4dc13
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_red1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red1.bmp
new file mode 100644
index 0000000000..97e4dddfe9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_red2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red2.bmp
new file mode 100644
index 0000000000..ed83cb6944
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/rough_red3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red3.bmp
new file mode 100644
index 0000000000..fb07621aa6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/rough_red3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/snake0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/snake0.bmp
new file mode 100644
index 0000000000..7522e55217
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/snake0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/snake1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/snake1.bmp
new file mode 100644
index 0000000000..6103695e9d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/snake1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/snake2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/snake2.bmp
new file mode 100644
index 0000000000..df32d3cbc4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/snake2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/snake3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/snake3.bmp
new file mode 100644
index 0000000000..c72300d9e4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/snake3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/swamp0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/swamp0.bmp
new file mode 100644
index 0000000000..0c9a64039e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/swamp0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/swamp1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/swamp1.bmp
new file mode 100644
index 0000000000..3f35fcb6ca
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/swamp1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/swamp2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/swamp2.bmp
new file mode 100644
index 0000000000..9775385915
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/swamp2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/swamp3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/swamp3.bmp
new file mode 100644
index 0000000000..c4f375d694
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/swamp3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/tomb0.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/tomb0.bmp
new file mode 100644
index 0000000000..c94a258451
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/tomb0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/tomb1.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/tomb1.bmp
new file mode 100644
index 0000000000..fe04737e4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/tomb1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/tomb2.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/tomb2.bmp
new file mode 100644
index 0000000000..6d1724c8a8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/tomb2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/floor/tomb3.bmp b/crawl-ref/source/rltiles/dc-dngn/floor/tomb3.bmp
new file mode 100644
index 0000000000..ee0b9029a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/floor/tomb3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/rock_stairs_down.bmp b/crawl-ref/source/rltiles/dc-dngn/rock_stairs_down.bmp
new file mode 100644
index 0000000000..54412bd7aa
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/rock_stairs_down.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/rock_stairs_up.bmp b/crawl-ref/source/rltiles/dc-dngn/rock_stairs_up.bmp
new file mode 100644
index 0000000000..eb6766215b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/rock_stairs_up.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/stone_stairs_down.bmp b/crawl-ref/source/rltiles/dc-dngn/stone_stairs_down.bmp
new file mode 100644
index 0000000000..b18a233689
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/stone_stairs_down.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/stone_stairs_up.bmp b/crawl-ref/source/rltiles/dc-dngn/stone_stairs_up.bmp
new file mode 100644
index 0000000000..95e090934b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/stone_stairs_up.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown0.bmp
new file mode 100644
index 0000000000..00dc1a1629
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown1.bmp
new file mode 100644
index 0000000000..adcc69f8f3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown2.bmp
new file mode 100644
index 0000000000..122c6df979
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown3.bmp
new file mode 100644
index 0000000000..6fa1154e8f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_brown3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray0.bmp
new file mode 100644
index 0000000000..7489a2d5df
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray1.bmp
new file mode 100644
index 0000000000..38ed87f146
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray2.bmp
new file mode 100644
index 0000000000..2b8d92458e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray3.bmp
new file mode 100644
index 0000000000..fe5aa4a8a0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/brick_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/hive0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/hive0.bmp
new file mode 100644
index 0000000000..484ee2b0c3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/hive0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/hive1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/hive1.bmp
new file mode 100644
index 0000000000..1bf44e4a95
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/hive1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/hive2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/hive2.bmp
new file mode 100644
index 0000000000..970fe192a9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/hive2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/hive3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/hive3.bmp
new file mode 100644
index 0000000000..45dba8371f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/hive3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/ice0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/ice0.bmp
new file mode 100644
index 0000000000..6be1e638d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/ice0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/ice1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/ice1.bmp
new file mode 100644
index 0000000000..c3415b917a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/ice1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/ice2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/ice2.bmp
new file mode 100644
index 0000000000..8970bef945
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/ice2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/ice3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/ice3.bmp
new file mode 100644
index 0000000000..9641cdaac3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/ice3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/lair0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/lair0.bmp
new file mode 100644
index 0000000000..7ae0d4f2ab
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/lair0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/lair1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/lair1.bmp
new file mode 100644
index 0000000000..95a6a187b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/lair1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/lair2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/lair2.bmp
new file mode 100644
index 0000000000..4dbb0e5e8a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/lair2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/lair3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/lair3.bmp
new file mode 100644
index 0000000000..0a16f15ca4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/lair3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/marble_green0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green0.bmp
new file mode 100644
index 0000000000..c22bcc8ca6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/marble_green1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green1.bmp
new file mode 100644
index 0000000000..cd515b8783
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/marble_green2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green2.bmp
new file mode 100644
index 0000000000..ec71e258f6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/marble_green3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green3.bmp
new file mode 100644
index 0000000000..54fdcc4870
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/marble_green3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red0.bmp
new file mode 100644
index 0000000000..a9dcda334b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red1.bmp
new file mode 100644
index 0000000000..3b33c937a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red2.bmp
new file mode 100644
index 0000000000..87b0c7fed5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red3.bmp
new file mode 100644
index 0000000000..743cc6b519
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/pebble_red3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/relief0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/relief0.bmp
new file mode 100644
index 0000000000..4b11b2eab5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/relief0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/relief1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/relief1.bmp
new file mode 100644
index 0000000000..d9291eb39e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/relief1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/relief2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/relief2.bmp
new file mode 100644
index 0000000000..168f45ae07
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/relief2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/relief3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/relief3.bmp
new file mode 100644
index 0000000000..31cb8440ca
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/relief3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/slime0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/slime0.bmp
new file mode 100644
index 0000000000..e09c8b291b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/slime0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/slime1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/slime1.bmp
new file mode 100644
index 0000000000..e95a3ce92d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/slime1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/slime2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/slime2.bmp
new file mode 100644
index 0000000000..011db3ec69
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/slime2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/slime3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/slime3.bmp
new file mode 100644
index 0000000000..14c76c0487
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/slime3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/snake0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/snake0.bmp
new file mode 100644
index 0000000000..183947a178
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/snake0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/snake1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/snake1.bmp
new file mode 100644
index 0000000000..d89a343861
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/snake1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/snake2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/snake2.bmp
new file mode 100644
index 0000000000..417739c181
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/snake2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/snake3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/snake3.bmp
new file mode 100644
index 0000000000..5c9dc95573
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/snake3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray0.bmp
new file mode 100644
index 0000000000..3051f26d84
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray1.bmp
new file mode 100644
index 0000000000..ac834f5190
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray2.bmp
new file mode 100644
index 0000000000..3da48fe45b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray3.bmp
new file mode 100644
index 0000000000..86c52b2285
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone2_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray0.bmp
new file mode 100644
index 0000000000..cc44cf7fbc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray1.bmp
new file mode 100644
index 0000000000..32e018dfb7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray2.bmp
new file mode 100644
index 0000000000..dd32e1f990
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray3.bmp
new file mode 100644
index 0000000000..1468f494c9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/stone_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/tomb0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/tomb0.bmp
new file mode 100644
index 0000000000..a76efc5573
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/tomb0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/tomb1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/tomb1.bmp
new file mode 100644
index 0000000000..477482c892
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/tomb1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/tomb2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/tomb2.bmp
new file mode 100644
index 0000000000..dc41854ec1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/tomb2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/tomb3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/tomb3.bmp
new file mode 100644
index 0000000000..7b5f48683f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/tomb3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/undead0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/undead0.bmp
new file mode 100644
index 0000000000..85e232f198
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/undead0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/undead1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/undead1.bmp
new file mode 100644
index 0000000000..88d7fb0687
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/undead1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/undead2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/undead2.bmp
new file mode 100644
index 0000000000..027becc54b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/undead2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/undead3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/undead3.bmp
new file mode 100644
index 0000000000..5d0fa7d46b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/undead3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/vault0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/vault0.bmp
new file mode 100644
index 0000000000..54d5220af0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/vault0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/vault1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/vault1.bmp
new file mode 100644
index 0000000000..0dd3026cba
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/vault1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/vault2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/vault2.bmp
new file mode 100644
index 0000000000..3954c78f71
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/vault2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/vault3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/vault3.bmp
new file mode 100644
index 0000000000..488061e949
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/vault3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue0.bmp
new file mode 100644
index 0000000000..cc2aaa2d39
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue1.bmp
new file mode 100644
index 0000000000..117d349afc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue2.bmp
new file mode 100644
index 0000000000..34184e4601
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue3.bmp
new file mode 100644
index 0000000000..2e56779415
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_blue3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan0.bmp
new file mode 100644
index 0000000000..6be1e638d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan1.bmp
new file mode 100644
index 0000000000..c3415b917a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan2.bmp
new file mode 100644
index 0000000000..8970bef945
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan3.bmp
new file mode 100644
index 0000000000..9641cdaac3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_cyan3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray0.bmp
new file mode 100644
index 0000000000..c4811357c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray1.bmp
new file mode 100644
index 0000000000..aeed87939a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray2.bmp
new file mode 100644
index 0000000000..2d2c7c7189
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray3.bmp
new file mode 100644
index 0000000000..39590760a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_green0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green0.bmp
new file mode 100644
index 0000000000..c22bcc8ca6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_green1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green1.bmp
new file mode 100644
index 0000000000..cd515b8783
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_green2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green2.bmp
new file mode 100644
index 0000000000..ec71e258f6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_green3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green3.bmp
new file mode 100644
index 0000000000..54fdcc4870
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_green3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta0.bmp
new file mode 100644
index 0000000000..da9f0679a9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta1.bmp
new file mode 100644
index 0000000000..51c28de961
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta2.bmp
new file mode 100644
index 0000000000..45a14bde34
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta3.bmp
new file mode 100644
index 0000000000..aa40b3d9ae
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_magenta3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_red0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red0.bmp
new file mode 100644
index 0000000000..60cd11d5a4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_red1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red1.bmp
new file mode 100644
index 0000000000..8af1cd7e5d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_red2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red2.bmp
new file mode 100644
index 0000000000..03cb1f6dde
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_red3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red3.bmp
new file mode 100644
index 0000000000..c8f4561f9a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_red3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow0.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow0.bmp
new file mode 100644
index 0000000000..39b6622646
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow1.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow1.bmp
new file mode 100644
index 0000000000..9ab3c52324
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow2.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow2.bmp
new file mode 100644
index 0000000000..e517ce5ce4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow3.bmp b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow3.bmp
new file mode 100644
index 0000000000..839a6eb275
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-dngn/wall/zot_yellow3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-item.txt b/crawl-ref/source/rltiles/dc-item.txt
new file mode 100644
index 0000000000..f4d45ea915
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-item.txt
@@ -0,0 +1,598 @@
+#####OBJ_WEAPONS
+#####ARTIFACTS
+%sdir item/weapon
+spwpn_singing_sword SPWPN_SINGING_SWORD /* This blessed weapon loves nothing more than to sing to its owner, whether they want it to or not.
+spwpn_wrath_of_trog SPWPN_WRATH_OF_TROG /* This was the favourite weapon of the old god Trog, before he lost it one day. It induces a bloodthirsty berserker rage in anyone who uses it to strike another.
+spwpn_scythe_of_curses SPWPN_SCYTHE_OF_CURSES /* This weapon carries a terrible and highly irritating curse.
+spwpn_mace_of_variability SPWPN_MACE_OF_VARIABILITY /* It is rather unreliable.
+spwpn_glaive_of_prune SPWPN_GLAIVE_OF_PRUNE /* 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 consequences worse than slightly purple skin and a few wrinkles.
+spwpn_sceptre_of_torment SPWPN_SCEPTRE_OF_TORMENT /* This truly accursed weapon is an instrument of Hell.
+spwpn_sword_of_zonguldrok SPWPN_SWORD_OF_ZONGULDROK /* This dreadful weapon is used at the user's peril.
+spwpn_sword_of_cerebov SPWPN_SWORD_OF_CEREBOV /* Eerie flames cover its twisted blade.
+spwpn_staff_of_dispater SPWPN_STAFF_OF_DISPATER /* This legendary item can unleash the fury of Hell.
+spwpn_sceptre_of_asmodeus SPWPN_SCEPTRE_OF_ASMODEUS /* It carries some of the powers of the arch-fiend Asmodeus.
+spwpn_sword_of_power SPWPN_SWORD_OF_POWER /* It rewards the powerful with power and the meek with weakness.
+spwpn_knife_of_accuracy SPWPN_KNIFE_OF_ACCURACY /* It is almost unerringly accurate.
+spwpn_staff_of_olgreb SPWPN_STAFF_OF_OLGREB /* It was the magical weapon wielded by the mighty wizard Olgreb before he met his fate somewhere within these dungeons. It grants its wielder resistance to the effects of poison and increases their ability to use venomous magic, and carries magical powers which can be evoked.
+spwpn_vampires_tooth SPWPN_VAMPIRES_TOOTH /* It is lethally vampiric.
+quarterstaff SPWPN_STAFF_OF_WUCAD_MU /* Its power varies in proportion to its wielder's intelligence. Using it can be a bit risky.
+
+##### Unrandom artifacts
+%include dc-urand.txt
+
+#####NORMAL
+%sdir item/weapon
+%rim 1
+##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
+mace_large WPN_GREAT_MACE/* D16H-3S18 A large and heavy mace.
+mace_large2 WPN_GREAT_MACE2
+flail WPN_FLAIL
+flail2 WPN_FLAIL2
+spiked_flail WPN_SPIKED_FLAIL
+spiked_flail2 WPN_SPIKED_FLAIL2
+great_flail WPN_GREAT_FLAIL
+great_flail2 WPN_GREAT_FLAIL2
+morningstar WPN_MORNINGSTAR
+morningstar2 WPN_MORNINGSTAR2
+eveningstar WPN_EVENINGSTAR
+eveningstar2 WPN_EVENINGSTAR2
+hammer WPN_HAMMER
+hammer2 WPN_HAMMER2
+ancus WPN_ANCUS/* 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.
+giant_club WPN_GIANT_CLUB/* D15H-5S16 A giant lump of wood, shaped for an ogre's hands.
+giant_spiked_club WPN_GIANT_SPIKED_CLUB/* D18H-6S17 A giant lump of wood with sharp spikes at one end.
+
+##Edged
+knife WPN_KNIFE/* D2H0S11 A simple survival knife. Designed more for utility than combat, it looks quite capable of butchering a corpse.
+
+dagger WPN_DAGGER/* D3H6S11 A long knife or a very short sword, which can be held or thrown.
+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
+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
+%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
+orcish_great_sword WPN_GREAT_SWORD_ORC
+
+falchion WPN_FALCHION/* D8H2S13 A sword with a broad slashing blade.
+scimitar WPN_SCIMITAR/* D11H1S14 A long sword with a curved blade.
+scimitar2 WPN_SCIMITAR2
+
+silver_saber WPN_SABRE/* D7H4S12 A sword with a medium length slashing blade.
+sabre2 WPN_SABRE_1
+
+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
+
+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.
+demon_blade WPN_DEMON_BLADE/* D13H2S15 A terrible weapon, forged in the fires of Hell.
+
+##Axe
+hand_axe WPN_HAND_AXE/* D7H2S13 An small axe designed for either hand combat or throwing.
+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.
+broad_axe2
+battle_axe WPN_BATTLEAXE/* D17H-2S18 A large axe with a double-headed blade.
+battle_axe3 WPN_BATTLEAXE_1
+executioner_axe WPN_EXECUTIONERS_AXE /* D20H-4S20 A huge axe.
+executioner_axe2 WPN_EXECUTIONERS_AXE_1
+
+##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
+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
+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
+hand_crossbow WPN_HAND_CROSSBOW /* D1H-1S15 A small crossbow, for firing darts.
+hand_crossbow2 WPN_HAND_CROSSBOW1
+
+##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
+trident WPN_TRIDENT /* D9H-2S17 A hafted weapon with three points at one end.
+trident2 WPN_TRIDENT2
+halberd WPN_HALBERD /* D13H-3S19 A long pole with a spiked axe head on one end.
+halberd2 WPN_HALBERD2
+scythe WPN_SCYTHE /* D14H-4S22 A farm implement, usually unsuited to combat.
+scythe2 WPN_SCYTHE2
+glaive WPN_GLAIVE /* D15H-3S18 A pole with a large, heavy blade on one end.
+glaive2 WPN_GLAIVE2
+orcish_glaive WPN_GLAIVE_ORC
+
+demon_trident WPN_DEMON_TRIDENT /* D15H-2S17 A terrible weapon, molded by fire and brimstone.
+
+# SS new weapons
+%rim 0
+blessed_blade WPN_BLESSED_BLADE
+%rim 1
+longbow WPN_LONGBOW
+lajatang WPN_LAJATANG
+lochaber_axe WPN_LOCHABER_AXE
+
+######OBJ_MISSILES
+item/gem/stone MI_STONE /* D2H4 A stone.
+effect/stone0 MI_STONE0
+sling_bullet MI_SLING_BULLET
+effect/sling_bullet0 MI_SLING_BULLET0
+ya MI_ARROW /* D2H6 An arrow.
+effect/arrow0 MI_ARROW0
+effect/arrow1 MI_ARROW1
+effect/arrow2 MI_ARROW2
+effect/arrow3 MI_ARROW3
+effect/arrow4 MI_ARROW4
+effect/arrow5 MI_ARROW5
+effect/arrow6 MI_ARROW6
+effect/arrow7 MI_ARROW7
+
+crossbow_bolt MI_BOLT /* D2H8 A crossbow bolt.
+effect/bolt0 MI_BOLT0
+effect/bolt1 MI_BOLT1
+effect/bolt2 MI_BOLT2
+effect/bolt3 MI_BOLT3
+effect/bolt4 MI_BOLT4
+effect/bolt5 MI_BOLT5
+effect/bolt6 MI_BOLT6
+effect/bolt7 MI_BOLT7
+
+dart MI_DART /* D2H4 A small throwing weapon.
+dart-p MI_DART_P
+effect/dart0 MI_DART0
+effect/dart1 MI_DART1
+effect/dart2 MI_DART2
+effect/dart3 MI_DART3
+effect/dart4 MI_DART4
+effect/dart5 MI_DART5
+effect/dart6 MI_DART6
+effect/dart7 MI_DART7
+
+needle MI_NEEDLE /* D0H1 A needle.
+needle-p MI_NEEDLE_P
+effect/needle0 MI_NEEDLE0
+effect/needle1 MI_NEEDLE1
+effect/needle2 MI_NEEDLE2
+effect/needle3 MI_NEEDLE3
+effect/needle4 MI_NEEDLE4
+effect/needle5 MI_NEEDLE5
+effect/needle6 MI_NEEDLE6
+effect/needle7 MI_NEEDLE7
+
+javelin MI_JAVELIN
+effect/javelin0 MI_JAVELIN0
+effect/javelin1 MI_JAVELIN1
+effect/javelin2 MI_JAVELIN2
+effect/javelin3 MI_JAVELIN3
+effect/javelin4 MI_JAVELIN4
+effect/javelin5 MI_JAVELIN5
+effect/javelin6 MI_JAVELIN6
+effect/javelin7 MI_JAVELIN7
+
+throwing_net MI_THROWING_NET
+effect/throwing_net0 MI_THROWING_NET0
+effect/throwing_net1 MI_THROWING_NET1
+effect/throwing_net2 MI_THROWING_NET2
+effect/throwing_net3 MI_THROWING_NET3
+effect/throwing_net4 MI_THROWING_NET4
+effect/throwing_net5 MI_THROWING_NET5
+effect/throwing_net6 MI_THROWING_NET6
+effect/throwing_net7 MI_THROWING_NET7
+effect/net_trap TRAP_NET
+
+item/gem/rock MI_LARGE_ROCK /* D20H10 A rock, used by giants as a missile.
+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
+
+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
+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
+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
+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_mail3 ARM_CHAIN_MAIL_ELF
+orcish_chain_mail ARM_CHAIN_MAIL_ORC
+
+splint_mail ARM_SPLINT_MAIL /* A8E-5 A suit made of splints of metal.
+banded_mail ARM_BANDED_MAIL /* A7E-4 A suit made of bands of metal.
+
+plate_mail2 ARM_PLATE_MAIL /* A9E-5 A suit of mail and large plates of metal.
+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
+
+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).
+green_dragon_scales ARM_DRAGON_HIDE /* A2E-2 The scaly skin of a dragon. I suppose you could wear it if you really wanted to.
+green_dragon_scale_mail ARM_DRAGON_ARMOUR /* A8E-2 A magical armour, made from the scales of a fire-breathing dragon. It provides great protection from the effects of fire, but renders its wearer more susceptible to the effects of cold.
+ice_dragon_hide ARM_ICE_DRAGON_HIDE /* A2E-2 The scaly skin of a dragon. I suppose you could wear it if you really wanted to.
+ice_dragon_armour ARM_ICE_DRAGON_ARMOUR /* A9E-2 A magical armour, made from the scales of a cold-breathing dragon. It provides great protection from the effects of cold, but renders its wearer more susceptible to the effects of fire and heat.
+silver_dragon_scales ARM_STEAM_DRAGON_HIDE /* A0E0 The soft and supple scaley skin of a steam dragon. I suppose you could wear it if you really wanted to.
+silver_dragon_scale_mail ARM_STEAM_DRAGON_ARMOUR /* A3E0 A magical armour, made from the scales of a steam-breathing dragon. Although unlike the armour made from the scales of some larger dragons it does not provide its wearer with much in the way of special magical protection, it is extremely light and as supple as cloth.
+mottled_dragon_hide ARM_MOTTLED_DRAGON_HIDE /* A1E-1 The weirdly-patterned scaley skin of a mottled dragon. I suppose you could wear it if you really wanted to.
+mpttled_dragon_armour ARM_MOTTLED_DRAGON_ARMOUR /* A5E-1 A magical armour made from the scales of a mottled dragon. Although unlike the armour made from the scales of some larger dragons it does not provide its wearer with much in the way of special magical protection, it is as light and relatively uncumbersome as leather armour.
+blue_dragon_scales ARM_STORM_DRAGON_HIDE /* A2E-5 The hide of a storm dragon, covered in extremely hard blue scales. I suppose you could wear it if you really wanted to.
+blue_dragon_scale_mail ARM_STORM_DRAGON_ARMOUR /* A10E-5 A magical armour made from the scales of a lightning-breathing dragon. It is heavier than most dragon scale armours, but gives its wearer great resistance to electrical discharges.
+gold_dragon_hide ARM_GOLD_DRAGON_HIDE /* A2E-10 The extremely tough and heavy skin of a golden dragon, covered in shimmering golden scales. I suppose you could wear it if you really wanted to.
+gold_dragon_armour ARM_GOLD_DRAGON_ARMOUR /* A13E-10 A magical armour made from the golden scales of a golden dragon. It is extremely heavy and cumbersome, but confers resistances to fire, cold, and poison on its wearer.
+swamp_dragon_hide ARM_SWAMP_DRAGON_HIDE /* A1E-2 The slimy skin of a swamp-dwelling dragon. I suppose you could wear it if you really wanted to.
+swamp_dragon_armour ARM_SWAMP_DRAGON_ARMOUR /* A7E-2 A magical armour made from the scales of a swamp dragon. It confers resistance to poison on its wearer.
+
+naga_barding ARM_NAGA_BARDING
+centaur_barding ARM_CENTAUR_BARDING
+
+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
+
+#dwarvish_roundshield ARM_BUCKLER
+small_shield ARM_BUCKLER /* A small shield.
+small_shield2 ARM_BUCKLER_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
+
+leather_cloak ARM_CLOAK /* A1E0 A cloth cloak.
+cloak2 ARM_CLOAK_1
+cloak3 ARM_CLOAK_2
+cloak4 ARM_CLOAK_3
+
+#####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
+
+visored_helmet THELM_HELM /* A1E0 A piece of metal headgear.
+etched_helmet THELM_HELM_1
+helm3 THELM_HELM_2
+helm_visor1 THELM_HELM_3
+
+###### GLOVES
+glove1 ARM_GLOVES /* A1E0 A pair of gloves.
+glove3 ARM_GLOVES_1
+glove5 ARM_GLOVES_2
+gauntlet2 ARM_GLOVES_3
+
+###### 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
+
+###########OBJ_WANDS
+%sdir item/wand
+gem_iron WAND_OFFSET /*iron*/
+gem_brass
+gem_bone
+gem_wood
+gem_copper
+gem_gold
+gem_silver
+gem_bronze
+gem_ivory
+gem_glass
+gem_lead
+gem_plastic
+
+%sdir item/wand
+%back i-label
+
+i-flame WAND_FLAME
+i-frost WAND_FROST
+i-slowing WAND_SLOWING
+i-hasting WAND_HASTING
+i-magic_darts WAND_MAGIC_DARTS
+i-healing WAND_HEALING
+i-paralysis WAND_PARALYSIS
+i-fire WAND_FIRE
+i-cold WAND_COLD
+i-confusion WAND_CONFUSION
+i-invisibility WAND_INVISIBILITY
+i-digging WAND_DIGGING
+i-fireball WAND_FIREBALL
+i-teleportation WAND_TELEPORTATION
+i-lightning WAND_LIGHTNING
+i-polymorph_other WAND_POLYMORPH_OTHER
+i-enslavement WAND_ENSLAVEMENT
+i-draining WAND_DRAINING
+i-random_effects WAND_RANDOM_EFFECTS
+i-disintegration WAND_DISINTEGRATION
+
+%back none
+#################OBJ_FOOD
+%sdir item/food
+tripe_ration FOOD_MEAT_RATION
+bread_ration FOOD_BREAD_RATION
+pear FOOD_PEAR
+apple FOOD_APPLE
+choko FOOD_CHOKO
+honeycomb FOOD_HONEYCOMB
+lump_of_royal_jelly FOOD_ROYAL_JELLY
+snozzcumber FOOD_SNOZZCUMBER
+pizza FOOD_PIZZA
+apricot FOOD_APRICOT
+orange FOOD_ORANGE
+banana FOOD_BANANA
+strawberry FOOD_STRAWBERRY
+rambutan FOOD_RAMBUTAN
+lemon FOOD_LEMON
+grape FOOD_GRAPE
+sultana FOOD_SULTANA
+lychee FOOD_LYCHEE
+beef_jerky FOOD_BEEF_JERKY
+cheese FOOD_CHEESE
+sausage FOOD_SAUSAGE
+corpse FOOD_CHUNK
+corpse_rotten FOOD_CHUNK_ROTTEN
+bone FOOD_BONE
+#################OBJ_UNKNOWN_I
+##################OBJ_SCROLLS
+%sdir item/scroll
+kernod_wel SCROLL
+
+%back kernod_wel
+%sdir item/scroll
+i-identify SCR_IDENTIFY
+i-teleportation SCR_TELEPORTATION
+i-fear SCR_FEAR
+i-noise SCR_NOISE
+i-remove_curse SCR_REMOVE_CURSE
+i-detect_curse SCR_DETECT_CURSE
+i-summoning SCR_SUMMONING
+i-enchant-weapon1 SCR_ENCHANT_WEAPON_I
+i-enchant_armour SCR_ENCHANT_ARMOUR
+i-torment SCR_TORMENT
+i-random_uselessness SCR_RANDOM_USELESSNESS
+i-curse_weapon SCR_CURSE_WEAPON
+i-curse_armour SCR_CURSE_ARMOUR
+i-immolation SCR_IMMOLATION
+i-blinking SCR_BLINKING
+item/scroll/blank_paper SCR_PAPER
+i-magic_mapping SCR_MAGIC_MAPPING
+i-foregetfulness SCR_FORGETFULNESS
+i-acquirement SCR_ACQUIREMENT
+i-enchant-weapon2 SCR_ENCHANT_WEAPON_II
+i-vorpalize-weapon SCR_VORPALISE_WEAPON
+i-recharging SCR_RECHARGING
+i-enchant-weapon3 SCR_ENCHANT_WEAPON_III
+%back none
+
+##################OBJ_JEWELLERY
+############ring
+%sdir item/ring
+wooden RING_NORMAL_OFFSET /*wood*/
+silver
+gold
+iron
+steel
+bronze
+brass
+copper
+granite
+ivory
+clay
+tiger_eye
+jade
+glass
+###########random
+agate RING_RANDOM_OFFSET
+clay
+diamond
+emerald
+gold_green
+gold_red
+opal
+pearl
+coral
+gold_blue
+plain_red
+plain_yellow
+plain_black
+bronze
+moonstone
+
+###amulets
+%sdir item/amulet
+crystal_white AMU_NORMAL_OFFSET /*zirconium*/
+stone3_blue
+face1_gold
+stone3_green
+stone2_red
+eye_magenta
+face2
+penta_orange
+celtic_red
+cameo_blue
+bone_gray
+cylinder_gray
+ring_green
+ring_cyan
+###random
+crystal_green AMU_RANDOM_OFFSET
+cameo_orange
+celtic_blue
+eye_cyan
+penta_green
+ring_red
+stone1_cyan
+stone1_pink
+stone2_green
+stone3_magenta
+celtic_yellow
+stone1_green
+stone2_blue
+crystal_red
+eye_green
+
+####################OBJ_POTIONS
+%sdir item/potion
+clear POTION_OFFSET /*clear*/
+brilliant_blue
+black
+silver
+cyan
+magenta
+orange
+dark
+ruby
+yellow
+emerald
+brown
+pink
+white
+
+%sdir item/potion
+%back i-label
+%rim 0
+i-heal POT_HEALING
+i-heal-wounds POT_HEAL_WOUNDS
+i-speed POT_SPEED
+i-might POT_MIGHT
+i-gain-strength POT_GAIN_STRENGTH
+i-gain-dexterity POT_GAIN_DEXTERITY
+i-gain-intelligence POT_GAIN_INTELLIGENCE
+i-levitation POT_LEVITATION
+i-poison POT_POISON
+i-slowing POT_SLOWING
+i-paralysis POT_PARALYSIS
+i-confusion POT_CONFUSION
+i-invisibility POT_INVISIBILITY
+i-porridge POT_PORRIDGE
+i-degeneration POT_DEGENERATION
+i-decay POT_DECAY
+i-water POT_WATER
+i-experience POT_EXPERIENCE
+i-magic POT_MAGIC
+i-restore-abilities POT_RESTORE_ABILITIES
+i-strong-poison POT_STRONG_POISON
+i-berserk-rage POT_BERSERK_RAGE
+i-cure-mutation POT_CURE_MUTATION
+i-mutation POT_MUTATION
+i-blood POT_BLOOD
+i-resistance POT_RESISTANCE
+%back none
+%rim 1
+
+####################OBJ_UNKNOWN_II
+#####################OBJ_BOOKS
+###0paperback / hardback 16
+%sdir item/book
+book_of_the_dead BOOK_PAPER_OFFSET
+dark_blue
+dark_green
+cyan
+red
+purple
+tan
+light_gray
+dark_gray
+light_blue
+light_green
+turquoise
+pink
+magenta
+yellow
+white
+##########leather 8
+parchment BOOK_LEATHER_OFFSET
+leather
+tan
+plaid
+light_brown
+light_brown
+dark_brown
+dark_brown
+###########3metal 8
+bronze BOOK_METAL_OFFSET
+copper
+silver
+gold
+glittering
+metal_blue
+metal_cyan
+metal_green
+############4papi 1
+cloth BOOK_PAPYRUS
+#####################OBJ_STAVES
+%sdir item/wand
+staff00 STAFF_OFFSET /*curved*/
+staff01
+staff02
+staff03
+staff04
+staff05
+staff06
+staff07
+staff08
+staff09
+
+#OBJ_ORBS
+%sdir item/misc
+misc_orb ORB
+
+#OBJ_MISCELLANY
+misc_bottle MISC_BOTTLED_EFREET
+misc_crystal MISC_CRYSTAL_BALL_OF_SEEING
+misc_fan MISC_AIR_ELEMENTAL_FAN
+misc_lamp MISC_LAMP_OF_FIRE
+misc_stone MISC_STONE_OF_EARTH_ELEMENTALS
+misc_lantern MISC_LANTERN_OF_SHADOWS
+misc_horn MISC_HORN_OF_GERYON
+misc_box MISC_BOX_OF_BEASTS
+misc_deck MISC_DECK_OF_WONDERS
+misc_deck MISC_DECK_OF_SUMMONINGS
+misc_crystal MISC_CRYSTAL_BALL_OF_ENERGY
+misc_box MISC_EMPTY_EBONY_CASKET
+misc_crystal MISC_CRYSTAL_BALL_OF_FIXATION
+misc_disc MISC_DISC_OF_STORMS
+misc_rune MISC_RUNE_OF_ZOT
+misc_deck MISC_DECK_OF_TRICKS
+misc_deck MISC_DECK_OF_POWER
+misc_altar MISC_PORTABLE_ALTAR_OF_NEMELEX
+
+#OBJ_CORPSES
+
+#OBJ_GOLD
+%sdir item/gem
+gold_piece GOLD
+#OBJ_GEMSTONES
diff --git a/crawl-ref/source/rltiles/dc-misc.txt b/crawl-ref/source/rltiles/dc-misc.txt
new file mode 100644
index 0000000000..e68d99eec0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc.txt
@@ -0,0 +1,167 @@
+%sdir effect
+#### Magic Bolts
+%back none
+bolt01 SYM_BOLT_OFS
+bolt02
+bolt03
+bolt04
+bolt05
+bolt06
+bolt07
+bolt08
+#########CLOUDS
+cloud_fire0 CLOUD_FIRE_0
+cloud_fire1 CLOUD_FIRE_1
+cloud_fire2 CLOUD_FIRE_2
+cloud_cold0 CLOUD_COLD_0
+cloud_cold1 CLOUD_COLD_1
+cloud_cold2 CLOUD_COLD_2
+cloud_poison0 CLOUD_POISON_0
+cloud_poison1 CLOUD_POISON_1
+cloud_poison2 CLOUD_POISON_2
+cloud_black_smoke CLOUD_BLACK_SMOKE
+cloud_blue_smoke CLOUD_BLUE_SMOKE
+cloud_grey_smoke CLOUD_GREY_SMOKE
+cloud_miasma CLOUD_MIASMA
+cloud_purp_smoke CLOUD_PURP_SMOKE
+
+#########MAP
+%sdir dc-misc
+%corpse 0
+%back none
+%mesh 0
+unseen_weapon UNSEEN_WEAPON
+unseen_monster UNSEEN_MONSTER
+unseen_armour UNSEEN_ARMOUR
+unseen_item UNSEEN_ITEM
+%corpse 1
+%back dc-misc/blood_red
+unseen_monster UNSEEN_CORPSE
+%corpse 0
+%back none
+dc-dngn/dngn_altar UNSEEN_ALTAR
+dc-dngn/dngn_entrance UNSEEN_ENTRANCE
+
+%back none
+#mask_deep_water MASK_DEEP_WATER
+#mask_shallow_water MASK_SHALLOW_WATER
+#mask_lava MASK_LAVA
+sink_mask SINK_MASK
+cursor CURSOR
+cursor_red CURSOR2
+cursor_green CURSOR3
+heart HEART
+may_stab_brand MAY_STAB_BRAND
+stab_brand STAB_BRAND
+unseen PLAYER
+%mesh 1
+blank MESH
+%mesh 0
+magicmap MAGIC_MAP_MESH
+ray RAY_MESH
+txt1 TEXT_PARTS_J
+txt2 TEXT_DOLLS_J
+txt3 TEXT_PARTS_E
+txt4 TEXT_DOLLS_E
+something_under SOMETHING_UNDER
+error ERROR
+
+char20 CHAR00
+char28
+char30
+char38
+char40
+char48
+char50
+char58
+char60
+char68
+char70
+char78
+
+slot ITEM_SLOT
+slot_eq ITEM_SLOT_EQUIP
+slot_cursed ITEM_SLOT_CURSED
+slot_eq_cursed ITEM_SLOT_EQUIP_CURSED
+
+%back unseen
+dc-misc/unseen_monster MCACHE_START
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster
+dc-misc/unseen_monster MCACHE_END
diff --git a/crawl-ref/source/rltiles/dc-misc/blood_blue.bmp b/crawl-ref/source/rltiles/dc-misc/blood_blue.bmp
new file mode 100644
index 0000000000..e4fb954c7e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/blood_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/blood_green.bmp b/crawl-ref/source/rltiles/dc-misc/blood_green.bmp
new file mode 100644
index 0000000000..3882a58e40
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/blood_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/blood_magenta.bmp b/crawl-ref/source/rltiles/dc-misc/blood_magenta.bmp
new file mode 100644
index 0000000000..22aef338a8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/blood_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/blood_red.bmp b/crawl-ref/source/rltiles/dc-misc/blood_red.bmp
new file mode 100644
index 0000000000..b595a853be
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/blood_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char20.bmp b/crawl-ref/source/rltiles/dc-misc/char20.bmp
new file mode 100644
index 0000000000..5e9765e0b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char20.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char28.bmp b/crawl-ref/source/rltiles/dc-misc/char28.bmp
new file mode 100644
index 0000000000..40613a2caa
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char28.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char30.bmp b/crawl-ref/source/rltiles/dc-misc/char30.bmp
new file mode 100644
index 0000000000..e3ef9ea9d5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char30.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char38.bmp b/crawl-ref/source/rltiles/dc-misc/char38.bmp
new file mode 100644
index 0000000000..54ec8bfb09
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char38.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char40.bmp b/crawl-ref/source/rltiles/dc-misc/char40.bmp
new file mode 100644
index 0000000000..55ae38ef33
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char40.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char48.bmp b/crawl-ref/source/rltiles/dc-misc/char48.bmp
new file mode 100644
index 0000000000..8f7e869b34
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char48.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char50.bmp b/crawl-ref/source/rltiles/dc-misc/char50.bmp
new file mode 100644
index 0000000000..f3d13e0bd6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char50.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char58.bmp b/crawl-ref/source/rltiles/dc-misc/char58.bmp
new file mode 100644
index 0000000000..3893356538
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char58.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char60.bmp b/crawl-ref/source/rltiles/dc-misc/char60.bmp
new file mode 100644
index 0000000000..b169a9fff3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char60.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char68.bmp b/crawl-ref/source/rltiles/dc-misc/char68.bmp
new file mode 100644
index 0000000000..b6c8ec7e6b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char68.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char70.bmp b/crawl-ref/source/rltiles/dc-misc/char70.bmp
new file mode 100644
index 0000000000..587f1b5a92
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char70.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/char78.bmp b/crawl-ref/source/rltiles/dc-misc/char78.bmp
new file mode 100644
index 0000000000..e1774948f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/char78.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/cursor.bmp b/crawl-ref/source/rltiles/dc-misc/cursor.bmp
new file mode 100644
index 0000000000..e851e459aa
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/cursor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/cursor_green.bmp b/crawl-ref/source/rltiles/dc-misc/cursor_green.bmp
new file mode 100644
index 0000000000..e7f8288ed2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/cursor_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/cursor_red.bmp b/crawl-ref/source/rltiles/dc-misc/cursor_red.bmp
new file mode 100644
index 0000000000..052550ae1d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/cursor_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/error.bmp b/crawl-ref/source/rltiles/dc-misc/error.bmp
new file mode 100644
index 0000000000..01b75a80bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/error.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/heart.bmp b/crawl-ref/source/rltiles/dc-misc/heart.bmp
new file mode 100644
index 0000000000..4efc69da69
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/heart.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/magicmap.bmp b/crawl-ref/source/rltiles/dc-misc/magicmap.bmp
new file mode 100644
index 0000000000..48c97de742
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/magicmap.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/mask_deep_water.bmp b/crawl-ref/source/rltiles/dc-misc/mask_deep_water.bmp
new file mode 100644
index 0000000000..b194f3a1f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/mask_deep_water.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/mask_lava.bmp b/crawl-ref/source/rltiles/dc-misc/mask_lava.bmp
new file mode 100644
index 0000000000..0fd553b16f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/mask_lava.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/mask_shallow_water.bmp b/crawl-ref/source/rltiles/dc-misc/mask_shallow_water.bmp
new file mode 100644
index 0000000000..c7edf388cd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/mask_shallow_water.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/may_stab_brand.bmp b/crawl-ref/source/rltiles/dc-misc/may_stab_brand.bmp
new file mode 100644
index 0000000000..ad52fdaa1d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/may_stab_brand.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/ray.bmp b/crawl-ref/source/rltiles/dc-misc/ray.bmp
new file mode 100644
index 0000000000..daaaad422a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/ray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/sink_mask.bmp b/crawl-ref/source/rltiles/dc-misc/sink_mask.bmp
new file mode 100644
index 0000000000..7b0e75b3b0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/sink_mask.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/slot.bmp b/crawl-ref/source/rltiles/dc-misc/slot.bmp
new file mode 100644
index 0000000000..10654a5160
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/slot.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/slot_cursed.bmp b/crawl-ref/source/rltiles/dc-misc/slot_cursed.bmp
new file mode 100644
index 0000000000..dfec90bf89
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/slot_cursed.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/slot_eq.bmp b/crawl-ref/source/rltiles/dc-misc/slot_eq.bmp
new file mode 100644
index 0000000000..5f4c8ac4b6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/slot_eq.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/slot_eq_cursed.bmp b/crawl-ref/source/rltiles/dc-misc/slot_eq_cursed.bmp
new file mode 100644
index 0000000000..6eef705e91
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/slot_eq_cursed.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/something_under.bmp b/crawl-ref/source/rltiles/dc-misc/something_under.bmp
new file mode 100644
index 0000000000..2359372591
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/something_under.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/stab_brand.bmp b/crawl-ref/source/rltiles/dc-misc/stab_brand.bmp
new file mode 100644
index 0000000000..bf6e57c038
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/stab_brand.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/txt1.bmp b/crawl-ref/source/rltiles/dc-misc/txt1.bmp
new file mode 100644
index 0000000000..17e2572cfd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/txt1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/txt2.bmp b/crawl-ref/source/rltiles/dc-misc/txt2.bmp
new file mode 100644
index 0000000000..2b59dfead0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/txt2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/txt3.bmp b/crawl-ref/source/rltiles/dc-misc/txt3.bmp
new file mode 100644
index 0000000000..120e269580
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/txt3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/txt4.bmp b/crawl-ref/source/rltiles/dc-misc/txt4.bmp
new file mode 100644
index 0000000000..5c6295c76f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/txt4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/unseen.bmp b/crawl-ref/source/rltiles/dc-misc/unseen.bmp
new file mode 100644
index 0000000000..187325f234
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/unseen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/unseen_armour.bmp b/crawl-ref/source/rltiles/dc-misc/unseen_armour.bmp
new file mode 100644
index 0000000000..941f13df9b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/unseen_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/unseen_item.bmp b/crawl-ref/source/rltiles/dc-misc/unseen_item.bmp
new file mode 100644
index 0000000000..516383e616
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/unseen_item.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/unseen_monster.bmp b/crawl-ref/source/rltiles/dc-misc/unseen_monster.bmp
new file mode 100644
index 0000000000..6fdc2cbe09
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/unseen_monster.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-misc/unseen_weapon.bmp b/crawl-ref/source/rltiles/dc-misc/unseen_weapon.bmp
new file mode 100644
index 0000000000..a9149c9169
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-misc/unseen_weapon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt
new file mode 100644
index 0000000000..e5d8a41e25
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon.txt
@@ -0,0 +1,494 @@
+%subst large_mimic
+%sdir dc-mon
+%rim 0
+shadow MONS_SHADOW /*' '*/
+%rim 1
+earth_elemental MONS_EARTH_ELEMENTAL /*'#'*/
+fire_elemental MONS_FIRE_ELEMENTAL /*'#'*/
+%rim 0
+vapour MONS_VAPOUR /*'#'*/
+%rim 1
+#item/gem/gold_piece MONS_GOLD_MIMIC /*(YELLOW) An apparently harmless pile of gold coins hides a nasty venomous shapechanging predator.
+death_cob MONS_DEATH_COB /*'%'*/
+
+## Arch demons
+asmodeus MONS_ASMODEUS /*'&'*/
+cerebov MONS_CEREBOV /*'&'*/
+dispater MONS_DISPATER /*'&'*/
+ereshkigal MONS_ERESHKIGAL /*'&'*/
+geryon MONS_GERYON /*'&'*/
+gloorx_vloq MONS_GLOORX_VLOQ /*'&'*/
+lom_lobon MONS_LOM_LOBON /*'&'*/
+mnoleg MONS_MNOLEG /*'&'*/
+pandemonium_demon MONS_PANDEMONIUM_DEMON /*'&'*/
+#item/weapon/halberd MONS_DANCING_WEAPON /*'('(BLACK) A weapon dancing in the air.
+#weapon_mimic MONS_WEAPON_MIMIC /*')'(BLACK) An apparently abandoned weapon, actually a vicious little beast in disguise.
+ball_lightning MONS_BALL_LIGHTNING /*'*'*/
+%rim 0
+orb_of_fire MONS_ORB_OF_FIRE /*'*'*/
+%rim 1
+
+## Demons 1-5
+balrug MONS_BALRUG /*'1'*/
+blue_death MONS_BLUE_DEATH /*'1'*/
+cacodemon MONS_CACODEMON /*'1'*/
+executioner MONS_EXECUTIONER /*'1'*/
+fiend MONS_FIEND /*'1'*/
+green_death MONS_GREEN_DEATH /*'1'*/
+ice_fiend MONS_ICE_FIEND /*'1'*/
+pit_fiend MONS_PIT_FIEND /*'1'*/
+shadow_fiend MONS_SHADOW_FIEND /*'1'*/
+ice_devil MONS_ICE_DEVIL /*'2'*/
+lorocyproca MONS_LOROCYPROCA /*'2'*/
+reaper MONS_REAPER /*'2'*/
+soul_eater MONS_SOUL_EATER /*'2'*/
+sun_demon MONS_SUN_DEMON /*'2'*/
+blue_devil MONS_BLUE_DEVIL /*'3'*/
+demonic_crawler MONS_DEMONIC_CRAWLER /*'3'*/
+hellion MONS_HELLION /*'3'*/
+hellwing MONS_HELLWING /*'3'*/
+iron_devil MONS_IRON_DEVIL /*'3'*/
+neqoxec MONS_NEQOXEC /*'3'*/
+orange_demon MONS_ORANGE_DEMON /*'3'*/
+shadow_demon MONS_SHADOW_DEMON /*'3'*/
+tormentor MONS_TORMENTOR /*'3'*/
+ynoxinul MONS_YNOXINUL /*'3'*/
+beast MONS_BEAST /*'4'*/
+hairy_devil MONS_HAIRY_DEVIL /*'4'*/
+red_devil MONS_RED_DEVIL /*'4'*/
+rotting_devil MONS_ROTTING_DEVIL /*'4'*/
+smoke_demon MONS_SMOKE_DEMON /*'4'*/
+imp MONS_IMP /*'5'*/
+lemure MONS_LEMURE /*'5'*/
+manes MONS_MANES /*'5'*/
+midge MONS_MIDGE /*'5'*/
+shadow_imp MONS_SHADOW_IMP /*'5'*/
+ufetubus MONS_UFETUBUS /*'5'*/
+white_imp MONS_WHITE_IMP /*'5'*/
+
+## Golems
+clay_golem MONS_CLAY_GOLEM /*'8'*/
+crystal_golem MONS_CRYSTAL_GOLEM /*'8'*/
+%rim 0
+electric_golem MONS_ELECTRIC_GOLEM /*'8'*/
+%rim 1
+iron_golem MONS_IRON_GOLEM /*'8'*/
+stone_golem MONS_STONE_GOLEM /*'8'*/
+toenail_golem MONS_TOENAIL_GOLEM /*'8'*/
+wood_golem MONS_WOOD_GOLEM /*'8'*/
+
+## Aquatics
+big_fish MONS_BIG_FISH /*';'*/
+electrical_eel MONS_ELECTRICAL_EEL /*';'*/
+giant_goldfish MONS_GIANT_GOLDFISH /*';'*/
+lava_fish MONS_LAVA_FISH /*';'*/
+#scroll_mimic MONS_SCROLL_MIMIC /*'?'(LIGHTGREY) An ancient parchment covered in arcane runes. Did it just twitch?
+
+## Humans
+%subst asc/ch40
+shapeshifter MONS_SHAPESHIFTER /*'@'*/
+glowing_shapeshifter MONS_GLOWING_SHAPESHIFTER /*'@'*/
+killer_klown MONS_KILLER_KLOWN /*'@'*/
+vault_guard0 MONS_VAULT_GUARD /*'@'*/
+hell_knight MONS_HELL_KNIGHT /*'@'*/
+necromancer MONS_NECROMANCER /*'@'*/
+wizard MONS_WIZARD /*'@'*/
+human MONS_HUMAN /*'@'*/
+
+## Unique human NO_SPELLS first
+terence0 MONS_TERENCE /*'@'*/
+edmund0 MONS_EDMUND /*'@'*/
+donald MONS_DONALD /*'@'*/
+joseph0 MONS_JOSEPH /*'@'*/
+norbert MONS_NORBERT /*'@'*/
+agnes MONS_AGNES /*'@'*/
+maud0 MONS_MAUD /*'@'*/
+
+adolf MONS_ADOLF /*'@'*/
+duane0 MONS_DUANE /*'@'*/
+frances0 MONS_FRANCES /*'@'*/
+harold0 MONS_HAROLD /*'@'*/
+jozef0 MONS_JOZEF /*'@'*/
+norris2 MONS_NORRIS /*'@'*/
+rupert0 MONS_RUPERT /*'@'*/
+sigmund MONS_SIGMUND /*'@'*/
+wayne0 MONS_WAYNE /*'@'*/
+
+josephine MONS_JOSEPHINE /*'@'*/
+erica MONS_ERICA /*'@'*/
+francis MONS_FRANCIS /*'@'*/
+jessica MONS_JESSICA /*'@'*/
+louise MONS_LOUISE /*'@'*/
+margery MONS_MARGERY /*'@'*/
+michael MONS_MICHAEL /*'@'*/
+psyche MONS_PSYCHE /*'@'*/
+frederick MONS_FREDERICK
+
+##Angels
+angel MONS_ANGEL /*'A'*/
+daeva MONS_DAEVA /*'A'*/
+####nh-mon0/m/large_mimic MONS_SHUGGOTH /*'A'(LIGHTGREEN) A vile creature with an elongated head, spiked tail and wicked six-fingered claws. Its awesome strength is matched by its umbrage at being transported to this backwater dimension.
+
+## Beetles
+%subst asc/ch42
+boring_beetle MONS_BORING_BEETLE /*'B'*/
+boulder_beetle MONS_BOULDER_BEETLE /*'B'*/
+giant_beetle MONS_GIANT_BEETLE /*'B'*/
+program_bug MONS_PROGRAM_BUG /*'B'*/
+
+## Giants
+antaeus MONS_ANTAEUS /*'C'*/
+cyclops MONS_CYCLOPS /*'C'*/
+ettin MONS_ETTIN /*'C'*/
+fire_giant MONS_FIRE_GIANT /*'C'*/
+frost_giant MONS_FROST_GIANT /*'C'*/
+hill_giant MONS_HILL_GIANT /*'C'*/
+stone_giant MONS_STONE_GIANT /*'C'*/
+titan MONS_TITAN /*'C'*/
+polyphemus MONS_POLYPHEMUS
+
+## Dragons
+%subst asc/ch44
+dragon MONS_DRAGON /*'D'*/
+golden_dragon MONS_GOLDEN_DRAGON /*'D'*/
+hydra1 MONS_HYDRA /*'D'*/
+hydra2 MONS_HYDRA2
+hydra3 MONS_HYDRA3
+hydra4 MONS_HYDRA4
+hydra5 MONS_HYDRA5
+hydra5 MONS_HYDRA6
+hydra5 MONS_HYDRA7
+ice_dragon MONS_ICE_DRAGON /*'D'*/
+iron_dragon MONS_IRON_DRAGON /*'D'*/
+quicksilver_dragon MONS_QUICKSILVER_DRAGON /*'D'*/
+serpent_of_hell MONS_SERPENT_OF_HELL /*'D'*/
+shadow_dragon MONS_SHADOW_DRAGON /*'D'*/
+skeletal_dragon MONS_SKELETAL_DRAGON /*'D'*/
+storm_dragon MONS_STORM_DRAGON /*'D'*/
+swamp_dragon MONS_SWAMP_DRAGON /*'D'*/
+tiamat MONS_TIAMAT
+wyvern MONS_WYVERN /*'D'*/
+xtahua MONS_XTAHUA /*'D'*/
+
+## Efreet only
+efreet MONS_EFREET /*'E'*/
+
+## Frogs
+%subst asc/ch46
+%rim 0
+blink_frog MONS_BLINK_FROG /*'F'*/
+%rim 1
+giant_brown_frog MONS_GIANT_BROWN_FROG /*'F'*/
+giant_frog MONS_GIANT_FROG /*'F'*/
+spiny_frog MONS_SPINY_FROG /*'F'*/
+
+## Eyes
+%subst asc/ch47
+eye_of_devastation MONS_EYE_OF_DEVASTATION /*'G'*/
+eye_of_draining MONS_EYE_OF_DRAINING /*'G'*/
+giant_eyeball MONS_GIANT_EYEBALL /*'G'*/
+giant_orange_brain MONS_GIANT_ORANGE_BRAIN /*'G'*/
+giant_spore MONS_GIANT_SPORE /*'G'*/
+great_orb_of_eyes MONS_GREAT_ORB_OF_EYES /*'G'*/
+shining_eye MONS_SHINING_EYE /*'G'*/
+
+## Hybrids
+%subst asc/ch48
+griffon MONS_GRIFFON /*'H'*/
+hippogriff MONS_HIPPOGRIFF /*'H'*/
+sphinx MONS_SPHINX /*'H'*/
+
+## Ice beast only
+ice_beast MONS_ICE_BEAST /*'I'*/
+
+## Jellies
+%subst asc/ch4a
+acid_blob MONS_ACID_BLOB /*'J'*/
+azure_jelly MONS_AZURE_JELLY /*'J'*/
+brown_ooze MONS_BROWN_OOZE /*'J'*/
+death_ooze MONS_DEATH_OOZE /*'J'*/
+giant_amoeba MONS_GIANT_AMOEBA /*'J'*/
+jelly MONS_JELLY /*'J'*/
+jellyfish MONS_JELLYFISH /*'J'*/
+ooze MONS_OOZE /*'J'*/
+pulsating_lump MONS_PULSATING_LUMP /*'J'*/
+royal_jelly MONS_ROYAL_JELLY /*'J'*/
+slime_creature MONS_SLIME_CREATURE /*'J'*/
+
+## Kobolds
+%subst asc/ch4b
+big_kobold MONS_BIG_KOBOLD /*'K'*/
+kobold MONS_KOBOLD /*'K'*/
+kobold_demonologist MONS_KOBOLD_DEMONOLOGIST /*'K'*/
+
+## Liches
+%subst asc/ch4c
+ancient_lich MONS_ANCIENT_LICH /*'L'*/
+boris MONS_BORIS /*'L'*/
+lich MONS_LICH /*'L'*/
+
+## Mummies
+%subst asc/ch4d
+greater_mummy MONS_GREATER_MUMMY /*'M'*/
+guardian_mummy MONS_GUARDIAN_MUMMY /*'M'*/
+mummy MONS_MUMMY /*'M'*/
+mummy_priest MONS_MUMMY_PRIEST /*'M'*/
+
+## Nagas
+%subst asc/ch4e
+naga0 MONS_NAGA /*'N'*/
+greater_naga0 MONS_GREATER_NAGA /*'N'*/
+naga_warrior0 MONS_NAGA_WARRIOR /*'N'*/
+guardian_naga MONS_GUARDIAN_NAGA /*'N'*/
+naga_mage MONS_NAGA_MAGE /*'N'*/
+
+%subst asc/ch4f
+erolcha MONS_EROLCHA /*'O'*/
+ogre MONS_OGRE /*'O'*/
+ogre_mage MONS_OGRE_MAGE /*'O'*/
+two_headed_ogre MONS_TWO_HEADED_OGRE /*'O'*/
+
+%subst asc/ch50
+oklob_plant MONS_OKLOB_PLANT /*'P'*/
+plant MONS_PLANT /*'P'*/
+
+%subst asc/ch51
+queen_ant MONS_QUEEN_ANT /*'Q'*/
+queen_bee MONS_QUEEN_BEE /*'Q'*/
+
+%subst asc/ch52
+rakshasa MONS_RAKSHASA /*'R'*/
+rakshasa_fake MONS_RAKSHASA_FAKE /*'R'*/
+
+%subst asc/ch53
+black_snake MONS_BLACK_SNAKE /*'S'*/
+brown_snake MONS_BROWN_SNAKE /*'S'*/
+grey_snake MONS_GREY_SNAKE /*'S'*/
+lava_snake MONS_LAVA_SNAKE /*'S'*/
+salamander MONS_SALAMANDER /*'S'*/
+small_snake MONS_SMALL_SNAKE /*'S'*/
+snake MONS_SNAKE /*'S'*/
+yellow_snake MONS_YELLOW_SNAKE /*'S'*/
+
+%subst asc/ch54
+deep_troll MONS_DEEP_TROLL /*'T'*/
+iron_troll MONS_IRON_TROLL /*'T'*/
+rock_troll MONS_ROCK_TROLL /*'T'*/
+snorg MONS_SNORG /*'T'*/
+troll MONS_TROLL /*'T'*/
+
+%subst asc/ch55
+bear MONS_BEAR /*'U'*/
+black_bear MONS_BLACK_BEAR /*'U'*/
+grizzly_bear MONS_GRIZZLY_BEAR /*'U'*/
+polar_bear MONS_POLAR_BEAR /*'U'*/
+
+%subst asc/ch56
+vampire MONS_VAMPIRE /*'V'*/
+vampire_knight MONS_VAMPIRE_KNIGHT /*'V'*/
+vampire_mage MONS_VAMPIRE_MAGE /*'V'*/
+
+%subst asc/ch57
+freezing_wraith MONS_FREEZING_WRAITH /*'W'*/
+shadow_wraith MONS_SHADOW_WRAITH /*'W'*/
+spectral_thing MONS_SPECTRAL_THING /*'W'*/
+spectral_warrior MONS_SPECTRAL_WARRIOR /*'W'*/
+wight MONS_WIGHT /*'W'*/
+wraith MONS_WRAITH /*'W'*/
+
+%subst asc/ch58
+abomination_large MONS_ABOMINATION_LARGE /*'X'*/
+abomination_large1
+abomination_large2
+abomination_large3
+abomination_large4
+abomination_large5
+abomination_large6
+orb_guardian MONS_ORB_GUARDIAN /*'X'*/
+tentacled_monstrosity MONS_TENTACLED_MONSTROSITY /*'X'*/
+
+%subst asc/ch59
+death_yak MONS_DEATH_YAK /*'Y'*/
+sheep MONS_SHEEP /*'Y'*/
+yak MONS_YAK /*'Y'*/
+
+%subst asc/ch5a
+simulacrum_large MONS_SIMULACRUM_LARGE /*'Z'*/
+skeleton_large MONS_SKELETON_LARGE /*'Z'*/
+zombie_large MONS_ZOMBIE_LARGE /*'Z'*/
+#armour_mimic MONS_ARMOUR_MIMIC /*'['(BLACK) An apparently abandoned suit of finely-made armour, actually a vicious little beast in disguise.
+
+%subst asc/ch61
+giant_ant MONS_GIANT_ANT /*'a'*/
+giant_cockroach MONS_GIANT_COCKROACH /*'a'*/
+soldier_ant MONS_SOLDIER_ANT /*'a'*/
+
+%subst asc/ch62
+butterfly MONS_BUTTERFLY /*'b'*/
+butterfly1
+butterfly2
+butterfly3
+butterfly4
+butterfly5
+butterfly6
+giant_bat MONS_GIANT_BAT /*'b'*/
+
+%subst asc/ch63
+centaur MONS_CENTAUR /*'c'*/
+centaur_warrior MONS_CENTAUR_WARRIOR /*'c'*/
+yaktaur MONS_YAKTAUR /*'c'*/
+yaktaur_captain MONS_YAKTAUR_CAPTAIN /*'c'*/
+
+%subst asc/ch64
+firedrake MONS_FIREDRAKE /*'d'*/
+lindwurm MONS_LINDWURM /*'d'*/
+mottled_dragon MONS_MOTTLED_DRAGON /*'d'*/
+steam_dragon MONS_STEAM_DRAGON /*'d'*/
+swamp_drake MONS_SWAMP_DRAKE /*'d'*/
+death_drake MONS_DEATH_DRAKE /*'d'*/
+
+%subst asc/ch65
+elf MONS_ELF /*'e'*/
+deep_elf_fighter0 MONS_DEEP_ELF_FIGHTER /*'e'*/
+deep_elf_soldier0 MONS_DEEP_ELF_SOLDIER /*'e'*/
+deep_elf_knight0 MONS_DEEP_ELF_KNIGHT /*'e'*/
+deep_elf_mage MONS_DEEP_ELF_MAGE /*'e'*/
+deep_elf_sorcerer MONS_DEEP_ELF_SORCERER /*'e'*/
+deep_elf_conjurer MONS_DEEP_ELF_CONJURER /*'e'*/
+deep_elf_death_mage MONS_DEEP_ELF_DEATH_MAGE /*'e'*/
+deep_elf_demonologist MONS_DEEP_ELF_DEMONOLOGIST /*'e'*/
+deep_elf_summoner MONS_DEEP_ELF_SUMMONER /*'e'*/
+deep_elf_annihilator MONS_DEEP_ELF_ANNIHILATOR /*'e'*/
+deep_elf_priest MONS_DEEP_ELF_PRIEST /*'e'*/
+deep_elf_high_priest MONS_DEEP_ELF_HIGH_PRIEST /*'e'*/
+deep_elf_blademaster MONS_DEEP_ELF_BLADEMASTER
+deep_elf_master_archer MONS_DEEP_ELF_MASTER_ARCHER
+
+%subst asc/ch66
+fungus MONS_FUNGUS /*'f'*/
+wandering_mushroom MONS_WANDERING_MUSHROOM /*'f'*/
+
+%subst asc/ch67
+goblin0 MONS_GOBLIN /*'g'*/
+hobgoblin0 MONS_HOBGOBLIN /*'g'*/
+gnoll0 MONS_GNOLL /*'g'*/
+ijyb0 MONS_IJYB /*'g'*/
+boggart MONS_BOGGART /*'g'*/
+gargoyle MONS_GARGOYLE /*'g'*/
+metal_gargoyle MONS_METAL_GARGOYLE /*'g'*/
+molten_gargoyle MONS_MOLTEN_GARGOYLE /*'g'*/
+
+%subst asc/ch68
+hell_hog MONS_HELL_HOG /*'h'*/
+hell_hound MONS_HELL_HOUND /*'h'*/
+hog MONS_HOG /*'h'*/
+hound MONS_HOUND /*'h'*/
+warg MONS_WARG /*'h'*/
+war_dog MONS_WAR_DOG /*'h'*/
+wolf MONS_WOLF /*'h'*/
+
+%subst asc/ch6a
+jackal MONS_JACKAL /*'j'*/
+
+%subst asc/ch6b
+bumblebee MONS_BUMBLEBEE /*'k'*/
+killer_bee MONS_KILLER_BEE /*'k'*/
+
+%subst asc/ch6c
+giant_gecko MONS_GIANT_GECKO /*'l'*/
+giant_iguana MONS_GIANT_IGUANA /*'l'*/
+giant_lizard MONS_GIANT_LIZARD /*'l'*/
+giant_newt MONS_GIANT_NEWT /*'l'*/
+gila_monster MONS_GILA_MONSTER /*'l'*/
+komodo_dragon MONS_KOMODO_DRAGON /*'l'*/
+
+%subst asc/ch6d
+elephant_slug MONS_ELEPHANT_SLUG /*'m'*/
+giant_slug MONS_GIANT_SLUG /*'m'*/
+giant_snail MONS_GIANT_SNAIL /*'m'*/
+manticore MONS_MANTICORE /*'m'*/
+minotaur MONS_MINOTAUR /*'m'*/
+
+%subst asc/ch6e
+ghoul MONS_GHOUL /*'n'*/
+necrophage MONS_NECROPHAGE /*'n'*/
+rotting_hulk MONS_ROTTING_HULK /*'n'*/
+
+%subst asc/ch6f
+orc0 MONS_ORC /*'o'*/
+orc_warrior0 MONS_ORC_WARRIOR /*'o'*/
+orc_knight0 MONS_ORC_KNIGHT /*'o'*/
+orc_warlord0 MONS_ORC_WARLORD /*'o'*/
+blork_the_orc0 MONS_BLORK_THE_ORC /*'o'*/
+urug0 MONS_URUG /*'o'*/
+orc_priest MONS_ORC_PRIEST /*'o'*/
+orc_high_priest MONS_ORC_HIGH_PRIEST /*'o'*/
+orc_sorcerer MONS_ORC_SORCERER /*'o'*/
+orc_wizard MONS_ORC_WIZARD /*'o'*/
+
+%subst asc/ch70
+flayed_ghost MONS_FLAYED_GHOST /*'p'*/
+hungry_ghost MONS_HUNGRY_GHOST /*'p'*/
+%rim 0
+insubstantial_wisp MONS_INSUBSTANTIAL_WISP /*'p'*/
+phantom MONS_PHANTOM /*'p'*/
+ghost MONS_PLAYER_GHOST /*'p'*/
+%rim 1
+
+quasit MONS_QUASIT /*'q'*/
+
+%subst asc/ch72
+green_rat MONS_GREEN_RAT /*'r'*/
+grey_rat MONS_GREY_RAT /*'r'*/
+orange_rat MONS_ORANGE_RAT /*'r'*/
+quokka MONS_QUOKKA /*'r'*/
+rat MONS_RAT /*'r'*/
+
+%subst asc/ch73
+giant_centipede MONS_GIANT_CENTIPEDE /*'s'*/
+giant_mite MONS_GIANT_MITE /*'s'*/
+redback MONS_REDBACK /*'s'*/
+scorpion MONS_SCORPION /*'s'*/
+wolf_spider MONS_WOLF_SPIDER /*'s'*/
+
+%subst asc/ch75
+ugly_thing MONS_UGLY_THING /*'u'*/
+very_ugly_thing MONS_VERY_UGLY_THING /*'u'*/
+
+%subst asc/ch76
+air_elemental MONS_AIR_ELEMENTAL /*'v'*/
+fire_vortex MONS_FIRE_VORTEX /*'v'*/
+spatial_vortex MONS_SPATIAL_VORTEX /*'v'*/
+
+%subst asc/ch77
+killer_bee_larva MONS_ANT_LARVA /*'w'*/
+brain_worm MONS_BRAIN_WORM /*'w'*/
+killer_bee_larva MONS_KILLER_BEE_LARVA /*'w'*/
+lava_worm MONS_LAVA_WORM /*'w'*/
+spiny_worm MONS_SPINY_WORM /*'w'*/
+swamp_worm MONS_SWAMP_WORM /*'w'*/
+worm MONS_WORM /*'w'*/
+
+%subst asc/ch78
+abomination_small MONS_ABOMINATION_SMALL /*'x'*/
+unseen_horror MONS_UNSEEN_HORROR /*'x'*/
+
+%subst asc/ch79
+giant_blowfly MONS_GIANT_BLOWFLY /*'y'*/
+giant_mosquito MONS_GIANT_MOSQUITO /*'y'*/
+moth_of_wrath MONS_MOTH_OF_WRATH /*'y'*/
+red_wasp MONS_RED_WASP /*'y'*/
+yellow_wasp MONS_YELLOW_WASP /*'y'*/
+
+%subst asc/ch7a
+curse_skull MONS_CURSE_SKULL /*'z'*/
+curse_toe MONS_CURSE_TOE /*'z'*/
+flying_skull MONS_FLYING_SKULL /*'z'*/
+simulacrum_small MONS_SIMULACRUM_SMALL /*'z'*/
+skeletal_warrior0 MONS_SKELETAL_WARRIOR /*'z'*/
+skeleton_small MONS_SKELETON_SMALL /*'z'*/
+zombie_small MONS_ZOMBIE_SMALL /*'z'*/
+murray MONS_MURRAY
+
+water_elemental MONS_WATER_ELEMENTAL /*'{'*/
+####nh-mon0/m/large_mimic MONS_MOLLUSC_LORD
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_large.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_large.bmp
new file mode 100644
index 0000000000..d7cb68e063
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_large.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_large1.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_large1.bmp
new file mode 100644
index 0000000000..3c7f565422
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_large1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_large2.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_large2.bmp
new file mode 100644
index 0000000000..25883e3661
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_large2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_large3.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_large3.bmp
new file mode 100644
index 0000000000..0e728d267f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_large3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_large4.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_large4.bmp
new file mode 100644
index 0000000000..2880b0cdba
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_large4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_large5.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_large5.bmp
new file mode 100644
index 0000000000..a63d555aa5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_large5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_large6.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_large6.bmp
new file mode 100644
index 0000000000..da07a7559c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_large6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/abomination_small.bmp b/crawl-ref/source/rltiles/dc-mon/abomination_small.bmp
new file mode 100644
index 0000000000..549d139e92
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/abomination_small.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/acid_blob.bmp b/crawl-ref/source/rltiles/dc-mon/acid_blob.bmp
new file mode 100644
index 0000000000..6695b637f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/acid_blob.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/adolf.bmp b/crawl-ref/source/rltiles/dc-mon/adolf.bmp
new file mode 100644
index 0000000000..eb3112e46f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/adolf.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/agnes.bmp b/crawl-ref/source/rltiles/dc-mon/agnes.bmp
new file mode 100644
index 0000000000..6747323d68
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/agnes.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/air_elemental.bmp b/crawl-ref/source/rltiles/dc-mon/air_elemental.bmp
new file mode 100644
index 0000000000..59af21aa0f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/air_elemental.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ancient_lich.bmp b/crawl-ref/source/rltiles/dc-mon/ancient_lich.bmp
new file mode 100644
index 0000000000..aac8f6bcd4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ancient_lich.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/angel.bmp b/crawl-ref/source/rltiles/dc-mon/angel.bmp
new file mode 100644
index 0000000000..1c0453de85
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/angel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/antaeus.bmp b/crawl-ref/source/rltiles/dc-mon/antaeus.bmp
new file mode 100644
index 0000000000..6b8833d322
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/antaeus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/asmodeus.bmp b/crawl-ref/source/rltiles/dc-mon/asmodeus.bmp
new file mode 100644
index 0000000000..c7130d52f0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/asmodeus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/azure_jelly.bmp b/crawl-ref/source/rltiles/dc-mon/azure_jelly.bmp
new file mode 100644
index 0000000000..463805a30c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/azure_jelly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ball_lightning.bmp b/crawl-ref/source/rltiles/dc-mon/ball_lightning.bmp
new file mode 100644
index 0000000000..70bd18934d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ball_lightning.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/balrug.bmp b/crawl-ref/source/rltiles/dc-mon/balrug.bmp
new file mode 100644
index 0000000000..cb88b95142
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/balrug.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/bear.bmp b/crawl-ref/source/rltiles/dc-mon/bear.bmp
new file mode 100644
index 0000000000..ccd20b0a93
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/bear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/beast.bmp b/crawl-ref/source/rltiles/dc-mon/beast.bmp
new file mode 100644
index 0000000000..6db120c352
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/beast.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/big_fish.bmp b/crawl-ref/source/rltiles/dc-mon/big_fish.bmp
new file mode 100644
index 0000000000..96575bc9da
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/big_fish.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/big_kobold.bmp b/crawl-ref/source/rltiles/dc-mon/big_kobold.bmp
new file mode 100644
index 0000000000..286bdfb768
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/big_kobold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/black_bear.bmp b/crawl-ref/source/rltiles/dc-mon/black_bear.bmp
new file mode 100644
index 0000000000..90588f719d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/black_bear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/black_snake.bmp b/crawl-ref/source/rltiles/dc-mon/black_snake.bmp
new file mode 100644
index 0000000000..b21d17d7ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/black_snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/blink_frog.bmp b/crawl-ref/source/rltiles/dc-mon/blink_frog.bmp
new file mode 100644
index 0000000000..bbf88c5eeb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/blink_frog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/blork_the_orc0.bmp b/crawl-ref/source/rltiles/dc-mon/blork_the_orc0.bmp
new file mode 100644
index 0000000000..0cd7bc70b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/blork_the_orc0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/blue_death.bmp b/crawl-ref/source/rltiles/dc-mon/blue_death.bmp
new file mode 100644
index 0000000000..d3485be982
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/blue_death.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/blue_devil.bmp b/crawl-ref/source/rltiles/dc-mon/blue_devil.bmp
new file mode 100644
index 0000000000..a85b5188a0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/blue_devil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/boggart.bmp b/crawl-ref/source/rltiles/dc-mon/boggart.bmp
new file mode 100644
index 0000000000..2aa363aead
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/boggart.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/boring_beetle.bmp b/crawl-ref/source/rltiles/dc-mon/boring_beetle.bmp
new file mode 100644
index 0000000000..ad6a7cda8a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/boring_beetle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/boris.bmp b/crawl-ref/source/rltiles/dc-mon/boris.bmp
new file mode 100644
index 0000000000..d19c690dbb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/boris.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/boulder_beetle.bmp b/crawl-ref/source/rltiles/dc-mon/boulder_beetle.bmp
new file mode 100644
index 0000000000..1a92426f25
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/boulder_beetle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/brain_worm.bmp b/crawl-ref/source/rltiles/dc-mon/brain_worm.bmp
new file mode 100644
index 0000000000..541551ad43
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/brain_worm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/brown_ooze.bmp b/crawl-ref/source/rltiles/dc-mon/brown_ooze.bmp
new file mode 100644
index 0000000000..c9858c9072
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/brown_ooze.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/brown_snake.bmp b/crawl-ref/source/rltiles/dc-mon/brown_snake.bmp
new file mode 100644
index 0000000000..e767cbed0f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/brown_snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/bumblebee.bmp b/crawl-ref/source/rltiles/dc-mon/bumblebee.bmp
new file mode 100644
index 0000000000..46fa876c20
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/bumblebee.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/butterfly.bmp b/crawl-ref/source/rltiles/dc-mon/butterfly.bmp
new file mode 100644
index 0000000000..b1252aff7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/butterfly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/butterfly1.bmp b/crawl-ref/source/rltiles/dc-mon/butterfly1.bmp
new file mode 100644
index 0000000000..24ed7491a1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/butterfly1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/butterfly2.bmp b/crawl-ref/source/rltiles/dc-mon/butterfly2.bmp
new file mode 100644
index 0000000000..5fd1f80186
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/butterfly2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/butterfly3.bmp b/crawl-ref/source/rltiles/dc-mon/butterfly3.bmp
new file mode 100644
index 0000000000..a5f6e811ad
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/butterfly3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/butterfly4.bmp b/crawl-ref/source/rltiles/dc-mon/butterfly4.bmp
new file mode 100644
index 0000000000..d69347d8bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/butterfly4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/butterfly5.bmp b/crawl-ref/source/rltiles/dc-mon/butterfly5.bmp
new file mode 100644
index 0000000000..cbc68e1518
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/butterfly5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/butterfly6.bmp b/crawl-ref/source/rltiles/dc-mon/butterfly6.bmp
new file mode 100644
index 0000000000..b458b3bc33
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/butterfly6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/cacodemon.bmp b/crawl-ref/source/rltiles/dc-mon/cacodemon.bmp
new file mode 100644
index 0000000000..13b481206a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/cacodemon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/centaur.bmp b/crawl-ref/source/rltiles/dc-mon/centaur.bmp
new file mode 100644
index 0000000000..ed3d8272d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/centaur.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/centaur_warrior.bmp b/crawl-ref/source/rltiles/dc-mon/centaur_warrior.bmp
new file mode 100644
index 0000000000..ebd5b7b1b0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/centaur_warrior.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/cerebov.bmp b/crawl-ref/source/rltiles/dc-mon/cerebov.bmp
new file mode 100644
index 0000000000..bea3d85a78
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/cerebov.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/clay_golem.bmp b/crawl-ref/source/rltiles/dc-mon/clay_golem.bmp
new file mode 100644
index 0000000000..73f43e91b0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/clay_golem.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/crystal_golem.bmp b/crawl-ref/source/rltiles/dc-mon/crystal_golem.bmp
new file mode 100644
index 0000000000..d9e8e99596
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/crystal_golem.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/curse_skull.bmp b/crawl-ref/source/rltiles/dc-mon/curse_skull.bmp
new file mode 100644
index 0000000000..6752e62028
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/curse_skull.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/curse_toe.bmp b/crawl-ref/source/rltiles/dc-mon/curse_toe.bmp
new file mode 100644
index 0000000000..af1c125292
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/curse_toe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/cyclops.bmp b/crawl-ref/source/rltiles/dc-mon/cyclops.bmp
new file mode 100644
index 0000000000..c1fece18ef
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/cyclops.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/daeva.bmp b/crawl-ref/source/rltiles/dc-mon/daeva.bmp
new file mode 100644
index 0000000000..e4b1bc6efd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/daeva.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/death_cob.bmp b/crawl-ref/source/rltiles/dc-mon/death_cob.bmp
new file mode 100644
index 0000000000..1c70aa0907
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/death_cob.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/death_drake.bmp b/crawl-ref/source/rltiles/dc-mon/death_drake.bmp
new file mode 100644
index 0000000000..8975576428
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/death_drake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/death_ooze.bmp b/crawl-ref/source/rltiles/dc-mon/death_ooze.bmp
new file mode 100644
index 0000000000..b649200621
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/death_ooze.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/death_yak.bmp b/crawl-ref/source/rltiles/dc-mon/death_yak.bmp
new file mode 100644
index 0000000000..cbc0f78910
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/death_yak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_annihilator.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_annihilator.bmp
new file mode 100644
index 0000000000..cf21e1a453
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_annihilator.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_blademaster.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_blademaster.bmp
new file mode 100644
index 0000000000..32647f44fe
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_blademaster.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_conjurer.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_conjurer.bmp
new file mode 100644
index 0000000000..045a35aab1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_conjurer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_death_mage.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_death_mage.bmp
new file mode 100644
index 0000000000..16e95786ef
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_death_mage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_demonologist.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_demonologist.bmp
new file mode 100644
index 0000000000..db6e41f7a5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_demonologist.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_fighter0.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_fighter0.bmp
new file mode 100644
index 0000000000..0e9f910e97
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_fighter0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_high_priest.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_high_priest.bmp
new file mode 100644
index 0000000000..85430fc984
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_high_priest.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_knight0.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_knight0.bmp
new file mode 100644
index 0000000000..858bb25da3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_knight0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_mage.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_mage.bmp
new file mode 100644
index 0000000000..4b1dcb7d38
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_mage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_master_archer.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_master_archer.bmp
new file mode 100644
index 0000000000..b7b2b4e6c2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_master_archer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_priest.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_priest.bmp
new file mode 100644
index 0000000000..82b0b2346d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_priest.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_soldier0.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_soldier0.bmp
new file mode 100644
index 0000000000..ece1f3264c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_soldier0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_sorcerer.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_sorcerer.bmp
new file mode 100644
index 0000000000..5b78b8b2d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_sorcerer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_elf_summoner.bmp b/crawl-ref/source/rltiles/dc-mon/deep_elf_summoner.bmp
new file mode 100644
index 0000000000..381e15e458
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_elf_summoner.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/deep_troll.bmp b/crawl-ref/source/rltiles/dc-mon/deep_troll.bmp
new file mode 100644
index 0000000000..a0b5c60d65
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/deep_troll.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/demonic_crawler.bmp b/crawl-ref/source/rltiles/dc-mon/demonic_crawler.bmp
new file mode 100644
index 0000000000..468ba5d0ac
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/demonic_crawler.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/dispater.bmp b/crawl-ref/source/rltiles/dc-mon/dispater.bmp
new file mode 100644
index 0000000000..1a0a253c7e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/dispater.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/donald.bmp b/crawl-ref/source/rltiles/dc-mon/donald.bmp
new file mode 100644
index 0000000000..0d1c2b0025
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/donald.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/dragon.bmp b/crawl-ref/source/rltiles/dc-mon/dragon.bmp
new file mode 100644
index 0000000000..0ce40ca49f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/duane0.bmp b/crawl-ref/source/rltiles/dc-mon/duane0.bmp
new file mode 100644
index 0000000000..16940dea10
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/duane0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/earth_elemental.bmp b/crawl-ref/source/rltiles/dc-mon/earth_elemental.bmp
new file mode 100644
index 0000000000..e14c1a9b88
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/earth_elemental.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/edmund0.bmp b/crawl-ref/source/rltiles/dc-mon/edmund0.bmp
new file mode 100644
index 0000000000..9f839d1fb5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/edmund0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/efreet.bmp b/crawl-ref/source/rltiles/dc-mon/efreet.bmp
new file mode 100644
index 0000000000..c69e7eb706
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/efreet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/electric_golem.bmp b/crawl-ref/source/rltiles/dc-mon/electric_golem.bmp
new file mode 100644
index 0000000000..e910674cb4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/electric_golem.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/electrical_eel.bmp b/crawl-ref/source/rltiles/dc-mon/electrical_eel.bmp
new file mode 100644
index 0000000000..46868bed7f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/electrical_eel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/elephant_slug.bmp b/crawl-ref/source/rltiles/dc-mon/elephant_slug.bmp
new file mode 100644
index 0000000000..d186f5c90b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/elephant_slug.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/elf.bmp b/crawl-ref/source/rltiles/dc-mon/elf.bmp
new file mode 100644
index 0000000000..4863f0f0f9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/elf.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ereshkigal.bmp b/crawl-ref/source/rltiles/dc-mon/ereshkigal.bmp
new file mode 100644
index 0000000000..816b75b815
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ereshkigal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/erica.bmp b/crawl-ref/source/rltiles/dc-mon/erica.bmp
new file mode 100644
index 0000000000..e662100573
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/erica.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/erolcha.bmp b/crawl-ref/source/rltiles/dc-mon/erolcha.bmp
new file mode 100644
index 0000000000..3f7c02ea96
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/erolcha.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ettin.bmp b/crawl-ref/source/rltiles/dc-mon/ettin.bmp
new file mode 100644
index 0000000000..41a5336f69
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ettin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/executioner.bmp b/crawl-ref/source/rltiles/dc-mon/executioner.bmp
new file mode 100644
index 0000000000..bb83e1e8a2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/executioner.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/eye_of_devastation.bmp b/crawl-ref/source/rltiles/dc-mon/eye_of_devastation.bmp
new file mode 100644
index 0000000000..cb9d2563da
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/eye_of_devastation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/eye_of_draining.bmp b/crawl-ref/source/rltiles/dc-mon/eye_of_draining.bmp
new file mode 100644
index 0000000000..3dcecd20ff
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/eye_of_draining.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/fiend.bmp b/crawl-ref/source/rltiles/dc-mon/fiend.bmp
new file mode 100644
index 0000000000..e225f2d9ae
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/fiend.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/fire_elemental.bmp b/crawl-ref/source/rltiles/dc-mon/fire_elemental.bmp
new file mode 100644
index 0000000000..c41cfae4ca
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/fire_elemental.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/fire_giant.bmp b/crawl-ref/source/rltiles/dc-mon/fire_giant.bmp
new file mode 100644
index 0000000000..712ff6fb31
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/fire_giant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/fire_vortex.bmp b/crawl-ref/source/rltiles/dc-mon/fire_vortex.bmp
new file mode 100644
index 0000000000..524b4cf693
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/fire_vortex.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/firedrake.bmp b/crawl-ref/source/rltiles/dc-mon/firedrake.bmp
new file mode 100644
index 0000000000..f6c42fb7c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/firedrake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/flayed_ghost.bmp b/crawl-ref/source/rltiles/dc-mon/flayed_ghost.bmp
new file mode 100644
index 0000000000..fd37de1e60
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/flayed_ghost.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/flying_skull.bmp b/crawl-ref/source/rltiles/dc-mon/flying_skull.bmp
new file mode 100644
index 0000000000..58a9e27127
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/flying_skull.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/frances0.bmp b/crawl-ref/source/rltiles/dc-mon/frances0.bmp
new file mode 100644
index 0000000000..59153d02c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/frances0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/francis.bmp b/crawl-ref/source/rltiles/dc-mon/francis.bmp
new file mode 100644
index 0000000000..f2a6062c4b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/francis.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/frederick.bmp b/crawl-ref/source/rltiles/dc-mon/frederick.bmp
new file mode 100644
index 0000000000..1b98c6ef48
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/frederick.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/freezing_wraith.bmp b/crawl-ref/source/rltiles/dc-mon/freezing_wraith.bmp
new file mode 100644
index 0000000000..5b7b879368
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/freezing_wraith.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/frost_giant.bmp b/crawl-ref/source/rltiles/dc-mon/frost_giant.bmp
new file mode 100644
index 0000000000..582939620f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/frost_giant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/fungus.bmp b/crawl-ref/source/rltiles/dc-mon/fungus.bmp
new file mode 100644
index 0000000000..38d2cab62c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/fungus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/gargoyle.bmp b/crawl-ref/source/rltiles/dc-mon/gargoyle.bmp
new file mode 100644
index 0000000000..d0b9ddca3b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/gargoyle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/geryon.bmp b/crawl-ref/source/rltiles/dc-mon/geryon.bmp
new file mode 100644
index 0000000000..8760f68ed1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/geryon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ghost.bmp b/crawl-ref/source/rltiles/dc-mon/ghost.bmp
new file mode 100644
index 0000000000..e44022c9c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ghost.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ghoul.bmp b/crawl-ref/source/rltiles/dc-mon/ghoul.bmp
new file mode 100644
index 0000000000..0296eeb7d5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ghoul.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_amoeba.bmp b/crawl-ref/source/rltiles/dc-mon/giant_amoeba.bmp
new file mode 100644
index 0000000000..1958f5d647
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_amoeba.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_ant.bmp b/crawl-ref/source/rltiles/dc-mon/giant_ant.bmp
new file mode 100644
index 0000000000..ae045dc5a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_ant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_bat.bmp b/crawl-ref/source/rltiles/dc-mon/giant_bat.bmp
new file mode 100644
index 0000000000..2e9c8b6d24
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_bat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_beetle.bmp b/crawl-ref/source/rltiles/dc-mon/giant_beetle.bmp
new file mode 100644
index 0000000000..04af5aee34
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_beetle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_blowfly.bmp b/crawl-ref/source/rltiles/dc-mon/giant_blowfly.bmp
new file mode 100644
index 0000000000..3aa9d41be5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_blowfly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_brown_frog.bmp b/crawl-ref/source/rltiles/dc-mon/giant_brown_frog.bmp
new file mode 100644
index 0000000000..c0cbe97d0c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_brown_frog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_centipede.bmp b/crawl-ref/source/rltiles/dc-mon/giant_centipede.bmp
new file mode 100644
index 0000000000..5ad7ed82b6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_centipede.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_cockroach.bmp b/crawl-ref/source/rltiles/dc-mon/giant_cockroach.bmp
new file mode 100644
index 0000000000..5980b2a233
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_cockroach.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_eyeball.bmp b/crawl-ref/source/rltiles/dc-mon/giant_eyeball.bmp
new file mode 100644
index 0000000000..6cea257327
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_eyeball.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_frog.bmp b/crawl-ref/source/rltiles/dc-mon/giant_frog.bmp
new file mode 100644
index 0000000000..b1444972db
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_frog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_gecko.bmp b/crawl-ref/source/rltiles/dc-mon/giant_gecko.bmp
new file mode 100644
index 0000000000..fbae33704c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_gecko.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_goldfish.bmp b/crawl-ref/source/rltiles/dc-mon/giant_goldfish.bmp
new file mode 100644
index 0000000000..2fb7c79300
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_goldfish.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_iguana.bmp b/crawl-ref/source/rltiles/dc-mon/giant_iguana.bmp
new file mode 100644
index 0000000000..0e648517fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_iguana.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_lizard.bmp b/crawl-ref/source/rltiles/dc-mon/giant_lizard.bmp
new file mode 100644
index 0000000000..9cf3e0737e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_lizard.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_mite.bmp b/crawl-ref/source/rltiles/dc-mon/giant_mite.bmp
new file mode 100644
index 0000000000..39feb5fe38
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_mite.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_mosquito.bmp b/crawl-ref/source/rltiles/dc-mon/giant_mosquito.bmp
new file mode 100644
index 0000000000..4efb7f58fd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_mosquito.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_newt.bmp b/crawl-ref/source/rltiles/dc-mon/giant_newt.bmp
new file mode 100644
index 0000000000..68770d2127
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_newt.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_orange_brain.bmp b/crawl-ref/source/rltiles/dc-mon/giant_orange_brain.bmp
new file mode 100644
index 0000000000..bf2fe2317c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_orange_brain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_slug.bmp b/crawl-ref/source/rltiles/dc-mon/giant_slug.bmp
new file mode 100644
index 0000000000..75a167df86
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_slug.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_snail.bmp b/crawl-ref/source/rltiles/dc-mon/giant_snail.bmp
new file mode 100644
index 0000000000..18a3d0b398
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_snail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/giant_spore.bmp b/crawl-ref/source/rltiles/dc-mon/giant_spore.bmp
new file mode 100644
index 0000000000..998b0cbaa0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/giant_spore.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/gila_monster.bmp b/crawl-ref/source/rltiles/dc-mon/gila_monster.bmp
new file mode 100644
index 0000000000..11fd4b7e00
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/gila_monster.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/gloorx_vloq.bmp b/crawl-ref/source/rltiles/dc-mon/gloorx_vloq.bmp
new file mode 100644
index 0000000000..b81991079a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/gloorx_vloq.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/glowing_shapeshifter.bmp b/crawl-ref/source/rltiles/dc-mon/glowing_shapeshifter.bmp
new file mode 100644
index 0000000000..fad8e18a0d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/glowing_shapeshifter.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/gnoll0.bmp b/crawl-ref/source/rltiles/dc-mon/gnoll0.bmp
new file mode 100644
index 0000000000..f323b2413c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/gnoll0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/goblin0.bmp b/crawl-ref/source/rltiles/dc-mon/goblin0.bmp
new file mode 100644
index 0000000000..48e6afa071
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/goblin0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/golden_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/golden_dragon.bmp
new file mode 100644
index 0000000000..59543306e1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/golden_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/great_orb_of_eyes.bmp b/crawl-ref/source/rltiles/dc-mon/great_orb_of_eyes.bmp
new file mode 100644
index 0000000000..160f3bb77e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/great_orb_of_eyes.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/greater_mummy.bmp b/crawl-ref/source/rltiles/dc-mon/greater_mummy.bmp
new file mode 100644
index 0000000000..acd7580efe
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/greater_mummy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/greater_naga0.bmp b/crawl-ref/source/rltiles/dc-mon/greater_naga0.bmp
new file mode 100644
index 0000000000..da206dd4ed
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/greater_naga0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/green_death.bmp b/crawl-ref/source/rltiles/dc-mon/green_death.bmp
new file mode 100644
index 0000000000..d0946edaa2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/green_death.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/green_rat.bmp b/crawl-ref/source/rltiles/dc-mon/green_rat.bmp
new file mode 100644
index 0000000000..660253ce71
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/green_rat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/grey_rat.bmp b/crawl-ref/source/rltiles/dc-mon/grey_rat.bmp
new file mode 100644
index 0000000000..bf76049d32
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/grey_rat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/grey_snake.bmp b/crawl-ref/source/rltiles/dc-mon/grey_snake.bmp
new file mode 100644
index 0000000000..6c2eda226b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/grey_snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/griffon.bmp b/crawl-ref/source/rltiles/dc-mon/griffon.bmp
new file mode 100644
index 0000000000..78e0d7a118
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/griffon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/grizzly_bear.bmp b/crawl-ref/source/rltiles/dc-mon/grizzly_bear.bmp
new file mode 100644
index 0000000000..a5e3b0de6b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/grizzly_bear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/guardian_mummy.bmp b/crawl-ref/source/rltiles/dc-mon/guardian_mummy.bmp
new file mode 100644
index 0000000000..b7baed536b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/guardian_mummy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/guardian_naga.bmp b/crawl-ref/source/rltiles/dc-mon/guardian_naga.bmp
new file mode 100644
index 0000000000..20bc6b5e73
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/guardian_naga.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hairy_devil.bmp b/crawl-ref/source/rltiles/dc-mon/hairy_devil.bmp
new file mode 100644
index 0000000000..a3191fd97c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hairy_devil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/harold0.bmp b/crawl-ref/source/rltiles/dc-mon/harold0.bmp
new file mode 100644
index 0000000000..78fa252d4c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/harold0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hell_hog.bmp b/crawl-ref/source/rltiles/dc-mon/hell_hog.bmp
new file mode 100644
index 0000000000..30b5e4f573
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hell_hog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hell_hound.bmp b/crawl-ref/source/rltiles/dc-mon/hell_hound.bmp
new file mode 100644
index 0000000000..79db71ca5e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hell_hound.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hell_knight.bmp b/crawl-ref/source/rltiles/dc-mon/hell_knight.bmp
new file mode 100644
index 0000000000..870bb32443
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hell_knight.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hellion.bmp b/crawl-ref/source/rltiles/dc-mon/hellion.bmp
new file mode 100644
index 0000000000..712919b059
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hellion.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hellwing.bmp b/crawl-ref/source/rltiles/dc-mon/hellwing.bmp
new file mode 100644
index 0000000000..f2cae52b7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hellwing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hill_giant.bmp b/crawl-ref/source/rltiles/dc-mon/hill_giant.bmp
new file mode 100644
index 0000000000..1e6b7d2fcf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hill_giant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hippogriff.bmp b/crawl-ref/source/rltiles/dc-mon/hippogriff.bmp
new file mode 100644
index 0000000000..408ef291d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hippogriff.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hobgoblin0.bmp b/crawl-ref/source/rltiles/dc-mon/hobgoblin0.bmp
new file mode 100644
index 0000000000..de1b31be44
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hobgoblin0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hog.bmp b/crawl-ref/source/rltiles/dc-mon/hog.bmp
new file mode 100644
index 0000000000..7fc0b4a4c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hound.bmp b/crawl-ref/source/rltiles/dc-mon/hound.bmp
new file mode 100644
index 0000000000..0f70c8ab65
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hound.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/human.bmp b/crawl-ref/source/rltiles/dc-mon/human.bmp
new file mode 100644
index 0000000000..6c1bf565e4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/human.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hungry_ghost.bmp b/crawl-ref/source/rltiles/dc-mon/hungry_ghost.bmp
new file mode 100644
index 0000000000..6ee769033c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hungry_ghost.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hydra1.bmp b/crawl-ref/source/rltiles/dc-mon/hydra1.bmp
new file mode 100644
index 0000000000..ee5418af60
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hydra1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hydra2.bmp b/crawl-ref/source/rltiles/dc-mon/hydra2.bmp
new file mode 100644
index 0000000000..40589e817c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hydra2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hydra3.bmp b/crawl-ref/source/rltiles/dc-mon/hydra3.bmp
new file mode 100644
index 0000000000..c77b1b62e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hydra3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hydra4.bmp b/crawl-ref/source/rltiles/dc-mon/hydra4.bmp
new file mode 100644
index 0000000000..58cb6128d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hydra4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/hydra5.bmp b/crawl-ref/source/rltiles/dc-mon/hydra5.bmp
new file mode 100644
index 0000000000..cda6e1f00b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/hydra5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ice_beast.bmp b/crawl-ref/source/rltiles/dc-mon/ice_beast.bmp
new file mode 100644
index 0000000000..7eca84b08d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ice_beast.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ice_devil.bmp b/crawl-ref/source/rltiles/dc-mon/ice_devil.bmp
new file mode 100644
index 0000000000..5ec6496298
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ice_devil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ice_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/ice_dragon.bmp
new file mode 100644
index 0000000000..7d3561ebcb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ice_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ice_fiend.bmp b/crawl-ref/source/rltiles/dc-mon/ice_fiend.bmp
new file mode 100644
index 0000000000..8f7720bad3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ice_fiend.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ijyb0.bmp b/crawl-ref/source/rltiles/dc-mon/ijyb0.bmp
new file mode 100644
index 0000000000..d7bec517b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ijyb0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/imp.bmp b/crawl-ref/source/rltiles/dc-mon/imp.bmp
new file mode 100644
index 0000000000..43b22bd27e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/imp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/insubstantial_wisp.bmp b/crawl-ref/source/rltiles/dc-mon/insubstantial_wisp.bmp
new file mode 100644
index 0000000000..48a5bb5632
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/insubstantial_wisp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/iron_devil.bmp b/crawl-ref/source/rltiles/dc-mon/iron_devil.bmp
new file mode 100644
index 0000000000..c8ab53b201
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/iron_devil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/iron_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/iron_dragon.bmp
new file mode 100644
index 0000000000..7d7a359dc4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/iron_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/iron_golem.bmp b/crawl-ref/source/rltiles/dc-mon/iron_golem.bmp
new file mode 100644
index 0000000000..cf16aab309
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/iron_golem.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/iron_troll.bmp b/crawl-ref/source/rltiles/dc-mon/iron_troll.bmp
new file mode 100644
index 0000000000..2a3ed78686
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/iron_troll.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/jackal.bmp b/crawl-ref/source/rltiles/dc-mon/jackal.bmp
new file mode 100644
index 0000000000..1d33af2b3c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/jackal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/jelly.bmp b/crawl-ref/source/rltiles/dc-mon/jelly.bmp
new file mode 100644
index 0000000000..667408dc64
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/jelly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/jellyfish.bmp b/crawl-ref/source/rltiles/dc-mon/jellyfish.bmp
new file mode 100644
index 0000000000..6587b5cf87
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/jellyfish.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/jessica.bmp b/crawl-ref/source/rltiles/dc-mon/jessica.bmp
new file mode 100644
index 0000000000..718335c331
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/jessica.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/joseph0.bmp b/crawl-ref/source/rltiles/dc-mon/joseph0.bmp
new file mode 100644
index 0000000000..ae78072b68
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/joseph0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/josephine.bmp b/crawl-ref/source/rltiles/dc-mon/josephine.bmp
new file mode 100644
index 0000000000..0a8a0fa1fa
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/josephine.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/jozef0.bmp b/crawl-ref/source/rltiles/dc-mon/jozef0.bmp
new file mode 100644
index 0000000000..39078c494a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/jozef0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/killer_bee.bmp b/crawl-ref/source/rltiles/dc-mon/killer_bee.bmp
new file mode 100644
index 0000000000..87a3d23d31
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/killer_bee.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/killer_bee_larva.bmp b/crawl-ref/source/rltiles/dc-mon/killer_bee_larva.bmp
new file mode 100644
index 0000000000..8f3739185e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/killer_bee_larva.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/killer_klown.bmp b/crawl-ref/source/rltiles/dc-mon/killer_klown.bmp
new file mode 100644
index 0000000000..ca3e48899a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/killer_klown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/kobold.bmp b/crawl-ref/source/rltiles/dc-mon/kobold.bmp
new file mode 100644
index 0000000000..b7ecdeda01
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/kobold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/kobold_demonologist.bmp b/crawl-ref/source/rltiles/dc-mon/kobold_demonologist.bmp
new file mode 100644
index 0000000000..35fc23c3c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/kobold_demonologist.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/komodo_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/komodo_dragon.bmp
new file mode 100644
index 0000000000..4221350120
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/komodo_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/large_mimic.bmp b/crawl-ref/source/rltiles/dc-mon/large_mimic.bmp
new file mode 100644
index 0000000000..de566d0b67
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/large_mimic.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lava_fish.bmp b/crawl-ref/source/rltiles/dc-mon/lava_fish.bmp
new file mode 100644
index 0000000000..99a0dfec7e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lava_fish.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lava_snake.bmp b/crawl-ref/source/rltiles/dc-mon/lava_snake.bmp
new file mode 100644
index 0000000000..f96c37ec5b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lava_snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lava_worm.bmp b/crawl-ref/source/rltiles/dc-mon/lava_worm.bmp
new file mode 100644
index 0000000000..4eb1785ebf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lava_worm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lemure.bmp b/crawl-ref/source/rltiles/dc-mon/lemure.bmp
new file mode 100644
index 0000000000..6b7a5705cf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lemure.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lich.bmp b/crawl-ref/source/rltiles/dc-mon/lich.bmp
new file mode 100644
index 0000000000..08313bffd3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lich.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lindwurm.bmp b/crawl-ref/source/rltiles/dc-mon/lindwurm.bmp
new file mode 100644
index 0000000000..240e787338
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lindwurm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lom_lobon.bmp b/crawl-ref/source/rltiles/dc-mon/lom_lobon.bmp
new file mode 100644
index 0000000000..2cae75074a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lom_lobon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/lorocyproca.bmp b/crawl-ref/source/rltiles/dc-mon/lorocyproca.bmp
new file mode 100644
index 0000000000..a8fbe049e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/lorocyproca.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/louise.bmp b/crawl-ref/source/rltiles/dc-mon/louise.bmp
new file mode 100644
index 0000000000..e897fe3bbb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/louise.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/manes.bmp b/crawl-ref/source/rltiles/dc-mon/manes.bmp
new file mode 100644
index 0000000000..a0fd6b756f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/manes.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/manticore.bmp b/crawl-ref/source/rltiles/dc-mon/manticore.bmp
new file mode 100644
index 0000000000..6ac6e5016c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/manticore.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/margery.bmp b/crawl-ref/source/rltiles/dc-mon/margery.bmp
new file mode 100644
index 0000000000..39f58aee91
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/margery.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/maud0.bmp b/crawl-ref/source/rltiles/dc-mon/maud0.bmp
new file mode 100644
index 0000000000..bcea670bfd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/maud0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/metal_gargoyle.bmp b/crawl-ref/source/rltiles/dc-mon/metal_gargoyle.bmp
new file mode 100644
index 0000000000..a272c67a54
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/metal_gargoyle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/michael.bmp b/crawl-ref/source/rltiles/dc-mon/michael.bmp
new file mode 100644
index 0000000000..f9f13f05d7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/michael.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/midge.bmp b/crawl-ref/source/rltiles/dc-mon/midge.bmp
new file mode 100644
index 0000000000..819d40fa0e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/midge.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/minotaur.bmp b/crawl-ref/source/rltiles/dc-mon/minotaur.bmp
new file mode 100644
index 0000000000..9d5f477b1c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/minotaur.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/mnoleg.bmp b/crawl-ref/source/rltiles/dc-mon/mnoleg.bmp
new file mode 100644
index 0000000000..03b0bac0d6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/mnoleg.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/molten_gargoyle.bmp b/crawl-ref/source/rltiles/dc-mon/molten_gargoyle.bmp
new file mode 100644
index 0000000000..879a3d24a6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/molten_gargoyle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/moth_of_wrath.bmp b/crawl-ref/source/rltiles/dc-mon/moth_of_wrath.bmp
new file mode 100644
index 0000000000..00987b5088
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/moth_of_wrath.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/mottled_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/mottled_dragon.bmp
new file mode 100644
index 0000000000..8461220314
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/mottled_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/mummy.bmp b/crawl-ref/source/rltiles/dc-mon/mummy.bmp
new file mode 100644
index 0000000000..401d73aacd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/mummy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/mummy_priest.bmp b/crawl-ref/source/rltiles/dc-mon/mummy_priest.bmp
new file mode 100644
index 0000000000..c4a6da37c7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/mummy_priest.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/murray.bmp b/crawl-ref/source/rltiles/dc-mon/murray.bmp
new file mode 100644
index 0000000000..d3d484393c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/murray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/naga0.bmp b/crawl-ref/source/rltiles/dc-mon/naga0.bmp
new file mode 100644
index 0000000000..87f2c308ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/naga0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/naga_mage.bmp b/crawl-ref/source/rltiles/dc-mon/naga_mage.bmp
new file mode 100644
index 0000000000..37da349a72
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/naga_mage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/naga_warrior0.bmp b/crawl-ref/source/rltiles/dc-mon/naga_warrior0.bmp
new file mode 100644
index 0000000000..f0f962600d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/naga_warrior0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/necromancer.bmp b/crawl-ref/source/rltiles/dc-mon/necromancer.bmp
new file mode 100644
index 0000000000..32fddfba85
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/necromancer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/necrophage.bmp b/crawl-ref/source/rltiles/dc-mon/necrophage.bmp
new file mode 100644
index 0000000000..a59e96701b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/necrophage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/neqoxec.bmp b/crawl-ref/source/rltiles/dc-mon/neqoxec.bmp
new file mode 100644
index 0000000000..209cc2c3f6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/neqoxec.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/norbert.bmp b/crawl-ref/source/rltiles/dc-mon/norbert.bmp
new file mode 100644
index 0000000000..a043db992e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/norbert.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/norris2.bmp b/crawl-ref/source/rltiles/dc-mon/norris2.bmp
new file mode 100644
index 0000000000..62cd29ba9e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/norris2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ogre.bmp b/crawl-ref/source/rltiles/dc-mon/ogre.bmp
new file mode 100644
index 0000000000..ad071f31bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ogre.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ogre_mage.bmp b/crawl-ref/source/rltiles/dc-mon/ogre_mage.bmp
new file mode 100644
index 0000000000..a212bead18
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ogre_mage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/oklob_plant.bmp b/crawl-ref/source/rltiles/dc-mon/oklob_plant.bmp
new file mode 100644
index 0000000000..7787d47922
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/oklob_plant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ooze.bmp b/crawl-ref/source/rltiles/dc-mon/ooze.bmp
new file mode 100644
index 0000000000..25369f9c76
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ooze.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orange_demon.bmp b/crawl-ref/source/rltiles/dc-mon/orange_demon.bmp
new file mode 100644
index 0000000000..a26fd691b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orange_demon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orange_rat.bmp b/crawl-ref/source/rltiles/dc-mon/orange_rat.bmp
new file mode 100644
index 0000000000..081ae3a286
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orange_rat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orb_guardian.bmp b/crawl-ref/source/rltiles/dc-mon/orb_guardian.bmp
new file mode 100644
index 0000000000..c87ad8f09e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orb_guardian.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orb_of_fire.bmp b/crawl-ref/source/rltiles/dc-mon/orb_of_fire.bmp
new file mode 100644
index 0000000000..790f2b615f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orb_of_fire.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc0.bmp b/crawl-ref/source/rltiles/dc-mon/orc0.bmp
new file mode 100644
index 0000000000..23ed110cb8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc_high_priest.bmp b/crawl-ref/source/rltiles/dc-mon/orc_high_priest.bmp
new file mode 100644
index 0000000000..74ce68d622
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc_high_priest.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc_knight0.bmp b/crawl-ref/source/rltiles/dc-mon/orc_knight0.bmp
new file mode 100644
index 0000000000..9febf6f779
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc_knight0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc_priest.bmp b/crawl-ref/source/rltiles/dc-mon/orc_priest.bmp
new file mode 100644
index 0000000000..08f833f87e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc_priest.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc_sorcerer.bmp b/crawl-ref/source/rltiles/dc-mon/orc_sorcerer.bmp
new file mode 100644
index 0000000000..87e26ceda7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc_sorcerer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc_warlord0.bmp b/crawl-ref/source/rltiles/dc-mon/orc_warlord0.bmp
new file mode 100644
index 0000000000..890435c827
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc_warlord0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc_warrior0.bmp b/crawl-ref/source/rltiles/dc-mon/orc_warrior0.bmp
new file mode 100644
index 0000000000..ad34c39476
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc_warrior0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orc_wizard.bmp b/crawl-ref/source/rltiles/dc-mon/orc_wizard.bmp
new file mode 100644
index 0000000000..3ad198bb41
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/orc_wizard.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/pandemonium_demon.bmp b/crawl-ref/source/rltiles/dc-mon/pandemonium_demon.bmp
new file mode 100644
index 0000000000..d0c367e182
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/pandemonium_demon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/phantom.bmp b/crawl-ref/source/rltiles/dc-mon/phantom.bmp
new file mode 100644
index 0000000000..256844546a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/phantom.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/pit_fiend.bmp b/crawl-ref/source/rltiles/dc-mon/pit_fiend.bmp
new file mode 100644
index 0000000000..9d751c499a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/pit_fiend.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/plant.bmp b/crawl-ref/source/rltiles/dc-mon/plant.bmp
new file mode 100644
index 0000000000..008cbef306
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/plant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/polar_bear.bmp b/crawl-ref/source/rltiles/dc-mon/polar_bear.bmp
new file mode 100644
index 0000000000..a0d6cceb57
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/polar_bear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/polyphemus.bmp b/crawl-ref/source/rltiles/dc-mon/polyphemus.bmp
new file mode 100644
index 0000000000..e8a29e790d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/polyphemus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/program_bug.bmp b/crawl-ref/source/rltiles/dc-mon/program_bug.bmp
new file mode 100644
index 0000000000..a90be31711
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/program_bug.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/psyche.bmp b/crawl-ref/source/rltiles/dc-mon/psyche.bmp
new file mode 100644
index 0000000000..07bcb8502c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/psyche.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/pulsating_lump.bmp b/crawl-ref/source/rltiles/dc-mon/pulsating_lump.bmp
new file mode 100644
index 0000000000..39d0a5db95
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/pulsating_lump.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/quasit.bmp b/crawl-ref/source/rltiles/dc-mon/quasit.bmp
new file mode 100644
index 0000000000..3ffe8bb0d6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/quasit.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/queen_ant.bmp b/crawl-ref/source/rltiles/dc-mon/queen_ant.bmp
new file mode 100644
index 0000000000..4a00199649
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/queen_ant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/queen_bee.bmp b/crawl-ref/source/rltiles/dc-mon/queen_bee.bmp
new file mode 100644
index 0000000000..68f2a9dde7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/queen_bee.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/quicksilver_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/quicksilver_dragon.bmp
new file mode 100644
index 0000000000..e740abcfad
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/quicksilver_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/quokka.bmp b/crawl-ref/source/rltiles/dc-mon/quokka.bmp
new file mode 100644
index 0000000000..36b727f11f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/quokka.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/rakshasa.bmp b/crawl-ref/source/rltiles/dc-mon/rakshasa.bmp
new file mode 100644
index 0000000000..3b18db1d95
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/rakshasa.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/rakshasa_fake.bmp b/crawl-ref/source/rltiles/dc-mon/rakshasa_fake.bmp
new file mode 100644
index 0000000000..3b18db1d95
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/rakshasa_fake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/rat.bmp b/crawl-ref/source/rltiles/dc-mon/rat.bmp
new file mode 100644
index 0000000000..9ad4de70a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/rat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/reaper.bmp b/crawl-ref/source/rltiles/dc-mon/reaper.bmp
new file mode 100644
index 0000000000..7353a3b074
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/reaper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/red_devil.bmp b/crawl-ref/source/rltiles/dc-mon/red_devil.bmp
new file mode 100644
index 0000000000..7766da96b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/red_devil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/red_wasp.bmp b/crawl-ref/source/rltiles/dc-mon/red_wasp.bmp
new file mode 100644
index 0000000000..0f043661be
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/red_wasp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/redback.bmp b/crawl-ref/source/rltiles/dc-mon/redback.bmp
new file mode 100644
index 0000000000..0c68819349
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/redback.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/rock_troll.bmp b/crawl-ref/source/rltiles/dc-mon/rock_troll.bmp
new file mode 100644
index 0000000000..27adf6e141
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/rock_troll.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/rotting_devil.bmp b/crawl-ref/source/rltiles/dc-mon/rotting_devil.bmp
new file mode 100644
index 0000000000..60de9daf25
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/rotting_devil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/rotting_hulk.bmp b/crawl-ref/source/rltiles/dc-mon/rotting_hulk.bmp
new file mode 100644
index 0000000000..17eedc2d42
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/rotting_hulk.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/royal_jelly.bmp b/crawl-ref/source/rltiles/dc-mon/royal_jelly.bmp
new file mode 100644
index 0000000000..9c0512d1d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/royal_jelly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/rupert0.bmp b/crawl-ref/source/rltiles/dc-mon/rupert0.bmp
new file mode 100644
index 0000000000..7e0a543aa8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/rupert0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/salamander.bmp b/crawl-ref/source/rltiles/dc-mon/salamander.bmp
new file mode 100644
index 0000000000..d00996a384
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/salamander.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/scorpion.bmp b/crawl-ref/source/rltiles/dc-mon/scorpion.bmp
new file mode 100644
index 0000000000..420255aa15
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/scorpion.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/serpent_of_hell.bmp b/crawl-ref/source/rltiles/dc-mon/serpent_of_hell.bmp
new file mode 100644
index 0000000000..e2e2d595ba
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/serpent_of_hell.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shadow.bmp b/crawl-ref/source/rltiles/dc-mon/shadow.bmp
new file mode 100644
index 0000000000..bfcfe2f29d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shadow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shadow_demon.bmp b/crawl-ref/source/rltiles/dc-mon/shadow_demon.bmp
new file mode 100644
index 0000000000..dec3ddc17f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shadow_demon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shadow_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/shadow_dragon.bmp
new file mode 100644
index 0000000000..964b62d6dc
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shadow_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shadow_fiend.bmp b/crawl-ref/source/rltiles/dc-mon/shadow_fiend.bmp
new file mode 100644
index 0000000000..8179a695f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shadow_fiend.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shadow_imp.bmp b/crawl-ref/source/rltiles/dc-mon/shadow_imp.bmp
new file mode 100644
index 0000000000..18bc7b3b87
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shadow_imp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shadow_wraith.bmp b/crawl-ref/source/rltiles/dc-mon/shadow_wraith.bmp
new file mode 100644
index 0000000000..531e3222d7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shadow_wraith.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shapeshifter.bmp b/crawl-ref/source/rltiles/dc-mon/shapeshifter.bmp
new file mode 100644
index 0000000000..fb1831fe6c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shapeshifter.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/sheep.bmp b/crawl-ref/source/rltiles/dc-mon/sheep.bmp
new file mode 100644
index 0000000000..bea41c0acd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/sheep.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/shining_eye.bmp b/crawl-ref/source/rltiles/dc-mon/shining_eye.bmp
new file mode 100644
index 0000000000..8e16e18116
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/shining_eye.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/sigmund.bmp b/crawl-ref/source/rltiles/dc-mon/sigmund.bmp
new file mode 100644
index 0000000000..736e231a62
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/sigmund.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/simulacrum_large.bmp b/crawl-ref/source/rltiles/dc-mon/simulacrum_large.bmp
new file mode 100644
index 0000000000..468e325d13
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/simulacrum_large.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/simulacrum_small.bmp b/crawl-ref/source/rltiles/dc-mon/simulacrum_small.bmp
new file mode 100644
index 0000000000..d4aea08fcf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/simulacrum_small.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/skeletal_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/skeletal_dragon.bmp
new file mode 100644
index 0000000000..026a292d66
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/skeletal_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/skeletal_warrior0.bmp b/crawl-ref/source/rltiles/dc-mon/skeletal_warrior0.bmp
new file mode 100644
index 0000000000..6bb68ff39c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/skeletal_warrior0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/skeleton_large.bmp b/crawl-ref/source/rltiles/dc-mon/skeleton_large.bmp
new file mode 100644
index 0000000000..f1321a578e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/skeleton_large.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/skeleton_small.bmp b/crawl-ref/source/rltiles/dc-mon/skeleton_small.bmp
new file mode 100644
index 0000000000..f1321a578e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/skeleton_small.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/slime_creature.bmp b/crawl-ref/source/rltiles/dc-mon/slime_creature.bmp
new file mode 100644
index 0000000000..18800a838f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/slime_creature.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/small_snake.bmp b/crawl-ref/source/rltiles/dc-mon/small_snake.bmp
new file mode 100644
index 0000000000..02caab2dac
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/small_snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/smoke_demon.bmp b/crawl-ref/source/rltiles/dc-mon/smoke_demon.bmp
new file mode 100644
index 0000000000..691c35b7b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/smoke_demon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/snake.bmp b/crawl-ref/source/rltiles/dc-mon/snake.bmp
new file mode 100644
index 0000000000..fd4046b2e7
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/snorg.bmp b/crawl-ref/source/rltiles/dc-mon/snorg.bmp
new file mode 100644
index 0000000000..af2ec92755
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/snorg.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/soldier_ant.bmp b/crawl-ref/source/rltiles/dc-mon/soldier_ant.bmp
new file mode 100644
index 0000000000..0dbb6e0b53
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/soldier_ant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/soul_eater.bmp b/crawl-ref/source/rltiles/dc-mon/soul_eater.bmp
new file mode 100644
index 0000000000..b07283581b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/soul_eater.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/spatial_vortex.bmp b/crawl-ref/source/rltiles/dc-mon/spatial_vortex.bmp
new file mode 100644
index 0000000000..62a8985fb9
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/spatial_vortex.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/spectral_thing.bmp b/crawl-ref/source/rltiles/dc-mon/spectral_thing.bmp
new file mode 100644
index 0000000000..ac00b1a3c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/spectral_thing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/spectral_warrior.bmp b/crawl-ref/source/rltiles/dc-mon/spectral_warrior.bmp
new file mode 100644
index 0000000000..c9774a3d1b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/spectral_warrior.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/sphinx.bmp b/crawl-ref/source/rltiles/dc-mon/sphinx.bmp
new file mode 100644
index 0000000000..142aa3d897
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/sphinx.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/spiny_frog.bmp b/crawl-ref/source/rltiles/dc-mon/spiny_frog.bmp
new file mode 100644
index 0000000000..851a73f845
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/spiny_frog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/spiny_worm.bmp b/crawl-ref/source/rltiles/dc-mon/spiny_worm.bmp
new file mode 100644
index 0000000000..3a13b2e075
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/spiny_worm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/steam_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/steam_dragon.bmp
new file mode 100644
index 0000000000..a1f04195e8
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/steam_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/stone_giant.bmp b/crawl-ref/source/rltiles/dc-mon/stone_giant.bmp
new file mode 100644
index 0000000000..1288d0e8e2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/stone_giant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/stone_golem.bmp b/crawl-ref/source/rltiles/dc-mon/stone_golem.bmp
new file mode 100644
index 0000000000..40312877f6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/stone_golem.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/storm_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/storm_dragon.bmp
new file mode 100644
index 0000000000..3ab507b16c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/storm_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/sun_demon.bmp b/crawl-ref/source/rltiles/dc-mon/sun_demon.bmp
new file mode 100644
index 0000000000..d49c7d5c85
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/sun_demon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/swamp_dragon.bmp b/crawl-ref/source/rltiles/dc-mon/swamp_dragon.bmp
new file mode 100644
index 0000000000..11afdfdf2f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/swamp_dragon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/swamp_drake.bmp b/crawl-ref/source/rltiles/dc-mon/swamp_drake.bmp
new file mode 100644
index 0000000000..b72c53652b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/swamp_drake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/swamp_worm.bmp b/crawl-ref/source/rltiles/dc-mon/swamp_worm.bmp
new file mode 100644
index 0000000000..df7c22f79b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/swamp_worm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/tentacled_monstrosity.bmp b/crawl-ref/source/rltiles/dc-mon/tentacled_monstrosity.bmp
new file mode 100644
index 0000000000..bbfb47d646
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/tentacled_monstrosity.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/terence0.bmp b/crawl-ref/source/rltiles/dc-mon/terence0.bmp
new file mode 100644
index 0000000000..7bbb0ee3bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/terence0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/tiamat.bmp b/crawl-ref/source/rltiles/dc-mon/tiamat.bmp
new file mode 100644
index 0000000000..dff6eb6710
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/tiamat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/titan.bmp b/crawl-ref/source/rltiles/dc-mon/titan.bmp
new file mode 100644
index 0000000000..53f927a745
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/titan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/toenail_golem.bmp b/crawl-ref/source/rltiles/dc-mon/toenail_golem.bmp
new file mode 100644
index 0000000000..9a1b77e9ff
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/toenail_golem.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/tormentor.bmp b/crawl-ref/source/rltiles/dc-mon/tormentor.bmp
new file mode 100644
index 0000000000..6be712a334
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/tormentor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/troll.bmp b/crawl-ref/source/rltiles/dc-mon/troll.bmp
new file mode 100644
index 0000000000..4e860c843d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/troll.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/two_headed_ogre.bmp b/crawl-ref/source/rltiles/dc-mon/two_headed_ogre.bmp
new file mode 100644
index 0000000000..f83da0fccb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/two_headed_ogre.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ufetubus.bmp b/crawl-ref/source/rltiles/dc-mon/ufetubus.bmp
new file mode 100644
index 0000000000..62d89fa182
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ufetubus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ugly_thing.bmp b/crawl-ref/source/rltiles/dc-mon/ugly_thing.bmp
new file mode 100644
index 0000000000..77edd813c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ugly_thing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/unseen_horror.bmp b/crawl-ref/source/rltiles/dc-mon/unseen_horror.bmp
new file mode 100644
index 0000000000..5ac1fcb6d2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/unseen_horror.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/urug0.bmp b/crawl-ref/source/rltiles/dc-mon/urug0.bmp
new file mode 100644
index 0000000000..ca5289590a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/urug0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/vampire.bmp b/crawl-ref/source/rltiles/dc-mon/vampire.bmp
new file mode 100644
index 0000000000..a4e5431e6f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/vampire.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/vampire_knight.bmp b/crawl-ref/source/rltiles/dc-mon/vampire_knight.bmp
new file mode 100644
index 0000000000..c04f6a9f31
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/vampire_knight.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/vampire_mage.bmp b/crawl-ref/source/rltiles/dc-mon/vampire_mage.bmp
new file mode 100644
index 0000000000..476c9ecd39
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/vampire_mage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/vapour.bmp b/crawl-ref/source/rltiles/dc-mon/vapour.bmp
new file mode 100644
index 0000000000..d5dd8e20f1
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/vapour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/vault_guard0.bmp b/crawl-ref/source/rltiles/dc-mon/vault_guard0.bmp
new file mode 100644
index 0000000000..f00bbaf938
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/vault_guard0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/very_ugly_thing.bmp b/crawl-ref/source/rltiles/dc-mon/very_ugly_thing.bmp
new file mode 100644
index 0000000000..a674a23589
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/very_ugly_thing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wandering_mushroom.bmp b/crawl-ref/source/rltiles/dc-mon/wandering_mushroom.bmp
new file mode 100644
index 0000000000..c03d21051d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wandering_mushroom.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/war_dog.bmp b/crawl-ref/source/rltiles/dc-mon/war_dog.bmp
new file mode 100644
index 0000000000..81060bbe7f
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/war_dog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/warg.bmp b/crawl-ref/source/rltiles/dc-mon/warg.bmp
new file mode 100644
index 0000000000..cfb91fb0ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/warg.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/water_elemental.bmp b/crawl-ref/source/rltiles/dc-mon/water_elemental.bmp
new file mode 100644
index 0000000000..bd27462abb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/water_elemental.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wayne0.bmp b/crawl-ref/source/rltiles/dc-mon/wayne0.bmp
new file mode 100644
index 0000000000..6eee94387d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wayne0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/white_imp.bmp b/crawl-ref/source/rltiles/dc-mon/white_imp.bmp
new file mode 100644
index 0000000000..261fbb450b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/white_imp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wight.bmp b/crawl-ref/source/rltiles/dc-mon/wight.bmp
new file mode 100644
index 0000000000..b0db9f61bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wight.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wizard.bmp b/crawl-ref/source/rltiles/dc-mon/wizard.bmp
new file mode 100644
index 0000000000..771a909056
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wizard.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wolf.bmp b/crawl-ref/source/rltiles/dc-mon/wolf.bmp
new file mode 100644
index 0000000000..4812282e27
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wolf.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wolf_spider.bmp b/crawl-ref/source/rltiles/dc-mon/wolf_spider.bmp
new file mode 100644
index 0000000000..4455f2f730
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wolf_spider.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wood_golem.bmp b/crawl-ref/source/rltiles/dc-mon/wood_golem.bmp
new file mode 100644
index 0000000000..ba4d86154b
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wood_golem.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/worm.bmp b/crawl-ref/source/rltiles/dc-mon/worm.bmp
new file mode 100644
index 0000000000..73e021e1d5
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/worm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wraith.bmp b/crawl-ref/source/rltiles/dc-mon/wraith.bmp
new file mode 100644
index 0000000000..f219507eeb
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wraith.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/wyvern.bmp b/crawl-ref/source/rltiles/dc-mon/wyvern.bmp
new file mode 100644
index 0000000000..8960a35bd3
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/wyvern.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/xtahua.bmp b/crawl-ref/source/rltiles/dc-mon/xtahua.bmp
new file mode 100644
index 0000000000..b856e03a7e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/xtahua.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yak.bmp b/crawl-ref/source/rltiles/dc-mon/yak.bmp
new file mode 100644
index 0000000000..9031e0ca10
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/yak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yaktaur.bmp b/crawl-ref/source/rltiles/dc-mon/yaktaur.bmp
new file mode 100644
index 0000000000..bab35520db
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/yaktaur.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yaktaur_captain.bmp b/crawl-ref/source/rltiles/dc-mon/yaktaur_captain.bmp
new file mode 100644
index 0000000000..5cc690800a
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/yaktaur_captain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yellow_snake.bmp b/crawl-ref/source/rltiles/dc-mon/yellow_snake.bmp
new file mode 100644
index 0000000000..b9eb8937e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/yellow_snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/yellow_wasp.bmp b/crawl-ref/source/rltiles/dc-mon/yellow_wasp.bmp
new file mode 100644
index 0000000000..c33d359a1e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/yellow_wasp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/ynoxinul.bmp b/crawl-ref/source/rltiles/dc-mon/ynoxinul.bmp
new file mode 100644
index 0000000000..4cbad27303
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/ynoxinul.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/zombie_large.bmp b/crawl-ref/source/rltiles/dc-mon/zombie_large.bmp
new file mode 100644
index 0000000000..405c01303e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/zombie_large.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/zombie_small.bmp b/crawl-ref/source/rltiles/dc-mon/zombie_small.bmp
new file mode 100644
index 0000000000..3bd60fc8b6
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/zombie_small.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-pl.txt b/crawl-ref/source/rltiles/dc-pl.txt
new file mode 100644
index 0000000000..29a8841e6d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-pl.txt
@@ -0,0 +1,853 @@
+%width 20
+%back none
+%name player
+
+%rim 1
+
+###BASE
+%parts_ctg BASE
+%parts_wx 32
+%parts_wy 32
+%parts_ox 0
+%parts_oy 0
+%sdir player/base
+human_f HUMAN
+human_m
+elf_f ELF
+elf_m
+deep_elf_f DEEP_ELF
+deep_elf_m
+dwarf_f DWARF
+dwarf_m
+halfling_f HALFLING
+halfling_m
+orc_f ORC
+orc_m
+kobold_f KOBOLD
+kobold_m
+mummy_f MUMMY
+mummy_m
+naga_f NAGA
+naga_m
+gnome_f GNOME
+gnome_m
+ogre_f OGRE
+ogre_m
+troll_f TROLL
+troll_m
+ogre_mage_f OGRE_MAGE
+ogre_mage_m
+draconian_f DRACONIAN
+draconian_m
+draconian_black_f DRACONIAN_BLACK
+draconian_black_m
+draconian_gold_f DRACONIAN_GOLD
+draconian_gold_m
+draconian_gray_f DRACONIAN_GRAY
+draconian_gray_m
+draconian_green_f DRACONIAN_GREEN
+draconian_green_m
+draconian_mottled_f DRACONIAN_MOTTLED
+draconian_mottled_m
+draconian_pale_f DRACONIAN_PALE
+draconian_pale_m
+draconian_purple_f DRACONIAN_PURPLE
+draconian_purple_m
+draconian_red_f DRACONIAN_RED
+draconian_red_m
+draconian_white_f DRACONIAN_WHITE
+draconian_white_m
+
+centaur_f CENTAUR
+centaur_m
+demigod_f DEMIGOD
+demigod_m
+spriggan_f SPRIGGAN
+spriggan_m
+minotaur_f MINOTAUR
+minotaur_m
+demonspawn_f DEMONSPAWN
+demonspawn_m
+ghoul_f GHOUL
+ghoul_m
+kenku_f KENKU
+kenku_m
+merfolk_f MERFOLK
+merfolk_m
+merfolk_water_f MERFOLK_WATER
+merfolk_water_m
+vampire_f VAMPIRE
+vampire_m
+%end
+
+###SHADOW
+%parts_ctg SHADOW
+%parts_wx 32
+%parts_wy 32
+%parts_ox 0
+%parts_oy 0
+%rim 0
+shadow
+%rim 1
+%sdir player/barding
+naga_barding NAGA_BARDING
+centaur_barding CENTAUR_BARDING
+%end
+
+###Cloak
+%parts_ctg CLOAK
+%parts_wx 32
+%parts_wy 32
+%parts_ox 0
+%parts_oy 0
+%sdir player/cloak
+red RED
+blue BLUE
+magenta MAGENTA
+yellow YELLOW
+black BLACK
+gray GRAY
+brown LBROWN
+green GREEN
+cyan CYAN
+white WHITE
+%end
+
+###Boots
+%parts_ctg BOOTS
+%parts_wx 16
+%parts_wy 16
+%parts_ox 8
+%parts_oy 16
+%sdir player/boot
+
+short_red SHORT_RED
+short_purple SHORT_PURPLE
+short_brown SHORT_BROWN
+short_brown2 SHORT_BROWN2
+pj PJ
+middle_brown MIDDLE_BROWN
+middle_gray MIDDLE_GRAY
+middle_ybrown MIDDLE_YBROWN
+middle_brown2 MIDDLE_BROWN2
+middle_brown3 MIDDLE_BROWN3
+middle_gold MIDDLE_GOLD
+middle_green MIDDLE_GREEN
+middle_purple MIDDLE_PURPLE
+long_red LONG_RED
+long_white LONG_WHITE
+blue_gold BLUE_GOLD
+mesh_red MESH_RED
+mesh_black MESH_BLACK
+mesh_white MESH_WHITE
+mesh_blue MESH_BLUE
+hooves HOOVES
+%end
+
+### Body armour
+%parts_ctg LEG
+%parts_wx 16
+%parts_wy 16
+%parts_ox 8
+%parts_oy 16
+%sdir player/leg
+
+bikini_red BIKINI_RED
+loincloth_red LOINCLOTH_RED
+belt_redbrown BELT_REDBROWN
+belt_gray BELT_GRAY
+pants_orange PANTS_ORANGE
+pants_short_gray PANTS_SHORT_GRAY
+garter
+pj PJ
+
+pants_black PANTS_BLACK
+pants_blue PANTS_BLUE
+pants_darkgreen PANTS_DARKGREEN
+pants_brown PANTS_BROWN
+pants_short_darkbrown PANTS_SHORT_DARKBROWN
+pants_short_brown PANTS_SHORT_BROWN
+pants_short_brown3 PANTS_SHORT_BROWN3
+trouser_green
+pants_l_white
+long_red
+chunli
+pants_red
+
+leg_armor00 METAL_RED
+leg_armor01 METAL_SILVER
+leg_armor03 METAL_GRAY
+leg_armor05 METAL_GREEN
+leg_armor04 LEGCHAIN_GRAY
+leg_armor02 LEGCHAIN_SILVER
+
+skirt_blue SKIRT_OFS
+skirt_green SKIRT_GREEN
+skirt_white SKIRT_WHITE
+skirt_red
+skirt_white2
+
+metal_gray LOWARM1
+metal_green LOWARM2
+pants16 LOWARM3
+%end
+
+### Leg armour
+%parts_ctg BODY
+%parts_wx 16
+%parts_wy 32
+%parts_ox 8
+%parts_oy 0
+%sdir player/body
+
+robe_blue ROBE_BLUE
+robe_black ROBE_BLACK
+robe_white ROBE_WHITE
+robe_red ROBE_RED
+robe_purple ROBE_MAGENTA
+robe_green ROBE_GREEN
+robe_yellow ROBE_YELLOW
+robe_brown ROBE_BROWN
+robe_cyan ROBE_CYAN
+robe_rainbow ROBE_RAINBOW
+gandalf_g GANDALF_G
+saruman SARUMAN
+robe_black_hood ROBE_BLACK_HOOD
+monk_blue MONK_BLUE
+monk_black MONK_BLACK
+dress_green DRESS_GREEN
+robe_black_gold ROBE_BLACK_GOLD
+robe_white2 ROBE_WHITE2
+robe_red2 ROBE_RED2
+robe_white_red ROBE_WHITE_RED
+robe_white_green ROBE_WHITE_GREEN
+robe_blue_white ROBE_BLUE_WHITE
+robe_red_gold ROBE_RED_GOLD
+robe_black_red ROBE_BLACK_RED
+robe_blue_green ROBE_BLUE_GREEN
+robe_red3 ROBE_RED3
+robe_brown2 ROBE_BROWN2
+robe_green_gold ROBE_GREEN_GOLD
+robe_brown3 ROBE_BROWN3
+robe_gray2 ROBE_GRAY2
+dress_white DRESS_WHITE
+arwen ARWEN
+skirt_onep_grey SKIRT_ONEP_GREY
+bloody BLOODY
+leather_short LEATHER_SHORT
+china_red2 CHINA_RED2
+
+animal_skin ANIMAL_SKIN
+zhor ZHOR
+neck NECK
+belt1 BELT1
+belt2 BELT2
+susp_black SUSP_BLACK
+shoulder_pad SHOULDER_PAD
+mesh_black MESH_BLACK
+mesh_red MESH_RED
+leather_jacket LEATHER_JACKET
+shirt_white1 SHIRT_WHITE1
+shirt_white2 SHIRT_WHITE2
+shirt_white3 SHIRT_WHITE3
+shirt_blue SHIRT_BLUE
+bikini_red BIKINI_RED
+shirt_hawaii SHIRT_HAWAII
+china_red CHINA_RED
+leather_red LEATHER_RED
+chunli CHUNLI
+shirt_white_yellow SHIRT_WHITE_YELLOW
+shirt_check SHIRT_CHECK
+jessica JESSICA
+
+slit_black SLIT_BLACK
+leather_armour LEATHER_ARMOUR
+leather_green LEATHER_GREEN
+shirt_black SHIRT_BLACK
+shirt_black_and_cloth SHIRT_BLACK_AND_CLOTH
+shirt_black3 SHIRT_BLACK3
+leather2 LEATHER2
+coat_red COAT_RED
+coat_black COAT_BLACK
+
+leather_armour2 LEATHER_ARMOUR2
+leather_armour3 LEATHER_ARMOUR3
+shirt_vest SHIRT_VEST
+karate KARATE
+karate2 KARATE2
+leather_heavy LEATHER_HEAVY
+troll_hide TROLL_HIDE
+green_chain GREEN_CHAIN
+metal_blue METAL_BLUE
+green_susp GREEN_SUSP
+jacket2 JACKET2
+jacket3 JACKET3
+leather_stud LEATHER_STUD
+jacket_stud JACKET_STUD
+chainmail CHAINMAIL2
+half_plate HALF_PLATE
+half_plate2 HALF_PLATE2
+half_plate3 HALF_PLATE3
+breast_black BREAST_BLACK
+vest_red VEST_RED
+vest_red2 VEST_RED2
+bplate_green BPLATE_GREEN
+bplate_metal1 BPLATE_METAL1
+banded BANDED2
+banded2 SPLINT
+armor_blue_gold
+ringmail RINGMAIL
+chainmail3 CHAINMAIL
+plate_and_cloth PLATE_AND_CLOTH
+plate_and_cloth2 PLATE_AND_CLOTH2
+scalemail SCALEMAIL2
+scalemail2 SCALEMAIL
+leather_metal BANDED
+plate PLATE2
+plate2 PLATE
+plate_black PLATE_BLACK
+crystal_plate CRYSTAL_PLATE
+armor_mummy ARMOR_MUMMY
+
+##cloth_u_sail SAILOR
+dragonsc_green DRAGONSC_GREEN
+dragonsc_white DRAGONSC_WHITE
+dragonsc_magenta DRAGONSC_MAGENTA
+dragonsc_cyan DRAGONSC_CYAN
+dragonsc_brown DRAGONSC_BROWN
+dragonsc_blue DRAGONSC_BLUE
+dragonsc_gold DRAGONSC_GOLD
+dragonarm_green DRAGONARM_GREEN
+dragonarm_white DRAGONARM_WHITE
+dragonarm_magenta DRAGONARM_MAGENTA
+dragonarm_cyan DRAGONARM_CYAN
+dragonarm_brown DRAGONARM_BROWN
+dragonarm_blue DRAGONARM_BLUE
+dragonarm_gold DRAGONARM_GOLD
+
+aragorn ARAGORN
+aragorn2 ARAGORN2
+boromir BOROMIR
+frodo FRODO
+gimli GIMLI
+legolas LEGOLAS
+merry MERRY
+pipin PIPIN
+gil-galad
+isildur
+pj PJ
+sam SAM
+vanhel1
+
+edison EDISON
+lears_chain_mail LEARS_CHAIN_MAIL
+robe_of_night ROBE_OF_NIGHT
+%end
+
+
+### Arms
+%parts_ctg ARM
+%parts_wx 32
+%parts_wy 16
+%parts_ox 0
+%parts_oy 8
+%sdir player/arm
+glove_red GLOVE_RED
+glove_gray GLOVE_GRAY
+glove_white GLOVE_WHITE
+glove_blue GLOVE_BLUE
+glove_black GLOVE_BLACK
+glove_orange GLOVE_ORANGE
+glove_brown GLOVE_BROWN
+glove_black2 GLOVE_BLACK2
+glove_grayfist GLOVE_GRAYFIST
+glove_purple GLOVE_PURPLE
+glove_wrist_purple GLOVE_WRIST_PURPLE
+glove_chunli GLOVE_CHUNLI
+gauntlet_blue GAUNTLET_BLUE
+glove_gold GLOVE_GOLD
+glove_short_yellow GLOVE_SHORT_YELLOW
+glove_short_red GLOVE_SHORT_RED
+glove_short_white GLOVE_SHORT_WHITE
+glove_short_green GLOVE_SHORT_GREEN
+glove_short_blue GLOVE_SHORT_BLUE
+glove_short_gray GLOVE_SHORT_GRAY
+claws CLAWS
+%end
+
+# Hand 1
+%parts_ctg HAND1
+%parts_wx 16
+%parts_wy 32
+%parts_ox 0
+%parts_oy 0
+%sdir player/hand1
+
+# blades
+dagger DAGGER
+dagger_slant DAGGER_SLANT
+short_sword SHORT_SWORD
+short_sword_slant SHORT_SWORD_SLANT
+short_sword2 SHORT_SWORD2
+sword_thief SWORD_THIEF
+long_sword LONG_SWORD
+long_sword_slant LONG_SWORD_SLANT
+blessed_blade BLESSED_BLADE
+great_sword GREAT_SWORD
+great_sword_slant GREAT_SWORD_SLANT
+katana KATANA
+katana_slant KATANA_SLANT
+scimitar SCIMITAR
+falchion FALCHION
+double_sword DOUBLE_SWORD
+triple_sword TRIPLE_SWORD
+sword2 SWORD2
+sword_tri SWORD_TRI
+broadsword BROADSWORD
+black_sword BLACK_SWORD
+sword_black SWORD_BLACK
+sword_twist SWORD_TWIST
+knife KNIFE
+sword_seven SWORD_SEVEN
+heavy_sword HEAVY_SWORD
+sabre SABRE
+sword3 SWORD3
+sword_breaker SWORD_BREAKER
+sword_jag SWORD_JAG
+###Artifacts
+bloodbane BLOODBANE
+chilly_death CHILLY_DEATH
+doom_knight DOOM_KNIGHT
+flaming_death FLAMING_DEATH
+leech LEECH
+morg MORG
+plutonium_sword PLUTONIUM_SWORD
+jihad JIHAD
+singing_sword SINGING_SWORD
+zonguldrok ZONGULDROK
+
+## blunt
+club CLUB
+club_slant CLUB_SLANT
+club2 CLUB2
+club3 CLUB3
+stick STICK
+giant_club GIANT_CLUB
+giant_club_slant GIANT_CLUB_SLANT
+giant_club_spike GIANT_CLUB_SPIKE
+giant_club_spike_slant GIANT_CLUB_SPIKE_SLANT
+whip WHIP
+sceptre SCEPTRE
+mace MACE2
+mace3 MACE
+mace2 GREAT_MACE
+mace_ruby MACE_RUBY
+morningstar MORNINGSTAR2
+morningstar2 MORNINGSTAR
+eveningstar EVENINGSTAR
+large_mace LARGE_MACE
+black_whip BLACK_WHIP
+hammer3 HAMMER
+hammer HAMMER1
+hammer2 HAMMER2
+frail_stick FRAIL_STICK
+frail_ball FRAIL
+frail_spike SPIKED_FRAIL
+frail_stick_slant GREAT_FRAIL
+frail_ball2 FRAIL_BALL2
+frail_balls FRAIL_BALLS
+frail_ball3 FRAIL_BALL3
+frail_ball4 FRAIL_BALL4
+nunchaku NUNCHAKU
+mace_of_variability MACE_OF_VARIABILITY
+
+## polearms
+spear1 SPEAR
+spear2 SPEAR2
+spear3 SPEAR3
+spear4 SPEAR4
+spear5 SPEAR5
+hook HOOK
+halberd HALBERD
+pick_axe PICK_AXE
+trident TRIDENT
+trident_demon DEMON_TRIDENT
+trident_elec TRIDENT_ELEC
+trident2 TRIDENT2
+trident3 TRIDENT3
+lance LANCE
+lance2 LANCE2
+scythe SCYTHE
+scythe_slant SCYTHE_SLANT
+pike PIKE
+quarterstaff1 QUARTERSTAFF1
+quarterstaff2 QUARTERSTAFF2
+quarterstaff3 QUARTERSTAFF3
+quarterstaff4 QUARTERSTAFF4
+sickle SICKLE
+glaive GLAIVE
+glaive2 GLAIVE2
+glaive3 GLAIVE3
+d_glaive D_GLAIVE
+pole_forked POLE_FORKED
+fork2 FORK2
+glaive_of_prune GLAIVE_OF_PRUNE
+voodoo VOODOO
+finisher FINISHER
+
+## staves
+staff_skull STAFF_SKULL
+
+staff_mage STAFF_MAGE
+staff_mage2 STAFF_MAGE2
+great_staff GREAT_STAFF
+staff_evil STAFF_EVIL
+staff_ring_blue STAFF_RING_BLUE
+staff_mummy STAFF_MUMMY
+staff_fork STAFF_FORK
+staff_ruby STAFF_RUBY
+staff_large STAFF_LARGE
+elemental_staff ELEMENTAL_STAFF
+asmodeus ASMODEUS
+dispater DISPATER
+olgreb OLGREB
+
+## axes
+axe_small AXE_SMALL
+hand_axe HAND_AXE
+war_axe WAR_AXE
+great_axe BROAD_AXE
+axe BATTLEAXE
+axe_executioner EXECUTIONERS_AXE
+axe_double AXE_DOUBLE
+axe_blood AXE_BLOOD
+axe_short AXE_SHORT
+axe_trog AXE_TROG
+arga ARGA
+
+## launchers
+sling SLING
+bow BOW
+bow2 BOW2
+bow3 BOW3
+great_bow GREAT_BOW
+bow_blue BOW_BLUE
+crossbow CROSSBOW
+crossbow2 CROSSBOW2
+crossbow3 CROSSBOW3
+crossbow4 CROSSBOW4
+blowgun BLOWGUN
+punk PUNK
+sniper SNIPER
+crossbow_fire FIERY_DEVIL
+krishna KRISHNA
+
+##missiles
+dirt DIRT
+
+## misc
+bone_lantern BONE_LANTERN
+fan FAN
+bottle BOTTLE
+box BOX
+crystal CRYSTAL
+deck DECK
+disc DISC
+horn HORN
+lantern LANTERN
+orb ORB
+stone STONE
+
+fire_red FIRE_RED
+fire_blue FIRE_BLUE
+skull SKULL
+head HEAD
+fire_green FIRE_GREEN
+fire_cyan FIRE_CYAN
+fire_white FIRE_WHITE
+light_blue LIGHT_BLUE
+light_red LIGHT_RED
+light_yellow LIGHT_YELLOW
+spark SPARK
+fire_dark FIRE_DARK
+fire_white2 FIRE_WHITE2
+
+## lotr
+aragorn ARAGORN
+arwen ARWEN
+boromir BOROMIR
+frodo FRODO
+gandalf GANDALF
+gimli GIMLI
+legolas LEGOLAS
+saruman SARUMAN
+
+bladehands BLADEHAND
+%end
+
+### Hand 2
+%parts_ctg HAND2
+%parts_wx 16
+%parts_wy 32
+%parts_ox 16
+%parts_oy 0
+%sdir player/hand2
+
+shield_round_small SHIELD_ROUND_SMALL
+shield_round_small2 SHIELD_ROUND_SMALL2
+bullseye BULLSEYE
+
+shield_middle_round SHIELD_MIDDLE_ROUND
+shield_skull SHIELD_SKULL
+shield_round_white SHIELD_ROUND_WHITE
+boromir BOROMIR
+shield_round1 SHIELD_ROUND1
+shield_round2 SHIELD_ROUND2
+shield_round3 SHIELD_ROUND3
+shield_round4 SHIELD_ROUND4
+shield_round5 SHIELD_ROUND5
+shield_round6 SHIELD_ROUND6
+shield_round7 SHIELD_ROUND7
+
+shield_knight_blue SHIELD_KNIGHT_BLUE
+shield_knight_gray SHIELD_KNIGHT_GRAY
+shield_knight_rw SHIELD_KNIGHT_RW
+shield_middle_unicorn SHIELD_MIDDLE_UNICORN
+shield_kite1 SHIELD_KITE1
+shield_kite2 SHIELD_KITE2
+shield_kite3 SHIELD_KITE3
+shield_kite4 SHIELD_KITE4
+
+shield_long_red SHIELD_LONG_RED
+shield_middle_gray SHIELD_MIDDLE_GRAY
+shield_diamond_yellow SHIELD_DIAMOND_YELLOW
+shield_middle_brown SHIELD_MIDDLE_BROWN
+shield_middle_black SHIELD_MIDDLE_BLACK
+shield_middle_cyan SHIELD_MIDDLE_CYAN
+shield_middle_ethn SHIELD_MIDDLE_ETHN
+shield_long_cross SHIELD_LONG_CROSS
+shield_shaman SHIELD_SHAMAN
+shield_of_resistance SHIELD_OF_RESISTANCE
+gil-galad
+
+book_black BOOK_BLACK
+book_blue BOOK_BLUE
+book_red BOOK_RED
+book_magenta BOOK_MAGENTA
+book_green BOOK_GREEN
+book_cyan BOOK_CYAN
+book_yellow BOOK_YELLOW
+book_white BOOK_WHITE
+book_sky BOOK_SKY
+book_blue_dim BOOK_BLUE_DIM
+book_cyan_dim BOOK_CYAN_DIM
+book_green_dim BOOK_GREEN_DIM
+book_magenta_dim BOOK_MAGENTA_DIM
+book_red_dim BOOK_RED_DIM
+book_yellow_dim BOOK_YELLOW_DIM
+
+fire_green FIRE_GREEN
+fire_cyan FIRE_CYAN
+fire_white FIRE_WHITE
+light_blue LIGHT_BLUE
+light_red LIGHT_RED
+light_yellow LIGHT_YELLOW
+spark SPARK
+fire_dark FIRE_DARK
+fire_white2 FIRE_WHITE2
+lantern LANTERN
+torch TORCH
+pj PJ
+torsh2 TORCH2
+
+bladehands BLADEHAND
+dagger DAGGER
+sabre SABRE
+short_sword_slant SHORT_SWORD_SLANT
+%end
+
+###Hair
+%parts_ctg HAIR
+%parts_wx 16
+%parts_wy 16
+%parts_ox 8
+%parts_oy 0
+%sdir player/hair
+short_black SHORT_BLACK
+short_red SHORT_RED
+short_yellow SHORT_YELLOW
+short_white SHORT_WHITE
+long_black LONG_BLACK
+long_red LONG_RED
+long_yellow LONG_YELLOW
+long_white LONG_WHITE
+fem_black FEM_BLACK
+fem_red FEM_RED
+fem_yellow FEM_YELLOW
+fem_white FEM_WHITE
+elf_black ELF_BLACK
+elf_red ELF_RED
+elf_yellow ELF_YELLOW
+elf_white ELF_WHITE
+aragorn ARAGORN
+arwen ARWEN
+boromir BOROMIR
+frodo FRODO
+legolas LEGOLAS
+merry MERRY
+pj PJ
+sam SAM
+pigtail_red PIGTAIL_RED
+brown1 BROWN1
+brown2 BROWN2
+%end
+
+###Beard
+%parts_ctg BEARD
+%parts_wx 16
+%parts_wy 16
+%parts_ox 8
+%parts_oy 0
+%sdir player/beard
+
+short_black SHORT_BLACK
+short_red SHORT_RED
+short_yellow SHORT_YELLOW
+short_white SHORT_WHITE
+long_black LONG_BLACK
+long_red LONG_RED
+long_yellow LONG_YELLOW
+long_white LONG_WHITE
+pj PJ
+%end
+
+###Helms
+%parts_ctg HELM
+%parts_wx 16
+%parts_wy 16
+%parts_ox 8
+%parts_oy 0
+%sdir player/head
+
+cone_blue HAT_OFS
+cone_red CORN_RED
+straw STRAW
+wizard_blue WIZARD_BLUE
+cap_blue CAP_BLUE
+bandana_ybrown BANDANA_YBROWN
+hat_black HAT_BLACK
+gandalf GANDALF
+crown_gold
+cap_black1
+clown1
+feather_green FEATHER_GREEN
+feather_red FEATHER_RED
+feather_blue FEATHER_BLUE
+feather_yellow FEATHER_YELLOW
+feather_white FEATHER_WHITE
+band_white
+band_red
+band_yellow
+band_blue
+band_magenta
+taiso_blue
+taiso_magenta
+taiso_yellow
+taiso_red
+taiso_white
+dyrovepreva DYROVEPREVA
+wizard_purple WIZARD_PURPLE
+wizard_bluegreen WIZARD_BLUEGREEN
+wizard_darkgreen WIZARD_DARKGREEN
+wizard_brown WIZARD_BROWN
+wizard_blackgold WIZARD_BLACKGOLD
+wizard_blackred WIZARD_BLACKRED
+wizard_red WIZARD_RED
+wizard_white WIZARD_WHITE
+turban_white TURBAN_WHITE
+turban_brown TURBAN_BROWN
+turban_purple TURBAN_PURPLE
+
+horns1 HORNS1
+horns2 HORNS2
+horns3 HORNS3
+
+iron1 HELM_OFS
+helm_red HELM_RED
+horned HELM_HORNED
+helm_gimli HELM_GIMLI
+helm_green HELM_GREEN
+cheek_red
+iron_red IRON_RED
+blue_horn_gold BLUE_HORN_GOLD
+hood_white WHITE
+
+yellow_wing YELLOW_WING
+brown_gold BROWN_GOLD
+black_horn BLACK_HORN
+full_gold FULL_GOLD
+chain CHAIN
+
+black_horn2 FHELM_OFS
+full_black FHELM_BLACK
+horn_gray FHELM_HORN_GRAY
+iron2 FHELM_GRAY
+iron3 FHELM_GRAY2
+fhelm_gray3 FHELM_GRAY3
+fhelm_horn_yellow FHELM_HORN_YELLOW
+fhelm_horn2 FHELM_HORN2
+horn_evil FHELM_EVIL
+helm_plume FHELM_PLUME
+mummy FHELM_MUMMY
+isildur FHELM_ISILDUR
+art_dragonhelm ART_DRAGONHELM
+
+healer FHELM_HEALER
+hood_gray HOOD_GRAY
+hood_red HOOD_RED
+hood_green2 HOOD_GREEN2
+hood_cyan HOOD_CYAN
+hood_orange HOOD_ORANGE
+hood_red2 HOOD_RED2
+hood_black2 HOOD_BLACK2
+hood_white2 HOOD_WHITE2
+hood_ybrown HOOD_YBROWN
+hood_green HOOD_GREEN
+ninja_black MASK_NINJA_BLACK
+%end
+
+%parts_ctg DRCWING
+%parts_wx 32
+%parts_wy 16
+%parts_ox 0
+%parts_oy 0
+%sdir player/drcwing
+drcwing_brown BROWN
+drcwing_black BLACK
+drcwing_yellow YELLOW
+drcwing_grey GREY
+drcwing_green GREEN
+drcwing_mottled MOTTLED
+drcwing_pale PALE
+drcwing_purple PURPLE
+drcwing_red RED
+drcwing_white WHITE
+%end
+
+%parts_ctg DRCHEAD
+%parts_wx 16
+%parts_wy 16
+%parts_ox 8
+%parts_oy 0
+%sdir player/drchead
+drchead_brown BROWN
+drchead_black BLACK
+drchead_yellow YELLOW
+drchead_grey GREY
+drchead_green GREEN
+drchead_mottled MOTTLED
+drchead_pale PALE
+drchead_purple PURPLE
+drchead_red RED
+drchead_white WHITE
+%end
diff --git a/crawl-ref/source/rltiles/dc-urand.txt b/crawl-ref/source/rltiles/dc-urand.txt
new file mode 100644
index 0000000000..c740c58e31
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-urand.txt
@@ -0,0 +1,54 @@
+%sdir item
+weapon/urand_bloodbane URAND_BLOODBANE
+weapon/urand_fkaming_death URAND_FLAMING_DEATH
+weapon/urand_brilliance URAND_BRILLIANCE
+weapon/urand_leech URAND_LEECH
+weapon/urand_chilly_death URAND_CHILLY_DEATH
+weapon/urand_morg URAND_MORG
+weapon/urand_finisher URAND_FINISHER
+weapon/urand_punk URAND_PUNK
+weapon/urand_krishna URAND_KRISHNA
+weapon/urand_skullcrusher URAND_SKULLCRUSHER
+weapon/urand_guard URAND_GUARD
+weapon/urand_jihad URAND_JIHAD
+weapon/urand_fiery_devil URAND_FIERY_DEVIL
+weapon/urand_doom_knight URAND_DOOM_KNIGHT
+weapon/urand_eos URAND_EOS
+weapon/urand_voo_doo URAND_VOO_DOO
+weapon/urand_octopus_king URAND_OCTOPUS_KING
+weapon/urand_arga URAND_ARGA
+weapon/urand_elemental URAND_ELEMENTAL
+weapon/urand_sniper URAND_SNIPER
+weapon/urand_erchidel URAND_ERCHIDEL
+weapon/urand_plutonium URAND_PLUTONIUM
+weapon/urand_undeadhunter URAND_UNDERADHUNTER
+weapon/urand_blowgun URAND_BLOWGUN
+armor/urand_ignorance URAND_IGNORANCE
+armor/urand_zin URAND_ZIN
+armor/urand_augmentation URAND_AUGMENTATION
+armor/urand_thief URAND_THIEF
+armor/urand_bullseye URAND_BULLSEYE
+armor/urand_dyrovepreva URAND_DYROVEPREVA
+armor/urand_misfortune URAND_MISFORTUNE
+armor/urand_flash URAND_FLASH
+armor/urand_assassin URAND_ASSASSIN
+armor/urand_lear URAND_LEAR
+armor/urand_zhor URAND_ZHOR
+armor/urand_salamander URAND_SALAMANDER
+armor/urand_war URAND_WAR
+armor/urand_resistance URAND_RESISTANCE
+armor/urand_folly URAND_FOLLY
+armor/urand_edison URAND_EDISON
+armor/urand_dragonmask URAND_DRAGONMASK
+armor/urand_night URAND_NIGHT
+armor/urand_dragon_king URAND_DRAGON_KING
+armor/urand_alchemist URAND_ALCHEMIST
+armor/urand_fencer URAND_FENCER
+ring/urand_shadows URAND_SHADOWS
+ring/urand_shaolin URAND_SHAOLIN
+ring/urand_robustness URAND_ROBUSTNESS
+ring/urand_mage URAND_MAGE
+amulet/urand_cekugob URAND_CEKUGOB
+amulet/urand_four_winds URAND_FOUR_WINDS
+amulet/urand_bloodlust URAND_BLOODLUST
+
diff --git a/crawl-ref/source/rltiles/dc-wall2d.txt b/crawl-ref/source/rltiles/dc-wall2d.txt
new file mode 100644
index 0000000000..8bd4e80c55
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-wall2d.txt
@@ -0,0 +1,289 @@
+%enumprefix W2D_
+%tiledef tiledef-w2d.h
+%tilecount tilecount-w2d.h
+%width 16
+%back none
+%name wall2d
+
+%sdir dc-dngn
+
+wall/brick_brown0 WALL_NORMAL
+wall/brick_brown1
+wall/brick_brown2
+wall/brick_brown3
+floor/pebble_gray0 FLOOR_NORMAL
+floor/pebble_gray1
+floor/pebble_gray2
+floor/pebble_gray3
+floor/pebble_gray4
+
+wall/relief0 WALL_HALL
+wall/relief1
+wall/relief2
+wall/relief3
+floor/mesh0 FLOOR_HALL
+floor/mesh1
+floor/mesh2
+floor/mesh3
+
+wall/hive0 WALL_HIVE
+wall/hive1
+wall/hive2
+wall/hive3
+floor/hive0 FLOOR_HIVE
+floor/hive1
+floor/hive2
+floor/hive3
+
+wall/ice0 WALL_ICE
+wall/ice1
+wall/ice2
+wall/ice3
+floor/ice0 FLOOR_ICE
+floor/ice1
+floor/ice2
+floor/ice3
+
+wall/lair0 WALL_LAIR
+wall/lair1
+wall/lair2
+wall/lair3
+floor/lair0 FLOOR_LAIR
+floor/lair1
+floor/lair2
+floor/lair3
+
+## orcs don't have their own floor or walls yet...
+wall/lair0 WALL_ORC
+wall/lair1
+wall/lair2
+wall/lair3
+floor/hive0 FLOOR_ORC
+floor/hive1
+floor/hive2
+floor/hive3
+
+wall/slime0 WALL_SLIME
+wall/slime1
+wall/slime2
+wall/slime3
+floor/bog_green0 FLOOR_SLIME
+floor/bog_green1
+floor/bog_green2
+floor/bog_green3
+
+wall/snake0 WALL_SNAKE
+wall/snake1
+wall/snake2
+wall/snake3
+floor/snake0 FLOOR_SNAKE
+floor/snake1
+floor/snake2
+floor/snake3
+
+## swamp also doesn't have any unique walls...
+wall/lair0 WALL_SWAMP
+wall/lair1
+wall/lair2
+wall/lair3
+floor/swamp0 FLOOR_SWAMP
+floor/swamp1
+floor/swamp2
+floor/swamp3
+
+wall/tomb0 WALL_TOMB
+wall/tomb1
+wall/tomb2
+wall/tomb3
+floor/tomb0 FLOOR_TOMB
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/undead0 WALL_UNDEAD
+wall/undead1
+wall/undead2
+wall/undead3
+floor/tomb0 FLOOR_UNDEAD
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/vault0 WALL_VAULT
+wall/vault1
+wall/vault2
+wall/vault3
+floor/rect_gray0 FLOOR_VAULT
+floor/rect_gray1
+floor/rect_gray2
+floor/rect_gray3
+
+wall/zot_blue0 WALL_ZOT_BLUE
+wall/zot_blue1
+wall/zot_blue2
+wall/zot_blue3
+floor/tomb0 FLOOR_ZOT_BLUE
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/zot_cyan0 WALL_ZOT_CYAN
+wall/zot_cyan1
+wall/zot_cyan2
+wall/zot_cyan3
+floor/tomb0 FLOOR_ZOT_CYAN
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/zot_gray0 WALL_ZOT_GRAY
+wall/zot_gray1
+wall/zot_gray2
+wall/zot_gray3
+floor/tomb0 FLOOR_ZOT_GRAY
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/zot_green0 WALL_ZOT_GREEN
+wall/zot_green1
+wall/zot_green2
+wall/zot_green3
+floor/tomb0 FLOOR_ZOT_GREEN
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/zot_magenta0 WALL_ZOT_MAGENTA
+wall/zot_magenta1
+wall/zot_magenta2
+wall/zot_magenta3
+floor/tomb0 FLOOR_ZOT_MAGENTA
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/zot_red0 WALL_ZOT_RED
+wall/zot_red1
+wall/zot_red2
+wall/zot_red3
+floor/tomb0 FLOOR_ZOT_RED
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/zot_yellow0 WALL_ZOT_YELLOW
+wall/zot_yellow1
+wall/zot_yellow2
+wall/zot_yellow3
+floor/tomb0 FLOOR_ZOT_YELLOW
+floor/tomb1
+floor/tomb2
+floor/tomb3
+
+wall/brick_gray0 WALL_BAZAAR_GRAY
+wall/brick_gray1
+wall/brick_gray2
+wall/brick_gray3
+
+wall/stone_gray0 WALL_BAZAAR_STONE
+wall/stone_gray1
+wall/stone_gray2
+wall/stone_gray3
+
+floor/grass0 FLOOR_BAZAAR_GRASS
+floor/grass1
+floor/grass2
+
+floor/grass_n FLOOR_BAZAAR_GRASS1_SPECIAL
+floor/grass_ne
+floor/grass_e
+floor/grass_se
+floor/grass_s
+floor/grass_sw
+floor/grass_w
+floor/grass_nw
+floor/grass_full
+
+%start
+%compose floor/grass0
+%compose floor/pedestal_n
+%finish FLOOR_BAZAAR_GRASS2_SPECIAL
+%start
+%compose floor/grass1
+%compose floor/pedestal_ne
+%finish
+%start
+%compose floor/grass2
+%compose floor/pedestal_e
+%finish
+%start
+%compose floor/grass1
+%compose floor/pedestal_se
+%finish
+%start
+%compose floor/grass0
+%compose floor/pedestal_s
+%finish
+%start
+%compose floor/grass1
+%compose floor/pedestal_sw
+%finish
+%start
+%compose floor/grass2
+%compose floor/pedestal_w
+%finish
+%start
+%compose floor/grass0
+%compose floor/pedestal_nw
+%finish
+floor/pedestal_full
+
+%start
+%compose floor/rect_gray0
+%compose floor/pedestal_n
+%finish FLOOR_BAZAAR_VAULT_SPECIAL
+%start
+%compose floor/rect_gray1
+%compose floor/pedestal_ne
+%finish
+%start
+%compose floor/rect_gray2
+%compose floor/pedestal_e
+%finish
+%start
+%compose floor/rect_gray3
+%compose floor/pedestal_se
+%finish
+%start
+%compose floor/rect_gray2
+%compose floor/pedestal_s
+%finish
+%start
+%compose floor/rect_gray1
+%compose floor/pedestal_sw
+%finish
+%start
+%compose floor/rect_gray0
+%compose floor/pedestal_w
+%finish
+%start
+%compose floor/rect_gray3
+%compose floor/pedestal_nw
+%finish
+floor/pedestal_full
+
+floor/dirt0 FLOOR_BAZAAR_DIRT
+floor/dirt1
+floor/dirt2
+
+floor/dirt_n FLOOR_BAZAAR_DIRT_SPECIAL
+floor/dirt_ne
+floor/dirt_e
+floor/dirt_se
+floor/dirt_s
+floor/dirt_sw
+floor/dirt_w
+floor/dirt_nw
+floor/dirt_full
+
diff --git a/crawl-ref/source/rltiles/effect/acid_venom.bmp b/crawl-ref/source/rltiles/effect/acid_venom.bmp
new file mode 100644
index 0000000000..c6e842bd4a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/acid_venom.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow0.bmp b/crawl-ref/source/rltiles/effect/arrow0.bmp
new file mode 100644
index 0000000000..071ba37ff0
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow1.bmp b/crawl-ref/source/rltiles/effect/arrow1.bmp
new file mode 100644
index 0000000000..f2c1b620b6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow2.bmp b/crawl-ref/source/rltiles/effect/arrow2.bmp
new file mode 100644
index 0000000000..16fc28effd
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow3.bmp b/crawl-ref/source/rltiles/effect/arrow3.bmp
new file mode 100644
index 0000000000..98594ff143
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow4.bmp b/crawl-ref/source/rltiles/effect/arrow4.bmp
new file mode 100644
index 0000000000..f9f370de6e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow5.bmp b/crawl-ref/source/rltiles/effect/arrow5.bmp
new file mode 100644
index 0000000000..67df1f6f1f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow6.bmp b/crawl-ref/source/rltiles/effect/arrow6.bmp
new file mode 100644
index 0000000000..4566683dc3
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/arrow7.bmp b/crawl-ref/source/rltiles/effect/arrow7.bmp
new file mode 100644
index 0000000000..4ba1a3df81
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/arrow7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/blinding_venom.bmp b/crawl-ref/source/rltiles/effect/blinding_venom.bmp
new file mode 100644
index 0000000000..771cbf7cf4
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/blinding_venom.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt0.bmp b/crawl-ref/source/rltiles/effect/bolt0.bmp
new file mode 100644
index 0000000000..e05d1f46ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt01.bmp b/crawl-ref/source/rltiles/effect/bolt01.bmp
new file mode 100644
index 0000000000..55daf563d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt01.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt02.bmp b/crawl-ref/source/rltiles/effect/bolt02.bmp
new file mode 100644
index 0000000000..5513aee39f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt02.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt03.bmp b/crawl-ref/source/rltiles/effect/bolt03.bmp
new file mode 100644
index 0000000000..97d089c4ce
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt03.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt04.bmp b/crawl-ref/source/rltiles/effect/bolt04.bmp
new file mode 100644
index 0000000000..2e097e0dd5
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt04.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt05.bmp b/crawl-ref/source/rltiles/effect/bolt05.bmp
new file mode 100644
index 0000000000..c929a3657e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt05.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt06.bmp b/crawl-ref/source/rltiles/effect/bolt06.bmp
new file mode 100644
index 0000000000..1b087b9ff9
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt06.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt07.bmp b/crawl-ref/source/rltiles/effect/bolt07.bmp
new file mode 100644
index 0000000000..9647045359
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt07.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt08.bmp b/crawl-ref/source/rltiles/effect/bolt08.bmp
new file mode 100644
index 0000000000..a897d2e7f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt08.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt1.bmp b/crawl-ref/source/rltiles/effect/bolt1.bmp
new file mode 100644
index 0000000000..c080c65bb5
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt2.bmp b/crawl-ref/source/rltiles/effect/bolt2.bmp
new file mode 100644
index 0000000000..905041f838
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt3.bmp b/crawl-ref/source/rltiles/effect/bolt3.bmp
new file mode 100644
index 0000000000..dc5789a21f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt4.bmp b/crawl-ref/source/rltiles/effect/bolt4.bmp
new file mode 100644
index 0000000000..ffc3976d29
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt5.bmp b/crawl-ref/source/rltiles/effect/bolt5.bmp
new file mode 100644
index 0000000000..cc13ce8043
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt6.bmp b/crawl-ref/source/rltiles/effect/bolt6.bmp
new file mode 100644
index 0000000000..d62eb71969
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/bolt7.bmp b/crawl-ref/source/rltiles/effect/bolt7.bmp
new file mode 100644
index 0000000000..d2b8643758
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/bolt7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/boomerang1.bmp b/crawl-ref/source/rltiles/effect/boomerang1.bmp
new file mode 100644
index 0000000000..c758e19efc
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/boomerang1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/boomerang2.bmp b/crawl-ref/source/rltiles/effect/boomerang2.bmp
new file mode 100644
index 0000000000..8c5909cd0f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/boomerang2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_black_smoke.bmp b/crawl-ref/source/rltiles/effect/cloud_black_smoke.bmp
new file mode 100644
index 0000000000..5e6c6c46dd
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_black_smoke.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_blue_smoke.bmp b/crawl-ref/source/rltiles/effect/cloud_blue_smoke.bmp
new file mode 100644
index 0000000000..3769a175c0
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_blue_smoke.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_cold0.bmp b/crawl-ref/source/rltiles/effect/cloud_cold0.bmp
new file mode 100644
index 0000000000..ba9330c446
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_cold0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_cold1.bmp b/crawl-ref/source/rltiles/effect/cloud_cold1.bmp
new file mode 100644
index 0000000000..72cdfadeac
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_cold1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_cold2.bmp b/crawl-ref/source/rltiles/effect/cloud_cold2.bmp
new file mode 100644
index 0000000000..b8b51bff0e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_cold2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_fire0.bmp b/crawl-ref/source/rltiles/effect/cloud_fire0.bmp
new file mode 100644
index 0000000000..94e723e806
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_fire0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_fire1.bmp b/crawl-ref/source/rltiles/effect/cloud_fire1.bmp
new file mode 100644
index 0000000000..3e639680b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_fire1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_fire2.bmp b/crawl-ref/source/rltiles/effect/cloud_fire2.bmp
new file mode 100644
index 0000000000..97e08a3a17
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_fire2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_grey_smoke.bmp b/crawl-ref/source/rltiles/effect/cloud_grey_smoke.bmp
new file mode 100644
index 0000000000..33aa3c3daa
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_grey_smoke.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_miasma.bmp b/crawl-ref/source/rltiles/effect/cloud_miasma.bmp
new file mode 100644
index 0000000000..5e6c6c46dd
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_miasma.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_poison0.bmp b/crawl-ref/source/rltiles/effect/cloud_poison0.bmp
new file mode 100644
index 0000000000..63771dc104
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_poison0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_poison1.bmp b/crawl-ref/source/rltiles/effect/cloud_poison1.bmp
new file mode 100644
index 0000000000..480e6de98c
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_poison1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_poison2.bmp b/crawl-ref/source/rltiles/effect/cloud_poison2.bmp
new file mode 100644
index 0000000000..59dbb691ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_poison2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/cloud_purp_smoke.bmp b/crawl-ref/source/rltiles/effect/cloud_purp_smoke.bmp
new file mode 100644
index 0000000000..32479fcfac
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/cloud_purp_smoke.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart0.bmp b/crawl-ref/source/rltiles/effect/dart0.bmp
new file mode 100644
index 0000000000..1f0e1f1ea3
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart1.bmp b/crawl-ref/source/rltiles/effect/dart1.bmp
new file mode 100644
index 0000000000..47dc11c8bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart2.bmp b/crawl-ref/source/rltiles/effect/dart2.bmp
new file mode 100644
index 0000000000..d941c43127
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart3.bmp b/crawl-ref/source/rltiles/effect/dart3.bmp
new file mode 100644
index 0000000000..2cd72c17b3
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart4.bmp b/crawl-ref/source/rltiles/effect/dart4.bmp
new file mode 100644
index 0000000000..2779ff2f3a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart5.bmp b/crawl-ref/source/rltiles/effect/dart5.bmp
new file mode 100644
index 0000000000..5d6969a653
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart6.bmp b/crawl-ref/source/rltiles/effect/dart6.bmp
new file mode 100644
index 0000000000..f54b7ccd5f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/dart7.bmp b/crawl-ref/source/rltiles/effect/dart7.bmp
new file mode 100644
index 0000000000..24e5c77f8f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/dart7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf1.bmp b/crawl-ref/source/rltiles/effect/engulf1.bmp
new file mode 100644
index 0000000000..39e52d3308
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf2.bmp b/crawl-ref/source/rltiles/effect/engulf2.bmp
new file mode 100644
index 0000000000..16dfda8e46
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf3.bmp b/crawl-ref/source/rltiles/effect/engulf3.bmp
new file mode 100644
index 0000000000..f2074b740c
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf4.bmp b/crawl-ref/source/rltiles/effect/engulf4.bmp
new file mode 100644
index 0000000000..69708b8a8f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf5.bmp b/crawl-ref/source/rltiles/effect/engulf5.bmp
new file mode 100644
index 0000000000..c8fc180693
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf6.bmp b/crawl-ref/source/rltiles/effect/engulf6.bmp
new file mode 100644
index 0000000000..734431820c
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf7.bmp b/crawl-ref/source/rltiles/effect/engulf7.bmp
new file mode 100644
index 0000000000..b7c7eeafa6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/engulf8.bmp b/crawl-ref/source/rltiles/effect/engulf8.bmp
new file mode 100644
index 0000000000..ddd394c63d
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/engulf8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black0.bmp b/crawl-ref/source/rltiles/effect/explode_black0.bmp
new file mode 100644
index 0000000000..3776d2e2b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black1.bmp b/crawl-ref/source/rltiles/effect/explode_black1.bmp
new file mode 100644
index 0000000000..f314c1efed
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black2.bmp b/crawl-ref/source/rltiles/effect/explode_black2.bmp
new file mode 100644
index 0000000000..43b2be1344
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black3.bmp b/crawl-ref/source/rltiles/effect/explode_black3.bmp
new file mode 100644
index 0000000000..7a36a9cdac
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black4.bmp b/crawl-ref/source/rltiles/effect/explode_black4.bmp
new file mode 100644
index 0000000000..41c9ab36fd
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black5.bmp b/crawl-ref/source/rltiles/effect/explode_black5.bmp
new file mode 100644
index 0000000000..ada35eff8b
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black6.bmp b/crawl-ref/source/rltiles/effect/explode_black6.bmp
new file mode 100644
index 0000000000..b133a78f6a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black7.bmp b/crawl-ref/source/rltiles/effect/explode_black7.bmp
new file mode 100644
index 0000000000..927bd9d8e6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_black8.bmp b/crawl-ref/source/rltiles/effect/explode_black8.bmp
new file mode 100644
index 0000000000..b2d745f0ac
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_black8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue0.bmp b/crawl-ref/source/rltiles/effect/explode_blue0.bmp
new file mode 100644
index 0000000000..c051072daf
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue1.bmp b/crawl-ref/source/rltiles/effect/explode_blue1.bmp
new file mode 100644
index 0000000000..7c5cc857de
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue2.bmp b/crawl-ref/source/rltiles/effect/explode_blue2.bmp
new file mode 100644
index 0000000000..17564f732f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue3.bmp b/crawl-ref/source/rltiles/effect/explode_blue3.bmp
new file mode 100644
index 0000000000..3834b5f96a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue4.bmp b/crawl-ref/source/rltiles/effect/explode_blue4.bmp
new file mode 100644
index 0000000000..f2271b9f0b
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue5.bmp b/crawl-ref/source/rltiles/effect/explode_blue5.bmp
new file mode 100644
index 0000000000..d7a085ecaa
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue6.bmp b/crawl-ref/source/rltiles/effect/explode_blue6.bmp
new file mode 100644
index 0000000000..8956ed226e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue7.bmp b/crawl-ref/source/rltiles/effect/explode_blue7.bmp
new file mode 100644
index 0000000000..8ace9d4ca1
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_blue8.bmp b/crawl-ref/source/rltiles/effect/explode_blue8.bmp
new file mode 100644
index 0000000000..172dd18c8a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_blue8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown0.bmp b/crawl-ref/source/rltiles/effect/explode_brown0.bmp
new file mode 100644
index 0000000000..cbdc9645c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown1.bmp b/crawl-ref/source/rltiles/effect/explode_brown1.bmp
new file mode 100644
index 0000000000..b285525086
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown2.bmp b/crawl-ref/source/rltiles/effect/explode_brown2.bmp
new file mode 100644
index 0000000000..a2792d0255
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown3.bmp b/crawl-ref/source/rltiles/effect/explode_brown3.bmp
new file mode 100644
index 0000000000..a1814ae7d6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown4.bmp b/crawl-ref/source/rltiles/effect/explode_brown4.bmp
new file mode 100644
index 0000000000..d8fa83906b
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown5.bmp b/crawl-ref/source/rltiles/effect/explode_brown5.bmp
new file mode 100644
index 0000000000..63cca8152b
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown6.bmp b/crawl-ref/source/rltiles/effect/explode_brown6.bmp
new file mode 100644
index 0000000000..d2c61bb035
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown7.bmp b/crawl-ref/source/rltiles/effect/explode_brown7.bmp
new file mode 100644
index 0000000000..9791eb56d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_brown8.bmp b/crawl-ref/source/rltiles/effect/explode_brown8.bmp
new file mode 100644
index 0000000000..df3f262d87
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_brown8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue0.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue0.bmp
new file mode 100644
index 0000000000..bed0ecd39f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue1.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue1.bmp
new file mode 100644
index 0000000000..14ce8ccd9f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue2.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue2.bmp
new file mode 100644
index 0000000000..e6d057b5ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue3.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue3.bmp
new file mode 100644
index 0000000000..6eeaaf9dbe
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue4.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue4.bmp
new file mode 100644
index 0000000000..3fd0b441a1
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue5.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue5.bmp
new file mode 100644
index 0000000000..80646b95a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue6.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue6.bmp
new file mode 100644
index 0000000000..023c55fb19
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue7.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue7.bmp
new file mode 100644
index 0000000000..76bc18f485
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_darkblue8.bmp b/crawl-ref/source/rltiles/effect/explode_darkblue8.bmp
new file mode 100644
index 0000000000..bb373f8890
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_darkblue8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green0.bmp b/crawl-ref/source/rltiles/effect/explode_green0.bmp
new file mode 100644
index 0000000000..88fc2958e6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green1.bmp b/crawl-ref/source/rltiles/effect/explode_green1.bmp
new file mode 100644
index 0000000000..b0f842c8c7
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green2.bmp b/crawl-ref/source/rltiles/effect/explode_green2.bmp
new file mode 100644
index 0000000000..259e1ec00c
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green3.bmp b/crawl-ref/source/rltiles/effect/explode_green3.bmp
new file mode 100644
index 0000000000..99dcfabe9f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green4.bmp b/crawl-ref/source/rltiles/effect/explode_green4.bmp
new file mode 100644
index 0000000000..bda45219d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green5.bmp b/crawl-ref/source/rltiles/effect/explode_green5.bmp
new file mode 100644
index 0000000000..7e2c0d7ade
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green6.bmp b/crawl-ref/source/rltiles/effect/explode_green6.bmp
new file mode 100644
index 0000000000..c891f11839
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green7.bmp b/crawl-ref/source/rltiles/effect/explode_green7.bmp
new file mode 100644
index 0000000000..8865528100
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_green8.bmp b/crawl-ref/source/rltiles/effect/explode_green8.bmp
new file mode 100644
index 0000000000..8266fb8dba
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_green8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple0.bmp b/crawl-ref/source/rltiles/effect/explode_purple0.bmp
new file mode 100644
index 0000000000..61f9c4e1bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple1.bmp b/crawl-ref/source/rltiles/effect/explode_purple1.bmp
new file mode 100644
index 0000000000..cebcf00cc6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple2.bmp b/crawl-ref/source/rltiles/effect/explode_purple2.bmp
new file mode 100644
index 0000000000..bc752b4383
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple3.bmp b/crawl-ref/source/rltiles/effect/explode_purple3.bmp
new file mode 100644
index 0000000000..92e69c79c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple4.bmp b/crawl-ref/source/rltiles/effect/explode_purple4.bmp
new file mode 100644
index 0000000000..2d4738de9e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple5.bmp b/crawl-ref/source/rltiles/effect/explode_purple5.bmp
new file mode 100644
index 0000000000..dd38065607
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple6.bmp b/crawl-ref/source/rltiles/effect/explode_purple6.bmp
new file mode 100644
index 0000000000..34f1d7d98f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple7.bmp b/crawl-ref/source/rltiles/effect/explode_purple7.bmp
new file mode 100644
index 0000000000..93af35f6d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_purple8.bmp b/crawl-ref/source/rltiles/effect/explode_purple8.bmp
new file mode 100644
index 0000000000..118ee9f66d
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_purple8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red0.bmp b/crawl-ref/source/rltiles/effect/explode_red0.bmp
new file mode 100644
index 0000000000..584d1fbef3
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red1.bmp b/crawl-ref/source/rltiles/effect/explode_red1.bmp
new file mode 100644
index 0000000000..a854e28dd1
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red2.bmp b/crawl-ref/source/rltiles/effect/explode_red2.bmp
new file mode 100644
index 0000000000..cabd6a5947
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red3.bmp b/crawl-ref/source/rltiles/effect/explode_red3.bmp
new file mode 100644
index 0000000000..abc27aa888
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red4.bmp b/crawl-ref/source/rltiles/effect/explode_red4.bmp
new file mode 100644
index 0000000000..99f239e8dc
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red5.bmp b/crawl-ref/source/rltiles/effect/explode_red5.bmp
new file mode 100644
index 0000000000..907dfc2c61
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red6.bmp b/crawl-ref/source/rltiles/effect/explode_red6.bmp
new file mode 100644
index 0000000000..6a709f6d99
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red7.bmp b/crawl-ref/source/rltiles/effect/explode_red7.bmp
new file mode 100644
index 0000000000..1793706508
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/explode_red8.bmp b/crawl-ref/source/rltiles/effect/explode_red8.bmp
new file mode 100644
index 0000000000..b7759f18ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/explode_red8.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin0.bmp b/crawl-ref/source/rltiles/effect/javelin0.bmp
new file mode 100644
index 0000000000..bbbf48f062
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin1.bmp b/crawl-ref/source/rltiles/effect/javelin1.bmp
new file mode 100644
index 0000000000..f161cf2277
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin2.bmp b/crawl-ref/source/rltiles/effect/javelin2.bmp
new file mode 100644
index 0000000000..02ad7042b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin3.bmp b/crawl-ref/source/rltiles/effect/javelin3.bmp
new file mode 100644
index 0000000000..b7eeb615c2
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin4.bmp b/crawl-ref/source/rltiles/effect/javelin4.bmp
new file mode 100644
index 0000000000..50697f0025
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin5.bmp b/crawl-ref/source/rltiles/effect/javelin5.bmp
new file mode 100644
index 0000000000..a6eb7d234f
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin6.bmp b/crawl-ref/source/rltiles/effect/javelin6.bmp
new file mode 100644
index 0000000000..e93fdcdec7
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/javelin7.bmp b/crawl-ref/source/rltiles/effect/javelin7.bmp
new file mode 100644
index 0000000000..15afce957c
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/javelin7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle0.bmp b/crawl-ref/source/rltiles/effect/needle0.bmp
new file mode 100644
index 0000000000..ac569f0c2d
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle1.bmp b/crawl-ref/source/rltiles/effect/needle1.bmp
new file mode 100644
index 0000000000..d38780407d
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle2.bmp b/crawl-ref/source/rltiles/effect/needle2.bmp
new file mode 100644
index 0000000000..f35f6844d8
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle3.bmp b/crawl-ref/source/rltiles/effect/needle3.bmp
new file mode 100644
index 0000000000..2bb2a16d46
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle4.bmp b/crawl-ref/source/rltiles/effect/needle4.bmp
new file mode 100644
index 0000000000..bf971a12cb
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle5.bmp b/crawl-ref/source/rltiles/effect/needle5.bmp
new file mode 100644
index 0000000000..aded53ccf4
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle6.bmp b/crawl-ref/source/rltiles/effect/needle6.bmp
new file mode 100644
index 0000000000..30c909f73e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/needle7.bmp b/crawl-ref/source/rltiles/effect/needle7.bmp
new file mode 100644
index 0000000000..2b305fbc1b
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/needle7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/net_trap.bmp b/crawl-ref/source/rltiles/effect/net_trap.bmp
new file mode 100644
index 0000000000..2db5ac6027
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/net_trap.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/resist1.bmp b/crawl-ref/source/rltiles/effect/resist1.bmp
new file mode 100644
index 0000000000..1c4c895406
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/resist1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/resist2.bmp b/crawl-ref/source/rltiles/effect/resist2.bmp
new file mode 100644
index 0000000000..3fcc982cc7
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/resist2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/resist3.bmp b/crawl-ref/source/rltiles/effect/resist3.bmp
new file mode 100644
index 0000000000..b95d2822b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/resist3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/resist4.bmp b/crawl-ref/source/rltiles/effect/resist4.bmp
new file mode 100644
index 0000000000..bc4235cea0
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/resist4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/rock0.bmp b/crawl-ref/source/rltiles/effect/rock0.bmp
new file mode 100644
index 0000000000..daf8d8e9dd
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/rock0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/sling_bullet0.bmp b/crawl-ref/source/rltiles/effect/sling_bullet0.bmp
new file mode 100644
index 0000000000..fbeaebedf5
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/sling_bullet0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/stone0.bmp b/crawl-ref/source/rltiles/effect/stone0.bmp
new file mode 100644
index 0000000000..eead21d68a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/stone0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net0.bmp b/crawl-ref/source/rltiles/effect/throwing_net0.bmp
new file mode 100644
index 0000000000..5fa8803088
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net1.bmp b/crawl-ref/source/rltiles/effect/throwing_net1.bmp
new file mode 100644
index 0000000000..eda04c6139
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net2.bmp b/crawl-ref/source/rltiles/effect/throwing_net2.bmp
new file mode 100644
index 0000000000..9abe7ebd0e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net3.bmp b/crawl-ref/source/rltiles/effect/throwing_net3.bmp
new file mode 100644
index 0000000000..35157792bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net4.bmp b/crawl-ref/source/rltiles/effect/throwing_net4.bmp
new file mode 100644
index 0000000000..c462a4f661
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net5.bmp b/crawl-ref/source/rltiles/effect/throwing_net5.bmp
new file mode 100644
index 0000000000..379748df25
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net6.bmp b/crawl-ref/source/rltiles/effect/throwing_net6.bmp
new file mode 100644
index 0000000000..e4bea3503a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/throwing_net7.bmp b/crawl-ref/source/rltiles/effect/throwing_net7.bmp
new file mode 100644
index 0000000000..a6d0843961
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/throwing_net7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_acid0.bmp b/crawl-ref/source/rltiles/effect/zap_acid0.bmp
new file mode 100644
index 0000000000..2a294bf341
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_acid0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_acid1.bmp b/crawl-ref/source/rltiles/effect/zap_acid1.bmp
new file mode 100644
index 0000000000..bb4f9f765c
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_acid1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_acid2.bmp b/crawl-ref/source/rltiles/effect/zap_acid2.bmp
new file mode 100644
index 0000000000..dad17b797a
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_acid2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_acid3.bmp b/crawl-ref/source/rltiles/effect/zap_acid3.bmp
new file mode 100644
index 0000000000..51761f10a9
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_acid3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_black0.bmp b/crawl-ref/source/rltiles/effect/zap_black0.bmp
new file mode 100644
index 0000000000..44120a5811
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_black0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_black1.bmp b/crawl-ref/source/rltiles/effect/zap_black1.bmp
new file mode 100644
index 0000000000..34375a9d46
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_black1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_black2.bmp b/crawl-ref/source/rltiles/effect/zap_black2.bmp
new file mode 100644
index 0000000000..731e415d9b
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_black2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_black3.bmp b/crawl-ref/source/rltiles/effect/zap_black3.bmp
new file mode 100644
index 0000000000..05d18d24e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_black3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_dig.bmp b/crawl-ref/source/rltiles/effect/zap_dig.bmp
new file mode 100644
index 0000000000..d24beb8592
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_dig.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_elec0.bmp b/crawl-ref/source/rltiles/effect/zap_elec0.bmp
new file mode 100644
index 0000000000..1f1efe1b28
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_elec0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_elec1.bmp b/crawl-ref/source/rltiles/effect/zap_elec1.bmp
new file mode 100644
index 0000000000..28a2e5d197
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_elec1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_elec2.bmp b/crawl-ref/source/rltiles/effect/zap_elec2.bmp
new file mode 100644
index 0000000000..aa8e06a1ad
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_elec2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_elec3.bmp b/crawl-ref/source/rltiles/effect/zap_elec3.bmp
new file mode 100644
index 0000000000..2f73a3980c
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_elec3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_fire0.bmp b/crawl-ref/source/rltiles/effect/zap_fire0.bmp
new file mode 100644
index 0000000000..a569867135
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_fire0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_fire1.bmp b/crawl-ref/source/rltiles/effect/zap_fire1.bmp
new file mode 100644
index 0000000000..7b943b70b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_fire1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_fire2.bmp b/crawl-ref/source/rltiles/effect/zap_fire2.bmp
new file mode 100644
index 0000000000..fde040d99d
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_fire2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_fire3.bmp b/crawl-ref/source/rltiles/effect/zap_fire3.bmp
new file mode 100644
index 0000000000..da12376d3e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_fire3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_flash.bmp b/crawl-ref/source/rltiles/effect/zap_flash.bmp
new file mode 100644
index 0000000000..b39b1165e5
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_flash.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_gas0.bmp b/crawl-ref/source/rltiles/effect/zap_gas0.bmp
new file mode 100644
index 0000000000..4abf1200d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_gas0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_gas1.bmp b/crawl-ref/source/rltiles/effect/zap_gas1.bmp
new file mode 100644
index 0000000000..961490686b
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_gas1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_gas2.bmp b/crawl-ref/source/rltiles/effect/zap_gas2.bmp
new file mode 100644
index 0000000000..522246923e
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_gas2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_gas3.bmp b/crawl-ref/source/rltiles/effect/zap_gas3.bmp
new file mode 100644
index 0000000000..7d52e02572
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_gas3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_ice0.bmp b/crawl-ref/source/rltiles/effect/zap_ice0.bmp
new file mode 100644
index 0000000000..c7aca90496
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_ice0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_ice1.bmp b/crawl-ref/source/rltiles/effect/zap_ice1.bmp
new file mode 100644
index 0000000000..36930372ab
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_ice1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_ice2.bmp b/crawl-ref/source/rltiles/effect/zap_ice2.bmp
new file mode 100644
index 0000000000..1e1b4e43b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_ice2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_ice3.bmp b/crawl-ref/source/rltiles/effect/zap_ice3.bmp
new file mode 100644
index 0000000000..b3fa9df4e8
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_ice3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_magic0.bmp b/crawl-ref/source/rltiles/effect/zap_magic0.bmp
new file mode 100644
index 0000000000..8545c0db12
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_magic0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_magic1.bmp b/crawl-ref/source/rltiles/effect/zap_magic1.bmp
new file mode 100644
index 0000000000..8c31570f70
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_magic1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_magic2.bmp b/crawl-ref/source/rltiles/effect/zap_magic2.bmp
new file mode 100644
index 0000000000..d6b2225396
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_magic2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_magic3.bmp b/crawl-ref/source/rltiles/effect/zap_magic3.bmp
new file mode 100644
index 0000000000..b59f5ed682
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_magic3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_sleep0.bmp b/crawl-ref/source/rltiles/effect/zap_sleep0.bmp
new file mode 100644
index 0000000000..96aa8f4934
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_sleep0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_sleep1.bmp b/crawl-ref/source/rltiles/effect/zap_sleep1.bmp
new file mode 100644
index 0000000000..203b993dc6
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_sleep1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_sleep2.bmp b/crawl-ref/source/rltiles/effect/zap_sleep2.bmp
new file mode 100644
index 0000000000..9938343ffc
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_sleep2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zap_sleep3.bmp b/crawl-ref/source/rltiles/effect/zap_sleep3.bmp
new file mode 100644
index 0000000000..84a1019d05
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zap_sleep3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zigzag1.bmp b/crawl-ref/source/rltiles/effect/zigzag1.bmp
new file mode 100644
index 0000000000..6492b67e11
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zigzag1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zigzag2.bmp b/crawl-ref/source/rltiles/effect/zigzag2.bmp
new file mode 100644
index 0000000000..6492b67e11
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zigzag2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zigzag3.bmp b/crawl-ref/source/rltiles/effect/zigzag3.bmp
new file mode 100644
index 0000000000..1589761dc7
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zigzag3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/effect/zigzag4.bmp b/crawl-ref/source/rltiles/effect/zigzag4.bmp
new file mode 100644
index 0000000000..f7ccfdf1ae
--- /dev/null
+++ b/crawl-ref/source/rltiles/effect/zigzag4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/amulet_of_yendor.bmp b/crawl-ref/source/rltiles/item/amulet/amulet_of_yendor.bmp
new file mode 100644
index 0000000000..216aa1d19d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/amulet_of_yendor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/bone_gray.bmp b/crawl-ref/source/rltiles/item/amulet/bone_gray.bmp
new file mode 100644
index 0000000000..28403b0bb7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/bone_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/cameo_blue.bmp b/crawl-ref/source/rltiles/item/amulet/cameo_blue.bmp
new file mode 100644
index 0000000000..85c85f4186
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/cameo_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/cameo_orange.bmp b/crawl-ref/source/rltiles/item/amulet/cameo_orange.bmp
new file mode 100644
index 0000000000..cbded44ed1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/cameo_orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/celtic_blue.bmp b/crawl-ref/source/rltiles/item/amulet/celtic_blue.bmp
new file mode 100644
index 0000000000..fec191b38c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/celtic_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/celtic_red.bmp b/crawl-ref/source/rltiles/item/amulet/celtic_red.bmp
new file mode 100644
index 0000000000..4ae53e8562
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/celtic_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/celtic_yellow.bmp b/crawl-ref/source/rltiles/item/amulet/celtic_yellow.bmp
new file mode 100644
index 0000000000..f64db7f3db
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/celtic_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/circular.bmp b/crawl-ref/source/rltiles/item/amulet/circular.bmp
new file mode 100644
index 0000000000..9aae0d67f0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/circular.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/concave.bmp b/crawl-ref/source/rltiles/item/amulet/concave.bmp
new file mode 100644
index 0000000000..af97523a9d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/concave.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/crystal_green.bmp b/crawl-ref/source/rltiles/item/amulet/crystal_green.bmp
new file mode 100644
index 0000000000..bea9b2625d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/crystal_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/crystal_red.bmp b/crawl-ref/source/rltiles/item/amulet/crystal_red.bmp
new file mode 100644
index 0000000000..8dc28bd740
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/crystal_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/crystal_white.bmp b/crawl-ref/source/rltiles/item/amulet/crystal_white.bmp
new file mode 100644
index 0000000000..a17585532a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/crystal_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/cylinder_gray.bmp b/crawl-ref/source/rltiles/item/amulet/cylinder_gray.bmp
new file mode 100644
index 0000000000..9962c47589
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/cylinder_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/eye_cyan.bmp b/crawl-ref/source/rltiles/item/amulet/eye_cyan.bmp
new file mode 100644
index 0000000000..3f946cd16f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/eye_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/eye_green.bmp b/crawl-ref/source/rltiles/item/amulet/eye_green.bmp
new file mode 100644
index 0000000000..973aa9620e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/eye_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/eye_magenta.bmp b/crawl-ref/source/rltiles/item/amulet/eye_magenta.bmp
new file mode 100644
index 0000000000..015822dd19
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/eye_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/face1_gold.bmp b/crawl-ref/source/rltiles/item/amulet/face1_gold.bmp
new file mode 100644
index 0000000000..5a34879611
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/face1_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/face2.bmp b/crawl-ref/source/rltiles/item/amulet/face2.bmp
new file mode 100644
index 0000000000..810695e12b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/face2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/hexagonal.bmp b/crawl-ref/source/rltiles/item/amulet/hexagonal.bmp
new file mode 100644
index 0000000000..f74134785b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/hexagonal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/octagonal.bmp b/crawl-ref/source/rltiles/item/amulet/octagonal.bmp
new file mode 100644
index 0000000000..0066227319
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/octagonal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/oval.bmp b/crawl-ref/source/rltiles/item/amulet/oval.bmp
new file mode 100644
index 0000000000..87c42b4d4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/oval.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/penta_green.bmp b/crawl-ref/source/rltiles/item/amulet/penta_green.bmp
new file mode 100644
index 0000000000..10fff32d44
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/penta_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/penta_orange.bmp b/crawl-ref/source/rltiles/item/amulet/penta_orange.bmp
new file mode 100644
index 0000000000..2dbf26a653
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/penta_orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/pyramidal.bmp b/crawl-ref/source/rltiles/item/amulet/pyramidal.bmp
new file mode 100644
index 0000000000..757bf10ed3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/pyramidal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/ring_cyan.bmp b/crawl-ref/source/rltiles/item/amulet/ring_cyan.bmp
new file mode 100644
index 0000000000..cfc7b01b3b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/ring_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/ring_green.bmp b/crawl-ref/source/rltiles/item/amulet/ring_green.bmp
new file mode 100644
index 0000000000..60fef53b81
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/ring_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/ring_red.bmp b/crawl-ref/source/rltiles/item/amulet/ring_red.bmp
new file mode 100644
index 0000000000..acd7e70638
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/ring_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/spherical.bmp b/crawl-ref/source/rltiles/item/amulet/spherical.bmp
new file mode 100644
index 0000000000..48354d694f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/spherical.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/square.bmp b/crawl-ref/source/rltiles/item/amulet/square.bmp
new file mode 100644
index 0000000000..fa8752351c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/square.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone1_cyan.bmp b/crawl-ref/source/rltiles/item/amulet/stone1_cyan.bmp
new file mode 100644
index 0000000000..c6ecb65c6a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone1_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone1_green.bmp b/crawl-ref/source/rltiles/item/amulet/stone1_green.bmp
new file mode 100644
index 0000000000..2b21ca3849
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone1_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone1_pink.bmp b/crawl-ref/source/rltiles/item/amulet/stone1_pink.bmp
new file mode 100644
index 0000000000..38a8f891d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone1_pink.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone2_blue.bmp b/crawl-ref/source/rltiles/item/amulet/stone2_blue.bmp
new file mode 100644
index 0000000000..e5649080b6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone2_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone2_green.bmp b/crawl-ref/source/rltiles/item/amulet/stone2_green.bmp
new file mode 100644
index 0000000000..0b13ded7c2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone2_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone2_red.bmp b/crawl-ref/source/rltiles/item/amulet/stone2_red.bmp
new file mode 100644
index 0000000000..0b51888aa5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone2_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone3_blue.bmp b/crawl-ref/source/rltiles/item/amulet/stone3_blue.bmp
new file mode 100644
index 0000000000..dfcf330fe3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone3_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone3_green.bmp b/crawl-ref/source/rltiles/item/amulet/stone3_green.bmp
new file mode 100644
index 0000000000..d57bf51e9b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone3_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/stone3_magenta.bmp b/crawl-ref/source/rltiles/item/amulet/stone3_magenta.bmp
new file mode 100644
index 0000000000..1ee8f33411
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/stone3_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/triangular.bmp b/crawl-ref/source/rltiles/item/amulet/triangular.bmp
new file mode 100644
index 0000000000..4aeb4470e5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/triangular.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/urand_bloodlust.bmp b/crawl-ref/source/rltiles/item/amulet/urand_bloodlust.bmp
new file mode 100644
index 0000000000..393bd064c0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/urand_bloodlust.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/urand_cekugob.bmp b/crawl-ref/source/rltiles/item/amulet/urand_cekugob.bmp
new file mode 100644
index 0000000000..e73bab4ee0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/urand_cekugob.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/amulet/urand_four_winds.bmp b/crawl-ref/source/rltiles/item/amulet/urand_four_winds.bmp
new file mode 100644
index 0000000000..e032136bce
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/amulet/urand_four_winds.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/alchemy_smock.bmp b/crawl-ref/source/rltiles/item/armor/alchemy_smock.bmp
new file mode 100644
index 0000000000..e5919edfb6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/alchemy_smock.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/animal_skin.bmp b/crawl-ref/source/rltiles/item/armor/animal_skin.bmp
new file mode 100644
index 0000000000..e71c8c4dec
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/animal_skin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/animal_skin2.bmp b/crawl-ref/source/rltiles/item/armor/animal_skin2.bmp
new file mode 100644
index 0000000000..d11980736a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/animal_skin2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/banded_mail.bmp b/crawl-ref/source/rltiles/item/armor/banded_mail.bmp
new file mode 100644
index 0000000000..625051d24d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/banded_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/black_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/black_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..1d5cd2b98f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/black_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/black_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/black_dragon_scales.bmp
new file mode 100644
index 0000000000..76be31eae1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/black_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/blue_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/blue_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..6147ecbf58
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/blue_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/blue_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/blue_dragon_scales.bmp
new file mode 100644
index 0000000000..4a2b088303
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/blue_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_blue1.bmp b/crawl-ref/source/rltiles/item/armor/boots_blue1.bmp
new file mode 100644
index 0000000000..84007dab3a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_blue1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_brown1.bmp b/crawl-ref/source/rltiles/item/armor/boots_brown1.bmp
new file mode 100644
index 0000000000..f093b96060
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_brown1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_brown2.bmp b/crawl-ref/source/rltiles/item/armor/boots_brown2.bmp
new file mode 100644
index 0000000000..78931e7586
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_green1.bmp b/crawl-ref/source/rltiles/item/armor/boots_green1.bmp
new file mode 100644
index 0000000000..7309927fbc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_green1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_green2.bmp b/crawl-ref/source/rltiles/item/armor/boots_green2.bmp
new file mode 100644
index 0000000000..7fea85b9c2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_green2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_iron1.bmp b/crawl-ref/source/rltiles/item/armor/boots_iron1.bmp
new file mode 100644
index 0000000000..726a5f7fea
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_iron1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_iron2.bmp b/crawl-ref/source/rltiles/item/armor/boots_iron2.bmp
new file mode 100644
index 0000000000..269ed605e3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_iron2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_iron3.bmp b/crawl-ref/source/rltiles/item/armor/boots_iron3.bmp
new file mode 100644
index 0000000000..dd333beb77
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_iron3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_stripe1.bmp b/crawl-ref/source/rltiles/item/armor/boots_stripe1.bmp
new file mode 100644
index 0000000000..738c4c6109
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_stripe1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/boots_yellow1.bmp b/crawl-ref/source/rltiles/item/armor/boots_yellow1.bmp
new file mode 100644
index 0000000000..e77d5ddc10
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/boots_yellow1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/breast_plate1.bmp b/crawl-ref/source/rltiles/item/armor/breast_plate1.bmp
new file mode 100644
index 0000000000..e546f70bf2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/breast_plate1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/breast_plate2.bmp b/crawl-ref/source/rltiles/item/armor/breast_plate2.bmp
new file mode 100644
index 0000000000..6fb7790c86
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/breast_plate2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/bronze_plate_mail.bmp b/crawl-ref/source/rltiles/item/armor/bronze_plate_mail.bmp
new file mode 100644
index 0000000000..98a8219a5c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/bronze_plate_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/buckled_boots.bmp b/crawl-ref/source/rltiles/item/armor/buckled_boots.bmp
new file mode 100644
index 0000000000..8d860c9c6d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/buckled_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/cap1.bmp b/crawl-ref/source/rltiles/item/armor/cap1.bmp
new file mode 100644
index 0000000000..e236cb8ae2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/cap1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/cap2.bmp b/crawl-ref/source/rltiles/item/armor/cap2.bmp
new file mode 100644
index 0000000000..f211045d3f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/cap2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/cap3.bmp b/crawl-ref/source/rltiles/item/armor/cap3.bmp
new file mode 100644
index 0000000000..d2fbee09dc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/cap3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/centaur_barding.bmp b/crawl-ref/source/rltiles/item/armor/centaur_barding.bmp
new file mode 100644
index 0000000000..94f8579a0a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/centaur_barding.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/chain_mail.bmp b/crawl-ref/source/rltiles/item/armor/chain_mail.bmp
new file mode 100644
index 0000000000..65b6a9cbda
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/chain_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/chain_mail1.bmp b/crawl-ref/source/rltiles/item/armor/chain_mail1.bmp
new file mode 100644
index 0000000000..2e1ade6731
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/chain_mail1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/chain_mail2.bmp b/crawl-ref/source/rltiles/item/armor/chain_mail2.bmp
new file mode 100644
index 0000000000..ffb52bf028
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/chain_mail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/chain_mail3.bmp b/crawl-ref/source/rltiles/item/armor/chain_mail3.bmp
new file mode 100644
index 0000000000..1356a58f45
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/chain_mail3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/cloak2.bmp b/crawl-ref/source/rltiles/item/armor/cloak2.bmp
new file mode 100644
index 0000000000..7b3ddd3dcb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/cloak2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/cloak3.bmp b/crawl-ref/source/rltiles/item/armor/cloak3.bmp
new file mode 100644
index 0000000000..79dfe5ac03
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/cloak3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/cloak4.bmp b/crawl-ref/source/rltiles/item/armor/cloak4.bmp
new file mode 100644
index 0000000000..946cf64eda
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/cloak4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/combat_boots.bmp b/crawl-ref/source/rltiles/item/armor/combat_boots.bmp
new file mode 100644
index 0000000000..9a2ccc35b3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/combat_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/cornuthaum.bmp b/crawl-ref/source/rltiles/item/armor/cornuthaum.bmp
new file mode 100644
index 0000000000..29a1adb70e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/cornuthaum.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/crested_helmet.bmp b/crawl-ref/source/rltiles/item/armor/crested_helmet.bmp
new file mode 100644
index 0000000000..21ddeab105
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/crested_helmet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/crystal_plate_mail.bmp b/crawl-ref/source/rltiles/item/armor/crystal_plate_mail.bmp
new file mode 100644
index 0000000000..9890f1f3c9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/crystal_plate_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/dented_pot.bmp b/crawl-ref/source/rltiles/item/armor/dented_pot.bmp
new file mode 100644
index 0000000000..d65035bddc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/dented_pot.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/dunce_cap.bmp b/crawl-ref/source/rltiles/item/armor/dunce_cap.bmp
new file mode 100644
index 0000000000..29a1adb70e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/dunce_cap.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/dwarven_ringmail.bmp b/crawl-ref/source/rltiles/item/armor/dwarven_ringmail.bmp
new file mode 100644
index 0000000000..672a7b7cb0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/dwarven_ringmail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/dwarvish_cloak.bmp b/crawl-ref/source/rltiles/item/armor/dwarvish_cloak.bmp
new file mode 100644
index 0000000000..1b96f658ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/dwarvish_cloak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/dwarvish_iron_helm.bmp b/crawl-ref/source/rltiles/item/armor/dwarvish_iron_helm.bmp
new file mode 100644
index 0000000000..4bfd413261
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/dwarvish_iron_helm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/dwarvish_mithril_coat.bmp b/crawl-ref/source/rltiles/item/armor/dwarvish_mithril_coat.bmp
new file mode 100644
index 0000000000..f5fb214311
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/dwarvish_mithril_coat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/dwarvish_roundshield.bmp b/crawl-ref/source/rltiles/item/armor/dwarvish_roundshield.bmp
new file mode 100644
index 0000000000..5a5a3d01b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/dwarvish_roundshield.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/elven_cloak.bmp b/crawl-ref/source/rltiles/item/armor/elven_cloak.bmp
new file mode 100644
index 0000000000..584fd9775c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/elven_cloak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/elven_leather_armor.bmp b/crawl-ref/source/rltiles/item/armor/elven_leather_armor.bmp
new file mode 100644
index 0000000000..b4e94d5349
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/elven_leather_armor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/elven_leather_helm.bmp b/crawl-ref/source/rltiles/item/armor/elven_leather_helm.bmp
new file mode 100644
index 0000000000..68f5bf9220
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/elven_leather_helm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/elven_mithril_coat.bmp b/crawl-ref/source/rltiles/item/armor/elven_mithril_coat.bmp
new file mode 100644
index 0000000000..0bf6c84ac3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/elven_mithril_coat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/elven_ringmail.bmp b/crawl-ref/source/rltiles/item/armor/elven_ringmail.bmp
new file mode 100644
index 0000000000..03218d29ad
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/elven_ringmail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/elven_scalemail.bmp b/crawl-ref/source/rltiles/item/armor/elven_scalemail.bmp
new file mode 100644
index 0000000000..db38786b81
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/elven_scalemail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/elven_shield.bmp b/crawl-ref/source/rltiles/item/armor/elven_shield.bmp
new file mode 100644
index 0000000000..59c19a8465
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/elven_shield.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/etched_helmet.bmp b/crawl-ref/source/rltiles/item/armor/etched_helmet.bmp
new file mode 100644
index 0000000000..46452f7718
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/etched_helmet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/fedora.bmp b/crawl-ref/source/rltiles/item/armor/fedora.bmp
new file mode 100644
index 0000000000..25a775e857
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/fedora.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/fencing_gloves.bmp b/crawl-ref/source/rltiles/item/armor/fencing_gloves.bmp
new file mode 100644
index 0000000000..976c88601c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/fencing_gloves.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/gauntlet1.bmp b/crawl-ref/source/rltiles/item/armor/gauntlet1.bmp
new file mode 100644
index 0000000000..63f06ad6f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/gauntlet1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/gauntlet2.bmp b/crawl-ref/source/rltiles/item/armor/gauntlet2.bmp
new file mode 100644
index 0000000000..b5a03dc798
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/gauntlet2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/glove1.bmp b/crawl-ref/source/rltiles/item/armor/glove1.bmp
new file mode 100644
index 0000000000..3330fbe9a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/glove1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/glove2.bmp b/crawl-ref/source/rltiles/item/armor/glove2.bmp
new file mode 100644
index 0000000000..90414e92b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/glove2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/glove3.bmp b/crawl-ref/source/rltiles/item/armor/glove3.bmp
new file mode 100644
index 0000000000..9325b28c06
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/glove3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/glove4.bmp b/crawl-ref/source/rltiles/item/armor/glove4.bmp
new file mode 100644
index 0000000000..30b181e589
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/glove4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/glove5.bmp b/crawl-ref/source/rltiles/item/armor/glove5.bmp
new file mode 100644
index 0000000000..dc0e23ee51
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/glove5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/glove6.bmp b/crawl-ref/source/rltiles/item/armor/glove6.bmp
new file mode 100644
index 0000000000..8f8d1b3889
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/glove6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/gold_dragon_armour.bmp b/crawl-ref/source/rltiles/item/armor/gold_dragon_armour.bmp
new file mode 100644
index 0000000000..92ee59d577
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/gold_dragon_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/gold_dragon_hide.bmp b/crawl-ref/source/rltiles/item/armor/gold_dragon_hide.bmp
new file mode 100644
index 0000000000..f90873fd67
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/gold_dragon_hide.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/gray_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/gray_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..bc73175f4a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/gray_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/gray_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/gray_dragon_scales.bmp
new file mode 100644
index 0000000000..548997446e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/gray_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/green_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/green_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..5acac08d1a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/green_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/green_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/green_dragon_scales.bmp
new file mode 100644
index 0000000000..8d07c38bda
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/green_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/hat1.bmp b/crawl-ref/source/rltiles/item/armor/hat1.bmp
new file mode 100644
index 0000000000..c2f9a06a20
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/hat1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/hawaiian_shirt.bmp b/crawl-ref/source/rltiles/item/armor/hawaiian_shirt.bmp
new file mode 100644
index 0000000000..25fd0d3d2e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/hawaiian_shirt.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/helm2.bmp b/crawl-ref/source/rltiles/item/armor/helm2.bmp
new file mode 100644
index 0000000000..0215df061f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/helm2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/helm3.bmp b/crawl-ref/source/rltiles/item/armor/helm3.bmp
new file mode 100644
index 0000000000..e1a61b3b2a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/helm3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/helm_green.bmp b/crawl-ref/source/rltiles/item/armor/helm_green.bmp
new file mode 100644
index 0000000000..137b765f3a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/helm_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/helm_visor1.bmp b/crawl-ref/source/rltiles/item/armor/helm_visor1.bmp
new file mode 100644
index 0000000000..46ca2b7cd7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/helm_visor1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/hiking_boots.bmp b/crawl-ref/source/rltiles/item/armor/hiking_boots.bmp
new file mode 100644
index 0000000000..82255d4fe1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/hiking_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/ice_dragon_armour.bmp b/crawl-ref/source/rltiles/item/armor/ice_dragon_armour.bmp
new file mode 100644
index 0000000000..2ec519220d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/ice_dragon_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/ice_dragon_hide.bmp b/crawl-ref/source/rltiles/item/armor/ice_dragon_hide.bmp
new file mode 100644
index 0000000000..d4ebd91058
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/ice_dragon_hide.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/iron_shoes.bmp b/crawl-ref/source/rltiles/item/armor/iron_shoes.bmp
new file mode 100644
index 0000000000..dca5d2e296
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/iron_shoes.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/jackboots.bmp b/crawl-ref/source/rltiles/item/armor/jackboots.bmp
new file mode 100644
index 0000000000..b410eee34b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/jackboots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/jungle_boots.bmp b/crawl-ref/source/rltiles/item/armor/jungle_boots.bmp
new file mode 100644
index 0000000000..509d4dd2d5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/jungle_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/large_shield.bmp b/crawl-ref/source/rltiles/item/armor/large_shield.bmp
new file mode 100644
index 0000000000..84b263796b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/large_shield.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/leather_armor.bmp b/crawl-ref/source/rltiles/item/armor/leather_armor.bmp
new file mode 100644
index 0000000000..50131c63e1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/leather_armor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/leather_armor2.bmp b/crawl-ref/source/rltiles/item/armor/leather_armor2.bmp
new file mode 100644
index 0000000000..05d61f7c13
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/leather_armor2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/leather_armor3.bmp b/crawl-ref/source/rltiles/item/armor/leather_armor3.bmp
new file mode 100644
index 0000000000..9c4ded5edd
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/leather_armor3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/leather_armor4.bmp b/crawl-ref/source/rltiles/item/armor/leather_armor4.bmp
new file mode 100644
index 0000000000..81704640db
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/leather_armor4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/leather_armour2.bmp b/crawl-ref/source/rltiles/item/armor/leather_armour2.bmp
new file mode 100644
index 0000000000..29e6859664
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/leather_armour2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/leather_cloak.bmp b/crawl-ref/source/rltiles/item/armor/leather_cloak.bmp
new file mode 100644
index 0000000000..3d4e804bb7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/leather_cloak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/leather_jacket.bmp b/crawl-ref/source/rltiles/item/armor/leather_jacket.bmp
new file mode 100644
index 0000000000..b9c4f00891
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/leather_jacket.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/low_boots.bmp b/crawl-ref/source/rltiles/item/armor/low_boots.bmp
new file mode 100644
index 0000000000..89caccbfbb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/low_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/mottled_dragon_hide.bmp b/crawl-ref/source/rltiles/item/armor/mottled_dragon_hide.bmp
new file mode 100644
index 0000000000..34e941cd8c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/mottled_dragon_hide.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/mpttled_dragon_armour.bmp b/crawl-ref/source/rltiles/item/armor/mpttled_dragon_armour.bmp
new file mode 100644
index 0000000000..83b0385fb6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/mpttled_dragon_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/mud_boots.bmp b/crawl-ref/source/rltiles/item/armor/mud_boots.bmp
new file mode 100644
index 0000000000..2ab2f6c09d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/mud_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/mummy_wrapping.bmp b/crawl-ref/source/rltiles/item/armor/mummy_wrapping.bmp
new file mode 100644
index 0000000000..4d2264d86a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/mummy_wrapping.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/naga_barding.bmp b/crawl-ref/source/rltiles/item/armor/naga_barding.bmp
new file mode 100644
index 0000000000..84c6a26032
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/naga_barding.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/oilskin_cloak.bmp b/crawl-ref/source/rltiles/item/armor/oilskin_cloak.bmp
new file mode 100644
index 0000000000..f80aa2e8d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/oilskin_cloak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/old_gloves.bmp b/crawl-ref/source/rltiles/item/armor/old_gloves.bmp
new file mode 100644
index 0000000000..e13b54b1b9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/old_gloves.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/opera_cloak.bmp b/crawl-ref/source/rltiles/item/armor/opera_cloak.bmp
new file mode 100644
index 0000000000..cb9344b264
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/opera_cloak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orange_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/orange_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..97ed86b924
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orange_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orange_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/orange_dragon_scales.bmp
new file mode 100644
index 0000000000..6bc89f3fad
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orange_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_chain_mail.bmp b/crawl-ref/source/rltiles/item/armor/orcish_chain_mail.bmp
new file mode 100644
index 0000000000..4de0c46f0d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_chain_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_cloak.bmp b/crawl-ref/source/rltiles/item/armor/orcish_cloak.bmp
new file mode 100644
index 0000000000..e3fb87b3fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_cloak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_helm.bmp b/crawl-ref/source/rltiles/item/armor/orcish_helm.bmp
new file mode 100644
index 0000000000..6ed9673773
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_helm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_leather_armor.bmp b/crawl-ref/source/rltiles/item/armor/orcish_leather_armor.bmp
new file mode 100644
index 0000000000..53e1b9a281
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_leather_armor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_platemail.bmp b/crawl-ref/source/rltiles/item/armor/orcish_platemail.bmp
new file mode 100644
index 0000000000..07389f4b84
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_platemail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_ring_mail.bmp b/crawl-ref/source/rltiles/item/armor/orcish_ring_mail.bmp
new file mode 100644
index 0000000000..79ebcbd115
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_ring_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_ringmail.bmp b/crawl-ref/source/rltiles/item/armor/orcish_ringmail.bmp
new file mode 100644
index 0000000000..a646525bd8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_ringmail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/orcish_shield.bmp b/crawl-ref/source/rltiles/item/armor/orcish_shield.bmp
new file mode 100644
index 0000000000..5fd3ae3fe6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/orcish_shield.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/ornamental_cope.bmp b/crawl-ref/source/rltiles/item/armor/ornamental_cope.bmp
new file mode 100644
index 0000000000..d0f83e4fa5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/ornamental_cope.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/padded_gloves.bmp b/crawl-ref/source/rltiles/item/armor/padded_gloves.bmp
new file mode 100644
index 0000000000..8253f3873f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/padded_gloves.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/piece_of_cloth.bmp b/crawl-ref/source/rltiles/item/armor/piece_of_cloth.bmp
new file mode 100644
index 0000000000..15b1547b2e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/piece_of_cloth.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/plate_mail.bmp b/crawl-ref/source/rltiles/item/armor/plate_mail.bmp
new file mode 100644
index 0000000000..c89aa22d70
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/plate_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/plate_mail2.bmp b/crawl-ref/source/rltiles/item/armor/plate_mail2.bmp
new file mode 100644
index 0000000000..b399550709
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/plate_mail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/plumed_helmet.bmp b/crawl-ref/source/rltiles/item/armor/plumed_helmet.bmp
new file mode 100644
index 0000000000..f4738f187a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/plumed_helmet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/red_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/red_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..12c4b11aa2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/red_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/red_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/red_dragon_scales.bmp
new file mode 100644
index 0000000000..8848b78d67
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/red_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/riding_boots.bmp b/crawl-ref/source/rltiles/item/armor/riding_boots.bmp
new file mode 100644
index 0000000000..2085fa6a6b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/riding_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/riding_gloves.bmp b/crawl-ref/source/rltiles/item/armor/riding_gloves.bmp
new file mode 100644
index 0000000000..5fcc6ccf79
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/riding_gloves.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/ring_mail.bmp b/crawl-ref/source/rltiles/item/armor/ring_mail.bmp
new file mode 100644
index 0000000000..1f712d114c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/ring_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/ring_mail2.bmp b/crawl-ref/source/rltiles/item/armor/ring_mail2.bmp
new file mode 100644
index 0000000000..fb89d40626
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/ring_mail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/robe.bmp b/crawl-ref/source/rltiles/item/armor/robe.bmp
new file mode 100644
index 0000000000..2ff5a723ca
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/robe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/robe2.bmp b/crawl-ref/source/rltiles/item/armor/robe2.bmp
new file mode 100644
index 0000000000..574f07a924
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/robe2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/robe3.bmp b/crawl-ref/source/rltiles/item/armor/robe3.bmp
new file mode 100644
index 0000000000..2c4ba12020
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/robe3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/s_suit.bmp b/crawl-ref/source/rltiles/item/armor/s_suit.bmp
new file mode 100644
index 0000000000..9c67095935
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/s_suit.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/scale_mail.bmp
new file mode 100644
index 0000000000..948c03bbf0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/scale_mail2.bmp b/crawl-ref/source/rltiles/item/armor/scale_mail2.bmp
new file mode 100644
index 0000000000..849dd32522
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/scale_mail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield2.bmp b/crawl-ref/source/rltiles/item/armor/shield2.bmp
new file mode 100644
index 0000000000..a85e9212d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_gondor.bmp b/crawl-ref/source/rltiles/item/armor/shield_gondor.bmp
new file mode 100644
index 0000000000..7b85ddc09d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_gondor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_kite2.bmp b/crawl-ref/source/rltiles/item/armor/shield_kite2.bmp
new file mode 100644
index 0000000000..112ca952cf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_kite2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_kite3.bmp b/crawl-ref/source/rltiles/item/armor/shield_kite3.bmp
new file mode 100644
index 0000000000..f9c9ed4894
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_kite3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_large2.bmp b/crawl-ref/source/rltiles/item/armor/shield_large2.bmp
new file mode 100644
index 0000000000..7c39cb6b7b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_large2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_large3.bmp b/crawl-ref/source/rltiles/item/armor/shield_large3.bmp
new file mode 100644
index 0000000000..ce8e6860b9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_large3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_large4.bmp b/crawl-ref/source/rltiles/item/armor/shield_large4.bmp
new file mode 100644
index 0000000000..702952c644
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_large4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_of_reflection.bmp b/crawl-ref/source/rltiles/item/armor/shield_of_reflection.bmp
new file mode 100644
index 0000000000..adc66af9ed
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_of_reflection.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_rohan.bmp b/crawl-ref/source/rltiles/item/armor/shield_rohan.bmp
new file mode 100644
index 0000000000..dc56cba695
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_rohan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shield_round2.bmp b/crawl-ref/source/rltiles/item/armor/shield_round2.bmp
new file mode 100644
index 0000000000..23622af659
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shield_round2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shimmering_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/shimmering_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..8a096daf85
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shimmering_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/shimmering_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/shimmering_dragon_scales.bmp
new file mode 100644
index 0000000000..79bd19d5a4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/shimmering_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/silver_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/silver_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..a776ec57b8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/silver_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/silver_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/silver_dragon_scales.bmp
new file mode 100644
index 0000000000..ff41774ccf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/silver_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/small_shield.bmp b/crawl-ref/source/rltiles/item/armor/small_shield.bmp
new file mode 100644
index 0000000000..b726614be2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/small_shield.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/small_shield2.bmp b/crawl-ref/source/rltiles/item/armor/small_shield2.bmp
new file mode 100644
index 0000000000..10c45400f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/small_shield2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/snow_boots.bmp b/crawl-ref/source/rltiles/item/armor/snow_boots.bmp
new file mode 100644
index 0000000000..ccecd209c3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/snow_boots.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/splint_mail.bmp b/crawl-ref/source/rltiles/item/armor/splint_mail.bmp
new file mode 100644
index 0000000000..1f8c3a1e1a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/splint_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/studded_leather_armor.bmp b/crawl-ref/source/rltiles/item/armor/studded_leather_armor.bmp
new file mode 100644
index 0000000000..806666bde4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/studded_leather_armor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/swamp_dragon_armour.bmp b/crawl-ref/source/rltiles/item/armor/swamp_dragon_armour.bmp
new file mode 100644
index 0000000000..4ab9b6d81c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/swamp_dragon_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/swamp_dragon_hide.bmp b/crawl-ref/source/rltiles/item/armor/swamp_dragon_hide.bmp
new file mode 100644
index 0000000000..9e9fecb5e4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/swamp_dragon_hide.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/t_shirt.bmp b/crawl-ref/source/rltiles/item/armor/t_shirt.bmp
new file mode 100644
index 0000000000..67d4585227
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/t_shirt.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/tattered_cape.bmp b/crawl-ref/source/rltiles/item/armor/tattered_cape.bmp
new file mode 100644
index 0000000000..cb923ff2d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/tattered_cape.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/troll_hide.bmp b/crawl-ref/source/rltiles/item/armor/troll_hide.bmp
new file mode 100644
index 0000000000..c971cbdacf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/troll_hide.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/troll_leather_armour.bmp b/crawl-ref/source/rltiles/item/armor/troll_leather_armour.bmp
new file mode 100644
index 0000000000..296635413a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/troll_leather_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_alchemist.bmp b/crawl-ref/source/rltiles/item/armor/urand_alchemist.bmp
new file mode 100644
index 0000000000..9707631e80
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_alchemist.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_assassin.bmp b/crawl-ref/source/rltiles/item/armor/urand_assassin.bmp
new file mode 100644
index 0000000000..c2bf75e798
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_assassin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_augmentation.bmp b/crawl-ref/source/rltiles/item/armor/urand_augmentation.bmp
new file mode 100644
index 0000000000..0a6403d99d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_augmentation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_bullseye.bmp b/crawl-ref/source/rltiles/item/armor/urand_bullseye.bmp
new file mode 100644
index 0000000000..63afb41c02
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_bullseye.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_dragon_king.bmp b/crawl-ref/source/rltiles/item/armor/urand_dragon_king.bmp
new file mode 100644
index 0000000000..9cf4f7fb40
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_dragon_king.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_dragonmask.bmp b/crawl-ref/source/rltiles/item/armor/urand_dragonmask.bmp
new file mode 100644
index 0000000000..de64ff5f7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_dragonmask.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_dyrovepreva.bmp b/crawl-ref/source/rltiles/item/armor/urand_dyrovepreva.bmp
new file mode 100644
index 0000000000..194add6f90
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_dyrovepreva.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_edison.bmp b/crawl-ref/source/rltiles/item/armor/urand_edison.bmp
new file mode 100644
index 0000000000..009794e305
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_edison.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_fencer.bmp b/crawl-ref/source/rltiles/item/armor/urand_fencer.bmp
new file mode 100644
index 0000000000..44aa9f6b1d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_fencer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_flash.bmp b/crawl-ref/source/rltiles/item/armor/urand_flash.bmp
new file mode 100644
index 0000000000..348b49eeee
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_flash.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_folly.bmp b/crawl-ref/source/rltiles/item/armor/urand_folly.bmp
new file mode 100644
index 0000000000..74325c3a5b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_folly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_ignorance.bmp b/crawl-ref/source/rltiles/item/armor/urand_ignorance.bmp
new file mode 100644
index 0000000000..d1b0da504b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_ignorance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_lear.bmp b/crawl-ref/source/rltiles/item/armor/urand_lear.bmp
new file mode 100644
index 0000000000..f445c6c83a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_lear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_misfortune.bmp b/crawl-ref/source/rltiles/item/armor/urand_misfortune.bmp
new file mode 100644
index 0000000000..a4ea99ea90
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_misfortune.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_night.bmp b/crawl-ref/source/rltiles/item/armor/urand_night.bmp
new file mode 100644
index 0000000000..e77d13c83a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_night.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_resistance.bmp b/crawl-ref/source/rltiles/item/armor/urand_resistance.bmp
new file mode 100644
index 0000000000..1bad9fd7ef
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_resistance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_salamander.bmp b/crawl-ref/source/rltiles/item/armor/urand_salamander.bmp
new file mode 100644
index 0000000000..f7b523f4a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_salamander.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_thief.bmp b/crawl-ref/source/rltiles/item/armor/urand_thief.bmp
new file mode 100644
index 0000000000..9519d57776
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_thief.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_war.bmp b/crawl-ref/source/rltiles/item/armor/urand_war.bmp
new file mode 100644
index 0000000000..1c94668235
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_war.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_zhor.bmp b/crawl-ref/source/rltiles/item/armor/urand_zhor.bmp
new file mode 100644
index 0000000000..7610f04d30
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_zhor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/urand_zin.bmp b/crawl-ref/source/rltiles/item/armor/urand_zin.bmp
new file mode 100644
index 0000000000..e927202984
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/urand_zin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/uruk_hai_shield.bmp b/crawl-ref/source/rltiles/item/armor/uruk_hai_shield.bmp
new file mode 100644
index 0000000000..c3236d7f2b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/uruk_hai_shield.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/visored_helmet.bmp b/crawl-ref/source/rltiles/item/armor/visored_helmet.bmp
new file mode 100644
index 0000000000..4b6a086298
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/visored_helmet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/white_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/white_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..842f821036
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/white_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/white_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/white_dragon_scales.bmp
new file mode 100644
index 0000000000..a636864e7b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/white_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/wizard_hat.bmp b/crawl-ref/source/rltiles/item/armor/wizard_hat.bmp
new file mode 100644
index 0000000000..401d4aa911
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/wizard_hat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/wizard_hat2.bmp b/crawl-ref/source/rltiles/item/armor/wizard_hat2.bmp
new file mode 100644
index 0000000000..91663a15db
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/wizard_hat2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/yellow_dragon_scale_mail.bmp b/crawl-ref/source/rltiles/item/armor/yellow_dragon_scale_mail.bmp
new file mode 100644
index 0000000000..f50da88b0a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/yellow_dragon_scale_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/armor/yellow_dragon_scales.bmp b/crawl-ref/source/rltiles/item/armor/yellow_dragon_scales.bmp
new file mode 100644
index 0000000000..66c420438a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/armor/yellow_dragon_scales.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/blank_paper.bmp b/crawl-ref/source/rltiles/item/book/blank_paper.bmp
new file mode 100644
index 0000000000..8f238611e2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/blank_paper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/book_of_the_dead.bmp b/crawl-ref/source/rltiles/item/book/book_of_the_dead.bmp
new file mode 100644
index 0000000000..54c26004f9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/book_of_the_dead.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/bronze.bmp b/crawl-ref/source/rltiles/item/book/bronze.bmp
new file mode 100644
index 0000000000..cac9eb344d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/bronze.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/cloth.bmp b/crawl-ref/source/rltiles/item/book/cloth.bmp
new file mode 100644
index 0000000000..f09552bc99
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/cloth.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/copper.bmp b/crawl-ref/source/rltiles/item/book/copper.bmp
new file mode 100644
index 0000000000..05e4dde195
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/copper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/cyan.bmp b/crawl-ref/source/rltiles/item/book/cyan.bmp
new file mode 100644
index 0000000000..bbe3057dfc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/dark_blue.bmp b/crawl-ref/source/rltiles/item/book/dark_blue.bmp
new file mode 100644
index 0000000000..96cda910c4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/dark_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/dark_brown.bmp b/crawl-ref/source/rltiles/item/book/dark_brown.bmp
new file mode 100644
index 0000000000..a3482da7d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/dark_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/dark_gray.bmp b/crawl-ref/source/rltiles/item/book/dark_gray.bmp
new file mode 100644
index 0000000000..cb46f30f6d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/dark_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/dark_green.bmp b/crawl-ref/source/rltiles/item/book/dark_green.bmp
new file mode 100644
index 0000000000..dd1cdd347f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/dark_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/dog_eared.bmp b/crawl-ref/source/rltiles/item/book/dog_eared.bmp
new file mode 100644
index 0000000000..d5337eacdc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/dog_eared.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/dull.bmp b/crawl-ref/source/rltiles/item/book/dull.bmp
new file mode 100644
index 0000000000..20cd183cd9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/dull.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/dusty.bmp b/crawl-ref/source/rltiles/item/book/dusty.bmp
new file mode 100644
index 0000000000..b308f89651
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/dusty.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/glittering.bmp b/crawl-ref/source/rltiles/item/book/glittering.bmp
new file mode 100644
index 0000000000..8dbe47f632
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/glittering.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/gold.bmp b/crawl-ref/source/rltiles/item/book/gold.bmp
new file mode 100644
index 0000000000..265f64d658
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/gray.bmp b/crawl-ref/source/rltiles/item/book/gray.bmp
new file mode 100644
index 0000000000..28f3abf0b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/indigo.bmp b/crawl-ref/source/rltiles/item/book/indigo.bmp
new file mode 100644
index 0000000000..657ce7e459
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/indigo.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/leather.bmp b/crawl-ref/source/rltiles/item/book/leather.bmp
new file mode 100644
index 0000000000..5aeeb4eb86
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/leather.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/light_blue.bmp b/crawl-ref/source/rltiles/item/book/light_blue.bmp
new file mode 100644
index 0000000000..b1f412c061
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/light_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/light_brown.bmp b/crawl-ref/source/rltiles/item/book/light_brown.bmp
new file mode 100644
index 0000000000..a6b230356e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/light_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/light_gray.bmp b/crawl-ref/source/rltiles/item/book/light_gray.bmp
new file mode 100644
index 0000000000..f2120aef47
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/light_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/light_green.bmp b/crawl-ref/source/rltiles/item/book/light_green.bmp
new file mode 100644
index 0000000000..a2b6bd19ab
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/light_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/magenta.bmp b/crawl-ref/source/rltiles/item/book/magenta.bmp
new file mode 100644
index 0000000000..044657810c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/metal_blue.bmp b/crawl-ref/source/rltiles/item/book/metal_blue.bmp
new file mode 100644
index 0000000000..fd8e3afbff
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/metal_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/metal_cyan.bmp b/crawl-ref/source/rltiles/item/book/metal_cyan.bmp
new file mode 100644
index 0000000000..7d9f2c9639
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/metal_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/metal_green.bmp b/crawl-ref/source/rltiles/item/book/metal_green.bmp
new file mode 100644
index 0000000000..d515269299
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/metal_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/mottled.bmp b/crawl-ref/source/rltiles/item/book/mottled.bmp
new file mode 100644
index 0000000000..32b39ed36a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/mottled.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/orange.bmp b/crawl-ref/source/rltiles/item/book/orange.bmp
new file mode 100644
index 0000000000..1f7e81e6c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/parchment.bmp b/crawl-ref/source/rltiles/item/book/parchment.bmp
new file mode 100644
index 0000000000..786f7afa83
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/parchment.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/pink.bmp b/crawl-ref/source/rltiles/item/book/pink.bmp
new file mode 100644
index 0000000000..0f727bfdfe
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/pink.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/plaid.bmp b/crawl-ref/source/rltiles/item/book/plaid.bmp
new file mode 100644
index 0000000000..1389b80e46
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/plaid.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/purple.bmp b/crawl-ref/source/rltiles/item/book/purple.bmp
new file mode 100644
index 0000000000..1d6ab6d7a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/ragged.bmp b/crawl-ref/source/rltiles/item/book/ragged.bmp
new file mode 100644
index 0000000000..4165d94ebc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/ragged.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/red.bmp b/crawl-ref/source/rltiles/item/book/red.bmp
new file mode 100644
index 0000000000..78d2f630b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/shining.bmp b/crawl-ref/source/rltiles/item/book/shining.bmp
new file mode 100644
index 0000000000..89760bb44d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/shining.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/silver.bmp b/crawl-ref/source/rltiles/item/book/silver.bmp
new file mode 100644
index 0000000000..dc52c434f3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/silver.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/stained.bmp b/crawl-ref/source/rltiles/item/book/stained.bmp
new file mode 100644
index 0000000000..00320c074e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/stained.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/tan.bmp b/crawl-ref/source/rltiles/item/book/tan.bmp
new file mode 100644
index 0000000000..528ca8d3da
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/tan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/thick.bmp b/crawl-ref/source/rltiles/item/book/thick.bmp
new file mode 100644
index 0000000000..d095611f3e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/thick.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/thin.bmp b/crawl-ref/source/rltiles/item/book/thin.bmp
new file mode 100644
index 0000000000..a13cc5d249
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/thin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/turquoise.bmp b/crawl-ref/source/rltiles/item/book/turquoise.bmp
new file mode 100644
index 0000000000..c161a88cc6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/turquoise.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/vellum.bmp b/crawl-ref/source/rltiles/item/book/vellum.bmp
new file mode 100644
index 0000000000..01d94acab4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/vellum.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/velvet.bmp b/crawl-ref/source/rltiles/item/book/velvet.bmp
new file mode 100644
index 0000000000..d270223c13
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/velvet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/violet.bmp b/crawl-ref/source/rltiles/item/book/violet.bmp
new file mode 100644
index 0000000000..fa919dcaf0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/violet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/white.bmp b/crawl-ref/source/rltiles/item/book/white.bmp
new file mode 100644
index 0000000000..37a9d5037b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/wrinkled.bmp b/crawl-ref/source/rltiles/item/book/wrinkled.bmp
new file mode 100644
index 0000000000..fdcaf383d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/wrinkled.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/book/yellow.bmp b/crawl-ref/source/rltiles/item/book/yellow.bmp
new file mode 100644
index 0000000000..24f85ce4fc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/book/yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/apple.bmp b/crawl-ref/source/rltiles/item/food/apple.bmp
new file mode 100644
index 0000000000..3a2d70a78b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/apple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/apricot.bmp b/crawl-ref/source/rltiles/item/food/apricot.bmp
new file mode 100644
index 0000000000..cade5025ed
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/apricot.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/banana.bmp b/crawl-ref/source/rltiles/item/food/banana.bmp
new file mode 100644
index 0000000000..45b6ad4578
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/banana.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/beef_jerky.bmp b/crawl-ref/source/rltiles/item/food/beef_jerky.bmp
new file mode 100644
index 0000000000..ed0d005fba
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/beef_jerky.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/bone.bmp b/crawl-ref/source/rltiles/item/food/bone.bmp
new file mode 100644
index 0000000000..7c99c1404a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/bone.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/bread0.bmp b/crawl-ref/source/rltiles/item/food/bread0.bmp
new file mode 100644
index 0000000000..43061a9e53
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/bread0.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/bread_ration.bmp b/crawl-ref/source/rltiles/item/food/bread_ration.bmp
new file mode 100644
index 0000000000..44b77e2978
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/bread_ration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/c_ration.bmp b/crawl-ref/source/rltiles/item/food/c_ration.bmp
new file mode 100644
index 0000000000..116df9dc80
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/c_ration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/candy_bar.bmp b/crawl-ref/source/rltiles/item/food/candy_bar.bmp
new file mode 100644
index 0000000000..620d7e2cdf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/candy_bar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/carrot.bmp b/crawl-ref/source/rltiles/item/food/carrot.bmp
new file mode 100644
index 0000000000..1357338634
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/carrot.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/cheese.bmp b/crawl-ref/source/rltiles/item/food/cheese.bmp
new file mode 100644
index 0000000000..3913750b1d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/cheese.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/chocorate.bmp b/crawl-ref/source/rltiles/item/food/chocorate.bmp
new file mode 100644
index 0000000000..8189395be8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/chocorate.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/choko.bmp b/crawl-ref/source/rltiles/item/food/choko.bmp
new file mode 100644
index 0000000000..793f31fc63
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/choko.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/clove_of_garlic.bmp b/crawl-ref/source/rltiles/item/food/clove_of_garlic.bmp
new file mode 100644
index 0000000000..a008a4a84d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/clove_of_garlic.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/corpse.bmp b/crawl-ref/source/rltiles/item/food/corpse.bmp
new file mode 100644
index 0000000000..a5133e438c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/corpse.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/corpse_rotten.bmp b/crawl-ref/source/rltiles/item/food/corpse_rotten.bmp
new file mode 100644
index 0000000000..d0764f9728
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/corpse_rotten.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/cram_ration.bmp b/crawl-ref/source/rltiles/item/food/cram_ration.bmp
new file mode 100644
index 0000000000..20d2d2d028
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/cram_ration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/cream_pie.bmp b/crawl-ref/source/rltiles/item/food/cream_pie.bmp
new file mode 100644
index 0000000000..a288555ca8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/cream_pie.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/egg.bmp b/crawl-ref/source/rltiles/item/food/egg.bmp
new file mode 100644
index 0000000000..4390c1a974
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/egg.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/eucalyptus_leaf.bmp b/crawl-ref/source/rltiles/item/food/eucalyptus_leaf.bmp
new file mode 100644
index 0000000000..b1c60db9f3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/eucalyptus_leaf.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/food_ration.bmp b/crawl-ref/source/rltiles/item/food/food_ration.bmp
new file mode 100644
index 0000000000..3842312aee
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/food_ration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/fortune_cookie.bmp b/crawl-ref/source/rltiles/item/food/fortune_cookie.bmp
new file mode 100644
index 0000000000..718644cd96
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/fortune_cookie.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/grape.bmp b/crawl-ref/source/rltiles/item/food/grape.bmp
new file mode 100644
index 0000000000..c4a7d879f9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/grape.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/honeycomb.bmp b/crawl-ref/source/rltiles/item/food/honeycomb.bmp
new file mode 100644
index 0000000000..8e5fc0acf4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/honeycomb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/huge_chunk_of_meat.bmp b/crawl-ref/source/rltiles/item/food/huge_chunk_of_meat.bmp
new file mode 100644
index 0000000000..6d6face0a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/huge_chunk_of_meat.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/k_ration.bmp b/crawl-ref/source/rltiles/item/food/k_ration.bmp
new file mode 100644
index 0000000000..cb3910e330
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/k_ration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/kelp_frond.bmp b/crawl-ref/source/rltiles/item/food/kelp_frond.bmp
new file mode 100644
index 0000000000..c4091709c7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/kelp_frond.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/lembas_wafer.bmp b/crawl-ref/source/rltiles/item/food/lembas_wafer.bmp
new file mode 100644
index 0000000000..b06c8a706c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/lembas_wafer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/lemon.bmp b/crawl-ref/source/rltiles/item/food/lemon.bmp
new file mode 100644
index 0000000000..0bf787c7f9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/lemon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/lump_of_royal_jelly.bmp b/crawl-ref/source/rltiles/item/food/lump_of_royal_jelly.bmp
new file mode 100644
index 0000000000..3152900e12
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/lump_of_royal_jelly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/lychee.bmp b/crawl-ref/source/rltiles/item/food/lychee.bmp
new file mode 100644
index 0000000000..a55393f2e4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/lychee.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/meat_ring.bmp b/crawl-ref/source/rltiles/item/food/meat_ring.bmp
new file mode 100644
index 0000000000..1b1c5171ef
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/meat_ring.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/meat_stick.bmp b/crawl-ref/source/rltiles/item/food/meat_stick.bmp
new file mode 100644
index 0000000000..8e086dfbaf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/meat_stick.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/meatball.bmp b/crawl-ref/source/rltiles/item/food/meatball.bmp
new file mode 100644
index 0000000000..74a9fcd621
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/meatball.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/melon.bmp b/crawl-ref/source/rltiles/item/food/melon.bmp
new file mode 100644
index 0000000000..5fd0cd303f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/melon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/orange.bmp b/crawl-ref/source/rltiles/item/food/orange.bmp
new file mode 100644
index 0000000000..f8d1e5f2af
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/pancake.bmp b/crawl-ref/source/rltiles/item/food/pancake.bmp
new file mode 100644
index 0000000000..0be43865f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/pancake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/pear.bmp b/crawl-ref/source/rltiles/item/food/pear.bmp
new file mode 100644
index 0000000000..b20ada431d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/pear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/pizza.bmp b/crawl-ref/source/rltiles/item/food/pizza.bmp
new file mode 100644
index 0000000000..93da6d3b53
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/pizza.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/rambutan.bmp b/crawl-ref/source/rltiles/item/food/rambutan.bmp
new file mode 100644
index 0000000000..94b6d7911d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/rambutan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/sausage.bmp b/crawl-ref/source/rltiles/item/food/sausage.bmp
new file mode 100644
index 0000000000..de22fb1942
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/sausage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/slime_mold.bmp b/crawl-ref/source/rltiles/item/food/slime_mold.bmp
new file mode 100644
index 0000000000..ee4ebf2c9f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/slime_mold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/snozzcumber.bmp b/crawl-ref/source/rltiles/item/food/snozzcumber.bmp
new file mode 100644
index 0000000000..ec892b4eed
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/snozzcumber.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/sprig_of_wolfsbane.bmp b/crawl-ref/source/rltiles/item/food/sprig_of_wolfsbane.bmp
new file mode 100644
index 0000000000..89f12142f1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/sprig_of_wolfsbane.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/strawberry.bmp b/crawl-ref/source/rltiles/item/food/strawberry.bmp
new file mode 100644
index 0000000000..8a95e438be
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/strawberry.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/sultana.bmp b/crawl-ref/source/rltiles/item/food/sultana.bmp
new file mode 100644
index 0000000000..302707b995
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/sultana.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/tin.bmp b/crawl-ref/source/rltiles/item/food/tin.bmp
new file mode 100644
index 0000000000..04ad785e73
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/tin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/food/tripe_ration.bmp b/crawl-ref/source/rltiles/item/food/tripe_ration.bmp
new file mode 100644
index 0000000000..74ebcb61cc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/food/tripe_ration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/black.bmp b/crawl-ref/source/rltiles/item/gem/black.bmp
new file mode 100644
index 0000000000..a9a8938e47
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/blue.bmp b/crawl-ref/source/rltiles/item/gem/blue.bmp
new file mode 100644
index 0000000000..a1a7d267ed
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/boulder.bmp b/crawl-ref/source/rltiles/item/gem/boulder.bmp
new file mode 100644
index 0000000000..fa9507ceeb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/boulder.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/gold_piece.bmp b/crawl-ref/source/rltiles/item/gem/gold_piece.bmp
new file mode 100644
index 0000000000..7fe0f664f0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/gold_piece.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/green.bmp b/crawl-ref/source/rltiles/item/gem/green.bmp
new file mode 100644
index 0000000000..a3da7901bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/grey_stone.bmp b/crawl-ref/source/rltiles/item/gem/grey_stone.bmp
new file mode 100644
index 0000000000..c9a52bcd01
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/grey_stone.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/orange.bmp b/crawl-ref/source/rltiles/item/gem/orange.bmp
new file mode 100644
index 0000000000..7e65a6de80
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/red.bmp b/crawl-ref/source/rltiles/item/gem/red.bmp
new file mode 100644
index 0000000000..986b8458d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/rock.bmp b/crawl-ref/source/rltiles/item/gem/rock.bmp
new file mode 100644
index 0000000000..8484531e11
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/rock.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/stone.bmp b/crawl-ref/source/rltiles/item/gem/stone.bmp
new file mode 100644
index 0000000000..288bb9931b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/stone.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/violet.bmp b/crawl-ref/source/rltiles/item/gem/violet.bmp
new file mode 100644
index 0000000000..c3222fee85
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/violet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/white.bmp b/crawl-ref/source/rltiles/item/gem/white.bmp
new file mode 100644
index 0000000000..dc18e711b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/yellow.bmp b/crawl-ref/source/rltiles/item/gem/yellow.bmp
new file mode 100644
index 0000000000..55490c3f1b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/gem/yellowish_brown.bmp b/crawl-ref/source/rltiles/item/gem/yellowish_brown.bmp
new file mode 100644
index 0000000000..6371365215
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/gem/yellowish_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/beartrap.bmp b/crawl-ref/source/rltiles/item/misc/beartrap.bmp
new file mode 100644
index 0000000000..cf0ce1ff20
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/beartrap.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/bell.bmp b/crawl-ref/source/rltiles/item/misc/bell.bmp
new file mode 100644
index 0000000000..4c0c832502
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/bell.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/bell_of_opening.bmp b/crawl-ref/source/rltiles/item/misc/bell_of_opening.bmp
new file mode 100644
index 0000000000..a513b10686
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/bell_of_opening.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/blindfold.bmp b/crawl-ref/source/rltiles/item/misc/blindfold.bmp
new file mode 100644
index 0000000000..c4cbd18f32
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/blindfold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/brass_lantern.bmp b/crawl-ref/source/rltiles/item/misc/brass_lantern.bmp
new file mode 100644
index 0000000000..0278fc3377
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/brass_lantern.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/bugle.bmp b/crawl-ref/source/rltiles/item/misc/bugle.bmp
new file mode 100644
index 0000000000..3467b82b58
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/bugle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/can_of_grease.bmp b/crawl-ref/source/rltiles/item/misc/can_of_grease.bmp
new file mode 100644
index 0000000000..0011705476
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/can_of_grease.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/candelabrum_of_invocation.bmp b/crawl-ref/source/rltiles/item/misc/candelabrum_of_invocation.bmp
new file mode 100644
index 0000000000..e5a3654594
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/candelabrum_of_invocation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/chest.bmp b/crawl-ref/source/rltiles/item/misc/chest.bmp
new file mode 100644
index 0000000000..245cd99e0d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/chest.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/credit_card.bmp b/crawl-ref/source/rltiles/item/misc/credit_card.bmp
new file mode 100644
index 0000000000..765df991c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/credit_card.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/crystal_ball.bmp b/crawl-ref/source/rltiles/item/misc/crystal_ball.bmp
new file mode 100644
index 0000000000..6a6829d18e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/crystal_ball.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/drum.bmp b/crawl-ref/source/rltiles/item/misc/drum.bmp
new file mode 100644
index 0000000000..7e18ff3b49
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/drum.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/expensive_camera.bmp b/crawl-ref/source/rltiles/item/misc/expensive_camera.bmp
new file mode 100644
index 0000000000..a9ec001854
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/expensive_camera.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/figurine.bmp b/crawl-ref/source/rltiles/item/misc/figurine.bmp
new file mode 100644
index 0000000000..a7000d766f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/figurine.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/flute.bmp b/crawl-ref/source/rltiles/item/misc/flute.bmp
new file mode 100644
index 0000000000..471c0a5ad6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/flute.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/grappling_hook.bmp b/crawl-ref/source/rltiles/item/misc/grappling_hook.bmp
new file mode 100644
index 0000000000..7129fef8b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/grappling_hook.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/harp.bmp b/crawl-ref/source/rltiles/item/misc/harp.bmp
new file mode 100644
index 0000000000..89dadfcb7d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/harp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/heavy_iron_ball.bmp b/crawl-ref/source/rltiles/item/misc/heavy_iron_ball.bmp
new file mode 100644
index 0000000000..7e311acb85
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/heavy_iron_ball.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/horn.bmp b/crawl-ref/source/rltiles/item/misc/horn.bmp
new file mode 100644
index 0000000000..b7e1980cf1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/horn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/ice_box.bmp b/crawl-ref/source/rltiles/item/misc/ice_box.bmp
new file mode 100644
index 0000000000..02b71b2685
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/ice_box.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/iron_chain.bmp b/crawl-ref/source/rltiles/item/misc/iron_chain.bmp
new file mode 100644
index 0000000000..91e6e91758
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/iron_chain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/lamp.bmp b/crawl-ref/source/rltiles/item/misc/lamp.bmp
new file mode 100644
index 0000000000..b142b4042d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/lamp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/land_mine.bmp b/crawl-ref/source/rltiles/item/misc/land_mine.bmp
new file mode 100644
index 0000000000..b803886052
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/land_mine.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/large_box.bmp b/crawl-ref/source/rltiles/item/misc/large_box.bmp
new file mode 100644
index 0000000000..df6b139a00
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/large_box.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/leash.bmp b/crawl-ref/source/rltiles/item/misc/leash.bmp
new file mode 100644
index 0000000000..be873483d8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/leash.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/lenses.bmp b/crawl-ref/source/rltiles/item/misc/lenses.bmp
new file mode 100644
index 0000000000..9485f50428
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/lenses.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/lock_pick.bmp b/crawl-ref/source/rltiles/item/misc/lock_pick.bmp
new file mode 100644
index 0000000000..f3bff0df73
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/lock_pick.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/magic_marker.bmp b/crawl-ref/source/rltiles/item/misc/magic_marker.bmp
new file mode 100644
index 0000000000..ce14f09b0a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/magic_marker.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/mirror.bmp b/crawl-ref/source/rltiles/item/misc/mirror.bmp
new file mode 100644
index 0000000000..f1693445f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/mirror.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_altar.bmp b/crawl-ref/source/rltiles/item/misc/misc_altar.bmp
new file mode 100644
index 0000000000..7eacc613b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_altar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_book.bmp b/crawl-ref/source/rltiles/item/misc/misc_book.bmp
new file mode 100644
index 0000000000..c143a82067
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_book.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_bottle.bmp b/crawl-ref/source/rltiles/item/misc/misc_bottle.bmp
new file mode 100644
index 0000000000..4384619fda
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_bottle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_box.bmp b/crawl-ref/source/rltiles/item/misc/misc_box.bmp
new file mode 100644
index 0000000000..7254e3e7b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_box.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_crystal.bmp b/crawl-ref/source/rltiles/item/misc/misc_crystal.bmp
new file mode 100644
index 0000000000..80a3b18e28
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_crystal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_deck.bmp b/crawl-ref/source/rltiles/item/misc/misc_deck.bmp
new file mode 100644
index 0000000000..ccc966cb2f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_deck.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_disc.bmp b/crawl-ref/source/rltiles/item/misc/misc_disc.bmp
new file mode 100644
index 0000000000..62a3d9a4e8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_disc.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_fan.bmp b/crawl-ref/source/rltiles/item/misc/misc_fan.bmp
new file mode 100644
index 0000000000..eadaf97442
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_fan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_horn.bmp b/crawl-ref/source/rltiles/item/misc/misc_horn.bmp
new file mode 100644
index 0000000000..c6a8c93060
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_horn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_lamp.bmp b/crawl-ref/source/rltiles/item/misc/misc_lamp.bmp
new file mode 100644
index 0000000000..0278fc3377
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_lamp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_lantern.bmp b/crawl-ref/source/rltiles/item/misc/misc_lantern.bmp
new file mode 100644
index 0000000000..087d6834ff
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_lantern.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_orb.bmp b/crawl-ref/source/rltiles/item/misc/misc_orb.bmp
new file mode 100644
index 0000000000..0ecea2774c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_orb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_rune.bmp b/crawl-ref/source/rltiles/item/misc/misc_rune.bmp
new file mode 100644
index 0000000000..9a0f0ab47b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_rune.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/misc_stone.bmp b/crawl-ref/source/rltiles/item/misc/misc_stone.bmp
new file mode 100644
index 0000000000..c9a52bcd01
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/misc_stone.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/pick_axe.bmp b/crawl-ref/source/rltiles/item/misc/pick_axe.bmp
new file mode 100644
index 0000000000..69097a8bc2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/pick_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/sack.bmp b/crawl-ref/source/rltiles/item/misc/sack.bmp
new file mode 100644
index 0000000000..b451a514a4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/sack.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/saddle.bmp b/crawl-ref/source/rltiles/item/misc/saddle.bmp
new file mode 100644
index 0000000000..bce2509866
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/saddle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/skeleton_key.bmp b/crawl-ref/source/rltiles/item/misc/skeleton_key.bmp
new file mode 100644
index 0000000000..96a6368764
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/skeleton_key.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/statue.bmp b/crawl-ref/source/rltiles/item/misc/statue.bmp
new file mode 100644
index 0000000000..a7000d766f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/statue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/stethoscope.bmp b/crawl-ref/source/rltiles/item/misc/stethoscope.bmp
new file mode 100644
index 0000000000..f15135d9d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/stethoscope.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/tallow_candle.bmp b/crawl-ref/source/rltiles/item/misc/tallow_candle.bmp
new file mode 100644
index 0000000000..ef89a9fbf1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/tallow_candle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/tin_opener.bmp b/crawl-ref/source/rltiles/item/misc/tin_opener.bmp
new file mode 100644
index 0000000000..c61d41993d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/tin_opener.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/tinning_kit.bmp b/crawl-ref/source/rltiles/item/misc/tinning_kit.bmp
new file mode 100644
index 0000000000..c36acd7bef
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/tinning_kit.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/towel.bmp b/crawl-ref/source/rltiles/item/misc/towel.bmp
new file mode 100644
index 0000000000..6d4aee70e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/towel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/unicorn_horn.bmp b/crawl-ref/source/rltiles/item/misc/unicorn_horn.bmp
new file mode 100644
index 0000000000..3a0ea24926
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/unicorn_horn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/wax_candle.bmp b/crawl-ref/source/rltiles/item/misc/wax_candle.bmp
new file mode 100644
index 0000000000..ef89a9fbf1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/wax_candle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/misc/whistle.bmp b/crawl-ref/source/rltiles/item/misc/whistle.bmp
new file mode 100644
index 0000000000..8fa49062ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/misc/whistle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/black.bmp b/crawl-ref/source/rltiles/item/potion/black.bmp
new file mode 100644
index 0000000000..892d50fa23
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/brilliant_blue.bmp b/crawl-ref/source/rltiles/item/potion/brilliant_blue.bmp
new file mode 100644
index 0000000000..1a4e9084ce
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/brilliant_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/brown.bmp b/crawl-ref/source/rltiles/item/potion/brown.bmp
new file mode 100644
index 0000000000..667ae2f2f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/bubbly.bmp b/crawl-ref/source/rltiles/item/potion/bubbly.bmp
new file mode 100644
index 0000000000..f2b97d2199
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/bubbly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/clear.bmp b/crawl-ref/source/rltiles/item/potion/clear.bmp
new file mode 100644
index 0000000000..d8c9dea7e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/clear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/cloudy.bmp b/crawl-ref/source/rltiles/item/potion/cloudy.bmp
new file mode 100644
index 0000000000..7e63532fc0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/cloudy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/cyan.bmp b/crawl-ref/source/rltiles/item/potion/cyan.bmp
new file mode 100644
index 0000000000..59a401b3d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/dark.bmp b/crawl-ref/source/rltiles/item/potion/dark.bmp
new file mode 100644
index 0000000000..bd9f6ca341
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/dark.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/dark_green.bmp b/crawl-ref/source/rltiles/item/potion/dark_green.bmp
new file mode 100644
index 0000000000..c03371dafc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/dark_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/effervescent.bmp b/crawl-ref/source/rltiles/item/potion/effervescent.bmp
new file mode 100644
index 0000000000..cd6f41e7e7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/effervescent.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/emerald.bmp b/crawl-ref/source/rltiles/item/potion/emerald.bmp
new file mode 100644
index 0000000000..23104f156e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/emerald.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/fizzy.bmp b/crawl-ref/source/rltiles/item/potion/fizzy.bmp
new file mode 100644
index 0000000000..23871c107a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/fizzy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/golden.bmp b/crawl-ref/source/rltiles/item/potion/golden.bmp
new file mode 100644
index 0000000000..551735e1dc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/golden.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-berserk-rage.bmp b/crawl-ref/source/rltiles/item/potion/i-berserk-rage.bmp
new file mode 100644
index 0000000000..111bced1c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-berserk-rage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-blood.bmp b/crawl-ref/source/rltiles/item/potion/i-blood.bmp
new file mode 100644
index 0000000000..0f9db052e6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-blood.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-confusion.bmp b/crawl-ref/source/rltiles/item/potion/i-confusion.bmp
new file mode 100644
index 0000000000..03b5fae648
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-confusion.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-cure-mutation.bmp b/crawl-ref/source/rltiles/item/potion/i-cure-mutation.bmp
new file mode 100644
index 0000000000..90c05b772b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-cure-mutation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-decay.bmp b/crawl-ref/source/rltiles/item/potion/i-decay.bmp
new file mode 100644
index 0000000000..d65f4a8cfc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-decay.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-degeneration.bmp b/crawl-ref/source/rltiles/item/potion/i-degeneration.bmp
new file mode 100644
index 0000000000..12e8ddd76c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-degeneration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-experience.bmp b/crawl-ref/source/rltiles/item/potion/i-experience.bmp
new file mode 100644
index 0000000000..29d73b83b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-experience.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-gain-dexterity.bmp b/crawl-ref/source/rltiles/item/potion/i-gain-dexterity.bmp
new file mode 100644
index 0000000000..2a81527c37
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-gain-dexterity.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-gain-intelligence.bmp b/crawl-ref/source/rltiles/item/potion/i-gain-intelligence.bmp
new file mode 100644
index 0000000000..c278ea4969
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-gain-intelligence.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-gain-strength.bmp b/crawl-ref/source/rltiles/item/potion/i-gain-strength.bmp
new file mode 100644
index 0000000000..f6ecf4b644
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-gain-strength.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-heal-wounds.bmp b/crawl-ref/source/rltiles/item/potion/i-heal-wounds.bmp
new file mode 100644
index 0000000000..f6fa59ef7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-heal-wounds.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-heal-wounds.bmp2 b/crawl-ref/source/rltiles/item/potion/i-heal-wounds.bmp2
new file mode 100755
index 0000000000..bddbcc4f74
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-heal-wounds.bmp2
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-heal.bmp b/crawl-ref/source/rltiles/item/potion/i-heal.bmp
new file mode 100644
index 0000000000..bf1fab5809
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-heal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-invisibility.bmp b/crawl-ref/source/rltiles/item/potion/i-invisibility.bmp
new file mode 100644
index 0000000000..a4ba50c467
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-invisibility.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-label.bmp b/crawl-ref/source/rltiles/item/potion/i-label.bmp
new file mode 100644
index 0000000000..6e959cc097
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-label.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-label2.bmp b/crawl-ref/source/rltiles/item/potion/i-label2.bmp
new file mode 100644
index 0000000000..3c934568ed
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-label2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-levitation.bmp b/crawl-ref/source/rltiles/item/potion/i-levitation.bmp
new file mode 100644
index 0000000000..b99c7a8b85
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-levitation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-levitation.bmp2 b/crawl-ref/source/rltiles/item/potion/i-levitation.bmp2
new file mode 100755
index 0000000000..6ea0fe7b06
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-levitation.bmp2
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-magic.bmp b/crawl-ref/source/rltiles/item/potion/i-magic.bmp
new file mode 100644
index 0000000000..630eba4fcc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-magic.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-might.bmp b/crawl-ref/source/rltiles/item/potion/i-might.bmp
new file mode 100644
index 0000000000..ef721b6f7b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-might.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-mutation.bmp b/crawl-ref/source/rltiles/item/potion/i-mutation.bmp
new file mode 100644
index 0000000000..4522452a57
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-mutation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-paralysis.bmp b/crawl-ref/source/rltiles/item/potion/i-paralysis.bmp
new file mode 100644
index 0000000000..436e810efb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-paralysis.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-poison.bmp b/crawl-ref/source/rltiles/item/potion/i-poison.bmp
new file mode 100644
index 0000000000..9b9e13845c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-poison.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-porridge.bmp b/crawl-ref/source/rltiles/item/potion/i-porridge.bmp
new file mode 100644
index 0000000000..721ece1336
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-porridge.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-resistance.bmp b/crawl-ref/source/rltiles/item/potion/i-resistance.bmp
new file mode 100644
index 0000000000..ed38e217d2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-resistance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-restore-abilities.bmp b/crawl-ref/source/rltiles/item/potion/i-restore-abilities.bmp
new file mode 100644
index 0000000000..14b42dfe13
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-restore-abilities.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-slowing.bmp b/crawl-ref/source/rltiles/item/potion/i-slowing.bmp
new file mode 100644
index 0000000000..d1cb9a537b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-slowing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-speed.bmp b/crawl-ref/source/rltiles/item/potion/i-speed.bmp
new file mode 100644
index 0000000000..5610101e13
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-speed.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-strong-poison.bmp b/crawl-ref/source/rltiles/item/potion/i-strong-poison.bmp
new file mode 100644
index 0000000000..e3709513e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-strong-poison.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/i-water.bmp b/crawl-ref/source/rltiles/item/potion/i-water.bmp
new file mode 100644
index 0000000000..d2e41d9304
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/i-water.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/magenta.bmp b/crawl-ref/source/rltiles/item/potion/magenta.bmp
new file mode 100644
index 0000000000..ecb3f9dd5b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/milky.bmp b/crawl-ref/source/rltiles/item/potion/milky.bmp
new file mode 100644
index 0000000000..a79247eaf5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/milky.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/murky.bmp b/crawl-ref/source/rltiles/item/potion/murky.bmp
new file mode 100644
index 0000000000..8acb6fca97
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/murky.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/orange.bmp b/crawl-ref/source/rltiles/item/potion/orange.bmp
new file mode 100644
index 0000000000..538dab58d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/pink.bmp b/crawl-ref/source/rltiles/item/potion/pink.bmp
new file mode 100644
index 0000000000..f3ed9d404d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/pink.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/puce.bmp b/crawl-ref/source/rltiles/item/potion/puce.bmp
new file mode 100644
index 0000000000..61e09811f6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/puce.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/purple_red.bmp b/crawl-ref/source/rltiles/item/potion/purple_red.bmp
new file mode 100644
index 0000000000..74b273fb8f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/purple_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/ruby.bmp b/crawl-ref/source/rltiles/item/potion/ruby.bmp
new file mode 100644
index 0000000000..c755b754f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/ruby.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/silver.bmp b/crawl-ref/source/rltiles/item/potion/silver.bmp
new file mode 100644
index 0000000000..b5f623e703
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/silver.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/sky_blue.bmp b/crawl-ref/source/rltiles/item/potion/sky_blue.bmp
new file mode 100644
index 0000000000..5e6d3362db
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/sky_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/smoky.bmp b/crawl-ref/source/rltiles/item/potion/smoky.bmp
new file mode 100644
index 0000000000..7c0a2513a1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/smoky.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/swirly.bmp b/crawl-ref/source/rltiles/item/potion/swirly.bmp
new file mode 100644
index 0000000000..e5af9621c0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/swirly.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/white.bmp b/crawl-ref/source/rltiles/item/potion/white.bmp
new file mode 100644
index 0000000000..00f6f7d76e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/potion/yellow.bmp b/crawl-ref/source/rltiles/item/potion/yellow.bmp
new file mode 100644
index 0000000000..ea39c28e00
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/potion/yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/agate.bmp b/crawl-ref/source/rltiles/item/ring/agate.bmp
new file mode 100644
index 0000000000..71c5f7bfb7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/agate.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/black_onyx.bmp b/crawl-ref/source/rltiles/item/ring/black_onyx.bmp
new file mode 100644
index 0000000000..38a40c57d9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/black_onyx.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/brass.bmp b/crawl-ref/source/rltiles/item/ring/brass.bmp
new file mode 100644
index 0000000000..aea942da6f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/brass.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/bronze.bmp b/crawl-ref/source/rltiles/item/ring/bronze.bmp
new file mode 100644
index 0000000000..deda99c686
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/bronze.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/clay.bmp b/crawl-ref/source/rltiles/item/ring/clay.bmp
new file mode 100644
index 0000000000..9477606f66
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/clay.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/copper.bmp b/crawl-ref/source/rltiles/item/ring/copper.bmp
new file mode 100644
index 0000000000..6c15bcbe82
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/copper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/coral.bmp b/crawl-ref/source/rltiles/item/ring/coral.bmp
new file mode 100644
index 0000000000..fe9d0fe308
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/coral.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/diamond.bmp b/crawl-ref/source/rltiles/item/ring/diamond.bmp
new file mode 100644
index 0000000000..cc521a3ddd
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/diamond.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/emerald.bmp b/crawl-ref/source/rltiles/item/ring/emerald.bmp
new file mode 100644
index 0000000000..fcd11765b3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/emerald.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/engagement.bmp b/crawl-ref/source/rltiles/item/ring/engagement.bmp
new file mode 100644
index 0000000000..594f5a7d59
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/engagement.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/glass.bmp b/crawl-ref/source/rltiles/item/ring/glass.bmp
new file mode 100644
index 0000000000..971040cf96
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/glass.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold.bmp b/crawl-ref/source/rltiles/item/ring/gold.bmp
new file mode 100644
index 0000000000..287a15d0d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold_blue.bmp b/crawl-ref/source/rltiles/item/ring/gold_blue.bmp
new file mode 100644
index 0000000000..f6bcd6a373
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold_cyan.bmp b/crawl-ref/source/rltiles/item/ring/gold_cyan.bmp
new file mode 100644
index 0000000000..19ebec9c83
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold_green.bmp b/crawl-ref/source/rltiles/item/ring/gold_green.bmp
new file mode 100644
index 0000000000..3c0e27a84c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold_magenta.bmp b/crawl-ref/source/rltiles/item/ring/gold_magenta.bmp
new file mode 100644
index 0000000000..f8a0603ccd
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold_red.bmp b/crawl-ref/source/rltiles/item/ring/gold_red.bmp
new file mode 100644
index 0000000000..70aadd4eb3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold_white.bmp b/crawl-ref/source/rltiles/item/ring/gold_white.bmp
new file mode 100644
index 0000000000..b03554cb1c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/gold_yellow.bmp b/crawl-ref/source/rltiles/item/ring/gold_yellow.bmp
new file mode 100644
index 0000000000..ed18275123
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/gold_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/granite.bmp b/crawl-ref/source/rltiles/item/ring/granite.bmp
new file mode 100644
index 0000000000..98932bc344
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/granite.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/iron.bmp b/crawl-ref/source/rltiles/item/ring/iron.bmp
new file mode 100644
index 0000000000..f2efd0a1bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/iron.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/ivory.bmp b/crawl-ref/source/rltiles/item/ring/ivory.bmp
new file mode 100644
index 0000000000..17864fd518
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/ivory.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/jade.bmp b/crawl-ref/source/rltiles/item/ring/jade.bmp
new file mode 100644
index 0000000000..f09eb978c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/jade.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/moonstone.bmp b/crawl-ref/source/rltiles/item/ring/moonstone.bmp
new file mode 100644
index 0000000000..1aefdadd8c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/moonstone.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/opal.bmp b/crawl-ref/source/rltiles/item/ring/opal.bmp
new file mode 100644
index 0000000000..506e6786c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/opal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/pearl.bmp b/crawl-ref/source/rltiles/item/ring/pearl.bmp
new file mode 100644
index 0000000000..3164b7875e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/pearl.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_black.bmp b/crawl-ref/source/rltiles/item/ring/plain_black.bmp
new file mode 100644
index 0000000000..132db36396
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_blue.bmp b/crawl-ref/source/rltiles/item/ring/plain_blue.bmp
new file mode 100644
index 0000000000..368a174b4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_cyan.bmp b/crawl-ref/source/rltiles/item/ring/plain_cyan.bmp
new file mode 100644
index 0000000000..7b4432eabc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_dark.bmp b/crawl-ref/source/rltiles/item/ring/plain_dark.bmp
new file mode 100644
index 0000000000..710502d74f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_dark.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_green.bmp b/crawl-ref/source/rltiles/item/ring/plain_green.bmp
new file mode 100644
index 0000000000..717c93640b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_magenta.bmp b/crawl-ref/source/rltiles/item/ring/plain_magenta.bmp
new file mode 100644
index 0000000000..a55acfb129
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_red.bmp b/crawl-ref/source/rltiles/item/ring/plain_red.bmp
new file mode 100644
index 0000000000..37d349cc7d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/plain_yellow.bmp b/crawl-ref/source/rltiles/item/ring/plain_yellow.bmp
new file mode 100644
index 0000000000..967d0b9fd9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/plain_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/ruby.bmp b/crawl-ref/source/rltiles/item/ring/ruby.bmp
new file mode 100644
index 0000000000..0fefb8bc10
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/ruby.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/sapphire.bmp b/crawl-ref/source/rltiles/item/ring/sapphire.bmp
new file mode 100644
index 0000000000..f8158f259d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/sapphire.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/shiny.bmp b/crawl-ref/source/rltiles/item/ring/shiny.bmp
new file mode 100644
index 0000000000..28f058b4fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/shiny.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/silver.bmp b/crawl-ref/source/rltiles/item/ring/silver.bmp
new file mode 100644
index 0000000000..8bc3c0e0e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/silver.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/steel.bmp b/crawl-ref/source/rltiles/item/ring/steel.bmp
new file mode 100644
index 0000000000..516e4b09b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/steel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/tiger_eye.bmp b/crawl-ref/source/rltiles/item/ring/tiger_eye.bmp
new file mode 100644
index 0000000000..91666354e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/tiger_eye.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/topaz.bmp b/crawl-ref/source/rltiles/item/ring/topaz.bmp
new file mode 100644
index 0000000000..994d063c5f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/topaz.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/twisted.bmp b/crawl-ref/source/rltiles/item/ring/twisted.bmp
new file mode 100644
index 0000000000..88378ad271
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/twisted.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/urand_mage.bmp b/crawl-ref/source/rltiles/item/ring/urand_mage.bmp
new file mode 100644
index 0000000000..d64242114a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/urand_mage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/urand_robustness.bmp b/crawl-ref/source/rltiles/item/ring/urand_robustness.bmp
new file mode 100644
index 0000000000..a1abbbbfec
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/urand_robustness.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/urand_shadows.bmp b/crawl-ref/source/rltiles/item/ring/urand_shadows.bmp
new file mode 100644
index 0000000000..30e0d9adcc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/urand_shadows.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/urand_shaolin.bmp b/crawl-ref/source/rltiles/item/ring/urand_shaolin.bmp
new file mode 100644
index 0000000000..ef1dd9cf9c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/urand_shaolin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/wire.bmp b/crawl-ref/source/rltiles/item/ring/wire.bmp
new file mode 100644
index 0000000000..fc9918ed93
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/wire.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/ring/wooden.bmp b/crawl-ref/source/rltiles/item/ring/wooden.bmp
new file mode 100644
index 0000000000..d02308b2d8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/ring/wooden.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/andova_begarin.bmp b/crawl-ref/source/rltiles/item/scroll/andova_begarin.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/andova_begarin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/blank_paper.bmp b/crawl-ref/source/rltiles/item/scroll/blank_paper.bmp
new file mode 100644
index 0000000000..de92ec87b3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/blank_paper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/daiyen_fooels.bmp b/crawl-ref/source/rltiles/item/scroll/daiyen_fooels.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/daiyen_fooels.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/duam_xnaht.bmp b/crawl-ref/source/rltiles/item/scroll/duam_xnaht.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/duam_xnaht.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/elam_ebow.bmp b/crawl-ref/source/rltiles/item/scroll/elam_ebow.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/elam_ebow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/elbib_yloh.bmp b/crawl-ref/source/rltiles/item/scroll/elbib_yloh.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/elbib_yloh.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/foobie_bletch.bmp b/crawl-ref/source/rltiles/item/scroll/foobie_bletch.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/foobie_bletch.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/garven_deh.bmp b/crawl-ref/source/rltiles/item/scroll/garven_deh.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/garven_deh.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/hackem_muche.bmp b/crawl-ref/source/rltiles/item/scroll/hackem_muche.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/hackem_muche.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-acquirement.bmp b/crawl-ref/source/rltiles/item/scroll/i-acquirement.bmp
new file mode 100644
index 0000000000..75790f58a9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-acquirement.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-blinking.bmp b/crawl-ref/source/rltiles/item/scroll/i-blinking.bmp
new file mode 100644
index 0000000000..f24b4f94ab
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-blinking.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-curse_armour.bmp b/crawl-ref/source/rltiles/item/scroll/i-curse_armour.bmp
new file mode 100644
index 0000000000..22c8e9c8c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-curse_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-curse_weapon.bmp b/crawl-ref/source/rltiles/item/scroll/i-curse_weapon.bmp
new file mode 100644
index 0000000000..742e0b1480
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-curse_weapon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-detect_curse.bmp b/crawl-ref/source/rltiles/item/scroll/i-detect_curse.bmp
new file mode 100644
index 0000000000..62226ab632
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-detect_curse.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon1.bmp b/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon1.bmp
new file mode 100644
index 0000000000..91bc6a8359
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon2.bmp b/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon2.bmp
new file mode 100644
index 0000000000..b7ecc2767e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon3.bmp b/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon3.bmp
new file mode 100644
index 0000000000..f89b839e57
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-enchant-weapon3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-enchant_armour.bmp b/crawl-ref/source/rltiles/item/scroll/i-enchant_armour.bmp
new file mode 100644
index 0000000000..38c362c91a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-enchant_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-fear.bmp b/crawl-ref/source/rltiles/item/scroll/i-fear.bmp
new file mode 100644
index 0000000000..75e5e07611
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-fear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-foregetfulness.bmp b/crawl-ref/source/rltiles/item/scroll/i-foregetfulness.bmp
new file mode 100644
index 0000000000..83857c2161
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-foregetfulness.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-identify.bmp b/crawl-ref/source/rltiles/item/scroll/i-identify.bmp
new file mode 100644
index 0000000000..f8e3135e8d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-identify.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-immolation.bmp b/crawl-ref/source/rltiles/item/scroll/i-immolation.bmp
new file mode 100644
index 0000000000..07f942f584
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-immolation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-magic_mapping.bmp b/crawl-ref/source/rltiles/item/scroll/i-magic_mapping.bmp
new file mode 100644
index 0000000000..0f9475d416
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-magic_mapping.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-noise.bmp b/crawl-ref/source/rltiles/item/scroll/i-noise.bmp
new file mode 100644
index 0000000000..591620bab4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-noise.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-random_uselessness.bmp b/crawl-ref/source/rltiles/item/scroll/i-random_uselessness.bmp
new file mode 100644
index 0000000000..6f54abbf11
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-random_uselessness.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-recharging.bmp b/crawl-ref/source/rltiles/item/scroll/i-recharging.bmp
new file mode 100644
index 0000000000..1498df9e6b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-recharging.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-remove_curse.bmp b/crawl-ref/source/rltiles/item/scroll/i-remove_curse.bmp
new file mode 100644
index 0000000000..3160a97869
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-remove_curse.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-summoning.bmp b/crawl-ref/source/rltiles/item/scroll/i-summoning.bmp
new file mode 100644
index 0000000000..55787d74ae
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-summoning.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-teleportation.bmp b/crawl-ref/source/rltiles/item/scroll/i-teleportation.bmp
new file mode 100644
index 0000000000..26f0bbcaad
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-teleportation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-torment.bmp b/crawl-ref/source/rltiles/item/scroll/i-torment.bmp
new file mode 100644
index 0000000000..a6333227a0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-torment.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/i-vorpalize-weapon.bmp b/crawl-ref/source/rltiles/item/scroll/i-vorpalize-weapon.bmp
new file mode 100644
index 0000000000..00adf184a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/i-vorpalize-weapon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/juyed_awk_yacc.bmp b/crawl-ref/source/rltiles/item/scroll/juyed_awk_yacc.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/juyed_awk_yacc.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/kernod_wel.bmp b/crawl-ref/source/rltiles/item/scroll/kernod_wel.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/kernod_wel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/kirje.bmp b/crawl-ref/source/rltiles/item/scroll/kirje.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/kirje.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/lep_gex_ven_zea.bmp b/crawl-ref/source/rltiles/item/scroll/lep_gex_ven_zea.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/lep_gex_ven_zea.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/mail.bmp b/crawl-ref/source/rltiles/item/scroll/mail.bmp
new file mode 100644
index 0000000000..f4cd4c2c4c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/nr_9.bmp b/crawl-ref/source/rltiles/item/scroll/nr_9.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/nr_9.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/pratyavayah.bmp b/crawl-ref/source/rltiles/item/scroll/pratyavayah.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/pratyavayah.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/prirutsenie.bmp b/crawl-ref/source/rltiles/item/scroll/prirutsenie.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/prirutsenie.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/read_me.bmp b/crawl-ref/source/rltiles/item/scroll/read_me.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/read_me.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/temov.bmp b/crawl-ref/source/rltiles/item/scroll/temov.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/temov.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/tharr.bmp b/crawl-ref/source/rltiles/item/scroll/tharr.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/tharr.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/ve_forbryderne.bmp b/crawl-ref/source/rltiles/item/scroll/ve_forbryderne.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/ve_forbryderne.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/velox_neb.bmp b/crawl-ref/source/rltiles/item/scroll/velox_neb.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/velox_neb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/venzar_borgavve.bmp b/crawl-ref/source/rltiles/item/scroll/venzar_borgavve.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/venzar_borgavve.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/verr_yed_horre.bmp b/crawl-ref/source/rltiles/item/scroll/verr_yed_horre.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/verr_yed_horre.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/xixaxa_xoxaxa_xuxaxa.bmp b/crawl-ref/source/rltiles/item/scroll/xixaxa_xoxaxa_xuxaxa.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/xixaxa_xoxaxa_xuxaxa.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/yum_yum.bmp b/crawl-ref/source/rltiles/item/scroll/yum_yum.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/yum_yum.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/scroll/zelgo_mer.bmp b/crawl-ref/source/rltiles/item/scroll/zelgo_mer.bmp
new file mode 100644
index 0000000000..5f5b7c284d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/scroll/zelgo_mer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/aluminum.bmp b/crawl-ref/source/rltiles/item/wand/aluminum.bmp
new file mode 100644
index 0000000000..f0aac7f0f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/aluminum.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/balsa.bmp b/crawl-ref/source/rltiles/item/wand/balsa.bmp
new file mode 100644
index 0000000000..648c28e37b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/balsa.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/brass.bmp b/crawl-ref/source/rltiles/item/wand/brass.bmp
new file mode 100644
index 0000000000..25480464f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/brass.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/copper.bmp b/crawl-ref/source/rltiles/item/wand/copper.bmp
new file mode 100644
index 0000000000..4583d6f318
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/copper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/crystal.bmp b/crawl-ref/source/rltiles/item/wand/crystal.bmp
new file mode 100644
index 0000000000..c2815286ca
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/crystal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/curved.bmp b/crawl-ref/source/rltiles/item/wand/curved.bmp
new file mode 100644
index 0000000000..0f5e3d48f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/curved.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/ebony.bmp b/crawl-ref/source/rltiles/item/wand/ebony.bmp
new file mode 100644
index 0000000000..bb7b409b22
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/ebony.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/forked.bmp b/crawl-ref/source/rltiles/item/wand/forked.bmp
new file mode 100644
index 0000000000..67fd8aa5f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/forked.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_bone.bmp b/crawl-ref/source/rltiles/item/wand/gem_bone.bmp
new file mode 100644
index 0000000000..71f5a5ab20
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_bone.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_brass.bmp b/crawl-ref/source/rltiles/item/wand/gem_brass.bmp
new file mode 100644
index 0000000000..0acaf8fdf5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_brass.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_bronze.bmp b/crawl-ref/source/rltiles/item/wand/gem_bronze.bmp
new file mode 100644
index 0000000000..76d178f946
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_bronze.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_copper.bmp b/crawl-ref/source/rltiles/item/wand/gem_copper.bmp
new file mode 100644
index 0000000000..f6083470ed
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_copper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_glass.bmp b/crawl-ref/source/rltiles/item/wand/gem_glass.bmp
new file mode 100644
index 0000000000..7a9e6f6468
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_glass.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_gold.bmp b/crawl-ref/source/rltiles/item/wand/gem_gold.bmp
new file mode 100644
index 0000000000..5d38cfed91
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_iron.bmp b/crawl-ref/source/rltiles/item/wand/gem_iron.bmp
new file mode 100644
index 0000000000..c67d54fdd8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_iron.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_ivory.bmp b/crawl-ref/source/rltiles/item/wand/gem_ivory.bmp
new file mode 100644
index 0000000000..1e15d4efac
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_ivory.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_lead.bmp b/crawl-ref/source/rltiles/item/wand/gem_lead.bmp
new file mode 100644
index 0000000000..91aa07e704
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_lead.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_plastic.bmp b/crawl-ref/source/rltiles/item/wand/gem_plastic.bmp
new file mode 100644
index 0000000000..20bcd307e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_plastic.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_silver.bmp b/crawl-ref/source/rltiles/item/wand/gem_silver.bmp
new file mode 100644
index 0000000000..acc777d0b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_silver.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/gem_wood.bmp b/crawl-ref/source/rltiles/item/wand/gem_wood.bmp
new file mode 100644
index 0000000000..fc3c7b49e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/gem_wood.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/glass.bmp b/crawl-ref/source/rltiles/item/wand/glass.bmp
new file mode 100644
index 0000000000..49fc396966
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/glass.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/hexagonal.bmp b/crawl-ref/source/rltiles/item/wand/hexagonal.bmp
new file mode 100644
index 0000000000..7e319130f0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/hexagonal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-cold.bmp b/crawl-ref/source/rltiles/item/wand/i-cold.bmp
new file mode 100644
index 0000000000..af1ccad412
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-cold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-confusion.bmp b/crawl-ref/source/rltiles/item/wand/i-confusion.bmp
new file mode 100644
index 0000000000..03b5fae648
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-confusion.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-digging.bmp b/crawl-ref/source/rltiles/item/wand/i-digging.bmp
new file mode 100644
index 0000000000..b190713c86
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-digging.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-disintegration.bmp b/crawl-ref/source/rltiles/item/wand/i-disintegration.bmp
new file mode 100644
index 0000000000..f7b7a251c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-disintegration.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-draining.bmp b/crawl-ref/source/rltiles/item/wand/i-draining.bmp
new file mode 100644
index 0000000000..33d07da6de
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-draining.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-enslavement.bmp b/crawl-ref/source/rltiles/item/wand/i-enslavement.bmp
new file mode 100644
index 0000000000..55787d74ae
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-enslavement.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-fire.bmp b/crawl-ref/source/rltiles/item/wand/i-fire.bmp
new file mode 100644
index 0000000000..fb426af490
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-fire.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-fireball.bmp b/crawl-ref/source/rltiles/item/wand/i-fireball.bmp
new file mode 100644
index 0000000000..3e993461cb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-fireball.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-flame.bmp b/crawl-ref/source/rltiles/item/wand/i-flame.bmp
new file mode 100644
index 0000000000..48ebf95164
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-flame.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-frost.bmp b/crawl-ref/source/rltiles/item/wand/i-frost.bmp
new file mode 100644
index 0000000000..8c984cd74f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-frost.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-hasting.bmp b/crawl-ref/source/rltiles/item/wand/i-hasting.bmp
new file mode 100644
index 0000000000..5610101e13
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-hasting.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-healing.bmp b/crawl-ref/source/rltiles/item/wand/i-healing.bmp
new file mode 100644
index 0000000000..bf1fab5809
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-healing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-invisibility.bmp b/crawl-ref/source/rltiles/item/wand/i-invisibility.bmp
new file mode 100644
index 0000000000..a4ba50c467
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-invisibility.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-label.bmp b/crawl-ref/source/rltiles/item/wand/i-label.bmp
new file mode 100644
index 0000000000..7a8be22445
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-label.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-lightning.bmp b/crawl-ref/source/rltiles/item/wand/i-lightning.bmp
new file mode 100644
index 0000000000..127a84b398
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-lightning.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-magic_darts.bmp b/crawl-ref/source/rltiles/item/wand/i-magic_darts.bmp
new file mode 100644
index 0000000000..182e9133e3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-magic_darts.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-paralysis.bmp b/crawl-ref/source/rltiles/item/wand/i-paralysis.bmp
new file mode 100644
index 0000000000..436e810efb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-paralysis.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-polymorph_other.bmp b/crawl-ref/source/rltiles/item/wand/i-polymorph_other.bmp
new file mode 100644
index 0000000000..99e8e572a2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-polymorph_other.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-random_effects.bmp b/crawl-ref/source/rltiles/item/wand/i-random_effects.bmp
new file mode 100644
index 0000000000..6f54abbf11
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-random_effects.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-slowing.bmp b/crawl-ref/source/rltiles/item/wand/i-slowing.bmp
new file mode 100644
index 0000000000..d1cb9a537b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-slowing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/i-teleportation.bmp b/crawl-ref/source/rltiles/item/wand/i-teleportation.bmp
new file mode 100644
index 0000000000..fe92d812d7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/i-teleportation.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/iridium.bmp b/crawl-ref/source/rltiles/item/wand/iridium.bmp
new file mode 100644
index 0000000000..1fe63b248f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/iridium.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/iron.bmp b/crawl-ref/source/rltiles/item/wand/iron.bmp
new file mode 100644
index 0000000000..a9b27f19bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/iron.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/jeweled.bmp b/crawl-ref/source/rltiles/item/wand/jeweled.bmp
new file mode 100644
index 0000000000..a5690553cc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/jeweled.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/long.bmp b/crawl-ref/source/rltiles/item/wand/long.bmp
new file mode 100644
index 0000000000..31ddd65d65
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/long.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/maple.bmp b/crawl-ref/source/rltiles/item/wand/maple.bmp
new file mode 100644
index 0000000000..c501382720
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/maple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/marble.bmp b/crawl-ref/source/rltiles/item/wand/marble.bmp
new file mode 100644
index 0000000000..9d83480bbd
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/marble.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/oak.bmp b/crawl-ref/source/rltiles/item/wand/oak.bmp
new file mode 100644
index 0000000000..2b25264d8b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/oak.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/pine.bmp b/crawl-ref/source/rltiles/item/wand/pine.bmp
new file mode 100644
index 0000000000..e8891aca16
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/pine.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/platinum.bmp b/crawl-ref/source/rltiles/item/wand/platinum.bmp
new file mode 100644
index 0000000000..3e6cde849e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/platinum.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/runed.bmp b/crawl-ref/source/rltiles/item/wand/runed.bmp
new file mode 100644
index 0000000000..1fc2276b22
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/runed.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/short.bmp b/crawl-ref/source/rltiles/item/wand/short.bmp
new file mode 100644
index 0000000000..321717421d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/short.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/silver.bmp b/crawl-ref/source/rltiles/item/wand/silver.bmp
new file mode 100644
index 0000000000..8226c48f28
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/silver.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/spiked.bmp b/crawl-ref/source/rltiles/item/wand/spiked.bmp
new file mode 100644
index 0000000000..1e3308ce33
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/spiked.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff00.bmp b/crawl-ref/source/rltiles/item/wand/staff00.bmp
new file mode 100644
index 0000000000..2c30326f6c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff00.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff01.bmp b/crawl-ref/source/rltiles/item/wand/staff01.bmp
new file mode 100644
index 0000000000..9182cabba1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff01.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff02.bmp b/crawl-ref/source/rltiles/item/wand/staff02.bmp
new file mode 100644
index 0000000000..c7dda61fb7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff02.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff03.bmp b/crawl-ref/source/rltiles/item/wand/staff03.bmp
new file mode 100644
index 0000000000..fac426cbba
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff03.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff04.bmp b/crawl-ref/source/rltiles/item/wand/staff04.bmp
new file mode 100644
index 0000000000..b27ebd7a5d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff04.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff05.bmp b/crawl-ref/source/rltiles/item/wand/staff05.bmp
new file mode 100644
index 0000000000..fd33330424
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff05.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff06.bmp b/crawl-ref/source/rltiles/item/wand/staff06.bmp
new file mode 100644
index 0000000000..4c560dfe75
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff06.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff07.bmp b/crawl-ref/source/rltiles/item/wand/staff07.bmp
new file mode 100644
index 0000000000..fb93320584
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff07.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff08.bmp b/crawl-ref/source/rltiles/item/wand/staff08.bmp
new file mode 100644
index 0000000000..0b83635351
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff08.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/staff09.bmp b/crawl-ref/source/rltiles/item/wand/staff09.bmp
new file mode 100644
index 0000000000..7fbe7c27dc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/staff09.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/steel.bmp b/crawl-ref/source/rltiles/item/wand/steel.bmp
new file mode 100644
index 0000000000..4e1550ae39
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/steel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/tin.bmp b/crawl-ref/source/rltiles/item/wand/tin.bmp
new file mode 100644
index 0000000000..cde9644368
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/tin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/uranium.bmp b/crawl-ref/source/rltiles/item/wand/uranium.bmp
new file mode 100644
index 0000000000..16b916c05a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/uranium.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/wand/zinc.bmp b/crawl-ref/source/rltiles/item/wand/zinc.bmp
new file mode 100644
index 0000000000..25fd8d6178
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/wand/zinc.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/aklys.bmp b/crawl-ref/source/rltiles/item/weapon/aklys.bmp
new file mode 100644
index 0000000000..f8eecd2cdc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/aklys.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/ancient_sword.bmp b/crawl-ref/source/rltiles/item/weapon/ancient_sword.bmp
new file mode 100644
index 0000000000..192751ba1d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/ancient_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/ancus.bmp b/crawl-ref/source/rltiles/item/weapon/ancus.bmp
new file mode 100644
index 0000000000..977deba6d9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/ancus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/arrow.bmp b/crawl-ref/source/rltiles/item/weapon/arrow.bmp
new file mode 100644
index 0000000000..366f835505
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/arrow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/athame.bmp b/crawl-ref/source/rltiles/item/weapon/athame.bmp
new file mode 100644
index 0000000000..69ad827678
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/athame.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/axe.bmp b/crawl-ref/source/rltiles/item/weapon/axe.bmp
new file mode 100644
index 0000000000..b83bf08335
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bardiche.bmp b/crawl-ref/source/rltiles/item/weapon/bardiche.bmp
new file mode 100644
index 0000000000..c95df5c992
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bardiche.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/battle_axe.bmp b/crawl-ref/source/rltiles/item/weapon/battle_axe.bmp
new file mode 100644
index 0000000000..099b25a126
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/battle_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/battle_axe2.bmp b/crawl-ref/source/rltiles/item/weapon/battle_axe2.bmp
new file mode 100644
index 0000000000..2d611fec27
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/battle_axe2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/battle_axe3.bmp b/crawl-ref/source/rltiles/item/weapon/battle_axe3.bmp
new file mode 100644
index 0000000000..00ab94ec95
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/battle_axe3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bec_de_corbin.bmp b/crawl-ref/source/rltiles/item/weapon/bec_de_corbin.bmp
new file mode 100644
index 0000000000..aac4c691bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bec_de_corbin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bill_guisarme.bmp b/crawl-ref/source/rltiles/item/weapon/bill_guisarme.bmp
new file mode 100644
index 0000000000..503ac68c09
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bill_guisarme.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/blessed_blade.bmp b/crawl-ref/source/rltiles/item/weapon/blessed_blade.bmp
new file mode 100644
index 0000000000..660022a5b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/blessed_blade.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/blowgun.bmp b/crawl-ref/source/rltiles/item/weapon/blowgun.bmp
new file mode 100644
index 0000000000..60c52f4182
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/blowgun.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/blowgun2.bmp b/crawl-ref/source/rltiles/item/weapon/blowgun2.bmp
new file mode 100644
index 0000000000..167f374fcc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/blowgun2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/boomerang.bmp b/crawl-ref/source/rltiles/item/weapon/boomerang.bmp
new file mode 100644
index 0000000000..c758e19efc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/boomerang.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bow.bmp b/crawl-ref/source/rltiles/item/weapon/bow.bmp
new file mode 100644
index 0000000000..046c53b177
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bow2.bmp b/crawl-ref/source/rltiles/item/weapon/bow2.bmp
new file mode 100644
index 0000000000..f85a373e32
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bow2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/broad_axe2.bmp b/crawl-ref/source/rltiles/item/weapon/broad_axe2.bmp
new file mode 100644
index 0000000000..5a451c3cfa
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/broad_axe2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/broadsword.bmp b/crawl-ref/source/rltiles/item/weapon/broadsword.bmp
new file mode 100644
index 0000000000..03e19827ac
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/broadsword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/bullwhip.bmp b/crawl-ref/source/rltiles/item/weapon/bullwhip.bmp
new file mode 100644
index 0000000000..397a92c676
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/bullwhip.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/club.bmp b/crawl-ref/source/rltiles/item/weapon/club.bmp
new file mode 100644
index 0000000000..bf19a2b729
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/club.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/crossbow.bmp b/crawl-ref/source/rltiles/item/weapon/crossbow.bmp
new file mode 100644
index 0000000000..29734cb3bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/crossbow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/crossbow2.bmp b/crawl-ref/source/rltiles/item/weapon/crossbow2.bmp
new file mode 100644
index 0000000000..584432236a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/crossbow2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/crossbow_bolt.bmp b/crawl-ref/source/rltiles/item/weapon/crossbow_bolt.bmp
new file mode 100644
index 0000000000..5c9adb1a78
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/crossbow_bolt.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/crysknife.bmp b/crawl-ref/source/rltiles/item/weapon/crysknife.bmp
new file mode 100644
index 0000000000..9729908637
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/crysknife.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/dagger.bmp b/crawl-ref/source/rltiles/item/weapon/dagger.bmp
new file mode 100644
index 0000000000..578f4d5a04
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/dagger.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/dart-p.bmp b/crawl-ref/source/rltiles/item/weapon/dart-p.bmp
new file mode 100644
index 0000000000..06e885d8f9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/dart-p.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/dart.bmp b/crawl-ref/source/rltiles/item/weapon/dart.bmp
new file mode 100644
index 0000000000..fe861697f2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/dart.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/demon_blade.bmp b/crawl-ref/source/rltiles/item/weapon/demon_blade.bmp
new file mode 100644
index 0000000000..7d54cdd925
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/demon_blade.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/demon_trident.bmp b/crawl-ref/source/rltiles/item/weapon/demon_trident.bmp
new file mode 100644
index 0000000000..3801a155a2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/demon_trident.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/demon_whip.bmp b/crawl-ref/source/rltiles/item/weapon/demon_whip.bmp
new file mode 100644
index 0000000000..76f2670289
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/demon_whip.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/double_sword.bmp b/crawl-ref/source/rltiles/item/weapon/double_sword.bmp
new file mode 100644
index 0000000000..3544beb313
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/double_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/dwarvish_mattock.bmp b/crawl-ref/source/rltiles/item/weapon/dwarvish_mattock.bmp
new file mode 100644
index 0000000000..a77daf0931
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/dwarvish_mattock.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/dwarvish_short_sword.bmp b/crawl-ref/source/rltiles/item/weapon/dwarvish_short_sword.bmp
new file mode 100644
index 0000000000..377850a637
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/dwarvish_short_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/dwarvish_spear.bmp b/crawl-ref/source/rltiles/item/weapon/dwarvish_spear.bmp
new file mode 100644
index 0000000000..ef3d8d0748
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/dwarvish_spear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/elven_arrow.bmp b/crawl-ref/source/rltiles/item/weapon/elven_arrow.bmp
new file mode 100644
index 0000000000..aaec160a17
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/elven_arrow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/elven_bow.bmp b/crawl-ref/source/rltiles/item/weapon/elven_bow.bmp
new file mode 100644
index 0000000000..557dd1d079
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/elven_bow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/elven_broadsword.bmp b/crawl-ref/source/rltiles/item/weapon/elven_broadsword.bmp
new file mode 100644
index 0000000000..f52daa65fa
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/elven_broadsword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/elven_dagger.bmp b/crawl-ref/source/rltiles/item/weapon/elven_dagger.bmp
new file mode 100644
index 0000000000..a1a643c881
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/elven_dagger.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/elven_short_sword.bmp b/crawl-ref/source/rltiles/item/weapon/elven_short_sword.bmp
new file mode 100644
index 0000000000..3d7b4fa9e7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/elven_short_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/elven_spear.bmp b/crawl-ref/source/rltiles/item/weapon/elven_spear.bmp
new file mode 100644
index 0000000000..7118e7bc83
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/elven_spear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/eveningstar.bmp b/crawl-ref/source/rltiles/item/weapon/eveningstar.bmp
new file mode 100644
index 0000000000..986a03afe7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/eveningstar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/eveningstar2.bmp b/crawl-ref/source/rltiles/item/weapon/eveningstar2.bmp
new file mode 100644
index 0000000000..c8e8e56218
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/eveningstar2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/executioner_axe.bmp b/crawl-ref/source/rltiles/item/weapon/executioner_axe.bmp
new file mode 100644
index 0000000000..eea9d07b71
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/executioner_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/executioner_axe2.bmp b/crawl-ref/source/rltiles/item/weapon/executioner_axe2.bmp
new file mode 100644
index 0000000000..a7c1091485
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/executioner_axe2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/falchion.bmp b/crawl-ref/source/rltiles/item/weapon/falchion.bmp
new file mode 100644
index 0000000000..8ca48fb049
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/falchion.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/fauchard.bmp b/crawl-ref/source/rltiles/item/weapon/fauchard.bmp
new file mode 100644
index 0000000000..b6e84bd4ca
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/fauchard.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/flail.bmp b/crawl-ref/source/rltiles/item/weapon/flail.bmp
new file mode 100644
index 0000000000..1dcf68fb7f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/flail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/flail2.bmp b/crawl-ref/source/rltiles/item/weapon/flail2.bmp
new file mode 100644
index 0000000000..598f9be1c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/flail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/flail_angmar.bmp b/crawl-ref/source/rltiles/item/weapon/flail_angmar.bmp
new file mode 100644
index 0000000000..0854b5fd02
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/flail_angmar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/giant_club.bmp b/crawl-ref/source/rltiles/item/weapon/giant_club.bmp
new file mode 100644
index 0000000000..a3d9810b1b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/giant_club.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/giant_spiked_club.bmp b/crawl-ref/source/rltiles/item/weapon/giant_spiked_club.bmp
new file mode 100644
index 0000000000..ddd9af16fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/giant_spiked_club.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/glaive.bmp b/crawl-ref/source/rltiles/item/weapon/glaive.bmp
new file mode 100644
index 0000000000..613ebf167f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/glaive.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/glaive2.bmp b/crawl-ref/source/rltiles/item/weapon/glaive2.bmp
new file mode 100644
index 0000000000..3e249eaee0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/glaive2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/great_flail.bmp b/crawl-ref/source/rltiles/item/weapon/great_flail.bmp
new file mode 100644
index 0000000000..366e378906
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/great_flail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/great_flail2.bmp b/crawl-ref/source/rltiles/item/weapon/great_flail2.bmp
new file mode 100644
index 0000000000..e272b64faa
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/great_flail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/greatsword.bmp b/crawl-ref/source/rltiles/item/weapon/greatsword.bmp
new file mode 100644
index 0000000000..a9d0da2d90
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/greatsword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/greatsword2.bmp b/crawl-ref/source/rltiles/item/weapon/greatsword2.bmp
new file mode 100644
index 0000000000..e765318a05
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/greatsword2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/guisarme.bmp b/crawl-ref/source/rltiles/item/weapon/guisarme.bmp
new file mode 100644
index 0000000000..5634266da5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/guisarme.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/halberd.bmp b/crawl-ref/source/rltiles/item/weapon/halberd.bmp
new file mode 100644
index 0000000000..06a83a4e6f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/halberd.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/halberd2.bmp b/crawl-ref/source/rltiles/item/weapon/halberd2.bmp
new file mode 100644
index 0000000000..c909c85075
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/halberd2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/hammer.bmp b/crawl-ref/source/rltiles/item/weapon/hammer.bmp
new file mode 100644
index 0000000000..d0976883f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/hammer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/hammer2.bmp b/crawl-ref/source/rltiles/item/weapon/hammer2.bmp
new file mode 100644
index 0000000000..7318390a97
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/hammer2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/hand_axe.bmp b/crawl-ref/source/rltiles/item/weapon/hand_axe.bmp
new file mode 100644
index 0000000000..f7e109c27f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/hand_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/hand_crossbow.bmp b/crawl-ref/source/rltiles/item/weapon/hand_crossbow.bmp
new file mode 100644
index 0000000000..c8d3200010
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/hand_crossbow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/hand_crossbow2.bmp b/crawl-ref/source/rltiles/item/weapon/hand_crossbow2.bmp
new file mode 100644
index 0000000000..3f2ef3ff4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/hand_crossbow2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/javelin.bmp b/crawl-ref/source/rltiles/item/weapon/javelin.bmp
new file mode 100644
index 0000000000..712addc5fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/javelin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/katana.bmp b/crawl-ref/source/rltiles/item/weapon/katana.bmp
new file mode 100644
index 0000000000..692dab9ca3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/katana.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/katana2.bmp b/crawl-ref/source/rltiles/item/weapon/katana2.bmp
new file mode 100644
index 0000000000..6e7c226941
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/katana2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/katana3.bmp b/crawl-ref/source/rltiles/item/weapon/katana3.bmp
new file mode 100644
index 0000000000..0639a3b395
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/katana3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/knife.bmp b/crawl-ref/source/rltiles/item/weapon/knife.bmp
new file mode 100644
index 0000000000..781c6129de
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/knife.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/lajatang.bmp b/crawl-ref/source/rltiles/item/weapon/lajatang.bmp
new file mode 100644
index 0000000000..3a6e3cf93b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/lajatang.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/lance.bmp b/crawl-ref/source/rltiles/item/weapon/lance.bmp
new file mode 100644
index 0000000000..3b222d8c8a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/lance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/lochaber_axe.bmp b/crawl-ref/source/rltiles/item/weapon/lochaber_axe.bmp
new file mode 100644
index 0000000000..81f1e33ffd
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/lochaber_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/long_sword.bmp b/crawl-ref/source/rltiles/item/weapon/long_sword.bmp
new file mode 100644
index 0000000000..3d350a7417
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/long_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/long_sword2.bmp b/crawl-ref/source/rltiles/item/weapon/long_sword2.bmp
new file mode 100644
index 0000000000..264e280f00
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/long_sword2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/long_sword3.bmp b/crawl-ref/source/rltiles/item/weapon/long_sword3.bmp
new file mode 100644
index 0000000000..bfcb44b72f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/long_sword3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/longbow.bmp b/crawl-ref/source/rltiles/item/weapon/longbow.bmp
new file mode 100644
index 0000000000..aad879fa40
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/longbow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/lucern_hammer.bmp b/crawl-ref/source/rltiles/item/weapon/lucern_hammer.bmp
new file mode 100644
index 0000000000..50250feb79
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/lucern_hammer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/mace.bmp b/crawl-ref/source/rltiles/item/weapon/mace.bmp
new file mode 100644
index 0000000000..c381c75465
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/mace.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/mace2.bmp b/crawl-ref/source/rltiles/item/weapon/mace2.bmp
new file mode 100644
index 0000000000..194d4ec640
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/mace2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/mace3.bmp b/crawl-ref/source/rltiles/item/weapon/mace3.bmp
new file mode 100644
index 0000000000..7ca0300e3f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/mace3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/mace_large.bmp b/crawl-ref/source/rltiles/item/weapon/mace_large.bmp
new file mode 100644
index 0000000000..50f713dda0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/mace_large.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/mace_large2.bmp b/crawl-ref/source/rltiles/item/weapon/mace_large2.bmp
new file mode 100644
index 0000000000..e360117df9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/mace_large2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/morning_star.bmp b/crawl-ref/source/rltiles/item/weapon/morning_star.bmp
new file mode 100644
index 0000000000..78db4a5700
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/morning_star.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/morningstar.bmp b/crawl-ref/source/rltiles/item/weapon/morningstar.bmp
new file mode 100644
index 0000000000..144d597e5e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/morningstar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/morningstar2.bmp b/crawl-ref/source/rltiles/item/weapon/morningstar2.bmp
new file mode 100644
index 0000000000..fdf76375f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/morningstar2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/needle-p.bmp b/crawl-ref/source/rltiles/item/weapon/needle-p.bmp
new file mode 100644
index 0000000000..5cc0b48a04
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/needle-p.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/needle.bmp b/crawl-ref/source/rltiles/item/weapon/needle.bmp
new file mode 100644
index 0000000000..f26726fcfa
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/needle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_arrow.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_arrow.bmp
new file mode 100644
index 0000000000..2b65001b93
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_arrow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_bow.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_bow.bmp
new file mode 100644
index 0000000000..b773eaf1e2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_bow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_dagger.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_dagger.bmp
new file mode 100644
index 0000000000..3be8f3511a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_dagger.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_glaive.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_glaive.bmp
new file mode 100644
index 0000000000..ca5269fece
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_glaive.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_great_sword.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_great_sword.bmp
new file mode 100644
index 0000000000..aaacec015c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_great_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_long_sword.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_long_sword.bmp
new file mode 100644
index 0000000000..ce01e988f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_long_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_short_sword.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_short_sword.bmp
new file mode 100644
index 0000000000..c9516cc24b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_short_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/orcish_spear.bmp b/crawl-ref/source/rltiles/item/weapon/orcish_spear.bmp
new file mode 100644
index 0000000000..d9e3773736
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/orcish_spear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/partisan.bmp b/crawl-ref/source/rltiles/item/weapon/partisan.bmp
new file mode 100644
index 0000000000..6d45637825
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/partisan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/quarterstaff.bmp b/crawl-ref/source/rltiles/item/weapon/quarterstaff.bmp
new file mode 100644
index 0000000000..bfe55f272d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/quarterstaff.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/quickblade.bmp b/crawl-ref/source/rltiles/item/weapon/quickblade.bmp
new file mode 100644
index 0000000000..38fe98c191
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/quickblade.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/ranseur.bmp b/crawl-ref/source/rltiles/item/weapon/ranseur.bmp
new file mode 100644
index 0000000000..1238088235
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/ranseur.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/rubber_hose.bmp b/crawl-ref/source/rltiles/item/weapon/rubber_hose.bmp
new file mode 100644
index 0000000000..bbc8d3eb95
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/rubber_hose.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/runesword.bmp b/crawl-ref/source/rltiles/item/weapon/runesword.bmp
new file mode 100644
index 0000000000..3e21f78f12
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/runesword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/sabre2.bmp b/crawl-ref/source/rltiles/item/weapon/sabre2.bmp
new file mode 100644
index 0000000000..79cf4d7689
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/sabre2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/scalpel.bmp b/crawl-ref/source/rltiles/item/weapon/scalpel.bmp
new file mode 100644
index 0000000000..d5d1f4dee8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/scalpel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/scimitar.bmp b/crawl-ref/source/rltiles/item/weapon/scimitar.bmp
new file mode 100644
index 0000000000..f373a19cff
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/scimitar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/scimitar2.bmp b/crawl-ref/source/rltiles/item/weapon/scimitar2.bmp
new file mode 100644
index 0000000000..62ecfcfc4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/scimitar2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/scythe.bmp b/crawl-ref/source/rltiles/item/weapon/scythe.bmp
new file mode 100644
index 0000000000..67eee3ce12
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/scythe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/scythe2.bmp b/crawl-ref/source/rltiles/item/weapon/scythe2.bmp
new file mode 100644
index 0000000000..cd7987c297
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/scythe2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/short_sword.bmp b/crawl-ref/source/rltiles/item/weapon/short_sword.bmp
new file mode 100644
index 0000000000..011a35be08
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/short_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/short_sword2.bmp b/crawl-ref/source/rltiles/item/weapon/short_sword2.bmp
new file mode 100644
index 0000000000..8769fa37f2
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/short_sword2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/shuriken.bmp b/crawl-ref/source/rltiles/item/weapon/shuriken.bmp
new file mode 100644
index 0000000000..15b536ad96
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/shuriken.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/silver_arrow.bmp b/crawl-ref/source/rltiles/item/weapon/silver_arrow.bmp
new file mode 100644
index 0000000000..0239f799b8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/silver_arrow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/silver_dagger.bmp b/crawl-ref/source/rltiles/item/weapon/silver_dagger.bmp
new file mode 100644
index 0000000000..9a8f68a7a9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/silver_dagger.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/silver_saber.bmp b/crawl-ref/source/rltiles/item/weapon/silver_saber.bmp
new file mode 100644
index 0000000000..0d2f7797e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/silver_saber.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/silver_spear.bmp b/crawl-ref/source/rltiles/item/weapon/silver_spear.bmp
new file mode 100644
index 0000000000..7b6ec9cecc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/silver_spear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/sling.bmp b/crawl-ref/source/rltiles/item/weapon/sling.bmp
new file mode 100644
index 0000000000..cec9f21ca5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/sling.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/sling_bullet.bmp b/crawl-ref/source/rltiles/item/weapon/sling_bullet.bmp
new file mode 100644
index 0000000000..1d935f18ec
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/sling_bullet.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spear.bmp b/crawl-ref/source/rltiles/item/weapon/spear.bmp
new file mode 100644
index 0000000000..c79271142b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spear.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spear2.bmp b/crawl-ref/source/rltiles/item/weapon/spear2.bmp
new file mode 100644
index 0000000000..883f10fc97
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spear2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spetum.bmp b/crawl-ref/source/rltiles/item/weapon/spetum.bmp
new file mode 100644
index 0000000000..c28565cb31
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spetum.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spiked_flail.bmp b/crawl-ref/source/rltiles/item/weapon/spiked_flail.bmp
new file mode 100644
index 0000000000..f12d506d0d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spiked_flail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spiked_flail2.bmp b/crawl-ref/source/rltiles/item/weapon/spiked_flail2.bmp
new file mode 100644
index 0000000000..6a5d6de699
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spiked_flail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_glaive_of_prune.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_glaive_of_prune.bmp
new file mode 100644
index 0000000000..40282f92b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_glaive_of_prune.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_knife_of_accuracy.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_knife_of_accuracy.bmp
new file mode 100644
index 0000000000..8aee3d809f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_knife_of_accuracy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_mace_of_variability.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_mace_of_variability.bmp
new file mode 100644
index 0000000000..7f984e8b1f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_mace_of_variability.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus.bmp
new file mode 100644
index 0000000000..33664bb49b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus2.bmp
new file mode 100644
index 0000000000..fd5d38625a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_asmodeus2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment.bmp
new file mode 100644
index 0000000000..098f1fcf0c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment2.bmp
new file mode 100644
index 0000000000..5566d56606
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sceptre_of_torment2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses.bmp
new file mode 100644
index 0000000000..5e192b63fc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses2.bmp
new file mode 100644
index 0000000000..5a4db6fa68
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_scythe_of_curses2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword.bmp
new file mode 100644
index 0000000000..1bc3e87cce
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword2.bmp
new file mode 100644
index 0000000000..19e703863a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_singing_sword2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater.bmp
new file mode 100644
index 0000000000..ccf8568b98
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater2.bmp
new file mode 100644
index 0000000000..37332c3ce8
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_dispater2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_olgreb.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_olgreb.bmp
new file mode 100644
index 0000000000..da9886eb82
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_staff_of_olgreb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_cerebov.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_cerebov.bmp
new file mode 100644
index 0000000000..6d30565d5d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_cerebov.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power.bmp
new file mode 100644
index 0000000000..a5b69644b0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power2.bmp
new file mode 100644
index 0000000000..a3275e7e7f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_power2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok.bmp
new file mode 100644
index 0000000000..74d54924f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok2.bmp
new file mode 100644
index 0000000000..85686ab02f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_sword_of_zonguldrok2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_vampires_tooth.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_vampires_tooth.bmp
new file mode 100644
index 0000000000..b0ad70533e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_vampires_tooth.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog.bmp
new file mode 100644
index 0000000000..070402f6e6
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog2.bmp b/crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog2.bmp
new file mode 100644
index 0000000000..cdc5dc429a
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/spwpn_wrath_of_trog2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/stiletto.bmp b/crawl-ref/source/rltiles/item/weapon/stiletto.bmp
new file mode 100644
index 0000000000..4c3195f9ba
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/stiletto.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/sword_orcish.bmp b/crawl-ref/source/rltiles/item/weapon/sword_orcish.bmp
new file mode 100644
index 0000000000..e43235f13f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/sword_orcish.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/throwing_net.bmp b/crawl-ref/source/rltiles/item/weapon/throwing_net.bmp
new file mode 100644
index 0000000000..4f2ca6d51e
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/throwing_net.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/trident.bmp b/crawl-ref/source/rltiles/item/weapon/trident.bmp
new file mode 100644
index 0000000000..b2ef334937
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/trident.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/trident2.bmp b/crawl-ref/source/rltiles/item/weapon/trident2.bmp
new file mode 100644
index 0000000000..6dc4ade0c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/trident2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/triple_sword.bmp b/crawl-ref/source/rltiles/item/weapon/triple_sword.bmp
new file mode 100644
index 0000000000..6db0ea0858
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/triple_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/tsurugi.bmp b/crawl-ref/source/rltiles/item/weapon/tsurugi.bmp
new file mode 100644
index 0000000000..e9fd58661f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/tsurugi.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/two_handed_sword.bmp b/crawl-ref/source/rltiles/item/weapon/two_handed_sword.bmp
new file mode 100644
index 0000000000..f590a5a3a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/two_handed_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_arga.bmp b/crawl-ref/source/rltiles/item/weapon/urand_arga.bmp
new file mode 100644
index 0000000000..7fa2c86bdf
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_arga.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_bloodbane.bmp b/crawl-ref/source/rltiles/item/weapon/urand_bloodbane.bmp
new file mode 100644
index 0000000000..ba16decd66
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_bloodbane.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_blowgun.bmp b/crawl-ref/source/rltiles/item/weapon/urand_blowgun.bmp
new file mode 100644
index 0000000000..6fb2915c89
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_blowgun.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_brilliance.bmp b/crawl-ref/source/rltiles/item/weapon/urand_brilliance.bmp
new file mode 100644
index 0000000000..953f436ded
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_brilliance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_chilly_death.bmp b/crawl-ref/source/rltiles/item/weapon/urand_chilly_death.bmp
new file mode 100644
index 0000000000..eb529e68e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_chilly_death.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_doom_knight.bmp b/crawl-ref/source/rltiles/item/weapon/urand_doom_knight.bmp
new file mode 100644
index 0000000000..8f366d6f4b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_doom_knight.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_elemental.bmp b/crawl-ref/source/rltiles/item/weapon/urand_elemental.bmp
new file mode 100644
index 0000000000..0a5f28424b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_elemental.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_eos.bmp b/crawl-ref/source/rltiles/item/weapon/urand_eos.bmp
new file mode 100644
index 0000000000..ecc7342524
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_eos.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_erchidel.bmp b/crawl-ref/source/rltiles/item/weapon/urand_erchidel.bmp
new file mode 100644
index 0000000000..c7db4ce68b
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_erchidel.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_fiery_devil.bmp b/crawl-ref/source/rltiles/item/weapon/urand_fiery_devil.bmp
new file mode 100644
index 0000000000..f479f2bd4f
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_fiery_devil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_finisher.bmp b/crawl-ref/source/rltiles/item/weapon/urand_finisher.bmp
new file mode 100644
index 0000000000..3b858fe26d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_finisher.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_fkaming_death.bmp b/crawl-ref/source/rltiles/item/weapon/urand_fkaming_death.bmp
new file mode 100644
index 0000000000..87d7330e83
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_fkaming_death.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_guard.bmp b/crawl-ref/source/rltiles/item/weapon/urand_guard.bmp
new file mode 100644
index 0000000000..a346e99a0c
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_guard.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_jihad.bmp b/crawl-ref/source/rltiles/item/weapon/urand_jihad.bmp
new file mode 100644
index 0000000000..d5f60b2976
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_jihad.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_krishna.bmp b/crawl-ref/source/rltiles/item/weapon/urand_krishna.bmp
new file mode 100644
index 0000000000..d67e39f0f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_krishna.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_leech.bmp b/crawl-ref/source/rltiles/item/weapon/urand_leech.bmp
new file mode 100644
index 0000000000..af2b90ec13
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_leech.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_morg.bmp b/crawl-ref/source/rltiles/item/weapon/urand_morg.bmp
new file mode 100644
index 0000000000..b0552261d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_morg.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_octopus_king.bmp b/crawl-ref/source/rltiles/item/weapon/urand_octopus_king.bmp
new file mode 100644
index 0000000000..e539d81c24
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_octopus_king.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_plutonium.bmp b/crawl-ref/source/rltiles/item/weapon/urand_plutonium.bmp
new file mode 100644
index 0000000000..9ea1ead174
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_plutonium.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_punk.bmp b/crawl-ref/source/rltiles/item/weapon/urand_punk.bmp
new file mode 100644
index 0000000000..2fa0d4457d
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_punk.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_skullcrusher.bmp b/crawl-ref/source/rltiles/item/weapon/urand_skullcrusher.bmp
new file mode 100644
index 0000000000..a6fdb3d5d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_skullcrusher.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_sniper.bmp b/crawl-ref/source/rltiles/item/weapon/urand_sniper.bmp
new file mode 100644
index 0000000000..5f20078ab1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_sniper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_undeadhunter.bmp b/crawl-ref/source/rltiles/item/weapon/urand_undeadhunter.bmp
new file mode 100644
index 0000000000..e080e2d3e7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_undeadhunter.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/urand_voo_doo.bmp b/crawl-ref/source/rltiles/item/weapon/urand_voo_doo.bmp
new file mode 100644
index 0000000000..5371400113
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/urand_voo_doo.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/voulge.bmp b/crawl-ref/source/rltiles/item/weapon/voulge.bmp
new file mode 100644
index 0000000000..cbfcc4b744
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/voulge.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/war_axe.bmp b/crawl-ref/source/rltiles/item/weapon/war_axe.bmp
new file mode 100644
index 0000000000..eabe99fda7
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/war_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/war_hammer.bmp b/crawl-ref/source/rltiles/item/weapon/war_hammer.bmp
new file mode 100644
index 0000000000..1617483781
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/war_hammer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/worm_tooth.bmp b/crawl-ref/source/rltiles/item/weapon/worm_tooth.bmp
new file mode 100644
index 0000000000..4a954b5ebc
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/worm_tooth.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/ya.bmp b/crawl-ref/source/rltiles/item/weapon/ya.bmp
new file mode 100644
index 0000000000..6e907190e4
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/ya.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/yumi.bmp b/crawl-ref/source/rltiles/item/weapon/yumi.bmp
new file mode 100644
index 0000000000..8703557dc1
--- /dev/null
+++ b/crawl-ref/source/rltiles/item/weapon/yumi.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/license.txt b/crawl-ref/source/rltiles/license.txt
new file mode 100644
index 0000000000..7b9526fccf
--- /dev/null
+++ b/crawl-ref/source/rltiles/license.txt
@@ -0,0 +1,17 @@
+Part of the graphic tiles used in this program are from the public
+domain roguelike tileset "RLTiles".
+
+Some of the tiles have been modified by Enne Walker (enne.walker@gmail.com)
+
+You can find the original tileset at:
+http://rltiles.sf.net
+
+
+
+Part of the source code used in this program is from the public
+domain program "RLTiles".
+
+Some of the source code has been modified by Enne Walker (enne.walker@gmail.com)
+
+You can find the original source code at:
+http://sourceforge.net/projects/rltiles/
diff --git a/crawl-ref/source/rltiles/makefile.mgw b/crawl-ref/source/rltiles/makefile.mgw
new file mode 100644
index 0000000000..9d1c86be79
--- /dev/null
+++ b/crawl-ref/source/rltiles/makefile.mgw
@@ -0,0 +1,121 @@
+##########################################################################
+# makefile.mgw
+#
+# This is a makefile to build all the rltiles files needed for Dungeon
+# Crawl - Stone Soup.
+#
+# - Enne (enne.walker@gmail.com)
+#
+
+SRC = tool
+B2PSRC = bmp2png
+B2P = bmp2png.exe
+B2PTOOL = $(B2PSRC)\$(B2P)
+
+CC = mingw32-gcc
+DELETE = del
+MAKE = mingw32-make.exe
+
+OBJECTS = \
+$(SRC)\bm.o \
+$(SRC)\dcpl.o \
+$(SRC)\dctile.o
+
+TOOLS = \
+dcpl.exe \
+dctile.exe
+
+EXTRATOOLS = \
+dcreverse.exe
+
+HEADERS = \
+tiledef.h \
+tiledef-p.h \
+tilep-cmt.h \
+tiledef-w2d.h \
+tilecount-w2d.h \
+map.htm
+
+ALLTOOLS = $(TOOLS) $(EXTRATOOLS)
+
+TILEBMP = \
+tile.bmp \
+player.bmp \
+wall2d.bmp
+
+TILEPNG = $(TILEBMP:.bmp=.png)
+
+##########################################################################
+# Top-level
+#
+
+all: tools tiles
+
+tools: $(TOOLS)
+
+tiles: $(TILEBMP)
+
+##########################################################################
+# Tools
+#
+# Note: dcreverse is not built by default. It does the opposite
+# of dctile. It takes a bitmap with lots of tiles, specifies regions,
+# and cuts them out into smaller pieces. It's useful only for when somebody
+# updates the tiles directly and then doesn't give you the source files.
+#
+
+depend: $(OBJECTS:.o=.c)
+ @for i in $^; do \
+ $(CC) -c $$i
+
+dcpl.exe: $(SRC)\dcpl.o $(SRC)\bm.o
+ $(CC) $(SRC)\dcpl.o $(SRC)\bm.o -o dcpl
+
+dctile.exe: $(SRC)\dctile.o $(SRC)\bm.o
+ $(CC) $(SRC)\dctile.o $(SRC)\bm.o -o dctile
+
+dcreverse.exe: $(SRC)\dcreverse.o $(SRC)\bm.o
+ $(CC) $(SRC)\dcreverse.o $(SRC)\bm.o -o dcreverse
+
+##########################################################################
+# Bitmaps
+#
+
+# NOTE: the dependencies here aren't fantastic. In an ideal world,
+# there would be another tool elf that could read an input text file
+# and then output the .bmp and .txt dependencies for it. It's kind
+# of a low priority though, as tiles will be rebuilt infrequently.
+
+tile.bmp: dc-2d.txt dctile.exe
+ ./dctile dc-2d.txt
+
+player.bmp: dc-pl.txt dcpl.exe
+ ./dcpl dc-pl.txt
+
+wall2d.bmp: dc-wall2d.txt dctile.exe
+ ./dctile dc-wall2d.txt
+
+##########################################################################
+# PNG Conversion
+#
+
+$(B2PTOOL):
+ pushd $(B2PSRC) && $(MAKE) -f makefile.mgw $(B2P) && popd
+
+%.png: %.bmp $(B2PTOOL)
+ $(DELETE) $@
+ $(B2PTOOL) -Q $<
+
+##########################################################################
+# Cleaning...
+#
+
+clean:
+ $(DELETE) $(OBJECTS)
+ $(DELETE) $(ALLTOOLS)
+#pushd $(B2PSRC) && $(MAKE) -f makefile.mgw clean && popd
+
+distclean: clean
+ $(DELETE) $(TILEBMP)
+ $(DELETE) $(TILEPNG)
+ $(DELETE) $(HEADERS)
diff --git a/crawl-ref/source/rltiles/makefile.unix b/crawl-ref/source/rltiles/makefile.unix
new file mode 100644
index 0000000000..663936f90a
--- /dev/null
+++ b/crawl-ref/source/rltiles/makefile.unix
@@ -0,0 +1,121 @@
+##########################################################################
+# makefile.unix
+#
+# This is a makefile to build all the rltiles files needed for Dungeon
+# Crawl - Stone Soup.
+#
+# - Enne (enne.walker@gmail.com)
+#
+
+SRC = tool/
+B2PSRC = bmp2png/
+B2P = bmp2png
+B2PTOOL = $(B2PSRC)$(B2P)
+
+CC = cc
+DELETE = rm -f
+
+OBJECTS = \
+$(SRC)bm.o \
+$(SRC)dcpl.o \
+$(SRC)dctile.o
+
+TOOLS = \
+dcpl \
+dctile
+
+EXTRATOOLS = \
+dcreverse
+
+HEADERS = \
+tiledef.h \
+tiledef-p.h \
+tilep-cmt.h \
+tiledef-w2d.h \
+tilecount-w2d.h \
+map.htm
+
+ALLTOOLS = $(TOOLS) $(EXTRATOOLS)
+
+TILEBMP = \
+tile.bmp \
+player.bmp \
+wall2d.bmp
+
+TILEPNG = $(TILEBMP:.bmp=.png)
+
+##########################################################################
+# Top-level
+#
+
+all: tools tiles
+
+tools: $(TOOLS)
+
+tiles: $(TILEBMP) $(TILEPNG)
+
+##########################################################################
+# Tools
+#
+# Note: dcreverse is not built by default. It does the opposite
+# of dctile. It takes a bitmap with lots of tiles, specifies regions,
+# and cuts them out into smaller pieces. It's useful only for when somebody
+# updates the tiles directly and then doesn't give you the source files.
+# Not that I'm bitter.
+#
+
+depend: $(OBJECTS:.o=.c)
+ @for i in $^; do \
+ $(CC) -c $$i
+
+dcpl: $(SRC)dcpl.o $(SRC)bm.o
+ $(CC) $(SRC)dcpl.o $(SRC)bm.o -o dcpl
+
+dctile: $(SRC)dctile.o $(SRC)bm.o
+ $(CC) $(SRC)dctile.o $(SRC)bm.o -o dctile
+
+dcreverse: $(SRC)dcreverse.o $(SRC)bm.o
+ $(CC) $(SRC)dcreverse.o $(SRC)bm.o -o dcreverse
+
+##########################################################################
+# Bitmaps
+#
+
+# NOTE: the dependencies here aren't fantastic. In an ideal world,
+# there would be another tool elf that could read an input text file
+# and then output the .bmp and .txt dependencies for it. It's kind
+# of a low priority though, as tiles will be rebuilt infrequently.
+
+tile.bmp: dc-2d.txt dctile
+ ./dctile dc-2d.txt
+
+player.bmp: dc-pl.txt dcpl
+ ./dcpl dc-pl.txt
+
+wall2d.bmp: dc-wall2d.txt dctile
+ ./dctile dc-wall2d.txt
+
+##########################################################################
+# PNG Conversion
+#
+
+$(B2PTOOL):
+ cd $(B2PSRC) && make -f makefile.lin $(B2P) && cd ..
+
+%.png: %.bmp $(B2PTOOL)
+ $(DELETE) $@
+ $(B2PTOOL) -Q $<
+
+##########################################################################
+# Cleaning...
+#
+
+clean:
+ $(DELETE) $(OBJECTS)
+ $(DELETE) $(ALLTOOLS)
+ cd $(B2PSRC) && make -f makefile.lin clean && cd ..
+
+distclean: clean
+ $(DELETE) $(TILEBMP)
+ $(DELETE) $(TILEPNG)
+ $(DELETE) $(HEADERS)
diff --git a/crawl-ref/source/rltiles/player/arm/claws.bmp b/crawl-ref/source/rltiles/player/arm/claws.bmp
new file mode 100644
index 0000000000..dff3154de3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/claws.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/gauntlet_blue.bmp b/crawl-ref/source/rltiles/player/arm/gauntlet_blue.bmp
new file mode 100644
index 0000000000..f428ae5194
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/gauntlet_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_black.bmp b/crawl-ref/source/rltiles/player/arm/glove_black.bmp
new file mode 100644
index 0000000000..33e391b18d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_black2.bmp b/crawl-ref/source/rltiles/player/arm/glove_black2.bmp
new file mode 100644
index 0000000000..5fc8674390
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_black2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_blue.bmp b/crawl-ref/source/rltiles/player/arm/glove_blue.bmp
new file mode 100644
index 0000000000..a811d94c0a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_brown.bmp b/crawl-ref/source/rltiles/player/arm/glove_brown.bmp
new file mode 100644
index 0000000000..9c3532c1cb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_chunli.bmp b/crawl-ref/source/rltiles/player/arm/glove_chunli.bmp
new file mode 100644
index 0000000000..29c398bd66
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_chunli.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_gold.bmp b/crawl-ref/source/rltiles/player/arm/glove_gold.bmp
new file mode 100644
index 0000000000..570cb7819a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_gray.bmp b/crawl-ref/source/rltiles/player/arm/glove_gray.bmp
new file mode 100644
index 0000000000..126065e21e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_grayfist.bmp b/crawl-ref/source/rltiles/player/arm/glove_grayfist.bmp
new file mode 100644
index 0000000000..455a90bc0f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_grayfist.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_orange.bmp b/crawl-ref/source/rltiles/player/arm/glove_orange.bmp
new file mode 100644
index 0000000000..00e1a7e08a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_purple.bmp b/crawl-ref/source/rltiles/player/arm/glove_purple.bmp
new file mode 100644
index 0000000000..e03906b31e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_red.bmp b/crawl-ref/source/rltiles/player/arm/glove_red.bmp
new file mode 100644
index 0000000000..8e1c1fec60
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_short_blue.bmp b/crawl-ref/source/rltiles/player/arm/glove_short_blue.bmp
new file mode 100644
index 0000000000..e9899c36f6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_short_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_short_gray.bmp b/crawl-ref/source/rltiles/player/arm/glove_short_gray.bmp
new file mode 100644
index 0000000000..b52b495a84
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_short_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_short_green.bmp b/crawl-ref/source/rltiles/player/arm/glove_short_green.bmp
new file mode 100644
index 0000000000..a5a9355484
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_short_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_short_red.bmp b/crawl-ref/source/rltiles/player/arm/glove_short_red.bmp
new file mode 100644
index 0000000000..49344827c7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_short_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_short_white.bmp b/crawl-ref/source/rltiles/player/arm/glove_short_white.bmp
new file mode 100644
index 0000000000..41453a7cd1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_short_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_short_yellow.bmp b/crawl-ref/source/rltiles/player/arm/glove_short_yellow.bmp
new file mode 100644
index 0000000000..bd0171952e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_short_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_white.bmp b/crawl-ref/source/rltiles/player/arm/glove_white.bmp
new file mode 100644
index 0000000000..83ea0f5380
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/arm/glove_wrist_purple.bmp b/crawl-ref/source/rltiles/player/arm/glove_wrist_purple.bmp
new file mode 100644
index 0000000000..904d54a395
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/arm/glove_wrist_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/barding/centaur_barding.bmp b/crawl-ref/source/rltiles/player/barding/centaur_barding.bmp
new file mode 100644
index 0000000000..f927c126dc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/barding/centaur_barding.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/barding/naga_barding.bmp b/crawl-ref/source/rltiles/player/barding/naga_barding.bmp
new file mode 100644
index 0000000000..91329474c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/barding/naga_barding.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/centaur_f.bmp b/crawl-ref/source/rltiles/player/base/centaur_f.bmp
new file mode 100644
index 0000000000..b00fb4d885
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/centaur_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/centaur_m.bmp b/crawl-ref/source/rltiles/player/base/centaur_m.bmp
new file mode 100644
index 0000000000..619f558aa2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/centaur_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/deep_elf_f.bmp b/crawl-ref/source/rltiles/player/base/deep_elf_f.bmp
new file mode 100644
index 0000000000..515a6a6281
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/deep_elf_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/deep_elf_m.bmp b/crawl-ref/source/rltiles/player/base/deep_elf_m.bmp
new file mode 100644
index 0000000000..c2155f4a6f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/deep_elf_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/demigod_f.bmp b/crawl-ref/source/rltiles/player/base/demigod_f.bmp
new file mode 100644
index 0000000000..db6902bd24
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/demigod_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/demigod_m.bmp b/crawl-ref/source/rltiles/player/base/demigod_m.bmp
new file mode 100644
index 0000000000..5860f49ea6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/demigod_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/demonspawn_f.bmp b/crawl-ref/source/rltiles/player/base/demonspawn_f.bmp
new file mode 100644
index 0000000000..2339e334d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/demonspawn_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/demonspawn_m.bmp b/crawl-ref/source/rltiles/player/base/demonspawn_m.bmp
new file mode 100644
index 0000000000..dbf3e6a885
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/demonspawn_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_black_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_black_f.bmp
new file mode 100644
index 0000000000..6e34a6c228
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_black_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_black_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_black_m.bmp
new file mode 100644
index 0000000000..87079905bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_black_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_f.bmp
new file mode 100644
index 0000000000..f296ddaf49
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_gold_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_gold_f.bmp
new file mode 100644
index 0000000000..bcb2c0aee5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_gold_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_gold_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_gold_m.bmp
new file mode 100644
index 0000000000..11d4555da9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_gold_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_gray_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_gray_f.bmp
new file mode 100644
index 0000000000..21ebbb964c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_gray_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_gray_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_gray_m.bmp
new file mode 100644
index 0000000000..0421f965b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_gray_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_green_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_green_f.bmp
new file mode 100644
index 0000000000..eea7045e1a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_green_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_green_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_green_m.bmp
new file mode 100644
index 0000000000..ec51e417f0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_green_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_m.bmp
new file mode 100644
index 0000000000..bb30a48cfd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_mottled_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_mottled_f.bmp
new file mode 100644
index 0000000000..fbb063d0cb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_mottled_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_mottled_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_mottled_m.bmp
new file mode 100644
index 0000000000..443c2cc077
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_mottled_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_pale_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_pale_f.bmp
new file mode 100644
index 0000000000..84e6b0be91
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_pale_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_pale_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_pale_m.bmp
new file mode 100644
index 0000000000..988161ad98
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_pale_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_purple_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_purple_f.bmp
new file mode 100644
index 0000000000..80074f1bbd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_purple_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_purple_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_purple_m.bmp
new file mode 100644
index 0000000000..6a7b40fc85
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_purple_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_red_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_red_f.bmp
new file mode 100644
index 0000000000..84f9ad2f85
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_red_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_red_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_red_m.bmp
new file mode 100644
index 0000000000..fed9f61b47
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_red_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_white_f.bmp b/crawl-ref/source/rltiles/player/base/draconian_white_f.bmp
new file mode 100644
index 0000000000..65950c2c48
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_white_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/draconian_white_m.bmp b/crawl-ref/source/rltiles/player/base/draconian_white_m.bmp
new file mode 100644
index 0000000000..1ccda48abf
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/draconian_white_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/dwarf_f.bmp b/crawl-ref/source/rltiles/player/base/dwarf_f.bmp
new file mode 100644
index 0000000000..3f93bd01d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/dwarf_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/dwarf_m.bmp b/crawl-ref/source/rltiles/player/base/dwarf_m.bmp
new file mode 100644
index 0000000000..7c45a0030a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/dwarf_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/elf_f.bmp b/crawl-ref/source/rltiles/player/base/elf_f.bmp
new file mode 100644
index 0000000000..484a859b54
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/elf_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/elf_m.bmp b/crawl-ref/source/rltiles/player/base/elf_m.bmp
new file mode 100644
index 0000000000..0a36da0956
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/elf_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/ghoul_f.bmp b/crawl-ref/source/rltiles/player/base/ghoul_f.bmp
new file mode 100644
index 0000000000..3200a62fea
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/ghoul_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/ghoul_m.bmp b/crawl-ref/source/rltiles/player/base/ghoul_m.bmp
new file mode 100644
index 0000000000..04934f8376
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/ghoul_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/gnome_f.bmp b/crawl-ref/source/rltiles/player/base/gnome_f.bmp
new file mode 100644
index 0000000000..31893676d6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/gnome_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/gnome_m.bmp b/crawl-ref/source/rltiles/player/base/gnome_m.bmp
new file mode 100644
index 0000000000..7d3f500432
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/gnome_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/halfling_f.bmp b/crawl-ref/source/rltiles/player/base/halfling_f.bmp
new file mode 100644
index 0000000000..b6de48671c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/halfling_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/halfling_m.bmp b/crawl-ref/source/rltiles/player/base/halfling_m.bmp
new file mode 100644
index 0000000000..23d6d99cde
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/halfling_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/human_f.bmp b/crawl-ref/source/rltiles/player/base/human_f.bmp
new file mode 100644
index 0000000000..db6902bd24
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/human_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/human_m.bmp b/crawl-ref/source/rltiles/player/base/human_m.bmp
new file mode 100644
index 0000000000..b15cacfd2e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/human_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/kenku_f.bmp b/crawl-ref/source/rltiles/player/base/kenku_f.bmp
new file mode 100644
index 0000000000..d545e25d72
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/kenku_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/kenku_m.bmp b/crawl-ref/source/rltiles/player/base/kenku_m.bmp
new file mode 100644
index 0000000000..6c1821f07d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/kenku_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/kobold_f.bmp b/crawl-ref/source/rltiles/player/base/kobold_f.bmp
new file mode 100644
index 0000000000..669667c809
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/kobold_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/kobold_m.bmp b/crawl-ref/source/rltiles/player/base/kobold_m.bmp
new file mode 100644
index 0000000000..540af80301
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/kobold_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/merfolk_f.bmp b/crawl-ref/source/rltiles/player/base/merfolk_f.bmp
new file mode 100644
index 0000000000..365375dfd3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/merfolk_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/merfolk_fs.bmp b/crawl-ref/source/rltiles/player/base/merfolk_fs.bmp
new file mode 100644
index 0000000000..ceb382faa9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/merfolk_fs.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/merfolk_m.bmp b/crawl-ref/source/rltiles/player/base/merfolk_m.bmp
new file mode 100644
index 0000000000..ddf196aeef
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/merfolk_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/merfolk_ms.bmp b/crawl-ref/source/rltiles/player/base/merfolk_ms.bmp
new file mode 100644
index 0000000000..ddf196aeef
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/merfolk_ms.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/merfolk_water_f.bmp b/crawl-ref/source/rltiles/player/base/merfolk_water_f.bmp
new file mode 100644
index 0000000000..5785b9ddf8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/merfolk_water_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/merfolk_water_m.bmp b/crawl-ref/source/rltiles/player/base/merfolk_water_m.bmp
new file mode 100644
index 0000000000..f74e058463
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/merfolk_water_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/minotaur_f.bmp b/crawl-ref/source/rltiles/player/base/minotaur_f.bmp
new file mode 100644
index 0000000000..99e75e02c0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/minotaur_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/minotaur_m.bmp b/crawl-ref/source/rltiles/player/base/minotaur_m.bmp
new file mode 100644
index 0000000000..953d608bfe
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/minotaur_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/mummy_f.bmp b/crawl-ref/source/rltiles/player/base/mummy_f.bmp
new file mode 100644
index 0000000000..6f05878d0f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/mummy_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/mummy_m.bmp b/crawl-ref/source/rltiles/player/base/mummy_m.bmp
new file mode 100644
index 0000000000..9ea0c813da
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/mummy_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/naga_f.bmp b/crawl-ref/source/rltiles/player/base/naga_f.bmp
new file mode 100644
index 0000000000..c0c7636087
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/naga_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/naga_m.bmp b/crawl-ref/source/rltiles/player/base/naga_m.bmp
new file mode 100644
index 0000000000..13ad011b4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/naga_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/ogre_f.bmp b/crawl-ref/source/rltiles/player/base/ogre_f.bmp
new file mode 100644
index 0000000000..7aef567a08
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/ogre_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/ogre_m.bmp b/crawl-ref/source/rltiles/player/base/ogre_m.bmp
new file mode 100644
index 0000000000..3a8f97b2a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/ogre_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/ogre_mage_f.bmp b/crawl-ref/source/rltiles/player/base/ogre_mage_f.bmp
new file mode 100644
index 0000000000..7aef567a08
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/ogre_mage_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/ogre_mage_m.bmp b/crawl-ref/source/rltiles/player/base/ogre_mage_m.bmp
new file mode 100644
index 0000000000..3a8f97b2a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/ogre_mage_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/orc_f.bmp b/crawl-ref/source/rltiles/player/base/orc_f.bmp
new file mode 100644
index 0000000000..335d9327b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/orc_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/orc_m.bmp b/crawl-ref/source/rltiles/player/base/orc_m.bmp
new file mode 100644
index 0000000000..2362262a34
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/orc_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/shadow.bmp b/crawl-ref/source/rltiles/player/base/shadow.bmp
new file mode 100644
index 0000000000..15fe3dd934
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/shadow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/spriggan_f.bmp b/crawl-ref/source/rltiles/player/base/spriggan_f.bmp
new file mode 100644
index 0000000000..70548e15c0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/spriggan_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/spriggan_m.bmp b/crawl-ref/source/rltiles/player/base/spriggan_m.bmp
new file mode 100644
index 0000000000..4ecae18464
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/spriggan_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/troll_f.bmp b/crawl-ref/source/rltiles/player/base/troll_f.bmp
new file mode 100644
index 0000000000..2cef95f0f0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/troll_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/troll_m.bmp b/crawl-ref/source/rltiles/player/base/troll_m.bmp
new file mode 100644
index 0000000000..c3bc7f3a63
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/troll_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/vampire_f.bmp b/crawl-ref/source/rltiles/player/base/vampire_f.bmp
new file mode 100644
index 0000000000..db6902bd24
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/vampire_f.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/base/vampire_m.bmp b/crawl-ref/source/rltiles/player/base/vampire_m.bmp
new file mode 100644
index 0000000000..5860f49ea6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/base/vampire_m.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/long_black.bmp b/crawl-ref/source/rltiles/player/beard/long_black.bmp
new file mode 100644
index 0000000000..3181a958ef
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/long_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/long_red.bmp b/crawl-ref/source/rltiles/player/beard/long_red.bmp
new file mode 100644
index 0000000000..e266f3dc42
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/long_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/long_white.bmp b/crawl-ref/source/rltiles/player/beard/long_white.bmp
new file mode 100644
index 0000000000..2d41a959cb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/long_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/long_yellow.bmp b/crawl-ref/source/rltiles/player/beard/long_yellow.bmp
new file mode 100644
index 0000000000..72560ce604
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/long_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/pj.bmp b/crawl-ref/source/rltiles/player/beard/pj.bmp
new file mode 100644
index 0000000000..540f98e4a6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/pj.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/short_black.bmp b/crawl-ref/source/rltiles/player/beard/short_black.bmp
new file mode 100644
index 0000000000..7050a305d5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/short_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/short_red.bmp b/crawl-ref/source/rltiles/player/beard/short_red.bmp
new file mode 100644
index 0000000000..1c42e27981
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/short_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/short_white.bmp b/crawl-ref/source/rltiles/player/beard/short_white.bmp
new file mode 100644
index 0000000000..6b0b9de8b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/short_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/beard/short_yellow.bmp b/crawl-ref/source/rltiles/player/beard/short_yellow.bmp
new file mode 100644
index 0000000000..ba063bc264
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/beard/short_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/animal_skin.bmp b/crawl-ref/source/rltiles/player/body/animal_skin.bmp
new file mode 100644
index 0000000000..32b3d542f1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/animal_skin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/aragorn.bmp b/crawl-ref/source/rltiles/player/body/aragorn.bmp
new file mode 100644
index 0000000000..115d9be43c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/aragorn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/aragorn2.bmp b/crawl-ref/source/rltiles/player/body/aragorn2.bmp
new file mode 100644
index 0000000000..d1f643e4eb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/aragorn2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/armor_blue_gold.bmp b/crawl-ref/source/rltiles/player/body/armor_blue_gold.bmp
new file mode 100644
index 0000000000..9233abf560
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/armor_blue_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/armor_mummy.bmp b/crawl-ref/source/rltiles/player/body/armor_mummy.bmp
new file mode 100644
index 0000000000..3f7c7a5db4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/armor_mummy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/arwen.bmp b/crawl-ref/source/rltiles/player/body/arwen.bmp
new file mode 100644
index 0000000000..2555b2f3c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/arwen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/banded.bmp b/crawl-ref/source/rltiles/player/body/banded.bmp
new file mode 100644
index 0000000000..821be25c15
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/banded.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/banded2.bmp b/crawl-ref/source/rltiles/player/body/banded2.bmp
new file mode 100644
index 0000000000..1479980434
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/banded2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/belt1.bmp b/crawl-ref/source/rltiles/player/body/belt1.bmp
new file mode 100644
index 0000000000..6351547433
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/belt1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/belt2.bmp b/crawl-ref/source/rltiles/player/body/belt2.bmp
new file mode 100644
index 0000000000..e0f3661c5e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/belt2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/bikini_red.bmp b/crawl-ref/source/rltiles/player/body/bikini_red.bmp
new file mode 100644
index 0000000000..84e9ab4be4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/bikini_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/bloody.bmp b/crawl-ref/source/rltiles/player/body/bloody.bmp
new file mode 100644
index 0000000000..b78d575ee1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/bloody.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/boromir.bmp b/crawl-ref/source/rltiles/player/body/boromir.bmp
new file mode 100644
index 0000000000..3101dec864
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/boromir.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/bplate_green.bmp b/crawl-ref/source/rltiles/player/body/bplate_green.bmp
new file mode 100644
index 0000000000..04e8a5d82b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/bplate_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/bplate_metal1.bmp b/crawl-ref/source/rltiles/player/body/bplate_metal1.bmp
new file mode 100644
index 0000000000..27077eb8db
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/bplate_metal1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/breast_black.bmp b/crawl-ref/source/rltiles/player/body/breast_black.bmp
new file mode 100644
index 0000000000..2a6be27fbb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/breast_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/chainmail.bmp b/crawl-ref/source/rltiles/player/body/chainmail.bmp
new file mode 100644
index 0000000000..6edf65962c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/chainmail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/chainmail2.bmp b/crawl-ref/source/rltiles/player/body/chainmail2.bmp
new file mode 100644
index 0000000000..afde530e7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/chainmail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/chainmail3.bmp b/crawl-ref/source/rltiles/player/body/chainmail3.bmp
new file mode 100644
index 0000000000..dbb5f2d9c8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/chainmail3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/china_red.bmp b/crawl-ref/source/rltiles/player/body/china_red.bmp
new file mode 100644
index 0000000000..316a64e539
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/china_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/china_red2.bmp b/crawl-ref/source/rltiles/player/body/china_red2.bmp
new file mode 100644
index 0000000000..05f513a947
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/china_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/chunli.bmp b/crawl-ref/source/rltiles/player/body/chunli.bmp
new file mode 100644
index 0000000000..199ab0699d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/chunli.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/coat_black.bmp b/crawl-ref/source/rltiles/player/body/coat_black.bmp
new file mode 100644
index 0000000000..804e71d681
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/coat_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/coat_red.bmp b/crawl-ref/source/rltiles/player/body/coat_red.bmp
new file mode 100644
index 0000000000..231a068759
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/coat_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/crystal_plate.bmp b/crawl-ref/source/rltiles/player/body/crystal_plate.bmp
new file mode 100644
index 0000000000..2d0c43bfbc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/crystal_plate.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonarm_blue.bmp b/crawl-ref/source/rltiles/player/body/dragonarm_blue.bmp
new file mode 100644
index 0000000000..a4619586bd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonarm_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonarm_brown.bmp b/crawl-ref/source/rltiles/player/body/dragonarm_brown.bmp
new file mode 100644
index 0000000000..12d204c0e8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonarm_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonarm_cyan.bmp b/crawl-ref/source/rltiles/player/body/dragonarm_cyan.bmp
new file mode 100644
index 0000000000..2188a9c6ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonarm_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonarm_gold.bmp b/crawl-ref/source/rltiles/player/body/dragonarm_gold.bmp
new file mode 100644
index 0000000000..6356a51cd5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonarm_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonarm_green.bmp b/crawl-ref/source/rltiles/player/body/dragonarm_green.bmp
new file mode 100644
index 0000000000..8b52ebc271
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonarm_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonarm_magenta.bmp b/crawl-ref/source/rltiles/player/body/dragonarm_magenta.bmp
new file mode 100644
index 0000000000..a9031cbe02
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonarm_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonarm_white.bmp b/crawl-ref/source/rltiles/player/body/dragonarm_white.bmp
new file mode 100644
index 0000000000..d708a393e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonarm_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonsc_blue.bmp b/crawl-ref/source/rltiles/player/body/dragonsc_blue.bmp
new file mode 100644
index 0000000000..fa89fdd643
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonsc_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonsc_brown.bmp b/crawl-ref/source/rltiles/player/body/dragonsc_brown.bmp
new file mode 100644
index 0000000000..5f0d6a47c9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonsc_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonsc_cyan.bmp b/crawl-ref/source/rltiles/player/body/dragonsc_cyan.bmp
new file mode 100644
index 0000000000..7fddaf4c51
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonsc_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonsc_gold.bmp b/crawl-ref/source/rltiles/player/body/dragonsc_gold.bmp
new file mode 100644
index 0000000000..e0f9fa37b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonsc_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonsc_green.bmp b/crawl-ref/source/rltiles/player/body/dragonsc_green.bmp
new file mode 100644
index 0000000000..6cd567b762
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonsc_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonsc_magenta.bmp b/crawl-ref/source/rltiles/player/body/dragonsc_magenta.bmp
new file mode 100644
index 0000000000..bc1584ccd7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonsc_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dragonsc_white.bmp b/crawl-ref/source/rltiles/player/body/dragonsc_white.bmp
new file mode 100644
index 0000000000..ae1da92774
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dragonsc_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dress_green.bmp b/crawl-ref/source/rltiles/player/body/dress_green.bmp
new file mode 100644
index 0000000000..57bcf4a1b5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dress_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/dress_white.bmp b/crawl-ref/source/rltiles/player/body/dress_white.bmp
new file mode 100644
index 0000000000..af98fae165
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/dress_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/edison.bmp b/crawl-ref/source/rltiles/player/body/edison.bmp
new file mode 100644
index 0000000000..f17a4366a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/edison.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/frodo.bmp b/crawl-ref/source/rltiles/player/body/frodo.bmp
new file mode 100644
index 0000000000..09a5e825b8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/frodo.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/gandalf_g.bmp b/crawl-ref/source/rltiles/player/body/gandalf_g.bmp
new file mode 100644
index 0000000000..a37df4c86b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/gandalf_g.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/gil-galad.bmp b/crawl-ref/source/rltiles/player/body/gil-galad.bmp
new file mode 100644
index 0000000000..422f5ad1ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/gil-galad.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/gimli.bmp b/crawl-ref/source/rltiles/player/body/gimli.bmp
new file mode 100644
index 0000000000..efdf5b573c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/gimli.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/green_chain.bmp b/crawl-ref/source/rltiles/player/body/green_chain.bmp
new file mode 100644
index 0000000000..10d56a8a44
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/green_chain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/green_susp.bmp b/crawl-ref/source/rltiles/player/body/green_susp.bmp
new file mode 100644
index 0000000000..8f990b1066
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/green_susp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/half_plate.bmp b/crawl-ref/source/rltiles/player/body/half_plate.bmp
new file mode 100644
index 0000000000..ce642be4f1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/half_plate.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/half_plate2.bmp b/crawl-ref/source/rltiles/player/body/half_plate2.bmp
new file mode 100644
index 0000000000..899339d099
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/half_plate2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/half_plate3.bmp b/crawl-ref/source/rltiles/player/body/half_plate3.bmp
new file mode 100644
index 0000000000..8f89ec654d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/half_plate3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/isildur.bmp b/crawl-ref/source/rltiles/player/body/isildur.bmp
new file mode 100644
index 0000000000..e7b7986721
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/isildur.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/jacket2.bmp b/crawl-ref/source/rltiles/player/body/jacket2.bmp
new file mode 100644
index 0000000000..52658fe335
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/jacket2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/jacket3.bmp b/crawl-ref/source/rltiles/player/body/jacket3.bmp
new file mode 100644
index 0000000000..01354dac54
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/jacket3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/jacket_stud.bmp b/crawl-ref/source/rltiles/player/body/jacket_stud.bmp
new file mode 100644
index 0000000000..4048c9e213
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/jacket_stud.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/jessica.bmp b/crawl-ref/source/rltiles/player/body/jessica.bmp
new file mode 100644
index 0000000000..0c0ba059fc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/jessica.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/karate.bmp b/crawl-ref/source/rltiles/player/body/karate.bmp
new file mode 100644
index 0000000000..b688117237
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/karate.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/karate2.bmp b/crawl-ref/source/rltiles/player/body/karate2.bmp
new file mode 100644
index 0000000000..bc5de8249e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/karate2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/lears_chain_mail.bmp b/crawl-ref/source/rltiles/player/body/lears_chain_mail.bmp
new file mode 100644
index 0000000000..009b7c7e3e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/lears_chain_mail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather2.bmp b/crawl-ref/source/rltiles/player/body/leather2.bmp
new file mode 100644
index 0000000000..bc19c22e7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_armour.bmp b/crawl-ref/source/rltiles/player/body/leather_armour.bmp
new file mode 100644
index 0000000000..fc6c1ec09b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_armour.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_armour2.bmp b/crawl-ref/source/rltiles/player/body/leather_armour2.bmp
new file mode 100644
index 0000000000..770a96031d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_armour2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_armour3.bmp b/crawl-ref/source/rltiles/player/body/leather_armour3.bmp
new file mode 100644
index 0000000000..85547277cb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_armour3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_green.bmp b/crawl-ref/source/rltiles/player/body/leather_green.bmp
new file mode 100644
index 0000000000..2c29bedb14
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_heavy.bmp b/crawl-ref/source/rltiles/player/body/leather_heavy.bmp
new file mode 100644
index 0000000000..7b598a2f7c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_heavy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_jacket.bmp b/crawl-ref/source/rltiles/player/body/leather_jacket.bmp
new file mode 100644
index 0000000000..fb5067bc82
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_jacket.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_metal.bmp b/crawl-ref/source/rltiles/player/body/leather_metal.bmp
new file mode 100644
index 0000000000..ddc5774072
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_metal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_red.bmp b/crawl-ref/source/rltiles/player/body/leather_red.bmp
new file mode 100644
index 0000000000..348899b7aa
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_short.bmp b/crawl-ref/source/rltiles/player/body/leather_short.bmp
new file mode 100644
index 0000000000..626ea1cba1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_short.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/leather_stud.bmp b/crawl-ref/source/rltiles/player/body/leather_stud.bmp
new file mode 100644
index 0000000000..105a486482
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/leather_stud.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/legolas.bmp b/crawl-ref/source/rltiles/player/body/legolas.bmp
new file mode 100644
index 0000000000..1985312924
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/legolas.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/merry.bmp b/crawl-ref/source/rltiles/player/body/merry.bmp
new file mode 100644
index 0000000000..a227a90ea2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/merry.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/mesh_black.bmp b/crawl-ref/source/rltiles/player/body/mesh_black.bmp
new file mode 100644
index 0000000000..6d0f8939b8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/mesh_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/mesh_red.bmp b/crawl-ref/source/rltiles/player/body/mesh_red.bmp
new file mode 100644
index 0000000000..18013833f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/mesh_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/metal_blue.bmp b/crawl-ref/source/rltiles/player/body/metal_blue.bmp
new file mode 100644
index 0000000000..34965e45fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/metal_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/monk_black.bmp b/crawl-ref/source/rltiles/player/body/monk_black.bmp
new file mode 100644
index 0000000000..7f0306181c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/monk_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/monk_blue.bmp b/crawl-ref/source/rltiles/player/body/monk_blue.bmp
new file mode 100644
index 0000000000..12f9d9bb4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/monk_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/neck.bmp b/crawl-ref/source/rltiles/player/body/neck.bmp
new file mode 100644
index 0000000000..91b64c7785
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/neck.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/pipin.bmp b/crawl-ref/source/rltiles/player/body/pipin.bmp
new file mode 100644
index 0000000000..2b58fba757
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/pipin.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/pj.bmp b/crawl-ref/source/rltiles/player/body/pj.bmp
new file mode 100644
index 0000000000..6e3d931107
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/pj.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/plate.bmp b/crawl-ref/source/rltiles/player/body/plate.bmp
new file mode 100644
index 0000000000..6173c5d8ce
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/plate.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/plate2.bmp b/crawl-ref/source/rltiles/player/body/plate2.bmp
new file mode 100644
index 0000000000..7369864cc9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/plate2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/plate_and_cloth.bmp b/crawl-ref/source/rltiles/player/body/plate_and_cloth.bmp
new file mode 100644
index 0000000000..a9df910198
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/plate_and_cloth.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/plate_and_cloth2.bmp b/crawl-ref/source/rltiles/player/body/plate_and_cloth2.bmp
new file mode 100644
index 0000000000..8bcec83515
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/plate_and_cloth2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/plate_black.bmp b/crawl-ref/source/rltiles/player/body/plate_black.bmp
new file mode 100644
index 0000000000..16517e7f9a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/plate_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/ringmail.bmp b/crawl-ref/source/rltiles/player/body/ringmail.bmp
new file mode 100644
index 0000000000..15af5db783
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/ringmail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_black.bmp b/crawl-ref/source/rltiles/player/body/robe_black.bmp
new file mode 100644
index 0000000000..e963543db3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_black_gold.bmp b/crawl-ref/source/rltiles/player/body/robe_black_gold.bmp
new file mode 100644
index 0000000000..1d12c90d46
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_black_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_black_hood.bmp b/crawl-ref/source/rltiles/player/body/robe_black_hood.bmp
new file mode 100644
index 0000000000..387b2e0ed4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_black_hood.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_black_red.bmp b/crawl-ref/source/rltiles/player/body/robe_black_red.bmp
new file mode 100644
index 0000000000..6290030879
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_black_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_blue.bmp b/crawl-ref/source/rltiles/player/body/robe_blue.bmp
new file mode 100644
index 0000000000..71f73d8a99
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_blue_green.bmp b/crawl-ref/source/rltiles/player/body/robe_blue_green.bmp
new file mode 100644
index 0000000000..8881e5e7a8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_blue_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_blue_white.bmp b/crawl-ref/source/rltiles/player/body/robe_blue_white.bmp
new file mode 100644
index 0000000000..efb26d8412
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_blue_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_brown.bmp b/crawl-ref/source/rltiles/player/body/robe_brown.bmp
new file mode 100644
index 0000000000..5f50e0f612
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_brown2.bmp b/crawl-ref/source/rltiles/player/body/robe_brown2.bmp
new file mode 100644
index 0000000000..09f696ffa7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_brown3.bmp b/crawl-ref/source/rltiles/player/body/robe_brown3.bmp
new file mode 100644
index 0000000000..059eea599a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_brown3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_cyan.bmp b/crawl-ref/source/rltiles/player/body/robe_cyan.bmp
new file mode 100644
index 0000000000..3af1784e34
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_gray2.bmp b/crawl-ref/source/rltiles/player/body/robe_gray2.bmp
new file mode 100644
index 0000000000..2dd42af787
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_gray2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_green.bmp b/crawl-ref/source/rltiles/player/body/robe_green.bmp
new file mode 100644
index 0000000000..89039b07cd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_green_gold.bmp b/crawl-ref/source/rltiles/player/body/robe_green_gold.bmp
new file mode 100644
index 0000000000..9ea774ded4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_green_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_magenta.bmp b/crawl-ref/source/rltiles/player/body/robe_magenta.bmp
new file mode 100644
index 0000000000..9a97255891
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_of_night.bmp b/crawl-ref/source/rltiles/player/body/robe_of_night.bmp
new file mode 100644
index 0000000000..794b4af308
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_of_night.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_purple.bmp b/crawl-ref/source/rltiles/player/body/robe_purple.bmp
new file mode 100644
index 0000000000..4fb85e5d82
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_rainbow.bmp b/crawl-ref/source/rltiles/player/body/robe_rainbow.bmp
new file mode 100644
index 0000000000..a29d166558
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_rainbow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_red.bmp b/crawl-ref/source/rltiles/player/body/robe_red.bmp
new file mode 100644
index 0000000000..937a89c28b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_red2.bmp b/crawl-ref/source/rltiles/player/body/robe_red2.bmp
new file mode 100644
index 0000000000..1700454aa6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_red3.bmp b/crawl-ref/source/rltiles/player/body/robe_red3.bmp
new file mode 100644
index 0000000000..f17f746d7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_red3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_red_gold.bmp b/crawl-ref/source/rltiles/player/body/robe_red_gold.bmp
new file mode 100644
index 0000000000..598d8064f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_red_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_white.bmp b/crawl-ref/source/rltiles/player/body/robe_white.bmp
new file mode 100644
index 0000000000..d852a24ab8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_white2.bmp b/crawl-ref/source/rltiles/player/body/robe_white2.bmp
new file mode 100644
index 0000000000..516e4180f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_white2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_white_green.bmp b/crawl-ref/source/rltiles/player/body/robe_white_green.bmp
new file mode 100644
index 0000000000..0aff9835c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_white_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_white_red.bmp b/crawl-ref/source/rltiles/player/body/robe_white_red.bmp
new file mode 100644
index 0000000000..6964d92214
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_white_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/robe_yellow.bmp b/crawl-ref/source/rltiles/player/body/robe_yellow.bmp
new file mode 100644
index 0000000000..1c9bf1a126
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/robe_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/sailor.bmp b/crawl-ref/source/rltiles/player/body/sailor.bmp
new file mode 100644
index 0000000000..a5cbc25498
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/sailor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/sam.bmp b/crawl-ref/source/rltiles/player/body/sam.bmp
new file mode 100644
index 0000000000..d9f5a12777
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/sam.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/saruman.bmp b/crawl-ref/source/rltiles/player/body/saruman.bmp
new file mode 100644
index 0000000000..35d76f731d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/saruman.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/scalemail.bmp b/crawl-ref/source/rltiles/player/body/scalemail.bmp
new file mode 100644
index 0000000000..94ad900045
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/scalemail.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/scalemail2.bmp b/crawl-ref/source/rltiles/player/body/scalemail2.bmp
new file mode 100644
index 0000000000..c3fc82acfa
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/scalemail2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_black.bmp b/crawl-ref/source/rltiles/player/body/shirt_black.bmp
new file mode 100644
index 0000000000..edf5e3659e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_black3.bmp b/crawl-ref/source/rltiles/player/body/shirt_black3.bmp
new file mode 100644
index 0000000000..19d2efef53
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_black3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_black_and_cloth.bmp b/crawl-ref/source/rltiles/player/body/shirt_black_and_cloth.bmp
new file mode 100644
index 0000000000..a418ff1783
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_black_and_cloth.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_blue.bmp b/crawl-ref/source/rltiles/player/body/shirt_blue.bmp
new file mode 100644
index 0000000000..06471e7887
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_check.bmp b/crawl-ref/source/rltiles/player/body/shirt_check.bmp
new file mode 100644
index 0000000000..54b068690d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_check.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_hawaii.bmp b/crawl-ref/source/rltiles/player/body/shirt_hawaii.bmp
new file mode 100644
index 0000000000..d026115d59
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_hawaii.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_vest.bmp b/crawl-ref/source/rltiles/player/body/shirt_vest.bmp
new file mode 100644
index 0000000000..b9b0a467ff
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_vest.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_white1.bmp b/crawl-ref/source/rltiles/player/body/shirt_white1.bmp
new file mode 100644
index 0000000000..a2553546de
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_white1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_white2.bmp b/crawl-ref/source/rltiles/player/body/shirt_white2.bmp
new file mode 100644
index 0000000000..291fe23808
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_white2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_white3.bmp b/crawl-ref/source/rltiles/player/body/shirt_white3.bmp
new file mode 100644
index 0000000000..316349196d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_white3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shirt_white_yellow.bmp b/crawl-ref/source/rltiles/player/body/shirt_white_yellow.bmp
new file mode 100644
index 0000000000..8b0112a46f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shirt_white_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/shoulder_pad.bmp b/crawl-ref/source/rltiles/player/body/shoulder_pad.bmp
new file mode 100644
index 0000000000..763e5bc419
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/shoulder_pad.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/skirt_onep_grey.bmp b/crawl-ref/source/rltiles/player/body/skirt_onep_grey.bmp
new file mode 100644
index 0000000000..c41d8f05f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/skirt_onep_grey.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/slit_black.bmp b/crawl-ref/source/rltiles/player/body/slit_black.bmp
new file mode 100644
index 0000000000..bea8c31e6d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/slit_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/susp_black.bmp b/crawl-ref/source/rltiles/player/body/susp_black.bmp
new file mode 100644
index 0000000000..717a9bc3b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/susp_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/troll_hide.bmp b/crawl-ref/source/rltiles/player/body/troll_hide.bmp
new file mode 100644
index 0000000000..d1f56155b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/troll_hide.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/vanhel1.bmp b/crawl-ref/source/rltiles/player/body/vanhel1.bmp
new file mode 100644
index 0000000000..0076e498fe
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/vanhel1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/vest_red.bmp b/crawl-ref/source/rltiles/player/body/vest_red.bmp
new file mode 100644
index 0000000000..6179a08776
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/vest_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/vest_red2.bmp b/crawl-ref/source/rltiles/player/body/vest_red2.bmp
new file mode 100644
index 0000000000..3a9d88eb65
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/vest_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/body/zhor.bmp b/crawl-ref/source/rltiles/player/body/zhor.bmp
new file mode 100644
index 0000000000..5ae0830125
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/body/zhor.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/blue_gold.bmp b/crawl-ref/source/rltiles/player/boot/blue_gold.bmp
new file mode 100644
index 0000000000..187f37f8bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/blue_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/hooves.bmp b/crawl-ref/source/rltiles/player/boot/hooves.bmp
new file mode 100644
index 0000000000..1d5ea209b9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/hooves.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/long_red.bmp b/crawl-ref/source/rltiles/player/boot/long_red.bmp
new file mode 100644
index 0000000000..ede8b3a5b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/long_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/long_white.bmp b/crawl-ref/source/rltiles/player/boot/long_white.bmp
new file mode 100644
index 0000000000..f37f319fd4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/long_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/mesh_black.bmp b/crawl-ref/source/rltiles/player/boot/mesh_black.bmp
new file mode 100644
index 0000000000..2375810d08
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/mesh_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/mesh_blue.bmp b/crawl-ref/source/rltiles/player/boot/mesh_blue.bmp
new file mode 100644
index 0000000000..2a3f5abc10
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/mesh_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/mesh_red.bmp b/crawl-ref/source/rltiles/player/boot/mesh_red.bmp
new file mode 100644
index 0000000000..0bdadb62a0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/mesh_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/mesh_white.bmp b/crawl-ref/source/rltiles/player/boot/mesh_white.bmp
new file mode 100644
index 0000000000..0248c610f5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/mesh_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_brown.bmp b/crawl-ref/source/rltiles/player/boot/middle_brown.bmp
new file mode 100644
index 0000000000..b3e9d30759
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_brown2.bmp b/crawl-ref/source/rltiles/player/boot/middle_brown2.bmp
new file mode 100644
index 0000000000..abb7f6bffe
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_brown3.bmp b/crawl-ref/source/rltiles/player/boot/middle_brown3.bmp
new file mode 100644
index 0000000000..c4c865e8e8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_brown3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_gold.bmp b/crawl-ref/source/rltiles/player/boot/middle_gold.bmp
new file mode 100644
index 0000000000..d7106489f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_gray.bmp b/crawl-ref/source/rltiles/player/boot/middle_gray.bmp
new file mode 100644
index 0000000000..6ba47abd03
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_green.bmp b/crawl-ref/source/rltiles/player/boot/middle_green.bmp
new file mode 100644
index 0000000000..0a320d44a4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_purple.bmp b/crawl-ref/source/rltiles/player/boot/middle_purple.bmp
new file mode 100644
index 0000000000..05734ace63
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/middle_ybrown.bmp b/crawl-ref/source/rltiles/player/boot/middle_ybrown.bmp
new file mode 100644
index 0000000000..5e864c307d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/middle_ybrown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/pj.bmp b/crawl-ref/source/rltiles/player/boot/pj.bmp
new file mode 100644
index 0000000000..981e34db13
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/pj.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/short_brown.bmp b/crawl-ref/source/rltiles/player/boot/short_brown.bmp
new file mode 100644
index 0000000000..f1307b398d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/short_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/short_brown2.bmp b/crawl-ref/source/rltiles/player/boot/short_brown2.bmp
new file mode 100644
index 0000000000..29d23d12a8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/short_brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/short_purple.bmp b/crawl-ref/source/rltiles/player/boot/short_purple.bmp
new file mode 100644
index 0000000000..c7d1a0d5cd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/short_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/boot/short_red.bmp b/crawl-ref/source/rltiles/player/boot/short_red.bmp
new file mode 100644
index 0000000000..1f3fff1e34
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/boot/short_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/black.bmp b/crawl-ref/source/rltiles/player/cloak/black.bmp
new file mode 100644
index 0000000000..f4025f01fb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/blue.bmp b/crawl-ref/source/rltiles/player/cloak/blue.bmp
new file mode 100644
index 0000000000..43a94a6a7c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/brown.bmp b/crawl-ref/source/rltiles/player/cloak/brown.bmp
new file mode 100644
index 0000000000..54bf504da0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/cyan.bmp b/crawl-ref/source/rltiles/player/cloak/cyan.bmp
new file mode 100644
index 0000000000..e0cc801af4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/gray.bmp b/crawl-ref/source/rltiles/player/cloak/gray.bmp
new file mode 100644
index 0000000000..2bb296dc19
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/green.bmp b/crawl-ref/source/rltiles/player/cloak/green.bmp
new file mode 100644
index 0000000000..e84c5a4b5a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/magenta.bmp b/crawl-ref/source/rltiles/player/cloak/magenta.bmp
new file mode 100644
index 0000000000..7f4a9c80e3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/red.bmp b/crawl-ref/source/rltiles/player/cloak/red.bmp
new file mode 100644
index 0000000000..60992574ff
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/white.bmp b/crawl-ref/source/rltiles/player/cloak/white.bmp
new file mode 100644
index 0000000000..728e3ca04b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/cloak/yellow.bmp b/crawl-ref/source/rltiles/player/cloak/yellow.bmp
new file mode 100644
index 0000000000..5921ac45d8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/cloak/yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_black.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_black.bmp
new file mode 100644
index 0000000000..2d1cea7bcb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_brown.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_brown.bmp
new file mode 100644
index 0000000000..142630bb53
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_green.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_green.bmp
new file mode 100644
index 0000000000..112b55cd5a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_grey.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_grey.bmp
new file mode 100644
index 0000000000..e187d15dbc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_grey.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_mottled.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_mottled.bmp
new file mode 100644
index 0000000000..d7fccc3a8d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_mottled.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_pale.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_pale.bmp
new file mode 100644
index 0000000000..99e28a5a05
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_pale.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_purple.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_purple.bmp
new file mode 100644
index 0000000000..42b9e1cd2d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_red.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_red.bmp
new file mode 100644
index 0000000000..c723c5b8a6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_white.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_white.bmp
new file mode 100644
index 0000000000..9118ba8ea5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drchead/drchead_yellow.bmp b/crawl-ref/source/rltiles/player/drchead/drchead_yellow.bmp
new file mode 100644
index 0000000000..1a0a3f3c42
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drchead/drchead_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_black.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_black.bmp
new file mode 100644
index 0000000000..752bb39060
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_brown.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_brown.bmp
new file mode 100644
index 0000000000..b5e0c2e842
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_green.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_green.bmp
new file mode 100644
index 0000000000..1aea3d14e9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_grey.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_grey.bmp
new file mode 100644
index 0000000000..65b30ca75c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_grey.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_mottled.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_mottled.bmp
new file mode 100644
index 0000000000..3d77fa47cd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_mottled.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_pale.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_pale.bmp
new file mode 100644
index 0000000000..5be6b47be4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_pale.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_purple.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_purple.bmp
new file mode 100644
index 0000000000..088b0be481
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_red.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_red.bmp
new file mode 100644
index 0000000000..02b76d9ff3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_white.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_white.bmp
new file mode 100644
index 0000000000..6e0ec2c7ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/drcwing/drcwing_yellow.bmp b/crawl-ref/source/rltiles/player/drcwing/drcwing_yellow.bmp
new file mode 100644
index 0000000000..a64af7eeb0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/drcwing/drcwing_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/aragorn.bmp b/crawl-ref/source/rltiles/player/hair/aragorn.bmp
new file mode 100644
index 0000000000..8857b864fc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/aragorn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/arwen.bmp b/crawl-ref/source/rltiles/player/hair/arwen.bmp
new file mode 100644
index 0000000000..b423a3b264
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/arwen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/boromir.bmp b/crawl-ref/source/rltiles/player/hair/boromir.bmp
new file mode 100644
index 0000000000..cb0591177b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/boromir.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/brown1.bmp b/crawl-ref/source/rltiles/player/hair/brown1.bmp
new file mode 100644
index 0000000000..774496f8ab
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/brown1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/brown2.bmp b/crawl-ref/source/rltiles/player/hair/brown2.bmp
new file mode 100644
index 0000000000..8a1fd18484
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/brown2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/elf_black.bmp b/crawl-ref/source/rltiles/player/hair/elf_black.bmp
new file mode 100644
index 0000000000..a95893857e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/elf_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/elf_red.bmp b/crawl-ref/source/rltiles/player/hair/elf_red.bmp
new file mode 100644
index 0000000000..817cfa21c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/elf_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/elf_white.bmp b/crawl-ref/source/rltiles/player/hair/elf_white.bmp
new file mode 100644
index 0000000000..4ad40ab869
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/elf_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/elf_yellow.bmp b/crawl-ref/source/rltiles/player/hair/elf_yellow.bmp
new file mode 100644
index 0000000000..c576d06e84
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/elf_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/fem_black.bmp b/crawl-ref/source/rltiles/player/hair/fem_black.bmp
new file mode 100644
index 0000000000..d9b9d8d746
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/fem_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/fem_red.bmp b/crawl-ref/source/rltiles/player/hair/fem_red.bmp
new file mode 100644
index 0000000000..0df2c1c4b8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/fem_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/fem_white.bmp b/crawl-ref/source/rltiles/player/hair/fem_white.bmp
new file mode 100644
index 0000000000..56d42f0e1f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/fem_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/fem_yellow.bmp b/crawl-ref/source/rltiles/player/hair/fem_yellow.bmp
new file mode 100644
index 0000000000..d511c52367
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/fem_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/frodo.bmp b/crawl-ref/source/rltiles/player/hair/frodo.bmp
new file mode 100644
index 0000000000..44f2fab628
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/frodo.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/legolas.bmp b/crawl-ref/source/rltiles/player/hair/legolas.bmp
new file mode 100644
index 0000000000..1ff4ef7d46
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/legolas.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/long_black.bmp b/crawl-ref/source/rltiles/player/hair/long_black.bmp
new file mode 100644
index 0000000000..76361c81a9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/long_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/long_red.bmp b/crawl-ref/source/rltiles/player/hair/long_red.bmp
new file mode 100644
index 0000000000..82017079bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/long_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/long_white.bmp b/crawl-ref/source/rltiles/player/hair/long_white.bmp
new file mode 100644
index 0000000000..ae710aef83
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/long_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/long_yellow.bmp b/crawl-ref/source/rltiles/player/hair/long_yellow.bmp
new file mode 100644
index 0000000000..6beb4f7418
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/long_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/merry.bmp b/crawl-ref/source/rltiles/player/hair/merry.bmp
new file mode 100644
index 0000000000..cbb7b10067
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/merry.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/pigtail_red.bmp b/crawl-ref/source/rltiles/player/hair/pigtail_red.bmp
new file mode 100644
index 0000000000..fd2d672090
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/pigtail_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/pj.bmp b/crawl-ref/source/rltiles/player/hair/pj.bmp
new file mode 100644
index 0000000000..32cfcdae94
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/pj.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/sam.bmp b/crawl-ref/source/rltiles/player/hair/sam.bmp
new file mode 100644
index 0000000000..86da884c39
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/sam.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/short_black.bmp b/crawl-ref/source/rltiles/player/hair/short_black.bmp
new file mode 100644
index 0000000000..ceb91de163
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/short_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/short_red.bmp b/crawl-ref/source/rltiles/player/hair/short_red.bmp
new file mode 100644
index 0000000000..17fe56098f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/short_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/short_white.bmp b/crawl-ref/source/rltiles/player/hair/short_white.bmp
new file mode 100644
index 0000000000..f71fb2e5a3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/short_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hair/short_yellow.bmp b/crawl-ref/source/rltiles/player/hair/short_yellow.bmp
new file mode 100644
index 0000000000..69e2d07c83
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hair/short_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/aragorn.bmp b/crawl-ref/source/rltiles/player/hand1/aragorn.bmp
new file mode 100644
index 0000000000..31b760e6fd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/aragorn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/arga.bmp b/crawl-ref/source/rltiles/player/hand1/arga.bmp
new file mode 100644
index 0000000000..8d22d740d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/arga.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/arwen.bmp b/crawl-ref/source/rltiles/player/hand1/arwen.bmp
new file mode 100644
index 0000000000..a0f331ccac
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/arwen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/asmodeus.bmp b/crawl-ref/source/rltiles/player/hand1/asmodeus.bmp
new file mode 100644
index 0000000000..cc14434850
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/asmodeus.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe.bmp b/crawl-ref/source/rltiles/player/hand1/axe.bmp
new file mode 100644
index 0000000000..1a6369b325
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe2.bmp b/crawl-ref/source/rltiles/player/hand1/axe2.bmp
new file mode 100644
index 0000000000..6cbc70f771
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe_blood.bmp b/crawl-ref/source/rltiles/player/hand1/axe_blood.bmp
new file mode 100644
index 0000000000..8d8273d26d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe_blood.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe_double.bmp b/crawl-ref/source/rltiles/player/hand1/axe_double.bmp
new file mode 100644
index 0000000000..d2ec010f11
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe_double.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe_executioner.bmp b/crawl-ref/source/rltiles/player/hand1/axe_executioner.bmp
new file mode 100644
index 0000000000..e6e6abcc0b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe_executioner.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe_short.bmp b/crawl-ref/source/rltiles/player/hand1/axe_short.bmp
new file mode 100644
index 0000000000..847a14ba85
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe_short.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe_small.bmp b/crawl-ref/source/rltiles/player/hand1/axe_small.bmp
new file mode 100644
index 0000000000..36e5add571
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe_small.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/axe_trog.bmp b/crawl-ref/source/rltiles/player/hand1/axe_trog.bmp
new file mode 100644
index 0000000000..b77a97048a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/axe_trog.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/black_sword.bmp b/crawl-ref/source/rltiles/player/hand1/black_sword.bmp
new file mode 100644
index 0000000000..802ae4832d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/black_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/black_whip.bmp b/crawl-ref/source/rltiles/player/hand1/black_whip.bmp
new file mode 100644
index 0000000000..8a711aff58
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/black_whip.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bladehands.bmp b/crawl-ref/source/rltiles/player/hand1/bladehands.bmp
new file mode 100644
index 0000000000..4683aea8d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bladehands.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/blessed_blade.bmp b/crawl-ref/source/rltiles/player/hand1/blessed_blade.bmp
new file mode 100644
index 0000000000..17d1d71e41
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/blessed_blade.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bloodbane.bmp b/crawl-ref/source/rltiles/player/hand1/bloodbane.bmp
new file mode 100644
index 0000000000..aa6ecc2462
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bloodbane.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/blowgun.bmp b/crawl-ref/source/rltiles/player/hand1/blowgun.bmp
new file mode 100644
index 0000000000..d993f51243
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/blowgun.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bone_lantern.bmp b/crawl-ref/source/rltiles/player/hand1/bone_lantern.bmp
new file mode 100644
index 0000000000..106da0c8bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bone_lantern.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/boromir.bmp b/crawl-ref/source/rltiles/player/hand1/boromir.bmp
new file mode 100644
index 0000000000..a1d30e96eb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/boromir.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bottle.bmp b/crawl-ref/source/rltiles/player/hand1/bottle.bmp
new file mode 100644
index 0000000000..e778a8dd22
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bottle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bow.bmp b/crawl-ref/source/rltiles/player/hand1/bow.bmp
new file mode 100644
index 0000000000..3e08d9a41e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bow2.bmp b/crawl-ref/source/rltiles/player/hand1/bow2.bmp
new file mode 100644
index 0000000000..e7cb731fae
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bow2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bow3.bmp b/crawl-ref/source/rltiles/player/hand1/bow3.bmp
new file mode 100644
index 0000000000..ad9047838d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bow3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/bow_blue.bmp b/crawl-ref/source/rltiles/player/hand1/bow_blue.bmp
new file mode 100644
index 0000000000..689ae5e98b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/bow_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/box.bmp b/crawl-ref/source/rltiles/player/hand1/box.bmp
new file mode 100644
index 0000000000..9b57423b63
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/box.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/broadsword.bmp b/crawl-ref/source/rltiles/player/hand1/broadsword.bmp
new file mode 100644
index 0000000000..7a43c9f9ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/broadsword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/chilly_death.bmp b/crawl-ref/source/rltiles/player/hand1/chilly_death.bmp
new file mode 100644
index 0000000000..a1de54ad69
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/chilly_death.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/club.bmp b/crawl-ref/source/rltiles/player/hand1/club.bmp
new file mode 100644
index 0000000000..f5f314bef9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/club.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/club2.bmp b/crawl-ref/source/rltiles/player/hand1/club2.bmp
new file mode 100644
index 0000000000..d648cc770c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/club2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/club3.bmp b/crawl-ref/source/rltiles/player/hand1/club3.bmp
new file mode 100644
index 0000000000..9f5f18d6e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/club3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/club_slant.bmp b/crawl-ref/source/rltiles/player/hand1/club_slant.bmp
new file mode 100644
index 0000000000..f027117eae
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/club_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow.bmp b/crawl-ref/source/rltiles/player/hand1/crossbow.bmp
new file mode 100644
index 0000000000..baa9267591
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/crossbow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow2.bmp b/crawl-ref/source/rltiles/player/hand1/crossbow2.bmp
new file mode 100644
index 0000000000..73b4ca86e1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/crossbow2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow3.bmp b/crawl-ref/source/rltiles/player/hand1/crossbow3.bmp
new file mode 100644
index 0000000000..391496ecc2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/crossbow3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow4.bmp b/crawl-ref/source/rltiles/player/hand1/crossbow4.bmp
new file mode 100644
index 0000000000..42c8297a3d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/crossbow4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow_fire.bmp b/crawl-ref/source/rltiles/player/hand1/crossbow_fire.bmp
new file mode 100644
index 0000000000..e941fc7e43
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/crossbow_fire.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crystal.bmp b/crawl-ref/source/rltiles/player/hand1/crystal.bmp
new file mode 100644
index 0000000000..332b2727ae
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/crystal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/d_glaive.bmp b/crawl-ref/source/rltiles/player/hand1/d_glaive.bmp
new file mode 100644
index 0000000000..70ada67598
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/d_glaive.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/dagger.bmp b/crawl-ref/source/rltiles/player/hand1/dagger.bmp
new file mode 100644
index 0000000000..2149bf051b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/dagger.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/dagger_slant.bmp b/crawl-ref/source/rltiles/player/hand1/dagger_slant.bmp
new file mode 100644
index 0000000000..8c8f053ccb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/dagger_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/deck.bmp b/crawl-ref/source/rltiles/player/hand1/deck.bmp
new file mode 100644
index 0000000000..90eb3092e2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/deck.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/dirt.bmp b/crawl-ref/source/rltiles/player/hand1/dirt.bmp
new file mode 100644
index 0000000000..ed06024ecd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/dirt.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/disc.bmp b/crawl-ref/source/rltiles/player/hand1/disc.bmp
new file mode 100644
index 0000000000..4896caa348
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/disc.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/dispater.bmp b/crawl-ref/source/rltiles/player/hand1/dispater.bmp
new file mode 100644
index 0000000000..3897d1c7fc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/dispater.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/doom_knight.bmp b/crawl-ref/source/rltiles/player/hand1/doom_knight.bmp
new file mode 100644
index 0000000000..3011ee19bb
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/doom_knight.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/double_sword.bmp b/crawl-ref/source/rltiles/player/hand1/double_sword.bmp
new file mode 100644
index 0000000000..3b1288753d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/double_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/elemental_staff.bmp b/crawl-ref/source/rltiles/player/hand1/elemental_staff.bmp
new file mode 100644
index 0000000000..7e514b0ac1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/elemental_staff.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/eveningstar.bmp b/crawl-ref/source/rltiles/player/hand1/eveningstar.bmp
new file mode 100644
index 0000000000..fc54dd354c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/eveningstar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/falchion.bmp b/crawl-ref/source/rltiles/player/hand1/falchion.bmp
new file mode 100644
index 0000000000..092aead106
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/falchion.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fan.bmp b/crawl-ref/source/rltiles/player/hand1/fan.bmp
new file mode 100644
index 0000000000..faa985e75a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/finisher.bmp b/crawl-ref/source/rltiles/player/hand1/finisher.bmp
new file mode 100644
index 0000000000..cd3b96060d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/finisher.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fire_blue.bmp b/crawl-ref/source/rltiles/player/hand1/fire_blue.bmp
new file mode 100644
index 0000000000..fb748c5259
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fire_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fire_cyan.bmp b/crawl-ref/source/rltiles/player/hand1/fire_cyan.bmp
new file mode 100644
index 0000000000..e2e99da270
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fire_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fire_dark.bmp b/crawl-ref/source/rltiles/player/hand1/fire_dark.bmp
new file mode 100644
index 0000000000..2f0b04dbce
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fire_dark.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fire_green.bmp b/crawl-ref/source/rltiles/player/hand1/fire_green.bmp
new file mode 100644
index 0000000000..d4d622366e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fire_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fire_red.bmp b/crawl-ref/source/rltiles/player/hand1/fire_red.bmp
new file mode 100644
index 0000000000..0c1b40d3c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fire_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fire_white.bmp b/crawl-ref/source/rltiles/player/hand1/fire_white.bmp
new file mode 100644
index 0000000000..8d76b8cbff
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fire_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fire_white2.bmp b/crawl-ref/source/rltiles/player/hand1/fire_white2.bmp
new file mode 100644
index 0000000000..3d4f7e10d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fire_white2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/flaming_death.bmp b/crawl-ref/source/rltiles/player/hand1/flaming_death.bmp
new file mode 100644
index 0000000000..832a437ac7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/flaming_death.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/fork2.bmp b/crawl-ref/source/rltiles/player/hand1/fork2.bmp
new file mode 100644
index 0000000000..03d14bd540
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/fork2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_ball.bmp b/crawl-ref/source/rltiles/player/hand1/frail_ball.bmp
new file mode 100644
index 0000000000..eec4dc26d7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_ball.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_ball2.bmp b/crawl-ref/source/rltiles/player/hand1/frail_ball2.bmp
new file mode 100644
index 0000000000..6e27d750c9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_ball2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_ball3.bmp b/crawl-ref/source/rltiles/player/hand1/frail_ball3.bmp
new file mode 100644
index 0000000000..4c5418e5a6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_ball3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_ball4.bmp b/crawl-ref/source/rltiles/player/hand1/frail_ball4.bmp
new file mode 100644
index 0000000000..d315221f84
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_ball4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_balls.bmp b/crawl-ref/source/rltiles/player/hand1/frail_balls.bmp
new file mode 100644
index 0000000000..d5e1cd639c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_balls.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_spike.bmp b/crawl-ref/source/rltiles/player/hand1/frail_spike.bmp
new file mode 100644
index 0000000000..43e7b25de5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_spike.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_stick.bmp b/crawl-ref/source/rltiles/player/hand1/frail_stick.bmp
new file mode 100644
index 0000000000..58e7a386ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_stick.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frail_stick_slant.bmp b/crawl-ref/source/rltiles/player/hand1/frail_stick_slant.bmp
new file mode 100644
index 0000000000..7250ebbaf3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frail_stick_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/frodo.bmp b/crawl-ref/source/rltiles/player/hand1/frodo.bmp
new file mode 100644
index 0000000000..fe892cf825
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/frodo.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/gandalf.bmp b/crawl-ref/source/rltiles/player/hand1/gandalf.bmp
new file mode 100644
index 0000000000..0db580552d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/gandalf.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/giant_club.bmp b/crawl-ref/source/rltiles/player/hand1/giant_club.bmp
new file mode 100644
index 0000000000..85d80d03e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/giant_club.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/giant_club_slant.bmp b/crawl-ref/source/rltiles/player/hand1/giant_club_slant.bmp
new file mode 100644
index 0000000000..f0f5c00dea
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/giant_club_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/giant_club_spike.bmp b/crawl-ref/source/rltiles/player/hand1/giant_club_spike.bmp
new file mode 100644
index 0000000000..c10497a739
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/giant_club_spike.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/giant_club_spike_slant.bmp b/crawl-ref/source/rltiles/player/hand1/giant_club_spike_slant.bmp
new file mode 100644
index 0000000000..7071e276b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/giant_club_spike_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/gimli.bmp b/crawl-ref/source/rltiles/player/hand1/gimli.bmp
new file mode 100644
index 0000000000..c066a21cb1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/gimli.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/glaive.bmp b/crawl-ref/source/rltiles/player/hand1/glaive.bmp
new file mode 100644
index 0000000000..54d95b46b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/glaive.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/glaive2.bmp b/crawl-ref/source/rltiles/player/hand1/glaive2.bmp
new file mode 100644
index 0000000000..ed6e9cd8ab
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/glaive2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/glaive3.bmp b/crawl-ref/source/rltiles/player/hand1/glaive3.bmp
new file mode 100644
index 0000000000..2a0e96d684
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/glaive3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/glaive_of_prune.bmp b/crawl-ref/source/rltiles/player/hand1/glaive_of_prune.bmp
new file mode 100644
index 0000000000..657674944a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/glaive_of_prune.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/great_axe.bmp b/crawl-ref/source/rltiles/player/hand1/great_axe.bmp
new file mode 100644
index 0000000000..71d25ae925
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/great_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/great_bow.bmp b/crawl-ref/source/rltiles/player/hand1/great_bow.bmp
new file mode 100644
index 0000000000..864032dfb3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/great_bow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/great_staff.bmp b/crawl-ref/source/rltiles/player/hand1/great_staff.bmp
new file mode 100644
index 0000000000..1b70ab8aff
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/great_staff.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/great_sword.bmp b/crawl-ref/source/rltiles/player/hand1/great_sword.bmp
new file mode 100644
index 0000000000..f61b35b388
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/great_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/great_sword_slant.bmp b/crawl-ref/source/rltiles/player/hand1/great_sword_slant.bmp
new file mode 100644
index 0000000000..10a487b199
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/great_sword_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/halberd.bmp b/crawl-ref/source/rltiles/player/hand1/halberd.bmp
new file mode 100644
index 0000000000..ace15df44d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/halberd.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/hammer.bmp b/crawl-ref/source/rltiles/player/hand1/hammer.bmp
new file mode 100644
index 0000000000..b4970b961f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/hammer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/hammer2.bmp b/crawl-ref/source/rltiles/player/hand1/hammer2.bmp
new file mode 100644
index 0000000000..5343561be0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/hammer2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/hammer3.bmp b/crawl-ref/source/rltiles/player/hand1/hammer3.bmp
new file mode 100644
index 0000000000..53a1823530
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/hammer3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/hand_axe.bmp b/crawl-ref/source/rltiles/player/hand1/hand_axe.bmp
new file mode 100644
index 0000000000..caa736fe4a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/hand_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/head.bmp b/crawl-ref/source/rltiles/player/hand1/head.bmp
new file mode 100644
index 0000000000..53a1d28007
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/head.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/heavy_sword.bmp b/crawl-ref/source/rltiles/player/hand1/heavy_sword.bmp
new file mode 100644
index 0000000000..41cb2326c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/heavy_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/hook.bmp b/crawl-ref/source/rltiles/player/hand1/hook.bmp
new file mode 100644
index 0000000000..0640e5e245
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/hook.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/horn.bmp b/crawl-ref/source/rltiles/player/hand1/horn.bmp
new file mode 100644
index 0000000000..de347bf1f3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/horn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/jihad.bmp b/crawl-ref/source/rltiles/player/hand1/jihad.bmp
new file mode 100644
index 0000000000..5975701046
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/jihad.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/katana.bmp b/crawl-ref/source/rltiles/player/hand1/katana.bmp
new file mode 100644
index 0000000000..01d58f804c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/katana.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/katana_slant.bmp b/crawl-ref/source/rltiles/player/hand1/katana_slant.bmp
new file mode 100644
index 0000000000..550e95d5c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/katana_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/knife.bmp b/crawl-ref/source/rltiles/player/hand1/knife.bmp
new file mode 100644
index 0000000000..6a45591815
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/knife.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/krishna.bmp b/crawl-ref/source/rltiles/player/hand1/krishna.bmp
new file mode 100644
index 0000000000..53a342f3b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/krishna.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/lance.bmp b/crawl-ref/source/rltiles/player/hand1/lance.bmp
new file mode 100644
index 0000000000..69f0c9cdd6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/lance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/lance2.bmp b/crawl-ref/source/rltiles/player/hand1/lance2.bmp
new file mode 100644
index 0000000000..bc145a9455
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/lance2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/lantern.bmp b/crawl-ref/source/rltiles/player/hand1/lantern.bmp
new file mode 100644
index 0000000000..487375d0be
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/lantern.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/large_mace.bmp b/crawl-ref/source/rltiles/player/hand1/large_mace.bmp
new file mode 100644
index 0000000000..b5a67e11be
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/large_mace.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/leech.bmp b/crawl-ref/source/rltiles/player/hand1/leech.bmp
new file mode 100644
index 0000000000..1a6679261d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/leech.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/legolas.bmp b/crawl-ref/source/rltiles/player/hand1/legolas.bmp
new file mode 100644
index 0000000000..e2a8d6f60d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/legolas.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/light_blue.bmp b/crawl-ref/source/rltiles/player/hand1/light_blue.bmp
new file mode 100644
index 0000000000..50c7a09c25
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/light_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/light_red.bmp b/crawl-ref/source/rltiles/player/hand1/light_red.bmp
new file mode 100644
index 0000000000..e1511ca6cc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/light_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/light_yellow.bmp b/crawl-ref/source/rltiles/player/hand1/light_yellow.bmp
new file mode 100644
index 0000000000..8b8dc9efca
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/light_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/long_sword.bmp b/crawl-ref/source/rltiles/player/hand1/long_sword.bmp
new file mode 100644
index 0000000000..d60f6f77b9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/long_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/long_sword_slant.bmp b/crawl-ref/source/rltiles/player/hand1/long_sword_slant.bmp
new file mode 100644
index 0000000000..b7fee127f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/long_sword_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/mace.bmp b/crawl-ref/source/rltiles/player/hand1/mace.bmp
new file mode 100644
index 0000000000..a45b2729af
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/mace.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/mace2.bmp b/crawl-ref/source/rltiles/player/hand1/mace2.bmp
new file mode 100644
index 0000000000..1b41244300
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/mace2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/mace3.bmp b/crawl-ref/source/rltiles/player/hand1/mace3.bmp
new file mode 100644
index 0000000000..2a330f89e2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/mace3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/mace_of_variability.bmp b/crawl-ref/source/rltiles/player/hand1/mace_of_variability.bmp
new file mode 100644
index 0000000000..025c9cbb18
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/mace_of_variability.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/mace_ruby.bmp b/crawl-ref/source/rltiles/player/hand1/mace_ruby.bmp
new file mode 100644
index 0000000000..764e3f7de4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/mace_ruby.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/morg.bmp b/crawl-ref/source/rltiles/player/hand1/morg.bmp
new file mode 100644
index 0000000000..3ef6ed6ced
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/morg.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/morningstar.bmp b/crawl-ref/source/rltiles/player/hand1/morningstar.bmp
new file mode 100644
index 0000000000..0358534049
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/morningstar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/morningstar2.bmp b/crawl-ref/source/rltiles/player/hand1/morningstar2.bmp
new file mode 100644
index 0000000000..321a0163bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/morningstar2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/nunchaku.bmp b/crawl-ref/source/rltiles/player/hand1/nunchaku.bmp
new file mode 100644
index 0000000000..1350d9a84d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/nunchaku.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/olgreb.bmp b/crawl-ref/source/rltiles/player/hand1/olgreb.bmp
new file mode 100644
index 0000000000..603077c4e2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/olgreb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/orb.bmp b/crawl-ref/source/rltiles/player/hand1/orb.bmp
new file mode 100644
index 0000000000..7d0ac613b4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/orb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/pick_axe.bmp b/crawl-ref/source/rltiles/player/hand1/pick_axe.bmp
new file mode 100644
index 0000000000..35d040e71e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/pick_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/pike.bmp b/crawl-ref/source/rltiles/player/hand1/pike.bmp
new file mode 100644
index 0000000000..adfd784922
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/pike.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/plutonium_sword.bmp b/crawl-ref/source/rltiles/player/hand1/plutonium_sword.bmp
new file mode 100644
index 0000000000..f18dc5e1de
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/plutonium_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/pole_forked.bmp b/crawl-ref/source/rltiles/player/hand1/pole_forked.bmp
new file mode 100644
index 0000000000..bb5a6519dd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/pole_forked.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/punk.bmp b/crawl-ref/source/rltiles/player/hand1/punk.bmp
new file mode 100644
index 0000000000..12f7c7b447
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/punk.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/quarterstaff1.bmp b/crawl-ref/source/rltiles/player/hand1/quarterstaff1.bmp
new file mode 100644
index 0000000000..0ad0e2bece
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/quarterstaff1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/quarterstaff2.bmp b/crawl-ref/source/rltiles/player/hand1/quarterstaff2.bmp
new file mode 100644
index 0000000000..ce52a299f1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/quarterstaff2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/quarterstaff3.bmp b/crawl-ref/source/rltiles/player/hand1/quarterstaff3.bmp
new file mode 100644
index 0000000000..3f846eaa83
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/quarterstaff3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/quarterstaff4.bmp b/crawl-ref/source/rltiles/player/hand1/quarterstaff4.bmp
new file mode 100644
index 0000000000..2eeb4d0c10
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/quarterstaff4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sabre.bmp b/crawl-ref/source/rltiles/player/hand1/sabre.bmp
new file mode 100644
index 0000000000..5a36a73657
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sabre.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/saruman.bmp b/crawl-ref/source/rltiles/player/hand1/saruman.bmp
new file mode 100644
index 0000000000..03290adff6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/saruman.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sceptre.bmp b/crawl-ref/source/rltiles/player/hand1/sceptre.bmp
new file mode 100644
index 0000000000..d9044d79c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sceptre.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/scimitar.bmp b/crawl-ref/source/rltiles/player/hand1/scimitar.bmp
new file mode 100644
index 0000000000..d2f6f94c2c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/scimitar.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/scimitar2.bmp b/crawl-ref/source/rltiles/player/hand1/scimitar2.bmp
new file mode 100644
index 0000000000..5d7d90726e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/scimitar2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/scythe.bmp b/crawl-ref/source/rltiles/player/hand1/scythe.bmp
new file mode 100644
index 0000000000..43fd0a1a16
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/scythe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/scythe_slant.bmp b/crawl-ref/source/rltiles/player/hand1/scythe_slant.bmp
new file mode 100644
index 0000000000..ff36ee9d67
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/scythe_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/short_sword.bmp b/crawl-ref/source/rltiles/player/hand1/short_sword.bmp
new file mode 100644
index 0000000000..c32e205dae
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/short_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/short_sword2.bmp b/crawl-ref/source/rltiles/player/hand1/short_sword2.bmp
new file mode 100644
index 0000000000..9ce219ffe5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/short_sword2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/short_sword_slant.bmp b/crawl-ref/source/rltiles/player/hand1/short_sword_slant.bmp
new file mode 100644
index 0000000000..fd23f919c3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/short_sword_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sickle.bmp b/crawl-ref/source/rltiles/player/hand1/sickle.bmp
new file mode 100644
index 0000000000..4b076dca2f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sickle.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/singing_sword.bmp b/crawl-ref/source/rltiles/player/hand1/singing_sword.bmp
new file mode 100644
index 0000000000..1f0a3b44ad
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/singing_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/skull.bmp b/crawl-ref/source/rltiles/player/hand1/skull.bmp
new file mode 100644
index 0000000000..8b5d2f71a4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/skull.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sling.bmp b/crawl-ref/source/rltiles/player/hand1/sling.bmp
new file mode 100644
index 0000000000..ea2d53b54d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sling.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sniper.bmp b/crawl-ref/source/rltiles/player/hand1/sniper.bmp
new file mode 100644
index 0000000000..4d6fbffc51
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sniper.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/spark.bmp b/crawl-ref/source/rltiles/player/hand1/spark.bmp
new file mode 100644
index 0000000000..a75c9a06db
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/spark.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/spear1.bmp b/crawl-ref/source/rltiles/player/hand1/spear1.bmp
new file mode 100644
index 0000000000..2b4144050d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/spear1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/spear2.bmp b/crawl-ref/source/rltiles/player/hand1/spear2.bmp
new file mode 100644
index 0000000000..9ed238fbe5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/spear2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/spear3.bmp b/crawl-ref/source/rltiles/player/hand1/spear3.bmp
new file mode 100644
index 0000000000..786356e6dd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/spear3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/spear4.bmp b/crawl-ref/source/rltiles/player/hand1/spear4.bmp
new file mode 100644
index 0000000000..3a92d25118
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/spear4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/spear5.bmp b/crawl-ref/source/rltiles/player/hand1/spear5.bmp
new file mode 100644
index 0000000000..4fd742b758
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/spear5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_evil.bmp b/crawl-ref/source/rltiles/player/hand1/staff_evil.bmp
new file mode 100644
index 0000000000..f642ee51ac
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_evil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_fork.bmp b/crawl-ref/source/rltiles/player/hand1/staff_fork.bmp
new file mode 100644
index 0000000000..b8b5487a9a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_fork.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_large.bmp b/crawl-ref/source/rltiles/player/hand1/staff_large.bmp
new file mode 100644
index 0000000000..6e469821f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_large.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_mage.bmp b/crawl-ref/source/rltiles/player/hand1/staff_mage.bmp
new file mode 100644
index 0000000000..fd6c933118
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_mage.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_mage2.bmp b/crawl-ref/source/rltiles/player/hand1/staff_mage2.bmp
new file mode 100644
index 0000000000..a1b113b7a4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_mage2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_mummy.bmp b/crawl-ref/source/rltiles/player/hand1/staff_mummy.bmp
new file mode 100644
index 0000000000..85ecba66e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_mummy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_ring_blue.bmp b/crawl-ref/source/rltiles/player/hand1/staff_ring_blue.bmp
new file mode 100644
index 0000000000..24b9cd87c3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_ring_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_ruby.bmp b/crawl-ref/source/rltiles/player/hand1/staff_ruby.bmp
new file mode 100644
index 0000000000..711c086481
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_ruby.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/staff_skull.bmp b/crawl-ref/source/rltiles/player/hand1/staff_skull.bmp
new file mode 100644
index 0000000000..aea3be4257
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/staff_skull.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/stick.bmp b/crawl-ref/source/rltiles/player/hand1/stick.bmp
new file mode 100644
index 0000000000..c5dbe95441
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/stick.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/stone.bmp b/crawl-ref/source/rltiles/player/hand1/stone.bmp
new file mode 100644
index 0000000000..81776bca6f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/stone.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword2.bmp b/crawl-ref/source/rltiles/player/hand1/sword2.bmp
new file mode 100644
index 0000000000..f7d19eeb67
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword3.bmp b/crawl-ref/source/rltiles/player/hand1/sword3.bmp
new file mode 100644
index 0000000000..afcea45d3a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword_black.bmp b/crawl-ref/source/rltiles/player/hand1/sword_black.bmp
new file mode 100644
index 0000000000..409873804c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword_breaker.bmp b/crawl-ref/source/rltiles/player/hand1/sword_breaker.bmp
new file mode 100644
index 0000000000..286d5cdfe1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword_breaker.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword_jag.bmp b/crawl-ref/source/rltiles/player/hand1/sword_jag.bmp
new file mode 100644
index 0000000000..88a673a2bf
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword_jag.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword_seven.bmp b/crawl-ref/source/rltiles/player/hand1/sword_seven.bmp
new file mode 100644
index 0000000000..edb2b4030d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword_seven.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword_thief.bmp b/crawl-ref/source/rltiles/player/hand1/sword_thief.bmp
new file mode 100644
index 0000000000..97bc67f604
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword_thief.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword_tri.bmp b/crawl-ref/source/rltiles/player/hand1/sword_tri.bmp
new file mode 100644
index 0000000000..282e05d8bc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword_tri.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/sword_twist.bmp b/crawl-ref/source/rltiles/player/hand1/sword_twist.bmp
new file mode 100644
index 0000000000..3c4d8fee2d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/sword_twist.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/trident.bmp b/crawl-ref/source/rltiles/player/hand1/trident.bmp
new file mode 100644
index 0000000000..a94c1a71d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/trident.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/trident2.bmp b/crawl-ref/source/rltiles/player/hand1/trident2.bmp
new file mode 100644
index 0000000000..e07c0d4eb8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/trident2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/trident3.bmp b/crawl-ref/source/rltiles/player/hand1/trident3.bmp
new file mode 100644
index 0000000000..191f796c8d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/trident3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/trident_demon.bmp b/crawl-ref/source/rltiles/player/hand1/trident_demon.bmp
new file mode 100644
index 0000000000..f4f4561ddc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/trident_demon.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/trident_elec.bmp b/crawl-ref/source/rltiles/player/hand1/trident_elec.bmp
new file mode 100644
index 0000000000..4ada04dbc7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/trident_elec.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/triple_sword.bmp b/crawl-ref/source/rltiles/player/hand1/triple_sword.bmp
new file mode 100644
index 0000000000..7d72e0617c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/triple_sword.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/voodoo.bmp b/crawl-ref/source/rltiles/player/hand1/voodoo.bmp
new file mode 100644
index 0000000000..55217efb4f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/voodoo.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/war_axe.bmp b/crawl-ref/source/rltiles/player/hand1/war_axe.bmp
new file mode 100644
index 0000000000..f03e22dde7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/war_axe.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/whip.bmp b/crawl-ref/source/rltiles/player/hand1/whip.bmp
new file mode 100644
index 0000000000..f9d73e5867
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/whip.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/zonguldrok.bmp b/crawl-ref/source/rltiles/player/hand1/zonguldrok.bmp
new file mode 100644
index 0000000000..02daac3818
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand1/zonguldrok.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/bladehands.bmp b/crawl-ref/source/rltiles/player/hand2/bladehands.bmp
new file mode 100644
index 0000000000..4683aea8d0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/bladehands.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_black.bmp b/crawl-ref/source/rltiles/player/hand2/book_black.bmp
new file mode 100644
index 0000000000..def201f60d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_blue.bmp b/crawl-ref/source/rltiles/player/hand2/book_blue.bmp
new file mode 100644
index 0000000000..78779b2be9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_blue_dim.bmp b/crawl-ref/source/rltiles/player/hand2/book_blue_dim.bmp
new file mode 100644
index 0000000000..88ae537e98
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_blue_dim.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_cyan.bmp b/crawl-ref/source/rltiles/player/hand2/book_cyan.bmp
new file mode 100644
index 0000000000..22c91c9653
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_cyan_dim.bmp b/crawl-ref/source/rltiles/player/hand2/book_cyan_dim.bmp
new file mode 100644
index 0000000000..fd0c7f8904
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_cyan_dim.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_green.bmp b/crawl-ref/source/rltiles/player/hand2/book_green.bmp
new file mode 100644
index 0000000000..a4b61274b1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_green_dim.bmp b/crawl-ref/source/rltiles/player/hand2/book_green_dim.bmp
new file mode 100644
index 0000000000..cc94d667ee
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_green_dim.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_magenta.bmp b/crawl-ref/source/rltiles/player/hand2/book_magenta.bmp
new file mode 100644
index 0000000000..b76230d0a7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_magenta_dim.bmp b/crawl-ref/source/rltiles/player/hand2/book_magenta_dim.bmp
new file mode 100644
index 0000000000..95f8150ca9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_magenta_dim.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_red.bmp b/crawl-ref/source/rltiles/player/hand2/book_red.bmp
new file mode 100644
index 0000000000..775827ae19
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_red_dim.bmp b/crawl-ref/source/rltiles/player/hand2/book_red_dim.bmp
new file mode 100644
index 0000000000..8640e74b3f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_red_dim.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_sky.bmp b/crawl-ref/source/rltiles/player/hand2/book_sky.bmp
new file mode 100644
index 0000000000..9b83907ad1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_sky.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_white.bmp b/crawl-ref/source/rltiles/player/hand2/book_white.bmp
new file mode 100644
index 0000000000..ae6b5a443c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_yellow.bmp b/crawl-ref/source/rltiles/player/hand2/book_yellow.bmp
new file mode 100644
index 0000000000..08853b99d7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/book_yellow_dim.bmp b/crawl-ref/source/rltiles/player/hand2/book_yellow_dim.bmp
new file mode 100644
index 0000000000..593d93bf1f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/book_yellow_dim.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/boromir.bmp b/crawl-ref/source/rltiles/player/hand2/boromir.bmp
new file mode 100644
index 0000000000..3cb9f11f6b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/boromir.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/bullseye.bmp b/crawl-ref/source/rltiles/player/hand2/bullseye.bmp
new file mode 100644
index 0000000000..2c53a8ff3b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/bullseye.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/dagger.bmp b/crawl-ref/source/rltiles/player/hand2/dagger.bmp
new file mode 100644
index 0000000000..2d93e47c75
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/dagger.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/fire_cyan.bmp b/crawl-ref/source/rltiles/player/hand2/fire_cyan.bmp
new file mode 100644
index 0000000000..5b2f5e843d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/fire_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/fire_dark.bmp b/crawl-ref/source/rltiles/player/hand2/fire_dark.bmp
new file mode 100644
index 0000000000..f180cbd411
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/fire_dark.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/fire_green.bmp b/crawl-ref/source/rltiles/player/hand2/fire_green.bmp
new file mode 100644
index 0000000000..e76227e148
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/fire_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/fire_white.bmp b/crawl-ref/source/rltiles/player/hand2/fire_white.bmp
new file mode 100644
index 0000000000..0148185656
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/fire_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/fire_white2.bmp b/crawl-ref/source/rltiles/player/hand2/fire_white2.bmp
new file mode 100644
index 0000000000..604e2032d7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/fire_white2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/gil-galad.bmp b/crawl-ref/source/rltiles/player/hand2/gil-galad.bmp
new file mode 100644
index 0000000000..3fae782f89
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/gil-galad.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/lantern.bmp b/crawl-ref/source/rltiles/player/hand2/lantern.bmp
new file mode 100644
index 0000000000..a1c60960f3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/lantern.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/light_blue.bmp b/crawl-ref/source/rltiles/player/hand2/light_blue.bmp
new file mode 100644
index 0000000000..5715e2117f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/light_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/light_red.bmp b/crawl-ref/source/rltiles/player/hand2/light_red.bmp
new file mode 100644
index 0000000000..a9cda3d974
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/light_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/light_yellow.bmp b/crawl-ref/source/rltiles/player/hand2/light_yellow.bmp
new file mode 100644
index 0000000000..dd23472240
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/light_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/pj.bmp b/crawl-ref/source/rltiles/player/hand2/pj.bmp
new file mode 100644
index 0000000000..7890818797
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/pj.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/sabre.bmp b/crawl-ref/source/rltiles/player/hand2/sabre.bmp
new file mode 100644
index 0000000000..7f8d00d5d1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/sabre.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_diamond_yellow.bmp b/crawl-ref/source/rltiles/player/hand2/shield_diamond_yellow.bmp
new file mode 100644
index 0000000000..6ef745161f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_diamond_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_kite1.bmp b/crawl-ref/source/rltiles/player/hand2/shield_kite1.bmp
new file mode 100644
index 0000000000..ce00bb2c7d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_kite1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_kite2.bmp b/crawl-ref/source/rltiles/player/hand2/shield_kite2.bmp
new file mode 100644
index 0000000000..bcff57ab63
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_kite2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_kite3.bmp b/crawl-ref/source/rltiles/player/hand2/shield_kite3.bmp
new file mode 100644
index 0000000000..3dc677a007
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_kite3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_kite4.bmp b/crawl-ref/source/rltiles/player/hand2/shield_kite4.bmp
new file mode 100644
index 0000000000..2d518d32c3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_kite4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_knight_blue.bmp b/crawl-ref/source/rltiles/player/hand2/shield_knight_blue.bmp
new file mode 100644
index 0000000000..cb67554e2f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_knight_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_knight_gray.bmp b/crawl-ref/source/rltiles/player/hand2/shield_knight_gray.bmp
new file mode 100644
index 0000000000..56ab96579b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_knight_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_knight_rw.bmp b/crawl-ref/source/rltiles/player/hand2/shield_knight_rw.bmp
new file mode 100644
index 0000000000..0b82cd93ad
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_knight_rw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_long_cross.bmp b/crawl-ref/source/rltiles/player/hand2/shield_long_cross.bmp
new file mode 100644
index 0000000000..940090b137
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_long_cross.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_long_red.bmp b/crawl-ref/source/rltiles/player/hand2/shield_long_red.bmp
new file mode 100644
index 0000000000..e4bacb8ae0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_long_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_middle_black.bmp b/crawl-ref/source/rltiles/player/hand2/shield_middle_black.bmp
new file mode 100644
index 0000000000..4766444dfd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_middle_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_middle_brown.bmp b/crawl-ref/source/rltiles/player/hand2/shield_middle_brown.bmp
new file mode 100644
index 0000000000..07c9fc5db8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_middle_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_middle_cyan.bmp b/crawl-ref/source/rltiles/player/hand2/shield_middle_cyan.bmp
new file mode 100644
index 0000000000..b85fbc4f13
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_middle_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_middle_ethn.bmp b/crawl-ref/source/rltiles/player/hand2/shield_middle_ethn.bmp
new file mode 100644
index 0000000000..dda3e484d7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_middle_ethn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_middle_gray.bmp b/crawl-ref/source/rltiles/player/hand2/shield_middle_gray.bmp
new file mode 100644
index 0000000000..457cf62a68
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_middle_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_middle_round.bmp b/crawl-ref/source/rltiles/player/hand2/shield_middle_round.bmp
new file mode 100644
index 0000000000..12fd040b12
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_middle_round.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_middle_unicorn.bmp b/crawl-ref/source/rltiles/player/hand2/shield_middle_unicorn.bmp
new file mode 100644
index 0000000000..867c81043b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_middle_unicorn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_of_resistance.bmp b/crawl-ref/source/rltiles/player/hand2/shield_of_resistance.bmp
new file mode 100644
index 0000000000..0415162bff
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_of_resistance.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round1.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round1.bmp
new file mode 100644
index 0000000000..3cfcd70b63
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round2.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round2.bmp
new file mode 100644
index 0000000000..6b95401b4b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round3.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round3.bmp
new file mode 100644
index 0000000000..4762afaa3a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round4.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round4.bmp
new file mode 100644
index 0000000000..b7ce2e8228
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round4.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round5.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round5.bmp
new file mode 100644
index 0000000000..5c581141ac
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round5.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round6.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round6.bmp
new file mode 100644
index 0000000000..3664031249
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round6.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round7.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round7.bmp
new file mode 100644
index 0000000000..e6d62e7909
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round7.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round_small.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round_small.bmp
new file mode 100644
index 0000000000..3a0d9cb827
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round_small.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round_small2.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round_small2.bmp
new file mode 100644
index 0000000000..224687dab6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round_small2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_round_white.bmp b/crawl-ref/source/rltiles/player/hand2/shield_round_white.bmp
new file mode 100644
index 0000000000..807ae7ddd4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_round_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_shaman.bmp b/crawl-ref/source/rltiles/player/hand2/shield_shaman.bmp
new file mode 100644
index 0000000000..22416b0c95
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_shaman.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/shield_skull.bmp b/crawl-ref/source/rltiles/player/hand2/shield_skull.bmp
new file mode 100644
index 0000000000..832d796f7d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/shield_skull.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/short_sword_slant.bmp b/crawl-ref/source/rltiles/player/hand2/short_sword_slant.bmp
new file mode 100644
index 0000000000..e193ff99c5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/short_sword_slant.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/spark.bmp b/crawl-ref/source/rltiles/player/hand2/spark.bmp
new file mode 100644
index 0000000000..9e0bb80b6f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/spark.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/torch.bmp b/crawl-ref/source/rltiles/player/hand2/torch.bmp
new file mode 100644
index 0000000000..71ffcdeb37
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/torch.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand2/torsh2.bmp b/crawl-ref/source/rltiles/player/hand2/torsh2.bmp
new file mode 100644
index 0000000000..4062b02edf
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/hand2/torsh2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/art_dragonhelm.bmp b/crawl-ref/source/rltiles/player/head/art_dragonhelm.bmp
new file mode 100644
index 0000000000..1317dcd456
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/art_dragonhelm.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/band_blue.bmp b/crawl-ref/source/rltiles/player/head/band_blue.bmp
new file mode 100644
index 0000000000..ce6089ba97
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/band_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/band_magenta.bmp b/crawl-ref/source/rltiles/player/head/band_magenta.bmp
new file mode 100644
index 0000000000..037e1250c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/band_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/band_red.bmp b/crawl-ref/source/rltiles/player/head/band_red.bmp
new file mode 100644
index 0000000000..bf08de167c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/band_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/band_white.bmp b/crawl-ref/source/rltiles/player/head/band_white.bmp
new file mode 100644
index 0000000000..59c919e32f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/band_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/band_yellow.bmp b/crawl-ref/source/rltiles/player/head/band_yellow.bmp
new file mode 100644
index 0000000000..c76e112e56
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/band_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/bandana_ybrown.bmp b/crawl-ref/source/rltiles/player/head/bandana_ybrown.bmp
new file mode 100644
index 0000000000..c4f518cd92
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/bandana_ybrown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/black_horn.bmp b/crawl-ref/source/rltiles/player/head/black_horn.bmp
new file mode 100644
index 0000000000..321f8f9925
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/black_horn.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/black_horn2.bmp b/crawl-ref/source/rltiles/player/head/black_horn2.bmp
new file mode 100644
index 0000000000..5f6f5517b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/black_horn2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/blue_horn_gold.bmp b/crawl-ref/source/rltiles/player/head/blue_horn_gold.bmp
new file mode 100644
index 0000000000..c3521939b6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/blue_horn_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/brown_gold.bmp b/crawl-ref/source/rltiles/player/head/brown_gold.bmp
new file mode 100644
index 0000000000..73783e49b9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/brown_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/cap_black1.bmp b/crawl-ref/source/rltiles/player/head/cap_black1.bmp
new file mode 100644
index 0000000000..bd5948f3f4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/cap_black1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/cap_blue.bmp b/crawl-ref/source/rltiles/player/head/cap_blue.bmp
new file mode 100644
index 0000000000..662c2e1b11
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/cap_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/chain.bmp b/crawl-ref/source/rltiles/player/head/chain.bmp
new file mode 100644
index 0000000000..4027b099a1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/chain.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/cheek_red.bmp b/crawl-ref/source/rltiles/player/head/cheek_red.bmp
new file mode 100644
index 0000000000..88688d106e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/cheek_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/clown1.bmp b/crawl-ref/source/rltiles/player/head/clown1.bmp
new file mode 100644
index 0000000000..d816fde1f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/clown1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/cone_blue.bmp b/crawl-ref/source/rltiles/player/head/cone_blue.bmp
new file mode 100644
index 0000000000..603f0f78c6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/cone_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/cone_red.bmp b/crawl-ref/source/rltiles/player/head/cone_red.bmp
new file mode 100644
index 0000000000..30eedae930
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/cone_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/crown_gold.bmp b/crawl-ref/source/rltiles/player/head/crown_gold.bmp
new file mode 100644
index 0000000000..85516a4f98
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/crown_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/dyrovepreva.bmp b/crawl-ref/source/rltiles/player/head/dyrovepreva.bmp
new file mode 100644
index 0000000000..9c036c856a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/dyrovepreva.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/feather_blue.bmp b/crawl-ref/source/rltiles/player/head/feather_blue.bmp
new file mode 100644
index 0000000000..4c2d313c1d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/feather_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/feather_green.bmp b/crawl-ref/source/rltiles/player/head/feather_green.bmp
new file mode 100644
index 0000000000..41b5793d7a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/feather_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/feather_red.bmp b/crawl-ref/source/rltiles/player/head/feather_red.bmp
new file mode 100644
index 0000000000..487383f925
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/feather_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/feather_white.bmp b/crawl-ref/source/rltiles/player/head/feather_white.bmp
new file mode 100644
index 0000000000..e5f22a91d8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/feather_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/feather_yellow.bmp b/crawl-ref/source/rltiles/player/head/feather_yellow.bmp
new file mode 100644
index 0000000000..16538956c1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/feather_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/fhelm_gray3.bmp b/crawl-ref/source/rltiles/player/head/fhelm_gray3.bmp
new file mode 100644
index 0000000000..bc317dc551
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/fhelm_gray3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/fhelm_horn2.bmp b/crawl-ref/source/rltiles/player/head/fhelm_horn2.bmp
new file mode 100644
index 0000000000..93e582fa7e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/fhelm_horn2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/fhelm_horn_yellow.bmp b/crawl-ref/source/rltiles/player/head/fhelm_horn_yellow.bmp
new file mode 100644
index 0000000000..0b409ae9d4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/fhelm_horn_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/full_black.bmp b/crawl-ref/source/rltiles/player/head/full_black.bmp
new file mode 100644
index 0000000000..ac94134900
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/full_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/full_gold.bmp b/crawl-ref/source/rltiles/player/head/full_gold.bmp
new file mode 100644
index 0000000000..21becf0728
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/full_gold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/gandalf.bmp b/crawl-ref/source/rltiles/player/head/gandalf.bmp
new file mode 100644
index 0000000000..14e25c8209
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/gandalf.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hat_black.bmp b/crawl-ref/source/rltiles/player/head/hat_black.bmp
new file mode 100644
index 0000000000..f4afb2b794
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hat_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/healer.bmp b/crawl-ref/source/rltiles/player/head/healer.bmp
new file mode 100644
index 0000000000..e572e851e3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/healer.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/helm_gimli.bmp b/crawl-ref/source/rltiles/player/head/helm_gimli.bmp
new file mode 100644
index 0000000000..e41415082e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/helm_gimli.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/helm_green.bmp b/crawl-ref/source/rltiles/player/head/helm_green.bmp
new file mode 100644
index 0000000000..ccdd58eb75
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/helm_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/helm_plume.bmp b/crawl-ref/source/rltiles/player/head/helm_plume.bmp
new file mode 100644
index 0000000000..8b904b8048
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/helm_plume.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/helm_red.bmp b/crawl-ref/source/rltiles/player/head/helm_red.bmp
new file mode 100644
index 0000000000..a3e5f0cbd1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/helm_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_black2.bmp b/crawl-ref/source/rltiles/player/head/hood_black2.bmp
new file mode 100644
index 0000000000..e543acb49e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_black2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_cyan.bmp b/crawl-ref/source/rltiles/player/head/hood_cyan.bmp
new file mode 100644
index 0000000000..3ea8dba202
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_gray.bmp b/crawl-ref/source/rltiles/player/head/hood_gray.bmp
new file mode 100644
index 0000000000..499c8f3753
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_green.bmp b/crawl-ref/source/rltiles/player/head/hood_green.bmp
new file mode 100644
index 0000000000..718ac9e495
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_green2.bmp b/crawl-ref/source/rltiles/player/head/hood_green2.bmp
new file mode 100644
index 0000000000..3f01b3bd36
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_green2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_orange.bmp b/crawl-ref/source/rltiles/player/head/hood_orange.bmp
new file mode 100644
index 0000000000..470775f53e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_red.bmp b/crawl-ref/source/rltiles/player/head/hood_red.bmp
new file mode 100644
index 0000000000..2d41e30bf5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_red2.bmp b/crawl-ref/source/rltiles/player/head/hood_red2.bmp
new file mode 100644
index 0000000000..eca039f680
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_red2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_white.bmp b/crawl-ref/source/rltiles/player/head/hood_white.bmp
new file mode 100644
index 0000000000..1f5eee21d9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_white2.bmp b/crawl-ref/source/rltiles/player/head/hood_white2.bmp
new file mode 100644
index 0000000000..d3c80db3d3
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_white2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/hood_ybrown.bmp b/crawl-ref/source/rltiles/player/head/hood_ybrown.bmp
new file mode 100644
index 0000000000..2f2691b2f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/hood_ybrown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/horn_evil.bmp b/crawl-ref/source/rltiles/player/head/horn_evil.bmp
new file mode 100644
index 0000000000..74b09edbcd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/horn_evil.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/horn_gray.bmp b/crawl-ref/source/rltiles/player/head/horn_gray.bmp
new file mode 100644
index 0000000000..7e3be4ee94
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/horn_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/horned.bmp b/crawl-ref/source/rltiles/player/head/horned.bmp
new file mode 100644
index 0000000000..63d765a75c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/horned.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/horns1.bmp b/crawl-ref/source/rltiles/player/head/horns1.bmp
new file mode 100644
index 0000000000..89ac098e90
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/horns1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/horns2.bmp b/crawl-ref/source/rltiles/player/head/horns2.bmp
new file mode 100644
index 0000000000..182cf2d176
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/horns2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/horns3.bmp b/crawl-ref/source/rltiles/player/head/horns3.bmp
new file mode 100644
index 0000000000..34bfcf52e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/horns3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/iron1.bmp b/crawl-ref/source/rltiles/player/head/iron1.bmp
new file mode 100644
index 0000000000..a18ca11a33
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/iron1.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/iron2.bmp b/crawl-ref/source/rltiles/player/head/iron2.bmp
new file mode 100644
index 0000000000..d1de4df1f9
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/iron2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/iron3.bmp b/crawl-ref/source/rltiles/player/head/iron3.bmp
new file mode 100644
index 0000000000..e1bb7b920f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/iron3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/iron_red.bmp b/crawl-ref/source/rltiles/player/head/iron_red.bmp
new file mode 100644
index 0000000000..956b7d6995
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/iron_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/isildur.bmp b/crawl-ref/source/rltiles/player/head/isildur.bmp
new file mode 100644
index 0000000000..4a6a23ce97
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/isildur.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/mummy.bmp b/crawl-ref/source/rltiles/player/head/mummy.bmp
new file mode 100644
index 0000000000..002ed4d7a6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/mummy.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/ninja_black.bmp b/crawl-ref/source/rltiles/player/head/ninja_black.bmp
new file mode 100644
index 0000000000..db64002b33
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/ninja_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/straw.bmp b/crawl-ref/source/rltiles/player/head/straw.bmp
new file mode 100644
index 0000000000..e09fb40bb2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/straw.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/taiso_blue.bmp b/crawl-ref/source/rltiles/player/head/taiso_blue.bmp
new file mode 100644
index 0000000000..145d389c49
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/taiso_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/taiso_magenta.bmp b/crawl-ref/source/rltiles/player/head/taiso_magenta.bmp
new file mode 100644
index 0000000000..9b608f89a2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/taiso_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/taiso_red.bmp b/crawl-ref/source/rltiles/player/head/taiso_red.bmp
new file mode 100644
index 0000000000..ba0872c792
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/taiso_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/taiso_white.bmp b/crawl-ref/source/rltiles/player/head/taiso_white.bmp
new file mode 100644
index 0000000000..92121934ae
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/taiso_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/taiso_yellow.bmp b/crawl-ref/source/rltiles/player/head/taiso_yellow.bmp
new file mode 100644
index 0000000000..b52c42b466
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/taiso_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/turban_brown.bmp b/crawl-ref/source/rltiles/player/head/turban_brown.bmp
new file mode 100644
index 0000000000..c32af182e5
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/turban_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/turban_purple.bmp b/crawl-ref/source/rltiles/player/head/turban_purple.bmp
new file mode 100644
index 0000000000..4a29746d96
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/turban_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/turban_white.bmp b/crawl-ref/source/rltiles/player/head/turban_white.bmp
new file mode 100644
index 0000000000..25827d950f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/turban_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_blackgold.bmp b/crawl-ref/source/rltiles/player/head/wizard_blackgold.bmp
new file mode 100644
index 0000000000..336998fb8f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_blackgold.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_blackred.bmp b/crawl-ref/source/rltiles/player/head/wizard_blackred.bmp
new file mode 100644
index 0000000000..556050018c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_blackred.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_blue.bmp b/crawl-ref/source/rltiles/player/head/wizard_blue.bmp
new file mode 100644
index 0000000000..dfb4aaad4d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_bluegreen.bmp b/crawl-ref/source/rltiles/player/head/wizard_bluegreen.bmp
new file mode 100644
index 0000000000..1338eca41f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_bluegreen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_brown.bmp b/crawl-ref/source/rltiles/player/head/wizard_brown.bmp
new file mode 100644
index 0000000000..4531d919f8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_darkgreen.bmp b/crawl-ref/source/rltiles/player/head/wizard_darkgreen.bmp
new file mode 100644
index 0000000000..227d3b3e98
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_darkgreen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_purple.bmp b/crawl-ref/source/rltiles/player/head/wizard_purple.bmp
new file mode 100644
index 0000000000..b28e21d33f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_purple.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_red.bmp b/crawl-ref/source/rltiles/player/head/wizard_red.bmp
new file mode 100644
index 0000000000..348c1c59c4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/wizard_white.bmp b/crawl-ref/source/rltiles/player/head/wizard_white.bmp
new file mode 100644
index 0000000000..1fa53302b0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/wizard_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/head/yellow_wing.bmp b/crawl-ref/source/rltiles/player/head/yellow_wing.bmp
new file mode 100644
index 0000000000..d999abcba6
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/head/yellow_wing.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/belt_gray.bmp b/crawl-ref/source/rltiles/player/leg/belt_gray.bmp
new file mode 100644
index 0000000000..043f933ae1
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/belt_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/belt_redbrown.bmp b/crawl-ref/source/rltiles/player/leg/belt_redbrown.bmp
new file mode 100644
index 0000000000..2848307643
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/belt_redbrown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/bikini_red.bmp b/crawl-ref/source/rltiles/player/leg/bikini_red.bmp
new file mode 100644
index 0000000000..d374d3e57a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/bikini_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/chunli.bmp b/crawl-ref/source/rltiles/player/leg/chunli.bmp
new file mode 100644
index 0000000000..289f235555
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/chunli.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/garter.bmp b/crawl-ref/source/rltiles/player/leg/garter.bmp
new file mode 100644
index 0000000000..cc49c0ea3e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/garter.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/leg_armor00.bmp b/crawl-ref/source/rltiles/player/leg/leg_armor00.bmp
new file mode 100644
index 0000000000..e2546da02e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/leg_armor00.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/leg_armor01.bmp b/crawl-ref/source/rltiles/player/leg/leg_armor01.bmp
new file mode 100644
index 0000000000..eecf12223e
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/leg_armor01.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/leg_armor02.bmp b/crawl-ref/source/rltiles/player/leg/leg_armor02.bmp
new file mode 100644
index 0000000000..69271609bd
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/leg_armor02.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/leg_armor03.bmp b/crawl-ref/source/rltiles/player/leg/leg_armor03.bmp
new file mode 100644
index 0000000000..4d92eaf305
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/leg_armor03.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/leg_armor04.bmp b/crawl-ref/source/rltiles/player/leg/leg_armor04.bmp
new file mode 100644
index 0000000000..3b379e6374
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/leg_armor04.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/leg_armor05.bmp b/crawl-ref/source/rltiles/player/leg/leg_armor05.bmp
new file mode 100644
index 0000000000..a633224d43
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/leg_armor05.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/loincloth_red.bmp b/crawl-ref/source/rltiles/player/leg/loincloth_red.bmp
new file mode 100644
index 0000000000..0190eab889
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/loincloth_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/long_red.bmp b/crawl-ref/source/rltiles/player/leg/long_red.bmp
new file mode 100644
index 0000000000..024af2cfee
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/long_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/metal_gray.bmp b/crawl-ref/source/rltiles/player/leg/metal_gray.bmp
new file mode 100644
index 0000000000..5a9e945c8a
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/metal_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/metal_green.bmp b/crawl-ref/source/rltiles/player/leg/metal_green.bmp
new file mode 100644
index 0000000000..827ded5de2
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/metal_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants16.bmp b/crawl-ref/source/rltiles/player/leg/pants16.bmp
new file mode 100644
index 0000000000..d24d82dddc
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants16.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_black.bmp b/crawl-ref/source/rltiles/player/leg/pants_black.bmp
new file mode 100644
index 0000000000..31d59d4e4c
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_black.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_blue.bmp b/crawl-ref/source/rltiles/player/leg/pants_blue.bmp
new file mode 100644
index 0000000000..cf8a0f90e0
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_brown.bmp b/crawl-ref/source/rltiles/player/leg/pants_brown.bmp
new file mode 100644
index 0000000000..8ae395f68f
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_darkgreen.bmp b/crawl-ref/source/rltiles/player/leg/pants_darkgreen.bmp
new file mode 100644
index 0000000000..9437ef7539
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_darkgreen.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_l_white.bmp b/crawl-ref/source/rltiles/player/leg/pants_l_white.bmp
new file mode 100644
index 0000000000..b1da35bdd8
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_l_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_orange.bmp b/crawl-ref/source/rltiles/player/leg/pants_orange.bmp
new file mode 100644
index 0000000000..3957002c87
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_orange.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_red.bmp b/crawl-ref/source/rltiles/player/leg/pants_red.bmp
new file mode 100644
index 0000000000..8fdc8b71a4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_short_brown.bmp b/crawl-ref/source/rltiles/player/leg/pants_short_brown.bmp
new file mode 100644
index 0000000000..bc680c2e92
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_short_brown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_short_brown3.bmp b/crawl-ref/source/rltiles/player/leg/pants_short_brown3.bmp
new file mode 100644
index 0000000000..8ec3e71605
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_short_brown3.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_short_darkbrown.bmp b/crawl-ref/source/rltiles/player/leg/pants_short_darkbrown.bmp
new file mode 100644
index 0000000000..3879c1c957
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_short_darkbrown.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pants_short_gray.bmp b/crawl-ref/source/rltiles/player/leg/pants_short_gray.bmp
new file mode 100644
index 0000000000..94e23ca02d
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pants_short_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/pj.bmp b/crawl-ref/source/rltiles/player/leg/pj.bmp
new file mode 100644
index 0000000000..80fdb7e4be
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/pj.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/skirt_blue.bmp b/crawl-ref/source/rltiles/player/leg/skirt_blue.bmp
new file mode 100644
index 0000000000..0bcf2202aa
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/skirt_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/skirt_green.bmp b/crawl-ref/source/rltiles/player/leg/skirt_green.bmp
new file mode 100644
index 0000000000..2d8ed68a96
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/skirt_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/skirt_red.bmp b/crawl-ref/source/rltiles/player/leg/skirt_red.bmp
new file mode 100644
index 0000000000..6f1164ccaf
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/skirt_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/skirt_white.bmp b/crawl-ref/source/rltiles/player/leg/skirt_white.bmp
new file mode 100644
index 0000000000..f17ce1145b
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/skirt_white.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/skirt_white2.bmp b/crawl-ref/source/rltiles/player/leg/skirt_white2.bmp
new file mode 100644
index 0000000000..68320f9ec4
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/skirt_white2.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/leg/trouser_green.bmp b/crawl-ref/source/rltiles/player/leg/trouser_green.bmp
new file mode 100644
index 0000000000..41e694c8c7
--- /dev/null
+++ b/crawl-ref/source/rltiles/player/leg/trouser_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/tool/bm.c b/crawl-ref/source/rltiles/tool/bm.c
new file mode 100644
index 0000000000..cd208cecb2
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/bm.c
@@ -0,0 +1,558 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "palette.h"
+
+char cpath[1024];
+/*** PATH separator ***/
+
+#if defined(_WIN32)|| defined(WINDOWS)
+#define PATHSEP '\\'
+#else
+#define PATHSEP '/'
+#endif
+
+void process_cpath(char *path){
+ int i, pos;
+#ifdef LINUX
+ cpath[0]=0;
+ return;
+#endif
+ pos = 0;
+ cpath[0]=0;
+ printf("path=%s\n",path);
+ for(i=0;i<strlen(path);i++)if(path[i]==PATHSEP)pos=i;
+
+ if(pos!=0){
+ pos++;
+ strncpy(cpath,path,pos);
+ cpath[pos]=0;
+ printf("pos=%d\n",pos);
+ }
+}
+
+void fixalloc(char *buf[3], int size)
+{
+ buf[0]=malloc(size);
+ buf[1]=malloc(size);
+ buf[2]=malloc(size);
+}
+
+#if 0
+#define WORD unsigned short
+#define DWORD unsigned int
+
+ typedef struct tagBITMAPFILEHEADER {
+ WORD bfType; // "BM"
+ DWORD bfSize; // ե륵
+ WORD bfReserved1; // 0
+ WORD bfReserved2; // 0
+ DWORD bfOffBits; // DIBեƬԥǡ
+ } BITMAPFILEHEADER;
+
+ typedef struct tagBITMAPINFOHEADER {
+ DWORD biSize; // ι¤ΤΥ
+ DWORD biWidth; // ʥԥñ̡
+ DWORD biHeight; // ⤵ʥԥñ̡
+ WORD biPlanes; // 1
+ WORD biBitCount; // 1ԥ뤢Υ顼ӥåȤο
+ DWORD biCompression; // BI_RGB, BI_RLE8, BI_RLE4Τ줫
+ DWORD biSizeImage; // ᡼Хȿ
+ DWORD biXPelsPerMeter; // 0ޤϿʿ
+ DWORD biYPelsPerMeter; // 0ޤϿľ
+ DWORD biClrUsed; // ̾0biBitCountʲΥ顼
+ DWORD biClrImportant; // ̾0
+ } BITMAPINFOHEADER;
+#endif
+
+#define NHASH 512
+#define HASHMAX 100
+int hashflag;
+
+int hashn[NHASH];
+int hashtab[NHASH][HASHMAX][4];
+#define RGB2H(r,g,b) ( ((r)>>5)|(((b)>>5)<<3)|(((g)>>5)<<6) )
+int palr[256],palg[256],palb[256];
+
+unsigned int rev16(unsigned char *x)
+{
+ int r=x[1];
+ r = (r<<8)|x[0];
+ return r;
+}
+unsigned int rev32(unsigned char *x)
+{
+ int r=x[3];
+ r = (r<<8)|x[2];
+ r = (r<<8)|x[1];
+ r = (r<<8)|x[0];
+ return r;
+}
+
+/***** BMP read *****/
+int bmread(char *fn, int *x, int *y, unsigned char *buf3[3])
+{
+unsigned char bmHead[14];
+unsigned char bmInfo[40];
+
+unsigned char pbuf[1024];
+int i,j,k;
+int xx,yy,x0,y0;
+FILE *fp;
+unsigned char *b0;
+int bits, ofbits;
+
+if(NULL==(fp=fopen(fn,"rb")))
+{
+ //printf("no file %s:",fn);
+ return(1);
+}
+ fread(&bmHead,1,14,fp);
+ fread(&bmInfo,1,40,fp);
+
+xx=rev32(&bmInfo[4]);
+yy=rev32(&bmInfo[8]);
+bits=rev16(&bmInfo[14]);
+
+//fprintf(stderr, "wx = %d wy = %d\n",xx,yy);
+
+if(!buf3[0])buf3[0]=malloc(xx*yy);
+if(!buf3[1])buf3[1]=malloc(xx*yy);
+if(!buf3[2])buf3[2]=malloc(xx*yy);
+
+ofbits = rev32(&bmHead[10]);
+
+if(bits==24){
+fseek(fp, ofbits, SEEK_SET);
+
+b0=malloc(xx*yy*3);
+fread(b0,1,3*xx*yy,fp);
+fclose(fp);
+j=0;
+ for(y0=yy-1;y0>=0;y0--){
+ for(x0=0;x0<xx;x0++){
+ i=y0*xx+x0;
+ k=b0[j];j++; buf3[2][i]=k;
+ k=b0[j];j++; buf3[1][i]=k;
+ k=b0[j];j++; buf3[0][i]=k;
+ }}
+free(b0);
+*x=xx;*y=yy;
+return(0);
+}
+
+ if(bits==4){
+b0=malloc(xx*yy/2);
+k=ofbits -54;
+k/=4;
+fread(pbuf,1,k*4,fp);
+fread(b0,1,xx*yy/2,fp);
+fclose(fp);
+
+j=0;
+for(y0=yy-1;y0>=0;y0--){
+for(x0=0;x0<xx;x0++){i=y0*xx+x0;
+if(j&1) k=b0[j/2]&0x0f;
+ else k=b0[j/2]>>4;
+j++;
+
+
+buf3[0][i]=pbuf[ k*4+2 ];
+buf3[1][i]=pbuf[ k*4+1 ];
+buf3[2][i]=pbuf[ k*4+0 ];
+}}
+free(b0);
+*x=xx;*y=yy;
+return(0);
+
+ }
+
+
+
+b0=malloc(xx*yy);
+//k=buf[46]+buf[47]*256;
+k=ofbits -54;
+fread(pbuf,1,k,fp);
+fread(b0,1,xx*yy,fp);
+fclose(fp);
+
+j=0;
+for(y0=yy-1;y0>=0;y0--){
+for(x0=0;x0<xx;x0++){i=y0*xx+x0;
+k=b0[j];j++;
+buf3[0][i]=pbuf[ k*4+2 ];
+buf3[1][i]=pbuf[ k*4+1 ];
+buf3[2][i]=pbuf[ k*4+0 ];
+}}
+free(b0);
+*x=xx;*y=yy;
+return(0);
+}
+
+
+void forcereg(i) int i;{
+int h,n,r,g,b;
+r=palr[i];
+g=palg[i];
+b=palb[i];
+
+h=RGB2H(r,g,b);
+n=hashn[h];
+hashtab[h][n][0]=i;
+hashtab[h][n][1]=r;
+hashtab[h][n][2]=g;
+hashtab[h][n][3]=b;
+n++;
+hashn[h]=n;
+}
+
+void reg_rgb(int i, int r, int g, int b)
+{
+int h,n;
+
+h=RGB2H(r,g,b);
+n=hashn[h];
+hashtab[h][n][0]=i;
+hashtab[h][n][1]=r;
+hashtab[h][n][2]=g;
+hashtab[h][n][3]=b;
+n++;
+hashn[h]=n;
+}
+
+int cidx(r,g,b) int r,g,b;{
+int r2,r2min,i,h,n,ix,dr,dg,db;
+
+ ix = -1;
+ if(hashflag){
+ h=RGB2H(r,g,b);
+ n=hashn[h];
+ for(i=0;i<n;i++)
+ {
+ if( (r==hashtab[h][i][1])&&(g==hashtab[h][i][2])&&(b==hashtab[h][i][3]) )
+ {
+ ix=hashtab[h][i][0];
+ break;
+ }
+ }
+ }
+
+ if(ix==-1){
+ r2min=100000000;
+ for(i=0;i<256;i++)
+ {
+ dr=palr[i]-r;
+ dg=palg[i]-g;
+ db=palb[i]-b;
+ r2=(dr*dr+dg*dg+db*db);
+ //r2+=(dr+dg+db)*(dr+dg+db);
+ if(r2<r2min){ ix=i;r2min=r2;}
+ }
+
+ if(hashflag==1){
+ fprintf(stderr,"Color %02x%02x%02xapproximated\n",r,g,b);
+
+ hashtab[h][n][0]=ix;
+ hashtab[h][n][1]=r;
+ hashtab[h][n][2]=g;
+ hashtab[h][n][3]=b;
+ n++;
+ hashn[h]=n;
+ if(n==HASHMAX)
+ {
+ fprintf(stderr,"HASHMAX exceed! Turning hash off\n");
+ hashflag=0;
+ }
+ }
+ }
+return(ix);
+}
+
+void put4(i,fp) int i;FILE *fp;{
+fputc( ((i>> 0)&0xff) ,fp);
+fputc( ((i>> 8)&0xff) ,fp);
+fputc( ((i>>16)&0xff) ,fp);
+fputc( ((i>>24)&0xff) ,fp);
+}
+
+void put2(i,fp) int i;FILE *fp;{
+fputc( ((i>> 0)&0xff) ,fp);
+fputc( ((i>> 8)&0xff) ,fp); }
+
+void bmwrite(char *fn, int x, int y, unsigned char *buf3[3])
+{
+FILE *fp;
+int i,j,k,xx,yy;
+
+hashflag=1;
+if(fn[0]==0) fp=stdout; else fp=fopen(fn,"wb");
+if (!fp)
+{
+ printf("Error opening %s.\n", fn);
+ exit(-1);
+}
+fputc('B',fp);fputc('M',fp);
+put4(1024+54+x*y,fp);
+put4(0,fp);
+put4(0x436,fp);
+put4(0x28,fp);
+put4(x,fp); put4(y,fp);
+put2(1,fp);put2(8,fp);
+put4(0,fp);put4(x*y,fp);put4(0xb6d,fp);put4(0xb6d,fp);
+put4(256,fp);put4(256,fp);
+fwrite(pbuf,1,1024,fp);
+for(yy=y-1;yy>=0;yy--){
+for(xx=0;xx<x;xx++){i=yy*x+xx;
+k=cidx( buf3[0][i],buf3[1][i],buf3[2][i] );fputc(k,fp);}}
+fclose(fp);}
+
+void bmwrite24(char *fn, int x, int y, unsigned char *buf3[3])
+{
+FILE *fp;
+int i,xx,yy;
+
+if(fn[0]==0) fp=stdout; else fp=fopen(fn,"wb");
+
+fputc('B',fp);fputc('M',fp);
+put4(54+3*x*y,fp);
+put4(0,fp);
+put4(54,fp);
+put4(0x28,fp);
+put4(x,fp); put4(y,fp);
+put2(1,fp);put2(24,fp);
+put4(0,fp);put4(x*y*3,fp);put4(0xb6d,fp);put4(0xb6d,fp);
+put4(0,fp);put4(0,fp);
+for(yy=y-1;yy>=0;yy--){
+for(xx=0;xx<x;xx++){i=yy*x+xx;
+fputc(buf3[2][i],fp);
+fputc(buf3[1][i],fp);
+fputc(buf3[0][i],fp);
+}}
+fclose(fp);}
+
+
+void bmwrite_dither(char *fn, int x, int y, unsigned char *buf3[3],
+ unsigned char *flag)
+{
+ FILE *fp;
+ int i,j,k,xx,yy;
+ int *err_c[3], *err_n[3];
+ unsigned char *buf;
+ int dx,idat[3],udat[3],putdat[3],err[3];
+
+ fprintf(stderr,"Saving %s x=%d y=%d\n",fn,x,y);
+
+ for(i=0;i<3;i++){
+ err_c[i]=malloc(sizeof(int)*(x+2));
+ err_n[i]=malloc(sizeof(int)*(x+2));
+ for(j=0;j<x+2;j++)err_c[i][j]=err_n[i][j]=0;
+ }
+ buf=malloc(x*y);
+
+for(yy=0;yy<y;yy++){
+//fprintf(stderr,"Y=%d x=%d\n",yy,x);
+
+ for(i=0;i<3;i++){
+ for(j=0;j<x+2;j++){err_c[i][j]=err_n[i][j];err_n[i][j]=0;}}
+
+
+if((yy&1)==0){//even
+
+for(xx=0;xx<x;xx++){
+int do_ep = 1;
+idat[0] = buf3[0][ xx+yy*x];
+idat[1] = buf3[1][ xx+yy*x];
+idat[2] = buf3[2][ xx+yy*x];
+for(i=0;i<3;i++) {idat[i] += err_c[i][xx+1];
+udat[i]=idat[i];if(udat[i]<0)udat[i]=0;
+if(udat[i]>255)udat[i]=255;}
+
+if(buf3[0][xx+yy*x]==0x47 && buf3[1][xx+yy*x]==0x6c && buf3[2][xx+yy*x]==0x6c)
+ do_ep=0;
+if (flag!=NULL)
+{
+ if (flag[xx+yy*x]==0) do_ep=0;
+}
+if (do_ep == 0)
+k=cidx( buf3[0][xx+yy*x],buf3[1][xx+yy*x],buf3[2][xx+yy*x]);
+else
+k=cidx( udat[0],udat[1],udat[2]);
+
+buf[xx+yy*x]=k;
+//fprintf(stderr,"Y=%d xx=%d\n",yy,xx);
+
+putdat[0]=palr[k];
+putdat[1]=palg[k];
+putdat[2]=palb[k];
+for(i=0;i<3;i++) {
+ err[i]=(idat[i]-putdat[i]+8)/16;
+ //if(flag[xx+yy*x]!=1)err[i]=0;
+ err_c[i][xx+1+1] += err[i]*7;
+ err_n[i][xx-1+1] += err[i]*3;
+ err_n[i][xx+0+1] += err[i]*5;
+ err_n[i][xx+1+1] += err[i];
+}/**i**/
+}/**x**/
+}else{
+for(xx=x-1;xx>=0;xx--){
+int do_ep=1;
+idat[0] = buf3[0][ xx+yy*x];
+idat[1] = buf3[1][ xx+yy*x];
+idat[2] = buf3[2][ xx+yy*x];
+for(i=0;i<3;i++) {idat[i] += err_c[i][xx+1];
+udat[i]=idat[i];if(udat[i]<0)udat[i]=0;
+if(udat[i]>255)udat[i]=255;}
+
+if(buf3[0][xx+yy*x]==0x47 && buf3[1][xx+yy*x]==0x6c && buf3[2][xx+yy*x]==0x6c)
+ do_ep=0;
+if (flag!=NULL)
+{
+ if (flag[xx+yy*x]==0) do_ep=0;
+}
+if (do_ep == 0)
+k=cidx( buf3[0][xx+yy*x],buf3[1][xx+yy*x],buf3[2][xx+yy*x]);
+else
+k=cidx( udat[0],udat[1],udat[2]);
+
+buf[xx+yy*x]=(unsigned char)k;
+putdat[0]=palr[k];
+putdat[1]=palg[k];
+putdat[2]=palb[k];
+for(i=0;i<3;i++) {
+ err[i]=(idat[i]-putdat[i]+8)/16;
+ //if(flag[xx+yy*x]!=1)err[i]=0;
+
+ err_c[i][xx-1+1] += err[i]*7;
+ err_n[i][xx+1+1] += err[i]*3;
+ err_n[i][xx+0+1] += err[i]*5;
+ err_n[i][xx-1+1] += err[i];
+}/*i*/
+}/*x*/
+
+}/*else*/
+}/*y*/
+
+for(i=0;i<3;i++){
+free(err_c[i]);
+free(err_n[i]);}
+
+if(fn[0]==0) fp=stdout; else fp=fopen(fn,"wb");
+fputc('B',fp);fputc('M',fp);
+put4(1024+54+x*y,fp);
+put4(0,fp);
+put4(0x436,fp);
+put4(0x28,fp);
+put4(x,fp);put4(y,fp);
+put2(1,fp);put2(8,fp);
+put4(0,fp);put4(x*y,fp);put4(0xb6d,fp);put4(0xb6d,fp);
+put4(256,fp);put4(256,fp);
+fwrite(pbuf,1,1024,fp);
+for(yy=y-1;yy>=0;yy--){
+for(xx=0;xx<x;xx++){i=yy*x+xx; fputc(buf[i],fp);}}
+fclose(fp);
+free(buf);
+
+}/** exit**/
+
+
+void myfget(ss,fp) char *ss;FILE *fp;{
+#define STRMAX 200
+/****
+int ix=1;
+while(1){ ss[0]=getc(fp);
+ if( ((ss[0]!=32)&&(ss[0]!='#'))||(feof(fp)))break;
+ if(ss[0]=='#') fgets(ss,99,fp);}
+
+while(1){
+ ss[ix]=getc(fp);ix++;
+ if( (ss[ix-1]<33)||(ix==STRMAX)||(feof(fp)) )break;}
+ss[ix-1]=0;printf("%s\n",ss);
+****/
+int l;
+while(1){
+ fgets(ss,STRMAX,fp);
+ if(feof(fp)){fprintf(stderr,"FILE EOF\n");return;}
+ if(ss[0]=='#')continue;
+ if(ss[0]<32)continue;
+ break;
+}
+ l=strlen(ss);ss[l-1]=0;
+}
+
+void oldcolors()
+{
+int coldat[] = {
+ // Old gold
+ 0xE6, 0x68541f,
+ 0xE7, 0x807020,
+ 0xE8, 0xaa8834,
+ 0xEA, 0xf2c44d,
+ 0xEC, 0xfcfc99,
+
+ 0xe6, 0x604818,
+ 0xe7, 0x806020,
+ 0xe8, 0xa07828,
+ 0xe9, 0xc09030,
+ 0xea, 0xe0a838,
+ 0xeb, 0xffc040,
+ //Old zombie
+ 0xee, 0x756958,
+ 0xef, 0x91876e,
+ 0xf0, 0xab9a81,
+ //Old brass
+ 0xf1, 0xe0c0a0,
+ 0xe9, 0xd0a850
+ -1, -1
+};
+
+ int i=0;
+
+ while(coldat[i]!= -1)
+ {
+ int ix = coldat[i+0];
+ int col= coldat[i+1];
+ int r= col>>16;
+ int g= (col>>8)&0xff;
+ int b= (col)&0xff;
+
+ reg_rgb( ix,r,g,b);
+ palr[ix]=r;
+ palg[ix]=g;
+ palb[ix]=b;
+ i+=2;
+ }
+}
+
+void stdpal(){
+int i;
+
+ for(i=0;i<256;i++){
+ palr[i]=pbuf[i*4+2];
+ palg[i]=pbuf[i*4+1];
+ palb[i]=pbuf[i*4+0];
+ }
+ for(i=0;i<NHASH;i++)hashn[i]=0;
+ for(i=0;i<256;i++)forcereg(i);
+
+ oldcolors();
+}
+
+
+int getval(char *buf, char *tag, int *val)
+{
+ int len = strlen(tag);
+ if(buf[0]!='%') return 0;
+ if (strncmp(&buf[1], tag, len)!=0) return 0;
+ *val = atoi(&buf[len+2]);
+ return 1;
+}
+
+int getname(char *buf, char *tag, char *name)
+{
+ int len = strlen(tag);
+ if(buf[0]!='%') return 0;
+ if (strncmp(&buf[1], tag, len)!=0) return 0;
+ strcpy(name, &buf[len+2]);
+ return 1;
+}
+
diff --git a/crawl-ref/source/rltiles/tool/bm.h b/crawl-ref/source/rltiles/tool/bm.h
new file mode 100644
index 0000000000..8197dd5d4f
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/bm.h
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+extern int bmread(char *fn, int *x, int *y, unsigned char *buf3[3]);
+extern void fixalloc(char *buf[3], int size);
+extern void bmwrite(char *fn, int x, int y, unsigned char *buf3[3]);
+extern void bmwrite24(char *fn, int x, int y, unsigned char *buf3[3]);
+extern void bmwrite_dither(char *fn, int x, int y, unsigned char *buf3[3],
+ unsigned char *flag);
+extern void stdpal();
+extern void myfget(char *ss, FILE *fp);
+extern int getval(char *buf, char *tag, int *val);
+extern int getname(char *buf, char *tag, char *name);
+extern void process_cpath(char *path);
+extern void newgold();
+
+
+/*** PATH to this program ***/
+extern char cpath[1024];
+#if defined(_WIN32)|| defined(WINDOWS)
+#define PATHSEP '\\'
+#else
+#define PATHSEP '/'
+#endif
+
diff --git a/crawl-ref/source/rltiles/tool/dcpl.c b/crawl-ref/source/rltiles/tool/dcpl.c
new file mode 100644
index 0000000000..ef9b59fb31
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/dcpl.c
@@ -0,0 +1,581 @@
+#include "bm.h"
+
+/** Some global **/
+//Flags
+int corpse, mesh, slant,rim;
+// Files
+FILE *mfp,*sfp;
+//Strings
+char outname[1024], subsname[200], sdir[200];
+char realname[1024];
+
+/** Parts related **/
+int parts_n;
+#define MAXPARTS 20
+int parts_nx[MAXPARTS], parts_ny[MAXPARTS];
+int parts_ox[MAXPARTS], parts_oy[MAXPARTS];
+int parts_start[MAXPARTS], parts_number[MAXPARTS];
+
+char parts_names[MAXPARTS][64];
+
+int parts_comment_ofs[MAXPARTS];
+int n_comments, pos_comment;
+#define MAXTOTAL 1000
+int part_comment_ofs[MAXTOTAL];
+char comment[MAXTOTAL*60];
+
+int part_x,part_y;
+int part_n;
+int part_nx,part_ny;
+char part_name[32];
+int part_wx, part_wy, part_ox, part_oy;
+
+/*** BUFFER MEMORY ***/
+#define XX 30
+int xx0;
+#define LX (XX)
+
+
+/*** tmp buffer, floor , final output, final queue ***/
+unsigned char *tbuf[3],*fbuf[3],*dbuf[3], *obuf[3];
+
+/*** normal floor*/
+#define WOADR(x,y,xx,yy) \
+((x)*32+xx+ xx0*32*((y)*32+yy))
+
+#define ADR(x,y) ((x)+(y)*32)
+
+/*** output width/height in block ***/
+int bx,by;
+
+/****************************/
+/* Wrapper routines ********/
+/**************************/
+int load_pxxx(fnam)
+ char *fnam;
+{
+ int x,y;
+
+ sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,fnam);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+ sprintf(realname,"%s%s.bmp",cpath,fnam);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+ if(subsname[0])
+ {
+ sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,subsname);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+ sprintf(realname,"%s%s.bmp",cpath,subsname);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+ }
+
+ return 1;
+}
+
+
+void clr_buf()
+{
+int xx,yy;
+
+ for(xx=0;xx<32;xx++)
+ {
+ for(yy=0;yy<32;yy++)
+ {
+ dbuf[0][ ADR(xx,yy) ]=0x47;
+ dbuf[1][ ADR(xx,yy) ]=0x6c;
+ dbuf[2][ ADR(xx,yy) ]=0x6c;
+ }
+ }
+}
+
+void cp_floor()
+{
+ int xx,yy,c;
+ for(xx=0;xx<32;xx++)
+ for(yy=0;yy<32;yy++)
+ for(c=0;c<3;c++)
+ dbuf[c][ ADR(xx,yy) ]=fbuf[c][ ADR(xx,yy)];
+}
+
+void cp_monst_32()
+{
+ int xx,yy,c,dd[3],ad;
+ char dflag[33][32];
+ int xmin,xmax,ymin,ymax,ox,oy;
+
+ if(corpse==1 )
+ {
+ xmin=ymin=31;
+ xmax=ymax=0;
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ ad=ADR(xx,yy);
+ for(c=0;c<3;c++)dd[c]=tbuf[c][ad];
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+ if(xx<xmin)xmin=xx;
+ if(xx>xmax)xmax=xx;
+ if(yy<ymin)ymin=yy;
+ if(yy>ymax)ymax=yy;
+ }
+ }
+ ox=(xmax+xmin)/2-16;
+ oy=(ymax+ymin)/2-16;
+ }
+
+ /** copy loop **/
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ dflag[xx][yy]=0;
+ ad=ADR(xx,yy);
+
+ if(corpse==1)
+ {
+ int x1=xx+ox;
+ int y1=(yy+oy)*2-16;
+ int cy=18;
+ if(xx<4 || xx>=28)cy+=2;else
+ if(xx<12 || xx>=20) cy+=1;
+
+ if(yy>=cy-1 && yy<=cy+0)continue;
+ x1 += (y1-16)/4;
+ if(y1>=cy){y1-=2;x1-=3;}else {y1 +=2;x1+=3;}
+ if(x1<0 || x1>=32 || y1<0 || y1>=32)continue;
+ ad=ADR(x1,y1);
+ }
+
+ /*** normal***/
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+
+ if(mesh==2)
+ {
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c))
+ {
+ if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+ }
+ if(mesh==1)
+ {
+ if((((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+ }
+
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ if( (corpse==1) &&(dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR(xx,yy)]=dd[c];}
+ dflag[xx][yy]=1;
+ }
+ }/*XY*/
+
+#if 1
+ if(corpse==1)
+ {
+ for(xx=0;xx<32;xx++)
+ {
+ int cy=18;
+ if(xx<4 || xx>=28)cy+=2;else
+ if(xx<12 || xx>=20) cy+=1;
+ if(dflag[xx][cy-2]==1 && dflag[xx][cy+1]==1 )
+ {
+ for(yy=cy-1;yy<=cy-0;yy++)
+ {
+ dbuf[0][ADR(xx,yy)]=32;
+ dbuf[1][ADR(xx,yy)]=0;
+ dbuf[2][ADR(xx,yy)]=0;
+ dflag[xx][yy]=1;
+ }
+ }
+ }
+
+ /** shade**/
+ for(xx=1;xx<32;xx++){
+ for(yy=1;yy<32;yy++){
+ if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==1)
+ {
+ dbuf[0][ADR(xx,yy)]=0;
+ dbuf[1][ADR(xx,yy)]=0;
+ dbuf[2][ADR(xx,yy)]=0;
+ }
+ }
+ }
+
+ for(xx=3;xx<32;xx++){
+ for(yy=3;yy<32;yy++){
+ if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==0
+ && dflag[xx-2][yy-2]==1 && dflag[xx-3][yy-3]==1)
+ {
+ dbuf[0][ADR(xx,yy)]=0;
+ dbuf[1][ADR(xx,yy)]=0;
+ dbuf[2][ADR(xx,yy)]=0;
+ }
+ }
+ }
+
+ }
+#endif
+}
+
+
+void bflush()
+{
+ int xx,yy,c;
+ for(xx=part_ox;xx<part_ox+part_wx;xx++){
+ for(yy=part_oy;yy<part_oy+part_wy;yy++){
+ for(c=0;c<3;c++){
+ obuf[c][WOADR(bx,by,part_x*part_wx+xx-part_ox,part_y*part_wy+yy-part_oy)]
+ = dbuf[c][ADR(xx,yy)];
+ }
+ }
+ }
+}
+
+
+void load_monst(fnam) char *fnam;{
+ if( load_pxxx(fnam)){
+ printf("no file %s.bmp\n",fnam);
+ getchar();
+ exit(1);
+ }
+ cp_monst_32();
+ bflush();
+}
+
+void flush_part()
+{
+
+ if(part_x!=0 || part_y!=0)
+ {
+ part_x=part_y=0;
+ bx++;if(bx==xx0){bx=0;by++;;}
+ }
+ parts_number[parts_n]=part_n;
+ parts_n++;
+
+}
+
+void process_config(char *fname)
+{
+ int i,j;
+ char tmp[100],st[1024];
+ char *nuke;
+ FILE *fp=fopen(fname,"r");
+ if(fp==NULL)
+ {
+ printf("Error no config file %s\nHit return",fname);
+ getchar();
+ exit(1);
+ }
+
+
+ while(1){
+ fgets(tmp,99,fp);
+ if(feof(fp))break;
+ i=0;
+ while(i<99 && tmp[i]>=32) i++;
+ tmp[i]=0;
+
+ if(getname(tmp,"back",st))
+ {
+ /*** Set Background BMP (format "%back bmpname") ***/
+ if(strncmp(st,"none",4)==0)
+ {
+ /** clear **/
+ for(i=0;i<32*32;i++){fbuf[0][i]=0x47;fbuf[1][i]=fbuf[2][i]=0x6c;}
+ }
+ else
+ {
+ load_pxxx(st);
+ for(i=0;i<32*32;i++)for(j=0;j<3;j++)fbuf[j][i]=tbuf[j][i];
+ }
+ continue;
+ }
+
+ if (getname(tmp,"include",st)){
+ char fn2[200];
+ sprintf(fn2,"%s%s",cpath, st);
+ if(strcmp(fname,fn2)!=0) process_config(fn2);
+ continue;
+ }
+
+ if (getval(tmp,"slant",&slant)) continue;
+ if (getval(tmp,"rim",&rim)) continue;
+ if (getval(tmp,"mesh",&mesh)) continue;
+ if (getval(tmp,"corpse",&corpse)) continue;
+ if (getname(tmp,"subst",subsname)) continue;
+ if (getname(tmp,"sdir",sdir)) continue;
+ if (getname(tmp,"name", outname)) continue;
+ if (getval(tmp,"width",&xx0)) continue;
+ /****/
+ if (getname(tmp,"parts_ctg",part_name))
+ {
+ if(part_n!=0)
+ flush_part();
+ part_n=0;
+ strcpy(parts_names[parts_n],part_name);
+ parts_comment_ofs[parts_n] = n_comments;
+ parts_start[parts_n]=bx+by*xx0;
+ fprintf(sfp,"#define TILEP_PART_%s %d\n",part_name, parts_n);
+ fprintf(sfp,"enum %s {\n",part_name);
+ fprintf(sfp," TILEP_%s_000,\n",part_name);
+
+ continue;
+ }
+
+ if (getval(tmp,"parts_wx",&part_wx))
+ {
+ parts_nx[parts_n]=part_nx=32/part_wx;
+ continue;
+ }
+
+ if (getval(tmp,"parts_wy",&part_wy))
+ {
+ parts_ny[parts_n]=part_ny=32/part_wy;
+ continue;
+ }
+
+ if (getval(tmp,"parts_ox", &part_ox))
+ {
+ parts_ox[parts_n]=part_ox;
+ continue;
+ }
+
+ if (getval(tmp,"parts_oy", &part_oy))
+ {
+ parts_oy[parts_n]=part_oy;
+ continue;
+ }
+
+ /****/
+ if (tmp[0]=='#' || tmp[0]<32){
+ if(tmp[0]=='#') fprintf(sfp,"//%s\n",tmp);
+ continue;
+ }
+
+ if (strcmp(tmp, "%end") == 0)
+ {
+ fprintf(sfp," N_PART_%s};\n\n",part_name);
+ continue;
+ }
+ /*** normal bitmap ***/
+#define WID 32
+ clr_buf();
+ cp_floor();
+
+ i=0;
+ while(i<99 && tmp[i]>32)i++;
+ tmp[i]=0; strcpy(st, &tmp[i+1]);
+ load_monst(tmp);
+
+ fprintf(mfp,
+ "<area shape=\"rect\" coords=\"%d,%d,%d,%d\" alt=\"%s\" href=%s>\n",
+ bx*WID + part_x*part_wx,
+ by*WID + part_y*part_wy,
+ bx*WID + part_x*part_wx + part_wx-1,
+ by*WID + part_y*part_wy + part_wy-1,
+ st, realname);
+
+ if(!strstr(st,"IGNORE_COMMENT")){
+ nuke=strstr(st,"/*");if(nuke)*nuke=0;
+ if (st && strcmp(st,"") != 0 && strcmp(st, "\n") != 0)
+ {
+ fprintf(sfp," TILEP_%s_%s,\n", part_name, st);
+ }
+ else
+ {
+ fprintf(sfp," FILLER_%s_%d,\n", part_name, part_n);
+ }
+
+ i=strlen(st);
+ strncpy(&comment[pos_comment],st,i);
+ part_comment_ofs[n_comments]=pos_comment;
+ pos_comment += i;
+ n_comments++;
+
+ // n_comments = pos_comment=0;
+ //int parts_comment_ofs[];
+ //int part_comment_ofs[MAXTOTAL];
+ //char comment[MAXTOTAL*60];
+ }
+ else
+ {
+ i=0;
+ part_comment_ofs[n_comments]=pos_comment;
+ pos_comment += i;
+ n_comments++;
+ }
+
+ part_n++;
+ part_x++;
+ if(part_x==part_nx)
+ {
+ part_x=0;
+ part_y++;
+ if(part_y==part_ny)
+ {
+ part_y=0;
+ bx++;
+ if(bx==xx0)
+ {
+ bx=0;
+ by++;
+ }
+ }
+ }
+
+ /* normal */
+
+ }/* while */
+ fclose(fp);
+}
+
+/********************************************/
+
+int main(int argc, char **argv)
+{
+
+ int i,j,k,l,m,n,fl;
+ char fn[100],st2[100];
+
+ slant=corpse=mesh=rim=0;
+
+ bx=by=0;
+
+ /* parts related */
+ parts_n=0;
+
+ part_x=part_y=0;
+ part_n=0;
+ part_wx=part_wy=32;
+ part_ox=part_oy=0;
+
+ /* comments */
+ n_comments = pos_comment=0;
+ //int parts_comment_ofs[];
+ //int part_comment_ofs[MAXTOTAL];
+ //char comment[MAXTOTAL*60];
+
+
+ process_cpath(argv[0]);
+
+ xx0=XX;
+ subsname[0]=0;
+ sdir[0]=0;
+ realname[0]=0;
+
+ stdpal();
+ fixalloc(tbuf,64*64);
+ fixalloc(dbuf,64*64);
+ fixalloc(fbuf,64*64);
+ fixalloc(obuf, 32*64*(64)*64);
+
+
+ strcpy(outname,"tile");
+
+ sprintf(fn,"%smap.htm",cpath);
+ mfp=fopen(fn,"w");
+ if(mfp==NULL){
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+ }
+
+ sprintf(fn,"%stiledef-p.h",cpath);
+ sfp=fopen(fn,"w");
+ if(sfp==NULL){
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+ }
+ fprintf(sfp,"/* Automatically generated by tile generator. */\n");
+
+ fprintf(mfp,"<HTML>\n");
+ fprintf(mfp,"<MAP NAME=\"nhmap\">\n");
+
+ printf("%s\ncpath=%s\n",argv[0],cpath);
+ if(argc==1)
+ sprintf(fn,"%sdc-pl.txt",cpath);
+ else
+ strcpy(fn,argv[1]);
+ process_config(fn);
+
+ if(part_n!=0)flush_part();
+
+ fprintf(sfp,"\n#define TILEP_TOTAL %d\n",bx+by*xx0);
+ fprintf(sfp,"#define TILEP_PER_ROW %d\n\n",xx0);
+
+ fprintf(sfp,"#define TILEP_PARTS_TOTAL %d\n\n",parts_n);
+
+ fprintf(sfp,"const int tilep_parts_start[TILEP_PARTS_TOTAL]=\n {");
+ for(i=0;i<parts_n-1;i++)fprintf(sfp," %d,",parts_start[i]);
+ fprintf(sfp," %d};\n",parts_start[parts_n-1]);
+
+ fprintf(sfp,"const int tilep_parts_total[TILEP_PARTS_TOTAL]=\n {");
+ for(i=0;i<parts_n-1;i++)fprintf(sfp," %d,",parts_number[i]);
+ fprintf(sfp," %d};\n",parts_number[parts_n-1]);
+
+ fprintf(sfp,"const int tilep_parts_ox[TILEP_PARTS_TOTAL]=\n {");
+ for(i=0;i<parts_n-1;i++)fprintf(sfp," %d,",parts_ox[i]);
+ fprintf(sfp," %d};\n",parts_ox[parts_n-1]);
+
+ fprintf(sfp,"const int tilep_parts_oy[TILEP_PARTS_TOTAL]=\n {");
+ for(i=0;i<parts_n-1;i++)fprintf(sfp," %d,",parts_oy[i]);
+ fprintf(sfp," %d};\n",parts_oy[parts_n-1]);
+
+ fprintf(sfp,"const int tilep_parts_nx[TILEP_PARTS_TOTAL]=\n {");
+ for(i=0;i<parts_n-1;i++)fprintf(sfp," %d,",parts_nx[i]);
+ fprintf(sfp," %d};\n",parts_nx[parts_n-1]);
+
+ fprintf(sfp,"const int tilep_parts_ny[TILEP_PARTS_TOTAL]=\n {");
+ for(i=0;i<parts_n-1;i++)fprintf(sfp," %d,",parts_ny[i]);
+ fprintf(sfp," %d};\n",parts_ny[parts_n-1]);
+
+ fclose(sfp);
+
+ sprintf(fn,"%stilep-cmt.h",cpath);
+ sfp=fopen(fn,"w");
+ if(sfp==NULL){
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+ }
+ fprintf(sfp,"/* Automatically generated by tile generator. */\n");
+
+ fprintf(sfp,"static const char *tilep_parts_name[%d]={\n",parts_n);
+ for(i=0;i<parts_n-1;i++)
+ {
+ fprintf(sfp," \"%s\",\n",parts_names[i]);
+ }
+ i=parts_n-1;
+ fprintf(sfp," \"%s\"\n};\n",parts_names[i]);
+
+
+ fprintf(sfp,"const int tilep_comment_ofs[TILEP_PARTS_TOTAL]= {\n");
+ for(i=0;i<parts_n-1;i++)fprintf(sfp," %d,",parts_comment_ofs[i]);
+ fprintf(sfp," %d};\n",parts_comment_ofs[parts_n-1]);
+
+ fprintf(sfp,"static const char *tilep_comment[%d]={\n",n_comments);
+ for(i=0;i<n_comments-1;i++)
+ {
+ int len=part_comment_ofs[i+1]-part_comment_ofs[i];
+ strncpy(st2, &comment[part_comment_ofs[i]],len);
+ st2[len]=0;
+ fprintf(sfp," \"%s\",\n",st2);
+ }
+ i=pos_comment-part_comment_ofs[n_comments-1];
+ strncpy(st2, &comment[part_comment_ofs[n_comments-1]],i);
+ st2[i]=0;
+ fprintf(sfp," \"%s\" };\n",st2);
+ fclose(sfp);
+
+ fprintf(mfp,"<IMG SRC=%s.bmp USEMAP=\"#nhmap\" >\n", outname);
+
+
+ fclose(mfp);
+ i=by*32;if(bx!=0)i+=32;
+
+ sprintf(fn,"%s%s.bmp",cpath,outname);
+ bmwrite(fn,xx0*32,i,obuf);
+
+}
diff --git a/crawl-ref/source/rltiles/tool/dcqv.c b/crawl-ref/source/rltiles/tool/dcqv.c
new file mode 100644
index 0000000000..88fe9cbbc1
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/dcqv.c
@@ -0,0 +1,847 @@
+#include "bm.h"
+
+/** Some global **/
+int corpse=0, mesh =0,slant=0;
+int rim=0;
+int exp_wall;
+int dsize;
+int sx32 = 16;
+int sy32 = 24;
+int end_normal = 0;
+
+FILE *mfp,*sfp;
+char outname[1024], ctgname[100], subsname[100];
+char sdir[300];
+
+
+/*** BUFFER MEMORY ***/
+#define XX 16
+int xx0;
+#define YY 30
+#define LX (XX)
+
+/*** tmp buffer, floor , final output, final queue ***/
+unsigned char *tbuf[3],fbuf[3][128*64],
+ *obuf[3],dbuf[3][128*64];
+
+
+unsigned char wallbuf[4][3][32*48];
+unsigned char wall2buf[3][128*64];
+
+
+int f_wx;
+
+/*** normal floor*/
+#define WOADR(x,y,xx,yy) \
+((x)*64+xx+ xx0*64*((y)*64+yy))
+
+
+#define ADR32(x,y) ((x)+(y)*32)
+#define ADR64(x,y) ((x)+(y)*64)
+
+
+/*** output width/height in block ***/
+int bx,by;
+
+
+/**************************/
+/* Wrapper routines *******/
+/**************************/
+
+int load_it(char *fnam, int *wx, int *wy)
+{
+ char fn[100];
+ sprintf(fn,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,fnam);
+ if(bmread(fn,wx,wy,tbuf)==0) return 0;
+
+ sprintf(fn,"%s%s.bmp",cpath,fnam);
+ if(bmread(fn,wx,wy,tbuf)==0) return 0;
+
+ if(subsname[0]){
+ sprintf(fn,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,subsname);
+ if(bmread(fn,wx,wy,tbuf)==0) return 0;
+
+ sprintf(fn,"%s%s.bmp",cpath,subsname);
+ if(bmread(fn,wx,wy,tbuf)==0) return 0;
+ }
+
+return 1;
+}
+
+
+void clr_dbuf() {
+int xx,yy;
+
+for(xx=0;xx<64;xx++){
+for(yy=0;yy<64;yy++){
+dbuf[0][ ADR64(xx,yy) ]=0x47;
+dbuf[1][ ADR64(xx,yy) ]=0x6c;
+dbuf[2][ ADR64(xx,yy) ]=0x6c;
+}}
+}
+
+#define TILEX 64
+#define TILEY 64
+void make_rim(){
+static unsigned char dflag[TILEX][TILEY];
+int x,y,c,dd[3],ad;
+int n0,n1,n2;
+
+for(y=0;y<TILEY;y++){
+for(x=0;x<TILEX;x++){
+ dflag[x][y]=1;
+ ad=x + y *TILEX;
+ for(c=0;c<3;c++)dd[c]=dbuf[c][ad];
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c)) dflag[x][y]=0;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0)) dflag[x][y]=2;
+}
+}
+
+for(x=0;x<TILEX;x++){
+for(y=0;y<TILEY;y++){
+ ad=x+y*TILEX;
+if(dflag[x][y]==2 || dflag[x][y]==0){
+n0=n1=n2=0;
+if(x>0){
+ if(dflag[x-1][y]==0) n0++;
+ if(dflag[x-1][y]==1) n1++;
+ if(dflag[x-1][y]==2) n2++;
+}
+
+if(y>0){
+ if(dflag[x][y-1]==0) n0++;
+ if(dflag[x][y-1]==1) n1++;
+ if(dflag[x][y-1]==2) n2++;
+}
+
+if(x<TILEX-1){
+ if(dflag[x+1][y]==0) n0++;
+ if(dflag[x+1][y]==1) n1++;
+ if(dflag[x+1][y]==2) n2++;
+}
+if(y<TILEY-1){
+ if(dflag[x][y+1]==0) n0++;
+ if(dflag[x][y+1]==1) n1++;
+ if(dflag[x][y+1]==2) n2++;
+}
+
+if(n1!=0 )
+dbuf[0][x+y*TILEX]=dbuf[1][x+y*TILEX]=dbuf[2][x+y*TILEX]=0x10;
+
+
+}}}
+
+}
+
+void cp_floor_64(){
+int xx,yy,c;
+for(xx=0;xx<64;xx++)
+for(yy=0;yy<64;yy++)
+for(c=0;c<3;c++)
+dbuf[c][ ADR64(xx,yy) ]=fbuf[c][ ADR64(xx,yy)];
+}
+
+void cp_floor_32(){
+int xx,yy,c;
+for(xx=0;xx<32;xx++)
+for(yy=0;yy<32;yy++)
+for(c=0;c<3;c++)
+dbuf[c][ ADR64(32+xx-yy,32+(xx+yy)/2) ]=fbuf[c][ ADR32(xx,yy)];
+}
+
+
+void cp_monst_32(){
+int xx,yy,c,dd[3],ad;
+char dflag[32][32];
+int xmin,xmax,ymin,ymax;
+int ox=0;
+int oy=0;
+
+if(corpse==1 ){
+ xmin=ymin=31;
+ xmax=ymax=0;
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ ad=ADR32(xx,yy);
+ for(c=0;c<3;c++)dd[c]=tbuf[c][ad];
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+ if(xx<xmin)xmin=xx;
+ if(xx>xmax)xmax=xx;
+ if(yy<ymin)ymin=yy;
+ if(yy>ymax)ymax=yy;
+ }}/*xy**/
+ ox=(xmax+xmin)/2-16;
+ oy=(ymax+ymin)/2-16;
+}
+
+if(slant==1){
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ int x1 = xx-yy+32;
+ int y1= 32+(xx+yy)/2;
+ ad = ADR32(xx,yy);
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2){
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c)){
+ if( ((x1+y1)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+ }
+ if(mesh==1){
+ if( (((x1/2)+(y1/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+ }
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++) {dbuf[c][ADR64(x1,y1)]=dd[c];}
+ }}
+return;
+}
+
+if(dsize==1){
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ int x1 = xx*2;
+ int y1= yy*2;
+ ad = ADR32(xx,yy);
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2){
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c)){
+ if( ((x1+y1)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+ }
+ if(mesh==1){
+ if( (((x1/2)+(y1/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+ }
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++)
+ {
+ dbuf[c][ADR64(x1,y1)]=dd[c];
+ dbuf[c][ADR64(x1+1,y1)]=dd[c];
+ dbuf[c][ADR64(x1,y1+1)]=dd[c];
+ dbuf[c][ADR64(x1+1,y1+1)]=dd[c];
+ }
+ }}
+return;
+}
+
+
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<32;yy++){
+ dflag[xx][yy]=0;
+ ad=ADR32(xx,yy);
+
+ if(corpse==1){
+ int x1=xx+ox;
+ int y1=(yy+oy)*2-16;
+ int cy=18;
+ if(xx<4 || xx>=28)cy+=2;else
+ if(xx<12 || xx>=20) cy+=1;
+
+ if(yy>=cy-1 && yy<=cy+0)continue;
+ x1 += (y1-16)/4;
+ if(y1>=cy){y1-=2;x1-=3;}else {y1 +=2;x1+=3;}
+ if(x1<0 || x1>=32 || y1<0 || y1>=32)continue;
+ ad=ADR32(x1,y1);
+ }
+
+ /*** normal***/
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2)
+ {
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c))
+ {
+ if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+ }
+ else if(mesh==1)
+ {
+ if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+ }
+
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ if( (corpse==1) &&(dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(sx32+xx,sy32+yy)]=dd[c];}
+ dflag[xx][yy]=1;
+}}
+
+
+#if 1
+if(corpse==1){
+for(xx=0;xx<32;xx++){
+int cy=18;
+if(xx<4 || xx>=28)cy+=2;else
+if(xx<12 || xx>=20) cy+=1;
+if(dflag[xx][cy-2]==1 && dflag[xx][cy+1]==1 ){
+for(yy=cy-1;yy<=cy-0;yy++){ dbuf[0][ADR64(16+xx,32+yy)]=32;
+dbuf[1][ADR64(16+xx,32+yy)]=0;dbuf[2][ADR64(16+xx,32+yy)]=0;
+dflag[xx][yy]=1;
+}}
+}
+
+/** shade**/
+for(xx=1;xx<32;xx++){
+for(yy=1;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==1){
+dbuf[0][ADR64(xx,yy)]=0;
+dbuf[1][ADR64(xx,yy)]=0;
+dbuf[2][ADR64(xx,yy)]=0;
+}
+}}
+
+for(xx=3;xx<32;xx++){
+for(yy=3;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==0
+ && dflag[xx-2][yy-2]==1 && dflag[xx-3][yy-3]==1){
+dbuf[0][ADR64(xx,yy)]=0;
+dbuf[1][ADR64(xx,yy)]=0;
+dbuf[2][ADR64(xx,yy)]=0;
+}
+}}
+
+}
+#endif
+}
+
+void cp_monst_64(){
+int xx,yy,c,dd[3],ad;
+int dflag[64][64];
+
+for(xx=0;xx<64;xx++){
+for(yy=0;yy<64;yy++){
+ dflag[xx][yy]=0;
+ ad=ADR64(xx,yy);
+
+ if(corpse==1)
+ {
+ int y1=2*(yy-26);
+ int x1=32+(xx-32)*5/4+(y1-32)*3/4;
+
+ y1 -= (xx-32)/3;
+ if(x1<0 || x1>=64 || y1<0 || y1>=64)continue;
+ ad=ADR64(x1,y1);
+ }
+
+ /*** normal***/
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+
+ if( (corpse==1) &&(dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+
+ if(mesh==2)
+ {
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c))
+ if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+
+ if(mesh==1)
+ if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ dflag[xx][yy]=1;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+}}
+
+if (corpse == 1)
+{
+ for(yy=0;yy<64;yy++)
+ {
+ int thick=0;
+ for(xx=0;xx<64;xx++)
+ {
+ if(dflag[xx][yy]==1)
+ {
+ thick++;
+ if (thick>15) thick=15;
+ continue;
+ }
+ if (thick>0)
+ {
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=0;}
+ thick -= 3;
+ if (thick<0) thick=0;
+ }
+ }
+ }
+
+ for(xx=0;xx<64;xx++)
+ {
+ int thick=0;
+ for(yy=0;yy<64;yy++)
+ {
+ if(dflag[xx][yy]==1)
+ {
+ thick++;
+ if (thick>15) thick=15;
+ continue;
+ }
+ if (thick>0)
+ {
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=0;}
+ thick -= 5;
+ if (thick<0) thick=0;
+ }
+ }
+ }
+
+}
+
+
+}
+
+
+void cp_monst_4864(){
+int xx,yy,c,dd[3],ad;
+for(xx=0;xx<48;xx++){
+for(yy=0;yy<64;yy++){
+ ad= xx+yy*48;
+ /*** normal***/
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2)
+ {
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c))
+ if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+
+ if(mesh==1)
+ if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][8+xx+yy*64]=dd[c];}
+}}
+}
+
+void bflush(){
+int xx,yy,c;
+if(rim==1) make_rim();
+
+for(xx=0;xx<64;xx++){
+for(yy=0;yy<64;yy++){
+for(c=0;c<3;c++){
+obuf[c][WOADR(bx,by,xx,yy)]= dbuf[c][ADR64(xx,yy)];
+}}}
+}
+
+
+void copy_wall(int wall_ix, int xofs, int yofs){
+int xx,yy,c;
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs-16;
+ int y=yy-yofs-8;
+ int ad = x+y*32;
+ if(x<0 || y<0 || x>=32 || y>=48) continue;
+ for(c=0;c<3;c++){dd[c]=wallbuf[wall_ix][c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+void copy_wall_vert(int wall_ix, int xofs, int yofs){
+int xx,yy,c,ymax;
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs-16;
+ int y=yy-yofs-8;
+ int ad = x+y*32;
+ if(x<0 || y<0 || x>=32 || y>=48) continue;
+
+ ymax= 8+x/2;
+ if(ymax> 8+(31-x)/2) ymax=8+(31-x)/2;
+ if(y<ymax) continue;
+
+ for(c=0;c<3;c++){dd[c]=wallbuf[wall_ix][c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ //Mesh
+// if( ((x/2+y/2)&1) == 0) dd[0]=dd[1]=dd[2]=0;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+void expand_wall(){
+//unsigned char wallbuf[4][3][32*48];
+int xx,yy,c,ix;
+exp_wall=1;
+for(ix=0;ix<4;ix++){
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<48;yy++){
+wallbuf[ix][0][xx+yy*32]=0x47;
+wallbuf[ix][1][xx+yy*32]=0x6c;
+wallbuf[ix][2][xx+yy*32]=0x6c;
+}}}
+
+//decompose wall bmp
+for(xx=0;xx<32;xx++){
+ int ymax= 8+xx/2;
+ if(ymax> 8+(31-xx)/2) ymax=8+(31-xx)/2;
+ for(yy=0;yy<ymax;yy++){
+ ix=0;
+ if(2*yy+xx >=32)ix +=1;
+ if(2*yy-xx >=0 )ix +=2;
+ for(c=0;c<3;c++)wallbuf[ix][c][xx+yy*32]=tbuf[c][xx+yy*32];
+ }
+
+ for(yy=ymax;yy<48;yy++){
+ if(xx<8) ix=2;else if(xx<24) ix=3; else ix=1;
+ for(c=0;c<3;c++)wallbuf[ix][c][xx+yy*32]=tbuf[c][xx+yy*32];
+ }
+}//xx
+
+/*
+ 0
+1 1 2 2
+ 3 4 5
+ 6 7 8 9
+ A B C
+4 D E 8
+ F
+*/
+
+for(ix=0;ix<16;ix++){
+ clr_dbuf();
+ if(f_wx==32)cp_floor_32(); else cp_floor_64();
+
+ if((ix&3)==3) copy_wall(3,0,-16);
+
+ if(ix&1) copy_wall(1,-16,-8);
+ if(ix&2) copy_wall(2,16,-8);
+
+ if(ix&1) copy_wall(3,-16,-8);
+ copy_wall(0, 0,0);
+ if(ix&2) copy_wall(3,16,-8);
+
+ if((ix&5)==5) {copy_wall(1,-32,0);copy_wall_vert(2,-16,0);}
+ copy_wall(2,0,0);
+ copy_wall(1,0,0);
+ if((ix&10)==10) {copy_wall(2,32,0);copy_wall_vert(1,16,0);}
+
+ if(ix&4) {copy_wall(0,-16,8);copy_wall_vert(3,-16,0);}
+ copy_wall(3,0,0);
+ if(ix&8) {copy_wall(0,16,8);copy_wall_vert(3,16,0);}
+
+ if(ix&4) {copy_wall(1,-16,8);copy_wall_vert(2,0,8);}
+ if(ix&8) {copy_wall(2,16,8); copy_wall_vert(1,0,8);}
+ if((ix&12)==12) {copy_wall(0,0,16);copy_wall_vert(3,0,8);}
+
+ bflush();
+ bx++;if(bx==xx0){bx=0;by++;}
+ }/*ix*/
+}
+
+
+static void copy_wall2_h1(int ix, int xofs, int yofs){
+int xx,yy,c,ad;
+
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs;
+ int y=yy-yofs;;
+ ad = x+64+y*128;
+ if (x<0 || y<0 || x>63 || y>63)continue;
+ if(2*y>=x+32) continue;
+ if(2*y>=95-x) continue;
+ if((ix%3)==0) if (2*y>=47-x)continue;
+ if((ix%3)==1) if ((2*y<47-x) || (2*y>=79-x))continue;
+ if((ix%3)==2) if(2*y<79-x)continue;
+
+ if((ix/3)==0) if(2*y>=x-16)continue;
+ if((ix/3)==1) if((2*y<x-16) || (2*y>=x+16))continue;
+ if((ix/3)==2) if(2*y<x+16) continue;
+
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+void copy_wall2_h2(int ix, int xofs, int yofs){
+int xx,yy,c,ad;
+
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs;
+ int y=yy-yofs;;
+ ad = x+y*128;
+ if (x<0 || y<0 || x>63 || y>63)continue;
+ if(2*y>=x+32) continue;
+ if(2*y>=95-x) continue;
+
+ if ((ix%2)==0)if (2*y>=63-x)continue;
+ if((ix%2)==1) if (2*y<63-x)continue;
+
+ if((ix/2)==0)if(2*y>=x)continue;
+ if((ix/2)==1)if(2*y<x)continue;
+
+
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+
+void copy_wall_v2(int ix, int kind, int xofs, int yofs){
+int xx,yy,c,ymax,ad;
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs;
+ int y=yy-yofs;
+ ad = x+kind*64+y*128;
+ if(x<0 || y<0 || x>=64 || y>=64) continue;
+
+ ymax= 16+x/2;
+ if(x>=32) ymax=16+(63-x)/2;
+ if(y<ymax) continue;
+ if(y>ymax+32)continue;
+
+ if(ix==0) if(x>=8)continue;
+ if(ix==1) if(x<8 || x>=24)continue;
+ if(ix==2) if(x<24 || x>=40)continue;
+ if(ix==3) if(x<40 || x>=56)continue;
+ if(ix==4) if(x<56)continue;
+
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+void expand_wall2(){
+//void copy_wall2_h(int kind, int ix, int xofs, int yofs)
+int ix;
+exp_wall=1;
+
+for(ix=0;ix<16;ix++){
+ clr_dbuf();
+ if(f_wx==32)cp_floor_32(); else cp_floor_64();
+
+if((ix&3)==0) copy_wall2_h1(0, 0, 8);
+if((ix&3)==1) copy_wall2_h1(1, -16, 0);
+if((ix&3)==2) copy_wall2_h1(3, 16, 0);
+if((ix&3)==3) copy_wall2_h2(0, 0, 0);
+
+if((ix&5)==0) copy_wall2_h1(6, 16, 0);
+if((ix&5)==1) copy_wall2_h1(7, 0, -8);
+if((ix&5)==4) copy_wall2_h1(3, 0, 8);
+if((ix&5)==5) copy_wall2_h2(2, 0, 0);
+
+
+if((ix&10)==0) copy_wall2_h1(2, -16, 0);
+if((ix&10)==2) copy_wall2_h1(5, 0, -8);
+if((ix&10)==8) copy_wall2_h1(1, 0, 8);
+if((ix&10)==10) copy_wall2_h2(1, 0, 0);
+
+if((ix&12)==0) copy_wall2_h1(8, 0, -8);
+if((ix&12)==4) copy_wall2_h1(5, -16, 0);
+if((ix&12)==8) copy_wall2_h1(7, 16, 0);
+if((ix&12)==12) copy_wall2_h2(3, 0, 0);
+
+
+if((ix&5)==5) copy_wall_v2(0, 0, 0, 0);
+if((ix&10)==10) copy_wall_v2(4, 0, 0, 0);
+
+if((ix&4)!=0) copy_wall_v2(1, 0, 0, 0);
+if((ix&8)!=0) copy_wall_v2(3, 0, 0, 0);
+
+
+if((ix&12)==12) copy_wall_v2(2, 0, 0, 0);
+
+if((ix&5)==1) copy_wall_v2(1, 1, 0, -8);
+if((ix&12)==8) copy_wall_v2(1, 1, 16, 0);
+
+if((ix&10)==2) copy_wall_v2(3, 1, 0, -8);
+if((ix&12)==4) copy_wall_v2(3, 1, -16, 0);
+
+if((ix&5)==0) copy_wall_v2(0, 1, 16, 0);
+if((ix&10)==0) copy_wall_v2(4, 1, -16, 0);
+if((ix&12)==0) copy_wall_v2(2, 1, 0, -8);
+
+ bflush();
+ bx++;if(bx==xx0){bx=0;by++;}
+}
+}
+
+
+void load_monst(fnam) char *fnam;{
+int wx, wy;
+ if( load_it(fnam, &wx, &wy))
+ {
+ printf("no file %s.bmp\n",fnam);
+ getchar();
+ exit(1);
+ }
+ exp_wall=0;
+ if(wx==128 && wy==64) expand_wall2();
+ else if(wx==48 && wy==64) cp_monst_4864();
+ else if(wx==32 && wy==48) expand_wall();
+ else if(wx==32)cp_monst_32();
+ else if(wx==64)cp_monst_64();
+ bflush();
+}
+
+void process_config(char *fname)
+{
+ int i,j;
+ char tmp[100],st[1024];
+ char *nuke;
+ FILE *fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("Error no config file %s\nHit return",fname);
+ getchar();
+ exit(1);
+ }
+
+
+while(1){
+ int dummy;
+ fgets(tmp,99,fp);
+ if(feof(fp))break;
+ i=0;while(i<99 && tmp[i]>=32)i++;
+ tmp[i]=0;
+
+fprintf(stderr,"[%s]\n",tmp);
+
+ if(getname(tmp,"back",st))
+ {
+ /*** Set Background BMP (format "%back bmpname") ***/
+ if(strncmp(st,"none",4)==0)
+ {
+ /** clear **/
+ for(i=0;i<32*32;i++){fbuf[0][i]=0x47;fbuf[1][i]=fbuf[2][i]=0x6c;}
+ f_wx=64;
+ }
+ else
+ {
+ int wy;
+ load_it(st, &f_wx, &wy);
+ for(i=0;i<f_wx*wy;i++)for(j=0;j<3;j++)fbuf[j][i]=tbuf[j][i];
+ }
+ continue;
+ }
+
+ if (getname(tmp,"include",st)){
+ char fn2[200];
+ sprintf(fn2,"%s%s",cpath, st);
+ if(strcmp(fname,fn2)!=0) process_config(fn2);
+ continue;
+ }
+
+ if (getval(tmp,"slant",&slant)) continue;
+ if (getval(tmp,"corpse",&corpse)) continue;
+ if (getval(tmp,"dsize",&dsize)) continue;
+ if (getval(tmp,"mesh",&mesh)) continue;
+ if (getval(tmp,"rim",&rim)) continue;
+ if (getname(tmp,"ctg",ctgname)) continue;
+ if (getname(tmp,"subst",subsname)) continue;
+ if (getname(tmp,"sdir",sdir)) continue;
+ if (getname(tmp,"name", outname)) continue;
+ if (getval(tmp,"width",&xx0)) continue;
+ if (getval(tmp,"sx",&sx32)) continue;
+ if (getval(tmp,"sy",&sy32)) continue;
+ if (getval(tmp,"end_normal",&dummy))
+ {
+ fprintf(sfp,"-1, -1 };\n");
+ end_normal = 1;
+ continue;
+ }
+
+ if (tmp[0]=='#' || tmp[0]<32)
+ {
+ if(tmp[0]=='#')fprintf(sfp,"//%s\n",tmp);
+ if(tmp[0]<32) fprintf(sfp,"\n");
+ continue;
+ }
+
+ /*** normal bitmap ***/
+
+ clr_dbuf();
+ if(f_wx==32)cp_floor_32(); else cp_floor_64();
+ i=0;while(i<99 && tmp[i]>32)i++;
+ tmp[i]=0; strcpy(st, &tmp[i+1]);
+ load_monst(tmp);
+ if(!strstr(st,"IGNORE_COMMENT"))
+ {
+ nuke=strstr(st,"/*");if(nuke)*nuke=0;
+ if(exp_wall)
+ fprintf(sfp,"TILE_%s, (TILE_TOTAL+%d),\n",st,bx+by*xx0-16);
+ else
+ if(end_normal)
+ fprintf(sfp,"#define TILE_%s %d\n",st,bx+by*xx0);
+ else
+ fprintf(sfp,"TILE_%s, (TILE_TOTAL+%d),\n",st,bx+by*xx0);
+ }
+
+ if(!exp_wall){bx++;if(bx==xx0){bx=0;by++;}}
+
+}/* while */
+
+ fclose(fp);
+}
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+
+ int i;
+ char fn[100];
+
+ fixalloc(tbuf,256*256);
+
+ slant=corpse=mesh=dsize=0;
+
+ bx=by=0;
+ process_cpath(argv[0]);
+ fixalloc(obuf, LX*64*(YY)*64);
+
+
+ xx0=XX;
+ ctgname[0]=0;
+ subsname[0]=0;
+ sdir[0]=0;
+
+ stdpal();
+
+ strcpy(outname,"tile");
+
+sprintf(fn,"%stiledef-qv.h",cpath);
+sfp=fopen(fn,"w");
+if(sfp==NULL){
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+}
+
+fprintf(sfp,"/* Automatically generated by tile generator. */\n");
+fprintf(sfp,"const int tile_qv_pair_table[] ={\n");
+
+ printf("%s\ncpath=%s\n",argv[0],cpath);
+ if(argc==1)
+ sprintf(fn,"%sdc-3d.txt",cpath);
+ else strcpy(fn,argv[1]);
+ process_config(fn);
+
+
+if(end_normal == 0)fprintf(sfp,"-1, -1 };\n");
+
+fprintf(sfp,"\n#define TILE_TOTAL_EX %d\n",bx+by*xx0);
+fprintf(sfp,"#define TILE_PER_ROW_EX %d\n",xx0);
+
+
+fclose(sfp);
+i=by*64;if(bx!=0)i+=64;
+
+sprintf(fn,"%s%s.bmp",cpath,outname);
+bmwrite(fn,xx0*64,i,obuf);
+
+return 0;
+}
diff --git a/crawl-ref/source/rltiles/tool/dcreverse.c b/crawl-ref/source/rltiles/tool/dcreverse.c
new file mode 100644
index 0000000000..66e69685b7
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/dcreverse.c
@@ -0,0 +1,216 @@
+#include "bm.h"
+
+#define TILEX (32)
+#define TILEY (32)
+
+unsigned char *tbuf[3];
+unsigned char *dbuf[3];
+
+/*** BUFFER MEMORY ***/
+#define XX 30
+#define YY 90
+#define LX (XX)
+
+#define BIGADR(x,y) ((x)+(y)*LX*32)
+#define ADR(x,y) ((x)+(y)*32)
+
+const int read_size = 2048;
+int rim = 0;
+int tile = 0;
+int sx = 0;
+int sy = 0;
+int ex = 0;
+int ey = 0;
+char tilename[2048];
+char compositename[2048];
+unsigned char bkg[3] =
+{
+ 0x47,
+ 0x6c,
+ 0x6c
+};
+
+int is_background(unsigned char d[3])
+{
+ if (bkg[0]==d[0] && bkg[1]==d[1] && bkg[2]==d[2])
+ return 1;
+ else
+ return 0;
+}
+
+int is_rim(unsigned char d[3])
+{
+ if (d[0]==1 && d[1]==1 && d[2]==1)
+ return 1;
+ else
+ return 0;
+}
+
+int is_black(unsigned char d[3])
+{
+ if (d[0]==0 && d[1]==0 && d[2]==0)
+ return 1;
+ else
+ return 0;
+}
+
+void remove_rim()
+{
+ int dflag[32][32];
+ unsigned char dd[3];
+ int x,y,c;
+ int ad;
+ int n0, n1, n2;
+
+ // 0 - background
+ // 1 - tile
+ // 2 - black
+ // 3 - rim
+
+ for (x = 0; x < 32; x++)
+ for (y = 0; y < 32; y++)
+ {
+ ad = ADR(x,y);
+ dd[0]=dbuf[0][ad];
+ dd[1]=dbuf[1][ad];
+ dd[2]=dbuf[2][ad];
+ if (is_background(dd))
+ dflag[x][y] = 0;
+ else if (is_black(dd))
+ dflag[x][y] = 2;
+ else if (is_rim(dd))
+ dflag[x][y] = 3;
+ else
+ dflag[x][y] = 1;
+ }
+
+ for(x=0;x<TILEX;x++){
+ for(y=0;y<TILEY;y++){
+ ad=ADR(x,y);
+ if(dflag[x][y]==3) {
+ n0=n1=n2=0;
+ if(x>0){
+ if(dflag[x-1][y]==0) n0++;
+ if(dflag[x-1][y]==1) n1++;
+ if(dflag[x-1][y]==2) n2++;
+ }
+
+ if(y>0){
+ if(dflag[x][y-1]==0) n0++;
+ if(dflag[x][y-1]==1) n1++;
+ if(dflag[x][y-1]==2) n2++;
+ }
+
+ if(x<31){
+ if(dflag[x+1][y]==0) n0++;
+ if(dflag[x+1][y]==1) n1++;
+ if(dflag[x+1][y]==2) n2++;
+ }
+
+ if(y<31){
+ if(dflag[x][y+1]==0) n0++;
+ if(dflag[x][y+1]==1) n1++;
+ if(dflag[x][y+1]==2) n2++;
+ }
+
+ if (n1 != 0)
+ {
+ dbuf[0][ad]=bkg[0];
+ dbuf[1][ad]=bkg[1];
+ dbuf[2][ad]=bkg[2];
+ }
+ }
+ }
+ }
+}
+
+void copy_tile()
+{
+ // copy relevant part of tbuf into dbuf, removing the rim if necessary
+
+ int xx,yy,c;
+ for (xx = 0; xx < 32; xx++)
+ for (yy = 0; yy < 32; yy++)
+ for (c = 0; c < 3; c++)
+ dbuf[c][ADR(xx,yy)] = tbuf[c][BIGADR(sx+xx,sy+yy)];
+ if (rim)
+ remove_rim();
+}
+
+void write_file()
+{
+ // write dbuf to tilenam
+ bmwrite(tilename,32,32,dbuf);
+}
+
+void process_list(char *fname)
+{
+ int i;
+ int x,y;
+ char tmp[read_size];
+
+ FILE *fp=fopen(fname,"r");
+ if (fp==NULL){
+ printf("Error: couldn't open %s\n", fname);
+ getchar();
+ exit(1);
+ }
+
+ while(1){
+ fgets(tmp,read_size,fp);
+ if (feof(fp))
+ break;
+ i=0;
+ while (i < read_size && tmp[i] >= 32)
+ i++;
+ tmp[i] = 0;
+
+ if (getname(tmp,"tilefile",compositename))
+ {
+ if (bmread(compositename,&x,&y,tbuf) != 0)
+ {
+ break;
+ }
+ }
+ if (getname(tmp,"skip",tilename))
+ continue;
+ if (getval(tmp,"rim",&rim))
+ continue;
+ if (getval(tmp,"sx",&sx))
+ continue;
+ if (getval(tmp,"sy",&sy))
+ continue;
+ if (getval(tmp,"ex",&ex))
+ continue;
+ if (getval(tmp,"ey",&ey))
+ continue;
+
+ if (getname(tmp,"file",tilename))
+ {
+ printf("Reading tile %s (%d,%d,%d,%d) rim(%d)\n",
+ compositename, sx, sy, ex, ey, rim);
+ copy_tile();
+ printf("Writing tile %s.\n", tilename);
+ write_file();
+ }
+ }
+
+ fclose(fp);
+}
+
+int main(argc, argv)
+int argc;
+char *argv[];
+{
+ if (argc <= 1) return;
+
+ process_cpath(argv[0]);
+ stdpal();
+
+ fixalloc(tbuf, LX*64*(YY)*64);
+ fixalloc(dbuf, 32*32);
+
+ printf("%s\ncpath=%s\n",argv[0],cpath);
+
+ process_list(argv[1]);
+}
diff --git a/crawl-ref/source/rltiles/tool/dctile.c b/crawl-ref/source/rltiles/tool/dctile.c
new file mode 100644
index 0000000000..aaadeca911
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/dctile.c
@@ -0,0 +1,642 @@
+#include "bm.h"
+
+/** Some global **/
+int corpse=0;
+int mesh=0;
+int slant=0;
+int rim=0;
+FILE *mfp=NULL; // map html
+FILE *sfp=NULL; // "tiledef.h"
+FILE *tfp=NULL; // tiles.txt
+FILE *cfp=NULL; // lengths of tile counts
+int tilecount = 0;
+int tilecountidx = -1;
+int counts[1024];
+int countnames[100][100];
+
+char outname[1024], ctgname[100], subsname[100];
+char sdir[300];
+char realname[1024];
+char imgname[1024];
+char tiledefname[1024];
+char enumprefix[100];
+const int read_size = 2048;
+
+/*** BUFFER MEMORY ***/
+#define XX 30
+int xx0;
+#define YY 90
+#define LX (XX)
+
+/*** tmp buffer, floor , final output, final queue ***/
+unsigned char *tbuf[3],fbuf[3][32*32],*obuf[3], dbuf[3][32*32];
+
+/*** compose buffer */
+unsigned char cbuf[3][32*32];
+
+/*** normal floor*/
+#define WOADR(x,y,xx,yy) ((x)*32+xx+ xx0*32*((y)*32+yy))
+#define ADR(x,y) ((x)+(y)*32)
+
+/*** output width/height in block ***/
+int bx,by;
+int filler = 0;
+
+unsigned char bkg[3] = { 0x47, 0x6c, 0x6c };
+
+#define WID 32
+
+/****************************************/
+/* Wrapper routines **************/
+/**************************/
+
+int load_pxxx(fnam) char *fnam;{
+ int x,y;
+
+ sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,fnam);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+ sprintf(realname,"%s%s.bmp",cpath,fnam);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+ if(subsname[0]){
+ sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,subsname);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+ sprintf(realname,"%s%s.bmp",cpath,subsname);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+ }
+
+
+ return 1;
+}
+
+
+void clr_buf() {
+ int xx,yy;
+
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ dbuf[0][ ADR(xx,yy) ]=bkg[0];
+ dbuf[1][ ADR(xx,yy) ]=bkg[1];
+ dbuf[2][ ADR(xx,yy) ]=bkg[2];
+ }
+ }
+}
+
+void cp_floor(){
+ int xx,yy,c;
+ for(xx=0;xx<32;xx++)
+ for(yy=0;yy<32;yy++)
+ for(c=0;c<3;c++)
+ dbuf[c][ ADR(xx,yy) ]=fbuf[c][ ADR(xx,yy)];
+}
+
+#define TILEX 32
+#define TILEY 32
+
+void make_rim(){
+ static unsigned char dflag[TILEX][TILEY];
+ int x,y,c,dd[3],ad;
+ int n0,n1,n2;
+
+ // dflag:
+ // 0 = background
+ // 1 = tile
+ // 2 = black
+
+ for(y=0;y<TILEY;y++){
+ for(x=0;x<TILEX;x++){
+ dflag[x][y]=1;
+ ad=ADR(x,y);
+ for(c=0;c<3;c++)dd[c]=dbuf[c][ad];
+ if( (dd[0]==bkg[0])&&(dd[1]==bkg[1])&& (dd[2]==bkg[2])) dflag[x][y]=0;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0)) dflag[x][y]=2;
+ }
+ }
+
+ for(x=0;x<TILEX;x++){
+ for(y=0;y<TILEY;y++){
+ ad=x+y*TILEX;
+ if(dflag[x][y]==2 || dflag[x][y]==0){
+ n0=n1=n2=0;
+ if(x>0){
+ if(dflag[x-1][y]==0) n0++;
+ if(dflag[x-1][y]==1) n1++;
+ if(dflag[x-1][y]==2) n2++;
+ }
+
+ if(y>0){
+ if(dflag[x][y-1]==0) n0++;
+ if(dflag[x][y-1]==1) n1++;
+ if(dflag[x][y-1]==2) n2++;
+ }
+
+ if(x<31){
+ if(dflag[x+1][y]==0) n0++;
+ if(dflag[x+1][y]==1) n1++;
+ if(dflag[x+1][y]==2) n2++;
+ }
+ if(y<31){
+ if(dflag[x][y+1]==0) n0++;
+ if(dflag[x][y+1]==1) n1++;
+ if(dflag[x][y+1]==2) n2++;
+ }
+ // n1 = tiles adjacent but not diagonal that are tile pixels
+ if(n1!=0 )
+ dbuf[0][x+y*32]=dbuf[1][x+y*32]=dbuf[2][x+y*32]=0x10;
+ }
+ }
+ }
+
+}
+
+void cp_monst_32(){
+ int xx,yy,c,dd[3],ad;
+ char dflag[32][32];
+ int xmin,xmax,ymin,ymax,ox,oy;
+
+ if(corpse==1)
+ {
+ xmin=ymin=31;
+ xmax=ymax=0;
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ ad=ADR(xx,yy);
+ for(c=0;c<3;c++)dd[c]=tbuf[c][ad];
+ if( (dd[0]==bkg[0])&&(dd[1]==bkg[1])&& (dd[2]==bkg[2]))continue;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+ if(xx<xmin)xmin=xx;
+ if(xx>xmax)xmax=xx;
+ if(yy<ymin)ymin=yy;
+ if(yy>ymax)ymax=yy;
+ }
+ }
+ ox=(xmax+xmin)/2-16;
+ oy=(ymax+ymin)/2-16;
+ }
+
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ dflag[xx][yy]=0;
+ ad=ADR(xx,yy);
+ if(corpse==1){
+ int x1=xx+ox;
+ int y1=(yy+oy)*2-16;
+ int cy=18;
+ if(xx<4 || xx>=28)cy+=2;else
+ if(xx<12 || xx>=20) cy+=1;
+
+ if(yy>=cy-1 && yy<=cy+0)continue;
+ x1 += (y1-16)/4;
+ if(y1>=cy){y1-=2;x1-=3;}else {y1 +=2;x1+=3;}
+ if(x1<0 || x1>=32 || y1<0 || y1>=32)continue;
+ ad=ADR(x1,y1);
+ }
+
+ /*** normal***/
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2){
+ if( (dd[0]!=bkg[0])||(dd[1]!=bkg[1])|| (dd[2]!=bkg[2])){
+ if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+ }
+ if(mesh==1){
+ if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+ }
+
+ if( (dd[0]==bkg[0])&&(dd[1]==bkg[1])&& (dd[2]==bkg[2]))continue;
+ if( (corpse==1) &&(dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR(xx,yy)]=dd[c];}
+ dflag[xx][yy]=1;
+ }
+ }
+
+
+#if 1
+if(corpse==1){
+for(xx=0;xx<32;xx++){
+int cy=18;
+if(xx<4 || xx>=28)cy+=2;else
+if(xx<12 || xx>=20) cy+=1;
+if(dflag[xx][cy-2]==1 && dflag[xx][cy+1]==1 ){
+for(yy=cy-1;yy<=cy-0;yy++){ dbuf[0][ADR(xx,yy)]=32;
+dbuf[1][ADR(xx,yy)]=0;dbuf[2][ADR(xx,yy)]=0;
+dflag[xx][yy]=1;
+}}
+}
+
+/** shade**/
+for(xx=1;xx<32;xx++){
+for(yy=1;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==1){
+dbuf[0][ADR(xx,yy)]=0;
+dbuf[1][ADR(xx,yy)]=0;
+dbuf[2][ADR(xx,yy)]=0;
+}
+}}
+
+for(xx=3;xx<32;xx++){
+for(yy=3;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==0
+ && dflag[xx-2][yy-2]==1 && dflag[xx-3][yy-3]==1){
+dbuf[0][ADR(xx,yy)]=0;
+dbuf[1][ADR(xx,yy)]=0;
+dbuf[2][ADR(xx,yy)]=0;
+}
+}}
+
+
+
+
+}
+#endif
+if(rim==1)make_rim();
+}
+
+
+void bflush(){
+int xx,yy,c;
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<32;yy++){
+for(c=0;c<3;c++){
+obuf[c][WOADR(bx,by,xx,yy)]= dbuf[c][ADR(xx,yy)];
+}}}
+}
+
+
+void load_monst(fnam) char *fnam;{
+ if( load_pxxx(fnam)){
+ printf("no file pxxx/%s.bmp or %s/%s.bmp\n",fnam,sdir,fnam);
+ getchar();
+ exit(1);
+ }
+ cp_monst_32();
+ bflush();
+}
+
+void process_config(char *fname)
+{
+ int x,y;
+ int i,j;
+ char tmp[read_size],st[read_size];
+ char *nuke;
+ FILE *fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("Error no config file %s\nHit return",fname);
+ getchar();
+ exit(1);
+ }
+
+ while(1){
+ fgets(tmp,read_size,fp);
+ if(feof(fp))break;
+ i=0;while(i<read_size && tmp[i]>=32)i++;
+ tmp[i]=0;
+
+ if(getname(tmp,"back",st))
+ {
+ /*** Set Background BMP (format "%back bmpname") ***/
+ if(strncmp(st,"none",4)==0)
+ {
+ /** clear **/
+ for(i=0;i<32*32;i++){fbuf[0][i]=bkg[0];fbuf[1][i]=bkg[1];fbuf[2][i]=bkg[2];}
+ }
+ else
+ {
+ load_pxxx(st);
+ for(i=0;i<32*32;i++)for(j=0;j<3;j++)fbuf[j][i]=tbuf[j][i];
+ }
+ continue;
+ }
+
+ if (getname(tmp,"include",st)){
+ char fn2[read_size];
+ sprintf(fn2,"%s%s",cpath, st);
+ if(strcmp(fname,fn2)!=0) process_config(fn2);
+ continue;
+ }
+
+ if (getname(tmp,"htmlfile",st))
+ {
+ char fn2[read_size];
+ sprintf(fn2,"%s%s",cpath, st);
+ mfp=fopen(fn2,"w");
+ if(mfp==NULL)
+ {
+ printf("Error could not open %s\nHit return",fn2);
+ getchar();
+ exit(1);
+ }
+ fprintf(mfp,"<HTML><head>\n");
+ continue;
+ }
+
+ if (getname(tmp,"tilelist",st))
+ {
+ char fn2[read_size];
+ sprintf(fn2,"%s%s",cpath, st);
+ tfp=fopen(fn2,"w");
+ if(tfp==NULL)
+ {
+ printf("Error could not open %s\nHit return",fn2);
+ getchar();
+ exit(1);
+ }
+ fprintf(tfp,"%%tilefile %s\n", imgname);
+ fprintf(tfp,"%%rim %d\n", rim);
+ continue;
+ }
+
+ if (getname(tmp,"tiledef",st))
+ {
+ char fn[read_size];
+ sprintf(fn,"%s%s",cpath,st);
+ strcpy(tiledefname, st);;
+ sfp=fopen(fn,"w");
+ if(sfp==NULL)
+ {
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+ }
+ fprintf(sfp,"/* Automatically generated by tile generator. */\n");
+ fprintf(sfp, "enum TILE_%sIDX {\n", enumprefix);
+ continue;
+ }
+
+ if (getname(tmp,"tilecount",st))
+ {
+ char fn[read_size];
+ sprintf(fn,"%s%s",cpath,st);
+ cfp=fopen(fn,"w");
+ if(cfp==NULL)
+ {
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+ }
+ fprintf(cfp,"/* Automatically generated by tile generator. */\n");
+ fprintf(cfp,"#include \"%s\"\n", tiledefname);
+ fprintf(cfp, "enum TILE_%sCOUNT_IDX {\n", enumprefix);
+ continue;
+ }
+
+ if (getname(tmp,"enumprefix",st))
+ {
+ strcpy(enumprefix, st);
+ continue;
+ }
+
+ if (getname(tmp,"htmlhead",st))
+ {
+ if(mfp)fprintf(mfp,"%s\n",st);
+ continue;
+ }
+
+ if (getname(tmp,"htmlbody",st))
+ {
+ if(mfp)fprintf(mfp,"</head><body>\n<map name=\"nhmap\">\n");
+ continue;
+ }
+
+ if (getval(tmp,"slant",&slant)) continue;
+ if (getval(tmp,"rim",&rim))
+ {
+ if (tfp) fprintf(tfp, "%%rim %d\n", rim);
+ continue;
+ }
+ if (getval(tmp,"mesh",&mesh)) continue;
+ if (getval(tmp,"corpse",&corpse)) continue;
+
+ if (getname(tmp,"ctg",ctgname)) continue;
+ if (getname(tmp,"subst",subsname)) continue;
+ if (getname(tmp,"sdir",sdir)) continue;
+ if (getname(tmp,"name", outname))
+ {
+ sprintf(imgname, "%s.bmp", outname);
+ continue;
+ }
+ if (getname(tmp,"htmlimg",imgname)) continue;
+ if (getval(tmp,"width",&xx0)) continue;
+ if (tmp[0]=='#' || tmp[0]<32){
+ if(tmp[0]<32) fprintf(sfp,"\n");
+ if(tmp[0]=='#')fprintf(sfp,"//%s\n",tmp);
+ continue;
+ }
+
+ // begin a 32x32 composing sequence
+ if (getname(tmp,"start",st))
+ {
+ clr_buf();
+ for (i = 0; i < 32*32; i++)
+ {
+ cbuf[0][i] = fbuf[0][i];
+ cbuf[1][i] = fbuf[1][i];
+ cbuf[2][i] = fbuf[2][i];
+ }
+ continue;
+ }
+
+ // compose an image onto the current buffer
+ if (getname(tmp,"compose",st))
+ {
+ if(load_pxxx(st)){
+ printf("no file pxxx/%s.bmp or %s/%s.bmp\n",st,sdir,st);
+ getchar();
+ exit(1);
+ }
+ for(i=0;i<32*32;i++)
+ {
+ if (tbuf[0][i] != bkg[0] ||
+ tbuf[1][i] != bkg[1] ||
+ tbuf[2][i] != bkg[2])
+ {
+ cbuf[0][i] = tbuf[0][i];
+ cbuf[1][i] = tbuf[1][i];
+ cbuf[2][i] = tbuf[2][i];
+ }
+ }
+ continue;
+ }
+
+ if (getname(tmp,"nextrow",st))
+ {
+ if (bx == 0)
+ continue;
+
+ while (bx != xx0)
+ {
+ fprintf(sfp, " TILE_%sFILLER%d,\n", enumprefix, filler++);
+ bx++;
+ }
+
+ bx = 0;
+ by ++;
+ continue;
+ }
+
+ // finish composing
+ if (getname(tmp,"finish",st))
+ {
+ realname[0] = 0;
+ for (i=0;i<32*32;i++)
+ {
+ tbuf[0][i] = cbuf[0][i];
+ tbuf[1][i] = cbuf[1][i];
+ tbuf[2][i] = cbuf[2][i];
+ }
+ cp_monst_32();
+ bflush();
+ }
+ else
+ {
+ /*** normal bitmap ***/
+ clr_buf();cp_floor();
+ i=0;while(i<read_size && tmp[i]>32)i++;
+ tmp[i]=0; strcpy(st, &tmp[i+1]);
+
+ if (tfp)
+ {
+ fprintf(tfp,"%%sx %d\n%%sy %d\n%%ex %d\n%%ey %d\n",
+ bx*WID,by*WID,bx*WID+WID-1,by*WID+WID-1);
+ }
+
+ load_monst(tmp);
+ }
+
+ if(mfp)
+ {
+ fprintf(
+ mfp,"<area shape=\"rect\" coords=\"%d,%d,%d,%d\" alt=\"%s\" href=\"%s\">\n",
+ bx*WID,by*WID,bx*WID+WID-1,by*WID+WID-1,
+ st,realname);
+ }
+
+ if (tfp)
+ {
+ if (corpse)
+ fprintf(tfp,"%%skip\n");
+ else
+ fprintf(tfp,"%%file %s\n", realname);
+ }
+
+ if(!strstr(st,"IGNORE_COMMENT")){
+ nuke=strstr(st,"/*");if(nuke)*nuke=0;
+ if (st && strcmp(st, "") != 0 && strcmp(st, "\n") != 0)
+ {
+ fprintf(sfp," TILE_%s,\n",st);
+ if (cfp)
+ {
+ if (tilecountidx == -1)
+ tilecountidx++;
+ else
+ counts[tilecountidx++] = tilecount;
+ fprintf(cfp, " IDX_%s,\n",st);
+ sprintf(countnames[tilecountidx], "TILE_%s", st);
+ tilecount = 1;
+ }
+ }
+ else
+ {
+ fprintf(sfp, " TILE_%sFILLER%d,\n", enumprefix, filler++);
+ tilecount++;
+ }
+ }
+
+ bx++;if(bx==xx0){bx=0;by++;;}
+
+ }/* while */
+ fclose(fp);
+}
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+ int i;
+ char fn[100];
+
+ bx=by=0;
+ process_cpath(argv[0]);
+
+ xx0=XX;
+ ctgname[0]=0;
+ subsname[0]=0;
+ sdir[0]=0;
+ enumprefix[0] = 0;
+
+ stdpal();
+ fixalloc(tbuf,256*256);
+ fixalloc(obuf, LX*64*(YY)*64);
+
+
+ strcpy(outname,"tile");
+ strcpy(imgname,"tile.bmp");
+
+
+ printf("%s\ncpath=%s\n",argv[0],cpath);
+ if(argc==1)
+ sprintf(fn,"%sdc-2d.txt",cpath);
+ else
+ strcpy(fn,argv[1]);
+ process_config(fn);
+
+ if (sfp)
+ {
+ fprintf(sfp, "TILE_%sTOTAL};\n\n", enumprefix);
+ fprintf(sfp,"#define TILE_%sPER_ROW %d\n", enumprefix, xx0);
+ fclose(sfp);
+ }
+
+ if(mfp)
+ {
+ fprintf(mfp,"</map>\n<img src=%s usemap=\"#nhmap\" >\n", imgname);
+ fprintf(mfp,"</body></html>\n");
+ fclose(mfp);
+ }
+
+ if (cfp)
+ {
+ int i;
+
+ fprintf(cfp, " IDX_%sTOTAL\n};\n\n", enumprefix);
+
+ counts[tilecountidx++] = tilecount;
+
+ fprintf(cfp, "int tile_%scount[IDX_%sTOTAL] =\n{\n",
+ enumprefix, enumprefix);
+
+ for (i = 0; i < tilecountidx; i++)
+ {
+ fprintf(cfp, (i < tilecountidx - 1) ? " %d,\n" : " %d\n",
+ counts[i]);
+ }
+
+ fprintf(cfp, "};\n\n");
+
+ fprintf(cfp, "int tile_%sstart[IDX_%sTOTAL] = \n{\n",
+ enumprefix, enumprefix);
+
+ for (i = 0; i < tilecountidx; i++)
+ {
+ fprintf(cfp, (i < tilecountidx - 1) ? " %s,\n" : " %s\n",
+ countnames[i]);
+ }
+
+ fprintf(cfp, "};\n\n");
+ close(cfp);
+ }
+
+ if(tfp)
+ {
+ fclose(tfp);
+ }
+
+ i=by*32;
+ if(bx!=0)i+=32;
+ sprintf(fn,"%s%s.bmp",cpath,outname);
+ bmwrite(fn,xx0*32,i,obuf);
+ return 0;
+}
diff --git a/crawl-ref/source/rltiles/tool/mkmap.c b/crawl-ref/source/rltiles/tool/mkmap.c
new file mode 100644
index 0000000000..f07ce369ea
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/mkmap.c
@@ -0,0 +1,408 @@
+#include "bm.h"
+
+/** Some global **/
+int corpse, mesh,slant, rim;
+FILE *mfp,*sfp;
+char outname[1024], ctgname[100], subsname[100];
+char sdir[300];
+char realname[1024];
+
+/*** BUFFER MEMORY ***/
+#define XX 30
+int xx0;
+#define YY 90
+#define LX (XX)
+
+
+/*** tmp buffer, floor , final output, final queue ***/
+unsigned char *tbuf[3],fbuf[3][32*32], *obuf[3],dbuf[3][32*32];
+
+
+/*** normal floor*/
+#define WOADR(x,y,xx,yy) \
+((x)*32+xx+ xx0*32*((y)*32+yy))
+
+
+#define ADR(x,y) ((x)+(y)*32)
+
+/*** output width/height in block ***/
+int bx,by;
+
+
+
+/****************************************/
+/* Wrapper routines **************/
+/**************************/
+
+int load_pxxx(fnam) char *fnam;{
+int x,y;
+
+sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,fnam);
+if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+sprintf(realname,"%s%s.bmp",cpath,fnam);
+if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+if(subsname[0]){
+ sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,subsname);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+
+ sprintf(realname,"%s%s.bmp",cpath,subsname);
+ if(bmread(realname,&x,&y,tbuf)==0) return 0;
+}
+
+
+return 1;
+}
+
+
+void clr_buf() {
+int xx,yy;
+
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<32;yy++){
+dbuf[0][ ADR(xx,yy) ]=0x47;
+dbuf[1][ ADR(xx,yy) ]=0x6c;
+dbuf[2][ ADR(xx,yy) ]=0x6c;
+}}
+}
+
+void cp_floor(){
+int xx,yy,c;
+for(xx=0;xx<32;xx++)
+for(yy=0;yy<32;yy++)
+for(c=0;c<3;c++)
+dbuf[c][ ADR(xx,yy) ]=fbuf[c][ ADR(xx,yy)];
+}
+
+#define TILEX 32
+#define TILEY 32
+
+void make_rim(){
+static unsigned char dflag[TILEX][TILEY];
+int x,y,c,dd[3],ad;
+int n0,n1,n2;
+
+
+
+for(y=0;y<TILEY;y++){
+for(x=0;x<TILEX;x++){
+ dflag[x][y]=1;
+ ad=ADR(x,y);
+ for(c=0;c<3;c++)dd[c]=dbuf[c][ad];
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c)) dflag[x][y]=0;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0)) dflag[x][y]=2;
+}
+}
+
+for(x=0;x<TILEX;x++){
+for(y=0;y<TILEY;y++){
+ ad=x+y*TILEX;
+if(dflag[x][y]==2 || dflag[x][y]==0){
+n0=n1=n2=0;
+if(x>0){
+ if(dflag[x-1][y]==0) n0++;
+ if(dflag[x-1][y]==1) n1++;
+ if(dflag[x-1][y]==2) n2++;
+}
+
+if(y>0){
+ if(dflag[x][y-1]==0) n0++;
+ if(dflag[x][y-1]==1) n1++;
+ if(dflag[x][y-1]==2) n2++;
+}
+
+if(x<31){
+ if(dflag[x+1][y]==0) n0++;
+ if(dflag[x+1][y]==1) n1++;
+ if(dflag[x+1][y]==2) n2++;
+}
+if(y<31){
+ if(dflag[x][y+1]==0) n0++;
+ if(dflag[x][y+1]==1) n1++;
+ if(dflag[x][y+1]==2) n2++;
+}
+
+if(n1!=0 )
+dbuf[0][x+y*32]=dbuf[1][x+y*32]=dbuf[2][x+y*32]=0x10;
+
+
+
+}}}
+
+}
+
+void cp_monst_32(){
+int xx,yy,c,dd[3],ad;
+char dflag[32][32];
+int xmin,xmax,ymin,ymax,ox,oy;
+
+if(corpse==1 ){
+ xmin=ymin=31;
+ xmax=ymax=0;
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ ad=ADR(xx,yy);
+ for(c=0;c<3;c++)dd[c]=tbuf[c][ad];
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+ if(xx<xmin)xmin=xx;
+ if(xx>xmax)xmax=xx;
+ if(yy<ymin)ymin=yy;
+ if(yy>ymax)ymax=yy;
+}}/*xy**/
+ox=(xmax+xmin)/2-16;
+oy=(ymax+ymin)/2-16;
+}
+
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<32;yy++){
+dflag[xx][yy]=0;
+ad=ADR(xx,yy);
+if(corpse==1){
+int x1=xx+ox;
+int y1=(yy+oy)*2-16;
+int cy=18;
+if(xx<4 || xx>=28)cy+=2;else
+if(xx<12 || xx>=20) cy+=1;
+
+if(yy>=cy-1 && yy<=cy+0)continue;
+x1 += (y1-16)/4;
+if(y1>=cy){y1-=2;x1-=3;}else {y1 +=2;x1+=3;}
+if(x1<0 || x1>=32 || y1<0 || y1>=32)continue;
+ad=ADR(x1,y1);
+}
+
+/*** normal***/
+for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+if(mesh==2){
+if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c)){
+if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+}
+}
+if(mesh==1){
+if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+}
+
+if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+if( (corpse==1) &&(dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+
+for(c=0;c<3;c++) {dbuf[c][ADR(xx,yy)]=dd[c];}
+ dflag[xx][yy]=1;
+}}
+
+
+#if 1
+if(corpse==1){
+for(xx=0;xx<32;xx++){
+int cy=18;
+if(xx<4 || xx>=28)cy+=2;else
+if(xx<12 || xx>=20) cy+=1;
+if(dflag[xx][cy-2]==1 && dflag[xx][cy+1]==1 ){
+for(yy=cy-1;yy<=cy-0;yy++){ dbuf[0][ADR(xx,yy)]=32;
+dbuf[1][ADR(xx,yy)]=0;dbuf[2][ADR(xx,yy)]=0;
+dflag[xx][yy]=1;
+}}
+}
+
+/** shade**/
+for(xx=1;xx<32;xx++){
+for(yy=1;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==1){
+dbuf[0][ADR(xx,yy)]=0;
+dbuf[1][ADR(xx,yy)]=0;
+dbuf[2][ADR(xx,yy)]=0;
+}
+}}
+
+for(xx=3;xx<32;xx++){
+for(yy=3;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==0
+ && dflag[xx-2][yy-2]==1 && dflag[xx-3][yy-3]==1){
+dbuf[0][ADR(xx,yy)]=0;
+dbuf[1][ADR(xx,yy)]=0;
+dbuf[2][ADR(xx,yy)]=0;
+}
+}}
+
+
+
+
+}
+#endif
+if(rim==1)make_rim();
+}
+
+
+void bflush(){
+int xx,yy,c;
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<32;yy++){
+for(c=0;c<3;c++){
+obuf[c][WOADR(bx,by,xx,yy)]= dbuf[c][ADR(xx,yy)];
+}}}
+}
+
+
+void load_monst(fnam) char *fnam;{
+ if( load_pxxx(fnam)){
+ printf("no file pxxx/%s.bmp or %s/%s.bmp\n",fnam,sdir,fnam);
+ getchar();
+ exit(1);
+ }
+ cp_monst_32();
+ bflush();
+}
+
+void process_config(char *fname)
+{
+ int i,j;
+ char tmp[100],st[1024];
+ char *nuke;
+ FILE *fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("Error no config file %s\nHit return",fname);
+ getchar();
+ exit(1);
+ }
+
+
+while(1){
+fgets(tmp,99,fp);
+if(feof(fp))break;
+i=0;while(i<99 && tmp[i]>=32)i++;
+tmp[i]=0;
+
+ if(getname(tmp,"back",st))
+ {
+ /*** Set Background BMP (format "%back bmpname") ***/
+ if(strncmp(st,"none",4)==0)
+ {
+ /** clear **/
+ for(i=0;i<32*32;i++){fbuf[0][i]=0x47;fbuf[1][i]=fbuf[2][i]=0x6c;}
+ }
+ else
+ {
+ load_pxxx(st);
+ for(i=0;i<32*32;i++)for(j=0;j<3;j++)fbuf[j][i]=tbuf[j][i];
+ }
+ continue;
+ }
+
+ if (getname(tmp,"include",st)){
+ char fn2[200];
+ sprintf(fn2,"%s%s",cpath, st);
+ if(strcmp(fname,fn2)!=0) process_config(fn2);
+ continue;
+ }
+
+ if (getval(tmp,"slant",&slant)) continue;
+ if (getval(tmp,"rim",&rim)) continue;
+ if (getval(tmp,"mesh",&mesh)) continue;
+ if (getval(tmp,"corpse",&corpse)) continue;
+ if (getname(tmp,"ctg",ctgname)) continue;
+ if (getname(tmp,"subst",subsname)) continue;
+ if (getname(tmp,"sdir",sdir)) continue;
+ if (getname(tmp,"name", outname)) continue;
+ if (getval(tmp,"width",&xx0)) continue;
+ if (tmp[0]=='#' || tmp[0]<32){
+ if(tmp[0]=='#')fprintf(sfp,"//%s\n",tmp);
+ if(tmp[0]<32) fprintf(sfp,"\n");
+ continue;
+ }
+
+/*** normal bitmap ***/
+#define WID 32
+clr_buf();cp_floor();
+i=0;while(i<99 && tmp[i]>32)i++;
+tmp[i]=0; strcpy(st, &tmp[i+1]);
+ load_monst(tmp);
+
+fprintf(mfp,"<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=%s>\n",
+bx*WID,by*WID,bx*WID+WID-1,by*WID+WID-1,
+realname);
+
+if(!strstr(st,"IGNORE_COMMENT")){
+nuke=strstr(st,"/*");if(nuke)*nuke=0;
+fprintf(sfp,"#define TILE_%s %d\n",st,bx+by*xx0);
+}
+
+bx++;if(bx==xx0){bx=0;by++;;}
+
+
+
+}/* while */
+ fclose(fp);
+}
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+
+ int i;
+ char fn[100],st2[100];
+
+ slant=corpse=mesh=rim=0;
+
+ bx=by=0;
+ process_cpath(argv[0]);
+
+ xx0=XX;
+ ctgname[0]=0;
+ subsname[0]=0;
+ sdir[0]=0;
+
+ stdpal();
+ fixalloc(tbuf,256*256);
+ fixalloc(obuf, LX*64*(YY)*64);
+
+
+ strcpy(outname,"tile");
+
+sprintf(fn,"%smap.htm",cpath);
+mfp=fopen(fn,"w");
+if(mfp==NULL){
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+}
+
+
+sprintf(fn,"%stiledef.h",cpath);
+sfp=fopen(fn,"w");
+if(sfp==NULL){
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+}
+fprintf(sfp,"/* Automatically generated by tile generator. */\n");
+
+
+fprintf(mfp,"<HTML><head>\n");
+fprintf(mfp,"<base href=\"http://cvs.sourceforge.net/viewcvs.py/rltiles/rltiles/\">\n");
+fprintf(mfp,"</head><body><MAP NAME=\"nhmap\">\n");
+
+
+ printf("%s\ncpath=%s\n",argv[0],cpath);
+ if(argc==1)
+ sprintf(fn,"%sdc-all.txt",cpath);
+ else strcpy(fn,argv[1]);
+ process_config(fn);
+
+
+
+fprintf(sfp,"#define TILE_TOTAL %d\n",bx+by*xx0);
+fprintf(sfp,"#define TILE_PER_ROW %d\n",xx0);
+
+fprintf(mfp,"<IMG SRC=http://rltiles.sf.net/%s.png USEMAP=\"#nhmap\" >\n</body>\n</html>\n", outname);
+
+
+fclose(mfp);
+fclose(sfp);
+i=by*32;if(bx!=0)i+=32;
+
+sprintf(fn,"%s%s.bmp",cpath,outname);
+bmwrite(fn,xx0*32,i,obuf);
+
+}
diff --git a/crawl-ref/source/rltiles/tool/mkmapq.c b/crawl-ref/source/rltiles/tool/mkmapq.c
new file mode 100644
index 0000000000..ad92344267
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/mkmapq.c
@@ -0,0 +1,783 @@
+#include "bm.h"
+
+#define WID 64
+/** Some global **/
+int corpse=0, mesh =0,slant=0;
+int rim=0;
+int exp_wall;
+int dsize;
+int sx32 = 16;
+int sy32 = 24;
+
+FILE *mfp,*sfp;
+char outname[1024], ctgname[100], subsname[100];
+char sdir[300];
+char realname[1024];
+
+
+/*** BUFFER MEMORY ***/
+#define XX 16
+int xx0;
+#define YY 30
+#define LX (XX)
+
+/*** tmp buffer, floor , final output, final queue ***/
+unsigned char *tbuf[3],fbuf[3][128*64],
+ *obuf[3],dbuf[3][128*64];
+
+
+unsigned char wallbuf[4][3][32*48];
+unsigned char wall2buf[3][128*64];
+
+
+int f_wx;
+
+/*** normal floor*/
+#define WOADR(x,y,xx,yy) \
+((x)*64+xx+ xx0*64*((y)*64+yy))
+
+
+#define ADR32(x,y) ((x)+(y)*32)
+#define ADR64(x,y) ((x)+(y)*64)
+
+
+/*** output width/height in block ***/
+int bx,by;
+
+
+/**************************/
+/* Wrapper routines *******/
+/**************************/
+
+int load_it(char *fnam, int *wx, int *wy)
+{
+ sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,fnam);
+ if(bmread(realname,wx,wy,tbuf)==0) return 0;
+
+ sprintf(realname,"%s%s.bmp",cpath,fnam);
+ if(bmread(realname,wx,wy,tbuf)==0) return 0;
+
+ if(subsname[0]){
+ sprintf(realname,"%s%s%c%s.bmp",cpath,sdir,PATHSEP,subsname);
+ if(bmread(realname,wx,wy,tbuf)==0) return 0;
+
+ sprintf(realname,"%s%s.bmp",cpath,subsname);
+ if(bmread(realname,wx,wy,tbuf)==0) return 0;
+ }
+
+return 1;
+}
+
+
+void clr_dbuf() {
+int xx,yy;
+
+for(xx=0;xx<64;xx++){
+for(yy=0;yy<64;yy++){
+dbuf[0][ ADR64(xx,yy) ]=0x47;
+dbuf[1][ ADR64(xx,yy) ]=0x6c;
+dbuf[2][ ADR64(xx,yy) ]=0x6c;
+}}
+}
+
+#define TILEX 64
+#define TILEY 64
+void make_rim(){
+static unsigned char dflag[TILEX][TILEY];
+int x,y,c,dd[3],ad;
+int n0,n1,n2;
+
+for(y=0;y<TILEY;y++){
+for(x=0;x<TILEX;x++){
+ dflag[x][y]=1;
+ ad=x + y *TILEX;
+ for(c=0;c<3;c++)dd[c]=dbuf[c][ad];
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c)) dflag[x][y]=0;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0)) dflag[x][y]=2;
+}
+}
+
+for(x=0;x<TILEX;x++){
+for(y=0;y<TILEY;y++){
+ ad=x+y*TILEX;
+if(dflag[x][y]==2 || dflag[x][y]==0){
+n0=n1=n2=0;
+if(x>0){
+ if(dflag[x-1][y]==0) n0++;
+ if(dflag[x-1][y]==1) n1++;
+ if(dflag[x-1][y]==2) n2++;
+}
+
+if(y>0){
+ if(dflag[x][y-1]==0) n0++;
+ if(dflag[x][y-1]==1) n1++;
+ if(dflag[x][y-1]==2) n2++;
+}
+
+if(x<TILEX-1){
+ if(dflag[x+1][y]==0) n0++;
+ if(dflag[x+1][y]==1) n1++;
+ if(dflag[x+1][y]==2) n2++;
+}
+if(y<TILEY-1){
+ if(dflag[x][y+1]==0) n0++;
+ if(dflag[x][y+1]==1) n1++;
+ if(dflag[x][y+1]==2) n2++;
+}
+
+if(n1!=0 )
+dbuf[0][x+y*TILEX]=dbuf[1][x+y*TILEX]=dbuf[2][x+y*TILEX]=0x10;
+
+
+}}}
+
+}
+
+void cp_floor_64(){
+int xx,yy,c;
+for(xx=0;xx<64;xx++)
+for(yy=0;yy<64;yy++)
+for(c=0;c<3;c++)
+dbuf[c][ ADR64(xx,yy) ]=fbuf[c][ ADR64(xx,yy)];
+}
+
+void cp_floor_32(){
+int xx,yy,c;
+for(xx=0;xx<32;xx++)
+for(yy=0;yy<32;yy++)
+for(c=0;c<3;c++)
+dbuf[c][ ADR64(32+xx-yy,32+(xx+yy)/2) ]=fbuf[c][ ADR32(xx,yy)];
+}
+
+
+void cp_monst_32(){
+int xx,yy,c,dd[3],ad;
+char dflag[32][32];
+int xmin,xmax,ymin,ymax;
+int ox=0;
+int oy=0;
+
+if(corpse==1 ){
+ xmin=ymin=31;
+ xmax=ymax=0;
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ ad=ADR32(xx,yy);
+ for(c=0;c<3;c++)dd[c]=tbuf[c][ad];
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ if( (dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+ if(xx<xmin)xmin=xx;
+ if(xx>xmax)xmax=xx;
+ if(yy<ymin)ymin=yy;
+ if(yy>ymax)ymax=yy;
+ }}/*xy**/
+ ox=(xmax+xmin)/2-16;
+ oy=(ymax+ymin)/2-16;
+}
+
+if(slant==1){
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ int x1 = xx-yy+32;
+ int y1= 32+(xx+yy)/2;
+ ad = ADR32(xx,yy);
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2){
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c)){
+ if( ((x1+y1)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+ }
+ if(mesh==1){
+ if( (((x1/2)+(y1/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+ }
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++) {dbuf[c][ADR64(x1,y1)]=dd[c];}
+ }}
+return;
+}
+
+if(dsize==1){
+ for(xx=0;xx<32;xx++){
+ for(yy=0;yy<32;yy++){
+ int x1 = xx*2;
+ int y1= yy*2;
+ ad = ADR32(xx,yy);
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2){
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c)){
+ if( ((x1+y1)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+ }
+ if(mesh==1){
+ if( (((x1/2)+(y1/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+ }
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++)
+ {
+ dbuf[c][ADR64(x1,y1)]=dd[c];
+ dbuf[c][ADR64(x1+1,y1)]=dd[c];
+ dbuf[c][ADR64(x1,y1+1)]=dd[c];
+ dbuf[c][ADR64(x1+1,y1+1)]=dd[c];
+ }
+ }}
+return;
+}
+
+
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<32;yy++){
+dflag[xx][yy]=0;
+ad=ADR32(xx,yy);
+
+if(corpse==1){
+ int x1=xx+ox;
+ int y1=(yy+oy)*2-16;
+ int cy=18;
+ if(xx<4 || xx>=28)cy+=2;else
+ if(xx<12 || xx>=20) cy+=1;
+
+ if(yy>=cy-1 && yy<=cy+0)continue;
+ x1 += (y1-16)/4;
+ if(y1>=cy){y1-=2;x1-=3;}else {y1 +=2;x1+=3;}
+ if(x1<0 || x1>=32 || y1<0 || y1>=32)continue;
+ ad=ADR32(x1,y1);
+}
+
+/*** normal***/
+for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+if(mesh==2){
+if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c)){
+if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+}
+}
+if(mesh==1){
+if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+}
+
+if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+if( (corpse==1) &&(dd[0]==0)&&(dd[1]==0)&& (dd[2]==0))continue;
+
+for(c=0;c<3;c++) {dbuf[c][ADR64(sx32+xx,sy32+yy)]=dd[c];}
+ dflag[xx][yy]=1;
+}}
+
+
+#if 1
+if(corpse==1){
+for(xx=0;xx<32;xx++){
+int cy=18;
+if(xx<4 || xx>=28)cy+=2;else
+if(xx<12 || xx>=20) cy+=1;
+if(dflag[xx][cy-2]==1 && dflag[xx][cy+1]==1 ){
+for(yy=cy-1;yy<=cy-0;yy++){ dbuf[0][ADR64(16+xx,32+yy)]=32;
+dbuf[1][ADR64(16+xx,32+yy)]=0;dbuf[2][ADR64(16+xx,32+yy)]=0;
+dflag[xx][yy]=1;
+}}
+}
+
+/** shade**/
+for(xx=1;xx<32;xx++){
+for(yy=1;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==1){
+dbuf[0][ADR64(xx,yy)]=0;
+dbuf[1][ADR64(xx,yy)]=0;
+dbuf[2][ADR64(xx,yy)]=0;
+}
+}}
+
+for(xx=3;xx<32;xx++){
+for(yy=3;yy<32;yy++){
+if(dflag[xx][yy]==0 && dflag[xx-1][yy-1]==0
+ && dflag[xx-2][yy-2]==1 && dflag[xx-3][yy-3]==1){
+dbuf[0][ADR64(xx,yy)]=0;
+dbuf[1][ADR64(xx,yy)]=0;
+dbuf[2][ADR64(xx,yy)]=0;
+}
+}}
+
+}
+#endif
+}
+
+void cp_monst_64(){
+int xx,yy,c,dd[3],ad;
+for(xx=0;xx<64;xx++){
+for(yy=0;yy<64;yy++){
+ ad=ADR64(xx,yy);
+ /*** normal***/
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2)
+ {
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c))
+ if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+
+ if(mesh==1)
+ if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+}}
+}
+
+
+void cp_monst_4864(){
+int xx,yy,c,dd[3],ad;
+for(xx=0;xx<48;xx++){
+for(yy=0;yy<64;yy++){
+ ad= xx+yy*48;
+ /*** normal***/
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if(mesh==2)
+ {
+ if( (dd[0]!=0x47)||(dd[1]!=0x6c)|| (dd[2]!=0x6c))
+ if( ((xx+yy)&1) ==0)dd[0]=dd[1]=dd[2]=0;
+ }
+
+ if(mesh==1)
+ if( (((xx/2)+(yy/2))&1) ==1)dd[0]=dd[1]=dd[2]=0;
+
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][8+xx+yy*64]=dd[c];}
+}}
+}
+
+void bflush(){
+int xx,yy,c;
+if(rim==1) make_rim();
+
+ fprintf(mfp,"<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=%s>\n",
+ bx*WID,by*WID,bx*WID+WID-1,by*WID+WID-1,
+ realname);
+
+for(xx=0;xx<64;xx++){
+for(yy=0;yy<64;yy++){
+for(c=0;c<3;c++){
+obuf[c][WOADR(bx,by,xx,yy)]= dbuf[c][ADR64(xx,yy)];
+}}}
+}
+
+
+void copy_wall(int wall_ix, int xofs, int yofs){
+int xx,yy,c;
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs-16;
+ int y=yy-yofs-8;
+ int ad = x+y*32;
+ if(x<0 || y<0 || x>=32 || y>=48) continue;
+ for(c=0;c<3;c++){dd[c]=wallbuf[wall_ix][c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+void copy_wall_vert(int wall_ix, int xofs, int yofs){
+int xx,yy,c,ymax;
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs-16;
+ int y=yy-yofs-8;
+ int ad = x+y*32;
+ if(x<0 || y<0 || x>=32 || y>=48) continue;
+
+ ymax= 8+x/2;
+ if(ymax> 8+(31-x)/2) ymax=8+(31-x)/2;
+ if(y<=ymax) continue;
+
+ for(c=0;c<3;c++){dd[c]=wallbuf[wall_ix][c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ //Mesh
+// if( ((x/2+y/2)&1) == 0) dd[0]=dd[1]=dd[2]=0;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+void expand_wall(){
+//unsigned char wallbuf[4][3][32*48];
+int xx,yy,c,ix;
+exp_wall=1;
+for(ix=0;ix<4;ix++){
+for(xx=0;xx<32;xx++){
+for(yy=0;yy<48;yy++){
+wallbuf[ix][0][xx+yy*32]=0x47;
+wallbuf[ix][1][xx+yy*32]=0x6c;
+wallbuf[ix][2][xx+yy*32]=0x6c;
+}}}
+
+//decompose wall bmp
+for(xx=0;xx<32;xx++){
+ int ymax= 8+xx/2;
+ if(ymax> 8+(31-xx)/2) ymax=8+(31-xx)/2;
+ for(yy=0;yy<ymax;yy++){
+ ix=0;
+ if(2*yy+xx >=32)ix +=1;
+ if(2*yy-xx >=0 )ix +=2;
+ for(c=0;c<3;c++)wallbuf[ix][c][xx+yy*32]=tbuf[c][xx+yy*32];
+ }
+
+ for(yy=ymax;yy<48;yy++){
+ if(xx<8) ix=2;else if(xx<24) ix=3; else ix=1;
+ for(c=0;c<3;c++)wallbuf[ix][c][xx+yy*32]=tbuf[c][xx+yy*32];
+ }
+}//xx
+
+/*
+ 0
+1 1 2 2
+ 3 4 5
+ 6 7 8 9
+ A B C
+4 D E 8
+ F
+*/
+
+for(ix=0;ix<16;ix++){
+ clr_dbuf();
+ if(f_wx==32)cp_floor_32(); else cp_floor_64();
+
+ if((ix&3)==3) copy_wall(3,0,-16);
+
+ if(ix&1) copy_wall(1,-16,-8);
+ if(ix&2) copy_wall(2,16,-8);
+
+ if(ix&1) copy_wall(3,-16,-8);
+ copy_wall(0, 0,0);
+ if(ix&2) copy_wall(3,16,-8);
+
+ if((ix&5)==5) {copy_wall(1,-32,0);copy_wall_vert(2,-16,0);}
+ copy_wall(2,0,0);
+ copy_wall(1,0,0);
+ if((ix&10)==10) {copy_wall(2,32,0);copy_wall_vert(1,16,0);}
+
+ if(ix&4) {copy_wall(0,-16,8);copy_wall_vert(3,-16,0);}
+ copy_wall(3,0,0);
+ if(ix&8) {copy_wall(0,16,8);copy_wall_vert(3,16,0);}
+
+ if(ix&4) {copy_wall(1,-16,8);copy_wall_vert(2,0,8);}
+ if(ix&8) {copy_wall(2,16,8); copy_wall_vert(1,0,8);}
+ if((ix&12)==12) {copy_wall(0,0,16);copy_wall_vert(3,0,8);}
+
+ bflush();
+
+ bx++;if(bx==xx0){bx=0;by++;}
+ }/*ix*/
+}
+
+
+static void copy_wall2_h1(int ix, int xofs, int yofs){
+int xx,yy,c,ad;
+
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs;
+ int y=yy-yofs;;
+ ad = x+64+y*128;
+ if (x<0 || y<0 || x>63 || y>63)continue;
+ if(2*y>=x+32) continue;
+ if(2*y>=95-x) continue;
+ if((ix%3)==0) if (2*y>=47-x)continue;
+ if((ix%3)==1) if ((2*y<47-x) || (2*y>=79-x))continue;
+ if((ix%3)==2) if(2*y<79-x)continue;
+
+ if((ix/3)==0) if(2*y>=x-16)continue;
+ if((ix/3)==1) if((2*y<x-16) || (2*y>=x+16))continue;
+ if((ix/3)==2) if(2*y<x+16) continue;
+
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+void copy_wall2_h2(int ix, int xofs, int yofs){
+int xx,yy,c,ad;
+
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs;
+ int y=yy-yofs;;
+ ad = x+y*128;
+ if (x<0 || y<0 || x>63 || y>63)continue;
+ if(2*y>=x+32) continue;
+ if(2*y>=95-x) continue;
+
+ if ((ix%2)==0)if (2*y>=63-x)continue;
+ if((ix%2)==1) if (2*y<63-x)continue;
+
+ if((ix/2)==0)if(2*y>=x)continue;
+ if((ix/2)==1)if(2*y<x)continue;
+
+
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+
+
+void copy_wall_v2(int ix, int kind, int xofs, int yofs){
+int xx,yy,c,ymax,ad;
+unsigned char dd[3];
+ for(xx=0;xx<64;xx++){
+ for(yy=0;yy<64;yy++){
+ int x=xx-xofs;
+ int y=yy-yofs;
+ ad = x+kind*64+y*128;
+ if(x<0 || y<0 || x>=64 || y>=64) continue;
+
+ ymax= 16+x/2;
+ if(x>=32) ymax=16+(63-x)/2;
+ if(y<ymax) continue;
+ if(y>ymax+32)continue;
+
+ if(ix==0) if(x>=8)continue;
+ if(ix==1) if(x<8 || x>=24)continue;
+ if(ix==2) if(x<24 || x>=40)continue;
+ if(ix==3) if(x<40 || x>=56)continue;
+ if(ix==4) if(x<56)continue;
+
+ for(c=0;c<3;c++){dd[c]=tbuf[c][ad];}
+ if( (dd[0]==0x47)&&(dd[1]==0x6c)&& (dd[2]==0x6c))continue;
+ for(c=0;c<3;c++) {dbuf[c][ADR64(xx,yy)]=dd[c];}
+ }}
+}
+void expand_wall2(){
+//void copy_wall2_h(int kind, int ix, int xofs, int yofs)
+int ix;
+exp_wall=1;
+
+for(ix=0;ix<16;ix++){
+ clr_dbuf();
+ if(f_wx==32)cp_floor_32(); else cp_floor_64();
+
+if((ix&3)==0) copy_wall2_h1(0, 0, 8);
+if((ix&3)==1) copy_wall2_h1(1, -16, 0);
+if((ix&3)==2) copy_wall2_h1(3, 16, 0);
+if((ix&3)==3) copy_wall2_h2(0, 0, 0);
+
+if((ix&5)==0) copy_wall2_h1(6, 16, 0);
+if((ix&5)==1) copy_wall2_h1(7, 0, -8);
+if((ix&5)==4) copy_wall2_h1(3, 0, 8);
+if((ix&5)==5) copy_wall2_h2(2, 0, 0);
+
+
+if((ix&10)==0) copy_wall2_h1(2, -16, 0);
+if((ix&10)==2) copy_wall2_h1(5, 0, -8);
+if((ix&10)==8) copy_wall2_h1(1, 0, 8);
+if((ix&10)==10) copy_wall2_h2(1, 0, 0);
+
+if((ix&12)==0) copy_wall2_h1(8, 0, -8);
+if((ix&12)==4) copy_wall2_h1(5, -16, 0);
+if((ix&12)==8) copy_wall2_h1(7, 16, 0);
+if((ix&12)==12) copy_wall2_h2(3, 0, 0);
+
+
+if((ix&5)==5) copy_wall_v2(0, 0, 0, 0);
+if((ix&10)==10) copy_wall_v2(4, 0, 0, 0);
+
+if((ix&4)!=0) copy_wall_v2(1, 0, 0, 0);
+if((ix&8)!=0) copy_wall_v2(3, 0, 0, 0);
+
+
+if((ix&12)==12) copy_wall_v2(2, 0, 0, 0);
+
+if((ix&5)==1) copy_wall_v2(1, 1, 0, -8);
+if((ix&12)==8) copy_wall_v2(1, 1, 16, 0);
+
+if((ix&10)==2) copy_wall_v2(3, 1, 0, -8);
+if((ix&12)==4) copy_wall_v2(3, 1, -16, 0);
+
+if((ix&5)==0) copy_wall_v2(0, 1, 16, 0);
+if((ix&10)==0) copy_wall_v2(4, 1, -16, 0);
+if((ix&12)==0) copy_wall_v2(2, 1, 0, -8);
+
+ bflush();
+ bx++;if(bx==xx0){bx=0;by++;}
+}
+}
+
+
+void load_monst(fnam) char *fnam;{
+int wx, wy;
+ if( load_it(fnam, &wx, &wy))
+ {
+ printf("no file %s.bmp\n",fnam);
+ getchar();
+ exit(1);
+ }
+ exp_wall=0;
+ if(wx==128 && wy==64) expand_wall2();
+ else if(wx==48 && wy==64) cp_monst_4864();
+ else if(wx==32 && wy==48) expand_wall();
+ else if(wx==32)cp_monst_32();
+ else if(wx==64)cp_monst_64();
+ bflush();
+}
+
+void process_config(char *fname)
+{
+ int i,j;
+ char tmp[100],st[1024];
+ char *nuke;
+ FILE *fp=fopen(fname,"r");
+ if(fp==NULL){
+ printf("Error no config file %s\nHit return",fname);
+ getchar();
+ exit(1);
+ }
+
+
+while(1){
+ fgets(tmp,99,fp);
+ if(feof(fp))break;
+ i=0;while(i<99 && tmp[i]>=32)i++;
+ tmp[i]=0;
+
+fprintf(stderr,"[%s]\n",tmp);
+
+ if(getname(tmp,"back",st))
+ {
+ /*** Set Background BMP (format "%back bmpname") ***/
+ if(strncmp(st,"none",4)==0)
+ {
+ /** clear **/
+ for(i=0;i<32*32;i++){fbuf[0][i]=0x47;fbuf[1][i]=fbuf[2][i]=0x6c;}
+ f_wx=64;
+ }
+ else
+ {
+ int wy;
+ load_it(st, &f_wx, &wy);
+ for(i=0;i<f_wx*wy;i++)for(j=0;j<3;j++)fbuf[j][i]=tbuf[j][i];
+ }
+ continue;
+ }
+
+ if (getname(tmp,"include",st)){
+ char fn2[200];
+ sprintf(fn2,"%s%s",cpath, st);
+ if(strcmp(fname,fn2)!=0) process_config(fn2);
+ continue;
+ }
+
+ if (getval(tmp,"slant",&slant)) continue;
+ if (getval(tmp,"dsize",&dsize)) continue;
+ if (getval(tmp,"mesh",&mesh)) continue;
+ if (getval(tmp,"rim",&rim)) continue;
+ if (getval(tmp,"corpose",&corpse)) continue;
+ if (getname(tmp,"ctg",ctgname)) continue;
+ if (getname(tmp,"subst",subsname)) continue;
+ if (getname(tmp,"sdir",sdir)) continue;
+ if (getname(tmp,"name", outname)) continue;
+ if (getval(tmp,"width",&xx0)) continue;
+ if (getval(tmp,"sx",&sx32)) continue;
+ if (getval(tmp,"sy",&sy32)) continue;
+ if (tmp[0]=='#' || tmp[0]<32){
+ if(tmp[0]<32) {}
+ else fprintf(sfp,"\n//%s\n",tmp);
+ continue;
+ }
+
+ /*** normal bitmap ***/
+
+ clr_dbuf();
+ if(f_wx==32)cp_floor_32(); else cp_floor_64();
+ i=0;while(i<99 && tmp[i]>32)i++;
+ tmp[i]=0; strcpy(st, &tmp[i+1]);
+ load_monst(tmp);
+ if(!strstr(st,"IGNORE_COMMENT"))
+ {
+ nuke=strstr(st,"/*");if(nuke)*nuke=0;
+ if(exp_wall)
+ fprintf(sfp,"TILE_%s, (TILE_TOTAL+%d),\n",st,bx+by*xx0-16);
+ else
+ fprintf(sfp,"TILE_%s, (TILE_TOTAL+%d),\n",st,bx+by*xx0);
+ }
+
+ if(!exp_wall){bx++;if(bx==xx0){bx=0;by++;}}
+
+}/* while */
+
+ fclose(fp);
+}
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+
+ int i;
+ char fn[100];
+
+ fixalloc(tbuf,256*256);
+
+ slant=corpse=mesh=dsize=0;
+
+ bx=by=0;
+ process_cpath(argv[0]);
+ fixalloc(obuf, LX*64*(YY)*64);
+
+
+ xx0=XX;
+ ctgname[0]=0;
+ subsname[0]=0;
+ sdir[0]=0;
+
+ stdpal();
+
+ strcpy(outname,"tile");
+
+sprintf(fn,"%stiledef-qv.h",cpath);
+sfp=fopen(fn,"w");
+if(sfp==NULL){
+ printf("Error could not open %s\nHit return",fn);
+ getchar();
+ exit(1);
+}
+
+mfp=fopen("map.htm","w");
+fprintf(mfp,"<HTML><head>\n");
+fprintf(mfp,"<base href=\"http://cvs.sourceforge.net/viewcvs.py/rltiles/rltiles/
+\">\n");
+fprintf(mfp,"</head><body><MAP NAME=\"nhmap\">\n");
+
+
+fprintf(sfp,"/* Automatically generated by tile generator. */\n");
+fprintf(sfp,"const int tile_qv_pair_table[] ={\n");
+
+ printf("%s\ncpath=%s\n",argv[0],cpath);
+ if(argc==1)
+ sprintf(fn,"%sdc-qv.txt",cpath);
+ else strcpy(fn,argv[1]);
+ process_config(fn);
+
+
+fprintf(sfp,"-1, -1 };\n");
+
+fprintf(sfp,"\n#define TILE_TOTAL_EX %d\n",bx+by*xx0);
+fprintf(sfp,"#define TILE_PER_ROW_EX %d\n",xx0);
+
+
+fclose(sfp);
+i=by*64;if(bx!=0)i+=64;
+
+sprintf(fn,"%s%s.bmp",cpath,outname);
+bmwrite(fn,xx0*64,i,obuf);
+
+fprintf(mfp,"<IMG SRC=http://rltiles.sf.net/%s.png USEMAP=\"#nhmap\" >\n</body>\
+n</html>\n", outname);
+fclose(mfp);
+
+return 0;
+}
diff --git a/crawl-ref/source/rltiles/tool/palette.h b/crawl-ref/source/rltiles/tool/palette.h
new file mode 100644
index 0000000000..c94b0d66f7
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/palette.h
@@ -0,0 +1,355 @@
+unsigned char pbuf[1024]= {
+/* index B G R unused */
+
+// Red
+/* 0x00 */ 0x00, 0x00, 0xff, 0x00,
+/* 0x01 */ 0x00, 0x00, 0xe0, 0x00,
+/* 0x02 */ 0x00, 0x00, 0xc0, 0x00,
+/* 0x03 */ 0x00, 0x00, 0xa0, 0x00,
+/* 0x04 */ 0x00, 0x00, 0x80, 0x00,
+/* 0x05 */ 0x00, 0x00, 0x60, 0x00,
+/* 0x06 */ 0x00, 0x00, 0x40, 0x00,
+/* 0x07 */ 0x00, 0x00, 0x30, 0x00,
+// Dark red
+/* 0x08 */ 0x00, 0x00, 0x20, 0x00,
+/* 0x09 */ 0x00, 0x00, 0x18, 0x00,
+/* 0x0a */ 0x00, 0x00, 0x10, 0x00,
+//Pale Red
+/* 0x0b */ 0x40, 0x40, 0x80, 0x00,
+/* 0x0c */ 0x50, 0x50, 0xa0, 0x00,
+/* 0x0d */ 0x60, 0x60, 0xc0, 0x00,
+/* 0x0e */ 0x70, 0x70, 0xe0, 0x00,
+/* 0x0f */ 0x80, 0x80, 0xff, 0x00,
+
+//Red-Orange
+/* 0x10 */ 0x00, 0x40, 0xff, 0x00,
+/* 0x11 */ 0x00, 0x38, 0xe0, 0x00,
+/* 0x12 */ 0x00, 0x30, 0xc0, 0x00,
+/* 0x13 */ 0x00, 0x28, 0xa0, 0x00,
+/* 0x14 */ 0x00, 0x20, 0x80, 0x00,
+/* 0x15 */ 0x00, 0x18, 0x60, 0x00,
+/* 0x16 */ 0x00, 0x10, 0x40, 0x00,
+/* 0x17 */ 0x00, 0x0c, 0x30, 0x00,
+//Dark Yellow
+/* 0x18 */ 0x00, 0x20, 0x20, 0x00,
+/* 0x19 */ 0x00, 0x18, 0x18, 0x00,
+/* 0x1a */ 0x00, 0x10, 0x10, 0x00,
+//Pale Yellow
+/* 0x1b */ 0x40, 0x80, 0x80, 0x00,
+/* 0x1c */ 0x50, 0xa0, 0xa0, 0x00,
+/* 0x1d */ 0x60, 0xc0, 0xc0, 0x00,
+/* 0x1e */ 0x70, 0xe0, 0xe0, 0x00,
+/* 0x1f */ 0x80, 0xff, 0xff, 0x00,
+
+//Orange
+/* 0x20 */ 0x00, 0x80, 0xff, 0x00,
+/* 0x21 */ 0x00, 0x70, 0xe0, 0x00,
+/* 0x22 */ 0x00, 0x60, 0xc0, 0x00,
+/* 0x23 */ 0x00, 0x50, 0xa0, 0x00,
+/* 0x24 */ 0x00, 0x40, 0x80, 0x00,
+/* 0x25 */ 0x00, 0x30, 0x60, 0x00,
+/* 0x26 */ 0x00, 0x20, 0x40, 0x00,
+/* 0x27 */ 0x00, 0x18, 0x30, 0x00,
+//Dark Green
+/* 0x28 */ 0x00, 0x20, 0x00, 0x00,
+/* 0x29 */ 0x00, 0x18, 0x00, 0x00,
+/* 0x2a */ 0x00, 0x10, 0x00, 0x00,
+//Pale Green
+/* 0x2b */ 0x40, 0x80, 0x40, 0x00,
+/* 0x2c */ 0x50, 0xa0, 0x50, 0x00,
+/* 0x2d */ 0x60, 0xc0, 0x60, 0x00,
+/* 0x2e */ 0x70, 0xe0, 0x70, 0x00,
+/* 0x2f */ 0x80, 0xff, 0x80, 0x00,
+
+//Yellow Orange
+/* 0x30 */ 0x00, 0xc0, 0xff, 0x00,
+/* 0x31 */ 0x00, 0xa8, 0xe0, 0x00,
+/* 0x32 */ 0x00, 0x90, 0xc0, 0x00,
+/* 0x33 */ 0x00, 0x78, 0xa0, 0x00,
+/* 0x34 */ 0x00, 0x60, 0x80, 0x00,
+/* 0x35 */ 0x00, 0x48, 0x60, 0x00,
+/* 0x36 */ 0x00, 0x30, 0x40, 0x00,
+/* 0x37 */ 0x00, 0x24, 0x30, 0x00,
+//Dark cyan
+/* 0x38 */ 0x20, 0x20, 0x00, 0x00,
+/* 0x39 */ 0x18, 0x18, 0x00, 0x00,
+/* 0x3a */ 0x10, 0x10, 0x00, 0x00,
+//Pale cyan
+/* 0x3b */ 0x80, 0x80, 0x40, 0x00,
+/* 0x3c */ 0xa0, 0xa0, 0x50, 0x00,
+/* 0x3d */ 0xc0, 0xc0, 0x60, 0x00,
+/* 0x3e */ 0xe0, 0xe0, 0x70, 0x00,
+/* 0x3f */ 0xff, 0xff, 0x80, 0x00,
+//Yellow
+/* 0x40 */ 0x00, 0xff, 0xff, 0x00,
+/* 0x41 */ 0x00, 0xe0, 0xe0, 0x00,
+/* 0x42 */ 0x00, 0xc0, 0xc0, 0x00,
+/* 0x43 */ 0x00, 0xa0, 0xa0, 0x00,
+/* 0x44 */ 0x00, 0x80, 0x80, 0x00,
+/* 0x45 */ 0x00, 0x60, 0x60, 0x00,
+/* 0x46 */ 0x00, 0x40, 0x40, 0x00,
+/* 0x47 */ 0x00, 0x30, 0x30, 0x00,
+//Dark Blue
+/* 0x48 */ 0x20, 0x00, 0x00, 0x00,
+/* 0x49 */ 0x18, 0x00, 0x00, 0x00,
+/* 0x4a */ 0x10, 0x00, 0x00, 0x00,
+//Pale Blue
+/* 0x4b */ 0x80, 0x40, 0x40, 0x00,
+/* 0x4c */ 0xa0, 0x50, 0x50, 0x00,
+/* 0x4d */ 0xc0, 0x60, 0x60, 0x00,
+/* 0x4e */ 0xe0, 0x70, 0x70, 0x00,
+/* 0x4f */ 0xff, 0x80, 0x80, 0x00,
+
+//Yellow Green
+/* 0x50 */ 0x00, 0xff, 0x80, 0x00,
+/* 0x51 */ 0x00, 0xe0, 0x70, 0x00,
+/* 0x52 */ 0x00, 0xc0, 0x60, 0x00,
+/* 0x53 */ 0x00, 0xa0, 0x50, 0x00,
+/* 0x54 */ 0x00, 0x80, 0x40, 0x00,
+/* 0x55 */ 0x00, 0x60, 0x30, 0x00,
+/* 0x56 */ 0x00, 0x40, 0x20, 0x00,
+/* 0x57 */ 0x00, 0x30, 0x18, 0x00,
+//Dark magenta
+/* 0x58 */ 0x20, 0x00, 0x20, 0x00,
+/* 0x59 */ 0x18, 0x00, 0x18, 0x00,
+/* 0x5a */ 0x10, 0x00, 0x10, 0x00,
+//Pale Magenta
+/* 0x5b */ 0x80, 0x40, 0x80, 0x00,
+/* 0x5c */ 0xa0, 0x50, 0xa0, 0x00,
+/* 0x5d */ 0xc0, 0x60, 0xc0, 0x00,
+/* 0x5e */ 0xe0, 0x70, 0xe0, 0x00,
+/* 0x5f */ 0xff, 0x80, 0xff, 0x00,
+
+//Green
+/* 0x60 */ 0x00, 0xff, 0x00, 0x00,
+/* 0x61 */ 0x00, 0xe0, 0x00, 0x00,
+/* 0x62 */ 0x00, 0xc0, 0x00, 0x00,
+/* 0x63 */ 0x00, 0xa0, 0x00, 0x00,
+/* 0x64 */ 0x00, 0x80, 0x00, 0x00,
+/* 0x65 */ 0x00, 0x60, 0x00, 0x00,
+/* 0x66 */ 0x00, 0x40, 0x00, 0x00,
+/* 0x67 */ 0x00, 0x30, 0x00, 0x00,
+// Dark Pale Red
+/* 0x68 */ 0x30, 0x30, 0x60, 0x00,
+/* 0x69 */ 0x20, 0x20, 0x40, 0x00,
+/* 0x6a */ 0x18, 0x18, 0x30, 0x00,
+//Very Pale Red
+/* 0x6b */ 0x60, 0x60, 0x80, 0x00,
+/* 0x6c */ 0x78, 0x78, 0xa0, 0x00,
+/* 0x6d */ 0x90, 0x90, 0xc0, 0x00,
+/* 0x6e */ 0xa8, 0xa8, 0xe0, 0x00,
+/* 0x6f */ 0xc0, 0xc0, 0xff, 0x00,
+
+// BlueGreen
+/* 0x70 */ 0x80, 0xff, 0x00, 0x00,
+/* 0x71 */ 0x70, 0xe0, 0x00, 0x00,
+/* 0x72 */ 0x60, 0xc0, 0x00, 0x00,
+/* 0x73 */ 0x50, 0xa0, 0x00, 0x00,
+/* 0x74 */ 0x40, 0x80, 0x00, 0x00,
+/* 0x75 */ 0x30, 0x60, 0x00, 0x00,
+/* 0x76 */ 0x20, 0x40, 0x00, 0x00,
+/* 0x77 */ 0x18, 0x30, 0x00, 0x00,
+// Dark Pale Yellow
+/* 0x78 */ 0x30, 0x60, 0x60, 0x00,
+/* 0x79 */ 0x20, 0x40, 0x40, 0x00,
+/* 0x7a */ 0x18, 0x30, 0x30, 0x00,
+//Very Pale Yellow
+/* 0x7b */ 0x60, 0x80, 0x80, 0x00,
+/* 0x7c */ 0x78, 0xa0, 0xa0, 0x00,
+/* 0x7d */ 0x90, 0xc0, 0xc0, 0x00,
+/* 0x7e */ 0xa8, 0xe0, 0xe0, 0x00,
+/* 0x7f */ 0xc0, 0xff, 0xff, 0x00,
+
+// Cyan
+/* 0x80 */ 0xff, 0xff, 0x00, 0x00,
+/* 0x81 */ 0xe0, 0xe0, 0x00, 0x00,
+/* 0x82 */ 0xc0, 0xc0, 0x00, 0x00,
+/* 0x83 */ 0xa0, 0xa0, 0x00, 0x00,
+/* 0x84 */ 0x80, 0x80, 0x00, 0x00,
+/* 0x85 */ 0x60, 0x60, 0x00, 0x00,
+/* 0x86 */ 0x40, 0x40, 0x00, 0x00,
+/* 0x87 */ 0x30, 0x30, 0x00, 0x00,
+//Dark Pale Green
+/* 0x88 */ 0x30, 0x60, 0x30, 0x00,
+/* 0x89 */ 0x20, 0x40, 0x20, 0x00,
+/* 0x8a */ 0x18, 0x30, 0x18, 0x00,
+//Very Plae Green
+/* 0x8b */ 0x60, 0x80, 0x60, 0x00,
+/* 0x8c */ 0x78, 0xa0, 0x78, 0x00,
+/* 0x8d */ 0x90, 0xc0, 0x90, 0x00,
+/* 0x8e */ 0xa8, 0xe0, 0xa8, 0x00,
+/* 0x8f */ 0xc0, 0xff, 0xc0, 0x00,
+
+//Sky Blue
+/* 0x90 */ 0xff, 0x80, 0x00, 0x00,
+/* 0x91 */ 0xe0, 0x70, 0x00, 0x00,
+/* 0x92 */ 0xc0, 0x60, 0x00, 0x00,
+/* 0x93 */ 0xa0, 0x50, 0x00, 0x00,
+/* 0x94 */ 0x80, 0x40, 0x00, 0x00,
+/* 0x95 */ 0x60, 0x30, 0x00, 0x00,
+/* 0x96 */ 0x40, 0x20, 0x00, 0x00,
+/* 0x97 */ 0x30, 0x18, 0x00, 0x00,
+//Dark Plae Cyan
+/* 0x98 */ 0x60, 0x60, 0x30, 0x00,
+/* 0x99 */ 0x40, 0x40, 0x20, 0x00,
+/* 0x9a */ 0x30, 0x30, 0x18, 0x00,
+//Very Pale Cyan
+/* 0x9b */ 0x80, 0x80, 0x60, 0x00,
+/* 0x9c */ 0xa0, 0xa0, 0x78, 0x00,
+/* 0x9d */ 0xc0, 0xc0, 0x90, 0x00,
+/* 0x9e */ 0xe0, 0xe0, 0xa8, 0x00,
+/* 0x9f */ 0xff, 0xff, 0xc0, 0x00,
+
+// Blue
+/* 0xa0 */ 0xff, 0x00, 0x00, 0x00,
+/* 0xa1 */ 0xe0, 0x00, 0x00, 0x00,
+/* 0xa2 */ 0xc0, 0x00, 0x00, 0x00,
+/* 0xa3 */ 0xa0, 0x00, 0x00, 0x00,
+/* 0xa4 */ 0x80, 0x00, 0x00, 0x00,
+/* 0xa5 */ 0x60, 0x00, 0x00, 0x00,
+/* 0xa6 */ 0x40, 0x00, 0x00, 0x00,
+/* 0xa7 */ 0x30, 0x00, 0x00, 0x00,
+//Dark Pale Blue
+/* 0xa8 */ 0x60, 0x30, 0x30, 0x00,
+/* 0xa9 */ 0x40, 0x20, 0x20, 0x00,
+/* 0xaa */ 0x30, 0x18, 0x18, 0x00,
+//Very Pale Blue
+/* 0xab */ 0x80, 0x60, 0x60, 0x00,
+/* 0xac */ 0xa0, 0x78, 0x78, 0x00,
+/* 0xad */ 0xc0, 0x90, 0x90, 0x00,
+/* 0xae */ 0xe0, 0xa8, 0xa8, 0x00,
+/* 0xaf */ 0xff, 0xc0, 0xc0, 0x00,
+
+// BlueMagenta
+/* 0xb0 */ 0xff, 0x00, 0x80, 0x00,
+/* 0xb1 */ 0xe0, 0x00, 0x70, 0x00,
+/* 0xb2 */ 0xc0, 0x00, 0x60, 0x00,
+/* 0xb3 */ 0xa0, 0x00, 0x50, 0x00,
+/* 0xb4 */ 0x80, 0x00, 0x40, 0x00,
+/* 0xb5 */ 0x60, 0x00, 0x30, 0x00,
+/* 0xb6 */ 0x40, 0x00, 0x20, 0x00,
+/* 0xb7 */ 0x30, 0x00, 0x18, 0x00,
+//Dark Pale Magenta
+/* 0xb8 */ 0x60, 0x30, 0x60, 0x00,
+/* 0xb9 */ 0x40, 0x20, 0x40, 0x00,
+/* 0xba */ 0x30, 0x18, 0x30, 0x00,
+//Very Pale Magenta
+/* 0xbb */ 0x80, 0x60, 0x80, 0x00,
+/* 0xbc */ 0xa0, 0x78, 0xa0, 0x00,
+/* 0xbd */ 0xc0, 0x90, 0xc0, 0x00,
+/* 0xbe */ 0xe0, 0xa8, 0xe0, 0x00,
+/* 0xbf */ 0xff, 0xc0, 0xff, 0x00,
+
+//Magenta
+/* 0xc0 */ 0xff, 0x00, 0xff, 0x00,
+/* 0xc1 */ 0xe0, 0x00, 0xe0, 0x00,
+/* 0xc2 */ 0xc0, 0x00, 0xc0, 0x00,
+/* 0xc3 */ 0xa0, 0x00, 0xa0, 0x00,
+/* 0xc4 */ 0x80, 0x00, 0x80, 0x00,
+/* 0xc5 */ 0x60, 0x00, 0x60, 0x00,
+/* 0xc6 */ 0x40, 0x00, 0x40, 0x00,
+/* 0xc7 */ 0x30, 0x00, 0x30, 0x00,
+
+//Grayscale
+/* 0xc8 */ 0xff, 0xff, 0xff, 0x00,
+/* 0xc9 */ 0xe0, 0xe0, 0xe0, 0x00,
+/* 0xca */ 0xc0, 0xc0, 0xc0, 0x00,
+/* 0xcb */ 0xa0, 0xa0, 0xa0, 0x00,
+/* 0xcc */ 0x80, 0x80, 0x80, 0x00,
+/* 0xcd */ 0x60, 0x60, 0x60, 0x00,
+/* 0xce */ 0x40, 0x40, 0x40, 0x00,
+/* 0xcf */ 0x20, 0x20, 0x20, 0x00,
+
+//Red Magenta
+/* 0xd0 */ 0x80, 0x00, 0xff, 0x00,
+/* 0xd1 */ 0x70, 0x00, 0xe0, 0x00,
+/* 0xd2 */ 0x60, 0x00, 0xc0, 0x00,
+/* 0xd3 */ 0x50, 0x00, 0xa0, 0x00,
+/* 0xd4 */ 0x40, 0x00, 0x80, 0x00,
+/* 0xd5 */ 0x30, 0x00, 0x60, 0x00,
+/* 0xd6 */ 0x20, 0x00, 0x40, 0x00,
+/* 0xd7 */ 0x18, 0x00, 0x30, 0x00,
+
+//Grayscale
+/* 0xd8 */ 0xf0, 0xf0, 0xf0, 0x00,
+/* 0xd9 */ 0xd0, 0xd0, 0xd0, 0x00,
+/* 0xda */ 0xb0, 0xb0, 0xb0, 0x00,
+/* 0xdb */ 0x90, 0x90, 0x90, 0x00,
+/* 0xdc */ 0x70, 0x70, 0x70, 0x00,
+/* 0xdd */ 0x50, 0x50, 0x50, 0x00,
+/* 0xde */ 0x30, 0x30, 0x30, 0x00,
+/* 0xdf */ 0x10, 0x10, 0x10, 0x00,
+
+// Flesh
+/* 0xe0 */ 0x48, 0x5a, 0x7f, 0x00,
+/* 0xe1 */ 0x5e, 0x76, 0xa5, 0x00,
+/* 0xe2 */ 0x72, 0x8f, 0xca, 0x00,
+/* 0xe3 */ 0x82, 0xa2, 0xe5, 0x00,
+/* 0xe4 */ 0x91, 0xb6, 0xff, 0x00,
+/* 0xe5 */ 0xaf, 0xd3, 0xff, 0x00,
+
+//Gold 12:10:4
+#if 0
+ //Old Gold colors
+ /* 0xe6 */ 0x1f, 0x54, 0x68, 0x00,
+ /* 0xe7 */ 0x20, 0x70, 0x80, 0x00,
+ /* 0xe8 */ 0x34, 0x88, 0xaa, 0x00,
+ /* 0xe9 */ 0x40, 0xa0, 0xc0, 0x00,
+ /* 0xea */ 0x4d, 0xc4, 0xf2, 0x00,
+ /* 0xeb */ 0x60, 0xe0, 0xf8, 0x00,
+ /* 0xec */ 0x99, 0xfc, 0xfc, 0x00,
+#endif
+
+// New gold colors r:g:b = 6:5:2
+/* 0xe6 */ 0x20, 0x50, 0x60, 0x00,
+/* 0xe7 */ 0x2a, 0x6a, 0x80, 0x00,
+/* 0xe8 */ 0x35, 0x85, 0xa0, 0x00,
+/* 0xe9 */ 0x40, 0xa0, 0xc0, 0x00,
+/* 0xea */ 0x4a, 0xba, 0xe0, 0x00,
+/* 0xeb */ 0x60, 0xe0, 0xf8, 0x00,
+/* 0xec */ 0xa0, 0xff, 0xff, 0x00,
+
+// Zombie
+
+#if 0
+ // Old zombie skin colors
+ /* 0xed */ 0x58, 0x69, 0x75, 0x00, -> 607080
+ /* 0xee */ 0x6e, 0x87, 0x91, 0x00, -> 788ca0
+ /* 0xef */ 0x81, 0x9a, 0xab, 0x00, -> 90a8c0
+#endif
+
+ // New zombie skin colors r:g:b=8:7:6
+/* 0xed */ 0x48, 0x54, 0x60, 0x00,
+/* 0xee */ 0x60, 0x70, 0x80, 0x00,
+/* 0xef */ 0x78, 0x8c, 0xa0, 0x00,
+/* 0xf0 */ 0x90, 0xa8, 0xc0, 0x00,
+/* 0xf1 */ 0xa8, 0xc4, 0xe0, 0x00,
+
+#if 0
+ // Old Brass 14:12:10, 13:10.5:5
+ /* 0xf0 */ 0xa0, 0xc0, 0xe0, 0x00, -> a8c4e0
+ /* 0xf1 */ 0x50, 0xa8, 0xd0, 0x00, -> 40a0c0
+#endif
+
+// Unused
+// (reserving 16 colors for the system seemed a reasonable idea
+// when I was using 256 color X-Window display, but it seems
+// an obsolete idea now. However, I should be very careful to
+// introduce new colors.
+/* 0xf2 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xf3 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xf4 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xf5 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xf6 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xf7 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xf8 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xf9 */ 0x00, 0x00, 0x00, 0x00,
+/* 0xfa */ 0x00, 0x00, 0x00, 0x00,
+/* 0xfb */ 0x00, 0x00, 0x00, 0x00,
+/* 0xfc */ 0x00, 0x00, 0x00, 0x00,
+/* 0xfd */ 0x00, 0x00, 0x00, 0x00,
+/* 0xfe */ 0x00, 0x00, 0x00, 0x00,
+
+//Transparent color
+/* 0xff */ 0x6c, 0x6c, 0x47, 0x00
+};
diff --git a/crawl-ref/source/rltiles/tool/shade.c b/crawl-ref/source/rltiles/tool/shade.c
new file mode 100644
index 0000000000..3e7d7f715b
--- /dev/null
+++ b/crawl-ref/source/rltiles/tool/shade.c
@@ -0,0 +1,254 @@
+#include "bm.h"
+
+int myrand()
+{
+ static int seed=12345;
+ seed *= 65539;
+ return(seed&0x7fffffff);
+}
+
+int same_hue(int r, int g, int b, int r0, int g0, int b0)
+{
+ if (r==255)r=256;
+ if (g==255)g=256;
+ if (b==255)b=256;
+
+ if(r0*g == g0*r && g0*b == b0*g && b0*r == r0*b) return 1;
+ return 0;
+}
+
+void convert_hue(unsigned char *r, unsigned char *g, unsigned char *b,
+ int r0, int g0, int b0, int modif)
+{
+ int rr,gg,bb;
+ int max0 = r0;
+ int max = *r;
+ if(max<*g) max=*g;
+ if(max<*b) max=*b;
+ if(max==255) max=256;
+
+ if(max0<g0) max0=g0;
+ if(max0<b0) max0=b0;
+
+ if (max <=32) modif /= 4;
+ else
+ if (max <=64) modif /= 2;
+
+ rr = ( (max+modif) * r0 )/ max0;
+ gg = ( (max+modif) * g0 )/ max0;
+ bb = ( (max+modif) * b0 )/ max0;
+
+ if(rr>255) rr=255;
+ else if(rr<0) rr=0;
+ if(gg>255) gg=255;
+ else if(gg<0) gg=0;
+ if(bb>255) bb=255;
+ else if(bb<0) bb=0;
+
+ *r=rr; *g=gg; *b=bb;
+}
+
+
+int main(int argc, char **argv){
+
+unsigned char *ibuf[3];
+int x,y;
+int i;
+char fn[100],st[1024];
+char *flag;
+unsigned char *nbuf[3];
+int ncol[3],ccol[10][3],nccol,ccol2[10][3], modif[10];
+FILE *ifp;
+int level,l;
+int xx,yy,c,f;
+float prob,amp;
+int thresh;
+
+ stdpal();
+ process_cpath(argv[0]);
+
+if(argc!=1)
+ strcpy(fn, argv[1]);
+else
+ sprintf(fn,"%sshade.txt",cpath);
+
+fprintf(stderr,"FILE=[%s]\n",fn);
+
+ifp=fopen(fn,"r");
+myfget(st,ifp);
+sprintf(fn,"%s%s.bmp",cpath,st);
+fprintf(stderr,"Orig file=[%s]\n",fn);
+ibuf[0]=ibuf[1]=ibuf[2]=NULL;
+bmread(fn,&x,&y,ibuf );
+fprintf(stderr,"loaded x=%d y=%d\n",x,y);
+flag=malloc(x*y);
+for(i=0;i<3;i++)nbuf[i]=malloc(x*y);
+
+while(1){
+myfget(st,ifp);
+if(feof(ifp))break;
+level=atoi(st);
+
+//random perturbation amplitude/prob
+myfget(st,ifp);
+prob=atof(st);
+thresh=(int)(0x7fffffff*prob);
+if(prob==-1.0)thresh=-1;//ringmail
+if(prob==-2.0)thresh=-2;//chainmail
+
+myfget(st,ifp);
+amp=atof(st);
+printf("P=%f Amp=%f\n",prob,amp);
+
+// Normal col
+myfget(st,ifp);
+fprintf(stderr,"Normal [%s]\n",st);
+sscanf(st,"%d %d %d",&ncol[0],&ncol[1],&ncol[2]);
+
+//Control col
+myfget(st,ifp);
+if(feof(ifp))break;
+nccol=atoi(st);
+
+for(i=0;i<nccol;i++){
+ myfget(st,ifp);
+ if(feof(ifp))exit(1);
+ modif[i]=0;
+ l=sscanf(st,"%d %d %d %d %d %d %d",&ccol[i][0],&ccol[i][1],&ccol[i][2]
+ ,&ccol2[i][0],&ccol2[i][1],&ccol2[i][2], &modif[i]);
+ if(l==3){
+ ccol2[i][0]=ccol[i][0];
+ ccol2[i][1]=ccol[i][1];
+ ccol2[i][2]=ccol[i][2];
+ }
+}//ncol
+
+fprintf(stderr,"Level=%d ccol=%d\n",level,nccol);
+fprintf(stderr,"Normal=%d %d %d\n",ncol[0],ncol[1],ncol[2]);
+
+for(xx=0;xx<x;xx++){
+for(yy=0;yy<y;yy++){
+int ad=xx+yy*x;
+flag[ad]=0;
+if( same_hue(ibuf[0][ad], ibuf[1][ad], ibuf[2][ad],
+ ncol[0], ncol[1], ncol[2])) flag[ad]=1;
+else
+{
+for(i=0;i<nccol;i++)
+ if(same_hue(ibuf[0][ad], ibuf[1][ad], ibuf[2][ad],
+ ccol[i][0], ccol[i][1], ccol[i][2])) flag[ad]=2+i;
+}
+}}
+/***** convert ******/
+for(xx=0;xx<x;xx++){
+for(yy=0;yy<y;yy++){
+ int ad=xx+yy*x;
+ int f=flag[ad];
+ if(f>1) convert_hue(&ibuf[0][ad],&ibuf[1][ad],&ibuf[2][ad],
+ ccol2[f-2][0],ccol2[f-2][1],ccol2[f-2][2], modif[f-2]);
+}
+}
+
+/********************************/
+for(l=0;l<level;l++){
+for(yy=0;yy<y;yy++){
+for(xx=0;xx<x;xx++){
+int ad=xx+yy*x;
+int sum,n;
+if(flag[ad]!=1){
+for(c=0;c<3;c++)nbuf[c][ad]=ibuf[c][ad];
+continue;
+}
+for(c=0;c<3;c++){
+n=0;sum=0; // (int)(ibuf[c][ad])*1;
+if(xx>0 && flag[ad-1]!=0){n++;sum+=ibuf[c][ad-1];}
+if(xx<x-1 && flag[ad+1]!=0){n++;sum+=ibuf[c][ad+1];}
+if(yy>0 && flag[ad-x]!=0){n++;sum+=ibuf[c][ad-x];}
+if(yy<y-1 && flag[ad+x]!=0){n++;sum+=ibuf[c][ad+x];}
+if(n!=0){
+sum +=n/2;
+sum/=n;
+nbuf[c][ad]=sum;
+}else nbuf[c][ad]=ibuf[c][ad];
+}/*c*/
+ad++;
+}}/*xy**/
+
+for(xx=0;xx<x;xx++){
+for(yy=0;yy<y;yy++){
+int ad=xx+yy*x;
+for(c=0;c<3;c++){
+ibuf[c][ad]=nbuf[c][ad];}}}
+}/*level*/
+
+/**random **/
+if(thresh==-1){//ringmail
+
+for(xx=0;xx<x;xx++){
+for(yy=0;yy<y;yy++){
+ int ad=xx+yy*x;
+ if(flag[ad]!=0){
+ int dd=0;
+ int flag=(xx+2000-3*yy)%5;
+ if(flag==0)dd=+64;
+ if(flag==3||flag==4)dd=-32;
+ for(c=0;c<3;c++){
+ int d=(int)ibuf[c][ad];
+ d=(int)(d+dd);
+ if(d>255)d=255;
+ if(d<0)d=0;
+ ibuf[c][ad]=(unsigned char)d;
+ }
+}
+}}//XY
+}//ringmail
+if(thresh==-2){//chainmail
+
+for(xx=0;xx<x;xx++){
+for(yy=0;yy<y;yy++){
+ int ad=xx+yy*x;
+if(flag[ad]!=0){
+ int dd=0;
+ int flag=(xx+2000-2*yy)%4;
+ if(flag==0)dd=+64;
+ if(flag==1)dd=+32;
+ if(flag==3)dd=-32;
+ for(c=0;c<3;c++){
+ int d=(int)ibuf[c][ad];
+ d=(int)(d+dd);
+ if(d>255)d=255;
+ if(d<0)d=0;
+ ibuf[c][ad]=(unsigned char)d;
+ }
+}
+}}//XY
+}//chainmail
+
+if(thresh>0){
+for(xx=0;xx<x;xx++){
+for(yy=0;yy<y;yy++){
+ int ad=xx+yy*x;
+if(myrand()<thresh && flag[ad]!=0){
+
+ double r=1.0-amp+2*amp*(myrand()*1.0/0x7fffffff);
+ if(r<0.0)r=0.0;
+ for(c=0;c<3;c++){
+ int d=(int)ibuf[c][ad];
+ d=(int)(d*r);
+ if(d>255)d=255;
+ if(d<0)d=0;
+ ibuf[c][ad]=(unsigned char)d;
+ }
+}
+}}//XY
+}//if
+
+}/*while*/
+
+sprintf(fn,"%sb.bmp",cpath);
+bmwrite_dither(fn,x,y,ibuf ,flag);
+
+
+fclose(ifp);
+
+}
diff --git a/crawl-ref/source/rltiles/walls2d/hall.bmp b/crawl-ref/source/rltiles/walls2d/hall.bmp
new file mode 100644
index 0000000000..6882a56689
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/hall.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/hall.png b/crawl-ref/source/rltiles/walls2d/hall.png
new file mode 100644
index 0000000000..649a6a1b3a
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/hall.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/hive.bmp b/crawl-ref/source/rltiles/walls2d/hive.bmp
new file mode 100644
index 0000000000..7706dc83f3
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/hive.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/hive.png b/crawl-ref/source/rltiles/walls2d/hive.png
new file mode 100644
index 0000000000..e4051c2146
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/hive.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/ice.bmp b/crawl-ref/source/rltiles/walls2d/ice.bmp
new file mode 100644
index 0000000000..9f4aa8dd87
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/ice.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/ice.png b/crawl-ref/source/rltiles/walls2d/ice.png
new file mode 100644
index 0000000000..37ea5ad517
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/ice.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/lair.bmp b/crawl-ref/source/rltiles/walls2d/lair.bmp
new file mode 100644
index 0000000000..2277be3720
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/lair.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/lair.png b/crawl-ref/source/rltiles/walls2d/lair.png
new file mode 100644
index 0000000000..b9607de218
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/lair.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/normal.bmp b/crawl-ref/source/rltiles/walls2d/normal.bmp
new file mode 100644
index 0000000000..9a5a8e6b09
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/normal.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/normal.png b/crawl-ref/source/rltiles/walls2d/normal.png
new file mode 100644
index 0000000000..386ac0fc5a
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/normal.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/orc.bmp b/crawl-ref/source/rltiles/walls2d/orc.bmp
new file mode 100644
index 0000000000..02d88b3901
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/orc.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/orc.png b/crawl-ref/source/rltiles/walls2d/orc.png
new file mode 100644
index 0000000000..902ee9fcc3
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/orc.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/slime.bmp b/crawl-ref/source/rltiles/walls2d/slime.bmp
new file mode 100644
index 0000000000..a4c0d86c26
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/slime.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/slime.png b/crawl-ref/source/rltiles/walls2d/slime.png
new file mode 100644
index 0000000000..ec08cfa3c7
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/slime.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/snake.bmp b/crawl-ref/source/rltiles/walls2d/snake.bmp
new file mode 100644
index 0000000000..9e06baaecf
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/snake.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/snake.png b/crawl-ref/source/rltiles/walls2d/snake.png
new file mode 100644
index 0000000000..1c63a9ba01
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/snake.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/swamp.bmp b/crawl-ref/source/rltiles/walls2d/swamp.bmp
new file mode 100644
index 0000000000..da7fc588b9
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/swamp.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/swamp.png b/crawl-ref/source/rltiles/walls2d/swamp.png
new file mode 100644
index 0000000000..ebb928e531
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/swamp.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/tomb.bmp b/crawl-ref/source/rltiles/walls2d/tomb.bmp
new file mode 100644
index 0000000000..970ab6110e
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/tomb.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/tomb.png b/crawl-ref/source/rltiles/walls2d/tomb.png
new file mode 100644
index 0000000000..25264abe3f
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/tomb.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/undead.bmp b/crawl-ref/source/rltiles/walls2d/undead.bmp
new file mode 100644
index 0000000000..fc318adce0
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/undead.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/undead.png b/crawl-ref/source/rltiles/walls2d/undead.png
new file mode 100644
index 0000000000..4b0cb1a139
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/undead.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/vault.bmp b/crawl-ref/source/rltiles/walls2d/vault.bmp
new file mode 100644
index 0000000000..87bb9e7dc1
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/vault.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/vault.png b/crawl-ref/source/rltiles/walls2d/vault.png
new file mode 100644
index 0000000000..a5fe3910ef
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/vault.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_blue.bmp b/crawl-ref/source/rltiles/walls2d/z_blue.bmp
new file mode 100644
index 0000000000..248c13e414
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_blue.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_blue.png b/crawl-ref/source/rltiles/walls2d/z_blue.png
new file mode 100644
index 0000000000..68462afa08
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_blue.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_cyan.bmp b/crawl-ref/source/rltiles/walls2d/z_cyan.bmp
new file mode 100644
index 0000000000..789150f396
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_cyan.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_cyan.png b/crawl-ref/source/rltiles/walls2d/z_cyan.png
new file mode 100644
index 0000000000..f75870b8b2
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_cyan.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_gray.bmp b/crawl-ref/source/rltiles/walls2d/z_gray.bmp
new file mode 100644
index 0000000000..273d46d558
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_gray.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_gray.png b/crawl-ref/source/rltiles/walls2d/z_gray.png
new file mode 100644
index 0000000000..5e67352727
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_gray.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_green.bmp b/crawl-ref/source/rltiles/walls2d/z_green.bmp
new file mode 100644
index 0000000000..598934909a
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_green.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_green.png b/crawl-ref/source/rltiles/walls2d/z_green.png
new file mode 100644
index 0000000000..7a288aaed4
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_green.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_magenta.bmp b/crawl-ref/source/rltiles/walls2d/z_magenta.bmp
new file mode 100644
index 0000000000..665136ab96
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_magenta.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_magenta.png b/crawl-ref/source/rltiles/walls2d/z_magenta.png
new file mode 100644
index 0000000000..d2d314185f
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_magenta.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_red.bmp b/crawl-ref/source/rltiles/walls2d/z_red.bmp
new file mode 100644
index 0000000000..05cb422e91
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_red.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_red.png b/crawl-ref/source/rltiles/walls2d/z_red.png
new file mode 100644
index 0000000000..5025e5b984
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_red.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_yellow.bmp b/crawl-ref/source/rltiles/walls2d/z_yellow.bmp
new file mode 100644
index 0000000000..87af020d81
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_yellow.bmp
Binary files differ
diff --git a/crawl-ref/source/rltiles/walls2d/z_yellow.png b/crawl-ref/source/rltiles/walls2d/z_yellow.png
new file mode 100644
index 0000000000..c70ad9be5f
--- /dev/null
+++ b/crawl-ref/source/rltiles/walls2d/z_yellow.png
Binary files differ
diff --git a/crawl-ref/source/shopping.cc b/crawl-ref/source/shopping.cc
index f9aad54aeb..9490345e4d 100644
--- a/crawl-ref/source/shopping.cc
+++ b/crawl-ref/source/shopping.cc
@@ -172,6 +172,10 @@ static void in_a_shop( int shopidx )
cursor_control coff(false);
+#ifdef USE_TILE
+ clrscr();
+#endif
+
const std::string hello = "Welcome to " + shop_name(shop.x, shop.y) + "!";
shop_print(hello.c_str(), 20);
@@ -306,14 +310,14 @@ bool shoptype_identifies_stock(shop_type type)
static void shop_print( const char *shoppy, int sh_lines )
{
- gotoxy(1, sh_lines);
+ gotoxy(1, sh_lines, GOTO_CRT);
cprintf("%s", shoppy);
clear_to_end_of_line();
}
static void more3()
{
- gotoxy(70, 20);
+ gotoxy(70, 20, GOTO_CRT);
cprintf("-more-");
get_ch();
return;
diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc
index 80dbdbb276..ac94743fda 100644
--- a/crawl-ref/source/spells2.cc
+++ b/crawl-ref/source/spells2.cc
@@ -49,6 +49,7 @@
#include "spells4.h"
#include "spl-cast.h"
#include "stuff.h"
+#include "tiles.h"
#include "terrain.h"
#include "traps.h"
#include "view.h"
@@ -119,6 +120,11 @@ unsigned char detect_items( int pow )
set_envmap_obj(i, j, DNGN_ITEM_DETECTED);
set_envmap_detected_item(i, j);
+#ifdef USE_TILE
+ // Don't replace previously seen items with an unseen one.
+ if (!is_terrain_seen(i,j))
+ tile_place_tile_bk(i, j, TILE_UNSEEN_ITEM);
+#endif
}
}
}
@@ -147,6 +153,11 @@ static void fuzz_detect_creatures(int pow, int *fuzz_radius, int *fuzz_chance)
static bool mark_detected_creature(int gridx, int gridy, const monsters *mon,
int fuzz_chance, int fuzz_radius)
{
+#ifdef USE_TILE
+ // Get monster index pre-fuzz
+ int idx = mgrd[gridx][gridy];
+#endif
+
bool found_good = false;
if (fuzz_radius && fuzz_chance > random2(100))
@@ -177,6 +188,10 @@ static bool mark_detected_creature(int gridx, int gridy, const monsters *mon,
set_envmap_obj(gridx, gridy, mon->type + DNGN_START_OF_MONSTERS);
set_envmap_detected_mons(gridx, gridy);
+#ifdef USE_TILE
+ tile_place_monster(gridx, gridy, idx, false);
+#endif
+
return found_good;
}
diff --git a/crawl-ref/source/stuff.cc b/crawl-ref/source/stuff.cc
index 1a9043437a..2ab600cd8c 100644
--- a/crawl-ref/source/stuff.cc
+++ b/crawl-ref/source/stuff.cc
@@ -53,8 +53,10 @@
#endif
#ifdef UNIX
+#ifndef USE_TILE
#include "libunix.h"
#endif
+#endif
#include "branch.h"
#include "delay.h"
@@ -431,7 +433,9 @@ void cio_init()
{
crawl_state.io_inited = true;
-#ifdef UNIX
+#if defined(USE_TILE)
+ libgui_init();
+#elif defined(UNIX)
unixcurses_startup();
#endif
@@ -457,8 +461,10 @@ void cio_cleanup()
{
if (!crawl_state.io_inited)
return;
-
-#ifdef UNIX
+
+#if defined(USE_TILE)
+ libgui_shutdown();
+#elif defined(UNIX)
unixcurses_shutdown();
#endif
diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc
index 944ac5604e..c962301856 100644
--- a/crawl-ref/source/tags.cc
+++ b/crawl-ref/source/tags.cc
@@ -86,6 +86,7 @@
#include "skills2.h"
#include "stuff.h"
#include "tags.h"
+#include "tiles.h"
#include "travel.h"
// THE BIG IMPORTANT TAG CONSTRUCTION/PARSE BUFFER
@@ -117,11 +118,14 @@ static void tag_construct_level(tagHeader &th);
static void tag_construct_level_items(tagHeader &th);
static void tag_construct_level_monsters(tagHeader &th);
static void tag_construct_level_attitude(tagHeader &th);
+static void tag_construct_level_tiles(struct tagHeader &th);
static void tag_read_level(tagHeader &th, char minorVersion);
static void tag_read_level_items(tagHeader &th, char minorVersion);
static void tag_read_level_monsters(tagHeader &th, char minorVersion);
static void tag_read_level_attitude(tagHeader &th);
static void tag_missing_level_attitude();
+static void tag_read_level_tiles(struct tagHeader &th);
+static void tag_missing_level_tiles();
static void tag_construct_ghost(tagHeader &th);
static void tag_read_ghost(tagHeader &th, char minorVersion);
@@ -615,6 +619,9 @@ void tag_construct(tagHeader &th, int tagID)
case TAG_LEVEL_MONSTERS:
tag_construct_level_monsters(th);
break;
+ case TAG_LEVEL_TILES:
+ tag_construct_level_tiles(th);
+ break;
case TAG_LEVEL_ATTITUDE:
tag_construct_level_attitude(th);
break;
@@ -720,6 +727,9 @@ int tag_read(FILE *fp, char minorVersion)
case TAG_LEVEL_ATTITUDE:
tag_read_level_attitude(th);
break;
+ case TAG_LEVEL_TILES:
+ tag_read_level_tiles(th);
+ break;
case TAG_GHOST:
tag_read_ghost(th, minorVersion);
break;
@@ -755,6 +765,9 @@ void tag_missing(int tag, char minorVersion)
case TAG_LEVEL_ATTITUDE:
tag_missing_level_attitude();
break;
+ case TAG_LEVEL_TILES:
+ tag_missing_level_tiles();
+ break;
default:
perror("Tag %d is missing; file is likely corrupt.");
end(-1);
@@ -785,10 +798,15 @@ void tag_set_expected(char tags[], int fileType)
case TAGTYPE_LEVEL:
if (i >= TAG_LEVEL && i <= TAG_LEVEL_ATTITUDE && i != TAG_GHOST)
tags[i] = 1;
+#ifdef USE_TILE
+ if (i == TAG_LEVEL_TILES)
+ tags[i] = 1;
+#endif
break;
case TAGTYPE_GHOST:
if (i == TAG_GHOST)
tags[i] = 1;
+ break;
default:
// I don't know what kind of file that is!
break;
@@ -1782,6 +1800,101 @@ void tag_construct_level_attitude(tagHeader &th)
}
}
+void tag_construct_level_tiles(struct tagHeader &th)
+{
+#ifdef USE_TILE
+ unsigned short rle_count = 0; // for run-length encoding
+ unsigned short tile = 0;
+ unsigned short last_tile = 0;
+
+ // Ver
+ marshallShort(th, 71); // tile routine subversion
+ // map grids
+ // how many X?
+ marshallShort(th, GXM);
+ // how many Y?
+ marshallShort(th, GYM);
+
+ tile = env.tile_bk_bg[0][0];
+ // bg first
+ for (int count_x = 0; count_x < GXM; count_x++)
+ {
+ for (int count_y = 0; count_y < GYM; count_y++)
+ {
+ last_tile = tile;
+ tile = env.tile_bk_bg[count_x][count_y];
+
+ if (tile == last_tile)
+ {
+ rle_count++;
+ if (rle_count == 0x100)
+ {
+ marshallShort(th, last_tile);
+ marshallByte(th, (char)0xFF);
+ rle_count = 1;
+ }
+ }
+ else
+ {
+ marshallShort(th, last_tile);
+ // Note: the unsigned char tile count gets streamed
+ // as a signed char here. It gets read back into
+ // an unsigned char in the read function.
+ marshallByte(th, rle_count);
+ rle_count = 1;
+ }
+ }
+ }
+ marshallShort(th, tile);
+ marshallByte(th, rle_count);
+
+ // fg
+ tile = env.tile_bk_fg[0][0];
+ rle_count = 0;
+ for (int count_x = 0; count_x < GXM; count_x++)
+ {
+ for (int count_y = 0; count_y < GYM; count_y++)
+ {
+ last_tile = tile;
+ tile = env.tile_bk_fg[count_x][count_y];
+
+ if (tile == last_tile)
+ {
+ rle_count++;
+ if (rle_count == 0x100)
+ {
+ marshallShort(th, last_tile);
+ marshallByte(th, (char)0xFF);
+ rle_count = 1;
+ }
+ }
+ else
+ {
+ marshallShort(th, last_tile);
+ marshallByte(th, rle_count);
+ rle_count = 1;
+ }
+ }
+ }
+ marshallShort(th, tile);
+ marshallByte(th, rle_count);
+
+ // flavor
+ for (int count_x = 0; count_x < GXM; count_x++)
+ {
+ for (int count_y = 0; count_y < GYM; count_y++)
+ {
+ marshallByte(th, env.tile_flavor[count_x][count_y].wall);
+ marshallByte(th, env.tile_flavor[count_x][count_y].floor);
+ marshallByte(th, env.tile_flavor[count_x][count_y].special);
+ }
+ }
+
+ GmapInit(false);
+ TileLoadWall(false);
+ tile_clear_buf();
+#endif
+}
static void tag_read_level( tagHeader &th, char minorVersion )
{
@@ -2010,6 +2123,90 @@ void tag_missing_level_attitude()
}
}
+void tag_read_level_tiles(struct tagHeader &th)
+{
+#ifdef USE_TILE
+ for (int i = 0; i < GXM; i++)
+ {
+ for (int j = 0; j < GYM; j++)
+ {
+ env.tile_bk_bg[i][j] = 0;
+ env.tile_bk_fg[i][j] = 0;
+ }
+ }
+
+ unsigned char rle_count = 0;
+ unsigned short tile = 0;
+
+ int ver = unmarshallShort(th);
+ if (ver == 0) return;
+
+ // map grids
+ // how many X?
+ const int gx = unmarshallShort(th);
+ // how many Y?
+ const int gy = unmarshallShort(th);
+
+ // BG first
+ for (int i = 0; i < gx; i++)
+ {
+ for (int j = 0; j < gy; j++)
+ {
+ if (rle_count == 0)
+ {
+ tile = unmarshallShort(th);
+ rle_count = unmarshallByte(th);
+ }
+ env.tile_bk_bg[i][j] = tile;
+ rle_count--;
+ }
+ }
+
+ // FG
+ rle_count = 0;
+ for (int i = 0; i < gx; i++)
+ {
+ for (int j = 0; j < gy; j++)
+ {
+ if (rle_count == 0)
+ {
+ tile = unmarshallShort(th);
+ rle_count = unmarshallByte(th);
+ }
+ env.tile_bk_fg[i][j] = tile;
+ rle_count--;
+ }
+ }
+
+ // flavor
+ for (int x = 0; x < gx; x++)
+ {
+ for (int y = 0; y < gy; y++)
+ {
+ env.tile_flavor[x][y].wall = unmarshallByte(th);
+ env.tile_flavor[x][y].floor = unmarshallByte(th);
+ env.tile_flavor[x][y].special = unmarshallByte(th);
+ }
+ }
+#endif
+}
+
+static void tag_missing_level_tiles()
+{
+#ifdef USE_TILE
+ int i;
+ int j;
+
+ for (i = 0; i < GXM; i++)
+ {
+ for (j = 0; j < GYM; j++)
+ {
+ env.tile_bk_bg[i][j] = 0;
+ env.tile_bk_fg[i][j] = 0;
+ }
+ }
+#endif
+}
// ------------------------------- ghost tags ---------------------------- //
diff --git a/crawl-ref/source/tags.h b/crawl-ref/source/tags.h
index cdf72df75b..d93d995035 100644
--- a/crawl-ref/source/tags.h
+++ b/crawl-ref/source/tags.h
@@ -28,6 +28,7 @@ enum tag_type // used during save/load process to identify data blocks
TAG_GHOST, // ghost
TAG_LEVEL_ATTITUDE, // monster attitudes
TAG_LOST_MONSTERS, // monsters in transit
+ TAG_LEVEL_TILES,
NUM_TAGS
};
diff --git a/crawl-ref/source/tile1.cc b/crawl-ref/source/tile1.cc
new file mode 100644
index 0000000000..9ed114b54e
--- /dev/null
+++ b/crawl-ref/source/tile1.cc
@@ -0,0 +1,3813 @@
+#ifdef USE_TILE
+
+#include <stdio.h>
+#include "AppHdr.h"
+#include "direct.h"
+#include "externs.h"
+#include "food.h"
+#include "itemname.h"
+#include "items.h"
+#include "itemprop.h"
+#include "macro.h"
+#include "monstuff.h"
+#include "mon-util.h"
+#include "player.h"
+#include "randart.h"
+#include "stuff.h"
+#include "terrain.h"
+#include "tiles.h"
+#include "tiledef-p.h"
+#include "view.h"
+
+#ifdef TILEP_DEBUG
+#include "tilep-cmt.h"
+#endif
+
+/* external */
+extern short get_helmet_type( const item_def &item );
+extern bool player_is_airborne(void);
+extern bool item_cursed( const item_def &item );
+extern bool item_ident( const item_def &item, unsigned long flags );
+
+// tile index cache to reduce tileidx() calls
+static FixedArray < unsigned short, GXM, GYM > tile_dngn;
+// // gv backup
+static FixedArray < unsigned char, GXM, GYM > gv_now;
+static FixedArray < unsigned char, GXM, GYM > wall_flag;
+#define WFLAG_L 1
+#define WFLAG_U 2
+#define WFLAG_D 4
+#define WFLAG_R 8
+
+void TileNewLevel(bool first_time)
+{
+ GmapInit(false);
+ TileLoadWall(false);
+ tile_clear_buf();
+ if (first_time)
+ tile_init_flavor();
+}
+
+const int TILE_TODO = TILE_ERROR;
+
+/**** tile index routines ****/
+
+int tile_unseen_flag(const coord_def& gc)
+{
+ if (!map_bounds(gc))
+ return TILE_FLAG_UNSEEN;
+ else if (is_terrain_known(gc.x,gc.y)
+ && !is_terrain_seen(gc.x,gc.y)
+ || is_envmap_detected_item(gc.x,gc.y)
+ || is_envmap_detected_mons(gc.x,gc.y))
+ {
+ return TILE_FLAG_MM_UNSEEN;
+ }
+ else
+ {
+ return TILE_FLAG_UNSEEN;
+ }
+}
+
+int tileidx_monster(int mon_idx)
+{
+ int ch = TILE_ERROR;
+ int mons = menv[mon_idx].type;
+
+ switch(mons)
+ {
+ case MONS_GIANT_ANT: ch=TILE_MONS_GIANT_ANT; break;
+ case MONS_GIANT_BAT: ch=TILE_MONS_GIANT_BAT; break;
+ case MONS_CENTAUR: ch=TILE_MONS_CENTAUR; break;
+ case MONS_RED_DEVIL: ch=TILE_MONS_RED_DEVIL; break;
+ case MONS_ETTIN: ch=TILE_MONS_ETTIN; break;
+ case MONS_FUNGUS: ch=TILE_MONS_FUNGUS; break;
+ case MONS_GOBLIN: ch=TILE_MONS_GOBLIN; break;
+ case MONS_HOUND: ch=TILE_MONS_HOUND; break;
+ case MONS_IMP: ch=TILE_MONS_IMP; break;
+ case MONS_JACKAL: ch=TILE_MONS_JACKAL; break;
+ case MONS_KILLER_BEE: ch=TILE_MONS_KILLER_BEE; break;
+ case MONS_KILLER_BEE_LARVA: ch=TILE_MONS_KILLER_BEE_LARVA; break;
+ case MONS_MANTICORE: ch=TILE_MONS_MANTICORE; break;
+ case MONS_NECROPHAGE: ch=TILE_MONS_NECROPHAGE; break;
+ case MONS_ORC: ch=TILE_MONS_ORC; break;
+ case MONS_PHANTOM: ch=TILE_MONS_PHANTOM; break;
+ case MONS_QUASIT: ch=TILE_MONS_QUASIT; break;
+ case MONS_RAT: ch=TILE_MONS_RAT; break;
+ case MONS_SCORPION: ch=TILE_MONS_SCORPION; break;
+ case MONS_UGLY_THING : ch=TILE_MONS_UGLY_THING ; break;
+ case MONS_FIRE_VORTEX: ch=TILE_MONS_FIRE_VORTEX; break;
+ case MONS_WORM: ch=TILE_MONS_WORM; break;
+ case MONS_ABOMINATION_SMALL: ch=TILE_MONS_ABOMINATION_SMALL; break;
+ case MONS_YELLOW_WASP: ch=TILE_MONS_YELLOW_WASP; break;
+ case MONS_ZOMBIE_SMALL: ch=TILE_MONS_ZOMBIE_SMALL; break;
+ case MONS_ANGEL: ch=TILE_MONS_ANGEL; break;
+ case MONS_GIANT_BEETLE: ch=TILE_MONS_GIANT_BEETLE; break;
+ case MONS_CYCLOPS: ch=TILE_MONS_CYCLOPS; break;
+ case MONS_DRAGON: ch=TILE_MONS_DRAGON; break;
+ case MONS_TWO_HEADED_OGRE: ch=TILE_MONS_TWO_HEADED_OGRE; break;
+ case MONS_FIEND: ch=TILE_MONS_FIEND; break;
+ case MONS_GIANT_SPORE: ch=TILE_MONS_GIANT_SPORE; break;
+ case MONS_HOBGOBLIN: ch=TILE_MONS_HOBGOBLIN; break;
+ case MONS_ICE_BEAST: ch=TILE_MONS_ICE_BEAST; break;
+ case MONS_JELLY: ch=TILE_MONS_JELLY; break;
+ case MONS_KOBOLD: ch=TILE_MONS_KOBOLD; break;
+ case MONS_LICH: ch=TILE_MONS_LICH; break;
+ case MONS_MUMMY: ch=TILE_MONS_MUMMY; break;
+ case MONS_GUARDIAN_NAGA: ch=TILE_MONS_GUARDIAN_NAGA; break;
+ case MONS_OGRE: ch=TILE_MONS_OGRE; break;
+ case MONS_PLANT: ch=TILE_MONS_PLANT; break;
+ case MONS_QUEEN_BEE: ch=TILE_MONS_QUEEN_BEE; break;
+ case MONS_RAKSHASA: ch=TILE_MONS_RAKSHASA; break;
+ case MONS_SNAKE: ch=TILE_MONS_SNAKE; break;
+ case MONS_TROLL: ch=TILE_MONS_TROLL; break;
+ case MONS_UNSEEN_HORROR: ch=TILE_MONS_UNSEEN_HORROR; break;
+ case MONS_VAMPIRE: ch=TILE_MONS_VAMPIRE; break;
+ case MONS_WRAITH: ch=TILE_MONS_WRAITH; break;
+
+ case MONS_ABOMINATION_LARGE:
+ {
+ // 7 different colours
+ struct monsters *mon = &menv[mon_idx];
+ ch = TILE_MONS_ABOMINATION_LARGE + ((mon->colour)%7);
+ break;
+ }
+
+ case MONS_YAK: ch=TILE_MONS_YAK; break;
+ case MONS_ZOMBIE_LARGE: ch=TILE_MONS_ZOMBIE_LARGE; break;
+ case MONS_ORC_WARRIOR: ch=TILE_MONS_ORC_WARRIOR; break;
+ case MONS_KOBOLD_DEMONOLOGIST: ch=TILE_MONS_KOBOLD_DEMONOLOGIST; break;
+ case MONS_ORC_WIZARD: ch=TILE_MONS_ORC_WIZARD; break;
+ case MONS_ORC_KNIGHT: ch=TILE_MONS_ORC_KNIGHT; break;
+ case MONS_WYVERN: ch=TILE_MONS_WYVERN; break;
+ case MONS_BIG_KOBOLD: ch=TILE_MONS_BIG_KOBOLD; break;
+ case MONS_GIANT_EYEBALL: ch=TILE_MONS_GIANT_EYEBALL; break;
+ case MONS_WIGHT: ch=TILE_MONS_WIGHT; break;
+ case MONS_OKLOB_PLANT: ch=TILE_MONS_OKLOB_PLANT; break;
+ case MONS_WOLF_SPIDER: ch=TILE_MONS_WOLF_SPIDER; break;
+ case MONS_SHADOW: ch=TILE_MONS_SHADOW; break;
+ case MONS_HUNGRY_GHOST: ch=TILE_MONS_HUNGRY_GHOST; break;
+ case MONS_EYE_OF_DRAINING: ch=TILE_MONS_EYE_OF_DRAINING; break;
+
+ case MONS_BUTTERFLY:
+ {
+ // 7 different colours
+ struct monsters *mon = &menv[mon_idx];
+ ch = TILE_MONS_BUTTERFLY + ((mon->colour)%7);
+ break;
+ }
+
+ case MONS_WANDERING_MUSHROOM: ch=TILE_MONS_WANDERING_MUSHROOM; break;
+ case MONS_EFREET: ch=TILE_MONS_EFREET; break;
+ case MONS_BRAIN_WORM: ch=TILE_MONS_BRAIN_WORM; break;
+ case MONS_GIANT_ORANGE_BRAIN: ch=TILE_MONS_GIANT_ORANGE_BRAIN; break;
+ case MONS_BOULDER_BEETLE: ch=TILE_MONS_BOULDER_BEETLE; break;
+ case MONS_FLYING_SKULL: ch=TILE_MONS_FLYING_SKULL; break;
+ case MONS_HELL_HOUND: ch=TILE_MONS_HELL_HOUND; break;
+ case MONS_MINOTAUR: ch=TILE_MONS_MINOTAUR; break;
+ case MONS_ICE_DRAGON: ch=TILE_MONS_ICE_DRAGON; break;
+ case MONS_SLIME_CREATURE: ch=TILE_MONS_SLIME_CREATURE; break;
+ case MONS_FREEZING_WRAITH: ch=TILE_MONS_FREEZING_WRAITH; break;
+ case MONS_RAKSHASA_FAKE: ch=TILE_MONS_RAKSHASA_FAKE; break;
+ case MONS_GREAT_ORB_OF_EYES: ch=TILE_MONS_GREAT_ORB_OF_EYES; break;
+ case MONS_HELLION: ch=TILE_MONS_HELLION; break;
+ case MONS_ROTTING_DEVIL: ch=TILE_MONS_ROTTING_DEVIL; break;
+ case MONS_TORMENTOR: ch=TILE_MONS_TORMENTOR; break;
+ case MONS_REAPER: ch=TILE_MONS_REAPER; break;
+ case MONS_SOUL_EATER: ch=TILE_MONS_SOUL_EATER; break;
+ case MONS_HAIRY_DEVIL: ch=TILE_MONS_HAIRY_DEVIL; break;
+ case MONS_ICE_DEVIL: ch=TILE_MONS_ICE_DEVIL; break;
+ case MONS_BLUE_DEVIL: ch=TILE_MONS_BLUE_DEVIL; break;
+ case MONS_BEAST: ch=TILE_MONS_BEAST; break;
+ case MONS_IRON_DEVIL: ch=TILE_MONS_IRON_DEVIL; break;
+ case MONS_GLOWING_SHAPESHIFTER: ch=TILE_MONS_GLOWING_SHAPESHIFTER; break;
+ case MONS_SHAPESHIFTER: ch=TILE_MONS_SHAPESHIFTER; break;
+ case MONS_GIANT_MITE: ch=TILE_MONS_GIANT_MITE; break;
+ case MONS_STEAM_DRAGON: ch=TILE_MONS_STEAM_DRAGON; break;
+ case MONS_VERY_UGLY_THING: ch=TILE_MONS_VERY_UGLY_THING; break;
+ case MONS_ORC_SORCERER: ch=TILE_MONS_ORC_SORCERER; break;
+ case MONS_HIPPOGRIFF: ch=TILE_MONS_HIPPOGRIFF; break;
+ case MONS_GRIFFON: ch=TILE_MONS_GRIFFON; break;
+
+ case MONS_HYDRA:
+ {
+ // Number of heads
+ struct monsters *mon = &menv[mon_idx];
+ int heads = mon->number;
+ if (heads > 7) heads = 7;
+ ch = TILE_MONS_HYDRA + heads - 1;
+ break;
+ }
+
+ case MONS_SKELETON_SMALL: ch=TILE_MONS_SKELETON_SMALL; break;
+ case MONS_SKELETON_LARGE: ch=TILE_MONS_SKELETON_LARGE; break;
+ case MONS_HELL_KNIGHT: ch=TILE_MONS_HELL_KNIGHT; break;
+ case MONS_NECROMANCER: ch=TILE_MONS_NECROMANCER; break;
+ case MONS_WIZARD: ch=TILE_MONS_WIZARD; break;
+ case MONS_ORC_PRIEST: ch=TILE_MONS_ORC_PRIEST; break;
+ case MONS_ORC_HIGH_PRIEST: ch=TILE_MONS_ORC_HIGH_PRIEST; break;
+ case MONS_HUMAN: ch=TILE_MONS_HUMAN; break;
+ case MONS_GNOLL: ch=TILE_MONS_GNOLL; break;
+ case MONS_CLAY_GOLEM: ch=TILE_MONS_CLAY_GOLEM; break;
+ case MONS_WOOD_GOLEM: ch=TILE_MONS_WOOD_GOLEM; break;
+ case MONS_STONE_GOLEM: ch=TILE_MONS_STONE_GOLEM; break;
+ case MONS_IRON_GOLEM: ch=TILE_MONS_IRON_GOLEM; break;
+ case MONS_CRYSTAL_GOLEM: ch=TILE_MONS_CRYSTAL_GOLEM; break;
+ case MONS_TOENAIL_GOLEM: ch=TILE_MONS_TOENAIL_GOLEM; break;
+ case MONS_MOTTLED_DRAGON: ch=TILE_MONS_MOTTLED_DRAGON; break;
+ case MONS_EARTH_ELEMENTAL: ch=TILE_MONS_EARTH_ELEMENTAL; break;
+ case MONS_FIRE_ELEMENTAL: ch=TILE_MONS_FIRE_ELEMENTAL; break;
+ case MONS_AIR_ELEMENTAL: ch=TILE_MONS_AIR_ELEMENTAL; break;
+ case MONS_ICE_FIEND: ch=TILE_MONS_ICE_FIEND; break;
+ case MONS_SHADOW_FIEND: ch=TILE_MONS_SHADOW_FIEND; break;
+ case MONS_BROWN_SNAKE: ch=TILE_MONS_BROWN_SNAKE; break;
+ case MONS_GIANT_LIZARD: ch=TILE_MONS_GIANT_LIZARD; break;
+ case MONS_SPECTRAL_WARRIOR: ch=TILE_MONS_SPECTRAL_WARRIOR; break;
+ case MONS_PULSATING_LUMP: ch=TILE_MONS_PULSATING_LUMP; break;
+ case MONS_STORM_DRAGON: ch=TILE_MONS_STORM_DRAGON; break;
+ case MONS_YAKTAUR: ch=TILE_MONS_YAKTAUR; break;
+ case MONS_DEATH_YAK: ch=TILE_MONS_DEATH_YAK; break;
+ case MONS_ROCK_TROLL: ch=TILE_MONS_ROCK_TROLL; break;
+ case MONS_STONE_GIANT: ch=TILE_MONS_STONE_GIANT; break;
+ case MONS_FLAYED_GHOST: ch=TILE_MONS_FLAYED_GHOST; break;
+ case MONS_BUMBLEBEE: ch=TILE_MONS_BUMBLEBEE; break;
+ case MONS_REDBACK: ch=TILE_MONS_REDBACK; break;
+ case MONS_INSUBSTANTIAL_WISP: ch=TILE_MONS_INSUBSTANTIAL_WISP; break;
+ case MONS_VAPOUR: ch=TILE_MONS_VAPOUR; break;
+ case MONS_OGRE_MAGE: ch=TILE_MONS_OGRE_MAGE; break;
+ case MONS_SPINY_WORM: ch=TILE_MONS_SPINY_WORM; break;
+
+ case MONS_DANCING_WEAPON:
+ {
+ // Use item tile
+ item_def item = mitm[menv[mon_idx].inv[MSLOT_WEAPON]];
+ ch = tileidx_item(item);
+ break;
+ }
+
+ case MONS_TITAN: ch=TILE_MONS_TITAN; break;
+ case MONS_GOLDEN_DRAGON: ch=TILE_MONS_GOLDEN_DRAGON; break;
+ case MONS_ELF: ch=TILE_MONS_ELF; break;
+ case MONS_LINDWURM: ch=TILE_MONS_LINDWURM; break;
+ case MONS_ELEPHANT_SLUG: ch=TILE_MONS_ELEPHANT_SLUG; break;
+ case MONS_WAR_DOG: ch=TILE_MONS_WAR_DOG; break;
+ case MONS_GREY_RAT: ch=TILE_MONS_GREY_RAT; break;
+ case MONS_GREEN_RAT: ch=TILE_MONS_GREEN_RAT; break;
+ case MONS_ORANGE_RAT: ch=TILE_MONS_ORANGE_RAT; break;
+ case MONS_BLACK_SNAKE: ch=TILE_MONS_BLACK_SNAKE; break;
+ case MONS_SHEEP: ch=TILE_MONS_SHEEP; break;
+ case MONS_GHOUL: ch=TILE_MONS_GHOUL; break;
+ case MONS_HOG: ch=TILE_MONS_HOG; break;
+ case MONS_GIANT_MOSQUITO: ch=TILE_MONS_GIANT_MOSQUITO; break;
+ case MONS_GIANT_CENTIPEDE: ch=TILE_MONS_GIANT_CENTIPEDE; break;
+ case MONS_IRON_TROLL: ch=TILE_MONS_IRON_TROLL; break;
+ case MONS_NAGA: ch=TILE_MONS_NAGA; break;
+ case MONS_FIRE_GIANT: ch=TILE_MONS_FIRE_GIANT; break;
+ case MONS_FROST_GIANT: ch=TILE_MONS_FROST_GIANT; break;
+ case MONS_FIREDRAKE: ch=TILE_MONS_FIREDRAKE; break;
+ case MONS_SHADOW_DRAGON: ch=TILE_MONS_SHADOW_DRAGON; break;
+ case MONS_YELLOW_SNAKE: ch=TILE_MONS_YELLOW_SNAKE; break;
+ case MONS_GREY_SNAKE: ch=TILE_MONS_GREY_SNAKE; break;
+ case MONS_DEEP_TROLL: ch=TILE_MONS_DEEP_TROLL; break;
+ case MONS_GIANT_BLOWFLY: ch=TILE_MONS_GIANT_BLOWFLY; break;
+ case MONS_RED_WASP: ch=TILE_MONS_RED_WASP; break;
+ case MONS_SWAMP_DRAGON: ch=TILE_MONS_SWAMP_DRAGON; break;
+ case MONS_SWAMP_DRAKE: ch=TILE_MONS_SWAMP_DRAKE; break;
+ case MONS_SOLDIER_ANT: ch=TILE_MONS_SOLDIER_ANT; break;
+ case MONS_HILL_GIANT: ch=TILE_MONS_HILL_GIANT; break;
+ case MONS_QUEEN_ANT: ch=TILE_MONS_QUEEN_ANT; break;
+ case MONS_ANT_LARVA: ch=TILE_MONS_ANT_LARVA; break;
+ case MONS_GIANT_FROG: ch=TILE_MONS_GIANT_FROG; break;
+ case MONS_GIANT_BROWN_FROG: ch=TILE_MONS_GIANT_BROWN_FROG; break;
+ case MONS_SPINY_FROG: ch=TILE_MONS_SPINY_FROG; break;
+ case MONS_BLINK_FROG: ch=TILE_MONS_BLINK_FROG; break;
+ case MONS_GIANT_COCKROACH: ch=TILE_MONS_GIANT_COCKROACH; break;
+ case MONS_SMALL_SNAKE: ch=TILE_MONS_SMALL_SNAKE; break;
+ case MONS_SHUGGOTH: ch=TILE_TODO; break;
+ case MONS_WOLF: ch=TILE_MONS_WOLF; break;
+ case MONS_WARG: ch=TILE_MONS_WARG; break;
+ case MONS_BEAR: ch=TILE_MONS_BEAR; break;
+ case MONS_GRIZZLY_BEAR: ch=TILE_MONS_GRIZZLY_BEAR; break;
+ case MONS_POLAR_BEAR: ch=TILE_MONS_POLAR_BEAR; break;
+ case MONS_BLACK_BEAR: ch=TILE_MONS_BLACK_BEAR; break;
+ case MONS_SIMULACRUM_SMALL: ch=TILE_MONS_SIMULACRUM_SMALL; break;
+ case MONS_SIMULACRUM_LARGE: ch=TILE_MONS_SIMULACRUM_LARGE; break;
+ case MONS_WHITE_IMP: ch=TILE_MONS_WHITE_IMP; break;
+ case MONS_LEMURE: ch=TILE_MONS_LEMURE; break;
+ case MONS_UFETUBUS: ch=TILE_MONS_UFETUBUS; break;
+ case MONS_MANES: ch=TILE_MONS_MANES; break;
+ case MONS_MIDGE: ch=TILE_MONS_MIDGE; break;
+ case MONS_NEQOXEC: ch=TILE_MONS_NEQOXEC; break;
+ case MONS_ORANGE_DEMON: ch=TILE_MONS_ORANGE_DEMON; break;
+ case MONS_HELLWING: ch=TILE_MONS_HELLWING; break;
+ case MONS_SMOKE_DEMON: ch=TILE_MONS_SMOKE_DEMON; break;
+ case MONS_YNOXINUL: ch=TILE_MONS_YNOXINUL; break;
+ case MONS_EXECUTIONER: ch=TILE_MONS_EXECUTIONER; break;
+ case MONS_GREEN_DEATH: ch=TILE_MONS_GREEN_DEATH; break;
+ case MONS_BLUE_DEATH: ch=TILE_MONS_BLUE_DEATH; break;
+ case MONS_BALRUG: ch=TILE_MONS_BALRUG; break;
+ case MONS_CACODEMON: ch=TILE_MONS_CACODEMON; break;
+ case MONS_DEMONIC_CRAWLER: ch=TILE_MONS_DEMONIC_CRAWLER; break;
+ case MONS_SUN_DEMON: ch=TILE_MONS_SUN_DEMON; break;
+ case MONS_SHADOW_IMP: ch=TILE_MONS_SHADOW_IMP; break;
+ case MONS_SHADOW_DEMON: ch=TILE_MONS_SHADOW_DEMON; break;
+ case MONS_LOROCYPROCA: ch=TILE_MONS_LOROCYPROCA; break;
+ case MONS_SHADOW_WRAITH: ch=TILE_MONS_SHADOW_WRAITH; break;
+ case MONS_GIANT_AMOEBA: ch=TILE_MONS_GIANT_AMOEBA; break;
+ case MONS_GIANT_SLUG: ch=TILE_MONS_GIANT_SLUG; break;
+ case MONS_GIANT_SNAIL: ch=TILE_MONS_GIANT_SNAIL; break;
+ case MONS_SPATIAL_VORTEX: ch=TILE_MONS_SPATIAL_VORTEX; break;
+ case MONS_PIT_FIEND: ch=TILE_MONS_PIT_FIEND; break;
+ case MONS_BORING_BEETLE: ch=TILE_MONS_BORING_BEETLE; break;
+ case MONS_GARGOYLE: ch=TILE_MONS_GARGOYLE; break;
+ case MONS_METAL_GARGOYLE: ch=TILE_MONS_METAL_GARGOYLE; break;
+ case MONS_MOLTEN_GARGOYLE: ch=TILE_MONS_MOLTEN_GARGOYLE; break;
+ case MONS_PROGRAM_BUG: ch=TILE_MONS_PROGRAM_BUG; break;
+ case MONS_MNOLEG: ch=TILE_MONS_MNOLEG; break;
+ case MONS_LOM_LOBON: ch=TILE_MONS_LOM_LOBON; break;
+ case MONS_CEREBOV: ch=TILE_MONS_CEREBOV; break;
+ case MONS_GLOORX_VLOQ: ch=TILE_MONS_GLOORX_VLOQ; break;
+ case MONS_MOLLUSC_LORD: ch=TILE_TODO; break;
+ case MONS_NAGA_MAGE: ch=TILE_MONS_NAGA_MAGE; break;
+ case MONS_NAGA_WARRIOR: ch=TILE_MONS_NAGA_WARRIOR; break;
+ case MONS_ORC_WARLORD: ch=TILE_MONS_ORC_WARLORD; break;
+ case MONS_DEEP_ELF_SOLDIER: ch=TILE_MONS_DEEP_ELF_SOLDIER; break;
+ case MONS_DEEP_ELF_FIGHTER: ch=TILE_MONS_DEEP_ELF_FIGHTER; break;
+ case MONS_DEEP_ELF_KNIGHT: ch=TILE_MONS_DEEP_ELF_KNIGHT; break;
+ case MONS_DEEP_ELF_MAGE: ch=TILE_MONS_DEEP_ELF_MAGE; break;
+ case MONS_DEEP_ELF_SUMMONER: ch=TILE_MONS_DEEP_ELF_SUMMONER; break;
+ case MONS_DEEP_ELF_CONJURER: ch=TILE_MONS_DEEP_ELF_CONJURER; break;
+ case MONS_DEEP_ELF_PRIEST: ch=TILE_MONS_DEEP_ELF_PRIEST; break;
+ case MONS_DEEP_ELF_HIGH_PRIEST: ch=TILE_MONS_DEEP_ELF_HIGH_PRIEST; break;
+ case MONS_DEEP_ELF_DEMONOLOGIST: ch=TILE_MONS_DEEP_ELF_DEMONOLOGIST; break;
+ case MONS_DEEP_ELF_ANNIHILATOR: ch=TILE_MONS_DEEP_ELF_ANNIHILATOR; break;
+ case MONS_DEEP_ELF_SORCERER: ch=TILE_MONS_DEEP_ELF_SORCERER; break;
+ case MONS_DEEP_ELF_DEATH_MAGE: ch=TILE_MONS_DEEP_ELF_DEATH_MAGE; break;
+ case MONS_BROWN_OOZE: ch=TILE_MONS_BROWN_OOZE; break;
+ case MONS_AZURE_JELLY: ch=TILE_MONS_AZURE_JELLY; break;
+ case MONS_DEATH_OOZE: ch=TILE_MONS_DEATH_OOZE; break;
+ case MONS_ACID_BLOB: ch=TILE_MONS_ACID_BLOB; break;
+ case MONS_ROYAL_JELLY: ch=TILE_MONS_ROYAL_JELLY; break;
+ case MONS_TERENCE: ch=TILE_MONS_TERENCE; break;
+ case MONS_JESSICA: ch=TILE_MONS_JESSICA; break;
+ case MONS_IJYB: ch=TILE_MONS_IJYB; break;
+ case MONS_SIGMUND: ch=TILE_MONS_SIGMUND; break;
+ case MONS_BLORK_THE_ORC: ch=TILE_MONS_BLORK_THE_ORC; break;
+ case MONS_EDMUND: ch=TILE_MONS_EDMUND; break;
+ case MONS_PSYCHE: ch=TILE_MONS_PSYCHE; break;
+ case MONS_EROLCHA: ch=TILE_MONS_EROLCHA; break;
+ case MONS_DONALD: ch=TILE_MONS_DONALD; break;
+ case MONS_URUG: ch=TILE_MONS_URUG; break;
+ case MONS_MICHAEL: ch=TILE_MONS_MICHAEL; break;
+ case MONS_JOSEPH: ch=TILE_MONS_JOSEPH; break;
+ case MONS_SNORG: ch=TILE_MONS_SNORG; break;
+ case MONS_ERICA: ch=TILE_MONS_ERICA; break;
+ case MONS_JOSEPHINE: ch=TILE_MONS_JOSEPHINE; break;
+ case MONS_HAROLD: ch=TILE_MONS_HAROLD; break;
+ case MONS_NORBERT: ch=TILE_MONS_NORBERT; break;
+ case MONS_JOZEF: ch=TILE_MONS_JOZEF; break;
+ case MONS_AGNES: ch=TILE_MONS_AGNES; break;
+ case MONS_MAUD: ch=TILE_MONS_MAUD; break;
+ case MONS_LOUISE: ch=TILE_MONS_LOUISE; break;
+ case MONS_FRANCIS: ch=TILE_MONS_FRANCIS; break;
+ case MONS_FRANCES: ch=TILE_MONS_FRANCES; break;
+ case MONS_RUPERT: ch=TILE_MONS_RUPERT; break;
+ case MONS_WAYNE: ch=TILE_MONS_WAYNE; break;
+ case MONS_DUANE: ch=TILE_MONS_DUANE; break;
+ case MONS_XTAHUA: ch=TILE_MONS_XTAHUA; break;
+ case MONS_NORRIS: ch=TILE_MONS_NORRIS; break;
+ case MONS_FREDERICK: ch=TILE_MONS_FREDERICK; break;
+ case MONS_MARGERY: ch=TILE_MONS_MARGERY; break;
+ case MONS_POLYPHEMUS: ch=TILE_MONS_POLYPHEMUS; break;
+ case MONS_BORIS: ch=TILE_MONS_BORIS; break;
+ // Draconians handled above
+ case MONS_MURRAY: ch=TILE_MONS_MURRAY; break;
+ case MONS_TIAMAT: ch=TILE_MONS_TIAMAT; break;
+ case MONS_DEEP_ELF_BLADEMASTER: ch=TILE_MONS_DEEP_ELF_BLADEMASTER; break;
+ case MONS_DEEP_ELF_MASTER_ARCHER: ch=TILE_MONS_DEEP_ELF_MASTER_ARCHER; break;
+
+ case MONS_GERYON: ch=TILE_MONS_GERYON; break;
+ case MONS_DISPATER: ch=TILE_MONS_DISPATER; break;
+ case MONS_ASMODEUS: ch=TILE_MONS_ASMODEUS; break;
+ case MONS_ANTAEUS: ch=TILE_MONS_ANTAEUS; break;
+ case MONS_ERESHKIGAL: ch=TILE_MONS_ERESHKIGAL; break;
+
+ case MONS_ANCIENT_LICH: ch=TILE_MONS_ANCIENT_LICH; break;
+ case MONS_OOZE: ch=TILE_MONS_OOZE; break;
+ case MONS_VAULT_GUARD: ch=TILE_MONS_VAULT_GUARD; break;
+ case MONS_CURSE_SKULL: ch=TILE_MONS_CURSE_SKULL; break;
+ case MONS_VAMPIRE_KNIGHT: ch=TILE_MONS_VAMPIRE_KNIGHT; break;
+ case MONS_VAMPIRE_MAGE: ch=TILE_MONS_VAMPIRE_MAGE; break;
+ case MONS_SHINING_EYE: ch=TILE_MONS_SHINING_EYE; break;
+ case MONS_ORB_GUARDIAN: ch=TILE_MONS_ORB_GUARDIAN; break;
+ case MONS_DAEVA: ch=TILE_MONS_DAEVA; break;
+ case MONS_SPECTRAL_THING: ch=TILE_MONS_SPECTRAL_THING; break;
+ case MONS_GREATER_NAGA: ch=TILE_MONS_GREATER_NAGA; break;
+ case MONS_SKELETAL_DRAGON: ch=TILE_MONS_SKELETAL_DRAGON; break;
+ case MONS_TENTACLED_MONSTROSITY: ch=TILE_MONS_TENTACLED_MONSTROSITY; break;
+ case MONS_SPHINX: ch=TILE_MONS_SPHINX; break;
+ case MONS_ROTTING_HULK: ch=TILE_MONS_ROTTING_HULK; break;
+ case MONS_GUARDIAN_MUMMY: ch=TILE_MONS_GUARDIAN_MUMMY; break;
+ case MONS_GREATER_MUMMY: ch=TILE_MONS_GREATER_MUMMY; break;
+ case MONS_MUMMY_PRIEST: ch=TILE_MONS_MUMMY_PRIEST; break;
+ case MONS_CENTAUR_WARRIOR: ch=TILE_MONS_CENTAUR_WARRIOR; break;
+ case MONS_YAKTAUR_CAPTAIN: ch=TILE_MONS_YAKTAUR_CAPTAIN; break;
+ case MONS_KILLER_KLOWN: ch=TILE_MONS_KILLER_KLOWN; break;
+ case MONS_ELECTRIC_GOLEM: ch=TILE_MONS_ELECTRIC_GOLEM; break;
+ case MONS_BALL_LIGHTNING: ch=TILE_MONS_BALL_LIGHTNING; break;
+ case MONS_ORB_OF_FIRE: ch=TILE_MONS_ORB_OF_FIRE; break;
+ case MONS_QUOKKA: ch=TILE_MONS_QUOKKA; break;
+ case MONS_EYE_OF_DEVASTATION: ch=TILE_MONS_EYE_OF_DEVASTATION; break;
+ case MONS_MOTH_OF_WRATH: ch=TILE_MONS_MOTH_OF_WRATH; break;
+ case MONS_DEATH_COB: ch=TILE_MONS_DEATH_COB; break;
+ case MONS_CURSE_TOE: ch=TILE_MONS_CURSE_TOE; break;
+// case MONS_GOLD_MIMIC: ch=TILE_MONS_GOLD_MIMIC; break;
+
+ case MONS_GOLD_MIMIC:
+ case MONS_WEAPON_MIMIC:
+ case MONS_ARMOUR_MIMIC:
+ case MONS_SCROLL_MIMIC:
+ case MONS_POTION_MIMIC:
+ {
+ // Use item tile
+ item_def item;
+ struct monsters *mon = &menv[mon_idx];
+ get_mimic_item( mon, item );
+ ch = tileidx_item(item);
+ break;
+ }
+
+ case MONS_HELL_HOG: ch=TILE_MONS_HELL_HOG; break;
+ case MONS_SERPENT_OF_HELL: ch=TILE_MONS_SERPENT_OF_HELL; break;
+ case MONS_BOGGART: ch=TILE_MONS_BOGGART; break;
+ case MONS_QUICKSILVER_DRAGON: ch=TILE_MONS_QUICKSILVER_DRAGON; break;
+ case MONS_IRON_DRAGON: ch=TILE_MONS_IRON_DRAGON; break;
+ case MONS_SKELETAL_WARRIOR: ch=TILE_MONS_SKELETAL_WARRIOR; break;
+ case MONS_PLAYER_GHOST: ch=TILE_MONS_PLAYER_GHOST; break;
+ case MONS_PANDEMONIUM_DEMON: ch=TILE_MONS_PANDEMONIUM_DEMON; break;
+ case MONS_GIANT_NEWT: ch=TILE_MONS_GIANT_NEWT; break;
+ case MONS_GIANT_GECKO: ch=TILE_MONS_GIANT_GECKO; break;
+ case MONS_GIANT_IGUANA: ch=TILE_MONS_GIANT_IGUANA; break;
+ case MONS_GILA_MONSTER: ch=TILE_MONS_GILA_MONSTER; break;
+ case MONS_KOMODO_DRAGON: ch=TILE_MONS_KOMODO_DRAGON; break;
+ case MONS_LAVA_WORM: ch=TILE_MONS_LAVA_WORM; break;
+ case MONS_LAVA_FISH: ch=TILE_MONS_LAVA_FISH; break;
+ case MONS_LAVA_SNAKE: ch=TILE_MONS_LAVA_SNAKE; break;
+ case MONS_SALAMANDER: ch=TILE_MONS_SALAMANDER; break;
+ case MONS_BIG_FISH: ch=TILE_MONS_BIG_FISH; break;
+ case MONS_GIANT_GOLDFISH: ch=TILE_MONS_GIANT_GOLDFISH; break;
+ case MONS_ELECTRICAL_EEL: ch=TILE_MONS_ELECTRICAL_EEL; break;
+ case MONS_JELLYFISH: ch=TILE_MONS_JELLYFISH; break;
+ case MONS_WATER_ELEMENTAL: ch=TILE_MONS_WATER_ELEMENTAL; break;
+ case MONS_SWAMP_WORM: ch=TILE_MONS_SWAMP_WORM; break;
+ case MONS_ORANGE_STATUE: ch = TILE_DNGN_ORANGE_CRYSTAL_STATUE; break;
+ case MONS_SILVER_STATUE: ch = TILE_DNGN_SILVER_STATUE; break;
+ case MONS_ICE_STATUE: ch = TILE_DNGN_ICE_STATUE; break;
+ case MONS_DEATH_DRAKE: ch=TILE_MONS_DEATH_DRAKE; break;
+}
+ if(mons_flies(&menv[mon_idx])) ch |= TILE_FLAG_FLYING;
+ if(menv[mon_idx].has_ench(ENCH_HELD)) ch |= TILE_FLAG_NET;
+
+ if(mons_friendly(&menv[mon_idx]))
+ {
+ ch |= TILE_FLAG_PET;
+ }
+ else if (Options.stab_brand != CHATTR_NORMAL &&
+ mons_looks_stabbable(&menv[mon_idx]))
+ {
+ ch |= TILE_FLAG_STAB;
+ }
+ else if (Options.may_stab_brand != CHATTR_NORMAL &&
+ mons_looks_distracted(&menv[mon_idx]))
+ {
+ ch |= TILE_FLAG_MAY_STAB;
+ }
+ return ch;
+}
+
+int tileidx_fixed_artifact(int special)
+{
+ int ch = TILE_ERROR;
+
+ switch(special)
+ {
+ case SPWPN_SINGING_SWORD: ch=TILE_SPWPN_SINGING_SWORD; break;
+ case SPWPN_WRATH_OF_TROG: ch=TILE_SPWPN_WRATH_OF_TROG; break;
+ case SPWPN_SCYTHE_OF_CURSES: ch=TILE_SPWPN_SCYTHE_OF_CURSES; break;
+ case SPWPN_MACE_OF_VARIABILITY: ch=TILE_SPWPN_MACE_OF_VARIABILITY; break;
+ case SPWPN_GLAIVE_OF_PRUNE: ch=TILE_SPWPN_GLAIVE_OF_PRUNE; break;
+ case SPWPN_SCEPTRE_OF_TORMENT: ch=TILE_SPWPN_SCEPTRE_OF_TORMENT; break;
+ case SPWPN_SWORD_OF_ZONGULDROK: ch=TILE_SPWPN_SWORD_OF_ZONGULDROK; break;
+ case SPWPN_SWORD_OF_CEREBOV: ch=TILE_SPWPN_SWORD_OF_CEREBOV; break;
+ case SPWPN_STAFF_OF_DISPATER: ch=TILE_SPWPN_STAFF_OF_DISPATER; break;
+ case SPWPN_SCEPTRE_OF_ASMODEUS: ch=TILE_SPWPN_SCEPTRE_OF_ASMODEUS; break;
+ case SPWPN_SWORD_OF_POWER: ch=TILE_SPWPN_SWORD_OF_POWER; break;
+ case SPWPN_KNIFE_OF_ACCURACY: ch=TILE_SPWPN_KNIFE_OF_ACCURACY; break;
+ case SPWPN_STAFF_OF_OLGREB: ch=TILE_SPWPN_STAFF_OF_OLGREB; break;
+ case SPWPN_VAMPIRES_TOOTH: ch=TILE_SPWPN_VAMPIRES_TOOTH; break;
+ case SPWPN_STAFF_OF_WUCAD_MU: ch=TILE_SPWPN_STAFF_OF_WUCAD_MU; break;
+ }
+ return ch;
+}
+
+int tileidx_unrand_artifact(int idx)
+{
+ switch (idx)
+ {
+ case 1: return TILE_URAND_BLOODBANE;
+ case 2: return TILE_URAND_SHADOWS;
+ case 3: return TILE_URAND_FLAMING_DEATH;
+ case 4: return TILE_URAND_IGNORANCE;
+ case 5: return TILE_URAND_ZIN;
+ case 6: return TILE_URAND_AUGMENTATION;
+ case 7: return TILE_URAND_BRILLIANCE;
+ case 8: return TILE_URAND_THIEF;
+ case 9: return TILE_URAND_BULLSEYE;
+ case 10: return TILE_URAND_DYROVEPREVA;
+ case 11: return TILE_URAND_LEECH;
+ case 12: return TILE_URAND_CEKUGOB;
+ case 13: return TILE_URAND_MISFORTUNE;
+ case 14: return TILE_URAND_CHILLY_DEATH;
+ case 15: return TILE_URAND_FOUR_WINDS;
+ case 16: return TILE_URAND_MORG;
+ case 17: return TILE_URAND_FINISHER;
+ case 18: return TILE_URAND_PUNK;
+ case 19: return TILE_URAND_KRISHNA;
+ case 20: return TILE_URAND_FLASH;
+ case 21: return TILE_URAND_SKULLCRUSHER;
+ case 22: return TILE_URAND_ASSASSIN;
+ case 23: return TILE_URAND_GUARD;
+ case 24: return TILE_URAND_JIHAD;
+ case 25: return TILE_URAND_LEAR;
+ case 26: return TILE_URAND_ZHOR;
+ case 27: return TILE_URAND_FIERY_DEVIL;
+ case 28: return TILE_URAND_SALAMANDER;
+ case 29: return TILE_URAND_WAR;
+ case 30: return TILE_URAND_DOOM_KNIGHT;
+ case 31: return TILE_URAND_RESISTANCE;
+ case 32: return TILE_URAND_FOLLY;
+ case 33: return TILE_URAND_BLOODLUST;
+ case 34: return TILE_URAND_EOS;
+ case 35: return TILE_URAND_SHAOLIN;
+ case 36: return TILE_URAND_ROBUSTNESS;
+ case 37: return TILE_URAND_EDISON;
+ case 38: return TILE_URAND_VOO_DOO;
+ case 39: return TILE_URAND_OCTOPUS_KING;
+ case 40: return TILE_URAND_DRAGONMASK;
+ case 41: return TILE_URAND_ARGA;
+ case 42: return TILE_URAND_ELEMENTAL;
+ case 43: return TILE_URAND_SNIPER;
+ case 44: return TILE_URAND_ERCHIDEL;
+ case 45: return TILE_URAND_NIGHT;
+ case 46: return TILE_URAND_PLUTONIUM;
+ case 47: return TILE_URAND_UNDERADHUNTER;
+ case 48: return TILE_URAND_DRAGON_KING;
+ case 49: return TILE_URAND_ALCHEMIST;
+ case 50: return TILE_URAND_FENCER;
+ case 51: return TILE_URAND_MAGE;
+ case 52: return TILE_URAND_BLOWGUN;
+ }
+ return 0;
+}
+
+int get_etype(const item_def &item)
+{
+ int etype;
+ switch (item.flags & ISFLAG_COSMETIC_MASK)
+ {
+ case ISFLAG_EMBROIDERED_SHINY:
+ etype = 1;
+ break;
+ case ISFLAG_RUNED:
+ etype = 2;
+ break;
+ case ISFLAG_GLOWING:
+ etype = 3;
+ break;
+ default:
+ etype = is_random_artefact(item) ? 4 : 0;
+ break;
+ }
+
+ return etype;
+}
+
+int tileidx_weapon(const item_def &item)
+{
+ int ch = TILE_ERROR;
+ int race = item.flags & ISFLAG_RACIAL_MASK;
+ int etype = get_etype(item);
+
+ 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}
+ };
+
+ if (etype > 1)
+ etype--;
+
+ switch(item.sub_type)
+ {
+ case WPN_KNIFE: ch=TILE_WPN_KNIFE; break;
+ case WPN_DAGGER:
+ ch=TILE_WPN_DAGGER;
+ if (race == ISFLAG_ORCISH) ch = TILE_WPN_DAGGER_ORC;
+ if (race == ISFLAG_ELVEN ) ch = TILE_WPN_DAGGER_ELF;
+ break;
+ case WPN_SHORT_SWORD:
+ ch=TILE_WPN_SHORT_SWORD + etable[1][etype];
+ if (race == ISFLAG_ORCISH) ch = TILE_WPN_SHORT_SWORD_ORC;
+ if (race == ISFLAG_ELVEN ) ch = TILE_WPN_SHORT_SWORD_ELF;
+ break;
+ case WPN_QUICK_BLADE: ch=TILE_WPN_QUICK_BLADE; break;
+
+ case WPN_SABRE:
+ ch=TILE_WPN_SABRE + etable[1][etype];
+ break;
+ case WPN_FALCHION: ch=TILE_WPN_FALCHION; break;
+ case WPN_KATANA:
+ ch=TILE_WPN_KATANA + etable[1][etype];
+ break;
+ case WPN_LONG_SWORD:
+ ch=TILE_WPN_LONG_SWORD + etable[1][etype];
+ if (race == ISFLAG_ORCISH) ch = TILE_WPN_LONG_SWORD_ORC;
+ break;
+ case WPN_GREAT_SWORD:
+ ch=TILE_WPN_GREAT_SWORD + etable[1][etype];
+ if (race == ISFLAG_ORCISH) ch = TILE_WPN_GREAT_SWORD_ORC;
+ break;
+ case WPN_SCIMITAR:
+ ch=TILE_WPN_SCIMITAR + etable[1][etype];
+ break;
+ case WPN_DOUBLE_SWORD: ch=TILE_WPN_DOUBLE_SWORD; break;
+ case WPN_TRIPLE_SWORD: ch=TILE_WPN_TRIPLE_SWORD; break;
+
+ case WPN_HAND_AXE: ch=TILE_WPN_HAND_AXE; break;
+ case WPN_WAR_AXE: ch=TILE_WPN_WAR_AXE; break;
+ case WPN_BROAD_AXE:
+ ch=TILE_WPN_BROAD_AXE + etable[1][etype];
+ break;
+ case WPN_BATTLEAXE:
+ ch=TILE_WPN_BATTLEAXE + etable[1][etype];
+ break;
+ case WPN_EXECUTIONERS_AXE:
+ ch=TILE_WPN_EXECUTIONERS_AXE + etable[1][etype];
+ break;
+
+ case WPN_BLOWGUN:
+ ch=TILE_WPN_BLOWGUN + etable[1][etype];
+ break;
+ case WPN_SLING: ch=TILE_WPN_SLING; break;
+ case WPN_BOW:
+ ch=TILE_WPN_BOW + etable[1][etype];
+ break;
+ case WPN_CROSSBOW:
+ ch=TILE_WPN_CROSSBOW + etable[1][etype];
+ break;
+ case WPN_HAND_CROSSBOW:
+ ch=TILE_WPN_HAND_CROSSBOW + etable[1][etype];
+ break;
+
+ case WPN_SPEAR:
+ ch=TILE_WPN_SPEAR + etable[1][etype];
+ break;
+ case WPN_TRIDENT:
+ ch=TILE_WPN_TRIDENT + etable[1][etype];
+ break;
+ case WPN_HALBERD:
+ ch=TILE_WPN_HALBERD + etable[1][etype];
+ break;
+ case WPN_SCYTHE:
+ ch=TILE_WPN_SCYTHE + etable[1][etype];
+ break;
+ case WPN_GLAIVE:
+ ch=TILE_WPN_GLAIVE + etable[1][etype];
+ if (race == ISFLAG_ORCISH) ch = TILE_WPN_GLAIVE_ORC;
+ break;
+
+ case WPN_QUARTERSTAFF: ch=TILE_WPN_QUARTERSTAFF; break;
+
+ case WPN_CLUB: ch=TILE_WPN_CLUB; break;
+ case WPN_HAMMER:
+ ch=TILE_WPN_HAMMER + etable[1][etype];
+ break;
+ case WPN_MACE:
+ ch=TILE_WPN_MACE + etable[1][etype];
+ break;
+ case WPN_FLAIL:
+ ch=TILE_WPN_FLAIL + etable[1][etype];
+ break;
+ case WPN_SPIKED_FLAIL:
+ ch=TILE_WPN_SPIKED_FLAIL + etable[1][etype];
+ break;
+ case WPN_GREAT_MACE:
+ ch=TILE_WPN_GREAT_MACE + etable[1][etype];
+ break;
+ case WPN_DIRE_FLAIL:
+ ch=TILE_WPN_GREAT_FLAIL + etable[1][etype];
+ break;
+ case WPN_MORNINGSTAR:
+ ch=TILE_WPN_MORNINGSTAR + etable[1][etype];
+ break;
+ case WPN_EVENINGSTAR:
+ ch=TILE_WPN_EVENINGSTAR + etable[1][etype];
+ break;
+
+ case WPN_GIANT_CLUB: ch=TILE_WPN_GIANT_CLUB; break;
+ case WPN_GIANT_SPIKED_CLUB: ch=TILE_WPN_GIANT_SPIKED_CLUB; break;
+
+ case WPN_ANCUS: ch=TILE_WPN_ANCUS; break;
+ case WPN_WHIP: ch=TILE_WPN_WHIP; break;
+
+ case WPN_DEMON_BLADE: ch=TILE_WPN_DEMON_BLADE; break;
+ case WPN_DEMON_WHIP: ch=TILE_WPN_DEMON_WHIP; break;
+ case WPN_DEMON_TRIDENT: ch=TILE_WPN_DEMON_TRIDENT; break;
+ case WPN_BLESSED_BLADE: ch=TILE_WPN_BLESSED_BLADE; break;
+ case WPN_LONGBOW: ch=TILE_WPN_LONGBOW; break;
+ case WPN_LAJATANG: ch=TILE_WPN_LAJATANG; break;
+ case WPN_BARDICHE: ch=TILE_WPN_LOCHABER_AXE; break;
+ }
+ return ch;
+}
+
+int tileidx_missile(const item_def &item)
+{
+ int ch = TILE_ERROR;
+ int brand = item.special;
+ switch(item.sub_type)
+ {
+ case MI_STONE: ch=TILE_MI_STONE; break;
+ case MI_ARROW: ch=TILE_MI_ARROW; break;
+ case MI_BOLT: ch=TILE_MI_BOLT; break;
+ case MI_DART:
+ ch=TILE_MI_DART;
+ if (brand == SPMSL_POISONED || brand == SPMSL_POISONED_II)
+ ch = TILE_MI_DART_P;
+ break;
+ case MI_NEEDLE:
+ ch=TILE_MI_NEEDLE;
+ if (brand == SPMSL_POISONED || brand == SPMSL_POISONED_II)
+ ch = TILE_MI_NEEDLE_P;
+ break;
+ case MI_LARGE_ROCK: ch=TILE_MI_LARGE_ROCK; break;
+ case MI_SLING_BULLET: ch=TILE_MI_SLING_BULLET; break;
+ case MI_JAVELIN: ch=TILE_MI_JAVELIN; break;
+ case MI_THROWING_NET: ch=TILE_MI_THROWING_NET; break;
+ }
+ return ch;
+}
+
+int tileidx_armour(const item_def &item)
+{
+ int ch = TILE_ERROR;
+ 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:
+ ch= TILE_ARM_ROBE + etable[2][etype];
+ break;
+ case ARM_LEATHER_ARMOUR:
+ ch=TILE_ARM_LEATHER_ARMOUR + etable[2][etype];
+ if (race == ISFLAG_ORCISH) ch = TILE_ARM_LEATHER_ARMOUR_ORC;
+ if (race == ISFLAG_ELVEN ) ch = TILE_ARM_LEATHER_ARMOUR_ELF;
+ break;
+ case ARM_RING_MAIL:
+ ch=TILE_ARM_RING_MAIL + etable[1][etype];
+ if (race == ISFLAG_ORCISH) ch = TILE_ARM_RING_MAIL_ORC;
+ if (race == ISFLAG_ELVEN ) ch = TILE_ARM_RING_MAIL_ELF;
+ if (race == ISFLAG_DWARVEN ) ch = TILE_ARM_RING_MAIL_DWA;
+ break;
+ case ARM_SCALE_MAIL:
+ ch=TILE_ARM_SCALE_MAIL + etable[1][etype];
+ if (race == ISFLAG_ELVEN ) ch = TILE_ARM_SCALE_MAIL_ELF;
+ break;
+ case ARM_CHAIN_MAIL:
+ ch=TILE_ARM_CHAIN_MAIL + etable[1][etype];
+ if (race == ISFLAG_ELVEN) ch = TILE_ARM_CHAIN_MAIL_ELF;
+ if (race == ISFLAG_ORCISH) ch = TILE_ARM_CHAIN_MAIL_ORC;
+ break;
+ case ARM_SPLINT_MAIL: ch=TILE_ARM_SPLINT_MAIL; break;
+ case ARM_BANDED_MAIL: ch=TILE_ARM_BANDED_MAIL; break;
+ case ARM_PLATE_MAIL:
+ ch=TILE_ARM_PLATE_MAIL;
+ if (race == ISFLAG_ORCISH) ch = TILE_ARM_PLATE_MAIL_ORC;
+ break;
+
+ case ARM_CRYSTAL_PLATE_MAIL: ch=TILE_ARM_CRYSTAL_PLATE_MAIL; break;
+
+ case ARM_SHIELD: ch=TILE_ARM_SHIELD + etable[2][etype]; break;
+
+ case ARM_CLOAK:
+ ch=TILE_ARM_CLOAK + etable[3][etype];
+ break;
+
+ case ARM_WIZARD_HAT:
+ ch=TILE_THELM_WIZARD_HAT + etable[1][etype]; break;
+ case ARM_CAP:
+ ch=TILE_THELM_CAP; break;
+ case ARM_HELMET:
+ ch=TILE_THELM_HELM + etable[3][etype]; break;
+ case ARM_GLOVES:
+ ch=TILE_ARM_GLOVES + etable[3][etype];
+ break;
+ case ARM_BOOTS:
+ ch=TILE_ARM_BOOTS + etable[3][etype];
+ break;
+ case ARM_BUCKLER:
+ ch=TILE_ARM_BUCKLER + etable[1][etype];
+ break;
+ case ARM_LARGE_SHIELD:
+ ch=TILE_ARM_LARGE_SHIELD + etable[2][etype];
+ break;
+ case ARM_CENTAUR_BARDING: ch=TILE_ARM_CENTAUR_BARDING; break;
+ case ARM_NAGA_BARDING: ch=TILE_ARM_NAGA_BARDING; break;
+
+ case ARM_ANIMAL_SKIN: ch=TILE_ARM_ANIMAL_SKIN + etable[1][etype]; break;
+ case ARM_TROLL_HIDE: ch=TILE_ARM_TROLL_HIDE; break;
+ case ARM_TROLL_LEATHER_ARMOUR: ch=TILE_ARM_TROLL_LEATHER_ARMOUR; break;
+ case ARM_DRAGON_HIDE: ch=TILE_ARM_DRAGON_HIDE; break;
+ case ARM_DRAGON_ARMOUR: ch=TILE_ARM_DRAGON_ARMOUR; break;
+ case ARM_ICE_DRAGON_HIDE: ch=TILE_ARM_ICE_DRAGON_HIDE; break;
+ case ARM_ICE_DRAGON_ARMOUR: ch=TILE_ARM_ICE_DRAGON_ARMOUR; break;
+ case ARM_STEAM_DRAGON_HIDE: ch=TILE_ARM_STEAM_DRAGON_HIDE; break;
+ case ARM_STEAM_DRAGON_ARMOUR: ch=TILE_ARM_STEAM_DRAGON_ARMOUR; break;
+ case ARM_MOTTLED_DRAGON_HIDE: ch=TILE_ARM_MOTTLED_DRAGON_HIDE; break;
+ case ARM_MOTTLED_DRAGON_ARMOUR: ch=TILE_ARM_MOTTLED_DRAGON_ARMOUR; break;
+ case ARM_STORM_DRAGON_HIDE: ch=TILE_ARM_STORM_DRAGON_HIDE; break;
+ case ARM_STORM_DRAGON_ARMOUR: ch=TILE_ARM_STORM_DRAGON_ARMOUR; break;
+ case ARM_GOLD_DRAGON_HIDE: ch=TILE_ARM_GOLD_DRAGON_HIDE; break;
+ case ARM_GOLD_DRAGON_ARMOUR: ch=TILE_ARM_GOLD_DRAGON_ARMOUR; break;
+ case ARM_SWAMP_DRAGON_HIDE: ch=TILE_ARM_SWAMP_DRAGON_HIDE; break;
+ case ARM_SWAMP_DRAGON_ARMOUR: ch=TILE_ARM_SWAMP_DRAGON_ARMOUR; break;
+ }
+ return ch;
+}
+
+int tileidx_food(const item_def &item)
+{
+ int ch = TILE_ERROR;
+ int type=item.sub_type;
+ switch(type)
+ {
+ case FOOD_MEAT_RATION: ch=TILE_FOOD_MEAT_RATION; break;
+ case FOOD_BREAD_RATION: ch=TILE_FOOD_BREAD_RATION; break;
+ case FOOD_PEAR: ch=TILE_FOOD_PEAR; break;
+ case FOOD_APPLE: ch=TILE_FOOD_APPLE; break;
+ case FOOD_CHOKO: ch=TILE_FOOD_CHOKO; break;
+ case FOOD_HONEYCOMB: ch=TILE_FOOD_HONEYCOMB; break;
+ case FOOD_ROYAL_JELLY: ch=TILE_FOOD_ROYAL_JELLY; break;
+ case FOOD_SNOZZCUMBER: ch=TILE_FOOD_SNOZZCUMBER; break;
+ case FOOD_PIZZA: ch=TILE_FOOD_PIZZA; break;
+ case FOOD_APRICOT: ch=TILE_FOOD_APRICOT; break;
+ case FOOD_ORANGE: ch=TILE_FOOD_ORANGE; break;
+ case FOOD_BANANA: ch=TILE_FOOD_BANANA; break;
+ case FOOD_STRAWBERRY: ch=TILE_FOOD_STRAWBERRY; break;
+ case FOOD_RAMBUTAN: ch=TILE_FOOD_RAMBUTAN; break;
+ case FOOD_LEMON: ch=TILE_FOOD_LEMON; break;
+ case FOOD_GRAPE: ch=TILE_FOOD_GRAPE; break;
+ case FOOD_SULTANA: ch=TILE_FOOD_SULTANA; break;
+ case FOOD_LYCHEE: ch=TILE_FOOD_LYCHEE; break;
+ case FOOD_BEEF_JERKY: ch=TILE_FOOD_BEEF_JERKY; break;
+ case FOOD_CHEESE: ch=TILE_FOOD_CHEESE; break;
+ case FOOD_SAUSAGE: ch=TILE_FOOD_SAUSAGE; break;
+
+ case FOOD_CHUNK:
+ ch=TILE_FOOD_CHUNK;
+ if (item.special < 100) ch = TILE_FOOD_CHUNK_ROTTEN;
+ break;
+ }
+
+ return ch;
+}
+
+int tileidx_corpse(int mon)
+{
+ int ch = TILE_ERROR;
+ switch(mon)
+ {
+ case MONS_GIANT_ANT: ch=TILE_CORPSE_GIANT_ANT; break;
+ case MONS_GIANT_BAT: ch=TILE_CORPSE_GIANT_BAT; break;
+ case MONS_CENTAUR: ch=TILE_CORPSE_CENTAUR; break;
+ case MONS_GOBLIN: ch=TILE_CORPSE_GOBLIN; break;
+ case MONS_HOUND: ch=TILE_CORPSE_HOUND; break;
+ case MONS_JACKAL: ch=TILE_CORPSE_JACKAL; break;
+ case MONS_KILLER_BEE: ch=TILE_CORPSE_KILLER_BEE; break;
+ case MONS_KILLER_BEE_LARVA: ch=TILE_CORPSE_KILLER_BEE_LARVA; break;
+ case MONS_MANTICORE: ch=TILE_CORPSE_MANTICORE; break;
+ case MONS_NECROPHAGE: ch=TILE_CORPSE_NECROPHAGE; break;
+ case MONS_ORC: ch=TILE_CORPSE_ORC; break;
+ case MONS_RAT: ch=TILE_CORPSE_RAT; break;
+ case MONS_SCORPION: ch=TILE_CORPSE_SCORPION; break;
+ case MONS_UGLY_THING: ch=TILE_CORPSE_UGLY_THING; break;
+ case MONS_WORM: ch=TILE_CORPSE_WORM; break;
+ case MONS_YELLOW_WASP: ch=TILE_CORPSE_YELLOW_WASP; break;
+ case MONS_GIANT_BEETLE: ch=TILE_CORPSE_GIANT_BEETLE; break;
+ case MONS_CYCLOPS: ch=TILE_CORPSE_CYCLOPS; break;
+ case MONS_DRAGON: ch=TILE_CORPSE_DRAGON; break;
+ case MONS_TWO_HEADED_OGRE: ch=TILE_CORPSE_TWO_HEADED_OGRE; break;
+ case MONS_HOBGOBLIN: ch=TILE_CORPSE_HOBGOBLIN; break;
+ case MONS_KOBOLD: ch=TILE_CORPSE_KOBOLD; break;
+ case MONS_GUARDIAN_NAGA: ch=TILE_CORPSE_GUARDIAN_NAGA; break;
+ case MONS_OGRE: ch=TILE_CORPSE_OGRE; break;
+ case MONS_QUEEN_BEE: ch=TILE_CORPSE_QUEEN_BEE; break;
+ case MONS_SNAKE: ch=TILE_CORPSE_SNAKE; break;
+ case MONS_TROLL: ch=TILE_CORPSE_TROLL; break;
+ case MONS_YAK: ch=TILE_CORPSE_YAK; break;
+ case MONS_WYVERN: ch=TILE_CORPSE_WYVERN; break;
+ case MONS_GIANT_EYEBALL: ch=TILE_CORPSE_GIANT_EYEBALL; break;
+ case MONS_WOLF_SPIDER: ch=TILE_CORPSE_WOLF_SPIDER; break;
+ case MONS_EYE_OF_DRAINING: ch=TILE_CORPSE_EYE_OF_DRAINING; break;
+ case MONS_BUTTERFLY: ch=TILE_CORPSE_BUTTERFLY; break;
+ case MONS_BRAIN_WORM: ch=TILE_CORPSE_BRAIN_WORM; break;
+ case MONS_GIANT_ORANGE_BRAIN: ch=TILE_CORPSE_GIANT_ORANGE_BRAIN; break;
+ case MONS_BOULDER_BEETLE: ch=TILE_CORPSE_BOULDER_BEETLE; break;
+ case MONS_MINOTAUR: ch=TILE_CORPSE_MINOTAUR; break;
+ case MONS_ICE_DRAGON: ch=TILE_CORPSE_ICE_DRAGON; break;
+ case MONS_GREAT_ORB_OF_EYES: ch=TILE_CORPSE_GREAT_ORB_OF_EYES; break;
+ case MONS_GLOWING_SHAPESHIFTER: ch=TILE_CORPSE_GLOWING_SHAPESHIFTER; break;
+ case MONS_SHAPESHIFTER: ch=TILE_CORPSE_SHAPESHIFTER; break;
+ case MONS_GIANT_MITE: ch=TILE_CORPSE_GIANT_MITE; break;
+ case MONS_STEAM_DRAGON: ch=TILE_CORPSE_STEAM_DRAGON; break;
+ case MONS_VERY_UGLY_THING: ch=TILE_CORPSE_VERY_UGLY_THING; break;
+// case MONS_ORC_SORCERER: ch=TILE_CORPSE_ORC_SORCERER; break;
+ case MONS_HIPPOGRIFF: ch=TILE_CORPSE_HIPPOGRIFF; break;
+ case MONS_GRIFFON: ch=TILE_CORPSE_GRIFFON; break;
+ case MONS_HYDRA: ch=TILE_CORPSE_HYDRA; break;
+ case MONS_HELL_KNIGHT: ch=TILE_CORPSE_HELL_KNIGHT; break;
+ case MONS_NECROMANCER: ch=TILE_CORPSE_NECROMANCER; break;
+ case MONS_WIZARD: ch=TILE_CORPSE_WIZARD; break;
+// case MONS_ORC_PRIEST: ch=TILE_CORPSE_ORC_PRIEST; break;
+// case MONS_ORC_HIGH_PRIEST: ch=TILE_CORPSE_ORC_HIGH_PRIEST; break;
+ case MONS_HUMAN: ch=TILE_CORPSE_HUMAN; break;
+ case MONS_GNOLL: ch=TILE_CORPSE_GNOLL; break;
+ case MONS_MOTTLED_DRAGON: ch=TILE_CORPSE_MOTTLED_DRAGON; break;
+ case MONS_BROWN_SNAKE: ch=TILE_CORPSE_BROWN_SNAKE; break;
+ case MONS_GIANT_LIZARD: ch=TILE_CORPSE_GIANT_LIZARD; break;
+ case MONS_STORM_DRAGON: ch=TILE_CORPSE_STORM_DRAGON; break;
+ case MONS_YAKTAUR: ch=TILE_CORPSE_YAKTAUR; break;
+ case MONS_DEATH_YAK: ch=TILE_CORPSE_DEATH_YAK; break;
+ case MONS_ROCK_TROLL: ch=TILE_CORPSE_ROCK_TROLL; break;
+ case MONS_STONE_GIANT: ch=TILE_CORPSE_STONE_GIANT; break;
+ case MONS_BUMBLEBEE: ch=TILE_CORPSE_BUMBLEBEE; break;
+ case MONS_REDBACK: ch=TILE_CORPSE_REDBACK; break;
+ case MONS_SPINY_WORM: ch=TILE_CORPSE_SPINY_WORM; break;
+ case MONS_TITAN: ch=TILE_CORPSE_TITAN; break;
+ case MONS_GOLDEN_DRAGON: ch=TILE_CORPSE_GOLDEN_DRAGON; break;
+ case MONS_ELF: ch=TILE_CORPSE_ELF; break;
+ case MONS_LINDWURM: ch=TILE_CORPSE_LINDWURM; break;
+ case MONS_ELEPHANT_SLUG: ch=TILE_CORPSE_ELEPHANT_SLUG; break;
+ case MONS_WAR_DOG: ch=TILE_CORPSE_WAR_DOG; break;
+ case MONS_GREY_RAT: ch=TILE_CORPSE_GREY_RAT; break;
+ case MONS_GREEN_RAT: ch=TILE_CORPSE_GREEN_RAT; break;
+ case MONS_ORANGE_RAT: ch=TILE_CORPSE_ORANGE_RAT; break;
+ case MONS_BLACK_SNAKE: ch=TILE_CORPSE_BLACK_SNAKE; break;
+ case MONS_SHEEP: ch=TILE_CORPSE_SHEEP; break;
+ case MONS_GHOUL: ch=TILE_CORPSE_GHOUL; break;
+ case MONS_HOG: ch=TILE_CORPSE_HOG; break;
+ case MONS_GIANT_MOSQUITO: ch=TILE_CORPSE_GIANT_MOSQUITO; break;
+ case MONS_GIANT_CENTIPEDE: ch=TILE_CORPSE_GIANT_CENTIPEDE; break;
+ case MONS_IRON_TROLL: ch=TILE_CORPSE_IRON_TROLL; break;
+ case MONS_NAGA: ch=TILE_CORPSE_NAGA; break;
+ case MONS_FIRE_GIANT: ch=TILE_CORPSE_FIRE_GIANT; break;
+ case MONS_FROST_GIANT: ch=TILE_CORPSE_FROST_GIANT; break;
+ case MONS_FIREDRAKE: ch=TILE_CORPSE_FIREDRAKE; break;
+ case MONS_SHADOW_DRAGON: ch=TILE_CORPSE_SHADOW_DRAGON; break;
+ case MONS_YELLOW_SNAKE: ch=TILE_CORPSE_YELLOW_SNAKE; break;
+ case MONS_GREY_SNAKE: ch=TILE_CORPSE_GREY_SNAKE; break;
+ case MONS_DEEP_TROLL: ch=TILE_CORPSE_DEEP_TROLL; break;
+ case MONS_GIANT_BLOWFLY: ch=TILE_CORPSE_GIANT_BLOWFLY; break;
+ case MONS_RED_WASP: ch=TILE_CORPSE_RED_WASP; break;
+ case MONS_SWAMP_DRAGON: ch=TILE_CORPSE_SWAMP_DRAGON; break;
+ case MONS_SWAMP_DRAKE: ch=TILE_CORPSE_SWAMP_DRAKE; break;
+ case MONS_SOLDIER_ANT: ch=TILE_CORPSE_SOLDIER_ANT; break;
+ case MONS_HILL_GIANT: ch=TILE_CORPSE_HILL_GIANT; break;
+ case MONS_QUEEN_ANT: ch=TILE_CORPSE_QUEEN_ANT; break;
+ case MONS_ANT_LARVA: ch=TILE_CORPSE_ANT_LARVA; break;
+ case MONS_GIANT_FROG: ch=TILE_CORPSE_GIANT_FROG; break;
+ case MONS_GIANT_BROWN_FROG: ch=TILE_CORPSE_GIANT_BROWN_FROG; break;
+ case MONS_SPINY_FROG: ch=TILE_CORPSE_SPINY_FROG; break;
+ case MONS_BLINK_FROG: ch=TILE_CORPSE_BLINK_FROG; break;
+ case MONS_GIANT_COCKROACH: ch=TILE_CORPSE_GIANT_COCKROACH; break;
+ case MONS_SMALL_SNAKE: ch=TILE_CORPSE_SMALL_SNAKE; break;
+ case MONS_GIANT_AMOEBA: ch=TILE_CORPSE_GIANT_AMOEBA; break;
+ case MONS_GIANT_SLUG: ch=TILE_CORPSE_GIANT_SLUG; break;
+ case MONS_GIANT_SNAIL: ch=TILE_CORPSE_GIANT_SNAIL; break;
+ case MONS_BORING_BEETLE: ch=TILE_CORPSE_BORING_BEETLE; break;
+// case MONS_NAGA_MAGE: ch=TILE_CORPSE_NAGA_MAGE; break;
+// case MONS_NAGA_WARRIOR: ch=TILE_CORPSE_NAGA_WARRIOR; break;
+// case MONS_ORC_WARLORD: ch=TILE_CORPSE_ORC_WARLORD; break;
+// case MONS_DEEP_ELF_SOLDIER: ch=TILE_CORPSE_DEEP_ELF_SOLDIER; break;
+// case MONS_DEEP_ELF_FIGHTER: ch=TILE_CORPSE_DEEP_ELF_FIGHTER; break;
+// case MONS_DEEP_ELF_KNIGHT: ch=TILE_CORPSE_DEEP_ELF_KNIGHT; break;
+// case MONS_DEEP_ELF_MAGE: ch=TILE_CORPSE_DEEP_ELF_MAGE; break;
+// case MONS_DEEP_ELF_SUMMONER: ch=TILE_CORPSE_DEEP_ELF_SUMMONER; break;
+// case MONS_DEEP_ELF_CONJURER: ch=TILE_CORPSE_DEEP_ELF_CONJURER; break;
+// case MONS_DEEP_ELF_PRIEST: ch=TILE_CORPSE_DEEP_ELF_PRIEST; break;
+// case MONS_DEEP_ELF_HIGH_PRIEST: ch=TILE_CORPSE_DEEP_ELF_HIGH_PRIEST; break;
+// case MONS_DEEP_ELF_DEMONOLOGIST: ch=TILE_CORPSE_DEEP_ELF_DEMONOLOGIST; break;
+// case MONS_DEEP_ELF_ANNIHILATOR: ch=TILE_CORPSE_DEEP_ELF_ANNIHILATOR; break;
+// case MONS_DEEP_ELF_SORCERER: ch=TILE_CORPSE_DEEP_ELF_SORCERER; break;
+// case MONS_DEEP_ELF_DEATH_MAGE: ch=TILE_CORPSE_DEEP_ELF_DEATH_MAGE; break;
+ case MONS_GREATER_NAGA: ch=TILE_CORPSE_GREATER_NAGA; break;
+// case MONS_CENTAUR_WARRIOR: ch=TILE_CORPSE_CENTAUR_WARRIOR; break;
+// case MONS_YAKTAUR_CAPTAIN: ch=TILE_CORPSE_YAKTAUR_CAPTAIN; break;
+ case MONS_QUOKKA: ch=TILE_CORPSE_QUOKKA; break;
+// case MONS_SHUGGOTH: ch=TILE_CORPSE_SHUGGOTH; break;
+ case MONS_WOLF: ch=TILE_CORPSE_WOLF; break;
+ case MONS_WARG: ch=TILE_CORPSE_WARG; break;
+ case MONS_BEAR: ch=TILE_CORPSE_BEAR; break;
+ case MONS_GRIZZLY_BEAR: ch=TILE_CORPSE_GRIZZLY_BEAR; break;
+ case MONS_POLAR_BEAR: ch=TILE_CORPSE_POLAR_BEAR; break;
+ case MONS_BLACK_BEAR: ch=TILE_CORPSE_BLACK_BEAR; break;
+ case MONS_GIANT_NEWT: ch=TILE_CORPSE_GIANT_NEWT; break;
+ case MONS_GIANT_GECKO: ch=TILE_CORPSE_GIANT_GECKO; break;
+ case MONS_GIANT_IGUANA: ch=TILE_CORPSE_GIANT_IGUANA; break;
+ case MONS_GILA_MONSTER: ch=TILE_CORPSE_GILA_MONSTER; break;
+ case MONS_KOMODO_DRAGON: ch=TILE_CORPSE_KOMODO_DRAGON; break;
+
+ case MONS_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_BROWN; break;
+ case MONS_BLACK_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_BLACK; break;
+ case MONS_YELLOW_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_YELLOW; break;
+ case MONS_GREEN_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_GREEN; break;
+ case MONS_MOTTLED_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_MOTTLED; break;
+ case MONS_PALE_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_PALE; break;
+ case MONS_PURPLE_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_PURPLE; break;
+ case MONS_RED_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_RED; break;
+ case MONS_WHITE_DRACONIAN: ch=TILE_CORPSE_DRACONIAN_WHITE; break;
+
+ case MONS_DEATH_DRAKE: ch=TILE_CORPSE_DEATH_DRAKE; break;
+ }
+ return ch;
+}
+
+int tileidx_misc(int type)
+{
+ int ch = TILE_ERROR;
+ switch(type)
+ {
+ case MISC_BOTTLED_EFREET: ch = TILE_MISC_BOTTLED_EFREET; break;
+ case MISC_CRYSTAL_BALL_OF_SEEING: ch = TILE_MISC_CRYSTAL_BALL_OF_SEEING; break;
+ case MISC_AIR_ELEMENTAL_FAN: ch = TILE_MISC_AIR_ELEMENTAL_FAN; break;
+ case MISC_LAMP_OF_FIRE: ch = TILE_MISC_LAMP_OF_FIRE; break;
+ case MISC_STONE_OF_EARTH_ELEMENTALS: ch = TILE_MISC_STONE_OF_EARTH_ELEMENTALS; break;
+ case MISC_LANTERN_OF_SHADOWS: ch = TILE_MISC_LANTERN_OF_SHADOWS; break;
+ case MISC_HORN_OF_GERYON: ch = TILE_MISC_HORN_OF_GERYON; break;
+ case MISC_BOX_OF_BEASTS: ch = TILE_MISC_BOX_OF_BEASTS; break;
+ case MISC_CRYSTAL_BALL_OF_ENERGY: ch = TILE_MISC_CRYSTAL_BALL_OF_ENERGY; break;
+ case MISC_EMPTY_EBONY_CASKET: ch = TILE_MISC_EMPTY_EBONY_CASKET; break;
+ case MISC_CRYSTAL_BALL_OF_FIXATION: ch = TILE_MISC_CRYSTAL_BALL_OF_FIXATION; break;
+ case MISC_DISC_OF_STORMS: ch = TILE_MISC_DISC_OF_STORMS; break;
+
+ case MISC_DECK_OF_ESCAPE: ch = TILE_MISC_DECK_OF_WONDERS; break;
+ case MISC_DECK_OF_DESTRUCTION: ch = TILE_MISC_DECK_OF_WONDERS; break;
+ case MISC_DECK_OF_DUNGEONS: ch = TILE_MISC_DECK_OF_WONDERS; break;
+ case MISC_DECK_OF_SUMMONING: ch = TILE_MISC_DECK_OF_SUMMONINGS; break;
+ case MISC_DECK_OF_WONDERS: ch = TILE_MISC_DECK_OF_WONDERS; break;
+ case MISC_DECK_OF_PUNISHMENT: ch = TILE_MISC_DECK_OF_WONDERS; break;
+ case MISC_DECK_OF_WAR: ch = TILE_MISC_DECK_OF_WONDERS; break;
+ case MISC_DECK_OF_CHANGES: ch = TILE_MISC_DECK_OF_WONDERS; break;
+ case MISC_DECK_OF_DEFENSE: ch = TILE_MISC_DECK_OF_WONDERS; break;
+
+ case MISC_RUNE_OF_ZOT: ch = TILE_MISC_RUNE_OF_ZOT; break;
+ }
+ return ch;
+}
+
+/*****************************************************/
+int tileidx_item(const item_def &item)
+{
+ int clas=item.base_type;
+ int type=item.sub_type;
+ int special=item.special;
+ int color=item.colour;
+
+ id_arr& id = get_typeid_array();
+
+ switch (clas)
+ {
+ case OBJ_WEAPONS:
+ if(is_fixed_artefact(item))
+ return tileidx_fixed_artifact(special);
+ else
+ if (is_unrandom_artefact( item ))
+ return tileidx_unrand_artifact(find_unrandart_index(item));
+ else
+ return tileidx_weapon(item);
+ break;
+
+ case OBJ_MISSILES:
+ return tileidx_missile(item);
+ break;
+
+ case OBJ_ARMOUR:
+ if (is_unrandom_artefact( item ))
+ return tileidx_unrand_artifact(find_unrandart_index(item));
+ else
+ return tileidx_armour(item);
+ break;
+
+ case OBJ_WANDS:
+#if 1 //ID Item
+ if (id[ IDTYPE_WANDS ][type] == ID_KNOWN_TYPE
+ || (item.flags &ISFLAG_KNOW_TYPE ))
+ return TILE_WAND_FLAME + type;
+ else
+#endif
+ return TILE_WAND_OFFSET + special % 12;
+ break;
+
+ case OBJ_FOOD:
+ return tileidx_food(item);
+ break;
+
+ case OBJ_SCROLLS:
+#if 1 //ID Item
+ if (id[ IDTYPE_SCROLLS ][type] == ID_KNOWN_TYPE
+ || (item.flags &ISFLAG_KNOW_TYPE ))
+ return TILE_SCR_IDENTIFY + type;
+#endif
+ return TILE_SCROLL;
+ break;
+
+ case OBJ_GOLD:
+ return TILE_GOLD;
+ break;
+
+ case OBJ_JEWELLERY:
+
+ if (type < AMU_RAGE)
+ { // rings
+ if(is_random_artefact( item ))
+ return TILE_RING_RANDOM_OFFSET + color - 1;
+ else
+ return TILE_RING_NORMAL_OFFSET + special % 13;
+ } else { // amu
+ if (is_unrandom_artefact( item ))
+ return tileidx_unrand_artifact(find_unrandart_index(item));
+ else
+ if(is_random_artefact( item ))
+ return TILE_AMU_RANDOM_OFFSET + color - 1;
+ else
+ return TILE_AMU_NORMAL_OFFSET + special % 13;
+ }
+ break;
+
+ case OBJ_POTIONS:
+ if (id[ IDTYPE_POTIONS ][type] == ID_KNOWN_TYPE
+ || (item.flags &ISFLAG_KNOW_TYPE ))
+ return TILE_POT_HEALING + type;
+ else
+ return TILE_POTION_OFFSET + special % 14;
+ break;
+
+ case OBJ_BOOKS:
+ type= special % 10;
+ if(type<2) return TILE_BOOK_PAPER_OFFSET + color;
+ if(type==2) return TILE_BOOK_LEATHER_OFFSET + special/10;
+ if(type==3) return TILE_BOOK_METAL_OFFSET + special/10;
+ if(type==4) return TILE_BOOK_PAPYRUS;
+ break;
+
+ case OBJ_STAVES:
+ return TILE_STAFF_OFFSET + special % 10;
+ break;
+
+ case OBJ_CORPSES:
+ if (item.sub_type == CORPSE_SKELETON)
+ return TILE_FOOD_BONE;
+ else
+ return tileidx_corpse(item.plus);
+ break;
+
+ case OBJ_ORBS:
+ return TILE_ORB;
+ break;
+
+ case OBJ_MISCELLANY:
+ return tileidx_misc(type);
+ break;
+
+ default:
+ break;
+ }
+ return TILE_ERROR;
+}
+
+/*
+ Determine Octant of missile direction
+ ---> X+
+ |
+ | 701
+ Y 6O2
+ + 543
+
+ the octant boundary slope tan(pi/8)=sqrt(2)-1 = 0.414 is approximated by 2/5
+
+*/
+static int tile_bolt_dir(int dx, int dy)
+{
+ int ax = abs(dx);
+ int ay = abs(dy);
+
+ if ( 5*ay < 2*ax )
+ {
+ return (dx > 0)? 2:6;
+ }
+ else if ( 5*ax < 2*ay)
+ {
+ return ( dy > 0 )? 4:0;
+ }
+ else
+ {
+ if (dx>0)
+ return (dy>0)? 3:1;
+ else
+ return (dy>0)? 5:7;
+ }
+}
+
+int tileidx_item_throw(const item_def &item, int dx, int dy)
+{
+ if (item.base_type == OBJ_MISSILES)
+ {
+ int ch = -1;
+ int dir = tile_bolt_dir(dx, dy);
+
+ // Thrown items with multiple directions
+ switch(item.sub_type)
+ {
+ case MI_ARROW:
+ ch = TILE_MI_ARROW0;
+ break;
+ case MI_BOLT:
+ ch = TILE_MI_BOLT0;
+ break;
+ case MI_DART:
+ ch = TILE_MI_DART0;
+ break;
+ case MI_NEEDLE:
+ ch = TILE_MI_NEEDLE0;
+ break;
+ case MI_JAVELIN:
+ ch = TILE_MI_JAVELIN0;
+ break;
+ case MI_THROWING_NET:
+ ch = TILE_MI_THROWING_NET0;
+ default:
+ break;
+ }
+ if (ch != -1)
+ return ch + dir;
+
+ // Thrown items with a single direction
+ switch(item.sub_type)
+ {
+ case MI_STONE:
+ ch = TILE_MI_STONE0;
+ break;
+ case MI_SLING_BULLET:
+ ch = TILE_MI_SLING_BULLET0;
+ break;
+ case MI_LARGE_ROCK:
+ ch = TILE_MI_LARGE_ROCK0;
+ break;
+ case MI_THROWING_NET:
+ ch = TILE_MI_THROWING_NET0;
+ break;
+ default:
+ break;
+ }
+ if (ch != -1)
+ return ch;
+ }
+
+ // If not a special case, just return the default tile.
+ return tileidx_item(item);
+}
+
+int tileidx_feature(int object){
+ int ch = TILE_ERROR;
+ switch (object)
+ {
+ case DNGN_UNSEEN: ch=TILE_DNGN_UNSEEN; break;
+ case DNGN_ROCK_WALL:
+ case DNGN_PERMAROCK_WALL:
+ case DNGN_SECRET_DOOR:
+ ch=TILE_DNGN_ROCK_WALL_OFS; break;
+
+ case DNGN_STONE_WALL: ch=TILE_DNGN_STONE_WALL; break;
+ case DNGN_CLOSED_DOOR: ch=TILE_DNGN_CLOSED_DOOR; break;
+ case DNGN_METAL_WALL: ch=TILE_DNGN_METAL_WALL; break;
+ case DNGN_GREEN_CRYSTAL_WALL: ch=TILE_DNGN_GREEN_CRYSTAL_WALL; break;
+ case DNGN_ORCISH_IDOL: ch=TILE_DNGN_ORCISH_IDOL; break;
+ case DNGN_WAX_WALL: ch=TILE_DNGN_WAX_WALL; break;
+ //case DNGN_LAST_SOLID_CH: ch=TILE_DNGN_LAST_SOLID_CH; break;
+ case DNGN_GRANITE_STATUE: ch=TILE_DNGN_GRANITE_STATUE; break;
+ // case DNGN_STATUE_39: ch=TILE_DNGN_STATUE_39; break;
+ case DNGN_LAVA: ch=TILE_DNGN_LAVA; break;
+ case DNGN_DEEP_WATER: ch=TILE_DNGN_DEEP_WATER; break;
+ case DNGN_SHALLOW_WATER: ch=TILE_DNGN_SHALLOW_WATER; break;
+ // case DNGN_WATER_STUCK: ch=TILE_DNGN_WATER_STUCK; break;
+
+ case DNGN_FLOOR:
+ case DNGN_UNDISCOVERED_TRAP:
+ ch=TILE_DNGN_FLOOR; break;
+ case DNGN_FLOOR_SPECIAL:
+ ch=TILE_DNGN_FLOOR_SPECIAL; break;
+
+ case DNGN_ENTER_HELL: ch=TILE_DNGN_ENTER_HELL; break;
+ case DNGN_OPEN_DOOR: ch=TILE_DNGN_OPEN_DOOR; break;
+ // case DNGN_BRANCH_STAIRS: ch=TILE_DNGN_BRANCH_STAIRS; break;
+ case DNGN_TRAP_MECHANICAL: ch=TILE_DNGN_TRAP_MECHANICAL; break;
+ case DNGN_TRAP_MAGICAL: ch=TILE_DNGN_TRAP_MAGICAL; break;
+// case DNGN_TRAP_III: ch=TILE_DNGN_TRAP_III; break;
+ case DNGN_ENTER_SHOP: ch=TILE_DNGN_ENTER_SHOP; break;
+ case DNGN_ENTER_LABYRINTH: ch=TILE_DNGN_ENTER_LABYRINTH; break;
+ case DNGN_STONE_STAIRS_DOWN_I:
+ case DNGN_STONE_STAIRS_DOWN_II:
+ case DNGN_STONE_STAIRS_DOWN_III: ch=TILE_DNGN_STONE_STAIRS_DOWN; break;
+ case DNGN_ROCK_STAIRS_DOWN: ch=TILE_DNGN_ROCK_STAIRS_DOWN; break;
+ case DNGN_STONE_STAIRS_UP_I:
+ case DNGN_STONE_STAIRS_UP_II:
+ case DNGN_STONE_STAIRS_UP_III: ch=TILE_DNGN_STONE_STAIRS_UP; break;
+ case DNGN_ROCK_STAIRS_UP: ch=TILE_DNGN_ROCK_STAIRS_UP; break;
+ case DNGN_ENTER_DIS: ch=TILE_DNGN_ENTER_DIS; break;
+ case DNGN_ENTER_GEHENNA: ch=TILE_DNGN_ENTER_GEHENNA; break;
+ case DNGN_ENTER_COCYTUS: ch=TILE_DNGN_ENTER_COCYTUS; break;
+ case DNGN_ENTER_TARTARUS: ch=TILE_DNGN_ENTER_TARTARUS; break;
+ case DNGN_ENTER_ABYSS: ch=TILE_DNGN_ENTER_ABYSS; break;
+ case DNGN_EXIT_ABYSS:
+ case DNGN_EXIT_HELL:
+ ch=TILE_DNGN_EXIT_ABYSS; break;
+ case DNGN_STONE_ARCH: ch=TILE_DNGN_STONE_ARCH; break;
+ case DNGN_ENTER_PANDEMONIUM: ch=TILE_DNGN_ENTER_PANDEMONIUM; break;
+ case DNGN_EXIT_PANDEMONIUM: ch=TILE_DNGN_EXIT_PANDEMONIUM; break;
+ case DNGN_TRANSIT_PANDEMONIUM: ch=TILE_DNGN_TRANSIT_PANDEMONIUM; break;
+ // case DNGN_BUILDER_SPECIAL_WALL: ch=TILE_DNGN_BUILDER_SPECIAL_WALL; break;
+ // case DNGN_BUILDER_SPECIAL_FLOOR: ch=TILE_DNGN_BUILDER_SPECIAL_FLOOR; break;
+
+ case DNGN_ENTER_ORCISH_MINES:
+ case DNGN_ENTER_HIVE:
+ case DNGN_ENTER_LAIR:
+ case DNGN_ENTER_SLIME_PITS:
+ case DNGN_ENTER_VAULTS:
+ case DNGN_ENTER_CRYPT:
+ case DNGN_ENTER_HALL_OF_BLADES:
+ case DNGN_ENTER_ZOT:
+ case DNGN_ENTER_TEMPLE:
+ case DNGN_ENTER_SNAKE_PIT:
+ case DNGN_ENTER_ELVEN_HALLS:
+ case DNGN_ENTER_TOMB:
+ case DNGN_ENTER_SWAMP:
+ case DNGN_ENTER_SHOALS:
+ case DNGN_ENTER_RESERVED_2:
+ case DNGN_ENTER_RESERVED_3:
+ case DNGN_ENTER_RESERVED_4:
+ ch=TILE_DNGN_ENTER; break;
+
+ case DNGN_RETURN_FROM_ORCISH_MINES:
+ case DNGN_RETURN_FROM_HIVE:
+ case DNGN_RETURN_FROM_LAIR:
+ case DNGN_RETURN_FROM_SLIME_PITS:
+ case DNGN_RETURN_FROM_VAULTS:
+ case DNGN_RETURN_FROM_CRYPT:
+ case DNGN_RETURN_FROM_HALL_OF_BLADES:
+ case DNGN_RETURN_FROM_ZOT:
+ case DNGN_RETURN_FROM_TEMPLE:
+ case DNGN_RETURN_FROM_SNAKE_PIT:
+ case DNGN_RETURN_FROM_ELVEN_HALLS:
+ case DNGN_RETURN_FROM_TOMB:
+ case DNGN_RETURN_FROM_SWAMP:
+ case DNGN_RETURN_FROM_SHOALS:
+ case DNGN_RETURN_RESERVED_2:
+ case DNGN_RETURN_RESERVED_3:
+ case DNGN_RETURN_RESERVED_4:
+ ch=TILE_DNGN_RETURN; break;
+
+ case DNGN_ENTER_PORTAL_VAULT:
+ case DNGN_EXIT_PORTAL_VAULT:
+ ch=TILE_DNGN_TRANSIT_PANDEMONIUM; break;
+
+ case DNGN_ALTAR_ZIN: ch=TILE_DNGN_ALTAR_ZIN; break;
+ case DNGN_ALTAR_SHINING_ONE: ch=TILE_DNGN_ALTAR_SHINING_ONE; break;
+ case DNGN_ALTAR_KIKUBAAQUDGHA: ch=TILE_DNGN_ALTAR_KIKUBAAQUDGHA; break;
+ case DNGN_ALTAR_YREDELEMNUL: ch=TILE_DNGN_ALTAR_YREDELEMNUL; break;
+ case DNGN_ALTAR_XOM: ch=TILE_DNGN_ALTAR_XOM; break;
+ case DNGN_ALTAR_VEHUMET: ch=TILE_DNGN_ALTAR_VEHUMET; break;
+ case DNGN_ALTAR_OKAWARU: ch=TILE_DNGN_ALTAR_OKAWARU; break;
+ case DNGN_ALTAR_MAKHLEB: ch=TILE_DNGN_ALTAR_MAKHLEB; break;
+ case DNGN_ALTAR_SIF_MUNA: ch=TILE_DNGN_ALTAR_SIF_MUNA; break;
+ case DNGN_ALTAR_TROG: ch=TILE_DNGN_ALTAR_TROG; break;
+ case DNGN_ALTAR_NEMELEX_XOBEH: ch=TILE_DNGN_ALTAR_NEMELEX_XOBEH; break;
+ case DNGN_ALTAR_ELYVILON: ch=TILE_DNGN_ALTAR_ELYVILON; break;
+ case DNGN_ALTAR_LUGONU: ch=TILE_DNGN_ALTAR_LUGONU; break;
+ case DNGN_ALTAR_BEOGH: ch=TILE_DNGN_ALTAR_BEOGH; break;
+
+ case DNGN_BLUE_FOUNTAIN: ch=TILE_DNGN_BLUE_FOUNTAIN; break;
+ case DNGN_DRY_FOUNTAIN_I:
+ case DNGN_DRY_FOUNTAIN_II:
+ case DNGN_DRY_FOUNTAIN_III:
+ case DNGN_DRY_FOUNTAIN_IV:
+ case DNGN_DRY_FOUNTAIN_V:
+ case DNGN_DRY_FOUNTAIN_VI:
+ case DNGN_DRY_FOUNTAIN_VII:
+ case DNGN_DRY_FOUNTAIN_VIII:
+ case DNGN_PERMADRY_FOUNTAIN :
+ ch=TILE_DNGN_DRY_FOUNTAIN; break;
+ case DNGN_SPARKLING_FOUNTAIN: ch=TILE_DNGN_SPARKLING_FOUNTAIN; break;
+ }
+
+ return ch;
+}
+
+int tileidx_cloud(int type, int decay){
+ int ch = TILE_ERROR;
+ int dur = decay/20;
+ if (dur>2) dur = 2;
+
+ switch (type)
+ {
+ case CLOUD_FIRE:
+ ch = TILE_CLOUD_FIRE_0 + dur;
+ break;
+
+ case CLOUD_COLD:
+ ch = TILE_CLOUD_COLD_0 + dur;
+ break;
+
+ case CLOUD_STINK:
+ case CLOUD_POISON:
+ ch = TILE_CLOUD_POISON_0 + dur;
+ break;
+
+ case CLOUD_BLUE_SMOKE:
+ ch = TILE_CLOUD_BLUE_SMOKE;
+ break;
+
+ case CLOUD_PURP_SMOKE:
+ ch = TILE_CLOUD_PURP_SMOKE;
+ break;
+
+ case CLOUD_MIASMA:
+ ch = TILE_CLOUD_MIASMA;
+ break;
+
+ case CLOUD_BLACK_SMOKE:
+ ch = TILE_CLOUD_BLACK_SMOKE;
+ break;
+
+ default:
+ ch = TILE_CLOUD_GREY_SMOKE;
+ break;
+ }
+ return (ch | TILE_FLAG_FLYING);
+}
+
+/**********************************************************/
+
+int tileidx_player(int job){
+
+ int ch = TILE_PLAYER;
+
+ // Handle shapechange first
+ switch (you.symbol)
+ {
+ case 's': ch = TILE_MONS_WOLF_SPIDER;break;
+ case 'I': ch = TILE_MONS_ICE_BEAST;break;
+ case '8': ch = TILE_MONS_STONE_GOLEM;break;
+ case 'D': ch = TILE_MONS_DRAGON;break;
+ case 'L': ch = TILE_MONS_LICH;break;
+ case '#': ch = TILE_MONS_VAPOUR;break;
+ case 'S': ch = TILE_MONS_LAVA_SNAKE;break;
+ case 'b': ch = TILE_MONS_GIANT_BAT;break;
+ }
+
+ if (player_is_airborne())
+ ch |= TILE_FLAG_FLYING;
+
+ if (you.attribute[ATTR_HELD])
+ ch |= TILE_FLAG_NET;
+
+ return ch;
+}
+
+
+int tileidx_unseen(int ch, const coord_def& gc)
+{
+ int res = TILE_ERROR;
+ ch &= 0xff;
+ if (ch<32) ch=32;
+
+ if ( (ch>='@' && ch<='Z') || (ch>='a' && ch<='z') || ch=='&'
+ || (ch>='1' && ch<='5') || ch == ';')
+ return TILE_UNSEEN_MONSTER | tile_unseen_flag(gc);
+
+ switch (ch)
+ {
+ //blank, walls, and floors first, since they are frequent
+ case ' ': res = TILE_DNGN_UNSEEN; break;
+ case 127: //old
+ case 176:
+ case 177: res = TILE_DNGN_ROCK_WALL_OFS; break;
+
+ case 130:
+ case ',':
+ case '.':
+ case 249:
+ case 250: res = TILE_DNGN_FLOOR; break;
+
+ // old;
+ case 137: res = TILE_DNGN_WAX_WALL; break;
+ case 138: res = TILE_DNGN_STONE_WALL; break;
+ case 139: res = TILE_DNGN_METAL_WALL; break;
+ case 140: res = TILE_DNGN_GREEN_CRYSTAL_WALL; break;
+
+ // others
+ case '!': res = TILE_POTION_OFFSET + 13; break;
+ case '"': res = TILE_AMU_NORMAL_OFFSET + 2; break;
+ case '#': res = TILE_CLOUD_GREY_SMOKE; break;
+ case '$': res = TILE_GOLD; break;
+ case '%': res = TILE_FOOD_MEAT_RATION; break;
+ case 142: res = TILE_UNSEEN_CORPSE; break;
+
+ case '\'':
+ case 134: res = TILE_DNGN_OPEN_DOOR; break;
+ case '(':
+ case ')': res = TILE_UNSEEN_WEAPON; break;
+ case '*': res = TILE_DNGN_ROCK_WALL_OFS ; break;
+ case '+': res = TILE_BOOK_PAPER_OFFSET + 15; break;
+
+ case '/': res = TILE_WAND_OFFSET; break;
+ case '8': res = TILE_DNGN_SILVER_STATUE; break;
+ case '<': res = TILE_DNGN_STONE_STAIRS_UP; break;
+ case '=': res = TILE_RING_NORMAL_OFFSET + 1; break;
+ case '>': res = TILE_DNGN_STONE_STAIRS_DOWN; break;
+ case '?': res = TILE_SCROLL; break;
+ case '[':
+ case ']': res = TILE_UNSEEN_ARMOUR; break;
+ case '\\': res = TILE_STAFF_OFFSET; break;
+ case '^': res = TILE_DNGN_TRAP_MAGICAL; break;
+ case '_':
+ case 131: res = TILE_UNSEEN_ALTAR; break;
+ case '~': res = TILE_UNSEEN_ITEM; break;
+ case '{':
+ case 135: res = TILE_DNGN_DEEP_WATER; break;
+ case 133: res = TILE_DNGN_BLUE_FOUNTAIN; break;
+ case '}': res = TILE_MISC_CRYSTAL_BALL_OF_SEEING; break;
+ case 128: //old
+ case 254: res = TILE_DNGN_CLOSED_DOOR; break;
+ case 129: res = TILE_DNGN_RETURN; break;
+ case 132: res = TILE_UNSEEN_ENTRANCE; break;
+ case 136: res = TILE_DNGN_ENTER; break;
+ case 141: res = TILE_DNGN_LAVA; break;
+ }
+ //if(res == TILE_ERROR)printf("undefined mapchar %d [%c]\n",ch,ch);
+ return res | tile_unseen_flag(gc);
+}
+
+int tileidx_bolt(const bolt &bolt)
+{
+ int col = bolt.colour;
+ return tileidx_zap(col);
+}
+
+int tileidx_zap(int color)
+{
+ int col = color;
+ if (col > 8) col -= 8;
+ if (col < 1) col = 7;
+ return TILE_SYM_BOLT_OFS -1 + col;
+}
+
+// Convert normal tile to 3D tile if it exists
+// Plus modify wall tile index depending on
+// 1: floor/wall flavor in 2D mode
+// 2: connectivity in 3D mode
+void finalize_tile(short unsigned int *tile, unsigned char wflag,
+ char wall_flv, char floor_flv, char special_flv)
+{
+ int orig = (*tile) & TILE_FLAG_MASK;
+ int flag = (*tile) & (~TILE_FLAG_MASK);
+
+ // Hack: Swap rock/stone in crypt and tomb, because there are
+ // only stone walls.
+ if ((you.where_are_you == BRANCH_CRYPT || you.where_are_you == BRANCH_TOMB)
+ && orig == TILE_DNGN_STONE_WALL)
+ orig = TILE_DNGN_ROCK_WALL_OFS;
+
+ // If there are special tiles for this level, then use them.
+ // Otherwise, we'll fall through to the next case and replace
+ // special tiles with normal floor.
+ if (orig == TILE_DNGN_FLOOR_SPECIAL &&
+ get_num_floor_special_flavors() > 0)
+ {
+ (*tile) = get_floor_special_tile_idx() + special_flv;
+ ASSERT(special_flv >= 0 &&
+ special_flv < get_num_floor_special_flavors());
+ }
+ else if (orig == TILE_DNGN_FLOOR || orig == TILE_DNGN_FLOOR_SPECIAL)
+ {
+ (*tile) = get_floor_tile_idx() + floor_flv;
+ }
+ else if (orig == TILE_DNGN_ROCK_WALL_OFS)
+ {
+ (*tile) = get_wall_tile_idx() + wall_flv;
+ }
+
+ (*tile) |= flag;
+}
+
+void tilep_calc_flags(int parts[], int flag[])
+{
+ int i;
+
+ for(i=0;i<TILEP_PARTS_TOTAL;i++) flag[i]=TILEP_FLAG_NORMAL;
+
+ if (parts[TILEP_PART_HELM]-1 >= TILEP_HELM_HELM_OFS)
+ flag[TILEP_PART_HAIR]=TILEP_FLAG_HIDE;
+
+ if (parts[TILEP_PART_HELM]-1 >= TILEP_HELM_FHELM_OFS)
+ flag[TILEP_PART_BEARD]=TILEP_FLAG_HIDE;
+
+ if(parts[TILEP_PART_BASE]== TILEP_BASE_NAGA ||
+ parts[TILEP_PART_BASE]== TILEP_BASE_NAGA+1)
+ {
+ flag[TILEP_PART_BOOTS]=flag[TILEP_PART_LEG]=TILEP_FLAG_HIDE;
+ flag[TILEP_PART_BODY] = TILEP_FLAG_CUT_NAGA;
+ }
+
+ if(parts[TILEP_PART_BASE]== TILEP_BASE_CENTAUR ||
+ parts[TILEP_PART_BASE]== TILEP_BASE_CENTAUR+1)
+ {
+ flag[TILEP_PART_BOOTS]=flag[TILEP_PART_LEG]=TILEP_FLAG_HIDE;
+ flag[TILEP_PART_BODY] = TILEP_FLAG_CUT_CENTAUR;
+ }
+
+ if (parts[TILEP_PART_BASE] == TILEP_BASE_MERFOLK_WATER ||
+ parts[TILEP_PART_BASE] == TILEP_BASE_MERFOLK_WATER +1)
+ {
+ flag[TILEP_PART_BOOTS] = TILEP_FLAG_HIDE;
+ flag[TILEP_PART_LEG] = TILEP_FLAG_HIDE;
+ flag[TILEP_PART_SHADOW] = TILEP_FLAG_HIDE;
+ }
+}
+
+/*
+ * Set default parts of each race
+ * body + optional beard, hair, etc
+ */
+
+int draconian_color(int race, int level)
+{
+ if (level < 0) // hack:monster
+ {
+ switch(race)
+ {
+ case MONS_DRACONIAN: return 0;
+ case MONS_BLACK_DRACONIAN: return 1;
+ case MONS_YELLOW_DRACONIAN: return 2;
+ case MONS_GREEN_DRACONIAN: return 4;
+ case MONS_MOTTLED_DRACONIAN:return 5;
+ case MONS_PALE_DRACONIAN: return 6;
+ case MONS_PURPLE_DRACONIAN: return 7;
+ case MONS_RED_DRACONIAN: return 8;
+ case MONS_WHITE_DRACONIAN: return 9;
+ }
+ }
+ if (level < 7)
+ return 0;
+ switch(race)
+ {
+ case SP_BLACK_DRACONIAN: return 1;
+ case SP_GOLDEN_DRACONIAN: return 2;
+ case SP_GREY_DRACONIAN: return 3;
+ case SP_GREEN_DRACONIAN: return 4;
+ case SP_MOTTLED_DRACONIAN: return 5;
+ case SP_PALE_DRACONIAN: return 6;
+ case SP_PURPLE_DRACONIAN: return 7;
+ case SP_RED_DRACONIAN: return 8;
+ case SP_WHITE_DRACONIAN: return 9;
+ }
+ return 0;
+}
+
+void tilep_race_default(int race, int gender, int level, int *parts)
+{
+ int result;
+ int hair;
+ int beard=0;
+
+ if(gender==TILEP_GENDER_MALE)
+ hair = TILEP_HAIR_SHORT_BLACK;
+ else
+ hair = TILEP_HAIR_LONG_BLACK;
+
+ switch(race)
+ {
+ case SP_HUMAN:
+ result = TILEP_BASE_HUMAN;
+ break;
+ case SP_ELF:
+ case SP_HIGH_ELF:
+ case SP_GREY_ELF:
+ case SP_SLUDGE_ELF:
+ result = TILEP_BASE_ELF;
+ hair = TILEP_HAIR_ELF_YELLOW;
+ break;
+ case SP_DEEP_ELF:
+ result = TILEP_BASE_DEEP_ELF;
+ hair = TILEP_HAIR_ELF_WHITE;
+ break;
+ case SP_HILL_DWARF:
+ case SP_MOUNTAIN_DWARF:
+ result = TILEP_BASE_DWARF;
+ if(gender==TILEP_GENDER_MALE)
+ {
+ hair = TILEP_HAIR_SHORT_RED;
+ beard = TILEP_BEARD_LONG_RED;
+ }
+ else
+ {
+ hair = TILEP_HAIR_LONG_RED;
+ beard = TILEP_BEARD_SHORT_RED;
+ }
+ break;
+ case SP_HALFLING:
+ result = TILEP_BASE_HALFLING;
+ break;
+ case SP_HILL_ORC:
+ result = TILEP_BASE_ORC;
+ hair = 0;
+ break;
+ case SP_KOBOLD:
+ result = TILEP_BASE_KOBOLD;
+ hair = 0;
+ break;
+ case SP_MUMMY:
+ result = TILEP_BASE_MUMMY;
+ hair = 0;
+ break;
+ case SP_NAGA:
+ result = TILEP_BASE_NAGA;
+ break;
+ case SP_GNOME:
+ result = TILEP_BASE_GNOME;
+ break;
+ case SP_OGRE:
+ result = TILEP_BASE_OGRE;
+ break;
+ case SP_TROLL:
+ result = TILEP_BASE_TROLL;
+ hair = 0;
+ break;
+ case SP_OGRE_MAGE:
+ result = TILEP_BASE_OGRE_MAGE;
+ break;
+
+ case SP_BASE_DRACONIAN:
+ case SP_RED_DRACONIAN:
+ case SP_WHITE_DRACONIAN:
+ case SP_GREEN_DRACONIAN:
+ case SP_GOLDEN_DRACONIAN:
+ case SP_GREY_DRACONIAN:
+ case SP_BLACK_DRACONIAN:
+ case SP_PURPLE_DRACONIAN:
+ case SP_MOTTLED_DRACONIAN:
+ case SP_PALE_DRACONIAN:
+ hair = 0;
+ if (you.mutation[MUT_BIG_WINGS])
+ {
+ parts[TILEP_PART_DRCWING] = 1 + draconian_color(race, level);
+ }
+ result = TILEP_BASE_DRACONIAN + draconian_color(race, level)*2;
+ break;
+
+ case SP_CENTAUR:
+ result = TILEP_BASE_CENTAUR;
+ break;
+ case SP_DEMIGOD:
+ result = TILEP_BASE_DEMIGOD;
+ break;
+ case SP_SPRIGGAN:
+ result = TILEP_BASE_SPRIGGAN;
+ break;
+ case SP_MINOTAUR:
+ result = TILEP_BASE_MINOTAUR;
+ hair = 0;
+ break;
+ case SP_DEMONSPAWN:
+ result = TILEP_BASE_DEMONSPAWN;
+ hair = 0;
+ break;
+ case SP_GHOUL:
+ result = TILEP_BASE_GHOUL;
+ hair = 0;
+ break;
+ case SP_KENKU:
+ result = TILEP_BASE_KENKU;
+ break;
+ case SP_MERFOLK:
+ result = player_in_water() ?
+ TILEP_BASE_MERFOLK_WATER :
+ TILEP_BASE_MERFOLK;
+ break;
+ case SP_VAMPIRE:
+ result = TILEP_BASE_VAMPIRE;
+ break;
+ default:
+ result = TILEP_BASE_HUMAN;
+ break;
+ }
+
+ if(gender==TILEP_GENDER_MALE) result++;
+ parts[TILEP_PART_BASE]=result;
+ parts[TILEP_PART_HAIR]=hair;
+ parts[TILEP_PART_BEARD]=beard;
+ parts[TILEP_PART_SHADOW]= 1;
+}
+
+void tilep_job_default(int job, int gender, int *parts)
+{
+ parts[TILEP_PART_CLOAK]= 0;
+ parts[TILEP_PART_BOOTS]= 0;
+ parts[TILEP_PART_LEG]= 0;
+ parts[TILEP_PART_BODY]= 0;
+ parts[TILEP_PART_ARM]= 0;
+ parts[TILEP_PART_HAND1]=0;
+ parts[TILEP_PART_HAND2]= 0;
+ parts[TILEP_PART_HELM]= 0;
+
+
+ switch(job)
+ {
+ case JOB_FIGHTER:
+ parts[TILEP_PART_BODY]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_LEG]=TILEP_LEG_METAL_SILVER;
+ parts[TILEP_PART_HAND2]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ break;
+
+ case JOB_CRUSADER:
+ parts[TILEP_PART_BODY]=TILEP_BODY_SHIRT_WHITE3;
+ parts[TILEP_PART_LEG]=TILEP_LEG_SKIRT_OFS;
+ parts[TILEP_PART_HELM]=TILEP_HELM_HELM_OFS;
+ parts[TILEP_PART_ARM]=TILEP_ARM_GLOVE_GRAY;
+ parts[TILEP_PART_BOOTS]=TILEP_BOOTS_MIDDLE_GRAY;
+ parts[TILEP_PART_CLOAK]=TILEP_CLOAK_BLUE;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND2]=TILEP_SHOW_EQUIP;
+ break;
+
+ case JOB_PALADIN:
+ parts[TILEP_PART_BODY]=TILEP_BODY_ROBE_WHITE;
+ parts[TILEP_PART_LEG]=TILEP_LEG_PANTS_BROWN;
+ parts[TILEP_PART_HELM]=TILEP_HELM_HELM_OFS;
+ parts[TILEP_PART_ARM]=TILEP_ARM_GLOVE_GRAY;
+ parts[TILEP_PART_BOOTS]=TILEP_BOOTS_MIDDLE_GRAY;
+ parts[TILEP_PART_CLOAK]=TILEP_CLOAK_BLUE;
+ parts[TILEP_PART_HAND2]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ break;
+
+ case JOB_DEATH_KNIGHT:
+ parts[TILEP_PART_BODY]=TILEP_BODY_SHIRT_BLACK3;
+ parts[TILEP_PART_LEG]=TILEP_LEG_METAL_GRAY;
+ parts[TILEP_PART_HELM]=TILEP_HELM_FHELM_OFS;
+ parts[TILEP_PART_ARM]=TILEP_ARM_GLOVE_BLACK;
+ parts[TILEP_PART_CLOAK]=TILEP_CLOAK_YELLOW;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND2]=TILEP_HAND2_BOOK_BLACK;
+ break;
+
+ case JOB_CHAOS_KNIGHT:
+ parts[TILEP_PART_BODY]=TILEP_BODY_BELT1;
+ parts[TILEP_PART_LEG]=TILEP_LEG_METAL_GRAY;
+ parts[TILEP_PART_HELM]=TILEP_HELM_FHELM_PLUME;
+ parts[TILEP_PART_BOOTS]=TILEP_BOOTS_SHORT_BROWN;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND2]=TILEP_SHOW_EQUIP;
+ break;
+
+ case JOB_BERSERKER:
+ parts[TILEP_PART_BODY]=TILEP_BODY_ANIMAL_SKIN;
+ parts[TILEP_PART_LEG]=TILEP_LEG_BELT_REDBROWN;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND2]=TILEP_SHOW_EQUIP;
+ break;
+
+ case JOB_REAVER:
+ parts[TILEP_PART_BODY]=TILEP_BODY_ROBE_BLACK_GOLD;
+ parts[TILEP_PART_LEG]=TILEP_LEG_PANTS_BROWN;
+ parts[TILEP_PART_HAND2]=TILEP_HAND2_BOOK_RED_DIM;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_THIEF:
+ parts[TILEP_PART_HELM] = TILEP_HELM_HOOD_YBROWN;
+ parts[TILEP_PART_BODY]=TILEP_BODY_LEATHER_JACKET;
+ parts[TILEP_PART_LEG]=TILEP_LEG_PANTS_SHORT_GRAY;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_SWORD_THIEF;
+ parts[TILEP_PART_ARM]=TILEP_ARM_GLOVE_WRIST_PURPLE;
+ parts[TILEP_PART_CLOAK]=TILEP_CLOAK_LBROWN;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_MIDDLE_BROWN2;
+ break;
+
+ case JOB_STALKER:
+ parts[TILEP_PART_HELM] = TILEP_HELM_HOOD_GREEN;
+ parts[TILEP_PART_BODY]=TILEP_BODY_LEATHER_JACKET;
+ parts[TILEP_PART_LEG]=TILEP_LEG_PANTS_SHORT_GRAY;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_SWORD_THIEF;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_GREEN_DIM;
+ parts[TILEP_PART_ARM]=TILEP_ARM_GLOVE_WRIST_PURPLE;
+ parts[TILEP_PART_CLOAK]=TILEP_CLOAK_GREEN;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_MIDDLE_BROWN2;
+ break;
+
+ case JOB_ASSASSIN:
+ parts[TILEP_PART_HELM] = TILEP_HELM_MASK_NINJA_BLACK;
+ parts[TILEP_PART_BODY]=TILEP_BODY_SHIRT_BLACK3;
+ parts[TILEP_PART_LEG]=TILEP_LEG_PANTS_BLACK;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_SWORD_THIEF;
+ parts[TILEP_PART_ARM]=TILEP_ARM_GLOVE_BLACK;
+ parts[TILEP_PART_CLOAK]=TILEP_CLOAK_BLACK;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN2;
+ break;
+
+
+ case JOB_WIZARD:
+ parts[TILEP_PART_BODY]= TILEP_BODY_GANDALF_G;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_GANDALF;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_CYAN_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ parts[TILEP_PART_HELM] = TILEP_HELM_GANDALF;
+ break;
+
+ case JOB_PRIEST:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_WHITE;
+ parts[TILEP_PART_ARM] = TILEP_ARM_GLOVE_WHITE;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_HEALER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_WHITE;
+ parts[TILEP_PART_ARM] = TILEP_ARM_GLOVE_WHITE;
+ parts[TILEP_PART_HAND1]= 38;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ parts[TILEP_PART_HELM] = TILEP_HELM_FHELM_HEALER;
+ break;
+
+ case JOB_NECROMANCER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_BLACK;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_STAFF_SKULL;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_BLACK;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_FIRE_ELEMENTALIST:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_RED;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_GANDALF;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_RED_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_ICE_ELEMENTALIST:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_BLUE;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_GANDALF;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_BLUE_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_AIR_ELEMENTALIST:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_CYAN;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_GANDALF;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_CYAN_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_EARTH_ELEMENTALIST:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_YELLOW;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_GANDALF;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_YELLOW_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_VENOM_MAGE:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_GREEN;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_GANDALF;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_GREEN_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_TRANSMUTER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_RAINBOW;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_STAFF_MAGE;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_MAGENTA_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_CONJURER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_MAGENTA;
+ parts[TILEP_PART_HELM] = TILEP_HELM_GANDALF;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_STAFF_MAGE;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_RED_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_ENCHANTER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_YELLOW;
+ parts[TILEP_PART_HELM] = TILEP_HELM_GANDALF;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_STAFF_MAGE;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_BLUE_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_SUMMONER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_BROWN;
+ parts[TILEP_PART_HELM] = TILEP_HELM_GANDALF;
+ parts[TILEP_PART_HAND1]= TILEP_HAND1_STAFF_MAGE;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_YELLOW_DIM;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ break;
+
+ case JOB_WARPER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_ROBE_BROWN;
+ parts[TILEP_PART_HELM] = TILEP_HELM_GANDALF;
+ parts[TILEP_PART_HAND1]= 42;
+ parts[TILEP_PART_HAND2]= TILEP_HAND2_BOOK_WHITE;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ parts[TILEP_PART_CLOAK]=TILEP_CLOAK_RED;
+ break;
+
+ case JOB_HUNTER:
+ parts[TILEP_PART_BODY]=TILEP_BODY_LEATHER_ARMOUR2;
+ parts[TILEP_PART_LEG]=TILEP_LEG_PANTS_BROWN;
+ parts[TILEP_PART_HAND1]=TILEP_HAND1_BOW;
+ parts[TILEP_PART_ARM] = 7;
+ parts[TILEP_PART_BOOTS]= TILEP_BOOTS_MIDDLE_BROWN;
+ break;
+
+ case JOB_GLADIATOR:
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND2]= 10;
+
+ if(gender==TILEP_GENDER_MALE)
+ {
+ parts[TILEP_PART_BODY]= TILEP_BODY_BELT1;
+ parts[TILEP_PART_LEG]= TILEP_LEG_BELT_GRAY;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_MIDDLE_GRAY;
+ }
+ else
+ {
+ parts[TILEP_PART_BODY]= TILEP_BODY_BIKINI_RED;
+ parts[TILEP_PART_LEG]= TILEP_LEG_BIKINI_RED;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_LONG_RED;
+ }
+ break;
+
+ case JOB_MONK:
+ parts[TILEP_PART_BODY]= TILEP_BODY_MONK_BLACK;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND2]=TILEP_SHOW_EQUIP;
+ break;
+
+ case JOB_WANDERER:
+ parts[TILEP_PART_BODY]= TILEP_BODY_SHIRT_HAWAII;
+ parts[TILEP_PART_LEG]= TILEP_LEG_PANTS_SHORT_BROWN;
+ parts[TILEP_PART_HAND1]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_HAND2]=TILEP_SHOW_EQUIP;
+ parts[TILEP_PART_BOOTS] = 11;
+ break;
+
+
+
+ }
+}
+
+/*
+ * Patrs index to string
+ */
+void tilep_part_to_str(int number, char *buf)
+{
+ //special
+ if (number == TILEP_SHOW_EQUIP)
+ {
+ buf[0] = buf[1] = buf[2] ='*';
+ }
+ else
+ {
+ //normal 2 digits
+ buf[0] = '0' + (number/100) % 10;
+ buf[1] = '0' + (number/ 10) % 10;
+ buf[2] = '0' + number % 10;
+ }
+ buf[3] ='\0';
+}
+
+/*
+ * Parts string to index
+ */
+int tilep_str_to_part(char *str)
+{
+ //special
+ if (str[0]=='*') return TILEP_SHOW_EQUIP;
+ //normal 2 digits
+ return atoi(str);
+}
+
+const int parts_saved[] ={
+ TILEP_PART_SHADOW,
+ TILEP_PART_BASE,
+ TILEP_PART_CLOAK,
+ TILEP_PART_BOOTS,
+ TILEP_PART_LEG,
+ TILEP_PART_BODY,
+ TILEP_PART_ARM,
+ TILEP_PART_HAND1,
+ TILEP_PART_HAND2,
+ TILEP_PART_HAIR,
+ TILEP_PART_BEARD,
+ TILEP_PART_HELM,
+ -1
+};
+
+/*
+ * scan input line from dolls.txt
+ */
+void tilep_scan_parts(char *fbuf, int *parts)
+{
+ char ibuf[8];
+
+ int gcount = 0;
+ int ccount = 0;
+ for(int i = 0; parts_saved[i] != -1; i++)
+ {
+ int idx;
+ ccount = 0;
+ int p = parts_saved[i];
+
+ while ( (fbuf[gcount] != ':') && (fbuf[gcount] != '\n')
+ && (ccount<4) && (gcount<48) )
+ {
+ ibuf[ccount] = fbuf[gcount];
+ ccount ++;
+ gcount ++;
+ }
+
+ ibuf[ccount] = '\0';
+ gcount ++;
+
+ idx = tilep_str_to_part(ibuf);
+ if (p == TILEP_PART_BASE)
+ {
+ int p0 = (parts[p]-1) & (0xfe);
+ if (((1-idx) & 1) == 1) p0++;
+ parts[p] = p0 + 1;
+ }
+ else if (idx == TILEP_SHOW_EQUIP)
+ parts[p] = TILEP_SHOW_EQUIP;
+ else if (idx < 0) // no negative value
+ parts[p] = 0;
+ else if (idx > tilep_parts_total[p]) // bound it
+ parts[p] = tilep_parts_total[p];
+ else
+ parts[p] = idx;
+ }
+}
+
+/*
+ * format-print parts
+ */
+void tilep_print_parts(char *fbuf, int *parts)
+{
+ int i;
+ char *ptr = fbuf;
+ for(i = 0; parts_saved[i] != -1; i++)
+ {
+ int p = parts_saved[i];
+ if (p == TILEP_PART_BASE) // 0:female 1:male
+ {
+ sprintf(ptr, "%03d", parts[p]%2);
+ ptr += 3;
+ }
+ else
+ {
+ tilep_part_to_str(parts[p], ptr);
+ ptr += 3;
+ }
+ *ptr = ':';
+ ptr++;
+ }
+ ptr--; // erase the last ':'
+ *ptr = 0;
+}
+
+/*
+ * return equip-dependent parts index
+ */
+int tilep_equ_weapon(const item_def &item)
+{
+ if (item.base_type == OBJ_STAVES) return TILEP_HAND1_STAFF_MAGE;
+
+ if (item.base_type ==OBJ_MISCELLANY)
+ {
+ switch(item.sub_type)
+ {
+ case MISC_BOTTLED_EFREET: return TILEP_HAND1_BOTTLE;
+ case MISC_AIR_ELEMENTAL_FAN: return TILEP_HAND1_FAN;
+ case MISC_STONE_OF_EARTH_ELEMENTALS: return TILEP_HAND1_STONE;
+ case MISC_DISC_OF_STORMS: return TILEP_HAND1_DISC;
+
+ case MISC_CRYSTAL_BALL_OF_SEEING:
+ case MISC_CRYSTAL_BALL_OF_ENERGY:
+ case MISC_CRYSTAL_BALL_OF_FIXATION: return TILEP_HAND1_CRYSTAL;
+
+ case MISC_LAMP_OF_FIRE: return TILEP_HAND1_LANTERN;
+ case MISC_LANTERN_OF_SHADOWS: return TILEP_HAND1_BONE_LANTERN;
+ case MISC_HORN_OF_GERYON: return TILEP_HAND1_HORN;
+
+ case MISC_BOX_OF_BEASTS:
+ case MISC_EMPTY_EBONY_CASKET: return TILEP_HAND1_BOX;
+
+ case MISC_DECK_OF_ESCAPE:
+ case MISC_DECK_OF_DESTRUCTION:
+ case MISC_DECK_OF_DUNGEONS:
+ case MISC_DECK_OF_SUMMONING:
+ case MISC_DECK_OF_WONDERS:
+ case MISC_DECK_OF_PUNISHMENT:
+ case MISC_DECK_OF_WAR:
+ case MISC_DECK_OF_CHANGES:
+ case MISC_DECK_OF_DEFENSE: return TILEP_HAND1_DECK;
+ }
+ }
+
+ if (item.base_type != OBJ_WEAPONS) return 0;
+
+ if (is_fixed_artefact( item ))
+ {
+ switch(item.special)
+ {
+ case SPWPN_SINGING_SWORD: return TILEP_HAND1_SINGING_SWORD;
+ case SPWPN_WRATH_OF_TROG: return TILEP_HAND1_AXE_TROG;
+ case SPWPN_SCYTHE_OF_CURSES: return TILEP_HAND1_FINISHER;
+ case SPWPN_MACE_OF_VARIABILITY: return TILEP_HAND1_MACE_OF_VARIABILITY;
+ case SPWPN_GLAIVE_OF_PRUNE: return TILEP_HAND1_GLAIVE_OF_PRUNE;
+ case SPWPN_SCEPTRE_OF_TORMENT: return TILEP_HAND1_MACE_RUBY;
+ case SPWPN_SWORD_OF_ZONGULDROK: return TILEP_HAND1_ZONGULDROK;
+ case SPWPN_SWORD_OF_CEREBOV: return TILEP_HAND1_SWORD_TWIST;
+ case SPWPN_STAFF_OF_DISPATER: return TILEP_HAND1_DISPATER;
+ case SPWPN_SCEPTRE_OF_ASMODEUS: return TILEP_HAND1_ASMODEUS;
+ case SPWPN_SWORD_OF_POWER: break;
+ case SPWPN_KNIFE_OF_ACCURACY: break;
+ case SPWPN_STAFF_OF_OLGREB: return TILEP_HAND1_OLGREB;
+ case SPWPN_VAMPIRES_TOOTH: break;
+ case SPWPN_STAFF_OF_WUCAD_MU: break;
+ }
+ }
+
+ if (is_unrandom_artefact( item ))
+ {
+ int x = find_unrandart_index(item);
+ switch(x+1)
+ {
+ // Bloodbane
+ case 2: return TILEP_HAND1_BLOODBANE;
+ // Flaming Death
+ case 4: return TILEP_HAND1_FLAMING_DEATH;
+ //mace of Brilliance
+ case 8: return TILEP_HAND1_MACE_OF_VARIABILITY;
+ //demon blade Leech
+ case 12: return TILEP_HAND1_LEECH;
+ //dagger of Chilly Death
+ case 15: return TILEP_HAND1_CHILLY_DEATH;
+ //dagger \"Morg\"
+ case 17: return TILEP_HAND1_MORG;
+ //scythe \"Finisher
+ case 18: return TILEP_HAND1_FINISHER;
+ //sling \"Punk
+ case 19: return TILEP_HAND1_PUNK;
+ //bow of Krishna
+ case 20: return TILEP_HAND1_KRISHNA;
+ //giant club \"Skullcrusher
+ case 22: break;
+ //glaive of the Guard
+ case 24: break;
+ //sword of Jihad
+ case 25: return TILEP_HAND1_JIHAD;
+ //crossbow \"Fiery Devil
+ case 28: return TILEP_HAND1_FIERY_DEVIL;
+ //sword of Doom Knight
+ case 31: return TILEP_HAND1_DOOM_KNIGHT;
+ //Eos
+ case 35: break;
+ //spear of Voo-Doo
+ case 39: return TILEP_HAND1_VOODOO;
+ //trident of the Octopus king
+ case 40: break;
+ //mithril axe \"Arga
+ case 42: return TILEP_HAND1_ARGA;
+ //Elemental Staff
+ case 43: return TILEP_HAND1_ELEMENTAL_STAFF;
+ //hand crossbow \"Sniper
+ case 44: return TILEP_HAND1_SNIPER;
+ //bow \"Erchidel
+ case 45: return TILEP_HAND1_GREAT_BOW;
+ //plutonium sword
+ case 47: return TILEP_HAND1_PLUTONIUM_SWORD;
+ //mace \"Undeadhunter
+ case 48: return TILEP_HAND1_LARGE_MACE;
+ }
+ }
+
+ switch (item.sub_type)
+ {
+ // Blunt
+ case WPN_CLUB: return TILEP_HAND1_CLUB_SLANT;
+ case WPN_MACE: return TILEP_HAND1_MACE;
+ case WPN_GREAT_MACE: return TILEP_HAND1_GREAT_MACE;
+ case WPN_FLAIL: return TILEP_HAND1_FRAIL;
+ case WPN_SPIKED_FLAIL: return TILEP_HAND1_SPIKED_FRAIL;
+ case WPN_DIRE_FLAIL: return TILEP_HAND1_GREAT_FRAIL;
+ case WPN_MORNINGSTAR: return TILEP_HAND1_MORNINGSTAR;
+ case WPN_EVENINGSTAR: return TILEP_HAND1_EVENINGSTAR;
+ case WPN_GIANT_CLUB: return TILEP_HAND1_GIANT_CLUB_SLANT;
+ case WPN_GIANT_SPIKED_CLUB: return TILEP_HAND1_GIANT_CLUB_SPIKE_SLANT;
+ case WPN_ANCUS: return TILEP_HAND1_MACE;
+ case WPN_WHIP: return TILEP_HAND1_WHIP;
+ case WPN_DEMON_WHIP: return TILEP_HAND1_BLACK_WHIP;
+
+ // Edge
+ case WPN_KNIFE: return TILEP_HAND1_DAGGER_SLANT;
+ case WPN_DAGGER: return TILEP_HAND1_DAGGER_SLANT;
+ case WPN_SHORT_SWORD: return TILEP_HAND1_SHORT_SWORD_SLANT;
+ case WPN_LONG_SWORD: return TILEP_HAND1_LONG_SWORD_SLANT;
+ case WPN_GREAT_SWORD: return TILEP_HAND1_GREAT_SWORD_SLANT;
+ case WPN_SCIMITAR: return TILEP_HAND1_SCIMITAR;
+ case WPN_FALCHION: return TILEP_HAND1_FALCHION;
+ case WPN_SABRE: return TILEP_HAND1_SABRE;
+ case WPN_DEMON_BLADE: return TILEP_HAND1_SWORD_BLACK;
+ case WPN_QUICK_BLADE: return TILEP_HAND1_DAGGER;
+ case WPN_KATANA: return TILEP_HAND1_KATANA_SLANT;
+ case WPN_DOUBLE_SWORD: return TILEP_HAND1_DOUBLE_SWORD;
+ case WPN_TRIPLE_SWORD: return TILEP_HAND1_TRIPLE_SWORD;
+ case WPN_BLESSED_BLADE: return TILEP_HAND1_BLESSED_BLADE;
+
+ // Axe
+ case WPN_HAND_AXE: return TILEP_HAND1_HAND_AXE;
+ case WPN_BATTLEAXE: return TILEP_HAND1_BATTLEAXE;
+ case WPN_BROAD_AXE: return TILEP_HAND1_BROAD_AXE;
+ case WPN_WAR_AXE: return TILEP_HAND1_WAR_AXE;
+ case WPN_EXECUTIONERS_AXE: return TILEP_HAND1_EXECUTIONERS_AXE;
+ case WPN_BARDICHE: return TILEP_HAND1_GLAIVE3;
+
+ //Pole
+ case WPN_SPEAR: return TILEP_HAND1_SPEAR;
+ case WPN_HALBERD: return TILEP_HAND1_HALBERD;
+ case WPN_GLAIVE: return TILEP_HAND1_GLAIVE;
+ case WPN_QUARTERSTAFF: return TILEP_HAND1_QUARTERSTAFF1;
+ case WPN_SCYTHE: return TILEP_HAND1_SCYTHE;
+ case WPN_HAMMER: return TILEP_HAND1_HAMMER;
+ case WPN_DEMON_TRIDENT: return TILEP_HAND1_DEMON_TRIDENT;
+ case WPN_TRIDENT: return TILEP_HAND1_TRIDENT2;
+ case WPN_LAJATANG: return TILEP_HAND1_D_GLAIVE;
+
+ //Ranged
+ case WPN_SLING: return TILEP_HAND1_SLING;
+ case WPN_BOW: return TILEP_HAND1_BOW2;
+ case WPN_CROSSBOW: return TILEP_HAND1_CROSSBOW;
+ case WPN_HAND_CROSSBOW: return TILEP_HAND1_CROSSBOW;
+ case WPN_BLOWGUN: return TILEP_HAND1_BLOWGUN;
+ case WPN_LONGBOW: return TILEP_HAND1_BOW3;
+ default: return 0;
+ }
+}
+
+int tilep_equ_armour(const item_def &item)
+{
+ if (item.base_type !=OBJ_ARMOUR) return 0;
+
+ if (is_unrandom_artefact( item ))
+ {
+ int x = find_unrandart_index(item);
+ switch(x+1)
+ {
+ // Holy Armour of Zin
+ case 6: return TILEP_BODY_ARMOR_MUMMY;
+ // robe of Augmentation
+ case 7: return TILEP_BODY_ROBE_RED2;
+ // robe of Misfortune
+ case 14: return TILEP_BODY_ARWEN;
+ // Lear's chain mail
+ case 26: return TILEP_BODY_LEARS_CHAIN_MAIL;
+ // skin of Zhor
+ case 27: return TILEP_BODY_ZHOR; break;
+ // salamander hide armour
+ case 29: return TILEP_BODY_LEATHER_RED;
+ // robe of Folly
+ case 33: return TILEP_BODY_ROBE_BLACK;
+ // Edison's patent armour
+ case 38: return TILEP_BODY_EDISON;
+ // robe of Night
+ case 46: return TILEP_BODY_ROBE_OF_NIGHT;
+ // armour of the Dragon King
+ case 49: break;
+ }
+ }
+
+ switch (item.sub_type)
+ {
+
+ case ARM_ROBE:
+ switch(item.colour)
+ {
+ // We've got a zillion robes; let's use 'em!
+ case BLACK: return TILEP_BODY_ROBE_BLACK_RED;
+ case BLUE: return TILEP_BODY_ROBE_BLUE;
+ case LIGHTBLUE: return TILEP_BODY_ROBE_BLUE_WHITE;
+ case GREEN: return TILEP_BODY_ROBE_GREEN;
+ case LIGHTGREEN: return TILEP_BODY_ROBE_BLUE_GREEN;
+ case CYAN: return TILEP_BODY_ROBE_WHITE_GREEN;
+ case LIGHTCYAN: return TILEP_BODY_ROBE_CYAN;
+ case RED: return TILEP_BODY_ROBE_RED;
+ case LIGHTRED: return TILEP_BODY_ROBE_RED_GOLD;
+ case MAGENTA: return TILEP_BODY_ROBE_MAGENTA;
+ case LIGHTMAGENTA:return TILEP_BODY_ROBE_RED3;
+ case BROWN: return TILEP_BODY_ROBE_BROWN;
+ case YELLOW: return TILEP_BODY_ROBE_YELLOW;
+ case LIGHTGREY: return TILEP_BODY_ROBE_GRAY2;
+ case DARKGREY: return TILEP_BODY_GANDALF_G;
+ case WHITE: return TILEP_BODY_ROBE_WHITE;
+ default: return 0;
+ }
+
+ case ARM_LEATHER_ARMOUR: return TILEP_BODY_LEATHER_ARMOUR3;
+ case ARM_RING_MAIL: return TILEP_BODY_RINGMAIL;
+ case ARM_CHAIN_MAIL: return TILEP_BODY_CHAINMAIL;
+ case ARM_SCALE_MAIL: return TILEP_BODY_SCALEMAIL;
+ case ARM_SPLINT_MAIL: return TILEP_BODY_BANDED;
+ case ARM_BANDED_MAIL: return TILEP_BODY_BANDED;
+ case ARM_PLATE_MAIL: return TILEP_BODY_PLATE_BLACK;
+ case ARM_CRYSTAL_PLATE_MAIL: return TILEP_BODY_CRYSTAL_PLATE;
+
+ case ARM_DRAGON_HIDE: return TILEP_BODY_DRAGONSC_GREEN;
+ case ARM_ICE_DRAGON_HIDE: return TILEP_BODY_DRAGONSC_CYAN;
+ case ARM_STEAM_DRAGON_HIDE: return TILEP_BODY_DRAGONSC_WHITE;
+ case ARM_MOTTLED_DRAGON_HIDE: return TILEP_BODY_DRAGONSC_MAGENTA;
+ case ARM_STORM_DRAGON_HIDE: return TILEP_BODY_DRAGONSC_BLUE;
+ case ARM_GOLD_DRAGON_HIDE: return TILEP_BODY_DRAGONSC_GOLD;
+ case ARM_SWAMP_DRAGON_HIDE: return TILEP_BODY_DRAGONSC_BROWN;
+
+ case ARM_DRAGON_ARMOUR: return TILEP_BODY_DRAGONARM_GREEN;
+ case ARM_ICE_DRAGON_ARMOUR: return TILEP_BODY_DRAGONARM_CYAN;
+ case ARM_STEAM_DRAGON_ARMOUR: return TILEP_BODY_DRAGONARM_WHITE;
+ case ARM_MOTTLED_DRAGON_ARMOUR: return TILEP_BODY_DRAGONARM_MAGENTA;
+ case ARM_STORM_DRAGON_ARMOUR: return TILEP_BODY_DRAGONARM_BLUE;
+ case ARM_GOLD_DRAGON_ARMOUR: return TILEP_BODY_DRAGONARM_GOLD;
+ case ARM_SWAMP_DRAGON_ARMOUR: return TILEP_BODY_DRAGONARM_BROWN;
+
+ case ARM_ANIMAL_SKIN: return TILEP_BODY_ANIMAL_SKIN;
+ case ARM_TROLL_HIDE:
+ case ARM_TROLL_LEATHER_ARMOUR: return TILEP_BODY_TROLL_HIDE;
+
+ default: return 0;
+ }
+}
+
+int tilep_equ_shield(const item_def &item)
+{
+ if (you.equip[EQ_SHIELD] == -1) return 0;
+ if (item.base_type !=OBJ_ARMOUR) return 0;
+
+ if (is_unrandom_artefact( item ))
+ {
+ int x = find_unrandart_index(item);
+ switch(x+1)
+ {
+ // shield of Ignorance
+ case 5: return TILEP_HAND2_SHIELD_SHAMAN;
+ // Bullseye
+ case 10: return TILEP_HAND2_BULLSEYE;
+ // shield of Resistance
+ case 32: return TILEP_HAND2_SHIELD_OF_RESISTANCE;
+ }
+ }
+
+ switch (item.sub_type)
+ {
+ case ARM_SHIELD: return TILEP_HAND2_SHIELD_KNIGHT_BLUE;
+ case ARM_BUCKLER: return TILEP_HAND2_SHIELD_ROUND_SMALL;
+ case ARM_LARGE_SHIELD: return TILEP_HAND2_SHIELD_LONG_RED;
+ default: return 0;
+ }
+}
+
+int tilep_equ_cloak(const item_def &item)
+{
+ if (you.equip[EQ_CLOAK] == -1) return 0;
+ if (item.base_type !=OBJ_ARMOUR) return 0;
+ if (item.sub_type != ARM_CLOAK) return 0;
+ switch (item.colour)
+ {
+ case BLACK:
+ case BLUE:
+ case LIGHTBLUE: return TILEP_CLOAK_BLUE;
+ case GREEN:
+ case LIGHTGREEN: return TILEP_CLOAK_GREEN;
+ case CYAN:
+ case LIGHTCYAN: return TILEP_CLOAK_CYAN;
+ case RED:
+ case LIGHTRED: return TILEP_CLOAK_RED;
+ case MAGENTA:
+ case LIGHTMAGENTA:return TILEP_CLOAK_MAGENTA;
+ case BROWN: return TILEP_CLOAK_LBROWN;
+ case YELLOW: return TILEP_CLOAK_YELLOW;
+ case LIGHTGREY: return TILEP_CLOAK_GRAY;
+ case DARKGREY: return TILEP_CLOAK_BLACK;
+ case WHITE: return TILEP_CLOAK_WHITE;
+ default: return 0;
+ }
+}
+
+int tilep_equ_helm(const item_def &item)
+{
+ if (you.equip[EQ_HELMET] == -1)
+ return 0;
+ if (item.base_type != OBJ_ARMOUR)
+ return 0;
+
+ if (is_unrandom_artefact(item))
+ {
+ int idx = find_unrandart_index(item);
+ switch (idx + 1)
+ {
+ case 11:
+ // crown of Dyrovepreva
+ return TILEP_HELM_DYROVEPREVA;
+ case 41:
+ // mask of the Dragon
+ return TILEP_HELM_ART_DRAGONHELM;
+ case 50:
+ // hat of the Alchemist
+ return TILEP_HELM_TURBAN_PURPLE;
+ }
+
+ // Although there shouldn't be any, just in case
+ // unhandled artefacts fall through to defaults...
+ }
+
+ int etype = get_etype(item);
+ int helmet_desc = get_helmet_desc(item);
+ switch (item.sub_type)
+ {
+ case ARM_CAP:
+ switch (item.colour)
+ {
+ case BLACK:
+ case BLUE:
+ case LIGHTBLUE:
+ return TILEP_HELM_FEATHER_BLUE;
+ case GREEN:
+ case LIGHTGREEN:
+ case CYAN:
+ case LIGHTCYAN:
+ return TILEP_HELM_FEATHER_GREEN;
+ case RED:
+ case LIGHTRED:
+ case MAGENTA:
+ case LIGHTMAGENTA:
+ return TILEP_HELM_FEATHER_RED;
+ case BROWN:
+ case YELLOW:
+ return TILEP_HELM_FEATHER_YELLOW;
+ case LIGHTGREY:
+ case DARKGREY:
+ case WHITE:
+ return TILEP_HELM_FEATHER_WHITE;
+ }
+ return 0;
+
+ case ARM_WIZARD_HAT:
+ switch (item.colour)
+ {
+ case MAGENTA:
+ case LIGHTMAGENTA:
+ case BLACK:
+ return TILEP_HELM_WIZARD_BLACKRED;
+ case BLUE:
+ case LIGHTBLUE:
+ return TILEP_HELM_WIZARD_BLUE;
+ case GREEN:
+ case LIGHTGREEN:
+ return TILEP_HELM_WIZARD_DARKGREEN;
+ case CYAN:
+ return TILEP_HELM_WIZARD_PURPLE;
+ case LIGHTCYAN:
+ return TILEP_HELM_WIZARD_BLUEGREEN;
+ case RED:
+ case LIGHTRED:
+ return TILEP_HELM_WIZARD_RED;
+ case BROWN:
+ return TILEP_HELM_WIZARD_BROWN;
+ case YELLOW:
+ return TILEP_HELM_WIZARD_BLACKGOLD;
+ case LIGHTGREY:
+ case DARKGREY:
+ case WHITE:
+ return TILEP_HELM_WIZARD_WHITE;
+ }
+ return 0;
+
+ // Why are there both helms and helmets? -Enne
+ // It'd be like having catsup and ketchup in the same game.
+ case ARM_HELM:
+ case ARM_HELMET:
+ switch (helmet_desc)
+ {
+ case THELM_DESC_PLAIN:
+ switch (etype)
+ {
+ default:
+ return TILEP_HELM_CHAIN;
+ case 1:
+ return TILEP_HELM_HELM_GIMLI;
+ case 2:
+ return TILEP_HELM_HELM_OFS; // urgh
+ case 3:
+ return TILEP_HELM_FHELM_GRAY2;
+ case 4:
+ return TILEP_HELM_FHELM_BLACK;
+ }
+ case THELM_DESC_WINGED:
+ return TILEP_HELM_YELLOW_WING;
+ case THELM_DESC_HORNED:
+ switch (etype)
+ {
+ default:
+ return TILEP_HELM_FHELM_HORN2;
+ case 1:
+ return TILEP_HELM_BLUE_HORN_GOLD;
+ case 2:
+ return TILEP_HELM_FHELM_HORN_GRAY;
+ case 3:
+ return TILEP_HELM_FHELM_HORN_YELLOW;
+ case 4:
+ return TILEP_HELM_FHELM_OFS; // urgh
+ }
+ case THELM_DESC_CRESTED:
+ return TILEP_HELM_FHELM_ISILDUR;
+ case THELM_DESC_PLUMED:
+ return TILEP_HELM_FHELM_PLUME;
+ case THELM_DESC_SPIKED:
+ return TILEP_HELM_FHELM_EVIL;
+ case THELM_DESC_VISORED:
+ return TILEP_HELM_FHELM_GRAY3;
+ case THELM_DESC_JEWELLED:
+ return TILEP_HELM_FULL_GOLD;
+ }
+ }
+
+ return 0;
+}
+
+int tilep_equ_gloves(const item_def &item)
+{
+ if (you.equip[EQ_GLOVES] == -1)
+ return 0;
+ if (item.base_type != OBJ_ARMOUR)
+ return 0;
+ if (item.sub_type != ARM_GLOVES)
+ return 0;
+
+ if (is_unrandom_artefact(item))
+ {
+ int idx = find_unrandart_index(item);
+ switch (idx + 1)
+ {
+ case 30: // gauntlets of War (thick brown)
+ return TILEP_ARM_GLOVE_BLACK;
+ case 51: // fencer's gloves (white)
+ return TILEP_ARM_GLOVE_WHITE;
+ }
+ }
+
+ int etype = get_etype(item);
+ switch (etype)
+ {
+ default:
+ case 0:
+ switch (item.colour)
+ {
+ case LIGHTBLUE:
+ return TILEP_ARM_GLOVE_BLUE;
+ default:
+ case BROWN:
+ return TILEP_ARM_GLOVE_BROWN;
+ }
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ switch (item.colour)
+ {
+ case LIGHTBLUE:
+ default:
+ return TILEP_ARM_GLOVE_CHUNLI;
+ case BROWN:
+ return TILEP_ARM_GLOVE_GRAYFIST;
+ }
+ }
+
+ return 0;
+}
+
+int tilep_equ_boots(const item_def &item)
+{
+ if (you.equip[EQ_BOOTS] == -1)
+ return 0;
+ if (item.base_type != OBJ_ARMOUR)
+ return 0;
+
+ if (item.sub_type == ARM_NAGA_BARDING)
+ return TILEP_BOOTS_NAGA_BARDING;
+ if (item.sub_type == ARM_CENTAUR_BARDING)
+ return TILEP_BOOTS_CENTAUR_BARDING;
+
+ if (item.sub_type != ARM_BOOTS)
+ return 0;
+
+ if (is_unrandom_artefact(item))
+ {
+ int idx = find_unrandart_index(item);
+ switch (idx + 1)
+ {
+ case 23: // boots of the assassin
+ return TILEP_BOOTS_MIDDLE_GRAY;
+ }
+ }
+
+ int etype = get_etype(item);
+ switch (etype)
+ {
+ default:
+ case 0:
+ return TILEP_BOOTS_MIDDLE_BROWN3;
+ case 1:
+ case 2:
+ switch (item.colour)
+ {
+ case BROWN:
+ default:
+ return TILEP_BOOTS_MESH_RED;
+ case BLUE:
+ return TILEP_BOOTS_MESH_BLUE;
+ }
+ case 3:
+ case 4:
+ switch (item.colour)
+ {
+ case BROWN:
+ return TILEP_BOOTS_LONG_RED;
+ default:
+ case BLUE:
+ return TILEP_BOOTS_BLUE_GOLD;
+ }
+ }
+
+ return 0;
+}
+
+#ifdef TILEP_DEBUG
+/*
+ * Debugging routines
+ */
+
+const char *get_ctg_name(int part)
+{
+ return tilep_parts_name[part];
+}
+
+int get_ctg_idx(char *name)
+{
+ int i;
+
+ for(i=0;i<TILEP_PARTS_TOTAL;i++)
+ if(strcmp(name, tilep_parts_name[i])==0) return i;
+ return 0;
+}
+
+const char *get_parts_name(int part, int idx)
+{
+ static char tmp[10];
+ const char *ptr = tilep_comment[ tilep_comment_ofs[part] -1 + idx ];
+ if(idx==0) return "";
+ if(ptr[0]==0)
+ {
+ sprintf(tmp,"%02d",idx);
+ return tmp;
+ }
+ return ptr;
+}
+
+// �p�[�c�̖��O�𐔎��ɕϊ�
+int get_parts_idx(int part, char *name)
+{
+ int res = atoi(name);
+ int i;
+
+ for(i=0;i<tilep_parts_total[part];i++)
+ if(strcmp(name, tilep_comment[ tilep_comment_ofs[part]+i])==0)
+ return i+1;
+ return res;
+}
+#endif /* TILEP_DEBUG */
+
+/*
+ * Tile data preparation
+ */
+
+// for clarity
+enum SpecialIdx
+{
+ SPECIAL_N = 0,
+ SPECIAL_NE = 1,
+ SPECIAL_E = 2,
+ SPECIAL_SE = 3,
+ SPECIAL_S = 4,
+ SPECIAL_SW = 5,
+ SPECIAL_W = 6,
+ SPECIAL_NW = 7,
+ SPECIAL_FULL = 8
+};
+
+int jitter(SpecialIdx i)
+{
+ return (i + random_range(-1, 1) + 8) % 8;
+}
+
+void tile_init_flavor()
+{
+ for (int x = 0; x < GXM; x++)
+ {
+ for (int y = 0; y < GYM; y++)
+ {
+ int max_wall_flavor = get_num_wall_flavors() - 1;
+ int max_floor_flavor = get_num_floor_flavors() - 1;
+ int wall_flavor = random_range(0, max_wall_flavor);
+ int floor_flavor = random_range(0, max_floor_flavor);
+
+ env.tile_flavor[x][y].floor = floor_flavor;
+ env.tile_flavor[x][y].wall = wall_flavor;
+
+ if (grd[x][y] == DNGN_FLOOR_SPECIAL)
+ {
+ int left_grd = (x > 0) ? grd[x-1][y] : DNGN_ROCK_WALL;
+ int right_grd = (x < GXM - 1) ? grd[x+1][y] : DNGN_ROCK_WALL;
+ int up_grd = (y > 0) ? grd[x][y-1] : DNGN_ROCK_WALL;
+ int down_grd = (y < GYM - 1) ? grd[x][y+1] : DNGN_ROCK_WALL;
+
+ // The special tiles contains part floor and part special, so
+ // if there are adjacent floor or special tiles, we should
+ // do our best to "connect" them appropriately. If there are
+ // are other tiles there (walls, doors, whatever...) then it
+ // doesn't matter.
+ bool l_nrm = left_grd == DNGN_FLOOR;
+ bool r_nrm = right_grd == DNGN_FLOOR;
+ bool u_nrm = up_grd == DNGN_FLOOR;
+ bool d_nrm = down_grd == DNGN_FLOOR;
+ bool l_spc = left_grd == DNGN_FLOOR_SPECIAL;
+ bool r_spc = right_grd == DNGN_FLOOR_SPECIAL;
+ bool u_spc = up_grd == DNGN_FLOOR_SPECIAL;
+ bool d_spc = down_grd == DNGN_FLOOR_SPECIAL;
+
+ if (l_nrm && r_nrm || u_nrm && d_nrm)
+ {
+ // Not much to do here...
+ env.tile_flavor[x][y].special = SPECIAL_FULL;
+ }
+ else if (l_nrm)
+ {
+ if (u_nrm)
+ env.tile_flavor[x][y].special = SPECIAL_NW;
+ else if (d_nrm)
+ env.tile_flavor[x][y].special = SPECIAL_SW;
+ else if (u_spc && d_spc)
+ env.tile_flavor[x][y].special = SPECIAL_W;
+ else if (u_spc && r_spc)
+ env.tile_flavor[x][y].special = SPECIAL_SW;
+ else if (d_spc && r_spc)
+ env.tile_flavor[x][y].special = SPECIAL_NW;
+ else if (u_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_W : SPECIAL_SW;
+ else if (d_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_W : SPECIAL_NW;
+ else
+ env.tile_flavor[x][y].special = jitter(SPECIAL_W);
+ }
+ else if (r_nrm)
+ {
+ if (u_nrm)
+ env.tile_flavor[x][y].special = SPECIAL_NE;
+ else if (d_nrm)
+ env.tile_flavor[x][y].special = SPECIAL_SE;
+ else if (u_spc && d_spc)
+ env.tile_flavor[x][y].special = SPECIAL_E;
+ else if (u_spc && l_spc)
+ env.tile_flavor[x][y].special = SPECIAL_SE;
+ else if (d_spc && l_spc)
+ env.tile_flavor[x][y].special = SPECIAL_NE;
+ else if (u_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_E : SPECIAL_SE;
+ else if (d_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_E : SPECIAL_NE;
+ else
+ env.tile_flavor[x][y].special = jitter(SPECIAL_E);
+ }
+ else if (u_nrm)
+ {
+ if (r_spc && l_spc)
+ env.tile_flavor[x][y].special = SPECIAL_N;
+ else if (r_spc && d_spc)
+ env.tile_flavor[x][y].special = SPECIAL_NW;
+ else if (l_spc && d_spc)
+ env.tile_flavor[x][y].special = SPECIAL_NE;
+ else if (r_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_N : SPECIAL_NW;
+ else if (l_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_N : SPECIAL_NE;
+ else
+ env.tile_flavor[x][y].special = jitter(SPECIAL_N);
+ }
+ else if (d_nrm)
+ {
+ if (r_spc && l_spc)
+ env.tile_flavor[x][y].special = SPECIAL_S;
+ else if (r_spc && u_spc)
+ env.tile_flavor[x][y].special = SPECIAL_SW;
+ else if (l_spc && u_spc)
+ env.tile_flavor[x][y].special = SPECIAL_SE;
+ else if (r_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_S : SPECIAL_SW;
+ else if (l_spc)
+ env.tile_flavor[x][y].special = coinflip() ?
+ SPECIAL_S : SPECIAL_SE;
+ else
+ env.tile_flavor[x][y].special = jitter(SPECIAL_S);
+ }
+ else if (u_spc && d_spc)
+ {
+ // We know this value is already initialized and
+ // is necessarily in bounds.
+ char t = env.tile_flavor[x][y-1].special;
+ if (t == SPECIAL_NE || t == SPECIAL_E)
+ env.tile_flavor[x][y].special = SPECIAL_E;
+ else if (t == SPECIAL_NW || t == SPECIAL_W)
+ env.tile_flavor[x][y].special = SPECIAL_W;
+ else
+ env.tile_flavor[x][y].special = SPECIAL_FULL;
+ }
+ else if (r_spc && l_spc)
+ {
+ // We know this value is already initialized and
+ // is necessarily in bounds.
+ char t = env.tile_flavor[x-1][y].special;
+ if (t == SPECIAL_NW || t == SPECIAL_N)
+ env.tile_flavor[x][y].special = SPECIAL_N;
+ else if (t == SPECIAL_SW || t == SPECIAL_S)
+ env.tile_flavor[x][y].special = SPECIAL_S;
+ else
+ env.tile_flavor[x][y].special = SPECIAL_FULL;
+ }
+ else if (u_spc && l_spc)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_SE;
+ }
+ else if (u_spc && r_spc)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_SW;
+ }
+ else if (d_spc && l_spc)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_NE;
+ }
+ else if (d_spc && r_spc)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_NW;
+ }
+ else
+ {
+ env.tile_flavor[x][y].special = SPECIAL_FULL;
+ }
+ }
+ else
+ {
+ env.tile_flavor[x][y].special = 0;
+ }
+ }
+ }
+
+ // Second pass for clean up. The only bad part about the above
+ // algorithm is that it could turn a block of floor like this:
+ //
+ // N4NN
+ // 3125
+ // NN6N
+ //
+ // (KEY: N = normal floor, # = special floor)
+ //
+ // Into these flavors:
+ // 1 - SPECIAL_S
+ // 2 - SPECIAL_N
+ // 3-6, not important
+ //
+ // Generally the tiles don't fit with a north to the right or left
+ // of a south tile. What we really want to do is to separate the
+ // two regions, by making 1 a SPECIAL_SE and 2 a SPECIAL_NW tile.
+ for (int x = 0; x < GXM - 1; x++)
+ {
+ for (int y = 0; y < GYM - 1; y++)
+ {
+ if (grd[x][y] != DNGN_FLOOR_SPECIAL)
+ continue;
+ if (env.tile_flavor[x][y].special != SPECIAL_N &&
+ env.tile_flavor[x][y].special != SPECIAL_S &&
+ env.tile_flavor[x][y].special != SPECIAL_E &&
+ env.tile_flavor[x][y].special != SPECIAL_W)
+ {
+ continue;
+ }
+
+ int right_flavor = x < GXM - 1 ? env.tile_flavor[x+1][y].special :
+ SPECIAL_FULL;
+ int down_flavor = y < GYM - 1 ? env.tile_flavor[x][y+1].special :
+ SPECIAL_FULL;
+ int this_flavor = env.tile_flavor[x][y].special;
+
+ if (this_flavor == SPECIAL_N && right_flavor == SPECIAL_S)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_NE;
+ env.tile_flavor[x+1][y].special = SPECIAL_SW;
+ }
+ else if (this_flavor == SPECIAL_S && right_flavor == SPECIAL_N)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_SE;
+ env.tile_flavor[x+1][y].special = SPECIAL_NW;
+ }
+ else if (this_flavor == SPECIAL_E && down_flavor == SPECIAL_W)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_SE;
+ env.tile_flavor[x][y+1].special = SPECIAL_NW;
+ }
+ else if (this_flavor == SPECIAL_W && down_flavor == SPECIAL_E)
+ {
+ env.tile_flavor[x][y].special = SPECIAL_NE;
+ env.tile_flavor[x][y+1].special = SPECIAL_SW;
+ }
+ }
+ }
+}
+
+void tile_clear_buf()
+{
+ for (int y = 0; y < GYM; y++)
+ {
+ for (int x = 0; x < GXM; x++)
+ {
+ unsigned char this_is_wall = 128;
+ gv_now[x][y]=0;
+ tile_dngn[x][y]=TILE_DNGN_UNSEEN;
+ if (env.map[x][y].glyph() != 0)
+ {
+ int g = grd[x][y];
+ if (g >= DNGN_ORCISH_IDOL && g != DNGN_OPEN_DOOR)
+ this_is_wall = 0;
+ }
+
+ wall_flag[x][y] = this_is_wall;
+ }
+ }
+
+ for (int y = 0; y < GYM; y++)
+ {
+ for (int x = 0; x < GXM; x++)
+ {
+ unsigned char w = wall_flag[x][y]&0x80;
+ if (w)
+ {
+ if (x != 0) wall_flag[x-1][y] |= WFLAG_R;
+ if (x != GXM-1) wall_flag[x+1][y] |= WFLAG_L;
+ if (y != 0) wall_flag[x][y-1] |= WFLAG_D;
+ if (y != GYM-1) wall_flag[x][y+1] |= WFLAG_U;
+ }
+ wall_flag[x][y] &= 0xf;
+ }
+ }
+}
+
+/* called from view.cc */
+void tile_draw_floor()
+{
+ int cx, cy;
+ for (cy = 0; cy < env.tile_fg.height(); cy++)
+ {
+ for (cx = 0; cx < env.tile_fg.width(); cx++)
+ {
+ const coord_def ep(cx+1, cy+1);
+ const coord_def gc = view2grid(show2view(ep));
+ int bg = TILE_DNGN_UNSEEN | tile_unseen_flag(gc);
+
+ int object = env.show(ep);
+ if (in_bounds(gc) && object != 0)
+ {
+ if (object != gv_now[gc.x][gc.y])
+ {
+ if (object == DNGN_SECRET_DOOR)
+ object = (int)grid_secret_door_appearance(gc.x, gc.y);
+
+ tile_dngn[gc.x][gc.y] = tileidx_feature(object);
+ gv_now[gc.x][gc.y] = object;
+
+ unsigned char wall = 0xff;
+ if (object >= DNGN_ORCISH_IDOL && object != DNGN_OPEN_DOOR)
+ wall = 0;
+
+ if (gc.x != 0)
+ {
+ wall_flag[gc.x-1][gc.y] = (wall_flag[gc.x-1][gc.y] &
+ (~WFLAG_R)) | (wall & WFLAG_R);
+ }
+ if (gc.x != GXM-1)
+ {
+ wall_flag[gc.x+1][gc.y] = (wall_flag[gc.x+1][gc.y] &
+ (~WFLAG_L)) | (wall & WFLAG_L);
+ }
+ if (gc.y != 0)
+ {
+ wall_flag[gc.x][gc.y-1] = (wall_flag[gc.x][gc.y-1] &
+ (~WFLAG_D)) | (wall & WFLAG_D);
+ }
+ if (gc.y != GYM-1)
+ {
+ wall_flag[gc.x][gc.y+1] = (wall_flag[gc.x][gc.y+1] &
+ (~WFLAG_U)) | (wall & WFLAG_U);
+ }
+ }
+ bg = tile_dngn[gc.x][gc.y];
+ }
+ // init tiles
+ env.tile_bg[ep.x-1][ep.y-1] = bg;
+ env.tile_fg[ep.x-1][ep.y-1] = 0;
+ }
+ }
+}
+
+// Called from item() in view.cc
+void tile_place_item(int x, int y, int idx)
+{
+ int t = tileidx_item(mitm[idx]);
+ if (mitm[idx].link != NON_ITEM)
+ t |= TILE_FLAG_S_UNDER;
+ env.tile_fg[x-1][y-1]=t;
+
+ if (item_needs_autopickup(mitm[idx]))
+ env.tile_bg[x-1][y-1] |= TILE_FLAG_CURSOR3;
+}
+
+void tile_place_item_bk(int gx, int gy, int idx)
+{
+ int t = tileidx_item(mitm[idx]);
+ env.tile_bk_fg[gx][gy] = t;
+
+ if (item_needs_autopickup(mitm[idx]))
+ env.tile_bk_bg[gx][gy] |= TILE_FLAG_CURSOR3;
+}
+
+void tile_place_tile_bk(int gx, int gy, int tileidx)
+{
+ env.tile_bk_fg[gx][gy] = tileidx;
+}
+
+// Called from item() in view.cc
+void tile_place_item_marker(int x, int y, int idx)
+{
+ env.tile_fg[x-1][y-1] |= TILE_FLAG_S_UNDER;
+
+ if (item_needs_autopickup(mitm[idx]))
+ env.tile_bg[x-1][y-1] |= TILE_FLAG_CURSOR3;
+}
+
+// Called from monster_grid() in view.cc
+void tile_place_monster(int gx, int gy, int idx, bool foreground)
+{
+ if (idx == NON_MONSTER)
+ {
+ return;
+ }
+
+ const coord_def gc(gx, gy);
+ const coord_def ep = view2show(grid2view(gc));
+
+ int t = tileidx_monster(idx);
+ int t0 = t & TILE_FLAG_MASK;
+ int flag = t & (~TILE_FLAG_MASK);
+ int mon_wep = menv[idx].inv[MSLOT_WEAPON];
+
+ if (menv[idx].type >= MONS_DRACONIAN &&
+ menv[idx].type <= MONS_DRACONIAN_SCORCHER)
+ {
+ int race = draco_subspecies(&menv[idx]);
+ int cls = menv[idx].type;
+ int eq = 0;
+ if (mon_wep != NON_ITEM &&
+ (cls == race || cls == MONS_DRACONIAN_KNIGHT))
+ eq = tilep_equ_weapon(mitm[mon_wep]);
+ t = flag | TileMcacheFind(cls, eq, race);
+ }
+ else if (mon_wep != NON_ITEM)
+ {
+ int eq = tilep_equ_weapon(mitm[mon_wep]);
+ switch(t0)
+ {
+ // 3D chars
+ case TILE_MONS_VAULT_GUARD:
+
+ case TILE_MONS_BLORK_THE_ORC:
+ case TILE_MONS_ORC:
+ case TILE_MONS_ORC_KNIGHT:
+ case TILE_MONS_ORC_WARLORD:
+ case TILE_MONS_ORC_WARRIOR:
+ case TILE_MONS_URUG:
+
+ case TILE_MONS_GOBLIN:
+ case TILE_MONS_IJYB:
+ case TILE_MONS_HOBGOBLIN:
+ case TILE_MONS_GNOLL:
+ case TILE_MONS_BOGGART:
+
+ case TILE_MONS_KOBOLD:
+ case TILE_MONS_KOBOLD_DEMONOLOGIST:
+ case TILE_MONS_BIG_KOBOLD:
+
+ case TILE_MONS_DEEP_ELF_FIGHTER:
+ case TILE_MONS_DEEP_ELF_SOLDIER:
+ case TILE_MONS_DEEP_ELF_KNIGHT:
+ case TILE_MONS_DEEP_ELF_BLADEMASTER:
+ case TILE_MONS_DEEP_ELF_MASTER_ARCHER:
+ case TILE_MONS_DEEP_ELF_MAGE:
+ case TILE_MONS_DEEP_ELF_SUMMONER:
+ case TILE_MONS_DEEP_ELF_CONJURER:
+ case TILE_MONS_DEEP_ELF_PRIEST:
+ case TILE_MONS_DEEP_ELF_HIGH_PRIEST:
+ case TILE_MONS_DEEP_ELF_DEMONOLOGIST:
+ case TILE_MONS_DEEP_ELF_ANNIHILATOR:
+ case TILE_MONS_DEEP_ELF_SORCERER:
+ case TILE_MONS_DEEP_ELF_DEATH_MAGE:
+
+ case TILE_MONS_MIDGE:
+ case TILE_MONS_IMP:
+
+ case TILE_MONS_NAGA:
+ case TILE_MONS_GREATER_NAGA:
+ case TILE_MONS_NAGA_WARRIOR:
+ case TILE_MONS_NAGA_MAGE:
+
+ case TILE_MONS_OGRE_MAGE:
+ case TILE_MONS_RED_DEVIL:
+ case TILE_MONS_WIZARD:
+ case TILE_MONS_HUMAN:
+ case TILE_MONS_ELF:
+
+ case TILE_MONS_ANGEL:
+
+ case TILE_MONS_HELL_KNIGHT:
+
+ case TILE_MONS_NORRIS:
+ case TILE_MONS_MAUD:
+ case TILE_MONS_DUANE:
+ case TILE_MONS_EDMUND:
+ case TILE_MONS_FRANCES:
+ case TILE_MONS_HAROLD:
+ case TILE_MONS_JOSEPH:
+ case TILE_MONS_JOZEF:
+ case TILE_MONS_RUPERT:
+ case TILE_MONS_TERENCE:
+ case TILE_MONS_WAYNE:
+ case TILE_MONS_FREDERICK:
+
+ case TILE_MONS_RAKSHASA:
+ case TILE_MONS_RAKSHASA_FAKE:
+
+ case TILE_MONS_VAMPIRE_KNIGHT:
+
+ case TILE_MONS_SKELETAL_WARRIOR:
+
+ if (eq != 0 )
+ t = flag | TileMcacheFind(t0, eq);
+ break;
+
+ }
+ }
+
+ if (foreground)
+ {
+ env.tile_fg[ep.x-1][ep.y-1] = t;
+ }
+ else
+ {
+ env.tile_bk_fg[gc.x][gc.y] = t0;
+ }
+}
+
+void tile_place_cloud(int x, int y, int type, int decay)
+{
+ env.tile_fg[x-1][y-1]= tileidx_cloud(type, decay);
+}
+
+unsigned int tileRayCount = 0;
+FixedVector<coord_def, 30> tileRays;
+
+void tile_place_ray(const coord_def& gc)
+{
+ // Record rays for later. The curses version just applies
+ // rays directly to the screen. The tiles version doesn't have
+ // (nor want) such direct access. So, it batches up all of the
+ // rays and applies them in viewwindow(...).
+ if (tileRayCount < tileRays.size() - 1)
+ {
+ tileRays[tileRayCount++] = view2show(grid2view(gc));
+ }
+}
+
+void tile_draw_rays(bool resetCount)
+{
+ for (unsigned int i = 0; i < tileRayCount; i++)
+ {
+ env.tile_bg[tileRays[i].x-1][tileRays[i].y-1] |= TILE_FLAG_RAY;
+ }
+
+ if (resetCount)
+ tileRayCount = 0;
+}
+
+void tile_finish_dngn(short unsigned int *tileb, int cx, int cy)
+{
+ int x, y;
+ int count = 0;
+
+ for (y=0; y < crawl_view.viewsz.y; y++)
+ {
+ for (x=0; x < crawl_view.viewsz.x; x++)
+ {
+ const int gx = view2gridX(x);
+ const int gy = view2gridY(y);
+ int wall = 0;
+
+ char wall_flv = 0;
+ char floor_flv = 0;
+ char special_flv = 0;
+ if (map_bounds( gx, gy ))
+ {
+ wall = wall_flag[gx][gy];
+ wall_flv = env.tile_flavor[gx][gy].wall;
+ floor_flv = env.tile_flavor[gx][gy].floor;
+ special_flv = env.tile_flavor[gx][gy].special;
+ }
+ finalize_tile(&tileb[count], wall,
+ wall_flv, floor_flv, special_flv);
+ finalize_tile(&tileb[count+1], wall,
+ wall_flv, floor_flv, special_flv);
+ count += 2;
+ }
+ }
+}
+
+void tile_draw_dungeon(short unsigned int *tileb)
+{
+ tile_finish_dngn(tileb, you.x_pos, you.y_pos);
+ TileDrawDungeon(tileb);
+}
+
+#define swapint(a, b) {int tmp = a; a = b; b = tmp;}
+
+// Item is unided(1) or tried(2) or id'ed (0)
+// Note that Jewellries are never "tried"
+static int item_unid_type(const item_def &item)
+{
+ int t = item.base_type;
+ int s = item.sub_type;
+ int id0 = 0;
+
+ id_arr& id = get_typeid_array();
+
+ if ((item.flags &ISFLAG_KNOW_TYPE) != 0)
+ return 0;
+
+ switch (t)
+ {
+ case OBJ_SCROLLS:
+ id0 = id[ IDTYPE_SCROLLS ][s];
+ if (id0 == ID_TRIED_TYPE)
+ return 2;
+ else
+ if (id0 != ID_KNOWN_TYPE)
+ return 1;
+ else
+ return 0;
+
+ case OBJ_WANDS:
+ id0 = id[ IDTYPE_WANDS ][s];
+ if (id0 == ID_TRIED_TYPE)
+ return 2;
+ else
+ if (id0 != ID_KNOWN_TYPE)
+ return 1;
+ else
+ return 0;
+
+ case OBJ_POTIONS:
+ id0 = id[ IDTYPE_POTIONS ][s];
+ if (id0 == ID_TRIED_TYPE)
+ return 2;
+ else
+ if (id0 != ID_KNOWN_TYPE)
+ return 1;
+ else
+ return 0;
+
+ case OBJ_JEWELLERY:
+ id0 = id[ IDTYPE_JEWELLERY ][s];
+ if (id0 != ID_KNOWN_TYPE)
+ return 1;
+ else
+ return 0;
+ }
+ return 0;
+}
+
+// Helper routine: sort floor item index and pack into idx
+int pack_floor_item(int *idx, int *flag, int *isort, int max)
+{
+ int n = 0;
+ static int isort_weapon2[NUM_WEAPONS];
+ static int isort_armour2[NUM_ARMOURS];
+
+ static const int isort_weapon[NUM_WEAPONS] =
+ {
+ WPN_WHIP, WPN_CLUB, WPN_HAMMER, WPN_MACE,
+ WPN_FLAIL, WPN_DEMON_WHIP,
+ WPN_ANCUS, WPN_MORNINGSTAR, WPN_EVENINGSTAR,
+ WPN_SPIKED_FLAIL, WPN_GREAT_MACE, WPN_DIRE_FLAIL,
+ WPN_GIANT_CLUB, WPN_GIANT_SPIKED_CLUB,
+
+ WPN_KNIFE, WPN_DAGGER, WPN_SHORT_SWORD, WPN_SABRE, WPN_QUICK_BLADE,
+ WPN_FALCHION, WPN_LONG_SWORD, WPN_SCIMITAR, WPN_KATANA,
+ WPN_DEMON_BLADE, WPN_DOUBLE_SWORD, WPN_GREAT_SWORD, WPN_TRIPLE_SWORD,
+
+ WPN_HAND_AXE, WPN_WAR_AXE, WPN_BROAD_AXE,
+ WPN_BATTLEAXE, WPN_EXECUTIONERS_AXE,
+
+ WPN_SPEAR, WPN_TRIDENT, WPN_HALBERD, WPN_SCYTHE,
+ WPN_GLAIVE, WPN_DEMON_TRIDENT,
+
+ WPN_QUARTERSTAFF,
+
+ WPN_SLING, WPN_BOW, WPN_CROSSBOW, WPN_HAND_CROSSBOW
+ };
+ static const int isort_armour[NUM_ARMOURS] =
+ {
+ ARM_ROBE,
+ ARM_ANIMAL_SKIN,
+ ARM_LEATHER_ARMOUR,
+ ARM_TROLL_LEATHER_ARMOUR,
+ ARM_RING_MAIL, ARM_SCALE_MAIL, ARM_CHAIN_MAIL,
+ ARM_SPLINT_MAIL, ARM_BANDED_MAIL, ARM_PLATE_MAIL,
+ ARM_CRYSTAL_PLATE_MAIL,
+ ARM_SWAMP_DRAGON_ARMOUR,
+ ARM_MOTTLED_DRAGON_ARMOUR,
+ ARM_STEAM_DRAGON_ARMOUR,
+ ARM_DRAGON_ARMOUR,
+ ARM_ICE_DRAGON_ARMOUR,
+ ARM_STORM_DRAGON_ARMOUR,
+ ARM_GOLD_DRAGON_ARMOUR,
+ ARM_TROLL_HIDE,
+ ARM_SWAMP_DRAGON_HIDE,
+ ARM_MOTTLED_DRAGON_HIDE,
+ ARM_STEAM_DRAGON_HIDE,
+ ARM_DRAGON_HIDE,
+ ARM_ICE_DRAGON_HIDE,
+ ARM_STORM_DRAGON_HIDE,
+ ARM_GOLD_DRAGON_HIDE,
+ ARM_CLOAK,
+ ARM_BUCKLER, ARM_SHIELD, ARM_LARGE_SHIELD,
+ ARM_HELMET, ARM_GLOVES, ARM_BOOTS
+ };
+
+ int i;
+ for (i=0;i<NUM_WEAPONS;i++)
+ isort_weapon2[isort_weapon[i]] = i;
+ for (i=0;i<NUM_ARMOURS;i++)
+ isort_armour2[isort_armour[i]] = i;
+
+ int o = igrd[you.x_pos][you.y_pos];
+ if (o == NON_ITEM) return 0;
+
+ while (o != NON_ITEM)
+ {
+ int id0 = item_unid_type(mitm[o]);
+ int next = mitm[o].link;
+ int typ = mitm[o].base_type;
+
+ if (n >= max) break;
+
+ idx[n] = o;
+ isort[n] = typ * 256 * 3;
+ if (typ == OBJ_WEAPONS)
+ {
+ isort[n] += 3 * isort_weapon2[ mitm[o].sub_type];
+ }
+ if (typ == OBJ_ARMOUR)
+ {
+ isort[n] += 3 * isort_armour2[ mitm[o].sub_type ];
+ }
+ flag[n] = 0;
+
+ if (item_ident( mitm[o], ISFLAG_KNOW_CURSE ) &&
+ item_cursed(mitm[o]))
+ {
+ flag[n] |= TILEI_FLAG_CURSE;
+ }
+
+ if (id0 != 0)
+ {
+ isort[n] += id0;
+ if (id0 == 2)
+ flag[n] = TILEI_FLAG_TRIED;
+ }
+ flag[n] |= TILEI_FLAG_FLOOR;
+
+ // Simple Bubble sort
+ int k = n;
+ while( (k > 0) && (isort[k-1] > isort[k]))
+ {
+ swapint(idx[k-1], idx[k]);
+ swapint(isort[k-1], isort[k]);
+ swapint(flag[k-1], flag[k]);
+ k--;
+ }
+ n++;
+ o = next;
+ }
+ return n;
+}
+
+// Helper routine: Calculate tile index and quantity data to be displayed
+void finish_inven_data(int n, int *tiles, int *num, int *idx, int *iflag)
+{
+ int i;
+
+ for(i = 0; i < n; i++)
+ {
+ int q = -1;
+ int j = idx[i];
+ item_def *itm;
+
+ if (j==-1)
+ {
+ num[i]=-1;
+ tiles[i]= 0;
+ continue;
+ }
+
+ if (iflag[i] & TILEI_FLAG_FLOOR)
+ itm = &mitm[j];
+ else
+ itm = &you.inv[j];
+
+ int type = itm->base_type;
+
+ if (type == OBJ_FOOD || type == OBJ_SCROLLS
+ || type == OBJ_POTIONS || type == OBJ_MISSILES)
+ q = itm->quantity;
+ if (q==1) q = -1;
+
+ if (type == OBJ_WANDS &&
+ (itm->flags & ISFLAG_KNOW_PLUSES )!= 0)
+ q = itm->plus;
+
+ tiles[i] = tileidx_item(*itm);
+ num[i] = q;
+ }
+}
+
+// Display Inventory/floor items
+#include "guic.h"
+extern TileRegionClass *region_item;
+extern TileRegionClass *region_item2;
+extern WinClass *win_main;
+
+void tile_draw_inv(int item_type, int flag)
+{
+ #define MAXINV 200
+ int tiles[MAXINV];
+ int num[MAXINV];
+ int idx[MAXINV];
+ int iflag[MAXINV];
+ int isort[MAXINV];
+ int n = 0;
+ int i, j;
+
+ if (flag == -1)
+ {
+ flag = (win_main->active_layer == 0) ? REGION_INV1 : REGION_INV2;
+ }
+
+ TileRegionClass *r = (flag == REGION_INV1) ? region_item:region_item2;
+ int numInvTiles = r->mx * r->my;
+ if (numInvTiles > MAXINV)
+ numInvTiles = MAXINV;
+
+ // item.base_type <-> char conversion table
+ const static char *obj_syms = ")([/%#?=!#+\\0}x";
+
+ const static char *syms_table[] =
+ {
+ ")\\", // weapons and staves
+ "(", // missile
+ "[", // armour
+ "/", // wands
+ "%", // foods
+ "#", // none
+ "?+", // scrolls and books
+ "=", // rings/amulets
+ "!", // potions
+ "#", // none
+ "?+", // books/scrolls
+ ")\\", // weapons and staves
+ "0",
+ "}",
+ "x"
+ };
+
+ const char *item_chars = Options.show_items;
+
+ int eq_flag[ENDOFPACK];
+ int empty = 0;
+
+ for (j = 0; j < ENDOFPACK; j++)
+ {
+ eq_flag[j] =
+ (you.inv[j].quantity != 0 && is_valid_item( you.inv[j])) ? 1:0;
+ empty += 1-eq_flag[j];
+ }
+
+ for (j=0; j<NUM_EQUIP; j++)
+ {
+ int eq = you.equip[j];
+ if (eq >= 0 && eq < ENDOFPACK)
+ eq_flag[eq] = 2;
+ }
+
+ if (item_type >= 0)
+ item_chars = syms_table[item_type];
+ else
+ if (item_type == -2)
+ item_chars = obj_syms;
+ else
+ if (item_type == -3)
+ item_chars = ".";
+
+ if (item_chars[0] == 0) return;
+
+ for (i=0; i < (int)strlen(item_chars); i++)
+ {
+ int top = n;
+ char ic = item_chars[i];
+
+ if (n >= numInvTiles) break;
+
+ // Items on the floor
+ if (ic == '.')
+ {
+ n += pack_floor_item(&idx[n], &iflag[n], &isort[n], numInvTiles - n);
+ continue;
+ }
+
+ // empty slots
+ if (ic == '_')
+ {
+ for (j = 0; j < empty && n < numInvTiles; j++)
+ {
+ idx[n] = -1;
+ iflag[n] = 0;
+ n++;
+ }
+ continue;
+ }
+
+ // convert item char to item type
+ int type = -1;
+ for (j=0; j < (int)strlen(obj_syms); j++)
+ {
+ if (obj_syms[j] == ic)
+ {
+ type = j;
+ break;
+ }
+ }
+
+ if (type == -1) continue;
+
+ for (j = 0; j < ENDOFPACK && n < numInvTiles; j++)
+ {
+ if (you.inv[j].base_type==type && eq_flag[j] != 0)
+ {
+ int sval = NUM_EQUIP + you.inv[j].sub_type;
+ int base = 0;
+ int id0 = item_unid_type(you.inv[j]);
+
+ idx[n] = j;
+ iflag[n] = 0;
+
+ if (type == OBJ_JEWELLERY && sval >= AMU_RAGE)
+ {
+ base = 1000;
+ sval = base + sval;
+ }
+
+ if (id0 == 2)
+ {
+ iflag[n] |= TILEI_FLAG_TRIED;
+ // To the tail
+ sval = base + 980;
+ }
+ else if (id0 == 1)
+ {
+ // To the tail
+ sval = base + 990;
+ }
+
+ // Equipment first
+ if (eq_flag[j]==2)
+ {
+ //sval = base;
+ iflag[n] |= TILEI_FLAG_EQUIP;
+ }
+
+ if (item_cursed(you.inv[j]) &&
+ item_ident( you.inv[j], ISFLAG_KNOW_CURSE ))
+ {
+ iflag[n] |= TILEI_FLAG_CURSE;
+ }
+
+ if (flag == REGION_INV2)
+ sval = j;
+
+ isort[n] = sval;
+
+ int k = n;
+ while( (k > top) && (isort[k-1] > isort[k]))
+ {
+ swapint(idx[k-1], idx[k]);
+ swapint(isort[k-1], isort[k]);
+ swapint(iflag[k-1], iflag[k]);
+ k--;
+ }
+
+ n++;
+ } // type == base
+ } // j
+ } // i
+
+ finish_inven_data(n, tiles, num, idx, iflag);
+
+ for(i = n; i < numInvTiles; i++)
+ {
+ tiles[i] = 0;
+ num[i] = 0;
+ idx[i] = -1;
+ iflag[i] = 0;
+ }
+ TileDrawInvData(n, flag, tiles, num, idx, iflag);
+}
+
+#endif
diff --git a/crawl-ref/source/tile2.cc b/crawl-ref/source/tile2.cc
new file mode 100644
index 0000000000..92eeb6dcbb
--- /dev/null
+++ b/crawl-ref/source/tile2.cc
@@ -0,0 +1,3023 @@
+#ifdef USE_TILE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "AppHdr.h"
+#include "describe.h"
+#include "direct.h"
+#include "dungeon.h"
+#include "files.h"
+#include "guic.h"
+#include "itemprop.h"
+#include "it_use2.h"
+#include "stuff.h"
+#include "tiles.h"
+#include "tilecount-w2d.h"
+#include "tiledef-p.h"
+#include "transfor.h"
+
+// normal tile count + iso tile count
+#define TILE_TOTAL2 (TILE_TOTAL)
+// normal tile count
+#define TILE_NORMAL TILE_TOTAL
+
+extern void TileDrawDungeonAux();
+
+// Raw tile images
+extern img_type TileImg;
+extern img_type TileIsoImg;
+extern img_type PlayerImg;
+extern img_type WallImg;
+extern img_type ScrBufImg;
+
+extern WinClass *win_main;
+// Regions
+extern TileRegionClass *region_tile;
+extern TextRegionClass *region_crt;
+extern TextRegionClass *region_stat;
+extern TextRegionClass *region_tip;
+extern TextRegionClass *region_msg;
+
+extern TileRegionClass *region_item;
+extern TileRegionClass *region_item2;
+
+#define ScrBufImg (region_tile->backbuf)
+
+//Internal
+static img_type DollCacheImg;
+
+static void tile_draw_grid(int kind, int xx, int yy);
+static void clear_tcache();
+static void init_tcache();
+static void init_tileflag();
+static void register_tile_mask(int tile, int region, int *cp,
+ char *ms, bool smalltile = false);
+static void tcache_compose_normal(int ix, int *fg, int *bg);
+
+#if 1 // TILE_MON_EQUIP
+static void mcache_init();
+#endif
+
+//Internal variables
+
+bool force_redraw_tile;
+bool force_redraw_inv = false;
+static unsigned short int t1buf[TILE_DAT_XMAX+2][TILE_DAT_YMAX+2],
+ t2buf[TILE_DAT_XMAX+2][TILE_DAT_YMAX+2];
+static short unsigned int tb_bk[TILE_DAT_YMAX*TILE_DAT_XMAX*2];
+
+#define MAX_ITEMLIST 200
+int itemlist[MAX_ITEMLIST];
+int itemlist_num[MAX_ITEMLIST];
+int itemlist_idx[MAX_ITEMLIST];
+char itemlist_key[MAX_ITEMLIST];
+int itemlist_iflag[MAX_ITEMLIST];
+int itemlist_flag = -1;
+int itemlist_n=0;
+
+static int wall_flavors = 0;
+static int floor_flavors = 0;
+static int special_flavors = 0;
+static int wall_tile_idx = 0;
+static int floor_tile_idx = 0;
+static int special_tile_idx = 0;
+
+int get_num_wall_flavors()
+{
+ return wall_flavors;
+}
+
+int get_num_floor_flavors()
+{
+ return floor_flavors;
+}
+
+int get_num_floor_special_flavors()
+{
+ return special_flavors;
+}
+
+int get_wall_tile_idx()
+{
+ return wall_tile_idx;
+}
+
+int get_floor_tile_idx()
+{
+ return floor_tile_idx;
+}
+
+int get_floor_special_tile_idx()
+{
+ return special_tile_idx;
+}
+
+/******** Cache buffer for transparency operation *****/
+static int tcache_kind;
+
+#if 1 // ISO
+#define TCACHE_KIND_ISO 2
+#define TCACHE0_ISO 0
+#define TCACHE1_ISO 1
+#endif
+
+#define TCACHE_KIND_NORMAL 1
+#define TCACHE0_NORMAL 0
+
+static int last_cursor = -1;
+
+//Internal cache Image buffer
+static img_type *tcache_image;
+
+//Start of a pointer string
+static int *tcache_head;
+
+typedef struct tile_cache
+{
+ unsigned int id[4];
+ int idx;
+ tile_cache *next;
+ tile_cache *prev;
+} tile_cache;
+
+// number of tile grids
+static int tile_xmax;
+static int tile_ymax;
+
+static int max_tcache;
+static int tc_hash;
+// [kind * tc_hash][max_tcache]
+static tile_cache **tcache;
+// [kind][x*y]
+static int **screen_tcach_idx;
+
+#if 1 //ISO
+/*
+ screen grid arrangement. (x,y,kind)
+ (0,0,B) (1,0,A) (2,0,B)
+ (0,0,A) (1,0,B) (2,0,A) ...
+ (0,1,B) (1,1,A) (2,1,B)
+ (0,1,A) (1,1,B) (2,1,A)
+ ....
+*/
+const int tcache_wx_iso[TCACHE_KIND_ISO] = {TILE_X_EX_ISO/2, TILE_X_EX_ISO/2};
+const int tcache_wy_iso[TCACHE_KIND_ISO] = {TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/4};
+const int tcache_ox_iso[TCACHE_KIND_ISO] = {0,0};
+const int tcache_oy_iso[TCACHE_KIND_ISO] = {0,TILE_Y_EX_ISO/4};
+const int tcache_nlayer_iso[TCACHE_KIND_ISO] = {4,4};
+#endif
+
+const int tcache_wx_normal[TCACHE_KIND_NORMAL] = {TILE_X};
+const int tcache_wy_normal[TCACHE_KIND_NORMAL] = {TILE_Y};
+const int tcache_ox_normal[TCACHE_KIND_NORMAL] = {0};
+const int tcache_oy_normal[TCACHE_KIND_NORMAL] = {0};
+const int tcache_nlayer_normal[TCACHE_KIND_NORMAL] = {1};
+
+unsigned char tile_flag[TILE_TOTAL2];
+#define TFLAG_A 0x80
+#define TFLAG_B 0x40
+#define TFLAG_C 0x20
+#define TFLAG_D 0x10
+#define TFLAG_F 0x08
+#define TFLAG_G 0x04
+#define TFLAG_H 0x02
+#define TFLAG_I 0x01
+
+#define tile_check_blank(tile,region) \
+ if( (tile_flag[tile & TILE_FLAG_MASK]&(region))==0) (tile) &= ~TILE_FLAG_MASK;
+
+#if 1 //ISO
+#define TREGION_A_ISO 0
+#define TREGION_B_ISO 1
+#define TREGION_C_ISO 2
+#define TREGION_D_ISO 3
+#define TREGION_E_ISO 4
+#define TREGION_F_ISO 5
+#define TREGION_G_ISO 6
+#define TREGION_H_ISO 7
+/*
+<-64->
+ AAEE |
+ BBFF 64
+ CCGG |
+ DDHH |
+*/
+
+const int region_sx_iso[8]=
+ {0, 0, 0, 0,
+ TILE_X_EX_ISO/2, TILE_X_EX_ISO/2, TILE_X_EX_ISO/2, TILE_X_EX_ISO/2};
+const int region_sy_iso[8]=
+ {0, TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/2, (TILE_Y_EX_ISO*3)/4,
+ 0, TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/2, (TILE_Y_EX_ISO*3)/4};
+const int region_wx_iso[8]=
+ {TILE_X_EX_ISO/2, TILE_X_EX_ISO/2, TILE_X_EX_ISO/2, TILE_X_EX_ISO/2,
+ TILE_X_EX_ISO/2, TILE_X_EX_ISO/2, TILE_X_EX_ISO/2, TILE_X_EX_ISO/2};
+const int region_wy_iso[8]=
+ {TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/4,
+ TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/4, TILE_Y_EX_ISO/4};
+
+/* 32x32 �̏ꍇ �^�C����(sx,sy)����wx*wy �̗̈��� ox,oy ���炵�ăR�s�[ */
+
+#ifdef ISO48
+//�傫��BMP��48x48 �̏ꍇ
+const int region_sx_small_iso[8]=
+ {0, 0, 0, 0,
+ TILE_X/2, TILE_X/2, TILE_X/2, TILE_X/2};
+const int region_sy_small_iso[8]=
+ {0, 2, 14, 26, 0, 2, 14, 26};
+const int region_wx_small_iso[8]=
+ {16,16,16,16, 16,16,16,16};
+const int region_wy_small_iso[8]=
+ {2, 12, 12, 6, 2, 12, 12, 6};
+const int region_ox_small_iso[8]=
+ {8,8,8, 8, 0, 0, 0, 0};
+const int region_oy_small_iso[8]=
+ {14,0,0,0, 14,0,0,0};
+#else
+//�傫��BMP��64x64 �̏ꍇ
+const int region_sx_small_iso[8]=
+ {0, 0, 0, 0,
+ TILE_X/2, TILE_X/2, TILE_X/2, TILE_X/2};
+const int region_sy_small_iso[8]=
+ {0, 0, 8,24, 0, 0, 8,24};
+const int region_wx_small_iso[8]={0,16,16,16, 0,16,16,16};
+const int region_wy_small_iso[8]={0, 8,16, 8, 0, 8,16, 8};
+const int region_ox_small_iso[8]={16,16,16, 16, 0, 0, 0, 0};
+const int region_oy_small_iso[8]={0,8,0,0,0,8,0,0};
+#endif
+
+#endif // ISO
+
+#define TREGION_0_NORMAL 0
+const int region_sx_normal[1]={0};
+const int region_sy_normal[1]={0};
+const int region_wx_normal[1]={TILE_X};
+const int region_wy_normal[1]={TILE_Y};
+
+// ISO mode sink mask
+static char *sink_mask;
+
+/* BG tile priority */
+static unsigned char tile_prio[TILE_TOTAL2];
+#define PRIO_WALL 10
+#define tile_is_wall(tile) (tile_prio[(tile)&TILE_FLAG_MASK]==PRIO_WALL)
+
+/********* Image manipulation subroutines ****************/
+img_type ImgLoadFileSimple(const char *name)
+{
+ char fname[512];
+#ifdef USE_X11
+ sprintf(fname,"tiles/%s.png", name);
+ std::string path = datafile_path(fname, true, true);
+ return ImgLoadFile(path.c_str());
+#endif
+#ifdef WIN32TILES
+ sprintf(fname,"tiles/%s.bmp", name);
+ std::string path = datafile_path(fname, true, true);
+ return ImgLoadFile(path.c_str());
+#endif
+}
+
+// TileImg macro
+void ImgCopyFromTileImg(int idx, img_type dest, int dx, int dy, int copy,
+ char *mask = NULL, bool hilite = false)
+{
+ int sx = (idx % TILE_PER_ROW)*TILE_X;
+ int sy = (idx / TILE_PER_ROW)*TILE_Y;
+ if (hilite)
+ {
+ if (mask != NULL)
+ ImgCopyMaskedH(TileImg, sx, sy, TILE_X, TILE_Y,
+ dest, dx, dy, mask);
+ else
+ ImgCopyH(TileImg, sx, sy, TILE_X, TILE_Y, dest, dx, dy, copy);
+ }
+ else
+ {
+ if (mask != NULL)
+ ImgCopyMasked(TileImg, sx, sy, TILE_X, TILE_Y,
+ dest, dx, dy, mask);
+ else
+ ImgCopy(TileImg, sx, sy, TILE_X, TILE_Y, dest, dx, dy, copy);
+ }
+}
+
+void ImgCopyToTileImg(int idx, img_type src, int sx, int sy, int copy,
+ char *mask = NULL, bool hilite = false)
+{
+ int dx = (idx % TILE_PER_ROW)*TILE_X;
+ int dy = (idx / TILE_PER_ROW)*TILE_Y;
+ if (hilite)
+ {
+ if (mask != NULL)
+ ImgCopyMaskedH(src, sx, sy, TILE_X, TILE_Y,
+ TileImg, dx, dy, mask);
+ else
+ ImgCopyH(src, sx, sy, TILE_X, TILE_Y, TileImg, dx, dy, copy);
+ }
+ else
+ {
+ if (mask != NULL)
+ ImgCopyMasked(src, sx, sy, TILE_X, TILE_Y,
+ TileImg, dx, dy, mask);
+ else
+ ImgCopy(src, sx, sy, TILE_X, TILE_Y, TileImg, dx, dy, copy);
+ }
+}
+
+void TileInit()
+{
+ int x, y, k;
+ textcolor(WHITE);
+
+ TileImg = ImgLoadFileSimple("tile");
+ PlayerImg = ImgLoadFileSimple("player");
+ WallImg = ImgLoadFileSimple("wall2d");
+
+
+ if (!TileImg)
+ {
+ cprintf("Main tile not initialized\n");
+ getch();
+ end(-1);
+ }
+
+ ImgSetTransparentPix(TileImg);
+
+ if (ImgWidth(TileImg)!= TILE_X * TILE_PER_ROW ||
+ ImgHeight(TileImg) < TILE_Y*( (TILE_TOTAL + TILE_PER_ROW -1)/TILE_PER_ROW))
+ {
+ cprintf("Main tile size invalid\n");
+ getch();
+ end(-1);
+ }
+
+ if (!PlayerImg)
+ {
+ cprintf("Player tile not initialized\n");
+ getch();
+ end(-1);
+ }
+
+ if (ImgWidth(PlayerImg)!= TILE_X * TILEP_PER_ROW)
+ {
+ cprintf("Player tile size invalid\n");
+ getch();
+ end(-1);
+ }
+
+ if (!WallImg)
+ {
+ cprintf("wall2d tile not initialized\n");
+ getch();
+ end(-1);
+ }
+
+ tcache_kind = TCACHE_KIND_NORMAL;
+ tc_hash = 1;
+ tile_xmax = tile_dngn_x;
+ tile_ymax = tile_dngn_y;
+
+ max_tcache = 4*tile_xmax*tile_ymax;
+
+ screen_tcach_idx = (int **)malloc(sizeof(int *) * tcache_kind);
+
+ tcache = (tile_cache **)malloc(sizeof(tile_cache *)*tcache_kind);
+
+ tcache_head = (int *)malloc(sizeof(int)*tcache_kind*tc_hash);
+
+ for(k=0;k<tcache_kind;k++)
+ {
+ screen_tcach_idx[k]= (int *)malloc(sizeof(int)* tile_xmax * tile_ymax);
+ tcache[k] = (tile_cache *)malloc(sizeof(tile_cache)*max_tcache);
+ for(x=0;x<tile_xmax * tile_ymax;x++)
+ screen_tcach_idx[k][x] = -1;
+ }
+
+ sink_mask = (char *)malloc(TILE_X*TILE_Y);
+
+ init_tileflag();
+ init_tcache();
+
+ DollCacheImg = ImgCreateSimple(TILE_X, TILE_Y);
+
+ for(x=0;x<TILE_DAT_XMAX+2;x++){
+ for(y=0;y<TILE_DAT_YMAX+2;y++){
+ t1buf[x][y]=0;
+ t2buf[x][y]=simple_iso_tile(TILE_DNGN_UNSEEN)|TILE_FLAG_UNSEEN;
+ }}
+
+ force_redraw_tile = false;
+
+#if 1 // TILE_MON_EQUIP
+ mcache_init();
+#endif
+
+ for(x=0; x<MAX_ITEMLIST;x++)
+ {
+ itemlist[x]=itemlist_num[x]=itemlist_key[x]=itemlist_idx[x]=0;
+ }
+}
+
+void TileResizeScreen(int x0, int y0)
+{
+ int k, x;
+ tile_xmax = x0;
+ tile_ymax = y0;
+ max_tcache = 4*tile_xmax*tile_ymax;
+
+ for(k=0;k<tcache_kind;k++)
+ {
+ free(screen_tcach_idx[k]);
+ screen_tcach_idx[k]= (int *)malloc(sizeof(int)* tile_xmax * tile_ymax);
+
+ free(tcache[k]);
+ tcache[k] = (tile_cache *)malloc(sizeof(tile_cache)*max_tcache);
+
+ for(x=0;x<tile_xmax * tile_ymax;x++)
+ {
+ screen_tcach_idx[k][x] = -1;
+ }
+ }
+ clear_tcache();
+ crawl_view.viewsz.x = tile_xmax;
+ crawl_view.viewsz.y = tile_ymax;
+ crawl_view.vbuf.size(crawl_view.viewsz);
+}
+
+/*** Investigate a region of specific tile whether it contains any
+ picture, or it is blank ***/
+int init_tileflag_aux(int tile, int xs, int ys, int wx, int wy){
+ int x,y, sx,sy;
+ img_type src=TileImg;
+
+ ASSERT(tile<TILE_TOTAL2);
+
+ sx = tile % TILE_PER_ROW;
+ sx *= TILE_X;
+ sy = tile / TILE_PER_ROW;
+ sy *= TILE_Y;
+
+ for(x=xs;x<xs+wx;x++){
+ for(y=ys;y<ys+wy;y++){
+ if(!ImgIsTransparentAt(src, sx+x, sy+y))
+ return 1;
+ }}
+ return 0;
+}
+
+void init_tileflag(){
+ int tile, flag;
+
+ for(tile=0;tile<TILE_TOTAL2;tile++){
+ flag = 0;
+ tile_flag[tile]=flag;
+ tile_prio[tile]=0;
+ }
+
+ for(tile=0;tile<4;tile++)
+ {
+ tile_prio[simple_iso_tile(TILE_DNGN_LAVA)+tile]=2;
+ tile_prio[simple_iso_tile(TILE_DNGN_SHALLOW_WATER)+tile]=2;
+ tile_prio[simple_iso_tile(TILE_DNGN_DEEP_WATER)+tile]=3;
+ }
+
+}
+
+void clear_tcache(){
+ int i, k, h;
+
+ for(k=0;k<tcache_kind;k++)
+ {
+ tile_cache *tc = tcache[k];
+
+ // Decompose pointer string tcache[k] into tc_hash segments
+ for (h=0; h<tc_hash;h++)
+ {
+ int i_start = (max_tcache*h)/tc_hash;
+ int i_end = (max_tcache*(h+1))/tc_hash -1;
+ tcache_head[k*tc_hash + h] = i_start;
+
+ for(i=i_start;i<=i_end;i++)
+ {
+ tc[i].id[3] = tc[i].id[2] =
+ tc[i].id[1] = tc[i].id[0] = 0;
+ tc[i].idx = i;
+ if (i==i_start) tc[i].prev = NULL;
+ else tc[i].prev = &tc[i-1];
+ if (i==i_end) tc[i].next = NULL;
+ else tc[i].next = &tc[i+1];
+ }
+ }
+ }
+}
+
+void init_tcache(){
+ int k;
+
+ clear_tcache();
+
+ tcache_image = (img_type *)malloc(sizeof(img_type)*tcache_kind);
+
+ for(k=0;k<tcache_kind;k++)
+ {
+ int wx = tcache_wx_normal[k];
+ int wy = tcache_wy_normal[k];
+ tcache_image[k] = ImgCreateSimple(wx, max_tcache*wy);
+ }
+
+}
+
+// Move a cache to the top of pointer string
+// to shorten the search time
+void lift_tcache(int ix, int kind, int hash){
+ int kind_n_hash = kind * tc_hash + hash;
+ int head_old=tcache_head[kind_n_hash];
+ tile_cache *tc = tcache[kind];
+ tile_cache *p = tc[ix].prev;
+ tile_cache *n = tc[ix].next;
+
+ ASSERT(ix<max_tcache);
+ ASSERT(head_old<max_tcache);
+ ASSERT(kind<tcache_kind);
+ ASSERT(hash<tc_hash);
+
+ if(ix == head_old) return;
+ if(p!=NULL) p->next = n;
+ if(n!=NULL) n->prev = p;
+
+ tcache_head[kind_n_hash] = ix;
+ tc[head_old].prev = &tc[ix];
+ tc[ix].next = &tc[head_old];
+}
+
+// Find cached image of fg+bg
+// If not found, compose and cache it
+static int tcache_find_id_normal(int kind, int *fg, int *bg, int *is_new)
+{
+ unsigned int id[4];
+ int i;
+ int hash = 0; // Don't use hash
+ int kind_n_hash = kind*tc_hash + hash;
+ int nlayer = tcache_nlayer_normal[kind];
+ tile_cache *tc = tcache[kind];
+ tile_cache *tc0 = &tc[tcache_head[kind_n_hash]];
+#if DEBUG
+ int search_count =0;
+#endif
+
+ *is_new=0;
+
+ for(i=0;i<nlayer;i++) id[i]= (fg[i]<<16)+bg[i]+1;
+
+ while(1){
+ tile_cache *next = tc0->next;
+
+ if(tc0->id[0] == id[0]) break;
+
+ if(tc0->id[0]==0 || next == NULL)
+ {
+ //end of used cache
+ *is_new = 1;
+ tcache_compose_normal(tc0->idx, fg, bg);
+ for(i=0;i<nlayer;i++) tc0->id[i] = id[i];
+ break;
+ }
+ tc0 = next;
+#if DEBUG
+ search_count++;
+#endif
+ }
+ lift_tcache(tc0->idx, kind, hash);
+
+#if DEBUG
+//DEBUGLOG("%d\n",search_count);
+#endif
+
+ return tc0->idx;
+}
+
+
+/*** overlay a tile onto an exsisting image with transpalency operation */
+void tcache_overlay(img_type img, int idx,
+ int tile, int region, int *copy, char *mask)
+{
+
+ int x0, y0;
+ int sx= region_sx_normal[region];
+ int sy= region_sy_normal[region];
+ int wx= region_wx_normal[region];
+ int wy= region_wy_normal[region];
+ int ox=0;
+ int oy=0;
+ img_type src = TileImg;
+ int uy=wy;
+
+ tile &= TILE_FLAG_MASK;
+
+ x0 = (tile % TILE_PER_ROW)*TILE_X;
+ y0 = (tile / TILE_PER_ROW)*TILE_Y;
+
+ if (mask != NULL)
+ {
+ if(*copy ==2)
+ ImgCopyMaskedH(src, x0 + sx, y0 + sy, wx, wy,
+ img, ox, oy + idx*uy, mask);
+ else
+ ImgCopyMasked(src, x0 + sx, y0 + sy, wx, wy,
+ img, ox, oy + idx*uy, mask);
+ *copy = 0;
+ return;
+ }
+ // Hack: hilite rim color
+ else if(*copy ==2)
+ {
+ *copy=0;
+ ImgCopyH(src, x0 + sx, y0 + sy, wx, wy,
+ img, ox, oy + idx*uy, *copy);
+ return;
+ } else
+ {
+ ImgCopy(src, x0 + sx, y0 + sy, wx, wy,
+ img, ox, oy + idx*uy, *copy);
+ }
+ *copy = 0;
+}
+
+void tcache_overlay_player(img_type img, int dx, int dy,
+ int part, int idx, int ymax, int *copy)
+{
+ int xs, ys;
+ int tidx = tilep_parts_start[part];
+ int nx = tilep_parts_nx[part];
+ int ny = tilep_parts_ny[part];
+ int ox = tilep_parts_ox[part];
+ int oy = tilep_parts_oy[part];
+ int wx = TILE_X/nx;
+ int wy = TILE_Y/ny;
+
+ if(!idx)return;
+ idx--;
+
+ tidx += idx/(nx*ny);
+
+ if (oy+wy > ymax) wy -= oy + wy - ymax;
+ if (wy<=0) return;
+
+ xs = (tidx % TILEP_PER_ROW)*TILE_X;
+ ys = (tidx / TILEP_PER_ROW)*TILE_Y;
+
+ xs += (idx % nx)*(TILE_X/nx);
+ ys += ((idx/nx) % ny)*(TILE_Y/ny);
+
+ ImgCopy(PlayerImg, xs, ys, wx, wy,
+ img, dx+ox, dy+oy, *copy);
+
+ *copy = 0;
+}
+
+/** overlay a tile onto an exsisting image with transpalency operation */
+void register_tile_mask(int tile, int region, int *copy,
+ char *mask, bool smalltile)
+{
+ int x0, y0, x, y;
+ int sx= region_sx_normal[region];
+ int sy= region_sy_normal[region];
+ int wx= region_wx_normal[region];
+ int wy= region_wy_normal[region];
+ int ox=0;
+ int oy=0;
+ img_type src = TileImg;
+ int ux=wx;
+ int uy=wy;
+
+ tile &= TILE_FLAG_MASK;
+
+ x0 = (tile % TILE_PER_ROW)*TILE_X;
+ y0 = (tile / TILE_PER_ROW)*TILE_Y;
+
+ if (*copy!=0) memset(mask, 0, ux*uy);
+
+ if (*copy == 2)
+ {
+ if (smalltile)
+ {
+ ux = wx;
+ }
+ for(x=0;x<wx;x++){
+ for(y=0;y<wy;y++){
+ if(! ImgIsTransparentAt(src, x0+sx+x, y0+sy+y))
+ mask[(y+oy)*ux+(x+ox)]=1;
+ }}
+ }
+ else
+ {
+ for(x=0;x<wx;x+=2){
+ for(y=0;y<wy;y+=2){
+ if(! ImgIsTransparentAt(src, x0+sx+x, y0+sy+y))
+ mask[(y+oy)*ux+(x+ox)]=1;
+ }}
+ }
+ *copy = 0;
+
+}
+
+void tile_draw_grid(int kind, int xx, int yy){
+ int fg[4],bg[4],ix, ix_old, is_new;
+
+ if (xx < 0 || yy < 0 || xx >= tile_xmax || yy>= tile_ymax) return;
+ fg[0] = t1buf[xx+1][yy+1];
+ bg[0] = t2buf[xx+1][yy+1];
+
+ ix_old = screen_tcach_idx[kind][xx+yy*tile_xmax];
+
+ ix = tcache_find_id_normal(kind, fg, bg, &is_new);
+
+ screen_tcach_idx[kind][xx+yy*tile_xmax]=ix;
+ if(is_new || ix!=ix_old || force_redraw_tile)
+ {
+ int x_dest = tcache_ox_normal[kind]+xx* TILE_UX_NORMAL;
+ int y_dest = tcache_oy_normal[kind]+yy* TILE_UY_NORMAL;
+ int wx = tcache_wx_normal[kind];
+ int wy = tcache_wy_normal[kind];
+
+ ImgCopy(tcache_image[kind],
+ 0, ix*wy, wx, wy,
+ ScrBufImg, x_dest, y_dest, 1);
+ }
+}
+
+void update_single_grid(int x, int y)
+{
+ int sx, sy, wx, wy;
+
+ tile_draw_grid(TCACHE0_NORMAL, x, y);
+ sx = x*TILE_UX_NORMAL;
+ sy = y*TILE_UY_NORMAL;
+ wx = TILE_UX_NORMAL;
+ wy = TILE_UY_NORMAL;
+ region_tile->redraw(sx, sy, sx+wx-1, sy+wy-1);
+}
+
+
+// Discard cache containing specific tile
+void redraw_spx_tcache(int tile)
+{
+ int kind, idx, layer, redraw;
+ int fg[4], bg[4];
+ for(kind = 0; kind < tcache_kind; kind++)
+ {
+ int nlayer = tcache_nlayer_normal[kind];
+
+ for(idx = 0; idx < max_tcache; idx++)
+ {
+ redraw = 0;
+ for(layer = 0; layer < nlayer; layer++)
+ {
+ fg[layer] = (tcache[kind][idx].id[layer]-1)>>16;
+ bg[layer] = (tcache[kind][idx].id[layer]-1)&0xffff;
+ if((fg[layer]&TILE_FLAG_MASK) == tile) redraw = 1;
+ if((bg[layer]&TILE_FLAG_MASK) == tile) redraw = 1;
+ }
+ if (redraw)
+ {
+ tcache_compose_normal(idx, fg, bg);
+ }
+ }
+ }
+}
+
+void get_bbg(int bg, int *new_bg, int *bbg)
+{
+ int bg0 = bg & TILE_FLAG_MASK;
+ *bbg=simple_iso_tile(TILE_DNGN_FLOOR);
+ *new_bg= bg0;
+
+ if(bg0 == TILE_DNGN_UNSEEN ||
+ (bg0 >= TILE_DNGN_ROCK_WALL_OFS && bg0 < TILE_DNGN_WAX_WALL) ||
+ bg0 == 0)
+ *bbg = 0;
+ else
+ if( bg0 >= TILE_DNGN_FLOOR && bg0 <= TILE_DNGN_SHALLOW_WATER)
+ {
+ *bbg = bg;
+ *new_bg = 0;
+ }
+}
+
+int sink_mask_tile(int bg, int fg)
+{
+ int bg0 = bg & TILE_FLAG_MASK;
+
+ if (fg == 0 || (fg & TILE_FLAG_FLYING)!=0) return 0;
+/*
+ if ( bg0 == simple_iso_tile(TILE_DNGN_SHALLOW_WATER))
+ return TILE_MASK_SHALLOW_WATER;
+ if ( bg0 == simple_iso_tile(TILE_DNGN_DEEP_WATER))
+ return TILE_MASK_DEEP_WATER;
+ if ( bg0 >= simple_iso_tile(TILE_DNGN_LAVA) &&
+ bg0 <= simple_iso_tile(TILE_DNGN_LAVA)+3)
+ return TILE_MASK_LAVA;
+*/
+ if ( bg0 >= simple_iso_tile(TILE_DNGN_LAVA) &&
+ bg0 <= simple_iso_tile(TILE_DNGN_SHALLOW_WATER) + 3)
+ {
+ int result = TILE_SINK_MASK;//simple_iso_tile(TILE_SINK_MASK);
+ if ((fg & TILE_FLAG_MASK) >= TILE_NORMAL)
+ result = simple_iso_tile(TILE_SINK_MASK);
+ //if ((fg & TILE_FLAG_MASK) >= TILE_NORMAL) result++;
+ return result;
+ }
+
+ return 0;
+}
+
+//normal
+void tcache_compose_normal(int ix, int *fg, int *bg){
+ int bbg;
+ int new_bg;
+ int c=1;
+ int fg0=fg[0];
+ int bg0=bg[0];
+ int sink;
+ img_type tc_img = tcache_image[TCACHE0_NORMAL];
+
+ get_bbg(bg0, &new_bg, &bbg);
+
+ if(bbg) tcache_overlay(tc_img, ix, bbg, TREGION_0_NORMAL, &c, NULL);
+ if(new_bg) tcache_overlay(tc_img, ix, new_bg, TREGION_0_NORMAL, &c, NULL);
+
+ //Tile cursor
+ if(bg0&TILE_FLAG_CURSOR)
+ {
+ int type = ((bg0&TILE_FLAG_CURSOR) == TILE_FLAG_CURSOR1) ?
+ TILE_CURSOR : TILE_CURSOR2;
+
+ if ((bg0&TILE_FLAG_CURSOR) == TILE_FLAG_CURSOR3) type = TILE_CURSOR3;
+
+ tcache_overlay(tc_img, ix, type, TREGION_0_NORMAL, &c, NULL);
+
+ if (type != TILE_CURSOR3) c = 2;// Hilite
+ }
+
+ if (bg0 & TILE_FLAG_RAY)
+ tcache_overlay(tc_img, ix, TILE_RAY_MESH, TREGION_0_NORMAL, &c, NULL);
+
+ if(fg0)
+ {
+ sink = sink_mask_tile(bg0, fg0);
+ if (sink)
+ {
+ int flag=2;
+ register_tile_mask(sink, TREGION_0_NORMAL, &flag, sink_mask);
+ tcache_overlay(tc_img, ix, fg0, TREGION_0_NORMAL, &c, sink_mask);
+ }
+ else
+ tcache_overlay(tc_img, ix, fg0, TREGION_0_NORMAL, &c, NULL);
+ }
+
+ if (fg0 & TILE_FLAG_NET)
+ tcache_overlay(tc_img, ix, TILE_TRAP_NET, TREGION_0_NORMAL, &c, NULL);
+
+ if(fg0 & TILE_FLAG_S_UNDER)
+ tcache_overlay(tc_img, ix, TILE_SOMETHING_UNDER,
+ TREGION_0_NORMAL, &c, NULL);
+
+ //Pet mark
+ if((fg0&TILE_FLAG_MAY_STAB) == TILE_FLAG_PET)
+ tcache_overlay(tc_img, ix, TILE_HEART, TREGION_0_NORMAL, &c, NULL);
+
+ if((fg0&TILE_FLAG_MAY_STAB) == TILE_FLAG_STAB)
+ tcache_overlay(tc_img, ix, TILE_STAB_BRAND, TREGION_0_NORMAL, &c, NULL);
+ else if((fg0&TILE_FLAG_MAY_STAB) == TILE_FLAG_MAY_STAB)
+ tcache_overlay(tc_img, ix, TILE_MAY_STAB_BRAND, TREGION_0_NORMAL, &c,
+ NULL);
+
+ if(bg0&TILE_FLAG_UNSEEN)
+ tcache_overlay(tc_img, ix, TILE_MESH, TREGION_0_NORMAL, &c, NULL);
+
+ if(bg0&TILE_FLAG_MM_UNSEEN)
+ tcache_overlay(tc_img, ix, TILE_MAGIC_MAP_MESH, TREGION_0_NORMAL, &c, NULL);
+}
+
+// Tile cursor
+int TileDrawCursor(int x, int y, int cflag)
+{
+ int oldc = t2buf[x+1][y+1] & TILE_FLAG_CURSOR;
+ t2buf[x+1][y+1] &= ~ TILE_FLAG_CURSOR;
+ t2buf[x+1][y+1] |= cflag;
+ update_single_grid(x, y);
+ return oldc;
+}
+
+void TileDrawBolt(int x, int y, int fg){
+
+ t1buf[x+1][y+1]=fg | TILE_FLAG_FLYING;
+ update_single_grid(x, y);
+}
+
+void StoreDungeonView(short unsigned int *tileb)
+{
+ int x, y;
+ int count = 0;
+
+ if (tileb == NULL)
+ tileb = tb_bk;
+
+ for(y=0;y<tile_dngn_y;y++){
+ for(x=0;x<tile_dngn_x;x++){
+ tileb[count] = t1buf[x+1][y+1];
+ count ++;
+ tileb[count] = t2buf[x+1][y+1];
+ count ++;
+ }}
+}
+
+void LoadDungeonView(short unsigned int *tileb)
+{
+ int x, y;
+ int count = 0;
+
+ if (tileb == NULL)
+ tileb = tb_bk;
+
+ for(y=0;y<tile_dngn_y;y++)
+ {
+ for(x=0;x<tile_dngn_x;x++)
+ {
+ if(tileb[count]==tileb[count+1])
+ tileb[count]=0;
+ t1buf[x+1][y+1] = tileb[count];
+ count ++;
+ t2buf[x+1][y+1] = tileb[count];
+ count ++;
+ }
+ }
+}
+
+//Draw the tile screen once and for all
+void TileDrawDungeon(short unsigned int *tileb)
+{
+ int x, y, kind;
+ if(!TileImg)return;
+
+ LoadDungeonView(tileb);
+
+ extern int tile_cursor_x;
+ tile_cursor_x = -1;
+
+ for(kind=0;kind<tcache_kind;kind++)
+ {
+ for(x=0;x<tile_xmax;x++)
+ {
+ for(y=0;y<tile_ymax;y++)
+ {
+ tile_draw_grid(kind, x, y);
+ }
+ }
+ }
+
+ force_redraw_tile = false;
+ TileDrawDungeonAux();
+ region_tile->redraw();
+}
+
+void TileDrawFarDungeon(int cx, int cy)
+{
+ short unsigned int tb[TILE_DAT_YMAX*TILE_DAT_XMAX*2];
+
+ int count = 0;
+ for(int y=0; y<tile_dngn_y; y++)
+ {
+ for(int x=0; x<tile_dngn_x; x++)
+ {
+ int fg;
+ int bg;
+
+ const coord_def gc(
+ cx + x - tile_dngn_x/2,
+ cy + y - tile_dngn_y/2 );
+ const coord_def ep = view2show(grid2view(gc));
+
+ // mini "viewwindow" routine
+ if (!map_bounds(gc))
+ {
+ fg = 0;
+ bg = TILE_DNGN_UNSEEN;
+ }
+ else if (!crawl_view.in_grid_los(gc) || !env.show(ep))
+ {
+ fg = env.tile_bk_fg[gc.x][gc.y];
+ bg = env.tile_bk_bg[gc.x][gc.y];
+ if (bg == 0)
+ bg |= TILE_DNGN_UNSEEN;
+ bg |= tile_unseen_flag(gc);
+ }
+ else
+ {
+ fg = env.tile_fg[ep.x-1][ep.y-1];
+ bg = env.tile_bg[ep.x-1][ep.y-1];
+ }
+
+ if (gc.x == cx && gc.y == cy)
+ bg |= TILE_FLAG_CURSOR1;
+
+ tb[count++]=fg;
+ tb[count++]=bg;
+ }
+ }
+ tile_finish_dngn(tb, cx, cy);
+ TileDrawDungeon(tb);
+ region_tile->redraw();
+}
+
+void TileDrawMap(int gx, int gy)
+{
+ TileDrawFarDungeon(gx, gy);
+}
+
+// Load optional wall tile
+static void TileLoadWallAux(int idx_src, int idx_dst, img_type wall)
+{
+ int tile_per_row = ImgWidth(wall) / TILE_X;
+
+ int sx = idx_src % tile_per_row;
+ int sy = idx_src / tile_per_row;
+
+ sx *= TILE_X;
+ sy *= TILE_Y;
+
+ ImgCopyToTileImg(idx_dst, wall, sx, sy, 1);
+}
+
+void WallIdx(int &wall, int &floor, int &special)
+{
+ special = -1;
+
+ if (you.level_type == LEVEL_PANDEMONIUM)
+ {
+ switch (mcolour[env.mons_alloc[8]])
+ {
+ case BLUE:
+ case LIGHTBLUE:
+ wall = IDX_WALL_ZOT_BLUE;
+ floor = IDX_FLOOR_ZOT_BLUE;
+ return;
+
+ case RED:
+ case LIGHTRED:
+ wall = IDX_WALL_ZOT_RED;
+ floor = IDX_FLOOR_ZOT_RED;
+ return;
+
+ case MAGENTA:
+ case LIGHTMAGENTA:
+ wall = IDX_WALL_ZOT_MAGENTA;
+ floor = IDX_FLOOR_ZOT_MAGENTA;
+ return;
+
+ case GREEN:
+ case LIGHTGREEN:
+ wall = IDX_WALL_ZOT_GREEN;
+ floor = IDX_FLOOR_ZOT_GREEN;
+ return;
+
+ case CYAN:
+ case LIGHTCYAN:
+ wall = IDX_WALL_ZOT_CYAN;
+ floor = IDX_FLOOR_ZOT_CYAN;
+ return;
+
+ case BROWN:
+ case YELLOW:
+ wall = IDX_WALL_ZOT_YELLOW;
+ floor = IDX_FLOOR_ZOT_YELLOW;
+ return;
+
+ case BLACK:
+ case WHITE:
+ default:
+ wall = IDX_WALL_ZOT_GRAY;
+ floor = IDX_FLOOR_ZOT_GRAY;
+ return;
+ }
+ }
+ else if (you.level_type == LEVEL_ABYSS)
+ {
+ wall = IDX_WALL_UNDEAD;
+ floor = IDX_FLOOR_UNDEAD;
+ return;
+ }
+ else if (you.level_type == LEVEL_LABYRINTH)
+ {
+ wall = IDX_WALL_UNDEAD;
+ floor = IDX_FLOOR_UNDEAD;
+ return;
+ }
+ else if (you.level_type == LEVEL_PORTAL_VAULT)
+ {
+ if (you.level_type_name == "bazaar")
+ {
+ // Bazaar tiles here lean towards grass and dirt to emphasize
+ // both the non-hostile and other-wordly aspects of the
+ // portal vaults (i.e. they aren't in the dungeon, necessarily.)
+ int colour = env.floor_colour;
+ switch (colour)
+ {
+ case BLUE:
+ wall = IDX_WALL_BAZAAR_GRAY;
+ floor = IDX_FLOOR_BAZAAR_GRASS;
+ special = IDX_FLOOR_BAZAAR_GRASS1_SPECIAL;
+ return;
+
+ case RED:
+ // Reds often have lava, which looks ridiculous
+ // next to grass or dirt, so we'll use existing
+ // floor and wall tiles here.
+ wall = IDX_WALL_ZOT_RED;
+ floor = IDX_FLOOR_VAULT;
+ special = IDX_FLOOR_BAZAAR_VAULT_SPECIAL;
+ return;
+
+ case LIGHTBLUE:
+ wall = IDX_WALL_HIVE;
+ floor = IDX_FLOOR_BAZAAR_GRASS;
+ special = IDX_FLOOR_BAZAAR_GRASS2_SPECIAL;
+ return;
+
+ case GREEN:
+ wall = IDX_WALL_BAZAAR_STONE;
+ floor = IDX_FLOOR_BAZAAR_GRASS;
+ special = IDX_FLOOR_BAZAAR_GRASS1_SPECIAL;
+ return;
+
+ case MAGENTA:
+ wall = IDX_WALL_BAZAAR_STONE;
+ floor = IDX_FLOOR_BAZAAR_DIRT;
+ special = IDX_FLOOR_BAZAAR_DIRT_SPECIAL;
+ return;
+
+ default:
+ wall = IDX_WALL_VAULT;
+ floor = IDX_FLOOR_VAULT;
+ special = IDX_FLOOR_BAZAAR_VAULT_SPECIAL;
+ return;
+ }
+ }
+ }
+
+ switch (you.where_are_you)
+ {
+ case BRANCH_MAIN_DUNGEON:
+ wall = IDX_WALL_NORMAL;
+ floor = IDX_FLOOR_NORMAL;
+ return;
+
+ case BRANCH_HIVE:
+ wall = IDX_WALL_HIVE;
+ floor = IDX_FLOOR_HIVE;
+ return;
+
+ case BRANCH_VAULTS:
+ wall = IDX_WALL_VAULT;
+ floor = IDX_FLOOR_VAULT;
+ return;
+
+ case BRANCH_ELVEN_HALLS:
+ case BRANCH_HALL_OF_BLADES:
+ case BRANCH_ECUMENICAL_TEMPLE:
+ wall = IDX_WALL_HALL;
+ floor = IDX_FLOOR_HALL;
+ return;
+
+ case BRANCH_TARTARUS:
+ case BRANCH_CRYPT:
+ case BRANCH_VESTIBULE_OF_HELL:
+ wall = IDX_WALL_UNDEAD;
+ floor = IDX_FLOOR_UNDEAD;
+ return;
+
+ case BRANCH_TOMB:
+ wall = IDX_WALL_TOMB;
+ floor = IDX_FLOOR_TOMB;
+ return;
+
+ case BRANCH_DIS:
+ wall = IDX_WALL_ZOT_CYAN;
+ floor = IDX_FLOOR_ZOT_CYAN;
+ return;
+
+ case BRANCH_GEHENNA:
+ case BRANCH_INFERNO:
+ case BRANCH_THE_PIT:
+ wall = IDX_WALL_ZOT_RED;
+ floor = IDX_FLOOR_ZOT_RED;
+ return;
+
+ case BRANCH_COCYTUS:
+ wall = IDX_WALL_ICE;
+ floor = IDX_FLOOR_ICE;
+ return;
+
+ case BRANCH_ORCISH_MINES:
+ wall = IDX_WALL_ORC;
+ floor = IDX_FLOOR_ORC;
+ return;
+
+ case BRANCH_LAIR:
+ wall = IDX_WALL_LAIR;
+ floor = IDX_FLOOR_LAIR;
+ return;
+
+ case BRANCH_SLIME_PITS:
+ wall = IDX_WALL_SLIME;
+ floor = IDX_FLOOR_SLIME;
+ return;
+
+ case BRANCH_SNAKE_PIT:
+ wall = IDX_WALL_SNAKE;
+ floor = IDX_FLOOR_SNAKE;
+ return;
+
+ case BRANCH_SWAMP:
+ wall = IDX_WALL_SWAMP;
+ floor = IDX_FLOOR_SWAMP;
+ return;
+
+ case BRANCH_SHOALS:
+ wall = IDX_WALL_SWAMP;
+ floor = IDX_FLOOR_SWAMP;
+ return;
+
+ case BRANCH_CAVERNS:
+ wall = IDX_WALL_ORC;
+ floor = IDX_FLOOR_ORC;
+ return;
+
+ case BRANCH_HALL_OF_ZOT:
+ if (you.your_level - you.branch_stairs[7] <= 1)
+ {
+ wall = IDX_WALL_ZOT_YELLOW;
+ floor = IDX_FLOOR_ZOT_YELLOW;
+ return;
+ }
+
+ switch (you.your_level - you.branch_stairs[7])
+ {
+ case 2:
+ wall = IDX_WALL_ZOT_GREEN;
+ floor = IDX_FLOOR_ZOT_GREEN;
+ return;
+ case 3:
+ wall = IDX_WALL_ZOT_CYAN;
+ floor = IDX_WALL_ZOT_CYAN;
+ return;
+ case 4:
+ wall = IDX_WALL_ZOT_BLUE;
+ floor = IDX_FLOOR_ZOT_GREEN;
+ return;
+ case 5:
+ default:
+ wall = IDX_WALL_ZOT_MAGENTA;
+ floor = IDX_FLOOR_ZOT_MAGENTA;
+ return;
+ }
+
+ case NUM_BRANCHES:
+ break;
+
+ // NOTE: there is no default case in this switch statement so that
+ // the compiler will issue a warning when new branches are created.
+ }
+
+ wall = IDX_WALL_NORMAL;
+ floor = IDX_FLOOR_NORMAL;
+}
+void TileLoadWall(bool wizard)
+{
+ clear_tcache();
+ force_redraw_tile = true;
+
+ int wall_idx;
+ int floor_idx;
+ int special_idx;
+ WallIdx(wall_idx, floor_idx, special_idx);
+
+ // Number of flavors are generated automatically...
+
+ floor_tile_idx = TILE_DNGN_FLOOR;
+ floor_flavors = tile_W2D_count[floor_idx];
+ int offset = floor_tile_idx;
+ for (int i = 0; i < floor_flavors; i++)
+ {
+ int idx_src = tile_W2D_start[floor_idx] + i;
+ int idx_dst = offset++;
+ TileLoadWallAux(idx_src, idx_dst, WallImg);
+ }
+
+ wall_tile_idx = offset;
+ wall_flavors = tile_W2D_count[wall_idx];
+ for (int i = 0; i < wall_flavors; i++)
+ {
+ int idx_src = tile_W2D_start[wall_idx] + i;
+ int idx_dst = offset++;
+ TileLoadWallAux(idx_src, idx_dst, WallImg);
+ }
+
+ if (special_idx != -1)
+ {
+ special_tile_idx = offset;
+ special_flavors = tile_W2D_count[special_idx];
+ for (int i = 0; i < special_flavors; i++)
+ {
+ int idx_src = tile_W2D_start[special_idx] + i;
+ int idx_dst = offset++;
+ TileLoadWallAux(idx_src, idx_dst, WallImg);
+ }
+ }
+ else
+ {
+ special_flavors = 0;
+ }
+}
+
+#define DOLLS_MAX 11
+#define PARTS_DISP_MAX 11
+#define PARTS_ITEMS 12
+#define TILEP_SELECT_DOLL 20
+
+typedef struct dolls_data
+{
+ int parts[TILEP_PARTS_TOTAL];
+} dolls_data;
+static dolls_data current_doll;
+static int current_gender = 0;
+static int current_parts[TILEP_PARTS_TOTAL];
+
+static bool draw_doll(img_type img, dolls_data *doll, bool force_redraw = false, bool your_doll = true)
+{
+ const int p_order[TILEP_PARTS_TOTAL]=
+ {
+ TILEP_PART_SHADOW,
+ TILEP_PART_DRCWING,
+ TILEP_PART_CLOAK,
+ TILEP_PART_BASE,
+ TILEP_PART_BOOTS,
+ TILEP_PART_LEG,
+ TILEP_PART_BODY,
+ TILEP_PART_ARM,
+ TILEP_PART_HAND1,
+ TILEP_PART_HAND2,
+ TILEP_PART_HAIR,
+ TILEP_PART_BEARD,
+ TILEP_PART_HELM,
+ TILEP_PART_DRCHEAD
+ };
+ int p_order2[TILEP_PARTS_TOTAL];
+
+ int i;
+ int flags[TILEP_PARTS_TOTAL];
+ int parts2[TILEP_PARTS_TOTAL];
+ int *parts = doll->parts;
+ int c=1;
+ bool changed = false;
+
+ int default_parts[TILEP_PARTS_TOTAL];
+ memset(default_parts, 0, sizeof(default_parts));
+
+ if (your_doll)
+ {
+ tilep_race_default(you.species, parts[TILEP_PART_BASE] % 2,
+ you.experience_level, default_parts);
+
+ if (default_parts[TILEP_PART_BASE] != parts[TILEP_PART_BASE])
+ force_redraw = true;
+ parts[TILEP_PART_BASE] = default_parts[TILEP_PART_BASE];
+
+ // TODO enne - make these configurable.
+ parts[TILEP_PART_DRCHEAD] = default_parts[TILEP_PART_DRCHEAD];
+ parts[TILEP_PART_DRCWING] = default_parts[TILEP_PART_DRCWING];
+ }
+
+ // convert TILEP_SHOW_EQUIP into real parts number
+ for(i = 0; i < TILEP_PARTS_TOTAL; i++)
+ {
+ parts2[i] = parts[i];
+ if (parts2[i] == TILEP_SHOW_EQUIP)
+ {
+ switch (i)
+ {
+ int item;
+ case TILEP_PART_HAND1:
+ item = you.equip[EQ_WEAPON];
+ if (you.attribute[ATTR_TRANSFORMATION] ==
+ TRAN_BLADE_HANDS)
+ {
+ parts2[i] = TILEP_HAND1_BLADEHAND;
+ }
+ else if (item == -1)
+ {
+ parts2[i] = 0;
+ }
+ else
+ {
+ parts2[i] = tilep_equ_weapon(you.inv[item]);
+ }
+ break;
+
+ case TILEP_PART_HAND2:
+ item = you.equip[EQ_SHIELD];
+ if (you.attribute[ATTR_TRANSFORMATION] ==
+ TRAN_BLADE_HANDS)
+ {
+ parts2[i] = TILEP_HAND2_BLADEHAND;
+ }
+ else if (item == -1)
+ {
+ parts2[i] = 0;
+ }
+ else
+ {
+ parts2[i] = tilep_equ_shield(you.inv[item]);
+ }
+ break;
+
+ case TILEP_PART_BODY:
+ item = you.equip[EQ_BODY_ARMOUR];
+ if (item == -1)
+ parts2[i] = 0;
+ else
+ parts2[i] = tilep_equ_armour(you.inv[item]);
+ break;
+
+ case TILEP_PART_CLOAK:
+ item = you.equip[EQ_CLOAK];
+ if (item == -1)
+ parts2[i] = 0;
+ else
+ parts2[i] = tilep_equ_cloak(you.inv[item]);
+ break;
+
+ case TILEP_PART_HELM:
+ item = you.equip[EQ_HELMET];
+ if (item == -1)
+ parts2[i] = 0;
+ else
+ parts2[i] = tilep_equ_helm(you.inv[item]);
+
+ if (parts2[i] == 0 && you.mutation[MUT_HORNS] > 0)
+ {
+ switch (you.mutation[MUT_HORNS])
+ {
+ case 1:
+ parts2[i] = TILEP_HELM_HORNS1;
+ break;
+ case 2:
+ parts2[i] = TILEP_HELM_HORNS2;
+ break;
+ case 3:
+ parts2[i] = TILEP_HELM_HORNS3;
+ break;
+ }
+ }
+
+ break;
+
+ case TILEP_PART_BOOTS:
+ item = you.equip[EQ_BOOTS];
+ if (item == -1)
+ parts2[i] = 0;
+ else
+ parts2[i] = tilep_equ_boots(you.inv[item]);
+
+ if (parts2[i] == 0 && you.mutation[MUT_HOOVES])
+ parts2[i] = TILEP_BOOTS_HOOVES;
+ break;
+
+ case TILEP_PART_ARM:
+ item = you.equip[EQ_GLOVES];
+ if (item == -1)
+ parts2[i] = 0;
+ else
+ parts2[i] = tilep_equ_gloves(you.inv[item]);
+
+ // There is player_has_claws() but it is not equivalent.
+ // Claws appear if they're big enough to not wear gloves
+ // or on races that have claws.
+ if (parts2[i] == 0 && (you.mutation[MUT_CLAWS] >= 3 ||
+ you.species == SP_TROLL || you.species == SP_GHOUL))
+ {
+ parts2[i] = TILEP_ARM_CLAWS;
+ }
+ break;
+
+ case TILEP_PART_HAIR:
+ case TILEP_PART_BEARD:
+ parts2[i] = default_parts[i];
+ break;
+
+ case TILEP_PART_LEG:
+ default:
+ parts2[i] = 0;
+ }
+ }
+
+ if (parts2[i] != current_parts[i])
+ changed = true;
+ current_parts[i] = parts2[i];
+ }
+
+
+ if (!changed && !force_redraw)
+ {
+ return false;
+ }
+
+ tilep_calc_flags(parts2, flags);
+ ImgClear(img);
+
+ // Hack: change overlay order of boots/skirts
+ for(i = 0; i < TILEP_PARTS_TOTAL; i++)
+ p_order2[i]=p_order[i];
+
+ // swap boot and leg-armor
+ if (parts2[TILEP_PART_LEG] < TILEP_LEG_SKIRT_OFS)
+ {
+ p_order2[5] = TILEP_PART_LEG;
+ p_order2[4] = TILEP_PART_BOOTS;
+ }
+
+ for(i = 0; i < TILEP_PARTS_TOTAL; i++)
+ {
+ int p = p_order2[i];
+ int ymax = TILE_Y;
+ if (flags[p]==TILEP_FLAG_CUT_CENTAUR) ymax=18;
+ if (flags[p]==TILEP_FLAG_CUT_NAGA) ymax=18;
+
+ if (parts2[p] && p == TILEP_PART_BOOTS &&
+ (parts2[p] == TILEP_BOOTS_NAGA_BARDING ||
+ parts2[p] == TILEP_BOOTS_CENTAUR_BARDING))
+ {
+ // Special case for barding. They should be in "boots" but because
+ // they're double-wide, they're stored in a different part. We just
+ // intercept it here before drawing.
+ char tile = parts2[p] == TILEP_BOOTS_NAGA_BARDING ?
+ TILEP_SHADOW_NAGA_BARDING : TILEP_SHADOW_CENTAUR_BARDING;
+ tcache_overlay_player(img, 0, 0, TILEP_PART_SHADOW, tile,
+ TILE_Y, &c);
+ }
+ else if(parts2[p] && flags[p])
+ {
+ tcache_overlay_player(img, 0, 0, p, parts2[p], ymax, &c);
+ }
+ }
+ return true;
+}
+
+static void load_doll_data(const char *fn, dolls_data *dolls, int max,
+ int *mode, int *cur)
+{
+ char fbuf[1024];
+ int cur0 = 0;
+ int mode0 = TILEP_M_DEFAULT;
+ FILE *fp = NULL;
+
+ std::string dollsTxtString = datafile_path(fn, false, true);
+ const char *dollsTxt = dollsTxtString.c_str()[0] == 0 ?
+ "dolls.txt" : dollsTxtString.c_str();
+
+ if ( (fp = fopen(dollsTxt, "r")) == NULL )
+ {
+ // File doesn't exist. By default, use show equipment defaults.
+ // This will be saved out (if possible.)
+
+ for (int i = 0; i < max; i++)
+ {
+ // Don't take gender too seriously. -- Enne
+ tilep_race_default(you.species, coinflip() ? 1 : 0,
+ you.experience_level, dolls[i].parts);
+
+ dolls[i].parts[TILEP_PART_SHADOW] = 1;
+ dolls[i].parts[TILEP_PART_CLOAK] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_BOOTS] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_LEG] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_BODY] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_ARM] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_HAND1] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_HAND2] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_HAIR] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_BEARD] = TILEP_SHOW_EQUIP;
+ dolls[i].parts[TILEP_PART_HELM] = TILEP_SHOW_EQUIP;
+ }
+
+ }
+ else
+ {
+ memset(fbuf, 0, sizeof(fbuf));
+ if (fscanf(fp, "%s", fbuf) != EOF)
+ {
+ if (strcmp(fbuf, "MODE=LOADING") == 0)
+ mode0 = TILEP_M_LOADING;
+ }
+ if (fscanf(fp, "%s", fbuf) != EOF)
+ {
+ if (strncmp(fbuf, "NUM=", 4) == 0)
+ {
+ sscanf(fbuf, "NUM=%d",&cur0);
+ if ( (cur0 < 0)||(cur0 > 10) )
+ cur0 = 0;
+ }
+ }
+ if (max == 1)
+ {
+ for(int j = 0; j <= cur0; j++)
+ {
+ if (fscanf(fp, "%s", fbuf) != EOF)
+ {
+ tilep_scan_parts(fbuf, dolls[0].parts);
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ for(int j = 0; j < max; j++)
+ {
+ if (fscanf(fp, "%s", fbuf) != EOF)
+ {
+ tilep_scan_parts(fbuf, dolls[j].parts);
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ fclose(fp);
+ }
+ *mode = mode0;
+ *cur = cur0;
+
+ current_gender = dolls[cur0].parts[TILEP_PART_BASE] % 2;
+}
+
+void TilePlayerEdit()
+{
+ const int p_lines[PARTS_ITEMS]=
+ {
+ TILEP_SELECT_DOLL,
+ TILEP_PART_BASE,
+ TILEP_PART_HELM,
+ TILEP_PART_HAIR,
+ TILEP_PART_BEARD,
+ TILEP_PART_HAND1,
+ TILEP_PART_HAND2,
+ TILEP_PART_ARM,
+ TILEP_PART_BODY,
+ TILEP_PART_LEG,
+ TILEP_PART_BOOTS,
+ TILEP_PART_CLOAK
+ };
+
+ const char *p_names[PARTS_ITEMS]=
+ {
+ " Index:",
+ " Gendr:",
+ " Helm :",
+ " Hair :",
+ " Beard:",
+ " Weapn:",
+ " Shild:",
+ " Glove:",
+ " Armor:",
+ " Legs :",
+ " Boots:",
+ " Cloak:"
+ };
+
+ const char *gender_name[2] ={
+ "Male",
+ "Fem "
+ };
+
+#define display_parts_idx(part) \
+{ \
+ gotoxy(10 , part + 1, GOTO_STAT); \
+ tilep_part_to_str(dolls[cur_doll].parts[ p_lines[part] ], ibuf);\
+ cprintf(ibuf);\
+}
+
+ dolls_data dolls[DOLLS_MAX], undo_dolls[DOLLS_MAX];
+ int copy_doll[TILEP_PARTS_TOTAL];
+
+ //int parts[TILEP_PARTS_TOTAL];
+ int i, j, k, x, y, kin, done = 0;
+ int cur_doll = 0;
+ int pre_part = 0;
+ int cur_part = 0;
+ int mode = TILEP_M_DEFAULT;
+ int d = 0;
+ FILE *fp;
+ char fbuf[80], ibuf[8];
+ int tile_str, sx, sy;
+
+ img_type PartsImg = ImgCreateSimple(TILE_X * PARTS_DISP_MAX, TILE_Y * 1);
+
+ img_type DollsListImg = ImgCreateSimple( TILE_X * DOLLS_MAX, TILE_Y * 1);
+
+ ImgClear(ScrBufImg);
+
+ memset( copy_doll, 0, sizeof(dolls_data) );
+ tilep_race_default(you.species, current_gender,
+ you.experience_level, copy_doll);
+
+ for(j = 0; j < DOLLS_MAX; j++)
+ {
+ memset( dolls[j].parts, 0, sizeof(dolls_data) );
+ memset( undo_dolls[j].parts, 0, sizeof(dolls_data) );
+ tilep_race_default(you.species, current_gender, you.experience_level,
+ dolls[j].parts);
+ tilep_race_default(you.species, current_gender, you.experience_level,
+ undo_dolls[j].parts);
+ }
+
+ // load settings
+ load_doll_data("dolls.txt", dolls, DOLLS_MAX, &mode, &cur_doll);
+ for(j = 0; j < DOLLS_MAX; j++)
+ {
+ undo_dolls[j] = dolls[j];
+ }
+ clrscr();
+ gotoxy(1,1, GOTO_MSG);
+ mpr("Select Part : [j][k]or[up][down]");
+ mpr("Change Part/Page : [h][l]or[left][right]/[H][L]");
+ mpr("Class-Default : [CTRL]+[D]");
+ mpr("Toggle Equipment Mode : [*]");
+ mpr("Take off/Take off All : [t]/[CTRL]+[T]");
+ mpr("Copy/Paste/Undo : [CTRL]+[C]/[CTRL]+[V]/[CTRL]+[Z]");
+ mpr("Randomize : [CTRL]+[R]");
+
+ gotoxy(1, 8, GOTO_MSG);
+ cprintf("Toggle Startup mode : [m] (Current mode:%s)",
+ ( (mode == TILEP_M_LOADING) ? "Load User's Settings":"Class Default" ));
+ for (j=0; j < PARTS_ITEMS; j++)
+ {
+ gotoxy(1, 1+j, GOTO_STAT);
+ cprintf(p_names[j]);
+ }
+
+#define PARTS_Y (TILE_Y*11)
+
+// draw strings "Dolls/Parts" into backbuffer
+ tile_str = TILE_TEXT_PARTS_E;
+ sx = (tile_str % TILE_PER_ROW)*TILE_X;
+ sy = (tile_str / TILE_PER_ROW)*TILE_Y;
+
+ ImgCopy(TileImg, sx, sy, TILE_X, TILE_Y/2,
+ ScrBufImg, (TILE_X * 3) - 8,(TILE_Y * 4) - 8-24, 0);
+ ImgCopy(TileImg, sx, sy+ TILE_Y/2, TILE_X, TILE_Y/2,
+ ScrBufImg, (TILE_X * 4) - 8,(TILE_Y * 4) - 8-24, 0);
+
+ tile_str = TILE_TEXT_DOLLS_E;
+ sx = (tile_str % TILE_PER_ROW)*TILE_X;
+ sy = (tile_str / TILE_PER_ROW)*TILE_Y;
+ ImgCopy(TileImg, sx, sy, TILE_X, TILE_Y/2,
+ ScrBufImg, (TILE_X * 3) - 8,PARTS_Y - 8 -24, 0);
+ ImgCopy(TileImg, sx, sy+ TILE_Y/2, TILE_X, TILE_Y/2,
+ ScrBufImg, (TILE_X * 4) - 8,PARTS_Y - 8 -24, 0);
+
+ ImgClear(DollsListImg);
+ for(j = 0; j < DOLLS_MAX; j++)
+ {
+ draw_doll(DollCacheImg, &dolls[j], true);
+ ImgCopy(DollCacheImg, 0, 0,
+ ImgWidth(DollCacheImg), ImgHeight(DollCacheImg),
+ DollsListImg, j * TILE_X, 0, 1);
+ }
+
+ done = 0;
+
+ while (!done)
+ {
+ static int inc = 1;
+ static int cur_inc = 1;
+
+ ImgClear(PartsImg);
+
+ region_tile->DrawPanel((TILE_X * 3) - 8, (TILE_Y * 4) - 8,
+ ImgWidth(PartsImg) + 16, ImgHeight(PartsImg) + 16);
+ region_tile->DrawPanel((TILE_X * 3) - 8, PARTS_Y - 8,
+ ImgWidth(DollsListImg) + 16, ImgHeight(DollsListImg) + 16);
+ region_tile->DrawPanel(8*TILE_X - 8, 8*TILE_Y - 8,
+ TILE_X + 16, TILE_Y + 16);
+
+ if (cur_part == 0)
+ {
+ // now selecting doll index
+ gotoxy(10 , 1, GOTO_STAT);
+ cprintf("%02d", cur_doll);
+ gotoxy(10 , 2, GOTO_STAT);
+ current_gender = dolls[cur_doll].parts[TILEP_PART_BASE] % 2;
+ cprintf("%s", gender_name[ current_gender ]);
+
+ for (i = 2; i<PARTS_ITEMS; i++)
+ {
+ gotoxy(10 , i + 1, GOTO_STAT);
+ tilep_part_to_str(dolls[cur_doll].parts[ p_lines[i] ], ibuf);
+ cprintf("%s / %03d", ibuf, tilep_parts_total[ p_lines[i] ]);
+ }
+ }
+ else
+ {
+ for(i = 0; i < PARTS_DISP_MAX; i++)
+ {
+ int index;
+ if (dolls[cur_doll].parts[ p_lines[cur_part] ]
+ == TILEP_SHOW_EQUIP)
+ index = 0;
+ else
+ index = i + dolls[cur_doll].parts[ p_lines[cur_part] ]
+ - (PARTS_DISP_MAX / 2);
+ if (index < 0)
+ index = index + tilep_parts_total[ p_lines[cur_part] ] + 1;
+ if (index > tilep_parts_total[ p_lines[cur_part] ])
+ index = index - tilep_parts_total[ p_lines[cur_part] ] - 1;
+ tcache_overlay_player(PartsImg, i * TILE_X, 0,
+ p_lines[cur_part], index, TILE_Y, &d);
+ }
+ ImgCopy(PartsImg, 0, 0, ImgWidth(PartsImg), ImgHeight(PartsImg),
+ ScrBufImg, 3 * TILE_X, 4 * TILE_Y, 0);
+ ImgCopyFromTileImg( TILE_CURSOR, ScrBufImg,
+ (3 + PARTS_DISP_MAX / 2) * TILE_X, 4 * TILE_Y, 0);
+ }
+ draw_doll(DollCacheImg, &dolls[cur_doll], true);
+
+ ImgCopy(DollCacheImg, 0, 0, TILE_X, TILE_Y,
+ DollsListImg, cur_doll*TILE_X, 0, 1);
+
+ ImgCopyToTileImg(TILE_PLAYER, DollCacheImg, 0, 0, 1);
+ ImgCopyFromTileImg(TILE_PLAYER, ScrBufImg, 8*TILE_X, 8*TILE_Y, 0);
+ ImgCopy(DollsListImg, 0, 0,
+ ImgWidth(DollsListImg), ImgHeight(DollsListImg),
+ ScrBufImg, 3 * TILE_X, PARTS_Y, 0);
+ ImgCopyFromTileImg( TILE_CURSOR, ScrBufImg,
+ (3 + cur_doll) * TILE_X, PARTS_Y, 0);
+ region_tile->redraw();
+
+ gotoxy(10 , cur_part + 1, GOTO_STAT);
+
+ if (cur_part == 1)
+ {
+ current_gender = dolls[cur_doll].parts[p_lines[cur_part] ]%2;
+ cprintf("%s", gender_name[ current_gender ]);
+ }
+ else if (cur_part != 0)
+ {
+ tilep_part_to_str(dolls[cur_doll].parts[ p_lines[cur_part] ], ibuf);
+ cprintf("%s", ibuf);
+ }
+
+ gotoxy(1, pre_part + 1, GOTO_STAT);cprintf(" ");
+ gotoxy(1, cur_part + 1, GOTO_STAT);cprintf("->");
+ pre_part = cur_part;
+
+ /* Get a key */
+ kin = getch();
+
+ inc = cur_inc = 0;
+
+ /* Analyze the key */
+ switch (kin)
+ {
+ case 0x1B: //ESC
+ done = 1;
+ break;
+
+ case 'h':
+ inc = -1;
+ break;
+ case 'l':
+ inc = +1;
+ break;
+ case 'H':
+ inc = -PARTS_DISP_MAX;
+ break;
+ case 'L':
+ inc = +PARTS_DISP_MAX;
+ break;
+ case 'j':
+ {
+ if (cur_part < (PARTS_ITEMS-1) )
+ cur_part += 1;
+ else
+ cur_part = 0;
+ break;
+ }
+ case 'k':
+ {
+ if (cur_part > 0)
+ cur_part -= 1;
+ else
+ cur_part = (PARTS_ITEMS-1);
+ break;
+ }
+ case 'm':
+ {
+ if (mode == TILEP_M_LOADING)
+ mode = TILEP_M_DEFAULT;
+ else
+ mode = TILEP_M_LOADING;
+
+ gotoxy(1, 8, GOTO_MSG);
+ cprintf("Toggle Startup mode : [m] (Current mode:%s)",
+ ( (mode == TILEP_M_LOADING) ? "Load User's Settings":"Class Default" ));
+ break;
+ }
+
+ case 't':
+ {
+ if (cur_part >= 2)
+ {
+ dolls[cur_doll].parts[ p_lines[cur_part] ] = 0;
+ display_parts_idx(cur_part);
+ }
+ break;
+ }
+
+ case CONTROL('D'):
+ {
+ tilep_job_default(you.char_class, current_gender,
+ dolls[cur_doll].parts);
+ for(i = 2; i < PARTS_ITEMS; i++)
+ {
+ display_parts_idx(i);
+ }
+ break;
+ }
+
+ case CONTROL('T'):
+ {
+ for(i = 2; i < PARTS_ITEMS; i++)
+ {
+ undo_dolls[cur_doll].parts[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ];
+ dolls[cur_doll].parts[ p_lines[i] ] = 0;
+ display_parts_idx(i);
+ }
+ break;
+ }
+
+ case CONTROL('C'):
+ {
+ for(i = 2; i < PARTS_ITEMS; i++)
+ {
+ copy_doll[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ];
+ }
+ break;
+ }
+
+ case CONTROL('V'):
+ {
+ for(i = 2; i < PARTS_ITEMS; i++)
+ {
+ undo_dolls[cur_doll].parts[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ];
+ dolls[cur_doll].parts[ p_lines[i] ] = copy_doll[ p_lines[i] ];
+ display_parts_idx(i);
+ }
+ break;
+ }
+
+ case CONTROL('Z'):
+ {
+ for(i = 2; i < PARTS_ITEMS; i++)
+ {
+ dolls[cur_doll].parts[ p_lines[i] ] = undo_dolls[cur_doll].parts[ p_lines[i] ];
+ display_parts_idx(i);
+ }
+ break;
+ }
+
+ case CONTROL('R'):
+ {
+ for(i = 2; i < PARTS_ITEMS; i++)
+ {
+ undo_dolls[cur_doll].parts[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ];
+ }
+ dolls[cur_doll].parts[TILEP_PART_CLOAK] =
+ one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_CLOAK ]) + 1);
+ dolls[cur_doll].parts[TILEP_PART_BOOTS] =
+ ( random2(tilep_parts_total[ TILEP_PART_BOOTS ] + 1) );
+ dolls[cur_doll].parts[TILEP_PART_LEG] =
+ ( random2(tilep_parts_total[ TILEP_PART_LEG ] + 1) );
+ dolls[cur_doll].parts[TILEP_PART_BODY] =
+ ( random2(tilep_parts_total[ TILEP_PART_BODY ] + 1) );
+ dolls[cur_doll].parts[TILEP_PART_ARM] =
+ one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_ARM ]) + 1);
+ dolls[cur_doll].parts[TILEP_PART_HAND1] =
+ ( random2(tilep_parts_total[ TILEP_PART_HAND1 ] + 1) );
+ dolls[cur_doll].parts[TILEP_PART_HAND2] =
+ one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_HAND2 ]) + 1);
+ dolls[cur_doll].parts[TILEP_PART_HAIR] =
+ ( random2(tilep_parts_total[ TILEP_PART_HAIR ] + 1) );
+ dolls[cur_doll].parts[TILEP_PART_BEARD] =
+ ( (dolls[cur_doll].parts[TILEP_PART_BASE] + 1) % 2) *
+ one_chance_in(4) * ( random2(tilep_parts_total[ TILEP_PART_BEARD ]) + 1 );
+ dolls[cur_doll].parts[TILEP_PART_HELM] =
+ one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_HELM ]) + 1 );
+ for(i = 2; i < PARTS_ITEMS; i++)
+ {
+ display_parts_idx(i);
+ }
+ break;
+ }
+ case '*':
+ {
+ int part = p_lines[cur_part];
+ int *target = &dolls[cur_doll].parts[part];
+
+ if (part == TILEP_PART_BASE)
+ continue;
+ if (*target == TILEP_SHOW_EQUIP)
+ *target = 0;
+ else
+ *target = TILEP_SHOW_EQUIP;
+
+ display_parts_idx(cur_part);
+ break;
+ }
+#ifdef WIZARD
+ case '1':
+ dolls[cur_doll].parts[TILEP_PART_DRCHEAD]++;
+ dolls[cur_doll].parts[TILEP_PART_DRCHEAD] %=
+ tilep_parts_total[TILEP_PART_DRCHEAD] -1;
+ break;
+ case '2':
+ dolls[cur_doll].parts[TILEP_PART_DRCWING]++;
+ dolls[cur_doll].parts[TILEP_PART_DRCWING] %=
+ tilep_parts_total[TILEP_PART_DRCWING] -1;
+ break;
+#endif
+ default:
+ {
+ }
+ }
+
+ if (inc != 0)
+ {
+ int *target = &dolls[cur_doll].parts[ p_lines[cur_part] ];
+
+ if (cur_part == 0)
+ {
+ if (inc > 0)
+ cur_doll++;
+ else
+ cur_doll--;
+ if (cur_doll < 0)
+ cur_doll = DOLLS_MAX -1;
+ else if (cur_doll == DOLLS_MAX)
+ cur_doll = 0;
+ }
+ else if (cur_part == 1)
+ {
+ if (*target % 2)
+ (*target)++;
+ else
+ (*target)--;
+ }
+ else
+ {
+ if (*target == TILEP_SHOW_EQUIP) continue;
+ (*target) += inc;
+ (*target) += tilep_parts_total[ p_lines[cur_part] ]+1;
+ (*target) %= tilep_parts_total[ p_lines[cur_part] ]+1;
+ }
+ }
+
+ delay(20);
+ }
+
+ current_doll = dolls[cur_doll];
+ draw_doll(DollCacheImg, &current_doll);
+ ImgCopyToTileImg(TILE_PLAYER, DollCacheImg, 0, 0, 1);
+
+ std::string dollsTxtString = datafile_path("dolls.txt", false, true);
+ const char *dollsTxt = dollsTxtString.c_str()[0] == 0 ?
+ "dolls.txt" : dollsTxtString.c_str();
+
+ if ( (fp = fopen(dollsTxt, "w+")) == NULL )
+ {
+ }
+ else
+ {
+ fprintf(fp, "MODE=%s\n", ( (mode == TILEP_M_LOADING) ? "LOADING":"DEFAULT" ) );
+ fprintf(fp, "NUM=%02d\n", cur_doll);
+ for(j = 0; j < DOLLS_MAX; j++)
+ {
+ tilep_print_parts(fbuf, dolls[j].parts);
+ fprintf(fp, "%s\n", fbuf);
+ }
+ fclose(fp);
+ }
+
+ ImgDestroy(PartsImg);
+ ImgDestroy(DollsListImg);
+
+ ImgClear(ScrBufImg);
+ redraw_spx_tcache(TILE_PLAYER);
+
+ for(x=0;x<TILE_DAT_XMAX+2;x++){
+ for(y=0;y<TILE_DAT_YMAX+2;y++){
+ t1buf[x][y]=0;
+ t2buf[x][y]=simple_iso_tile(TILE_DNGN_UNSEEN)|TILE_FLAG_UNSEEN;
+ }}
+
+ for(k=0;k<tcache_kind;k++)
+ for(x=0;x<tile_xmax*tile_ymax;x++)
+ screen_tcach_idx[k][x] = -1;
+
+ clrscr();
+ redraw_screen();
+}
+
+void TilePlayerRefresh()
+{
+ if (!draw_doll(DollCacheImg, &current_doll))
+ return; // Not changed
+
+ ImgCopyToTileImg(TILE_PLAYER, DollCacheImg, 0, 0, 1);
+
+ redraw_spx_tcache(TILE_PLAYER);
+ force_redraw_tile = true;
+
+ const coord_def ep = grid2view(you.pos());
+ update_single_grid(ep.x-1, ep.y-1);
+}
+
+void TilePlayerInit()
+{
+ int i;
+ int cur_doll = 0;
+ int mode = TILEP_M_DEFAULT;
+ dolls_data doll;
+ int gender = 0;
+
+ for(i = 0; i < TILEP_PARTS_TOTAL; i++)
+ doll.parts[i] = 0;
+ tilep_race_default(you.species, gender, you.experience_level, doll.parts);
+ tilep_job_default(you.char_class, gender, doll.parts);
+
+ load_doll_data("dolls.txt", &doll, 1, &mode, &cur_doll);
+ current_doll = doll;
+ draw_doll(DollCacheImg, &doll);
+
+ ImgCopyToTileImg(TILE_PLAYER, DollCacheImg, 0, 0, 1);
+
+}
+
+void TileGhostInit(struct ghost_demon &ghost)
+{
+ dolls_data doll;
+ int x, y;
+ unsigned int pseudo_rand = ghost.values[GVAL_MAX_HP]*54321*54321;
+ char mask[TILE_X*TILE_Y];
+ int g_gender = (pseudo_rand >>8)&1;
+
+ for (x=0; x<TILE_X; x++)
+ for (y=0; y<TILE_X; y++)
+ mask[x+y*TILE_X] = (x+y)&1;
+
+ for(x = 0; x < TILEP_PARTS_TOTAL; x++)
+ {
+ doll.parts[x] = 0;
+ current_parts[x] = 0;
+ }
+ tilep_race_default(ghost.values[GVAL_SPECIES], g_gender,
+ ghost.values[GVAL_EXP_LEVEL], doll.parts);
+ tilep_job_default (ghost.values[GVAL_CLASS], g_gender, doll.parts);
+
+ for(x = TILEP_PART_CLOAK; x < TILEP_PARTS_TOTAL; x++)
+ {
+ if (doll.parts[x] == TILEP_SHOW_EQUIP)
+ {
+ doll.parts[x] = 1 + (pseudo_rand % tilep_parts_total[x]);
+
+ if (x == TILEP_PART_BODY)
+ {
+ int p = 0;
+ int ac = ghost.values[GVAL_AC];
+ ac *= (5 + (pseudo_rand/11) % 11);
+ ac /= 10;
+
+ if (ac > 25) p= TILEP_BODY_PLATE_BLACK;
+ else
+ if (ac > 20) p= TILEP_BODY_BANDED;
+ else
+ if (ac > 15) p= TILEP_BODY_SCALEMAIL;
+ else
+ if (ac > 10) p= TILEP_BODY_CHAINMAIL;
+ else
+ if (ac > 5 ) p= TILEP_BODY_LEATHER_HEAVY;
+ else
+ p= TILEP_BODY_ROBE_BLUE;
+ doll.parts[x] = p;
+ }
+ }
+ }
+
+ int sk = ghost.values[GVAL_BEST_SKILL];
+ int dam = ghost.values[GVAL_DAMAGE];
+ int p = 0;
+
+ dam *= (5 + pseudo_rand % 11);
+ dam /= 10;
+
+ if (sk == SK_MACES_FLAILS)
+ {
+ if (dam>30) p = TILEP_HAND1_GREAT_FRAIL;
+ else
+ if (dam>25) p = TILEP_HAND1_GREAT_MACE;
+ else
+ if (dam>20) p = TILEP_HAND1_SPIKED_FRAIL;
+ else
+ if (dam>15) p = TILEP_HAND1_MORNINGSTAR;
+ else
+ if (dam>10) p = TILEP_HAND1_FRAIL;
+ else
+ if (dam>5) p = TILEP_HAND1_MACE;
+ else
+ p = TILEP_HAND1_CLUB_SLANT;
+
+ doll.parts[TILEP_PART_HAND1] = p;
+ }
+ else
+ if (sk == SK_SHORT_BLADES)
+ {
+ if (dam>20) p = TILEP_HAND1_SABRE;
+ else
+ if (dam>10) p = TILEP_HAND1_SHORT_SWORD_SLANT;
+ else
+ p = TILEP_HAND1_DAGGER_SLANT;
+
+ doll.parts[TILEP_PART_HAND1] = p;
+ }
+ else
+ if (sk == SK_LONG_SWORDS)
+ {
+ if (dam>25) p = TILEP_HAND1_GREAT_SWORD_SLANT;
+ else
+ if (dam>20) p = TILEP_HAND1_KATANA_SLANT;
+ else
+ if (dam>15) p = TILEP_HAND1_SCIMITAR;
+ else
+ if (dam>10) p = TILEP_HAND1_LONG_SWORD_SLANT;
+ else
+ p = TILEP_HAND1_FALCHION;
+
+ doll.parts[TILEP_PART_HAND1] = p;
+ }
+ else
+ if (sk == SK_AXES)
+ {
+ if (dam>30) p = TILEP_HAND1_EXECUTIONERS_AXE;
+ else
+ if (dam>20) p = TILEP_HAND1_BATTLEAXE;
+ else
+ if (dam>15) p = TILEP_HAND1_BROAD_AXE;
+ else
+ if (dam>10) p = TILEP_HAND1_WAR_AXE;
+ else
+ p = TILEP_HAND1_HAND_AXE;
+
+ doll.parts[TILEP_PART_HAND1] = p;
+ }
+ else
+ if (sk == SK_POLEARMS)
+ {
+ if (dam>30) p = TILEP_HAND1_GLAIVE;
+ else
+ if (dam>20) p = TILEP_HAND1_SCYTHE;
+ else
+ if (dam>15) p = TILEP_HAND1_HALBERD;
+ else
+ if (dam>10) p = TILEP_HAND1_TRIDENT2;
+ else
+ if (dam>10) p = TILEP_HAND1_HAMMER;
+ else
+ p = TILEP_HAND1_SPEAR;
+
+ doll.parts[TILEP_PART_HAND1] = p;
+ }
+ else
+ if (sk == SK_BOWS)
+ doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_BOW2;
+ else
+ if (sk == SK_CROSSBOWS)
+ doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_CROSSBOW;
+ else
+ if (sk == SK_SLINGS)
+ doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_SLING;
+ else
+ if (sk == SK_UNARMED_COMBAT)
+ doll.parts[TILEP_PART_HAND1] = doll.parts[TILEP_PART_HAND2] = 0;
+
+ ImgClear(DollCacheImg);
+ // Clear
+ ImgCopyToTileImg(TILE_MONS_PLAYER_GHOST, DollCacheImg, 0, 0, 1);
+
+ draw_doll(DollCacheImg, &doll);
+ ImgCopyToTileImg(TILE_MONS_PLAYER_GHOST, DollCacheImg, 0, 0, 1, mask, false);
+ redraw_spx_tcache(TILE_MONS_PLAYER_GHOST);
+}
+
+void TileInitItems()
+{
+ for(int i=0; i<NUM_POTIONS; i++)
+ {
+ int special = you.item_description[IDESC_POTIONS][i];
+ int tile0 = TILE_POTION_OFFSET + special % 14;
+ int tile1 = TILE_POT_HEALING + i;
+
+ ImgCopyFromTileImg(tile0, DollCacheImg, 0, 0, 1);
+ ImgCopyFromTileImg(tile1, DollCacheImg, 0, 0, 0);
+ ImgCopyToTileImg (tile1, DollCacheImg, 0, 0, 1);
+ }
+
+ for(int i=0; i<NUM_WANDS; i++)
+ {
+ int special = you.item_description[IDESC_WANDS][i];
+ int tile0 = TILE_WAND_OFFSET + special % 12;
+ int tile1 = TILE_WAND_FLAME + i;
+
+ ImgCopyFromTileImg(tile0, DollCacheImg, 0, 0, 1);
+ ImgCopyFromTileImg(tile1, DollCacheImg, 0, 0, 0);
+ ImgCopyToTileImg (tile1, DollCacheImg, 0, 0, 1);
+ }
+
+ //Hack: call it again
+ init_tileflag();
+}
+
+// Monster weapon tile
+#define N_MCACHE (TILE_MCACHE_END - TILE_MCACHE_START +1)
+
+typedef struct mcache mcache;
+struct mcache
+{
+ bool lock_flag;
+ mcache *next;
+ int mon_tile;
+ int equ_tile;
+ int draco;
+ int idx;
+};
+
+mcache mc_data[N_MCACHE];
+
+mcache *mc_head = NULL;
+
+static void ImgCopyDoll(int equ_tile, int hand, int ofs_x, int ofs_y)
+{
+ int handidx = hand == 1 ? TILEP_PART_HAND1 : TILEP_PART_HAND2;
+
+ int nx = tilep_parts_nx[handidx];
+ int ny = tilep_parts_ny[handidx];
+ int ox = tilep_parts_ox[handidx];
+ int oy = tilep_parts_oy[handidx];
+ int wx = std::min(TILE_X/nx + ofs_x, TILE_X/nx);
+ int wy = std::min(TILE_Y/ny + ofs_y, TILE_Y/ny);
+ int idx = equ_tile -1;
+ int tidx = tilep_parts_start[handidx] +
+ idx/(nx*ny);
+
+ //Source pos
+ int xs = (tidx % TILEP_PER_ROW)*TILE_X +
+ (idx % nx)*(TILE_X/nx) - ofs_x;
+ int ys = (tidx / TILEP_PER_ROW)*TILE_Y +
+ ((idx/nx) % ny)*(TILE_Y/ny) - ofs_y;
+
+ ImgCopy(PlayerImg, xs, ys, wx, wy,
+ DollCacheImg, ox, oy, 0);
+}
+
+static void mcache_compose(int tile_idx, int mon_tile, int equ_tile)
+{
+ int ofs_x=0;
+ int ofs_y=0;
+
+ switch(mon_tile)
+ {
+ case TILE_MONS_ORC:
+ case TILE_MONS_URUG:
+ case TILE_MONS_BLORK_THE_ORC:
+ case TILE_MONS_ORC_WARRIOR:
+ case TILE_MONS_ORC_KNIGHT:
+ case TILE_MONS_ORC_WARLORD:
+ ofs_y = 2;
+ break;
+ case TILE_MONS_GOBLIN:
+ case TILE_MONS_IJYB:
+ ofs_y = 4;
+ break;
+ case TILE_MONS_GNOLL:
+ ofs_x = -1;
+ break;
+ case TILE_MONS_BOGGART:
+ ofs_y = 2;
+ break;
+ case TILE_MONS_DEEP_ELF_FIGHTER:
+ case TILE_MONS_DEEP_ELF_SOLDIER:
+ ofs_y = 2;
+ break;
+ case TILE_MONS_DEEP_ELF_KNIGHT:
+ ofs_y = 1;
+ break;
+ case TILE_MONS_KOBOLD:
+ ofs_x = 3;
+ ofs_y = 4;
+ break;
+ case TILE_MONS_KOBOLD_DEMONOLOGIST:
+ ofs_y = -10;
+ break;
+ case TILE_MONS_BIG_KOBOLD:
+ ofs_x = 2;
+ ofs_y = 3;
+ break;
+ case TILE_MONS_MIDGE:
+ ofs_y = -2;
+ break;
+ case TILE_MONS_NAGA:
+ case TILE_MONS_GREATER_NAGA:
+ case TILE_MONS_NAGA_WARRIOR:
+ case TILE_MONS_GUARDIAN_NAGA:
+ case TILE_MONS_NAGA_MAGE:
+ ofs_y = 1;
+ break;
+ case TILE_MONS_HELL_KNIGHT:
+ ofs_x = -1;
+ ofs_y = 3;
+ break;
+ case TILE_MONS_RED_DEVIL:
+ ofs_x = 2;
+ ofs_y = -3;
+ break;
+ case TILE_MONS_WIZARD:
+ ofs_x = 2;
+ ofs_y = -2;
+ break;
+ case TILE_MONS_HUMAN:
+ ofs_x = 5;
+ ofs_y = 2;
+ break;
+ case TILE_MONS_ELF:
+ ofs_y = 1;
+ ofs_x = 4;
+ break;
+ case TILE_MONS_OGRE_MAGE:
+ ofs_y = -2;
+ ofs_x = -4;
+ break;
+ case TILE_MONS_DEEP_ELF_MAGE:
+ case TILE_MONS_DEEP_ELF_SUMMONER:
+ case TILE_MONS_DEEP_ELF_CONJURER:
+ case TILE_MONS_DEEP_ELF_PRIEST:
+ case TILE_MONS_DEEP_ELF_HIGH_PRIEST:
+ case TILE_MONS_DEEP_ELF_DEMONOLOGIST:
+ case TILE_MONS_DEEP_ELF_ANNIHILATOR:
+ case TILE_MONS_DEEP_ELF_SORCERER:
+ ofs_x = -1;
+ ofs_y = -2;
+ break;
+ case TILE_MONS_DEEP_ELF_DEATH_MAGE:
+ ofs_x = -1;
+ break;
+ }
+
+ // Copy monster tile
+ ImgCopyFromTileImg(mon_tile, DollCacheImg, 0, 0, 1);
+
+ // Overlay weapon tile
+ ImgCopyDoll(equ_tile, 1, ofs_x, ofs_y);
+
+ // In some cases, overlay a second weapon tile...
+ if (mon_tile == TILE_MONS_DEEP_ELF_BLADEMASTER)
+ {
+ int eq2;
+ switch (equ_tile)
+ {
+ case TILEP_HAND1_DAGGER:
+ eq2 = TILEP_HAND2_DAGGER;
+ break;
+ case TILEP_HAND1_SABRE:
+ eq2 = TILEP_HAND2_SABRE;
+ break;
+ default:
+ case TILEP_HAND1_SHORT_SWORD_SLANT:
+ eq2 = TILEP_HAND2_SHORT_SWORD_SLANT;
+ break;
+ };
+ ImgCopyDoll(eq2, 2, -ofs_x, ofs_y);
+ }
+
+ // Copy to the buffer
+ ImgCopyToTileImg(tile_idx, DollCacheImg, 0, 0, 1);
+
+ redraw_spx_tcache(tile_idx);
+}
+
+static void mcache_compose_draco(int tile_idx, int race, int cls, int w)
+{
+ extern int draconian_color(int race, int level);
+
+ dolls_data doll;
+ int x;
+
+ int color = draconian_color(race, -1);
+ int armour = 0;
+ int armour2 = 0;
+ int weapon = 0;
+ int weapon2 = 0;
+ int arm = 0;
+
+ for(x = 0; x < TILEP_PARTS_TOTAL; x++)
+ {
+ doll.parts[x] = 0;
+ current_parts[x] = 0;
+ }
+ doll.parts[TILEP_PART_SHADOW] = 1;
+
+ doll.parts[TILEP_PART_BASE] = TILEP_BASE_DRACONIAN + color *2;
+ doll.parts[TILEP_PART_DRCWING] = 1 + color;
+ doll.parts[TILEP_PART_DRCHEAD] = 1 + color;
+
+ switch(cls)
+ {
+ case MONS_DRACONIAN_CALLER:
+ weapon = TILEP_HAND1_STAFF_EVIL;
+ weapon2 = TILEP_HAND2_BOOK_YELLOW;
+ armour = TILEP_BODY_ROBE_BROWN;
+ break;
+
+ case MONS_DRACONIAN_MONK:
+ arm = TILEP_ARM_GLOVE_SHORT_BLUE;
+ armour = TILEP_BODY_KARATE2;
+ break;
+
+ case MONS_DRACONIAN_ZEALOT:
+ weapon = TILEP_HAND1_MACE;
+ weapon2 = TILEP_HAND2_BOOK_CYAN;
+ armour = TILEP_BODY_MONK_BLUE;
+ break;
+
+ case MONS_DRACONIAN_SHIFTER:
+ weapon = TILEP_HAND1_STAFF_LARGE;
+ armour = TILEP_BODY_ROBE_CYAN;
+ weapon2 = TILEP_HAND2_BOOK_GREEN;
+ break;
+
+ case MONS_DRACONIAN_ANNIHILATOR:
+ weapon = TILEP_HAND1_STAFF_RUBY;
+ weapon2 = TILEP_HAND2_FIRE_CYAN;
+ armour = TILEP_BODY_ROBE_GREEN_GOLD;
+ break;
+
+ case MONS_DRACONIAN_KNIGHT:
+ weapon = w;
+ weapon2 = TILEP_HAND2_SHIELD_KNIGHT_GRAY;
+ armour = TILEP_BODY_BPLATE_METAL1;
+ armour2 = TILEP_LEG_BELT_GRAY;
+ break;
+
+ case MONS_DRACONIAN_SCORCHER:
+ weapon = TILEP_HAND1_FIRE_RED;
+ weapon2 = TILEP_HAND2_BOOK_RED;
+ armour = TILEP_BODY_ROBE_RED;
+ break;
+
+ default:
+ weapon = w;
+ armour = TILEP_BODY_BELT2;
+ armour2 = TILEP_LEG_LOINCLOTH_RED;
+ break;
+ }
+
+ doll.parts[TILEP_PART_HAND1] = weapon;
+ doll.parts[TILEP_PART_HAND2] = weapon2;
+ doll.parts[TILEP_PART_BODY] = armour;
+ doll.parts[TILEP_PART_LEG] = armour2;
+ doll.parts[TILEP_PART_ARM] = arm;
+
+ ImgClear(DollCacheImg);
+ draw_doll(DollCacheImg, &doll, true, false);
+ // Copy to the buffer
+ ImgCopyToTileImg(tile_idx, DollCacheImg, 0, 0, 1);
+ redraw_spx_tcache(tile_idx);
+}
+
+static void mcache_init()
+{
+ int i;
+
+ for(i=0;i<N_MCACHE;i++)
+ {
+ mc_data[i].lock_flag = false;
+ mc_data[i].next = NULL;
+ if (i!=N_MCACHE-1)
+ mc_data[i].next = &mc_data[i+1];
+ mc_data[i].idx = TILE_MCACHE_START + i;
+ mc_data[i].mon_tile = 0;
+ mc_data[i].equ_tile = 0;
+ mc_data[i].draco = 0;
+ }
+ mc_head = &mc_data[0];
+}
+
+int get_base_idx_from_mcache(int tile_idx)
+{
+ for (mcache *mc = mc_head; mc != NULL; mc = mc->next)
+ {
+ if (mc->idx == tile_idx)
+ return mc->mon_tile;
+ }
+
+ return tile_idx;
+}
+
+int get_clean_map_idx(int tile_idx)
+{
+ int idx = tile_idx & TILE_FLAG_MASK;
+ if (idx >= TILE_CLOUD_FIRE_0 && idx <= TILE_CLOUD_PURP_SMOKE ||
+ idx >= TILE_MONS_SHADOW && idx <= TILE_MONS_WATER_ELEMENTAL ||
+ idx >= TILE_MCACHE_START && idx <= TILE_MCACHE_END)
+ {
+ return 0;
+ }
+ else
+ {
+ return tile_idx;
+ }
+}
+
+void TileMcacheUnlock()
+{
+ int i;
+
+ for(i=0;i<N_MCACHE;i++)
+ {
+ mc_data[i].lock_flag = false;
+ }
+}
+
+int TileMcacheFind(int mon_tile, int equ_tile, int draco)
+{
+ mcache *mc = mc_head;
+ mcache *prev = NULL;
+ mcache *empty = NULL;
+#ifdef DEBUG_DIAGNOSTICS
+ int count = 0;
+ char cache_info[40];
+#endif
+ int best2 = -1;
+ int best3 = -1;
+
+ while(1){
+ if(mon_tile == mc->mon_tile && equ_tile == mc->equ_tile
+ && draco == mc->draco)
+ {
+ // match found
+ // move cache to the head to reduce future search time
+ if (prev != NULL) prev->next = mc->next;
+ if (mc != mc_head) mc->next = mc_head;
+ mc_head = mc;
+
+ // lock it
+ mc->lock_flag=true;
+ // return cache index
+ return mc->idx;
+ }
+ else if(draco != 0 && mon_tile == mc->mon_tile && draco == mc->draco)
+ // second best for draconian: only weapon differ
+ best2 = mc->idx;
+ else if(draco != 0 && mon_tile == mc->mon_tile)
+ // third best for draconian: only class matches
+ best3 = mc->idx;
+
+ if (!mc->lock_flag)
+ empty = mc;
+ if (mc->next == NULL)
+ break;
+ prev = mc;
+ mc = mc->next;
+
+#ifdef DEBUG_DIAGNOSTICS
+ count++;
+#endif
+
+ }//while
+
+ // cache image not found and no room do draw it
+ if(empty == NULL)
+ {
+#ifdef DEBUG_DIAGNOSTICS
+ snprintf( cache_info, 39, "mcache (M %d, E %d) cache full",
+ mon_tile, equ_tile);
+ mpr(cache_info, MSGCH_DIAGNOSTICS );
+#endif
+ if (best2 != -1)
+ return best2;
+ if (best3 != -1)
+ return best3;
+ if (draco != 0)
+ return TILE_ERROR;
+ else
+ return mon_tile;
+ }
+ mc = empty;
+
+#ifdef DEBUG_DIAGNOSTICS
+ snprintf( cache_info, 39, "mcache (M %d, E %d) newly composed",
+ mon_tile, equ_tile);
+ mpr(cache_info, MSGCH_DIAGNOSTICS );
+#endif
+
+ // compose new image
+ if (draco != 0)
+ // race, class, weapon
+ mcache_compose_draco(mc->idx, draco, mon_tile, equ_tile);
+ else
+ mcache_compose(mc->idx, mon_tile, equ_tile);
+ mc->mon_tile = mon_tile;
+ mc->equ_tile = equ_tile;
+ mc->draco = draco;
+ // move cache to the head to reduce future search time
+ if (prev)
+ prev->next = mc->next;
+ if(mc != mc_head)
+ mc->next = mc_head;
+ mc_head = mc;
+ mc->lock_flag=true;
+ return mc->idx;
+}
+
+void TileDrawTitle()
+{
+ int winx, winy, tx, ty, x, y;
+ img_type TitleImg = ImgLoadFileSimple("title");
+ img_type pBuf = region_tile->backbuf;
+ if (!TitleImg || !pBuf) return;
+
+ tx = ImgWidth(TitleImg);
+ ty = ImgHeight(TitleImg);
+ winx = ImgWidth(pBuf);
+ winy = ImgHeight(pBuf);
+
+ if (tx > winx)
+ {
+ x = 0;
+ tx = winx;
+ }
+ else
+ {
+ x = (winx - tx)/2;
+ }
+
+ if (ty > winy)
+ {
+ y = 0;
+ ty = winy;
+ }
+ else
+ {
+ y = (winy - ty)/2;
+ }
+
+ ImgCopy(TitleImg, 0, 0, tx, ty, pBuf, x, y, 1);
+ region_tile->make_active();
+ region_tile->redraw();
+ ImgDestroy(TitleImg);
+}
+
+static void TilePutch(int c, img_type Dest, int dx, int dy)
+{
+ int tidx = TILE_CHAR00 + (c-32)/8;
+ int tidx2 = c & 7;
+
+ int sx = (tidx % TILE_PER_ROW)*TILE_X + (tidx2 % 4)*(TILE_X/4);
+ int sy = (tidx / TILE_PER_ROW)*TILE_Y + (tidx2 / 4)*(TILE_Y/2);;
+
+ ImgCopy(TileImg, sx, sy, TILE_X/4, TILE_Y/2,
+ Dest, dx, dy, 0);
+}
+
+void TileRedrawInv(int region)
+{
+ TileRegionClass *r = (region == REGION_INV1) ? region_item:region_item2;
+ r->flag = true;
+ r->make_active();
+ r->redraw();
+}
+
+void TileClearInv(int region)
+{
+ TileRegionClass *r = (region == REGION_INV1) ? region_item:region_item2;
+
+ for (int i = 0; i < r->mx * r->my; i++)
+ {
+ TileDrawOneItem(region, i, 0, -1, -1, -1, false, false, false, false, false);
+ }
+ last_cursor = -1;
+ itemlist_n = 0;
+}
+
+void TileDrawOneItem(int region, int i, char key, int idx,
+ int tile, int num, bool floor,
+ bool select, bool equip, bool tried, bool cursed)
+{
+ ASSERT(idx >= -1 && idx < MAX_ITEMS);
+ TileRegionClass *r = (region == REGION_INV1) ? region_item:region_item2;
+
+ int item_x = r->mx;
+ int dx = (i % item_x)*TILE_X;
+ int dy = (i / item_x)*TILE_Y;
+
+ if (tile == -1)
+ {
+ ImgCopyFromTileImg(TILE_DNGN_UNSEEN, r->backbuf, dx, dy, 1);
+ return;
+ }
+
+ if (floor)
+ ImgCopyFromTileImg(TILE_DNGN_FLOOR, r->backbuf, dx, dy, 1);
+ else
+ ImgCopyFromTileImg(TILE_ITEM_SLOT, r->backbuf, dx, dy, 1);
+
+ if (equip)
+ {
+ if (cursed)
+ ImgCopyFromTileImg(TILE_ITEM_SLOT_EQUIP_CURSED, r->backbuf,
+ dx, dy, 0);
+ else
+ ImgCopyFromTileImg(TILE_ITEM_SLOT_EQUIP, r->backbuf, dx, dy, 0);
+ }
+ else if (cursed)
+ {
+ ImgCopyFromTileImg(TILE_ITEM_SLOT_CURSED, r->backbuf, dx, dy, 0);
+ }
+ if (select)
+ ImgCopyFromTileImg(TILE_RAY_MESH, r->backbuf, dx, dy, 0);
+
+ if (itemlist_iflag[i] & TILEI_FLAG_CURSOR)
+ ImgCopyFromTileImg(TILE_CURSOR, r->backbuf, dx, dy, 0);
+
+ // Item tile
+ ImgCopyFromTileImg(tile, r->backbuf, dx, dy, 0);
+
+ // quantity/charge
+ if (num != -1)
+ {
+ // If you have that many, who cares.
+ if (num > 999)
+ num = 999;
+
+ const int offset_amount = TILE_X/4;
+ int offset = 0;
+
+ int c100 = num/100;
+ num -= c100*100;
+ if (c100)
+ {
+ TilePutch('0'+ c100, r->backbuf, dx+offset, dy);
+ offset += offset_amount;
+ }
+ int c10 = num/10;
+ if (c10 || c100)
+ {
+ TilePutch('0'+ c10, r->backbuf, dx+offset, dy);
+ offset += offset_amount;
+ }
+ int c1 = num % 10;
+ TilePutch('0'+ c1, r->backbuf, dx+offset, dy);
+ }
+
+ // '?' mark
+ if (tried)
+ {
+ TilePutch('?', r->backbuf, dx, dy + TILE_Y/2);
+ }
+
+ // record tile information as we draw it so that we can re-draw it at will
+ itemlist[i] = tile;
+ itemlist_num[i] = num;
+ itemlist_key[i] = key;
+ itemlist_idx[i] = idx;
+ itemlist_iflag[i] = 0;
+ if (floor)
+ itemlist_iflag[i] |= TILEI_FLAG_FLOOR;
+ if (tried)
+ itemlist_iflag[i] |= TILEI_FLAG_TRIED;
+ if (equip)
+ itemlist_iflag[i] |= TILEI_FLAG_EQUIP;
+ if (cursed)
+ itemlist_iflag[i] |= TILEI_FLAG_CURSE;
+ if (select)
+ itemlist_iflag[i] |= TILEI_FLAG_SELECT;
+
+ if (i >= itemlist_n)
+ itemlist_n = i+1;
+}
+
+void TileDrawInvData(int n, int flag, int *tiles, int *num, int *idx,
+ int *iflags)
+{
+ int i;
+ TileRegionClass *r = (flag == REGION_INV1) ? region_item:region_item2;
+
+ r->flag = true;
+
+ last_cursor = -1;
+ int old_itemlist_n = itemlist_n;
+ itemlist_n = n;
+
+ int item_x = r->mx;
+ int item_y = r->my;
+
+ for (i=0;i<item_x*item_y;i++)
+ {
+ if (i==MAX_ITEMLIST) break;
+
+ int tile0 = (i>=n) ? -1 : tiles[i];
+ int idx0 = (i>=n) ? -1 : idx[i];
+ char key = (iflags[i]&TILEI_FLAG_FLOOR) ? 0 : index_to_letter(idx[i]);
+
+ if ( flag == itemlist_flag
+ && tile0 == itemlist[i]
+ && num[i] == itemlist_num[i]
+ && key == itemlist_key[i]
+ && idx0 == itemlist_idx[i]
+ && iflags[i] == itemlist_iflag[i]
+ && !force_redraw_inv
+ && i < old_itemlist_n)
+ {
+ continue;
+ }
+
+ TileDrawOneItem(flag, i, key, idx0, tile0, num[i],
+ ((iflags[i]&TILEI_FLAG_FLOOR) != 0),
+ ((iflags[i]&TILEI_FLAG_SELECT) != 0),
+ ((iflags[i]&TILEI_FLAG_EQUIP) != 0),
+ ((iflags[i]&TILEI_FLAG_TRIED) != 0),
+ ((iflags[i]&TILEI_FLAG_CURSE) != 0));
+ }
+
+ r->make_active();
+ r->redraw();
+ itemlist_flag = flag;
+ force_redraw_inv = false;
+}
+
+void TileDrawInvCursor(int ix, bool flag)
+{
+ TileRegionClass *r =
+ (itemlist_flag == REGION_INV1) ? region_item:region_item2;
+
+ int tile0 = itemlist[ix];
+ int num0 = itemlist_num[ix];
+
+ if (flag)
+ itemlist_iflag[ix] |= TILEI_FLAG_CURSOR;
+ else
+ itemlist_iflag[ix] &= ~TILEI_FLAG_CURSOR;
+
+ TileDrawOneItem(itemlist_flag, ix, itemlist_key[ix], itemlist_idx[ix], tile0, num0,
+ ((itemlist_iflag[ix]&TILEI_FLAG_FLOOR) != 0),
+ ((itemlist_iflag[ix]&TILEI_FLAG_SELECT) != 0),
+ ((itemlist_iflag[ix]&TILEI_FLAG_EQUIP) != 0),
+ ((itemlist_iflag[ix]&TILEI_FLAG_TRIED) != 0),
+ ((itemlist_iflag[ix]&TILEI_FLAG_CURSE) != 0)
+ );
+
+ r->redraw();
+}
+
+void TileMoveInvCursor(int ix)
+{
+ if (last_cursor != -1)
+ TileDrawInvCursor(last_cursor, false);
+
+ if (ix != -1) TileDrawInvCursor(ix, true);
+ last_cursor = ix;
+}
+
+int TileInvIdx(int i)
+{
+ if (i >= itemlist_n)
+ return -1;
+ else
+ return itemlist_idx[i];
+}
+
+#endif
diff --git a/crawl-ref/source/tiles.h b/crawl-ref/source/tiles.h
new file mode 100644
index 0000000000..991e48f17f
--- /dev/null
+++ b/crawl-ref/source/tiles.h
@@ -0,0 +1,213 @@
+#ifdef USE_TILE
+
+#include "tiledef.h"
+#include "beam.h"
+
+//*tile1.cc: get data from core part and drives tile drawing codes
+
+//**convert in-game data to tile index
+int tileidx(unsigned int object, int extra);
+int tileidx_feature(int object);
+int tileidx_player(int job);
+int tileidx_unseen(int ch, const coord_def& gc);
+int tileidx_item(const item_def &item);
+int tileidx_item_throw(const item_def &item, int dx, int dy);
+int tileidx_bolt(const bolt &bolt);
+int tileidx_zap(int color);
+int tile_idx_unseen_terrain(int x, int y, int what);
+int tile_unseen_flag(const coord_def& gc);
+
+#define simple_iso_tile(x) (x)
+
+// Player tile related
+void tilep_race_default(int race, int gender, int level, int *parts);
+void tilep_job_default(int job, int gender, int *parts);
+void tilep_calc_flags(int parts[], int flag[]);
+
+void tilep_part_to_str(int number, char *buf);
+int tilep_str_to_part(char *str);
+
+void tilep_scan_parts(char *fbuf, int *parts);
+void tilep_print_parts(char *fbuf, int *parts);
+
+int tilep_equ_weapon(const item_def &item);
+int tilep_equ_shield(const item_def &item);
+int tilep_equ_armour(const item_def &item);
+int tilep_equ_cloak(const item_def &item);
+int tilep_equ_helm(const item_def &item);
+int tilep_equ_gloves(const item_def &item);
+int tilep_equ_boots(const item_def &item);
+
+// Tile display related
+void tile_draw_floor();
+void tile_place_monster(int gx, int gy, int idx, bool foreground = true);
+void tile_place_item(int x, int y, int idx);
+void tile_place_item_bk(int gx, int gy, int idx);
+void tile_place_tile_bk(int gx, int gy, int tileidx);
+void tile_place_item_marker(int x, int y, int idx);
+void tile_place_cloud(int x, int y, int type, int decay);
+void tile_place_ray(const coord_def& gc);
+void tile_draw_rays(bool resetCount);
+void tile_clear_buf();
+
+void tile_finish_dngn(short unsigned int *tileb, int cx, int cy);
+void tile_draw_dungeon(short unsigned int *tileb);
+
+// Tile Inventry display
+void tile_draw_inv(int item_type = -1, int flag = -1);
+// Multiple pickup
+void tile_pick_menu();
+
+int get_num_wall_flavors();
+int get_num_floor_flavors();
+int get_num_floor_special_flavors();
+int get_wall_tile_idx();
+int get_floor_tile_idx();
+int get_floor_special_tile_idx();
+void tile_init_flavor();
+
+/**************************************/
+/* tile2.cc image manipulation */
+/**************************************/
+// init them all
+void TileInit();
+
+void TileResizeScreen(int x, int y);
+
+// display tile cursor, returns old cursor value there
+int TileDrawCursor(int x, int y, int flag);
+// display bolts
+void TileDrawBolt(int x, int y, int fg);
+// display dungeon: tileb = { fg(0,0),bg(0,0),fg(1,0),bg(1,0), ..
+void TileDrawDungeon(short unsigned int *tileb);
+// display memorized dungeon
+void TileDrawFarDungeon(int cx, int cy);
+// display map centered on grid coords
+void TileDrawMap(int gx, int gy);
+void LoadDungeonView(short unsigned int *tileb);
+void StoreDungeonView(short unsigned int *tileb);
+
+void TileNewLevel(bool first_time);
+
+
+// display inventry
+void TileDrawInvData(int n, int flag, int *tiles, int *num,
+ int *idx, int *iflags);
+void TileDrawOneItem(int region, int i, char key, int idx,
+ int tile, int num, bool floor,
+ bool select, bool equip, bool tried, bool cursed);
+void TileRedrawInv(int region);
+void TileClearInv(int region);
+void TileMoveInvCursor(int ix);
+int TileInvIdx(int i);
+
+// refresh player tile
+void TilePlayerRefresh();
+// edit player tile
+void TilePlayerEdit();
+// init player tile
+void TilePlayerInit();
+// init ghost tile
+void TileGhostInit(struct ghost_demon &gs);
+// init pandem demon tile (only in iso mode)
+void TilePandemInit(struct ghost_demon &gs);
+// edit pandem tile (debug)
+void TileEditPandem();
+// init id-ed item tiles
+void TileInitItems();
+
+// load wall tiles
+void TileLoadWall(bool wizard);
+
+//�^�C�g��
+void TileDrawTitle();
+
+// monster+weapon tile
+void TileMcacheUnlock();
+int TileMcacheFind(int mon_tile, int eq_tile, int draco = 0);
+int get_base_idx_from_mcache(int tile_idx);
+int get_clean_map_idx(int tile_idx);
+
+/* Flags for drawing routines */
+// MAY_STAB, FLAG_STAB, and FLAG_PET are mutually exclusive
+#define TILE_FLAG_MAY_STAB 0xC000 // May stab brand is always fg
+#define TILE_FLAG_STAB 0x8000 // Stab brand is always fg
+#define TILE_FLAG_PET 0x4000 //pet is always fg
+
+#define TILE_FLAG_NET 0x2000 //nets are always in fg
+#define TILE_FLAG_FLYING 0x1000 //flying object is always fg
+#define TILE_FLAG_S_UNDER 0x800 //fg
+
+#define TILE_FLAG_CURSOR 0xc000 //cursor is always bg
+#define TILE_FLAG_CURSOR1 0x8000 //cursor is always bg
+#define TILE_FLAG_CURSOR2 0x4000 //cursor is always bg
+#define TILE_FLAG_CURSOR3 0xc000 //cursor is always bg
+#define TILE_FLAG_CURSOR0 0x0000 //cursor is always bg
+
+#define TILE_FLAG_UNSEEN 0x2000 //unseen flag is set to bg
+#define TILE_FLAG_MM_UNSEEN 0x1000
+#define TILE_FLAG_RAY 0x800
+
+#define TILE_FLAG_MASK 0x07ff
+
+
+#define TILEI_FLAG_SELECT 0x100
+#define TILEI_FLAG_TRIED 0x200
+#define TILEI_FLAG_EQUIP 0x400
+#define TILEI_FLAG_FLOOR 0x800
+#define TILEI_FLAG_CURSE 0x1000
+#define TILEI_FLAG_CURSOR 0x2000
+
+#define TILEP_GENDER_MALE 0
+#define TILEP_GENDER_FEMALE 1
+
+#define TILEP_M_DEFAULT 0
+#define TILEP_M_LOADING 1
+
+#define TILEP_SHOW_EQUIP 0x1000
+
+enum TilePlayerFlagCut
+{
+ TILEP_FLAG_HIDE,
+ TILEP_FLAG_NORMAL,
+ TILEP_FLAG_CUT_CENTAUR,
+ TILEP_FLAG_CUT_NAGA
+};
+
+#ifdef TILEP_DEBUG
+const char *get_ctg_name(int part);
+int get_ctg_idx(char *name);
+const char *get_parts_name(int part, int idx);
+int get_parts_idx(int part, char *name);
+#endif
+
+// Dungeon view window size
+#define TILE_DAT_XMAX 35
+#define TILE_DAT_YMAX 35
+// normal tile size in px
+#define TILE_X 32
+#define TILE_Y 32
+
+// Unit size
+// iso mode screen size
+#define TILE_XMAX_ISO 24
+#define TILE_YMAX_ISO 13
+// iso tile size in px
+#define TILE_X_EX_ISO 64
+#define TILE_Y_EX_ISO 64
+
+// iso mode unit grid size in px
+#define TILE_UX_ISO (TILE_X_EX_ISO/2)
+#define TILE_UY_ISO (TILE_X_EX_ISO/2)
+
+// screen size in grids
+#define TILE_XMAX_NORMAL 17
+#define TILE_YMAX_NORMAL 17
+// grid size in px
+#define TILE_UX_NORMAL TILE_X
+#define TILE_UY_NORMAL TILE_Y
+
+#define TILEP_BOOTS_NAGA_BARDING (N_PART_BOOTS + 1)
+#define TILEP_BOOTS_CENTAUR_BARDING (N_PART_BOOTS + 2)
+
+#endif // USE_TILES
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index 079302a6df..aee22728ff 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -41,8 +41,12 @@ static job_type get_tutorial_job(unsigned int type);
static int get_tutorial_cols()
{
+#ifdef USE_TILE
+ return crawl_view.msgsz.x;
+#else
int ncols = get_number_of_cols();
return (ncols > 80? 80 : ncols);
+#endif
}
void save_tutorial( FILE* fp )
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index 40d5b82b42..c7c886ca1e 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -63,6 +63,7 @@
#include "stuff.h"
#include "spells4.h"
#include "stash.h"
+#include "tiles.h"
#include "state.h"
#include "terrain.h"
#include "travel.h"
@@ -181,11 +182,20 @@ void set_envmap_glyph(int x, int y, int object, int col)
map_cell &c = env.map[x][y];
c.object = object;
c.colour = col;
+#ifdef USE_TILE
+ int glyph = env.map[x][y].glyph();
+ GmapUpdate(x,y,glyph);
+#endif
}
void set_envmap_obj( int x, int y, int obj )
{
env.map[x][y].object = obj;
+#ifdef USE_TILE
+ int glyph = env.map[x][y].glyph();
+ if (glyph)
+ GmapUpdate(x,y,glyph);
+#endif
}
void set_envmap_col( int x, int y, int colour )
@@ -254,6 +264,11 @@ void set_terrain_mapped( int x, int y )
void set_terrain_seen( int x, int y )
{
+#ifdef USE_TILE
+ env.map[x][y].flags &= ~(MAP_DETECTED_ITEM);
+ env.map[x][y].flags &= ~(MAP_DETECTED_MONSTER);
+#endif
+
env.map[x][y].flags &= (~MAP_CHANGED_FLAG);
env.map[x][y].flags |= MAP_SEEN_FLAG;
}
@@ -268,7 +283,7 @@ bool is_notable_terrain(dungeon_feature_type ftype)
return (Feature[ftype].is_notable());
}
-#if defined(WIN32CONSOLE) || defined(DOS)
+#if defined(WIN32CONSOLE) || defined(DOS) || defined(USE_TILE)
static unsigned colflag2brand(int colflag)
{
switch (colflag)
@@ -302,7 +317,7 @@ unsigned real_colour(unsigned raw_colour)
if (is_element_colour( raw_colour ))
raw_colour = colflags | element_colour( raw_colour );
-#if defined(WIN32CONSOLE) || defined(DOS)
+#if defined(WIN32CONSOLE) || defined(DOS) || defined(USE_TILE)
if (colflags)
{
unsigned brand = colflag2brand(colflags);
@@ -470,7 +485,7 @@ static char get_travel_colour( int x, int y )
Options.tc_disconnected;
}
-#if defined(WIN32CONSOLE) || defined(DOS)
+#if defined(WIN32CONSOLE) || defined(DOS) || defined(USE_TILE)
static unsigned short dos_reverse_brand(unsigned short colour)
{
if (Options.dos_use_background_intensity)
@@ -638,6 +653,14 @@ void clear_map(bool clear_detected_items, bool clear_detected_monsters)
set_envmap_obj(x, y, is_terrain_known(x, y)? grd[x][y] : 0);
set_envmap_detected_mons(x, y, false);
set_envmap_detected_item(x, y, false);
+
+#ifdef USE_TILE
+ set_envmap_obj(x, y, is_terrain_known(x, y)? grd[x][y] : 0);
+ env.tile_bk_fg[x][y] = 0;
+ env.tile_bk_bg[x][y] = is_terrain_known(x, y) ?
+ tile_idx_unseen_terrain(x, y, grd[x][y]) :
+ tileidx_feature(DNGN_UNSEEN);
+#endif
}
}
}
@@ -998,6 +1021,7 @@ inline static bool update_monster_grid(const monsters *monster)
env.show[ex][ey] = monster->type + DNGN_START_OF_MONSTERS;
env.show_col[ex][ey] = get_mons_colour( monster );
+
return (true);
}
@@ -1022,6 +1046,10 @@ void monster_grid(bool do_updates)
if (!update_monster_grid(monster))
continue;
+
+#ifdef USE_TILE
+ tile_place_monster(monster->x, monster->y, s, true);
+#endif
if (player_monster_visible(monster)
&& !mons_is_submerged(monster)
@@ -1215,6 +1243,14 @@ inline static void update_item_grid(const coord_def &gp, const coord_def &ep)
ecol |= COLFLAG_ITEM_HEAP;
env.show(ep) = get_item_dngn_code( eitem );
}
+
+#ifdef USE_TILE
+ int idx = igrd(gp);
+ if (is_stair(grid))
+ tile_place_item_marker(ep.x, ep.y, idx);
+ else
+ tile_place_item(ep.x, ep.y, idx);
+#endif
}
void item_grid()
@@ -1318,6 +1354,11 @@ inline static void update_cloud_grid(int cloudno)
set_show_backup(ex, ey);
env.show[ex][ey] = DNGN_CLOUD;
env.show_col[ex][ey] = which_colour;
+
+#ifdef USE_TILE
+ tile_place_cloud(ex, ey, env.cloud[cloudno].type,
+ env.cloud[cloudno].decay);
+#endif
}
void cloud_grid(void)
@@ -2402,28 +2443,26 @@ void draw_border(void)
clrscr();
redraw_skill( you.your_name, player_title() );
- const int xcol = crawl_view.hudp.x;
-
- gotoxy(xcol, 2);
+ gotoxy(1, 2, GOTO_STAT);
cprintf( "%s %s",
species_name( you.species, you.experience_level ).c_str(),
(you.wizard ? "*WIZARD*" : "" ) );
- gotoxy(xcol, 3); cprintf("HP:");
- gotoxy(xcol, 4); cprintf("Magic:");
- gotoxy(xcol, 5); cprintf("AC:");
- gotoxy(xcol, 6); cprintf("EV:");
- gotoxy(xcol, 7); cprintf("Str:");
- gotoxy(xcol, 8); cprintf("Int:");
- gotoxy(xcol, 9); cprintf("Dex:");
- gotoxy(xcol, 10); cprintf("Gold:");
+ gotoxy(1, 3, GOTO_STAT); cprintf("HP:");
+ gotoxy(1, 4, GOTO_STAT); cprintf("Magic:");
+ gotoxy(1, 5, GOTO_STAT); cprintf("AC:");
+ gotoxy(1, 6, GOTO_STAT); cprintf("EV:");
+ gotoxy(1, 7, GOTO_STAT); cprintf("Str:");
+ gotoxy(1, 8, GOTO_STAT); cprintf("Int:");
+ gotoxy(1, 9, GOTO_STAT); cprintf("Dex:");
+ gotoxy(1, 10, GOTO_STAT); cprintf("Gold:");
if (Options.show_turns)
{
- gotoxy(xcol + 15, 10);
+ gotoxy(1 + 15, 10, GOTO_STAT);
cprintf("Turn:");
}
- gotoxy(xcol, 11); cprintf("Experience:");
- gotoxy(xcol, 12); cprintf("Level");
+ gotoxy(1, 11, GOTO_STAT); cprintf("Experience:");
+ gotoxy(1, 12, GOTO_STAT); cprintf("Level");
} // end draw_border()
// Determines if the given feature is present at (x, y) in _grid_ coordinates.
@@ -2683,6 +2722,7 @@ static int get_number_of_lines_levelmap()
return get_number_of_lines() - (Options.level_map_title ? 1 : 0);
}
+#ifndef USE_TILE
static void draw_level_map(int start_x, int start_y, bool travel_mode)
{
int bufcount2 = 0;
@@ -2768,6 +2808,7 @@ static void draw_level_map(int start_x, int start_y, bool travel_mode)
}
puttext(1, top, num_cols, top + num_lines - 1, buffer2);
}
+#endif // USE_TILE
static void reset_travel_colours(std::vector<coord_def> &features)
{
@@ -2862,7 +2903,9 @@ void show_map( coord_def &spec_place, bool travel_mode )
bool map_alive = true;
bool redraw_map = true;
+#ifndef USE_TILE
clrscr();
+#endif
textcolor(DARKGREY);
while (map_alive)
@@ -2870,14 +2913,31 @@ void show_map( coord_def &spec_place, bool travel_mode )
start_y = screen_y - half_screen;
if (redraw_map)
+ {
+#ifdef USE_TILE
+ // Note: Tile versions just center on the current cursor
+ // location. It silently ignores everything else going
+ // on in this function. --Enne
+ unsigned int cx = start_x + curs_x - 1;
+ unsigned int cy = start_y + curs_y - 1;
+ TileDrawMap(cx, cy);
+ GmapDisplay(cx, cy);
+ }
+#else
draw_level_map(start_x, start_y, travel_mode);
-
- redraw_map = true;
+ }
cursorxy(curs_x, curs_y + top - 1);
+#endif
+ redraw_map = true;
c_input_reset(true);
getty = unmangle_direction_keys(getchm(KC_LEVELMAP), KC_LEVELMAP,
false, false);
+#ifdef USE_TILE
+ if (getty == CK_MOUSE_B4) getty = '-';
+ if (getty == CK_MOUSE_B5) getty = '+';
+#endif
+
c_input_reset(false);
switch (getty)
@@ -3259,6 +3319,16 @@ bool magic_mapping(int map_radius, int proportion, bool suppress_msg,
if (is_terrain_changed(i, j))
clear_envmap_grid(i, j);
+#ifdef USE_TILE
+ if (!wizard_map && is_terrain_known(i,j))
+ {
+ // can't use set_envmap_obj because that
+ // will overwrite the gmap.
+ env.tile_bk_bg[i][j] =
+ tile_idx_unseen_terrain(i, j, grd[i][j]);
+ }
+#endif
+
if (!wizard_map && is_terrain_known(i, j))
continue;
@@ -3306,6 +3376,11 @@ bool magic_mapping(int map_radius, int proportion, bool suppress_msg,
}
}
}
+#ifdef USE_TILE
+ GmapInit(true); // re-draw tile backup
+ tile_clear_buf();
+#endif
+
return true;
} // end magic_mapping()
@@ -4244,12 +4319,14 @@ void view_update_at(const coord_def &pos)
if (flash_colour == BLACK)
flash_colour = viewmap_flash_colour();
+#ifndef USE_TILE
gotoxy(vp.x, vp.y);
put_colour_ch(flash_colour? real_colour(flash_colour) : colour, ch);
// Force colour back to normal, else clrscr() will flood screen
// with this colour on DOS.
textattr(LIGHTGREY);
+#endif
}
bool view_update()
@@ -4276,6 +4353,10 @@ bool view_update()
//---------------------------------------------------------------
void viewwindow(bool draw_it, bool do_updates)
{
+#ifdef USE_TILE
+ std::vector<unsigned short> tileb(
+ crawl_view.viewsz.y * crawl_view.viewsz.x * 2);
+#endif
screen_buffer_t *buffy(crawl_view.vbuf);
int count_x, count_y;
@@ -4286,6 +4367,11 @@ void viewwindow(bool draw_it, bool do_updates)
// made opaque.
losight( env.no_trans_show, grd, you.x_pos, you.y_pos, true );
+#ifdef USE_TILE
+ tile_draw_floor();
+ TileMcacheUnlock();
+#endif
+
env.show_col.init(LIGHTGREY);
Show_Backup.init(0);
@@ -4293,6 +4379,10 @@ void viewwindow(bool draw_it, bool do_updates)
cloud_grid();
monster_grid( do_updates );
+#ifdef USE_TILE
+ tile_draw_rays(true);
+#endif
+
if (draw_it)
{
cursor_control cs(false);
@@ -4342,6 +4432,10 @@ void viewwindow(bool draw_it, bool do_updates)
// off the map
buffy[bufcount] = 0;
buffy[bufcount + 1] = DARKGREY;
+#ifdef USE_TILE
+ tileb[bufcount] = 0;
+ tileb[bufcount+1] = tileidx_unseen(' ', gc);
+#endif
}
else if (!crawl_view.in_grid_los(gc))
{
@@ -4352,6 +4446,18 @@ void viewwindow(bool draw_it, bool do_updates)
if (Options.colour_map)
buffy[bufcount + 1] =
colour_code_map(gc.x, gc.y, Options.item_colour);
+
+#ifdef USE_TILE
+ unsigned short bg = env.tile_bk_bg[gc.x][gc.y];
+ unsigned short fg = env.tile_bk_fg[gc.x][gc.y];
+ if (bg == 0 && fg == 0)
+ {
+ bg = tileidx_unseen(get_envmap_char(gc.x,gc.y), gc);
+ env.tile_bk_bg[gc.x][gc.y] = bg;
+ }
+ tileb[bufcount] = fg;
+ tileb[bufcount+1] = bg | tile_unseen_flag(gc);
+#endif
}
else if (gc == you.pos())
{
@@ -4367,6 +4473,17 @@ void viewwindow(bool draw_it, bool do_updates)
set_envmap_detected_mons(gc.x, gc.y, false);
set_envmap_detected_item(gc.x, gc.y, false);
}
+#ifdef USE_TILE
+ if (map)
+ {
+ env.tile_bk_bg[gc.x][gc.y] =
+ env.tile_bg[ep.x-1][ep.y-1];
+ }
+
+ tileb[bufcount] = env.tile_fg[ep.x-1][ep.y-1] =
+ tileidx_player(you.char_class);
+ tileb[bufcount+1] = env.tile_bg[ep.x-1][ep.y-1];
+#endif
// player overrides everything in cell
buffy[bufcount] = you.symbol;
@@ -4393,6 +4510,10 @@ void viewwindow(bool draw_it, bool do_updates)
buffy[bufcount] = ch;
buffy[bufcount + 1] = colour;
+#ifdef USE_TILE
+ tileb[bufcount]= env.tile_fg[ep.x-1][ep.y-1];
+ tileb[bufcount+1]= env.tile_bg[ep.x-1][ep.y-1];
+#endif
if (map)
{
@@ -4404,10 +4525,28 @@ void viewwindow(bool draw_it, bool do_updates)
if (buffy[bufcount] != 0)
{
// ... map that we've seen this
- set_envmap_glyph( gc.x, gc.y, object, colour );
set_terrain_seen( gc.x, gc.y );
+ set_envmap_glyph( gc.x, gc.y, object, colour );
set_envmap_detected_mons(gc.x, gc.y, false);
set_envmap_detected_item(gc.x, gc.y, false);
+#ifdef USE_TILE
+ // We remove any references to mcache when
+ // writing to the background.
+ if (Options.clean_map)
+ {
+ env.tile_bk_fg[gc.x][gc.y] =
+ get_clean_map_idx(
+ env.tile_fg[ep.x-1][ep.y-1]);
+ }
+ else
+ {
+ env.tile_bk_fg[gc.x][gc.y] =
+ get_base_idx_from_mcache(
+ env.tile_fg[ep.x-1][ep.y-1]);
+ }
+ env.tile_bk_bg[gc.x][gc.y] =
+ env.tile_bg[ep.x-1][ep.y-1];
+#endif
}
// Check if we're looking to clean_map...
@@ -4451,6 +4590,24 @@ void viewwindow(bool draw_it, bool do_updates)
buffy[bufcount + 1] =
colour_code_map(gc.x, gc.y,
Options.item_colour);
+#ifdef USE_TILE
+ if(env.tile_bk_fg[gc.x][gc.y] != 0
+ || env.tile_bk_bg[gc.x][gc.y] != 0)
+ {
+ tileb[bufcount] =
+ env.tile_bk_fg[gc.x][gc.y];
+ tileb[bufcount + 1] =
+ env.tile_bk_bg[gc.x][gc.y]
+ | tile_unseen_flag(gc);
+ }
+ else
+ {
+ tileb[bufcount] = 0;
+ tileb[bufcount + 1] =
+ tileidx_unseen(
+ get_envmap_char( gc.x, gc.y ), gc);
+ }
+#endif
}
}
}
@@ -4472,11 +4629,16 @@ void viewwindow(bool draw_it, bool do_updates)
// avoiding unneeded draws when running
if (draw)
{
+#ifdef USE_TILE
+ tile_draw_dungeon(&tileb[0]);
+ GmapDisplay(you.x_pos, you.y_pos);
+#else
you.last_view_update = you.num_turns;
puttext(crawl_view.viewp.x, crawl_view.viewp.y,
crawl_view.viewp.x + crawl_view.viewsz.x - 1,
crawl_view.viewp.y + crawl_view.viewsz.y - 1,
buffy);
+#endif
}
}
} // end viewwindow()
@@ -4583,10 +4745,12 @@ void crawl_view_geometry::init_geometry()
{
termsz = coord_def( get_number_of_cols(), get_number_of_lines() );
+#ifndef USE_TILE
// If the terminal is too small, exit with an error.
if ((termsz.x < 80 || termsz.y < 24) && !crawl_state.need_save)
end(1, false, "Terminal too small (%d,%d), need at least (80,24)",
termsz.x, termsz.y);
+#endif
int freeheight = termsz.y - message_min_lines;
@@ -4631,8 +4795,13 @@ void crawl_view_geometry::init_geometry()
hudp.x += hudmarg > hud_increase_max? hud_increase_max : hudmarg;
}
+#ifdef USE_TILE
+ // libgui may redefine these based on its own settings
+ gui_init_view_params(termsz, viewsz, msgp, msgsz, hudp, hudsz);
+#endif
+
viewhalfsz = viewsz / 2;
-
+
init_view();
}
diff --git a/crawl-ref/source/view.h b/crawl-ref/source/view.h
index 6e828b8ecf..fec4d5805f 100644
--- a/crawl-ref/source/view.h
+++ b/crawl-ref/source/view.h
@@ -242,7 +242,7 @@ dungeon_char_type dchar_by_name(const std::string &name);
void handle_terminal_resize(bool redraw = true);
-#if defined(WIN32CONSOLE) || defined(DOS)
+#if defined(WIN32CONSOLE) || defined(DOS) || defined(USE_TILE)
unsigned short dos_brand( unsigned short colour,
unsigned brand = CHATTR_REVERSE);
#endif
diff --git a/crawl-ref/wininit.txt b/crawl-ref/wininit.txt
new file mode 100644
index 0000000000..f04dd132e9
--- /dev/null
+++ b/crawl-ref/wininit.txt
@@ -0,0 +1,30 @@
+Text:DngnX=19
+Text:DngnY=17
+Text:MapPx=4
+Text:MsgX=73
+Text:MsgY=10
+Text:WindowTop=54
+Text:WindowLeft=121
+Text:FontName=8x13
+Text:FontSize=19
+
+Tile:DngnX=19
+Tile:DngnY=17
+Tile:MapPx=4
+Tile:MsgX=73
+Tile:MsgY=10
+Tile:WindowTop=40
+Tile:WindowLeft=193
+Tile:FontName=8x13
+Tile:FontSize=16
+
+Iso:DngnX=17
+Iso:DngnY=17
+Iso:MapPx=1
+Iso:MsgX=40
+Iso:MsgY=8
+Iso:WindowTop=10
+Iso:WindowLeft=73
+Iso:FontName=8x16
+Iso:FontSize=24
+