summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2010-01-08 20:28:34 +0100
committerBardur Arantsson <bardur@scientician.net>2010-01-08 23:46:06 +0100
commit6aa48afdd57d03314fdf4be6c9da911c32277c84 (patch)
tree2dc401f9aae2dc6736d2fc3811c8f8099d3eabe6
Import tome-2.3.5.
-rw-r--r--.gitignore3
-rw-r--r--angdos.cfg634
-rw-r--r--changes.old6027
-rw-r--r--changes.txt82
-rw-r--r--credits.txt67
-rw-r--r--lib/.gitignore2
-rw-r--r--lib/apex/delete.me1
-rw-r--r--lib/bone/bone001.0124
-rw-r--r--lib/bone/bone004.0014
-rw-r--r--lib/bone/bone004.0024
-rw-r--r--lib/bone/bone004.0034
-rw-r--r--lib/bone/bone004.0044
-rw-r--r--lib/bone/bone004.0054
-rw-r--r--lib/bone/bone004.0064
-rw-r--r--lib/bone/bone004.0074
-rw-r--r--lib/bone/bone004.0084
-rw-r--r--lib/bone/bone004.0094
-rw-r--r--lib/bone/bone004.0104
-rw-r--r--lib/cmov/delete.me1
-rw-r--r--lib/core/auto.lua803
-rw-r--r--lib/core/building.lua15
-rw-r--r--lib/core/crpt_aux.lua243
-rw-r--r--lib/core/dungeon.lua106
-rw-r--r--lib/core/gen_idx.lua261
-rw-r--r--lib/core/gods.lua40
-rw-r--r--lib/core/help.lua141
-rw-r--r--lib/core/init.lua84
-rw-r--r--lib/core/load.lua37
-rw-r--r--lib/core/load2.lua63
-rw-r--r--lib/core/mimc_aux.lua95
-rw-r--r--lib/core/monsters.lua16
-rw-r--r--lib/core/objects.lua45
-rw-r--r--lib/core/player.lua140
-rw-r--r--lib/core/powers.lua105
-rw-r--r--lib/core/quests.lua57
-rw-r--r--lib/core/s_aux.lua742
-rw-r--r--lib/core/stores.lua32
-rw-r--r--lib/core/util.lua257
-rw-r--r--lib/core/xml.lua347
-rw-r--r--lib/data/delete.me0
-rw-r--r--lib/dngn/dun1.142
-rw-r--r--lib/dngn/dun10.03
-rw-r--r--lib/dngn/dun11.202
-rw-r--r--lib/dngn/dun11.222
-rw-r--r--lib/dngn/dun17.155
-rw-r--r--lib/dngn/dun18.02
-rw-r--r--lib/dngn/dun18.12
-rw-r--r--lib/dngn/dun19.115
-rw-r--r--lib/dngn/dun2.312
-rw-r--r--lib/dngn/dun22.102
-rw-r--r--lib/dngn/dun22.55
-rw-r--r--lib/dngn/dun24.03
-rw-r--r--lib/dngn/dun29.156
-rw-r--r--lib/dngn/dun3.185
-rw-r--r--lib/dngn/dun3.285
-rw-r--r--lib/dngn/dun3.35
-rw-r--r--lib/dngn/dun5.03
-rw-r--r--lib/dngn/dun5.1414
-rw-r--r--lib/dngn/dun6.03
-rw-r--r--lib/edit/a_info.txt2889
-rw-r--r--lib/edit/ab_info.txt118
-rw-r--r--lib/edit/al_info.txt2097
-rw-r--r--lib/edit/ba_info.txt283
-rw-r--r--lib/edit/between.map71
-rw-r--r--lib/edit/d_info.txt512
-rw-r--r--lib/edit/dragons.map43
-rw-r--r--lib/edit/e_info.txt2210
-rw-r--r--lib/edit/evil.map52
-rw-r--r--lib/edit/f_info.txt933
-rw-r--r--lib/edit/haunted.map49
-rw-r--r--lib/edit/k_info.txt6418
-rw-r--r--lib/edit/maeglin.map85
-rw-r--r--lib/edit/misc.txt91
-rw-r--r--lib/edit/nirnaeth.map64
-rw-r--r--lib/edit/numenor.txt80
-rw-r--r--lib/edit/ow_info.txt447
-rw-r--r--lib/edit/p_info.txt1974
-rw-r--r--lib/edit/qrand1.map32
-rw-r--r--lib/edit/qrand10.map36
-rw-r--r--lib/edit/qrand11.map36
-rw-r--r--lib/edit/qrand12.map36
-rw-r--r--lib/edit/qrand14.map37
-rw-r--r--lib/edit/qrand5.map27
-rw-r--r--lib/edit/qrand6.map37
-rw-r--r--lib/edit/qrand7.map35
-rw-r--r--lib/edit/r_info.txt18978
-rw-r--r--lib/edit/ra_info.txt1927
-rw-r--r--lib/edit/re_info.txt183
-rw-r--r--lib/edit/readme.txt96
-rw-r--r--lib/edit/s_crypt.map109
-rw-r--r--lib/edit/s_death.map104
-rw-r--r--lib/edit/s_doom.map226
-rwxr-xr-xlib/edit/s_factory.map238
-rw-r--r--lib/edit/s_gates.map117
-rw-r--r--lib/edit/s_info.txt546
-rw-r--r--lib/edit/s_name.map110
-rw-r--r--lib/edit/s_orc.map109
-rwxr-xr-xlib/edit/s_ship.map239
-rw-r--r--lib/edit/set_info.txt77
-rw-r--r--lib/edit/special.txt67
-rw-r--r--lib/edit/spiders.map66
-rw-r--r--lib/edit/st_info.txt744
-rw-r--r--lib/edit/t_basic.txt80
-rw-r--r--lib/edit/t_bree.txt131
-rw-r--r--lib/edit/t_d_bree.txt101
-rw-r--r--lib/edit/t_d_gond.txt118
-rw-r--r--lib/edit/t_d_khaz.txt87
-rw-r--r--lib/edit/t_d_lori.txt101
-rw-r--r--lib/edit/t_d_mina.txt91
-rw-r--r--lib/edit/t_gondol.txt219
-rw-r--r--lib/edit/t_info.txt41
-rw-r--r--lib/edit/t_khazad.txt105
-rw-r--r--lib/edit/t_lorien.txt162
-rw-r--r--lib/edit/t_minas.txt144
-rw-r--r--lib/edit/t_pref.txt111
-rw-r--r--lib/edit/thieves.map70
-rw-r--r--lib/edit/thrain.map35
-rw-r--r--lib/edit/tr_info.txt817
-rw-r--r--lib/edit/trolls.map58
-rw-r--r--lib/edit/v_info.txt2287
-rw-r--r--lib/edit/volcano.txt83
-rw-r--r--lib/edit/w_info.txt120
-rw-r--r--lib/edit/wf_info.txt170
-rw-r--r--lib/edit/wights.map82
-rw-r--r--lib/edit/wolves.map55
-rw-r--r--lib/file/book-0.txt86
-rw-r--r--lib/file/book-1.txt83
-rw-r--r--lib/file/book-10.txt250
-rw-r--r--lib/file/book-101.txt4
-rw-r--r--lib/file/book-102.txt4
-rw-r--r--lib/file/book-103.txt6
-rw-r--r--lib/file/book-104.txt6
-rw-r--r--lib/file/book-105.txt7
-rw-r--r--lib/file/book-106.txt5
-rw-r--r--lib/file/book-107.txt6
-rw-r--r--lib/file/book-11.txt250
-rw-r--r--lib/file/book-12.txt250
-rw-r--r--lib/file/book-13.txt250
-rw-r--r--lib/file/book-14.txt250
-rw-r--r--lib/file/book-15.txt250
-rw-r--r--lib/file/book-16.txt250
-rw-r--r--lib/file/book-17.txt250
-rw-r--r--lib/file/book-18.txt250
-rw-r--r--lib/file/book-19.txt250
-rw-r--r--lib/file/book-2.txt90
-rw-r--r--lib/file/book-20.txt139
-rw-r--r--lib/file/book-200.txt5
-rw-r--r--lib/file/book-201.txt5
-rw-r--r--lib/file/book-202.txt5
-rw-r--r--lib/file/book-203.txt5
-rw-r--r--lib/file/book-4.txt11
-rw-r--r--lib/file/book-6.txt263
-rw-r--r--lib/file/book-7.txt141
-rw-r--r--lib/file/book-8.txt47
-rw-r--r--lib/file/book-9.txt240
-rw-r--r--lib/file/bravado.txt106
-rw-r--r--lib/file/chainswd.txt8
-rw-r--r--lib/file/dam_huge.txt9
-rw-r--r--lib/file/dam_lots.txt21
-rw-r--r--lib/file/dam_med.txt25
-rw-r--r--lib/file/dam_none.txt24
-rw-r--r--lib/file/dam_xxx.txt11
-rw-r--r--lib/file/dead.txt24
-rw-r--r--lib/file/death.txt351
-rw-r--r--lib/file/elvish.txt218
-rw-r--r--lib/file/error.txt67
-rw-r--r--lib/file/mondeath.txt334
-rw-r--r--lib/file/monfear.txt63
-rw-r--r--lib/file/monspeak.txt361
-rw-r--r--lib/file/news.txt24
-rw-r--r--lib/file/news2.txt24
-rw-r--r--lib/file/rart_f.txt86
-rw-r--r--lib/file/rart_s.txt87
-rw-r--r--lib/file/readme!36
-rw-r--r--lib/file/rumors.txt201
-rw-r--r--lib/file/sample.txt5
-rw-r--r--lib/file/sfail.txt34
-rw-r--r--lib/file/silly.txt301
-rw-r--r--lib/file/smeagol.txt29
-rw-r--r--lib/file/smeagolr.txt5
-rw-r--r--lib/file/speakpet.txt53
-rw-r--r--lib/file/timefun.txt92
-rw-r--r--lib/file/timenorm.txt83
-rw-r--r--lib/help/TANG.txt134
-rw-r--r--lib/help/ability.txt115
-rw-r--r--lib/help/advanced.hlp15
-rw-r--r--lib/help/attack.txt148
-rw-r--r--lib/help/automat.txt504
-rw-r--r--lib/help/birth.txt593
-rw-r--r--lib/help/bldg.txt59
-rw-r--r--lib/help/c_alchem.txt135
-rw-r--r--lib/help/c_archer.txt68
-rw-r--r--lib/help/c_assass.txt58
-rw-r--r--lib/help/c_axemas.txt51
-rw-r--r--lib/help/c_bard.txt69
-rw-r--r--lib/help/c_demono.txt54
-rw-r--r--lib/help/c_druid.txt55
-rw-r--r--lib/help/c_geoman.txt59
-rw-r--r--lib/help/c_hafted.txt54
-rw-r--r--lib/help/c_lorema.txt54
-rw-r--r--lib/help/c_mage.txt67
-rw-r--r--lib/help/c_merch.txt29
-rw-r--r--lib/help/c_mimic.txt53
-rw-r--r--lib/help/c_mindcr.txt57
-rw-r--r--lib/help/c_monk.txt87
-rw-r--r--lib/help/c_necro.txt80
-rw-r--r--lib/help/c_palad.txt49
-rw-r--r--lib/help/c_polear.txt52
-rw-r--r--lib/help/c_posses.txt70
-rw-r--r--lib/help/c_pr_drk.txt57
-rw-r--r--lib/help/c_pr_eru.txt55
-rw-r--r--lib/help/c_pr_man.txt54
-rw-r--r--lib/help/c_priest.txt13
-rw-r--r--lib/help/c_ranger.txt55
-rw-r--r--lib/help/c_rogue.txt62
-rw-r--r--lib/help/c_runecr.txt110
-rw-r--r--lib/help/c_sorcer.txt68
-rw-r--r--lib/help/c_summon.txt80
-rw-r--r--lib/help/c_swordm.txt52
-rw-r--r--lib/help/c_symbia.txt68
-rw-r--r--lib/help/c_thaum.txt84
-rw-r--r--lib/help/c_unbel.txt65
-rw-r--r--lib/help/c_warper.txt60
-rw-r--r--lib/help/c_warrio.txt54
-rw-r--r--lib/help/command.txt1252
-rw-r--r--lib/help/corspoil.txt136
-rw-r--r--lib/help/debug.txt278
-rw-r--r--lib/help/def.aux3
-rw-r--r--lib/help/defines.txt639
-rw-r--r--lib/help/dungeon.txt706
-rw-r--r--lib/help/dunspoil.txt173
-rw-r--r--lib/help/essences.txt219
-rw-r--r--lib/help/experien.hlp28
-rw-r--r--lib/help/explore.hlp16
-rw-r--r--lib/help/fatespoi.txt28
-rw-r--r--lib/help/foot.aux4
-rw-r--r--lib/help/g_eru.txt65
-rw-r--r--lib/help/g_manwe.txt62
-rw-r--r--lib/help/g_melkor.txt64
-rw-r--r--lib/help/g_tulkas.txt45
-rw-r--r--lib/help/g_yavann.txt62
-rw-r--r--lib/help/gambling.txt29
-rw-r--r--lib/help/general.txt39
-rw-r--r--lib/help/gods.txt38
-rw-r--r--lib/help/head.aux10
-rw-r--r--lib/help/help.hlp33
-rw-r--r--lib/help/index.txt592
-rw-r--r--lib/help/inscrip.txt65
-rw-r--r--lib/help/lua.hlp34
-rw-r--r--lib/help/lua_gf.txt45
-rw-r--r--lib/help/lua_intr.txt133
-rw-r--r--lib/help/lua_mon.txt535
-rw-r--r--lib/help/lua_play.txt1225
-rw-r--r--lib/help/lua_pow.txt266
-rw-r--r--lib/help/lua_ques.txt299
-rw-r--r--lib/help/lua_skil.txt342
-rw-r--r--lib/help/lua_spel.txt2150
-rw-r--r--lib/help/lua_util.txt898
-rw-r--r--lib/help/luckspoi.txt112
-rw-r--r--lib/help/m_air.txt42
-rw-r--r--lib/help/m_convey.txt71
-rw-r--r--lib/help/m_demono.txt44
-rw-r--r--lib/help/m_divin.txt37
-rw-r--r--lib/help/m_earth.txt35
-rw-r--r--lib/help/m_fire.txt49
-rw-r--r--lib/help/m_geoman.txt75
-rw-r--r--lib/help/m_mana.txt39
-rw-r--r--lib/help/m_meta.txt75
-rw-r--r--lib/help/m_mimic.txt33
-rw-r--r--lib/help/m_mind.txt49
-rw-r--r--lib/help/m_mindcr.txt54
-rw-r--r--lib/help/m_music.txt77
-rw-r--r--lib/help/m_nature.txt53
-rw-r--r--lib/help/m_necrom.txt35
-rw-r--r--lib/help/m_symbio.txt50
-rw-r--r--lib/help/m_tempo.txt41
-rw-r--r--lib/help/m_thaum.txt31
-rw-r--r--lib/help/m_udun.txt35
-rw-r--r--lib/help/m_water.txt33
-rw-r--r--lib/help/macrofaq.txt2366
-rw-r--r--lib/help/magic.hlp41
-rw-r--r--lib/help/magic.txt143
-rw-r--r--lib/help/newbie.hlp16
-rw-r--r--lib/help/option.txt715
-rw-r--r--lib/help/r_beorn.txt33
-rw-r--r--lib/help/r_deathm.txt33
-rw-r--r--lib/help/r_drkelf.txt33
-rw-r--r--lib/help/r_dunad.txt32
-rw-r--r--lib/help/r_dwarf.txt39
-rw-r--r--lib/help/r_elf.txt32
-rw-r--r--lib/help/r_ent.txt39
-rw-r--r--lib/help/r_gnome.txt36
-rw-r--r--lib/help/r_hafelf.txt31
-rw-r--r--lib/help/r_hafogr.txt31
-rw-r--r--lib/help/r_hielf.txt34
-rw-r--r--lib/help/r_hobbit.txt37
-rw-r--r--lib/help/r_human.txt23
-rw-r--r--lib/help/r_kobold.txt31
-rw-r--r--lib/help/r_maia.txt22
-rw-r--r--lib/help/r_orc.txt35
-rw-r--r--lib/help/r_pettyd.txt30
-rw-r--r--lib/help/r_rohank.txt33
-rw-r--r--lib/help/r_thlord.txt32
-rw-r--r--lib/help/r_troll.txt34
-rw-r--r--lib/help/r_wodelf.txt37
-rw-r--r--lib/help/r_yeek.txt30
-rw-r--r--lib/help/rm_barb.txt38
-rw-r--r--lib/help/rm_class.txt14
-rw-r--r--lib/help/rm_herm.txt36
-rw-r--r--lib/help/rm_lsoul.txt26
-rw-r--r--lib/help/rm_skel.txt40
-rw-r--r--lib/help/rm_spec.txt44
-rw-r--r--lib/help/rm_vamp.txt32
-rw-r--r--lib/help/rm_zomb.txt39
-rw-r--r--lib/help/skills.txt539
-rw-r--r--lib/help/spoil_faq.txt73
-rw-r--r--lib/help/spoiler.hlp18
-rw-r--r--lib/help/tome_faq.txt381
-rw-r--r--lib/help/version.txt354
-rw-r--r--lib/help/whattome.txt30
-rw-r--r--lib/help/wishing.txt24
-rw-r--r--lib/info/delete.me1
-rw-r--r--lib/mods/mods_aux.lua185
-rw-r--r--lib/mods/modules.lua5
-rw-r--r--lib/module.lua36
-rw-r--r--lib/note/delete.me1
-rw-r--r--lib/patch/delete.me1
-rw-r--r--lib/pref/422color.prf909
-rw-r--r--lib/pref/colors.prf53
-rw-r--r--lib/pref/font-ami.prf28
-rw-r--r--lib/pref/font-dos.prf8
-rw-r--r--lib/pref/font-ibm.prf363
-rw-r--r--lib/pref/font-mac.new108
-rw-r--r--lib/pref/font-mac.prf18
-rw-r--r--lib/pref/font-win.prf298
-rw-r--r--lib/pref/font-x11.prf22
-rw-r--r--lib/pref/font-xxx.prf472
-rw-r--r--lib/pref/font.prf60
-rw-r--r--lib/pref/graf-ami.prf64
-rw-r--r--lib/pref/graf-dos.prf15
-rw-r--r--lib/pref/graf-ibm.prf6237
-rw-r--r--lib/pref/graf-iso.prf6875
-rw-r--r--lib/pref/graf-mac.prf15
-rw-r--r--lib/pref/graf-new.prf6844
-rw-r--r--lib/pref/graf-sdl.prf37
-rw-r--r--lib/pref/graf-win.prf16
-rw-r--r--lib/pref/graf-x11.prf37
-rw-r--r--lib/pref/graf-xxx.prf6345
-rw-r--r--lib/pref/graf.prf51
-rw-r--r--lib/pref/pref-acn.prf24
-rw-r--r--lib/pref/pref-ami.prf7
-rw-r--r--lib/pref/pref-emx.prf19
-rw-r--r--lib/pref/pref-gcu.prf70
-rw-r--r--lib/pref/pref-iso.prf118
-rw-r--r--lib/pref/pref-mac.prf243
-rw-r--r--lib/pref/pref-sdl.prf144
-rw-r--r--lib/pref/pref-win.prf534
-rw-r--r--lib/pref/pref-x11.prf413
-rw-r--r--lib/pref/pref.prf311
-rw-r--r--lib/pref/trap-iso.prf429
-rw-r--r--lib/pref/trap-xxx.prf428
-rw-r--r--lib/pref/user.prf50
-rw-r--r--lib/pref/xtra-gcu.prf34
-rw-r--r--lib/pref/xtra-new.prf1128
-rw-r--r--lib/pref/xtra-xxx.prf137
-rw-r--r--lib/save/delete.me1
-rw-r--r--lib/scpt/bounty.lua90
-rw-r--r--lib/scpt/corrupt.lua440
-rw-r--r--lib/scpt/drunk.lua21
-rw-r--r--lib/scpt/fireprof.lua480
-rw-r--r--lib/scpt/god.lua640
-rw-r--r--lib/scpt/gods.lua26
-rw-r--r--lib/scpt/help.lua411
-rw-r--r--lib/scpt/init.lua46
-rw-r--r--lib/scpt/intro.lua105
-rw-r--r--lib/scpt/joke.lua31
-rw-r--r--lib/scpt/library.lua513
-rw-r--r--lib/scpt/mimic.lua385
-rw-r--r--lib/scpt/mkeys.lua95
-rw-r--r--lib/scpt/player.lua76
-rw-r--r--lib/scpt/powers.lua61
-rw-r--r--lib/scpt/s_air.lua193
-rw-r--r--lib/scpt/s_convey.lua227
-rw-r--r--lib/scpt/s_demon.lua337
-rw-r--r--lib/scpt/s_divin.lua230
-rw-r--r--lib/scpt/s_earth.lua184
-rw-r--r--lib/scpt/s_eru.lua130
-rw-r--r--lib/scpt/s_fire.lua227
-rw-r--r--lib/scpt/s_geom.lua656
-rw-r--r--lib/scpt/s_mana.lua132
-rw-r--r--lib/scpt/s_manwe.lua144
-rw-r--r--lib/scpt/s_melkor.lua154
-rw-r--r--lib/scpt/s_meta.lua287
-rw-r--r--lib/scpt/s_mind.lua132
-rw-r--r--lib/scpt/s_music.lua443
-rw-r--r--lib/scpt/s_nature.lua152
-rw-r--r--lib/scpt/s_stick.lua444
-rw-r--r--lib/scpt/s_tempo.lua162
-rw-r--r--lib/scpt/s_tulkas.lua81
-rw-r--r--lib/scpt/s_udun.lua180
-rw-r--r--lib/scpt/s_water.lua154
-rw-r--r--lib/scpt/s_yavann.lua157
-rw-r--r--lib/scpt/spells.lua475
-rw-r--r--lib/scpt/stores.lua151
-rw-r--r--lib/scpt/test.lua364
-rw-r--r--lib/user/automat.atm0
-rw-r--r--lib/user/delete.me1
-rw-r--r--lib/xtra/ang16.bdf5017
-rw-r--r--lib/xtra/angband.fntbin0 -> 4096 bytes
-rw-r--r--lib/xtra/font/10X20.FONbin0 -> 8704 bytes
-rw-r--r--lib/xtra/font/12X24.FONbin0 -> 9728 bytes
-rw-r--r--lib/xtra/font/5X8.FONbin0 -> 4608 bytes
-rw-r--r--lib/xtra/font/6X10.FONbin0 -> 4608 bytes
-rw-r--r--lib/xtra/font/6X12.FONbin0 -> 5120 bytes
-rw-r--r--lib/xtra/font/6X13.FONbin0 -> 5120 bytes
-rw-r--r--lib/xtra/font/6X13B.FONbin0 -> 5120 bytes
-rw-r--r--lib/xtra/font/6X9.FONbin0 -> 4608 bytes
-rw-r--r--lib/xtra/font/7X13.FONbin0 -> 5120 bytes
-rw-r--r--lib/xtra/font/7X13B.FONbin0 -> 5120 bytes
-rw-r--r--lib/xtra/font/8X13.FONbin0 -> 5120 bytes
-rw-r--r--lib/xtra/font/8X13B.FONbin0 -> 5120 bytes
-rw-r--r--lib/xtra/font/9X15.FONbin0 -> 7168 bytes
-rw-r--r--lib/xtra/font/9X15B.FONbin0 -> 7168 bytes
-rw-r--r--lib/xtra/font/VeraMono.ttfbin0 -> 49224 bytes
-rw-r--r--lib/xtra/font/XM10X17.FNTbin0 -> 3286 bytes
-rw-r--r--lib/xtra/font/XM10X17B.FNTbin0 -> 3286 bytes
-rw-r--r--lib/xtra/font/XM12X20.FNTbin0 -> 3856 bytes
-rw-r--r--lib/xtra/font/XM12X20B.FNTbin0 -> 3856 bytes
-rw-r--r--lib/xtra/font/XM16X25.FNTbin0 -> 4806 bytes
-rw-r--r--lib/xtra/font/XM16X25B.FNTbin0 -> 4806 bytes
-rw-r--r--lib/xtra/font/XM5X8.FNTbin0 -> 1679 bytes
-rw-r--r--lib/xtra/font/XM6X12.FNTbin0 -> 2061 bytes
-rw-r--r--lib/xtra/font/XM6X12B.FNTbin0 -> 2059 bytes
-rw-r--r--lib/xtra/font/XM8X16B.FNTbin0 -> 2439 bytes
-rw-r--r--lib/xtra/font/xm4x6.fntbin0 -> 1489 bytes
-rw-r--r--lib/xtra/font/xm8x13.fntbin0 -> 2156 bytes
-rw-r--r--lib/xtra/font/xm8x13b.fntbin0 -> 2154 bytes
-rw-r--r--lib/xtra/font/xm8x16.fntbin0 -> 2441 bytes
-rw-r--r--lib/xtra/graf/16x16.bmpbin0 -> 1164238 bytes
-rw-r--r--lib/xtra/graf/16x16.pngbin0 -> 210021 bytes
-rw-r--r--lib/xtra/graf/8x8.bmpbin0 -> 203830 bytes
-rw-r--r--lib/xtra/graf/8x8.pngbin0 -> 44451 bytes
-rw-r--r--lib/xtra/graf/mask.bmpbin0 -> 1164342 bytes
-rw-r--r--lib/xtra/graf/tome-128.pngbin0 -> 45589 bytes
-rw-r--r--lib/xtra/music/delete.me1
-rw-r--r--lib/xtra/sound/Sound.cfg79
-rw-r--r--lib/xtra/sound/readme.txt33
-rw-r--r--src/.#dungeon.c.1.279.2.46140
-rw-r--r--src/.gitignore3
-rw-r--r--src/A-mac-h.pch104
-rw-r--r--src/ENGLISH.txt35
-rw-r--r--src/angband.h102
-rw-r--r--src/angband.icobin0 -> 766 bytes
-rw-r--r--src/angband.rc132
-rw-r--r--src/birth.c3920
-rw-r--r--src/bldg.c2273
-rw-r--r--src/carbon/Angband.icnsbin0 -> 66668 bytes
-rw-r--r--src/carbon/Carbon.r1568
-rw-r--r--src/carbon/Data.icnsbin0 -> 36416 bytes
-rw-r--r--src/carbon/Edit.icnsbin0 -> 35735 bytes
-rw-r--r--src/carbon/Image-DS_Storebin0 -> 6148 bytes
-rw-r--r--src/carbon/Info.plist39
-rw-r--r--src/carbon/Save.icnsbin0 -> 43952 bytes
-rwxr-xr-xsrc/carbon/getversion2
-rw-r--r--src/cave.c5266
-rw-r--r--src/cmd1.c5501
-rw-r--r--src/cmd2.c5266
-rw-r--r--src/cmd3.c2531
-rw-r--r--src/cmd4.c4808
-rw-r--r--src/cmd5.c2583
-rw-r--r--src/cmd6.c7948
-rw-r--r--src/cmd7.c7984
-rw-r--r--src/cmovie.c514
-rw-r--r--src/config.h584
-rw-r--r--src/defines.h4722
-rw-r--r--src/dungeon.c6149
-rw-r--r--src/dungeon.pkg1618
-rw-r--r--src/externs.h1920
-rw-r--r--src/files.c7219
-rw-r--r--src/gen_evol.c159
-rw-r--r--src/gen_maze.c297
-rw-r--r--src/generate.c9024
-rw-r--r--src/ghost.c1140
-rw-r--r--src/gods.c140
-rw-r--r--src/h-basic.h25
-rw-r--r--src/h-config.h318
-rw-r--r--src/h-define.h133
-rw-r--r--src/h-system.h141
-rw-r--r--src/h-type.h185
-rw-r--r--src/help.c23
-rw-r--r--src/init1.c12170
-rw-r--r--src/init2.c6891
-rw-r--r--src/irc.c297
-rw-r--r--src/iso/hackdef.h44
-rw-r--r--src/iso/readme.txt6
-rw-r--r--src/iso/simgraph.c1429
-rw-r--r--src/iso/simgraph.h159
-rw-r--r--src/iso/simsys.h197
-rw-r--r--src/iso/simview.c87
-rw-r--r--src/iso/simview.h41
-rw-r--r--src/iso/walls4.h288
-rw-r--r--src/iso/walls9.h288
-rw-r--r--src/iso/world_adaptor.c226
-rw-r--r--src/iso/world_adaptor.h117
-rw-r--r--src/iso/world_view.c499
-rw-r--r--src/iso/world_view.h49
-rw-r--r--src/lauxlib.h100
-rw-r--r--src/levels.c240
-rw-r--r--src/load_gif.c384
-rw-r--r--src/loadsave.c3977
-rw-r--r--src/lua/array.lua203
-rw-r--r--src/lua/basic.lua190
-rw-r--r--src/lua/class.lua85
-rw-r--r--src/lua/clean.lua74
-rw-r--r--src/lua/code.lua73
-rw-r--r--src/lua/container.lua311
-rw-r--r--src/lua/declaration.lua399
-rw-r--r--src/lua/define.lua72
-rw-r--r--src/lua/doit.lua73
-rw-r--r--src/lua/enumerate.lua93
-rw-r--r--src/lua/feature.lua72
-rw-r--r--src/lua/function.lua317
-rw-r--r--src/lua/lapi.c494
-rw-r--r--src/lua/lapi.h17
-rw-r--r--src/lua/lauxlib.c216
-rw-r--r--src/lua/lauxlib.h100
-rw-r--r--src/lua/lbaselib.c651
-rw-r--r--src/lua/lcode.c701
-rw-r--r--src/lua/lcode.h70
-rw-r--r--src/lua/ldblib.c188
-rw-r--r--src/lua/ldebug.c466
-rw-r--r--src/lua/ldebug.h21
-rw-r--r--src/lua/ldo.c385
-rw-r--r--src/lua/ldo.h33
-rw-r--r--src/lua/lfunc.c109
-rw-r--r--src/lua/lfunc.h24
-rw-r--r--src/lua/lgc.c353
-rw-r--r--src/lua/lgc.h18
-rw-r--r--src/lua/liolib.c710
-rw-r--r--src/lua/llex.c411
-rw-r--r--src/lua/llex.h72
-rw-r--r--src/lua/llimits.h204
-rw-r--r--src/lua/lmem.c150
-rw-r--r--src/lua/lmem.h42
-rw-r--r--src/lua/lobject.c125
-rw-r--r--src/lua/lobject.h204
-rw-r--r--src/lua/lopcodes.h168
-rw-r--r--src/lua/lparser.c1129
-rw-r--r--src/lua/lparser.h60
-rw-r--r--src/lua/lstate.c121
-rw-r--r--src/lua/lstate.h77
-rw-r--r--src/lua/lstring.c155
-rw-r--r--src/lua/lstring.h37
-rw-r--r--src/lua/lstrlib.c621
-rw-r--r--src/lua/ltable.c303
-rw-r--r--src/lua/ltable.h34
-rw-r--r--src/lua/ltests.c543
-rw-r--r--src/lua/ltm.c163
-rw-r--r--src/lua/ltm.h59
-rw-r--r--src/lua/lua.h248
-rw-r--r--src/lua/lua2c.lua29
-rw-r--r--src/lua/luadebug.h46
-rw-r--r--src/lua/lualib.h34
-rw-r--r--src/lua/lundump.c244
-rw-r--r--src/lua/lundump.h35
-rw-r--r--src/lua/lvm.c710
-rw-r--r--src/lua/lvm.h32
-rw-r--r--src/lua/lzio.c84
-rw-r--r--src/lua/lzio.h53
-rw-r--r--src/lua/module.lua69
-rw-r--r--src/lua/operator.lua111
-rw-r--r--src/lua/package.lua222
-rw-r--r--src/lua/print.h55
-rw-r--r--src/lua/tolua.c149
-rw-r--r--src/lua/tolua.h123
-rw-r--r--src/lua/tolua_bd.c214
-rw-r--r--src/lua/tolua_eh.c66
-rw-r--r--src/lua/tolua_eh.h24
-rw-r--r--src/lua/tolua_gp.c197
-rw-r--r--src/lua/tolua_lb.c160
-rw-r--r--src/lua/tolua_rg.c243
-rw-r--r--src/lua/tolua_rg.h22
-rw-r--r--src/lua/tolua_tm.c585
-rw-r--r--src/lua/tolua_tm.h32
-rw-r--r--src/lua/tolua_tt.c316
-rw-r--r--src/lua/tolua_tt.h31
-rw-r--r--src/lua/tolualua.c2975
-rw-r--r--src/lua/tolualua.h2713
-rw-r--r--src/lua/tolualua.pkg21
-rw-r--r--src/lua/typedef.lua59
-rw-r--r--src/lua/variable.lua192
-rw-r--r--src/lua/verbatim.lua77
-rw-r--r--src/lua_bind.c652
-rw-r--r--src/maid-x11.c894
-rw-r--r--src/maim-iso.c873
-rw-r--r--src/main-ami.c3250
-rw-r--r--src/main-cap.c1075
-rw-r--r--src/main-crb.c6450
-rw-r--r--src/main-dmy.c315
-rw-r--r--src/main-dos.c2417
-rw-r--r--src/main-emx.c1268
-rw-r--r--src/main-gcu.c1261
-rw-r--r--src/main-gtk.c5251
-rw-r--r--src/main-gtk2.c5412
-rw-r--r--src/main-ibm.c1594
-rw-r--r--src/main-lsl.c598
-rw-r--r--src/main-mac.c5504
-rw-r--r--src/main-net.c442
-rw-r--r--src/main-ros.c8670
-rw-r--r--src/main-sdl-iso.c1969
-rw-r--r--src/main-sdl.c2865
-rw-r--r--src/main-sla.c455
-rw-r--r--src/main-vme.c1198
-rw-r--r--src/main-win.c4486
-rw-r--r--src/main-x11.c3295
-rw-r--r--src/main-x11.c.orig3299
-rw-r--r--src/main-x11.c.rej17
-rw-r--r--src/main-xaw.c1993
-rw-r--r--src/main-xxx.c785
-rw-r--r--src/main.c1076
-rw-r--r--src/makefile.WHICH64
-rw-r--r--src/makefile.ami110
-rw-r--r--src/makefile.bcc222
-rw-r--r--src/makefile.bsd298
-rw-r--r--src/makefile.cyg433
-rw-r--r--src/makefile.dos169
-rw-r--r--src/makefile.emx205
-rw-r--r--src/makefile.gdb155
-rw-r--r--src/makefile.ibm165
-rw-r--r--src/makefile.lsl42
-rw-r--r--src/makefile.mingw431
-rw-r--r--src/makefile.my519
-rw-r--r--src/makefile.osx210
-rw-r--r--src/makefile.ros159
-rw-r--r--src/makefile.sdliso496
-rw-r--r--src/makefile.std566
-rw-r--r--src/makefile.wat71
-rw-r--r--src/makefile.win206
-rw-r--r--src/melee1.c3108
-rw-r--r--src/melee2.c7837
-rw-r--r--src/modules.c289
-rw-r--r--src/monster.pkg2324
-rw-r--r--src/monster1.c1998
-rw-r--r--src/monster2.c4099
-rw-r--r--src/monster3.c679
-rw-r--r--src/notes.c189
-rw-r--r--src/object.pkg1171
-rw-r--r--src/object1.c6866
-rw-r--r--src/object2.c6663
-rw-r--r--src/player.pkg3525
-rw-r--r--src/player_c.pkg1060
-rw-r--r--src/plots.c473
-rw-r--r--src/plots.h47
-rw-r--r--src/powers.c1412
-rw-r--r--src/q_betwen.c190
-rw-r--r--src/q_dragons.c149
-rw-r--r--src/q_eol.c194
-rw-r--r--src/q_evil.c116
-rw-r--r--src/q_haunted.c145
-rw-r--r--src/q_hobbit.c195
-rw-r--r--src/q_invas.c233
-rw-r--r--src/q_main.c176
-rw-r--r--src/q_narsil.c118
-rw-r--r--src/q_nazgul.c115
-rw-r--r--src/q_nirna.c111
-rw-r--r--src/q_one.c363
-rw-r--r--src/q_poison.c237
-rw-r--r--src/q_rand.c442
-rw-r--r--src/q_shroom.c291
-rw-r--r--src/q_spider.c110
-rw-r--r--src/q_thief.c172
-rw-r--r--src/q_thrain.c246
-rw-r--r--src/q_troll.c180
-rw-r--r--src/q_ultrae.c11
-rw-r--r--src/q_ultrag.c276
-rw-r--r--src/q_wight.c156
-rw-r--r--src/q_wolves.c128
-rw-r--r--src/quest.pkg170
-rw-r--r--src/randart.c496
-rw-r--r--src/readdib.c342
-rw-r--r--src/readdib.h21
-rw-r--r--src/script.c641
-rw-r--r--src/skills.c1795
-rw-r--r--src/spells.pkg2498
-rw-r--r--src/spells1.c9412
-rw-r--r--src/spells2.c8214
-rw-r--r--src/squeltch.c551
-rw-r--r--src/status.c778
-rw-r--r--src/store.c4531
-rw-r--r--src/tables.c4804
-rw-r--r--src/traps.c3426
-rw-r--r--src/types.h2551
-rw-r--r--src/util.c4873
-rw-r--r--src/util.pkg2735
-rw-r--r--src/variable.c1628
-rw-r--r--src/wild.c1316
-rw-r--r--src/wizard1.c2830
-rw-r--r--src/wizard2.c2065
-rw-r--r--src/xtra1.c4855
-rw-r--r--src/xtra2.c7795
-rw-r--r--src/z-form.c831
-rw-r--r--src/z-form.h47
-rw-r--r--src/z-rand.c355
-rw-r--r--src/z-rand.h89
-rw-r--r--src/z-sock.c787
-rw-r--r--src/z-sock.h127
-rw-r--r--src/z-term.c3137
-rw-r--r--src/z-term.h363
-rw-r--r--src/z-util.c231
-rw-r--r--src/z-util.h84
-rw-r--r--src/z-virt.c187
-rw-r--r--src/z-virt.h179
-rw-r--r--src/z_pack.pkg693
-rw-r--r--tome.ini94
714 files changed, 466200 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7272d33
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.o
+*.~*
+*.#*
diff --git a/angdos.cfg b/angdos.cfg
new file mode 100644
index 0000000..d541b38
--- /dev/null
+++ b/angdos.cfg
@@ -0,0 +1,634 @@
+# File: angdos.cfg
+
+#
+# This file contains configuration data for Angband when compiled
+# (and run) with the "main-dos.c" file.
+#
+# It may also contain configuration data for the Allegro library,
+# which should (perhaps) precede the Angband configuration data.
+#
+
+
+#
+# Optional: graphics driver (Allegro)
+#
+# 1 = VGA mode 13h 2 = Mode-X
+# 3 = VESA 1.x 4 = VBE 2.0 (banked)
+# 5 = VBE 2.0 (linear) 6 = VBE/AF
+# 7 = Xtended mode 8 = ATI 18800/28800
+# 9 = ATI mach64 10 = Cirrus 64xx
+# 11 = Cirrus 54xx 12 = Paradise
+# 13 = S3 14 = Trident
+# 15 = Tseng ET3000 16 = Tseng ET4000
+# 17 = Video-7
+#
+### gfx_card =
+
+########### Sound-support settings ##########
+
+[sound]
+# Section containing sound configuration information, using the variables:
+# digi_card = x
+# Sets the driver to use for playing samples, where x is one of the values:
+# 0 = none 1 = SB (autodetect breed)
+# 2 = SB 1.0 3 = SB 1.5
+# 4 = SB 2.0 5 = SB Pro
+# 6 = SB16 7 = GUS (unfinished)
+
+# midi_card = x
+# Sets the driver to use for MIDI music, where x is one of the values:
+# 0 = none 1 = Adlib (autodetect OPL version)
+# 2 = OPL2 3 = Dual OPL2 (SB Pro-1)
+# 4 = OPL3 5 = SB MIDI interface
+# 6 = MPU-401 7 = GUS (unfinished)
+# 8 = DIGMID 9 = AWE32
+
+# digi_voices = x
+# Specifies the minimum number of voices to reserve for use by the digital
+# sound driver. How many are possible depends on the driver.
+
+# midi_voices = x
+# Specifies the minimum number of voices to reserve for use by the MIDI sound
+# driver. How many are possible depends on the driver.
+
+# flip_pan = x
+# Toggling this between 0 and 1 reverses the left/right panning of samples,
+# which might be needed because some SB cards get the stereo image the
+# wrong way round.
+
+# sb_port = x
+# Sets the port address of the SB (this is usually 220).
+
+# sb_dma = x
+# Sets the DMA channel for the SB (this is usually 1).
+
+# sb_irq = x
+# Sets the IRQ for the SB (this is usually 7).
+
+# sb_freq = x
+# Sets the sample frequency, which defaults to 16129. Possible values are:
+# 11906 - works with any SB
+# 16129 - works with any SB
+# 22727 - on SB 2.0 and above
+# 45454 - only on SB 2.0 or SB16 (not the stereo SB Pro driver)
+
+# fm_port = x
+# Sets the port address of the OPL synth (this is usually 388).
+
+# mpu_port = x
+# Sets the port address of the MPU-401 MIDI interface (this is usually 330).
+
+
+# Volume Settings:
+digi_volume = 0
+midi_volume = 0
+
+########### General Angband settings ##########
+
+[Angband]
+Graphics = 0
+Sound = 0
+
+Resolution = 2
+
+########### Screen Resolution 640 x 480 ##########
+
+[Mode-1]
+screen_wid = 640
+screen_hgt = 480
+
+Description =
+
+bitmap_wid = 8
+bitmap_hgt = 8
+
+bitmap_file = 8x8.gif
+
+num_windows = 3
+
+[Term-1-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 8
+tile_hgt = 13
+
+font_wid = 8
+font_hgt = 13
+
+font_file = xm8x13b.fnt
+
+[Term-1-1]
+
+x = 0
+y = 336
+
+cols = 80
+rows = 24
+
+tile_wid = 4
+tile_hgt = 6
+
+font_wid = 4
+font_hgt = 6
+
+font_file = xm4x6.fnt
+
+[Term-1-2]
+
+x = 320
+y = 336
+
+cols = 80
+rows = 24
+
+tile_wid = 4
+tile_hgt = 6
+
+font_wid = 4
+font_hgt = 6
+
+font_file = xm4x6.fnt
+
+
+########### Screen Resolution 640 x 480 ##########
+
+[Mode-2]
+screen_wid = 640
+screen_hgt = 480
+
+Description = with new graphics
+
+bitmap_wid = 16
+bitmap_hgt = 16
+
+bitmap_file = 16x16.gif
+
+graf-mode = new
+
+num_windows = 3
+
+[Term-2-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 8
+tile_hgt = 13
+
+font_wid = 8
+font_hgt = 13
+
+font_file = xm8x13b.fnt
+
+[Term-2-1]
+
+x = 0
+y = 336
+
+cols = 80
+rows = 24
+
+tile_wid = 4
+tile_hgt = 6
+
+font_wid = 4
+font_hgt = 6
+
+font_file = xm4x6.fnt
+
+[Term-2-2]
+
+x = 320
+y = 336
+
+cols = 80
+rows = 24
+
+tile_wid = 4
+tile_hgt = 6
+
+font_wid = 4
+font_hgt = 6
+
+font_file = xm4x6.fnt
+
+
+########## Screen Resolution 800 x 600 ##########
+
+[Mode-3]
+screen_wid = 800
+screen_hgt = 600
+
+Description =
+
+bitmap_wid = 8
+bitmap_hgt = 8
+
+bitmap_file = 8x8.gif
+
+num_windows = 3
+
+[Term-3-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 10
+tile_hgt = 17
+
+font_wid = 10
+font_hgt = 17
+
+font_file = xm10x17.fnt
+
+[Term-3-1]
+
+x = 0
+y = 408
+
+cols = 80
+rows = 24
+
+tile_wid = 5
+tile_hgt = 8
+
+font_wid = 5
+font_hgt = 8
+
+font_file = xm5x8.fnt
+
+[Term-3-2]
+
+x = 400
+y = 408
+
+cols = 80
+rows = 24
+
+tile_wid = 5
+tile_hgt = 8
+
+font_wid = 5
+font_hgt = 8
+
+font_file = xm5x8.fnt
+
+
+########## Screen Resolution 800 x 600 ##########
+
+[Mode-4]
+screen_wid = 800
+screen_hgt = 600
+
+Description = with new graphics
+
+bitmap_wid = 16
+bitmap_hgt = 16
+
+bitmap_file = 16x16.gif
+
+graf-mode = new
+
+num_windows = 3
+
+[Term-4-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 10
+tile_hgt = 17
+
+font_wid = 10
+font_hgt = 17
+
+font_file = xm10x17.fnt
+
+[Term-4-1]
+
+x = 0
+y = 408
+
+cols = 80
+rows = 24
+
+tile_wid = 5
+tile_hgt = 8
+
+font_wid = 5
+font_hgt = 8
+
+font_file = xm5x8.fnt
+
+[Term-4-2]
+
+x = 400
+y = 408
+
+cols = 80
+rows = 24
+
+tile_wid = 5
+tile_hgt = 8
+
+font_wid = 5
+font_hgt = 8
+
+font_file = xm5x8.fnt
+
+
+########## Screen Resolution 1024 x 768 ##########
+
+[Mode-5]
+screen_wid = 1024
+screen_hgt = 768
+
+Description =
+
+bitmap_wid = 8
+bitmap_hgt = 8
+
+bitmap_file = 8x8.gif
+
+num_windows = 3
+
+[Term-5-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 12
+tile_hgt = 20
+
+font_wid = 12
+font_hgt = 20
+
+font_file = xm12x20.fnt
+
+[Term-5-1]
+
+x = 0
+y = 480
+
+cols = 80
+rows = 24
+
+tile_wid = 6
+tile_hgt = 12
+
+font_wid = 6
+font_hgt = 12
+
+font_file = xm6x12.fnt
+
+[Term-5-2]
+
+x = 481
+y = 480
+
+cols = 80
+rows = 24
+
+tile_wid = 6
+tile_hgt = 12
+
+font_wid = 6
+font_hgt = 12
+
+font_file = xm6x12.fnt
+
+
+########## Screen Resolution 1024 x 768 ##########
+
+[Mode-6]
+screen_wid = 1024
+screen_hgt = 768
+
+Description = with new graphics
+
+bitmap_wid = 16
+bitmap_hgt = 16
+
+bitmap_file = 16x16.gif
+
+graf-mode = new
+
+num_windows = 3
+
+[Term-6-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 12
+tile_hgt = 20
+
+font_wid = 12
+font_hgt = 20
+
+font_file = xm12x20.fnt
+
+[Term-6-1]
+
+x = 0
+y = 480
+
+cols = 80
+rows = 24
+
+tile_wid = 6
+tile_hgt = 12
+
+font_wid = 6
+font_hgt = 12
+
+font_file = xm6x12.fnt
+
+[Term-6-2]
+
+x = 481
+y = 480
+
+cols = 80
+rows = 24
+
+tile_wid = 6
+tile_hgt = 12
+
+font_wid = 6
+font_hgt = 12
+
+font_file = xm6x12.fnt
+
+
+########## Screen Resolution 1280 x 1024 ##########
+
+[Mode-7]
+screen_wid = 1280
+screen_hgt = 1024
+
+Description =
+
+bitmap_wid = 8
+bitmap_hgt = 8
+
+bitmap_file = 8x8.gif
+
+num_windows = 3
+
+[Term-7-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 16
+tile_hgt = 25
+
+font_wid = 16
+font_hgt = 25
+
+font_file = xm16x25.fnt
+
+[Term-7-1]
+
+x = 0
+y = 610
+
+cols = 80
+rows = 24
+
+tile_wid = 8
+tile_hgt = 16
+
+font_wid = 8
+font_hgt = 16
+
+font_file = xm8x16.fnt
+
+[Term-7-2]
+
+x = 640
+y = 610
+
+cols = 80
+rows = 24
+
+tile_wid = 8
+tile_hgt = 16
+
+font_wid = 8
+font_hgt = 16
+
+font_file = xm8x16.fnt
+
+
+########## Screen Resolution 1280 x 1024 ##########
+
+[Mode-8]
+screen_wid = 1280
+screen_hgt = 1024
+
+Description = with new graphics
+
+bitmap_wid = 16
+bitmap_hgt = 16
+
+bitmap_file = 16x16.gif
+
+graf-mode = new
+
+num_windows = 3
+
+[Term-8-0]
+
+x = 0
+y = 0
+
+cols = 80
+rows = 24
+
+tile_wid = 16
+tile_hgt = 25
+
+font_wid = 16
+font_hgt = 25
+
+font_file = xm16x25.fnt
+
+[Term-8-1]
+
+x = 0
+y = 610
+
+cols = 80
+rows = 24
+
+tile_wid = 8
+tile_hgt = 16
+
+font_wid = 8
+font_hgt = 16
+
+font_file = xm8x16.fnt
+
+[Term-8-2]
+
+x = 640
+y = 610
+
+cols = 80
+rows = 24
+
+tile_wid = 8
+tile_hgt = 16
+
+font_wid = 8
+font_hgt = 16
+
+font_file = xm8x16.fnt
+
+########### Background settings ##########
+
+[Background]
+# Background-0 : Standard background
+# Background-1 : inven/equip
+# Background-2 : equip/inven
+# Background-3 : player (basic)
+# Background-4 : player (extra)
+# Background-5 : XXX
+# Background-6 : XXX
+# Background-7 : messages
+# Background-8 : overhead view
+# Background-9 : monster recall
+# Background-10 : object recall
+# Background-11 : XXX
+# Background-12 : snap-shot
+# Background-13 : XXX
+# Background-14 : XXX
+# Background-15 : borg messages
+# Background-16 : borg status
+
+Background-0 = backgrnd.gif
diff --git a/changes.old b/changes.old
new file mode 100644
index 0000000..dabf85a
--- /dev/null
+++ b/changes.old
@@ -0,0 +1,6027 @@
+24/10/1998 - PernAngband 2.9.9a
+- Added the DragonRider from the Anne McCaffrey's Books, masters of
+ teleportation.
+- The CTRL+l key leaves the game without saving
+- Added the Tanker point, like the mana point, but can only be refilled
+ by eating the Firestone (for DragonRiders)
+- Added the RohanKnight race, fast and wise
+- Added the Ent race, can grow trees, but slow
+- Removed some races from Zangband which were not enough tolkienian...
+- Added the BeastMaster class which can summon pets
+- Added the Blood of Life
+- DragonRider now can choose to breathe a bolt, a beam or a ball
+- Added the Unique level patch from Glenn Vanzanden
+- Added the Mage Staves , with new ego items:
+ -of Mana : multiply your max mana
+ -of Spell : Increase your spell power
+ -of Mana & Spell : try to find !:)
+ -of Power : Activate for some spell, they carry 2 spells
+ All the ego mage staves have a penalty to damage and to hit
+- Added The Mage Staff of Gandalf, extremely powerful but even rarer than
+ the One Ring !
+- Added the boots of jumping activatable for phase door every 10+d10 turns
+- Added Helm of the Dwarves and of the Noldor
+- Beastmasters' pets now give kill experience to the player
+- Added the Alchemist class which use power batteries to convert magic item
+- New unique level : Treasure room at level 11
+- Replaced the Trump Hound from the Trump realm by the Trump Home spell, which
+ allows the player to access to her/his home from everywhere in the dungeon
+- Added the new artifact The Ring of F'lar, which belonged to F'lar the
+ powerful DragonRider
+
+26/10/1998
+- Added potions of Mutation
+- Warrior-Mage now can choose Sorcery instead of Arcane
+- Invisibility, Potion of Invisibility, Ring of Invisibility and
+ The One Ring now has invisibility like in the Lord Of The Rings !!!
+- Added the parchments from Kamband
+
+30/10/1998
+- Ported PernAngband to the new Zangband 2.2.0
+- Added the mimic class
+- Some Zangband bugs are fixed
+- The DragonRider can now only teleport on known terrain, because they must
+ mentally show the destination to their dragons but to do this they MUST
+ have seen the destination before (like in the Anne McCaffrey books) !
+- The Ringwraiths are back!
+- Some uniques like Bert, Tom, Bill are back, while others (Gandalf, Fangorn)
+ are gone!
+- Morgoth and Sauron are back as the final quests
+
+01/11/1998 - PernAngband 3.0.0
+- All reference to Zangband have been removed
+- Added monster corpses
+- Added the Beastmaster Shanty for the beastmaster, the Mimic Tower for the
+ Mimic, and the Weaver Tower, where you can ask for corpse quests
+- The corpse quests require you to bring back to the weaver some corpse,
+ head,... of a kind of monster, and you'll get a reward, like maybe
+ the full knowledge about this monster, or some armor made with the corpse
+ (maybe dragon scale mail for dragon, ...)
+- Added susceptibility to fire, for the Ents! They take twice more damage from
+ fire, but it's hopefully cancelled by resist fire.
+- Changed some artifacts / unique monsters to be more pernish
+- Added a new armor type : the DragonRider flying suit[9,+0] resist fire/cold
+- New monster flag : PET , the monster is your pet when it's created
+- Added the army man which use the PET flag will be used to give you an army
+ in some future quest.
+
+03/11/1998
+- The exe file is now pernang.exe(in the dos version)
+- Replaced the AMBERITE monster flag by the DRAGONRIDER flag
+- Some Unique will have the PET flag so they will help you !
+- All the Amberite are now gone and replaced by DragonRiders or uniques
+ (with some of them friendly)
+- Can sell the Mage staves in the Weapon smith and Magic shop.
+- Now when an alchemist tries to extract a power from an item, if he can't
+ it won't show up again in the extractable list the next time
+- The DragonRider must eat more because of their dragon
+- The Troll Fortress quest
+- Added The Battle of the five armies quest !!!
+
+05/11/1998
+- Nature spell : Stop breeders
+- New ego item sword of life, it multiplies your max hitpoints
+- Now some Mimic forms give you bonuses to blows per round like the Vala:
+ +5 blows !!!
+- Added a new Unique : The Philosophy Teacher !
+- Pink horrors are replaced with 2 Blue horrors when they die
+- Bloodletters of Khorne drop a blade of chaos when they die
+- Absorb light mutation bug fixed (I think)
+- Vampires and vampire mimics no longer can get food in the inns.
+- Renamed the artifacts with their real names
+- Replaced the pattern by the Straight Road (idea from GSN-Band)
+- Replaced the pattern weapons with weapons of Valinor (idea from GSN-Band)
+- Player and monsters can't pass through the trees (unless they can fly:)
+- When a Dragonrider dies he drops some firestones
+- Added the Whip of Gothmog, which can be dropped by Gothmog when killed
+- Begin to add a new feature : the between
+- Add a great description of the Ents and the Rohan's Knights from Akhronath
+
+07/11/1998
+- The between is fully implemented now.
+- The dimension door spell is replaced by the between gate.
+ It put a between gate at the player position and at the destination
+ location. And when you walk on the between you are transported on the other
+ between gate. But the between is SO cold that when you are in you lose some
+ hp even if resistant or immune to cold! Only the dragonrider can go between
+ without taking damage.
+- Stole the Stone of Lore from Oangband ! :)
+- Monsters can't use the between now because of a bug
+- Now you can eat corpses and temporarily gain some of the powers of monsters!
+- Raise Death replaces Terror in the death realm, cast it on a monster corpse
+ on the floor and the monster is brought back to life!
+
+09/11/1998
+- Added the boomerang, the player wears them instead of the bow and with the 'f'
+ command (like for the bow) can throw them but them come back ... if they don't
+ break !
+- Add 2 boomerang artifacts
+- Add another dragonrider artifact belonging to Mardra
+- Add The Anchor of Space-Time, it prevents disruption of the space-time
+ continuum
+
+11/11/1998
+- Add the carry slot in the equipment, to wield monsters that can't move :)
+- Fixed a bug that prevented dragonriders from being summoned
+- Add a Neuter sex (for the neuter players) :-)
+- Add the Death Mold race (stolen from Kamband) :-)
+
+13/11/1998
+- Add in spell description the bonus of mage staves
+- Add the scroll of summon never-moving pet for wielding them !:)
+- When a monster is wielded it can attack monsters when you attack
+ It can sometimes attack the wielder too, because he/she is not in perfect
+ symbiosis
+- Muar the balrog is back and will drop Calris when killed
+- Add the Symbiotic realm, like a life realm for your monster
+- Add the Symbiant class which can be in perfect symbiosis with their monster
+
+15/11/1998
+- The number of artifacts is now 132
+- Add some spells to the symbiotic realm
+- Add a spell to use the spells of the monster you wear
+- Add a light-speed (nearly stop time) spell
+- Finished the Symbiotic realm, only two books because they can use their
+ monster's powers.
+
+18/11/1998
+- Warriors can now spread their attacks after level 34
+- The experience factor of the races can now be > than 255
+- The DragonRider need more experience to advance (+220%) because it's a REALLY
+ powerful race.
+- Monsters can now use the between but if they are not immune to cold they
+ will lose some hp
+- Added a health bar for the monster you are carrying ( MH xxxxx/xxxxx )
+- Added sanity (from Kamband) ( the line SN xxxxx/xxxxx in the window)
+- Stolen the aquatic monsters from Kamband
+- Add the Gods from Kamband and GSNBand
+- The Philosophy Teacher now causes insanity !:)
+- Now only the Symbiants can carry monsters in their inventory, in fact they
+ act like "living-books" !:)
+- Add the Tactics from ADOM. You can change the tactic in the Character window
+- Add a new town unique : Mathilde, the science student, she is in my class
+ and giggles all the time, don't kill her ! :)
+- Fixed bug : The carried monster cannot absorb damage done by itself !
+- The Battle of the five armies now has a reward (The Arkenstone)
+
+20/11/1998 - PernAngband 3.0.2
+- Now there will be some between gates randomly placed in the levels
+- If you are in great favor with your god they can resurrect you
+
+22/11/1998
+- Add Random artifacts from Kamband - They are junk items which can be
+ activated every few turns and their activation is chosen randomly
+- Fixed (I think) a bug in the unique levels
+- Add a flooded level type (enable those levels in the PernAngband options)
+ to make the aquatic monsters more useful
+- Gandalf and Fangorn are back as Friendly uniques
+- Changed the Necklace of the Dwarves into The Nauglamir to be more
+ Tolkien-like
+- Changed The Serpent of the Chaos into Dark God, Mighty Coder from Hell :)
+- Reworked the corpse system (stolen from Rangband), now they all have
+ different weights based on the monster weight. You can hack up the corpse
+ with 'h' and cure it with 'K'.
+
+24/11/1998
+- Add a new Unique : The Physics Teacher !
+- Changed the Town layout of Gondolin with the one made by Akhronath
+ with 2 quests : Hunt for Eol and Maeglin's Mine
+- Add a new Unique : Eol the Dark Elf
+- Stole the silly messages when you hit a monster from Kamband
+
+26/11/1998
+- Add a scroll of Craftmanship to enchant weapon's pval.
+- The first 300 monsters have received a weight
+- Add a new spell type : Identify, now you can have a Ball of identification !
+- Add a new set of object flags (mainly unused now) :-)
+- Add a NEVER_BLOW flag for object
+- Add the NEVER_BLOW flag to The Mage Staff of Gandalf to rebalance it.
+- Add a new ego item weapon : of Nothing (with the NEVER_BLOW flag) !! :)
+
+29/11/1998
+- Add a Harper (bard) class !!! they use music books and most
+ of their spells are prolonged in time, ex: you cast a hiding song,
+ and for each turn you lose some mana (breath) while the effect (invisibility)
+ continues. If you start singing another song the old one is stopped.
+ There is also a spell which costs no mana which is used to stop singing.
+- Stolen the *Defender* ego-item from Pziband
+- Stolen the Spectral ego-item from Pziband
+
+01/12/1998
+- Added musical instruments : you wear them in the bow slot and you can
+ activate them for a song. The longer the song lasts the longer it'll be
+ charging, you can stop the song by activating it when it sing.
+- Finished the Harpers
+- Now the Harper mana stat is Charisma !
+- New Artifact : The Palantir of Minas Tirith, which can be activated for
+ the list of the uniques of the level !
+- Added 3 new artifacts : The Harp of Master Robinton, The Drum of Piemur,
+ The Flute of Menolly
+- Added the Micro$oft quest at Minas Anor
+- Changed the niceness description of the gods
+- The Harper and ONLY the harper can use a musical instrument without any
+ chance of failure.
+- The wilderness size is now taken from misc.txt
+- All the monsters have a weight now ... pfff, it was a lot of work !:)
+- The Alchemists are easier to play
+- Add the Vapor quest at Minas Anor
+- Add the Rebellion in Gondolin(from Akhronath) quest at Gondolin
+
+02/12/1998 - PernAngband 3.0.4
+- Changed certain god realm name on the suggestion of Akhronath
+- Add the bounties list like in Kamband (OK, ok, stolen from Kamband) :)
+- Add the Fire-lizards, they are friendly
+- New roguelike command : 'i' for hack up corpse, 'I' for curing meat, 'C'
+ for Sacrificing at altars
+
+05/12/1998
+- Add the Power Mage class, like the Corrupted in Kamband, with 100 randomly
+ generated attack spells
+- Corrected the character generation bug !!!! Thanks to Tim Baker for the fix
+- Corrected the segmentation fault bug for the object 653. Thanks to Tim baker
+- Corrected the files.c bug in get_line(). Thanks to Tim baker
+- Add the GF_DESTRUCTION type of attack to allow Power Mage to have destruction
+- Changed the names of the songs, Thanks to Akhronath
+
+07/12/1998
+- Add the Eggs, some monsters (only Firelizards for the moment) can be found
+ as eggs and will hatch after a certain amount of time based on the monster
+ weight, you can also stop the development by "activating" them ('A' key),
+ or resume the development by activating them an other time.
+- Add the last of the Gondolin's quest from Akhronath :
+ Invasion of Gondolin (Danger level 90, with some funny stuff like Gothmog,
+ Muar,..., some Great hell wyrms) !!!
+- Fixed a bug which made it so when you drop your wielded monster you also
+ drop Nothing if you are not a Symbiant
+- You can imprint some monsters (Firelizards for now), when it has
+ been given an imprint it will follow you on each levels. They may not
+ appear on a certain level but they will be back for the next. To
+ imprint a monster you must find an egg, carry it on you and when it'll
+ hatch you'll give it the imprint
+- The Harper will begin the game with a Blue Firelizard egg
+
+09/12/1998
+- The Black market now generate items based on your level
+- Add a new shop : The Pet Shop where you can find some eggs
+
+12/12/1998
+- Your godly favor will go down when they resurrect you
+- Repaired a stupid bug : I haven't coded the Satisfy Hunger effect of the
+ Symbiant class !:)
+- Add the easy floor feature !!!
+- Add an always small dungeon option
+- The scrolls of Artifact Creation can now be used on rings and amulets
+
+15/12/1998
+- The One Ring is now "just" heavy cursed !:)
+- Add 3 new vaults
+
+18/12/1998
+- Add the fate : you can be fated to meet some monsters or to find an object
+ on a certain level or ..... to DIE (very rare). You don't know your
+ fate until a soothsayer or a scroll of divination shows it to you. You
+also get a feeling when entering a level where you will meet your fate.
+ In the future there will be more fates, like finding a great vault, an
+ artifact or even, as Murazor the Witch-King of Angmar, to never die by the
+ hands of a mortal !:)
+- Changed Trump Weapon to Dragon Weapon
+- Smeagol will now drop ......... A ring of invisibility (because the One Ring
+ would be a little too powerful :)
+
+23/12/1998
+- Replaced the Amber notation in the player characteristics by the old one
+ from Vanilla Angband
+- When the player is on a tree he can be hit by a monster for half
+ normal damage
+- Paladin and Priests are given a religion at the beginning
+- In the wizard spoiler creation (A + ") you can chose to make a spoiler for
+ batteries
+- The random artifacts now have a charging time (no more mass genocide every
+ turn)
+- Add a Soothsayer at Bree
+- Add the batteries of extra life, you can now make a sword of Life !
+
+25/12/1998
+- The Alchemists are now better fighters, equal to the rangers
+- New extremely powerful power for the Alchemist (level 30 and higher) :
+ Artifact creation !
+ They just have to chose the flags, the name and to suffer the bad side effect
+ like curse equipment, permanent stat loss, high failure rate and ..... they
+ have their artifact ! But they can't give it an activation !
+ They can also add some bad flags (like cursed, drain exp, ...) to reduce the
+ chance of failure. Merry Christmas ! :)
+- Add the Runecrafter class, they use runes instead of books (see birth.txt)
+- Cleaned the Alchemist's code
+
+27/12/1998 - PernAngband 3.0.7
+- Added (.... stolen from Sangband) the Pick of Erebor. It can be activated for
+ passing through secret passages in the walls.
+- The Potion of *Enlightenment* now show every grid of the dungeon, like the
+ debug command 'u', I just think it's more beautiful :)
+- WOOOOOOOH I'm sorry there was a BIG bug in the PernAngband 3.0.7 release.
+ The game was sometimes hanging without any solution to stop it !
+ After some hours of debugging I've found it, it resulted from the correction
+ of the bug of the glyph of warding! Now everything works (I hope)
+- Change the titles of the Runecrafter with the proposition of Jonathan R Lewis
+- Add TANG, The Angband Newbie Guide made by Chris Weisiger
+ (jmartin@inreach.com) It's in the help directory
+
+29/12/1998
+- Fixed a bug which allowed beastmasters to sing when they summon pets!
+- Fixed the bug in the Fate screen
+- Some cosmetic changes in the r_info.txt and birth.txt with the help of
+ Chris Weisiger (jmartin@inreach.com)
+- Add new ego-items for the musical instrument and the horn, there were
+ suggested by Akhronath
+- New sentence to say for the speaking unique pets
+- 4 new musical instrument artifacts from Akhronath and I'm happy to declare
+ there is 143 artifacts in PernAngband!
+- Added, .... stolen, 5 new artifact from Angband/64
+
+31/12/1998
+- Add the quiver slot to wield your ammo
+- A scroll of remove curse have 1 chance into (55-level) to reverse the curse
+ effect ie: a ring of speed (-2) can become a ring of speed (+2)
+
+01/01/1999
+- Add a new monster flag : MORTAL, which means that the monster is a mortal
+ being. It's used for the new fate : Never to die by the hand of a mortal
+ being. The orcs are considered mortal, but I'm not sure, it's not mentioned
+ in the silmarillion or the Lord of The Rings, the trolls are immortals along
+ with the dragons, BUT the Dragonriders are mortal and Dark God (Yes, let your
+ joy explode!) :-). But well, don't be afraid your preferred monsters
+ (Morgoth and Sauron) are immortals :-)
+ PS: If someone thinks that a monster should or not be mortal just email me
+ because I'm not certain for some (ok, ok a lot of) monsters
+
+03/01/1999
+- Add the ring of precognition which work as if the player had activated the
+ cheat mode (peek into object, monster, vault creation). There is no need
+ to say it's very rare :-)
+- Add the black breath concept from Tolkien. Beware now the weapons of morgul
+ they confer the black breath! The undead can also give it.
+
+05/01/1999
+- Changed the harpers ranking names, some racial histories with the ones from
+ Akhronath
+- The One Ring is now A LOT more powerful, because at the time you find it
+ you already have one or two immunities, your stats are near the max, plus
+ some other things that made it less useful. Now it confers 5 blows, mana x5
+ spell power x5, after all Sauron has put the most part of his power in it.
+ I also plan to change the activation.
+- Add 2 wand artifacts, The Wand of Stone to Mud of Thrain and the Wand of
+ Fire Balls of Mithrandir, they can be recharged at will and will never be
+ destroyed, for this purpose the new RECHARGE flags has been used (note :
+ it works only for the artifacts)
+
+07/01/1999
+- The runecaster is a little more playable at low levels and starts with a
+ Rune [Arrow] and a Rune [Fire]
+
+10/01/1999
+- The Chaos Warriors now get chaos resistance at level 25
+- The Maia mimics get +7 speed, the Vala mimics get +15 speed
+- Updated the Rebellion in Gondolin and Hunt for Eol quests with the help of
+ Akhronath (zzhou22876@aol.com)
+
+13/01/1999
+- Reimplemented the old magic system from vanilla to complement the new one
+ The old mage and priest are come back as the Wizard and the Prior
+
+17/01/1999
+- Add susceptibilities to fire, cold, acid, lightning, poison for the monsters.
+ ie: Now a white dragon will take a x3 damage from a fire attack.
+ Thanks to Jerome Wojcik <Jerome.Wojcik@lmcp.jussieu.fr> for his help.
+- Add the pets command (press P) from Zangband 2.2.3
+- Changed the Trump realm into the Dragon Realm (mainly just name changes)
+
+19/01/1999
+- Changed the activation of the One Ring
+- The One Ring is now Permanently cursed
+- The One Ring is no longer aggravating because of it's new summoning ability
+- It's now possible to run through the grass
+
+21/01/1999
+- Add the persistent dungeon option at birth
+- When a breeder multiplies it have a 7/100 chance of mutating into an other
+ monster. (in general a worse one) This would prevent monster farming abuse :)
+
+24/01/1999
+- NEW : the body changing feature! with a new class to use it. Your spirit
+ can leave your body to go into another one but while your spirit is alone
+ your max hp is of 1. When in the corpse of a monster your first blows are
+ the monster's one and you can use it's magical power. Your life is also
+ changed by the monster's one and you gain all it's abilities and resistances
+ while losing those of your real race because you have left your body.
+- Add a lot of new vaults mainly from Weisiger <jmartin@inreach.com>
+
+28/01/1999
+- Death Molds now can teleport onto store entrances
+- A new randart activation that fires light after absorbing the ambient one
+
+05/02/1999
+- Changed the Roguelike commands. Now ^G to sacrifice, $ to hack up a corpse
+ ^O to Cure meat
+- Updated the command.txt file
+- Add the AB's gfx for the weapon/armor
+- Multiple dungeons : The old levels 1-33 are now in the Mirkwood forest with
+ trees and grass, 34-66 are the Land of Mordor with mountain, wall and dirt
+ 67-127 are the Dungeon of Angband with wall and normal floor and occasionally
+ flooded levels (if chosen in the options).
+ The ability to levitate is now a GREAT advantage in the Mirkwood forest !
+ You can reach Mirkwood from Menegroth, Mordor from Minas Anor and Angband
+ from Gondolin. In the vanilla town there are three stairs.
+ When you take a staircase down in the last level of a dungeon you arrive back
+ in town.
+
+07/02/1999 - PernAngband 3.0.9
+- X in the roguelike mode for the pet commands
+- Updated the magic.txt file with the new classes
+
+09/02/1999
+- Updated version.txt, modified dungeon.txt
+- Shelob is now a little bit more powerful in order to make her the quest
+ monster of the last Mirkwood level.
+- The Vanilla books are now sellable in the magic shop/temple and the bookstore
+
+13/02/1999
+- New class : the Sorcerer, they can't wield any weapon useless it's a Mage
+ Staff and without it they are the WORST fighters of the game even bare-handed.
+ But to compensate this they are the BEST magical class : the can use any
+ book of any realm without having to learn the spell, but they also don't
+ gain any experience from casting a spell.
+- Added the susceptibilities flags to the monsters.
+
+15/02/1999
+- Stolen the exploring system (like the tactic one) from Angband/64
+- Fix the bug of vanilla town, now the vanilla town flag is saved
+- Ents are rebalanced, they have a -9 speed penalty
+- Tweaked the Troll Fortress quest to make it less easy
+
+21/02/1999
+- Corrected some bugs in the town files. The crashing wilderness bug
+ seem to be gone.
+
+23/02/1999
+- Fixed the bug of the traps. No more grey "invisible traps" on a level
+ covered with grass, same for the dirt
+- Updated the Gondolin town and quest with the Akhronath's ones
+- Enabled the S-lang support
+- A new script directory is in lib, it contain a file script.sl which indicate
+ every S-lang script files that must be loaded
+- Add the event's gestion to the slang script. An event is produced in certain
+ conditions (like a keypress,...) and a script can put an handle on it to have
+ a function called each time the event happens. I've made a stupid example
+ that use the key 'y' to shout at the monsters.
+ PS: Take a look at slang.txt in the help directory
+- Add the load/save function to the script
+
+24/02/1999 - PernAngband 3.1.0
+
+26/02/1999
+- I've finally successfully compiled Python. So the S-Lang support is replaced
+ with the python one. The 'y' key and the thieves quest are there too.
+- Stolen and modified intro.py from Pangband
+- The random quest bug is fixed (maybe :) ). I say maybe because as for the
+ wilderness one it doesn't happens by me so I can't test it :(
+- Today one of my dream have become true! With the help of a python script
+ I've made a new quest for the DragonRiders that can be given at the Weyr
+ of Arda in Menegroth. You enter forest area and the only thing you can use
+ is the flame of your dragon(no magic, no wands, ...). And you need to
+ destroy every thread while saving at least 50% of the trees, and your own
+ flame can consume them!
+
+28/02/1999
+- Yeah, the wilderness bug is now gone. And a minor bug which looks like the
+ the wilderness one is gone too. It happened when you try under certain
+ conditions to go in the wilderness with an imprinted pet.
+- Fixed the random quest bug
+- Fixed the inventory bug that when picking up an object said you have foo
+ in slot r and reorder it after that o the letter is no more r. I know it was
+ really annoying but well it's now gone :)
+- The undead races now start at night
+
+02/03/1999
+- The spectres can now pass through trees and mountains
+- A new dungeon type at Bree: The Upper reaches of Galgals(level 1-10) !
+- Changed the code for the different dungeon types. Now it's a lot easier to
+ add a new dungeon type. I'll maybe make a d_info.txt to define the dungeon
+ types
+- Add a new dungeon: The Volcano, you reach it by going to the north east of
+ Minas Anor. Level 30-45
+
+05/03/1999
+- Spectres can't pass through trees because trees are pure and natural
+ things :)
+- New dungeon type: The Hell !!! Level 500 to 530, Yes 530 ! With a little
+ present for you at the bottom... if you manage to survive :) I can just
+ said one more thing: don't go there with your level 1 character :)
+ You can reach it near the volcano hole.
+- Now fire balls can burn the trees
+- Invisibility now consume a lot of food
+- Fixed a strange bug with the pool of deep water... It was possible to
+ sacrifice at and to worship (before the crash:) one :). Thanks to Steve Dice
+- Add a very nasty surprise at level 1.... Moldoux, the defenceless mold with
+ 1 hp no powers, can't move, can't attack... Oh and if it's killed there just
+ one Great Wyrm of Power which can be summoned to avenge it !
+
+07/03/1999
+- The look command doesn't stop anymore on the trees, grass, ...
+
+07/03/1999 - PernAngband 3.1.2
+
+13/03/1999
+- Sorcerors have now a bad pseudo-id
+- Sorcerors have now a -25% penalty of hp
+- Add a scroll of deincarnation
+- Add the possibility to engrave the floor with some magic words found in some
+ parchments. The words are in Adunaic(Numeronean), Quenya, Sindarin or any
+ other tongues of Middle Earth. But the parchment also give useless words
+ with the useful ones, so you have to try different combinations.
+- No more "human" sex when randomly chosen
+
+16/03/1999
+- Mathilde will say the right sentences now
+- Fixed a bug in melee2.c which could produce an x and an y out of the limits
+- Disabled the engraving command for now because it's too unbalancing...
+- If you pray while low on hitpoints (< 20%) your god will do something to help
+ you, like summoning pets, curing wounds, killing enemies...
+
+19/03/1999
+- There is now a minimum level needed to enter some dungeons, to prevent
+ gaining great objects easily
+- Fixed the OLD bug of the pink horrors, now only 2 blue horrors
+ will be summoned
+- Fixed a bug with the tiles for the non unique DragonRiders
+
+21/03/1999
+- The Dragon realm users receive some experience for the kills of their pets
+- The Palantir of Minas Tirith now can teleport you next to the quest monster
+ but it'll take more time to recharge
+- Fixed the possessor's number of blows bug. Also the town uniques corpses (
+ Maggot, Martti, Mathilde) can't be used to attack because their attack is
+ moan with no damage
+- Added a faq (see pern_faq.txt)
+- Added a new monster ally, the Dolphiner. They came from the planet Pern
+ and can summon dragonriders, their friends. They are men riding dolphins
+
+******************** Attempts to rebalance the game **************************
+- Changed the xp modifiers of the new races in an attempt to make them more
+ balanced. Thanks to Shawn Cheng <mfighter@hotmail.com>
+- Invulnerability, Wraith Form and Life Multiplier now consume a *lot* of food
+- RohanKnight's gain less speed at each levels
+- Sound attacks of the harpers are less likely to stun...
+- IMPORTANT NOTE: At the character birth if you choose a forbidden class for
+ your race, you'll be considered as a cheater and the game won't be scored.
+ It's mainly to prevent the too powerful combination of Deathmold Mimic or
+ Deathmold Possessor. The characters made before the next release won't be
+ affected by that
+- Some more attempts that I don't remember :)
+- Changed the Mana and life multipliers, now mage staff of mana(100%) will
+ ADD 100% of mana to your max mana and not multiply it by 100 :)
+******************************************************************************
+
+23/03/1999
+- Replaced Menegroth by the new Lothlorien skilfully made by Akhronath
+ (zzhou22876@aol.com), with 2 new quests + The Battle of the Five Armies +
+ (only for DragonRiders) The Fight against a Threadfall
+ Thanks again Akhronath !
+- Deathmolds can now enter wilderness
+- Radically changed the score calculation, in the future it'll serve to choose
+ which characters must be turned into monsters. Note that the old score files
+ are compatible but the old scores mean nothing with the new system
+
+26/03/1999
+- Changed some aspect of the python implementation to make it more portable
+- The usleep python function may react strangely
+- When you pick up the same type of ammo that you wield in your quiver it
+ automatically combine with it
+- The specials levels are now restricted to a certain depth AND a certain
+ dungeon type
+- The number of collected bounties now count for the final score
+- Add a new option to not pick up monster's corpses. It's yes by default.
+ I've made it to avoid losing good characters by auto picking up a great
+ wyrm of power corpse and getting -500 speed !
+
+28/03/1999
+- Reimplemented the player ghosts, but in a different way. First the bone files
+ are a lot more complex to include more aspects of the dead character. Second,
+ only the best characters are allowed to become ghosts when they die, or commit
+ suicide, it's based on their final score. In the bone directory there is a new
+ file which held the name of the bone files that the player want to be used.
+ To add a bone file, put it in the bone directory, add it to the bones.txt file
+ and increment the number of bone file in the same file.
+ When a game is loaded it looks for this file, try to find some unallocated
+ ghosts and modify r_info with the new info from the ghost. When this is done
+the bone file is not used anymore because all the info is saved in the
+ player savefile. The race/class characteristics are not fully handled now.
+- Now even with a Mage Staff the Sorcerors have a penalty of -10 to hit/dam
+- A Vampire can now wield the Phial of Undeath without being scorched, while
+ all the other light artifacts scorch them
+
+30/03/1999
+- The Arcane Zap spell now works correctly
+- Updated the FAQ with the help of Leon Marrick
+- Updated magic.txt with the help of Leon Marrick
+- WOH ! Impressive ! Great work indeed ! Well, Andreas Koch has made a
+ powerful graphic editor for PernAngband !!!! And it has also drew some new
+ tiles! The editor is really impressive, you load the graphic file, the prf
+ file and you can assign a tile to every monsters/objects/... you want, just
+ with a click ! It can even scan the *_info.txt to search for new things that
+ are not in the current prf file and to add them !
+ You just need a big screen resolution(1152x864x16bits works for me)
+ Thanks for the great work Andreas(akoch@rbg.informatik.tu-darmstadt.de) !
+- The Archer class as suggested by Mike Hommel <jamul@hamumu.com>. They gain
+ some extra shot and might with levels and can also create ammo with rubble
+ and junks.
+
+05/04/1999
+- Fixed a bug in the Weyr of Arda at Lothlorien
+- Add the artifact's descriptions made by ... well I don't have his/her name.
+ Anyway, great work.
+- The rings of teleportation can now be activated but they'll be destroyed in
+ the process. It's like a last chance option :)
+
+08/04/1999
+- The uniques used in the special levels are no longer shown as killed in the
+ list and can only be created in the special level.
+ Note : This will only affect the new characters.
+- Fixed : When a Power Mage spell fails it is not cast anyway.
+- Wall creation works for Power Mage
+- Divia wrote some missing artifact descriptions
+
+12/04/1999
+- Reimplemented the engraving feature. There are some parchments in the
+ dungeon which contain Adunaic/Quenya/Sindarin/... words you can use to
+ engrave the floor with 'x'(']' in the roguelike keyset). You must read them
+ before engraving even if you know the words from your last game. Also the
+ inscription is magical and so needs some mana to work. So there is a new
+ and unique feature : each grid in the dungeon have some mana on it's own.
+ You can sense the mana of one grid by pressing 'X'('[' in the roguelike
+ keyset), but this is not very precise nor easy, it's based on the magical
+ ability. When an inscription is used it decrease the grid's mana and when
+ there is not enough mana the inscription don't work anymore. The maximum
+ mana of each grid is 255. i.e.: when you engrave the protection inscription
+ which use 8 mana on a grid with 80 mana, a monster won't be able to walk on
+ it for 80/8=10 turns, but well, this can save your life !
+ Note : There are not a lot of inscriptions, if you have some ideas, don't
+ hesitate, email me !
+
+14/04/1999
+- Changes in the r_info for the HAS_EGG flag as suggested by Akhronath
+- Bloodletters of Khorne only have a 20% chance of dropping Blade of Chaos
+
+17/04/1999
+- Raal's Tomes of Destruction have a 20% chance of dropping a Raal's Tome of
+ Destruction
+- Symbiants are more likely to receive the grow molds mutation
+
+20/04/1999
+- Quest monsters can not be pets or breeders
+- Can now place Trees(T), Mountain(M), Shallow & Deep lava(l, L) and
+ Shallow & Deep water(w, W) in the special levels
+- Add a new dungeon type: The lost city of Numenor which is mainly composed
+ of water and which can be found to the west of Bree
+********************* IMPORTANT *************************
+- The savefile from the old versions of PernAngband are no longer compatible
+ with the new one. It's mainly due to the new magic system but also some other
+ changes. I'm sorry but this would be hard to write a converter since all
+ the realm change (they have more spells) and so the books too and also the
+ way to remember which spells are known, forgotten, tried...
+*********************************************************
+
+22/04/1999
+- Some new graphics from Andreas Koch
+- Fixed the wilderness generation bug which sometimes hung the computer when
+ trying to go on a wilderness border
+- The features(in f_info.txt) have some flags now. This allows me to create 2
+ new types of wall: The Glass walls which you can see through but that you
+ can't pass and the Illusion walls that you can pass but not see through
+- The screen is now correctly redrawn when leaving/entering a body
+- Add the Wands of Wall Creation
+- Death Mold powers have moved to the activation command('U')
+
+24/04/1999
+- Your are no longer crushed when flying over trees/mountain without being a
+ DragonRider
+- The Vanilla feelings are back
+
+26/04/1999
+- All the spellbooks are now placed on the top of the inventory.
+- The Sorcerors can now use the Wizard and Prior books
+- The new magic system is ready. I'm just waiting for Akhronath and Shawn
+ Cheng. And now adding a new realm or an old fashioned magic system is
+ performed the same way and easily
+- Add the Illusionists from Kangband. Someone has asked for them so... :)
+
+28/04/1999
+- Finished the Valarin Realm
+- Between gates are now allowed in the vaults. To place them place 2 times a
+ number from 0 to 7. I.e.(from weisiger <jmartin@inreach.com>):
+ D:XXXXXXXXXXXXXXXXXXXXXXXXX
+ D:#,,,,,X&...@X..**&X....9X
+ D:#...&1X.,,,2X..**&X3...9X
+ D:#...&.X1,,,.X2.**3X....9X
+ D:#,,,,,X&...@X..**&X....9X
+ D:XXXXXXXXXXXXXXXXXXXXXXXXX
+ But BEWARE ! You MUST put the 2 occurrences of the number, no check are done
+ so it'll surely crash or bug if not ! You've been warmed.
+- You can now walk over the water with a Valarin spell
+
+30/04/1999
+- A monster on a between gate when the player is using the other is teleported
+ to the player location
+- Add some Between vaults from weisiger
+- Added the Sigaldry realm
+- The Rings and Amulets are now allowed to be random artifacts
+- You can use the between gates in the special levels via the numbers 4,5,6,7,
+ 8,9,0
+- Alchemists MUST wear gloves (no cesti nor gauntlets) in order to do alchemy.
+ They also begin the game with some gloves
+- Add a Potion of Learning which allow you to learn one more spell than you
+ normally can. No need to say that they are very rare
+- The more you learn spells in a realm the more efficient with that realm
+ you are
+
+02/05/1999
+- Implemented the Nether Realm
+
+09/05/1999
+- Magical stair at the bottom of each dungeon
+- Reworked the imprinted pet system, now it will work lot better
+- Add the scrolls of spell which can cast a spell like a book. They must be
+ created by the Sigaldry magic, they can't be randomly generated
+- Updated the Sigaldry realm
+- Added Staves of Wishing! You can wish for objects, monsters, spells but
+ NOT FOR ARTIFACTS nor for staves of wishing
+- Flying monsters can now pass over trees and mountains
+
+11/05/1999
+- The game will ask you to choose ammo from your inventory if your quiver is
+ empty
+
+26/05/1999
+- Add the Crusade Realm
+- Add some new inscriptions
+- It's now possible to add up to 32 realms
+
+03/06/1999
+- Wraith form is less powerful since it's not so rare. Now damage is only
+ divided by 5 and armor raised by 50
+
+05/06/1999
+- Add the speaking patch from Matt Graham. Just edit the monspeak.txt file
+ to add new entries. And don't hesitate to send me what you've added !
+
+11/06/1999
+- There are fewer gods and each god has one or two preferred races and if one of
+ this race pray to him they gain better benefits. Also the praying effects
+ are more differentiated (based on the different gods)
+- Add the 'only once' quest type
+- It's harder to please your deity
+- The Nazguls are MUCH more powerful (ideas from Akhronath):
+ ******** Quote from Akhronath mail ********
+ All weapons which are not ego-items cannot harm them, and will be destroyed if
+ the character hits a Nazgul with it. Ego-items which have slay evil or slay
+ undead can harm them, but each hit has a 25% chance of destroying the weapon.
+ Other ego-items can't damage them, and have the same 25% chance of
+ destruction. An artifact weapon will be able to hit them only if the weapon
+ has slay evil or undead, but the weapon will be hit with disenchantment every
+ time it connects (but this is negated with disenchantment resistance on the
+ character). And even these artifacts can be destroyed, although there's only a
+ 5% chance. Other artifacts, of course, can't damage the Nazgul, and still have
+ the 5% destruction chance.
+
+ When a character does any damage to a Nazgul or is damaged by a Nazgul, he has
+ a 25% chance of being afflicted by the Black Breath. Thenceforth the character
+ will slowly be drained of experience and sanity. The character can stay alive
+ by using restoring and curing potions, but to cure the Black Breath he must
+ either drink a Potion of Life or eat (a new item) Athelas Leaf. (Athelas isn't
+ really eaten, of course, but I can't think of another simple way to implement
+ it.)
+
+ This will really make the player think twice before going up to a Nazgul, and
+ makes it very useful to carry spare weapons.
+ *******************************************
+ So if you encounter a Nazgul .... RUN AWAY !
+- Sensing the grid's mana is now done by pressing 'x' key to engrave the floor
+ The X key is free for some new function (maybe for the new riding system)
+
+17/06/1999
+- When browsing the spells while being a Power Mage there are no more bugs
+ when pressing escape
+- Removed the forbidden race/class combination feature. But it's always
+ possible to recompile PernAngband with it with the FORBID_BAD_COMBINAISON
+ define(in config.h)
+- New god : The RNG
+
+19/06/1999
+- The priest/prior/paladin's god is now chosen dependent on their race
+- I have enough of hunting those damn ghost bug which makes them unable to
+ move. So it's now a feature ! They don't move because they are GREAT
+ adventurers who now just want to stand there to find peace :)
+ Hey, fixing bugs is easy this way :))
+
+22/06/1999
+- When 'A'ctivating the first screen showed is the equipment and no more the
+ inventory
+- Some new gfx drew by Andreas Koch
+
+06/07/1999
+- You can place object kind in the special levels instead of artifacts by
+ using 1000+k_idx as the number instead of just the artifact index
+
+17/07/1999
+- Add the Yeek race, but not as in Zangband. It's the one from Drangband.
+ I was thinking of a race who advance even quicker than the humans in levels
+ since a long time and I've found it !
+ So they suffer lots of disadvantages but need less exp than the other
+races, i.e.: When a DragonRider comes to level 2 a Yeek can already be at
+ level 7 !!
+- Added the FLY attribute, it allows you to fly over trees and mountains
+ because it's no longer possible with the levitation one. It's also a lot
+ rarer since it's POWERFUL in Galgals and Mirkwood. DragonRiders have it
+ by default. There is also a change in the features flags, CAN_LEVITATE
+ means that you can just avoid them by floating over it (like a pit,
+ water, ...) and CAN_FLY means that you must have the FLY flag to cross it.
+
+19/07/1999
+- The monster's drop are now created at the same time as the monster is
+ created. First it disallows scumming of monster drops. And the most
+ important thing is that it will allow me to add the new ability of stealing
+ objects from monsters (everyone will be able to do it, but only Rogue will
+ be excellent at it). For the point of view of the player there is no change.
+ It may produce some strange object disappearance in the late game since
+ all the objects are generated with the dungeon. And thus it may need to
+ increment the maximum size of o_list in misc.txt. If such problems shows
+ up, email me.
+- Press 'Z'('[' in roguelike mode) to STEAL an item from a monster. The
+ success rate is based on your dexterity, the fact that you are or aren't
+ a Rogue (being one makes it easier), the weight of the object to steal and
+ the base level of the monster. A Rogue will also gain some experience
+ if he/she succeeds. This made them more Rogue and less Warriors.
+
+22/07/199
+- Add more graphics from Andreas Koch along with a new version of the editor
+
+26/07/1999
+- The resurrection effect of the gods is now harder to get and decreases a lot
+ more your grace. It was ... well ... too powerful for the cost of some
+ crappy artifacts
+- Finished the Magery realm created by Chris Weisiger (jmartin@inreach.com)
+
+03/08/1999
+- I've finally fixed it ! You know, this ugly bug that disallows the darkening
+ of the grass & mud tiles when they have been lit.
+
+18/08/1999
+- Yeah ! It's done! The new magic system is finished (I will add Spirit Realm
+ later). The final form is 4 Major Realms : Valarin, Nether, Magery, Shadow
+ and 4 Minor Realms : Crusade, Tribal, Sigaldry, Illusion.
+ The only problem is be that it could be unbalanced, especially the
+ Shadow realm since I've created it :)
+ Anyway it should be great. There are still a lot of old spells but some new
+ coloured funny spells for you to discover, as Control the Ring, Infuse Amulet,
+ Scribe Scroll, Doppleganger, Volcano Flow, Tidal Wave, and a lot of others!
+ The max number of spells a character can learn depends on his class. But
+ generally the player can learn fewer spells than the total number of spells he
+ has in all the books he can read.
+ I want to thank Akhronath (who has the first idea and who write some realms),
+ Shawn Cheng, Chris Weisiger and DSCreamer<DSCreamer@aol.com> for their great
+ help.
+- Moldoux can not appear at any other level than level 1
+
+21/08/1999
+- A new version of the Tile Editor plus a full set of graphs (expect the books)!
+- Moved the dungeon types definitions from tables.c to a new info file in the
+ lib directory: d_info.txt
+ It allows you to add new dungeon types easily.
+ There is also a brand new feature: You can specify which monster flags that
+ are NEEDED for a monster to be generated in the dungeon.
+ There is also an addition of dungeon flags. Here is the structure:
+ N:<index>:<name>
+ D:<long name>
+ W:<min depth>:<min depth>:<min player level>:<next dungeon>:<flags mode>:<min alloc>:<max alloc chance>
+ L:<floor1>:<%1>:<floor2>:<%2>:<floor3>:<%3>
+ A:<wall1>:<%1>:<wall2>:<%2>:<wall3>:<%3>:<outer wall>:<inner wall>
+ F:<flags>
+ M:<monster flags>
+ S:<monster spells>
+- The quest rewards are always good
+- I've finally found and fixed the Mirkwood Spiders Quest
+
+24/08/1999
+- Add the MAZE flag to the dungeon type flag list, which instead of a normal
+ dungeon generate a full big maze ! And it's EVIL ! Note that there will be
+ no rooms and no vaults generated, just a plain evil maze
+ The algorithm is from <Pierre.Bru@spotimage.fr> on rec.games.roguelike.development
+- Note about the dungeons : A dungeon can't have more than 40 levels
+- You can use SMALLEST, SMALL and BIG as dungeon flags to specify the level's
+ size
+- 6 new dungeon types: a Graveyard, an Illusory Castle, an Orc cave, a Maze
+ a Dragon's Lair and A Forest with specific gfxs and monsters restrictions
+- Some new gfx form Andreas Koch mostly to add more flavor to the towns
+
+29/08/1999
+- You can add a guardian and a guardian artifact to each dungeons types with
+ the following flags: FINAL_ARTIFACT_artifact_number and
+ FINAL_GUARDIAN_guardian_number
+
+29/08/1999 - PernAngband 4.0.0
+
+01/09/1999
+- Fixed the max_dlv non allocation error
+- Fixed the Tribal realm spell descriptions
+
+01/09/1999 - PernAngband 4.0.0b
+- New dungeon type, the Netherworld with Muar and the Wand of Fireball of
+ Mithrandir at the bottom
+- You can't gain a fate before being level 10
+- Some cosmetic changes suggested by Akhronath
+- A new Artifact by Akhronath, The Long Sword of Murazor 4d5, so ... the next
+ time you see a long sword 4d5, beware ...
+
+05/09/1999
+- Add a feature flag to allow running
+- Fixed the Chaos Warriors bug (they were unable to use magic !)
+- Fixed the Chaos Realm descriptions
+- You can't rest on a between gate
+- You can now steal from stores. But beware of the consequences if you fail...
+- Fixed a bug in that when recalling to the town the player was sometimes
+ placed in the upper left corner
+
+08/09/1999
+- Fixed a bug that disallowed the creation of entrances to some vaults
+
+14/09/1999
+- Fixed the Dragon Tower bug
+- Add minimum player level to the random dungeons
+- Add shafts, you can use them do go up/down for up to 4 levels(but you can't
+ ignore quest levels). Original patch from Static Chaos. Idea from GSN
+- Add a dungeon flags to forbid generation of doors
+
+27/09/1999
+- Some tweaks to the possessor code as written by Static Chaos i.e:
+ You must possess a monster that is able to open to door to do so. The
+ same applies to bashing. Your sex is modified by your body. Lots of tweaks
+ to the spells that can be used...
+- The racial power of the Dwarves is now the same as The Pick of Erebor
+ activation: they can find hidden passage in the walls
+- There is 1 chance in 10 that the level is an magical level, which means that
+ each grid will contain more mana than a normal level.
+- Add some new sentences to the monsters sentence lists
+
+04/10/1999
+- Began to add the Druid class. But it's TOTALLY different from the other
+ variant's Druids. They make intense use of the mana flow from within the
+ earth and the elements, thus their spells can regenerate the mana they have
+ used by pumping it from the floor, like the Tunnel spell which will blink
+ the player and will try to absorb enough mana form the grid he/she lands on.
+ They can also (and they are the only to be able to do that) regenerate the
+ mana flow of the earth. They also can use enhanced attack types called
+ Druidic Bolt/Beam/Ball that can follow a mana flow laid by the player.
+- The Druids can sense precisely the amount of mana of a grid
+
+08/10/1999
+- Added some revised graphics by Andreas Koch
+- Added the code provided by Alexey Guzeev(aga@russia.crosswinds.net) to
+ compile PernAngband under OS/2 with EMX
+- It's finally fixed ! the damn bug that was crashing the game when leaving
+ a town on certain system (Mac and Windows) ! this will never happen again !
+
+27/10/1999
+- Finished the Druid class. They have 40 spells (8 * 5 books). The spells that
+ activate Mana Runes is not active for now, but it will in a near future.
+- Add a slightly modified Tom Morton fake artifact patch (it won't print {} at
+ the end)
+
+30/10/1999
+- You can inscribe an object with !! to notify the player when it's recharged
+- Lots of bug fixes thanks to Lothar Lange <100644.2004@compuserve.com>
+- Lots of new ideas thanks to Lothar Lange <100644.2004@compuserve.com>
+
+30/10/1999 - PernAngband 4.0.1
+- "Foolish mortal! Thou hast not pleased me! I'll doom your game with the new
+ horrible DG curse !"
+ Yes I've done it, the DG curse is even worse than the TY one. One of it's
+ most perverse feature is that it can replicate itself to contaminate sane
+ objects that can't be cured. Also if you remove the curse of a DG cursed
+ object, it will recurse itself automatically !
+ Beware of the horrible Long Sword of Murazor because it carries the ancient
+ morgothian curse !
+ Oh, there are also some monsters that give the DG Curse when dying ... but
+ I'll let you find whose they are by yourself :-<|> (Dark God makes an evil
+ smile). I can just say one thing : you should *REALLY* *NOT* kill Mathilde...
+ But do not worry she's got much more HP, so you can't kill her anymore :)
+
+01/11/1999
+- Add the Rod of Home Summoning, which acts like the old dragon spells
+ "Call Home"
+
+08/11/1999
+- Drastically reduced the recharging time of the Dragon Scale mails in order
+ to render them useful.
+- Added a new weapon ego-item: of Spinning, which will make you spin around
+ in order to hit every monster around you. Note that you'll only get one
+ blow for each monsters whatever your normal number of blow is.
+- Added (ok stolen) the question in the GSNband FAQ about wrists hurting (it can
+ be useful, so everyone should know)
+- Rogues and monks gain more and more stealth as they gain levels (SBF)
+- Added some sentences for the Dwarves (in monspeak.txt)
+- Added the support of two-handed weapons (from GSN). Thus there are weapons
+ that can be handled with two or one hand (but with one hand it halves the
+ damage). A 2 handed weapon can't be wielded with a shield.
+- Added the random character name generation from Cthangband
+- Added rivers (water & lava) from the Steven Fuerst fractal patch. Note that
+ you have to add WATER_RIVER, LAVA_RIVER, WATER_RIVERS or LVA_RIVERS to a
+ dungeon to have some rivers generated (actually in Mordor(lava), Dragon lair
+ (Lava) and Forest(Multiple Water))
+- Updated generate.c to the Steven Fuerst fractal patch room generator (using
+ room_alloc), in order to implement the remaining part of the patch easier.
+ But I'm still having problems adapting it to my extended dungeon generator.
+- Ahah ! I've resolved the problem !! there are now fractal rooms (15%, can be
+ always enabled by specifying the CAVE flag), now the orc caves looks great
+
+10/11/1999
+- Added the Caverns(enabled via the CAVERN flag)
+- Hell has been moved down, it now begins at level 666! :)
+
+12/11/1999
+- Add the Static Chaos persistent dungeon patch that save every level of a
+ dungeon (which has the PERSISTENT flag) on disk and reload it instead of
+ regenerating a new level.
+- Add the Outer World dungeon type (this is an entrance to a place of an
+ incredible stability). It use the PERSISTENT flag and thus will be saved.
+ Only level 50 characters can go there to prevent abuse(like have an old
+ ultra powerful character and a new one and going into the Outer World to
+ exchange some stuff). And yes the saved dungeons are the same for EVERY
+ characters. But to add ... err ... variety, I've put it from level 300 to
+ 305, I've put it to have at least 30 monsters from the beginning AND to have
+ an higher monster generation rate(1/60 instead of 1/160 !), thus you'll
+ NEVER get bored there :)
+- Implemented the much more complex trap system from Angband/64 thanks to the
+ patch made by Static Chaos. There is 169 traps (see tr_info.txt).
+ Beware that on average the traps are deadlier...
+- It comes along with a new feature for stat system: temporary stat drain,
+ it's cool
+
+14/11/1999
+- Renamed Power Batteries to Essences
+- The DG_CURSE can put the NEVER_BLOW flag on a weapon ... sadistic !!!
+
+16/11/1999
+- DSMs now have been granted the FLY flag
+
+19/11/1999
+- The monster memory now colors some important things about the monster (like
+ resists, speed, ...)
+- Fixed a wand of wishing bug, that made them sometimes NOT use a charge
+- Moved the special level DeathWatch to the Orc Cave
+- Moved the special level Treasure Room to the Maze so people are forced
+ to play those dungeons if they want the artifacts
+- Random quests will only occurs on PRINCIPAL dungeons (the one created by
+ splitting the vanilla dungeon into 4 smaller ones, Galgals, Mirkwood,
+ Mordor and Angband itself)
+- To prevent too many YASD from the DG curse of Mathilde she has now been
+ granted 22500 hp, but as usual she can't attack :))
+- Fixed a bug that disabled the guardian at the bottom of some dungeons
+
+25/11/1999
+- Added main-gcu from Angband/64 to allow larger screens
+- Added the new note command that dumps to a file from "Tom Morton"
+ <tmorton@yikesstation.freeserve.co.uk>
+
+27/11/1999
+- Added funny time message from Z
+- Added object experience as suggested by Ceilti <Ceilti@aol.com>
+- Fixed a bug when the magestaves were cursed
+
+29/11/1999
+- Added the small trees (along with a new feature flag: SUPPORT_LIGHT) to
+ replace the walls in the Forest and Mirkwood
+- Some new gfx from Andreas, and the town of Bree with the new tiles
+
+02/12/1999
+- Add 4 dungeons by variaz@hotmail.com: Vanilla Dungeon(only from Vanilla Town,
+ The Small Water Cave, The Sacred Land Of Mountains(if you don't fly ...
+ do not even plan on going there),
+ The Wild Land Of Kurukar(It sure looks great)
+
+04/12/1999
+- New dungeon flags: HOT and COLD that affect object decay
+- Add YA*IF (Yet Another *_info File): wt_info.txt
+ It defines wilderness features *, allowing a better wilderness map. Since
+ it now defines nearly everything a wilderness need to have, the map itself
+ only have to be an array of feature and seed, thus allowing a much bigger
+ wilderness. I also plan to have a Omega wilderness mode where you can have
+ an overview of the wilderness to travel quicker (but time will pass much
+ quicker too:)
+ The structure of w_info is also changed, it's uglier but well .... :)
+ The wilderness size must be EXACTLY the same as the size defined in misc.txt.
+
+06/12/1999
+- Scrolls of Reset Recall are now WORKING !!!!!
+- The new wilderness mode is done ! When you reach the border of a wilderness
+ screen you go to the small scale wilderness map, where you can see all
+ the wilderness map with the towns/dungeons/... A lot of commands are
+ disabled there and moving takes MUCH more time, so beware of the food !
+ You can enter the big scale mode by pressing > (this allow you to enter towns)
+ NOTE: The Death Molds CAN'T reach the small scale mode because their
+ erratic movements are impossible to handle in such a scale.
+ BEWARE: Your imprinted pets WON'T follow you in the wilderness !!!
+
+11/12/1999
+- Add wilderness encounters
+- Add Oangband rod/wand stacking
+- Amulets of the Serpent from Sadi Khan <sadik@christa.unh.edu>:
+ Resist Poison, Dexterity, some AC and Poison breathing
+
+12/12/1999 - PernAngband 4.0.5
+
+18/12/1999
+- Updated the makefiles and renamed object3.c to traps.c
+- Add 5 new essences from Sadi Khan: Force, Darkness, Lightning, Mana and
+ Knowledge
+- Fixed the bug that was placing the player at the town entrance when
+ leaving a building
+
+20/12/1999
+- Add the tool slot. It's actually only used to wield a shovel/pick but I've
+ some plans for it
+- You can only dig walls if you use a shovel/pick in your tool slot
+
+24/12/1999
+- Removed the player ghosts, well in fact made them a compile-time option(see
+ config.h)
+
+26/12/1999
+- Added the Necromancer class. But again not quite the same as you've seen
+ before. They can't be killed as easily as the other class. In fact when
+ their HP comes to 0 they don't die but become undead for a while. While
+ being undead their HP is replaced by DP(Death Points) that have a max
+ inferior to the max HP and that are slowly decreasing(1 DP less each turn).
+ They can use all the healing spells/potions/... but this won't stop them
+ from being reduced again. The only way for them to come back in the world
+ of the living is to kill 2 * player_level monsters.
+
+01/01/2000
+- Happy New Year !
+
+02/01/2000
+- Add a new curse(as suggested by LucFrench@aol.com). When a weapon has this
+ curse and that the wielder attacks a monster with it, it can clone it !
+ And it's REALLY REALLY annoying, especially when fighting some kinds of
+ wyrms :)
+
+10/01/2000
+- Finally fixed the flags shown on the character display.
+- The quit without save command(CTRL + L) is now a compile time option disabled
+ by default
+- The Necromancer class now has 5 spells (used the same way as the mindcrafter
+ powers)
+
+17/01/2000
+- Power gained by levelling artifacts has been reduced
+- New unique monster: The Greater Lag Monster... beware :)
+- AHAHHAHAH ! I got it ! the wilderness bug that made the game crash when
+ entering a town is fixed ! And the wilderness system has been greatly
+ improved.
+ Now to switch the wilderness mode, just press < or >.
+ Everything should now works properly
+
+16/02/2000
+- Each Nazgul will now drop his Ring of Power. They are randomly generated
+ and thus they don't appear in a_info.txt. They always give invisibility,
+ life draining and are heavy cursed.
+
+21/02/2000
+- Changed the format of w_info.txt again, it's much more readable now.
+ I also added a additional parameter to the W lines of wf_info to define
+ which letter will be used in w_info.txt
+- 60x20, this is the scale of the new wilderness, it tries to looks like
+ the 3rd age middle earth map. Thus some dungeons leaved the towns they
+ were used to be to join their "real" place on the map. Only the Upper
+ Reaches of Galgals are still reachable from Bree.
+
+24/03/2000
+- Added a small hack from Static chaos to allow running faster with the
+ overhead map enabled.
+
+24/03/2000 - PernAngband 4.0.6
+- Possessors now have a MUCH better pseudo id, equal to warrior's one
+
+06/04/2000
+- Changed the wilderness map with the one provided by Gwidon S. Naskrent
+ (naskrent@artemida.amu.edu.pl). It's bigger, it's better :)
+- Fixed a bug with the chasm opening inscription
+
+08/04/2000
+- Fixed a bug with the staff of wishing
+- Druids can now pass through trees
+- Stairs are now noticed again (when you see one it will stay on your screen
+ even when out of torch radius)
+
+10/04/2000
+- When a Necromancer turns into an undead he/she/it gets cured of everything
+
+05/05/2000
+- MAYBE fixed the damn wild bug ... again ? oh please GREAT RNG help me !
+
+08/05/2000
+- Added the Notes patch from Chris Kern. That allows you to get a .txt file
+ recording great events in your life, your notes, ...
+ Very useful I think
+
+11/05/2000
+- Fixed the artifact wands stacking bug
+- Removed the Netherworld dungeon
+- Added the Moria dungeon, it's not random and can be found in ... the moria
+ mountain chain :) There is Muar waiting you at the bottom, guarding the
+ Quarterstaff of Olorin
+- Waldern, the king of water is back, and he is the final monster of the
+ small water cave, guarding a the Trident of Ulmo. But beware it is more
+ powerful than in vanilla
+- Dungeon guardians and dungeon guarding's artifacts can only be generated
+ in their respective dungeons
+- Removed rumors that were still Zangbandish and some others I didn't like :)
+
+14/05/2000
+- The MONSTER_PERCENT_ flag can be added to some dungeons to specify the
+ amount of monsters that are affected by the dungeon specific restrictions
+- Random dungeons now appear on the overhead wilderness view
+- COULD IT BE !!!!!! yes it could !!!! thanks to Tom Demuyt that sent me a
+ savefile where he wasn't able to learn spells, I may have finally fixed the
+ dreaded spell bug !!!! I say may because I'm waiting for some fellow
+ mac user to compile it to see if it really fixes the bug.
+- IT WASN'T ! but now it *IS* !!!!
+ That was an other bug. And now Gob, the great Gob, the powerful Gob,
+ found the dreaded mac spell bug !!! thanks Gob !!!!
+- Changed the price for Runes/Essences to be more accurate
+- Changed some uniques in r_info to their former vanilla glory
+- The look command can now show the trap's types
+
+18/05/2000
+- Fixed some typos(thanks whimsy)
+- Began to add the Body parts system to allow more rings, weapons,
+ everything, depending on your current corpse (dragons will have more rings,
+ mariliths 2 weapons, ...)
+- If your corpse allows the use of more than one weapon, you can use them :)
+ let see a Sorceror using Ringil AND Gandalf ! :) well first he has to find
+ the rare scroll to change body and then to find a corpse that allows 2
+ weapons
+- Changed color of shafts (brown now) because they were hardly visible
+- Flying no longer allows passing over mountains, you MUST have a Climbing Set
+
+22/05/2000
+- Fast autoroller as a birth option
+- E'x'amining books in stores now browses them if your class can read them
+- Add a bookstore to Lothlorien town
+
+26/05/2000
+- When in battle rage(berserk) and using the ascii mode the screen goes all
+ red (as it is white for invulnerability and black for wraithform)
+- r_info is modified to give all monsters some inventory slots. the format is
+ E:weapon:torso:arms:finger:head:legs
+
+27/05/2000 - PernAngband 4.0.7
+- add a new dir to lib, DNGN which contain the definition of the LEVELS
+ not the dungeons. one file for each level named dun$dungeon$.$level$
+ In it you can have some declarations, like B:dungeontype which will
+ create a stairway to an other dungeon, thus allowing to have "branches"
+ in the dungeons.
+ L:dungeontype and L:level specify which is the "father" dungeon and at which
+ level the stair appear.
+ S:ext means to save the level(and thus to reload it) in the player.ext file
+ so allowing the use of persistent levels(the persistent dungeons option
+ is gone)
+
+29/05/2000
+- Necromancers can use the Nether realm in addition to their old set of
+ powers(now accessible through 'U')
+
+01/06/2000
+- Boomerangs of spinning are no longer allowed (that was silly)
+- Increased the rarity of the ULTIMATE artifacts (Magestaff of Gandalf,
+ Longsword of Eru, Seeker Bolt/Xbow of the Elves)
+- Fixed the displaying of attributes under the 'C'haracter display
+
+-04/06/2000
+- Players can now choose which kinds of monsters they don't want in their game
+ at birth (wipe all Pern monsters, all Cth, monsters, joke monsters, ..)
+ Note that monsters in fixed quests are not affected.
+ Thanks Static Chaos.
+- In the Maze you can no longer remember anything, that means everything you
+ see is what it's in your light radius ! MUAHAHHAH, I'm *NASTY*
+- Archers now get a better chance of not breaking their ammo as they
+ advance levels
+
+08/06/2000
+- Note taking bug should be fixed
+- Fixed a bug with the incarnation code
+
+11/06/2000
+- Added the Orc Barracks special level (level 35 of Moria) from
+ Chris Weisiger (jmartin@inreach.com)
+- The maze is now guarded by The Baby Minotaur who is holding The Steel
+ helm of Hammerhand
+- The graveyard is guarded by Vecna holding Doomcaller
+- You can now use the 'l'ook command in the small wilderness view
+***********IMPORTANT************
+- Between gates are no longer automatic, you must press > while standing on
+ one to activate it
+********************************
+
+16/06/2000
+- Revised the Adventurer's guide thanks to Chris Weisiger(jmartin@inreach.com)
+- You can no more recall from a quest
+- You can no longer target pets
+- Re-enabled the "Control the rings" spells of the Shadow realm
+- Between gates are now purple +
+
+02/07/2000
+- Only priest-like characters can use the Valarin realm
+- Removed all the references to Logrus
+- Tunnelling rubble will place the standard floor of the current dungeon and
+ not the floor feature
+- Grow trees no longer crashes when used near the dungeon edge
+
+05/07/2000
+- Fixed the character dump resistances
+- When a full character dump is requested (upon death) the self-knowledge
+ screen is used instead of the grid of abilities, that looks better :)
+- Fixed a bug in the placement of stairs which sometimes led to a stairway
+ to another dungeon when not requested
+- Fixed the bug that generated 'unknown' grids
+- Should now compile (nearly) without any warnings
+- Fixed the mountain bug that hung the game when entering mountain chains
+ in the wilderness
+
+07/07/2000
+- Some more monsters from Angband/64 and some more work on r_info from
+ Static Chaos. That brings the number of monsters to ... 1023 !
+- Damage taken from going between is divided by (ac / 50) + 1
+ So between 0 and 49 ac it's full damage, between 50 and 99 it's half
+ damage and so on
+- Greater Hell Beasts now have .. 1 hp :)
+
+11/07/2000
+- Add the Unbeliever class, they are anti magicians. Great warriors, they
+ have the worst magic device skill of all the classes, they continuously
+ generate an anti-summoning field around them disabling monsters from
+ summoning. The radius of the field increase with levels. After level 20
+ they can also disrupt the magic continuum, thus getting the same effects
+ as Anti-Magic, Anti-Tele and The Stone of Lore(nobody on the level can
+ teleport)
+
+13/07/2000
+- Add an option to auto tunnel walls when bumping into them.
+ NOTE that it'll ALWAYS take a turn then, so beware...
+- Really fixed the note taking bug (ok stole the fix from Zangband :) )
+- Changed the object description so now it's "Smeagol's Corpse" instead of
+ "The Smeagol's Corpse"
+
+13/07/2000 - PernAngband 4.0.9
+
+29/07/2000
+- Orc Barrack's between doors are fixed
+- God favor is reinitialized upon birth
+- Added the Daemologist class along with a brand new realm and lots of new
+ cool effects(try making all your pets explode ! :)
+ All made by Static Chaos
+
+31/07/2000
+- Fixed lots of compilation warnings thanks to Static Chaos
+- Added the random vaults and crypt vaults from Zangband with the help of
+ Static Chaos
+- Fixed some bugs pointed out by Bablos
+- The Ray Rune now relay make a beam and not a pseudo bolt
+
+03/08/2000
+- 2 handed weapons wielded with a shield now really restrict your fighting
+ abilities (I forgot to add the code before) :)
+- Possessors can't leave their body while they wear cursed items
+- Word of Destruction is no longer allowed in quests
+- Add a fate spoiler created by Dustin Ragan
+- Removed the old new player ghosts implementation
+- Added the new old player ghost implementation (stolen from Drangband)
+- Rod system have been totally reworked. Now you can find "base" rods without
+ power (rods of nothing) with a certain quality (wooden, iron, ...) on which
+ depends the amount of mana they contain. You can also find rod tips which
+ contain the real spells but cannot be activated alone. You must attach (with
+ the 'z' command) a rod tip to a base rod before using it. The spells of the
+ different rod tips need different amounts of mana (so illumination is less
+ mana-hungry than healing) :). You can also have base rods ego-items (artifacts
+ soon) that can decrease the mana cost of the spell, increase the capacity
+ of the rod, decrease the time needed to zap the rod, ...
+ Oh BTW, you should be eager to get an Adamantite Rod of Healing of the
+ Istari :)
+ Now rods will hopefully be useful.
+ Note that you have to identify the base rod to get the mana indicator
+- Note files are now playername.nte instead of playername.txt
+So if you want your note file to be carried to the next version you'd better
+ rename it :)
+- Fixed a bug that prevented Azog from being generated at the bottom of the Orc
+ Caves
+
+07/08/2000
+****************** IMPORTANT *****************
+- Removed the Python support because it was slowing the game, adding
+ weight to the executable (and thus to the archive), was mainly unused,
+ and was never present in some ports
+**********************************************
+
+09/08/2000
+- Unbelievers are now much better at perception, and actually become even
+ better as they go up levels
+- Fixed several bugs thanks to Iain McFall
+- Reset recall is now much nicer to use thanks to Iain (again :)
+- When a character is infected by the Black Breath it is show in the char
+ screen & dump
+
+15/08/2000
+- Cursed mage staves should no longer crash the game when identified
+- A Marilith can now drop it's corpse when killed
+- Add the gods spoiler made by Dustin Ragan
+- Fixed a bug that could eventually crash the game when looking at the quests
+ screen
+- Fixed a bug in the random junk artifacts that made them cure fear when said to
+ cure confusion
+- Add the squelch patch from Iain McFall
+- Boomerangs are now pseudo-id'd
+
+19/08/2000
+- The *thanc artifact daggers are less common because they are so powerful
+
+24/08/2000
+- The Midas Touch 30k gold limit has been removed (suggestion from Chris)
+- Fixed (ok ok Iain fixed :) ) several trap related bugs
+- Squelch now use the pseudo-id thanks to Iain
+- Pseudo-id inscriptions are no longer part of the real inscription of an object
+ and thus ... it's better :)
+- Tribal spell "Life Drain" now reduces your stat permanently 30% of the time
+ and the other 70% it can be cured via restore stats pots. The damage is now
+ always 50d50 and is no longer affected by mage staves of spell
+- Tribal spell "Meditate" no longer hastes/heals you
+ (it still heals your sanity) and the glyphs' radius have been decreased
+- Add the Trap of Acquirement that will give a great object and then mutate
+ into an other trap. It can never be identified and the color varies.
+ Idea from Iain
+- When casting charm upon monsters only the non-pet ones will be affected
+- Elder Aranea HP reduced
+- Small trees are burned by fire
+- Randomly activated mutations are no longer activated in the overview
+ wilderness
+- Ghoulkings are now z instead of p
+- Thrown potions now give xp when killing by a ball effect
+- Scrolls of reincarnation have been removed now you can only find scrolls of
+ deincarnation. To reincarnate into a new body 'U'se the appropriate power
+- Recharging is now useful again
+- Breeders should be a BIT slower
+- Reduced mutation chance of breeders from 7% to 3%
+
+03/09/2000
+- New, unified store/building code
+
+08/09/2000
+- Add quest plots. Feature 75, 76, 77, 78 are now permanent walls but used
+ as quest plot info holders. Before the new building code quest info was
+ stored in the building feature but now all stores/buildings use the same
+ feature(74) and the "special" value defines them.
+- Add semi-random towns. Now if the ' ' (space) character is used in the town
+ definition this grid will be replaced by the feature calculated by the
+ plasma generator as if it was a normal wilderness screen. So the forest of
+ Lothlorien is plasma generated and not fixed. It add variety and consistency
+ with the rest of the wilderness
+- All towns are now updated to the new store/building code
+- Removed the "you are being crushed" bug when going in the overview map thanks
+ to Iain McFall (as usual :) )
+
+10/09/2000
+- When you use a 2 handed weapon and press 'e' the equipment list will show
+ the weapon(and some info) in the shield slot too
+- Monsters can't have fewer arms than weapons
+- Mimics have been upgraded. They now have 5 powers. First is to use books of
+ lore as before. Second is invisibility. The other ones are Mimicries.
+ There are 3 mimicries, legs mimicry, wall mimicry and arms mimicry.
+ Legs and arms mimicry will "create" a new body part (or some) for a certain
+ duration. Wall mimicry will make the caster able to walk in walls (he becomes
+ a wall) but ONLY in walls .. not on floor .. so beware with this one
+
+27/09/2000
+- For your god to resurrect you need 3 times more grace and your grace
+ will drop to -100000
+
+30/09/2000
+- Add exploding ammos (bolt, arrows, shots) thanks to a patch by Static Chaos
+
+13/10/2000
+- Add some patches from Kusunose Toru <kusunose@hcn.zaq.ne.jp>
+- Neuters get a weight & height
+
+13/10/2000 - PernAngband 4.1.2
+
+14/10/2000
+- Building doors can't be erased
+
+28/10/2000
+- Fixed a bug in the rod system when attaching form the floor
+- Added fountains that you can quaff from ('H' in normal mode, 'V' in roguelike
+ mode, yeah I know it was for version number .. but .. mhh who is using it ?:)
+ Thanks to Static Chaos for the patch
+- You can fill empty options with fountains(thanks static chaos)
+- Added the Iain McFall Show Monster patch to show all viewable monsters
+
+08/11/2000
+- Fixed numerous bugs
+- Fixed the st_info & ba_info files thanks to Kusunose Toru
+
+16/11/2000
+- Godly blasts can't be reflected anymore, so beware, puny mortal !!! :)
+- Added a whole bunch of new floor features (ice, mud, sand, sandwalls, ...)
+ thanks to Static Chaos.
+- More spell effect will affect the dungeon, for example, fire will melt ice,
+ nether will kill trees, fire will create ash, cold will freeze water, ...
+ thanks to Static Chaos again :)
+- Cleaned up the feature code again (that was a REALLY messy part of angband...
+ and especially of Zangband)
+- Note: Sandwalls can be dug WITHOUT any digging tools
+- Teleport scrolls/staves are back in the shops
+- Mages, Wizards and Sorcerors now only get a wand of fire bolt at birth
+- Finally fixed the Alchemists extracting powers
+- Fixed numerous bugs thanks to KUSUNOSE Toru
+- Desert and Glacier wilderness features now really look like desert &
+ glacier :)
+
+18/11/2000
+- Debug commands are allowed in the overview map, but beware, do not create
+ objects & monsters there ...
+- The wilderness map is no longer fully known, you have to explore it
+- New wild.c file to support all wilderness functions
+- Maps can be found to reveal some places of the wilderness
+
+27/11/2000
+- Exp gaining weapons will gain levels way slower
+- Ring & Amulet random artifacts will only be "Ring of foo" and not
+ "Ring of Slow digestion of foo"
+
+30/11/2000
+- Level gaining Artifacts have been significantly toned down
+- Sauron lost his chances to drop The One Ring
+- Blood of Life potions & Staves of Wishing are more rare
+- Your god wont always resurrect you even if you have enough piety
+- When leaving corpses, Possessor equipment will be dropped to floor
+ to prevent their form being "lost"
+- Sandworm lair, a new dungeon
+- Staves of wishing now only have 1 charge
+
+12/12/2000
+- A patch to the alchemist patch from KUSUNOSE Toru, they should now work
+ perfectly
+- h-system.h fixed so it should compile fine on Linux
+
+29/12/2000
+- New r_info.txt with the HAS_LITE flag, thanks to Static Chaos :)
+- Now some monsters can have a light around them
+
+03/01/2001
+- Phial of Galadriel and Phial of Undeath now use the same symbol(yellow ~)
+
+06/01/2001
+- Fates now show up in the character dump (thanks Kusunose)
+- Scrolls of Divination are more friendly now (thanks Kusunose)
+- Artifacts in monster inventories not yet seen are not shown in the
+ artifact list (thanks Kusunose)
+
+08/01/2001
+- Zweihanders are now 2-handed weapons(as they always should have been :) )
+
+11/01/2001
+- Ego Rods are now "xxx rod of egoname of power" and not
+ "xxx rod of power of egoname"
+- Fixed some typos(parchEment, NumeRoNean, ...)
+- Fixed a bug with junk randarts
+
+18/01/2001
+- Gods now need more sacrifices
+- Disabled the monster lite feature right now because it's HORRIBLY buggy
+- The Sandworm Queen will now drop the Sandworm armour when killed
+
+03/02/2001
+- Now you can separate a dungeon entrance from a dungeon exit on the
+ wilderness map using the WILD_ix_iy__ox_oy flag in d_info.txt.
+ ix, iy are the coordinates on the wilderness map of the entrance.
+ ox, oy are the coordinates of the exit.
+ Note that each of them(entrance and exit) must have a physical entrance
+ on the wilderness map(that is a line in w_info.txt).
+ When you use the entrance to enter you get to the first level but when you
+ use the exit to enter you get to the last level.
+ So now you can have dungeons that create shortcuts in the map.
+ Or even allow to go in previously unreachable places(like now the dungeon
+ of Moria allows you to reach a secret valley in the Mountains of the Moria
+ which allow getting to some other dungeons)
+- Fixed a bug with fountains (yeah, fountains of the Blood of Life were quite
+ unbalancing :)
+- Priests can't use Tribal magic anymore
+- Mages can't use Crusade & Illusion Magic anymore
+- Rogues can't use Crusade anymore
+
+05/02/2001
+- Found why under certain circumstances forbidden objects could still be
+ generated (and that's also fixed now :) )
+- Dungeons & Monsters can now have object themes (yeah I know, I stole that
+ from Zangband, though the dungeon theme was in my head for long, but
+ when I steal I do admit it ...)
+ For example The Sandworm lair is really full of magical items, while the
+ Orc Caves are more on the side of the weapons & armors. And the Dragon Lair
+ is filled with ... oh well everything :) and so on.
+ So it's now really worth to get out of the 4 basic dungeons and see the
+ wild world!
+ All dungeons are done with the themes, it could take a bit longer for
+ the (1031) monsters... :)
+ NOTE: Dragon Scale Mails are considered TREASURES
+
+07/02/2001
+- Ego Monsters, yes like Ego items but for monsters. New file re_info.txt
+ defines all possible ego monsters types (skeletons, zombie, ...). It can
+ modify, the flags, spells, level, speed, ac, ... of the monster that is
+ turned into an ego monster.
+ This will increase the randomness of the game, increase the number of
+ monsters from 1031 to .. a lot... :)
+ There are not much ego monsters right now, so feel free to submit them
+
+09/02/2001
+- Sorcerors can't use much armor
+- Beastmasters have been give access to the Tribal realm, the Beastmaster's
+ powers are now available through the 'U' key
+- Player Raise death spells will now really create an undead. For example
+ you cast raise death upon a kobold corpse and you can get a Skeleton Kobold,
+ or a Zombie or a Spectre one. New Undead types will be added later. And I'm
+ open to ideas naturally
+- Narya activation is now Healing (500)
+- Nenya activation is now Healing (800)
+- Vilya activation is now Healing (900) and cures Black Breath
+- Daemonologists can now wield their books (in the weapon slot). When used this
+ way, spells are cast in 1/3 of a turn otherwise it takes 5 turns
+
+11/02/2001
+- Specialized ESP, like Orc ESP, Troll ESP, Dragon ESP, ...
+ They are less rare than full esp, but full esp is more rare
+- Fixed a Runecrafter bug which could crash the game if no second rune was
+ selected
+
+11/02/2001 - PernAngband 4.1.5
+
+11/02/2001
+- Ents get nearly no sustenance from eating
+
+15/02/2001
+- Center player option
+- Alchemist artifact creation now requires player level magic essences to
+ work. The stats are permanently reduced upon failure (as it always meant to
+ be). You PERMANENTLY lose 100 max hp when trying to create an artifact.
+ This should reduce the number of mad alchemists :)
+- Dark Swords as a new item type. They generate an antimagic field of 50%
+ minus the sum of the enchantment (a +5+5 one will only do 40%) on a
+ 5 tile radius (also minus the enchantment)
+- Unbelievers now generate a (player level)% antimagic field on a distance of
+ (player level / 10)
+- An antimagic field disables any form of magic on the user, and can prevent
+ monsters from casting spells (not breathing). A 50% antimagic field will have
+ a 50% chance of stopping a spell
+
+18/02/2001
+- Normal Artifacts. Normal Artifacts are artifacts found directly in k_info
+ that doesn't require a place in a_info. That allow strange artifacts, like
+ wands, rods, staff (those were possible already but ugly), ... and even
+ food
+- The Rod Tip of Home Summoning is now a Normal Artifact
+- The Greater Ration of Health is the first (very rare) food artifact !
+ When eaten it provide +70 hp permanently
+- The Potion of the Blood of Life is now a Normal Artifact
+- Invulnerability can no longer appear in fountains
+- The Ring of Precognition is now a Normal Artifact
+- The Ring of Wraithform is now a Normal Artifact
+- The Scroll of Deincarnation is now a Normal Artifact
+- Hell is now the Nether Realm
+- Fixed a bug that created stairs at bottoms of dungeons
+- Extra blows can only be provided by things in the weapon slots
+- The Scroll of Mass Resurrection
+- Renamed Warrior-Mage to Warlock
+
+20/02/2001
+- The Wand of Stone to Mud of Thrain and The Wand of Fireball of Gandalf
+ got the EASY_USE flag, allowing them to be used even by unskilled
+ characters
+- As does the Stone of lore
+
+23/02/2001
+- Fixed a bug that allowed people in quests to use the '<' key to get to the
+ wilderness timescale
+- Fixed a quest bug that allowed players to regenerate the quest many times
+- The Control the Three shadow spell is now much much more effective, since
+ it removes black breath and DG_CURSE. The only little annoying thing is that
+ it requires that player to wear the *THREE* rings. And that can only be
+ accomplished with either the Possessor class (though they CAN'T cast the
+ spell -- no hope for them) or The Scroll of Deincarnation
+
+10/03/2001
+- Monks can choose which spell to learn
+- Fixed a bug with limited ESP description
+- Fixed a bug in Possessor titles
+
+09/04/2001
+- DeathMolds can now teleport onto stores & such (all features that are
+ considered floor by the game)
+- Objects cannot be dropped on traps anymore
+- The Sandworm Queen no longer appears multiple times
+- Harpers wont crash at the start anymore
+- Panic saves will use the playername.pnc filename (thanks Improv)
+- Symbiants can't hypnotize monsters that aren't pets anymore
+
+15/04/2001
+- Add an old patch from SC which allows dungeons to project an attack every
+ few turns. For example a player in the Nether Realm will be hurt by nether
+ every 3 turns for a damage of 10d10.
+ The syntax is(up to 4 lines):
+ E:<dice>d<sides>:<frequency>:<attack type>
+- Volcano now does 2d10 damage each 10 turns, beware scrolls on the floor :)
+- Lost Ruins of Numenor does 1d1 acid damage each turn (water will RUST you)
+- Cirith Ungol will poison you every 20 turns for 4d4
+- Illusory Castle will confuse you every 6 turns for 6d2
+- Small Water Cave does 1d1 acid damage each 20 turns (water will RUST you)
+- Nether Realm is unlightable (as is the Maze) and always empty levels
+- Nether Realm is now guarded by Tik'srvzllat who guards the Ring of Phasing
+ a powerful ring that allow wraithform and immunity to nether
+
+16/04/2001
+- New Race system, Now you select a race AND a race modifier at birth.
+ For example you choose to be a human vampire, or a dwarf skeleton, ...
+ Then some modifiers apply (stats, skills, extra powers, ...). Note that
+ all races can't use all race modifiers
+- New race modifier, Barbarian, the old barbarian race is gone
+- New race, the Wood Elf from CathAngband, masters of the bow, with 1 extra
+ might and 1 more if they use bow and are high level enough
+- Extra Might can now be > 1
+- Penalty for priests using non blessed swords/axes/polearms is now (-15,-15)
+- New weapon category: Axes
+- Add Weaponmaster class from Gumband, trained into one weapon category, being
+ great with it but bad with anything else
+
+18/04/2001
+- Aranruth is a broad sword, 15lb, 3d5
+- Fixed lots of spelling errors/typos thanks to Improv
+- Add a new birth option: Astral (ghosts from Kamband, name from Gumband)
+ It enforces vanilla town and makes you start at level 98, you can't recall
+ and need to reach town
+- Trap doors can't appear at the last level of dungeons or in non dungeons
+- The concept of non-dungeon places: some "dungeons" got the FLAT flag
+ meaning they are ... flat, like a forest
+- The concept of Towers, going up instead of down
+- Updated birth.txt to take in account the race modifiers
+- Wood Elves can go through trees
+- Ammo similar to the one in your quiver will always be picked up
+
+20/04/2001
+- The death fate is way different now. When the player enters level he is
+ fated to die on he gets teleported to a special level in a special dungeon.
+ the level is empty, small and full of really out of depth monsters. Recall,
+ genocide, ... are forbidden. There are no stairs, the only way to leave it is
+ to kill every single monster of the level. Then the player is teleported
+ back to town. Chance of surviving are *LOW* but not nonexistent :)
+- The knowledge rune will now probe monsters
+- Runecrafters are now playable (new damage formula) even at low levels !
+ Now lets hope they are not TOO powerful :)
+- Runecrafters upgraded. They can now:
+ 1) Cast a spell on the fly (as before)
+2) Cast a runespell they memorized before (can memorize up to 100)
+ 3) Cast it from a carved runestone (uses 75% mana and does NOT need the
+ runes to be present in the inventory, but consumes the runes during
+ creation and it must be carried around to be used)
+- Mormegil is now a Darksword and is quite nice
+- Lesser & Greater Krakens now drop corpses
+
+24/04/2001
+- Add random towns in the dungeons. There can be up to 4 towns per dungeons.
+ Not all dungeons (well should say places) can hold towns. Random town shops
+ are took from the possible shops in st_info.txt with the RANDOM flag
+- Stores in st_info.txt got flags
+- When carving a Runestone the involved runes are destroyed
+- Random towns can have different shapes, from vanilla one to hidden one
+ (the stores are placed randomly on the level, without any buildings)
+- When the player is invisible and does not have see invisible the @ symbol
+ disappears
+- Cannot locate undetected traps by simply 'l'ooking around
+- Mariliths cannot use boots
+
+26/04/2001
+- The player is no longer "teleported away" when leaving some buildings
+- Level gaining artifacts rarity have been increased
+- Death Ray will actually kill the player
+- Removed traps of death ray (now that death ray insta-kills)
+- Recharged wands/staves cannot be extracted anymore
+- Wraithform no longer reduces damage
+- New hp formula for Possessors
+- Some sentences for the DarkGod monster to say, based on #angband :)
+
+28/04/2001
+- *WARNING*, squelch list has to be checked upon importing an old savefile
+- Every item can provides blows since Alchemists can't create that many arts
+ now
+- Wielding a mage staff (even non ego ones) will provide with a decrease of 20%
+ of the casting speed (using 80 energy instead of 100)
+- Add makefile.bcc thanks to Arch
+
+29/04/2001
+- Some Spelling/Grammar fixes in lib/help/ -- Improv
+- Levelling artifacts will now use a new scheme:
+ There are now groups of abilities (the Fire realm, the Cold Realm and so on)
+ Whenever a weapon goes up a level, it gets to either:
+ 1. become enchanted by +2/+1
+ 2. gain another attribute from a group it already has.
+ 3. gain +1 to hit, and a point.
+ when a weapon gains a certain number of points, it might buy access to a new
+ group. Note that some groups can contain good AND bad abilities
+- Pet shop now sells scrolls of summon never moving pets
+- Lots of fixes (ammo weight, god flags, ...) thanks to Kusunose Toru
+- Towers deactivated for the time begin
+- Rods considered good
+
+01/05/2001 - PernAngband 4.2.2
+- Force attacks will pull away monsters (from Dr)
+- Fist of Force is now a force attack
+- Unbelievers can now detect traps at level 25 and destroy them at level 35
+ Press 'm'
+
+03/05/2001
+- GoI no longer protects from insanity
+- Colored messages
+- Artifact creation results in a 40hp loss
+
+05/05/2001
+- Hermit subrace, magic adepts weaker physically but have more mana reserves
+- Use upx for exe compression of the DOS version in makefile
+
+07/05/2001
+- Fixed makefile difficulties in makefile.org, and uncommented one of
+ the safer sets of CFLAGS/LIBS in that file as a good default -- Improv
+- Fixed some other spelling problems, notably in cmd7.c -- Improv
+
+13/05/2001
+- Reworked the old (ugly) activatable mutations, race powers, ... system to a
+ new unified one. Race, subrace, class powers are defined in the tables in
+ tables.c. Now the new system will allow for artifacts to grant powers, it
+ also allow intrinsic powers (i.e. you quaff The Potion of Blinking
+ and from now on you can blink at will)
+- There is a 2% chance of gaining the grow mold mutation when eating a slime
+ mold
+- Priests gets the curse detection power
+- Oops the Sandworm Queen wasn't confusion resistant :)
+- Added various granted powers to various artifacts and ego items
+- Sorceror allowed spellbooks are now in tables.c (Mrealm_choice)
+- Changed the install rule to do something sensible on Unix. Changed config.h
+ to suit. Default dir for lib is now /usr/lib/games/pernband/
+ Hopefully this won't make too many people angry -- Improv
+
+15/05/2001
+- New GFX by Andreas Koch
+- Fixed some entries in a_info
+- Monster memory now tells people when they're facing a Nazgul (Kevin W Thomas)
+- Fixed a bug in dungeon town generation (Kevin W Thomas)
+
+16/05/2001
+- Added makefile.WHICH, fixed up my earlier patches to add a real install
+ rule - Improv
+- Pseudo id now works for potions, scrolls, wands, staves and rods. Magicians
+are better at pseudo id-ing those than warriors (SC)
+- Can only use one ultimate artifact at a time (not that it really
+ matters given that no-one will ever find one :) )
+- Fixed a bug preventing The Baby Minotaur from being generated if it was
+ already generated for a previous character using the same savefile
+
+17/05/2001
+- Upgraded to latest z-term code
+- Illusory castle got a guardian, The Glass Golem (a NASTY thing) hoarding
+ The Helm of Knowledge, which auto ids every item you walk onto and activates
+ for insanity + *id*
+- Crushed all oriental items(nearly) of the game, they just doesn't fit the
+ general theme
+- Gigantic dungeons (flag DOUBLE) from SC
+- Ice lair as a Gigantic dungeon from SC
+- Dragon Lair is gigantic now
+- Between gates travelling damage is now /2
+
+18/05/2001
+- Checked in an EXTREMELY raw and broken version of my z-term changes that
+ produce cmovie files. It's disabled by default, if you want to play with
+ it, play with z-term.c ... Until I incorporate a cmovie player into
+ Pernangband, you can use the one I wrote for MY roguelike MoLD, available
+ at http://www.sourceforge.net/projects/mold/ . Little plug there. -- Improv
+
+21/05/2001
+- Moria WILL have downstairs at the bottom
+
+24/05/2001
+- New quest code ! Quests are no longer in *_info.txt files but are able to do
+ many new things, and the code is less ugly than it was :)
+- Random Quests refitted to use new quest code, now each level with a random
+ quest will have a vault with the monsters you need to kill inside, and a
+ princess that is held prisoner (your goal being to save her)
+- Refitted Thieves quest
+- New Bree quest, The Lost Hobbit ! save Merton !!
+- New key, 'y' to give items to monsters
+- Elven vampires no longer get resist lite, that was silly AND unbalancing
+- Artifact arrows wont come in piles anymore
+
+26/05/2001
+- Removed Wizard & prior classes, Mages & Priests can now use their realms
+- Refitted Crusade realm, some new (fun) spells
+- cmovie changes to make it work better. Should have it all cleaned up and
+ portable very soon. -- Improv
+- Updated pern_faq -- Improv
+- Power mages start with a 2d4 spells
+- Fixed a bug which made random artifacts destroyed by auto-squelch. --
+ Kusunose
+- Changed spellbooks colors to be more .. accurate
+- Add the Spirit realm, taking the place that was designed for it a long time
+ ago, the one that tribal used until now, between Valarin and Shadow.
+ Tribal is not removed, but it can only be used by some nature-like classes
+ (like beastmasters, rangers, ...). Some spell names & spellbooks names are
+ took from psiband Psionicists
+
+28/05/2001
+- disturb_move option off by default
+- Bree town totally redesigned by Mynstral to be more accurate the LoTR
+ description of it and to be more .. beautiful :)
+- New quest in Bree after the hobbit one, The Trolls Glade
+- Dark Horseman quest required level raised to 35
+- Massive updates to tables.c, fixed spelling of several spells, renamed a
+ few, fixed spelling of several lvl-specific class names, renamed a few.
+ Also working on maintainability for race/class restriction code in same
+ file. -- Improv
+- Entirely replaced TANG.txt with new stuff I wrote -- Improv
+- Permanent wraithform no more do the "You feel opaque" every few turns
+- Recoded the passwall() function to be... less ugly and less buggy
+- Archers learn to protect their arrows from fire as they advance levels
+- The Toris Mejistos guarded by Ar-Pharazon the Golden at the bottom of
+ the lost ruins of Numenor
+- Fixed random artifacts activation bug
+
+30/05/2001
+- Spell lists are now colored
+- Spell descriptions when browsing
+- Half magery spells descriptions done by Parak
+- The potion of learning is a k_info artifact now
+- Added color to seen unique list, quests list and a few others
+
+31/05/2001
+- Descriptions added to first five Shadow books (Shaun "arch" Sides)
+- Nazguls lost the DG_CURSE upon death
+- The Spiders of Mirkwood quest is the first Lothlorien quest
+- Magestaff of power now increases spell power while magestaff of spell
+ holds 2 spells (switching their previous behaviors)
+- New ego item system, externalized everything, it's half based on Matthias
+ Kurzke patch
+- Rewrote e_info.txt for the new ego system, the rarity should look like the
+ same
+- Bows of Numenor & Lothlorien as new ego items
+- DSM can be ego
+- some new ego & tweaks to existing egos
+- 3 new light types: Everburning torches, Dwarven lanterns and Feanorian
+ lamps
+- New ego lights: of Brightness, of *Brightness*, of Illumination, of Boldness,
+ of the Shadows, of Infravision, of the Eternal Eye
+- The Phial of Galadriel is now level 20 rarity 10, the ego lights & other
+ perm lights should be enough until then
+- Ego light: of Fading, will make non-permanent the permanent lights :)
+
+01/06/2001
+- Add auto curse
+- The One Ring will not be cursed when generated but will have the auto_curse
+ flag, so it is possible to use it and take it off for VERY brief periods...
+ but if it becomes cursed while you're wearing it .. you're stuck with it
+- The same applies for the Toris Mejistos (except that it's not permacursed)
+- Moved options around
+- No more books of lore, they are now Cloaks of Mimicry (and can be ego items
+ or randart)
+- Monsters that can suicide cannot be random quest monsters
+- Alchemist artifact creation totally changed. It now takes player level
+ essences of magic and 1 hp to "imbue" a normal non-artifact, non-ego item
+ into a pseudo artifact.
+ You will then wield/wear it and it'll gain some xp when you do
+ (reducing the amount you gain)
+ When you think you have enough xp, you finalize it (actually select the
+ flags that now cost xp) with the xp it has and the pval you choose.
+- Did more spelling updates on this file -- Improv :)
+- Finished moving the class-race combos in tables.c to a cleaner
+ format -- Improv
+
+02/06/2001
+- Copied Vanilla random artifacts name generator
+- Random ring & amulets are now "The Ring of foo"
+- Lights can be random artifacts
+- Described all Valarin spells
+- All non spellbook spells (Mindcrafters, necromancers, mimics) got a
+ description
+- All harper songs described
+- DragonRiders will learn to fly at level 17 (but they always can levitate),
+that's an old Divia suggestion
+- Magestaves of Spell still carry 2 spells, but they are randomly generated
+ using the runespell (magic of the Runecrafters) system
+- First draft of monsters gaining xp & levels
+- Magestaff of Mana & Power renamed to Magestaff of Wizardry (suggested by JLE)
+
+03/06/2001
+- Beginning work on unifying the load/save code to make
+ maintenance easier -- Improv
+- load2.c and save.c are now one file, loadsave.c ... Will now be working on
+ moving them to using unified functions so this code will be easier to
+ maintain. -- Improv
+- Reworked monster AI. A monster can now be enemy, neutral(oriented toward
+ player or monster or full neutral), friendly, pet or companion(will follow
+ you on other levels)
+- Pets (and other friends) will be less stupid
+
+04/06/2001
+- You can now assign a target to a pet
+- The Phial will now have a similar effect to song of morning (tribal)
+- The number of companions killed is taken into account in the score
+- New quest at Lothlorien, the poisoned water, with an unique reward,
+ a DSM of elvenkind (cannot be generated under normal circumstances)
+- Renamed Nibelungs to Petty Dwarves
+- New curse, you cannot drop the item
+
+06/06/2001
+- Multiple messages will show up as only one message with a multiplier
+- New Minas Anor layout (MUCH BIGGER) by Mynstral
+- Fixed the princess not appearing (she WAS there but got killed)
+
+08/06/2001
+- Fixed Mormegil (it was possible to use it with magic)
+- Companions stay even if you use the overview wilderness mode
+- Some monsters will tease the player but always stay out of melee range
+- A new pet command to make them forget their target
+- New ego type for heavy armors (Dwarven) with + to STR and maybe CON
+- Ammo & diggers doesn't add the tohit/todam to your total
+- Herbal healing at Gondolin will cure black breath
+- New store type: Master Archer
+- Rings can be ego objects now
+- Scrolls can be ego now (Fireproof)
+- Wands & Staffs (except of wishing) can be ego item: of Plenty
+
+10/06/2001
+- Possessor now have mana (based on INT) and use it to cast the spells of the
+ monster they are using
+
+12/06/2001
+- Deathmolds can now use the overview wilderness map but the travel time is
+ higher and there is a chance to not blink right and move onto an undesired
+ square
+- Changed Summon Cyberdemon to Summon High Demon (with the incoming new JLE
+ demons it'll be nasty)
+- Added Possessor monsters, they'll hunt corpses and incarnate into them !!
+ Now you must fear even dead monsters
+- The Phial of Undeath now has a radius of 5
+- Unique monsters list is now sorted (but Morgoth is always at the bottom)
+- Add monster traps from PsiAngband. Rogues can now set them (with the powers
+ menu, 'U' key)
+ Direct quote from Psiband change file:
+ Rogues can set traps for monsters. This requires a "trapping kit" as a trigger
+ and something to "load" the trap with.
+ All scrolls, potions, wands, staffs and rods can be used (with the appropriate
+ trigger) as traps to confuse, poison, teleport, genocide, ... unwary monsters.
+ But standing next to a trap with area effects will hurt the player, too.
+ There are also traps that shoot ammo: hidden catapults, bows and xbows.
+
+ Some monsters can disarm traps, and a monster that has disarmed one of your
+ traps will learn how to disarm all of them...
+
+ Ammo Traps can have (+hit,+dam) just like bows. They can also be enchanted.
+ All traps can have a [+AC] showing how hard it is to disarm it.
+ There are also ego and artifact traps.
+- Add the ego & artifacts trap kits from PsiAngband
+
+15/06/2001
+- Hallucination monster attack (JLE will use it for the review of r_info)
+- You can use up to 5 R_CHAR_x flags in the F: line or re_info.txt to specify
+ races to which the ego powers are available
+- Crusade realm described
+- The Star of Elendil now has a light radius of 4
+
+17/06/2001
+- The dungeon info file (d_info) now allows more than one monster generation
+ rule. The R: line specifies the percent of monsters affected by the rule
+ and the mode of the rule(AND, NAND, OR, NOR). So it is now possible to
+ have 60% of orcs, 30% of trolls and 10% dragons
+- New dungeon in Mirkwood, Dol Guldur !
+- Sorcerors cannot use Valarin (prayers should not be available to mages) and
+ Tribal (instead they get Spirit)
+- Fixed some misspellings in lib/help/ -- Kusunose
+
+18/06/2001
+- Auto pickup option now defaults to false
+- Fixed bugs with the cursed ego items
+- Described the remaining Magery spells
+
+19/06/2001
+- Point based character generation
+
+20/06/2001
+- Finish cmovie support !
+- Added an interface to cmovie (press | key in both normal or roguelike set)
+ It asks for a name (it will add the extension itself) and then if you wish
+ to play or record it.
+ The cmovie files (.cmv) are located in lib/cmov, note that they quickly
+ become huge and so you REALLY should compress them before sending to friends
+- Fixed a bug that prevented mutations from being correctly cleaned
+
+21/06/2001
+- Special artifacts can be placed anywhere in a_info, they just need the
+ INSTA_ART flag
+- Emptying lite warnings should work now
+- Added new quest, not found in a castle.. I won't say anything more :)
+
+23/06/2001
+- Added 2 new dungeon flags:
+ LIFE_LEVEL will generate levels with a cellular automaton algorithm (looks
+ like a game of life)
+ EVOLVE will make a LIFE_LEVEL be continuously parsed by the cellular
+ automaton algorithm while the player moves, resulting in a living effect
+- New dungeon: The Heart of the Earth, branching on level 25 of Mirkwood
+ it uses the evolving algorithm :)
+- Added the new Minas Anor (one map screen total). Fully functional
+ (except for the random terrain via the plasma generator *hint,
+ hint -> DG*) --Mynstral
+- Moved the rarity of the Phial of Undeath to the one of Galadriel
+- Add Death Orb monster as suggested by Prfnoff a long time ago.
+ They only move when in LOS. They multiply (quickly) and can hit to parasite
+ which will make a new death orb spawns out of you later
+- Fixed a bug in cmovie that messed up the recording when the user specified
+ different char than the normal ones
+- Loadsave work is now pretty much complete. Barring the addition of
+ transparent compression, which might happen later, there shouldn't be any
+ reason why savefile compatibility should ever break again. -- Improv
+
+24/06/2001
+- Several bugfixes -- Kusunose
+ Player's symbol was never displayed if VARIABLE_PLAYER_GRAPH or
+ USE_GRAPHICS was #undef'ed
+ Eating a corpse sometimes crashed the game.
+ Stealing from a monster sometimes crashed the game.
+ Nether immunity won't work if player had nether resistance.
+ and some minor bugfixes.
+- Birth classes selection is now more user friendly
+
+27/06/2001
+- D: line enabled in k_info.txt
+- Added ingame information about the different objects kind one can find
+ It is accessed via the observe key ('I' in original keyset)
+
+28/06/2001
+- Add back the Eol quest at Gondolin, but it's now dynamically created
+ (the level layout and trap places are random)
+
+30/06/2001
+- Reimplemented Nirnaeth Arnoediad quest at Gondolin, but with a different
+ reward
+- Add a spoiler menu to the help menu, thanks to Dawnmist
+- Fixed a bug; Steal Item Trap sometimes crashed the game. -- Kusunose
+- Working on rewriting more documents in lib/help/ -- Improv
+
+03/07/2001
+- Fixed a long-lived bug with power mages. This greatly affects play-balance
+ with them -- no longer will the cost of many of their high level spells
+ be merely 1 mana. Also, removed some of their effects that never really
+ worked anyhow. -- Improv
+
+07/07/2001
+- Some more misspellings on this file are fixed. -- Kusunose
+
+11/07/2001
+- Cannot add essences to artifacts
+- Object descriptions are added in the character dump
+- Notes are saved in lib/note
+- Priests and paladins begins with 10 times more grace with their god
+
+12/07/2001
+- Rods with rod tips attached sells for higher price
+- Down shafts cannot get you out of a dungeon
+- Cannot enter water and such in overview mode when too burdened
+- The no_pickup_corpse option changed to prompt_pickup_heavy which will ask
+ a confirmation before picking up objects that might slow you
+- Add an menu to the option screen to dump/load options to a pref file
+- Fixed a bug with dungeon guardians being generated more than once
+
+13/07/2001
+- Unique list is now in 2 columns
+- Race selection screen made more user friendly with race desc
+
+14/07/2001
+- Reworked the spell system
+ Now each spell got a level that you increase as you learn it more and more.
+ The higher the spell level is the more damage it does, the more time it
+ lasts and such.
+ Also each class have a specific max on the number of levels they can achieve
+ in each spells. This should help the high mage class since they get twice the
+ max level of mages. Also illusionists gets more than mages.
+ Also note that sometimes one more level wont change anything while 2 or 3
+ more WILL change. And lastly some spells are not affected by levels at all
+ One last thing, sorcerors cannot learn spells and thus cannot increase their
+ spell level which will always be 1
+- Player races now have inherent body parts, so a deathmold cannot use
+ headgear or boots but can wear more rings
+- New DarkGod sentences by Static Chaos
+- Fortune cookie by SC
+
+15/07/2001
+- The more you known a spell the faster it is to cast
+- Every class can now choose which spell/prayer to learn
+- Began reworking the spell bonuses(from spell levels or mage staves) to a much
+smoother distribution, so if a point if used it WILL have impact. Done the
+ Valarin Realm
+- Done Magery Realm
+- Done Symbiotic Realm
+- Done Music Realm
+- Done Shadow Realm
+
+16/07/2001
+- Done Chaos Realm
+- Ingame contextual help(on by default, can be turned off in the options)
+ Only few stuff got help right now, but that'll be extended
+
+17/07/2001
+- Spell list with levels included in the character dump
+- Updated docs thanks to Dawnmist
+
+18/07/2001
+- Hypertext help system, use up/down/space/- to scroll, left/right to move
+ between links and enter to activate a link
+- Race mods selection screen upgraded
+- The k_info artifacts will have a name again(was a stupid bug)
+- Done Nether Realm
+- Unified savefile loading screen. Now when the game is started it presents
+ a screen allowing to create new characters or to load/destroy existing ones
+
+19/07/2001
+- No more breeders in poisoned quest
+- Add an option to show exp needed for next level instead of total exp
+- Objects with the temporary flag will be destroyed when it's timeout
+becomes 0, allowing spells to summon fiery blades and such
+- Valarin Realm got a spell to create a temporary Holy Avenger
+
+20/07/2001
+- Created a cygwin makefile (makefile.cyg) for Windows -- Dawnmist
+- Split spoiler help files into true spoilers and newbie help files -- Dawnmist
+- Continued minor edits of help files. -- Dawnmist
+- Possessors reworked again
+ Now they get between 1 and 20 mana based on the spell rate of the monster.
+ When you cast a spell the failure rate is determined based on the player
+ level, player wisdom, monster level and spell difficulty. If the spell
+ fails it is still cast but you lose a few mana. If it succeeds you don't
+ lose mana. If it takes you below 0 mana you are forced to leave your corpse.
+- Done Spirit Realm
+- Done Tribal Realm
+
+22/07/2001
+- fixed a bug in project_meteor() that crashed the game. -- Kusunose
+- Updated option.txt for exp_need option. -- Dawnmist.
+- Continued edits on help files. -- Dawnmist.
+- Done Crusade Realm
+- Rewrote bldg.txt for Pern 4.x.x. -- Dawnmist.
+
+23/07/2001
+- Redone help file colour scheme to allow orange/yellow hyperlinks -- Dawnmist.
+- Continued edits on help files -- Dawnmist.
+- Spell checked tables.c -- Dawnmist.
+- Spell checked this file :-) -- Dawnmist.
+- Updated features and objects in dungeon.txt help file. -- Dawnmist.
+- JLE reworked the monster list, some monsters are gone, some monsters are
+ changed and some are new
+- Along with r_info JLE also modified d_info, big thanks to him
+- No more quest for shelob in mirkwood(she guards cirith ungol now)
+ Instead you must hunt the necromancer that is said to lurk in dol guldur
+- As long as sauron his alive the nazguls cannot be permanently slain
+- Attacking a nazgul no longer destroy artifacts(well it can, but the chance
+ is 1 in 1000)
+- Done Daemon and Sigaldry realms
+
+24/07/2001
+- SURPRISE!! I did something (but what it was is a surprise too) -- Mynstral
+- Added debug 'B' command, changes body -- Improv
+- Added colours and hyperlinks throughout command.txt -- Dawnmist
+- Updated most command descriptions in command.txt -- Dawnmist
+- Minor updates to some other help files -- Dawnmist
+
+25/07/2001
+- Massive merges from my internal cvs tree of loadsave.c
+ Hooked experimental bzlib integration in an #ifdef
+ Gutted the old 'encryption' code
+ Hoping to gut RLE if bzlib changes work out
+ Added nice sentinel function -- Improv
+- Fixed class selection screen bugs, fixed savefile manager so it will work
+ with unix. -- Improv
+
+26/07/2001
+- Added a quest map for Gondolin. -- Mynstral
+- Gondolon last quest: Invasion of Gondolin !
+- Upgraded max suport to the new birth interface thanks to pelpel
+- Several fixes thanks to pelpel
+- Add an option to use either the new r_info coloring scheme(based on V one)
+ or the old one(based on Z)
+
+28/07/2001
+- Fixed a lock problem with global.svg on multiuser system thanks to pelpel
+- Done Magic Realm
+- Done Druidisic Realm
+
+30/07/2001
+- One can press 4 (left arrow) in class selection to get back to meta-class
+ selection
+
+02/08/2001
+- Updated several *_info files thanks to JLE, new arts, ego, objects, ego
+ monsters
+- Fixed a bug in ego monsters, now they works perfectly :)
+
+03/08/2001
+- Done Illusion Realm
+- Added macrofaq.txt to help system -- Dawnmist.
+- Updated/fixed a few problems in the help files, and linked in new macro FAQ -- Dawnmist.
+- Increased chance for player ghost to appear
+- No more ego monsters in town
+- Spectre subrace can only use 1 ring
+- Made bree and gondolin finally use the plasma generator, and added two terrain
+ features. -- Mynstral
+
+04/08/2001
+- Fixed a bug with ego monster generation that inversed ego rarities, thus
+ explaining the incredible numbre of spectres running around
+
+05/08/2001
+- Fixed the orc level in the moria
+- Bladeturner is now an UNTIMATE artifact, but can be activated for invulnerability
+- Major rewrite of magic and class help files -- Dawnmist.
+- Fixed a bug with saving/loading while doing invasion of ogondolin quest
+
+07/08/2001
+- Fixed Tribal realm
+- Major rewrite of race modifier help files -- Dawnmist.
+- Spellchecked this file - Improv
+- Reintroduced water hounds - Improv
+- Major rewrite of race help files -- Dawnmist
+- Graphics for shop doors -- Kusunose
+- With help of Antimatter, squashed item bugs related to negative pvals and
+ the signedness of some functions. -- Improv
+- Done Prayer Realm
+
+09/08/2001
+- Fixed a bug with evolving dungeon when saved/loaded
+- Only the quest monsters counts for quest, not clones, not normaly generated
+ ones
+- undead ego monsters cannot be mortal
+- Monster ego name can appear before or after the monster name(:B or :A at the
+ end of the W: line)
+- Object ego name can appear before or after the object name(B or A on the X:
+ line)
+- Fixed a long-lived item-pickup bug -- Improv
+
+10/08/2001
+- Ego monsters will be drawn in gfx mode
+- Add a birth menu to select the god to worship, druids are forced to get
+ Yavanna, priests and paladins are forced to have a god, others can choose
+ to be atheist
+- No more multiple artifact arrows
+- Continued edits on the help files -- Dawnmist
+- Completed the spell descriptions for the Shadow Realm -- Dawnmist
+- Vampiric weapons can be sold again
+- Staff & Wand of nothing of plenty cannot exist
+- Staff of wishing CAN be of plenty
+
+11/08/2001
+- fixed a bug with esp and flags5 not being saved thanks to kevin w.thomas
+- fixed a bug in nirnaeth quest
+- Reduced sorceror hp penality to -10%
+- Removed the screen coloration when berserk/wraith/goi
+
+12/08/2001
+- Fixed invasion of gondolin quest
+- Fixed lightning res amu
+- Add the Merchant class(thanks static chaos), they can get loans(watch out if
+ you dont pay back quickly) and request items at the merchant guild.
+ they can appraise items, identify items, warp items in chests. They get
+ an object based ESP(see monsters carrying objects) at higher levels, they
+ constantly detect objects around them and they can use portable holes
+ to get a bigger inventory(but items in it weights more)
+
+13/08/2001
+- Fixed font-ibm thanks to pelpel
+- Merchants gets the midas touch
+- Vanilla town option removed. Astral mode now make the player start in the
+ Halls of Mandos(levels 1-98) which do not have any entrance from the
+ wilderness(or any dungeons). When they get out they are in the wilderness
+ and can start playing normaly. And uniques cannot be generated in the halls
+ of mandos
+
+14/08/2001
+- Updated font-ibm and font-win thanks to pelpel
+- When selecting the number of random quests, * will get a random number
+- Score list now shows the subrace, but it breaks the compatibility with old
+ ones
+- Reduced xp needed by monsters to gain levels
+- Ego items are wishable now. i.e you can ask for "fiery dagger"
+- Updated font-ibm and font-win thanks to pelpel
+
+14/08/2001
+- Added the map for a new quest. -- Mynstral
+- Finished the Last Alliance quest
+- Number of companion a player can have at max depends of the class
+ necro gets 1 + (plev / 10), beastmasters 4 + (plev / 10, harpers 5
+ all others 2
+
+16/08/2001
+- Fixed ambushes
+- Added merchant help
+- updated mac suport thanks to pelpel
+- Reduced by about 6mb the memory req
+- Hidden towns are generable
+- Fixed a bug with weapon specialty at birth -- Kusunose
+- New item ability, some rare rings can add %(based on pval) to the chance
+ of getting a critical hit
+- Objects can now shimmer(ATTR_MULTI), but only base types (k_info) can have
+ the flag
+- Features can now shimmer, note that this can be slow. Please report if it
+ is unbearable on your machine(you can also disabled the avoid_other option)
+- Reduced memory footprint again
+- Reworked the 'U' power menu to be more nicer and intuitive while still
+ allowing macros. Each powers gets a fixed number that can be used as a
+ prefix to the command to bypass the menu. For example teleport is 5 so
+ to directly get teleport one can always do 05U
+
+17/08/2001
+- Described Chaos realm
+- Described Nether realm
+- Described Sigaldry realm
+- described Spirit realm
+- Fixed a bug with random quests
+- Fixed a bug in note taking, thanks to pelpel
+- Fixed the interact with visuals menu thanks to pelpel(the fix is not even
+ in vanilla yet :)
+- Fixed cmovie recording
+- Merchants can request ego items(same interface as wishes)
+- Towns in dungeons now get townpeople in it ... leveled townpeople
+- Eggs are now , instead of o
+
+17/08/2001 - PernAngband 5.0.0 aka "Mirmidonic Carbonizer"
+- Birth options now appear in the normal option screen, but as read only
+
+18/08/2001
+- Special levels reworked
+- Volcano is now Mount Doom and is found on level 65 of Mordor
+- fixed help system crash thanks to pelpel
+
+21/08/2001
+- fixed the hypnotic gaze bug
+- reduced between gates damage
+- daemon books can be enchanted
+
+19/08/2001
+- Beginning work on a new, better status screen. For now, it's assigned
+ to the debugging menu as the 'A' command. -- Improv
+- fatespoil.txt changed to fatespoi.txt
+- rogues get some shots for their trapkit at birth
+- Cannot dismiss the princess anymore
+
+23/08/2001
+- Fixed the special levels, thanks to mynstral
+- Described Daemon realm
+
+23/08/2001 - PernAngband 5.0.0b aka "Mirmidonic Carbonizer II"
+- Default pref files are in lib/pref
+- Random quests are disabled when using ironman_room
+- Add auto_more option -- beware it can be very dangerous
+
+24/08/2001
+- Increased general store price limit
+- Trapkits added to squelch list
+- Fixed a bug when displaying some k_info artifacts
+- Wand of Gandalf and Thrain are now k_info artifacts
+- Fixed 2 bugs with rogue traps
+
+25/08/2001
+- Necromancers can turn pets into companions
+
+26/08/2001
+- Special levels are no more fully known
+- Fixed fountain bug; shape of XXX did not take effect -- Kusunose
+- Described Illusion and Tribal realm spells -- Dawnmist.
+
+27/08/2001
+- Fixed bug with scrollable list of powers
+- Added Magical diggers, they grant stone to mud power
+- Added the Corrupted subrace gaining corruptions as they level thanks to
+ Luc French
+- Changed mutations to corruptions
+- Dragonriders are no more considered evil
+
+28/08/2001
+- Fixed some cmovie bugs
+- Fixed *godness* song on non artifacts
+- Greatly increased herbal healing price in gondolin, since it cures black
+ breath
+- Fixed bug with store item creation -- Kusunose
+
+29/08/2001
+- Totaly rewrote the random artifact system. It now use an external ra_info
+ file to define what power the artifact will get. The format is very similar
+ to e_info(expect it doesnt include the 5 flags sets). Each entry define for
+ which tval/sval it can be applied. Then when the game wants to create a
+ randart it simply defines a number of powers to grab and randomly pick up
+ the powers from ra_info(following the restriction, rarity and levels).
+ This allow a totaly change of the randarts if needed, an easy addition of
+ new powers, ...
+
+30/08/2001
+- Hidden doors are now hidden, in mirkwood they will look like trees, in
+ barrow downs they will be mountains or trees, and so on
+- Beastmasters can turn a pet into a companion
+
+31/08/2001
+- Half elf lost the str penality
+- Half orcs and half Trolls or now Orcs and Trolls
+- Saved levels are deleted when a new character is created
+- Renamed Holy Advangers to weapons of Aman, thanks to Timo Pietila for the
+ idea
+- Cannot reset recall to Mount Doom
+- The game time is now counted with the elven calendar (reckoning of Imladris)
+ (It isnt PERFECT, every 12 years it should have years of 368 days, but I
+ dont think many will get upset :)
+ A year is 365 days, with 6 months (Tuile, Laire, Yavie, Quelle, Hrive and
+ Coire), 3 middle days(Enderi) and one starting(Yestare) and one ending
+ (Mettare) day.
+ The game begins the 43rd Yavie the year 2890 of the third age, note that it
+ is the birthday of Bilbo :)
+- Note files (mainly) use the elven calendar to record things
+
+02/09/2001
+- Fixed several bugs (runespell deletion, ego wand and staff stacking etc)
+ thanks to oops -- Kusunose
+
+03/09/2001
+- Changed the 'Lev xxx' thing to a 3 letter name corresponding to the current
+ place(dungeon, orc cave, ..)
+- Enabled f_info D: line with an index(0 is general desc, 1 is to (forbid)
+ tunneling)
+- Changed the way total weight is calculed thanks to Kieron Dunbar
+- One can edit his background history at birth :)
+- Lich ego monsters can use the base monster powers
+- Raise death can bring a lich
+
+04/09/2001
+- Enabled E: line in f_info(same format as d_info)
+- F: lines enabled in lib/dngn files, they specify flags for the level
+- Fixed a bug with special level generation
+- Add bleeding and poisoning monster effects from EyAngband
+- The One Ring quest
+
+05/09/2001
+- Fixed the crashing bug after level 100 in angband
+- Gave Sauron 30% chances to drop The One if it is not already created
+- Code now allows bi-ego objects, thoght they are impossible to generate yet.
+ It will allow additing weapon/armors qulities(crude, broken, ..) easily
+- Add a quick start option that let you use the same char as you previous one.
+ Everything is the same execpt life rating
+
+06/09/2001
+- Abort menu in the Windows version is now compile option, disabled by
+ default. -- Kusunose
+
+07/09/2001
+- When a new day comes the game tells the player(at midnight)
+- Drain hp and mana are cumulative
+- Fixed file existence function for dumb systems :)
+
+07/09/2001 - PernAngband 5.0.1 aka "Brunswik Disipator"
+
+09/09/2001
+[B]- Turns in scores are based upon the start of the game not of the year
+[M]- Mimic are REALLY mimics, they can look like any object and appears as
+ objects when looked at. And they got an emperor
+[I]- Enhanced realm selection menu
+[B]- Farmer maggot shows up in the unique list
+[M]- Monster vs monster damage is now x3 to shorten fights
+
+10/09/2001
+[P]- Changed the boring Half-Giants race to the much more interresting
+ Beorning race. Descandant of beorn they can all shapeshift into a powerful
+ bear form at will. In bear form you cannot use weapons, gloves, shields
+ and boots. But you get powerful stunning/slowing/wounding attacks
+ (claw, bite, swat, hug) and innate blows. You also get bonuses and minuses
+ to some stats and to to hit, to dam and speed
+
+12/09/2001
+[O]- One Ring cannot be dropped by traps
+[G]- Implemented luck, an invisible stat which can only be approximately known
+ via self knowledge spell/potion. It affects quite a few dice rolls.
+ Each race gets a luck modifier, for most it is 0, but some gets penalities
+ or bonuses(hobbits are a lucky bunch).
+ Some objects also can grant luck
+
+14/09/2001
+[D]- The graveyard will now project a raise death spell on all bodies, meaning
+ you'll have to kill a monster, and destroy its body before it get raised
+ back in the form of a skeleton, spectre, lich, ...
+ PS: MOUHAHAHAHHAHA
+
+15/09/2001
+[B]- Bugfixes -- Kusunose
+ A message "XXXX blocking your way" was displayed when you went through
+ some walls or trees.
+ Hidden doors remained hidden if they were detected by spells, or if they
+ were opened by monsters and then closed. Thanks to kobayasi.
+ and some minor fixes.
+
+16/09/2001
+[m]- Implemented lua scripting language! More on that on the to-be docs
+ You need to get lua3.2 to make it work.
+[m]- Integrated lua3.2 source into the source, no more need for external
+ librairie
+[M]- Fixed store lockup bug thanks to Kusunose toru
+[I]- Partial 8x8 tile update -- Dawnmist.
+[m]- Cygwin makefile update -- Dawnmist.
+[P]- Externalized player races and histories
+
+17/09/2001
+[P]- Elves cannot be vampire anymore
+[P]- Hobbits get intrinsinc xtra might with slings at lvl 25
+[P]- Extended the possibilities of the player races file, it is now possible to
+ select what flags will be applied at what level and for what pval(if
+ revelant)
+[B]- Fixed non connected stairs on quests, thanks to luc french
+[I]- Removed screen dump/load commands, redundant with cmovie, and frees to keys
+[I]- Y( ( in roguelike keyset) key to chat with monsters
+[G]- Changed the way to get the lost hobbit quest
+[B]- Fixed a bug with eat magic corruption
+
+18/09/2001
+[G]- System shock when thrown out of one's body while wzearing cursed items
+[G]- Set the joke/Z/cth monsters off by default
+[P]- Externalized subraces to p_info
+[M]- No more joke mosters as quests
+[m]- Integrated an automatic help file converter(creates html files), command
+ line option -h
+
+28/09/2001
+[m]- makefile.org now supports Lua, uses Improv's installation rule
+ in all cases, it also understands make depend as well.
+ Read it, make necessary changes for your system, then make depend
+ followed by make.
+[B]- validate_bg() referenced a null pointer.
+[m]- CodeWarrior project file for the Mac port supports Lua.
+[m]- main-xxx.c for the Mac is now in sync with my Vanilla port -- pelpel
+
+29/09/2001
+[B]- Fixed herbal healing price
+[I]- 16x16 bmp/mask added to the cvs
+[G]- Cth/Z/Joke monsters options appears in char dump
+[B]- Fixed Crusade spell book browsing bug (Bug list #33) -- pelpel
+[B]- Fixed a bug; the first harper book was never sold in the bookstore
+ (Bug list #15) -- Kusunose
+
+30/09/2001
+[G]- Increased min player level for some dugneons
+[I]- Message can be multi colored
+[m]- Yesterday I got OS 10.1 and found that it fixed the new window
+ position bug (search for (_ _#) in main-crb.c), so I conditionalised
+ the workaround -- pelpel
+[B]- Fixed the combined rod pricing (Bug list #30) -- pelpel
+[B]- Typo in files.c: cht_monsters -> cth_monsters. Replaced non-ASCII
+ 0xa0's in angdos.cfg with 0x20 (i.e. space) -- pelpel
+
+01/10/2001
+[B]- Monks and Bear form didn't have combat messages -- since many lines
+ in the current flavoured messages mention weapons, I introduced a
+ hack to temporarily disable flavored_attacks for them, then just
+ process messages as usual, and restore the flag later (Bug list
+ #44 and #53) -- pelpel
+
+02/10/2001
+[B]- The trap/door destruction spell didn't destroy doors (Bug list #25) --
+ use of floor_type[rand_int(100)] results in a 'natural' terrain,
+ but isn't compatible with digging etc. Do they need fixing too? -- pelpel
+[m]- The main window resist resizing in the Windows port, like the Mac
+ ones (Arcum's problem, future Bug list #74 and #75) -- pelpel
+
+07/10/2001
+[B]- Fixed PowerMage mana consumption bug (Bug list #114) thanks to krosky
+ -- pelpel
+
+08/10/2001
+[B]- Fixed light source stacking bug (Bug list #7) -- Kusunose
+
+21/10/2001
+[M]- Add NO_CUT to some monsters
+
+22/10/2001
+[I]- Colors to news.txt
+
+25/10/2001
+[M]- Added gamma correction function taken from V2.9.x in util.c, since
+ new X11 file requires it, so does my main-gtk.c, ready to be submitted
+ -- pelpel
+[G]- Cannot use overhead wild map if being recalled
+
+26/10/2001
+[B]- Fixed long-lived dragonrider bug (xtra1.c), Darkgod please check to see
+ if the behavior is as you want it -- Improv
+
+27/10/2001
+[P]- Externalized classes to p_info.txt
+[P]- Externalized meta classes to p_info.txt
+
+28/10/2001
+[B]- Fixed display of race/subrace/class flags
+[I]- Add some color to the identify screen
+[I]- Ignore Acid, elec, fire and cold are merged in identify screen
+[I]- Inventory/equipment letter are color-coded when *identified*
+[O]- Item sets ! Some artifacts are working together. If you wear them
+ at the same time you get bonus powers. You can get partial bonuses i.e:
+ You have 2 artifacts of 3 artifacts set, you will get some bonuses for
+ them but not all.
+[M]- Add NO_CUT flag to monsters needing it thanks to
+ Runescrye
+
+01/11/2001
+[B]- Changed king to the actual winner name in the quest dump
+
+03/11/2001
+[m]- Upgraded to lua4
+[m]- It is now possible to define new magic powers(ala mindcrafter, necro, ..
+ powers) with a small lua script
+[O]- New item set the Dragon Slayer
+[m]- New gtk port thanks to pelpel !
+[m]- Mac makefile equivalent is updated, now with lua4 for all targets -- pelpel
+[m]- src/lauxlib.h is synchronised with src/lua/lauxlib.h -- pelpel
+[m]- LUA_NUM_TYPE in makefile.org is removed because src/lua/llimits.h now
+ has correct (read integer :-) default -- pelpel
+
+04/11/2001
+[M]- All dragons now shimmer, according to their breath types(took from LM's 4GAI)
+ That is also thanks to the neat info editor of static chaos :)
+[m]- Change my email adress to darkgod@pernangband.net, adds ideas@pernangband.net
+ and bugs@pernangband.net thanks to Tom Le
+[I]- Added gamma correction subcommand to "Interact with colours", and
+ updated main-gtk.c and maid-x11.c to work with that (they formerly
+ used an environment variable for this). Also added gamma correction
+ support to main-ibm.c and main-dos.c. CAVEAT: tiles don't react to
+ changes in gamma immediately, for performance reasons -- pelpel
+
+05/11/2001
+[m]- Removed notice of sf_extra value from savefile load code. We probably should
+ make the spot where it loads it a ls_skip and remove that older family of
+ versioning variables -- Improv
+[m]- Took a stab at code to make a dynamically allocated loadsave section. It's
+ not called because it needs support code that presumably DG will write.
+ With any luck it'll be sufficient to do the job -- Improv
+[I]- Updates to experimental new status screen -- Improv
+[B]- Fixed a bug that caused all monsters drop inappropriate things. Hydras now
+ just drop money again. Yay. -- Improv
+
+06/11/2001
+[m]- Added an automatic nice changelog generator based on changes.txt. To all people
+ with cvs access, please use the new format for changes.txt.
+ It is activated with the -c flag: pernangband -c changes.txt changes.nice
+
+07/11/2001
+[P]- It is possible to define player power(under the U menu) with lua scripts
+ (and thats easy :)
+
+09/11/2001
+[B]- (IBM, DOS, GTK) gamma_val is reset as well as old_gamma_val
+ when invalid values are specified, ensuring correct reaction -- pelpel
+[B]- File-Save was never active in the Gtk port -- pelpel
+[m]- gamma correction for Windows port. I'm too lazy to save it in preferences,
+ though. May be redundant since many drivers provide similar functions
+ -- pelpel
+[G]- Flat places no more have stairs, they have ways to next/previous areas that
+ are always placed on the edge of the level
+[D]- Level borders are now of the same type as the level walls, no more forest
+ surrounded by granite walls
+[B]- Haste Monster cannot haste as much as before
+[I]- Pets infight wont disturb the player anymore if disturb_other is off
+ (it is by default). In combinaison with auto_more it will totaly ignore
+ pet messages
+[O]- New item set, The Trinity
+[m]- Lua-ified item types(can add new ones with simple lua script)
+
+10/11/2001
+[m]- Added Gtk entries in the system pref files, also enabled new graphics
+ for X11/Gtk ports -- pelpel
+[I]- The target prompt will indicate if the targetted monster is a quest
+ monster or not
+
+12/11/2001
+[m]- Updated main-xaw.c to that from the same version as main-x11.c
+ i.e. 2.9.2. It now reacts pref colours and has graphics mode
+ (doesn't work with 8bpp though). CAVEAT: main-x11.c and main-xaw.c
+ should free unused colours after allocating new one. -- pelpel
+[G]- Troll galde quest only available at night
+[G]- Genocide is forbiden in the last alliance quest
+[G]- Invasion of gondolin quest will wait the end of the current quest to be
+ generated
+
+13/11/2001
+[m]- Variable savefile ! Lua scripts(or C scripts(quests)) can now add stuff
+ to the savefile without ever breaking the compatibility !
+ See an example ofthat in test.lua
+[B]- SPECIAL_GENE objects were generated out of context -- pelpel
+[B]- Inappropriate monsters could be assigned to randquests in
+ rare occasions. CAVEAT: it now uses an infinite loop to
+ avoid illegal choices! -- pelpel
+
+14/11/2001
+[G]- New quest, try cahtting with maggot instead of killing him, you murderer !
+[m]- Re-implemented object allocation table caching -- pelpel
+
+15/11/2001
+[B]- Inserted /* Paranoia */ code in kind_is_theme() to prevent "(Nothing)"
+ from generated due to missing drop theme in r_info. Player ghosts
+ had this behaviour as far as I know -- pelpel
+[m]- Changed the rand quest reward generation to make it compatible with
+ yesterday's fix -- pelpel
+[O]- Added new ego rod, of simplicity, thanks to Runescyre for the idea
+[m]- Max number of classes, races, subraces and realms is now 64
+
+16/11/2001
+[I]- Stole the death screen of KaMband, much nicer :)
+[P]- Removed the astral option. It is replaced by a subrace, Lostsoul, they
+ have intrinsinc wraithform(until they get back to the surface), start
+ with some identify scrolls and have all levels enlightened
+[B]- The find artefact fate was able to grant SPECIAL_GENE artefacts -- pelpel
+
+17/11/2001
+[D]- Dragon Lair renamed to Erebor, the misty mountains
+[P]- Rogues gets level/3% more changes of critical hits
+[D]- The wilderness "borders" are now Ekkaia, the Encircling Sea
+[I]- I ran out of keys, so I added an extended command mode. Press '#' (')' in
+ roguelike command mode) to acess to it. You can then enter the command
+ name or a shortcut if the command have one(usualy a command have a 1
+ letter name and a complete name). You can also press ? or help to get
+ the list of commands
+[I]- The time command is avaiable again for roguelike command set in the form
+ of the t/time extended command
+[I]- D/html-dump extended command to take an html screenshot
+[I]- Quest list is now ordered by danger level
+
+18/11/2001
+[B]- Attempting to go down shaft gave the message "I see no down staircase
+ here", thanks to Kevin W. Thomas -- pelpel
+
+19/11/2001
+[G]- Reduced the Spirit Realm Project Force spell radius as it increase levels
+[B]- Entering Nether Realm crashed the game, thanks to M.Itakura
+ -- Kusunose
+[B]- Polymorphing monsters in the wall crashed the game, thanks to to
+ M.Itakura -- Kusunose
+[B]- Sometimes random quest appeared on deep(dlv>98) Angband -- Kusunose
+[B]- Cursed EASY_KNOW items were not squelched -- Kusunose
+[B]- Replaced all checks against RF1_QUESTOR to MFLAG_QUEST -- Kusunose
+[B]- Shafts were not detected by detect stair spell -- Kusunose
+
+20/11/2001
+[G]- Traps have been tweaked down to be a bit less deadly, thanks Runescrye
+[P]- Summoner class! Thanks to Luc French for the idea and quite a bit of
+ the code
+[I]- New splash screen made by Jans
+
+21/11/2001
+[B]- Mathilde was allowed to use wepaon(when possessed)
+[I]- Finished all spells description, thanks to Runescrye
+
+22/11/2001
+[m]- Quests are lua-ified
+[m]- flush() is called before *that* DragonRider question, to prevent
+ catastrophic(?) accidents, taken from Kusunose's Japanese version
+ -- pelpel
+
+25/11/2001
+[B]- (GTK)Widget instance names should have begun with lowercase letters
+ -- pelpel
+[B]- (makefile)LUA_NUM_TYPE macro removed (see my 3/11/2001 mod
+ for makefile.org) -- pelpel
+[D]- Museum(Mathon-house) added to Bree thanks to Kusunose
+
+27/11/2001
+[I]- Added an option to allow the @ to turn into a number when health
+ drops. ideas from Mangband/PernMangband
+
+28/11/2001
+[m]- ANGBAND_DIR_USER is moved to ~/.pernangband on multiuser systems
+ (Unix, GNU/Linux), according to DG's preference, and against the
+ V/Z way... IMPORTANT NOTE FOR 422color USERS: please move
+ 422color.prf to lib/pref directory -- pelpel
+
+30/11/2001
+[B]- I forgot to give Tom Demuyt credits for the Unbelievers idea.
+
+01/12/2001
+[m]- Updated makefile.bcc. It now supports lua4. -- Kusunose
+[B]- The broken sword quest generates the real reward, thanks
+ Dawnmist
+[m]- Windows port now saves gamma_val in .INI file. -- Kusunose
+
+03/12/2001
+[M]- Rejoice ! no more nazguls as random quests
+
+04/12/2001
+[m]- Some patches from Kieron, thanks
+[I]- Kieron save squelch patch, modified to not save from chars to chars
+ it can just be used to dump suqelch to a .prf file and load it
+
+05/12/2001
+[P]- New class from Luc French, the Blade, weaponless fighter able to dodge
+ melee & some spells
+
+07/12/2001
+[B]- One could steal guardians' artefacts and reenter level to
+ obtain multiple copies (buglist??) -- pelpel
+[B]- Fates could be lost during level regeneration (auto_scum and/or
+ too many objects/monsters) -- pelpel
+[B]- (GTK)Fixed terribly stupid menu crash bug -- pelpel
+[B]- Climbing sets can now be pluralized thanks to John Q. Smith
+
+10/12/2001
+[I]- No more annoying infighting monster messages when turning disturb_other
+ off
+
+11/12/2001
+[B]- Randquests and special levels must be immune to all types of level
+ regeneration now -- pelpel
+
+12/12/2001
+[B]- Fixed alchemist art creation bug that allowed to use 4x exp
+
+13/12/2001
+[M]- Krakens lost their 6 ring slots, the tentacles are too big to put
+ rings on them ;)
+[B]- Bashed down doors weren't revealed -- pelpel
+[B]- The Phial and other activatable items didn't have (charging) message
+ -- pelpel
+[B]- There were extra spaces after names of unique corpses -- pelpel
+
+14/12/2001
+[B]- Detected traps should prevent running now -- pelpel
+[B]- The easy disarm code used easy_disarm and always_pickup flags in a very
+ strange way, resulting in undesirable pickup behaviours -- pelpel
+[B]- "Grass with flowers" shouldn't disturb running now -- pelpel
+
+15/12/2001
+[B]- Entrances to vaults used dungeon-themed terrain features,
+ sometimes making it impossible to dig them through -- pelpel
+[B]- DG's 27/11 mod is conditionalised to avoid doing so in the graphics
+ modes, because it hardcoded characters and breaks the graphics support
+ -- pelpel
+[B]- Mimic features are cleared when overwritten by streamers, to
+ avoid, say, tree-looking deep water -- pelpel
+
+16/12/2001
+[I]- Added overlay graphics for ego monsters, player subraces and traps
+ -- Kusunose
+[I]- Added 'search by name' feature to '/' command. -- Kusunose
+
+17/12/2001
+[I]- Player now drops out of the overhead wilderness view when becoming hungry/
+ emptying lite
+[B]- Change in spell stat did not affect Mana/Spells if spell stat were
+ not INT/WIS/CHR, thanks to kobayasi-san. -- Kusunose
+[B]- Change in WIS did not affect Sanity Points if WIS was not spell stat.
+ -- Kusunose
+[B]- Costs of Symbiontic power were not displayed in first page, thanks to
+ kobayasi-san. -- Kusunose
+[B]- Symbiontic power, scare and blind, was misordered, thanks to
+ kobayasi-san. -- Kusunose
+
+18/12/2001
+[I]- Graphics overlay for the three X11 ports (untested). It requires
+ USE_TRANSPARENCY and USE_EGO_GRAPHICS. USE_TRANSPARENCY was ugly,
+ but this... -- pelpel
+[I]- Graphics overlay for the two Macintosh ports, again, untested -- pelpel
+[I]- Add ra_info.txt (randart generator info file) thanks to Runescrye
+
+19/12/2001
+[I]- Graphics overlay for the DOS port (USE_DOS). Also fixed a bug in
+ the overlay support in the Mac ports. I removed always_pict
+ code from the GTK+ port, because it's really slow, judging from
+ the graphics performance on the Mac ports which use the mode
+ to support tile width/height customisation -- pelpel
+[B]- Left good_item_flag for special levels, but adjusted rating boost
+ a bit, because later fixes made +50 boost unnecessary
+ Also toned down the rating boost for randquests -- pelpel
+[D]- New quest in Dol Guldur
+
+21/12/2001
+[B]- Fixed the very old artefact generation bug (present in
+ Angband 2.7.8 -- 2.8.2) that forced "special artefacts" to be
+ generated in the a_info.txt order. It is really problematic
+ in Pern because of the depth of the Phial -- pelpel
+
+22/12/2001
+[B]- A Beorning's father was a Storm Giant sometime, and A Petty-Dwarve
+ was one of several children of a Nibelung. -- Kusunose
+
+23/12/2001
+[B]- Fixed a bug that allowed to throw items with CURSE_NO_DROP.
+ -- Kusunose
+[m]- Added spell spoiler creation in wizard mode. -- Kusunose
+
+24/12/2001
+[m]- (Mac)Eliminated busy waits in CheckEvents and TERM_XTRA_DELAY.
+ It works well on my machine, but I left the original code using
+ "#if 1/0" just in case -- pelpel
+[I]- Player now drops out of overhead wilderness view if a vampire and it's
+ daylight
+
+25/12/2001
+[B]- Reintroduced OoD restriction on randquest monsters (until dlev 49)
+ -- pelpel
+[B]- a fix for RNG problem with 64-bit machines, taken from V(?) -- pelpel
+
+27/12/2001
+[I]- Basic IRC facilities! 3 new extended commands: C to connect
+ D to disconnect and : to chat. Highly experimental.
+[B]- Find artefact fate could cause permanent loss of artefacts. The code
+ now tries to create a randart when there are no good choices instead
+ of always defaults to the Phial -- pelpel
+[B]- Randquests sometimes requested players to kill slain uniques,
+ making it impossible to continue the game -- pelpel
+[B]- (Carbon)Removed the dialogue indicating errors in AEProcessAppleEvent,
+ because an r.g.r.a post pointed out that this can be quite annoying
+ and Apple says they should generally be ignored -- pelpel
+[I]- DOS support for the irc client, needs libsocket:
+ http://www.phekda.freeserve.co.uk/richdawe/lsck/lsck.htm
+[O]- Updated ra_info, thanks to Runescrye !
+[I]- X11 Support for the IRC client.
+
+29/12/2001
+[G]- a New randquest type !
+[B]- Companions cannot be hurt by the player anymore
+
+30/12/2001
+[B]- Reduced all force spells because of the side effects of force attacks
+[M]- Monster breathing/casting force attacks will bounce the player.
+ Just like player's force attacks bounce monsters :)
+[M]- Fixed the IRC client some more.
+
+01/01/2001 - PernAngband 5.1.0 aka "Into the Fire"
+
+2002/02/19
+[B]- Normal (non-vampire) races didn't get mana regenerated at Inn -- pelpel
+[B]- The Mathom house acted like a normal shop when selling. -- Kusunose
+[B]- '-s' crashed the game. Thanks kobayashi for the fix -- pelpel
+[O]- Combining rod and rod tip now considers rod's cheapness flag.
+ -- Kusunose
+[B]- Beastmaster Shanty overpayed a bounty if monster's corpses are stacked.
+ -- Kusunose
+[B]- The random text code left files open in many error cases -- pelpel
+
+2002/02/20
+[B]- WeaponMasters were not restricted with their weapons. -- Kusunose
+[B]- Info text of 'disrupt mind' was described as 'dam'. -- Kusunose
+[B]- Fixed the "automatic ego filter" bug in the squeltch filter -- pelpel
+
+2002/02/26
+[B]- The polymorph random effect could crash the game. Thanks Kevin W.
+ Thomas for the detailed analysis of the problem -- pelpel
+[B]- Stat draining effect of Black breath could crash the game. Thanks
+ Kevin W. Thomas again for the patch -- pelpel
+[B]- With easy_disarm set, players were totally safe from detected traps,
+ whatever messages might say -- pelpel
+[B]- Ego graphics code is now only active when and only when 16x16 tiles
+ are selected -- pelpel
+[B]- Quest entrances/exits now require players to type '>'/'<' commands
+ to move in/out -- pelpel
+[m]- Shimmering terrain features no longer shimmer while running/resting,
+ to make them more bearable on slower machines and slow I/O systems
+ like GCU -- pelpel
+[I]- Incorporated the hopefully improved running code from the CVS version.
+ It uses CAN_RUN and DONT_NOTICE_RUNNING flags for non-conditional
+ checks (i.e. not controlled by the disturbance flags or requiring
+ immunity), so that most running problem can be fixed by editing
+ f_info.txt -- pelpel
+
+2002/02/27
+[B]- Many room walls didn't have the CAVE_ROOM flag set -- pelpel
+[m]- The tunnel code (ordinary one) now performs double check for
+ feat_wall_outer and CAVE_ROOM, so it is safe to use any terrain
+ features for outer wall, including those identical to fill_type.
+ Note: These two changes have very significant effect on the Sacred
+ Land of Mountains. I'm not 100% sure if this is what DG intended,
+ but I believe so reading flags given to it in d_info.txt -- pelpel
+[D]- There should be less not-at-all secret "secret" doors.
+ This does *not* mean that ancient prob, but those mountains enbedded in
+ plain wall in Barrow-Downs, for example -- pelpel
+[I]- Inven/equip/item choice in subwindows now clears to the bottom of screen,
+ to avoid glitches and in accordance with the way it worked -- pelpel
+[I]- Identify and *Identify* don't list known/fully known items in
+ object selection -- pelpel
+[m]- Depth/field name area is now 13 character long, so that names like
+ "shallow water" will fit, and "Lothlorien" is not truncated in GCU.
+ Also added short dungeon name prefix to the depth-in-feet mode -- pelpel
+
+2002/2/28
+[B]- Dungeon town generation could crash the game. Thanks Mogami
+ for the analysis of the problem -- pelpel
+
+1/03/2002
+[B]- Supplied missing suid code in 1) savefile removal action in the startup
+ screen, 2) time table lookup, 3) dungeon savefile removal, and
+ 4) bone file removal. Thanks kobayasi for the patch -- pelpel
+[B]- Less platform-dependent savefile processing code for the game start
+ menu, thanks again for kobayasi. It now uses files.c utility routines
+ for building appropriate savefile names -- pelpel
+[B]- Magical branding of weapon/ammo, when successful, now sets enchanted
+ item's discount rate to 100%, so that one can no longer make vast
+ profit or easily gain his/her deity's favour. Code adopted from
+ T.o.M.E. 2.0.0 CVS -- pelpel
+
+03/03/2002
+[P]- Give Ents scrolls of satisfy hunger instead of some food. -- Kusunose
+[M]- Added a command to dismiss companions in the pet menu. Code adopted
+ from T.o.M.E. 2.0.0 CVS -- Kusunose
+
+04/03/2002
+[B]- '/' in item selection didn't update screen correctly -- pelpel
+[m]- Moved auto-squelch code from process_player() to process_world() -- pelpel
+
+05/03/2002
+[m]- CAVE_TRDT wasn't cleared when a trap is disarmed, which had some
+ subtle effects and forced coders to double check c_ptr->info and
+ c_ptr->t_idx in various places -- pelpel
+
+06/03/2002
+[B]- Level generation could cause infinite loop in the Sacred Land of
+ Mountains -- pelpel
+[B]- Player ghosts were disabled in a way causing special feeling on
+ every level -- pelpel
+[m]- Changed repeated message code to V-CVS one -- pelpel
+[m]- Added another graphics mode variable called graphics_mode :),
+ somewhat like use_graphics in ZAngband, but it doesn't
+ require any changes to main-xxx.c. It's set within reset_visuals()
+ and used by map_info(), so that it doesn't have to do streq()
+ each time it is called -- pelpel
+[B]- Took 64-bit safe RNG from Vanilla -- pelpel
+
+11/04/2002
+[B]- Gave SPECIAL_GENE flags to the k_info.txt entries of SPECIAL_GENE
+ special artefacts -- pelpel
+
+20/04/2002
+[B]- Player is now guaranteed to have initialive after entering a level.
+ Thanks Joseph William Dixon for the patch -- pelpel
+
+22/04/2002
+[m]- Renamed 422colors.prf to 422color.prf, to make it fit with the 8.3 naming
+ convention -- pelpel
+
+24/04/2002
+[m]- Add support for multiline comments in lua: --[[ ... ]]
+
+28/04/2002
+[B]- Fixed a bug that caused gods start casting nasty effects when player's
+ grace becomes negative. It should have been -60000. -- Kusunose
+[D]- The inn in Bree is now The Prancing Pony. -- Kusunose
+[m]- Improved lua interface for defining new 'm' keys, magic powers, quests, ...
+
+05/05/2002 - T.o.M.E. 1.0.0 aka "Between the Darkness and the Light"
+
+02/1/2002
+[m]- (Mac, Carbon)Graphics mode performance improvement. When a user
+ chooses a fixed width font (as is almost always the case) and
+ doesn't change tile width & height, the higher_pict method is
+ used instead of *very* slow and inefficient always_pict to
+ draw things -- pelpel
+
+04/1/2002
+[B]- Normal (non-vampire) races didn't get mana regenerated at Inn -- pelpel
+[B]- Fixed the monster casting at other monsters but targetting you bug
+
+11/01/2002
+[B]- Sacrificing wands now decreases charges
+
+12/1/2002
+[B]- The random text code left files open in many error cases -- pelpel
+[m]- The prf file loader always searches for the user directory first,
+ then the pref directory if it can't find it there, so that user
+ can override the system defaults keeping the distributed files
+ intact. This also simpifies the pref loading codes in several
+ places -- pelpel
+
+13/01/2002
+[B]- Fixed more running problems (FEAT_SAND and FEAT_ASH) -- pelpel
+[B]- Some routines called malloc/free instead of C_MAKE/C_FREE in
+ the vault generation -- pelpel
+[B]- One wrong sign in the fractal cave code (vertical average) -- pelpel
+[B]- Fixed the store info file thanks to wrabhit23
+
+14/01/2002
+[B]- Ego items had extra spaces in their names -- pelpel
+[B]- (XAW)Terminals used wrong names. USE_EGO_GRAPHICS didn't even
+ compile -- pelpel
+[I]- IRC code for the XAW port. Caveat: it causes a linker error
+ if you USE_X11 and USE_XAW at the same time... -- pelpel
+[m]- the html help file converter now gets it's header and footer
+ from head.aux and foot.aux in lib/help to help website
+ designer adapt the generated files to whatever they want
+
+19/01/2002
+[B]- The Mathom house acted like a normal shop when selling. -- Kusunose
+[I]- Removed hard-coded direction keys in the skills menu -- pelpel
+[B]- Many room walls didn't have the CAVE_ROOM flag set -- pelpel
+[B]- More running problem (small trees in Mirkwood) -- pelpel
+
+20/01/2002
+[B]- final artifacts were not generated if they are k_info artifacts.
+ -- Kusunose
+[B]- Fixed get_com interface for lua
+
+22/01/2002
+[B]- Squelch on sense now destroys {good} items if it's told
+ "destroy good", but only when the "strong" pseudo-ID is in
+ effect. Doing so for the "weak" method would be too dangerous -- pelpel
+[m]- The running code now uses DONT_NOTICE_RUNNING and CAN_RUN terrain
+ feature flags for non-conditional checks, i.e. everything but doors,
+ stairs and alike, and those requiring levitation or immunity -- pelpel
+
+23/01/2002
+[m]- Included the lua tutorials by Fearof4s
+
+24/01/2002
+[m]- Replaced the field of view code with that from Angband 2.8.3--
+ -- pelpel
+[I]- view_special_lite and view_granite_lite that work with non-white
+ terrains (for ASCII mode only, already done for 16x16 tiles) -- pelpel
+
+25/01/2002
+[B]- '-s' crashed the game. Thanks kobayashi for the fix -- pelpel
+[B]- Doors are remembered, so that they work better with easy_open.
+ The easy_open code now performs checks for the perennially hard-to-handle
+ feature mimic field -- pelpel
+
+27/01/2002
+[D]- A fair number of dungeon guardians lost their defined artifact drop
+ and got a randart drop instead. The removed arts are back top normal
+ behavior(can be found)
+[I]- Inven/equip/item choice in subwindows now clears to the bottom of screen,
+ to avoid glitches and in accordance with the way it worked -- pelpel
+[I]- Identify and *Identify* don't list known/fully known items in
+ object selection -- pelpel
+
+29/01/2002
+[B]- monster_carry() could cause permanant artefact loss. A similar code
+ in quests and guardian artefact generation are also fixed -- pelpel
+[D]- There should be less not-at-all secret "secret" doors.
+ This does *not* mean that ancient prob, but those mountains enbedded in
+ plain wall in Barrow-Downs, for example -- pelpel
+
+20/01/2002
+[D]- Some spells can now stay in effect for a while, like a cloud of poison
+ will stay in place and poison everything passing in it
+[P]- Changed the magic system, it now uses schools of magic instead of
+ realms. A school contains much less spells than a realm. Each spell
+ is unique and dont make others redundant. Also all spells tries to stay
+ usefull for the whole game, by increasing in power and effects with levels.
+ A spell can be assigned to more than more school, in which case all the
+ schools need to be raised to obtain more power. All spells are implemented
+ in lua, to make it easy to tweak them.
+ All spells arent coded yet but my plans are for those schools:
+ Mana, Fire, Water, Air, Earth, Mind, Conveyance, Meta, Temporal,
+ Divination, Nature and Nether
+ It may change somewhat but thats the general idea :)
+ Books are not specific to a school, they can contain any spell from any
+ schools, it is even imaginable to have randomly created books
+
+01/2/2002
+[D]- Streamers use small tress instead of trees, a la KAngband and
+ variants that borrowed it's code. And they should look more like
+ streamers in most dungeons -- pelpel
+[D]- Neither player or monsters can see through, breath, or cast spells
+ over small trees, that are outer wall in Mirkwood -- arena levels
+ were too nasty otherwise... -- pelpel
+
+02/2/2002
+[m]- los, player's field of view, and spell/breath projection now all use
+ FF1_NO_VISION for the sake of consistency (in addition to the wall
+ check in case of spell/breath projection) -- pelpel
+[M]- Added a command to dismiss companions in the pet menu
+
+03/2/2002
+[D]- Moved wiz_dark() implementing the maze level from move_player() to
+ process_player(), so that a spellcaster can no longer do magic mapping--
+ detect monsters--detect traps then casting teleport as often as s/he
+ wishes to make things incredibly easy. Because of my laziness detected
+ traps aren't displayed if they are out of sight. This would require
+ tremendous hack. Anyway, don't worry, they are still remembered -- pelpel
+[I]- Auto-squelch menu now accepts ^R as an alternative to ^S, to be nice
+ for those who USE_GCU. Thanks Skylar Thompson for the problem report
+ -- pelpel
+[m]- CAVE_TRDT wasn't cleared when a trap is disarmed, which had some
+ subtle effects and forced coders to double check c_ptr->info and
+ c_ptr->t_idx in various places -- pelpel
+
+06/02/2002
+[B]- Do not drop from wild if player were not in wild mode in previous turn;
+ it put player in wrong place and could crash the game. -- Kusunose
+[B]- Summoning monsters from totems could crash the game. -- Kusunose
+[B]- The Heavy Crossbow of the Elves was 'the ultimate armor' in the
+ fully identified description. -- Kusunose
+
+07/02/2002
+[m]- Added FF1_DOOR flag to open doors for lightning effects in map_info()
+ and have the trap creation code explicitly avoid them, because traps
+ have and should never been performance bottlenecks -- pelpel
+
+08/02/2002
+[m]- Some process_world() sections (most notably monster generation and
+ lingering spell effects) are conditionalised so that they don't run
+ in the overhead map -- pelpel
+[D]- Added a dungeon flag that prevents generation of streamers, and
+ gave it to those with water/lava rivers and places like Numenor
+ and the Sacred Land of Mountains. Maze and evolving levels don't
+ require this. Also made lava deeper (dlev 34 or below). Trees can
+ appear on any flat levels. And eliminated undesirable calls to
+ the RNG in the streamer code -- pelpel
+[m]- Changed all the signed (!) flags I was able to find to unsigned, because
+ they don't make any sense. Savefile code should be modified as well
+ if we ever care for savefile portability -- pelpel
+[m]- The tunnel code (ordinary one) now performs double check for
+ feat_wall_outer and CAVE_ROOM (which was added a couple of weeks ago),
+ so it is safe to use any terrain features for outer wall, including
+ those identical to fill_type -- pelpel
+
+09/02/2002
+[D]- Rewrote place_new_way() so that it doesn't create unconnected dungeon
+ sections, destroy outer walls of rooms, or dig room corners -- pelpel
+[I]- Hopefully finished special lighting effects. Now it works this way
+ (with all lighting effects options on):
+ Perma-lit grids and lit walls/doors within sight, and remembered important
+ features = f_info colours, Perma-lit floors and walls/doors out of
+ sight = darker colours, torch-lit "boring" floor = yellow, torch-lit
+ grids out-of-sight = dark grey, blindness = B&W -- pelpel
+[D]- Angband dungeon now adjusts monster levels to the dungeon level.
+ The monsters here will have a minimun level in the range of:
+ level / 2 to level. So at level 67 the lowest monster you can encounter
+ will be level 33. This means that if a white icky thing is generated
+ it will be a level 33 white icky thing. If the base monster level is higher
+ then nothing is adjusted.
+
+11/02/2002
+[m]- (Temporary note) Separated staying effect handling code from
+ process_world() and made it a function, so that it can be called in
+ any place with in dungeon() [can be activated by #define pelpel :)]
+ I temporarily placed it after process_player(), but we have to spend
+ some time testing this, seeking for the best turn structure -- pelpel
+[m]- Auto-squelch is performed *before* a player turn, just before the
+ pack overflow code to prevent some interface problems. This means
+ that squelching occurs as the very last action of a player turn,
+ after monster drops or even after pseudo-ID, so that you don't have to
+ press extra space to squelch items. Another possible arrangement
+ would be within process_world(), right after sensing -- pelpel
+
+12/02/2002
+[B]- Fixed a bug in the hook code that may or may not be the cause of
+ various quest-related bugs -- pelpel
+[D]- Altars now have CAN_RUN flag, so that you no longer see the
+ message "You cannot run in that direction" when trying to run
+ across them -- pelpel
+[m]- Added flush() before all the quest questions to prevent accidental
+ loss/declination/acceptance of quest rewards/quests, also added
+ very important flush_failure and flush() to the lua interface and
+ put that in the spell failure code, so that spells can be macroed
+ safely -- pelpel
+[B]- Fixed a bug in the 6 monster randquest thanks to Louis-Frederic Michaud
+
+13/02/2002
+[O]- Elvish waybread renamed to lembas, thanks to nimloth
+[I]- Because I find detection no longer works on panels, added DTrap status
+ line as well as a new disturbance option disturb_detect. Also removed
+ hardcoded row/column positions in the status line code, in preparation
+ for big-screen support -- pelpel
+
+16/02/2002
+[I]- Added scrolling target/look code, which is bastardised :) form of
+ Z and V ones -- pelpel
+[m]- Depth/field name area is now 13 character long, so that names like
+ "shallow water" will fit, and "Lothlorien" is not truncated in GCU.
+ Also added short dungeon name prefix to the depth-in-feet mode -- pelpel
+[m]- Because map_info() is the #1 bottleneck routine and because I felt
+ hack_map_info_default is incredibly ugly :(, I removed
+ hack_map_info_default and added specialised version of map_info()
+ for use by cmovie and the HTML screen shot saver -- pelpel
+[B]- Fixed the "automatic ego filter" bug in the squeltch filter -- pelpel
+[I]- Big screen is sort of working now, but main-xxx.c (have
+ to remove restrinction on size of the PernAngband window) and
+ cmovie are still needing upgrade -- pelpel
+
+17/02/2002
+[B]- Made panel_bound() more paranoid about the current dungeon size,
+ to prevent many big screen-related crashes -- pelpel
+
+18/02/2002
+[m]- Added 8x8 graphics support to trap display code -- pelpel
+[m]- Added another graphics mode variable called graphics_mode :),
+ somewhat like use_graphics in ZAngband, but it doesn't
+ require any changes to main-xxx.c. It's set within reset_visuals()
+ and used by map_info(), so that it doesn't have to do streq()
+ each time it is called -- pelpel
+
+19/02/2002
+[m]- Added term resize hooks so that one doesn't have to hit the redraw
+ key and alike when s/he resizes windows. Hooked functions are placed
+ in xtra2.c, because they are only related to big screen support
+ and other panel related codes are there. Don't like the way stuffs
+ are initialised -- assumption about max number of terms, setting terms
+ package hooks from within the upper layer codes -- but the existing
+ implementations do it this way, and the "right" way requires changes
+ to main-xxx.c, which I'm too lazy to do... -- pelpel
+[I]- Big screen support for X11 and XAW ports (already done for Gtk, Mac
+ and Windows ports). Also added an option -o to force the use of 8x8
+ tiles in graphics mode. Say "-g -- -o" to activate it. And please note
+ that because of the way transparency effect is implemented in
+ X11/XAW/Gtk ports, it is available even with 8x8 tiles -- pelpel
+
+20/02/2002
+[B]- Beastmaster Shanty overpayed a bounty if monster's corpses are stacked.
+ -- Kusunose
+[O]- Combining rod and rod tip now considers rod's cheapness flag.
+ -- Kusunose
+
+22/02/2002
+[M]- Restored monster light code, modeled after Steven Fuerst's implementation
+ insteand of APW one this time, but without his support for multiple radii.
+ -- pelpel
+[M]- Made monster light a run-time option. CAVEAT: It'll cause display
+ weirdness when you turn this option from ON to OFF while playing.
+ Save/Restart or entering new level will fix the problem.
+ Should call forget_mon_lite() when the game detects it... -- pelpel
+[M]- monster lite option is on by default
+
+23/02/2002
+[B]- A failure in disarming traps using easy-disarm caused another attempt
+ at disarming traps (because it calls move_player_aux which calls
+ do_cmd_disarm_aux which calls move_player_aux...), growing call
+ stack infinitely. It's dangerous, and, in fact, players were totally
+ safe from traps (messages said "You set off...", but traps were never
+ activated) -- pelpel
+[B]- Black breath could crash the game (it's really evil, isn't it :)
+ Thanks Kevin W. Thomas for the patch -- pelpel
+[m]- Ego graphics code now only tries to use graphics overlays for
+ monsters and players if and only if 16x16 tiles are used -- pelpel
+[B]- map_info() had problem with walls mimicking floors -- pelpel
+[m]- Shimmering terrain features no longer shimmer while running or resting
+ to make themselves somewhat more bearable on slower machines -- pelpel
+
+24/02/2002
+[m]- Updated lighting effect code so that it works the same as rr9's Angband
+ versions. Also removed hardcoded IBM pseudo graphics code points, so that
+ if anyone is ever interested in updating its font & prf files, s/he
+ can do so freely without editing the source code.
+ And map_info / map_info_default is now fully aware of c_ptr->mimic,
+ so that map edges will not have strange lighting effects etc.,
+ hopefully -- pelpel
+
+26/02/2002
+[B]- Polymorphing random effect of Chaos Warriors could crash the game.
+ Special thanks for Kevin W. Thomas for the detailed analysis
+ of the problem -- pelpel
+[I]- Moving onto quest entrance/exit no longer causes annoying automatic
+ stair movements. You have to tell the game '>' or '<' to enter/leave
+ -- pelpel
+[m]- Renamed see_wall() in cmd1.c to see_obstacle() also added a grid-based
+ version of the function to be used by run_test(), so that those who have
+ immunity and/or levitation can run over lava fields, deep water etc.
+ -- pelpel
+[O]- There are 2 kinds of spellbooks for the magic schools, the ones that
+ are named "a Spellbook of foo" where foo is a randomly choosen spell
+ (selection is based on the dungeon level)
+ and other names that are fixed books
+
+27/02/2002
+[O]- School spellbooks can be fireproof ego items
+[B]- Dungeon town generation could crash the game. Thanks Mogami
+ for the analysis of the problem -- pelpel
+
+01/03/2002
+[B]- Supplied missing suid code in 1) savefile removal action in the startup
+ screen, 2) dungeon savefile removal, and 3) bone file removal.
+ Thanks kobayasi for the patch -- pelpel
+[m]- Less platform-dependent savefile processing code for the game start
+ menu, thanks again for kobayasi. It now uses files.c utility routines
+ for building appropriate savefile names -- pelpel
+
+03/03/2002
+[B]- Special level names wherent corrently displayed if the N: line was the
+ first of the file in lib/dngn
+
+03/03/2002
+[m]- Added initialization code to add SPECIAL_GENE flag to final guardians
+ and their artifacts (and DROP_RANDART if there are no final artifacts).
+ -- Kusunose
+[D]- Put yet another fractal code (unlike the others it's quite simple)
+ in the level filler generator, and added a F: parameter in d_info.txt
+ to control its behaviour. Its syntax is FILL_METHOD_#, where # is
+ 0: use the first filler w/o calling RNG (for Angband, Mirkwood etc.),
+ 1: the same as the previous versions (default), 2: slightly smoothed,
+ 3: more smoothed, or 4: max smoothing (initial step of 8 grids) -- pelpel
+
+04/03/2002
+[B]- '/' in item selection didn't update screen correctly -- pelpel
+[m]- Moved squelch-on-sense code from process_player() to process_world()
+ -- pelpel
+
+04/03/2002
+[P]- High intelligence increase mana regeneration rate
+
+06/03/2002
+[B]- Level generation could cause infinite loop in the Sacred Land of
+ Mountains -- pelpel
+[m]- Changed repeated message code to V-CVS one -- pelpel
+[B]- Player ghosts were disabled in a way causing special feeling on
+ every level -- pelpel
+
+07/03/2002
+[m]- Trap display now uses x_attr/x_char of FEAT_TRAP (f_info N:17)
+ 1) if a trap is set on a "boring" terrain in the ASCII mode, where
+ only x_char is used and attr is taken from tr_info.txt XXX XXX XXX
+ or 2) if attr/char for a trap is not defined in prf files in the
+ graphics modes -- pelpel
+[m]- Removed FAKE_VER_*, because it has been quite long since we lost savefile
+ compatibility with Angband 2.8.1 and info.txt files can be updated
+ by sed/perl/whatever script in a snap -- pelpel
+[B]- Took 64-bit safe RNG from Vanilla -- pelpel
+
+08/03/2002
+[m]- To accommodate the practice of not upgrading version stamp of info.txt
+ files at each release (never done in V-based variants, but common among
+ Z-based ones for historical reasons), version stamp checks against game
+ data files in lib/edit is made a compile time option
+ (VERIFY_VERSION_STAMP), off by default. With this option off, version
+ stamp checks for the binary files are still performed and they always
+ have version signature of the game, not those specified by the V: lines
+ -- pelpel
+[B]- Wide light radius worked in the small scale wilderness map,
+ where it should have been WILDERNESS_SEE_RADIUS -- pelpel
+
+10/03/2002
+[m]- Upgraded the lua bitlib so it can handle stuff like bor(1, 2, 4, 8)
+
+11/03/2002
+[M]- Confusion, stunning, charming now works on uniques(those that dont have the
+ corresponding resistance)
+
+24/03/2002
+[I]- Stats can now be displayed in a linear mode(from 3 to 37) instead of
+ 3 to 18/***, the option is off by default
+
+25/03/2002
+[D]- No more shafts in the halls of mandos
+[m]- Block comments( --[[...]] ) in Lua enabled
+
+27/03/2002
+[D]- Tweaked the door code a bit so that some doors are much harder
+ to find -- pelpel
+[I]- Added recall depth subcommand to the knowledge menu -- pelpel
+
+03/04/2002
+[I]- Removed the flavoured_attack option and made most 'silly' messages
+ off by default. They are now controlled by 'insanity roll', which is
+ d100 roll against (max_sanity - current_sanity) * 100 / max_sanity.
+ The same roll is also used to determine if the game should use
+ silly monster descriptions (in addition to the hallucination
+ effects) -- pelpel
+
+04/04/2002
+[I]- The skill interface no longer asks question whenever you increase skills.
+ Changes to skill values are made permanent if the player confirms them
+ when s/he leave the skill menu, otherwise, they are simply ignored
+ -- pelpel
+[P]- The skill system is ready ! Some small tweakings are needed, but it is
+ mostly ready. Each level you gain a few skill points that you can spend
+ on various skills(like combat, weaponmastery, magic, ...). Most actions
+ are now tied to skills.
+[P]- Classes revamped as more or less skill templates. Classes now can have
+ specializations which allow starting with somewhat different skill set.
+[B]- Since streamers can create unconnected dungeon sections, the code for
+ it is moved after stair and player allocation -- pelpel
+[m]- Reorganised the linkage order of makefile.org a bit, so that similar
+ files are grouped together, also frequently called files are not coupled
+ together with rarely used ones. This *might* help on-demand-paging memory
+ manager a bit -- pelpel
+[m]- Changed all occurances of " ?" in strings to "? ". --takkaria
+
+08/04/2002
+[B]- Some player_type fields and corresponding lua interface definitions
+ were of different types. Fix thanks to rr9. -- pelpel
+
+09/04/2002
+[I]- Bigtile patch for windows, x11 and mac ports thanks to Takeshi Mogami
+
+11/04/2002
+[B]- Gave SPECIAL_GENE flags to the k_info.txt entries of SPECIAL_GENE
+ special artefacts -- pelpel
+
+15/04/2002
+[M]- Revision of the conf/stun/sleep resists for uniques thanks to Runescrye
+
+18/04/2002
+[G]- The adventurer quest reward is now either the adventurer or some skills
+[I]- Asks for a last screenshot upon death
+
+20/04/2002
+[I]- You can now dump a frame of a cmovie as an html screenshot(while playing
+ the movie)
+[P]- New god system, each god will be much more different from all others.
+ Altars are less vital. There are less gods.
+[m]- Renamed inappropriately called global array 'town' to 'town_info', also
+ moved some boolean town_type members into 'flags', in order to support
+ dungeon town information subcommand of do_cmd_knowledge -- pelpel
+[m]- Commented out or moved many local variables causing 'unused' warnings,
+ because of badly placed if 0's -- pelpel
+[B]- Player is now guaranteed to have initialive after entering a level.
+ Thanks Joseph William Dixon for the patch -- pelpel
+[I]- The commands for skills and spells are swapped. Please use 'G' to learn/
+ check skills and '$' ('\$' in roguelike) to learn spells.
+
+22/04/2002
+[m]- Renamed 422colors.prf to 422color.prf, to make it fit with the 8.3 naming
+ convention -- pelpel
+
+23/04/2002
+[O]- Bound the wands & staves damage/power to the Magic skill, attack wands
+ should actually be usefull now
+
+25/04/2002
+[P]- Magic skill now allows you to copy spells from books into various
+ objects. Not all objects can contain spells naturally, but most object
+ of the Magi can, and all mage staves
+[P]- Spectres loses HP while in walls, it was too abusable(and in fact, I never
+ planned to remove it)
+
+28/04/2002
+[D]- The inn in Bree is now The Prancing Pony. -- Kusunose
+
+01/05/2002
+[D]- Small levels cannot generate full levels anymore
+[I]- The prompt to cast a spell now understand to press @, which will ask for
+ a spell name, it'll look all books and cast it if you can.
+ It EASES macros, a macro will now look like:
+ 02m@Manathrust\r*t
+[I]- Message recall now understands bigscreen thanks to pav
+[I]- Help now understands bigscreen thanks to pav
+[I]- Skill screen now understands bigscreen thanks to pav
+[I]- No more pickup prompt with autopickup when inventory is full, thanks to pav
+
+03/05/2002
+[B]- The skill increase/decrease code was unable to detect underflow -- pelpel
+
+06/05/2002
+[P]- Made running commands exempt from do_nothing processing, because this
+ can be abusable and makes no sense -- you could, for example, hold down
+ movment keys when following Eru and use running when following other
+ deities -- pelpel
+[I]- Took big screen code for horizontal scrolling of message recalls
+ from Vanilla -- pelpel
+[I]- You can navigate through option menus with roguelike_keys -- in fact,
+ I didn't know users of the original keyset can go up before I play
+ the latest V and see its code... Taken from Vanilla CVS -- pelpel
+[m]- Entirely removed function definining macros from script.c, because
+ it can confuse some compilers (a lcc case was reported), and some
+ preprocessor reports syntax error for missing macro arguments -- pelpel
+[I]- Added big screen support for GCU -- pelpel
+
+12/05/2002
+[m]- Some, if not all, command line options are documented -- pelpel
+[B]- Full map command displayed only half of current dungeon level when
+ bigtile mode is used. Thanks for Takeshi Mogami for tha patch
+ -- Kusunose
+
+19/05/2002
+[m]- 1) Slightly reorganised menus in the Mac ports, because there were so
+ many of them on the menu bar. 2) added a switch (-b) to the GCU port
+ to select multiple terms or one big screen. 3) the GTK port issued
+ huge number of fatal warnings if the graphics mode was turned on and off.
+ 4) Compiled latest V CVS with main-gtk.c in T.o.M.E. and fixed some
+ portability problems. -- pelpel
+[P]- Pseudo-id is now bound to the Combat skill(for weapons/armors) and the
+ Magic skill(potions, ...)
+[P]- It is now possible to press @ at the 'm' key prompt to select a skill action
+ by it's full name. Thus allowing unbreakable macro:
+ m@Cast a spell\r@Manathrust\r*t
+[I]- The skill screen cannot be abused to get more skills anymore
+
+27/05/2002
+[P]- New god Melkor Bauglir
+[P]- Weaponmastery, Archery and Barehand skills increase Combat skill much more
+
+02/06/2002
+[B]- Various spell effects that polymorph monsters could crash the game.
+ -- Kusunose
+[B]- Compare weapons command miscalculated muliplying bonus. -- Kusunose
+
+12/06/2002
+[P]- Deathmold fetch ability pickups gold and objects(if autopickup is set) thanks
+ to "kenderband" <kenderband@hotmail.com>
+[m]- Exported cur_hgt and cur_wid to lua by request of Fearof4s. (takkaria)
+
+14/02/2002
+[m]- Updated the lua help files thanks to Fearof4s and Chris Hadgis
+
+17/06/2002
+[B]- Fixed junk artifacts and music instruments stacking bug in stores
+ -- Kusunose
+
+03/07/2002
+[M]- Monsters drop stolen gold when killed
+
+04/07/2002
+[B]- Capped max number of extra blows at 2 when the limit_blow flag is set
+ in two places -- pelpel
+
+09/07/2002
+[B]- Cancelling a scroll of reset recall didn't work. -- Kusunose
+[O]- Reset recall now lists all the dungeons a player has visited and
+ additionally allow a player to select by name. -- Kusunose
+
+13/07/2002
+[O]- Enabled the generation of double ego items. An item cannot get 2 prefix
+ or 2 suffix, it will always be a prefix and a suffix
+
+14/07/2002
+[P]- New bounty quest available at the beastmaster shanty! Bring back a corpse
+ and get some monster-lore skill and the ability to learn corpse-preservation
+ skill if you couldn't already
+
+15/07/2002
+[P]- Replaced first necromancy spell with Horrify from the old Nether realm and
+ the third spell with absorb soul, provides some health upon monster death
+
+16/07/2002
+[m]- Updated lua_ques.txt to fix some misinformation. -- fearoffours
+
+17/07/2002
+[B]- One was able to have another entry in the score file for a dead/retired
+ character by loading him/her with the -w option, then answering 'n' to
+ the wizard mode confirmation. Bug report and fix (for Angband 3.0.1, but
+ applicable for all variants) by Hallvard B. Furuseth, Takeshi Mogami and
+ Robert Ruehlmann -- pelpel
+
+22/07/2002
+[m]- More lua documentation fixes, particularly adding square brackets to field
+ names on lines that would allow this without mucking up colour formatting.
+ -- fearoffours
+
+23/07/2002 - T.o.M.E 2.0.0 aka "Point of No Return"
+
+24/07/2002
+[m]- The splash screen now shows "Tales of Middle Earth" or "Troubles of Middle
+ Earth" randomly. Thanks to Scott Holder for the idea and some code.
+ (takkaria)
+[m]- makefile.org now defaultds to ./lib for the lib directory
+[m]- makefile.org is now makefile.std
+[B]- Fixed a silly bug preventing Polearm masstery from wroking
+
+26/07/2002
+[B]- In multiuser installations, notes and cmovie were written under the lib
+ directory using the game's permission, making them inaccessible by
+ the player. I moved them to ~/.tome. Note: This means that a coder
+ shouldn't grab permission before opening files in these directories
+ -- pelpel
+[B]- There are still inappropriate (and even unbalanced!!!) calls to
+ safe_setuid_grab() and safe_setuid_drop() in the game. Thanks Neil
+ for pointing out those in the macro save commands. There are so many
+ places that I have to look at, but I'm trying... -- pelpel
+[I]- Better (hopefully) object identification screen
+
+28/07/2002
+[m]- Added safe_setuid_grab/safe_setuid_drop to all the functions that
+ access files in the lib directory. I did so even for the game
+ initialisation, knowing that it's very unorthodox. This is because
+ I found some of them in the init[12].c. There's no other sure ways
+ to keep them from messing multiuser installations. -- pelpel
+[m]- Added makefile.dos, which is a copy of makefile (now), in order to
+ prevent overwriting accidents. Ideally, 'makefile' should be in the
+ .cvsignore, so that every developper can feel at ease with his/her
+ own preferred environment -- pelpel
+
+01/08/2002
+[P]- New corruption system, savefiles are compatibles but you will loose
+ all your corruptions.
+ Most corruptions now have a good and a bad effect. Some corruptions
+ depends of others, it means that you can only get them when you have
+ the ones they depend of(i.e: Balrog Form need Balrog Wings, Balrog
+ Aura and balrog Strength to work). Some corruptions can be mutualy
+ exclusive. The list of corruption is totaly rewrote. They are more
+ in-theme now.
+[B]- Perma curse cannot happen on randarts anymore
+
+02/08/2002
+[B]- Player could not pick up items from home if he did not have enough
+ gold. -- Kusunose
+[B]- Traps of wasting wand dont mess up wands
+[B]- Dragon helms get resistances
+
+03/08/2002
+[B]- No races were allowed to be loremasters
+[B]- Fixed a bug in Character classes allowed, tahnks to Alex Wilkins
+[m]- Added Melkor to the gods docs.
+[B]- Spells cannot be cast while blinded or confused(execpt for a few)
+[G]- Wielding the One Ring has some ... disadvantages now ...
+[B]- Poor Melkor didnt had his altar generated in dungeons, while he is the
+ only god for a use of an altar
+
+05/08/2002
+[m]- Improved the adventurer guide and added a section for macros to it
+[P]- All Udun spells are no more multi-school spells
+[P]- Reorganized the skill tree to remove the Misc skill tree. Alchemy is now
+ under Magic, Antimagic is in Combat and Music in Spirituality
+
+07/08/2002
+[B]- Fixed the -1 activation power of some mage staves of spell
+[G]- Troll Glade/Wight Grave selection is now (usualy) based on the
+ Combat/Magic skills level
+
+08/08/2002
+[I]- The game asks confirmation before learning a skill that can exclude an
+ already known one
+[I]- When 'I'nspecting(or upon *id*) a fully *id* weapon/ammo the game will
+ tell you the damage it would do if you used it(idea from Ey)
+
+10/08/2002
+[I]- 'U' power menu is now usable with repeat key 'n'
+
+11/08/2002
+[G]- The chance for combat item pseudo-ID now improves exponentially,
+ just like V Warriors (combat skill 0 == plev 0, maxed == plev 50),
+ while that for magic items improves slowly, just like V Rangers
+ and Mages but with higher success rate (more than ten times as
+ frequent as V Rangers) -- pelpel
+
+12/08/2002
+[B]- Added missing spell frequency to Fire golem. -- Kusunose
+[B]- Symbiant cannot pickup a hypnotized pet from a pile. Thanks to kobayasi
+ for the patch. -- Kusunose
+[P]- Give Ents scrolls of satisfy hunger instead of some food. -- Kusunose
+[B]- Stats more than 18/220 were displayed incorrectly if linear_stats was ON.
+ -- Kusunose
+
+13/08/2002
+[m]- Made chg_to_txt in files.c conditional, so that it won't be included in
+ Windows, Mac and RISCOS ports (they don't call the function, so it has
+ been dead code) -- pelpel
+[D]- Since Tome generated small levels once in three times when requested,
+ which I think is too often, and in Z and Ey the chance is 1/5 and 1/10
+ respectively, I lowered the chance to 1/6 -- pelpel
+[B]- The small_level option had the same effect as always_small_levels
+ -- pelpel
+[O]- Removed CURSE_NO_DROP from ego items. Players want new curses, and when
+ they get them they complain...
+
+14/08/2002
+[I]- Added avoid_shimmer efficiency option to suppress shimmering of terrain
+ features, because I have had problems with them on really big screens
+ -- pelpel
+[P]- Increased the modifier of the masteries for warriors
+[P]- New Warrior subclass, the Demonologist, spell enhanced warriors. They
+ use the new Demon school and the renewed Demonblades, Demonshields and
+ Demonhorns. Their spells enhance their fighting potential. They can either
+ be seen as a force of good, fighting against demons with their own powers
+ or as a force of evil fighting to bring corruption to the world.
+[P]- Sorcerors begin with a robe instead of a dagger
+[I]- Easy close is now slightly more intelligent in their handling of
+ broken doors -- pelpel
+
+15/08/2002
+[O]- Ring/Amulet of Spell, cheap, early objects that can contain a spell
+[B]- Exploding ammo dont stack with normal ammo
+
+16/08/2002
+[B]- Ammo creation is bound to Arechery skill instead of player level
+[B]- Fixed a bug in related skills, when one increased a skills sometimes the
+ related skills didnt increased
+
+17/08/2002
+[m]- Do not grab/drop permissions twice. Thanks to kobayasi for the patch.
+ -- Kusunose
+
+18/08/2002
+[B]- Temporal stat drain no longer cancels normal stat drain. -- Kusunose
+
+19/08/2002
+[O]- Temple will now stock random spells from god schools, Magic Shop will
+ only stock non god spells and bookstore will contain both
+[O]- Stores buyable list is now lua defined
+[B]- The amount of mana in each grid was always magical level. -- Kusunose
+[P]- Changed the formula to calc the player HP when using possession so that
+ a higher possession skill will be prefered
+
+20/08/2002
+[B]- Extracted essences overwrote a weapon slot when inventry was full.
+ -- Kusunose
+
+21/08/2002
+[I]- Ingame contextual help is on by default(it was before, but it was bugged..)
+ It is now proccessed by lua, file help.lua and should be much easier to
+ add new sections to than before. So all feel free :)
+[G]- Added town of Khazad-Dum (where 'exit' from Moria was) with nice Mining
+ supply shop. -- fearoffours
+
+23/08/2002
+[I]- Contextual help for the birth screens too. Press ? when over a race,
+ class, ... and it'll bring the specific help for it
+[M]- Monster ego wont start awake
+[P]- lost Souls now have see invisible, I know I'm far too nice :)
+[I]- Contexual help to skill screen, press ?
+[I]- Easy macro recorder! Just press $ and press a normal key sequence!
+
+26/08/2002
+[m]- Removed the autosquelch to replace it with a new Automatizer that should
+ be much more powerful. It lacks a gui, but that should soon change :)
+
+28/08/2002
+[I]- The new Automatizer got a GUI :) It should be quite easy to grasp, you
+ define rules to match and action to take. But it does allow very complex
+ rules.
+
+27/08/2002
+[m]- Added updated class help documents. Removed extraneous ones. Amended
+ links in birth.txt to reflect changes. Added appropriate entries to
+ help.lua for contextual class help at birth. Thanks to Mef. -- fearoffours
+[m]- More contextual help: races and god selection at birth, rod tips, rods and
+ trapping kits. -- feaoffours
+
+29/08/2002
+[G]- Added new god quest. Given at random time by your god, you have to retrieve
+ a piece of a relic generated at a random level of a randomly places dungeon.
+ More than one of these quests may be given (currently up to 4), though only
+ if you complete previous quests. The relic is only generated once in each
+ dungeon, so look carefully for it. Diving won't help you. -- fearoffours
+
+31/08/2002
+[P]- New Water spell: Vapor, it create a low damage wide radius short lasting
+ cloud of water. It is designed to be a cheap attack spell for annoying
+ critters. Beware, random spellbooks & inscribed objects spells will "morph"
+ to other ones, sorry, unavoidable
+
+03/09/2002
+[B]- Fix mushrooms stacking for the maggot quest
+[m]- Fix birth.txt crash -- fearoffours
+
+04/09/2002
+[O]- Scythes of Slicing are now vorpal, rarer and deeper
+
+05/09/2002
+[G]- Added the fireproofing quest. Visit the Mage tower in lothlorien to get the
+ quest, bring back something for the mage, get books fireproofed in return.
+ -- fearoffours
+
+08/09/2002
+[I]- Updated the forgotten IBM pseudographics, based on my unknown work for
+ Pern 4.1.2. Also added an X11 BDF file so that it can be used on
+ the three X ports -- copy graf-ibm.prf to font-x11.prf in your user
+ directory (i.e. ~/.tome) and set the font of main window to the font
+ made from lib/xtra/ang16.bdf. Instruction for installing new X fonts
+ should be found in the bdftopcf, mkfontdir and xset man pages.
+ -- pelpel
+
+10/09/2002
+[I]- Current location(town, level, ...) is show in orange when about to recall
+
+17/09/2002
+[m]- Updated skill docs, thanks to lemming
+[m]- More minor help file updates. thanks mef and Chris Hadgis
+
+21/09/2002
+[P]- Mindcrafters gets esp even after level 40
+
+22/09/2002
+[I]- You can press $ at object destruction prompt to automaticaly create a new rule
+ for the Automatizer about the object being destroyed
+[B]- Casting "Disperse Magic" when spell level is 20 or more produced a lua
+ error. -- Kusunose
+[m]- Reformatted the makefile.WHICH file. Do we really need this file anymore?
+ other variants get by without it, I don't really think it's needed...
+ (takkaria)
+[m]- Reformatted the todo list, removed some entries which have been done.
+ Also added a section for stuff which I will do (one day). (takkaria)
+[m]- I've reformatted and reorganized a fair bit of notes.c; I've made stuff
+ less hacky and made the function which writes notes to file use
+ my_fputs()... Also replaced some hardcoded buffer sizes with sizeof().
+ (takkaria)
+[m]- Removed hardcoded buffer sizes in wizard1.c. (takkaria)
+
+23/09/2002
+[M]- Farmer maggot quest provides a better reward, thanks to Revanant Morituri
+ and Wil Hunt for the idea
+
+25/09/2002
+[B]- The centre player option failed to do so while running. Thanks Neil
+ Stevens for the patch. -- pelpel
+[B]- Random Artifact arrows should now stack properly. -- wilh
+[B]- Mindcrafters lost their ESP at level 40. Now they have it permanently
+ at that level. (p_info.txt) -- wilh
+[B]- Above bug was supposed to be skill level 40, not clvl 40. Fixed. :)
+
+28/09/2002
+[I]- Macro-patch from Mogami, now the macro prf files are portable between Windows,
+ X11 and Mac. It also shows readable triggers like: \[shift-F1] and such
+
+29/09/2002
+[m]- Added .cvsignore to the src directory to prevent makefile overwriting
+ accidents from happening. Currently it excludes makefile (developers
+ are expected to update platform-specific makefile if s/he indents to
+ make permanent changes to them), tome, tolua, TOME.EXE and TOLUA.EXE.
+ -- pelpel
+
+01/10/2002
+[G]- Alchemy totaly changed! Thanks to John Gilmore for the patch! It has now entered
+ cvs to begin being tested and "balanced" ;)
+
+05/10/2002
+[P]- Symbiotic power changed to be bookless
+
+06/10/2002
+[P]- Available skills to leanr via random quests are defined in s_info.txt
+[P]- Trying to mimic when already mimiced(with the skill) will turn you back to
+ normal form
+[O]- All objects now have a description, thanks to Konijn
+ When identifying an item you can then press 'I'nspect to check it. It si most
+ usefull for scrolls & such, they tell you what exactly they will do
+[B]- Fixed a bug that made mage staves very costy
+
+07/10/2002
+[I]- Replaced font-ibm.prf, graf-ibm.prf, font-win.prf and font-mac.new (a
+ font-mac.prf replacement that has IBM-like pseudographics definitions)
+ with program-generated ones, hopefully up-to-date with recent changes
+ in info.txt files -- pelpel
+
+11/10/2002
+[I]- Unusable skills do not show anymore on the skill screen
+
+17/10/2002
+[I]- New option to not have the equipment/inventory windows move items around
+ when a prompt ask for an item. Thanks to John Gilmore
+[B]- Fix a bug of wands in store
+[B]- Fix an old spelling error: "droped" not "dropped" -- Neil
+
+18/10/2002
+[O]- Behold! The new Grand Scheme For Wands, Staves and Rods!;)
+ Now all sticks in the game use the same system as the spells. The unified
+ spell system could we say ;)
+ What does it changes? sticks should now be usefull, jsut as spells are.
+ For example a wand of manathrust is not to be laughed at.
+ Hw does it work? 'I'nspect the stick you want to know about you'll see
+ he details, each stick gets a spell and a base level. The base level
+ means the spell will be cast at that level if you have 0 in the
+ Magic Device skill. If you have Magic Device it increases the level.
+ Works a bit like Spell-power for the spells.
+ Also the distinction of wands/staves is tenuous now, wands are attack
+ stuff and staves not but wands can sometimes NOT be targeted spells
+
+20/10/2002
+[P]- Yavanna Kementari as a new Vala, protectress of nature. Along with her
+ priests, the Druids
+
+21/10/2002
+[m]- Updated symbiant helpfiles including full list of their new bookless spells
+ in m_symbio.txt -- fearoffours
+
+23/10/2002
+[I]- Recording cmovies is now working on a microsecond timeframe, much better looking
+ Let's just hope that silly systems know gettimeofday()
+
+26/10/2002
+[m]- Introduced a performance measure for process_world_hook, which I suspect
+ is causing slow movement problems in the reduced map mode. Please read
+ the comment in process_world() [in dungeon.c] for alternative solutions.
+ -- pelpel
+
+27/10/2002
+[m]- Changed every instance of "essense" to the correctly-spelled "essence".
+ Update your macros. -- neil
+[M]- Changed "The Balrog of Moria" to "Durin's Bane". Less of a mouthful, and more
+ in-theme -- fearoffours
+[M]- added the "spirits". They are the inhabitants of the void. They're nasty.
+ -- fearoffours
+
+28/10/2002
+[P]- Typo in Druid description: Kemenari -> Kementari. --fearoffours
+[B]- Fixed bug where ironman_rooms would give you the number of random quests
+ you played last time, instead of zero. -- neil
+
+29/10/2002
+[D]- Added SPIRIT flag to The Void, so that Spirits are actually generated there now
+ -- fearoffours
+
+02/11/2002
+[P]- Subraces can now have skill mods
+[P]- Spells bound to two or more schools now require at least one point in
+ each of the schools to be used
+[m]- Trimmed down the size of chardumps(removed uselessness from object
+ descriptions)
+
+05/11/2002
+[I]- Obvious object flags will show up when 'I'nspecting items when they are
+ only identified(no more need for *id*). Obvious flags are like acid
+ resisatnce on an armor of resist acid and such
+
+06/11/2002
+[P]- New skill, Stunning-blows, a haftedmastery subskill, just like critical
+ hits is a subskill of swordmasery. It requires a hafted weapon > 5 lb
+[O]- Activations are now a_info/k_info/e_info definable with a: lines
+ You can do a:HARDCORE=NAME where NAME is an activation name
+ that is hardcoded in the C source.
+ Or a:SPELL=Name where Name is a "spell" name as defined in the unified
+ spell system(the first defined spell(index 0) cannot be used this way
+
+07/11/2002
+[B]- Allow non-artifact, non-ego items with activations be activated. -- neil
+[I]- Cause of death is now shown in chardumps
+
+08/11/2002
+[m]- Added descriptions to Totems, removed redundant need to identify them.
+ -- neil
+[G]- Yavanna's followers now have a God quest. -- fearoffours
+[m]- Help docs for Yavanna and Druids, thanks Mef and Massimiliano Marangio.
+ -- fearoffours
+
+09/11/2002
+[M]- Only gain exp from pet kills, not from every monsters, when using Monster
+ Lore skill
+
+10/11/2002
+[m]- Yes, more help updates. In tome_faq.txt and TANG.txt I added links to
+ skills.txt, magic.txt, birth.txt and gods.txt where appropriate. Removed
+ two references to Pern that got missed in tome_faq.txt.Added a
+ c_priest.txt file for contextual help at birth when choosing a main class.
+ Corrected typo in r_info (SPirit became Spirit). -- fearoffours
+
+11/11/2002
+[I]- CTRL+] to save an html screenshot anytime(ie: to preserve the current
+ message)
+[P]- Necromancers start with corpse preservation skill
+
+13/11/2002
+[B]- Don't let the Maggot sling be generated randomly. -- neil
+
+15/11/2002
+[m]- Added a new TERM_XTRA call, TERM_XTRA_GET_DELAY which should return the
+ time in microseconds. What time exactly isnt meaningfull but it must be
+ usable to compute the length of time an action takes.
+[I]- Thanks to the new TERM_XTRA_GET_DELAY the cmovie code is now cleaner
+ and should work fine:) Windows and unix platforms should now be able
+ of microsecond resolution cmovies!
+[m]- Made all the socket code into z-sock.[ch] and wrapped it into a
+ virtualizing layer so that the rest of the code can use it independantly
+ of the implementation. Currently unix and windows sockets are supported.
+
+16/11/2002
+[B]- Prevent the automatizer from treating "good" bows as "average" -- neil
+[B]- Prevent earthquake damage for characters with wraithform, and prevent
+ some of the damage for characters with semi-wraithform -- neil
+[B]- Fix spelling of Book of Teleportation -- neil
+
+17/11/2002
+[P]- New Meta/Conveyance Spell: Tracker, it will track the last teleportation
+ that happened on the level and teleport you to its destination
+
+18/11/2002
+[G]- The Old Mage in Lothlorien will now fireproof staves or scrolls as well as
+ books, making it profitable for non-spellcasters. Currently he has enough
+ errr 'fireproofing material' for 3 books or 4 staves or 12 scrolls, or a
+ combination of these. Check fireprof.lua for the code. -- fearoffours
+[I]- Skills that have sub-skills in which you do not (and cannot) have points
+ no longer display the redundant +/- sign. thanks lemming for the code.
+ -- fearoffours
+[m]- Lots and lots of itsy-witsy help file updates. Stunning-blows, other
+ references to Pern, more links to other files... -- fearoffours
+
+19/11/2002
+[m]- Compress the grid in the character dump, eliminating blank lines and only
+ showing lines without '+'s for the resistances and sustains page -- neil
+[m]- Show the Mathom-house contents in the character dump -- neil
+
+21/11/2002
+[O]- When 'I'nspecting objects you'll know how you found them
+[B]- Magelock cannot override permanent walls(or walls for taht matter) and works
+ only in LOS
+
+22/11/2002
+[O]- 3 new artifacts of Gothmog, regrouped in an item set
+[m]- Cleaned up the notes code a little. (takkaria)
+[P]- Summon skill doesnt caerte drops for partial summons
+[P]- Summon skill doesnt work in an antimagic field
+
+23/11/2002
+[B]- Automatizer should not treat enchanted ammo and tools as average, either.
+ -- neil
+[B]- Fixed the bug that allowed to use unallowed gods
+[P]- Lost souls start with many satisfy hunger scrolls, I'm really too nice...
+[M]- Themed townspeople! In Lothlorien and GOndolin you find elven people and
+ dwarven in Khazad-dum
+
+24/11/2002
+[m]- Display in the dump how interesting items were found -- neil
+[B]- Two-handed artifact weapons now act as such -- neil
+[O]- Darksword antimagic field now scales on the antimagic skill
+ So using one with 0 in the skill is not worth much
+[m]- DESTDIR support in makefile.std -- neil
+
+25/11/2002
+[B]- Don't mark items as store bought until they are bought -- neil
+[O]- Distinguish stolen items from bought items -- neil
+[m]- main-net.c display module which redirects display over the z-sock layer
+ and thus over any ip network to allow to create very lightweight terminals
+ to play ToME everywhere. This is still experimental
+[B]- Don't show Gondolin twice in the dump -- neil
+[O]- Cut down the price of Spectral weapon given their .. usefullness
+[I]- Fixed the bug that told you you could buy more items than you really could.
+ At least when using auto_haggle. Poor sods that dont use it shall burn
+ in hell
+[I]- Damage info is displayed for items that are only identified
+
+26/11/2002
+[G]- OK the god quest is a little easier now, as you're told the dungeon is to
+ the north/south and east/west of you. -- fearoffours
+[G]- Having autosquelch on will now not affect the essence in the fireproof
+ quest. And the mage gives a warning about the fact it may be easy to
+ destroy it too. -- fearoffours
+[B]- Fixed the incredible townspeople generation rate
+[B]- String fixes from lemming -- neil
+[B]- Don't print discomfort messages when examining and comparing weapons -- neil
+[I]- new <state> function to the automatizer to detect identified state
+[I]- Automatizer rules are automatically apply upon exit of the screen or
+ autogeneration of a rule with the 'k' command
+
+28/11/2002
+[B]- Add experimental support to the automatizer for marking "bad" rings and
+ amulets -- neil
+[m]- Distinguish average, disarmed, and empty chests in the automatizer -- neil
+[B]- Let summoners summon again (patch by masmarangio) -- neil
+[B]- Remove duplicate warning of an empty quiver (patch by masmarangio) -- neil
+
+29/11/2002
+[O]- Let Demonshields and Demonhorns be treated as armor -- neil
+[m]- Can include string terminators in help file tags i.e:
+ *****foo.txt*7[see:\] it works;)]
+[m]- Can save screenshots to help file format, this is only usefull to
+ documentation writters and thus the option only appears when wizard mode
+ is activated. It uses the new verbatim mode &&&&& at the line beginning
+
+01/12/2002
+[m]- The helpfile typo corrections just keep coming! Added Udun school help,
+ and demonologist school help, thanks Mef and masmarangio. -- fearoffours
+[m]- Some more spelling errors corrected. Updated warriors skills in the
+ help files -- masmarangio
+
+02/12/2002
+[m]- Skill updates for more character classes in the help files. -- masmarangio
+[m]- Automatizer tutorial added. -- fearoffours
+[G]- God quest relic is now inscribed to prevent automatizer 'accidents'
+ -- fearoffours
+
+02/12/2002
+[O]- Wands/staves are now described this way: a wand of foo[bonus|max]
+ Bonus is the bonus spell levels you get, and max is the limit of spell
+ levels for that wand. It means even if you have Magic Device at level 50
+ you cannot get a level 50 spell from a wand with max 30. Naturally the
+ max(and bonus) increase with the depth you find the wand/staff :)
+[P]- Players in monster form can now use barehanded combat, instead of
+ reverting to monster attacks. -- neil
+[O]- Fix and reduce the wand and staff pricing -- neil
+[B]- Make the automatizer work independently of the player's body -- neil
+
+03/12/2002
+[m]- Clean out some unused variables and some other valid warnings -- neil
+[B]- Don't spoil things in the dump -- neil
+
+04/12/2002
+[m]- Updates of the character races help files -- masmarangio
+
+05/12/2002
+[B]- Maiar can't choose a god anymore -- masmarangio
+[I]- Added a message if you don't have powers but press 'U' -- masmarangio
+
+06/12/2002
+[B]- Staves are properly fireproofed now. -- fearoffours
+[m]- God quest gets more clues to the location, and they're printed in the
+ 'Ctrl-Q'uest screen. I'm too nice. -- fearoffours
+
+07/12/2002
+[I]- Added the extended command #quest (or #Q for short) to get quest list
+ because some prts catch the CTRL+Q combo
+[m]- Added contextual help for wands/staves, also added a section in the help
+ about it. --fearoffours
+[m]- Some small help file updates (Muar becomes Durin's Bane) -- masmarangio
+[m]- Added full mindcrafting spell info in the same form as other schools of
+ magic. Removed help on the Music skill, as this will not be included for
+ 2.1.0. Added some other help stuff. -- fearoffours
+
+08/12/2002
+[B]- Correct Damage/Round display for bare and bear combat. -- neil
+[m]- Help now has an alphabetical index! -- fearoffours
+[B]- Melkor wants you to sacrifice corpses, not raw meat -- neil
+
+09/12/2002
+[B]- Fixed an off-by-one error in loadsave.c that caused savefile corruption
+ if the number of monsters or objects saved was maximal -- masmarangio
+[m]- Removed help on the Druidistic skill since Druids are normal Priests now.
+ Minor changes to the skill example to match human warriors.
+ Updated Option help file, some other minor changes -- masmarangio
+[O]- Allow Wooden Rods to be sold at the Magic Shop -- neil
+
+10/12/2002
+[B]- Corrected the price of enchanted boomerangs and instruments. -- masmarangio
+[B]- Corrected the used multiplier while 'I'nspecting ammo.
+ Fixed the damage of throwing items / boomerangs -- masmarangio
+
+11/12/2002
+[I]- 'Compare weapons' works only with melee weapons, item selection changed.
+ Expanded the description of a god at birth. -- masmarangio
+
+12/12/2002
+[m]- Removed Tank Points and firestones. -- neil
+[m]- Removed PERNANGBAND monster flag and renamed as many Pern monsters,
+ artifacts, and other references as I could find -- neil
+[M]- Firebirds (formerly firelizards) and Thunderlords are B, not d and D
+ -- neil
+[B]- Fix some artifact activations -- neil
+[B]- Fixed (temporarily) item activation and description. Some items could
+ activate for the unified activation, and display the other activation, so
+ further changes are needed. -- masmarangio
+[I]- Removed the silly 'You are shooting with a flute' message. -- masmarangio
+
+13/12/2002
+[m]- Renamed instruments in luckspoi.txt, comment changes -- masmarangio
+[I]- Added OBJ_FOUND_SELFMADE for items that were created by the player.
+ Alchemist should also use it (not changed yet). Replaced the plain
+ description "in the Town" for items fond on the surface -- masmarangio
+
+14/12/2002
+[O]- Monster traps are disarmed by GF_KILL_TRAP and GF_KILL_DOOR -- masmarangio
+[m]- The description of ACT_DEST_DOOR includes traps, better description of
+ deactivating music instruments. -- masmarangio
+[M]- Increase Thunderlord rarities -- neil
+
+14/12/2002 -- T.o.M.E 2.1.0 aka "No Surrender, No Retreat"
+
+14/12/2002
+[B]- Artifact spoiler was messed up
+
+15/12/2002
+[m]- some small help files updates (Melkor, GoI, races) -- masmarangio
+[B]- some Orc Cave crashes fixed -- masmarangio
+
+16/12/2002
+[B]- Fixed the Mushroom Quest: mushrooms are taken before creating the rewards,
+ and these are created even with a full inventory -- masmarangio
+[B]- Grammar fix for breathing messages -- neil
+[B]- Changed order of level feelings, removed unused feelings. -- masmarangio
+[B]- A Rod of Drain Life is needed for vampiric artifacts instead of the Wand.
+ Renamed one ego light of Boldness (now of Fearlessness). -- masmarangio
+[m]- Updated and reformatted the essence spoiler. -- masmarangio
+
+18/12/2002
+[O]- Removed the double pval for Mana-items (40%)(+2). The description of
+ Mana and Life items is now with percents. -- masmarangio
+[m]- Small updates to m_demono.txt -- fearoffours
+[m]- Added mindcraft in magic.txt and a paragraph in m_mindcr.txt -- masmarangio
+
+19/12/2002
+[B]- Adjusted the melee damage shown in the status screen. -- masmarangio
+[B]- Spelling errors corrected. Thanks to markrax -- masmarangio
+[B]- Fixed bashing the trigger doors in the Thieves Quest -- masmarangio
+[B]- Allow Amulets of the Magi and *Defender* weapons to be sold -- neil
+[B]- Fix alchemist creation of ego staves, etc. (patch from "oops") -- neil
+[B]- Don't let gold into the inventory -- neil
+[B]- Temple doesn't want unblessed edged weapons -- neil
+[B]- Properly handle obvious flags on non-*ID*d objects (fixes things like
+ resistances grid and selling Blessed weapons in the temple) -- neil
+[B]- Squelch at different times, to avoid destroying the wrong items -- neil
+
+20/12/2002
+[m]- Removed some compiler warnings. Thanks to markrax -- masmarangio
+[I]- Work / fixes in spoiler creation (items, essences, menu) -- masmarangio
+[B]- Automatizer: <symbol> works with graphic modes -- masmarangio
+[B]- Fixed pval3 for artifact staves and wands in apply_magic -- masmarangio
+[m]- Corrected some typos and some comments. Thanks to markrax -- masmarangio
+[m]- Spell description edit -- neil
+[B]- Exclusive skill fix (patch by markrax) -- neil
+[B]- Yet more copyediting by markrax -- neil
+
+21/12/2002
+[m]- Corrected most of the typos found by vrak. -- masmarangio
+[B]- Fixed a display bug when passing through walls, thanks jup
+[B]- Copyediting of lib/edit/* -- markrax
+[B]- Copyediting of monster description books (lib/file/book-1[0-9].txt)
+ -- markrax
+[B]- Copyediting of misc. files in lib/file/ -- markrax
+[B]- Copyediting of most files in lib/help/ -- markrax
+[B]- Copyediting and description tweaks to tables.c -- markrax
+[B]- More minor copyediting -- markrax
+[m]- Minor externs.h code cleanup, remove dups -- markrax
+[B]- Let keypad 5 key work in X11 target -- markrax
+[I]- Add columns, tweak UI in character info sheet -- markrax
+[I]- Updated the artifact spoiler creation -- masmarangio
+[m]- Corrected some errors in a_info.txt -- masmarangio
+[B]- Display the arm slot when not wearing a two-handed weapon -- neil
+[I]- Cleaned up some code in the character info sheet -- masmarangio
+[B]- Fix drop message for junk artifacts (patch by jup) -- neil
+
+22/12/2002
+[m]- Copyediting of lib/edit/k_info.txt -- markrax
+[m]- Copyediting of lib/edit/al_info.txt -- markrax
+[m]- Added ENGLISH.txt file with ToME textual conventions -- markrax
+[m]- Standardized on "Middle-earth" spelling -- markrax
+[m]- More grammatical fixes (mostly "it's") -- markrax
+[m]- Removal of many Americanisms, grammatical fixes -- markrax
+[O]- Centered Map around Minas Anor -- masmarangio
+[I]- Allowed the user to abort when asked to engrave on a grid. Also, don't
+ let the player engrave on a grid with no mana. Thanks to Pav of
+ angband.~.cz for this patch. -- takkaria
+[m]- Updated and relocated style guide -- markrax
+[O]- CURSED two items with HEAVY_CURSE, thanks jup -- markrax
+[O]- CURSED Ring of Durin (had HEAVY_CURSE), thanks jup -- markrax
+[B]- Let *Identify* of your pack work the same as an individual *Identify*
+ for the purposes of alchemists -- neil
+
+23/12/2002
+[I]- Updated the broken spell spoiler creation (works for the bookless powers).
+ LUA schools should be added -- masmarangio
+[m]- Parchment titles capitalised. Spacing of artifacts and some americanisms
+ and errors in a_info.txt, tables.c, and other files corrected.
+ -- masmarangio
+
+24/12/2002
+[O]- Added description from Sangband to the Shield of Gil-Galad -- masmarangio
+[B]- tried to prevent printing of alchemy items in spell spoiler -- masmarangio
+[B]- Fixed two alchemy bugs: Same sval for Rings of Critical Hits and the Ring
+ of Durin. Corrected the sval of Rings of Constitution -- masmarangio
+
+25/12/2002 - Mery xmass!
+[P]- Boulder throwing skill :) For Ents .. Don't get used to it as I don't know
+ if I'll let it in
+[B]- Destruction cannot kill quest monsters
+[B]- The lost temple (god quest) dungeon really cannot be generated in
+ inaccessible places now. -- fearoffours
+[I]- Unidentified objects are marked in slate(the inventory letter)
+
+26/12/2002
+[m]- Updated the skill gain in skills.txt, corrected some spelling errors.
+ Added Boulder-throwing to the help files -- masmarangio
+
+27/12/2002
+[B]- Fixed note file problem under windows -- masmarangio
+[m]- Corrected some americanisms and spelling errors -- masmarangio
+[B]- Fixed an alchemy error with fireproofed staves, removed tabs from c_prt
+ calls -- masmarangio
+
+28/12/2002
+[P]- Added dynamic subrace. This means that "things" in the game can somewhat
+ change your subrace. This is used by the 3 new Vampire corruptions, which
+ when combined will permanently turn you into a full blown Vampire.
+ The Vampire subrace has been removed, it might come back as a template for
+ the corruptions, or not. All others undead subrace will have the same
+ fate. This means that soon you'll be able to turn into an undead rather
+ than start as one. The penalties will be tweaked too so we don't end up
+ with every char being an undead.
+[B]- Fixed a branding bug that allowed to modify artifacts and ego-items.
+ -- Kusunose
+[m]- Updated corruption_spoiler_generation (includes index tags, don't show the
+ Lose message for not removable corruptions) and corspoil.txt -- masmarangio
+
+29/12/2002
+[I]- Stores/homes inventory letters are colored just like inventory/equipment
+ thanks to Pav
+[m]- Music system performance improvement -- neil
+[m]- Added help on pets to dungeon.txt and some clarification about Spell-power
+ affecting only the 11 primary schools of magic. -- fearoffours
+[m]- Added to Spell-power the other affected Schools (Udun, Demonology, Gods),
+ as well as naming Sorcery in the Udun School help file -- masmarangio
+
+30/12/2002
+[O]- init1.c: added two times OBJ_FOUND_SPECIAL -- masmarangio
+[m]- al_info.txt: removed double acid essences in amulet of resistance, grouped
+ entries for ring of extra attacks, renamed some entries -- masmarangio
+[m]- wizard1.c: Added IS_CVS to header, create artifacts at 25, not 35, added
+ index in Essence Spoiler. essences.txt: new spoiler file -- masmarangio
+[m]- cmd1.c: removed a compiler warning. caves.c: simplified a test -- masmarangio
+[m]- Info on spell-power and multi-school-spell interaction, typo fix in
+ m_mindcr.txt -- fearoffours
+
+31/12/2002
+[B]- object2.c: Initialised Artifacts with LEVELS in apply_magic -- masmarangio
+[O]- generate.c: OBJ_FOUND_MONSTER for final artifacts / objects -- masmarangio
+[B]- al_info.txt: Svals of Ring of Sustain Con and Dex exchanged -- masmarangio
+
+01/01/2003 - Happy new year !!!
+[B]- store.c: Fixed bug with prices of wands, indentation -- masmarangio
+[I]- Better fountain command interface. -- Kusunose
+[B]- al_info.txt: Added Ammo of slay animal. Amulet of regeneration with new
+ sval. Ego Weapons of Life added -- masmarangio
+
+02/01/2003
+[B]- find_ignore_stairs, set or unset, failed to handle some quest related
+ stairs properly. -- pelpel
+[B]- cmd7.c: Fixed bug with TR4_ART_EXP not set correctly -- masmarangio
+[O]- cmd7.c: Added OBJ_FOUND_SELFMADE for created items/artifacts -- masmarangio
+[B]- Don't allow a change from weapon combat if a cursed weapon is wielded
+ -- neil
+[m]- wizard1.c: Changed position of IS_CVS, added double ego items in essence
+ spoiler. essences.txt: reflects this -- masmarangio
+
+03/01/2003
+[B]- wizard2.c: Some bound checks to prevent crashes -- masmarangio
+[B]- cmd7.c: Fixed reduced capacity of ego rods -- masmarangio
+[B]- object1.c: Added a "It cannot be destroyed" msg in place of "it has blah%
+ chance of breaking upon hit" for artifact ammo. thanks lemming for fix
+ -- fearoffours
+
+04/01/2003
+[O]- e_info.txt: Added indestructible and cursed amulets to simplify alchemy
+ -- masmarangio
+[B]- cmd7.c: Allow creation of artifacts from single ego items; don't change
+ artifacts and double ego items if you don't wish to create an artifact.
+ Simplified amulet handling and other code fragments -- masmarangio
+[m]- QUITING-> QUITTING, COMBINAISON->COMBINATION: two cases of typos
+ that I've long been aware of... -- pelpel
+[D]- Changed the marker(#172) to look like open floor(#1) -- masmarangio
+[B]- Updated Amulets and Rings in defines.h / defines.txt -- masmarangio
+[B]- al_info.txt: Amulet of Adornment without pval. cmd7.c: skill >= 25
+ needed to create artifacts, not > 25 -- masmarangio
+[B]- Warning about leaving a trap detected zone don't cost energy -- masmarangio
+
+05/01/2003
+[m]- First update of commands.txt -- masmarangio
+[B]- spells2.c, self_knowledge(): f4 through esp were not initialised before
+ referenced. -- pelpel
+[B]- cmd7.c, extern.h: changed the variable "tocreate" in alchemist_items_check()
+ from bool to int -- masmarangio
+[B]- xtra1.c, apply_flags(): Added bounds checks for antimagic. -- pelpel
+[B]- xtra1.c, apply_flags(): changed the type of bit field variables from s32b
+ to u32b, for obvious reasons. -- pelpel
+[G]- Princess now offer 3 reward and the player selects one
+
+06/01/2003
+[B]- cmd7.c: Fixing three bugs in Alchemy: Extracting from double ego items and
+ from stacks of staves, as well as generating all leeched empty items.
+ Problems may still arise when you leech a stack of objects from the floor
+ and essences get dropped over them. Boomerangs can be enchanted now.
+ -- masmarangio
+[B]- generate.c: Moved the room creating loop (fix from 15/12). Something better
+ should be used than this brute force method -- masmarangio
+[B]- Minor spelling and grammar fix -- neil
+[B]- Changed the type of dungeon_flags to u32b, as in types.h -- masmarangio
+[B]- cmd7.c: Instruments can be enchanted now. -- masmarangio
+[G]- Applied the Artifact Activation patch -- masmarangio
+[B]- Fix activations -- neil
+[G]- Alchemists can no longer make artifacts granting Precognition or Immunity
+ to Nether -- neil
+[B]- Avoid some bad periods in monster descriptions -- neil
+
+07/01/2003
+[P]- p_info.txt: Updated, compacted history-chart. Trolls, Orcs, Elves with new
+ entries, some other small changes. Deleted the unused races -- masmarangio
+[m]- Added Activations to essence spoiler, new help file created -- masmarangio
+[B]- Reset the pval of extracted rings and amulets, prevent creation of cursed
+ empty items -- masmarangio
+[B]- Make ego staves / wands of nothing extractable, disallow empowering of ego
+ items / artifacts that are not wearable (e.g. staves) -- masmarangio
+
+08/01/2003
+[I]- squeltch.c: Ask for overwriting rules file and display saving message in the
+ same box -- masmarangio
+
+10/01/2003
+[m]- Added a (conservative and preliminary) port to OS X + gcc + makefile.
+ The four *.icns files are faithful conversions of the traditional Angband
+ icons that have long been used by Mac ports, even before Ben.
+ makefile.std itself is not updated. Please read comments in main-crb.c.
+ -- pelpel
+[m]- Module support. It means that people can write ToME "modules" which will
+ go in lib/mods and contain "variants" that use the same game engine but
+ different lib/foo files. The module selection screen only appears when
+ the game detects more than one module. The new -Mfoo command line option
+ allows to bypass module selection
+[m]- 'Death' Message of a Nazgul: Choose pronoun 'she' or 'he' according to the
+ sex -- masmarangio
+[G]- God quest wont trigger for Lost Souls until they reach the surface
+[m]- Turn off some ToME things when using a non-ToME module -- neil
+[B]- Fix the monster description messages even better -- neil
+[B]- Better honor the NO_TARGET flag -- neil
+[M]- Give Farmer Maggot the NO_TARGET flag -- neil
+[B]- Fixed (hopefully) the wrong activation bug -- masmarangio
+[m]- (Mac, Carbon) Modernised file system interface (currently only turned on
+ for Mach-O Carbon port), improved Mach-O Carbon support, incorporated my
+ 32x32 tiles support code for V3.0.2, and more gcc porting note -- pelpel
+[m]- Let the player see which game module he selected in the character
+ selection screen -- neil
+
+11/01/2003
+[B]- Fixed one wrong sval in al_info.txt -- masmarangio
+[m]- Added makefile and some auxiliary files for developer CD gcc compilation
+ of Carbon port -- pelpel
+[m]- (OS X Carbon) Changed the format of graphics tiles from PICT in the
+ resource fork to plain PNG files, only for gcc compilation at the moment
+ -- pelpel
+
+12/01/2003
+[B]- Alchemy: The song of music instruments, the type of explosive ammo and
+ the level of sticks are not changed by enchanting / leeching the items.
+ -- masmarangio
+[m]- Expanded the description of Antimagic, small index updates -- masmarangio
+[I]- wizard2.c: Initialised the lua command (^A >) with the help file index
+ generation -- masmarangio
+[m]- (OS X Carbon) Cleaned up my recent updates. It's fairly stable now.
+ To do: move to .nib based menu/dialogues, pulling sound out of resource
+ fork, and better sound code. -- pelpel
+[B]- cmd7.c: Allow extraction of the charges of Sticks of Plenty -- masmarangio
+
+13/01/2003
+[m]- preliminary SCANDIR support for gcu, gtk, xaw borrowed from x11 -- neil
+
+14/01/2003
+[m]- Modules can control the number of levels over the player level a skill
+ may have allocated now, using max_skill_overage. -- neil
+[m]- HOOK_FIRE added -- neil
+[m]- Changed the help files about vampires; classes, races etc. are listed
+ in alphabetical order in birth.txt -- masmarangio
+[m]- Races & subraces get a starting object list in p_info, less hacks in birth.c
+[I]- Automatizer can now be used to auto-inscribe items, thanks to jepler
+[I]- Automatizer can now display rules in a more english like maner, xml mode
+ is also available, switch by pressing 'x', thanks to jepler
+
+15/01/2003
+[G]- Summoner can extract totems from skeletons / carapaces. -- masmarangio
+[B]- Trap of Wasting Wands (affects also Staves) change the Wand/Staff to the of
+ nothing type. Deleted SV_WAND(STAFF)_NASTY_WAND(STAFF), since in the new
+ stick system the worthless sticks don't have the first svals -- masmarangio
+[B]- Fixed a fountain filling bug, simplified the item_tester -- masmarangio
+
+16/01/2003
+[B]- (Mac, OS X) Tilewidth/height code ceased to work because menu API started
+ to return Unicode crap instead of holy ASCII -- pelpel
+
+17/01/2003
+[m]- HOOK_EAT added -- neil
+[O]- New artifact: The Sling of the Thain -- neil
+
+18/01/2003
+[B]- empty chests are generated as known (i.e. they were opened) -- masmarangio
+[B]- do_cmd_rest flushes input if the player can't do so for some reasons
+ and flush_failure is set.
+ Note: flush() doesn't seem to work as it used to do... Any changes have
+ been made to inkey, or some code touches its various control variables?
+ -- pelpel
+[m]- (Gtk) Added support for the "bigtile" mode. Please start the game with
+ "tome -- -w" if you don't like to see horrible glitches... This is not
+ Gtk-specific problem by the way. Scrolling the map and hitting ^R fixes
+ it too, if you prefer menu command -- pelpel
+[G]- Trees are now passable by wraith beings. Monsters that fly will pass trees.
+ Dead small trees will be dead small trees. Monsters tunneling will also
+ destroy trees
+[P]- Extra HP bonus(from quest, melkor, ...) is applied before sorcery penality
+
+19/01/2003
+[B]- (Gtk) Fixed problems with wide tile mode when it is used with backing
+ store. Seems more like the problem is in z-term (it only updates every
+ two columns of the dungeon map...), but it works now -- pelpel
+[B]- (Mac) The asynchronous sound player unlocked and released sound data
+ without confirming its completion. Wrote an alternative implementation
+ that holds data until a channel it is played is reused, to avoid using
+ interrupt-time code (which is quite complicated business in 68K).
+ Because this means that a fairly large amount of data can be locked in
+ memory for a long time, I reduced number of channels used to
+ 4 in Classic and 8 for Carbon -- pelpel
+
+20/01/2003
+[G]- Trees/grass can only grow one some terrains(yes that DO exclude lava;)
+[I]- z) slot is hidden until needed -- thanks to Scott Bigham
+[I]- Some cosmetic changes and improvements to char dumps -- thanks to Scott Bigham
+
+21/01/2003
+[B]- Monster traps: Changed the code so that the new wands and staves are
+ functional in device monster traps. This is commented out with #if 0 since
+ the code must be tested. Perhaps a lua solution is better ? -- masmarangio
+
+22/01/2003
+[B]- Deathmolds could use their racial power without spending a turn!
+[B]- 'U' powers didn't remove Disruption Shield
+[m]- (Mac, Windows) Added an in-game menu command to view current scoreboard.
+ Taken from the latest [V] (Win port only there), minus the use of
+ display_scores_aux, which I regard first-degree Mega-Hack -- pelpel
+[G]- Wielding the One Ring now has real disadvantages, you've been warned :)
+ What ? I didn't mention what disadvantages ? Oh yes, I didn't.
+[G]- Bump required level and difficulty rating of Minas Anor quest, as the
+ trees changes have made it just a little harder. -- neil
+
+23/01/2003
+[I]- Hopeless attempts to dig will be noticed to the player -- thanks to jepler
+[B]- Potions of Cure Water are no more extractable by Alchemy
+
+25/01/2003
+[P]- Bard class is back(was called Harper before) with a new Music skill.
+ Instruments carries the spells, and they work a bit like Psi foci in
+ psiband. An instrument (+2) can only play songs that are marked (I) or
+ (II) not (III) or (IV)
+[B]- Ordered the music songs according to the needed pval, then level.
+ Fixed the svals of artifact instruments, changing the Flute to a Harp.
+ Added a better description of Bards. Please check it ! -- masmarangio
+
+26/01/2003
+[B]- An Alchemist can now fireproof spellbooks -- masmarangio
+[m]- Bard and Music docs are done. Please check em. -- fearoffours
+[B]- A possessor (the creature, not the class) can only possess whole
+ corpses and skeletons, not pieces of meat -- masmarangio
+
+27/01/2003
+[B]- Make wielding more than one demonshield (or demonsword I suppose) work
+ -- neil
+
+28/01/2003
+[B]- Possession something while encumbered to the point of having 0 mana
+ allowed free use of body spells without failure
+[P]- Mana is now function of the Magic skill and either INT or WIS, whichever
+ is higher
+
+30/01/2003
+[B]- Possibly the relic in the god quest couldn't have been generated.
+ Wasn't me honest guv. -- fearoffours
+[G]- The lost temples for god quests now have harder monsters to make the piety
+ gain rather more substantial and obvious I hope. Deeper monsters appear
+ as player clvl increases. -- fearoffours
+[m]- Help file corrections on Music skill. -- fearoffours
+
+01/02/2003
+[B]- Some menus exits when 'e' was hit on some comapilation.
+ Note: '\e' for escape is compiler dependant extension so do not
+ use it. Thanks kobayasi for fix. -- Kusunose
+[B]- All known staves and wands are displayed as 'Globe of Light' in
+ the Known Object list. Thanks kobayasi for fix. -- Kusunose
+
+08/02/2003
+[m]- Make HOOK_QUAFF take an o_ptr, and let HOOK_EAT return the identify success
+ -- neil
+
+12/02/2003
+[I]- Useless but fun, when a wield monster takes damage instead of you
+ the monster will be named. If you named it(with the #foo inscription)
+
+16/02/2003
+[B]- Chaging the melee style did not update bonuses. Thanks to kobayasi for
+ the patch. -- Kusunose
+[B]- <sval> in automatizer worked even when the player was not aware of
+ the object. It was possible to use this as a free ID. Thanks to
+ kobayasi for the patch. -- Kusunose
+
+24/02/2003
+[B]- Cancelling the reward skill sellection could crash the game. -- Kusunose
+
+26/02/2003
+[I]- Boomerangs now display damage with 'I'nspecting, thanks to Scott Bigham
+
+27/02/2003
+[B]- Inspecting or Identifying something shouldn't infect you with the
+ Black Breath -- neil
+
+28/02/2003
+[I]- Genocide and genocide like effects that require monster race now allow
+ targetting of a monster to select the race. Gfx users can now correctly
+ genocide :)
+
+01/03/2003
+[I]- d/s and g/p work in both home & stores. Pfft.
+
+02/03/2003
+[m]- Fixed a typo in The Dragon Helm of Turin Turambar -- WeZ
+[G]- Fixed the teleport-level ability of Deathmolds, so they
+ can teleport out of a dungeon, instead of getting a
+ message saying there's only air above them. -- WeZ
+
+04/03/2003
+[P]- Probability travel level teleport ability & teleport level spells
+ wont work in some dungeon
+
+05/03/2003
+[G]- A new quest! An ultra ending! "Falling Toward Apotheosis"
+ After banning Morgoth spirit in the Void, you can pursue him
+ there to forever end the darkness. But beware, it is more than
+ likely that you will die. But for the few that succeed, the fame
+ will be great!
+ Note: you can only do it if you choosed the way of Good and thus
+ destroyed the One Ring. An evil ultra ending is planned and will
+ come a bit latter.
+
+06/03/2003
+[P]- Dwarves get a bonus to axe mastery, as they rightfully should
+[O]- Cloak of Air. Generates an air bubble around you so you can breath.
+ Just in case you need it ..
+
+08/03/2003
+[G]- Another new quest! An old mage in Minas Anor needs help, too. -- neil
+
+12/03/2003
+[B]- Non-enemy monsters now won't hold up victory in the Spiders and Library
+ quests. -- neil
+[B]- Various Library quest fixes -- neil
+
+13/03/2003
+[O]- Lebohaum activation is now true to the original material..
+[P]- All mages start with 0.1 less mod to Sorcery. Specialists dont have sorcery.
+ Runecrafters dont iether, nor Alchemists. Thaumaturgists do.
+ Specialists also get a bit better Spell-power
+
+16/03/2003
+[I]- Only show enemies in the uniques list -- neil
+
+20/03/2003
+[m]- The various ?_info.txt files can now include otehr files with the <:file.txt
+ command. This allows people to split up too big files
+
+23/03/2003
+[I]- X11 port can now do text selection copy&paste with the mouse, thanks to kieron
+
+27/03/2003
+[B]- Mage staves, rod tips, and magic tomes are now "good" items. This should
+ fix the problem of Saruman, Sauron, and others dropping nothing but rods.
+ -- neil
+
+28/03/2003
+[I]- Show "ironman_rooms" setting in the character dump -- neil
+
+29/03/2003
+[P]- The adventurer quest skill reward will now only provide a modifier of 0.3
+ if you dont have the skill, but if you have it it will improve the modifier
+ by 0.1 if it is below 0.5
+[I]- Automatizer rules now have an module attribute, defaulting to "ToME". The
+ module name is case sensitive, as always. <rule module="ToME" name="Die"
+ type="destroy"> will only destroy items when you're playing the ToME
+ module. -- neil
+
+02/04/2003
+[B]- Fix grammar error pointed out by "JanaRaissa" -- neil
+[B]- Prevent instrument-wielders from firing things, as pointed out by
+ "Chudus" -- neil
+[B]- Those who can breathe water or don't need to breathe at all should not
+ drown in pools of water, as pointed out by "Zonk" -- neil
+[B]- Fix Rods of Simplicity for those who need it most, as pointed out by
+ "Zizzo" -- neil
+
+03/04/2003
+[O]- Dragon Scale Mail now has more options for egos and random artifacts
+ -- neil
+
+04/04/2003
+[B]- Fix god quest temple placement error pointed out by "Fringe Worthy"
+ -- neil
+
+05/04/2003
+[I]- Somewhat nicer char screen, thanks to lemmings(I think ;)
+[B]- No more (broken) pattern vaults -- neil
+
+08/04/2003
+[m]- Ability to add timers in lua
+[B]- Fix spelling: PARCHEMENT -> PARCHMENT. Automatizer rules and other scripts
+ that use PARCHEMENT will still work, though. -- neil
+
+09/04/2003
+[M]- Companions and pet uniques can now be killed
+
+11/04/2003
+[P]- Trolls cannot get the troll blood corruption
+[P]- At Monster lore skill level 12 one can turn a pet in a loyal companion.
+ Note that you are limited in companion number
+[P]- Reduced Necromancy spell failure damage
+
+12/04/2003
+[P]- Skill multipliers of Rogues and Assassins are higher now. -- neil
+[B]- Fixed alchemy making of xtra shots/might
+[P]- Some skills have more chances to be taugth than others by fumblefinger
+
+13/04/2003
+[P]- Melkor Curse spell autocast chance formula changed
+[O]- Wishing for dual ego items works
+
+14/04/2003
+[P]- Spellbinder spell will reveal more info about itself when cast while
+ already active
+[P]- Increase Mage's Weaponmastery Multiplier by 0.1 -- neil
+[P]- Experimentally double Barehanded Combat martial arts damage dice
+ to make Monks more attractive -- neil
+
+16/04/2003
+[O]- Goods stolen from stores now get a 100% discount. -- neil
+[P]- One can now steal from more places -- neil
+
+17/04/2003
+[B]- Everburning torches, Feanorian Lanterns, and Dwarven Lanterns of Fading
+ couldn't be filled -- neil
+[B]- The Crumpled Scroll of Mass Resurrection no longer revives special
+ monsters who won't ever appear again anyway. -- neil
+
+18/04/2003
+[B]- Gauntlets that contain spells no longer hinder spellcasters -- neil
+[I]- Some junk removed from the character resistances grid -- neil
+
+18/04/2003
+[G]- Bree house is not available from start anymore, you have to get it
+ as a reward from the thieves quest
+
+20/04/2003
+[G]- The Lothlorien and Gondolin homes aren't free anymore, either -- neil
+
+21/04/2003
+[G]- The Minas Anor and Khazad-dum homes must be won, too -- neil
+
+24/04/2003
+[I]- Reworked 16x16 gfx by P_laloli@hotmail.com
+
+25/04/2003
+[B]- Fix the case where some birth items wouldn't stack -- neil
+[B]- Disarming a trap on a stair should not destroy the stair -- neil
+
+26/04/2003
+[B]- Player invisibility shouldn't hinder monsters attacking targets other
+ than the player (patch by Jeff Epler) -- neil
+
+27/04/2003
+[B]- Mana and Life drains should not cause infinite rest loops -- neil
+
+28/04/2003
+[O]- Handmade items like arrows and totems are fully identified -- neil
+
+29/04/2003
+[m]- Max skills internaly increased to 200
+[G]- Random quest are now disabled when persistent dungeon levels are enabled.
+ -- neil
+
+30/04/2003
+[O]- The artifact that had aggravation and a stealth bonus no longer has
+ that useless stealth bonus -- neil
+[O]- It's now much harder for sentient weapons to get the Acid realm -- neil
+
+01/05/2003
+[I]- '+' command(alter terrain) wil ltry to open doors instead of tunneling
+ them
+
+02/05/2003
+[P]- Shots now pierce when they used to ricochet in random directions -- neil
+[P]- Piercing shots are now togglable -- neil
+[G]- Singing happy drunks will freely accept alcoholic beverages from you.
+ -- fearoffours
+[m]- Class helpfiles updated to reflect some changes in skill allocation.
+ -- fearoffours
+[I]- Turned on by default the linear stats display
+[m]- Chris Hadgis submitetd the first documented package of the ToME API!
+ More comming :)
+[I]- Maxxed stats now show a "!" in the character screen and dump, too -- neil
+[P]- If you play something experimental, it now shows up in the character
+ dump. Alchemists and Death Molds are marked as such for now -- neil
+[P]- Necromantic magic got a new spell: Necromantic Teeth
+
+05/05/2003
+[B]- Stone Prison spell would create floor where it shouldn't, possibly
+ trapping you in places like the Eol quest. -- neil
+
+06/05/2003
+[G]- Angband now blocks the magic of the Thunderlords' Nest -- neil
+[B]- Fix activation descriptions patch by Chris Hadgis -- neil
+
+09/05/2003
+[I]- ToME should try harder to use proper thematic flooring when appropriate
+ -- neil
+[B]- Stone Prison should not be able to turn walls into floors. -- neil
+
+11/05/2003
+[B]- Sound effects shouldn't give knowledge the player wouldn't otherwise
+ know (like the generation of the relic) -- neil
+
+12/05/2003
+[B]- Don't show silly chance to break for exploding ammo -- neil
+
+14/05/2003
+[m]- lib/patch directory to contains auto-loaded patches.
+ Each patch must be contained in it's own subdirectory and
+ must contain a patch.lua file with a patch_init() function in it
+ that must return the patch name and version
+
+16/05/2003
+[P]- Abilities. Abilities are like skills, but are booleans. That is
+ you either know them or not, there is no scale. One can learn
+ abilities by spending skill points in the abilitie screen(press 'N').
+ Abilities can have prerequisites to be meet before one can learn them.
+ (Like some can need a stat level, a skill level, ...)
+ Some classes get abilities for free at certain level. Like warriors
+ will get Spread-blows ability at level 25 for free(even if they dont
+ actually meet the prereqs).
+[P]- All classes now get 4 max blows. But there abilities that can increase
+ the max. Warriors gets them for free at birth, and other classes also
+ get some so they are not less powerful than before the change. This
+ will however help people create warrior-mages for example.
+[m]- Internal change: Magic Realms are gone. -- neil
+[I]- No more spell list window flag. It hadn't done anything since ToME 2.0
+ anyway -- neil
+[m]- Total savefile compatibility break. Hopefully we can do better from now
+ on -- neil
+
+21/05/2003
+[I]- The player now gets warned during race/class/subrace selection that a
+ class is experimental. -- neil
+
+23/05/2003
+[B]- Innate monster friendliness shoudln't take precedence over summoned pet
+ or companion status -- neil
+[B]- The Helm of Knowledge and Automatizer pickup now get along -- neil
+
+26/05/2003
+[m]- Initial helpfiles update for Abilities. -- fearoffours
+
+27/05/2003
+[I]- Princess quest reward selection is not cancelable
+
+28/05/2003
+[P]- New skill: Geomancy, works in combinaison with the 4 elemental skills
+ to produce various effects from the raw elements around teh caster
+ (grass, sand, ...). Elementalists becomes Geomancers now.
+ Thanks to Fubar Obfusco for the detailed idea
+[P]- Runecraft is not gainable from fumblefingers until it is reworked
+
+29/05/2003
+[m]- More help updates - Artifact Creation ability, plus addtions to FAQ and
+ skills.txt and others. Thanks to Michael Beatty for some suggestions.
+ -- fearoffours
+[I]- Autoroller now uses linear stats when requested
+[I]- Object window will now display the 'I'nspection of the last manipulated
+ item
+
+30/05/2003
+[B]- Resting ignores HP or SP if a drain on HP or SP is induced by an object
+[O]- Beat down the power of randart rings yet more -- neil
+
+31/05/2003
+[m]- Geomancy help. -- fearoffours
+[O]- heavy Xbows of Siegecraft, thanks to Fang
+
+01/06/2003
+[B]- The automatic drop from wilderness should no longer be abusable. No longer
+ can you hit < when you're hungry, cut, poisoned, or sensitive to light during
+ the day -- neil
+[P]- Far reaching attack ability. When using a long polearm you can attack monsters
+ 1 or even 2 grids away(at the cost of a reduced number of blows)
+ Idea taken from Adamant
+[O]- Ingeborg S. Norden's artifact bolts added -- neil
+[P]- Trapping is now an ability instead of a skill. Rogues, but not Assassins,
+ start with it -- neil
+[m]- Help updated to reflect new abilities. Deathmold question added to FAQ.
+ -- fearoffours
+
+06/06/2003
+[P]- Undead Form is now an ability
+[m]- Documentation for Undead Form added. -- fearoffours
+
+08/06/2003
+[m]- Added skill tests abilities to .prf files thanks to Scott Bigham
+[B]- Thaumaturgy attacks will travel more than one grid when not targeted
+ at a monster thanks to Scott Bigham
+[I]- Inscription and discount clauses for the automatizer thanks to Scott Bigham
+
+09/06/2003
+[O]- Boomerangs now have just a 1% chance to break, have their chance to hit
+ improved by Boomerang-mastery, get sold in shops, and are a bit less
+ rare -- neil
+
+10/06/2003
+[G]- The god quest is a (little) bit more forgiving about the direction the
+ dungeon lies in, and you also get an approximation of it's distance.
+ -- fearoffours
+
+11/06/2003
+[B]- Thaumaturgy spells could be too weak -- neil
+[B]- Demonologists couldn't use the Demon Summon spell -- fearoffours
+
+14/06/2003
+[P]- Thaumaturgy spell levels now range from 1-50 instead of 1-100, so now
+ one won't get spells with impossible failure rates, as suggested by
+ Jules Bean -- neil
+
+16/06/2003 -- T.o.M.E 2.2.0 aka "Born to the Purple"
+
+18/06/2003
+[B]- Fix manwe spell Avatar
+
+19/06/2003
+[B]- Silly silly bug in god quest fixed. -- fearoffours
+
+20/06/2003
+[B]- Mimics starts with a cloak
+[B]- Using the @ key in skill menu wont crash
+[B]- Cannot copy uncopiable spells
+[B]- Dripping Tread will put feats on the last grid, not the current one
+
+21/06/2003
+[m]- Clearer descriptions for spells which require more than one school
+ -- fearoffours
+[P]- Geomancer tweaks: Geyser's mana progression now matches its damage
+ progression. Geomancy now gives much larger bonuses to its child
+ skills, so Geomancers are now intended to max out the elements. -- neil
+
+22/06/2003
+[B]- Potions of Cure Water are inscribed for you to prevent mishaps with
+ the automatizer -- neil
+[B]- Don't let people travel with extra limbs, to prevent them losing
+ weapons by mistake -- neil
+[B]- Allow hypnosis of companions, make hypnosis failure messages more
+ useful - neil
+
+23/06/2003
+[m]- Mimicry help. Magic help now has it's own menu, other minor help
+ updates. -- fearoffours
+
+29/06/2003
+[m]- "Investing in the <foo> skill? You might be interested in the <bar>
+ ability." links in skills.txt --fearoffours
+[B]- God quest bug genuinely fixed now -- fearoffours
+[P]- Bear form will now starts at -5 speed but end at +5
+
+29/06/2003 -- T.o.M.E 2.2.1 aka "There All the Honor Lies"
+
+09/07/2003
+[B]- Prevent forbidden staves from being generated
+
+14/07/2003
+[B]- Really fix the God quest this time, we hope
+
+15/07/2003
+[m]- Mac OS X Module support
+[m]- Solaris compile workaround from Kevin W. Thomas
+
+16/07/2003
+[B]- Fix broken status in auto automatizer rules -- neil
+[m]- Valid XHTML in the HTML screenshots now -- neil
+
+17/07/2003
+[B]- HPUX support -- neil
+
+20/07/2003 -- T.o.M.E 2.2.2 aka 'And Now For a Word'
+
+20/07/2003
+[P]- No more involuntary corruptions
+
+02/08/2003
+[B]- Fixed crash on 'l'ook in rare conditions, thanks slappy0042
+[B]- Fixed inflation of ammo damage display, patch by 'Zizzo' -- neil
+
+05/08/2003
+[m]- Help updates - spectres lose hp when passing walls, thieves cannot shoot
+ arrows (very well), non-geomancer mages have a 0.00 modifier to Geomancy.
+ -- fearoffours
+[m]- Help updates - typo in rm_spec.txt and High-elves have good wisdom
+ -- fearoffours.
+
+08/08/2003
+[B]- Tulkas piety gains now match the documentation -- jules
+
+10/08/2003
+[m]- helpfiles - Clearer geomancy skill values for non-Geomancer Mages, a note
+ about effect of stealing from shops in skills.txt, and some FAQ additions
+ about FF and random quests. -- fearoffours
+
+13/08/2003
+[B]- Manwe, Eru, Yavanna, and Tulkas will not yet you start following them if you
+ are wearing the One -- neil
+
+24/08/2003
+[B]- Set number of charges correctly when a wand is stolen -- neil
+
+26/08/2003
+[m]- Scott Bigham's tome-autoabil.diff: Adds a new automatizer class
+ <ability>, which is true when you have the given ability -- neil
+
+27/08/2003
+[m]- Riscos support thanks to Antony Sidwell
+
+30/08/2003
+[m]- Savefiles are now stores in ~/.tome/save[/modulename] on multiuser systems
+[m]- Apply patches based on those from FreeBSD ports -- neil
+
+06/09/2003
+[O]- Beaked Axes, Battle Axes and Lochaber Axes are recognized as polearms
+ again. -- neil
+[O]- Misleading "polearm" description removed from non-polearm
+ Quarterstaff -- neil
+
+14/09/2003
+[m]- Added help for 'repeat last command' to command.txt. -- fearoffours
+
+15/09/2003
+[B]- Fixed autopickup of ammo crash under some circumstances
+[B]- Fix monster list mimic bug
+[B]- Tree Roots incorrect bonuses fixed
+[B]- Fixed incorrect display of some skill bonuses
+
+15/09/2003 -- T.o.M.E 2.2.3 aka 'The Quality of Mercy'
+
+22/09/2003
+[B]- Detect doors and traps displays as costing 3, not 5 now. -- fearoffours
+[B]- Maeglin quest reward wording altered (saves confusion for sorcerors).
+ -- fearoffours
+[I]- Adam Bolt's Tiles are now "New Tiles", as others have worked on them and
+ stuff. -- fearoffours
+
+25/09/2003
+[B]- Typos in One Ring parchment and Necromancy help fixed. -- fearoffours
+
+27/09/2003
+[B]- Typos in ultra-good ending, lost-sword quest rewards and flag description
+ fixed. -- fearoffours
+[O]- Restore spaces to artifact descriptions -- neil
+
+28/09/2003
+[B]- Axemasters now start with a Hatchet -- neil
+[B]- Fix "analyze monster" activation -- neil
+
+04/10/2003
+[B]- Fix library quest breakage of Melkor curses -- neil
+
+05/10/2003
+[B]- Fix failure rates for abilities in possessed bodies, patch by 'Slappy'
+ -- neil
+
+06/10/2003
+[B]- Monsters detected ONLY by telepathy were not removed from visible monsters
+ list after they had gone out of range. Thanks Slappy for fix. -- fearoffours
+[B]- Recharged junkarts would not always give a notification message. Thanks
+ Slappy for fix. -- fearoffours
+[O]- Changed descriptions of some junkart activations. -- fearoffours
+[B]- Completion of Necromancer quest could be triggered incorrectly.
+ -- fearoffours
+[D]- "The lava burns you", becomes "you move across the lava" to accomodate
+ IM_FIRE and flying characters. -- fearoffours
+
+07/10/2003
+[m]- Applied Ken Dubuc's patches to parsers to make them line ending independant
+[m]- Savefiles on multiuser systems are now in HOME/.tome/2.2/save, to comply
+ with the new 3.0.0 naming scheme that is coming.
+ People upgrading from 2.2.x to 2.2.4 should move their savefiles there
+
+08/10/2003
+[B]- Monsters don't appear to disappear for a turn if you polymorph them -- neil
+[m]- Setting module to "all" for an automatizer rule makes the rule apply
+ to all modules -- neil
+
+11/10/2003
+[B]- Flying semi-wraiths shouldn't be hurt by flying over trees -- neil
+
+13/10/2003
+[B]- Recalling to new lost temples could have crashed the game. -- fearoffours
+[B]- God quest directions could be grammatically incorrect. -- fearoffours
+
+23/10/2003
+[B]- Items containing spells should be browsable again -- neil
+[B]- Random artifact mimicry cloaks should now show up correctly -- neil
+[B]- Random artifacts that can contain spells will not come with
+ Globe of Light anymore -- neil
+[B]- Certain non-random artifacts that can contain spells will not come with
+ Globe of Light anymore, either -- neil
+[B]- Pack overflow/weapon disappearing bug fixed, with big thanks to Kevin
+ W. Thomas for telling me where to look -- neil
+[m]- Wizard mode is now turned off at birth -- neil
+[B]- Trap of Divine Wrath would benefit you -- neil
+[B]- Blood of Life would revive necromancers in undead form -- neil
+[B]- Hostile monsters won't get free kills of friendly monsters anymore -- neil
+
+28/10/2003
+[B]- Eggs work again -- neil
+[B]- Wishing for ego rods works -- neil
+
+29/10/2003
+[B]- Temples now accept blessed boomerangs -- neil
+[O]- Non-functioning artifact instrument activations removed -- neil
+[B]- If you learn anti-magic, you stop following any Valar -- neil
+[P]- Wood Elves and Hobbits weren't getting the extra might bonuses
+ they were entitled to -- neil
+[B]- typo in v_info.txt -- fearoffours
+[m]- Help updates: macros and macro recorder, dwarf racial ability, more on
+ dodging, link to m_mimic.txt from skills.txt, object inventory letter
+ colouring significance. -- fearoffours
+[B]- Old Mage's quest wouldn't always disappear from quest screen when fully
+ rewarded. -- fearoffours
+
+30/10/2003
+[m]- Helpfiles updated to reflect that corruptions are permanent and there is
+ no corrupted sub-race. --fearoffours
+
+03/11/2003
+[B]- No more shafts in certain places -- neil
+[B]- Percing shots will not grossly inflate in damage anymore -- neil
+[B]- No genocide in home quests -- neil
+
+11/11/2003
+[B]- Silent Switching can no longer take off permanently cursed items -- neil
+[B]- Fix memory error in command handling -- neil
+[B]- Hypnotizing and restoring levelled monsters now works correctly -- neil
+[B]- permanent_levels marked experimental because it is broken -- neil
+
+17/11/2003 -- T.o.M.E 2.2.4 aka 'A Bug's Life'
+
+19/11/2003
+[B]- Fix monster possessor crash -- neil
+[B]- Fix random quest skill requester -- neil
+
+20/11/2003
+[B]- Fix crash when picking up ammo into your quiver that can't be fired
+ with the launcher you are wielding -- neil
+
+22/11/2003
+[B]- God quest fix -- neil
+
+24/11/2003
+[B]- Disintegrating walls should not bother Yavanna -- neil
+
+01/12/2003
+[B]- Yet another try at fixing levelled carried monsters. Their attacks
+ are affected by their level now and their hitpoints are handled better.
+ I should have said this for the last release, but un-hypnotize any pets
+ before upgrading from 2.2.2. Otherwise compatibility is fine. -- neil
+
+05/12/2003
+[B]- Semi-wraiths should not be hurt by climbing over mountains -- neil
+
+08/12/2003
+[B]- Fixed Flame of Udun spell
+
+10/12/2003
+[B]- Diggers are not weapons and should not be displayed as such -- neil
+[O]- Some items that give damage bonuses will be more clear about it -- neil
+[M]- Drain attacks can't drain the one artifact wand, staff, or horn -- neil
+
+[V] T.o.M.E 2.2.5 aka "Death of a Bug"
+
+23/12/2003
+[B]- Prevent recall to Lost Temple before getting the quest -- neil
+
+01/01/2004
+[I]- Pressing Escape gets you out of the pet dismissal list -- neil
+
+03/01/2004
+[B]- Automatizer now accepts TV_TOTEM -- neil
+
+08/01/2004
+[m]- Helpfiles: bearform combat help, music typos, barbarian revisions.
+ -- fearoffours
+[B]- Some vaults incorrectly named -- fearoffours
+
+15/01/2004
+[B]- Wight quest crash fix by 'amaurea' -- neil
+
+16/01/2004
+[B]- God choosen at random was broken -- masmarangio
+
+18/01/2004
+[B]- Typo in q_one.c (or -> of)
+
+20/01/2004
+[B]- Don't use a turn when cancelling a possessor action -- neil
+
+21/01/2004
+[B] - summon_true crashed the game with a summon skill < 1 -- masmarangio
+[B] - test_object_wish: aware status is saved and restored -- masmarangio
+
+27/01/2004
+[m] - Typos in the description of arrows, shots, bolts; punctuation in the
+ mushroom quest -- masmarangio
+
+30/01/2004
+[m]- HOOK_CALC_BONUS_END hooks
+
+06/02/2004
+[m]- Helpfiles: corrected starting equipment of mindcrafters -- masmarangio
+
+07/02/2004
+[m] - Backport of old helpfile updates: no Geomancy for Alchemists and Rune-
+ crafters, updated luck spoiler, corruption spoiler in crpt_aux.lua, a
+ link in skills.txt, an example in automatizer.txt.
+ monsters3.c: changed 'golem' to 'creature', since the Mind Steal Spell
+ also allows to control a monster. -- masmarangio
+
+[m]- Typo (massage -> message) from the forum -- masmarangio
+[m]- Capitalisation in the names of junkarts -- masmarangio
+
+13/02/2004
+[m]- mindcraft_info: Corrected and expanded the info for mindcraft powers
+ -- masmarangio
+[m]- Small corrections in luck spoiler, description of Manwe's Blessing and
+ m_mimic.txt -- masmarangio
+
+19/02/2004
+[B]- God quest will no longer give inaccurate or misleading directions. It
+ also will now give directions from two static features, and an
+ approximate, relative distance from each of those points.
+ -- fearoffours
+
+[V] T.o.M.E 2.2.6 "Won't Get Fooled Again"
+
+27/02/2004
+[m]- Missing space in the description of Vecna -- masmarangio
+
+12/03/2004
+[B]- Eating some corpses produced a division by 0 error -- masmarangio
+
+15/03/2004
+[B]- Wearing an item of life (-100%) reduced the mhp to 0, causing a
+ division by 0 error in cave.c -- masmarangio
+
+16/03/2004
+[B]- Corrected the spell selection for monsters:
+ defines.h: Added RF6_S_ANIMALS in RF6_SUMMON_MASK.
+ melee2.c: Updated comments in monst_spell_monst and make_attack_spell.
+ Removed the spells RF4_MULTIPLY, RF4_S_ANIMAL, RF5_SCARE from spell_attack.
+ Corrected the spell numbers of RF6_TELE_AWAY and RF6_TELE_LEVEL in
+ spell_escape (formerly RF6_DARKNESS and RF6_TRAPS were used).
+ Corrected the spell numbers of RF6_TELE_TO, RF6_DARKNESS, RF6_TRAPS,
+ RF6_FORGET in spell_annoy (formerly RF6_RAISE_DEAD, RF6_S_BUG, RF6_S_RNG
+ were used).
+ Added RF4_S_ANIMAL and RF6_S_ANIMALS and limited the spell number to
+ 160 + 31 in spell_summon. -- masmarangio
+
+18/03/2004
+[O]- The activation of an items with the ACTIVATE_NO_WIELD flag is described
+ without the line "if it is being worn. " -- masmarangio
+[B]- Barad-dur doesn't exist, it is still Mordor. Corrected god quest directions
+ to reflect this. -- fearoffours
+
+20/03/2004
+[m]- Corrected some typos (mostly from the forum, thanks to Carg85)
+ s_yavann.lua: spell 'grow grass' description: 'a grass' -> on grass
+ q_haunted.c: cave -> building
+ a_info.txt: some missing spaces in the description of artifact bolts
+ corrupt.lua, corspoil.txt: 'teeth allows' -> 'teeth allow'
+ k_info.txt: missing space (Golden Horn of the Thunderlords)
+ s_stick.lua: 'a thunderlords' -> 'a thunderlord'
+ d_info.txt: 'the the land of Rhun' -> 'the land of Rhun'
+ -- masmarangio
+
+23/03/2004
+[B]- Fixed the speed of Bearform combat -- masmarangio
+[m]- Updated luck spoiler -- masmarangio
+
+26/03/2004
+[B]- Fix for Flame Imperishable from the forum -- masmarangio
+[B]- You should now receieve a message about failing the god quest at the
+ correct moment, and not when in a random dungeon. -- fearoffours
+[m]- The Old Mage's quest will erase from your quest screen when fully rewarded.
+ -- fearoffours
+
+29/03/2004
+[B]- Further measures taken to ensure god quest relic is created appropriately.
+ -- fearoffours
+[B]- Scumming for god quests (by losing and regaining xp) is now prevented.
+ -- fearoffours
+
+02/04/2004
+[m]- Backport of mostly old helpfile updates: wrong school in m_divin.txt,
+ comments in spells.lua, deleted hint about shoes in r_hobbit.txt,
+ ability.txt, ab_info.txt: updated Ammo-creation and Far-reaching attack,
+ c_axemas.txt: starting weapon is a hatchet,
+ magic.txt, skills.txt: Updated schools improved by Spell-power,
+ corspoil.txt: Updated the info about permanent corruptions,
+ birth.txt: removed corrupted subrace, vampires are a normal subrace,
+ m_air.txt: Updated description of Noxious Cloud -- masmarangio
+
+03/04/2004
+[B]- Fixed device trapkits loaded with rods -- masmarangio
+
+05/04/2004
+[B]- Exploding ammo used in trapkits will explode after hitting a monster.
+ -- masmarangio
+[m]- Corrected Alchemist, Assassin, Axemaster, Rogue helpfiles -- masmarangio
+
+08/04/2004
+[B]- Mage staves were without the WIELD_CAST flag -- masmarangio
+
+09/04/2004
+[G]- No more nuke traps -- neil
+
+21/04/2004
+[m]- skills.txt: Corrected information about Spell-power -- masmarangio
+
+02/05/2004
+[B]- Between quest crash fix, also for Thieves and Trolls quests -- masmarangio
+
+07/05/2004
+[m]- Capitalisation: Metal Boomerang, Lay of Protection.
+ r_pettyd.txt: magic items -> magically enchanted items -- masmarangio
+
+08/05/2004
+[B]- god.lua: The relic could be created in a wrong position -- masmarangio
+
+09/05/2004
+[O]- object1.c: Added descriptions for SENS_FIRE (thanks to Scott Bigham)
+ and IMMOVABLE, removed IM_NETHER from the resistances -- masmarangio
+
+10/05/2004
+[m]- bounty.lua: Added a period -- masmarangio
+[B]- cmd7.c: Preserve the spell stored in random spellbooks --masmarangio
+[O]- Show "to damage" and "to accuracy" messages for yet more confusing items
+ -- neil
+
+11/05/2004
+[B]- xtra1.c: Lucky characters (current luck > 0) don't get death fates;
+ fixed a typo in luckspoi.txt (from the forum) -- masmarangio
+[m]- spells2.c: Typo (vulerable -> vulnerable) -- masmarangio
+
+13/05/2004
+[m]- skills.txt: Fixed broken link -- masmarangio
+[B]- generate.c: Fixed arena levels by refilling the level -- masmarangio
+
+14/05/2004
+[m]- Added new help file for the debug commands -- iain_mac
+
+26/05/2004
+[B]- Correctly cap the spell levels of wands (patch by 'Sumendar') -- neil
+
+[V] T.o.M.E 2.2.7 aka "Stoke Me A Clipper"
+
+04/06/2004
+[P]- Class no longer influences the internal Angband 'skills' of Disarming,
+ Magic Devices, Saving Throw, Stealth, Searching, Perception, Hand-to-Hand
+ combat, Missile Combat, and Throwing. ToME skills instead have the same
+ effect for all classes. -- neil
+
+05/06/2004
+[G]- Added the new Mimic shapes and updated the old ones -- masmarangio
+
+07/06/2004
+[G]- Destroying items manually now takes no time -- neil
+
+10/06/2004
+[B]- dungeon.c: Light should consume fuel at a rate of 1 / turn -- masmarangio
+
+11/06/2004
+[P]- Water Bite no longer has a damage cap -- neil
+
+12/06/2004
+[B]- A store (e.g. the mathom house) can contain up to 255 items (in defines.h
+ STORE_INVEN_MAX limited the number of items to 24) (Note: the limit is
+ stored in a byte in loadsaves.c) -- masmarangio
+
+21/06/2004
+[m]- a_info.txt: Updated names of artifacts in the comments -- masmarangio
+
+23/06/2004
+[m]- object.pkg: Added psychometry() for easier mindcraft testing.
+
+24/06/2004
+[m]- birth.txt, index.txt : Corrected and added abbreviations
+ gen_idx.lua: removed non-existent file and sorted file list
+[G]- Added the spell Sterilize and Staves of Sterilization from ToME 3.0.0.
+[D]- Added the first new special level from ToME 3.0.0, Galleon in Helcaraxe
+ -- masmarangio
+
+02/07/2004
+[D]- Added the special level Factory in the Illusory Castle -- masmarangio
+
+04/07/2004
+[G]- Added the spell Inertia Control from ToME 3.0.0 -- masmarangio
+
+05/072004
+[m]- Updated luckspoiler -- masmarangio
+
+09/07/2004
+[m]- Typo in s_fire.lua, from the wiki -- masmarangio
+[m]- rm_skeleton.txt, rm_zombie.txt: They cannot restore life force, and zombies
+ are not resistant to nether -- masmarangio
+
+19/07/2004
+[P]- Except for infravision, all innate class or racial effects on skills are
+ gone. All skills have equal effect for all classes, and races now give
+ starting skill bonuses. -- Neil
+
+22/07/2004
+[B]- s_meta.lua: Inertia controlled spells are not casted in wilderness mode.
+ s_mana.lua: Inertia level of Disruption Shield is 9 (needed spell level 45)
+ m_meta.txt: Added a list of controllable spells -- masmarangio
+
+24/07/2004
+[P]- Mages are more geared toward a mix of Magic and Combat, while Sorcerors
+ have more options than pure Sorcery -- Neil
+
+26/07/2004
+[B]- p_info.txt: Archers and Rangers gain the missing Spirituality skill
+ p_info.txt: Removed the old Mimic Cloak (new cloak in player.lua)
+[m]- Helpfile updates for all character classes. -- masmarangio
+
+30/07/2004
+[B]- p_info.txt: Thunderlords start with Stealth -16.000 (from the wiki)
+[B]- cmd7.c: Fixed Alchemy recharging bug (thanks to Scott)
+[B]- al_info.txt: Removed the old Mimic Potions -- masmarangio
+[m]- util.pkg: Added lite_spot() and note_spot() for modules -- masmarangio
+
+31/07/2004
+[B]- monspeak.txt: Added some lines for Groo to fix a bug -- masmarangio
+[B]- files.c: Corrected display of Climb flag, immunity to Nether, negative
+ pvals < -9. Added Sentient, Clone, Spider ESP flags. -- masmarangio
+
+02/08/2004
+[m]- g_melkor.txt: Added fire resistance for worshippers of Melkor
+[B]- files.c: Added flags from the gods and spell schools to the character
+ screen. Added also flags from wielded symbiotes. -- masmarangio
+
+04/08/2004
+[m]- p_info.txt: Removed the useless skill Prayer for Maiar -- masmarangio
+[B]- cmd4.c: Quest list without random quests in DL > 98 -- masmarangio
+
+19/08/2004
+[m]- help file documentation restructuring, copying appropriate rewrites from
+ wiki. -- fearoffours
+
+20/08/2004
+[B]- randart.c: An item with pval > 0 (e.g. an Elven Cloak) can gain parts
+ with a max_pval = 0 (e.g. resistances and immunities) -- masmarangio
+
+24/08/2004
+[m]- Various minor changes to helpfiles, reflecting current changes to
+ documentaiton on the wiki. --fearoffours
+
+28/08/2004
+[O]- Removed portable holes as have been useless for as long as merchants have
+ been removed from game. --fearoffours
+
+30/08/2004
+[m]- k_info.txt: Fixed name of the commented out portable holes -- masmarangio
+
+14/09/2004
+[m]- Fixed some typographical errors, mostly from the wiki:
+ cmd1.c: [The monster] fall -> falls, deleted space (Bug # 80 from the wiki)
+ k_info.txt: Added & for Climbing sets (Bug # 81 from the wiki)
+ q_one.c: You felt -> You fell (Bug # 94 from the wiki)
+ monster2.c: It tries to breed but he fails: he -> it (Bug # 98 from the wiki)
+ bldg.c: Changed wording of the soothsayer (Bug # 106 from the wiki)
+ tables.c: Minor changes in the One Ring quest (Bug # 117 from the wiki)
+ q_invas.c: jumps out of the between -> appears, deleted spaces,
+ added single quotes in direct speech (Bug # 119 from the wiki)
+ q_between.c: Deleted space, changed comments -- masmarangio
+
+20/09/2004
+[m]- book-4.txt: Capitalised 'Ring' (Bug # 135 from the wiki) -- masmarangio
+[B]- ow_info.txt: missing C: lines reduced the purse to 0 -- masmarangio
+[B]- object1.c: don't wield bolts with instruments and pebbles with boomerangs
+ (Bug # 127 from the wiki) -- masmarangio
+
+21/09/2004
+[B]- object1.c: mention_use and describe_use list all available slots, check all
+ weapon weights and distinguish between instruments and bows (Bug # 87)
+ object1.c: Res Chaos implies Res Confusion (for the character screen)
+ xtra1.c: Magical breath implies Water breath (from the wiki) -- masmarangio
+
+23/09/2004
+[B]- Z and Cth monster options removed, as in ToME 3. This fixes, among other
+ things, the Death Orb issues. -- neil
+
+24/09/2004
+[m]- options.txt: Also removed the options from the help file -- masmarangio
+[B]- a_info.txt: Corrected two typos (Bugs # 140, 146 from the wiki)
+ k_info.txt: Changed description of Bastard Sword, added RES_CHAOS to the
+ known flags of a Blade of Chaos (it's mentioned in the description)
+ files.c: Terminated highscore strings with \0, changed total_points
+ slightly to prevent an overflow error (Bug # 139 from the wiki)
+ v_info.txt: Corrected the x size of vault 99 and 104 -- masmarangio
+
+28/09/2004
+[D]- dungeon.c: Level of the Death dungeon is the minimum level from d_info.txt
+[B]- dungeon.c: Set dungeon_type to wilderness when recalling out. This should
+ fix the various Moria recalling bugs (Bug # 95)
+[m]- cmd6.c: replaced the recall activation code by recall_player -- masmarangio
+[m]- monster1.c: missing spaces in description (Bug # 169) -- masmarangio
+
+
+29/09/2004
+[m]- Modules need to define three new variables to control the chance or
+ random artifact generation. random_artifact_weapon_chance,
+ random_artifact_armor_chance, random_artifact_jewelry_chance control
+ the chance for different types of items. -- neil
+
+30/09/2004
+[B]- spells2.c: Redraw trap status after passwall (Bug # 51)
+ store.c: Removed '))' when displaying a large store -- masmarangio
+
+01/10/2004
+[m]- mods_aux.lua: Added default values for random artifact generation;
+ updated the skill values -- masmarangio
+
+02/10/2004
+[B]- al_info.txt: removed recipe for Scroll of Spell (Bug # 179), added recipe
+ for Staff of Sterilisation (Bug # 77) -- masmarangio
+[m]- cmd6.c: protect evil -> protection from evil, s_stick.lua: town -> surface
+ q_betwen.c, q_invas.c: speak -> speaks (from the forum) -- masmarangio
+
+03/10/2004
+[m]- tr_info.txt: Spelling of Lite (Bug # 182), Armor, Paralyzing -- masmarangio
+[B]- cmd6.c: Added timeout for junkarts in the activation description (ugly fix)
+ tables.c: Replaced ACT_CURE_POISON by not used ACT_CURE_POIS -- masmarangio
+[B]- Once a god quest is failed, you will not receive any more god quests.
+ -- fearoffours
+[m]- The (Ctrl-Q) Quest screen now shows which number god quest you have been given
+ and an additional line in your character dump shows how many have been
+ successfully completed. -- fearoffours
+[m]- Help updates from the wiki - lots of it Maylith's work, esp FAQ updates.
+ -- fearoffours
+
+04/10/2004
+[m]- Corrected the description of the Disarm, Call the Elements and Channel
+ Elements spells (without changing the code) (Bug # 175) -- masmarangio
+
+08/10/2004
+[B]- bldg.c: Research item (Bug # 191) and research monster are now paid
+ correctly -- masmarangio
+[B]- spells2.c: Diggers cannot be enchanted with scrolls -- masmarangio
+[m]- tome-faq.txt, index.txt: Typo (Bug # 196) -- masmarangio
+
+10/10/2004
+[m]- s_info.txt: Antimagic: generates -> generate (Bug # 198) -- masmarangio
+[B]- files.c: Fixed displayed barehanded damage (Patch from Scott, Bug # 195)
+ -- masmarangio
+
+11/10/2004
+[m]- powers.c: replaced the recall power code by recall_player
+ q_troll.c: Fixed typos from the wiki (Bug # 208) -- masmarangio
+
+12/10/2004
+[m]- tables.c: Removed harpers and some other small changes (Bug # 212)
+ cmd6.c: Added "and" in the description of ACT_ROHAN (Bug # 213)
+ -- masmarangio
+
+13/10/2004
+[m]- m_demono.txt, s_demon.lua: armor -> armour class (Bug # 217)
+[O]- k_info.txt: Changed comments and descriptions of the items, mostly from
+ the wiki (Bug # 176) and added missing descriptions (IdeaArchive)
+ Added article (&) in the name of armours (Bug # 81),
+ The spelling of some item names was changed: Scroll of Enchant Armour,
+ *Enchant Armour*, Curse Armour, Summon Monsters, Basilard
+ Added COULD2H to the Claymore and MUST2H to the Espadon.
+[m]- dun3.18: description of DimGates: fills -> fill (Bug # 223)
+ -- masmarangio
+
+15/10/2004
+[B]- files.c: Remove / restore CAVE_VIEW before / after saving the game.
+ This solves a long standing bug with the lighting of the dungeon
+ since the temporary arrays that hold the position of the viewed
+ grids are not stored in the save file (Bug # 19). -- masmarangio
+
+16/10/2004
+[m]- init1.c: The parser adds missing spaces at the end of the
+ description of artifacts, like it did for objects. -- masmarangio
+[m]- Race, class and race modifier help files updates to reflect changes
+ in skill bonuses. -- fearoffours
+
+18/10/2004
+ Some changes to random artifact and scrolls of artifact creation
+ (See Bugs # 206, 222, 226 on the wiki):
+[m]- externs.h: Moved some functions listed under spells2.c to proper sections
+[m]- k_info.txt: Added "mundane" to the description of the scroll
+[B]- cmd6.c: the selection of artifactable items can be escaped now
+ randart.c: *ID* the object before listing the powers, some re-ordering
+[B]- spells2.c: Re-add diggers to item_tester_artifactable, and limit the
+ selection to normal items due to complains (no ego items or artifacts)
+[O]- ra_info.txt: Added a STR-increasing part without combat bonuses for diggers
+[B]- ra_info.txt: Fixed two W-lines with 4 entries and added a missing C-line
+[O]- e_info.txt: Diggers cannot be of Earthquakes anymore (there are combat boni
+ involved) - perhaps an own ego type should be added... -- masmarangio
+[m]- q_ultrag.c: Quest texts changed as reported in Bug # 210 -- masmarangio
+
+23/10/2004
+[B]- k_info.txt: Reduced throwing damage of totems to 1 -- masmarangio
+
+25/10/2004
+[P]- Priests disarm as well as Warriors do now -- neil
+[B]- st_info.txt: Fixed the changed item names in the stores (StatusReport3)
+[m]- spells.lua: Sorted the Conveyance spells by level (Bug # 233)
+ -- masmarangio
+[m]- Helpfiles reflect changes to skills (priest disarming and racial
+ spirituality update). -- fearoffours
+
+01/11/2004
+[m]- library.lua: Added OBJ_FOUND_REWARD to the tome (Bug # 237) -- masmarangio
+
+13/11/2004
+[B]- Fix for disappearing artifacts (especially guardian artifacts) during load / save
+ thanks to SimonSorc
+
+17/11/2004
+[O]- No more blessed boomerangs -- neil
+
+[V] T.o.M.E 2.3.0 aka "One more try to get Mages working"
+
+10/12/2004
+[B]- Fix loading and saving of skills, I hope. Unfortunately this breaks save
+ compatiability, though. The saves must be deleted again. -- Neil
+
+29/12/2004
+[B]- Fix negative skills -- Neil
+[B]- Don't use weaponmastery combat when weaponmastery skill is negative -- Neil
+
+[V] T.o.M.E 2.3.1 aka "2.3.0.1"
+
+2005/05/19
+[I]- If easy_disarm is off, don't trigger known traps while walking normally.
+ Added a new extended command "blunder" to let players trigger traps on
+ purpose. -- gwooledge
+[I]- Lots of documentation, spelling and grammar fixes, including:
+ * the now-outdated race/class ability tables, replaced with skill tables
+ * the missing documentation for the set of extended commands
+ * far too many others to mention here
+ -- gwooledge
+
+2005/05/20
+[I]- Added sanity and speed to the character screen (and hence the text dump).
+ Consolidated HP and SP into one line to make room. -- gwooledge
+
+2005/05/21
+[B]- Don't allow trap doors on quest levels or on chests. -- gwooledge
+[I]- Allow shopping to use the correct keys in roguelike mode. -- gwooledge
+
+2005/05/22
+[B]- Update view after high-powered globe of light. -- gwooledge
+
+2005/05/26
+[I]- Push a certain potion type a little deeper into the dungeon -- Neil
+[I]- Make piety display light blue when praying, to make it easier to tell
+ when you're praying. -- gwooledge
+
+2005/06/02
+[I]- Don't display ordinary resists when there's also an immunity to the same
+ element, in an object description. -- gwooledge
+[B]- Don't allow use of stairs (any < or > movement command) while rooted
+ to the floor (by the Yavanna spell). -- gwooledge
+
+2005/06/04
+[I]- Display the (colored) character for uniques in the Known Uniques list (~2).
+ -- gwooledge
+
+2005/06/05
+[I]- Add "Check abilities" extended command/macro. This gives roguelike keyset
+ players a way to access the ability screen other than "\N", although it's
+ still one more keystroke than "\N" is.... -- gwooledge
+
+2005/06/11
+[B]- Try again to keep traps from wrecking a certain plot element -- Neil
+
+2005/06/18
+[B]- Fix module file handling for multi-user installs. Now character sheets,
+ automatizer file, and the rest will be read and written in
+ ~/.tome/2.3/modulename as they should. -- Neil
+
+2005/06/19
+[B]- Try harder to save persistent levels when recalling out -- Neil
+[B]- Fix all sub-racial skill bonuses, along with Maia racial skill bonuses
+ -- Neil
+[O]- Prevent random artifact bolts from giving extra blows -- Neil
+
+2005/06/21
+[O]- Correct the types of certain artifact trap sets to match their weights
+ and descriptions. -- gwooledge
+
+2005/07/13
+[I]- Clean up some offensive messages, patch courtesy of 'The Fury' -- Neil
+
+2005/07/14
+[I]- Include the resistances grid on character sheets dumped on death.
+ This makes them consistent with the ones generated before death, and
+ is more informative and useful for post mortem analyses. -- gwooledge
+
+2005/07/15
+[P]- Warriors no longer get a secret special three bonus blows spread over the
+ 50 character levels. The three blows are now tied to Weaponmastery.
+
+ Module authors should adjust accordingly, or their warriors may get three
+ blows they didn't have before. -- Neil
+
+2005/07/16
+[O]- Potions of Cure Insanity were too cheap. -- gwooledge
+
+2005/07/24
+[I]- Examining a totem will recall the monster it summons -- Neil
+[I]- Examining a corpse will recall the monster it was -- Neil
+
+2005/07/27
+[V] T.o.M.E 2.3.2 aka "Unrealized Reality"
+
+28/07/2005
+[G]- Lost sword quest rewards always give a minimum skill modifier of 0.3.
+ -- gwooledge
+
+29/07/2005
+[D]- Edit one vault to open up some inaccessible rooms -- Neil
+
+11/08/2005
+[B]- Alchemy: disallow repowering double-ego items, unless the character has
+ the artifact creation ability. Based on patch by Andrey Egoshin.
+ -- gwooledge
+[B]- Lost sword quest skill reward probabilities were computed incorrectly.
+ Fix suggested by Dan Rosenberry. -- gwooledge
+[I]- Miscellaneous documentation, spelling and grammar fixes. -- gwooledge
+
+12/08/2005
+[B]- Don't let a player trick the Valar by getting drained and re-gaining
+ levels -- Neil
+[I]- Update AC display after fixing armor in the buildings. -- gwooledge
+
+16/08/2005
+[B]- Don't allow Runecraft and Thaumaturgy spells to go explode inside walls
+ and seep through -- Neil
+
+17/08/2005
+[I]- Fix damage display for Thaumaturgy ball spells. -- gwooledge
+[O]- Removed pointless slays, brands, and bonuses on Pick of Erebor -- Neil
+
+19/08/2005
+[B]- When consuming magic essences, don't stop prematurely. Based on patch
+ by Andrey Egoshin. -- gwooledge
+
+30/08/2005
+[B]- Upkeep cost for partial summons was not always charged. -- gwooledge
+
+05/09/2005
+[B]- Some staves were being generated with the wrong tval, causing several bugs
+ including (but not limited to) staves being unrechargeable. -- gwooledge
+
+11/09/2005
+[B]- Saving throw was not calculated correctly. -- gwooledge
+
+14/09/2005
+[P]- All new partial summon upkeep formula -- neil
+
+26/09/2005
+[B]- Disallow negative experience alchemy abuses. Based on patch by Andrey
+ Egoshin. -- gwooledge
+[O]- When examining books, demonology equipment and instruments in stores, show
+ both the object's powers and its spells. -- gwooledge
+[B]- Nonliving and undead pets won't be angered by lack of breathable air.
+ -- gwooledge
+[D]- A certain early trap should be less deadly (and appear a bit later).
+ -- gwooledge
+[I]- Honor exp_need option when displaying object experience. -- gwooledge
+
+27/09/2005
+[I]- Restored and updated some missing help files. -- gwooledge
+[G]- (Mass) Genocide damage is applied all at once to avoid bug #228.
+ -- gwooledge
+
+28/09/2005
+[B]- Don't use the "POSIX" setuid calls on Mac OS X, as they apparently break
+ compilation -- neil
+
+29/09/2005
+[O]- Junk should stack just like skeletons. Patch by StarweaverBlue.
+ -- gwooledge
+[M]- Kavlax should be many-headed. -- gwooledge
+
+14/10/2005
+[B]- Certain monster spells were hard-coded for the wrong number of equipment
+ slots. -- gwooledge
+
+18/10/2005
+[B]- Incorrect operator used in cave generation code. Effect unknown, but it
+ *might* possibly fix some of the Orc cave crashes.-- gwooledge
+
+26/10/2005
+[M]- Regular (non-Joke, non-Cth, non-Z) monsters should not breathe nuke,
+ because it has a side effect we don't want in ToME -- Neil
+
+29/10/2005
+[O]- Mac OS X builds now put all the game data into the bundle, storing all
+ user data in the user's Library (some preferences in
+ Library/Preferences/net.t-o-m-e.tome.plist, the rest in
+ Library/Application Support/ToME. -- Neil
+
+16/11/2005
+[I]- Handling of Command key modified in Mac OS X UI. It should be accessible
+ in macros now if it wasn't before -- Neil
+
+26/11/2005
+[B]- Don't allow uniques or quest monsters to just disappear to the move of
+ another monster -- Neil
+
+14/12/2005 - ToME 2.3.3 "Realized Unreality"
+
+15/10/2006
+[B]- Remove buggy trap of Stair Movement -- Neil
+
+12/12/2005
+[B]- Fix typo in one monster's flags - Iain
+
+31/1/2005
+[I]- Fix window position saving on Mac OS, patch by John Love-Jensen
+ -- Neil
+
+19/2/2005
+[B]- Fix word wrapping in character sheet, patch from "ZizzoTheInfinite"
+ -- Neil
+
+[V] T.o.M.E 2.3.4 aka "An Unexpected Party"
diff --git a/changes.txt b/changes.txt
new file mode 100644
index 0000000..1f08933
--- /dev/null
+++ b/changes.txt
@@ -0,0 +1,82 @@
+T.o.M.E 2.3.5 aka "Into the unknown" changes
+
+Interface changes:
+- The X11 and Xaw interfaces now save the dungeon and player when the
+ window is closed.
+- Fixed cpu churning bug that occurs when using certain window managers and
+ ToME is maximized.
+
+Gameplay changes:
+- Player speed now set correctly when Demon Hide corruption is enabled.
+- ToME now correctly sets various Balrog flags when player in Balrog form.
+- ToME now correctly sets the teleport flags when teleport corruption is
+ enabled.
+- ToME now uses the qrand7.map file when generating princess quests.
+- Bigs changes for generate.c to get it to produce the princess and thrain
+ rooms. Also code clean up of room geranation code.
+
+Object changes:
+- Slings of Buckland can now be generated.
+- Wiki Bug 510. Added the WIELD_CAST flag to all artifact instruments to
+ fix problems when casting spells.
+
+Misc changes:
+- Fixed small typo in the commands help file.
+- Added help for the Mathom House.
+- Fixed various compile time warnings in various files.
+- Added makefile support for main-gtk2.c in makefile.std
+- Values found in documentation for spectral race modifiers now match values
+ found in p_info.txt.
+- Wiki Bug 837. Removed references to old inscriptions handling code in
+ documentation.
+- Wiki Bug 564. Do not use the word 'restrict' as a variable name anymore.
+ It conflicts with keywords used by the Sun Studio Compiler.
+- Wiki Bug 517. Fixed incorrect descriptoin of artifacts in help files.
+- Changed description of Disarm spell to more accurately reflect what it
+ does.
+- ToME now correctly compiles main-gtk2.c on 64-bit machines.
+
+Bug fixes:
+- Wiki Bugs 841, 405, 360. Changes to get ToME to correctly build 64-bit
+ executables.
+- Applied killerbunnies patch to identify objects on grid before squelching.
+- Applied killer bunnies patch to keep the fate "you are fated to find
+ something special" from creating something special with an inappropriate
+ base object.
+- Applied killerbunnies patch stops symbiotes from gaining levels simply
+ by being hypnotized and released.
+- ToME now saves tim_fly, tim_poison, tim_regen and tim_regen_power.
+- Stores now display the inventory correctly after a purchase.
+- The race the legends display now works correctly with more than 10 dead
+ characters in history.
+- Characters are no longer generated with 0 mana points.
+- Wiki Bug 839. ToME no longer penalizes an object when it is not actually
+ cursed.
+- Wiki Bug 838. The melee style will now switch correctly from Bear to the
+ primary melee style when switching out of Bear form.
+- Wiki Bug 826. The inventory and equipment windows now update when the
+ player identifies the entire pack or uses the *Greater Identify* spell.
+- Wiki Bug 819. No more bogus level leaving messages.
+- Wiki Bug 722. ToME no longer crashes purple staircases have been trapped.
+- Wiki Bug 624. Ensure savefiles go to save and not scpt when using modules.
+- Wiki Bug 537. Partial fix of infinite loop during stair allocation on
+ small levels.
+- Wiki Bug 530. ToME no longer drops items inappropriately when changing
+ melee styles.
+- Wiki Bug 528. Character dumps now show the correct number of princess and
+ lost sword quests.
+- Wiki Bug 526. ToME no longer enters an infinite loop when fighting in
+ bare-hand combat sylte and bare-hand skill is < 1.
+- Wiki Bug 523. All types of recall check if the user really wants to leave
+ a unique level.
+- Wiki Bug 506. ToME no longer crashes attempting to drop non-existant
+ artifacts.
+- Wiki Bug 419. Use SKILL_BOULDER instead of SKILL_ARCHERY when throwing
+ a boulder.
+- Wiki Bug 411. Black breath no longer gets 3 chances to happen.
+- Wiki Bug 394 and 393. Inertia Control autocasting can no longer cast a
+ spell when antimagic field > 0 or when wielding a dark sword.
+- Wiki Bug 334. Companions are no longer saved in dungone save files.
+- Work around Mac OS 10.4.11 getlogin() bug - Neil
+- Wiki Bug 397. ToME no longer crashes on XP and Vista systems when viewing
+ quests or other info from the knowledge menu.
diff --git a/credits.txt b/credits.txt
new file mode 100644
index 0000000..96e8ef6
--- /dev/null
+++ b/credits.txt
@@ -0,0 +1,67 @@
+Credit list(lots are still not present here, if you think you should
+drop me a line please) in no particular order:
+
+- Chris Weisiger <chrisweisiger@hotmail.com>, lots and lots of stuff,
+ and mainly lots of vaults, a whole magic realm, some special levels,
+ TANG
+- Ceilti <Ceilti@aol.com>, idea of weapons gaining xp, comments, ideas,
+ lots of PernAngband related posts on rgra
+- Static Chaos <schaos@freemail.hu>, huge numbers of patches, ideas, ...
+- Improv <qc@apk.net>, spelling/grammar fixes, ideas, safer_panics patch,
+ some new monster and artifact descriptions, cmovie stuff, and lots
+ of things
+- Mynstral, new towns and more
+- Kusunose Toru <kusunose@hcn.zaq.ne.jp> for LOTS of bugfixes
+- Akhronath for the ideas of the magic system, new realms and much more
+ oh yeah the Nazguls :)
+- Jerome Wojcik <Jerome.Wojcik@lmcp.jussieu.fr> for monster susceptibilities
+- Andreas Koch(akoch@rbg.informatik.tu-darmstadt.de) for the tiles, the
+ graphic editor and surely more :)
+- Gob for the mac ports and a nasty bug fix
+- Iain McFall for bug fixes, auto squelch and more
+- Bablos for the amiga port
+- Arch for the windows port
+- Dawnmist for the new docs
+- Jonathan Ellis for the rework of the info files
+- Hansjoerg Malthaner for the Isometric engine
+- Pelpel for bugfixes and other mac things
+- Tom Le for the website hosting
+- Willam Tanksley for lots of useful comments, ideas and bitching ;)
+- Tom Demuyt for the unbeliever idea
+- Luc French for lots of ideas & code
+- Kieron for some patches
+- Runescrye for ra_info.txt and surely more :)
+- Fearof4s for lua patches, lua tutorial, quests and stuff.
+- Pav Lucistnik for some patches and hosting the CVS
+- Mef for the huge task of updating class and magic help documents for 2.x
+ and lots and lots of other help updates!
+- Erik J Brown for some changes to help docs.
+- vrak (Per-Arne Holtmon Akoe) for magic.txt
+- Kat B for other help updates.
+- Chris Hadgis for Luck spoiler, lua *.pkg help docs, and other help docs.
+- lemming for skills.txt and stuff
+- Paladin Rithe (Brian Ronk) for birth.txt
+- John Gilmore for alchemy improvements patch
+- Massimiliano Marangio for lots and lots of help updates, typo corrections,
+ bug fixes etc.
+- Neil Stevens <neil@hakubi.us> for making stable releases
+- Jeff Epler for automatizer improvements, and certainly more in the future ;)
+- Scott Bigham for some cool patches
+- Magua(magua@speakeasy.net) who wrote the java applet to play cmovies online
+- Maylith for lots of help with the documentation, especially on the wiki
+- Furiosity for some missing item descriptions
+- SimonSorc for bugfixes
+- Greg Wooledge <greg@wooledge.org> for still more bug fixes
+- Phillip Neiswanger for tons of bug fixes and mainly 2.3.5 and possibly 2.4.0
+
+- All that I forgot in the list, hit me a bit then email me to get added
+
+- All the friendly people of the ToME mailing list
+- All the friendly people of #angband
+
+- TeCGraf for the Lua scripting language(www.lua.org)
+- Reuben Thomas for the lua bitlib
+- Waldemar Celes for tolua(automatic wrapper generator for lua, like swig, but
+ this one actually works :)
+
+- J.R.R. Tolkien for the best fantasy ever !
diff --git a/lib/.gitignore b/lib/.gitignore
new file mode 100644
index 0000000..2de989f
--- /dev/null
+++ b/lib/.gitignore
@@ -0,0 +1,2 @@
+*.raw
+
diff --git a/lib/apex/delete.me b/lib/apex/delete.me
new file mode 100644
index 0000000..2e65efe
--- /dev/null
+++ b/lib/apex/delete.me
@@ -0,0 +1 @@
+a \ No newline at end of file
diff --git a/lib/bone/bone001.012 b/lib/bone/bone001.012
new file mode 100644
index 0000000..ee81bc5
--- /dev/null
+++ b/lib/bone/bone001.012
@@ -0,0 +1,4 @@
+Truigar
+162
+7
+13
diff --git a/lib/bone/bone004.001 b/lib/bone/bone004.001
new file mode 100644
index 0000000..1c6921d
--- /dev/null
+++ b/lib/bone/bone004.001
@@ -0,0 +1,4 @@
+Olorin
+13
+21
+10
diff --git a/lib/bone/bone004.002 b/lib/bone/bone004.002
new file mode 100644
index 0000000..0669019
--- /dev/null
+++ b/lib/bone/bone004.002
@@ -0,0 +1,4 @@
+Pruirk
+108
+12
+24
diff --git a/lib/bone/bone004.003 b/lib/bone/bone004.003
new file mode 100644
index 0000000..9335024
--- /dev/null
+++ b/lib/bone/bone004.003
@@ -0,0 +1,4 @@
+Bearn
+166
+11
+24
diff --git a/lib/bone/bone004.004 b/lib/bone/bone004.004
new file mode 100644
index 0000000..cbd93dd
--- /dev/null
+++ b/lib/bone/bone004.004
@@ -0,0 +1,4 @@
+Druldo
+64
+19
+0
diff --git a/lib/bone/bone004.005 b/lib/bone/bone004.005
new file mode 100644
index 0000000..6231f5b
--- /dev/null
+++ b/lib/bone/bone004.005
@@ -0,0 +1,4 @@
+Sook
+56
+0
+23
diff --git a/lib/bone/bone004.006 b/lib/bone/bone004.006
new file mode 100644
index 0000000..ae40af6
--- /dev/null
+++ b/lib/bone/bone004.006
@@ -0,0 +1,4 @@
+Sook
+55
+0
+23
diff --git a/lib/bone/bone004.007 b/lib/bone/bone004.007
new file mode 100644
index 0000000..357c390
--- /dev/null
+++ b/lib/bone/bone004.007
@@ -0,0 +1,4 @@
+Sook
+45
+0
+23
diff --git a/lib/bone/bone004.008 b/lib/bone/bone004.008
new file mode 100644
index 0000000..1f61a16
--- /dev/null
+++ b/lib/bone/bone004.008
@@ -0,0 +1,4 @@
+Sook
+44
+0
+23
diff --git a/lib/bone/bone004.009 b/lib/bone/bone004.009
new file mode 100644
index 0000000..f0b57b4
--- /dev/null
+++ b/lib/bone/bone004.009
@@ -0,0 +1,4 @@
+Sook
+46
+0
+23
diff --git a/lib/bone/bone004.010 b/lib/bone/bone004.010
new file mode 100644
index 0000000..1e21587
--- /dev/null
+++ b/lib/bone/bone004.010
@@ -0,0 +1,4 @@
+Luthien
+114
+20
+22
diff --git a/lib/cmov/delete.me b/lib/cmov/delete.me
new file mode 100644
index 0000000..2e65efe
--- /dev/null
+++ b/lib/cmov/delete.me
@@ -0,0 +1 @@
+a \ No newline at end of file
diff --git a/lib/core/auto.lua b/lib/core/auto.lua
new file mode 100644
index 0000000..fa2457f
--- /dev/null
+++ b/lib/core/auto.lua
@@ -0,0 +1,803 @@
+-- This file is the core of the Automatizer
+-- Please do not touch unless you know what you are doing
+
+__rules = {}
+__rules_max = 0
+
+rule_aux = {}
+
+-- Rule apply function, does .. nothing
+function auto_nothing(obj, item)
+ return
+end
+
+function auto_inscribe(obj, item, note)
+ if obj.note ~= 0 then return end
+ msg_print("<Auto-Inscribe {"..note.."}>")
+ obj.note = quark_add(note)
+ return TRUE
+end
+
+-- Rule apply function, pickup object
+function auto_pickup(obj, item)
+ if item >= 0 then return end
+ if inven_carry_okay(obj) == FALSE then return end
+ msg_print("<Auto-pickup>")
+ object_pickup(-item)
+ return TRUE
+end
+
+-- Rule apply function, destroy item
+function auto_destroy(obj, item)
+ -- be carefull to what we can destroy
+ -- Unaware things won't be destroyed.
+ if is_aware(obj) == FALSE then return end
+
+ -- Inscribed things won't be destroyed!
+ if obj.note ~= 0 then return end
+
+ -- Keep Artifacts -- they cannot be destroyed anyway
+ if is_artifact(obj) == TRUE then return end
+
+ -- Cannot destroy CURSE_NO_DROP objects
+ local f1, f2, f3, f4, f5, esp = object_flags(obj);
+ if band(f4, TR4_CURSE_NO_DROP) ~= 0 and band(obj.ident, IDENT_CURSED) then return end
+
+ msg_print("<Auto-destroy>")
+
+ -- Eliminate the item (from the pack)
+ if item >= 0 then
+ inven_item_increase(item, -obj.number)
+ inven_item_describe(item)
+ inven_item_optimize(item)
+ -- Eliminate the item (from the floor)
+ else
+ floor_item_increase(0 - item, -obj.number)
+ floor_item_describe(0 - item)
+ floor_item_optimize(0 - item)
+ end
+ return TRUE
+end
+
+-- Report the status of an object
+function object_status(obj)
+ local sense =
+ {
+ [SENSE_CURSED] = "bad",
+ [SENSE_WORTHLESS] = "very bad",
+ [SENSE_AVERAGE] = "average",
+ [SENSE_GOOD_LIGHT] = "good",
+ [SENSE_GOOD_HEAVY] = "good",
+ [SENSE_EXCELLENT] = "very good",
+ [SENSE_SPECIAL] = "special",
+ [SENSE_TERRIBLE] = "terrible",
+ }
+
+ if is_known(obj) == FALSE then
+ if sense[obj.sense] then
+ return sense[obj.sense]
+ else
+ return ""
+ end
+ else
+if nil then -- test
+ local osense = -1
+ local type = select_sense(obj, TRUE, TRUE)
+ if type == 1 then
+ osense = value_check_aux1(obj)
+ elseif type == 2 then
+ osense = value_check_aux1_magic(obj)
+ end
+print("type : "..type)
+ if sense[osense] then
+ print("sense: "..sense[osense])
+ return sense[osense]
+ else
+ print("sense: ")
+ return ""
+ end
+
+else -- the real one
+
+ local slot = wield_slot_ideal(obj, TRUE)
+
+ -- Arts items
+ if is_artifact(obj) == TRUE then
+ if band(obj.ident, IDENT_CURSED) == 0 then return "special"
+ else return "terrible" end
+ -- Ego items
+ elseif (obj.name2 > 0 or obj.name2b > 0) then
+ if band(obj.ident, IDENT_CURSED) == 0 then return "very good"
+ else return "very bad" end
+ -- weapon
+ elseif (slot == INVEN_WIELD) or (slot == INVEN_BOW) or (slot == INVEN_AMMO) or (slot == INVEN_TOOL) then
+ if obj.to_h + obj.to_d < 0 then
+ return "bad"
+ elseif obj.to_h + obj.to_d > 0 then
+ return "good"
+ else
+ return "average"
+ end
+ -- armor
+ elseif (slot >= INVEN_BODY) and (slot <= INVEN_FEET) then
+ if obj.to_a < 0 then
+ return "bad"
+ elseif obj.to_a > 0 then
+ return "good"
+ else
+ return "average"
+ end
+ -- ring
+ elseif slot == INVEN_RING then
+ if (obj.to_d + obj.to_h < 0) or (obj.to_a < 0) or (obj.pval < 0) then
+ return "bad"
+ else
+ return "average"
+ end
+ -- amulet
+ elseif slot == INVEN_NECK then
+ if (obj.pval < 0) then
+ return "bad"
+ else
+ return "average"
+ end
+ -- chests
+ elseif obj.tval == TV_CHEST then
+ if obj.pval == 0 then
+ return "empty"
+ elseif obj.pval < 0 then
+ return "disarmed"
+ else
+ return "average"
+ end
+ else
+ return "average"
+ end
+end
+ end
+end
+
+-- Recursive function to generate a rule function tree
+function gen_rule_fct(r)
+ -- It is a test rule (or, and, ...)
+ if r.label == "and" or r.label == "or" then
+ local i
+ local fct_tbl = {}
+ for i = 1, getn(r) do
+ if r[i].label ~= "comment" then
+ tinsert(fct_tbl, gen_rule_fct(r[i]))
+ end
+ end
+ if r.label == "and" then
+ return function(object)
+ local fcts = %fct_tbl
+ local i
+ for i = 1, getn(fcts) do
+ if not fcts[i](object) then return end
+ end
+ return TRUE
+ end
+ elseif r.label == "or" then
+ return function(object)
+ local fcts = %fct_tbl
+ local i
+ for i = 1, getn(fcts) do
+ if fcts[i](object) then return TRUE end
+ end
+ end
+ end
+ -- It is a condition rule (name, type, level, ...)
+ else
+ if r.label == "not" then
+ local f
+ if not r[1] then
+ f = function (object) return TRUE end
+ else
+ f = gen_rule_fct(r[1])
+ end
+ return function(object) return not %f(object) end
+ elseif r.label == "name" then
+ return function(object) if strlower(object_desc(object, -1, 0)) == strlower(%r[1]) then return TRUE end end
+ elseif r.label == "contain" then
+ return function(object) if strfind(strlower(object_desc(object, -1, 0)), strlower(%r[1])) then return TRUE end end
+ elseif r.label == "symbol" then
+ return function(object) if strchar(get_kind(object).d_char) == %r[1] then return TRUE end end
+ elseif r.label == "inscribed" then
+ return function(object) if object.note ~= 0 and strfind(strlower(quark_str(object.note)), strlower(%r[1])) then return TRUE end end
+ elseif r.label == "discount" then
+ local d1 = r.args.min
+ local d2 = r.args.max
+ if tonumber(d1) == nil then d1 = getglobal(d1) else d1 = tonumber(d1) end
+ if tonumber(d2) == nil then d2 = getglobal(d2) else d2 = tonumber(d2) end
+ return function(object) if is_aware(object) == TRUE and object.discount >= %d1 and object.discount <= %d2 then return TRUE end end
+ elseif r.label == "tval" then
+ local tv = r[1]
+ if tonumber(tv) == nil then tv = getglobal(tv) else tv = tonumber(tv) end
+ return function(object) if object.tval == %tv then return TRUE end end
+ elseif r.label == "sval" then
+ assert(r.args.min and r.args.max, "sval rule lacks min or max")
+ local sv1 = r.args.min
+ local sv2 = r.args.max
+ if tonumber(sv1) == nil then sv1 = getglobal(sv1) else sv1 = tonumber(sv1) end
+ if tonumber(sv2) == nil then sv2 = getglobal(sv2) else sv2 = tonumber(sv2) end
+ return function(object) if is_aware(object) == TRUE and object.sval >= %sv1 and object.sval <= %sv2 then return TRUE end end
+ elseif r.label == "status" then
+ return function(object) if object_status(object) == strlower(%r[1]) then return TRUE end end
+ elseif r.label == "state" then
+ if r[1] == "identified" then
+ return function(object) if is_known(object) == TRUE then return TRUE end end
+ else
+ return function(object) if is_known(object) == FALSE then return TRUE end end
+ end
+ elseif r.label == "race" then
+ return function(object) if strlower(get_race_name()) == strlower(%r[1]) then return TRUE end end
+ elseif r.label == "subrace" then
+ return function(object) if strlower(get_subrace_name()) == strlower(%r[1]) then return TRUE end end
+ elseif r.label == "class" then
+ return function(object) if strlower(get_class_name()) == strlower(%r[1]) then return TRUE end end
+ elseif r.label == "level" then
+ assert(r.args.min and r.args.max, "level rule lacks min or max")
+ return function(object) if player.lev >= tonumber(%r.args.min) and player.lev <= tonumber(%r.args.max) then return TRUE end end
+ elseif r.label == "skill" then
+ assert(r.args.min and r.args.max, "skill rule lacks min or max")
+ local s = find_skill_i(r[1])
+ assert(s ~= -1, "no skill "..r[1])
+ return function(object) if get_skill(%s) >= tonumber(%r.args.min) and get_skill(%s) <= tonumber(%r.args.max) then return TRUE end end
+ elseif r.label == "ability" then
+ local s = find_ability(r[1])
+ assert(s ~= -1, "no ability "..r[1])
+ return function(object) if has_ability(%s) == TRUE then return TRUE end end
+ end
+ end
+end
+
+function auto_inscribe_maker(inscription)
+ return function(...)
+ arg.n = arg.n + 1
+ arg[getn(arg)] = %inscription
+ return call(auto_inscribe, arg)
+ end
+end
+
+-- Generate a rule from a table
+function gen_full_rule(t)
+ -- only honor rules for this module
+ if not t.args.module then
+ t.args.module = "ToME"
+ end
+
+ if not ((t.args.module == "all") or (t.args.module == game_module)) then
+ return function() end
+ end
+
+ -- Check for which action to do
+ local apply_fct = auto_nothing
+ if t.args.type == "destroy" then apply_fct = auto_destroy
+ elseif t.args.type == "pickup" then apply_fct = auto_pickup
+ elseif t.args.type == "inscribe" then apply_fct = auto_inscribe_maker(t.args.inscription)
+ end
+
+ -- create the function tree
+ local rf
+ if t[1] then
+ rf = gen_rule_fct(t[1])
+ else
+ rf = function (object) end
+ end
+
+ -- create the final function
+ return function(...)
+ local rf = %rf
+ if rf(arg[1]) then
+ if call(%apply_fct, arg) == TRUE then return TRUE end
+ end
+ end
+end
+
+-- Create a function that checks for the rules(passed in xml form)
+function add_ruleset(s)
+ local tbl = xml:collect(s)
+ local i
+
+ -- Add all rules
+ for i = 1, getn(tbl) do
+ local t = tbl[i]
+
+ if t.label == "rule" then
+ -- Create the function tree
+ local fct = gen_full_rule(t)
+
+ -- Create the test function
+ __rules[__rules_max] =
+ {
+ ["table"] = t,
+ ["fct"] = fct
+ }
+ __rules_max = __rules_max + 1
+ end
+ end
+end
+
+-- Apply the current rules to an object
+-- call with at least (object, idx)
+function apply_rules(...)
+ local i
+ for i = 0, __rules_max - 1 do
+ if call(__rules[i].fct, arg) then return TRUE end
+ end
+ return FALSE
+end
+
+-- Clear the current rules
+function clean_ruleset()
+ __rules_max = 0
+ __rules = {}
+end
+
+------ helper fonctions for the GUI
+
+auto_aux = {}
+auto_aux.stack = { n = 0 }
+auto_aux.idx = 1
+auto_aux.rule = 1
+function auto_aux:go_right()
+ if auto_aux.rule[1] and type(auto_aux.rule[1]) == "table" then
+ tinsert(auto_aux.stack, auto_aux.idx)
+ tinsert(auto_aux.stack, auto_aux.rule)
+ auto_aux.rule = auto_aux.rule[1]
+ auto_aux.idx = 1
+ end
+end
+
+function auto_aux:go_left(sel)
+ local n = getn(auto_aux.stack)
+
+ if n > 0 then
+ auto_aux.idx = auto_aux.stack[n - 1]
+ auto_aux.rule = auto_aux.stack[n]
+ tremove(auto_aux.stack)
+ tremove(auto_aux.stack)
+ end
+end
+
+function auto_aux:go_down()
+ if getn(auto_aux.stack) > 1 then
+ if auto_aux.stack[getn(auto_aux.stack)][auto_aux.idx + 1] then
+ auto_aux.idx = auto_aux.idx + 1
+ auto_aux.rule = auto_aux.stack[getn(auto_aux.stack)][auto_aux.idx]
+ end
+ end
+end
+
+function auto_aux:go_up()
+ if getn(auto_aux.stack) > 1 then
+ if auto_aux.stack[getn(auto_aux.stack)][auto_aux.idx - 1] then
+ auto_aux.idx = auto_aux.idx - 1
+ auto_aux.rule = auto_aux.stack[getn(auto_aux.stack)][auto_aux.idx]
+ end
+ end
+end
+
+function auto_aux:scroll_up()
+ xml.write_off_y = xml.write_off_y - 1
+end
+
+function auto_aux:scroll_down()
+ xml.write_off_y = xml.write_off_y + 1
+end
+
+function auto_aux:scroll_left()
+ xml.write_off_x = xml.write_off_x + 1
+end
+
+function auto_aux:scroll_right()
+ xml.write_off_x = xml.write_off_x - 1
+end
+
+function auto_aux:adjust_current(sel)
+ if __rules_max == 0 then return end
+
+ xml.write_off_y = 0
+ xml.write_off_x = 0
+ auto_aux.idx = 1
+ auto_aux.stack = { n = 0 }
+ auto_aux.rule = __rules[sel].table
+end
+
+function auto_aux:move_up(sel)
+ if sel > 0 then
+ local u = __rules[sel - 1]
+ local d = __rules[sel]
+ __rules[sel - 1] = d
+ __rules[sel] = u
+ return sel - 1
+ end
+ return sel
+end
+
+function auto_aux:move_down(sel)
+ if sel < __rules_max - 1 then
+ local u = __rules[sel]
+ local d = __rules[sel + 1]
+ __rules[sel + 1] = u
+ __rules[sel] = d
+ return sel + 1
+ end
+ return sel
+end
+
+function auto_aux:new_rule(sel, nam, typ, arg)
+ local r
+
+
+ -- nam can also directly be the table itself
+ if type(nam) == "table" then
+ r =
+ {
+ ["table"] = nam,
+ ["fct"] = function (object) end
+ }
+ elseif typ == "inscribe" then
+ if arg == "" then
+ arg = input_box("Inscription?", 79)
+ end
+ r =
+ {
+ ["table"] =
+ {
+ label = "rule",
+ args = { name = nam, type = typ, inscription = arg, module = game_module },
+ },
+ ["fct"] = function (object) end
+ }
+ else
+ r =
+ {
+ ["table"] =
+ {
+ label = "rule",
+ args = { name = nam, type = typ, module = game_module },
+ },
+ ["fct"] = function (object) end
+ }
+ end
+ tinsert(__rules, sel, r)
+ __rules_max = __rules_max + 1
+end
+
+function auto_aux:rename_rule(sel, nam)
+ if sel >= 0 and sel < __rules_max then
+ __rules[sel].table.args.name = nam
+ end
+end
+
+function auto_aux:save_ruleset()
+ xml.write = xml.write_file
+
+ print_hook("clean_ruleset()\nadd_ruleset\n[[\n")
+ local i
+ for i = 0, __rules_max - 1 do
+ xml:print_xml(__rules[i].table, '')
+ end
+ print_hook("]]\n")
+
+ xml.write = xml.write_screen
+end
+
+function auto_aux:del_self(sel)
+ if auto_aux.rule.label == "rule" then
+ tremove(__rules, sel)
+ __rules_max = __rules_max - 1
+ return sel - 1
+ else
+ local idx = auto_aux.idx
+ auto_aux:go_left(sel)
+ tremove(auto_aux.rule, idx)
+ return sel
+ end
+end
+
+auto_aux.types_desc =
+{
+ ["and"] =
+ {
+ "Check is true if all rules within it are true",
+ xml:collect([[<and><foo1>...</foo1><foo2>...</foo2><foo3>...</foo3></and>]]),
+ function ()
+ return xml:collect("<and></and>")
+ end,
+ },
+ ["or"] =
+ {
+ "Check is true if at least one rule within it is true",
+ xml:collect([[<or><foo1>...</foo1><foo2>...</foo2><foo3>...</foo3></or>]]),
+ function ()
+ return xml:collect("<or></or>")
+ end,
+ },
+ ["not"] =
+ {
+ "Invert the result of its child rule",
+ xml:collect([[<not><foo1>...</foo1></not>]]),
+ function ()
+ return xml:collect("<not></not>")
+ end,
+ },
+ ["comment"] =
+ {
+ "Comments are meaningless",
+ xml:collect([[<comment>Comment explaining something</comment>]]),
+ function ()
+ local n = input_box("Comment?", 79)
+ if n == "" then return end
+ return xml:collect("<comment>"..n.."</comment>")
+ end,
+ },
+ ["name"] =
+ {
+ "Check is true if object name matches name",
+ xml:collect([[<name>potion of healing</name>]]),
+ function ()
+ local n = input_box("Object name to match?", 79)
+ if n == "" then return end
+ return xml:collect("<name>"..n.."</name>")
+ end,
+ },
+ ["contain"] =
+ {
+ "Check is true if object name contains word",
+ xml:collect([[<contain>healing</contain>]]),
+ function ()
+ local n = input_box("Word to find in object name?", 79)
+ if n == "" then return end
+ return xml:collect("<contain>"..n.."</contain>")
+ end,
+ },
+ ["inscribed"] =
+ {
+ "Check is true if object inscription contains word",
+ xml:collect([[<inscribed>=g</inscribed>]]),
+ function ()
+ local n = input_box("Word to find in object inscription?", 79)
+ if n == "" then return end
+ return xml:collect("<inscribed>"..n.."</inscribed>")
+ end,
+ },
+ ["discount"] =
+ {
+ "Check is true if object discount is between 2 values",
+ xml:collect([[<sval min='50' max='100'></sval>]]),
+ function ()
+ local s = "<discount "
+
+ local n = input_box("Min discount?", 79)
+ if n == "" then return end
+ s = s.."min='"..n.."' "
+
+ n = input_box("Max discount?", 79)
+ if n == "" then return end
+ s = s.."max='"..n.."'></discount>"
+ return xml:collect(s)
+ end,
+ },
+ ["symbol"] =
+ {
+ "Check is true if object symbol is ok",
+ xml:collect([[<symbol>!</symbol>]]),
+ function ()
+ local n = input_box("Symbol to match?", 1)
+ if n == "" then return end
+ return xml:collect("<symbol>"..n.."</symbol>")
+ end,
+ },
+ ["status"] =
+ {
+ "Check is true if object status is ok",
+ xml:collect([[<status>good</status>]]),
+ function ()
+ local n = msg_box("[t]errible, [v]ery bad, [b]ad, [a]verage, [G]ood, [V]ery good, [S]pecial?")
+ local t =
+ {
+ ["t"] = "terrible",
+ ["v"] = "very bad",
+ ["b"] = "bad",
+ ["a"] = "average",
+ ["G"] = "good",
+ ["V"] = "very good",
+ ["S"] = "special",
+ }
+ if not t[strchar(n)] then return end
+ return xml:collect("<status>"..t[strchar(n)].."</status>")
+ end,
+ },
+ ["state"] =
+ {
+ "Check is true if object is identified/unidentified",
+ xml:collect([[<state>identified</state>]]),
+ function ()
+ local n = msg_box("[i]dentified, [n]on identified?")
+ local t =
+ {
+ ["i"] = "identified",
+ ["n"] = "not identified",
+ }
+ if not t[strchar(n)] then return end
+ return xml:collect("<state>"..t[strchar(n)].."</state>")
+ end,
+ },
+ ["tval"] =
+ {
+ "Check is true if object tval(from k_info.txt) is ok",
+ xml:collect([[<tval>55</tval>]]),
+ function ()
+ local n = input_box("Tval to match?", 79)
+ if n == "" then return end
+ return xml:collect("<tval>"..n.."</tval>")
+ end,
+ },
+ ["sval"] =
+ {
+ {
+ "Check is true if object sval(from k_info.txt) is between",
+ "2 values",
+ },
+ xml:collect([[<sval min='0' max='100'></sval>]]),
+ function ()
+ local s = "<sval "
+
+ local n = input_box("Min sval?", 79)
+ if n == "" then return end
+ s = s.."min='"..n.."' "
+
+ n = input_box("Max sval?", 79)
+ if n == "" then return end
+ s = s.."max='"..n.."'></sval>"
+ return xml:collect(s)
+ end,
+ },
+ ["race"] =
+ {
+ "Check is true if player race is ok",
+ xml:collect([[<race>dunadan</race>]]),
+ function ()
+ local n = input_box("Player race to match?", 79)
+ if n == "" then return end
+ return xml:collect("<race>"..n.."</race>")
+ end,
+ },
+ ["subrace"] =
+ {
+ "Check is true if player subrace is ok",
+ xml:collect([[<subrace>vampire</subrace>]]),
+ function ()
+ local n = input_box("Player subrace to match?", 79)
+ if n == "" then return end
+ return xml:collect("<subrace>"..n.."</subrace>")
+ end,
+ },
+ ["class"] =
+ {
+ "Check is true if player class is ok",
+ xml:collect([[<class>sorceror</class>]]),
+ function ()
+ local n = input_box("Player class to match?", 79)
+ if n == "" then return end
+ return xml:collect("<class>"..n.."</class>")
+ end,
+ },
+ ["level"] =
+ {
+ "Check is true if player level is between 2 values",
+ xml:collect([[<level min='20' max='50'></level>]]),
+ function ()
+ local s = "<level "
+
+ local n = input_box("Min player level?", 79)
+ if n == "" then return end
+ s = s.."min='"..n.."' "
+
+ n = input_box("Max player level?", 79)
+ if n == "" then return end
+ s = s.."max='"..n.."'></level>"
+
+ return xml:collect(s)
+ end,
+ },
+ ["skill"] =
+ {
+ "Check is true if player skill level is between 2 values",
+ xml:collect([[<skill min='10' max='20'>Divination</skill>]]),
+ function ()
+ local s = "<skill "
+
+ local n = input_box("Min skill level?", 79)
+ if n == "" then return end
+ s = s.."min='"..n.."' "
+
+ n = input_box("Max skill level?", 79)
+ if n == "" then return end
+ s = s.."max='"..n.."'>"
+
+ n = input_box("Skill name?", 79)
+ if n == "" then return end
+ if find_skill_i(n) == -1 then return end
+ s = s..n.."</skill>"
+
+ return xml:collect(s)
+ end,
+ },
+ ["ability"] =
+ {
+ "Check is true if player has the ability",
+ xml:collect([[<ability>Ammo creation</ability>]]),
+ function()
+ local n = input_box("Ability name?", 79)
+ if n == "" then return end
+ if find_ability(n) == -1 then return end
+ return xml:collect("<ability>"..n.."</ability>")
+ end,
+ },
+}
+
+function auto_aux:display_desc(sel)
+ local d = auto_aux.types_desc[sel][1]
+ if type(d) == "string" then
+ c_prt(TERM_WHITE, d, 1, 17)
+ else
+ local k, e, i
+ i = 0
+ for k, e in d do
+ c_prt(TERM_WHITE, e, 1 + i, 17)
+ i = i + 1
+ end
+ end
+end
+
+function auto_aux:add_child(sel)
+ -- <rule> and <not> contain only one match
+ if (auto_aux.rule.label == "rule" or auto_aux.rule.label == "not") and auto_aux.rule[1] then return end
+
+ -- Only <and> and <or> can contain
+ if auto_aux.rule.label ~= "rule" and auto_aux.rule.label ~= "and" and auto_aux.rule.label ~= "or" and auto_aux.rule.label ~= "not" then return end
+
+ -- get it
+ local r = auto_aux.types_desc[sel][3]()
+ if not r then return end
+
+ -- Ok add it
+ tinsert(auto_aux.rule, r[1])
+end
+
+function auto_aux.regen_ruleset()
+ local i
+ for i = 0, __rules_max - 1 do
+ __rules[i].fct = gen_full_rule(__rules[i].table)
+ end
+end
+
+
+-- Easily add new rules
+function easy_add_rule(typ, mode, do_status, obj)
+ local detect_rule
+
+ if mode == "tval" then
+ detect_rule = "<tval>"..obj.tval.."</tval>"
+ elseif mode == "tsval" then
+ detect_rule = "<and><tval>"..obj.tval.."</tval><sval min='"..obj.sval.."' max='"..obj.sval.."'></sval></and>"
+ elseif mode == "name" then
+ detect_rule = "<name>"..strlower(object_desc(obj, -1, 0)).."</name>"
+ end
+
+ if do_status == TRUE then
+ local status = object_status(obj)
+ if status and not (status == "") then
+ detect_rule = "<and>"..detect_rule.."<status>"..status.."</status></and>"
+ end
+ end
+
+ local rule = "<rule module='"..game_module.."' name='"..typ.."' type='"..typ.."'>"..detect_rule.."</rule>"
+ auto_aux:new_rule(0, xml:collect(rule)[1], '')
+ auto_aux.regen_ruleset()
+ msg_print("Rule added. Please go to the Automatizer screen (press = then T)")
+ msg_print("to save the modified ruleset.")
+end
diff --git a/lib/core/building.lua b/lib/core/building.lua
new file mode 100644
index 0000000..8e88888
--- /dev/null
+++ b/lib/core/building.lua
@@ -0,0 +1,15 @@
+__building_actions = {}
+
+function add_building_action(a)
+ assert(a.index, "No building action index")
+ assert(a.action, "No building action action")
+ __building_actions[a.index] = a.action
+end
+
+function __bact_activate(bact)
+ if __building_actions[bact] then
+ return __building_actions[bact]()
+ end
+end
+
+add_hook_script(HOOK_BUILDING_ACTION, "__bact_activate", "__bact_activate")
diff --git a/lib/core/crpt_aux.lua b/lib/core/crpt_aux.lua
new file mode 100644
index 0000000..e4f16e2
--- /dev/null
+++ b/lib/core/crpt_aux.lua
@@ -0,0 +1,243 @@
+-- Core functions for corruptions
+
+__corruptions = {}
+__corruptions_max = 0
+__corruptions_callbacks_max = 0
+
+-- Get the corruption
+function player.corruption(c, set)
+ if set then
+ player.corruptions_aux[c + 1] = set
+ player.redraw = bor(player.redraw, PR_BASIC)
+ player.update = bor(player.update, PU_BONUS, PU_TORCH, PU_BODY, PU_POWERS)
+ if (set == TRUE) and (__corruptions[c].gain) then
+ __corruptions[c].gain()
+ end
+ if (set == FALSE) and (__corruptions[c].lose) then
+ __corruptions[c].lose()
+ end
+ else
+ return player.corruptions_aux[c + 1]
+ end
+end
+
+-- Test if we have that corruption
+-- We must:
+-- 1) have it or be willing to get it
+-- 2) have all its dependancies
+-- 3) have none of its opposing corruptions
+-- 4) pass the possible tests
+function test_depend_corrupt(corrupt, can_gain)
+ local i, c
+
+ if not can_gain then can_gain = FALSE end
+
+ if can_gain == TRUE then
+ if (player.corruption(corrupt) ~= FALSE) then
+ return FALSE
+ end
+ else
+ if (player.corruption(corrupt) ~= TRUE) then
+ return FALSE
+ end
+ end
+
+ for c, i in __corruptions[corrupt].depends do
+ if test_depend_corrupt(c) ~= TRUE then
+ return FALSE
+ end
+ end
+
+ for c, i in __corruptions[corrupt].oppose do
+ if test_depend_corrupt(c) ~= FALSE then
+ return FALSE
+ end
+ end
+
+ -- are we even allowed to get it?
+ if __corruptions[corrupt].can_gain and (not __corruptions[corrupt].can_gain()) then
+ return FALSE
+ end
+
+ return TRUE
+end
+
+-- Gain a new corruption
+function gain_corruption(group)
+ local i, max
+ local pos = {}
+
+ -- Get the list of all possible ones
+ max = 0
+ for i = 0, __corruptions_max - 1 do
+ if __corruptions[i].group == group and test_depend_corrupt(i, TRUE) == TRUE and __corruptions[i].random == TRUE and __corruptions[i].allow() then
+ pos[max] = i
+ max = max + 1
+ end
+ end
+
+ -- Ok now get one of them
+ if (max > 0) then
+ local ret = rand_int(max)
+
+ player.corruption(pos[ret], TRUE)
+ cmsg_print(TERM_L_RED, __corruptions[pos[ret]].get_text)
+
+ return pos[ret]
+ else
+ return -1
+ end
+end
+
+-- Lose an existing corruption
+function lose_corruption()
+ local i, max
+ local pos = {}
+
+ -- Get the list of all possible ones
+ max = 0
+ for i = 0, __corruptions_max - 1 do
+ if test_depend_corrupt(i) == TRUE and __corruptions[i].removable == TRUE then
+ pos[max] = i
+ max = max + 1
+ end
+ end
+
+ -- Ok now get one of them
+ if (max > 0) then
+ local ret = rand_int(max)
+
+ player.corruption(pos[ret], FALSE)
+ cmsg_print(TERM_L_RED, __corruptions[pos[ret]].lose_text)
+
+ -- Ok now lets see if it broke some dependancies
+ for i = 0, max - 1 do
+ if player.corruption(pos[i]) ~= test_depend_corrupt(pos[i]) then
+ player.corruption(pos[i], FALSE)
+ cmsg_print(TERM_L_RED, __corruptions[pos[i]].lose_text)
+ end
+ end
+
+ return pos[ret]
+ else
+ return -1
+ end
+end
+
+-- Lose all corruptions (for e.g. Potion of New Life)
+function lose_all_corruptions()
+ local i;
+ for i = 0, __corruptions_max - 1 do
+ lose_corruption()
+ end
+ return -1
+end
+
+-- Creates a new corruption
+function add_corruption(c)
+ assert(c.color, "No corruption color")
+ assert(c.name, "No corruption name")
+ assert(c.get_text, "No corruption get_text")
+ assert(c.lose_text, "No corruption lose_text")
+ assert(c.desc, "No corruption desc")
+ assert(c.hooks, "Nothing to do for corruption")
+ if not c.random then c.random = TRUE end
+ if not c.removable then c.removable = TRUE end
+ if not c.allow then c.allow = function() return not nil end end
+
+ if c.depends == nil then c.depends = {} end
+ if c.oppose == nil then c.oppose = {} end
+
+ -- We must make sure the other ones opposes too
+ local o, i
+ for o, i in c.oppose do
+ __corruptions[o].oppose[__corruptions_max] = TRUE
+ end
+
+ local index, h
+ for index, h in c.hooks do
+ add_hook_script(index, "__lua__corrupt_callback"..__corruptions_callbacks_max, "__lua__corrupt_callback"..__corruptions_callbacks_max)
+ setglobal("__lua__corrupt_callback"..__corruptions_callbacks_max,
+ function (...)
+ if test_depend_corrupt(%__corruptions_max) == TRUE then
+ return call(%h, arg)
+ end
+ end
+ )
+ __corruptions_callbacks_max = __corruptions_callbacks_max + 1
+ end
+
+ if type(c.desc) == "table" then
+ local new_desc = ""
+ for index, h in c.desc do
+ new_desc = new_desc..h.."\n"
+ end
+ c.desc = new_desc
+ end
+
+ __corruptions[__corruptions_max] = c
+ __corruptions_max = __corruptions_max + 1
+ return (__corruptions_max - 1)
+end
+
+
+
+---------- Corruption spoiler generator -----------
+function corruption_spoiler_generate()
+ make_temp_file()
+ print_hook(
+[[~~~~~01|Corruptions (Spoiler)
+~~~~~02|Spoilers|Corruptions
+#####R=== ToME Corruptions Spoiler ===
+
+Sometimes adventurers become exposed to the dark powers of Morgoth. If they
+are unable to resist these powers, they become corrupted. Corruptions can
+change their physical or mental abilities, some of which can be good, and
+some bad. Most corruptions will affect you permanently, although some only
+operate when they are activated (whether by player choice or as a random
+event). You can check which corruptions you have in the knowledge screen 6
+(accessed through the '~' menu) or in a character dump.
+
+#####GGaining and (not) losing corruptions
+There are several ways that you can become corrupted.
+
+You can become corrupted by quaffing a Potion of Corruption or by drinking
+from a Fountain of Corruption. Also some strange items can be activated
+for corruption.
+
+Corruptions are permanent. Once you have one, you have it for life.
+
+]])
+ local i, e
+ for i = 0, __corruptions_max - 1 do
+ print_hook("[[[[[B"..__corruptions[i].name.."]\n")
+ print_hook(__corruptions[i].desc)
+ print_hook("[[[[[GGain message: "..__corruptions[i].get_text.."]\n")
+ if __corruptions[i].removable == TRUE then
+ print_hook("[[[[[RLose message: "..__corruptions[i].lose_text.."]\n")
+ else
+ print_hook("It is not removable.\n")
+ end
+
+ local ok
+ ok = nil
+ for e, _ in __corruptions[i].depends do ok = not nil end
+ if ok then
+ print_hook("It depends on:\n")
+ for e, _ in __corruptions[i].depends do
+ print_hook(" "..__corruptions[e].name.."\n")
+ end
+ end
+ ok = nil
+ for e, _ in __corruptions[i].oppose do ok = not nil end
+ if ok then
+ print_hook("It is opposed to:\n")
+ for e, _ in __corruptions[i].oppose do
+ print_hook(" "..__corruptions[e].name.."\n")
+ end
+ end
+ print_hook("\n\n")
+ end
+ close_temp_file()
+ msg_print("File created as: "..get_temp_name())
+end
diff --git a/lib/core/dungeon.lua b/lib/core/dungeon.lua
new file mode 100644
index 0000000..2877838
--- /dev/null
+++ b/lib/core/dungeon.lua
@@ -0,0 +1,106 @@
+-- Internal lua file in charge of dungeon stuff
+
+function place_dungeon(y, x, d_idx)
+ if d_idx then
+ wild_map(y, x).entrance = 1000 + d_idx
+ else
+ wild_map(y, x).entrance = 0
+ end
+end
+
+function dungeon(d_idx)
+ return d_info[1 + d_idx]
+end
+
+function wild_feat(wild)
+ return wf_info[1 + wild.feat]
+end
+
+function explode_dir(dir)
+ return ddy[dir + 1], ddx[dir + 1]
+end
+
+function rotate_dir(dir, mov)
+ if mov > 0 then
+ if dir == 7 then dir = 8
+ elseif dir == 8 then dir = 9
+ elseif dir == 9 then dir = 6
+ elseif dir == 6 then dir = 3
+ elseif dir == 3 then dir = 2
+ elseif dir == 2 then dir = 1
+ elseif dir == 1 then dir = 4
+ elseif dir == 4 then dir = 7
+ end
+ elseif mov < 0 then
+ if dir == 7 then dir = 4
+ elseif dir == 4 then dir = 1
+ elseif dir == 1 then dir = 2
+ elseif dir == 2 then dir = 3
+ elseif dir == 3 then dir = 6
+ elseif dir == 6 then dir = 9
+ elseif dir == 9 then dir = 8
+ elseif dir == 8 then dir = 7
+ end
+ end
+
+ return dir
+end
+
+-- Check if the map is a filename or directly a map
+function load_map(map, y, x)
+ if strsub(map, 1, 5) == "#!map" then
+ %load_map(TRUE, map, y, x)
+ else
+ %load_map(FALSE, map, y, x)
+ end
+end
+function get_map_size(map)
+ if strsub(map, 1, 5) == "#!map" then
+ return %get_map_size(TRUE, map)
+ else
+ return %get_map_size(FALSE, map)
+ end
+end
+
+-- Place a trap for a specific level
+function place_trap(y, x, level)
+ local old_dun = dun_level
+ dun_level = level
+ %place_trap(y, x)
+ dun_level = old_dun
+end
+
+-- Level generators processing
+__level_generators = {}
+
+function level_generator(t)
+ assert(t.name, "no generator name")
+ assert(t.gen, "no generator function")
+
+ if not t.stairs then t.stairs = TRUE end
+ if not t.monsters then t.monsters = TRUE end
+ if not t.objects then t.objects = TRUE end
+ if not t.miscs then t.miscs = TRUE end
+
+ __level_generators[t.name] = t.gen
+ add_scripted_generator(t.name, t.stairs, t.monsters, t.objects, t.miscs)
+end
+
+function level_generate(name)
+ assert(__level_generators[name], "Unknown level generator '"..name.."'")
+ return __level_generators[name]()
+end
+
+--[[ Example
+level_generator
+{
+ ["name"] = "test",
+ ["gen"] = function()
+ print("zog")
+ for i = 1, 30 do
+ cave(i, 2).feat = 1
+ end
+ return new_player_spot(get_branch())
+ end,
+}
+]]
diff --git a/lib/core/gen_idx.lua b/lib/core/gen_idx.lua
new file mode 100644
index 0000000..5f3af43
--- /dev/null
+++ b/lib/core/gen_idx.lua
@@ -0,0 +1,261 @@
+-- Place here the list of files to parse
+files =
+{
+ "birth.txt",
+ "experien.hlp",
+ "gods.txt",
+ "explore.hlp",
+ "newbie.hlp",
+ "advanced.hlp",
+ "help.hlp",
+ "general.txt",
+ "whattome.txt",
+ "dungeon.txt",
+ "spoiler.hlp",
+ "g_melkor.txt",
+ "skills.txt",
+ "c_bard.txt",
+ "c_druid.txt",
+ "c_lorema.txt",
+ "c_mage.txt",
+ "c_mimic.txt",
+ "c_mindcr.txt",
+ "c_monk.txt",
+ "c_palad.txt",
+ "c_posses.txt",
+ "c_pr_drk.txt",
+ "c_pr_eru.txt",
+ "c_pr_man.txt",
+ "c_symbia.txt",
+ "c_alchem.txt",
+ "c_archer.txt",
+ "c_assass.txt",
+ "c_axemas.txt",
+ "c_demono.txt",
+ "c_geoman.txt",
+ "c_hafted.txt",
+ "c_necro.txt",
+ "c_polear.txt",
+ "c_ranger.txt",
+ "c_rogue.txt",
+ "c_runecr.txt",
+ "c_sorcer.txt",
+ "c_swordm.txt",
+ "c_thaum.txt",
+ "c_unbel.txt",
+ "c_warper.txt",
+ "c_warrio.txt",
+ "m_meta.txt",
+ "rm_skel.txt",
+ "rm_zomb.txt",
+ "luckspoi.txt",
+ "m_air.txt",
+ "dunspoil.txt",
+ "g_eru.txt",
+ "g_manwe.txt",
+ "g_tulkas.txt",
+ "m_divin.txt",
+ "m_mimic.txt",
+ "m_water.txt",
+ "magic.txt",
+ "r_drkelf.txt",
+ "r_dwarf.txt",
+ "r_elf.txt",
+ "r_hielf.txt",
+ "r_hobbit.txt",
+ "r_pettyd.txt",
+ "r_wodelf.txt",
+ "rm_spec.txt",
+ "tome_faq.txt",
+ "ability.txt",
+ "automat.txt",
+ "c_summon.txt",
+ "command.txt",
+ "corspoil.txt",
+ "debug.txt",
+ "m_music.txt",
+ "rm_barb.txt",
+ "macrofaq.txt",
+ "m_necrom.txt",
+ "m_mindcr.txt",
+ "m_symbio.txt",
+ "m_thaum.txt",
+ "magic.hlp",
+ "m_convey.txt",
+ "m_fire.txt",
+ "m_mana.txt",
+ "m_mind.txt",
+ "m_nature.txt",
+ "m_tempo.txt",
+ "m_udun.txt",
+ "m_geoman.txt",
+ "essences.txt",
+ "r_ent.txt",
+ "g_yavann.txt",
+ "defines.txt",
+ "rm_vamp.txt",
+ "inscrip.txt",
+ "m_earth.txt",
+ "option.txt",
+ "attack.txt",
+ "version.txt",
+ "m_demono.txt",
+ "r_beorn.txt",
+ "r_deathm.txt",
+ "r_rohank.txt",
+ "r_hafogr.txt",
+ "r_human.txt",
+ "r_kobold.txt",
+ "r_maia.txt",
+ "r_orc.txt",
+ "r_thlord.txt",
+ "r_troll.txt",
+ "r_yeek.txt",
+ "rm_class.txt",
+ "rm_herm.txt",
+ "rm_lsoul.txt",
+ "wishing.txt",
+ "c_priest.txt",
+ "fatespoi.txt",
+ "gambling.txt",
+ "r_dunad.txt",
+ "r_gnome.txt",
+ "r_hafelf.txt",
+ "c_merch.txt",
+ "spoil_faq.txt",
+}
+
+out_file = "index.txt"
+
+index = {}
+
+function parse_file(file)
+ local fff = openfile(path_build(ANGBAND_DIR_HELP, file), "r")
+ local line
+
+ line = read(fff, "*l")
+ while line do
+ local i, j, anchor, name, subname = strfind(line, "~~~~~(%d+)|([%d%a -]+)|([%d%a -]+)")
+ if not i then
+ i, j, anchor, name = strfind(line, "~~~~~(%d+)|([%d%a -]+)")
+
+ subname = nil
+ end
+
+ if i then
+ if not index[name] then
+ index[name] = {}
+ end
+ if subname then
+ tinsert(index[name], { __name__ = subname, __file__ = file, __anchor__ = anchor})
+ else
+ tinsert(index[name], { __name__ = "__primary__", __file__ = file, __anchor__ = anchor})
+ end
+ end
+
+ line = read(fff, "*l")
+ end
+
+ closefile(fff)
+end
+
+function sort_fct(a, b)
+ local i, len
+
+ a = a.__name__
+ b = b.__name__
+
+ if strlen(a) > strlen(b) then len = strlen(b) else len = strlen(a) end
+
+ for i = 1, len do
+ local ac = strbyte(a, i)
+ local bc = strbyte(b, i)
+
+ if ac < bc then
+ return not nil
+ elseif ac > bc then
+ return nil
+ end
+ end
+ if strlen(a) > strlen(b) then return nil else return not nil end
+end
+
+function generate_index()
+ local k, e, index_list
+ for _, e in files do
+ parse_file(e)
+ end
+
+ index_list = {}
+ for k, e in index do
+ -- Ok either my sort function or lua sort function sucks ass ..
+ sort(e, sort_fct)
+ sort(e, sort_fct)
+ sort(e, sort_fct)
+ sort(e, sort_fct)
+ sort(e, sort_fct)
+ tinsert(index_list, {__name__= k, __table__ = e})
+ end
+
+ -- Ok either my sort function or lua sort function sucks ass ..
+ sort(index_list, sort_fct)
+ sort(index_list, sort_fct)
+ sort(index_list, sort_fct)
+ sort(index_list, sort_fct)
+ sort(index_list, sort_fct)
+ index = index_list
+end
+
+function out_link(fff, space, name, file, anchor)
+ write(fff, space.."*****"..file.."*"..anchor.."["..name.."]\n")
+end
+
+function print_index()
+ local i, j, c, new_c
+ local fff = openfile(path_build(ANGBAND_DIR_HELP, out_file), "w")
+
+ write(fff,
+[[|||||oy
+#####R /----------------------------------------\
+#####R < Help Index >
+#####R \----------------------------------------/
+
+This is the index of everything in the T.o.M.E. documentation.
+
+#####BHit a letter key to jump to the entries for that letter.
+
+Some entries in the index link to the same place as other entries. This is
+intentional, so that the information you want is easy to find.
+
+Don't forget you can browse the help from the *****help.hlp*02[Main menu].
+
+#####sSpotted a problem with the help files, or some content thats missing?
+#####sContact fearoffours@t-o-m-e.net .
+
+]])
+
+ c = ' '
+ for i = 1, getn(index) do
+ new_c = strbyte(index[i].__name__, 1)
+ if c ~= new_c then
+ c = new_c
+ write(fff, "~~~~~"..c.."\n")
+ write(fff, "*****/"..strchar(c)..out_file.."*"..c.."["..strchar(c).."]\n")
+ end
+ for j = 1, getn(index[i].__table__) do
+ if index[i].__table__[j].__name__ == "__primary__" then
+ out_link(fff, " ", index[i].__name__, index[i].__table__[j].__file__, index[i].__table__[j].__anchor__)
+ end
+ end
+ for j = 1, getn(index[i].__table__) do
+ if index[i].__table__[j].__name__ ~= "__primary__" then
+ out_link(fff, " ", index[i].__table__[j].__name__, index[i].__table__[j].__file__, index[i].__table__[j].__anchor__)
+ end
+ end
+ end
+ closefile(fff)
+end
+
+generate_index()
+
+print_index()
diff --git a/lib/core/gods.lua b/lib/core/gods.lua
new file mode 100644
index 0000000..77e0aad
--- /dev/null
+++ b/lib/core/gods.lua
@@ -0,0 +1,40 @@
+-- Gods helper files
+
+-- Gods structs
+
+__gods_hook = {}
+__gods_callbacks = {}
+__gods_callbacks_max = 0
+
+function add_god(q)
+ local i, index, d, z, qq
+
+ assert(q.name, "No god name")
+ assert(q.desc, "No god desc")
+ assert(q.hooks, "No god hooks")
+
+ i = add_new_gods(q.name);
+
+ z = 0
+ for index, d in q.desc do
+ desc_god(i, z, d);
+ z = z + 1
+ end
+
+ __gods_hook[i] = q.hooks
+ for index, d in q.hooks do
+ add_hook_script(index, "__lua__gods_callback"..__gods_callbacks_max, "__lua__gods_callback"..__gods_callbacks_max)
+ setglobal("__lua__gods_callback"..__gods_callbacks_max, d)
+ __gods_callbacks_max = __gods_callbacks_max + 1
+ end
+ if q.data then
+ for index, d in q.data do
+ -- Besure it exists
+ setglobal(index, d)
+
+ -- Make it save & load
+ add_loadsave(index, d)
+ end
+ end
+ return i
+end
diff --git a/lib/core/help.lua b/lib/core/help.lua
new file mode 100644
index 0000000..a581fe6
--- /dev/null
+++ b/lib/core/help.lua
@@ -0,0 +1,141 @@
+-- Ingame contextual help
+
+-- We use our own hook list as to not overburn the hook proccessor
+-- with many hooks that would slow down things
+-- It would be very meaningless if the option is not even on
+__ingame_hooks = {}
+
+__ingame_help_max = 0
+
+function ingame_help(t, ...)
+ -- This function can also be used to call the callbacks
+ if type(t) == "string" then
+ local f = getglobal("__ingame_help_fct_"..t)
+ call(f, arg)
+ return
+ end
+
+ assert(t.desc or t.fct, "no ingame help desc/fct")
+ assert(t.hook or t.callback, "no ingame help hook/callback")
+ if t.hook then assert(t.event, "no ingame hepl event needed by hook") end
+
+ -- Set it to only trigger once
+ setglobal("__ingame_help_activated_"..__ingame_help_max, FALSE)
+ -- Save/load it
+ add_loadsave("__ingame_help_activated_"..__ingame_help_max, FALSE)
+
+ if t.hook then
+ -- If the hok list didnt exist yet, add it
+ if not __ingame_hooks[t.hook] then
+ -- Set it to empty, we'll fill it later
+ __ingame_hooks[t.hook] = {}
+ -- Add the global hook
+ add_hooks
+ {
+ [t.hook] = function (...)
+ if option_ingame_help ~= TRUE then return end
+ local k, e
+ for k, e in __ingame_hooks[%t.hook] do
+ if k ~= "n" then
+ call(e, arg)
+ end
+ end
+ end
+ }
+ end
+ if t.desc then
+ tinsert(__ingame_hooks[t.hook],
+ function (...)
+ local tbl = %t
+ if getglobal("__ingame_help_activated_"..%__ingame_help_max) == FALSE then
+ if call(tbl.event, arg) == TRUE then
+ local k, e
+ for k, e in tbl.desc do
+ msg_print(TERM_YELLOW, e)
+ end
+ setglobal("__ingame_help_activated_"..%__ingame_help_max, TRUE)
+ end
+ end
+ end
+ )
+ elseif t.fct then
+ tinsert(__ingame_hooks[t.hook],
+ function (...)
+ local tbl = %t
+ if getglobal("__ingame_help_activated_"..%__ingame_help_max) == FALSE then
+ if call(tbl.event, arg) == TRUE then
+ if tbl.fct() == TRUE then
+ setglobal("__ingame_help_activated_"..%__ingame_help_max, TRUE)
+ end
+ end
+ end
+ end
+ )
+ end
+ else
+ local no_test = FALSE
+ if t.no_test == TRUE then no_test = TRUE end
+ if t.desc then
+ setglobal
+ (
+ "__ingame_help_fct_"..(t.callback),
+ function (...)
+ local tbl = %t
+ if ((option_ingame_help == TRUE) or (%no_test == TRUE)) and (getglobal("__ingame_help_activated_"..%__ingame_help_max) == FALSE) then
+ local k, e
+ for k, e in tbl.desc do
+ msg_print(TERM_YELLOW, e)
+ end
+ setglobal("__ingame_help_activated_"..%__ingame_help_max, TRUE)
+ end
+ end
+ )
+ elseif t.fct then
+ setglobal
+ (
+ "__ingame_help_fct_"..(t.callback),
+ function (...)
+ local tbl = %t
+ if ((option_ingame_help == TRUE) or (%no_test == TRUE)) and (getglobal("__ingame_help_activated_"..%__ingame_help_max) == FALSE) then
+ if call(tbl.fct, arg) == TRUE then
+ setglobal("__ingame_help_activated_"..%__ingame_help_max, TRUE)
+ end
+ end
+ end
+ )
+ end
+ end
+
+ __ingame_help_max = __ingame_help_max + 1
+end
+
+-- Clean up the ingame help seen at birth
+add_hooks
+{
+ [HOOK_BIRTH_OBJECTS] = function()
+ local i
+ for i = 0, __ingame_help_max - 1 do
+ setglobal("__ingame_help_activated_"..i, FALSE)
+ end
+ end
+}
+
+function ingame_clean()
+ local i
+ for i = 0, __ingame_help_max - 1 do
+ setglobal("__ingame_help_activated_"..i, FALSE)
+ end
+end
+
+-- helper function, brings up a doc
+function ingame_help_doc(name, anchor)
+ -- Save screen
+ screen_save();
+
+ -- Peruse the help file
+ if not anchor then anchor = 0 end
+ show_file(name, 0, -anchor, 0)
+
+ -- Load screen
+ screen_load()
+end
diff --git a/lib/core/init.lua b/lib/core/init.lua
new file mode 100644
index 0000000..9a9ec1e
--- /dev/null
+++ b/lib/core/init.lua
@@ -0,0 +1,84 @@
+--
+-- This file is loaded at the initialisation of ToME
+-- Load the system functions
+--
+
+-- Name of globals to save
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "load.lua")
+
+-- Very thin xml parser(49 lines ;)
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "xml.lua")
+
+-- various vital helper code
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "util.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "player.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "objects.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "monsters.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "powers.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "building.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "dungeon.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "s_aux.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "crpt_aux.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "mimc_aux.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "quests.lua")
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "gods.lua")
+
+-- Load the ingame contextual help
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "help.lua")
+
+-- let the store specific stuff happen!
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "stores.lua")
+
+--------------------------------------------------------------
+--------------------------------------------------------------
+--------------------------------------------------------------
+-------------Here we load the non vital scripts---------------
+-----------------------from lib/scpt--------------------------
+--------------------------------------------------------------
+--------------------------------------------------------------
+tome_dofile("init.lua")
+
+-- The dofile functions for each patch
+patch_dofile = {}
+
+-- Now load patches
+function load_patches()
+ scansubdir(ANGBAND_DIR_PATCH)
+ for i = 0, scansubdir_max - 1 do
+ if (scansubdir_result[i + 1] ~= ".") and (scansubdir_result[i + 1] ~= "..") then
+ local dir = path_build(ANGBAND_DIR_PATCH, scansubdir_result[i + 1])
+ local file = path_build(dir, "patch.lua")
+ if file_exist(file) == TRUE then
+ patch_init = nil
+ tome_dofile_anywhere(dir, "patch.lua", TRUE)
+ unset_safe_globals()
+ if patch_init == nil then
+ set_safe_globals()
+ quit("Patch in "..file.." did not include a patch_init() function")
+ else
+ set_safe_globals()
+
+ -- create the dofile function
+ patch_dofile[scansubdir_result[i + 1]] = function(f)
+ tome_dofile_anywhere(%dir, f, TRUE)
+ end
+
+ local name, version = patch_init()
+ if name == nil or version == nil then
+ quit("Patch in "..file.." did not return valid name or version.\nIt must return name, version")
+ end
+ patch_version(name, version)
+ end
+ end
+ end
+ end
+end
+load_patches()
+
+--------------------------------------------------------------
+--------------------------------------------------------------
+--------------------------------------------------------------
+--
+-- Do not thouch after this line
+--
+tome_dofile_anywhere(ANGBAND_DIR_CORE, "load2.lua")
diff --git a/lib/core/load.lua b/lib/core/load.lua
new file mode 100644
index 0000000..9522ec9
--- /dev/null
+++ b/lib/core/load.lua
@@ -0,0 +1,37 @@
+-- Savefile stuff
+-- Do not meddle in the affairs of savefiles for they are subtle and quick to be become incompatible
+
+__loadsave_name = {}
+__loadsave_max = 0
+__loadsave_tmp = 0
+
+function add_loadsave(name, default)
+ assert(name, "No variable name to save")
+ assert(default, "No default value")
+
+ -- if it is a table we must create many entries
+ if type(default) == "table" then
+ for k, e in default do
+ add_loadsave(name.."."..k, e)
+ end
+ else
+ __loadsave_name[__loadsave_max] = { name = name, default = default }
+ __loadsave_max = __loadsave_max + 1
+ end
+end
+
+-- Example of how to save a table
+-- NOTE: { 1, 2, 3 } will NOT work, the key MUST be a string
+--[[
+add_loadsave("t",
+{
+ foo = 7,
+ tab = {
+ a = 1,
+ b = 2,
+ tab = {
+ a=1, b=2, c=3,
+ },
+ },
+})
+]]
diff --git a/lib/core/load2.lua b/lib/core/load2.lua
new file mode 100644
index 0000000..7ea432e
--- /dev/null
+++ b/lib/core/load2.lua
@@ -0,0 +1,63 @@
+-- Savefile helpers
+
+-- function called when a key in the variable part ofthe savefile is read
+-- if the key matches what we need, we use it, otehrwise just ignore it
+function __savefile_load(key, val)
+ local index, elem
+
+ for index, elem in __loadsave_name do
+ if (key == elem.name) then
+ dostring(elem.name.." = "..val)
+ end
+ end
+end
+
+function dump_loadsave()
+ local k, e
+ for k, e in __loadsave_name do
+ msg_print(k.." :: ".. e.name.." ["..e.default.."]")
+ end
+end
+
+-- called when the game is saved, can only save numbers
+-- assosiate a key with them to allow the loading code to recognize them
+function __savefile_save()
+ local index, elem
+ for index, elem in __loadsave_name do
+ dostring("__loadsave_tmp = "..elem.name)
+ save_number_key(elem.name, __loadsave_tmp);
+ end
+end
+
+register_savefile(__loadsave_max)
+add_hook_script(HOOK_LOAD_GAME, "__savefile_load", "__hook_load")
+add_hook_script(HOOK_SAVE_GAME, "__savefile_save", "__hook_save")
+
+-- Parse a flattened(i.e: foo.bar.zog) table path and recrate tables
+function reconstruct_table(name)
+ for i = 1, strlen(name) - 1 do
+ if strsub(name, i, i) == "." then
+ local tbl = strsub(name, 1, i - 1)
+
+ if dostring("return "..tbl) == nil then
+ dostring(tbl.."={}")
+ end
+ end
+ end
+end
+
+-- Automagically set unkown variables, otherwise the savefile code
+-- might get VERY upset
+do
+ local k, e
+ -- We need to be able to check for unknown globals
+ unset_safe_globals()
+ for k, e in __loadsave_name do
+ reconstruct_table(e.name)
+ if dostring("return "..(e.name)) == nil then
+ dostring((e.name).." = "..(e.default))
+ end
+ end
+ -- Now taht we did, we set it back, for it is usefull ;)
+ set_safe_globals()
+end
diff --git a/lib/core/mimc_aux.lua b/lib/core/mimc_aux.lua
new file mode 100644
index 0000000..c37a869
--- /dev/null
+++ b/lib/core/mimc_aux.lua
@@ -0,0 +1,95 @@
+-- Mimic shapes helper file
+
+__mimics = {}
+__mimics_max = 1
+__mimics_names = {}
+
+function add_mimic_shape(t)
+ assert(t.name, "no mimic name")
+ assert(t.desc, "no mimic desc")
+ assert(t.calc, "no mimic calc")
+ assert(t.level, "no mimic level")
+ assert(t.duration, "no mimic duration")
+
+ if not t.limit then t.limit = 0 end
+
+ if not t.obj_name then
+ t.obj_name = t.name
+ end
+
+ t.show_name = '['..t.name..']'
+
+ -- if it needs hooks, add them
+ if t.hooks then
+ add_hooks(t.hooks)
+ end
+
+ -- Add it in a name to index hash table
+ __mimics_names[t.name] = __mimics_max
+
+ __mimics[__mimics_max] = t
+ __mimics_max = __mimics_max + 1
+end
+
+function resolve_mimic_name(name)
+ if __mimics_names[name] then
+ return __mimics_names[name]
+ else
+ return -1
+ end
+end
+
+function find_random_mimic_shape(level, limit, realm)
+ local mimic, tries
+
+ tries = 1000
+ while tries > 0 do
+ tries = tries - 1
+ mimic = rand_range(1, __mimics_max - 1)
+ if (not realm) or (__mimics[mimic].realm == realm) then
+ if limit >= __mimics[mimic].limit then
+ if (rand_int(__mimics[mimic].level * 3) < level) and (__mimics[mimic].rarity < 100) and (magik(100 - __mimics[mimic].rarity) == TRUE) then
+ break
+ end
+ end
+ end
+ end
+ if tries > 0 then
+ return mimic
+ else
+ return resolve_mimic_name("Abomination")
+ end
+end
+
+function get_mimic_info(mimic, info)
+ if not __mimics[mimic] then return 0 end
+ return __mimics[mimic][info]
+end
+
+function get_mimic_rand_dur(mimic)
+ return rand_range(__mimics[mimic].duration[1], __mimics[mimic].duration[2])
+end
+
+function calc_mimic(mimic)
+ return __mimics[mimic].calc()
+end
+
+function calc_mimic_power(mimic)
+ if __mimics[mimic].power then __mimics[mimic].power() end
+end
+
+--- Here comes the only vital shape
+
+add_mimic_shape
+{
+ ["name"] = "Abomination",
+ ["obj_name"] = "Abominable Cloak",
+ ["desc"] = "Abominations are failed experiments of powerful wizards.",
+ ["realm"] = nil,
+ ["level"] = 1,
+ ["rarity"] = 101,
+ ["duration"] = {20, 100},
+ ["calc"] = function ()
+ apply_flags(TR1_SPEED + TR1_STR + TR1_INT + TR1_WIS + TR1_DEX + TR1_CON + TR1_CHR, 0, TR3_AGGRAVATE, 0, 0, 0, -10)
+ end,
+}
diff --git a/lib/core/monsters.lua b/lib/core/monsters.lua
new file mode 100644
index 0000000..ca2851a
--- /dev/null
+++ b/lib/core/monsters.lua
@@ -0,0 +1,16 @@
+-- SYSTEM FILE
+--
+-- Monster stuff, do not touch
+--
+
+function summon_monster(y, x, lev, friend, typ)
+ if type(typ) == "number" then
+ if friend == TRUE then
+ return summon_specific_friendly(y, x, lev, typ, FALSE)
+ else
+ return summon_specific(y, x, lev, typ)
+ end
+ else
+ return summon_monster_aux(y, x, lev, friend, typ)
+ end
+end
diff --git a/lib/core/objects.lua b/lib/core/objects.lua
new file mode 100644
index 0000000..97320b8
--- /dev/null
+++ b/lib/core/objects.lua
@@ -0,0 +1,45 @@
+-- SYSTEM FILE
+--
+-- Lua object funtions
+--
+
+function create_object(tval, sval)
+ local obj = new_object()
+ object_prep(obj, lookup_kind(tval, sval))
+ return (obj)
+end
+
+function set_item_tester(tester)
+ if tolua.type(tester) == "number" then
+ lua_set_item_tester(tester, "")
+ end
+ if tolua.type(tester) == "string" then
+ lua_set_item_tester(0, tester)
+ end
+ if tolua.type(tester) == "function" then
+ __get_item_hook_default = tester
+ lua_set_item_tester(0, "__get_item_hook_default")
+ end
+end
+
+function create_artifact(a_idx)
+ local obj
+ local tval, sval
+
+ tval = a_info[a_idx + 1].tval
+ sval = a_info[a_idx + 1].sval
+ obj = create_object(tval, sval)
+ obj.name1 = a_idx
+ apply_magic(obj, -1, TRUE, TRUE, TRUE)
+
+ return (obj)
+end
+
+function get_kind(obj)
+ return k_info[obj.k_idx + 1]
+end
+
+function get_item(ask, deny, flags, mask)
+ set_item_tester(mask)
+ return get_item_aux(0, ask, deny, flags)
+end
diff --git a/lib/core/player.lua b/lib/core/player.lua
new file mode 100644
index 0000000..3017d94
--- /dev/null
+++ b/lib/core/player.lua
@@ -0,0 +1,140 @@
+-- SYSTEM FILE
+--
+-- Lua player funtions
+--
+
+-- Gods
+function deity(i)
+ return deity_info[1 + i]
+end
+
+-------- skill stuff ---------
+
+-- Easy skill access
+function skill(i)
+ return s_info[i + 1]
+end
+
+-- Sart a lasting spell
+function player.start_lasting_spell(spl)
+ player.music_extra = -spl
+end
+
+-- stat mods
+function player.modify_stat(stat, inc)
+ player.stat_add[1 + stat] = player.stat_add[1 + stat] + inc
+end
+
+-- powers mods
+function player.add_power(pow)
+ player.powers[1 + pow] = TRUE
+end
+
+-- easier inventory access
+function player.inventory(i)
+ return player.inventory_real[i + 1]
+end
+
+-- modify mana
+-- returns TRUE if there is a pb
+function increase_mana(amt)
+ player.csp = player.csp + amt
+ player.redraw = bor(player.redraw, PR_MANA)
+ if (player.csp < 0) then
+ player.csp = 0
+ return TRUE
+ end
+ if (player.csp > player.msp) then
+ player.csp = player.msp
+ end
+ return FALSE
+end
+
+
+-- Return the coordinates of the player whether in wild or not
+function player.get_wild_coord()
+ if player.wild_mode == TRUE then
+ return player.py, player.px
+ else
+ return player.wilderness_y, player.wilderness_x
+ end
+end
+
+-- Create a new power
+__power_fct = {}
+function add_power(p)
+ local i
+
+ assert(p.name, "No power name!")
+ assert(p.desc, "No power desc!")
+ assert(p.desc_get, "No power desc get!")
+ assert(p.desc_lose, "No power desc lose!")
+ assert(p.stat, "No power stat!")
+ assert(p.level, "No power level!")
+ assert(p.cost, "No power cost!")
+ assert(p.fail, "No power fail!")
+ assert(p.power, "No power power!")
+
+ i = add_new_power(p.name, p.desc, p.desc_get, p.desc_lose, p.level, p.cost, p.stat, p.fail)
+ __power_fct[i] = p.power
+ return i
+end
+
+function __power_fct_activate(power)
+ if __power_fct[power] then
+ __power_fct[power]()
+ return TRUE
+ else
+ return FALSE
+ end
+end
+
+-- Register in the hook list
+add_hook_script(HOOK_ACTIVATE_POWER, "__power_fct_activate", "__power_fct_activate")
+
+
+--- Mkeys
+
+-- Create a new power
+__mkey_fct = {}
+function add_mkey(p)
+ local i
+
+ assert(p.mkey, "No mkey mkey!")
+ assert(p.fct, "No mkeey fct!")
+
+ __mkey_fct[p.mkey] = p.fct
+end
+
+function __mkey_fct_activate(power)
+ if __mkey_fct[power] then
+ __mkey_fct[power]()
+ return TRUE
+ else
+ return FALSE
+ end
+end
+
+-- Register in the hook list
+add_hook_script(HOOK_MKEY, "__mkey_fct_activate", "__mkey_fct_activate")
+
+
+-- Subraces
+function subrace(racem)
+ return race_mod_info[racem + 1]
+end
+
+function subrace_add_power(subrace, power)
+ for i = 1, 4 do
+ if subrace.powers[i] == -1 then
+ subrace.powers[i] = power
+ return not nil
+ end
+ end
+ return nil
+end
+
+-- Body parts
+function player.add_body_part(part, nb)
+ player.extra_body_parts[part + 1] = player.extra_body_parts[part + 1] + nb
+end
diff --git a/lib/core/powers.lua b/lib/core/powers.lua
new file mode 100644
index 0000000..839a921
--- /dev/null
+++ b/lib/core/powers.lua
@@ -0,0 +1,105 @@
+--
+-- Helper functions for magic powers
+--
+
+__magic_powers = {}
+
+function add_magic(m)
+ local i, ret
+
+ if type(m.spell_list) ~= "table" then
+ error("add_magic called without a table")
+ end
+
+ -- Ok iterate over all the powers to add
+ local index, p, max
+
+ -- First, count them
+ max = 0
+ for index, p in m.spell_list do
+ max = max + 1
+ end
+
+ -- Now register it
+ ret = {}
+ i = new_magic_power(max)
+ ret.spells = i
+ ret.max = max
+ ret.fail_fct = m.fail
+ if m.stat then
+ ret.stat = m.stat
+ else
+ ret.stat = A_INT
+ end
+ if m.get_level then
+ ret.get_current_level = m.get_level
+ else
+ ret.get_current_level = function()
+ return player.lev
+ end
+ end
+
+ -- And add each spells
+ max = 0
+ ret.info = {}
+ ret.spell = {}
+ for index, p in m.spell_list do
+ assert(p.name, "No name for the spell!")
+ assert(p.desc, "No desc for the spell!")
+ assert(p.mana, "No mana for the spell!")
+ assert(p.level, "No level for the spell!")
+ assert(p.fail, "No fail for the spell!")
+ assert(p.info, "No info for the spell!")
+ assert(p.spell, "No spell for the spell!")
+
+ get_magic_power(i, max).name = p.name
+ get_magic_power(i, max).desc = p.desc
+ get_magic_power(i, max).mana_cost = p.mana
+ get_magic_power(i, max).min_lev = p.level
+ get_magic_power(i, max).fail = p.fail
+ ret.info[max] = p.info
+ ret.spell[max] = p.spell
+
+ max = max + 1
+ end
+
+ return ret
+end
+
+function __get_magic_info(power)
+ return __current_magic_power_info[power]()
+end
+
+function execute_magic(m)
+ local sn, ret
+
+ -- Ask for a spell
+ __current_magic_power_info = m.info
+ ret, sn = select_magic_power(0, m.spells, m.max, "__get_magic_info", m.get_current_level(), m.stat)
+ if (ret == FALSE) then return end
+
+ -- Verify mana needs
+ if (get_magic_power(m.spells, sn).mana_cost > player.csp) then msg_print("Not enough mana!") return end
+
+ -- Verify failure(second parameter is optional)
+ if m.fail then
+ __current_magic_power_fail = m.fail_fct
+ if (magic_power_sucess(get_magic_power(m.spells, sn), m.stat, "__current_magic_power_fail") == FALSE) then return end
+ else
+ if (magic_power_sucess(get_magic_power(m.spells, sn), m.stat) == FALSE) then return end
+ end
+
+ -- Actually cast the spells
+ m.spell[sn]()
+
+ -- use up some mana
+ increase_mana(-get_magic_power(m.spells, sn).mana_cost)
+end
+
+-- Get the level of a power
+function get_level_power(s, max, min)
+ if not max then max = 50 end
+ if not min then min = 1 end
+
+ return value_scale(s.get_current_level(), 50, max, min)
+end
diff --git a/lib/core/quests.lua b/lib/core/quests.lua
new file mode 100644
index 0000000..dfe9db5
--- /dev/null
+++ b/lib/core/quests.lua
@@ -0,0 +1,57 @@
+-- Quest helper files
+
+-- Quest structs
+
+__quest_hook = {}
+__quest_callbacks = {}
+__quest_callbacks_max = 0
+__quest_dynamic_desc = {}
+
+function add_quest(q)
+ local i, index, d, z, qq
+
+ assert(q.global, "No quest global name")
+ assert(q.name, "No quest name")
+ assert(q.desc, "No quest desc")
+ assert(q.level, "No quest level")
+ assert(q.hooks, "No quest hooks")
+
+ i = new_quest(q.name);
+ setglobal(q.global, i)
+
+ -- Make it save & load
+ add_loadsave("quest("..q.global..").status", QUEST_STATUS_UNTAKEN)
+
+ if type(q.desc) == "table" then
+ z = 0
+ for index, d in q.desc do
+ quest_desc(i, z, d);
+ z = z + 1
+ end
+ else
+ __quest_dynamic_desc[i] = q.desc
+ quest(i).dynamic_desc = TRUE
+ end
+ quest(i).level = q.level
+ if not q.silent then
+ quest(i).silent = FALSE
+ else
+ quest(i).silent = q.silent
+ end
+ __quest_hook[i] = q.hooks
+ for index, d in q.hooks do
+ add_hook_script(index, "__lua__quest_callback"..__quest_callbacks_max, "__lua__quest_callback"..__quest_callbacks_max)
+ setglobal("__lua__quest_callback"..__quest_callbacks_max, d)
+ __quest_callbacks_max = __quest_callbacks_max + 1
+ end
+ if q.data then
+ for index, d in q.data do
+ -- Besure it exists
+ setglobal(index, d)
+
+ -- Make it save & load
+ add_loadsave(index, d)
+ end
+ end
+ return i
+end
diff --git a/lib/core/s_aux.lua b/lib/core/s_aux.lua
new file mode 100644
index 0000000..abd1269
--- /dev/null
+++ b/lib/core/s_aux.lua
@@ -0,0 +1,742 @@
+-- Functions to help with spells, do not touch
+
+__schools = {}
+__schools_num = 0
+
+__tmp_spells = {}
+__tmp_spells_num = 0
+
+function add_school(s)
+ __schools[__schools_num] = s
+
+ __schools_num = __schools_num + 1
+ return (__schools_num - 1)
+end
+
+function finish_school(i)
+ local s
+
+ s = __schools[i]
+ assert(s.name, "No school name!")
+ assert(s.skill, "No school skill!")
+
+ -- Need hooks?
+ if s.hooks then
+ add_hooks(s.hooks)
+ end
+
+ new_school(i, s.name, s.skill)
+end
+
+function add_spell(s)
+ __tmp_spells[__tmp_spells_num] = s
+
+ __tmp_spells_num = __tmp_spells_num + 1
+ return (__tmp_spells_num - 1)
+end
+
+function finish_spell(must_i)
+ local i, s
+
+ s = __tmp_spells[must_i]
+ assert(s.name, "No spell name!")
+ assert(s.school, "No spell school!")
+ assert(s.level, "No spell level!")
+ assert(s.mana, "No spell mana!")
+ if not s.mana_max then s.mana_max = s.mana end
+ assert(s.fail, "No spell failure rate!")
+ assert(s.spell, "No spell function!")
+ if not s.info then s.info = function() return "" end end
+ assert(s.desc, "No spell desc!")
+ if not s.random then s.random = SKILL_MAGIC end
+ if s.lasting then
+ assert(type(s.lasting) == "function", "Spell lasting is not function")
+ end
+ if s.stick then
+ local k, e
+ for k, e in s.stick do
+ if type(k) == "table" then
+ assert(e.base_level, "Arg no stick base level")
+ assert(e.max_level, "Arg no stick max level")
+ end
+ end
+ end
+
+ i = new_spell(must_i, s.name)
+ assert(i == must_i, "ACK ! i != must_i ! please contact the maintainer")
+ if type(s.school) == "number" then __spell_school[i] = {s.school}
+ else __spell_school[i] = s.school end
+ spell(i).mana = s.mana
+ spell(i).mana_max = s.mana_max
+ spell(i).fail = s.fail
+ spell(i).skill_level = s.level
+ __spell_spell[i] = s.spell
+ __spell_info[i] = s.info
+ __spell_desc[i] = s.desc
+ return i
+end
+
+-- Creates the school books array
+__spell_spell = {}
+__spell_info = {}
+__spell_desc = {}
+__spell_school = {}
+school_book = {}
+
+-- Find a spell by name
+function find_spell(name)
+ local i
+
+ i = 0
+ while (i < __tmp_spells_num) do
+ if __tmp_spells[i].name == name then return i end
+ i = i + 1
+ end
+ return -1
+end
+
+-- Find if the school is under the influence of a god, returns nil or the level
+function get_god_level(sch)
+ if __schools[sch].gods[player.pgod] then
+ return (s_info[__schools[sch].gods[player.pgod].skill + 1].value * __schools[sch].gods[player.pgod].mul) / __schools[sch].gods[player.pgod].div
+ else
+ return nil
+ end
+end
+
+-- Change this fct if I want to switch to learnable spells
+function get_level_school(s, max, min)
+ local lvl, sch, index, num, bonus
+ local allow_spell_power = TRUE
+
+ lvl = 0
+ num = 0
+ bonus = 0
+
+ -- No max specified ? assume 50
+ if not max then
+ max = 50
+ end
+ if not min then
+ min = 1
+ end
+
+ -- Do we pass tests?
+ if __tmp_spells[s].depend then
+ if __tmp_spells[s].depend() ~= TRUE then
+ return min, "n/a"
+ end
+ end
+
+ for index, sch in __spell_school[s] do
+ local r, s, p, ok = 0, 0, 0, 0
+
+ -- Does it require we worship a specific god?
+ if __schools[sch].god then
+ if __schools[sch].god ~= player.pgod then
+ if min then return min, "n/a"
+ else return 1, "n/a" end
+ end
+ end
+
+ -- Take the basic skill value
+ r = s_info[(school(sch).skill) + 1].value
+
+ -- Do we pass tests?
+ if __schools[sch].depend then
+ if __schools[sch].depend() ~= TRUE then
+ return min, "n/a"
+ end
+ end
+
+ -- Are we under sorcery effect ?
+ if __schools[sch].sorcery then
+ s = s_info[SKILL_SORCERY + 1].value
+ end
+
+ -- Are we affected by spell power ?
+ -- All teh schools must allow it for it to work
+ if not __schools[sch].spell_power then
+ allow_spell_power = nil
+ end
+
+ -- Are we under a god effect ?
+ if __schools[sch].gods then
+ p = get_god_level(sch)
+ if not p then p = 0 end
+ end
+
+ -- Find the higher
+ ok = r
+ if ok < s then ok = s end
+ if ok < p then ok = p end
+
+ -- Do we need to add a special bonus ?
+ if __schools[sch].bonus_level then
+ bonus = bonus + (__schools[sch].bonus_level() * (SKILL_STEP / 10))
+ end
+
+ -- All schools must be non zero to be able to use it
+ if ok == 0 then return min, "n/a" end
+
+ -- Apply it
+ lvl = lvl + ok
+ num = num + 1
+ end
+
+ -- Add the Spellpower skill as a bonus
+ if allow_spell_power then
+ bonus = bonus + (get_skill_scale(SKILL_SPELL, 20) * (SKILL_STEP / 10))
+ end
+
+ -- Add bonus from objects
+ bonus = bonus + (player.to_s * (SKILL_STEP / 10))
+
+ -- / 10 because otherwise we can overflow a s32b and we can use a u32b because the value can be negative
+ -- The loss of information should be negligible since 1 skill = 1000 internally
+ lvl = (lvl / num) / 10
+ lvl = lua_get_level(s, lvl, max, min, bonus)
+
+ return lvl, nil
+end
+
+-- This is the function to use when casting through a stick
+function get_level_device(s, max, min)
+ local lvl
+
+ -- No max specified ? assume 50
+ if not max then
+ max = 50
+ end
+
+ lvl = s_info[SKILL_DEVICE + 1].value
+ lvl = lvl + (get_level_use_stick * SKILL_STEP)
+
+ -- Sticks are limited
+ if lvl - ((spell(s).skill_level + 1) * SKILL_STEP) >= get_level_max_stick * SKILL_STEP then
+ lvl = (get_level_max_stick + spell(s).skill_level - 1) * SKILL_STEP
+ end
+
+ -- / 10 because otherwise we can overflow a s32b and we can use a u32b because the value can be negative
+ -- The loss of information should be negligible since 1 skill = 1000 internally
+ lvl = lvl / 10
+ if not min then
+ lvl = lua_get_level(s, lvl, max, 1, 0)
+ else
+ lvl = lua_get_level(s, lvl, max, min, 0)
+ end
+
+ return lvl
+end
+
+-- The real get_level, works for schooled magic and for innate powers
+get_level_use_stick = -1
+get_level_max_stick = -1
+function get_level(s, max, min)
+ if type(s) == "number" then
+ -- Ahah shall we use Magic device instead ?
+ if get_level_use_stick > -1 then
+ return get_level_device(s, max, min)
+ else
+ local lvl, na = get_level_school(s, max, min)
+ return lvl
+ end
+ else
+ return get_level_power(s, max, min)
+ end
+end
+
+-- Can we cast the spell ?
+function is_ok_spell(s, obj)
+ if get_level(s, 50, 0) == 0 then return nil end
+ if __tmp_spells[s].pval and obj.pval < __tmp_spells[s].pval then return nil end
+ return 1
+end
+
+-- Get the amount of mana(or power) needed
+function get_mana(s)
+ return spell(s).mana + get_level(s, spell(s).mana_max - spell(s).mana, 0)
+end
+
+-- Return the amount of power(mana, piety, whatever) for the spell
+function get_power(s)
+ if check_affect(s, "piety", FALSE) then
+ return player.grace
+ else
+ return player.csp
+ end
+end
+
+-- Return the amount of power(mana, piety, whatever) for the spell
+function get_power_name(s)
+ if check_affect(s, "piety", FALSE) then
+ return "piety"
+ else
+ return "mana"
+ end
+end
+
+-- Changes the amount of power(mana, piety, whatever) for the spell
+function adjust_power(s, x)
+ if check_affect(s, "piety", FALSE) then
+ inc_piety(GOD_ALL, x)
+ else
+ increase_mana(x)
+ end
+end
+
+-- Print the book and the spells
+function print_book(book, spl, obj)
+ local x, y, index, sch, size, s
+
+ x = 0
+ y = 2
+ size = 0
+
+ -- Hack if the book is 255 it is a random book
+ if book == 255 then
+ school_book[book] = {spl}
+ end
+
+ -- Parse all spells
+ for index, s in school_book[book] do
+ local color = TERM_L_DARK
+ local lvl, na = get_level_school(s, 50, -50)
+ local xx, sch_str
+
+ if is_ok_spell(s, obj) then
+ if get_mana(s) > get_power(s) then color = TERM_ORANGE
+ else color = TERM_L_GREEN end
+ end
+
+ xx = nil
+ sch_str = ""
+ for index, sch in __spell_school[s] do
+ if xx then
+ sch_str = sch_str.."/"..school(sch).name
+ else
+ xx = 1
+ sch_str = sch_str..school(sch).name
+ end
+ end
+
+ if na then
+ c_prt(color, format("%c) %-20s%-16s %3s %4s %3d%s %s", size + strbyte("a"), spell(s).name, sch_str, na, get_mana(s), spell_chance(s), "%", __spell_info[s]()), y, x)
+ else
+ c_prt(color, format("%c) %-20s%-16s %3d %4s %3d%s %s", size + strbyte("a"), spell(s).name, sch_str, lvl, get_mana(s), spell_chance(s), "%", __spell_info[s]()), y, x)
+ end
+ y = y + 1
+ size = size + 1
+ end
+ prt(format(" %-20s%-16s Level Cost Fail Info", "Name", "School"), 1, x)
+ return y
+end
+
+-- Output the describtion when it is used as a spell
+function print_spell_desc(s, y)
+ local index, desc, x
+
+ x = 0
+
+ if type(__spell_desc[s]) == "string" then c_prt(TERM_L_BLUE, __spell_desc[s], y, x)
+ else
+ for index, desc in __spell_desc[s] do
+ c_prt(TERM_L_BLUE, desc, y, x)
+ y = y + 1
+ end
+ end
+ if check_affect(s, "piety", FALSE) then
+ c_prt(TERM_L_WHITE, "It uses piety to cast.", y, x)
+ y = y + 1
+ end
+ if not check_affect(s, "blind") then
+ c_prt(TERM_ORANGE, "It is castable even while blinded.", y, x)
+ y = y + 1
+ end
+ if not check_affect(s, "confusion") then
+ c_prt(TERM_ORANGE, "It is castable even while confused.", y, x)
+ y = y + 1
+ end
+end
+
+-- Output the desc when sued as a device
+function print_device_desc(s)
+ local index, desc
+
+ if type(__spell_desc[s]) == "string" then text_out(__spell_desc[s])
+ else
+ for index, desc in __spell_desc[s] do
+ text_out("\n" .. desc)
+ end
+ end
+end
+
+function book_spells_num(book)
+ local size, index, sch
+
+ size = 0
+
+ -- Hack if the book is 255 it is a random book
+ if book == 255 then
+ return 1
+ end
+
+ -- Parse all spells
+ for index, s in school_book[book] do
+ size = size + 1
+ end
+ return size
+end
+
+function spell_x(book, spl, s)
+ if book == 255 then
+ return spl
+ else
+ local i, x, val
+
+ i, val = next(school_book[book], nil)
+ x = 0
+ while x < s do
+ i, val = next(school_book[book], i)
+ x = x + 1
+ end
+ return val
+ end
+end
+
+function spell_in_book(book, spell)
+ local i, s
+
+ for i, s in school_book[book] do
+ if s == spell then return TRUE end
+ end
+ return FALSE
+end
+
+-- Returns spell chance of failure for spell
+function spell_chance(s)
+ local chance, s_ptr
+
+ s_ptr = spell(s)
+
+ -- Extract the base spell failure rate
+ if get_level_use_stick > -1 then
+ chance = lua_spell_device_chance(s_ptr.fail, get_level(s, 50), s_ptr.skill_level)
+ else
+ chance = lua_spell_chance(s_ptr.fail, get_level(s, 50), s_ptr.skill_level, get_mana(s), get_power(s), get_spell_stat(s))
+ end
+
+ -- Return the chance
+ return chance
+end
+
+function check_affect(s, name, default)
+ local s_ptr = __tmp_spells[s]
+ local a
+
+ if type(s_ptr[name]) == "number" then
+ a = s_ptr[name]
+ else
+ a = default
+ end
+ if a == FALSE then
+ return nil
+ else
+ return TRUE
+ end
+end
+
+-- Returns the stat to use for the spell, INT by default
+function get_spell_stat(s)
+ if not __tmp_spells[s].stat then return A_INT
+ else return __tmp_spells[s].stat end
+end
+
+function cast_school_spell(s, s_ptr, no_cost)
+ local use = FALSE
+
+ -- No magic
+ if (player.antimagic > 0) then
+ msg_print("Your anti-magic field disrupts any magic attempts.")
+ return
+ end
+
+ -- No magic
+ if (player.anti_magic == TRUE) then
+ msg_print("Your anti-magic shell disrupts any magic attempts.")
+ return
+ end
+
+ -- if it costs something then some condition must be met
+ if not no_cost then
+ -- Require lite
+ if (check_affect(s, "blind")) and ((player.blind > 0) or (no_lite() == TRUE)) then
+ msg_print("You cannot see!")
+ return
+ end
+
+ -- Not when confused
+ if (check_affect(s, "confusion")) and (player.confused > 0) then
+ msg_print("You are too confused!")
+ return
+ end
+
+ -- Enough mana
+ if (get_mana(s) > get_power(s)) then
+ if (get_check("You do not have enough "..get_power_name(s)..", do you want to try anyway?") == FALSE) then return end
+ end
+
+ -- Invoke the spell effect
+ if (magik(spell_chance(s)) == FALSE) then
+ if (__spell_spell[s]() ~= nil) then
+ use = TRUE
+ end
+ else
+ local index, sch
+
+ -- added because this is *extremely* important --pelpel
+ if (flush_failure) then flush() end
+
+ msg_print("You failed to get the spell off!")
+ for index, sch in __spell_school[s] do
+ if __schools[sch].fail then
+ __schools[sch].fail(spell_chance(s))
+ end
+ end
+ use = TRUE
+ end
+ else
+ __spell_spell[s]()
+ end
+
+ if use == TRUE then
+ -- Reduce mana
+ adjust_power(s, -get_mana(s))
+
+ -- Take a turn
+ if is_magestaff() == TRUE then energy_use = 80
+ else energy_use = 100 end
+ end
+
+ player.redraw = bor(player.redraw, PR_MANA)
+ player.window = bor(player.window, PW_PLAYER)
+end
+
+
+-- Helper functions
+HAVE_ARTIFACT = 0
+HAVE_OBJECT = 1
+HAVE_EGO = 2
+function have_object(mode, type, find, find2)
+ local o, i, min, max
+
+ max = 0
+ min = 0
+ if band(mode, USE_EQUIP) == USE_EQUIP then
+ min = INVEN_WIELD
+ max = INVEN_TOTAL
+ end
+ if band(mode, USE_INVEN) == USE_INVEN then
+ min = 0
+ if max == 0 then max = INVEN_WIELD end
+ end
+
+ i = min
+ while i < max do
+ o = get_object(i)
+ if o.k_idx ~= 0 then
+ if type == HAVE_ARTIFACT then
+ if find == o.name1 then return i end
+ end
+ if type == HAVE_OBJECT then
+ if find2 == nil then
+ if find == o.k_idx then return i end
+ else
+ if (find == o.tval) and (find2 == o.sval) then return i end
+ end
+ end
+ if type == HAVE_EGO then
+ if (find == o.name2) or (find == o.name2b) then return i end
+ end
+ end
+ i = i + 1
+ end
+ return -1
+end
+
+-- Can the spell be randomly found(in random books)
+function can_spell_random(i)
+ return __tmp_spells[i].random
+end
+
+-- Find a random spell
+function get_random_spell(typ, level)
+ local spl, tries
+
+ tries = 1000
+ while tries > 0 do
+ tries = tries - 1
+ spl = rand_int(__tmp_spells_num)
+ if (can_spell_random(spl) == typ) and (rand_int(spell(spl).skill_level * 3) < level) then
+ break
+ end
+ end
+ if tries > 0 then
+ return spl
+ else
+ return -1
+ end
+end
+
+-- Execute a lasting spell
+function exec_lasting_spell(spl)
+ assert(__tmp_spells[spl].lasting, "No lasting effect for spell "..__tmp_spells[spl].name.." but called as such")
+ return __tmp_spells[spl].lasting()
+end
+
+-- Helper function for spell effect to know if they are or not obvious
+function is_obvious(effect, old)
+ if old then
+ if old == TRUE or effect == TRUE then
+ return TRUE
+ else
+ return FALSE
+ end
+ else
+ return effect
+ end
+end
+
+-------------------------Sticks-------------------------
+
+-- Fire off the spell
+function activate_stick(spl)
+ local ret = __spell_spell[spl]()
+ local charge, obvious
+ if not ret then
+ charge = FALSE
+ obvious = FALSE
+ else
+ charge = TRUE
+ obvious = ret
+ end
+ return obvious, charge
+end
+
+----------------------------------- Wand, Staves, Rods specific functions ----------------------------
+
+-- Get a spell for a given stick(wand, staff, rod)
+function get_random_stick(stick, level)
+ local spl, tries
+
+ tries = 1000
+ while tries > 0 do
+ tries = tries - 1
+ spl = rand_int(__tmp_spells_num)
+ if __tmp_spells[spl].stick and (type(__tmp_spells[spl].stick[stick]) == "table") then
+ if (rand_int(spell(spl).skill_level * 3) < level) and (magik(100 - __tmp_spells[spl].stick[stick].rarity) == TRUE) then
+ break
+ end
+ end
+ end
+ if tries > 0 then
+ return spl
+ else
+ return -1
+ end
+end
+
+-- Get a random base level
+function get_stick_base_level(stick, level, spl)
+ -- Paranoia
+ if spl < 0 or spl >= __tmp_spells_num or not __tmp_spells[spl].stick[stick] then return 0 end
+
+ local min, max = __tmp_spells[spl].stick[stick].base_level[1], __tmp_spells[spl].stick[stick].base_level[2]
+ local range = max - min;
+
+ -- Ok the basic idea is to have a max possible level of half the dungeon level
+ if range * 2 > level then range = level / 2 end
+
+ -- Randomize a bit
+ range = m_bonus(range, dun_level)
+
+ -- And get the result
+ return min + range
+end
+
+-- Get a random max level
+function get_stick_max_level(stick, level, spl)
+ -- Paranoia
+ if spl < 0 or spl >= __tmp_spells_num or not __tmp_spells[spl].stick[stick] then return 0 end
+
+ local min, max = __tmp_spells[spl].stick[stick].max_level[1], __tmp_spells[spl].stick[stick].max_level[2]
+ local range = max - min;
+
+ -- Ok the basic idea is to have a max possible level of half the dungeon level
+ if range * 2 > level then range = level / 2 end
+
+ -- Randomize a bit
+ range = m_bonus(range, dun_level)
+
+ -- And get the result
+ return min + range
+end
+
+-- Get the number of desired charges
+function get_stick_charges(spl)
+ return __tmp_spells[spl].stick.charge[1] + randint(__tmp_spells[spl].stick.charge[2]);
+end
+
+-- Get activation desc
+function get_activation_desc(spl)
+ local turns
+ if type(__tmp_spells[spl].activate) == 'number' then
+ turns = __tmp_spells[spl].activate
+ else
+ turns = __tmp_spells[spl].activate[1] .. '+d' .. __tmp_spells[spl].activate[2]
+ end
+ return __tmp_spells[spl].desc[1] .. ' every ' .. turns .. ' turns'
+end
+
+-- Compute the timeout of an activation
+function get_activation_timeout(spl)
+ if type(__tmp_spells[spl].activate) == 'number' then
+ return __tmp_spells[spl].activate
+ else
+ return __tmp_spells[spl].activate[1] + randint(__tmp_spells[spl].activate[2])
+ end
+end
+
+-- Fire off the spell
+function activate_activation(spl, item)
+ __spell_spell[spl](item)
+end
+
+
+------- Add new GF type ----------
+max_gf = MAX_GF
+function add_spell_type(t)
+ t.index = max_gf
+ max_gf = max_gf + 1
+ assert(t.color, "No GF color")
+ if not t.monster then t.monster = function() end end
+ if not t.angry then t.angry = function() end end
+ if not t.object then t.object = function() end end
+ if not t.player then t.player = function() end end
+ if not t.grid then t.grid = function() end end
+
+ add_hooks
+ {
+ [HOOK_GF_COLOR] = function (gf, new_gfx)
+ local t = %t
+ if gf == t.index then return TRUE, t.color[new_gfx + 1] end
+ end,
+ [HOOK_GF_EXEC] = function (action, who, gf, dam, rad, y, x, extra)
+ local t = %t
+ if t.index == gf then
+ return t[action](who, dam, rad, y, x, extra)
+ end
+ end,
+ }
+ return t.index
+end
diff --git a/lib/core/stores.lua b/lib/core/stores.lua
new file mode 100644
index 0000000..d4a6316
--- /dev/null
+++ b/lib/core/stores.lua
@@ -0,0 +1,32 @@
+-- Take care of all concerning stores
+function store_buy_list(t)
+ assert(type(t) == "table", "store_buy_list got no table")
+ add_hooks
+ {
+ [HOOK_STORE_BUY] = function (index, name, obj)
+ local tbl = %t
+ local elt = tbl[index]
+ if not elt then
+ elt = tbl[name]
+ end
+ if elt then
+ if elt then
+ if type(elt) == "function" then
+ return TRUE, elt(obj)
+ elseif type(elt) == "table" then
+ local k, e
+ for k, e in elt do
+ if type(e) == "number" then
+ if obj.tval == e then return TRUE, TRUE end
+ else
+ if (obj.tval == e[1]) and (obj.sval >= e[2]) and (obj.sval <= e[3]) then return TRUE, TRUE end
+ end
+ end
+ elseif elt == -1 then
+ return TRUE, FALSE
+ end
+ end
+ end
+ end,
+ }
+end
diff --git a/lib/core/util.lua b/lib/core/util.lua
new file mode 100644
index 0000000..997f1eb
--- /dev/null
+++ b/lib/core/util.lua
@@ -0,0 +1,257 @@
+-- various stuff to make scripters life easier
+
+-- Beware of the scary undefined globals
+function safe_getglobal(x)
+ local v = rawget(globals(), x)
+
+ if v then
+ return v
+ else
+ error("undefined global variable '"..x.."'")
+ end
+end
+
+function set_safe_globals()
+ settagmethod(tag(nil), "getglobal", safe_getglobal)
+end
+function unset_safe_globals()
+ settagmethod(tag(nil), "getglobal", nil)
+end
+
+set_safe_globals()
+
+-- Patch modules
+__patch_modules = {}
+
+function patch_version(name, version)
+ assert(not __patch_modules[name], "Patch " .. name .. " already loaded!!!")
+ __patch_modules[name] = version
+end
+
+function patchs_list()
+ local k, e, first
+ first = FALSE
+ for k, e in __patch_modules do
+ if first == FALSE then print_hook("\n\n [Patch modules]\n") first = TRUE end
+ print_hook("\n "..k.." version "..e)
+ end
+ if first == TRUE then print_hook("\n") end
+end
+
+function patchs_display()
+ local k, e
+ for k, e in __patch_modules do
+ msg_print("Patch: "..k.." version "..e)
+ end
+end
+
+
+-- Better hook interface
+__hooks_list_callback = {}
+__hooks_list_callback_max = 0
+
+function add_hooks(h_table, name_prefix)
+ local k, e
+
+ if not name_prefix then name_prefix = "" end
+ for k, e in h_table do
+ add_hook_script(k, "__"..name_prefix.."__hooks_list_callback"..__hooks_list_callback_max, "__"..name_prefix.."__hooks_list_callback"..__hooks_list_callback_max)
+ setglobal("__"..name_prefix.."__hooks_list_callback"..__hooks_list_callback_max, e)
+ __hooks_list_callback_max = __hooks_list_callback_max + 1
+ end
+end
+
+-- Wrapper for the real msg_print and cmsg_print
+-- it understands if we want color or not
+function msg_print(c, m)
+ if type(c) == "number" then
+ cmsg_print(c, m)
+ else
+ call(%msg_print, { c })
+ end
+end
+
+-- Returns the direction of the compass that y2, x2 is from y, x
+-- the return value will be one of the following: north, south,
+-- east, west, north-east, south-east, south-west, north-west,
+-- or "close" if it is within 2 tiles.
+function compass(y, x, y2, x2)
+ local y_axis, x_axis, y_diff, x_diff, compass_dir
+
+ -- is it close to the north/south meridian?
+ y_diff = y2 - y
+
+ -- determine if y2, x2 is to the north or south of y, x
+ if (y_diff > -3) and (y_diff < 3) then
+ y_axis = nil
+ elseif y2 > y then
+ y_axis = "south"
+ else
+ y_axis = "north"
+ end
+
+ -- is it close to the east/west meridian?
+ x_diff = x2 - x
+
+ -- determine if y2, x2 is to the east or west of y, x
+ if (x_diff > -3) and (x_diff < 3) then
+ x_axis = nil
+ elseif x2 > x then
+ x_axis = "east"
+ else
+ x_axis = "west"
+ end
+
+ -- Maybe it is very close
+ if ((not x_axis) and (not y_axis)) then compass_dir = "close"
+ -- Maybe it is (almost) due N/S
+ elseif not x_axis then compass_dir = y_axis
+ -- Maybe it is (almost) due E/W
+ elseif not y_axis then compass_dir = x_axis
+ -- or if it is neither
+ else compass_dir = y_axis.."-"..x_axis
+ end
+
+ return compass_dir
+end
+
+-- Returns a relative approximation of the 'distance' of y2, x2 from y, x.
+function approximate_distance(y, x, y2, x2)
+ local y_diff, x_diff, most_dist
+
+ -- how far to away to the north/south
+ y_diff = y2 - y
+
+ -- make sure it's a positive integer
+ if y_diff < 0 then
+ y_diff = 0 - y_diff
+ end
+
+ -- how far to away to the east/west
+ x_diff = x2 - x
+
+ -- make sure it's a positive integer
+ if x_diff < 0 then
+ x_diff = 0 - x_diff
+ end
+
+ -- find which one is the larger distance
+ if x_diff > y_diff then
+ most_dist = x_diff
+ else
+ most_dist = y_diff
+ end
+
+ -- how far away then?
+ if most_dist >= 41 then
+ how_far = "a very long way"
+ elseif most_dist >= 25 then
+ how_far = "a long way"
+ elseif most_dist >= 8 then
+ how_far = "quite some way"
+ else
+ how_far = "not very far"
+ end
+
+ return how_far
+
+end
+
+-- better timer add function
+__timers_callback_max = 0
+
+function new_timer(t)
+ assert(t.delay > 0, "no timer delay")
+ assert(t.enabled, "no timer enabled state")
+ assert(t.callback, "no timer callback")
+
+ local timer
+ if type(t.callback) == "function" then
+ setglobal("__timers_callback_"..__timers_callback_max, t.callback)
+ timer = %new_timer("__timers_callback_"..__timers_callback_max, t.delay)
+ __timers_callback_max = __timers_callback_max + 1
+ else
+ timer = %new_timer(t.callback, t.delay)
+ end
+
+ timer.enabled = t.enabled
+
+ return timer
+end
+
+-- saves all timer values
+function save_timer(name)
+ add_loadsave(name..".enabled", FALSE)
+ add_loadsave(name..".delay", 1)
+ add_loadsave(name..".countdown", 1)
+end
+
+
+-- displays a scrolling list
+function display_list(y, x, h, w, title, list, begin, sel, sel_color)
+ local l = create_list(getn(list))
+
+ for i = 1, getn(list) do
+ add_to_list(l, i - 1, list[i])
+ end
+
+ %display_list(y, x, h, w, title, l, getn(list), begin - 1, sel - 1, sel_color)
+
+ delete_list(l, getn(list))
+end
+
+-- Easier access to special gene stuff
+function set_monster_generation(monster, state)
+ if type(monster) == "string" then
+ m_allow_special[test_monster_name(monster) + 1] = state
+ else
+ m_allow_special[monster + 1] = state
+ end
+end
+function set_object_generation(obj, state)
+ if type(obj) == "string" then
+ m_allow_special[test_item_name(obj) + 1] = state
+ else
+ m_allow_special[obj + 1] = state
+ end
+end
+function set_artifact_generation(obj, state)
+ m_allow_special[obj + 1] = state
+end
+
+-- Strings
+function strcap(str)
+ if strlen(str) > 1 then
+ return strupper(strsub(str, 1, 1))..strsub(str, 2)
+ elseif strlen(str) == 1 then
+ return strupper(str)
+ else
+ return str
+ end
+end
+
+function msg_format(...)
+ msg_print(call(format, arg))
+end
+
+-- Stacks
+function stack_push(stack, val)
+ tinsert(stack, val)
+end
+function stack_pop(stack)
+ if getn(stack) >= 1 then
+ return tremove(stack)
+ else
+ error("Tried to unstack an empty stack")
+ return nil
+ end
+end
+
+-- A way to check if the game is now running(as opposed to initialization/character gen)
+game = {}
+add_hooks
+{
+ [HOOK_GAME_START] = function ()
+ game.started = TRUE
+ end
+}
diff --git a/lib/core/xml.lua b/lib/core/xml.lua
new file mode 100644
index 0000000..f1188d5
--- /dev/null
+++ b/lib/core/xml.lua
@@ -0,0 +1,347 @@
+-- The xml module
+xml = {}
+
+function xml:parseargs (s)
+ local arg = {}
+ gsub(s, "(%w+)=([\"'])(.-)%2", function (w, _, a)
+ %arg[w] = a
+ end)
+ return arg
+end
+
+-- s is a xml stream, returns a table
+function xml:collect (s)
+ local stack = {n=0}
+ local top = {n=0}
+ tinsert(stack, top)
+ local ni,c,label,args, empty
+ local i, j = 1, 1
+ while 1 do
+ ni,j,c,label,args, empty = strfind(s, "<(%/?)(%w+)(.-)(%/?)>", j)
+ if not ni then break end
+ local text = strsub(s, i, ni-1)
+ if not strfind(text, "^%s*$") then
+ tinsert(top, text)
+ end
+ if empty == "/" then -- empty element tag
+ tinsert(top, {n=0, label=label, args=xml:parseargs(args), empty=1})
+ elseif c == "" then -- start tag
+ top = {n=0, label=label, args=xml:parseargs(args)}
+ tinsert(stack, top) -- new level
+ else -- end tag
+ local toclose = tremove(stack) -- remove top
+ top = stack[stack.n]
+ if stack.n < 1 then
+ error("nothing to close with "..label)
+ end
+ if toclose.label ~= label then
+ error("trying to close "..toclose.label.." with "..label)
+ end
+ tinsert(top, toclose)
+ end
+ i = j+1
+ end
+ local text = strsub(s, i)
+ if not strfind(text, "^%s*$") then
+ tinsert(stack[stack.n], text)
+ end
+ if stack.n > 1 then
+ error("unclosed "..stack[stack.n].label)
+ end
+ return stack[1]
+end
+
+-- Viewport coordinates
+xml.write_out_y = 0
+xml.write_out_x = 0
+xml.write_out_h = 24
+xml.write_out_w = 80
+
+-- Offsets
+xml.write_off_y = 0
+xml.write_off_x = 0
+
+-- Current position
+xml.write_y = 0
+xml.write_x = 0
+
+xml.write_screen = function(color, s)
+ local i
+ for i = 1, strlen(s) do
+ local c = strsub(s, i, i + 1)
+ if c ~= "\n" then
+ if xml.write_y - xml.write_off_y >= 0 and xml.write_y - xml.write_off_y < xml.write_out_h and xml.write_x - xml.write_off_x >= 0 and xml.write_x - xml.write_off_x < xml.write_out_w then
+ Term_putch(xml.write_x - xml.write_off_x + xml.write_out_x, xml.write_y - xml.write_off_y + xml.write_out_y, color, strbyte(c))
+ end
+ xml.write_x = xml.write_x + 1
+ else
+ xml.write_x = 0
+ xml.write_y = xml.write_y + 1
+ end
+ end
+end
+
+xml.write_file = function (color, s)
+ print_hook(s)
+end
+
+xml.write = xml.write_screen
+
+xml.rule2string = {
+ ['name'] = {"Its ", "name", " is"},
+ ['contain'] = {"Its ", "name", " contains"},
+ ['symbol'] = {"Its ", "symbol", " is"},
+ ['inscribed'] = {"Its ", "inscription", " contains"},
+ ['state'] = {"Its ", "state", " is"},
+ ['status'] = {"Its ", "status", " is"},
+ ['tval'] = {"Its ", "tval", " is"},
+ ['race'] = {"Your ", "race", " is"},
+ ['subrace'] = {"Your ", "subrace", " is"},
+ ['class'] = {"Your ", "class", " is"},
+ ['foo1'] = {"The result of ", "test 1 ", "is"},
+ ['foo2'] = {"The result of ", "test 2 ", "is"},
+ ['foo3'] = {"The result of ", "test 3 ", "is"},
+}
+
+xml.display_english = 1
+function xml:display_xml(t, tab)
+ if xml.display_english then
+ xml:english_xml(t, tab)
+ else
+ xml:print_xml(t, tab)
+ end
+end
+
+function xml:english_xml(t, tab, not_flag)
+ local i, k, e
+ local pre, post, recurse
+ local children_not_flag
+ local nextlevel
+ local bcol, ecol = TERM_L_GREEN, TERM_GREEN
+
+ if xml.write_active and t == auto_aux.rule then bcol, ecol = TERM_VIOLET, TERM_VIOLET end
+
+ nextlevel = tab .. " "
+
+ recurse = 1
+
+ if t.label == "rule" then
+ if t.args.type == "inscribe" then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "A rule named \"")
+ xml.write(TERM_WHITE, tostring(t.args.name))
+ xml.write(ecol, "\" to ")
+ xml.write(bcol, "inscribe")
+ xml.write(ecol, " an item with \"")
+ xml.write(TERM_WHITE, t.args.inscription)
+ xml.write(ecol, "\" when")
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "A rule named \"")
+ xml.write(TERM_WHITE, tostring(t.args.name))
+ xml.write(ecol, "\" to ")
+ xml.write(bcol, t.args.type)
+ xml.write(ecol, " when")
+ xml.write(TERM_WHITE, "\n")
+ end
+ elseif t.label == "and" then
+ if not_flag then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "At least one of the following is false:")
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "All of the following are true:")
+ xml.write(TERM_WHITE, "\n")
+ end
+ elseif t.label == "or" then
+ if not_flag then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "All of the following are false:")
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "At least one of the following are true:")
+ xml.write(TERM_WHITE, "\n")
+ end
+ elseif t.label == "not" then
+ if bcol == TERM_VIOLET or getn(t) == 0 then
+ xml.write(ecol, "(a negating rule)")
+ xml.write(TERM_WHITE, "\n")
+ else
+ nextlevel = tab
+ end
+ children_not_flag = not nil
+ elseif t.label == "comment" then
+ xml.write(TERM_WHITE, tab)
+ xml.write(TERM_WHITE, "(" .. t[1] .. ")")
+ xml.write(TERM_WHITE, "\n")
+ elseif t.label == "skill" then
+ local s = t[1]
+ if not_flag then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Your skill in ")
+ xml.write(bcol, s)
+ xml.write(ecol, " is not from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Your skill in ")
+ xml.write(bcol, s)
+ xml.write(ecol, " is from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ end
+ elseif t.label == "ability" then
+ local s = t[1]
+ if not_flag then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "You do not have the ")
+ xml.write(bcol, s)
+ xml.write(ecol, " ability")
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "You have the ")
+ xml.write(bcol, s)
+ xml.write(ecol, " ability")
+ xml.write(TERM_WHITE, "\n")
+ end
+ elseif t.label == "level" then
+ if not_flag then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Your ")
+ xml.write(bcol, "level")
+ xml.write(ecol, " is not from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Your ")
+ xml.write(bcol, "level")
+ xml.write(ecol, " is from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ end
+ elseif t.label == "sval" then
+ if not_flag then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Its ")
+ xml.write(bcol, "sval")
+ xml.write(ecol, " is not from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Its ")
+ xml.write(bcol, "sval")
+ xml.write(ecol, " is from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ end
+ elseif t.label == "discount" then
+ if not_flag then
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Its ")
+ xml.write(bcol, "discount")
+ xml.write(ecol, " is not from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ else
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, "Its ")
+ xml.write(bcol, "discount")
+ xml.write(ecol, " is from ")
+ xml.write(TERM_WHITE, tostring(t.args.min))
+ xml.write(ecol, " to ")
+ xml.write(TERM_WHITE, tostring(t.args.max))
+ xml.write(TERM_WHITE, "\n")
+ end
+ else
+ if xml.rule2string[t.label] then
+ local rule = xml.rule2string[t.label]
+ a, b, c = rule[1], rule[2], rule[3]
+ if not_flag then c = c .. " not" end
+ xml.write(TERM_WHITE, tab)
+ xml.write(ecol, a)
+ xml.write(bcol, b)
+ xml.write(ecol, c)
+ xml.write(ecol, " \"")
+ xml.write(TERM_WHITE, t[1])
+ xml.write(ecol, "\"")
+ xml.write(TERM_WHITE, "\n")
+ else
+ if not_flag then
+ xml.write(bcol, "Not:\n")
+ tab = tab .. " "
+ xml:print_xml(t, tab)
+ return
+ end
+ end
+ end
+
+ for i = 1, getn(t) do
+ if type(t[i]) == "string" then
+ -- xml.write(TERM_WHITE, t[i].."\n")
+ else
+ xml:english_xml(t[i], nextlevel, children_not_flag)
+ end
+ end
+end
+
+function xml:print_xml(t, tab)
+ local i, k, e
+ local inside = nil
+ local bcol, ecol = TERM_L_GREEN, TERM_GREEN
+
+ if xml.write_active and t == auto_aux.rule then bcol, ecol = TERM_VIOLET, TERM_VIOLET end
+
+ xml.write(bcol, tab.."<"..t.label)
+ for k, e in t.args do
+ xml.write(TERM_L_BLUE, " "..k)
+ xml.write(TERM_WHITE, "=\"")
+ xml.write(TERM_YELLOW, e)
+ xml.write(TERM_WHITE, "\"")
+ end
+ xml.write(bcol, ">")
+
+ for i = 1, getn(t) do
+ if type(t[i]) == "string" then
+ xml.write(TERM_WHITE, t[i])
+ else
+ if not inside then xml.write(TERM_WHITE, "\n") end
+ inside = not nil
+ xml:print_xml(t[i], tab.." ")
+ end
+ end
+
+ if not inside then
+ xml.write(ecol, "</"..t.label..">\n")
+ else
+ xml.write(ecol, tab.."</"..t.label..">\n")
+ end
+end
+
+-- t is a table representing xml, outputs the xml code via xml.write()
+function xml:output(t)
+ local i
+ for i = 1, getn(t) do
+ xml:print_xml(t[i], "")
+ end
+end
diff --git a/lib/data/delete.me b/lib/data/delete.me
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/data/delete.me
diff --git a/lib/dngn/dun1.14 b/lib/dngn/dun1.14
new file mode 100644
index 0000000..6421e80
--- /dev/null
+++ b/lib/dngn/dun1.14
@@ -0,0 +1,2 @@
+# On this level there is a stairway leading to the Heart of the Earth
+B:10
diff --git a/lib/dngn/dun10.0 b/lib/dngn/dun10.0
new file mode 100644
index 0000000..b89ce05
--- /dev/null
+++ b/lib/dngn/dun10.0
@@ -0,0 +1,3 @@
+# Father branch is Mirkwood(1), on level 14
+A:1
+L:14
diff --git a/lib/dngn/dun11.20 b/lib/dngn/dun11.20
new file mode 100644
index 0000000..9cc611d
--- /dev/null
+++ b/lib/dngn/dun11.20
@@ -0,0 +1,2 @@
+# On this level there is a stairway leading to the Nether Realm
+B:6
diff --git a/lib/dngn/dun11.22 b/lib/dngn/dun11.22
new file mode 100644
index 0000000..149e2c3
--- /dev/null
+++ b/lib/dngn/dun11.22
@@ -0,0 +1,2 @@
+#I'm downright evil
+F:NO_GENO |
diff --git a/lib/dngn/dun17.15 b/lib/dngn/dun17.15
new file mode 100644
index 0000000..d08bf5e
--- /dev/null
+++ b/lib/dngn/dun17.15
@@ -0,0 +1,5 @@
+N:Machine
+U:s_factory.map
+D:The clatter of strange machinery surrounds you.
+F:DESC | NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:ASK_LEAVE | NO_TELEPORT
diff --git a/lib/dngn/dun18.0 b/lib/dngn/dun18.0
new file mode 100644
index 0000000..da1b6c2
--- /dev/null
+++ b/lib/dngn/dun18.0
@@ -0,0 +1,2 @@
+# The level is SAVED in the playername.mz? file
+#S:mz0
diff --git a/lib/dngn/dun18.1 b/lib/dngn/dun18.1
new file mode 100644
index 0000000..70f2771
--- /dev/null
+++ b/lib/dngn/dun18.1
@@ -0,0 +1,2 @@
+# The level is SAVED in the playername.mz? file
+#S:mz1
diff --git a/lib/dngn/dun19.11 b/lib/dngn/dun19.11
new file mode 100644
index 0000000..7fba690
--- /dev/null
+++ b/lib/dngn/dun19.11
@@ -0,0 +1,5 @@
+N:Deathwatch
+U:s_death.map
+D:This level looks filled with evilness.
+F:DESC | NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:ASK_LEAVE | NO_TELEPORT
diff --git a/lib/dngn/dun2.31 b/lib/dngn/dun2.31
new file mode 100644
index 0000000..dd8669a
--- /dev/null
+++ b/lib/dngn/dun2.31
@@ -0,0 +1,2 @@
+# On this level there is a stairway leading to the Mount Doom
+B:5
diff --git a/lib/dngn/dun22.10 b/lib/dngn/dun22.10
new file mode 100644
index 0000000..e7eb116
--- /dev/null
+++ b/lib/dngn/dun22.10
@@ -0,0 +1,2 @@
+# On this level there is a stairway leading to the Small Water Cave
+B:24
diff --git a/lib/dngn/dun22.5 b/lib/dngn/dun22.5
new file mode 100644
index 0000000..11d8e51
--- /dev/null
+++ b/lib/dngn/dun22.5
@@ -0,0 +1,5 @@
+N:Orc Town
+U:s_orc.map
+D:You hear orc warcries.
+F:DESC | NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:ASK_LEAVE | NO_TELEPORT
diff --git a/lib/dngn/dun24.0 b/lib/dngn/dun24.0
new file mode 100644
index 0000000..bbb93f8
--- /dev/null
+++ b/lib/dngn/dun24.0
@@ -0,0 +1,3 @@
+# Father branch is the Moria(22), on level 10
+A:22
+L:10
diff --git a/lib/dngn/dun29.15 b/lib/dngn/dun29.15
new file mode 100644
index 0000000..4df873b
--- /dev/null
+++ b/lib/dngn/dun29.15
@@ -0,0 +1,6 @@
+N:Galleon
+U:s_ship.map
+D:A ship of antique design lies jammed in the ice here.
+F:DESC | NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:ASK_LEAVE | NO_TELEPORT
+
diff --git a/lib/dngn/dun3.18 b/lib/dngn/dun3.18
new file mode 100644
index 0000000..84c0a74
--- /dev/null
+++ b/lib/dngn/dun3.18
@@ -0,0 +1,5 @@
+N:Dim Gates
+U:s_gates.map
+D:Visions of death fill your mind.
+F:DESC | NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:ASK_LEAVE | NO_TELEPORT
diff --git a/lib/dngn/dun3.28 b/lib/dngn/dun3.28
new file mode 100644
index 0000000..0acd419
--- /dev/null
+++ b/lib/dngn/dun3.28
@@ -0,0 +1,5 @@
+N:Nameless
+U:s_name.map
+D:You sense a powerful artifact here.
+F:DESC | NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:ASK_LEAVE | NO_TELEPORT
diff --git a/lib/dngn/dun3.3 b/lib/dngn/dun3.3
new file mode 100644
index 0000000..710ef5f
--- /dev/null
+++ b/lib/dngn/dun3.3
@@ -0,0 +1,5 @@
+N:Crypt
+U:s_crypt.map
+D:Looks like a forgotten crypt...
+F:DESC | NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:ASK_LEAVE | NO_TELEPORT
diff --git a/lib/dngn/dun5.0 b/lib/dngn/dun5.0
new file mode 100644
index 0000000..48a7bea
--- /dev/null
+++ b/lib/dngn/dun5.0
@@ -0,0 +1,3 @@
+# Father branch is the Mordor, on level 32
+A:2
+L:31
diff --git a/lib/dngn/dun5.14 b/lib/dngn/dun5.14
new file mode 100644
index 0000000..3d7a308
--- /dev/null
+++ b/lib/dngn/dun5.14
@@ -0,0 +1,14 @@
+# The level is SAVED in the playername.mdm file
+S:mdm
+
+# Use the map in s_doom.map file
+U:s_doom.map
+
+# Use Mt Doom as level name
+N:Mt Doom
+
+D:You finally reach the top of Mount Doom, here must lie the Great Fire.
+F:DESC
+F:NO_GENO | NO_NEW_MONSTER | SPECIAL | NO_STAIR
+F:NO_TELEPORT
+
diff --git a/lib/dngn/dun6.0 b/lib/dngn/dun6.0
new file mode 100644
index 0000000..c750ea6
--- /dev/null
+++ b/lib/dngn/dun6.0
@@ -0,0 +1,3 @@
+# Father branch is Void(11), on level 20
+A:11
+L:20
diff --git a/lib/edit/a_info.txt b/lib/edit/a_info.txt
new file mode 100644
index 0000000..427d506
--- /dev/null
+++ b/lib/edit/a_info.txt
@@ -0,0 +1,2889 @@
+# File: a_info.txt
+
+
+# This file is used to initialize the "lib/raw/a_info.raw" file, which is
+# used to initialize the "artifact" information for the Angband game.
+
+# Do not modify this file unless you know exactly what you are doing,
+# unless you wish to risk possible system crashes and broken savefiles.
+
+# After modifying this file, delete the "lib/raw/a_info.raw" file.
+
+
+# The artifact indexes are defined in "defines.h", and must not be changed.
+
+# Artifacts 1-15 are "special", 16-63 are "armor", and 64-127 are "weapons".
+
+# Hack -- "Grond" and "Morgoth" MUST have a rarity of one, or they might
+# not be dropped when Morgoth is killed. Note that they, like the "special"
+# artifacts, are never created "accidentally".
+
+# Artifacts now have descriptions. Special thanks to J.R.R Tolkien,
+# without whom the words would be unwritten, the images unconceived,
+# the deed undone.
+# -Leon Marrick
+# Contributors: Jeff Butler, Neal Hackler, Ethan Sicotte, Pat Tracy, Divia
+
+# Version stamp (required)
+
+V:2.0.0
+
+
+
+# The Phial of Galadriel
+
+N:1:of Galadriel
+I:39:100:4
+W:20:10:10:10000
+P:0:1d1:0:0:0
+F:ACTIVATE | SEARCH | LITE3 | LUCK
+F:INSTA_ART | HIDE_TYPE
+a:HARDCORE=LIGHT
+D:A small crystal phial, with the light of Earendil's Star contained inside.
+D:Its light is imperishable, and near it darkness cannot endure.
+
+
+# The Star of Elendil
+
+N:2:of Elendil
+I:39:101:1
+W:30:25:5:32500
+P:0:1d1:0:0:0
+F:ACTIVATE | SEE_INVIS | HOLD_LIFE |
+F:INSTA_ART | SPEED | LITE3 | LITE1 | HIDE_TYPE
+a:HARDCORE=MAP_LIGHT
+Z:detect curses
+D:The shining Star of the West, a famed heirloom of Elendil's house.
+
+
+# The Arkenstone of Thrain
+# Was +2 WIS/DEX
+
+N:3:of Thrain
+I:39:102:3
+W:50:50:5:50000
+P:0:1d1:0:0:0
+F:ACTIVATE | SEE_INVIS | HOLD_LIFE | RES_CHAOS | HIDE_TYPE | LUCK
+F:INSTA_ART | SPEED | RES_LITE | RES_DARK | ESP_ORC | LITE3
+a:HARDCORE=THRAIN
+D:A great globe seemingly filled with moonlight, the famed Heart of the
+D:Mountain, which splinters the light that falls upon it into a thousand
+D:glowing shards.
+
+
+# The Amulet of Carlammas
+
+N:4:of Carlammas
+I:40:10:2
+W:50:10:3:60000
+F:CON | HIDE_TYPE |
+F:ACTIVATE | RES_FIRE |
+F:INSTA_ART
+a:HARDCORE=PROT_EVIL
+D:A fiery circle of bronze, with mighty spells to ward off evil.
+
+
+# The Amulet of Ingwe
+
+N:5:of Ingwe
+I:40:11:3
+W:65:30:3:90000
+F:INT | WIS | CHR | SEARCH | INFRA | HIDE_TYPE |
+F:SEE_INVIS | FREE_ACT | ACTIVATE |
+F:RES_ACID | RES_COLD | RES_ELEC |
+F:INSTA_ART
+a:HARDCORE=DISP_EVIL
+D:The ancient heirloom of Ingwe, high lord of the Vanyar, against whom nothing
+D:of evil could stand.
+
+
+# The Necklace 'Nauglamir'
+
+N:6:'Nauglamir'
+I:40:12:3
+W:70:50:3:75000
+F:STR | CON | DEX | INFRA | HIDE_TYPE | RES_FEAR |
+F:SEE_INVIS | FREE_ACT | REGEN | LITE3 | SPEED |
+F:INSTA_ART
+D:A carencet of gold, set with a multitude of shining gems of
+D:Valinor. Despite its size, its weight seems as that of gossamer.
+
+
+# The Ring of Flare
+# (note: pval reduced to 3, otherwise it would probably be preferable
+# even to The One Ring!)
+
+N:7:of Flare
+I:45:52:3
+W:50:35:2:75000
+F:STR | CON | CHR | HIDE_TYPE |
+F:IM_FIRE | ACTIVATE | SEARCH |
+F:ESP_THUNDERLORD | SEE_INVIS | FLY |
+F:INSTA_ART
+a:HARDCORE=DIM_DOOR
+Z:swap position
+D:The mighty ring of the Thunderlord Flare that makes the wearer
+D:strong and healthy. Once a ring of power, it was
+D:given to Flare by Celegorm when he arrived on Middle-earth with a full nest
+D:of Thunderlords.
+
+
+# The Ring of Barahir
+
+N:8:of Barahir
+I:45:32:1
+W:50:25:2:75000
+F:STR | INT | WIS | DEX | CON | CHR | STEALTH | HIDE_TYPE |
+F:RES_POIS | RES_DARK | ACTIVATE | SEE_INVIS | SEARCH |
+F:INSTA_ART
+a:HARDCORE=BARAHIR
+D:A ring shaped into twinned serpents with eyes of emerald meeting beneath
+D:a crown of flowers, an ancient treasure of Isildur's house.
+
+
+# The Ring of Tulkas
+
+N:9:of Tulkas
+I:45:33:4
+W:70:50:2:175000
+F:STR | DEX | CON | HIDE_TYPE |
+F:ACTIVATE | SPEED | ESP_EVIL |
+F:INSTA_ART
+a:HARDCORE=TULKAS
+D:The treasure of Tulkas, most fleet and wrathful of the Valar.
+
+
+# The Ring of Power 'Narya'
+
+N:10:of Power 'Narya'
+I:45:34:1
+W:70:30:2:100000
+P:0:1d1:6:6:0
+F:STR | INT | WIS | DEX | CON | CHR | SPEED | HIDE_TYPE | LUCK
+F:ACTIVATE | FREE_ACT | SEE_INVIS |
+F:SUST_STR | SUST_CON | SUST_WIS | SUST_CHR | SPECIAL_GENE |
+F:IM_FIRE | RES_NETHER | RES_FEAR | REGEN |
+F:INSTA_ART
+a:HARDCORE=NARYA
+D:The Ring of Fire, set with a ruby that glows like flame. Narya is one
+D:of the three Rings of Power created by the Elves and hidden by them from
+D:Sauron.
+
+
+# The Ring of Power 'Nenya'
+
+N:11:of Power 'Nenya'
+I:45:35:2
+W:80:40:2:200000
+P:0:1d1:9:9:0
+F:STR | INT | WIS | DEX | CON | CHR | SPEED | HIDE_TYPE | LUCK
+F:ACTIVATE | HOLD_LIFE | FREE_ACT | SEE_INVIS |
+F:SUST_INT | SUST_WIS | SUST_CHR |
+F:IM_COLD | RES_BLIND | STEALTH | ESP_ALL |
+F:INSTA_ART
+a:HARDCORE=NENYA
+D:The Ring of Adamant, with a pure white stone as centrepiece. Nenya is one
+D:of the three Rings of Power created by the Elves and hidden by them from
+D:Sauron.
+
+
+# The Ring of Power 'Vilya'
+
+N:12:of Power 'Vilya'
+I:45:36:3
+W:90:50:2:300000
+P:0:1d1:12:12:0
+F:STR | INT | WIS | DEX | CON | CHR | SPEED | HIDE_TYPE | LUCK
+F:ACTIVATE | HOLD_LIFE | FREE_ACT | SEE_INVIS |
+F:FEATHER | SLOW_DIGEST | REGEN |
+F:SUST_STR | SUST_DEX | SUST_CON |
+F:IM_ELEC | RES_POIS | RES_DISEN |
+F:INSTA_ART
+a:HARDCORE=VILYA
+D:The Ring of Sapphire, with clear blue gems that shine like stars,
+D:glittering untouchable despite all that Sauron ever wrought. Vilya is
+D:one of the three Rings of Power created by the Elves and hidden by them
+D:from Sauron.
+
+
+# The Ring of Power 'The One Ring'
+
+N:13:of Power 'The One Ring'
+I:45:37:5
+W:100:100:2:5000000
+P:0:1d1:15:15:0
+F:STR | INT | WIS | DEX | CON | CHR | SPEED | HIDE_TYPE |
+F:ACTIVATE | AUTO_CURSE | HEAVY_CURSE | INVIS | SPELL | MANA |
+F:SEE_INVIS | REGEN | FREE_ACT | CURSED | CURSE_NO_DROP |
+F:IM_FIRE | IM_COLD | IM_ELEC | IM_ACID | PERMA_CURSE |
+F:SUST_STR | SUST_DEX | SUST_CON |
+F:SUST_INT | SUST_WIS | SUST_CHR |
+F:RES_BLIND | RES_POIS | RES_DISEN | RES_NETHER | ESP_ALL |
+F:DRAIN_MANA | DRAIN_HP | DRAIN_EXP |
+F:INSTA_ART
+a:HARDCORE=POWER
+Z:change the world
+D:"Ash nazg durbatuluk, ash nazg gimbatul, ash nazg thrakatuluk agh
+D:burzum-ishi krimpatul". Unadorned, made of massive gold,
+D:set with runes in the foul speech of Mordor, with power so great that it
+D:inevitably twists and masters any earthly being who wears it.
+
+
+# The Anchor of Space-Time
+
+N:14:of Space-Time
+I:39:105:0
+W:30:12:15:50000
+P:0:1d1:0:0:0
+F:INSTA_ART | LITE1
+D:A powerful stone that provides a strong light for any who
+D:wields it. It is rumoured that it may even protect the wearer from
+D:the passing of time.
+
+
+# This artifact has a low artifact level to prevent it being worthless for
+# chars with poor magic skills.
+
+# The Stone of Lore
+
+N:15:of Lore
+I:39:106:0
+W:15:12:15:20000
+P:0:1d1:0:0:0
+F:ACTIVATE | SPECIAL_GENE | EASY_USE | LITE1 |
+F:INSTA_ART
+a:HARDCORE=STONE_LORE
+D:A great emerald that fills your mind with images of knowledge and dreadful
+D:understanding as you stare into its depths.
+
+
+# The Multi-Hued Dragon Scale Mail 'Razorback'
+
+N:16:'Razorback'
+I:38:6:0
+W:90:9:500:400000
+P:30:2d4:-4:0:25
+F:FREE_ACT | IM_ELEC | SPECIAL_GENE |
+F:RES_FIRE | RES_COLD | RES_POIS | RES_LITE | RES_DARK |
+F:LITE1 | SEE_INVIS | AGGRAVATE | ESP_DRAGON
+F:ACTIVATE
+a:HARDCORE=RAZORBACK
+D:A massive suit of heavy dragon scales deeply saturated with many colours.
+D:It throbs with angry energies, and you feel the raw elemental might of
+D:untamed Lightning as you put it on.
+
+
+# The Power Dragon Scale Mail of Eternity
+# The ULTIMATE armour
+
+N:17:of Eternity
+I:38:30:0
+W:100:16:600:500000
+P:50:2d4:-8:0:35
+F:HOLD_LIFE | REGEN | ESP_DRAGON |
+F:RES_ACID | RES_FIRE | RES_COLD | RES_ELEC | RES_POIS | FEATHER | FLY |
+F:RES_NETHER | RES_NEXUS | RES_CHAOS | RES_LITE | RES_DARK | ULTIMATE |
+F:RES_SHARDS | RES_SOUND | RES_DISEN | RES_BLIND | RES_CONF |
+F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD | SPECIAL_GENE
+F:ACTIVATE
+a:HARDCORE=BLADETURNER
+D:A suit of adamant, set with scales of every colour, surrounded in a nimbus
+D:of perfectly untramelled yet inextricably intermingled and utterly mastered
+D:powers elemental and ethereal.
+
+
+# The Spear of Melkor
+
+N:18:of Melkor
+I:22:2:-4
+W:65:45:200:100000
+P:0:4d6:12:24:0
+F:STEALTH | WIS | CURSED | HEAVY_CURSE | TY_CURSE | ESP_GOOD |
+F:DRAIN_MANA | DRAIN_HP |
+F:RES_DARK | RES_BLIND | RES_LITE | RES_NETHER | BRAND_POIS | RES_CONF
+D:The mighty spear used once by Melkor to slay the trees of Valinor.
+
+
+# The Adamantite Plate Mail 'Soulkeeper'
+
+N:19:'Soulkeeper'
+I:37:30:2
+W:75:9:420:300000
+P:40:2d4:-4:0:20
+F:CON |
+F:HOLD_LIFE | SUST_CON | ESP_UNDEAD | RES_CONF | RES_FEAR |
+F:RES_ACID | RES_COLD | RES_DARK | RES_NETHER | RES_NEXUS | RES_CHAOS |
+F:ACTIVATE
+a:HARDCORE=CURE_1000
+D:A suit of imperishable adamant, with unconquerable strength to endure evil
+D:and disruptive magics, that protects the life force of its wearer as
+D:nothing else can.
+
+
+# The Full Plate Armour of Isildur
+
+N:20:of Isildur
+I:37:15:1
+W:30:3:300:50000
+P:25:2d4:0:0:25
+F:CON |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD |
+F:RES_SOUND | RES_CONF | RES_NEXUS
+D:A gleaming steel suit covering the wearer from neck to foot, with runes of
+D:warding and stability deeply engraved into its surface.
+
+
+# The Metal Brigandine Armour of the Rohirrim
+
+N:21:of the Rohirrim
+I:37:9:2
+W:30:3:200:30000
+P:19:1d4:0:0:15
+F:STR | DEX | SPEED | HIDE_TYPE | RES_FEAR |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_CONF | RES_SOUND
+D:A stiff suit of armour composed of small metal plates sewn to an
+D:inner layer of heavy canvas, and covered with a second layer of
+D:cloth. Within it is the spirit of Eorl the Young, matchless in combat.
+
+
+# The Mithril Chain Mail 'Belegennon'
+
+N:22:'Belegennon'
+I:37:20:4
+W:40:10:150:135000
+P:28:1d4:-1:0:20
+F:STEALTH | WIS | INT |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_POIS |
+F:HOLD_LIFE | RES_DARK | RES_FEAR |
+F:SEE_INVIS |
+F:ACTIVATE
+a:HARDCORE=BELEGENNON
+D:This wondrous suit of fine-linked chain shimmers as though of pure silver.
+D:It stands untouched amidst the fury of the elements, and a power of
+D:concealment rests within.
+
+
+# The Mithril Plate Mail of Celeborn
+
+N:23:of Celeborn
+I:37:25:4
+W:40:3:250:150000
+P:35:2d4:-3:0:25
+F:STR | CHR | HIDE_TYPE | ESP_ORC
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_DARK |
+F:RES_DISEN | ACTIVATE
+a:HARDCORE=GENOCIDE
+D:A shimmering suit of true-silver, forged long ago by dwarven smiths of
+D:legend. It gleams with purest white as you gaze upon it, and mighty are
+D:its powers to protect and banish.
+
+
+# The Chain Mail of Arvedui
+
+N:24:of Arvedui
+I:37:4:2
+W:20:3:220:32000
+P:14:1d4:-2:0:15
+F:STR | CHR | HIDE_TYPE |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_SHARDS | RES_NEXUS
+D:A hauberk, leggings, and sleeves of interlocking steel rings, well padded
+D:with leather. You feel strong and tall as Arvedui, last king of Arnor,
+D:as you put it on.
+
+
+# The Augmented Chain Mail of Caspanion
+
+N:25:of Caspanion
+I:37:6:3
+W:25:9:270:40000
+P:16:1d4:-2:0:20
+F:INT | WIS | CON | HIDE_TYPE |
+F:RES_ACID | RES_POIS | RES_CONF | ACTIVATE
+a:HARDCORE=DEST_DOOR
+D:A hauberk, leggings, and sleeves of interlocking steel rings, strategically
+D:reinforced at vital locations with a second layer of chain. Magics to
+D:enhance body and mind lie within, and no door can hope to resist the wearer.
+
+
+# The Thunderlord Coat of Marda
+
+N:26:of Marda
+I:36:16:5
+W:70:3:80:80000
+P:9:0d0:0:0:25
+F:FREE_ACT | RES_BLIND | RES_CONF | RES_FEAR | DRAIN_MANA |
+F:REFLECT | RES_NEXUS | SH_FIRE | SUST_INT | SUST_CON | SUST_CHR |
+F:ESP_THUNDERLORD | CON | CHR | INT |
+F:RES_ACID | RES_ELEC | IM_COLD | RES_COLD | AGGRAVATE | HEAVY_CURSE |
+F:CURSED
+D:The flying suit of Marda, very powerful armour that protects
+D:the wearer from cold. Wonderful as this mighty
+D:armour is, beware wearing it, for it has been cursed by a
+D:powerful wizard since Marda had it and is said to have gained
+D:a couple of undesirable side-effects...
+
+
+# The Thunderlord Coat of Trone
+
+N:27:of Trone
+I:36:16:4
+W:30:3:80:65000
+P:9:0d0:0:0:20
+F:REFLECT | RES_NEXUS | SH_FIRE | FLY | SPECIAL_GENE |
+F:STEALTH | ESP_THUNDERLORD | CON | INT | SPEED |
+F:RES_ACID | RES_ELEC | IM_FIRE | RES_COLD
+D:The flying suit of Trone. It protects the user from fire and
+D:imps are said to be less annoying with this on.
+
+
+# The Leather Scale Mail 'Thalkettoth'
+
+N:28:'Thalkettoth'
+I:36:11:3
+W:20:3:60:25000
+P:11:1d1:-1:0:25
+F:DEX | SPEED | HIDE_TYPE | SPECIAL_GENE |
+F:RES_ACID | RES_SHARDS
+D:A tunic and skirt sewn with thick, overlapping scales of hardened
+D:leather whose wearer moves with agility and assurance.
+
+
+# The Pair of Soft Leather Boots of Wormtongue
+
+N:29:of Wormtongue
+I:30:2:3
+W:40:20:20:50000
+P:2:1d1:-10:-10:10
+F:INT | DEX | CHR | STEALTH | SEARCH | SPEED | HIDE_TYPE |
+F:FREE_ACT | FEATHER | RES_DARK | RES_LITE | ESP_GOOD | ESP_UNIQUE
+Z:panic hit
+D:The pair of boots used by Grima son of Galmod, also named the Wormtongue:
+D:a treacherous but persuasive counsellor, ever ready to betray, sneak,
+D:lie, cheat and steal - but never ready to actually fight.
+
+
+# The Small Metal Shield of Thorin
+
+N:30:of Thorin
+I:34:3:4
+W:30:6:65:60000
+P:3:1d2:0:0:25
+F:STR | CON | HIDE_TYPE |
+F:FREE_ACT | IM_ACID | RES_SOUND |
+F:RES_CHAOS | ESP_ORC
+D:Invoking the strength and endurance of Thorin, King under the Mountain,
+D:this little metal shield is proof against the Element of Earth.
+
+
+# The Large Leather Shield of Celegorm
+
+N:31:of Celegorm
+I:34:4:0
+W:30:3:60:12000
+P:4:1d2:0:0:20
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_LITE | RES_DARK
+D:This shield emblazoned with a multitude of creatures not seen for ages
+D:once protected Celegorm, lord of Himlad; around it lies a mystic balance
+D:that contains the conflicts of the elements.
+
+
+# The Large Metal Shield of Anarion
+
+N:32:of Anarion
+I:34:5:0
+W:40:9:120:160000
+P:5:1d3:0:0:20
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | SUST_STR | SUST_INT |
+F:SUST_WIS | SUST_DEX | SUST_CON | SUST_CHR | ESP_EVIL
+D:The great metal-bound shield of Anarion, son of Elendil, who Sauron found
+D:himself powerless to wither or diminish.
+
+
+# The Beaked Axe of Hurin
+
+N:33:of Hurin
+I:22:10:3
+W:20:15:180:90000
+P:0:2d6:12:20:0
+F:STR | CON | HIDE_TYPE | BRAND_ACID | RES_ACID | LITE1 | DRAIN_MANA |
+F:SLAY_ORC | KILL_DEMON | SLAY_TROLL | ACTIVATE | SHOW_MODS
+F:MUST2H
+f:MUST2H
+a:HARDCORE=HURIN
+D:Wielded by Hurin Thalion in the Fifth Battle of Beleriand, this
+D:troll-bane smoked in the black blood of Gothmog's guards.
+
+
+# The Massive Iron Crown of Morgoth
+
+N:34:of Morgoth
+I:33:50:125
+W:100:1:20:10000000
+P:0:1d1:0:0:0
+F:STR | INT | WIS | DEX | CON | CHR | INFRA | HIDE_TYPE |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_POIS |
+F:RES_LITE | RES_DARK | RES_CONF | RES_NEXUS | RES_NETHER |
+F:LITE1 | SEE_INVIS | ESP_ALL |
+F:CURSED | HEAVY_CURSE | PERMA_CURSE |
+F:INSTA_ART | SPECIAL_GENE
+D:Two Silmarils of Feanor blaze from the thunderous crown of twisted
+D:iron. The corrupted metal feels at once as infernal as hellfire
+D:and as chilling as the Outer Darkness. One protrusion from the
+D:crown is abruptly ended where a third jewel might have shone.
+
+
+# The Iron Crown of Beruthiel
+
+N:35:of Beruthiel
+I:33:10:-5
+W:40:12:20:0
+P:0:1d1:0:0:20
+F:STR | DEX | CON | HIDE_TYPE |
+F:FREE_ACT | SEE_INVIS | ESP_ANIMAL | ESP_EVIL | ESP_NONLIVING | ESP_ALL |
+F:CURSED | AUTO_CURSE
+D:The midnight-hued steel circlet of the sorceress-queen Beruthiel, which
+D:grants extraordinary powers of sight and awareness at a terrible physical
+D:cost.
+
+
+# The Hard Leather Cap of Thranduil
+
+N:36:of Thranduil
+I:32:2:2
+W:20:2:15:50000
+P:2:0d0:0:0:10
+F:INT | WIS | HIDE_TYPE |
+F:RES_BLIND | ESP_ORC | ESP_EVIL | ESP_TROLL
+D:The hunting cap of King Thranduil, to whose ears come all the secrets of
+D:his forest domain.
+
+
+# The Metal Cap of Thengel
+
+N:37:of Thengel
+I:32:3:3
+W:10:2:20:22000
+P:3:1d1:0:0:12
+F:WIS | CHR | RES_CONF | HIDE_TYPE | LUCK
+D:A ridged helmet made of steel, and embossed with scenes of valour in fine-
+D:engraved silver. It grants the wearer nobility, clarity of thought and
+D:understanding.
+
+
+# The Steel Helm of Hammerhand
+
+N:38:of Hammerhand
+I:32:6:3
+W:20:2:60:45000
+P:6:1d3:0:0:20
+F:STR | DEX | CON | HIDE_TYPE | SPECIAL_GENE | RES_FEAR |
+F:SUST_STR | SUST_DEX | SUST_CON |
+F:RES_ACID | RES_NEXUS | RES_COLD | RES_DARK | SLOW_DIGEST |
+Z:berserk
+D:A great helm as steady as the heroes of the Westdike. Mighty were the
+D:blows of Helm, the Hammerhand!
+
+
+# The Dragon Helm of Dor-Lomin
+
+N:39:of Dor-Lomin
+I:32:7:4
+W:40:12:75:300000
+P:8:1d3:0:0:20
+F:STR | DEX | CON | HIDE_TYPE |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_LITE | RES_BLIND |
+F:LITE1 | SEE_INVIS | ESP_DRAGON | ESP_THUNDERLORD | ACTIVATE
+a:HARDCORE=GORLIM
+D:The legendary dragon helm of Turin Turambar, an object of dread to the
+D:servants of Morgoth.
+
+# The Iron Helm 'Holhenneth'
+
+N:40:'Holhenneth'
+I:32:5:2
+W:20:5:75:100000
+P:5:1d3:0:0:10
+F:INT | WIS | SEARCH | HIDE_TYPE |
+F:RES_BLIND | SEE_INVIS | ACTIVATE
+a:HARDCORE=DETECT_ALL
+D:A famous helm of forged iron granting extraordinary powers of mind and
+D:awareness.
+
+
+# The Iron Helm of Gorlim
+
+N:41:of Gorlim
+I:32:5:-5
+W:20:5:75:0
+P:5:1d3:25:25:10
+F:INT | WIS | SEARCH | HIDE_TYPE | SHOW_MODS |
+F:SEE_INVIS | NO_MAGIC | HEAVY_CURSE | TY_CURSE
+F:RES_DISEN | RES_FEAR | FREE_ACT | RES_ACID | RES_FIRE | RES_POIS |
+F:IM_COLD | ACTIVATE | DRAIN_HP |
+F:TELEPORT | CURSED
+a:HARDCORE=GORLIM
+D:A headpiece, gaudy and barbaric, that betrayed a warrior when he most
+D:needed succor.
+
+
+# The Golden Crown of Gondor
+
+N:42:of Gondor
+I:33:11:3
+W:40:40:30:125000
+P:0:1d1:0:0:15
+F:STR | WIS | CON | HIDE_TYPE | SPEED | RES_CONF | RES_SOUND |
+F:RES_COLD | RES_FIRE | RES_LITE | RES_BLIND | RES_ELEC | RES_CHAOS |
+F:LITE1 | SEE_INVIS | REGEN | ACTIVATE
+a:HARDCORE=CURE_700
+D:The shining winged circlet brought by Elendil from dying Numenor, emblem of
+D:Gondor through an age of the world.
+
+
+# The Jewel Encrusted Crown of Numenor
+# Stolen from Oangband
+
+N:43:of Numenor
+I:33:12:3
+W:60:30:40:50000
+P:0:1d1:0:0:18
+F:INT | DEX | CHR | SEARCH | SPEED | HIDE_TYPE |
+F:SEE_INVIS | FREE_ACT | RES_DARK | RES_BLIND |
+F:RES_SHARDS | RES_SOUND | RES_LITE | RES_COLD |
+F:LITE1 | ACTIVATE | DRAIN_MANA
+a:HARDCORE=NUMENOR
+D:A crown of massive gold, set with wondrous jewels of thought and warding,
+D:worn by the kings of ancient Numenor. Its wearer may go into battle
+D:always knowing what he faces - unless his own folly blinds him to the
+D:nature and magnitude of the task.
+
+
+# The Cloak 'Colluin'
+
+N:44:'Colluin'
+I:35:1:0
+W:5:45:10:40000
+P:1:0d0:0:0:20
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_POIS | ACTIVATE | ESP_GOOD
+a:HARDCORE=COLLUIN
+D:A cape worn by a hero from Valinor, a land utterly beyond the strife
+D:of Elements.
+
+
+# The Cloak 'Holcolleth'
+
+N:45:'Holcolleth'
+I:35:1:2
+W:5:25:10:13000
+P:1:0d0:0:0:4
+F:INT | WIS | SPEED | STEALTH | HIDE_TYPE |
+F:RES_ACID | ACTIVATE
+a:HARDCORE=SLEEP
+D:This elven-grey mantle possesses great powers of tranquility and of
+D:concealment, and grants the wearer the knowledge and understanding of
+D:the Sindar.
+
+
+# The Cloak of Thingol
+
+N:46:of Thingol
+I:35:1:3
+W:10:50:10:35000
+P:1:0d0:0:0:18
+F:DEX | CHR | HIDE_TYPE |
+F:FREE_ACT | RES_ACID | RES_FIRE | RES_COLD | ACTIVATE
+a:HARDCORE=RECHARGE
+D:A sable-hued cloak, with glowing elven-runes to restore magic showing calm
+D:and clear as moonlight on still water.
+
+
+# The Cloak of Thorongil
+
+N:47:of Thorongil
+I:35:1:0
+W:5:10:10:8000
+P:1:0d0:0:0:10
+F:FREE_ACT | RES_ACID | SEE_INVIS | RES_FEAR
+D:A cloak of shimmering green and brown that grants sight beyond sight and
+D:shakes off holding magics, worn by Aragorn son of Arathorn in his youth
+D:as he adventured under the name of Thorongil.
+
+
+# The Cloak 'Colannon'
+
+N:48:'Colannon'
+I:35:1:3
+W:5:20:10:11000
+P:1:0d0:0:0:15
+F:STEALTH | SPEED | RES_NEXUS |
+F:RES_ACID | ACTIVATE
+a:HARDCORE=TELEPORT
+D:A crystal-blue cape of fine silk worn by a silent messenger of
+D:the forces of Law. Somehow, its wearer is always able to escape
+D:trouble.
+
+
+# The Shadow Cloak of Luthien
+
+N:49:of Luthien
+I:35:6:2
+W:40:40:5:55000
+P:6:0d0:0:0:20
+F:INT | WIS | CHR | HIDE_TYPE | SPEED | STEALTH | INVIS | LUCK
+F:RES_ACID | RES_FIRE | RES_COLD | SPECIAL_GENE | ACTIVATE | SPELL_CONTAIN | WIELD_CAST
+a:HARDCORE=REST_LIFE
+D:The opaque midnight folds, inset with a multitude of tiny diamonds, of
+D:this cloak swirl around you and you feel a hint, a fragment of the
+D:knowledge and power to restore that lay in Luthien, the most beautiful
+D:being that ever knew death.
+
+
+# The Shadow Cloak of Tuor
+
+N:50:of Tuor
+I:35:6:4
+W:40:40:5:35000
+P:6:0d0:0:0:12
+F:STEALTH | DEX | HIDE_TYPE | INVIS | WATER_BREATH
+F:FREE_ACT | IM_ACID | SEE_INVIS | CLIMB
+D:From the ruin of Gondolin did Tuor escape, through secret ways and travail,
+D:shielded by his cloak from a multitude of hostile eyes.
+
+
+# The Main Gauche of Azaghal, which wounded Glaurung
+N:51:of Azaghal
+I:23:5:0
+W:15:30:30:40000
+P:0:2d5:12:14:0
+F:KILL_DRAGON | IM_FIRE | ESP_DRAGON | RES_FEAR
+D:The weapon of Azaghal when he wounded Glaurung. It is deadly
+D:when fighting dragons and is said to make the breaths of fire
+D:completely harmless.
+
+
+# The Set of Leather Gloves 'Cambeleg'
+
+N:52:'Cambeleg'
+I:31:1:2
+W:10:6:5:36000
+P:1:0d0:8:8:15
+F:STR | CON | HIDE_TYPE |
+F:FREE_ACT | SHOW_MODS
+D:A hero's handgear that lends great prowess in battle.
+
+
+# The Set of Leather Gloves 'Cammithrim'
+
+N:53:'Cammithrim'
+I:31:1:0
+W:10:3:5:30000
+P:1:0d0:0:0:10
+F:FREE_ACT | RES_LITE | SUST_CON | LITE1 | ACTIVATE
+F:SPECIAL_GENE
+a:HARDCORE=BO_MISS_1
+D:These gloves glow so brightly as to light the way for their owner and cast
+D:magical bolts with great frequency.
+
+
+# The Set of Gauntlets 'Paurhach'
+
+N:54:'Paurhach'
+I:31:2:0
+W:10:5:25:15000
+P:2:1d1:0:0:15
+F:RES_FIRE | ACTIVATE | SPELL_CONTAIN | WIELD_CAST
+a:HARDCORE=BO_FIRE_1
+D:A fiery set of gauntlets that can even shoot fire from the user's
+D:hands.
+
+
+# The Set of Gauntlets 'Paurnimmen'
+
+N:55:'Paurnimmen'
+I:31:2:4
+W:10:5:25:33000
+P:2:1d1:0:0:15
+F:RES_COLD | ACTIVATE
+F:SUST_CON | CON | REGEN | SPELL_CONTAIN | WIELD_CAST
+a:HARDCORE=BO_COLD_1
+D:A set of handgear so icy as to be able to fire frost bolts.
+
+
+# The Set of Gauntlets 'Pauraegen'
+
+N:56:'Pauraegen'
+I:31:2:0
+W:10:5:25:11000
+P:2:1d1:0:0:15
+F:RES_ELEC | ACTIVATE | SPELL_CONTAIN | WIELD_CAST
+a:HARDCORE=BO_ELEC_1
+D:A set of handgear with sparks surrounding it, able to fire
+D:bolts of electricity.
+
+
+# The Set of Gauntlets 'Paurnen'
+
+N:57:'Paurnen'
+I:31:2:0
+W:10:5:25:12000
+P:2:1d1:0:0:15
+F:RES_ACID | ACTIVATE | SPELL_CONTAIN | WIELD_CAST
+a:HARDCORE=BO_ACID_1
+D:A set of handgear so corrosive that it may fire bolts of acid.
+
+
+# The Set of Gauntlets 'Camlost'
+
+N:58:'Camlost'
+I:31:2:-3
+W:10:20:25:0
+P:2:1d1:-11:-12:0
+F:STR | DEX | HIDE_TYPE | DRAIN_MANA |
+F:RES_POIS | IM_FIRE | IM_COLD | RES_DISEN | RES_NETHER | FREE_ACT |
+F:AGGRAVATE | SHOW_MODS | HEAVY_CURSE | TY_CURSE | TELEPORT | CURSED
+D:A pair of gauntlets that sap combat ability, named after the empty hand
+D:of Beren that once clasped a Silmaril.
+
+
+# The Set of Cesti of Fingolfin
+
+N:59:of Fingolfin
+I:31:5:4
+W:40:15:40:110000
+P:5:1d1:10:10:20
+F:DEX | HIDE_TYPE | LUCK
+F:FREE_ACT | RES_ACID | ACTIVATE | SHOW_MODS
+a:HARDCORE=BO_MISS_2
+Z:magic missile
+D:The hand-sheathing of Fingolfin, warrior-king of Elves and Men, who gave
+D:Morgoth seven mighty wounds and pain that will last forever.
+
+
+# The Pair of Hard Leather Boots of Feanor
+
+N:60:of Feanor
+I:30:3:15
+W:40:120:40:300000
+P:3:1d1:0:0:20
+F:SPEED | HIDE_TYPE |
+F:RES_NEXUS | ACTIVATE
+a:HARDCORE=SPEED
+D:This wondrous pair of leather boots once sped Feanor, creator of the
+D:Silmarils and the mightiest of the Eldar, along the Grinding Ice and to
+D:Middle-earth at last.
+
+
+# The Pair of Soft Leather Boots 'Dal-i-thalion'
+
+N:61:'Dal-i-thalion'
+I:30:2:5
+W:10:25:20:40000
+P:2:1d1:0:0:15
+F:DEX | HIDE_TYPE | CHR | SUST_CHR |
+F:ACTIVATE | FREE_ACT |
+F:RES_NETHER | RES_CHAOS | RES_CONF | SUST_CON
+a:HARDCORE=CURE_POISON
+D:A pair of high-laced shoes, strong against the powers of corruption and
+D:withering, that grant the wearer extraordinary agility.
+
+
+# The Pair of Metal Shod Boots of Thror
+
+N:62:of Thror
+I:30:6:3
+W:30:25:80:15000
+P:6:1d1:0:0:20
+F:STR | CON | HIDE_TYPE | SPEED | RES_FEAR | CLIMB
+D:Sturdy footwear of leather and steel as enduring as the long-suffering
+D:Dwarven King-in-exile who wore them. Of dwarven make, these boots will
+D:make their wearer completely at home in the mountains.
+
+
+# The Seeker Arrow of Bard
+# This is, of course, from my 'Artifact Ammo' thread and doesn't need much
+# explanation. It's rather nasty and deals 1000 or more damage on a
+# normal hit to a dragon. :) Doesn't put a dent in Sky Drakes and Power
+# Dragons, tho it's still good for helping to take down Smaug, Tiamat and
+# the other dragon uniques.
+# P+ changed name, rarity to 30
+
+N:63:of Bard
+I:17:2:0
+W:55:30:2:50000
+P:0:8d4:20:15:0
+F:SLAY_ANIMAL | SLAY_EVIL | SLAY_UNDEAD | SLAY_DEMON |
+F:SLAY_ORC | SLAY_TROLL | SLAY_GIANT | SLAY_DRAGON | KILL_DRAGON |
+F:BRAND_ACID | BRAND_ELEC | BRAND_FIRE | BRAND_COLD | BRAND_POIS
+D:Deadliest of arrows, imbued with elemental strength, this shaft is
+D:feared especially by the wyrmkin.
+
+
+# The Main Gauche of Maedhros
+
+N:64:of Maedhros
+I:23:5:3
+W:15:30:30:22500
+P:0:2d5:12:15:0
+F:INT | DEX | HIDE_TYPE | SPEED | SPECIAL_GENE
+F:SLAY_TROLL | SLAY_GIANT | FREE_ACT | SEE_INVIS | SHOW_MODS
+D:A short thrusting blade with a large guard worn by Maedhros the Tall,
+D:eldest son of Feanor, and wielded with his left hand after the loss of
+D:his right hand in the pits of Thangorodrim.
+
+
+# The Dagger 'Angrist'
+
+N:65:'Angrist'
+I:23:4:4
+W:20:80:12:125000
+P:0:2d4:10:15:5
+F:DEX | HIDE_TYPE | STEALTH | SEARCH | BRAND_POIS |
+F:SLAY_EVIL | SLAY_TROLL | SLAY_ORC | BRAND_ACID |
+F:FREE_ACT | RES_DARK | SUST_DEX | SEE_INVIS |
+F:SHOW_MODS
+D:Forged from meteoric iron, this long chopping dagger slices through
+D:ordinary metal as easily as its title, "Iron Cleaver", suggests.
+
+
+# The Dagger 'Narthanc'
+
+N:66:'Narthanc'
+I:23:4:0
+W:4:100:12:12000
+P:0:1d4:4:6:0
+F:BRAND_FIRE | RES_FIRE | ACTIVATE | SHOW_MODS | LITE1 | LEVELS
+a:HARDCORE=BO_FIRE_1
+D:A fiery dagger finely balanced for deadly throws.
+
+
+# The Dagger 'Nimthanc'
+
+N:67:'Nimthanc'
+I:23:4:0
+W:3:100:12:11000
+P:0:1d4:4:6:0
+F:BRAND_COLD | RES_COLD | ACTIVATE | SHOW_MODS | LEVELS
+a:HARDCORE=BO_COLD_1
+D:A frosty dagger finely balanced for deadly throws.
+
+
+# The Dagger 'Dethanc'
+
+N:68:'Dethanc'
+I:23:4:0
+W:5:100:12:13000
+P:0:1d4:4:6:0
+F:BRAND_ELEC | RES_ELEC | ACTIVATE | SHOW_MODS | LEVELS
+a:HARDCORE=BO_ELEC_1
+D:A dagger covered in sparks and finely balanced for deadly throws.
+
+
+# The Dagger of Rilia
+
+N:69:of Rilia
+I:23:4:0
+W:5:40:12:35000
+P:0:2d4:4:3:0
+F:SLAY_ORC | RES_POIS | RES_DISEN | ACTIVATE | SHOW_MODS | BRAND_POIS
+a:HARDCORE=BA_POIS_1
+D:A large stiletto dagger that glistens with odourless poison, to which the
+D:wearer seems oddly immune.
+
+
+# The Dagger 'Belangil'
+
+N:70:'Belangil'
+I:23:4:2
+W:10:40:12:50000
+P:0:2d4:6:9:0
+F:DEX | HIDE_TYPE | SPEED | BLOWS |
+F:BRAND_COLD | RES_COLD |
+F:SEE_INVIS | SLOW_DIGEST | REGEN |
+F:ACTIVATE | SHOW_MODS | BRAND_POIS
+a:HARDCORE=BELANGIL
+D:A frosty dagger surrounded in a nimbus of ice with a hilt of elk horn and
+D:an edge to wound the wind.
+
+
+# The Bastard Sword 'Calris'
+
+N:71:'Calris'
+I:23:21:5
+W:30:15:140:100000
+P:0:5d4:-20:20:0
+F:CON | HIDE_TYPE | DRAIN_HP |
+F:KILL_DRAGON | SLAY_EVIL | SLAY_DEMON | SLAY_TROLL | RES_DISEN |
+F:AGGRAVATE | CURSED | HEAVY_CURSE | SHOW_MODS | ESP_DRAGON | ESP_DEMON
+F:AUTO_CURSE
+F:COULD2H
+f:COULD2H
+D:This sword has runes of power incised on its ornate hilt and a single
+D:blood channel that gleams coldly blue as you grasp this mighty weapon of
+D:peril.
+
+
+# The Broad Sword 'Aranruth'
+
+N:72:'Aranruth'
+I:23:16:4
+W:20:45:150:125000
+P:0:3d5:20:12:0
+F:STR | DEX | CON | SUST_CON | SUST_STR
+F:REGEN | FREE_ACT | SEE_INVIS |
+F:RES_CHAOS | RES_NETHER | HOLD_LIFE | RES_FEAR |
+F:RES_COLD |
+F:SLAY_DEMON | SLAY_EVIL | SLAY_DRAGON | SLAY_UNDEAD |
+F:BRAND_COLD |
+F:SLOW_DIGEST | SHOW_MODS | HIDE_TYPE | BLESSED
+D:The beautiful sword of Thingol with a hilt of gold and silver inlay,
+D:glistening icily enough to freeze the hearts of demons. You feel supple
+D:and lightfooted as you hold it.
+
+
+# The Broad Sword 'Glamdring'
+
+N:73:'Glamdring'
+I:23:16:1
+W:20:20:150:40000
+P:0:2d5:10:15:0
+F:SEARCH | HIDE_TYPE | BLESSED | SLAY_DEMON |
+F:SLAY_EVIL | BRAND_FIRE | SLAY_ORC | RES_FIRE | RES_LITE | LITE1 |
+F:SLOW_DIGEST | SHOW_MODS | ESP_ORC | SPECIAL_GENE |
+D:This fiery, shining blade earned its sobriquet "Foe-Hammer" from dying orcs
+D:who dared to come near hidden Gondolin.
+
+
+# The Broad Sword 'Aeglin'
+
+N:74:'Aeglin'
+I:23:16:4
+W:20:90:150:95000
+P:0:2d5:12:16:0
+F:SEARCH | BLESSED | LITE1 | HIDE_TYPE |
+F:BRAND_ELEC | SLAY_ORC | SLAY_GIANT | SLAY_TROLL | RES_FEAR |
+F:RES_ELEC | RES_FIRE | RES_BLIND | ESP_ORC | ESP_GIANT | ESP_TROLL |
+F:SLOW_DIGEST | SHOW_MODS
+D:Like unto Orcrist and Glamdring, and like them long lost, this sword is
+D:continually coved in tiny arcs of captive lightning that flash and dance
+D:eerily in the globe of light they create.
+
+
+# The Broad Sword 'Orcrist'
+
+N:75:'Orcrist'
+I:23:16:3
+W:20:20:150:40000
+P:0:2d5:10:15:0
+F:SEARCH | ESP_ORC | SLAY_DRAGON | ESP_DRAGON | RES_COLD | HIDE_TYPE |
+F:SLAY_EVIL | BRAND_COLD | SLAY_ORC | RES_COLD | LITE1 | RES_DARK |
+F:SLOW_DIGEST | SHOW_MODS
+D:This coldly gleaming blade is called simply "Biter", by orcs who came to
+D:know its power all too well.
+
+
+# The Two-Handed Sword 'Gurthang'
+
+N:76:'Gurthang'
+I:23:25:2
+W:30:30:200:100000
+P:0:3d6:13:17:0
+F:STR | HIDE_TYPE | VORPAL | ESP_DRAGON | DRAIN_HP |
+F:RES_FIRE | RES_POIS | BRAND_FIRE | BRAND_POIS |
+F:KILL_DRAGON | SLAY_TROLL | FREE_ACT | SLOW_DIGEST | REGEN | SHOW_MODS
+F:MUST2H
+f:MUST2H
+D:A giant sword once wielded by mighty Turin, and a great dragonbane which
+D:bathed in Glaurung's blood: but beware, it will drink the blood of those
+D:who wield it eventually.
+
+
+# The Two-Handed Sword 'Zarcuthra'
+
+N:77:'Zarcuthra'
+I:23:25:4
+W:30:180:250:205000
+P:0:4d6:19:21:0
+F:STR | CHR | INFRA | HIDE_TYPE | VORPAL | DRAIN_MANA |
+F:KILL_DRAGON | SLAY_ANIMAL | SLAY_EVIL | BRAND_FIRE |
+F:SLAY_UNDEAD | SLAY_DEMON | SLAY_TROLL | SLAY_GIANT | SLAY_ORC |
+F:RES_FIRE | RES_CHAOS | FREE_ACT | SEE_INVIS | AGGRAVATE | SHOW_MODS
+F:MUST2H
+f:MUST2H
+D:Dark and deadly runes stand stark against the naked steel of this awesome
+D:weapon, and you feel a stunning power of slaying and rending as you
+D:slowly approach.
+
+
+# The Dark Sword 'Mormegil'
+
+N:78:'Mormegil'
+I:23:33:2
+W:30:15:250:0
+P:0:6d7:0:0:-20
+F:SPEED | IM_FIRE | RES_FIRE | BRAND_FIRE | RES_DISEN | RES_FEAR |
+F:AGGRAVATE | CURSED | HEAVY_CURSE | SHOW_MODS | LEVELS | TY_CURSE |
+F:BLOWS | SLAY_DRAGON | RES_CHAOS | ANTIMAGIC_50 |
+F:DRAIN_MANA | DRAIN_HP | DRAIN_EXP
+D:A foul, twisted sword with blackened spines and knobs, whose very name is a
+D:curse upon the lips of Elves and Men.
+
+
+# The Cutlass 'Gondricam'
+
+N:79:'Gondricam'
+I:23:12:3
+W:20:8:110:28000
+P:0:1d7:10:11:0
+F:DEX | STEALTH | HIDE_TYPE |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | FEATHER |
+F:SEE_INVIS | REGEN | SHOW_MODS
+D:Famed sea-defender of Lebennin. A short, slightly curved chopping blade
+D:with a perfect edge shining cleanly in the sun, an object of hate to the
+D:men of Umbar who met it in combat.
+
+
+# The Executioner's Sword 'Crisdurian'
+
+N:80:'Crisdurian'
+I:23:28:0
+W:40:15:260:111000
+P:0:4d5:18:19:0
+F:SLAY_DRAGON | SLAY_EVIL | SLAY_UNDEAD | SLAY_TROLL | SLAY_GIANT |
+F:SLAY_ORC | SEE_INVIS | SHOW_MODS | VORPAL | BRAND_POIS | WOUNDING
+F:MUST2H
+f:MUST2H
+D:A giant's weapon, with a long blade tall and straight thrusting out from a
+D:massive double-pronged hilt. On its blade are written doomspells against
+D:both the living and undead.
+
+
+# The Katana 'Aglarang'
+
+N:81:'Aglarang'
+I:23:20:5
+W:35:25:50:40000
+P:0:8d4:0:0:0
+F:DEX | TUNNEL | SPEED | HIDE_TYPE |
+F:SUST_DEX | SHOW_MODS
+F:COULD2H
+f:COULD2H
+D:An utterly perfect, cleanly chiselled sword, with a edge that effortlessly
+D:slices rock and bone, and spells to render the wearer lithe and nimble. It
+D:is combat incarnate.
+
+
+# The Long Sword 'Ringil'
+
+N:82:'Ringil'
+I:23:17:10
+W:20:120:130:300000
+P:0:4d5:22:25:0
+F:SPEED | HIDE_TYPE | RES_FEAR | BLESSED |
+F:SLAY_EVIL | BRAND_COLD | SLAY_UNDEAD | KILL_DEMON | SLAY_TROLL |
+F:FREE_ACT | RES_COLD | RES_LITE | LITE1 | SEE_INVIS | SLOW_DIGEST | REGEN |
+F:ACTIVATE | SHOW_MODS
+a:HARDCORE=BA_COLD_2
+D:The weapon of Fingolfin, High King of the Noldor; it shines like a column
+D:of ice lit by light unquenchable. Morgoth came but unwillingly to meet it
+D:of old; his lame foot will remind him of its might should he meet it again.
+
+
+# The Long Sword 'Anduril'
+
+N:83:'Anduril'
+I:23:17:4
+W:20:40:130:100000
+P:0:3d5:10:15:5
+F:STR | DEX | HIDE_TYPE | RES_FEAR | FREE_ACT | BLESSED | LUCK
+F:SLAY_EVIL | BRAND_FIRE | SLAY_TROLL | SLAY_ORC | FREE_ACT |
+F:RES_FIRE | SUST_DEX | SEE_INVIS | ACTIVATE | SHOW_MODS | LITE1
+F:RES_DISEN | SPECIAL_GENE
+a:HARDCORE=BA_FIRE_1
+D:The famed "Flame of the West", the sword that was broken and is forged
+D:again. It glows with the essence of fire, its wearer is mighty in combat,
+D:and no creature of Sauron can withstand it. It will never be stained or
+D:broken even in defeat.
+
+
+# The Long Sword 'Anguirel'
+
+N:84:'Anguirel'
+I:23:17:2
+W:20:30:130:40000
+P:0:2d5:8:12:0
+F:STR | CON | SPEED | HIDE_TYPE |
+F:SLAY_EVIL | BRAND_ELEC | SLAY_DEMON | FREE_ACT | RES_ELEC |
+F:RES_LITE | RES_DARK | SEE_INVIS | SHOW_MODS | VORPAL | WOUNDING
+F:AGGRAVATE | CURSED
+D:Forged of black galvorn by the Dark-Elven smith Eol, this blade has the
+D:living lightning trapped inside.
+
+
+# The Long Sword 'Elvagil'
+
+N:85:'Elvagil'
+I:23:17:2
+W:20:8:130:20000
+P:0:2d5:5:7:0
+F:DEX | CHR | STEALTH | HIDE_TYPE | ESP_ORC | ESP_TROLL
+F:SLAY_TROLL | SLAY_ORC | FEATHER | SEE_INVIS | SHOW_MODS
+D:The "Singing Blade", whose wearer can slay Orcs and Trolls in the hidden
+D:and secret places of the earth.
+
+
+# The Rapier 'Forasgil'
+
+N:86:'Forasgil'
+I:23:7:0
+W:15:8:40:15000
+P:0:1d6:12:19:0
+F:SLAY_ANIMAL | BRAND_COLD | RES_COLD | RES_LITE | SHOW_MODS
+D:A slender, tapered blade whose wielder strikes icy blows with deadly
+D:accuracy.
+
+
+# The Sabre 'Careth Asdriag'
+
+N:87:'Careth Asdriag'
+I:23:11:2
+W:15:8:50:25000
+P:0:2d7:6:8:0
+F:DEX | BLOWS | SPEED | CON |
+F:SLAY_DRAGON | SLAY_ANIMAL | SLAY_TROLL | SLAY_GIANT |
+F:SLAY_ORC | SHOW_MODS | ESP_ANIMAL
+D:An heirloom of the Lords of Rhun far to the east, and a name of
+D:dismay to creatures natural and unnatural.
+
+
+# The Small Sword 'Sting'
+
+N:88:'Sting'
+I:23:8:2
+W:20:205:75:100000
+P:0:1d6:7:8:0
+F:STR | DEX | CON | BLOWS | SPEED | LEVELS |
+F:ESP_ORC | ESP_UNDEAD | ESP_SPIDER |
+F:SLAY_EVIL | SLAY_UNDEAD | SLAY_ORC | SLAY_ANIMAL | LITE1 |
+F:FREE_ACT | RES_LITE | SEE_INVIS | SHOW_MODS |
+D:"I will give you a name, and I shall call you Sting." The perfect size
+D:for Bilbo, and stamped forever by the courage he found in Mirkwood, this
+D:sturdy little blade grants the wearer combat prowess and survival
+D:abilities they did not know they had.
+
+
+# The Scimitar 'Haradekket'
+
+N:89:'Haradekket'
+I:23:18:2
+W:20:8:130:111111
+P:0:2d5:9:11:0
+F:INT | WIS | BLOWS |
+F:SLAY_ANIMAL | SLAY_EVIL | SLAY_UNDEAD | SLAY_DRAGON | SLAY_DEMON |
+F:RES_CHAOS | RES_DISEN | RES_NEXUS |
+F:SEE_INVIS | BLESSED |
+F:SHOW_MODS
+D:A damascened scimitar that seems wondrously easy to hold. Famed in song as
+D:the "Sickle of Harad", and a deadly foe to the undead.
+
+
+# The Short Sword 'Gilettar'
+
+N:90:'Gilettar'
+I:23:10:2
+W:20:8:80:35000
+P:0:1d7:3:7:0
+F:BLOWS | HIDE_TYPE |
+F:SLAY_ANIMAL | SLOW_DIGEST | REGEN | SHOW_MODS | SEE_INVIS | RES_DISEN
+D:A stubby blade worn by Beren, whose horn sounded of old in the glades of
+D:Brethil.
+
+
+# The Blade of Chaos 'Doomcaller'
+
+N:91:'Doomcaller'
+I:23:30:0
+W:70:25:180:250000
+P:0:6d5:18:28:-50
+F:KILL_DRAGON | SLAY_ANIMAL | SLAY_EVIL | BRAND_COLD | SLAY_TROLL |
+F:SLAY_ORC | FREE_ACT | RES_ACID | RES_ELEC | RES_FIRE | RES_COLD |
+F:RES_CHAOS | SEE_INVIS | ESP_EVIL | AGGRAVATE | SHOW_MODS |
+F:CHAOTIC | VORPAL | BRAND_FIRE | BRAND_POIS | SPECIAL_GENE
+D:This weapon of wrath, cursed with a violent anger, dives hungrily
+D:into the flesh of its enemies. It gathers shadows of death into its
+D:owner as they inflict wounds that will never heal.
+
+
+# The Long Sword 'Vorpal Blade'
+
+N:92:'Vorpal Blade'
+I:23:17:2
+W:50:30:150:250000
+P:0:5d5:32:32:0
+F:VORPAL | SLAY_EVIL | WOUNDING
+F:FREE_ACT | SEE_INVIS | SLOW_DIGEST | REGEN | SPEED | STR | DEX
+D:"One, two! One, two! And through, and through, the vorpal blade
+D:went snicker-snack!"
+
+
+# The Beaked Axe of Theoden
+
+N:93:of Theoden
+I:22:10:3
+W:20:15:180:40000
+P:0:2d6:8:10:0
+F:WIS | CON | HIDE_TYPE |
+F:SLAY_DRAGON | ESP_EVIL | ESP_UNDEAD | SLOW_DIGEST | ACTIVATE | SHOW_MODS
+a:HARDCORE=DRAIN_2
+D:The narrow axe head of this weapon, finely balanced by a crow's beak,
+D:would pierce even the armour of Smaug, and its wielder becomes aware of
+D:the minds of their enemies.
+
+
+# The Glaive of Pain
+
+N:94:of Pain
+I:22:13:0
+W:30:155:190:50000
+P:0:9d6:0:30:0
+F:SHOW_MODS | LEVELS | DRAIN_MANA
+F:COULD2H
+f:COULD2H
+D:The massive chopper that crowns this glaive glows blood-red and black;
+D:fell spells of annihilation swirl and dance as you swing death's myrmidon
+D:down.
+
+
+# The Halberd 'Osondir'
+
+N:95:'Osondir'
+I:22:15:3
+W:20:8:190:22000
+P:0:3d5:6:9:0
+F:CHR | HIDE_TYPE |
+F:BRAND_FIRE | SLAY_UNDEAD | SLAY_GIANT | RES_FIRE | RES_SOUND |
+F:FEATHER | SEE_INVIS | SHOW_MODS | ESP_GIANT
+F:COULD2H
+f:COULD2H
+D:Lordly and tall did Osondir stand against the wrath of giants, and
+D:clear-eyed in barrows fell, wielding a halberd glowing ruby red.
+
+
+# The Pike 'Til-i-arc'
+
+N:96:'Til-i-arc'
+I:22:8:2
+W:20:15:160:32000
+P:0:2d5:10:12:10
+F:INT | HIDE_TYPE |
+F:BRAND_COLD | BRAND_FIRE | SLAY_DEMON | SLAY_TROLL | SLAY_GIANT | ESP_GIANT
+F:RES_FIRE | RES_COLD | SUST_INT | SLOW_DIGEST | SHOW_MODS |
+F:COULD2H
+f:COULD2H
+D:Within this long thrusting spear lie the spirits of frost giants and fire
+D:demons, who war forever, trapped by magely spells.
+
+
+# The Spear 'Aeglos'
+
+N:97:'Aeglos'
+I:22:2:4
+W:15:45:50:180000
+P:0:3d6:15:25:5
+F:DEX | WIS | HIDE_TYPE |
+F:BRAND_COLD | BRAND_ELEC | LITE1 |
+F:SLAY_TROLL | SLAY_ORC | SLAY_GIANT | KILL_UNDEAD |
+F:FREE_ACT | RES_COLD | RES_ELEC | RES_LITE |
+F:SLOW_DIGEST | ACTIVATE | BLESSED | SHOW_MODS |
+a:HARDCORE=BA_ELEC_2
+D:The mighty spear of Gil-galad, famed as "Snow-point" in the songs of
+D:Elves, against which all the foul corruptions of Sauron dashed in vain.
+
+
+# The Spear of Orome
+
+N:98:of Orome
+I:22:2:4
+W:15:45:50:77777
+P:0:4d6:15:15:0
+F:INT | WIS | SPEED | TUNNEL | INFRA | HIDE_TYPE | SEARCH |
+F:BRAND_FIRE |
+F:SLAY_GIANT | SLAY_EVIL | SLAY_DEMON | SLAY_UNDEAD | SLAY_DRAGON |
+F:RES_FIRE | RES_LITE | HOLD_LIFE | RES_FEAR |
+F:FEATHER | ESP_GIANT
+F:SEE_INVIS |
+F:ACTIVATE | BLESSED | SHOW_MODS
+a:HARDCORE=STONE_MUD
+D:The thrusting spear of wise Orome the Vala, strong against giants of frost,
+D:which can melt rock or flesh with ease.
+
+
+# The Spear 'Nimloth'
+
+N:99:'Nimloth'
+I:22:2:3
+W:15:12:50:30000
+P:0:1d6:11:13:0
+F:STEALTH | RES_DARK | INFRA | SPEED | BLESSED |
+F:BRAND_COLD | SLAY_UNDEAD | RES_COLD | SEE_INVIS | SHOW_MODS
+D:A thin spike of thrice-forged steel caps a straight sylvan shaft cut from
+D:a legendary tree; spells to break the will of the undead and strike cold
+D:fear into the hearts of foes lie on this perfectly balanced spear.
+
+
+# The Lance of Eorlingas
+
+N:100:of Eorlingas
+I:22:20:2
+W:20:23:360:55000
+P:0:3d8:3:21:0
+F:STR | DEX | SPEED | HIDE_TYPE | RES_FEAR |
+F:SLAY_EVIL | SLAY_TROLL | SLAY_ORC | SEE_INVIS | SHOW_MODS
+F:MUST2H
+f:MUST2H
+D:"Forth Eorlingas!" To the field of Cormallen came Eorl the Young
+D:to save beleaguered Gondor, and from his lance fled massive trolls
+D:and dire wolves.
+
+
+# The Great Axe of Durin
+
+N:101:of Durin
+I:24:25:3
+W:30:90:230:150000
+P:0:4d4:10:20:15
+F:STR | CON | TUNNEL | HIDE_TYPE | ESP_EVIL | RES_FEAR |
+F:SLAY_DRAGON | KILL_DEMON | SLAY_TROLL | SLAY_ORC | FREE_ACT |
+F:RES_ACID | RES_FIRE | RES_LITE | RES_DARK | RES_CHAOS | SHOW_MODS |
+F:BRAND_ACID | BRAND_FIRE
+F:MUST2H
+f:MUST2H
+D:The twin massive axe heads of this ancient demon's dread gleam with
+D:mithril inlay, which tell sagas of endurance, invoking the powers of
+D:Khazad-dum to protect the wearer and slay all evils found underground.
+
+
+# The Great Axe of Eonwe
+
+N:102:of Eonwe
+I:24:25:2
+W:30:120:230:200000
+P:0:4d4:15:18:8
+F:STR | INT | WIS | DEX | CON | CHR | HIDE_TYPE |
+F:SLAY_EVIL | BRAND_COLD | KILL_DEMON | SLAY_UNDEAD | ESP_NONLIVING
+F:SLAY_ORC | FREE_ACT | IM_COLD | SEE_INVIS | ACTIVATE |
+F:BLESSED | SHOW_MODS
+a:HARDCORE=MASS_GENO
+D:The axe of Eonwe, leader of the Hosts of the West before the gates of
+D:Thangorodrim, strikes with icy wrath at the undead, disperses hosts of
+D:evil at a word, and grants Maia-like powers of body and mind.
+
+
+# The Battle Axe of Balli Stonehand
+
+N:103:of Balli Stonehand
+I:22:22:3
+W:30:15:170:90000
+P:0:3d8:8:11:5
+F:STR | CON | STEALTH | HIDE_TYPE | ESP_NONLIVING
+F:SLAY_DEMON | SLAY_TROLL | SLAY_ORC | FREE_ACT |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_BLIND | FEATHER |
+F:SEE_INVIS | REGEN | SHOW_MODS
+F:COULD2H
+f:COULD2H
+D:The twin blades of this weapon were forged in Belegost, and powerful forces
+D:to resist and endure lie ready for he who shall wield it once more.
+
+
+# The Battle Axe 'Lotharang'
+
+N:104:'Lotharang'
+I:22:22:1
+W:30:15:170:21000
+P:0:2d8:4:3:0
+F:STR | DEX | HIDE_TYPE |
+F:SLAY_TROLL | SLAY_ORC | ACTIVATE | SHOW_MODS
+a:HARDCORE=CURE_MW
+D:A superbly crafted double-bladed axe that slays the creatures of earth and
+D:allows rapid recovery from their blows.
+
+
+# The Lochaber Axe 'Mundwine' -> of the Dwarves
+
+N:105:of the Dwarves
+I:22:28:10
+W:30:8:250:80000
+P:0:3d8:12:17:0
+F:SLAY_EVIL | TUNNEL | INFRA | SEARCH | SLAY_GIANT |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_FEAR |
+F:SHOW_MODS
+F:COULD2H
+f:COULD2H
+D:A massive axe with twin razor-sharp heads, so large that it usually
+D:requires two hands to wield, intricately engraved in gold with spells
+D:to ward off the elements and smite evil.
+
+
+# The Broad Axe 'Barukkheled'
+
+N:106:'Barukkheled'
+I:24:11:3
+W:20:8:160:50000
+P:0:2d6:13:19:0
+F:CON | HIDE_TYPE |
+F:SLAY_EVIL | SLAY_TROLL | SLAY_GIANT | SLAY_ORC |
+F:SEE_INVIS | SHOW_MODS
+F:COULD2H
+f:COULD2H
+D:A royal heirloom of the southern coast, strong in combat against evil
+D:creatures of the earth.
+
+
+# The Trident of Wrath
+
+N:107:of Wrath
+I:22:5:2
+W:15:35:300:90000
+P:0:3d8:16:18:0
+F:STR | DEX | HIDE_TYPE | CHAOTIC | DRAIN_MANA |
+F:SLAY_EVIL | KILL_UNDEAD | RES_LITE | RES_DARK | SEE_INVIS |
+F:BLESSED | SHOW_MODS
+F:COULD2H
+f:COULD2H
+D:A massive triple-pronged spear, so great it normally requires two hands to
+D:wield, evoking the spirit of Osse who with it pierced legions of
+D:evil and undead.
+
+
+# The Trident of Ulmo
+
+N:108:of Ulmo
+I:22:5:4
+W:30:90:70:120000
+P:0:4d8:15:19:0
+F:DEX | HIDE_TYPE |
+F:SLAY_DRAGON | SLAY_ANIMAL | FREE_ACT | HOLD_LIFE | IM_ACID |
+F:RES_NETHER | SEE_INVIS | SLOW_DIGEST | REGEN | ACTIVATE |
+F:BLESSED | SHOW_MODS | WATER_BREATH
+a:HARDCORE=TELE_AWAY
+D:The awesome weapon of the Vala Ulmo, Lord of Waters. Mightiest of all the
+D:powers of good save Manwe himself, Ulmo laughs in scorn at the dread powers
+D:of the undead, and is utterly in command of the element of water.
+
+
+# The Scythe 'Avavir'
+
+N:109:'Avavir'
+I:22:17:3
+W:40:8:250:18000
+P:0:5d3:8:8:10
+F:DEX | CHR | HIDE_TYPE |
+F:BRAND_COLD | BRAND_FIRE | FREE_ACT | RES_FIRE | RES_COLD |
+F:RES_LITE | SEE_INVIS | ACTIVATE | SHOW_MODS
+F:COULD2H
+f:COULD2H
+a:HARDCORE=RECALL
+D:With elemental powers whose struggles turn this weapon red and purest
+D:white, this shining reaper bears within it a power of going forth and
+D:returning.
+
+
+# The Long Sword of the Dawn
+
+N:110:of the Dawn
+I:23:17:3
+W:40:160:130:250000
+P:0:3d5:20:20:0
+F:ACTIVATE | BRAND_FIRE | FREE_ACT | RES_FIRE | INFRA | LEVELS |
+F:SLAY_EVIL | SLAY_DRAGON | SLAY_UNDEAD | SLAY_DEMON | VORPAL | CLONE |
+F:CHR | SUST_CHR | RES_FEAR | RES_LITE | RES_BLIND | REGEN | SHOW_MODS
+a:HARDCORE=DAWN
+D:Forged in the farthest East by a race of mighty spellcasters, this
+D:shiny pale sword gleams with the rays of rising sun as you invoke
+D:its power of commanding legions of powerful immortal warriors...
+
+
+# The Mighty Hammer 'Grond'
+
+N:111:'Grond'
+I:21:50:2
+W:100:1:1000:500000
+P:0:9d9:25:25:10
+F:KILL_DRAGON | SLAY_ANIMAL | SLAY_EVIL | IMPACT | KILL_UNDEAD | NO_MAGIC |
+F:KILL_DEMON | SLAY_TROLL | SLAY_ORC | RES_ACID | RES_ELEC | RES_FIRE |
+F:RES_COLD | SEE_INVIS | ESP_ALL | AGGRAVATE | SHOW_MODS | INSTA_ART |
+F:LEVELS | ACTIVATE | SPECIAL_GENE
+F:MUST2H
+f:MUST2H
+a:HARDCORE=GROND
+D:The mighty Hammer of the Underworld, blackened by doomspells of shattering,
+D:whose wielder holds the lives of all Morgoth's servants in his hand.
+
+
+# The Flail 'Totila'
+
+N:112:'Totila'
+I:21:13:2
+W:20:8:150:55000
+P:0:3d6:6:8:0
+F:STEALTH |
+F:SLAY_EVIL | BRAND_FIRE | RES_FIRE | RES_CONF | ACTIVATE |
+F:SHOW_MODS | LITE1
+F:COULD2H
+f:COULD2H
+a:HARDCORE=CONFUSE
+D:A flail whose head befuddles those who stare as you whirl it around, and
+D:becomes a fiery comet as you bring it down.
+
+
+# The Two-Handed Flail 'Thunderfist'
+
+N:113:'Thunderfist'
+I:21:18:4
+W:45:38:300:160000
+P:0:3d6:5:18:0
+F:STR | CON | HIDE_TYPE | RES_FEAR |
+F:SLAY_ANIMAL | BRAND_FIRE | BRAND_ELEC | SLAY_TROLL | SLAY_ORC |
+F:RES_ELEC | RES_FIRE | RES_DARK | SHOW_MODS |
+F:MUST2H
+f:MUST2H
+D:The long-lost weapon of Kzurin, Dwarven champion of ancient Belegost,
+D:with runes of strength in its handle, and flames and sparks that roar and
+D:crackle around its massive head.
+
+
+# The Morning Star 'Bloodspike'
+
+N:114:'Bloodspike'
+I:21:12:4
+W:20:30:150:30000
+P:0:2d6:8:22:0
+F:STR | HIDE_TYPE | BRAND_POIS |
+F:SLAY_ANIMAL | SLAY_TROLL | SLAY_ORC | RES_NEXUS | SEE_INVIS |
+F:SHOW_MODS
+D:You feel strong and firm of foot as you whip the chain-suspended spiked orb
+D:around - and bathe it in the blood of your foes.
+
+
+# The Morning Star 'Firestar'
+
+N:115:'Firestar'
+I:21:12:0
+W:20:100:150:35000
+P:0:2d6:5:7:2
+F:BRAND_FIRE | IM_FIRE | ACTIVATE | SHOW_MODS | LITE1
+a:HARDCORE=FIRESTAR
+D:A famed battle-lord of old, with a ruddy head, coloured as embers are that
+D:can yet rise up in wrath.
+
+
+# The Mace 'Taratol'
+
+N:116:'Taratol'
+I:21:5:0
+W:20:15:200:50000
+P:0:3d4:12:12:0
+F:KILL_DRAGON | BRAND_ELEC | IM_ELEC | ACTIVATE | SHOW_MODS
+F:COULD2H
+f:COULD2H
+a:HARDCORE=SPEED
+D:A great ridged mace that calls around you a nimbus of living lightning;
+D:you remain utterly untouched even as fat sparks arc around your
+D:fingers and eyebrows.
+
+
+# The War Hammer of Aule
+
+N:117:of Aule
+I:21:8:4
+W:40:75:120:250000
+P:0:9d3:19:21:5
+F:WIS | TUNNEL | HIDE_TYPE | RES_FEAR |
+F:KILL_DRAGON | SLAY_EVIL | BRAND_ELEC | SLAY_UNDEAD | SLAY_DEMON |
+F:FREE_ACT | RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_NEXUS |
+F:SEE_INVIS | SHOW_MODS
+F:COULD2H
+f:COULD2H
+D:The wondrous hammer of Aule, creator of the wise Dwarven lords of old.
+D:It bears magics of demolishing that no serpent or demon can withstand, and
+D:invokes the strength of mountains to ward off the tumult of the elements.
+
+
+# The Quarterstaff 'Nar-i-vagil'
+
+N:118:'Nar-i-vagil'
+I:21:3:3
+W:20:18:150:70000
+P:0:1d9:10:20:0
+F:INT | HIDE_TYPE |
+F:SLAY_ANIMAL | BRAND_FIRE | RES_FIRE | SHOW_MODS
+F:COULD2H
+f:COULD2H
+D:Named for a fiery star and set with gems of great worth binding mystic
+D:virtues of protection and thought.
+
+
+# The Quarterstaff 'Eriril'
+
+N:119:'Eriril'
+I:21:3:4
+W:20:18:150:20000
+P:0:1d9:3:5:0
+F:INT | WIS | HIDE_TYPE | ESP_EVIL | SPELL_CONTAIN | WIELD_CAST
+F:SLAY_EVIL | RES_LITE | SEE_INVIS | ACTIVATE | SHOW_MODS
+a:HARDCORE=ID_PLAIN
+D:The radiant golden staff of an Istari of legend, this wizard's companion
+D:grants keen sight and the knowledge of many hidden things.
+
+
+# The Quarterstaff of Olorin
+
+N:120:of Olorin
+I:21:3:4
+W:30:105:150:140000
+P:0:2d9:10:13:0
+F:INT | WIS | CHR | HIDE_TYPE | SEARCH | BRAND_FIRE |
+F:SLAY_EVIL | BRAND_FIRE | SLAY_TROLL | SLAY_ORC | SPELL_CONTAIN | WIELD_CAST
+F:HOLD_LIFE | RES_FIRE | RES_NETHER | SEE_INVIS | ACTIVATE | SHOW_MODS
+a:HARDCORE=DETECT_XTRA
+D:A staff tall and sturdy, with rough-hewn runes that invoke the element of
+D:Earth, and which strikes down all creatures who live in the shadow of
+D:mountains.
+
+
+# The Mace of Disruption 'Deathwreaker'
+
+N:121:'Deathwreaker'
+I:21:20:6
+W:80:38:400:444444
+P:0:7d8:18:18:0
+F:STR | TUNNEL | HIDE_TYPE | NO_TELE | DRAIN_MANA |
+F:SLAY_DRAGON | SLAY_ANIMAL | SLAY_EVIL | KILL_UNDEAD | BRAND_FIRE |
+F:IM_FIRE | RES_DARK | RES_CHAOS | RES_DISEN | AGGRAVATE |
+F:SHOW_MODS | BRAND_POIS | VAMPIRIC
+F:MUST2H
+f:MUST2H
+D:A weapon so massive it seems beyond the strength of mortals, yet you feel
+D:the might of giants within you as you heft it. As you grip the handle
+D:of ebony and steel, coronas of fire blaze and mighty spells to preserve
+D:magic activate around you. You wield the Fear of Dragons and the Despair
+D:of the Undead!
+
+
+# The Lucerne Hammer 'Turmil'
+
+N:122:'Turmil'
+I:21:10:4
+W:20:15:120:30000
+P:0:2d5:10:6:8
+F:WIS | INFRA | HIDE_TYPE |
+F:BRAND_COLD | SLAY_ORC | RES_COLD | RES_LITE | REGEN |
+F:ACTIVATE | SHOW_MODS | ESP_ORC | ESP_TROLL | ESP_GIANT
+F:COULD2H
+f:COULD2H
+a:HARDCORE=TURMIL
+D:Wielded by the High Priest of Meneltarma, this great mace gleams coldly as
+D:though moonlit, and it can strike as mighty a blow spiritually as
+D:physically.
+
+
+# The Whip of Gothmog
+
+N:123:of Gothmog
+I:21:2:-2
+W:20:15:120:100000
+P:0:3d6:15:16:0
+F:INT | DEX | INFRA | HIDE_TYPE | DRAIN_HP |
+F:HEAVY_CURSE | CURSED | AGGRAVATE |
+F:BRAND_FIRE | SLAY_ANIMAL | SLAY_DEMON | RES_FIRE | ESP_SPIDER
+F:VORPAL | RES_LITE | LITE1 | REGEN | ESP_DEMON | WOUNDING
+F:SHOW_MODS
+D:With this unbearably bright whip of flame, the Balrog Gothmog has become
+D:known for never having lost in combat.
+
+
+# The Long Bow 'Belthronding'
+
+N:124:'Belthronding'
+I:19:13:3
+W:40:20:40:35000
+P:0:0d0:20:22:0
+F:DEX | STEALTH | HIDE_TYPE |
+F:RES_DISEN | XTRA_SHOTS | SHOW_MODS
+D:The great bow of Beleg, made of black yew and strung with elven hair that
+D:faintly shines a pale clear gold.
+
+
+# The Long Bow of Bard
+
+N:125:of Bard
+I:19:13:2
+W:30:20:40:20000
+P:0:0d0:17:19:0
+F:DEX | HIDE_TYPE | ESP_DRAGON | LUCK
+F:FREE_ACT | XTRA_MIGHT | SHOW_MODS
+D:The great yew bow of grim-faced Bard, who shot the mightiest arrow that
+D:songs record.
+
+
+# The Light Crossbow 'Cubragol'
+
+N:126:'Cubragol'
+I:19:23:10
+W:50:25:110:50000
+P:0:0d0:10:14:0
+F:SPEED | HIDE_TYPE |
+F:RES_FIRE | ACTIVATE | SHOW_MODS
+a:HARDCORE=CUBRAGOL
+D:A crossbow that grants fiery speed to he who finds it, and from which
+D:shoot bolts that blaze with flame unquenchable.
+
+
+# The Mage Staff of Eternity
+# Really powerful for a mage but extremely rare
+# The ULTIMATE "weapon" for a Sorceror or a magic class
+
+N:127:of Eternity
+I:6:1:12
+W:127:220:20:9000000
+P:0:1d4:-19:-19:0
+F:INT | CHR | WIS | MANA | SPELL | ACTIVATE |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | LUCK | SPECIAL_GENE
+F:SEE_INVIS | ESP_EVIL | ESP_DEMON | NEVER_BLOW | INFRA
+F:PRECOGNITION | IM_FIRE | ULTIMATE | SPELL_CONTAIN | WIELD_CAST
+F:COULD2H
+f:COULD2H
+a:HARDCORE=GANDALF
+D:A simple, wooden wizard's staff. Unremarkable in all aspects...
+D:except that it pulses with overwhelming power.
+
+
+# Boomerang Artifacts
+# The Metal Boomerang of Beor
+
+N:128:of Beor
+I:15:4:4
+W:20:10:20:40000
+P:0:4d5:8:12:0
+F:DEX | SPEED |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD
+D:Beor's boomerang makes its wielder as agile as the winds,
+D:and as hard to harm.
+
+
+# The Metal Boomerang 'Glimdrir'
+
+N:129:'Glimdrir'
+I:15:4:3
+W:40:20:20:60000
+P:0:5d5:15:16:0
+F:DEX | SPEED | FREE_ACT | BRAND_POIS | SLAY_EVIL | SLAY_UNDEAD | REGEN
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_SOUND | NO_TELE | CURSED
+D:A powerful boomerang that makes one agile and fast, with a thirst for
+D:evil and undead creatures, but demands its wielder not teleport, for fear
+D:of desertion.
+
+
+# The Robe of Incanus [aka Gandalf]
+
+N:130:of Incanus
+I:36:2:3
+W:30:20:20:60000
+P:2:0d0:0:0:20
+F:INT | WIS | SEARCH | HIDE_TYPE | SPELL_CONTAIN | WIELD_CAST
+F:SUST_INT | SUST_WIS | FREE_ACT | SEE_INVIS |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD |
+Z:weigh magic
+D:Gandalf's long, flowing robe. It provides insight and allows the
+D:wearer to see things not seen by all.
+
+
+# The Sling of the Thain
+
+N:131:of the Thain
+I:19:2:4
+W:40:20:40:35000
+P:0:0d0:15:15:0
+F:HIDE_TYPE | DEX | CON
+F:RES_NETHER | XTRA_SHOTS | XTRA_MIGHT | SHOW_MODS
+D:This sling was crafted by Faramir I, Thain of the Shire, just in case
+D:the nasties of his father's stories ever dare to enter the Shire again.
+
+
+# The Whip 'Lasher'
+
+N:134:'Lasher'
+I:21:2:3
+W:20:5:30:50000
+P:0:1d6:12:15:0
+F:DEX | BLOWS | HIDE_TYPE |
+F:SLAY_ANIMAL | SLAY_ORC | BRAND_POIS | VORPAL |
+F:RES_POIS | FREE_ACT | ESP_ORC
+D:A powerful whip that is deadly against orcs. It poisons your foes
+D:and is said to go "snicker snack".
+
+
+# The Seeker Arrow 'Bullseye'
+
+N:135:'Bullseye'
+I:17:2:0
+W:45:1:2:50000
+P:0:7d4:20:15:0
+F:SLAY_ANIMAL | SLAY_EVIL | SLAY_UNDEAD | KILL_DEMON |
+F:SLAY_ORC | SLAY_TROLL | SLAY_GIANT | SLAY_DRAGON |
+F:BRAND_ACID | BRAND_ELEC | BRAND_FIRE | BRAND_COLD | BRAND_POIS
+D:A powerful arrow that is feared by even the mightiest demons.
+
+
+# The Rounded Pebble 'Travak'
+
+N:136:'Travak'
+I:16:0:0
+W:5:1:2:5000
+P:0:3d6:8:5:0
+F:BRAND_ACID | BRAND_ELEC | BRAND_FIRE | BRAND_COLD | BRAND_POIS
+D:A rounded pebble imbued with the powers of the elements.
+
+
+# The Harp of Maglor
+
+N:137:of Maglor
+I:14:59:3
+W:60:10:20:100000
+P:0:3d4:0:0:0
+F:CHR | SPEED | WIS | SEE_INVIS | RES_SOUND | STEALTH | LUCK
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | ESP_UNIQUE | WIELD_CAST
+D:This harp that once belonged to Maglor makes those who use it seem
+D:more forceful and convincing. It is also said that those who have
+D:used it found themselves walking faster, as if to an unheard beat.
+
+
+# The Drum of the Sky
+
+N:138:of the Sky
+I:14:58:2
+W:40:10:15:80000
+P:0:3d4:0:0:0
+F:CHR | SPEED | WIS | SEE_INVIS | RES_SOUND | STEALTH | LUCK
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | WIELD_CAST
+D:The drum is decorated with the images of the stars, the clouds, the
+D:Sun guided by Arien and the Moon with Tilion. It imparts to the
+D:wearer an echo of the beauty of the sky, and protects him from the
+D:elements day or night. The beat of the drum marks the passage of
+D:time, and will make time pass differently for the wearer.
+
+
+# The Harp of Daeron
+
+N:139:of Daeron
+I:14:59:1
+W:20:10:10:50000
+P:0:3d4:0:0:0
+F:CHR | SPEED | WIS | RES_SOUND | STEALTH | LUCK
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | WIELD_CAST
+D:A pretty harp that makes those who play it beautiful, wise and
+D:fast.
+
+
+# The Dwarven Pick of Erebor
+
+N:140:of Erebor
+I:20:6:5
+W:50:15:200:55000
+P:0:3d4:0:0:0
+F:STR | TUNNEL | SUST_STR | HIDE_TYPE | LITE1 | ACTIVATE | CLIMB
+F:RES_CHAOS | RES_LITE | RES_DARK
+a:HARDCORE=EREBOR
+D:A pick that provides a magical light by which to see while tunnelling.
+
+
+# The Drum of the Druedain
+
+N:141:of the Druedain
+I:14:58:4
+W:19:10:15:10000
+P:0:3d4:0:0:0
+F:ACTIVATE | STEALTH | SEARCH | INFRA | RES_POIS | RES_DARK | WIELD_CAST
+a:HARDCORE=DRUEDAIN
+D:The fabled Drum of the Druedain that will protect those who play it
+D:from darkness and poison attacks. It also aids in the seeing of
+D:warm-blooded creatures.
+
+
+# The Horn of Rohan
+
+N:142:of Rohan
+I:14:60:2
+W:14:10:15:80000
+P:0:3d4:0:0:0
+F:ACTIVATE | CHR | WIS | ESP_DRAGON | WIELD_CAST
+a:HARDCORE=ROHAN
+D:A horn carved from the bones of the Dragon of Ered-Mithrin, this
+D:heirloom of the House of Eorl bestows to its user the gifts of
+D:courage and command.
+
+
+# The Horn of Helm
+
+N:143:of Helm
+I:14:60:2
+W:16:10:15:15000
+P:0:3d4:0:0:0
+F:ACTIVATE | STR | CON | IM_COLD | RES_NETHER | RES_FEAR | WIELD_CAST
+a:HARDCORE=HELM
+D:Heedless of cold, fearless of darkness -- besiegers fled at the wind
+D:of the solitary coming of King Helm Hammerhand, proclaimed by a single
+D:horn-blast in the dead of winter.
+
+
+# The Horn of Boromir
+
+N:144:of Boromir
+I:14:60:3
+W:18:10:15:18000
+P:0:3d4:0:0:0
+F:ACTIVATE | STR | CON | RES_FEAR | RES_FIRE | AGGRAVATE | WIELD_CAST
+a:HARDCORE=BOROMIR
+D:Boromir's horn gives courage and endurance to the wearer, provided he does
+D:not wish to travel in secrecy: for it must always sound when its wielder
+D:sets forth on a journey. "Loud and clear it sounds in the valleys of the
+D:hills... and then let all the foes of Gondor flee!"
+
+
+# The Lochaber Axe of Gothmog, which slew Fingon
+
+N:145:of Gothmog
+I:22:28:-4
+W:30:8:250:30000
+P:0:3d8:14:19:0
+F:BRAND_FIRE | IM_FIRE | CHR | ACTIVATE | SHOW_MODS | CURSED | TY_CURSE
+a:HARDCORE=AXE_GOTHMOG
+D:The black axe of Gothmog, which struck Fingon at Nirnaeth. Mighty
+D:spells of evil make it unsafe in any hands but those of its original wielder.
+
+
+# The Seeker Arrow of Gondor
+
+N:146:of Gondor
+I:17:2:0
+W:20:5:3:25000
+P:0:10d8:10:20:0
+F:SLAY_EVIL | SLAY_DEMON
+D:An arrow that was created to rid the world of demons.
+
+
+# The Long Sword of Eternity
+# The ULTIMATE weapon for a warrior class
+
+N:147:of Eternity
+I:23:17:10
+W:127:220:130:9000000
+P:0:5d6:21:26:50
+F:LIFE | CON | CHR | LUCK
+F:SUST_STR | SUST_INT | SUST_WIS | SUST_DEX | SUST_CON | SUST_CHR |
+F:BRAND_FIRE | BRAND_COLD | BRAND_ELEC | VORPAL | IM_COLD |
+F:SLAY_EVIL | SLAY_UNDEAD | SLAY_DEMON | SLAY_TROLL | SLAY_DEMON |
+F:FREE_ACT | RES_FIRE | RES_DARK | LITE1 | SEE_INVIS | SLOW_DIGEST | REGEN |
+F:ACTIVATE | SHOW_MODS | BLESSED |
+F:PRECOGNITION | NO_MAGIC | ULTIMATE | SPECIAL_GENE
+a:HARDCORE=ERU
+D:A warm light bathes this translucent blade. The power of the fates are
+D:at the command of its wielder as the weapon passes Supreme Judgment on
+D:the inhabitants of Angband.
+
+
+# The Robe of Great Luck
+
+N:148:of Great Luck
+I:36:2:60
+W:50:120:20:60000
+P:-30:0d0:0:0:-20
+F:LUCK | HIDE_TYPE |
+F:FREE_ACT | DRAIN_HP | DRAIN_MANA
+D:A powerful wizard once created this robe to grant him incredible luck....
+D:It seems he forgot to wear it.
+
+
+# The Sling of Farmer Maggot
+
+N:149:of Farmer Maggot
+I:19:2:2
+W:10:10:5:20000
+P:0:0d0:20:0:0
+F:INFRA | SEARCH | HIDE_TYPE |
+F:XTRA_SHOTS | SHOW_MODS | ACTIVATE | SPECIAL_GENE
+a:SPELL=Artifact Maggot
+D:This ordinary seeming leather sling has been raised to legendary
+D:status amongst generations of hobbit children. Farmer Maggot's
+D:ability to notice and strike any mushroom thief anywhere within
+D:his patch almost keeps young poachers at bay, but once they get
+D:within range they soon flee for less painful pastures, frequently
+D:with rounded pebbles stinging their backsides...
+
+
+# The Long Sword of Angmar (a.k.a. anti-Ringil)
+# The next time someone wields an unidentified Long Sword (4d5) ...
+
+N:150:of Angmar
+I:23:17:-10
+W:20:40:130:30000
+P:0:4d5:-22:-25:0
+F:SPEED | STR | WIS | CHR | ESP_UNDEAD
+F:BRAND_FIRE | SEE_INVIS | SLOW_DIGEST | FREE_ACT |
+F:VAMPIRIC | NO_TELE | AGGRAVATE | WRAITH | INVIS |
+F:CURSED | HEAVY_CURSE | DG_CURSE | SHOW_MODS | CLONE |
+D:Dark flames wreath the naked steel of the Witch-King of Angmar.
+D:A mighty curse to all those who wield it apart from its master,
+D:the torture of the wraithworld awaits those who dare.
+
+
+# The Seeker Bolt of Feanor
+
+N:151:of Feanor
+I:18:2:0
+W:127:220:130:100000
+P:0:5d5:5:6:0
+F:BRAND_COLD | BRAND_FIRE | BRAND_ELEC | BRAND_ACID | BRAND_POIS |
+F:SLAY_DRAGON | SLAY_GIANT | SLAY_TROLL | KILL_UNDEAD | SLAY_ORC |
+F:SLAY_DEMON | SLAY_EVIL | SPECIAL_GENE
+D:Made during the war against Morgoth by Feanor, this powerful
+D:bolt is the bane of Morgoth's power, and has especial strength
+D:against those foes who are already dead.
+
+
+# The Heavy Crossbow of Eternity
+# The ULTIMATE bow for an archer class
+
+N:152:of Eternity
+I:19:24:5
+W:127:220:130:8000000
+P:0:0d0:36:28:0
+F:SEE_INVIS | SLOW_DIGEST | FREE_ACT | SPEED | DEX | CON | FLY | LUCK
+F:XTRA_MIGHT | XTRA_SHOTS | IM_ELEC | REFLECT | INVIS | STEALTH |
+F:SUST_STR | SUST_INT | SUST_WIS | SUST_DEX | SUST_CON | SUST_CHR |
+F:RES_CHAOS | RES_DISEN | RES_CONF | RES_BLIND | INFRA | ESP_ORC | ESP_TROLL | ESP_EVIL |
+F:PRECOGNITION | NO_MAGIC | ULTIMATE | SPECIAL_GENE
+D:Designed to be used with the Seeker Bolt of Feanor, this Crossbow
+D:is perfect against the terrible powers of Morgoth.
+
+
+# The Soft Leather Armour of the Sandworm
+
+N:153:of the Sandworm
+I:36:4:5
+W:30:3:80:65000
+P:30:0d0:0:0:0
+F:RES_POIS | RES_ELEC | RES_FIRE | RES_ACID | SPECIAL_GENE
+F:TUNNEL | STR | STEALTH | INFRA | ESP_ANIMAL
+D:This powerful piece of armour was made using the remains of
+D:the Sandworm Queen.
+
+
+# The Lochaber Axe 'Dragonbane'
+
+N:154:'Dragonbane'
+I:22:28:2
+W:70:20:260:33000
+P:0:3d8:20:20:0
+F:BLOWS | KILL_DRAGON | RES_ACID | RES_ELEC | RES_FIRE | RES_COLD |
+F:RES_POIS | SHOW_MODS
+D:Forged by the Dwarves to defend their home of Khazad-dum from dragons,
+D:this axe has been lost to time... until now.
+
+
+# The Light War Axe 'Limbslicer'
+
+N:155:'Limbslicer'
+I:24:8:4
+W:15:3:140:12000
+P:0:2d5:12:15:0
+F:DEX | VORPAL | HIDE_TYPE | SHOW_MODS | WOUNDING
+D:The Petty-dwarves of Bathak forged this blade, and it shares their thirst
+D:for blood.
+
+
+# The Broad Axe 'Orchast'
+
+N:156:'Orchast'
+I:24:11:4
+W:15:2:170:12000
+P:0:2d7:20:14:0
+F:DEX | SEARCH | SLAY_ORC | ACTIVATE | HIDE_TYPE | SHOW_MODS
+F:COULD2H
+f:COULD2H
+a:HARDCORE=ORCHAST
+D:Forged by the dwarves of Khazad-dum in a time of desperation,
+D:this axe turned many a battle against the invading orcs.
+
+
+# The Hatchet of the Night
+
+N:157:of the Night
+I:24:1:4
+W:45:20:45:34000
+P:0:2d6:34:22:0
+F:DEX | STEALTH | VAMPIRIC | KILL_UNDEAD | RES_DARK | HIDE_TYPE |
+F:SHOW_MODS | SEE_INVIS | ACTIVATE | DRAIN_EXP
+a:HARDCORE=NIGHT
+D:Found on an unmarked grave after a violent storm, this hatchet
+D:has a sinister aura of darkness and decay.
+
+
+# The Slaughter Axe 'Naturebane'
+
+N:158:'Naturebane'
+I:24:30:3
+W:70:20:300:28400
+P:0:5d7:31:27:0
+F:STR | SLAY_ANIMAL | SUST_STR | RES_SHARDS | RES_NEXUS | FEATHER |
+F:HIDE_TYPE | SHOW_MODS | ACTIVATE | DRAIN_HP
+a:HARDCORE=NATUREBANE
+D:Used by the orcs in their battle at Dagor Bragollach against the elves, this
+D:axe has a bloodthirst for nature.
+
+
+# The Light War Axe of Ice
+
+N:159:of Ice
+I:24:8:3
+W:30:25:140:26550
+P:0:2d5:3:15:0
+F:INT | CHR | SUST_DEX | BRAND_COLD | IM_COLD | RES_NEXUS | HIDE_TYPE |
+F:SHOW_MODS
+D:Crafted of purest ice and held solid by powerful spells, this icy axe
+D:delivers a chill of death to its victims.
+
+
+# The Iron Helm of Knowledge
+
+N:160:of Knowledge
+I:32:5:-6
+W:20:5:75:100000
+P:6:1d3:0:0:20
+F:LITE1 | HIDE_TYPE | SPECIAL_GENE | LUCK
+F:AUTO_ID | ACTIVATE
+a:HARDCORE=KNOWLEDGE
+D:This helm, designed by Petty-Dwarves ages ago to act as the brain of a
+D:long lost project, is made of finest glass. Its light banishes all secrets,
+D:and makes audible whispers from the deceased.
+
+
+### Trapping Kits ###
+
+### note prices and rarities may have to be adjusted ###
+
+# The Catapult Trap Set of Ahromarwar
+
+N:161:of Ahromarwar
+I:46:1:3
+W:20:10:40:20000
+P:0:0d0:25:15:30
+F:STEALTH | AUTOMATIC_99 | XTRA_MIGHT | HIDE_TYPE
+D:A trap that can almost never be detected. Its missiles may be mere pebbles,
+D:but fired at an incredibly high velocity to penetrate even the toughest
+D:hide or armour.
+
+
+# The Device Trap Set 'Hanisbroner's Surprise'
+
+N:162:'Hanisbroner's Surprise'
+I:46:6:3
+W:20:20:40:20000
+P:0:0d0:0:0:25
+F:STEALTH | XTRA_SHOTS | TELEPORT_TO | HIDE_TYPE | AUTOMATIC_99
+D:A magical trap, armed with a wand. Unaccountably, its victims keep
+D:on coming back for more...
+
+
+# The Bolt Trap Set 'Merlion Karc's Demonbane'
+
+N:163:'Merlion Karc's Demonbane'
+I:46:3:2
+W:20:20:200:20000
+P:0:0d0:17:27:37
+F:STEALTH | XTRA_SHOTS | XTRA_MIGHT | HIDE_TYPE | ONLY_DEMON
+D:A snare set not for animals, or people, but for demons alone, and
+D:enchanted so that whenever the demon sets foot or claw into the
+D:(hidden) pentagram, its hide is immediately pierced by many magical
+D:crossbow bolts.
+
+
+# The Broken Sword 'Narsil'
+
+N:164:'Narsil'
+I:23:2:2
+W:20:5:30:2000
+P:0:3d2:6:10:0
+F:STR | DEX | HIDE_TYPE | BLESSED |
+F:SLAY_ORC | SLAY_TROLL | RES_FIRE
+D:The sword that was broken shall be reforged...
+
+
+# The Steel Helm 'Lebohaum'
+# The name comes from a french parody of dungeon dwelling in mp3
+# http://penofchaos.com/warham.htm
+
+N:165:'Lebohaum'
+I:32:6:0
+W:20:15:15:25000
+P:20:0d0:0:0:80
+F:ACTIVATE
+a:SPELL=Artifact Lebauhaum
+D:With the Helm 'Lebohaum' your head is safe!
+
+
+# The Power Dragon Scale Mail 'Mediator'
+
+N:166:'Mediator'
+I:38:30:0
+W:95:12:500:400000
+P:50:2d4:-8:0:35
+F:FEATHER | FLY | ESP_DRAGON |
+F:RES_NEXUS | RES_CHAOS | AGGRAVATE | REGEN |
+F:RES_SHARDS | RES_SOUND | RES_DISEN | RES_CONF |
+F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD |
+F:ACTIVATE
+a:HARDCORE=MEDIATOR
+D:A mighty suit of dragon armour, set with the scales of dragons of both
+D:Law and Chaos, and with power over both.
+
+
+# The Hard Leather Armour of Himring
+
+N:167:of Himring
+I:36:6:0
+W:50:20:100:35000
+P:6:0d0:0:0:15
+F:RES_CHAOS | RES_NETHER | RES_POIS | ACTIVATE
+a:HARDCORE=PROT_EVIL
+D:Contained within this studded cuirass of pliable leather is the memory of
+D:unvanquished Himring, defiant fortress surrounded by the legions of Morgoth.
+
+
+# The Soft Leather Armour 'Hithlomir'
+
+N:168:'Hithlomir'
+I:36:4:4
+W:20:3:80:45000
+P:4:0d0:0:0:20
+F:STEALTH | HIDE_TYPE | SEARCH |
+F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_DARK
+D:Familiar with the secret ways hidden in darkness, this leather cuirass is
+D:truly more than it appears.
+
+
+# The Shield of Deflection of Gil-galad
+# Description from Sangband
+
+N:169:of Gil-galad
+I:34:10:5
+W:70:4:80:65000
+P:10:1d3:0:0:20
+F:ACTIVATE |
+F:LITE1 | WIS | CHR | SEARCH | LUCK
+F:RES_ELEC | RES_ACID | RES_DISEN | RES_DARK | HIDE_TYPE |
+F:SUST_WIS | SUST_DEX | SUST_CHR
+a:HARDCORE=GILGALAD
+D:The legendary shield of Gil-Galad, who fought his way to the gates of
+D:the Dark Tower, and with whom came light even to Gorgoroth.
+
+
+# The Metal Cap of Celebrimbor
+
+N:170:of Celebrimbor
+I:32:3:3
+W:55:12:20:45000
+P:3:1d1:0:0:18
+F:INT | DEX | CHR | SPELL | SEARCH |
+F:RES_FIRE | RES_ACID | RES_DISEN | RES_SHARDS |
+F:ACTIVATE
+a:HARDCORE=CELEBRIMBOR
+D:This once belonged to Celebrimbor, maker of the Rings of Power. One who
+D:knows both fire and acid, from the business of forging and engraving, will
+D:fear neither: nor have his enchantments ever faded. Celebrimbor was even
+D:aware of Sauron before Sauron became aware of him, when Sauron put on the
+D:One Ring for the first time.
+
+
+# The Heavy Crossbow of Umbar
+
+N:171:of Umbar
+I:19:24:2
+W:60:20:200:35000
+P:0:4d1:18:18:0
+F:STR | CON | XTRA_MIGHT | AGGRAVATE |
+F:RES_LITE | RES_DARK | RES_BLIND | RES_ELEC |
+F:HIDE_TYPE | ACTIVATE | SHOW_MODS
+a:HARDCORE=UMBAR
+D:A great brazen arbalest with arms of gleaming steel, shooting quarrels with
+D:speed and power for those brave enough to risk betrayal.
+
+
+# The Short Bows of Amrod and Amras, Feanor's twin sons
+# The Short Bow of Amrod
+
+N:172:of Amrod
+I:19:12:2
+W:25:10:30:9000
+P:0:0d0:12:15:0
+F:STR | CON | XTRA_MIGHT |
+F:RES_FIRE | RES_ELEC | RES_COLD | REGEN
+D:This bow, and its twin, belonged to Feanor's last two twin sons, Amrod
+D:and Amras, who both hunted with the Green-elves for a time. Like the
+D:twins, the bows are similar, for both protect their wielders from the
+D:elements: and yet they are also unlike, for this bow gives endurance
+D:and strength, while the other gives quickness and subtlety.
+
+
+# The Short Bow of Amras
+
+N:173:of Amras
+I:19:12:1
+W:25:10:30:9000
+P:0:0d0:12:15:0
+F:INT | WIS | DEX | XTRA_SHOTS | XTRA_MIGHT | SPEED |
+F:RES_FIRE | RES_ELEC | RES_COLD | SLOW_DIGEST
+D:This bow, and its twin, belonged to Feanor's last two twin sons, Amrod
+D:and Amras, who both hunted with the Green-elves for a time. Like the
+D:twins, the bows are similar, for both protect their wielders from the
+D:elements: and yet they are also unlike, for this bow gives quickness
+D:and subtlety, while the other gives endurance and strength.
+
+
+# The Mattock of Nain
+
+N:174:of Nain
+I:20:7:6
+W:60:5:250:30000
+P:0:3d8:12:18:0
+F:TUNNEL | INFRA | SEARCH | STR | ESP_ORC | CLIMB |
+F:SLAY_ORC | SLAY_TROLL | SLAY_GIANT | SLAY_DRAGON |
+F:BRAND_ACID | RES_ACID | RES_DARK | RES_DISEN |
+F:ACTIVATE
+a:HARDCORE=STONE_MUD
+D:Wielded by Nain of the Iron Hills at the Battle of Azanulbizar, this great
+D:mattock brought victory to the Dwarves over Azog's Orcs - though Nain
+D:himself fell at the last, even with victory already assured.
+
+
+# The Ball-and-Chain of Fundin Bluecloak
+
+N:175:of Fundin Bluecloak
+I:21:6:4
+W:25:100:130:60000
+P:0:5d4:13:17:10
+F:STR | WIS | SPEED | LITE1 | HIDE_TYPE |
+F:SLAY_EVIL | SLAY_UNDEAD |
+F:RES_FIRE | RES_ELEC | RES_NETHER | RES_DISEN | HOLD_LIFE |
+F:ACTIVATE
+F:COULD2H
+f:COULD2H
+a:HARDCORE=FUNDIN
+D:The weapon of one of the great dwarven priests, with powers
+D:to preserve body, soul and enchantments, and the bane of those
+D:who seek life beyond death.
+
+
+# The Large Leather Shield of the Haradrim
+
+N:176:of the Haradrim
+I:34:4:2
+W:35:12:120:25000
+P:4:1d2:0:0:15
+F:ACTIVATE |
+F:STR | CON | SUST_STR | SUST_CON | HIDE_TYPE |
+F:RES_FEAR | RES_BLIND | RES_POIS | AGGRAVATE
+a:HARDCORE=HARADRIM
+D:A great shield from the far lands of the South, whose wielder
+D:will go charging into battle heedless of danger, with the
+D:strength and endurance of a madman. Nor will he fear poison, for
+D:the Southron barbarians handle poisoned darts naturally.
+
+
+# The Lead-Filled Mace 'Skullcleaver'
+
+N:177:'Skullcleaver'
+I:21:15:5
+W:30:15:500:60000
+P:0:5d4:11:23:20
+F:STR | TUNNEL | INFRA | HIDE_TYPE |
+F:CURSED | AGGRAVATE | NO_MAGIC |
+F:RES_NEXUS | RES_BLIND | RES_SOUND |
+F:KILL_DRAGON | SLAY_ANIMAL | BRAND_POIS | BRAND_ELEC |
+F:ACTIVATE
+F:COULD2H
+f:COULD2H
+a:HARDCORE=SKULLCLEAVER
+D:This mighty bludgeon brings destruction to all around it, and is the
+D:bane of dragons and magic.
+
+
+# The Set of Gauntlets of Eol
+
+N:178:of Eol
+I:31:2:3
+W:55:35:25:40000
+P:3:1d1:0:0:15
+F:INT | MANA | FREE_ACT | FEATHER | RES_ELEC | RES_DARK | RES_POIS | ACTIVATE
+F:LUCK | SPELL_CONTAIN | WIELD_CAST
+a:HARDCORE=EOL
+D:The iron-shod gauntlets of the Dark Elven smith Eol, tingling with magics
+D:that he could channel in battle.
+
+
+# The Pair of Hard Leather Boots of Nevrast
+
+N:179:of Nevrast
+I:30:3:3
+W:20:8:40:35000
+P:3:1d1:0:0:13
+F:STEALTH | CON | SPEED | HIDE_TYPE
+D:Footgear made of bear leather and set with opals, which grant the wearer
+D:silent, hasted movement.
+
+
+# The Pair of Metal Shod Boots of Gimli
+
+N:180:of Gimli
+I:30:6:4
+W:40:8:60:22500
+P:4:1d1:5:5:10
+F:INFRA | SEARCH | TUNNEL | CLIMB | HIDE_TYPE
+Z:magic map
+D:A set of iron-shod boots stamped by Gimli's combat prowess, a peerless
+D:ally to those journeying through halls of stone under mountains.
+
+
+# The demon garbs of Gothmog
+# The Demonblade of Gothmog
+
+N:181:of Gothmog
+I:115:55:-20
+W:10:0:150:500
+P:0:7d6:13:13:0
+F:SHOW_MODS | SLAY_DEMON | SLAY_EVIL | BRAND_FIRE | BRAND_POIS
+F:LUCK | CHAOTIC | LITE1 | WOUNDING | RES_MORGUL | WIELD_CAST
+F:HEAVY_CURSE | AUTO_CURSE
+
+
+# The Demonshield of Gothmog
+
+N:182:of Gothmog
+I:115:56:4
+W:15:0:70:500
+P:13:1d1:0:0:13
+F:DEX | INVIS | SUST_STR | SUST_CON | SUST_DEX
+F:FEATHER | SH_FIRE | FREE_ACT | HOLD_LIFE
+F:HEAVY_CURSE | AUTO_CURSE | WIELD_CAST
+
+
+# The Demonhorn of Gothmog
+
+N:183:of Gothmog
+I:115:57:-5
+W:20:0:30:500
+P:2:1d1:0:0:13
+F:LITE2 | REGEN | ESP_DEMON
+F:CHR | SLOW_DIGEST | SEE_INVIS
+F:HEAVY_CURSE | AUTO_CURSE | WIELD_CAST
+
+
+# The Long Sword 'Durandil'
+# The name comes from a french parody of dungeon dwelling in mp3
+# http://penofchaos.com/wa