summaryrefslogtreecommitdiff
path: root/lib/mods
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mods')
-rw-r--r--lib/mods/.cvsignore1
-rw-r--r--lib/mods/CMakeLists.txt1
-rw-r--r--lib/mods/mods_aux.lua185
-rw-r--r--lib/mods/modules.lua5
-rw-r--r--lib/mods/theme/CMakeLists.txt14
-rw-r--r--lib/mods/theme/core/auto.lua859
-rw-r--r--lib/mods/theme/core/building.lua15
-rw-r--r--lib/mods/theme/core/crpt_aux.lua182
-rw-r--r--lib/mods/theme/core/dungeon.lua55
-rw-r--r--lib/mods/theme/core/gen_idx.lua261
-rw-r--r--lib/mods/theme/core/gods.lua40
-rw-r--r--lib/mods/theme/core/help.lua141
-rw-r--r--lib/mods/theme/core/init.lua83
-rw-r--r--lib/mods/theme/core/load.lua37
-rw-r--r--lib/mods/theme/core/load2.lua56
-rw-r--r--lib/mods/theme/core/mimc_aux.lua96
-rw-r--r--lib/mods/theme/core/monsters.lua16
-rw-r--r--lib/mods/theme/core/objects.lua45
-rw-r--r--lib/mods/theme/core/player.lua135
-rw-r--r--lib/mods/theme/core/quests.lua57
-rw-r--r--lib/mods/theme/core/s_aux.lua716
-rw-r--r--lib/mods/theme/core/stores.lua32
-rw-r--r--lib/mods/theme/core/util.lua158
-rw-r--r--lib/mods/theme/core/xml.lua375
-rw-r--r--lib/mods/theme/edit/a_info.txt233
-rw-r--r--lib/mods/theme/edit/ab_info.txt10
-rw-r--r--lib/mods/theme/edit/al_info.txt12
-rw-r--r--lib/mods/theme/edit/ba_info.txt50
-rw-r--r--lib/mods/theme/edit/d_info.txt9
-rw-r--r--lib/mods/theme/edit/e_info.txt26
-rw-r--r--lib/mods/theme/edit/f_info.txt5
-rw-r--r--lib/mods/theme/edit/k_info.txt56
-rw-r--r--lib/mods/theme/edit/misc.txt3
-rw-r--r--lib/mods/theme/edit/ow_info.txt431
-rw-r--r--lib/mods/theme/edit/p_info.txt21
-rw-r--r--lib/mods/theme/edit/r_info.txt8
-rw-r--r--lib/mods/theme/edit/ra_info.txt4
-rw-r--r--lib/mods/theme/edit/re_info.txt4
-rw-r--r--lib/mods/theme/edit/s_info.txt4
-rw-r--r--lib/mods/theme/edit/set_info.txt4
-rw-r--r--lib/mods/theme/edit/st_info.txt20
-rw-r--r--lib/mods/theme/edit/t_basic.txt66
-rw-r--r--lib/mods/theme/edit/t_gondol.txt5
-rw-r--r--lib/mods/theme/edit/t_minas.txt2
-rw-r--r--lib/mods/theme/edit/tr_info.txt2
-rw-r--r--lib/mods/theme/edit/v_info.txt5
-rw-r--r--lib/mods/theme/edit/w_info.txt2
-rw-r--r--lib/mods/theme/edit/wf_info.txt10
-rw-r--r--lib/mods/theme/file/elvish.txt218
-rw-r--r--lib/mods/theme/help/ability.txt20
-rw-r--r--lib/mods/theme/help/advanced.hlp5
-rw-r--r--lib/mods/theme/help/automat.txt7
-rw-r--r--lib/mods/theme/help/c_alchem.txt135
-rw-r--r--lib/mods/theme/help/c_merch.txt29
-rw-r--r--lib/mods/theme/help/command.txt44
-rw-r--r--lib/mods/theme/help/debug.txt5
-rw-r--r--lib/mods/theme/help/def.aux3
-rw-r--r--lib/mods/theme/help/defines.txt23
-rw-r--r--lib/mods/theme/help/dungeon.txt2
-rw-r--r--lib/mods/theme/help/essences.txt219
-rw-r--r--lib/mods/theme/help/lua.hlp34
-rw-r--r--lib/mods/theme/help/lua_gf.txt45
-rw-r--r--lib/mods/theme/help/lua_intr.txt133
-rw-r--r--lib/mods/theme/help/lua_mon.txt535
-rw-r--r--lib/mods/theme/help/lua_play.txt1225
-rw-r--r--lib/mods/theme/help/lua_pow.txt266
-rw-r--r--lib/mods/theme/help/lua_ques.txt299
-rw-r--r--lib/mods/theme/help/lua_skil.txt342
-rw-r--r--lib/mods/theme/help/lua_spel.txt2150
-rw-r--r--lib/mods/theme/help/lua_util.txt898
-rw-r--r--lib/mods/theme/help/macrofaq.txt16
-rw-r--r--lib/mods/theme/help/magic.txt5
-rw-r--r--lib/mods/theme/help/option.txt131
-rw-r--r--lib/mods/theme/help/skills.txt11
-rw-r--r--lib/mods/theme/help/spoiler.hlp1
-rw-r--r--lib/mods/theme/help/tome_faq.txt8
-rw-r--r--lib/mods/theme/module.lua48
-rw-r--r--lib/mods/theme/pref/font-ami.prf28
-rw-r--r--lib/mods/theme/pref/font-dos.prf8
-rw-r--r--lib/mods/theme/pref/font-mac.new110
-rw-r--r--lib/mods/theme/pref/font-xxx.prf3
-rw-r--r--lib/mods/theme/pref/font.prf20
-rw-r--r--lib/mods/theme/pref/graf-ami.prf64
-rw-r--r--lib/mods/theme/pref/graf-dos.prf15
-rw-r--r--lib/mods/theme/pref/graf-ibm.prf6237
-rw-r--r--lib/mods/theme/pref/graf-iso.prf5963
-rw-r--r--lib/mods/theme/pref/graf-mac.prf15
-rw-r--r--lib/mods/theme/pref/graf-new.prf6934
-rw-r--r--lib/mods/theme/pref/graf-sdl.prf37
-rw-r--r--lib/mods/theme/pref/graf-win.prf16
-rw-r--r--lib/mods/theme/pref/graf-x11.prf37
-rw-r--r--lib/mods/theme/pref/graf-xxx.prf3267
-rw-r--r--lib/mods/theme/pref/graf.prf51
-rw-r--r--lib/mods/theme/pref/pref-acn.prf24
-rw-r--r--lib/mods/theme/pref/pref-ami.prf7
-rw-r--r--lib/mods/theme/pref/pref-emx.prf19
-rw-r--r--lib/mods/theme/pref/pref.prf16
-rw-r--r--lib/mods/theme/pref/user.prf17
-rw-r--r--lib/mods/theme/pref/xtra-new.prf63
-rw-r--r--lib/mods/theme/scpt/bounty.lua90
-rw-r--r--lib/mods/theme/scpt/corrupt.lua1089
-rw-r--r--lib/mods/theme/scpt/drunk.lua21
-rw-r--r--lib/mods/theme/scpt/fireprof.lua415
-rw-r--r--lib/mods/theme/scpt/god.lua812
-rw-r--r--lib/mods/theme/scpt/gods.lua26
-rw-r--r--lib/mods/theme/scpt/gods_new.lua454
-rw-r--r--lib/mods/theme/scpt/gondolin.lua63
-rw-r--r--lib/mods/theme/scpt/help.lua445
-rw-r--r--lib/mods/theme/scpt/init.lua56
-rw-r--r--lib/mods/theme/scpt/intro.lua43
-rw-r--r--lib/mods/theme/scpt/joke.lua31
-rw-r--r--lib/mods/theme/scpt/library.lua439
-rw-r--r--lib/mods/theme/scpt/mimic.lua419
-rw-r--r--lib/mods/theme/scpt/misc.lua213
-rw-r--r--lib/mods/theme/scpt/mkeys.lua95
-rw-r--r--lib/mods/theme/scpt/monsters.lua182
-rw-r--r--lib/mods/theme/scpt/player.lua196
-rw-r--r--lib/mods/theme/scpt/powers.lua61
-rw-r--r--lib/mods/theme/scpt/s_air.lua193
-rw-r--r--lib/mods/theme/scpt/s_aule.lua222
-rw-r--r--lib/mods/theme/scpt/s_convey.lua226
-rw-r--r--lib/mods/theme/scpt/s_demon.lua337
-rw-r--r--lib/mods/theme/scpt/s_divin.lua230
-rw-r--r--lib/mods/theme/scpt/s_earth.lua184
-rw-r--r--lib/mods/theme/scpt/s_eru.lua130
-rw-r--r--lib/mods/theme/scpt/s_fire.lua227
-rw-r--r--lib/mods/theme/scpt/s_geom.lua656
-rw-r--r--lib/mods/theme/scpt/s_mana.lua132
-rw-r--r--lib/mods/theme/scpt/s_mandos.lua186
-rw-r--r--lib/mods/theme/scpt/s_manwe.lua144
-rw-r--r--lib/mods/theme/scpt/s_melkor.lua154
-rw-r--r--lib/mods/theme/scpt/s_meta.lua287
-rw-r--r--lib/mods/theme/scpt/s_mind.lua132
-rw-r--r--lib/mods/theme/scpt/s_music.lua443
-rw-r--r--lib/mods/theme/scpt/s_nature.lua184
-rw-r--r--lib/mods/theme/scpt/s_stick.lua494
-rw-r--r--lib/mods/theme/scpt/s_tempo.lua162
-rw-r--r--lib/mods/theme/scpt/s_tulkas.lua81
-rw-r--r--lib/mods/theme/scpt/s_udun.lua180
-rw-r--r--lib/mods/theme/scpt/s_ulmo.lua147
-rw-r--r--lib/mods/theme/scpt/s_varda.lua140
-rw-r--r--lib/mods/theme/scpt/s_water.lua154
-rw-r--r--lib/mods/theme/scpt/s_yavann.lua157
-rw-r--r--lib/mods/theme/scpt/spells.lua627
-rw-r--r--lib/mods/theme/scpt/stores.lua161
-rw-r--r--lib/mods/theme/user/all.prf63
146 files changed, 430 insertions, 45518 deletions
diff --git a/lib/mods/.cvsignore b/lib/mods/.cvsignore
deleted file mode 100644
index 61a33fff..00000000
--- a/lib/mods/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-tomk
diff --git a/lib/mods/CMakeLists.txt b/lib/mods/CMakeLists.txt
new file mode 100644
index 00000000..5cce23ea
--- /dev/null
+++ b/lib/mods/CMakeLists.txt
@@ -0,0 +1 @@
+ADD_SUBDIRECTORY(theme)
diff --git a/lib/mods/mods_aux.lua b/lib/mods/mods_aux.lua
deleted file mode 100644
index 1562a566..00000000
--- a/lib/mods/mods_aux.lua
+++ /dev/null
@@ -1,185 +0,0 @@
--- Ok some functions that we dont need are dangerous
---[[
-execute = nil
-getenv = nil
-setlocale = nil
-exit = nil
-openfile = nil
-writeto = nil
-readfrom = nil
-appendto = nil
-remove = nil
-rename = nil
-tmpname = nil
-]]
-modules = {}
-
-current_module = nil
-
-function setup_module(mod)
- -- For standart game, nothing needs to be done
- if not mod.layout then return end
-
- for k, e in mod.layout do
- module_reset_dir(k, e)
- end
-end
-
-function init_module(i)
- setup_module(get_module(i))
-end
-
-function max_modules()
- local i = 0
- for k, e in modules do
- if type(k) == "number" and type(e) == "table" then
- i = i + 1
- end
- end
- return i
-end
-
-function get_module_name(j)
- local i = 0
- for k, e in modules do
- if type(k) == "number" and type(e) == "table" then
- if i == j then return e.name end
- i = i + 1
- end
- end
-end
-
-function get_module_desc(j)
- local i = 0
- for k, e in modules do
- if type(k) == "number" and type(e) == "table" then
- if i == j then return e.desc end
- i = i + 1
- end
- end
-end
-
-function get_module(j)
- local i = 0
- for k, e in modules do
- if type(k) == "number" and type(e) == "table" then
- if i == j then return e end
- i = i + 1
- end
- end
-end
-
-function find_module(name)
- local i = 0
- for k, e in modules do
- if type(k) == "number" and type(e) == "table" then
- if name == e.name then return i end
- i = i + 1
- end
- end
-end
-
-function assign_current_module(name)
- current_module = get_module(find_module(name))
-end
-
-function get_module_info(type, subtype)
- if subtype then
- return current_module[type][subtype]
- else
- return current_module[type]
- end
-end
-
-function exec_module_info(type, ...)
- return call(current_module[type], arg)
-end
-
-function module_savefile_loadable(savefile_mod, savefile_death)
- for _, e in current_module.mod_savefiles do
- if e[1] == savefile_mod then
- if e[2] == "all" then
- return TRUE
- elseif e[2] == "alive" and savefile_death == FALSE then
- return TRUE
- elseif e[2] == "dead" and savefile_death == TRUE then
- return TRUE
- end
- end
- end
- return FALSE
-end
-
-function scan_extra_modules()
- scansubdir(ANGBAND_DIR_MODULES)
- for i = 0, scansubdir_max - 1 do
- if (scansubdir_result[i + 1] ~= ".") and (scansubdir_result[i + 1] ~= "..") then
- local dir = path_build(ANGBAND_DIR_MODULES, scansubdir_result[i + 1])
- local file = path_build(dir, "module.lua")
- if file_exist(file) == TRUE then
- tome_dofile_anywhere(dir, "module.lua")
- end
- end
- end
-end
-
-function add_module(t)
- assert(t.name, "No module name")
- assert(type(t.version) == "table", "No module version")
- assert(t.desc, "No module desc")
- assert(t.author, "No module author")
- assert(t.mod_savefiles, "No loadable savefiles module mark")
-
- for _, e in modules do
- if type(e) == "table" and e.name == t.name then
- error("Module name already defined: "..t.name)
- end
- end
-
- if type(t.author) == "string" then
- t.author = { t.author, "unknown@unknown.net" }
- end
-
- for k, e in t.mod_savefiles do
- if type(e) == "string" then t.mod_savefiles[k] = { e, "all" } end
- end
-
- if type(t.desc) == "table" then
- local d = ""
- for k, e in t.desc do
- d = d .. e
- if k < getn(t.desc) then
- d = d .. "\n"
- end
- end
- t.desc = d
- end
-
- if not t.rand_quest then t.rand_quest = FALSE end
- if not t.C_quest then t.C_quest = FALSE end
-
- if not t.base_dungeon then t.base_dungeon = 4 end
- if not t.death_dungeon then t.death_dungeon = 28 end
-
- if not t.astral_dungeon then t.astral_dungeon = 8 end
- if not t.astral_wild_x then t.astral_wild_x = 45 end
- if not t.astral_wild_y then t.astral_wild_y = 19 end
-
- if not t.random_artifact_weapon_chance then
- t.random_artifact_weapon_chance = 30
- end
- if not t.random_artifact_armor_chance then
- t.random_artifact_armor_chance = 20
- end
- if not t.random_artifact_jewelry_chance then
- t.random_artifact_jewelry_chance = 20
- end
-
- if not t.max_plev then t.max_plev = 50 end
- if not t.max_skill_overage then t.max_skill_overage = 4 end
- if not t.skill_per_level then t.skill_per_level = function() return 6 end end
-
- if not t.allow_birth then t.allow_birth = TRUE end
-
- tinsert(modules, t)
-end
diff --git a/lib/mods/modules.lua b/lib/mods/modules.lua
deleted file mode 100644
index 5deddef7..00000000
--- a/lib/mods/modules.lua
+++ /dev/null
@@ -1,5 +0,0 @@
--- Load ToME
-tome_dofile_anywhere(ANGBAND_DIR, "module.lua")
-
--- Look for more modules
-scan_extra_modules()
diff --git a/lib/mods/theme/CMakeLists.txt b/lib/mods/theme/CMakeLists.txt
new file mode 100644
index 00000000..f1160786
--- /dev/null
+++ b/lib/mods/theme/CMakeLists.txt
@@ -0,0 +1,14 @@
+INSTALL(DIRECTORY
+ apex
+ data
+ dngn
+ edit
+ file
+ help
+ note
+ pref
+ save
+ user
+ DESTINATION ${DEFAULT_PATH}/mods/theme
+ PATTERN "delete.me" EXCLUDE
+ )
diff --git a/lib/mods/theme/core/auto.lua b/lib/mods/theme/core/auto.lua
deleted file mode 100644
index b758db52..00000000
--- a/lib/mods/theme/core/auto.lua
+++ /dev/null
@@ -1,859 +0,0 @@
--- 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 == "inventory" then
- local f
- if not r[1] then
- f = function(object) return end
- else
- f = gen_rule_fct(r[1])
- end
- return function(object)
- local i = 0
- while i < INVEN_WIELD do
- if %f(player.inventory(i)) then
- return TRUE
- end
- i = i + 1
- end
- end
- elseif r.label == "equipment" then
- local f
- if not r[1] then
- f = function(object) return end
- else
- f = gen_rule_fct(r[1])
- end
- return function(object)
- local i = INVEN_WIELD
- while i < INVEN_TOTAL do
- if %f(player.inventory(i)) then
- return TRUE
- end
- i = i + 1
- end
- 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,
- },
- ["inventory"] =
- {
- {
- "Check is true if something in player's inventory matches",
- "the contained rule",
- },
- xml:collect([[<inventory><foo1>...</foo1></inventory>]]),
- function ()
- return xml:collect("<inventory></inventory>")
- end,
- },
- ["equipment"] =
- {
- {
- "Check is true if something in player's equipment matches",
- "the contained rule",
- },
- xml:collect([[<equipment><foo1>...</foo1></equipment>]]),
- function ()
- return xml:collect("<equipment></equipment>")
- 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
- if (auto_aux.rule.label == "rule" or auto_aux.rule.label == "equipment") and auto_aux.rule[1] then return end
- if (auto_aux.rule.label == "rule" or auto_aux.rule.label == "inventory") 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" and auto_aux.rule.label ~= "equipment" and auto_aux.rule.label ~= "inventory" 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/mods/theme/core/building.lua b/lib/mods/theme/core/building.lua
deleted file mode 100644
index 8e88888a..00000000
--- a/lib/mods/theme/core/building.lua
+++ /dev/null
@@ -1,15 +0,0 @@
-__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/mods/theme/core/crpt_aux.lua b/lib/mods/theme/core/crpt_aux.lua
deleted file mode 100644
index 97f8d4b6..00000000
--- a/lib/mods/theme/core/crpt_aux.lua
+++ /dev/null
@@ -1,182 +0,0 @@
--- 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
-
diff --git a/lib/mods/theme/core/dungeon.lua b/lib/mods/theme/core/dungeon.lua
deleted file mode 100644
index d91d785b..00000000
--- a/lib/mods/theme/core/dungeon.lua
+++ /dev/null
@@ -1,55 +0,0 @@
--- 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
-
--- 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
diff --git a/lib/mods/theme/core/gen_idx.lua b/lib/mods/theme/core/gen_idx.lua
deleted file mode 100644
index 5f3af435..00000000
--- a/lib/mods/theme/core/gen_idx.lua
+++ /dev/null
@@ -1,261 +0,0 @@
--- 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/mods/theme/core/gods.lua b/lib/mods/theme/core/gods.lua
deleted file mode 100644
index 77e0aad5..00000000
--- a/lib/mods/theme/core/gods.lua
+++ /dev/null
@@ -1,40 +0,0 @@
--- 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/mods/theme/core/help.lua b/lib/mods/theme/core/help.lua
deleted file mode 100644
index a581fe63..00000000
--- a/lib/mods/theme/core/help.lua
+++ /dev/null
@@ -1,141 +0,0 @@
--- 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/mods/theme/core/init.lua b/lib/mods/theme/core/init.lua
deleted file mode 100644
index 11b812d5..00000000
--- a/lib/mods/theme/core/init.lua
+++ /dev/null
@@ -1,83 +0,0 @@
---
--- 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, "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/mods/theme/core/load.lua b/lib/mods/theme/core/load.lua
deleted file mode 100644
index 9522ec91..00000000
--- a/lib/mods/theme/core/load.lua
+++ /dev/null
@@ -1,37 +0,0 @@
--- 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/mods/theme/core/load2.lua b/lib/mods/theme/core/load2.lua
deleted file mode 100644
index 7e151d91..00000000
--- a/lib/mods/theme/core/load2.lua
+++ /dev/null
@@ -1,56 +0,0 @@
--- 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
-
--- 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/mods/theme/core/mimc_aux.lua b/lib/mods/theme/core/mimc_aux.lua
deleted file mode 100644
index cea1f4dc..00000000
--- a/lib/mods/theme/core/mimc_aux.lua
+++ /dev/null
@@ -1,96 +0,0 @@
--- 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, 0, 0, 0, 0, -10)
- player.xtra_f3 = bor(player.xtra_f3, TR3_AGGRAVATE)
- end,
-}
diff --git a/lib/mods/theme/core/monsters.lua b/lib/mods/theme/core/monsters.lua
deleted file mode 100644
index ca2851a0..00000000
--- a/lib/mods/theme/core/monsters.lua
+++ /dev/null
@@ -1,16 +0,0 @@
--- 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/mods/theme/core/objects.lua b/lib/mods/theme/core/objects.lua
deleted file mode 100644
index 97320b82..00000000
--- a/lib/mods/theme/core/objects.lua
+++ /dev/null
@@ -1,45 +0,0 @@
--- 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/mods/theme/core/player.lua b/lib/mods/theme/core/player.lua
deleted file mode 100644
index 16878228..00000000
--- a/lib/mods/theme/core/player.lua
+++ /dev/null
@@ -1,135 +0,0 @@
--- 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
diff --git a/lib/mods/theme/core/quests.lua b/lib/mods/theme/core/quests.lua
deleted file mode 100644
index dfe9db51..00000000
--- a/lib/mods/theme/core/quests.lua
+++ /dev/null
@@ -1,57 +0,0 @@
--- 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/mods/theme/core/s_aux.lua b/lib/mods/theme/core/s_aux.lua
deleted file mode 100644
index ec609b04..00000000
--- a/lib/mods/theme/core/s_aux.lua
+++ /dev/null
@@ -1,716 +0,0 @@
--- 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
-
--- 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
-
--- 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
-
--- Get spell school name(s) as a /-separated string.
-function spell_school_name(s)
- local xx, sch_str
- 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
- return sch_str
-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
-
- sch_str = spell_school_name(s)
-
- 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
-
-
--- 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/mods/theme/core/stores.lua b/lib/mods/theme/core/stores.lua
deleted file mode 100644
index d4a63168..00000000
--- a/lib/mods/theme/core/stores.lua
+++ /dev/null
@@ -1,32 +0,0 @@
--- 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/mods/theme/core/util.lua b/lib/mods/theme/core/util.lua
deleted file mode 100644
index eea13014..00000000
--- a/lib/mods/theme/core/util.lua
+++ /dev/null
@@ -1,158 +0,0 @@
--- 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
-
--- 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
-
--- 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/mods/theme/core/xml.lua b/lib/mods/theme/core/xml.lua
deleted file mode 100644
index 14f0511f..00000000
--- a/lib/mods/theme/core/xml.lua
+++ /dev/null
@@ -1,375 +0,0 @@
--- 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 == "inventory" then
- if not_flag then
- xml.write(TERM_WHITE, tab)
- xml.write(ecol, "Nothing in your ")
- xml.write(bcol, "inventory")
- xml.write(ecol, " matches the following:")
- xml.write(TERM_WHITE, "\n")
- else
- xml.write(TERM_WHITE, tab)
- xml.write(ecol, "Something in your ")
- xml.write(bcol, "inventory")
- xml.write(ecol, " matches the following:")
- xml.write(TERM_WHITE, "\n")
- end
- elseif t.label == "equipment" then
- if not_flag then
- xml.write(TERM_WHITE, tab)
- xml.write(ecol, "Nothing in your ")
- xml.write(bcol, "equipment")
- xml.write(ecol, " matches the following:")
- xml.write(TERM_WHITE, "\n")
- else
- xml.write(TERM_WHITE, tab)
- xml.write(ecol, "Something in your ")
- xml.write(bcol, "equipment")
- xml.write(ecol, " matches the following:")
- xml.write(TERM_WHITE, "\n")
- end
- 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/mods/theme/edit/a_info.txt b/lib/mods/theme/edit/a_info.txt
index e2a312c5..c9f888cc 100644
--- a/lib/mods/theme/edit/a_info.txt
+++ b/lib/mods/theme/edit/a_info.txt
@@ -26,11 +26,6 @@
# The 'Theme' module for ToME introduces many changes into this file; please
# refer to changes.txt in the module root folder for details.
-# Version stamp (required)
-
-V:2.0.0
-
-
# The Phial of Galadriel
@@ -40,7 +35,7 @@ W:20:10:10:10000
P:0:1d1:0:0:0
F:ACTIVATE | SEARCH | LITE3 | LUCK
F:INSTA_ART | HIDE_TYPE
-a:HARDCORE=LIGHT
+a: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.
@@ -53,7 +48,7 @@ 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
+a:MAP_LIGHT
Z:detect curses
D:The shining Star of the West, a famed heirloom of Elendil's house.
D:A white diamond set as a star in a silver fillet to be bound at the
@@ -68,7 +63,7 @@ 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 | SPECIAL_GENE
-a:HARDCORE=THRAIN
+a: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.
@@ -94,7 +89,7 @@ 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
+a:DISP_EVIL
D:The ancient heirloom of Ingwe, high lord of the Vanyar, against whom nothing
D:of evil could stand.
@@ -108,7 +103,7 @@ 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 | SPECIAL_GENE
-a:HARDCORE=DIM_DOOR
+a:DIM_DOOR
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.
@@ -133,7 +128,7 @@ 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
+a: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.
@@ -146,7 +141,7 @@ I:24:30:5
W:90:60:300:500000
P:0:5d7:18:25:0
F:CRIT | HIDE_TYPE | KILL_DEMON | SHOW_MODS | VORPAL | WOUNDING | ACTIVATE
-a:HARDCORE=TULKAS
+a:TULKAS
D:The great axe of Tuor, Thudder-Sharp is its name. The axe that smote
D:both a heavy dint as of a club and cleft as a sword. When it was swung
D:by the hands of Tuor, it sang like the rush of eagle's wings in the
@@ -164,7 +159,7 @@ 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
+a: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.
@@ -181,7 +176,7 @@ 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
+a: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.
@@ -199,7 +194,7 @@ 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
+a: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
@@ -221,7 +216,7 @@ 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
+a: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,
@@ -251,7 +246,7 @@ 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
+a:STONE_LORE
D:The key to the tower of Saruman, which fills your mind
D:with images of knowledge and dreadful understanding. It
D:is not a regular key - it is a perfectly round stone
@@ -268,7 +263,7 @@ 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
+a:RAZORBACK
D:A massive suit of heavy dragon scales deeply saturated with many colours.
D:It throbs with angry energies. May-cloud it is called, after the
D:element lightning which courses through it with unusual vigour.
@@ -285,7 +280,7 @@ 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
+a:BLADETURNER
D:A suit of tilkal, 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.
@@ -312,7 +307,7 @@ 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
+a:CURE_1000
D:A suit of imperishable galvorn, with unconquerable strength to endure evil
D:and disruptive magics. It protects the life force of its wearer like
D:nothing else can. Eol the Dark Elf made it in secret for his son, but
@@ -355,7 +350,7 @@ 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
+a: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.
@@ -370,7 +365,7 @@ 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
+a: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.
@@ -397,7 +392,7 @@ 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
+a: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.
@@ -412,7 +407,7 @@ I:32:8:10
W:50:80:50:20000
P:6:1d3:0:0:10
F:ACTIVATE | HIDE_TYPE | INFRA | LITE2 | LITE3 | SEARCH
-a:HARDCORE=SUNLIGHT
+a:SUNLIGHT
D:The shining helm that Gil-galad, legendary Elven-king, wore in battle.
# The Leather Jerkin of Tom Bombadil
@@ -504,7 +499,7 @@ 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
+a: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.
@@ -588,7 +583,7 @@ 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
+a:GORLIM
D:The legendary dragon helm of Turin Turambar, an object of dread to the
D:servants of Morgoth.
@@ -600,7 +595,7 @@ 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
+a:DETECT_ALL
D:A famous helm of forged iron granting extraordinary powers of mind and
D:awareness.
@@ -616,7 +611,7 @@ 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
+a:GORLIM
D:A headpiece, gaudy and barbaric, that betrayed a warrior when he most
D:needed succor.
@@ -630,7 +625,7 @@ 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
+a:CURE_700
D:The shining winged circlet brought by Elendil from dying Numenor, emblem of
D:Gondor through an age of the world.
@@ -646,7 +641,7 @@ 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
+a: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
@@ -661,7 +656,7 @@ I:35:1:0
W:60:90:10:40000
P:1:0d0:0:0:20
F:ACTIVATE | IM_ACID | IM_COLD | IM_ELEC | IM_FIRE | RES_POIS
-a:HARDCORE=COLLUIN
+a:COLLUIN
D:A cape worn by a hero from Valinor, a land utterly beyond the strife
D:of the elements.
@@ -673,7 +668,7 @@ 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
+a: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.
@@ -687,7 +682,7 @@ 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
+a:RECHARGE
D:A sable-hued cloak, with glowing elven-runes to restore magic showing calm
D:and clear as moonlight on still water.
@@ -712,7 +707,7 @@ W:5:20:10:11000
P:1:0d0:0:0:15
F:STEALTH | SPEED | RES_NEXUS |
F:RES_ACID | ACTIVATE
-a:HARDCORE=TELEPORT
+a: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.
@@ -726,7 +721,7 @@ 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
+a: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
@@ -775,7 +770,7 @@ 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
+a: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.
@@ -787,7 +782,7 @@ W:10:5:25:33000
P:2:1d1:0:0:15
F:RES_FIRE | ACTIVATE |
F:SUST_STR | STR | REGEN | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=BO_FIRE_1
+a:BO_FIRE_1
D:A fiery set of gauntlets that can even shoot fire from the user's
D:hands. Wrought by Curufin's people, they guard the wearer's
D:strength and enhance it.
@@ -800,7 +795,7 @@ 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
+a:BO_COLD_1
D:A set of handgear so icy as to be able to fire frost bolts. Wrought by
D:Finrod Felagund himself, it is inscribed with runes that guard and
D:boost health.
@@ -813,7 +808,7 @@ W:10:5:25:33000
P:2:1d1:0:0:15
F:RES_ELEC | ACTIVATE | FREE_ACT |
F:SUST_DEX | DEX | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=BO_ELEC_1
+a:BO_ELEC_1
D:A set of handgear wrought by the Galadhrim. Sparks surround it, enabling
D:the wearer to fire bolts of electricity. Ever has lightning improved and
D:protected agility, and these gauntlets are no exception.
@@ -826,7 +821,7 @@ W:10:5:25:33000
P:2:1d1:0:0:15
F:RES_ACID | ACTIVATE |
F:SUST_CHR | CHR | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=BO_ACID_1
+a:BO_ACID_1
D:Mighty was the woodcraft of the Laiquendi, for they learned to control the
D:element of acid to a level theretofore unknown. This set of handgear is so
D:corrosive that it may fire bolts of acid.
@@ -852,7 +847,7 @@ 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
+a: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.
@@ -866,7 +861,7 @@ W:40:120:40:300000
P:3:1d1:0:0:20
F:SPEED | HIDE_TYPE |
F:RES_NEXUS | ACTIVATE
-a:HARDCORE=SPEED
+a: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.
@@ -881,7 +876,7 @@ 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
+a:CURE_POISON
D:A pair of high-laced shoes, strong against the powers of corruption and
D:withering, that grant the wearer extraordinary agility.
@@ -949,7 +944,7 @@ I:23:4:0
W:4:100:12:12000
P:0:1d4:4:6:0
F:ACTIVATE | BRAND_FIRE | LEVELS | LITE1 | RES_FIRE | SHOW_MODS
-a:HARDCORE=BO_FIRE_1
+a:BO_FIRE_1
D:The blade of Samwise Gamgee, chosen by him from the hoard of the
D:Barrow-wights. A fiery dagger finely balanced for deadly throws.
@@ -960,7 +955,7 @@ I:23:4:0
W:3:100:12:11000
P:0:1d4:4:6:0
F:ACTIVATE | BRAND_COLD | LEVELS | RES_COLD | SHOW_MODS
-a:HARDCORE=BO_COLD_1
+a:BO_COLD_1
D:The blade of Peregrin Took, chosen by him from the hoard of the
D:Barrow-wights. A frosty dagger finely balanced for deadly throws.
@@ -971,7 +966,7 @@ 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
+a:BO_ELEC_1
D:The blade of Meriadoc Brandybuck, chosen by him from the hoard of
D:the Barrow-wights. A dagger covered in sparks and finely balanced
D:for deadly throws.
@@ -983,7 +978,7 @@ 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
+a:BA_POIS_1
D:A large stiletto dagger that glistens with odourless poison, to which the
D:wearer seems oddly immune.
@@ -998,7 +993,7 @@ 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
+a: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.
@@ -1160,7 +1155,7 @@ I:23:17:2
W:60:40:130:300000
P:0:3d5:8:9:0
F:ACTIVATE | ESP_EVIL | FREE_ACT | HIDE_TYPE | INT | RES_CONF | RES_DARK | SHOW_MODS | VORPAL
-a:HARDCORE=CURE_INSANITY
+a:CURE_INSANITY
D:The ancient blade of Theoden, King of the Mark. It was taken from
D:the king by Grima the Wormtongue, and hidden from him in a dusty
D:chest. It was once instrumental in restoring the King's wits from
@@ -1176,7 +1171,7 @@ 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
+a: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.
@@ -1192,7 +1187,7 @@ 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
+a: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
@@ -1321,7 +1316,7 @@ 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
+a: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.
@@ -1381,7 +1376,7 @@ 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
+a: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.
D:The spear is inscribed with Tengwar runes, reading "Gil-galad ech vae
@@ -1401,7 +1396,7 @@ F:BRAND_FIRE |
F:SLAY_GIANT | SLAY_EVIL | SLAY_DEMON | SLAY_UNDEAD | SLAY_DRAGON |
F:RES_FIRE | RES_LITE | HOLD_LIFE | RES_FEAR | FEATHER | ESP_GIANT |
F:SEE_INVIS | ACTIVATE | BLESSED | SHOW_MODS
-a:HARDCORE=STONE_MUD
+a:STONE_MUD
D:A magical spear, rumoured to have been forged by Orome himself
D:in the coldest reach of the cruel Redhorn.
@@ -1460,7 +1455,7 @@ 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
+a: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.
@@ -1490,7 +1485,7 @@ 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
+a:CURE_MW
D:A superbly crafted double-bladed axe that slays the creatures of earth and
D:allows rapid recovery from their blows.
@@ -1547,7 +1542,7 @@ 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
+a:TELE_AWAY
D:The awesome weapon imbued with some of the power of the Vala Ulmo,
D:Lord of Waters. It allows the wearer to laugh in scorn at the dread
D:powers of the undead, and be utterly in command of the element of water.
@@ -1563,7 +1558,7 @@ 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
+a: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.
@@ -1597,7 +1592,7 @@ F:RES_COLD | SEE_INVIS | ESP_ALL | AGGRAVATE | SHOW_MODS | INSTA_ART |
F:LEVELS | ACTIVATE | SPECIAL_GENE |
F:MUST2H
f:MUST2H
-a:HARDCORE=GROND
+a: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.
@@ -1612,7 +1607,7 @@ F:SLAY_EVIL | BRAND_FIRE | RES_FIRE | RES_CONF | ACTIVATE |
F:SHOW_MODS | LITE1 |
F:COULD2H
f:COULD2H
-a:HARDCORE=CONFUSE
+a: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.
@@ -1651,7 +1646,7 @@ 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
+a:FIRESTAR
D:A famed battle-lord of old, with a ruddy head, coloured as embers are that
D:can yet rise up in wrath.
@@ -1665,7 +1660,7 @@ P:0:3d4:12:12:0
F:KILL_DRAGON | BRAND_ELEC | IM_ELEC | ACTIVATE | SHOW_MODS |
F:COULD2H
f:COULD2H
-a:HARDCORE=SPEED
+a: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.
@@ -1709,7 +1704,7 @@ 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
+a: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.
@@ -1723,7 +1718,7 @@ 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
+a: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.
@@ -1757,7 +1752,7 @@ 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
+a: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.
@@ -1809,7 +1804,7 @@ W:50:25:110:50000
P:0:0d0:10:14:0
F:SPEED | HIDE_TYPE |
F:RES_FIRE | ACTIVATE | SHOW_MODS
-a:HARDCORE=CUBRAGOL
+a:CUBRAGOL
D:A crossbow that grants fiery speed to he who finds it, and from which
D:shoot bolts that blaze with flame unquenchable.
@@ -1826,7 +1821,7 @@ 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
+a:GANDALF
D:A simple, wooden wizard's staff. Unremarkable in all aspects...
D:except that it pulses with overwhelming power.
@@ -1926,7 +1921,7 @@ I:14:59:2
W:50:10:30:40000
P:0:1d1:0:0:0
F:ACTIVATE | CHR | INFRA | INSTA_ART | LUCK | STEALTH | SUST_CHR | TUNNEL
-a:HARDCORE=CHARM_OTHERS
+a:CHARM_OTHERS
Z:remove fear
D:This magical instrument once belonged to Thorin Oakenshield,
D:a mighty dwarf warrior of old. The sounds emanating from it
@@ -1941,7 +1936,7 @@ I:32:8:3
W:40:5:20:55000
P:10:2d4:0:0:0
F:ACTIVATE | DEX | HIDE_TYPE | HOLD_LIFE | REGEN | RES_FEAR | SUST_CON | SUST_DEX | SUST_STR
-a:HARDCORE=TERROR
+a:TERROR
D:Mighty was Thorin Oakenshield as he emerged from the Gate of the
D:Lonely Mountain on the day of the Battle of the Five Armies, clad
D:in shining armour, part of which was this helm. He gleamed like
@@ -1996,7 +1991,7 @@ W:50:15:200:55000
P:0:3d4:5:0:0
F:STR | TUNNEL | SUST_STR | HIDE_TYPE | LITE1 | ACTIVATE | CLIMB
F:RES_CHAOS | RES_LITE | RES_DARK
-a:HARDCORE=EREBOR
+a:EREBOR
D:A pick that provides a magical light by which to see while tunnelling.
@@ -2007,7 +2002,7 @@ I:14:58:4
W:19:10:15:10000
P:0:3d4:0:0:0
F:ACTIVATE | STEALTH | SEARCH | INFRA | RES_POIS | RES_DARK
-a:HARDCORE=DRUEDAIN
+a: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.
@@ -2020,7 +2015,7 @@ I:14:60:2
W:14:10:15:80000
P:0:3d4:0:0:0
F:ACTIVATE | CHR | WIS | ESP_DRAGON
-a:HARDCORE=ROHAN
+a: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.
@@ -2033,7 +2028,7 @@ 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
-a:HARDCORE=HELM
+a: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.
@@ -2046,7 +2041,7 @@ I:14:60:3
W:18:10:15:18000
P:0:3d4:0:0:0
F:ACTIVATE | STR | CON | RES_FEAR | RES_FIRE | AGGRAVATE
-a:HARDCORE=BOROMIR
+a:BOROMIR
D:The great horn made of the horns of kine of Araw. It is inlaid with silver
D:and gold signs; when blown, it can be heard for miles over. The horn gives
D:courage and endurance to its wearer, provided that secrecy is not desired.
@@ -2060,7 +2055,7 @@ 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
+a: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.
@@ -2088,7 +2083,7 @@ 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
+a: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.
@@ -2114,7 +2109,7 @@ 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
+a: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
@@ -2205,7 +2200,7 @@ P:0:2d7:20:14:0
F:DEX | SEARCH | SLAY_ORC | ACTIVATE | HIDE_TYPE | SHOW_MODS |
F:COULD2H
f:COULD2H
-a:HARDCORE=ORCHAST
+a: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.
@@ -2218,7 +2213,7 @@ 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
+a:NIGHT
D:Found on an unmarked grave after a violent storm, this hatchet
D:has a sinister aura of darkness and decay.
@@ -2230,7 +2225,7 @@ 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
+a:NATUREBANE
D:Used by the orcs in their battle at Dagor Bragollach against the elves, this
D:axe has a bloodthirst for nature.
@@ -2254,7 +2249,7 @@ 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
+a: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.
@@ -2317,7 +2312,7 @@ I:37:4:2
W:20:3:220:32000
P:14:1d4:3:5:11
F:ACTIVATE | ESP_TROLL | HIDE_TYPE | LITE1 | REGEN | RES_FEAR | SHOW_MODS | STR | SUST_STR
-a:HARDCORE=GORLIM
+a:GORLIM
D:This sturdy mail shirt was a gift from the nobility of Gondor to the halfling
D:Peregrin Took. It enables a warrior to fight more capably and cling to life when
D:others would be killed. It also reveals enemies (especially trolls) hiding in the
@@ -2334,7 +2329,7 @@ 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
+a: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. Loknare means Dragonblaze.
@@ -2345,7 +2340,7 @@ 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
+a: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.
@@ -2373,7 +2368,7 @@ 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
+a: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.
@@ -2387,7 +2382,7 @@ 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
+a: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
@@ -2404,7 +2399,7 @@ 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
+a: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.
@@ -2450,7 +2445,7 @@ 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
+a: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.
@@ -2467,7 +2462,7 @@ F:SLAY_EVIL | SLAY_UNDEAD | ACTIVATE |
F:RES_FIRE | RES_ELEC | RES_NETHER | RES_DISEN | HOLD_LIFE |
F:COULD2H
f:COULD2H
-a:HARDCORE=FUNDIN
+a: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.
@@ -2482,7 +2477,7 @@ 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
+a: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
@@ -2500,7 +2495,7 @@ F:RES_NEXUS | RES_BLIND | RES_SOUND |
F:KILL_DRAGON | SLAY_ANIMAL | BRAND_POIS | BRAND_ELEC |
F:COULD2H
f:COULD2H
-a:HARDCORE=SKULLCLEAVER
+a:SKULLCLEAVER
D:This mighty bludgeon brings destruction to all around it, and is the
D:bane of dragons and magic. Skull-cleaver (or head-cleaver) it is called.
@@ -2512,7 +2507,7 @@ W:55:35:25:40000
P:3:1d1:0:0:15
F:INT | MANA | FREE_ACT | FEATHER | RES_ELEC | RES_DARK | RES_POIS |
F:ACTIVATE | LUCK | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=EOL
+a:EOL
D:The iron-shod gauntlets of the Dark Elven smith Eol, tingling with magics
D:that he could channel in battle.
@@ -2581,7 +2576,7 @@ I:35:2:3
W:10:10:10:12500
P:4:0d0:0:0:16
F:ACTIVATE | CHR | DEX | HIDE_TYPE | INVIS | LUCK | SEARCH | STEALTH
-a:HARDCORE=CURE_HUNGER
+a:CURE_HUNGER
D:This simple-looking cloak, dyed in hues that blend into the woodlands, was a gift
D:from the elves of Lothlorien to the halfling Peregrin Took. Its wearer has an
D:uncanny knack for making friends, escaping bonds, moving among enemies completely
@@ -2597,7 +2592,7 @@ P:0:3d4:0:0:0
F:ACTIVATE | BLESSED | CHR | ESP_UNDEAD | FREE_ACT |
F:HIDE_TYPE | HOLD_LIFE | LIFE | LUCK | RES_FEAR |
F:RES_SOUND | SEARCH | SEE_INVIS | STEALTH | SUST_CHR
-a:HARDCORE=PROT_EVIL
+a:PROT_EVIL
D:This small, serviceable wooden harp once belonged to Tom Bombadil--
D:a mysterious figure whose song prevented the Wight-King from
D:attacking Frodo and his companions. Its music still inspires
@@ -2615,7 +2610,7 @@ F:HIDE_TYPE | INFRA | INT | MANA | RES_COLD | RES_ELEC |
F:RES_FIRE | RES_MORGUL | SEARCH | SEE_INVIS | SHOW_MODS |
F:SLAY_ANIMAL | SLAY_EVIL | SPELL | SPELL_CONTAIN |
F:STEALTH | WATER_BREATH | WIELD_CAST | WIS
-a:SPELL=Artifact Radagast
+a:RADAGAST
Z:grow trees
D:Rumoured to be a gift from Yavanna to Radagast the Brown, this
D:plain-seeming oak staff shields its bearer against the elements
@@ -2634,7 +2629,7 @@ P:0:3d4:0:0:0
F:ACTIVATE | BLESSED | CON | ESP_ANIMAL | ESP_EVIL |
F:FREE_ACT | HIDE_TYPE | LUCK | RES_CONF | RES_FEAR |
F:RES_SOUND | SEARCH | SEE_INVIS | STEALTH
-a:SPELL=Artifact Valaroma
+a:VALAROMA
D:This heavenly instrument, wrought from gleaming silver, most
D:often appears in the hands of the Valarin huntsman Orome; yet
D:he may lend mortal champions the horn from time to time. Its
@@ -2651,7 +2646,7 @@ P:1:0d0:0:0:25
F:ACTIVATE | CHR | FLY | HIDE_TYPE | IM_ELEC | INFRA |
F:LITE1 | MAGIC_BREATH | RES_COLD | RES_DARK | RES_LITE |
F:SEARCH | SEE_INVIS | SUST_CHR
-a:HARDCORE=GILGALAD
+a:GILGALAD
D:This deep-blue velvet cloak, embroidered with silvery stars, sheds a
D:celestial light that reveals hidden things and bestows unearthly
D:beauty. It also wards off damage from elements of the skies, and
@@ -2694,7 +2689,7 @@ W:60:30:50:50000
P:0:0d0:0:0:0
F:ACTIVATE | ESP_UNDEAD | HIDE_TYPE | INSTA_ART | INVIS |
F:LITE1 | RES_CHAOS | RES_DARK | RES_NETHER | STEALTH
-a:HARDCORE=SUMMON_UNDEAD
+a:SUMMON_UNDEAD
D:A large banner of pure black, strangely gleaming with a dark light
D:that is faint and at the same time so bright it attracts attention.
@@ -2707,7 +2702,7 @@ W:60:80:12:60000
P:0:1d4:5:5:0
F:ACTIVATE | HIDE_TYPE | INT | MANA | SHOW_MODS | SPEED |
F:SPELL | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=BA_COLD_1
+a:BA_COLD_1
Z:weigh magic
D:A white quarterstaff that faintly gleams a pale white, it once belonged
D:to one of the most powerful beings on Middle-Earth, Saruman the White.
@@ -2723,7 +2718,7 @@ W:60:80:20:2000000
P:2:0d0:-40:-40:36
F:ACTIVATE | HIDE_TYPE | IM_COLD | IM_ELEC | SPEED | SPELL_CONTAIN |
F:SUST_CHR | SUST_CON | SUST_DEX | SUST_INT | SUST_STR | WIELD_CAST
-a:HARDCORE=BA_ELEC_2
+a:BA_ELEC_2
D:The white robe of the Istari wizard Curunir, known on Middle-earth as
D:Saruman the White and Saruman of Many Colours. Imbued with cold and
D:lightning used in the creation of the Fire of Orthanc, it grants the
@@ -2737,7 +2732,7 @@ I:19:23:10
W:30:10:110:40000
P:0:0d0:5:7:0
F:ACTIVATE | HIDE_TYPE | RES_COLD | SHOW_MODS | STEALTH
-a:HARDCORE=RUNE_EXPLO
+a:RUNE_EXPLO
D:The bow of Brand, last King of Dale. It was given to him
D:as a gift by the King under the Mountain of Erebor, and
D:has access to an especially secret realm of Dwarven lore.
@@ -2766,7 +2761,7 @@ F:ACTIVATE | AUTO_CURSE | CURSED | DRAIN_EXP | DRAIN_MANA |
F:ESP_EVIL | HEAVY_CURSE | HIDE_TYPE | INSTA_ART | LITE2 |
F:LITE3 | RES_CHAOS | RES_DARK | RES_FIRE | RES_LITE |
F:RES_NETHER | RES_NEXUS | RES_SHARDS | SEE_INVIS | STR
-a:HARDCORE=INVULN
+a:INVULN
Z:banish evil
D:A Silmaril of Feanor. It shines with the unquenchable light of the
D:White Trees of Valinor. It was stolen from the camp of Eonwe by
@@ -2786,7 +2781,7 @@ P:0:10d10:0:0:0
F:ACTIVATE | AUTO_CURSE | CURSED | DRAIN_EXP | DRAIN_HP | ESP_EVIL |
F:HEAVY_CURSE | HIDE_TYPE | INSTA_ART | INT | LITE2 | LITE3 |
F:RES_CHAOS | RES_DARK | RES_LITE | RES_NETHER | RES_NEXUS | SEE_INVIS
-a:HARDCORE=RECALL
+a:RECALL
Z:banish evil
D:A Silmaril of Feanor. It shines with the unquenchable light of the
D:White Trees of Valinor. It was stolen from the camp of Eonwe by
@@ -2804,7 +2799,7 @@ W:50:40:24:80000
P:0:0d0:0:0:0
F:ACTIVATE | AUTO_CURSE | CHR | CON | CURSED | HEAVY_CURSE |
F:INSTA_ART | LUCK | SPEED | SPELL_CONTAIN | STR | WIELD_CAST | WRAITH
-a:HARDCORE=DISP_GOOD
+a:DISP_GOOD
D:The chief mark of royalty in Westernesse, it is said to have perished
D:in the fall of Numenor. It once belonged to Ar-Pharazon the Golden and
D:the evilness of that fallen King still courses through it.
@@ -2817,7 +2812,7 @@ W:60:50:24:80000
P:0:0d0:0:0:0
F:ACTIVATE | BLESSED | CHR | FREE_ACT | INSTA_ART | LUCK |
F:RES_CONF | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=RUNE_PROT
+a:RUNE_PROT
D:The chief mark of royalty in Arnor, possibly the oldest remaining work
D:of Men. It came from Numenor, but it belonged to the Lords of Andunie
D:of whom the first was Valandil son of Silmarien. It was passed down to
@@ -2832,7 +2827,7 @@ P:0:1d1:0:0:0
F:ACTIVATE | BLESSED | ESP_ALL | HIDE_TYPE | INFRA | INT |
F:LITE1 | LITE2 | LITE3 | RES_BLIND | RES_LITE | SEARCH |
F:SEE_INVIS | WATER_BREATH | WIS
-a:HARDCORE=PALANTIR
+a:PALANTIR
Z:detect curses
D:This holy lamp once belonged to a seeress who warned Ar-Pharazon of
D:the dire fate Numenor would suffer for daring to break the ban against
@@ -2859,7 +2854,7 @@ P:0:10d10:0:0:0
F:WIS | INT | SEARCH | INFRA | HIDE_TYPE | ACTIVATE | ESP_ALL |
F:SEE_INVIS | RES_BLIND | AGGRAVATE | DRAIN_MANA | LITE2
F:INSTA_ART
-a:HARDCORE=PALANTIR
+a:PALANTIR
D:A shining white ball of unbreakable crystal, the ancient Palantiri
D:were used by kings of Numenor and later by the Exiles for rapid
D:communication between distant lands. Nothing is hidden from one who
@@ -2922,7 +2917,7 @@ P:0:0d0:7:7:10
F:STR | WIS | CHR | SPEED | LITE3 | INSTA_ART |
F:RES_FEAR | RES_FIRE | RES_POIS | RES_DISEN | HIDE_TYPE |
F:ACTIVATE
-a:HARDCORE=ELESSAR
+a:ELESSAR
D:This green gem glows with inner light. Aragorn son of Arathorn wore
D:it at the Battle of the Pelennor Fields, and he was himself given the
D:name of 'Elessar' by the people of Gondor because of this.
@@ -2936,7 +2931,7 @@ W:50:50:3:35000
F:HOLD_LIFE | SUST_CON | SUST_WIS | SUST_INT | LITE1 | CON |
F:RES_DARK | RES_COLD | RES_NETHER | REGEN | INSTA_ART |
F:ACTIVATE
-a:HARDCORE=REST_ALL
+a:REST_ALL
D:A pure white jewel, the last gift of Queen Arwen Undomiel to Frodo
D:Baggins, intended to be worn around his neck on the chain that had
D:once borne the One Ring.
@@ -2950,7 +2945,7 @@ P:0:10d10:0:0:-30
F:LIFE | CON | INT | WIS | ESP_ALL | LITE3 | LITE1
F:CURSED | HEAVY_CURSE | TY_CURSE | DRAIN_EXP |
F:RES_BLIND | SEE_INVIS | ACTIVATE
-a:HARDCORE=PALANTIR
+a:PALANTIR
D:A shining white ball of unbreakable crystal, the ancient Palantiri
D:were used by kings of Numenor and later by the Exiles for rapid
D:communication between distant lands. This Palantir, however, was
@@ -2990,7 +2985,7 @@ I:11:14:0
W:70:100:50:100000
P:0:0d0:0:0:0
F:ACTIVATE | ACTIVATE_NO_WIELD | HIDE_TYPE | INSTA_ART | SPECIAL_GENE
-a:HARDCORE=ALCHEMY
+a:ALCHEMY
D:It was made for Thror, King under the Mountain. It is a huge golden bowl
D:with two handles, hammered and carved, with birds and flowers whose eyes
D:and leaves are made in jewels.
@@ -3002,7 +2997,7 @@ I:11:15:0
W:40:70:2:70000
P:0:0d0:0:0:0
F:ACTIVATE | ACTIVATE_NO_WIELD | HIDE_TYPE | INSTA_ART
-a:HARDCORE=BOROMIR
+a:BOROMIR
D:The summons of Gondor, an arrow sent as a symbol of desperate need from
D:Gondor to its northern allies, the Rohirrim. The tradition dates back to
D:the time of Borondir, who rode north from Gondor to summon aid from the
@@ -3120,7 +3115,7 @@ I:40:4:5
W:20:5:2:15000
P:0:1d1:0:0:10
F:ACTIVATE | CHR | INSTA_ART | RES_NEXUS | RES_POIS | SEE_INVIS | SUST_CHR
-a:HARDCORE=GROW_MOLD
+a:GROW_MOLD
D:A necklace of emeralds, green as the grass. It once belonged to Girion,
D:King of Dale, and was given to the Dwarves of the Lonely Mountain as
D:payment for a mithril mail shirt for Girion's son. It seems to have
@@ -3158,7 +3153,7 @@ I:34:8:0
W:95:80:100:90000
P:20:1d1:0:0:80
F:ACTIVATE | RES_BLIND | RES_DARK | RES_ELEC | RES_FIRE | RES_NETHER
-a:HARDCORE=BLADETURNER
+a:BLADETURNER
D:A shining shield, once borne by the great mariner Earendil, "scored with
D:runes to keep all wounds and harm from him".
@@ -3218,7 +3213,7 @@ F:NO_MAGIC | PRECOGNITION | REGEN | RES_DARK | RES_FIRE |
F:SEE_INVIS | SHOW_MODS | SLAY_DEMON | SLAY_EVIL | SLAY_TROLL |
F:SLAY_UNDEAD | SLOW_DIGEST | SPECIAL_GENE | SUST_CHR | SUST_CON |
F:SUST_DEX | SUST_INT | SUST_STR | SUST_WIS | ULTIMATE | VORPAL
-a:HARDCORE=ERU
+a:ERU
D:A weapon forged by Aule himself and blessed by Eru Iluvatar,
D:calling upon the strength of all his children (hence the name,
D:which means Children of Eru). It is Eru Iluvatar's gift to you,
@@ -3236,7 +3231,7 @@ F:NO_MAGIC | PRECOGNITION | REGEN | RES_DARK | RES_FIRE |
F:SEE_INVIS | SHOW_MODS | SLAY_DEMON | SLAY_EVIL | SLAY_TROLL |
F:SLAY_UNDEAD | SLOW_DIGEST | SPECIAL_GENE | SUST_CHR | SUST_CON |
F:SUST_DEX | SUST_INT | SUST_STR | SUST_WIS | ULTIMATE | VORPAL
-a:HARDCORE=ERU
+a:ERU
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.
@@ -3253,7 +3248,7 @@ F:NO_MAGIC | PRECOGNITION | REGEN | RES_DARK | RES_FIRE |
F:SEE_INVIS | SHOW_MODS | SLAY_DEMON | SLAY_EVIL | SLAY_TROLL |
F:SLAY_UNDEAD | SLOW_DIGEST | SPECIAL_GENE | SUST_CHR | SUST_CON |
F:SUST_DEX | SUST_INT | SUST_STR | SUST_WIS | ULTIMATE | VORPAL
-a:HARDCORE=ERU
+a:ERU
D:Aule's mighty weapon, granted to you to aid the defeat of Melkor.
# The Rapier of Vaire (Rogues, whose Critical-hits skill is only useful with lighter swords)
@@ -3268,7 +3263,7 @@ F:PRECOGNITION | REGEN | RES_DARK | RES_FIRE | SEE_INVIS | SHOW_MODS |
F:SLAY_DEMON | SLAY_EVIL | SLAY_TROLL | SLAY_UNDEAD | SLOW_DIGEST |
F:SPECIAL_GENE | SUST_CHR | SUST_CON | SUST_DEX | SUST_INT | SUST_STR |
F:SUST_WIS | ULTIMATE | VORPAL
-a:HARDCORE=ERU
+a:ERU
D:A shining rapier used by Vaire to cut the strings of time when
D:dire need arises. Its power with that of the Flame Imperishable
D:will let you destroy Melkor forever.
@@ -3333,7 +3328,7 @@ F:IGNORE_COLD | IGNORE_ELEC | IGNORE_FIRE | REGEN | RES_ACID |
F:RES_BLIND | RES_CHAOS | RES_COLD | RES_CONF | RES_DARK | RES_DISEN |
F:RES_ELEC | RES_FIRE | RES_LITE | RES_NETHER | RES_NEXUS | RES_POIS |
F:RES_SHARDS | RES_SOUND | SPECIAL_GENE | ULTIMATE
-a:HARDCORE=BLADETURNER
+a:BLADETURNER
D:This amulet contains the power of Mandos, the Doomsman of the
D:Valar. It will grant you protection against the foul dark magic
D:of Melkor, though you will still need your wits and strength
diff --git a/lib/mods/theme/edit/ab_info.txt b/lib/mods/theme/edit/ab_info.txt
index 4272776a..976c6d03 100644
--- a/lib/mods/theme/edit/ab_info.txt
+++ b/lib/mods/theme/edit/ab_info.txt
@@ -22,23 +22,17 @@
# E:excluding ability:excluding ability
-# If you need more sophisticated prereqs use the HOOK_LEARN_ABILITY
-
-# Version stamp (required)
-
# Do not forget to update misc.txt with an entry like the following :
# Maximum number of traits in ab_info.txt
# M:b:50
-V:2.2.0
-
N:0:Spread blows
D:If a monster dies to your attack but you still have blows left
D:you won't lose the full turn, allowing you to attack some other
D:monster in the same turn
-D:Prereq: Weaponmastery skill@30, Dex@17
+D:Prereq: Combat@30, Dex@17
I:5
-k:30:Weaponmastery
+k:30:Combat
S:17:DEX
N:1:Tree walking
diff --git a/lib/mods/theme/edit/al_info.txt b/lib/mods/theme/edit/al_info.txt
deleted file mode 100644
index c5e7c55d..00000000
--- a/lib/mods/theme/edit/al_info.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# File: al_info.txt
-
-
-# This file is used to initialize the "lib/raw/al_info.raw" file, which is
-# used as the alchemist recipes in ToME
-
-# This file is intentionally blank in Theme
-# because the Alchemist class has been removed.
-
-# Version stamp (required)
-
-V:2.0.0 \ No newline at end of file
diff --git a/lib/mods/theme/edit/ba_info.txt b/lib/mods/theme/edit/ba_info.txt
index b76f79dd..b0270989 100644
--- a/lib/mods/theme/edit/ba_info.txt
+++ b/lib/mods/theme/edit/ba_info.txt
@@ -17,10 +17,6 @@
# 1 = Restrict to normal & liked
# 2 = Restrict to liked
-# Version stamp (required)
-
-V:2.0.0
-
N:0:Nothing
C:0:0:0
I:0:0:.
@@ -65,10 +61,6 @@ N:10:Play craps
C:0:0:0
I:14:0:c
-N:11:Spin the wheel
-C:0:0:0
-I:15:0:s
-
N:12:Play dice slots
C:0:0:0
I:16:0:d
@@ -97,14 +89,6 @@ N:18:Research monster
C:1600:1500:1400
I:20:0:r
-N:19:View bounties
-C:0:0:0
-I:38:0:v
-
-N:20:Receive bounty money
-C:0:0:0
-I:39:0:b
-
N:21:Get quest monster
C:0:0:0
I:54:0:q
@@ -165,19 +149,6 @@ N:35:Get a quest
C:0:0:0
I:6:0:q
-# Restrict to liked/normal
-N:36:Get a quest
-C:0:0:0
-I:46:1:q
-
-N:37:Get a quest
-C:0:0:0
-I:47:0:q
-
-N:38:Get a quest
-C:0:0:0
-I:49:0:q
-
N:39:Herbal Healing
C:32000:10000:0
I:50:0:h
@@ -190,10 +161,6 @@ N:41:Distribute earnings
C:0:0:0
I:7:2:d
-N:42:Morph restoration
-C:3000:1500:750
-I:37:0:r
-
#for The Mirror
N:43:View fate
C:500:500:500
@@ -204,11 +171,6 @@ N:44:Research item
C:1500:1500:1500
I:1:0:a
-#for library in gondol
-N:45:Research item
-C:2000:2000:2000
-I:1:0:a
-
#for Star-Dome
N:46:Identify possessions
C:1200:1000:250
@@ -257,18 +219,6 @@ N:55:Get an item
C:0:0:0
I:44:0:g:p
-N:56:Request an item
-C:0:0:0
-I:51:2:r
-
-N:57:Ask for loan
-C:0:0:0
-I:52:2:a
-
-N:58:Pay back loan
-C:0:0:0
-I:53:2:p
-
N:59:Donate an item
C:0:0:0
I:43:0:d
diff --git a/lib/mods/theme/edit/d_info.txt b/lib/mods/theme/edit/d_info.txt
index 91cf3d20..f5d836f6 100644
--- a/lib/mods/theme/edit/d_info.txt
+++ b/lib/mods/theme/edit/d_info.txt
@@ -29,10 +29,6 @@
# 3 = OR
# 4 = NOR
-# Version stamp (required)
-
-V:2.0.0
-
### Wilderness(purely cosmetic, never used) ###
N:0:Wilderness
@@ -83,7 +79,8 @@ N:4:Barrow-Downs
D:BDw:a way to the Barrow-Downs.
W:1:10:1:0:14:160
# Theme adds *fog* (dense mist) on the Barrow-Downs :)
-L:88:94:210:2:199:4
+#L:88:94:210:2:199:4
+L:88:78:89:18:199:4
A:96:80:97:19:57:1:57:97
A:100:0:0
O:20:20:20:20
@@ -308,7 +305,7 @@ M:ORC | R_CHAR_o | R_CHAR_O
# There is Glaurung
N:20:Erebor
D:Ere:a tunnel leading into depths of the Lonely Mountain.
-W:60:72:35:0:20:140
+W:60:72:30:0:20:140
L:88:100:1:0:1:0
A:97:90:87:10:56:0:57:97
O:40:40:40:40
diff --git a/lib/mods/theme/edit/e_info.txt b/lib/mods/theme/edit/e_info.txt
index 72b8348e..70d0e917 100644
--- a/lib/mods/theme/edit/e_info.txt
+++ b/lib/mods/theme/edit/e_info.txt
@@ -63,10 +63,6 @@
-# Version stamp (required)
-
-V:2.0.0
-
### Mage Staff ###
N:1:of Mana
@@ -233,7 +229,7 @@ C:0:0:0:3
Z:blink
R:100
F:ACTIVATE
-a:HARDCORE=JUMP
+a:JUMP
### Shields ###
@@ -323,7 +319,7 @@ C:0:0:0:2
W:0:1:8:500
R:100
F:DEX | SUST_DEX | ACTIVATE | ESP_ORC
-a:HARDCORE=NOLDOR
+a:NOLDOR
N:24:of Intelligence
X:A:33:13
@@ -869,7 +865,7 @@ W:0:1:44:9000
C:8:8:0:2
R:100
F:DEX | STR | VORPAL | ACTIVATE
-a:HARDCORE=SPIN
+a:SPIN
# The "Elemental" brands (4) (6)
@@ -1251,7 +1247,7 @@ T:24:0:99
X:A:24:22
W:10:6:90:45000
C:4:4:0:2
-a:HARDCORE=TELEPORT
+a:TELEPORT
R:100
F:SLAY_EVIL | KILL_DRAGON | TELEPORT | FREE_ACT | SEARCH | BRAND_ELEC
F:REGEN | SLOW_DIGEST | RES_MORGUL | ACTIVATE | ESP_DRAGON
@@ -1310,7 +1306,7 @@ W:0:1:5:5000
R:100
F:SLAY_UNDEAD | SEE_INVIS | HOLD_LIFE | DRAIN_HP
F:ACTIVATE
-a:HARDCORE=SPECTRAL
+a:SPECTRAL
N:103:of Morgul
T:125:0:99
@@ -1617,7 +1613,7 @@ R:50
F:PVAL_M1
R:25
F:PVAL_M1
-a:HARDCORE=BA_ACID_H
+a:BA_ACID_H
# Rods ego
N:131:Capacity of
@@ -2148,7 +2144,7 @@ T:14:7:7
X:B:25:20
W:0:1:2:2000
C:0:0:0:0
-a:HARDCORE=BA_COLD_3
+a:BA_COLD_3
R:100
F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD |
@@ -2157,7 +2153,7 @@ T:14:7:7
X:B:25:20
W:0:1:2:2000
C:0:0:0:0
-a:HARDCORE=BA_ELEC_3
+a:BA_ELEC_3
R:100
F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD |
@@ -2166,7 +2162,7 @@ T:14:7:7
X:B:25:20
W:0:1:2:2000
C:0:0:0:0
-a:HARDCORE=BA_FIRE_H
+a:BA_FIRE_H
R:100
F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD |
@@ -2434,7 +2430,7 @@ F:FREE_ACT | RES_BLIND | RES_CONF | R_HIGH | SUST_WIS |
F:BLESSED | ACTIVATE |
F:IGNORE_ACID | IGNORE_COLD | IGNORE_ELEC | IGNORE_FIRE |
f:IGNORE_ACID | IGNORE_COLD | IGNORE_ELEC | IGNORE_FIRE | SUST_WIS |
-a:HARDCORE=PROT_EVIL
+a:PROT_EVIL
r:F:CURSED | HEAVY_CURSE | AUTO_CURSE |
R:33
F:ESP_EVIL |
@@ -2453,7 +2449,7 @@ F:ACTIVATE |
F:IGNORE_ACID | IGNORE_COLD | IGNORE_ELEC | IGNORE_FIRE |
f:FREE_ACT | IGNORE_ACID | IGNORE_COLD | IGNORE_ELEC | IGNORE_FIRE |
r:F:CURSED | HEAVY_CURSE | AUTO_CURSE |
-a:HARDCORE=SPECTRAL
+a:SPECTRAL
R:33
F:RES_NETHER |
R:5
diff --git a/lib/mods/theme/edit/f_info.txt b/lib/mods/theme/edit/f_info.txt
index dbfec51a..2b42aa47 100644
--- a/lib/mods/theme/edit/f_info.txt
+++ b/lib/mods/theme/edit/f_info.txt
@@ -15,11 +15,6 @@
# Note that terrain feature zero contains the "darkness" picture.
-# Version stamp (required)
-
-V:2.0.0
-
-
# 0x00 --> nothing
N:0:nothing
diff --git a/lib/mods/theme/edit/k_info.txt b/lib/mods/theme/edit/k_info.txt
index 07e4bbe2..c8a78082 100644
--- a/lib/mods/theme/edit/k_info.txt
+++ b/lib/mods/theme/edit/k_info.txt
@@ -27,10 +27,6 @@
# A: depth/rarity : depth/rarity : etc
# F: flag | flag | etc
-# Version stamp (required)
-
-V:2.0.0
-
##### Something special #####
@@ -1413,7 +1409,7 @@ G:=:d
I:45:4:0
W:5:0:2:250
A:5/1
-a:HARDCORE=DEST_TELE
+a:DEST_TELE
F:CURSED | TELEPORT | EASY_KNOW | ACTIVATE
f:TELEPORT
D:This ring will uncontrollably send you to different places at its whim.
@@ -1474,7 +1470,7 @@ I:45:18:0
W:50:0:2:3000
A:50/1
P:0:0d0:0:0:15
-a:HARDCORE=BA_FIRE_4
+a:BA_FIRE_4
F:RES_FIRE | ACTIVATE
f:RES_FIRE | IGNORE_FIRE
D:This fiery circlet grants you protection, makes fire less dangerous and even
@@ -1486,7 +1482,7 @@ I:45:17:0
W:50:0:2:3000
A:50/1
P:0:0d0:0:0:15
-a:HARDCORE=BA_ACID_4
+a:BA_ACID_4
F:RES_ACID | ACTIVATE
f:RES_ACID | IGNORE_ACID
D:This magical ring is imbued with spells of devouring acid, granting protection against such
@@ -1497,7 +1493,7 @@ G:=:d
I:45:19:0
W:50:0:2:3000
A:50/1
-a:HARDCORE=BA_COLD_4
+a:BA_COLD_4
P:0:0d0:0:0:15
F:RES_COLD | ACTIVATE
f:RES_COLD | IGNORE_COLD
@@ -1538,7 +1534,7 @@ I:45:28:0
W:20:0:2:500
A:20/1
F:HIDE_TYPE | EASY_USE | ACTIVATE |
-a:HARDCORE=WHIRLWIND
+a:WHIRLWIND
D:This ring magically improves your control in combat, allowing you to hit more often.
D:It can also sometimes be used to hit several nearby opponents with deadly accuracy.
@@ -1621,7 +1617,7 @@ I:40:2:0
W:25:0:3:10000
A:25/1
F:EASY_KNOW | ACTIVATE | BLESSED | ESP_EVIL
-a:HARDCORE=PROT_EVIL
+a:PROT_EVIL
D:This blessed amulet fends off evil beings and warns the wearer
D:of their presence.
@@ -2698,9 +2694,9 @@ W:127:0:4:0
A:127/255
P:0:1d1:0:0:0
T:39:2
-F:NORM_ART | FULL_NAME | SPECIAL_GENE
+F:NORM_ART | FULL_NAME | SPECIAL_GENE | EASY_USE
F:ACTIVATE | ACTIVATE_NO_WIELD
-a:SPELL=Artifact Eternal Flame
+a:ETERNAL_FLAME
D:An impossibly bright, flickering living flame. It can be used
D:once to imbue an object with the power of Eru Iluvatar himself.
@@ -3472,7 +3468,7 @@ I:38:1:0
W:60:0:200:50000
A:60/8
P:30:2d4:-2:0:10
-a:HARDCORE=BR_ACID
+a:BR_ACID
F:RES_ACID | FLY |
f:RES_ACID |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -3485,7 +3481,7 @@ I:38:2:0
W:50:0:200:40000
A:50/8
P:30:2d4:-2:0:10
-a:HARDCORE=BR_ELEC
+a:BR_ELEC
F:RES_ELEC | FLY |
f:RES_ELEC |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -3497,7 +3493,7 @@ G:[:w
I:38:3:0
W:50:0:200:40000
A:50/8
-a:HARDCORE=BR_COLD
+a:BR_COLD
P:30:2d4:-2:0:10
F:RES_COLD | FLY |
f:RES_COLD |
@@ -3511,7 +3507,7 @@ I:38:4:0
W:60:0:200:50000
A:60/8
P:30:2d4:-2:0:10
-a:HARDCORE=BR_FIRE
+a:BR_FIRE
F:RES_FIRE | FLY |
f:RES_FIRE |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -3524,7 +3520,7 @@ I:38:5:0
W:50:0:200:40000
A:50/8
P:30:2d4:-2:0:10
-a:HARDCORE=BR_POIS
+a:BR_POIS
F:RES_POIS | FLY |
f:RES_POIS |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -3537,7 +3533,7 @@ I:38:6:0
W:90:0:200:150000
A:90/32
P:30:2d4:-2:0:10
-a:HARDCORE=BR_MANY
+a:BR_MANY
F:ATTR_MULTI
F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_POIS | FLY |
f:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_POIS |
@@ -3551,7 +3547,7 @@ I:38:10:0
W:70:0:200:70000
A:70/16
P:30:2d4:-2:0:10
-a:HARDCORE=BR_LIGHT
+a:BR_LIGHT
F:RES_LITE | RES_DARK | FLY |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
D:A strangely glowing armour made from a pseudo-dragon's hide.
@@ -3563,7 +3559,7 @@ I:38:12:0
W:80:0:200:80000
A:80/16
P:30:2d4:-2:0:10
-a:HARDCORE=BR_SHARD
+a:BR_SHARD
F:RES_SOUND | RES_SHARDS | FLY |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
D:A sharp-scaled armour that seems to roar, made from a law dragon's hide.
@@ -3575,7 +3571,7 @@ I:38:14:0
W:50:0:200:40000
A:50/8
P:30:2d4:-2:0:10
-a:HARDCORE=BR_CONF
+a:BR_CONF
F:RES_CONF | FLY |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
D:A brownish armour glittering in a dazzling light, made from a bronze dragon's hide.
@@ -3587,7 +3583,7 @@ I:38:16:0
W:60:0:200:50000
A:60/8
P:30:2d4:-2:0:10
-a:HARDCORE=BR_SOUND
+a:BR_SOUND
F:RES_SOUND | FLY |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
D:A suit of armour with rustling scales, made from a gold dragon's hide.
@@ -3599,7 +3595,7 @@ I:38:18:0
W:80:0:200:80000
A:80/16
P:30:2d4:-2:0:10
-a:HARDCORE=BR_CHAOS
+a:BR_CHAOS
F:ATTR_MULTI
F:RES_CHAOS | RES_DISEN | FLY |
f:RES_CHAOS |
@@ -3614,7 +3610,7 @@ I:38:20:0
W:95:0:200:100000
A:95/32
P:30:2d4:-2:0:10
-a:HARDCORE=BR_BALANCE
+a:BR_BALANCE
F:RES_CHAOS | RES_DISEN | RES_SOUND | RES_SHARDS | FLY |
F:ACTIVATE | IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
D:A suit of armour made of the hide of a dead dragon. When wearing it, you feel like you
@@ -3626,7 +3622,7 @@ I:38:30:0
W:100:0:250:350000
A:100/64
P:40:2d4:-3:0:15
-a:HARDCORE=BR_POWER
+a:BR_POWER
F:ATTR_MULTI
F:RES_ACID | RES_FIRE | RES_COLD | RES_ELEC | RES_POIS | FLY |
F:RES_NETHER | RES_NEXUS | RES_CHAOS | RES_LITE | RES_DARK |
@@ -3850,7 +3846,7 @@ W:50:0:2:100000
A:50/2
F:BLOWS | ACTIVATE | EASY_USE |
f:BLOWS | ACTIVATE
-a:HARDCORE=SPIN
+a:SPIN
D:This powerful ring of fighters greatly enhances your fighting speed, allowing you to attack
D:more often in a round of combat.
@@ -4785,7 +4781,7 @@ I:45:56:0
W:50:0:2:3000
A:50/1
P:0:0d0:0:0:15
-a:HARDCORE=BA_ELEC_4
+a:BA_ELEC_4
F:RES_ELEC | ACTIVATE
f:RES_ELEC | IGNORE_ELEC
D:This sparkling circlet grants you protection, makes electricity less
@@ -5992,7 +5988,7 @@ G:":G
I:40:17:0
W:25:0:3:10000
A:25/1
-a:HARDCORE=BA_POIS_4
+a:BA_POIS_4
F:RES_POIS | DEX | ACTIVATE
D:A petrified serpent's tongue, hung on a thin chain to be clasped around your neck. It makes you
D:like a snake, able to wriggle out of tight corners, impervious to poisons and poisonous
@@ -6465,7 +6461,7 @@ A:100/10
F:SUST_STR | SUST_DEX | SUST_CON | REGEN |
F:HOLD_LIFE | LIFE |
F:HIDE_TYPE | ACTIVATE |
-a:HARDCORE=CURE_HUNGER
+a:CURE_HUNGER
f:SUST_STR | SUST_DEX | SUST_CON | REGEN |
D:This valuable ring enhances and protects the wearer's life force in every way.
@@ -6476,7 +6472,7 @@ W:100:0:2:125000
A:100/10
F:SUST_INT | SUST_WIS | RES_FEAR | RES_CONF |
F:ACTIVATE | EASY_KNOW |
-a:HARDCORE=CURE_INSANITY
+a:CURE_INSANITY
f:SUST_INT | SUST_WIS |
D:This valuable ring protects the wearer's intellect and intuition, as well as
D:guarding him from most mental attacks. From time to time, the wearer can
diff --git a/lib/mods/theme/edit/misc.txt b/lib/mods/theme/edit/misc.txt
index 2d380202..98375869 100644
--- a/lib/mods/theme/edit/misc.txt
+++ b/lib/mods/theme/edit/misc.txt
@@ -33,9 +33,6 @@ M:V:108
# Maximum number of terrain features in f_info.txt
M:F:249
-# Maximum number of alchemist recipes
-M:a:1000
-
# Maximum number of artifacts in a_info.txt
M:A:257
diff --git a/lib/mods/theme/edit/ow_info.txt b/lib/mods/theme/edit/ow_info.txt
index bf1283fb..75683581 100644
--- a/lib/mods/theme/edit/ow_info.txt
+++ b/lib/mods/theme/edit/ow_info.txt
@@ -13,13 +13,9 @@
# L:liked races
# H:hated races
-# Version stamp (required)
-
-V:2.0.0
-
# The zero index owner. If she owns a shop, there is a problem. :P
N:0:Bell Goodchild(Hobbit)
-I:20000:170:108:5:15
+I:20000:120
C:120:100:80
L:Elf | Half-Elf | High-Elf | Dunadan | Hobbit | Dwarf | RohanKnight
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Druadan | Dark-Elf
@@ -27,25 +23,25 @@ H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Druadan | Dark-Elf
### The General Store - 1 ###
N:1:Balin(Dwarf)
-I:25000:180:108:2:2
+I:25000:130
C:150:100:50
L:Dwarf | Petty-Dwarf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Troll
N:2:Berylla Boffin(Hobbit)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | Hobbit
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
N:3:Adrahil(Half-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:Half-Elf | High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll
N:4:Aegnor(Wood-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll | Easterling
@@ -53,25 +49,25 @@ H:Dragon | Demon | Orc | Half-Ogre | Troll | Easterling
### The Armoury - 2 ###
N:5:Bifur(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Hobbit | Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:6:Lalia Clayhanger(Hobbit)
-I:25000:180:108:2:2
+I:25000:130
C:125:100:50
L:Human | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:7:Alcarin(Human)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | Half-Elf | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Petty-Dwarf | Troll | Easterling
N:8:Alatariel(High-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll | Easterling
@@ -79,25 +75,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll | Easterling
### The Weaponsmith - 3 ###
N:9:Bofur(Dwarf)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:70
L:Human | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:10:Daisy Gamgee(Hobbit)
-I:20000:190:109:3:4
+I:20000:130
C:110:100:80
L:Human | Hobbit
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:11:Beregond(Dunadan)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
N:12:Amarie(Dark-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:125:100:50
L:Dark-Elf | Elf
H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Dwarf | Troll | Easterling
@@ -105,25 +101,25 @@ H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Dwarf | Troll | Easterling
### The Temple - 4 ###
N:13:Bombur(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Half-Elf | Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:14:Dora Baggins(Hobbit)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:Human | High-Elf | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:15:Bergil(Half-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:125:100:50
L:Human | Half-Elf | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Troll | Easterling
N:16:Amdir(Wood-Elf)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:High-Elf | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll | Easterling
@@ -131,25 +127,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll | Easterling
### The Alchemist - 5 ###
N:17:Borin(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:110:100:80
L:Petty-Dwarf | Dwarf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Elf | Troll
N:18:Elfstan Fairbairn(Hobbit)
-I:10000:200:110:4:8
+I:10000:140
C:125:100:50
L:Human | Half-Elf | High-Elf | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll
N:19:Cemendur(Human)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | Half-Elf | RohanKnight | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Troll | Easterling
N:20:Annael(High-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:70
L:Human | Half-Elf | High-Elf | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll
@@ -157,25 +153,25 @@ H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll
### The Magic Shop - 6 ###
N:21:Dis(Dwarf)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:50
L:Petty-Dwarf | Dwarf | Half-Elf | Dunadan
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Human | Troll | Eagle
N:22:Folco Boffin(Hobbit)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Hobbit
H:Dragon | Demon | Orc | Troll
N:23:Ciryon(Dunadan)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | Half-Elf | High-Elf | RohanKnight | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
N:24:Arminas(Dark-Elf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | Dark-Elf | Elf
H:Dragon | Demon | Beorning | Orc | High-Elf | Half-Ogre | Petty-Dwarf | Troll | Easterling
@@ -183,25 +179,25 @@ H:Dragon | Demon | Beorning | Orc | High-Elf | Half-Ogre | Petty-Dwarf | Troll |
### The Black Market - 7 ###
N:25:Dori(Dwarf)
-I:30000:210:120:8:8
+I:30000:150
C:110:100:90
L:Dwarf | Easterling
H:Dragon | Demon | Orc
N:26:Halfred Greenhand(Hobbit)
-I:30000:210:120:8:8
+I:30000:150
C:110:100:90
L:Hobbit
H:Dragon | Demon | Troll
N:27:Deorwine(Half-Elf)
-I:30000:210:120:8:8
+I:30000:150
C:110:100:90
L:Half-Elf | Easterling
H:Dragon | Demon | Dark-Elf
N:28:Artanis(Wood-Elf)
-I:30000:210:120:8:8
+I:30000:150
C:110:100:90
L:High-Elf | Elf | Easterling
H:Dragon | Demon | Orc | Troll
@@ -209,25 +205,25 @@ H:Dragon | Demon | Orc | Troll
### The Bookstore - 9 ###
N:29:Dwalin(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | Petty-Dwarf | Dwarf
H:Dragon | Demon | Orc | Elf | Half-Ogre | Troll
N:30:Tanta Hornblower(Hobbit)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Troll
N:31:Dorlas(Human)
-I:30000:170:107:1:1
+I:30000:120
C:150:100:50
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
N:32:Caranthir(High-Elf)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Half-Elf | High-Elf | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll | Easterling
@@ -235,25 +231,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll | Ea
### The Pet Shop - 0 ###
N:33:Fili(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:RohanKnight | Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:34:Lalia Clayhanger(Hobbit)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Troll
N:35:Elfwine(Dunadan)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | Half-Elf | High-Elf | RohanKnight | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll
N:36:Edrahil(Dark-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:150:100:50
L:Dark-Elf | Elf | Easterling
H:Dragon | Demon | Orc | High-Elf | Half-Ogre | Dwarf | Troll
@@ -262,98 +258,98 @@ H:Dragon | Demon | Orc | High-Elf | Half-Ogre | Dwarf | Troll
#Bree
N:37:Uldrik(Human)
-I:0:0:0:0:0
+I:0:0
C:0:0:0
L:Human | RohanKnight | Dunadan | Hobbit |
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Minas Anor
N:38:Aragorn (Dunadan)
-I:0:0:0:0:0
+I:0:0
C:0:0:0
L:Human | High-Elf | RohanKnight | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Troll
#Khazad-Dum
N:39:Gimli(Dwarf)
-I:0:0:0:0:0
+I:0:0
C:0:0:0
L:RohanKnight | Dunadan | Hobbit | Elf | Dwarf
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Beorn's Halls
N:40:Deor(Beorning)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Beorning | Dwarf | Maia | Hobbit | Ent
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Dale
N:41:Bard the Grim(Human)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human | Hobbit | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
#Henneth Annun
N:42:Halbarad(Dunadan)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human | High-Elf | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Imladris
N:43:Elrond Half-Elven
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human | Half-Elf | High-Elf | RohanKnight | Dunadan | Hobbit | Elf | Dwarf | Ent
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Helm's Deep
N:44:Erkenbrand(RohanKnight)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human | Maia | RohanKnight | Dunadan | Hobbit | Elf | Dwarf | Ent
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll
#Thranduil's Halls
N:45:Legolas Greenleaf(Wood-Elf)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:High-Elf | Dunadan | Ent | Elf
H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Troll
#Edoras
N:46:Theoden(RohanKnight)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human | RohanKnight | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Esgaroth
N:47:The Master(Human)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Troll
#Hobbiton
N:48:Samwise Gamgee(Hobbit)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Hobbit | Elf | High-Elf | Dark-Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Osgiliath
N:49:Eldacar(Human)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human | Half-Elf | High-Elf | RohanKnight | Dunadan | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll
#Pelargir
N:50:Earnil(Dunadan)
-I:100:100:100:0:0
+I:100:100
C:110:100:90
L:Human | Half-Elf | High-Elf | RohanKnight | Dunadan | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll
@@ -361,37 +357,37 @@ H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf |
### Caras Galadhon owners ###
N:51:Galadriel(High-Elf)
-I:15000:120:105:6:16
+I:15000:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
N:52:Celeborn(High-Elf)
-I:15000:120:105:6:16
+I:15000:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
N:53:Aulendil(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Warrior |
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
N:54:Valceronwe(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Mage | Thaumaturgist | Sorceror
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
N:55:Voronwe(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Priest | Paladin
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
N:56:Celegail(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Ranger
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
@@ -399,71 +395,71 @@ H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
### Gondolin owners ###
N:57:Turgon(High-Elf)
-I:30000:120:105:6:16
+I:30000:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:58:Pengolodh(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:59:Aerandir(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:60:Celebrimbor(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
#L:Warrior |
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:61:Lomelosse(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf |
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:62:Arlindel(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
#L:Harper | Ranger
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:63:Sulraen(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
#L:Mage | Sorceror
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:64:Firiel(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf |
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:65:Earendur(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:66:Glorfindel(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf
#L:Ranger
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
N:67:Ecthelion(High-Elf)
-I:0:120:105:6:16
+I:0:110
C:120:100:80
L:High-Elf | Half-Elf
#L:Paladin
@@ -473,70 +469,70 @@ H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
#Bree
N:68:Barliman Butterbur(Human)
-I:100:170:108:4:10
+I:100:120
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning | Easterling
#Pelargir
N:69:Ciryatur(Dunadan)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Dunadan | Human | RohanKnight
H:Dragon | Demon | Orc | Troll | Half-Ogre | Beorning
#Caras Galadhon
N:70:Celebor(Elf)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:High-Elf | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
#Minas Anor
N:71:Bregolas(Human)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
#Khazad-Dum
N:72:Thror(Dwarf)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | High-Elf | Troll
#Dale
N:73:Troin(Dwarf)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Human | Dwarf
H:Dragon | Demon | Orc | Half-Ogre | Troll
#Edoras
N:74:Theodwyn(Shieldmaiden)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
#Esgaroth
N:75:Garm(Human)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Human | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Petty-Dwarf | Troll
#Hobbiton
N:76:Rose Cotton(Hobbit)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Human | High-Elf | Hobbit
H:Dragon | Demon | Orc | Half-Ogre | Troll | Easterling
#Osgiliath
N:77:Palantir(Human)
-I:100:170:108:4:10
+I:100:120
C:110:100:80
L:Human | High-Elf | RohanKnight | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
@@ -544,25 +540,25 @@ H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
### The Soothsayers ###
N:78:Ori(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Hobbit | Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:79:Tolman Gardner(Hobbit)
-I:25000:180:108:2:2
+I:25000:130
C:150:100:50
L:Human | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:80:Inziladun(Human)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | Half-Elf | RohanKnight | Dunadan | Easterling
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Petty-Dwarf | Troll
N:81:Gelmir(High-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll
@@ -570,25 +566,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll
### The Eagles ###
N:82:Palano(Eagle)
-I:30000:170:110:1:1
+I:30000:130
C:125:100:50
L:Eagle
H:Dragon | Demon | RohanKnight
N:83:Eglad(Eagle)
-I:30000:170:110:1:1
+I:30000:130
C:125:100:50
L:Eagle
H:Dragon | Demon | Hobbit
N:84:Hiron(Eagle)
-I:30000:170:110:1:1
+I:30000:130
C:125:100:50
L:Eagle
H:Dragon | Demon | Dunadan
N:85:Grada(Eagle)
-I:30000:170:110:1:1
+I:30000:130
C:125:100:50
L:Eagle
H:Dragon | Demon | High-Elf
@@ -596,25 +592,25 @@ H:Dragon | Demon | High-Elf
### The Librarians ###
N:86:Frerin(Dwarf)
-I:25000:180:108:2:2
+I:25000:130
C:150:100:50
L:Dwarf | Petty-Dwarf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Troll
N:87:Malva Headstrong(Hobbit)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | Hobbit
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:88:Erendis(Half-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:Half-Elf | High-Elf | Dunadan | Elf | Easterling
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll
N:89:Elemmakil(Wood-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
@@ -622,25 +618,25 @@ H:Dragon | Demon | Orc | Half-Ogre | Troll
### The Casino Owners ###
N:90:Fror(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Hobbit | Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:91:Marmadas Brandybuck(Hobbit)
-I:25000:180:108:2:2
+I:25000:130
C:150:100:50
L:Human | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:92:Fastred(Human)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | Half-Elf | RohanKnight | Dunadan | Easterling
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Petty-Dwarf | Troll
N:93:Elured(High-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll
@@ -648,25 +644,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Troll
### The Beastmasters ###
N:94:Gloin(Dwarf)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:70
L:Human | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:95:Milo Burrows(Hobbit)
-I:20000:190:109:3:4
+I:20000:130
C:110:100:80
L:Human | Hobbit
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:96:Findegil(Dunadan)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
N:97:Elurin(Dark-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:150:100:50
L:Dark-Elf | Elf | Easterling
H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Dwarf | Troll
@@ -676,25 +672,25 @@ H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Dwarf | Troll
#Fighters Hall
N:98:Tarcil(Human)
-I:30000:170:107:1:1
+I:30000:120
C:150:100:50
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Orc | Half-Ogre | Troll | Easterling
N:99:Ulbar(Easterling)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | RohanKnight | Dunadan
L:Half-Elf | High-Elf | Elf | Easterling
N:100:Brego(RohanKnight)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Dark-Elf | Petty-Dwarf | Troll | Easterling
N:101:Ostoher(Dunadan)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll | Easterling
@@ -702,25 +698,25 @@ H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll | Easterling
#Tower of Magery
N:102:Arveleg(Human)
-I:25000:180:108:2:2
+I:25000:130
C:125:100:70
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Orc | Half-Ogre | Troll | Easterling
N:103:Uldar(Easterling)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:Human | RohanKnight | Dunadan | Easterling
L:Half-Elf | High-Elf | Elf
N:104:Aldor(RohanKnight)
-I:20000:190:109:3:4
+I:20000:130
C:150:100:50
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Dark-Elf | Petty-Dwarf | Troll | Easterling
N:105:Tarannon(Dunadan)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll | Easterling
@@ -728,25 +724,25 @@ H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll | Easterling
#Inner Temple
N:106:Eradan(Human)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:70
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Orc | Half-Ogre | Troll
N:107:Ulwise(Easterling)
-I:25000:180:108:2:2
+I:25000:130
C:150:100:50
L:Human | RohanKnight | Dunadan | Easterling
L:Half-Elf | High-Elf | Elf
N:108:Gram(RohanKnight)
-I:20000:190:109:3:4
+I:20000:130
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Dark-Elf | Petty-Dwarf | Troll | Easterling
N:109:Minalcar(Dunadan)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll
@@ -754,25 +750,25 @@ H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll
#Paladins Guild
N:110:Herion(Human)
-I:30000:170:107:1:1
+I:30000:120
C:150:100:50
L:Human | RohanKnight | Dunadan | Easterling
H:Dragon | Demon | Orc | Half-Ogre | Troll
N:111:Ulgug(Easterling)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | RohanKnight | Dunadan | Easterling
L:Half-Elf | High-Elf | Elf
N:112:Walda(RohanKnight)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Dark-Elf | Petty-Dwarf | Troll | Easterling
N:113:Calimehtar(Dunadan)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll | Easterling
@@ -780,25 +776,25 @@ H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll | Easterling
#Rangers Guild
N:114:Egalmoth(Human)
-I:25000:180:108:2:2
+I:25000:130
C:125:100:70
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Orc | Half-Ogre | Troll | Easterling
N:115:Ulaf(Easterling)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:Human | RohanKnight | Dunadan | Easterling
L:Half-Elf | High-Elf | Elf
N:116:Fengel(RohanKnight)
-I:20000:190:109:3:4
+I:20000:130
C:150:100:50
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Dark-Elf | Petty-Dwarf | Troll | Easterling
N:117:Telemnar(Dunadan)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll
@@ -808,25 +804,25 @@ H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll
### The Axesmiths ###
N:118:Ris(Dwarf)
-I:30000:200:130:1:1
+I:30000:150
C:150:100:50
L:Dwarf
H:Dragon | Demon | Orc
N:119:Malach Aradan(Human)
-I:25000:300:150:2:2
+I:25000:200
C:125:100:60
L:Human | Easterling
H:Dragon | Demon | Troll
N:120:Indis(Half-Elf)
-I:20000:250:140:3:4
+I:20000:170
C:115:100:70
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:121:Rogdug(Half-Orc)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:80
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -834,25 +830,25 @@ H:Dragon | Demon | Elf
### The Haftedsmiths ###
N:122:Sogur(Dwarf)
-I:20000:250:140:3:4
+I:20000:170
C:125:100:80
L:Dwarf
H:Dragon | Demon | Orc
N:123:Manwendil(Human)
-I:25000:300:150:2:2
+I:25000:200
C:115:100:70
L:Human | Easterling
H:Dragon | Demon | Troll
N:124:Lenwe(Half-Elf)
-I:10000:150:120:4:8
+I:10000:130
C:150:100:50
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:125:Ghaz(Half-Orc)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -860,25 +856,25 @@ H:Dragon | Demon | Elf
### The Polearmsmiths ###
N:126:Tolin(Dwarf)
-I:10000:150:120:4:8
+I:10000:130
C:115:100:70
L:Dwarf
H:Dragon | Demon | Orc
N:127:Narmacil(Human)
-I:25000:300:150:2:2
+I:25000:200
C:125:100:80
L:Human | Easterling
H:Dragon | Demon | Troll
N:128:Lindir(Half-Elf)
-I:20000:250:140:3:4
+I:20000:170
C:150:100:50
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:129:Stogash(Half-Orc)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -886,25 +882,25 @@ H:Dragon | Demon | Elf
### The Swordsmiths ###
N:130:Tis(Dwarf)
-I:20000:250:140:3:4
+I:20000:170
C:125:100:80
L:Dwarf
H:Dragon | Demon | Orc
N:131:Nuneth(Human)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:60
L:Human | Easterling
H:Dragon | Demon | Troll
N:132:Mahtan(Half-Elf)
-I:30000:200:130:1:1
+I:30000:150
C:115:100:70
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:133:Rudak(Half-Orc)
-I:25000:300:150:2:2
+I:25000:200
C:150:100:50
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -912,25 +908,25 @@ H:Dragon | Demon | Elf
### The Rare Jewellers ###
N:134:Uin(Dwarf)
-I:25000:300:150:2:2
+I:25000:200
C:115:100:70
L:Dwarf
H:Dragon | Demon | Orc
N:135:Ornendil(Human)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:60
L:Human | Easterling
H:Dragon | Demon | Troll
N:136:Malgalad(Half-Elf)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:80
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:137:Ghashuf(Half-Orc)
-I:20000:250:140:3:4
+I:20000:170
C:150:100:50
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -938,25 +934,25 @@ H:Dragon | Demon | Elf
### The Jewellers ###
N:138:Vali(Dwarf)
-I:25000:300:150:2:2
+I:25000:200
C:150:100:50
L:Dwarf
H:Dragon | Demon | Orc
N:139:Orodreth(Human)
-I:30000:200:130:1:1
+I:30000:150
C:115:100:70
L:Human | Easterling
H:Dragon | Demon | Troll
N:140:Theodred(Half-Elf)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:80
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:141:Rangush(Half-Orc)
-I:20000:250:140:3:4
+I:20000:170
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -964,25 +960,25 @@ H:Dragon | Demon | Elf
### The Footwear Shop owners ###
N:142:Nellas(Human)
-I:10000:150:120:4:8
+I:10000:130
C:115:100:70
L:Human | Easterling
H:Dragon | Demon | Troll
N:143:Tindomiel(Half-Elf)
-I:25000:300:150:2:2
+I:25000:200
C:125:100:80
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:144:Ragnor(Half-Elf)
-I:20000:250:140:3:4
+I:20000:170
C:150:100:50
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:145:Idrish(Half-Orc)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -990,25 +986,25 @@ H:Dragon | Demon | Elf
### The Rare Footwear Shop owners ###
N:146:Nerwen(Human)
-I:20000:250:140:3:4
+I:20000:170
C:125:100:80
L:Human | Easterling
H:Dragon | Demon | Troll
N:147:Ulbar (Half-Elf)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:60
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:148:Pelendur(Half-Elf)
-I:30000:200:130:1:1
+I:30000:150
C:115:100:70
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:149:Budgar(Half-Orc)
-I:25000:300:150:2:2
+I:25000:200
C:150:100:50
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -1016,25 +1012,25 @@ H:Dragon | Demon | Elf
### The Dungeon Librarians ###
N:150:Nom(Human)
-I:25000:300:150:2:2
+I:25000:200
C:115:100:70
L:Human | Easterling
H:Dragon | Demon | Troll
N:151:Urwen (Half-Elf)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:60
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:152:Rian(Half-Elf)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:80
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:153:Mosrog(Half-Orc)
-I:20000:250:140:3:4
+I:20000:170
C:150:100:50
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -1042,25 +1038,25 @@ H:Dragon | Demon | Elf
### The Expensive Black Marketeers ###
N:154:Olwe(Human)
-I:30000:300:150:8:8
+I:30000:200
C:125:100:90
L:Human | Easterling
H:Dragon | Demon | Troll
N:155:Valacar(Half-Elf)
-I:30000:300:150:8:8
+I:30000:200
C:125:100:90
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:156:Silmarien(Half-Elf)
-I:30000:300:150:8:8
+I:30000:200
C:125:100:90
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:157:Ghaz(Half-Orc)
-I:30000:300:150:8:8
+I:30000:200
C:125:100:90
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -1068,25 +1064,25 @@ H:Dragon | Demon | Elf
### The Common Shop Owners ###
N:158:Ioreth(Human)
-I:25000:300:150:2:2
+I:25000:200
C:150:100:50
L:Human | Easterling
H:Dragon | Demon | Troll
N:159:Vidugavia(Half-Elf)
-I:30000:200:130:1:1
+I:30000:150
C:115:100:70
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:160:Soronto(Half-Elf)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:80
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:161:Nazg(Half-Orc)
-I:20000:250:140:3:4
+I:20000:170
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -1094,25 +1090,25 @@ H:Dragon | Demon | Elf
### The Dragon Hunters ###
N:162:Oropher(Human)
-I:10000:150:120:4:8
+I:10000:130
C:115:100:70
L:Human | Easterling
H:Dragon | Demon | Troll
N:163:Walda(Half-Elf)
-I:25000:300:150:2:2
+I:25000:200
C:125:100:80
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:164:Mithrellas(Half-Elf)
-I:20000:250:140:3:4
+I:20000:170
C:150:100:50
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:165:Urbag(Half-Orc)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -1120,25 +1116,25 @@ H:Dragon | Demon | Elf
### The Speed Ring Market Owners ###
N:166:Orophin(Human)
-I:20000:250:140:3:4
+I:20000:170
C:125:100:80
L:Human | Easterling
H:Dragon | Demon | Troll
N:167:Wulf(Half-Orc)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
N:168:Baguk(Half-Troll)
-I:30000:200:130:1:1
+I:30000:150
C:115:100:70
L:Troll | Easterling
H:Dragon | Demon | Human
N:169:Zikram(Half-Orc)
-I:25000:300:150:2:2
+I:25000:200
C:150:100:50
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -1146,25 +1142,25 @@ H:Dragon | Demon | Elf
### The Scribes ###
N:170:Rumil(Human)
-I:25000:300:150:2:2
+I:25000:200
C:115:100:70
L:Human | Easterling
H:Dragon | Demon | Troll
N:171:Saeros(Half-Elf)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:60
L:Half-Elf | Easterling
H:Dragon | Demon | Half-Ogre
N:172:Zartosh(Half-Orc)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:80
L:Orc | Easterling
H:Dragon | Demon | Elf
N:173:Shog(Half-Troll)
-I:20000:250:140:3:4
+I:20000:170
C:150:100:50
L:Troll | Easterling
H:Dragon | Demon | Human
@@ -1172,25 +1168,25 @@ H:Dragon | Demon | Human
### The Potion Peddlers ###
N:174:Zamin(Human)
-I:25000:300:150:2:2
+I:25000:200
C:150:100:50
L:Human | Easterling
H:Dragon | Demon | Troll
N:175:Algosh(Half-Orc)
-I:30000:200:130:1:1
+I:30000:150
C:115:100:70
L:Orc | Easterling
H:Dragon | Demon | Elf
N:176:Seghash(Half-Troll)
-I:10000:150:120:4:8
+I:10000:130
C:125:100:80
L:Troll | Easterling
H:Dragon | Demon | Human
N:177:Kabbug(Half-Orc)
-I:20000:250:140:3:4
+I:20000:170
C:125:100:60
L:Orc | Easterling
H:Dragon | Demon | Elf
@@ -1198,25 +1194,25 @@ H:Dragon | Demon | Elf
### The Master Archers ###
N:178:Palin(Dwarf)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:70
L:Human | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
N:179:Wilcome Cotton(Hobbit)
-I:20000:190:109:3:4
+I:20000:130
C:110:100:80
L:Human | Hobbit
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
N:180:Inzilbeth(Dunadan)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | High-Elf | Dunadan | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll
N:181:Gildor Inglorion(Dark-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:150:100:50
L:Dark-Elf | Elf | Easterling
H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Dwarf | Troll
@@ -1226,25 +1222,25 @@ H:Dragon | Demon | Orc | Half-Ogre | Petty-Dwarf | Dwarf | Troll
### The Miners / Builders ###
N:182:Gror(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Half-Elf | Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:183:Saradoc Oldbuck(Hobbit)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:Human | High-Elf | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:184:Gloredhel(Half-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:150:100:50
L:Human | Half-Elf | Dunadan | Elf | Easterling
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Troll
N:185:Erellont(Wood-Elf)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:High-Elf | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll | Easterling
@@ -1252,25 +1248,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll | Easterling
### The Hunters ###
N:186:Kili(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:110:100:80
L:Petty-Dwarf | Dwarf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Elf | Troll
N:187:Ruby Bolger(Hobbit)
-I:10000:200:110:4:8
+I:10000:140
C:150:100:50
L:Human | Half-Elf | High-Elf | Hobbit | Elf | Easterling
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll
N:188:Goldwine(Human)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | Half-Elf | RohanKnight | Dunadan | Elf | Easterling
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Troll
N:189:Erestor(High-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:70
L:Human | Half-Elf | High-Elf | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll | Easterling
@@ -1278,25 +1274,25 @@ H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll | East
### The Runecrafters ###
N:190:Nori(Dwarf)
-I:30000:170:107:1:1
+I:30000:120
C:150:100:50
L:Petty-Dwarf | Dwarf | Half-Elf | Dunadan
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Human | Troll | Eagle
N:191:Camellia Sackville(Hobbit)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Hobbit | Easterling
H:Dragon | Demon | Orc | Troll
N:192:Hador Lorindol(Dunadan)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | Half-Elf | High-Elf | RohanKnight | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Half-Ogre | Troll | Easterling
N:193:Galathil(Dark-Elf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | Dark-Elf | Elf
H:Dragon | Demon | Beorning | Orc | High-Elf | Half-Ogre | Petty-Dwarf | Troll
@@ -1304,25 +1300,25 @@ H:Dragon | Demon | Beorning | Orc | High-Elf | Half-Ogre | Petty-Dwarf | Troll
### The Musicians ###
N:194:Oin(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Human | Petty-Dwarf | Dwarf
H:Dragon | Demon | Orc | Elf | Half-Ogre | Troll | Easterling
N:195:Robin Smallburrow(Hobbit)
-I:10000:200:110:4:8
+I:10000:140
C:110:100:80
L:Human | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Troll | Easterling
N:196:Hareth(Half-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:150:100:50
L:Human | RohanKnight | Dunadan
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
N:197:Galdor(Wood-Elf)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Half-Elf | High-Elf | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll | Easterling
@@ -1330,25 +1326,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Petty-Dwarf | Dwarf | Troll | E
### The Precious Metalsmiths ###
N:198:Gabil(Dwarf)
-I:10000:150:120:4:8
+I:10000:130
C:115:100:70
L:Dwarf
H:Dragon | Demon | Orc
N:199:Isil(Human)
-I:25000:300:150:2:2
+I:25000:200
C:125:100:80
L:Human | Easterling
H:Dragon | Demon | Troll
N:200:Grima(Half-Orc)
-I:20000:250:140:3:4
+I:20000:170
C:150:100:50
L:Orc | Easterling
H:Dragon | Demon | Elf
N:201:Kosh(Half-Troll)
-I:30000:200:130:1:1
+I:30000:150
C:125:100:60
L:Troll | Easterling
H:Dragon | Demon | Human
@@ -1356,25 +1352,25 @@ H:Dragon | Demon | Human
### The Mapmakers ###
N:202:Pas(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:125:100:70
L:Half-Elf | Petty-Dwarf | Dwarf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll
N:203:Isumbras Took(Hobbit)
-I:30000:170:107:1:1
+I:30000:120
C:110:100:80
L:Human | High-Elf | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
N:204:Labadal(Half-Elf)
-I:10000:200:110:4:8
+I:10000:140
C:150:100:50
L:Human | Half-Elf | Dunadan | Elf | Easterling
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Troll
N:205:Guilin(Wood-Elf)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:High-Elf | Dunadan | Hobbit | Elf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll
@@ -1382,25 +1378,25 @@ H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll
### The Farmers ###
N:206:Rili(Dwarf)
-I:20000:190:109:3:4
+I:20000:130
C:110:100:80
L:Petty-Dwarf | Dwarf
H:Dragon | Demon | Orc | Dark-Elf | Half-Ogre | Elf | Troll
N:207:Wiseman Gamwich(Hobbit)
-I:10000:200:110:4:8
+I:10000:140
C:150:100:50
L:Human | Half-Elf | High-Elf | Hobbit | Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Dwarf | Troll
N:208:Lalaith(Human)
-I:25000:180:108:2:2
+I:25000:130
C:110:100:80
L:Human | Half-Elf | RohanKnight | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Troll | Easterling
N:209:Gwindor(High-Elf)
-I:30000:170:107:1:1
+I:30000:120
C:125:100:70
L:Human | Half-Elf | High-Elf | Dunadan | Elf
H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll
@@ -1408,12 +1404,7 @@ H:Dragon | Demon | Beorning | Orc | Dark-Elf | Half-Ogre | Dwarf | Troll
### The Old Mage in Minas Anor ###
N:210:Malbeth the Seer
-I:20000:170:110:4:4
+I:20000:130
C:110:100:80
L:Human | RohanKnight | Dunadan | High-Elf
H:Dragon | Demon | Beorning | Orc | Half-Ogre | Troll | Easterling
-
-### For the Merchants' Guild ###
-N:211:Worm(Human)
-I:30000:180:110:0:0
-C:110:100:90 \ No newline at end of file
diff --git a/lib/mods/theme/edit/p_info.txt b/lib/mods/theme/edit/p_info.txt
index 49832c32..89d335ab 100644
--- a/lib/mods/theme/edit/p_info.txt
+++ b/lib/mods/theme/edit/p_info.txt
@@ -8,8 +8,6 @@
# Do not modify this file unless you know exactly what you are doing,
# unless you wish to risk possible system crashes and broken savefiles.
-V:2.0.0
-
##############################################################################
##############################################################################
##############################################################################
@@ -2834,22 +2832,3 @@ M:C:Mage
M:C:Priest
M:C:Loremaster
M:C:Pacifist
-#M:C:Test
-#M:C:Chaos-Warrior
-
-#M:N:1:B:Spellcasters -- Magic is The One True Way
-
-#M:N:2:y:Priests -- Hail the powers of the Ainur
-#M:C:Mindcrafter
-
-#M:N:3:G:Beastfriends -- Monsters are fun
-#M:C:BeastMaster
-
-#M:N:4:v:Others -- The way to your independence
-#M:C:Harper
-#M:C:Merchant
-
-#M:N:5:o:Tests -- Test is you dare !
-#M:C:Test
-#M:C:Blade
-#M:C:Black-Knight
diff --git a/lib/mods/theme/edit/r_info.txt b/lib/mods/theme/edit/r_info.txt
index bcc46bd5..18bf6643 100644
--- a/lib/mods/theme/edit/r_info.txt
+++ b/lib/mods/theme/edit/r_info.txt
@@ -183,10 +183,6 @@
# Note that monster zero is used for the "player" picture.
-# Version stamp (required)
-
-V:2.2.0
-
##### The Player #####
N:0:Player
@@ -13696,7 +13692,7 @@ G:B:D
I:130:80d100:20:120:80
W:72:2:400000:45000
E:1:1:1:2:1:1
-O:50:50:0:0
+O:0:0:0:0
B:HIT:HURT:12d10
B:HIT:HURT:12d10
B:CHARGE:HURT:10d10
@@ -13704,7 +13700,7 @@ B:CHARGE:HURT:10d10
F:UNIQUE | MALE | CAN_SPEAK | RES_TELE | SPECIAL_GENE |
F:FORCE_MAXHP | REGENERATE | THUNDERLORD | CAN_FLY |
F:ONLY_ITEM | DROP_2D2 | DROP_3D2 | DROP_4D2 | DROP_GOOD | DROP_GREAT |
-F:SMART | OPEN_DOOR | BASH_DOOR | DROP_CHOSEN |
+F:SMART | OPEN_DOOR | BASH_DOOR |
F:EVIL | IM_FIRE | IM_COLD | IM_POIS |
F:MORTAL | HAS_LITE
S:1_IN_4 |
diff --git a/lib/mods/theme/edit/ra_info.txt b/lib/mods/theme/edit/ra_info.txt
index 705db243..2220a4f0 100644
--- a/lib/mods/theme/edit/ra_info.txt
+++ b/lib/mods/theme/edit/ra_info.txt
@@ -16,10 +16,6 @@
# C:max to dam:max to hit:max to AC:max to pval
# F:flags
-# Version stamp (required)
-
-V:2.0.0
-
# General info, number of powers
G:100:1d5:1
G:14:0d0:1
diff --git a/lib/mods/theme/edit/re_info.txt b/lib/mods/theme/edit/re_info.txt
index c0e36a92..c1fb01c8 100644
--- a/lib/mods/theme/edit/re_info.txt
+++ b/lib/mods/theme/edit/re_info.txt
@@ -6,8 +6,6 @@
# Do not modify this file unless you know exactly what you are doing,
# unless you wish to risk possible system crashes and broken savefiles.
-# Version stamp (required)
-
# Most values can be used with the +, -, % and = operators, = will set the
# monster value, + and - will modify it based on the normal monster
# % will apply that percentage to the monster value
@@ -28,8 +26,6 @@
# S:monster spells to add for the ego-type
# T:monster spells to remove, use MF_ALL for all
-V:2.0.0
-
# A few undeads, to be created by the ANIM_DEAD spell
N:1:Skeleton
diff --git a/lib/mods/theme/edit/s_info.txt b/lib/mods/theme/edit/s_info.txt
index 40c0d41e..46c5cd9b 100644
--- a/lib/mods/theme/edit/s_info.txt
+++ b/lib/mods/theme/edit/s_info.txt
@@ -22,10 +22,6 @@
# T:father:child
-# Version stamp (required)
-
-V:2.0.0
-
################################## MAGIC ##################################
N:56:Magic-Device
diff --git a/lib/mods/theme/edit/set_info.txt b/lib/mods/theme/edit/set_info.txt
index 4b745e4b..d36ce59c 100644
--- a/lib/mods/theme/edit/set_info.txt
+++ b/lib/mods/theme/edit/set_info.txt
@@ -7,15 +7,11 @@
# Do not modify this file unless you know exactly what you are doing,
# unless you wish to risk possible system crashes and broken savefiles.
-# Version stamp (required)
-
# N:idx:name
# D:description
# P:artifact index:number of item needed:pval
# F:flags
-V:2.0.0
-
# The Elven Gifts, took from Oangband
N:0:Elven Gifts
diff --git a/lib/mods/theme/edit/st_info.txt b/lib/mods/theme/edit/st_info.txt
index 29ca49fc..585dc657 100644
--- a/lib/mods/theme/edit/st_info.txt
+++ b/lib/mods/theme/edit/st_info.txt
@@ -1,13 +1,5 @@
# File: st_info.txt
-# Fixed Potions of Cure Light/Serious Wounds in the Temple, Potions of
-# Restore Str/Con in the Alchemist
-# Magic Shop - Amulet of Slow Digestion, Wand of Light, Staffs of Enlightenment,
-# Door/Stair Location, Detect Invis/Evil, and Remove Curse
-
-# This file is used to initialize the "lib/raw/st_info.raw" file, which is
-# used to initialize the "store info type" 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.
@@ -22,10 +14,6 @@
# proba is the chance(out of 100) of the item being generated
-# Version stamp (required)
-
-V:2.0.0
-
N:0:General Store
I:100:& Wooden Torch~
I:95:& Brass Lantern~
@@ -266,7 +254,7 @@ N:7:Home
A:0:0:54:55:3:62
O:0:0:0:0
G:8:y
-W:24
+W:240
N:8:Book Store
# & Book~ of Beginner Cantrips
@@ -793,12 +781,6 @@ F:RANDOM | MEDIUM_LEVEL | DEPEND_LEVEL
F:RARE
W:24
-N:56:Merchants Guild
-A:0:0:56:57:58:0
-O:211:211:211:211
-G:+:g
-W:0
-
N:57:The Museum
A:0:0:59:0:3:0
O:0:0:0:0
diff --git a/lib/mods/theme/edit/t_basic.txt b/lib/mods/theme/edit/t_basic.txt
deleted file mode 100644
index 8153f6fe..00000000
--- a/lib/mods/theme/edit/t_basic.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-D:######################################################################################################################################################################################################
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:# #
-D:###################################################################################################################################################################################################### \ No newline at end of file
diff --git a/lib/mods/theme/edit/t_gondol.txt b/lib/mods/theme/edit/t_gondol.txt
index 6b0a32cd..66807868 100644
--- a/lib/mods/theme/edit/t_gondol.txt
+++ b/lib/mods/theme/edit/t_gondol.txt
@@ -123,9 +123,6 @@ F:m:74:3:0:0:0:0:0:37
# Thunderlord's Hide
F:n:74:3:0:0:0:0:0:22
-# Merchant guild
-F:o:74:3:0:0:0:0:0:56
-
# Force elven monsters
f:ELVEN
@@ -178,7 +175,7 @@ D:######$$$$$$$$$$$$$$$$$### ...
D:######$$$$$$$$$$$$$$$$$$## ... OC##T.V#######V...........TTTT#######TTTT..................TT####CO---,--TTT##TTT----TTT##TTTTTT------,,,,,^^^^###
D:#####$$$$$$$$$$$$$$$$$$$## ######### ... ############# OCC#T.VV#####VV.............................................TTT#CCO---,---TT#TT--------TT##T-T-TT------,,,,^^^^###
D:#####$$$$$$$#####$$$$$$$## ######### ... ############# OOC#T..VV###VV.....TTTTTTTTTTT.......TTTTTTTTTTT..............T#COO---,,,,,,,,,,,,,,,,,,,e#TT-TTT------,,,,^^^^###
-D:####$$$$#############$$$$# ########o.........7############ OC#T...VVVVV....TTT#########TTT...TTT#########TTT............T#CO---------T#TT--------TT##TTT-------,,,,^^^^^^###
+D:####$$$$#############$$$$# #########.........7############ OC#T...VVVVV....TTT#########TTT...TTT#########TTT............T#CO---------T#TT--------TT##TTT-------,,,,^^^^^^###
D:####$###################$# ######### ... ############# OC#TT..........TT###VVVVVV####TT.TT####WWWWWW###TT..........TT#CO-------TTT##TTT----TTT##TTTTT-----,,,,^^^^^^^###
D:########################## ######### ... ############# OC##T..........T##VVV....VVV###TTT###WWW....WWW##T..........T##CO------TTTTT###TTTTTT###TTTTT-----,,,,,^^^^^^^###
D:########################### ... OCC#T..........T#VV........VV#######WW........WW#T..........T#CCO-----TTTT-TTT########TTTTTT------,,,,,,,^^^^^###
diff --git a/lib/mods/theme/edit/t_minas.txt b/lib/mods/theme/edit/t_minas.txt
index b96481d8..cea53634 100644
--- a/lib/mods/theme/edit/t_minas.txt
+++ b/lib/mods/theme/edit/t_minas.txt
@@ -15,7 +15,7 @@ F:w:8:3:0:0:0:0:0:24
# Quest 16 finished, reward is a between gate
?:[EQU $QUEST16 5]
-F:Z:176:3:0:0:0:0:0:0
+F:Z:176:3:0:0:0:0:0:2
?:1
diff --git a/lib/mods/theme/edit/tr_info.txt b/lib/mods/theme/edit/tr_info.txt
index d181487a..7f9e4df9 100644
--- a/lib/mods/theme/edit/tr_info.txt
+++ b/lib/mods/theme/edit/tr_info.txt
@@ -35,8 +35,6 @@
# I:diff:prob: :minlevel: :color
# D:description
-V:2.0.0
-
#
# stat traps
#
diff --git a/lib/mods/theme/edit/v_info.txt b/lib/mods/theme/edit/v_info.txt
index fb4a4d20..964f2b54 100644
--- a/lib/mods/theme/edit/v_info.txt
+++ b/lib/mods/theme/edit/v_info.txt
@@ -16,11 +16,6 @@
# Quest vaults added - rr9
-# Version stamp (required)
-
-V:2.0.0
-
-
### Simple Vaults (type 7) -- maximum size 44x22 ###
diff --git a/lib/mods/theme/edit/w_info.txt b/lib/mods/theme/edit/w_info.txt
index 18cf7a0f..6ca43cfd 100644
--- a/lib/mods/theme/edit/w_info.txt
+++ b/lib/mods/theme/edit/w_info.txt
@@ -14,7 +14,7 @@ W:D:XWWWWAAAAAW%AAAA========WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
W:D:XWWWWWWAAWAAAWW===========WWWWWWW...WWWWWWWWWW..........WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.EEEEEEEEEEEX
W:D:XWWWWWWWWWWWWWW==========..WWW....WWWWWWWW................WWWWGGGGWWWWWWWW......WWWWW.EEEEEEEEEEEEEEX
W:D:XTM.MMMMWWWW===...====...........HHHH..................GGGGGGGWWWDWWWW.........WWWW.EEEEEEEEEEEEEEEEX
-W:D:XT.2MMM=======.BB.=............HHHHHHHH..&&&&&...J..GGGGGGGGGGGGG.................tEEEEEtEEEEttEEEEEX
+W:D:XT.2MMM=======.BB.=............HHHHHHHH..&&&&&......GGGGGGGGGGGGG.................tEEEEEtEEEEttEEEEEX
?:[EQU $TOWN_DESTROY2 1]
W:M:0:1
W:D:XT.PMMM=======.BB.=............HHHHHHHH..&&&&&......GGGGGGGGGGGGG.................tEEEEEtEEEEttEEEEEX
diff --git a/lib/mods/theme/edit/wf_info.txt b/lib/mods/theme/edit/wf_info.txt
index acdba872..764462b7 100644
--- a/lib/mods/theme/edit/wf_info.txt
+++ b/lib/mods/theme/edit/wf_info.txt
@@ -55,10 +55,6 @@
# corresponding to that wilderness tile (like, lots of mountain, some
# trees, a bit of water...)
-# Version stamp (required)
-
-V:2.0.0
-
N:0:Ekkaia
D:the Encircling Sea
W:1:0:0:182:0:X
@@ -301,12 +297,6 @@ D:Anduin, the great river
W:35:0:0:227:3:~
X:187:227:187:84:84:227:84:84:222:227:84:84:227:84:84:227:88:94
-# Former location of Gondolin (to avoid silliness with Maeglin quest)
-N:48:Secret Valley
-D:the secret valley with directions to Gondolin
-W:0:0:12:89:1:J
-X:228:228:228:228:228:228:228:228:228:228:228:228:228:228:228:228:228:228
-
### New Towns ###
# Beorn's Halls
diff --git a/lib/mods/theme/file/elvish.txt b/lib/mods/theme/file/elvish.txt
deleted file mode 100644
index a00b5a22..00000000
--- a/lib/mods/theme/file/elvish.txt
+++ /dev/null
@@ -1,218 +0,0 @@
-216
-******** BUFFER LINE *********************************** DO NOT REMOVE *******
-adan
-ael
-in
-agl
-ar
-aina
-alda
-al
-qua
-am
-arth
-amon
-anca
-an
-dune
-anga
-anna
-ann
-on
-ar
-ien
-atar
-band
-bar
-ad
-bel
-eg
-brag
-ol
-breth
-il
-brith
-cal
-en
-gal
-en
-cam
-car
-ak
-cel
-eb
-cor
-on
-cu
-cui
-vie
-cul
-curu
-dae
-dag
-or
-del
-din
-dol
-dor
-draug
-du
-duin
-dur
-ear
-ech
-or
-edh
-el
-eith
-elen
-er
-ereg
-es
-gal
-fal
-as
-far
-oth
-faug
-fea
-fin
-for
-men
-fuin
-gaer
-gaur
-gil
-gir
-ith
-glin
-gol
-odh
-gond
-gor
-groth
-grod
-gul
-gurth
-gwaith
-gwath
-wath
-had
-hod
-haudh
-heru
-him
-hini
-hith
-hoth
-hyar
-men
-ia
-iant
-iath
-iaur
-ilm
-iluve
-kal
-gal
-kano
-kel
-kemen
-khel
-ek
-khil
-kir
-lad
-laure
-lhach
-lin
-lith
-lok
-lom
-lome
-londe
-los
-loth
-luin
-maeg
-mal
-man
-mel
-men
-menel
-mer
-eth
-min
-as
-mir
-mith
-mor
-moth
-nan
-nar
-naug
-dil
-dur
-nel
-dor
-nen
-nim
-orn
-orod
-os
-pal
-an
-pel
-quen
-quet
-ram
-ran
-rant
-ras
-rauko
-ril
-rim
-ring
-ris
-roch
-rom
-rond
-ros
-ruin
-ruth
-sarn
-ser
-eg
-sil
-sir
-sul
-tal
-dal
-tal
-ath
-tar
-tath
-ar
-taur
-tel
-thal
-thang
-thar
-thaur
-thin
-thol
-thon
-thor
-on
-til
-tin
-tir
-tol
-tum
-tur
-uial
-ur
-val
-wen
-wing
-yave
diff --git a/lib/mods/theme/help/ability.txt b/lib/mods/theme/help/ability.txt
index 175d6745..17d89dbc 100644
--- a/lib/mods/theme/help/ability.txt
+++ b/lib/mods/theme/help/ability.txt
@@ -27,11 +27,15 @@ playable, and maybe even powerful enough to win the game!
Here follows a list of all the available abilities:
-*****ability.txt*02[Spread blows] *****ability.txt*03[Tree walking]
-*****ability.txt*04[Perfect casting] *****ability.txt*05[Extra Max Blow(1)]
-*****ability.txt*06[Extra Max Blow(2)] *****ability.txt*07[Ammo creation]
-*****ability.txt*08[Touch of death] *****ability.txt*09[Artifact Creation]
-*****ability.txt*10[Far reaching attack] *****ability.txt*11[Trapping]
+*****ability.txt*02[Spread blows]
+*****ability.txt*03[Tree walking]
+*****ability.txt*04[Perfect casting]
+*****ability.txt*05[Extra Max Blow(1)]
+*****ability.txt*06[Extra Max Blow(2)]
+*****ability.txt*07[Ammo creation]
+*****ability.txt*08[Touch of death]
+*****ability.txt*10[Far reaching attack]
+*****ability.txt*11[Trapping]
*****ability.txt*12[Undead Form]
~~~~~02|Abilities|Spread blows
@@ -84,12 +88,6 @@ for that kill.
You must activate this from your 'm' menu.
#####UPrereq: Necromancy skill@50, Combat skill@40, DEX@30, STR@30
#####rCost: 15
-~~~~~09|Abilities|Artifact Creation
-[[[[[BArtifact Creation]
-In combination with a high alchemy skill this ability will let you
-design your very own artifacts.
-Prereq: Alchemy@40, INT@35, WIS@35
-#####rCost: 70
~~~~~10|Abilities|Far reaching attack
[[[[[BFar reaching attack]
You can attack an enemy one square far using a long polearm.
diff --git a/lib/mods/theme/help/advanced.hlp b/lib/mods/theme/help/advanced.hlp
index 3f6fe4bd..8595712b 100644
--- a/lib/mods/theme/help/advanced.hlp
+++ b/lib/mods/theme/help/advanced.hlp
@@ -7,9 +7,8 @@ Please choose one of the following help files:
*****/aoption.txt*0[(a) Options]
*****/bmacrofaq.txt*0[(b) Macros]
*****/cautomat.txt*0[(c) Automatizer help]
- (d) Lua scripting help - coming soon
- *****/edebug.txt*0[(e) Debug commands]
- *****/fversion.txt*0[(f) Version information] A history of ToME's roots
+ *****/ddebug.txt*0[(d) Debug commands]
+ *****/eversion.txt*0[(e) Version information] A history of ToME's roots
*****/zhelp.hlp*0[(z) Main Help menu]
diff --git a/lib/mods/theme/help/automat.txt b/lib/mods/theme/help/automat.txt
index bf6478f8..0ba56d19 100644
--- a/lib/mods/theme/help/automat.txt
+++ b/lib/mods/theme/help/automat.txt
@@ -25,10 +25,9 @@ things providing you are of a certain level.
#####GSounds quite cool, but wha...
STOP RIGHT THERE! I haven't finished yet! Let's look at some other examples.
Most of the time, scrolls of darkness are pretty useless. Unless you are a
-vampire, or an alchemist, right? So you might think it was no good to add
-auto-destroy of scrolls of darkness to the automatizer. But you'd be wrong, for
-you can add rules that are dependent on certain conditions, like that you are
-of a certain race, or class.
+vampire, right? So you might think it was no good to add auto-destroy of scrolls
+of darkness to the automatizer. But you'd be wrong, for you can add rules that
+are dependent on certain conditions, like that you are of a certain race, or class.
#####GHey this is sounding good. What if it destroys my artifacts?
It can't. Artifacts can never be destroyed, by the automatizer. However, watch
diff --git a/lib/mods/theme/help/c_alchem.txt b/lib/mods/theme/help/c_alchem.txt
deleted file mode 100644
index 2f7cd58c..00000000
--- a/lib/mods/theme/help/c_alchem.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-|||||oy
-~~~~~01|Alchemist
-~~~~~02|Classes|Alchemist
-#####R=== Alchemists ===
-
-#####GDescription
-Alchemists are the only class that can harness the abilities of the
-essences found in the dungeon. They can add these essences to staves,
-rings, wands, rods, and sometimes weapons and armour to create new items
-or recharge old ones. They can also extract essences from magical items
-they find. Using these abilities, Alchemists can get very good items at
-low levels. The trouble is getting them to survive later on.
-
-Alchemists are extremely proficient with all kinds of magical devices,
-and have made a fine art of extracting, storing, and using these
-objects' magical energies. Because they neither fight well nor cast
-powerful spells, Alchemists rely on their craftsmanship to cope with
-the dangers of the dungeons. They will quickly learn to create damage-
-dealing wands, rods, and staffs, forge powerful weapons and armour,
-make highly useful objects of other kinds, and eventually, at great cost
-to other knowledge, they can learn the perilous art of artifact creation
-itself.
-
-#####GStarting Stat Modifiers
-Strength -5
-Intelligence +3
-Wisdom +0
-Dexterity +1
-Constitution -2
-Charisma +1
-Hit Die +d0
-Spell Points +0%
-Exp Penalty 30%
-
-#####GStarting Skills:
-#####BSkill Start Level Skill Point Gains
-Combat 1.000 [0.700]
- Weaponmastery 0.700 [0.700]
-Sneakiness 1.000 [0.900]
- Stealth 0.000 [0.400]
-Magic 3.000 [0.900]
- Magic-Device 1.000 [1.250]
- Geomancy
- Fire 0.000 [0.100]
- Water 0.000 [0.100]
- Air 0.000 [0.100]
- Earth 0.000 [0.100]
- Meta 0.000 [0.500]
- Conveyance 0.000 [0.100]
- Divination 0.000 [0.500]
- Temporal 0.000 [0.100]
- Mind 0.000 [0.100]
- Nature 0.000 [0.100]
- Necromancy 0.000 [0.100]
- Runecraft 0.000 [0.700]
- Thaumaturgy 0.000 [0.100]
- Alchemy 1.000 [0.800]
-Spirituality 1.000 [0.800]
- Prayer 0.000 [0.500]
-Monster-lore 0.000 [0.500]
-
-*An Alchemist cannot learn the Geomancy skill, but it is shown in his skill
-screen because the elemental schools are sub-skills of it.
-
-#####GInnate Abilities:
-#####BAbility Character level
-Perfect casting 1
-
-#####GStarting Equipment
-An Alchemist begins the game with:
- a Dagger
- six Essences of Explosion
- an Empty Bottle
- a Set of Leather Gloves
-~~~~~03|Alchemist|Alchemy powers explained
-~~~~~05|Skills|Alchemy - Alchemy powers
-#####GAlchemy
-[[[[[BThe alchemical techniques are accessed using the 'm' key.]
-Alchemists may then 'E'xtract essences or add 'P'owers. The Alchemist [[[[[vmust]
-be wearing GLOVES to use their alchemy powers.
-
-An Alchemist is also capable of [[[[[Bcreating their own artifacts], but
-this is a time-consuming, and costly, activity. To do so, he must first
-learn the ability *****ability.txt*09[Artifact Creation], which costs a whopping 70 skill points
-to learn, and requires some high pre-requisites. Once he has done so,
-he needs to imbue an ego item with a number of essences of magic (equal
-to their skill level) and then wield the item. While using the item,
-it will gain experience (which reduces the amount of exp the wearer
-gains during this time). When the Alchemist feels that the item is
-powerful enough, he can finalise the artifact by "buying" powers using
-the experience the artifact has collected. He will also require exotic
-ingredients to add the abilities.
-
-Most (but not all) potions, scrolls, wands, staffs, rods, rings, and
-amulets contain usable magical energies. An Alchemist taps that
-energy, using the technique "'E'xtract essences" to create one or more
-essences of a type appropriate to the original object.
-
-The drained object itself is now called "of nothing". Unlike any
-other kind of object, it can have new magics added to it.
-
-An Alchemist can add power to such items by using essences he made or
-found. He does this with the technique "'P'ower". He can then select
-the object he wishes to enchant, and the kind of object he wishes to
-create. Only object types for which he knows the recipe will be displayed,
-and ones for which essences are lacking will be displayed in red. Objects
-whose level exceeds his own are sometimes difficult to create, though
-he can always add gold to improve the chances of his success.
-
-[[[[[BA few pointers:]
- -Recipes are (usually) logical. Acid essences don't make Dragon
- Weapons. And you can always look at the recipes you know with
- the "recipe 'B'ook" command.
- -Not all objects or ego-item types can be made using alchemy.
- -Alchemy is mostly reversible. Most items that you can
- 'E'xtract from, you can later re-create, if you learn about
- them when extracting from them. You won't always get enough
- essences from destroying an item to recreate it, though the
- chance of doing so will get higher as you increase in skill.
- -*Identifying* an object that you can destroy will always teach
- you how to create it (if creating it is possible).
- -Since you can't create abilities in artifacts that you aren't
- aware of, make sure to *identify* all the artifacts you can.
- -You can't *identify* things you buy in shops, so you'll have
- to extract from them and take your chances.
-
-[[[[[BSome Recipes:]
-Any Alchemist worth his salt knows lots of recipes. By extracting from
-items in the dungeon, he learns to create more and more items. You can
-see the recipes you know using the "recipe 'B'ook" command. The Alchemist
-starts off knowing some basic recipes, and gains more recipes as time
-goes on.
-
-More details can be found in the *****essences.txt*0[Essences SPOILER]).
-
diff --git a/lib/mods/theme/help/c_merch.txt b/lib/mods/theme/help/c_merch.txt
deleted file mode 100644
index 31fb60dd..00000000
--- a/lib/mods/theme/help/c_merch.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-#####R=== Merchants ===
-
-#####GDescription
-A Merchant is neither a warrior nor a spellcaster. They still have some great
-advantages, they can use chests to warp items into other items, they can
-indentify items, they soon learn to detect all objects in the area, and
-at higher level they can see all monsters carrying objects. They will also
-get the power to appraise items and to turn them into gold. A merchant will
-naturraly get better prices in shops and get access to the merchant guild
-services, loan and item request.
-
-#####GPrimary Stats
-Charisma
-Intelligence (Ability stat)
-
-#####GMagic Usage
-Merchants can use portable holes to carry more stuff than other classes but
-at the cost of an increased weight. To do that they must wear a portable hole
-and use it with 'm'.
-They also can use their merchants abilities and midas touch in the 'U' menu.
-
-#####GStarting Equipment
-A merchant begins the game with:
- A portable hole
- A small steel chest containing gold and items
- A long sword
- A wand of tame monsters
-
-
diff --git a/lib/mods/theme/help/command.txt b/lib/mods/theme/help/command.txt
index 6616c252..04a63fd8 100644
--- a/lib/mods/theme/help/command.txt
+++ b/lib/mods/theme/help/command.txt
@@ -137,7 +137,7 @@ that you can always, for example, use "\" + "." + "6", to specify "run east".
*****command.txt*74[< Go up staircase] *****command.txt*75[^X Save and quit]
*****command.txt*76[. Run] ^Y (unused)
*****command.txt*77[> Go down staircase] ^Z (special - borg command)
- *****command.txt*79[\ (special - bypass keymap)] *****command.txt*80[| Do cmovies]
+ *****command.txt*79[\ (special - bypass keymap)]
*****command.txt*81[` (special - escape)] *****command.txt*82[~ Display current knowledge]
*****command.txt*83[/ Identify symbol] *****command.txt*84[? Help]
*****command.txt*98[^\] Take an html screenshot]
@@ -198,13 +198,13 @@ that you can always, for example, use "\" + "." + "6", to specify "run east".
*****command.txt*74[< Go up staircase] *****command.txt*75[^X Save and quit]
*****command.txt*72[. Stay still (with pickup)] *****command.txt*95[^Y (tunnel - north west)]
*****command.txt*77[> Go down staircase] ^Z (special - borg command)
- *****command.txt*79[\ (special - bypass keymap)] *****command.txt*80[| Do cmovies]
+ *****command.txt*79[\ (special - bypass keymap)]
*****command.txt*81[` (special - escape)] *****command.txt*82[~ Display current knowledge]
*****command.txt*83[/ Identify symbol] *****command.txt*84[? Help]
~~~~~102|Commands|Special keys
#####R=== Special Keys ===
-
+
Certain special keys may be intercepted by the operating system or
the host machine, causing unexpected results. In general, these special keys
are control keys, and often, you can disable their special effects.
@@ -498,12 +498,7 @@ for a quantity will convert any "letters" into the maximal legal value.
each corresponding to a different location on the body, and each of
which may contain only a single object at a time, and each of which
may only contain objects of the proper "type".
- If the option "show_labels" is set, the slots are labelled as follows:
- Wielding (weapon), Shooting (missile launcher or instruments),
- On finger (ring), Around neck (amulet), Light source (light source),
- On body (armor), About body (cloak), On arm (shield), On head (helmet),
- On hands (gloves), On feet (boots), Carrying (symbiote), Quiver (ammo),
- Using (tool). You must be using an object to receive any of its special
+ You must be using an object to receive any of its special
powers.
~~~~~7
[[[[[GDrop an item (d)]
@@ -518,8 +513,7 @@ for a quantity will convert any "letters" into the maximal legal value.
[[[[[GDestroy an item (k) or Destroy an item (^D)]
This destroys an item in your inventory or on the dungeon floor.
If the selected pile contains multiple objects, you may specify
- a quantity. You must always verify this command, unless the item
- is cursed or worthless and the option "auto_destroy" is set.
+ a quantity. You must always verify this command.
~~~~~42
[[[[[GWear/Wield equipment (w)]
To wear or wield an object in your inventory, use this command.
@@ -789,9 +783,9 @@ for a quantity will convert any "letters" into the maximal legal value.
Use this command to read a scroll. Scroll spells usually have an
area effect, except for a few cases where they act on other objects.
Reading a scroll causes the parchment to disintegrate as the scroll
- takes effect, unless you are an Alchemist. Most scrolls which prompt
- for more information can be aborted (by pressing escape), which will
- stop reading the scroll before it disintegrates.
+ takes effect. Most scrolls which prompt for more information can
+ be aborted (by pressing escape), which will stop reading the scroll
+ before it disintegrates.
~~~~~58
[[[[[GInscribe an object ({)]
This command inscribes a string on an object. The inscription is
@@ -997,10 +991,8 @@ for a quantity will convert any "letters" into the maximal legal value.
~~~~~69
[[[[[GTake notes (:)]
This command allows you to take notes, which will then appear in your
- note file, if the birth-option "take_notes" was set (the default), or
- in your message list (prefixed with "Note:"), if the option was not set.
- The note file can be displayed through the "Display Current Knowledge"
- command (~ or |). This command takes no time.
+ note file. The note file can be displayed through the "Display Current
+ Knowledge" command (~ or |). This command takes no time.
~~~~~123|Commands|Game status
#####R--- Game Status Commands ---
~~~~~6
@@ -1054,9 +1046,8 @@ for a quantity will convert any "letters" into the maximal legal value.
Display known dungeon towns
Display notes
- If the option "take_notes" is set shows you your notes file, where all
- remarkable events are noted. You can add notes yourself by using the
- "Take notes" command (:).
+ Shows you your notes file, where all remarkable events are noted.
+ You can add notes yourself by using the "Take notes" command (:).
~~~~~70
[[[[[GTime of the day (^T)]
@@ -1218,17 +1209,6 @@ for a quantity will convert any "letters" into the maximal legal value.
command allows the player to force the game to finish the current song
and move on to another one (i.e. if you are tired of hearing the current
song, you can change it).
-~~~~~80
-[[[[[GDo cmovies (|)]
- The cmovie command (press | key in both normal or roguelike set) allows
- you to make a "movie" that you can send to people showing your movement
- through a part of the dungeon (like clearing that GCV . . .)
-
- 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.
~~~~~97
[[[[[GRecord macros ($)]
This is an easier way to create macros. Activate it, press the key
diff --git a/lib/mods/theme/help/debug.txt b/lib/mods/theme/help/debug.txt
index 56d57098..1fa0efd5 100644
--- a/lib/mods/theme/help/debug.txt
+++ b/lib/mods/theme/help/debug.txt
@@ -29,7 +29,7 @@ will not be scored if you use debug commands.
*****debug.txt*29[o Edit object attributes] O (unused)
*****debug.txt*31[p Phase door] *****debug.txt*32[P Panic save]
*****debug.txt*33[q Get a quest] Q (unused)
- *****debug.txt*35[r Gain reward] *****debug.txt*36[R Create a trap]
+ r (unused) *****debug.txt*36[R Create a trap]
*****debug.txt*37[s Summon monster] *****debug.txt*38[S Change the feature of the map]
*****debug.txt*39[t Teleport] *****debug.txt*40[T Teleport to a town]
*****debug.txt*41[u Complete map] *****debug.txt*42[U Become undead]
@@ -138,8 +138,7 @@ maximal legal value.
Change your life rating.
~~~~~16
[[[[[GHostile monster creation (H)]
- Summons a Pack of Creatures of the same kind. Will only work
- if MONSTER_HORDES has been defined at compile time.
+ Summons a Pack of Creatures of the same kind.
~~~~~17
[[[[[GIdentify (i)]
Like a Scroll of Identify.
diff --git a/lib/mods/theme/help/def.aux b/lib/mods/theme/help/def.aux
deleted file mode 100644
index 983e9683..00000000
--- a/lib/mods/theme/help/def.aux
+++ /dev/null
@@ -1,3 +0,0 @@
-file_ext="html"
-link_prefix=""
-link_suffix=""
diff --git a/lib/mods/theme/help/defines.txt b/lib/mods/theme/help/defines.txt
index ac997501..147e61a1 100644
--- a/lib/mods/theme/help/defines.txt
+++ b/lib/mods/theme/help/defines.txt
@@ -12,7 +12,6 @@ instance don't have svalues as they are defined in lua.
TV_SKELETON 1 /* Skeletons ('s') */
TV_BOTTLE 2 /* Empty bottles ('!') */
-*****defines.txt*04[TV_BATERIE] 4 /* For the Alchemists */
TV_SPIKE 5 /* Spikes ('~') */
TV_MSTAFF 6 /* Mage Staffs */
TV_CHEST 7 /* Chests ('~') */
@@ -66,7 +65,6 @@ TV_BOOK 111 /* spell books */
~~~~~12|Svals
/* The "sval" codes for TV_TOOL */
SV_TOOL_CLIMB 0
- SV_PORTABLE_HOLE 1
~~~~~16
/* The "sval" codes for TV_SHOT/TV_ARROW/TV_BOLT */
SV_AMMO_LIGHT 0 /* pebbles */
@@ -604,27 +602,6 @@ TV_BOOK 111 /* spell books */
SV_FOOD_ATHELAS 40
SV_FOOD_GREAT_HEALTH 41
SV_FOOD_FORTUNE_COOKIE 42
-~~~~~04
-/* The "sval" codes for TV_BATERIE */
- SV_BATERIE_POISON 1
- SV_BATERIE_EXPLOSION 2
- SV_BATERIE_TELEPORT 3
- SV_BATERIE_COLD 4
- SV_BATERIE_FIRE 5
- SV_BATERIE_ACID 6
- SV_BATERIE_LIFE 7
- SV_BATERIE_CONFUSION 8
- SV_BATERIE_LITE 9
- SV_BATERIE_CHAOS 10
- SV_BATERIE_TIME 11
- SV_BATERIE_MAGIC 12
- SV_BATERIE_XTRA_LIFE 13
- SV_BATERIE_DARKNESS 14
- SV_BATERIE_KNOWLEDGE 15
- SV_BATERIE_FORCE 16
- SV_BATERIE_LIGHTNING 17
- SV_BATERIE_MANA 18
- MAX_BATERIE_SVAL 18
~~~~~09
/* The "sval" codes for TV_CORPSE */
SV_CORPSE_CORPSE 1
diff --git a/lib/mods/theme/help/dungeon.txt b/lib/mods/theme/help/dungeon.txt
index 21c9651e..20426e2a 100644
--- a/lib/mods/theme/help/dungeon.txt
+++ b/lib/mods/theme/help/dungeon.txt
@@ -98,7 +98,7 @@ something you are more comfortable with.
~ Lites, Tools, Chests, etc ) A shield
~ Junk, Sticks, Skeletons, etc ` Trapping kit, climbing set
~ Stone, random artifact o Egg
- * An essence & (unused)
+ & (unused)
~~~~~05|Monsters
#####G Monsters
diff --git a/lib/mods/theme/help/essences.txt b/lib/mods/theme/help/essences.txt
deleted file mode 100644
index f329fa80..00000000
--- a/lib/mods/theme/help/essences.txt
+++ /dev/null
@@ -1,219 +0,0 @@
-|||||oy
-~~~~~01|Spoilers|Essences
-~~~~~02|Alchemist|Essence Spoiler
-#####REssence Spoiler for ToME 2.2.0
-#####R------------------------------
-
-Essences are the tools of the trade for Alchemists, and unfortunately are
-useless for any other class. Alchemists use essences to create magical
-items for them to use.
-
-They can be either found on the floor while exploring the dungeon, or
-extracted from other magical items the alchemist finds during his
-adventures.
-
-To create an artifact, the alchemist will first have to have learnt the
-Artifact Creation ability. This ability costs 70 skill points (yes, 70,
-it's a very powerful ability!). And you need an alchemy skill of at least
-40, plus INT and WIS at 35 (thats 18/170 in non-linear form).
-To create the artifact, the alchemist will have to sacrifice 10 hit points,
-and an amount of magic essence similar to his skill in alchemy. The
-alchemist then allows the artifact to gain experience, and when it has
-enough, uses that experience to add abilities to the artifact. The
-alchemist can allow the artifact to continue to gain experience, thus
-keeping open the option to add more abilities later. This requires a
-similar amount of magic essence, but does not require the sacrifice of
-more hit points.
-
-Note that the experience you gain is divided among the artifacts that you
-have as well as going to yourself, so you will gain levels more slowly when
-empowering artifacts. Also, the artifact only gets 60% of the experience.
-So killing a creature worth 20xp would gain 10 for you, and 6 for the
-artifact.
-
-You can also modify existing artifacts when you attain skill level 50. Also
-at skill level 50 you will gain the ability to make temporary artifacts,
-which don't require the complex empowerments that regular items require,
-but also vanish after awhile.
-
-You cannot give an artifact an ability unless you have *Identified* an
-artifact which has that ability.
-
-For every four levels gained in the alchemy skill, the alchemist learns
-about objects of level (skill level)/4, starting by learning about level 1
-objects at skill level 0. (actually 1, but who's counting?)
-
-At skill level 5 you gain the ability to make ego items - but watch it!
-Your base failure rate will be 90%, and won't be 0% until you reach skill
-level 50. Adding gold will increase the chances of success in direct
-proportion to the value of the item you are trying to create. Note that
-this results in automatic success when the item you are trying to create
-happens to pick up a curse in the process.
-
-At skill level 5 you also gain knowledge of some basic ego item recipes.
-These are: Acidic, Shocking, Fiery, Frozen, Venomous, and Chaotic weapons,
-Resist Fire armour, and light sources of Fearlessness.
-
-At skill level 10 you will gain knowledge of digging ego items, if you have
-selected the option "always generate very unusual rooms" (ironman_rooms).
-
-At skill level 15 you can create ego wands, staves, rings, etc.
-
-At skill level 25 you gain the ability to empower double ego items.
-
-At skill level 50 you gain the ability to create temporary artifacts, which
-don't require any exotic ingredients beyond a single corpse of any type.
-
-Between skill levels 25 and 50, you will steadily gain the ability to set
-more and more flags.
-
-To finalise an artifact, you "P"ower it, and select the powers you want.
-Powers are divided into the following six categories:
-*****essences.txt*03[Stats, Sustains, Luck, Speed, Vision, etc.]
-*****essences.txt*04[Misc. (Auras, Light, See Invisibility, etc.)]
-*****essences.txt*05[Weapon Brands]
-*****essences.txt*06[Resistances and Immunities]
-*****essences.txt*07[ESP and Curses]
-*****essences.txt*08[Artifact Activations]
-
-~~~~~03
-#####GStats, Sustains, Luck, Speed, Vision, etc.
-lvl xp Power
-40 5000 Add to Strength Ring of Strength
-43 5000 Add to Intelligence Ring of Intelligence
-46 5000 Add to Wisdom Amulet of Wisdom
-46 5000 Add to Dexterity Ring of Dexterity
-42 5000 Add to Constitution Ring of Constitution
-30 5000 Add to Charisma Amulet of Adornment
-32 1000 Sustain Strength Ring of Sustain Strength
-34 1000 Sustain Intelligence Ring of Sustain Intelligence
-28 1000 Sustain Wisdom Ring of Sustain Wisdom
-36 1000 Sustain Dexterity Ring of Sustain Dexterity
-36 1000 Sustain Constitution Ring of Sustain Constitution
-25 1000 Sustain Charisma Ring of Sustain Charisma
-40 50000 Speed Ring of Speed
-38 150000 Extra Attacks Ring of Extra Attacks
-32 5000 Stealthy Left Insole from a Used Soft Boot
-29 2000 Adds to Searching Filthy Rag
- 6 1000 Helps Infravision Brass Lantern
-30 1000 Lucky Rabbit's Left Forefoot
-25 30000 Aids in digging Pick
-40 50000 Multiplies Life Troll's Heart
-
-~~~~~04
-#####GMisc. (Auras, Light, See Invisibility, etc.)
-lvl xp Power
-20 15000 Invisibility Potion of Invisibility
-20 4000 See Invisible Potion of Invisibility
-20 30000 Free Action Iron Spike
-38 90000 Reflection Large Metal Shield
-20 30000 Aura of Fire Lungs from an Ancient Red Dragon
-25 30000 Aura of Lightning Lungs from an Ancient Blue Dragon
- 8 1000 Light Everburning Torch
-20 10000 Bright Light Dwarven Lantern
-40 100000 Sunlight Feanorian Lamp
-40 200000 Flight Suit of Dragon Armour (any colour)
-50 10000000 Automatically IDs Morgoth's Testicles
-29 2000 Anti-Teleportation Teleport Inhibiting Amulet
-34 2000 Anti-Magic Magic Inhibiting Amulet
-50 100000 Wraith Form Potion of Invulnerability
-15 1000 Levitation Potion of Berserk Strength
-20 10000 Slow Digestion Lembas Wafer
-32 20000 Regenerate Mushroom of Unhealth
-12 20000 Teleport Mushroom of Confusion
-
-~~~~~05
-#####GWeapon Brands
-lvl xp Power
-30 20000 Extra Critical Hits Whip
-30 30000 Wounds Monsters Blade of Chaos
-26 6000 Vampiric Rod Tip of Drain Life
-16 2000 Slay Animal Dead Animal's Body
-25 2000 Slay Evil Evil Dead Thing's Remains
-30 2000 Slay Undead Remains of Undead Monster
-40 1500 Slay Demon Demon's Corpse
-10 700 Slay Orc Dead Orc
-16 700 Slay Troll Dead Troll
-25 900 Slay Giant Dead Giant
-33 2000 Slay Dragon Dead Dragon (any size will do)
-41 5000 *Slay* Dragon Mature Multi-Hued Dragon's Remains
-41 90000 *Slay* Undead Dead Summoner of Greater Undead
-41 90000 *Slay* Demon Lesser Balrog's Corpse
-36 20000 Vorpal
-40 90000 Earthquakes
- 3 2000 Poison Brand
-12 2000 Acid Brand
-10 2000 Lightning Brand
- 6 2000 Fire Brand
- 8 2000 Frost Brand
-30 3000 Extra Might (Bows Only)
-35 3000 Extra Shots (Bows Only)
-
-~~~~~06
-#####GResistances and Immunities
-lvl xp Power
-49 500000 Immune to Acid Ancient Black Dragon's Foreskin
-50 500000 Immune to Lightning Ancient Blue Dragon's Foreskin
-49 500000 Immune to Fire Ancient Red Dragon's Foreskin
-50 500000 Immune to Cold Ancient White Dragon's Foreskin
-30 30000 Hold Life Amulet of the Magi
-12 10000 Resist Acid Ring of Acid
-15 10000 Resist Lightning Ring of Lightning
-13 10000 Resist Fire Potion of Resist Heat
-14 10000 Resist Cold Potion of Resist Cold
-25 30000 Resist Poison Potion of Cure Poison
-26 10000 Resist Fear Ring of Fear Resistance
-31 60000 Resist Light Ring of Light and Darkness Resistance
-31 60000 Resist Darkness Ring of Light and Darkness Resistance
-30 30000 Resist Blindness Ring of Blindness Resistance
-30 30000 Resist Confusion Ring of Confusion Resistance
-30 60000 Resist Sound Ring of Sound Resistance
-30 60000 Resist Shards Ring of Shard Resistance
-30 60000 Resist Nether Ring of Nether Resistance
-30 60000 Resist Nexus Ring of Nexus Resistance
-30 60000 Resist Chaos Ring of Chaos Resistance
-30 60000 Resist Disenchantment Ring of Disenchantment Resistance
-
-~~~~~07
-#####GESP and Curses
-lvl xp Power
-50 -100000 Temporary Item Corpse, any corpse
-10 -2000 Self-Cursing Filthy Rag
-45 -10000 Causes the Black Breath Sprig of Athelas
-40 -5000 Ancient Curse Scroll of *Remove Curse*
-40 -5000 Drains your Experience
-30 -5000 Aggravates Monsters
-30 -500 Curse Scroll of Remove Curse
-50 -5000 Permanently Cursed
-35 -2000 Can't be Dropped
-45 -5000 Drains your Hit Points
-20 -50000 Wielder Can't Move
-40 20000 Telepathy Formerly Floating Eye
-25 3000 Sense Orcs
-25 3000 Sense Trolls
-25 5000 Sense Dragons
-25 5000 Sense Giants
-25 5000 Sense Demons
-25 5000 Sense Undead
-25 5000 Sense Evil
-25 5000 Sense Animals
-25 5000 Sense Thunderlords
-25 5000 Sense Good
-25 5000 Sense Nonliving
-25 5000 Sense Unique Monsters
-25 2000 Sense Spiders
-
-~~~~~08
-#####GArtifact Activations
-lvl xp Power
-40 40000 Sunlight Brass Lantern
-20 4000 Magic Missile (1)
-30 300000 Magic Missile (2)
-40 400000 Ball of Missiles
-30 300000 Bolt of Lightning
-30 300000 Ball of Lightning
-35 350000 Ball of Lightning(2)
-40 400000 Ball of Lightning(3)
-40 400000 Ball of Lightning(4)
-45 450000 Breath Lightning
-50 40000 Fire a Rocket
diff --git a/lib/mods/theme/help/lua.hlp b/lib/mods/theme/help/lua.hlp
deleted file mode 100644
index ba61676a..00000000
--- a/lib/mods/theme/help/lua.hlp
+++ /dev/null
@@ -1,34 +0,0 @@
-|||||oy
-~~~~~01|Help|Lua scripting for ToME
-#####R Welcome to the ToME Lua Help System.
-#####R=============================================
-
-Please choose one of the following help files:
-
- *****/alua_intr.txt*0[(a) An Introduction to scripting]
- *****/blua_pow.txt*0[(b) Adding a racial power (the 'U' menu)]
- *****/clua_skil.txt*0[(c) Adding new skills (the 'm' menu)]
- *****/dlua_ques.txt*0[(d) Adding a quest]
-
-
- *****/elua_mon.txt*0[(e) Useful functions in monster.pkg]
- *****/flua_play.txt*0[(f) Useful functions in player.pkg]
- *****/glua_spel.txt*0[(g) Useful functions in spell.pkg]
- *****/hlua_util.txt*0[(h) Useful functions in util.pkg]
-
- *****/ilua_gf.txt*0[(g) A list of GF_FOO flags]
-
-
- *****/zhelp.hlp*0[(z) Main Help menu]
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/mods/theme/help/lua_gf.txt b/lib/mods/theme/help/lua_gf.txt
deleted file mode 100644
index 000f4af5..00000000
--- a/lib/mods/theme/help/lua_gf.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-|||||oy
-#####R /--------------------------\
-#####R< A partial list of GF_FLAGS >
-#####R \--------------------------/
-
-GF_ARROW: arrows
-GF_MISSILE: magic missiles
-GF_MANA: mana
-GF_LITE_WEAK: light
-GF_DARK_WEAK: dark
-GF_WATER: water
-GF_PLASMA: plasma
-GF_METEOR: meteors
-GF_ICE: ice
-GF_GRAVITY: gravity
-GF_INERTIA: inertia
-GF_FORCE: force
-GF_TIME: pure time
-GF_ACID: acid
-GF_ELEC: lightning
-GF_FIRE: flames
-GF_COLD: cold
-GF_POIS: poison
-GF_LITE: pure light
-GF_DARK: pure dark
-GF_CONFUSION: confusion
-GF_SOUND: sound
-GF_SHARDS: shards
-GF_NEXUS: nexus
-GF_NETHER: nether
-GF_CHAOS: chaos
-GF_DISENCHANT: disenchantment
-GF_KILL_WALL: wall destruction
-GF_KILL_DOOR: door destruction
-GF_KILL_TRAP: trap destruction
-GF_STONE_WALL: wall creation
-GF_MAKE_DOOR: door creation
-GF_MAKE_TRAP: trap creation
-GF_DESTRUCTION: destruction
-
-Back to the *****lua.hlp*0[lua help index] .
-
- [[[[[gThis file by fearoffours (fearoffours@moppy.co.uk)]
-
-
diff --git a/lib/mods/theme/help/lua_intr.txt b/lib/mods/theme/help/lua_intr.txt
deleted file mode 100644
index ccb87067..00000000
--- a/lib/mods/theme/help/lua_intr.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-|||||oy
-#####R /----------------------------------------\
-#####R < Scripting for ToME with lua >
-#####R \----------------------------------------/
-
-So, you want to patch ToME eh? Maybe you've had a look at how the edit files
-work, maybe even added your own race/class, but want to go further and add
-new racial (U) or magic (m) powers. Well these help files will show a little
-bit of how to do that.
-
-I am not a master at this kind of thing. I wrote a small script, with much
-help from DarkGod, and he subsequently asked me to write these help files. I
-was looking forward to when the lua help files came out so that I could look
-at them myself. Little did I know I'd be asked to write them. Therefore I
-apologise for any inaccuracies or errors that you find, and if you care to let
-me know of any improvements which could be made (especially if you're an
-experienced programmer/scripter), I'd love to know. Email me at
-[[[[[gfearoffours@moppy.co.uk].
-
-#####R=== The example scripts ===
-
-These help files take the form of a tutorial, adding a line at a time to a
-script, and explaining important concepts along the way. To see it all in
-action, I strongly suggest that you download my example script pack from
-[[[[[Ghttp://www.moppy.co.uk/angband.htm]. As well as including all the
-scripts covered in these help files, they also include the addition of my
-"hina" race which has a Lua scripted racial power which you might like to look
-at. There's also a quest which I will be including documentation for as a
-tutorial soon. Plus there's all the other lua scripts in the lib\scpt
-directory to look at. Most of what you see in these files has been learned from
-those files anyway!
-
-The source code is invaluable as well. There's a searchable and browsable
-version of the latest ToME source code available online at
-[[[[[Ghttp://www.t-o-m-e.net/cvs.php]. Use it!
-
-If you don't want to download and install the example scripts, then just
-follow the tutorials with a text editor open! But I'll say it again, it's a lot
-easier if you download and install the example scripts.
-
-This file goes on to explain the concepts of scripting, programming,
-variables and functions. If you're familiar with these concepts, you might
-as well take a look at how to add a power to the U menu in the
-*****lua_pow.txt*0[Scripting a racial power] file.
-
-
-#####R=== Defining some basic stuff ===
-
-Computers don't do anything that they're not told to do. When we script, or
-program, we must assume they know nothing. We have to tell them each little
-bit of information from the ground up.
-
-A program, or a script (we'll talk about exact differences later) is like a
-set of instructions. Let's imagine that people responded to programs, and
-that we had a program called "Housework". Its series of instructions might
-look something like this:
-
-#####BDo the Washing up.
-#####BClean the kitchen.
-#####BDust the shelves.
-#####BHoover the lounge.
-
-Each step above could be called a function, as they are all actions that
-need to be carried out. Now to you and me, we'd understand that program just
-fine, but if someone didn't know HOW to wash, or what hoovering was, they'd
-soon run into problems. For those people we'd need to define each function
-clearly. Thus "do the washing up" might be -
-
-#####BRun hot water into bowl.
-#####BAdd washing up liquid.
-#####BPut dirty plates into bowl
-#####BScrub plates till clean
-#####BPlace clean plates on rack to dry,
-
-There's still plenty of problems here though. We've not said to turn the tap
-off, or what the bowl is, or to wash any dirty cutlery, mugs, saucepans, etc.,
-etc. Whilst this might seem fairly obvious to a person, this is how we need
-to think when writing programs for computers.
-
-Lets look now at some of the terms we're going to be using, in the rest of
-these help files, and what they mean...
-
-#####R=== Variables and Constants ===
-A variable is a way to store information in a computer. Just as you store
-things in your own memory, you can store things in the computer's memory. And
-just as things change in your memory, so things can change in the computer's
-memory. This factor of change is why they're called "variables" and not
-"statics".
-
-For instance, you may have a friend's email address committed to memory, but
-things change over time, they get a new ISP or domain, and so their email
-address changes. You commit this new address to memory, and eventually
-forget the old one. The thing you have stored in your memory is the same
-(your friend's address) but the value (property) of what you have stored has
-changed (from friend@old-address.com to friend@new-address.com).
-
-Variables are the building blocks out of which you will create your patch.
-
-A variable which will *never* change its value is called a constant.
-
-#####R===Functions===
-
-A function is a series of steps or statements, grouped together and given
-one name. When you want to carry out those steps, you simply ask the
-computer to carry out that function. To go back to our original example,
-rather than saying, "I'd like you to run some hot water into a bowl, add the
-washing up liquid, put the dirty plates into it, and then scrub them till
-they're clean", we just say "do the washing up".
-
-This is where we come to the difference between scripting and programming.
-With scripting we can use the functions and variables that exist in the
-ToME code. Maintainers like DarkGod have already made sure that the
-computer knows how to "do the washing up", including turning the tap off and
-what the bowl is. All we need to do in our script is say "do the washing
-up". Or to look at it in a more relevant way, the game has been coded so
-that when a magic missile is fired, a bolt or beam spell with a black line
-of asterisks will be drawn in the direction indicated by the player, the
-mana of that spell will be used up, the monster will take the appropriate
-amount of damage, and so on. All we need to do in our script is say "fire a
-magic missile".
-
-As you script, you will still be designing your own functions, and
-variables, but the hardest parts have been done for you!
-
-Not every function and global variable in the source-code has been exported to
-use in your scripting. But the ones that have are easily identifiable by
-looking in any source files with the extension .pkg . Chris Hadgis has written
-some excellent documentation which outline the use of the most important
-functions in some of these files. They outline the functions from the
-
-OK, the first tutorial proper is on *****lua_pow.txt*0[adding a racial power] .
-
- [[[[[gThis file by fearoffours (fearoffours@moppy.co.uk)]
diff --git a/lib/mods/theme/help/lua_mon.txt b/lib/mods/theme/help/lua_mon.txt
deleted file mode 100644
index 9bb363c0..00000000
--- a/lib/mods/theme/help/lua_mon.txt
+++ /dev/null
@@ -1,535 +0,0 @@
-|||||oy
-
-#####R /----------------------------------------\
-#####R < monster.pkg functions helper file >
-#####R \----------------------------------------/
-
-
-----------------------------------------------------------------------
-
-#####R=== race_info_idx ===
-
-#####GDeclaration
- extern monster_race* race_info_idx(int r_idx, int ego);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Return a (monster_race*) with the combinations of the monster
- * properties and the ego type
- */
-
-#####GDescription
-Get monster info and ego info for monster with monster index "r_idx"
-and monster ego "ego". The ego information is applied to the monster
-information and the new monster information is returned.
-
-For example, race_info_idx(141,7) will create a brown yeek (monster)
-shaman (ego).
-
-#####GParameters
-> "r_idx" is an entry from the "r_info.txt" file. Beware: there is no
- range checking.
-> "ego" is an entry from the "re_info.txt". Beware: there is no range
- checking.
-
-----------------------------------------------------------------------
-
-#####R=== delete_monster_idx ===
-
-#####GDeclaration
- extern void delete_monster_idx(int i);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Delete a monster by index.
- *
- * When a monster is deleted, all of its objects are deleted.
- */
-
-#####GDescription
-Delete monster "i" from the monster array.
-
-#####GParameters
-> "i" is the index for the monster list (m_list[]). Beware: there is
- no range checking.
-
-----------------------------------------------------------------------
-
-#####R=== m_pop ===
-
-#####GDeclaration
- extern s16b m_pop(void);
-
-#####GFile
- monsters2.c
-
-#####GComment
-/*
- * Acquires and returns the index of a "free" monster.
- *
- * This routine should almost never fail, but it *can* happen.
- */
-
-#####GDescription
-Get an empty slot in the monster list (m_list[]). If there are no
-empty slots, a slot will be reclaimed from a "dead" monster. If all
-slots are full, 0 is returned, which means the function has failed
-("Too many monsters!").
-
-----------------------------------------------------------------------
-
-#####R=== get_mon_num_prep ===
-
-#####GDeclaration
- extern errr get_mon_num_prep(void);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Apply a "monster restriction function" to the "monster allocation table"
- */
-
-#####GDescription
-There are no parameters, but there are some other variables which will
-need to be set. They are get_mon_num_hook and get_mon_num2_hook. They
-are pointers to functions.
-
-For example, get_mon_num_hook = monster_volcano means when
-get_mon_num_hook is called (*get_mon_num_hook)(index), the actual
-function called is monster_volcano(index). This particular function
-returns TRUE if the monster indicated by "index" has the
-RF8_WILD_VOLCANO flag set.
-
-It is a good idea to store the old value of get_mon_num_hook before
-setting a new one, and restoring it when your function is finished.
-
-Following is a list of functions which can be assigned to
-get_mon_num_hook:
-
-create_molds_hook
-create_townpeople_hook
-mon_hook_bounty
-monster_dungeon
-monster_grass
-monster_mountain
-monster_ocean
-monster_quest
-monster_shore
-monster_town
-monster_volcano
-monster_waste
-monster_wood
-mutate_monster_okay
-place_monster_okay
-summon_specific_okay
-vault_aux_animal
-vault_aux_chapel
-vault_aux_clone
-vault_aux_demon
-vault_aux_dragon
-vault_aux_giant
-vault_aux_jelly
-vault_aux_kennel
-vault_aux_orc
-vault_aux_symbol
-vault_aux_treasure
-vault_aux_troll
-vault_aux_undead
-
-Or you can write your own. The function must take an integer (index)
-as a parameter and return boolean (TRUE if the monster is selected,
-or FALSE if it is not).
-
-----------------------------------------------------------------------
-
-#####R=== get_mon_num ===
-
-#####GDeclaration
- extern s16b get_mon_num(int level);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Choose a monster race that seems "appropriate" to the given level
- *
- * This function uses the "prob2" field of the "monster allocation table",
- * and various local information, to calculate the "prob3" field of the
- * same table, which is then used to choose an "appropriate" monster, in
- * a relatively efficient manner.
- *
- * Note that "town" monsters will *only* be created in the town, and
- * "normal" monsters will *never* be created in the town, unless the
- * "level" is "modified", for example, by polymorph or summoning.
- *
- * There is a small chance (1/50) of "boosting" the given depth by
- * a small amount (up to four levels), except in the town.
- *
- * It is (slightly) more likely to acquire a monster of the given level
- * than one of a lower level. This is done by choosing several monsters
- * appropriate to the given level and keeping the "hardest" one.
- *
- * Note that if no monsters are "appropriate", then this function will
- * fail, and return zero, but this should *almost* never happen.
- */
-
-Description:
-For the given level "level", return the index of an appropriate
-monster race.
-
-#####GParameters
-> "level" is a dungeon level
-
-----------------------------------------------------------------------
-
-#####R=== monster_desc ===
-
-#####GDeclaration
- extern void monster_desc(char *desc, monster_type *m_ptr,
- int mode);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Build a string describing a monster in some way.
- *
- * We can correctly describe monsters based on their visibility.
- * We can force all monsters to be treated as visible or invisible.
- * We can build nominatives, objectives, possessives, or reflexives.
- * We can selectively pronominalize hidden, visible, or all monsters.
- * We can use definite or indefinite descriptions for hidden monsters.
- * We can use definite or indefinite descriptions for visible monsters.
- *
- * Pronominalization involves the gender whenever possible and allowed,
- * so that by cleverly requesting pronominalization / visibility, you
- * can get messages like "You hit someone. She screams in agony!".
- *
- * Reflexives are acquired by requesting Objective plus Possessive.
- *
- * If no m_ptr arg is given (?), the monster is assumed to be hidden,
- * unless the "Assume Visible" mode is requested.
- *
- * If no r_ptr arg is given, it is extracted from m_ptr and r_info
- * If neither m_ptr nor r_ptr is given, the monster is assumed to
- * be neuter, singular, and hidden (unless "Assume Visible" is set),
- * in which case you may be in trouble... :-)
- *
- * I am assuming that no monster name is more than 70 characters long,
- * so that "char desc[80];" is sufficiently large for any result.
- *
- * Mode Flags:
- * 0x01 --> Objective (or Reflexive)
- * 0x02 --> Possessive (or Reflexive)
- * 0x04 --> Use indefinites for hidden monsters ("something")
- * 0x08 --> Use indefinites for visible monsters ("a kobold")
- * 0x10 --> Pronominalize hidden monsters
- * 0x20 --> Pronominalize visible monsters
- * 0x40 --> Assume the monster is hidden
- * 0x80 --> Assume the monster is visible
- *
- * Useful Modes:
- * 0x00 --> Full nominative name ("the kobold") or "it"
- * 0x04 --> Full nominative name ("the kobold") or "something"
- * 0x80 --> Genocide resistance name ("the kobold")
- * 0x88 --> Killing name ("a kobold")
- * 0x22 --> Possessive, genderized if visible ("his") or "its"
- * 0x23 --> Reflexive, genderized if visible ("himself") or "itself"
- */
-
-#####GDescription
-Return a monster description "desc" for monster "monster_type" using
-flag "mode". The modes are described above.
-
-#####GParameters
-> "desc" is the returned description.
-> "monster type" is the monster (monster pointer).
-> "mode" is one of the modes described in the comments.
-
-----------------------------------------------------------------------
-
-#####R=== monster_race_desc ===
-
-#####GDeclaration
- extern void monster_race_desc(char *desc, int r_idx,
- int ego);
-
-#####GFile
- monster2.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the monster description "desc" for monster with monster index
-"r_idx" and monster ego "ego". The monster description is made up of
-the ego name (if any) and monster name, or the unique name.
-
-#####GParameters
-> "desc" is the returned description.
-> "r_idx" is an entry from the "r_info.txt" file. Beware: there is no
- range checking.
-> "ego" is an entry from the "re_info.txt". Beware: there is no range
- checking.
-
-----------------------------------------------------------------------
-
-#####R=== place_monster_aux ===
-
-#####GDeclaration
- extern bool place_monster_aux(int y, int x, int r_idx,
- bool slp, bool grp, int status);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Attempt to place a monster of the given race at the given location
- *
- * Note that certain monsters are now marked as requiring "friends".
- * These monsters, if successfully placed, and if the "grp" parameter
- * is TRUE, will be surrounded by a "group" of identical monsters.
- *
- * Note that certain monsters are now marked as requiring an "escort",
- * which is a collection of monsters with similar "race" but lower
- * level.
- *
- * Some monsters induce a fake "group" flag on their escorts.
- *
- * Note the "bizarre" use of non-recursion to prevent annoying output
- * when running a code profiler.
- *
- * Note the use of the new "monster allocation table" code to restrict
- * the "get_mon_num()" function to "legal" escort types.
- */
-
-#####GDescription
-Attempt to place a monster at grid "y", "x". The monster has monster
-index "m_idx". The monster may be asleep ("slp"). The monster may be
-surrounded by a group of identical monsters ("grp"). The monster has
-a status of "status" (see below). The function returns TRUE if the
-monster is placed successfully, otherwise FALSE.
-
-#####GParameters
-> "y" is the y co-ordinate of the target grid.
-> "x" is the x co-ordinate of the target grid.
-> "r_idx" is an entry from the "r_info.txt" file. Beware: there is no
- range checking.
-> "slp" is TRUE if the monster is asleep, otherwise FALSE.
-> "grp" is TRUE if the monster is surrounded by a group, otherwise
- FALSE.
-> "status" is the status of the monster
- *****fields.txt*0[status]
-
-----------------------------------------------------------------------
-
-#####R=== place_monster ===
-
-#####GDeclaration
- extern bool place_monster(int y, int x, bool slp,
- bool grp);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Hack -- attempt to place a monster at the given location
- *
- * Attempt to find a monster appropriate to the "monster_level"
- */
-
-#####GDescription
-Attempt to place a monster at grid "y", "x". The monster may be asleep
-("slp"). The monster may be surrounded by a group of identical
-monsters ("grp"). The monster is of the appropriate monster level. The
-function returns TRUE if the monster is placed successfully, otherwise
-FALSE.
-
-#####GParameters
-> "y" is the y co-ordinate of the target grid.
-> "x" is the x co-ordinate of the target grid.
-> "slp" is TRUE if the monster is asleep, otherwise FALSE.
-> "grp" is TRUE if the monster is surrounded by a group, otherwise
- FALSE.
-
-----------------------------------------------------------------------
-
-#####R=== place_monster_one ===
-
-#####GDeclaration
- extern s16b place_monster_one(int y, int x, int r_idx,
- int ego, bool slp, int status);
-
-#####GFile
- monster2.c
-
-#####GComment
-/*
- * Attempt to place a monster of the given race at the given location.
- *
- * To give the player a sporting chance, any monster that appears in
- * line-of-sight and is extremely dangerous can be marked as
- * "FORCE_SLEEP", which will cause them to be placed with low energy,
- * which often (but not always) lets the player move before they do.
- *
- * This routine refuses to place out-of-depth "FORCE_DEPTH" monsters.
- *
- * XXX XXX XXX Use special "here" and "dead" flags for unique monsters,
- * remove old "cur_num" and "max_num" fields.
- *
- * XXX XXX XXX Actually, do something similar for artifacts, to simplify
- * the "preserve" mode, and to make the "what artifacts" flag more useful.
- *
- * This is the only function which may place a monster in the dungeon,
- * except for the savefile loading code.
- */
-
-#####GDescription
-Attempt to place a monster at grid "y", "x". The monster has monster
-index "m_idx". The monster may be asleep ("slp"). The monster may have
-an ego type ("ego"). The monster has a status of "status" (see below).
-The function returns TRUE if the monster is placed successfully,
-otherwise FALSE.
-
-#####GParameters
-> "y" is the y co-ordinate of the target grid.
-> "x" is the x co-ordinate of the target grid.
-> "r_idx" is an entry from the "r_info.txt" file. Beware: there is no
- range checking.
-> "slp" is TRUE if the monster is asleep, otherwise FALSE.
-> "ego" is an entry from the "re_info.txt". Beware: there is no range
- checking.
-> "status" is the status of the monster
- *****fields.txt*0[status]
-
-----------------------------------------------------------------------
-
-#####R=== is_friend ===
-
-#####GDeclaration
- extern int is_friend(monster_type *m_ptr);
-
-#####GFile
- monster3.c
-
-#####GComment
-/*
- * Is the monster in friendly state(pet, friend, ..)
- * -1 = enemy, 0 = neutral, 1 = friend
- */
-
-#####GDescription
-Return a value to indicate the status of monster "m_ptr".
- *****fields.txt*0[status]
-
-#####GParameters
-> "m_ptr" is a pointer to a monster.
-
-----------------------------------------------------------------------
-
-#####R=== is_enemy ===
-
-#####GDeclaration
- extern bool is_enemy(monster_type *m_ptr,
- monster_type *t_ptr);
-
-#####GFile
- monster3.c
-
-#####GComment
-/* Should they attack each others */
-
-#####GDescription
-Return TRUE if monster "m_ptr" should attack monster "t_ptr". If
-"m_ptr" is stupid and "r_ptr" is a different type of monster then the
-function will return TRUE. If "m_ptr" is not neutral and "r_ptr" is a
-breeder, and "r_ptr" is a different type of monster then the function
-will return TRUE (and vice versa). If both monsters are not neutral
-and one is friendly and the other isn't then the function will return
-TRUE. Otherwise the function returns FALSE.
-
-#####GParameters
-> "m_ptr" is a pointer to a monster.
-> "t_ptr" is a pointer to a monster (target).
-
-----------------------------------------------------------------------
-
-#####R=== change_side ===
-
-#####GDeclaration
- extern bool change_side(monster_type *m_ptr);
-
-#####GFile
- monster3.c
-
-#####GComment
-(none)
-
-#####GDescription
-Change the status of monster "m_ptr" from friendly to unfriendly and
-vice versa. Friends and pets become enemies. Neutral Ms become
-neutral Ps and vice versa. Companions are unaffected. The
-function returns TRUE if the status changed, otherwise FALSE.
-
-#####GParameters
-> "m_ptr" is a pointer to a monster.
-
-----------------------------------------------------------------------
-
-#####R=== find_position ===
-
-#####GDeclaration
- extern void find_position(int y, int x, int *yy = 0,
- int *xx = 0);
-
-#####GFile
- lua_bind.c
-
-#####GComment
-(none)
-
-#####GDescription
-Find a new grid "yy", "xx" within 6 grids of target grid "y", "x".
-The new grid must be within line-of-sight of the target grid. A
-maximum of 5000 attempts is made.
-
-#####GParameters
-> "y" is the y co-ordinate of the target grid.
-> "x" is the x co-ordinate of the target grid.
-> "yy" is the y co-ordinate of the new grid.
-> "xx" is the x co-ordinate of the new grid.
-
-----------------------------------------------------------------------
-
-#####R=== can_create_companion ===
-
-#####GDeclaration
- extern bool can_create_companion();
-
-#####GFile
- monster3.c
-
-#####GComment
-/* Returns if a new companion is allowed */
-
-#####GDescription
-Return TRUE if a companion can be created, otherwise FALSE.
-
-----------------------------------------------------------------------
-
-Back to the *****lua.hlp*0[lua help index] .
-
-
- [[[[[gThis file by Chris Hadgis]
diff --git a/lib/mods/theme/help/lua_play.txt b/lib/mods/theme/help/lua_play.txt
deleted file mode 100644
index 6ab64ddb..00000000
--- a/lib/mods/theme/help/lua_play.txt
+++ /dev/null
@@ -1,1225 +0,0 @@
-|||||oy
-
-#####R /----------------------------------------\
-#####R < player.pkg functions helper file >
-#####R \----------------------------------------/
-
-----------------------------------------------------------------------
-
-#####RFunction: set_parasite
-
-#####GDeclaration: bool set_parasite(int v, int r);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->parasite" and "p_ptr->parasite_r_idx"
-* notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until parasite with monster index "r" is created. The
-player gets the message "You feel something growing in you" if "v"
-is > 0. Otherwise the player gets the message "Your body convulse
-and spawn <monster name>" if the monster is created (80% chance) or
-"The hideous thing growing in you seems to die" if the monster dies.
-
-#####GParameters:
->v is the time until the parasite gestates (must be between 0 and
- 10000).
->r is the monster index of parasite to be created.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_disrupt_shield
-
-#####GDeclaration: bool set_disrupt_shield(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->disrupt_shield"
-* notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until shield of invulnerability expires. The player gets
-the message "You feel invulnerable" if "v" is > 0. Otherwise the
-player gets the message "You are more vulnerable".
-
-#####GParameters:
->v is the time until the shield expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_prob_travel
-
-#####GDeclaration: bool set_prob_travel(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->prob_travel"
-* notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until random teleportation expires. The player gets
-the message "You feel instable" if "v" is > 0. Otherwise the
-player gets the message "You are more stable".
-
-#####GParameters:
->v is the time until random teleportation expires (must be between 0
- and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_tim_deadly
-
-#####GDeclaration: bool set_tim_deadly(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_deadly"
-*/
-
-#####GDescription:
-Set time "v" until deadly accuracy expires. The player gets the
-message "You feel extremely accurate" if "v" is > 0. Otherwise the
-player gets the message "You are suddenly much less accurate".
-
-#####GParameters:
->v is the time until deadly accuracy expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_tim_res_time
-
-#####GDeclaration: bool set_tim_res_time(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_res_time"
-*/
-
-#####GDescription:
-Set time "v" until space-time distortions expire. The player gets the
-message "You are now protected against the space-time distortions" if
-"v" is > 0. Otherwise the player gets the message "You are no longer
-protected against the space-time distortions".
-
-#####GParameters:
->v is the time until space-time distortions expire (must be between
- 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_tim_reflect
-
-#####GDeclaration: bool set_tim_reflect(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_reflect"
-*/
-
-#####GDescription:
-Set time "v" until reflection expire. The player gets the message
-"You start reflecting the world around you" if "v" is > 0. Otherwise
-the player gets the message "You stop reflecting".
-
-#####GParameters:
->v is the time until reflection expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_meditation
-
-#####GDeclaration: bool set_meditation(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->meditation"
-*/
-
-#####GDescription:
-Set time "v" until meditation expire. The player gets the message
-"You start meditating on yourself" if "v" is > 0. Otherwise the
-player gets the message "You stop your self meditation".
-
-#####GParameters:
->v is the time until meditation expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_strike
-
-#####GDeclaration: bool set_strike(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->strike"
-*/
-
-#####GDescription:
-Set time "v" until accurate strikes expire. The player gets the
-message "You feel very accurate" if "v" is > 0. Otherwise the player
-gets the message "You are no longer very accurate".
-
-#####GParameters:
->v is the time until accurate strikes expire (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_walk_water
-
-#####GDeclaration: bool set_walk_water(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->walk_water", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until walking on water expires. The player gets the
-message "You feel strangely insubmersible" if "v" is > 0. Otherwise
-the player gets the message "You are no longer insubmersible".
-
-#####GParameters:
->v is the time until walking on water expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_tim_ffall
-
-#####GDeclaration: bool set_tim_ffall(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_ffall"
-*/
-
-#####GDescription:
-Set time "v" until feather-fall expires. The player gets the message
-"You feel very light" if "v" is > 0. Otherwise the player gets the
-message "You are suddenly heavier".
-
-#####GParameters:
->v is the time until feather-fall expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_tim_fire_aura
-
-#####GDeclaration: bool set_tim_fire_aura(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_fire_aura"
-*/
-
-#####GDescription:
-Set time "v" until fiery aura expires. The player gets the message
-"You are enveloped in flames" if "v" is > 0. Otherwise the player
-gets the message "You are no longer enveloped in flames".
-
-#####GParameters:
->v is the time until fiery aura expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_holy
-
-#####GDeclaration: bool set_holy(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->holy", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until holiness expires. The player gets the message
-"You feel a holy aura around you" if "v" is > 0. Otherwise the
-player gets the message "The holy aura vanishes".
-
-#####GParameters:
->v is the time until holiness expires (must be between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_grace
-
-#####GDeclaration: void set_grace(s32b v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->grace", notice observable changes
-*/
-
-#####GDescription:
-Set grace to value "v". Don't allow grace to fall below -30000 or
-rise above 30000.
-
-#####GParameters:
->v is the value of grace.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_mimic
-
-#####GDeclaration: bool set_mimic(int v, int p);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_mimic", and "p_ptr->mimic_form",
-* notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until morph into monster with monster index "p" expires.
-The player gets the message "You feel your body change" if "v" is > 0.
-Otherwise the player gets the message "You are no longer transformed".
-
-#####GParameters:
->v is the time until transformation expires (must be between 0 and
- 10000).
->p is the monster index of the monster the player wants to mimic.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_no_breeders
-
-#####GDeclaration: bool set_no_breeders(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "no_breeds"
-*/
-
-#####GDescription:
-Set time "v" until breeders can breed again. The player gets the
-message "You feel an anti-sexual aura" if "v" is > 0. Otherwise the
-player gets the message "You no longer feel an anti-sexual aura".
-Okay...
-
-#####GParameters:
->v is the time until breeders can breed again (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_invis
-
-#####GDeclaration: bool set_invis(int v,int p);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_invis", and "p_ptr->tim_inv_pow",
-* notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until invisibility expires. The player gets the message
-"You feel your body fade away" if "v" is > 0. Otherwise the player
-gets the message "You are no longer invisible".
-
-#####GParameters:
->v is the time until invisibility expires (must be between 0 and
- 10000).
->p is the power of timed invisibility.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_lite
-
-#####GDeclaration: bool set_lite(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_lite", notice observable changes
-*
-* Note the use of "PU_VIEW", which is needed to
-* memorise any terrain features which suddenly become "visible".
-* Note that blindness is currently the only thing which can affect
-* "player_can_see_bold()".
-*/
-
-#####GDescription:
-Set time "v" until brightness expires. The player gets the message
-"You suddenly seem brighter" if "v" is > 0. Otherwise the player
-gets the message "You are no longer bright".
-
-#####GParameters:
->v is the time until brightness expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_blind
-
-#####GDeclaration: bool set_blind(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->blind", notice observable changes
-*
-* Note the use of "PU_UN_VIEW", which is needed to memorise any terrain
-* features which suddenly become "visible".
-* Note that blindness is currently the only thing which can affect
-* "player_can_see_bold()".
-*/
-
-#####GDescription:
-Set time "v" until blindness expires. The player gets the message "You
-are blind" if "v" is > 0. Otherwise the player gets the message "You
-can see again".
-
-#####GParameters:
->v is the time until blindness expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_confused
-
-#####GDeclaration: bool set_confused(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->confused", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until confusion expires. The player gets the message "You
-are confused" if "v" is > 0. Otherwise the player gets the message
-"You feel less confused now".
-
-#####GParameters:
->v is the time until confusion expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_poisoned
-
-#####GDeclaration: bool set_poisoned(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->poisoned", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until poison expires. The player gets the message "You
-are poisoned" if "v" is > 0. Otherwise the player gets the message
-"You are no longer poisoned".
-
-#####GParameters:
->v is the time until poison expires (must be between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_afraid
-
-#####GDeclaration: bool set_afraid(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->afraid", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until fear expires. The player gets the message "You are
-terrified" if "v" is > 0. Otherwise the player gets the message "You
-feel bolder now".
-
-#####GParameters:
->v is the time until fear expires (must be between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_paralyzed
-
-#####GDeclaration: bool set_paralyzed(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->paralyzed", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until paralysis expires. The player gets the message "You
-are paralyzed" if "v" is > 0. Otherwise the player gets the message
-"You can move again".
-
-#####GParameters:
->v is the time until paralysis expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_image
-
-#####GDeclaration: bool set_image(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->image", notice observable changes
-*
-* Note that we must redraw the map when hallucination changes.
-*/
-
-#####GDescription:
-Set time "v" until hallucination expires. The player gets the message
-"Oh, wow! Everything looks so cosmic now" if "v" is > 0. Otherwise
-the player gets the message "You can see clearly again".
-
-#####GParameters:
->v is the time until hallucination expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_fast
-
-#####GDeclaration: bool set_fast(int v, int p);
-
-#####GFile: xtra2.c
-
-#####GComment:
-(none)
-
-#####GDescription:
-Set time "v" until speed of speed factor "p" expires. The player gets
-the message "You feel yourself moving faster" if "v" is > 0. Otherwise
-the player gets the message "You feel yourself slow down".
-
-#####GParameters:
->v is the time until speed expires (must be between 0 and 10000).
->p is the speed factor.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_light_speed
-
-#####GDeclaration: bool set_light_speed(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->lightspeed", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until light-speed expires. The player gets the message
-"You feel as if time has stopped" if "v" is > 0. Otherwise the player
-gets the message "You feel time returning to its normal rate".
-
-#####GParameters:
->v is the time until light-speed expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_slow
-
-#####GDeclaration: bool set_slow(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->slow", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until slowness expires. The player gets the message "You
-feel yourself moving slower" if "v" is > 0. Otherwise the player gets
-the message "You feel yourself speed up".
-
-#####GParameters:
->v is the time until slowness expires (must be between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_shield
-
-#####GDeclaration: bool set_shield(int v, int p, s16b o, s16b d1, s16b d2);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->shield", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until stone-shield expires. The player gets the message
-"Your skin turns to stone" if "v" is > 0. Otherwise the player gets
-the message "Your skin returns to normal". Stone-shield has spell
-power "p", spell option "o", and power options "d1" and "d2".
-
-#####GParameters:
->v is the time until stone-shield expires (must be between 0 and
- 10000).
->p is the power of the stone-shield spell.
->o is the option of the stone-shield spell.
->d1 is the power for option 1 of the stone-shield spell.
->d2 is the power for option 2 of the stone-shield spell.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_blessed
-
-#####GDeclaration: bool set_blessed(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->blessed", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until blessing expires. The player gets the message "You
-feel righteous" if "v" is > 0. Otherwise the player gets the message
-"The prayer has expired".
-
-#####GParameters:
->v is the time until blessing expires (must be between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_hero
-
-#####GDeclaration: bool set_hero(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->hero", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until heroism expires. The player gets the message "You
-feel like a hero" if "v" is > 0. Otherwise the player gets the
-message "The heroism wears off".
-
-#####GParameters:
->v is the time until heroism expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_shero
-
-#####GDeclaration: bool set_shero(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->shero", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until berserk expires. The player gets the message "You
-feel like a killing machine" if "v" is > 0. Otherwise the player gets
-the message "You feel less Berserk".
-
-#####GParameters:
->v is the time until berserk expires (must be between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_protevil
-
-#####GDeclaration: bool set_protevil(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->protevil", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until protection from evil expires. The player gets the
-message "You feel safe from evil" if "v" is > 0. Otherwise the player
-gets the message "You no longer feel safe from evil".
-
-#####GParameters:
->v is the time until protection from evil expires (must be between 0
- and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_protgood
-
-#####GDeclaration: bool set_protgood(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->protgood", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until protection from good expires. The player gets the
-message "You feel safe from good" if "v" is > 0. Otherwise the player
-gets the message "You no longer feel safe from good".
-
-#####GParameters:
->v is the time until protection from evil expires (must be between 0
- and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_protundead
-
-#####GDeclaration: bool set_protundead(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->protundead", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until protection from undead expires. The player gets the
-message "You feel safe from undead" if "v" is > 0. Otherwise the
-player gets the message "You no longer feel safe from undead".
-
-#####GParameters:
->v is the time until protection from undead expires (must be between
- 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_invuln
-
-#####GDeclaration: bool set_invuln(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->invuln", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until invulnerability expires. The player gets the
-message "Invulnerability" if "v" is > 0. Otherwise the player gets
-the message "The invulnerability wears off".
-
-#####GParameters:
->v is the time until invulnerability expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_tim_invis
-
-#####GDeclaration: bool set_tim_invis(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_invis", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until see invisible expires. The player gets the message
-"Your eyes feel very sensitive" if "v" is > 0. Otherwise the player
-gets the message "Your eyes feel less sensitive".
-
-#####GParameters:
->v is the time until see invisible expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_tim_infra
-
-#####GDeclaration: bool set_tim_infra(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_infra", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until infravision expires. The player gets the message
-"Your eyes begin to tingle" if "v" is > 0. Otherwise the player gets
-the message "Your eyes stop tingling".
-
-#####GParameters:
->v is the time until infravision expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_mental_barrier
-
-#####GDeclaration: bool set_mental_barrier(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->tim_mental_barrier", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until mental barrier expires. The player gets the message
-"Your mind grows stronger" if "v" is > 0. Otherwise the player gets
-the message "Your mind is no longer especially strong".
-
-#####GParameters:
->v is the time until mental barrier expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_acid
-
-#####GDeclaration: bool set_oppose_acid(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-
-#####GDescription:
-Set time "v" until feather-fall expires. The player gets the message
-"You feel very light" if "v" is > 0. Otherwise the player gets the
-message "You are suddenly heavier".
-
-#####GParameters:
->v is the time until feather-fall expires (must be between 0 and
- 10000).
->v is the time until feather-fall expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_elec
-
-#####GDeclaration: bool set_oppose_elec(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->oppose_elec", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until electricity resistance expires. The player gets
-the message "You feel resistant to electricity" if "v" is > 0.
-Otherwise the player gets the message "You feel less resistant to
-electricity".
-
-#####GParameters:
->v is the time until electricity resistance expires (must be between
- 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_fire
-
-#####GDeclaration: bool set_oppose_fire(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->oppose_fire", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until fire resistance expires. The player gets the
-message "You feel resistant to fire" if "v" is > 0. Otherwise the
-player gets the message "You feel less resistant to fire".
-
-#####GParameters:
->v is the time until fire resistance expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_cold
-
-#####GDeclaration: bool set_oppose_cold(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->oppose_cold", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until cold resistance expires. The player gets the
-message "You feel resistant to cold" if "v" is > 0. Otherwise the
-player gets the message "You feel less resistant to cold".
-
-#####GParameters:
->v is the time until cold resistance expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_pois
-
-#####GDeclaration: bool set_oppose_pois(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->oppose_pois", notice observable changes
-*/
-
-#####GDescription:
-Set time "v" until poison resistance expires. The player gets the
-message "You feel resistant to poison" if "v" is > 0. Otherwise the
-player gets the message "You feel less resistant to poison".
-
-#####GParameters:
->v is the time until poison resistance expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_ld
-
-#####GDeclaration: bool set_oppose_ld(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->oppose_ld"
-*/
-
-#####GDescription:
-Set time "v" until light and dark resistance expires. The player gets
-the message "You feel protected against the light's fluctuation" if
-"v" is > 0. Otherwise the player gets the message "You are no longer
-protected against the light's fluctuation".
-
-#####GParameters:
->v is the time until light and dark resistance expires (must be
- between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_cc
-
-#####GDeclaration: bool set_oppose_cc(int v);
-
-#####GFile: xtra2.c
-/*
-* Set "p_ptr->oppose_cc"
-*/
-
-#####GComment:
-
-#####GDescription:
-Set time "v" until chaos resistance expires. The player gets the
-message "You feel protected against raw chaos" if "v" is > 0.
-Otherwise the player gets the message "You are no longer protected
-against chaos".
-
-#####GParameters:
->v is the time until chaos resistance expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_ss
-
-#####GDeclaration: bool set_oppose_ss(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->oppose_ss"
-*/
-
-#####GDescription:
-Set time "v" until sound and shard resistance expires. The player gets
-the message "You feel protected against the ravages of sound and
-shards" if "v" is > 0. Otherwise the player gets the message "You are
-no longer protected against the ravages of sound and shards".
-
-#####GParameters:
->v is the time until sound and shard resistance expires (must be
- between 0 and 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_oppose_nex
-
-#####GDeclaration: bool set_oppose_nex(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->oppose_nex"
-*/
-
-#####GDescription:
-Set time "v" until nexus resistance expires. The player gets the
-message "You feel protected against the strange forces of nexus" if
-"v" is > 0. Otherwise the player gets the message "You are no longer
-protected against the strange forces of nexus".
-
-#####GParameters:
->v is the time until nexus resistance expires (must be between 0 and
- 10000).
-
-----------------------------------------------------------------------
-
-#####RFunction: set_stun
-
-#####GDeclaration: bool set_stun(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->stun", notice observable changes
-*
-* Note the special code to only notice "range" changes.
-*/
-
-#####GDescription:
-Set stun level "v". If the player race can't be stunned then the level
-is forced to 0. A value > 100 means the player is knocked out. A value
->50 is a heavy stun. A value > 0 is a stun. If the stun level has
-increased, a message is printed. There is a small chance of stun level
-in 1000, or a 1 in 16 chance of a vicious blow which decreases
-intelligence and/or wisdom for a while.
-
-#####GParameters:
->v is the stun level.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_cut
-
-#####GDeclaration: bool set_cut(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->cut", notice observable changes
-*
-* Note the special code to only notice "range" changes.
-*/
-
-#####GDescription:
-Set cut level "v". If the player race can't be cut then the time is
-forced to 0. A value > 1000 is a mortal wound. A value > 200 is a deep
-gash. A value > 100 is a severe cut. A value > 50 is a nasty cut. A
-value > 25 is a bad cut. A value > 10 is a light cut. A value > 0 is a
-graze. If the cut level has increased, a message is printed. There is
-a small chance of stun level in 1000, or a 1 in 16 chance of scarring
-which decreases charisma for a while.
-
-#####GParameters:
->v is the cut level.
-
-----------------------------------------------------------------------
-
-#####RFunction: set_food
-
-#####GDeclaration: bool set_food(int v);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Set "p_ptr->food", notice observable changes
-*
-* The "p_ptr->food" variable can get as large as 20000, allowing the
-* addition of the most "filling" item, Elvish Waybread, which adds
-* 7500 food units, without overflowing the 32767 maximum limit.
-*
-* Perhaps we should disturb the player with various messages,
-* especially messages about hunger status changes. XXX XXX XXX
-*
-* Digestion of food is handled in "dungeon.c", in which, normally,
-* the player digests about 20 food units per 100 game turns, more
-* when "fast", more when "regenerating", less with "slow digestion",
-* but when the player is "gorged", he digests 100 food units per 10
-* game turns, or a full 1000 food units per 100 game turns.
-*
-* Note that the player's speed is reduced by 10 units while gorged,
-* so if the player eats a single food ration (5000 food units) when
-* full (15000 food units), he will be gorged for (5000/100)*10 = 500
-* game turns, or 500/(100/5) = 25 player turns (if nothing else is
-* affecting the player speed).
-*/
-
-#####GDescription:
-Set hunger level "v". A value < 500 is fainting. A value < 1000 is
-weak. A value < 2000 is weak. A value < 10000 is full. A value
-< 15000 is bloated. A value < 20000 is gorged. If one of these
-levels is crossed a message is printed.
-
-#####GParameters:
->v is the hunger level (must be between 0 and 20000).
-
-----------------------------------------------------------------------
-
-#####RFunction: check_experience
-
-#####GDeclaration: void check_experience(void);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Advance experience levels and print experience
-*/
-
-#####GDescription:
-Check if player experience level has changed. If a player has achieved
-a level for the first time, give reward or corruption (1 chance in 3)
-if they apply, and increase skill points.
-
-----------------------------------------------------------------------
-
-#####RFunction: check_experience_obj
-
-#####GDeclaration: void check_experience_obj(object_type *o_ptr);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Advance experience levels and print experience
-*/
-
-#####GDescription:
-Check if object "o_ptr" experience level has changed. If an object has
-achieved a level for the first time, apply gains.
-
-#####GParameters:
->o_ptr is the pointer to the object gaining experience.
-
-----------------------------------------------------------------------
-
-#####RFunction: gain_exp
-
-#####GDeclaration: void gain_exp(s32b amount);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Gain experience (share it to objects if needed)
-*/
-
-#####GDescription:
-Gain "amount" of experience. Count the number of objects which will
-gain experience. The objects share equally 2/3 of "amount". Give
-corruption if it applies. Gain experience. If experience is less
-than maximum, then increase maximum experience by 20% of "amount".
-Check for level change and print experience (check_experience).
-
-#####GParameters:
->amount is the amount of experience to share.
-
-----------------------------------------------------------------------
-
-#####RFunction: lose_exp
-
-#####GDeclaration: void lose_exp(s32b amount);
-
-#####GFile: xtra2.c
-
-#####GComment:
-/*
-* Lose experience
-*/
-
-#####GDescription:
-Decrease experience by "amount". Experience can not fall below zero.
-Check for level change and print experience (check_experience).
-
-#####GParameters:
->amount is the amount of experience to lose.
-
-----------------------------------------------------------------------
-
-
-Back to the *****lua.hlp*0[lua help index] .
-
-
- [[[[[gThis file by Chris Hadgis]
-
-
diff --git a/lib/mods/theme/help/lua_pow.txt b/lib/mods/theme/help/lua_pow.txt
deleted file mode 100644
index c221a664..00000000
--- a/lib/mods/theme/help/lua_pow.txt
+++ /dev/null
@@ -1,266 +0,0 @@
-|||||oy
-#####R /----------------------------------------\
-#####R < Adding new racial powers >
-#####R \----------------------------------------/
-
-#####R=== Introduction ===
-
-You *must* download and install my lua example files from
-[[[[[Ghttp://www.moppy.co.uk/angband.htm]. And also you should read the
-*****lua_intr.txt*0[scripting introduction] file if you haven't already done
-so.
-
-The (commented) accompanying script file for this tutorial is
-lib\scpt\pheonix.lua. Open it in your text editor!
-
-#####R=== The Racial Power ===
-
-Let's start with something simple. Let's say you wanted your new race (let's
-call it "Pheonix") to be able to cast fire balls as their racial power.
-
-#####R=== Starting off ===
-
-If you have a look at pheonix.lua you'll note the first lines are comments.
-I'll talk a bit more about comments later, but it's worth pointing out that any
-lines of text preceded by a double hyphen ([[[[[B--]) will be ignored by the
-scripting engine, and are therefore comments.
-After the comments, the first 10 lines of code are as follows:
-
-#####BPHEONIX_POWER = add_power
-#####B{
-#####B ["name"] = "Fire Breath",
-#####B ["desc"] = "You are able to cast fireballs",
-#####B ["desc_get"] = "Your beak glows red",
-#####B ["desc_lose"] = "Your beak goes cold again",
-#####B ["level"] = 10,
-#####B ["cost"] = 11,
-#####B ["stat"] = A_INT,
-#####B ["fail"] = 14,
-
-So, [[[[[BPHEONIX_POWER = add_power] is registering our power. We're giving it
-a name (PHEONIX_POWER) and saying that it is defined by calling the special
-function [[[[[Badd_power]. This special function is only used to define lua-
-scripted
-powers, and has attributes which are identified by their inclusion in square
-brackets.
-Note the following:
-- Lua is case sensitive. The name of our power is a constant, will never change
-so that's been named with capitals. variables and functions are named all in
-lower case. Technically speaking, Lua does not support constants, but we can
-emulate them by variables in this way. They don't have to be capitalised, but
-if you capitalise all your constants, it makes things easier to read, and
-you'll be following normal programming protocol.
-- There are no spaces in the name of the power. Use an underscore for spaces
-if you need to improve legibility.
-
-[[[[[B"name" = "Fire Breath",] This is the name of the power as it is
-displayed in the
-U menu, and as you will define it in p_info.txt (more about that later).
-
-[[[[[B"desc" = "You are able to cast fireballs",] This is what would
-appear in the
-information display list if you drank a potion of self knowledge or
-similar.
-
-[[[[[B"desc_get" = "Your beak glows red",] This is the information displayed
-when you
-gain this power.
-
-[[[[[B"desc_lose" = "Your beak goes cold again",] This is the information
-displayed when
-you lose this power. Eg After a mutation/corruption.
-
-[[[[[B"level" = 10,] Character level which must be gained in order to use
-power,
-
-[[[[[B"cost" = 11,] Amount of mana to cast this power.
-
-[[[[[B"stat" = A_INT,] stat which will define whether it works or not,
-
-[[[[[B"fail" = 14,] how high that stat must be.
-
-So our Pheonix will be able to cast PHEONIX_POWER from clvl 10, at a cost of
-11 mana, providing that the player's intelligence is 14 and upwards.
-
-#####R=== The function ===
-
-The next section is a lot longer, so we'll look at it line by line. I'll
-strip the comments for the purpose of this helpfile.
-
-#####B["power"] = function()
-#####B local ret, dir, damage
-#####B ret, dir = get_aim_dir();
-#####B if (ret == FALSE) then
-#####B return
-#####B end
-#####B damage = player.lev*3
-#####B msg_print("You breathe fire.")
-#####B fire_ball(GF_FIRE, dir, damage, 3)
-#####Bend,
-
-The [[[[[B"power"] bit is what actually happens when the player accesses this
-power
-from their 'U' menu. Every function must start with the word [[[[[Bfunction].
-Normally, we'd also declare its name at this point, but as this is contained
-within the [[[[[Badd_power] function, we just use the word [[[[[Bfunction] The
-empty
-brackets after this denote that no arguments are passed to the function.
-Lets look at the next line.
-
-#####B local ret, dir, damage
-
-The [[[[[Blocal] bit is saying that we're going to declare some local
-variables. That
-is, that there will be three variables used in this function , that apply
-exclusively to this function, and to no others. Global variables are
-variables that apply to the whole script, in multiple functions. The three
-variables will be called [[[[[Bret] (return), [[[[[Bdir] (direction), and
-[[[[[Bdamage]. They will be used to determine the direction the ball
-will fire in, and how much damage it will do. We'll see them in use when we add
-the third line:
-
-#####B ret, dir = get_aim_dir();
-
-here we're saying that the variables will take their value from the result
-of a function. The program performs the function [[[[[Bget_aim_dir] which
-essentially asks the player to choose a direction or pick a target.
-[[[[[Bget_aim_dir]
-assigns the value [[[[[Bret] to either TRUE (if the player correctly selected a
-direction) or FALSE (if the player failed to do so (maybe they changed their
-mind, or hit the wrong key!)). The value [[[[[Bdir] is the direction which was
-selected (or the path to the target if a target was selected). OK so let's add
-the next line:
-
-#####B if (ret == FALSE) then return end
-
-This introduces another fundamental scripting concept - [[[[[Bif] statements.
-They work just as you would expect them too. You say "if a certain condition is
-met, then do the following things."
-So in this function we're saying, "if the value of [[[[[Bret] is FALSE then
-[[[[[Breturn]."
-As I mentioned above, [[[[[Bret] is false if the player aborted (either
-deliberately or accidentally) the spell casting whilst choosing a direction
-for the spell. The double equals sign are used to mean "is equal to" as a
-single equals sign is used for defining variables remember? A single equals
-sign is more of a "let x be equal to y" thing.
-[[[[[Breturn] means stop the current function. And [[[[[Bend] signifies the
-close of the [[[[[Bif]
-statement. Every [[[[[Bif] statement must begin with an [[[[[Bif] and finish
-with an [[[[[Bend].
-So, what our [[[[[Bif] statement is saying is; "if the player failed to specify
-a direction or target for the spell, stop the function here."
-If the player has correctly specified a direction/target, the function
-continues to the next line:
-
-#####B damage = player.lev*3
-
-Here we're saying that the variable [[[[[Bdamage] has a value equal to the
-players current character level, multiplied by 3.
-
-#####B msg_print("You breathe fire.")
-
-Fairly easy to see what this does - displays the message "You breathe fire."
-I could have put anything there obviously, like [[[[[Bmsg_print("You open]
-[[[[[Byour mouth and everyone falls over with the smell of hot curry")] or
-some other such rubbish. But note that the message is enclosed within double
-quotes. The quotes aren't displayed in the message on screen, but signify the
-start and end of the message.
-
-#####B fire_ball(GF_FIRE, dir, damage, 3)
-
-This is the line that casts the spell. it says execute the function
-[[[[[Bfire_ball]. Now, this doesn't mean a fireball, it means fire a ball.
-There's an important distinction there! All it knows it is doing is firing a
-ball, it doesn't know what kind of ball, or where, or how big, or how much
-damage.
-The [[[[[BGF_FIRE,] bit is what tell us it is a fire ball. If it was
-[[[[[BGF_COLD,]
- we'd have a cold ball, or [[[[[BGF_CHAOS,] it would be a chaos ball and
-so on and so on. A full list of those types can be found in *****lua_gf.txt*0[lua_gf.txt].
-[[[[[B dir,] is the direction, from the [[[[[Bget_aim_dir()] bit.
-[[[[[B damage,] is the damage. As we've already said, this will be clvl*3.
-[[[[[B 3)] is the radius.
-and finally...
-
-#####B end,
-#####B}
-
-[[[[[Bend,] tells it the function has ended. Every function must finish with
-[[[[[Bend].
-You should have spotted that after the end of each attribute is a comma. Make
-sure you include this, and don't forget the braces at the very very end to
-close the [[[[[Badd_power] function.
-
-#####R=== Finishing the LUA file ===
-
-Save this as a text file 'pheonix.lua' Put it into the lib\scrpt directory
-of ToME, and open the init.lua file which you'll find in the same
-directory.
-
-Add the following line and resave the init.lua file.
-
-#####Btome_dofile("pheonix.lua")
-
-This ensures that ToME loads your file on start-up. Because you've installed
-the example scripts, this has all been done for you.
-
-#####R=== A quick word about comments ===
-
-One of the reasons Angband has so many variants is because the source code is
-clearly commented. Almost every line of code has an accompanying comment,
-explaining what that line does. It's good practice to add comments to any code
-or script you write. It's helpful to others who are learning, anyone who takes
-over your project, and also to yourself when you come back in a month's time
-and can't remember what you did! So comment your code clearly, and well!
-
-You can also add multi line comments which should be enclosed by [[[[[B--[[]
-and
-#####B]]
-
-#####R=== Tying it all together ===
-
-You'll now need to link this 'U' power to the pheonix race via the
-p_info.txt file. Simply add a line within the class definition file that has
-the format [[[[[BR:Z:<name>]the name of the power as it appears in the
-[[[[[B"name"]
-section we did right at the beginning, remember? Seeing as there is no pheonix
-race, I've gone ahead and made one up as a demonstration. If you've downloaded
-and installed the example files from [[[[[Ghttp://www.moppy.co.uk/angband.htm/]
-then
-you'll notice you already have the pheonix race available. Printed below is
-the p_info.txt entry for it.
-
-
-#####BR:N:23:Pheonix
-#####BR:D:Born from flame, these powerful bird like creatures gain fire related
-#####BR:D:abilities as they grow.
-#####BR:S:1:0:2:1:-3:2:-5
-#####BR:K:-8:15:20:-10:5:-1:-5:-5
-#####BR:P:8:130:5:210
-#####BR:M:255:70:2:1:20:5:2:1:18:3
-#####BR:E:1:1:1:2:1:1
-#####BR:C:Warrior | Mage | Priest | Rogue | Ranger | Paladin | Blade |
-#####BR:C:Warlock | Chaos-Warrior | Monk | Mindcrafter | High-Mage |
-#####BR:C:BeastMaster | Alchemist | Power-Mage | Runecrafter |
-#####BR:C:Sorceror | Archer | Illusionist | Druid | Necromancer | Black-Knight
-|
-#####BR:C:Daemonologist | Weaponmaster | Summoner |
-#####BR:Z:Fire Ball
-#####BR:R:1:0
-#####BR:F:RES_FIRE | FEATHER |
-
-Note the [[[[[BR:Z:] line.
-
-If all is well, you should be able to start ToME now and breathe fire! Once
-you get to lvl 10 anyhow. Don't forget, this is the kind of thing wizard mode
-was invented for! Ctrl-A and confirm at the prompt, and then 'e' will allow
-you to alter stats, including experience. Approx 1000 exp should do to get you
-to clvl 10.
-
-Ready for more? How about adding a new *****lua_skil.txt*0[skill] ?
-
- [[[[[gThis file by fearoffours (fearoffours@moppy.co.uk)]
-
-
-
-
diff --git a/lib/mods/theme/help/lua_ques.txt b/lib/mods/theme/help/lua_ques.txt
deleted file mode 100644
index 1d4b9c65..00000000
--- a/lib/mods/theme/help/lua_ques.txt
+++ /dev/null
@@ -1,299 +0,0 @@
-|||||oy
-#####R /----------------------------------------\
-#####R < Adding a new quest >
-#####R \----------------------------------------/
-
-#####R=== Introduction ===
-
-Adding a quest involves a bit more work, and there is, in some ways, rather
-more potential for things to go wrong! But it's a great way of showing just
-WHAT can be done with lua scripting. It proves just how much a lua patch can
-change the overall feel of the game. And it will give you a much better idea of
-how lua interfaces with the game source. You should have read the
-*****lua_intr.txt*0[scripting introduction], *****lua_pow.txt*0[racial power tutorial]
-and *****lua_skil.txt*0[adding new skills tutorial] before going much
-further. All of the above files contain some fairly fundamental information
-which you will find necessary for full understanding of this file.
-
-The script we're looking at is going to create a quest entrance in the middle
-of Bree. Entering the quest you see a little girl who has had her necklace
-stolen. Your job is to travel down a corridor, killing some monsters on the
-way, pick up the amulet and return it to the girl. Once done, she'll reveal the
-stairs back to Bree, and give you a (randomly generated) ring. If you feel the
-monsters are too hard, the only thing to do is talk to the little girl who will
-reveal the stairs again, failing the quest for you, and also block off the
-entrance to the amulet so that you can't cheat and make off with the amulet!
-
-#####R=== Getting started ===
-
-Open amulet.lua (you have downloaded the example scripts from
-[[[[[Ghttp://www.moppy.co.uk/angband.htm], haven't you?). The first thing you
-should see is that yet again we're calling a function that takes its arguments
-from a table, making it easy to read what's going on in the script.
-
-This time our function is add_quest and we have the following keys and values:
-
-#####B["global"] = "AMULET_QUEST",
-#####B["name"] = "Hannahs lost amulet",
-#####B["desc"] = {
-#####B "Retrieve an amulet for Hannah Cooke. It's guarded!"
-#####B },
-#####B["level"] = 5,
-#####B["hooks"] = {
-
-[[[[[B"global" = ] is a constant that we set when we refer to this quest in
-various places...
-[[[[[B"name" = ] Obviously a long name for the quest. This will appear in the
-quest screen (Ctrl-Q) and we may use in some map files too.
-[[[[[B"desc" = ] This is a long description for the quest. Again this is what
-will appear in the quest screen, and each line should be not more than 80
-characters.
-[[[[[B"level" = ] This is a rough indicator of how hard the quest is, and again,
-appears in the quest screen
-[[[[[B"hooks" = ] This is the real 'meat' of the quest. Like the [[[[[B"spell_list"] key
-in the [[[[[Badd_magic] function, this is another sub-table.
-
-To understand fully the structure of the "hooks" key it's worth taking a bit of
-a detour at this point and discussing how the scripting interface works in
-general.
-
-#####R=== How the scripts work (ish) ===
-
-Essentially there's a list of events that happen in the game. As each of these
-events happen they run a check to see if there's any functions that they need
-to run at that event. When we ran the add_mkey part of adding a new skill
-power, we essentially said "when the 'm' key is pressed in the game, perform
-the [[[[[Bexecute_magic(constructor_powers)] function". Likewise we did a similar
-thing with adding the racial power, only we hooked onto the pressing of the
-'U' key.
-
-All of this was partly hidden because of the way that the [[[[[Badd_magic] and
-[[[[[Badd_power] functions work. But here in the [[[[[Badd_quest] function it's a bit more
-specific. We are going to specify what events we're going to hook onto, and
-what functions we want to trigger at that event.
-
-A full list of hooks can be found in the source-file util.pkg.
-
-#####R=== The hooks ===
-
-#####B[HOOK_BIRTH_OBJECTS] = function()
-#####B quest(AMULET_QUEST).status = QUEST_STATUS_TAKEN
-#####Bend,
-
-So here we are with our first hook. We've declared that we're adding it to the
-birth of your character. That is, the function will be called when you create
-your character. And what we're doing here is automatically declaring the quest
-as being taken, like the Dol Guldur quest is. Each quest has 7 different
-statuses:
-
-[[[[[BQUEST_STATUS_IGNORED -1 ] This is unused, but the quest is
-ignored (will not be taken and has not been taken).
-[[[[[BQUEST_STATUS_UNTAKEN 0 ] The quest has not been accepted yet
-[[[[[BQUEST_STATUS_TAKEN 1 ] You have accepted the quest
-[[[[[BQUEST_STATUS_COMPLETED 2 ] You have completed the quest
-successfully but not been rewarded for it
-[[[[[BQUEST_STATUS_REWARDED 3 ] You've completed and rewarded the quest
-[[[[[BQUEST_STATUS_FAILED 4 ] You've failed the quest
-[[[[[BQUEST_STATUS_FINISHED 5 ] The quest is completely finished
-successfully.
-[[[[[BQUEST_STATUS_FAILED_DONE 6 ] The quest is completely finished
-unsuccessfully.
-
-You see that we've used the constant we defined in the "global" section is
-passed as an argument to [[[[[Bquest.status].
-
-Next hook then:
-
-#####B[HOOK_GEN_QUEST] = function()
-#####B if (player.inside_quest ~= AMULET_QUEST) then
-#####B return FALSE
-#####B else
-#####B load_map("amulet.map", 2, 2)
-#####B return TRUE
-#####B end
-#####Bend,
-
-Ok, we're hooking onto the generation of the quest here. This is specifically
-triggered in this instance by going down the quest entrance stairs in Bree.
-Once you've gone down the stairs, you are technically inside the quest, which
-means we can say if the person is not inside the amulet quest, then ignore this
-function, otherwise load the file 'amulet.map' at co-ordinates x=2 y=2. You'll
-find the amulet.map file in the edit directory, make sure you check it out. The
-syntax for map files is fairly simple, though I might get round to writing a
-tutorial on them some day! In the mean time holler for me at the usual email
-address if you're unsure.
-
-#####B[HOOK_FEELING] = function()
-#####B if (player.inside_quest ~= AMULET_QUEST) then
-#####B return FALSE
-#####B else
-#####B cmsg_print(TERM_L_BLUE, "Hannah speaks to you:")
-#####B cmsg_print(TERM_YELLOW, "'Some nasty monsters stole my
-#####B favourite necklace.'")
-#####B cmsg_print(TERM_YELLOW, "'It's hidden at the back of that
-#####B corridor! Please fetch it for me'")
-#####B return TRUE
-#####B end
-#####Bend,
-
-We're moving into some rather more obvious territory here, and getting into the
-meat of the quest. The [[[[[BHOOK_FEELING] is triggered at the point when the level
-feeling appears. It's important that this is run only if the player is inside
-the amulet quest, as otherwise it will trigger EVERY time a level feeling
-occurs, when you go down a level in the barrow-downs, whenever! Returning TRUE
-will replace the level feeling with what's above, returning FALSE will still
-perform the function but will amend the normal level feeling - so here if we'd
-returned false we'd still get our custom messages, but they'd follow with
-'looks like a typical quest level'. Of course returning false may cause you
-other problems (see end of this file!) depending on what else you have in your
-function.
-
-#####B[HOOK_GIVE] = function(m_idx, item)
-
-#####B m_ptr = monster(m_idx)
-#####B o_ptr = get_object(item)
-
-#####B if (m_ptr.r_idx == test_monster_name("Hannah Cooke, a little girl"))
-#####B and (o_ptr.tval == TV_AMULET) and (o_ptr.sval == 2) then
-
-#####B cmsg_print(TERM_YELLOW, "'Thank-you!'")
-
-#####B inven_item_increase(item, -1)
-#####B inven_item_optimize(item)
-
-#####B quest(AMULET_QUEST).status = QUEST_STATUS_COMPLETED
-
-#####B cave_set_feat(7, 6, 6)
-
-#####B cmsg_print(TERM_YELLOW, "'Here, take this pretty ring I found
-#####B as a token of gratitude!'")
-#####B random_type = randint(57)
-#####B reward = create_object(TV_RING, random_type)
-#####B drop_near(reward, -1, py, px)
-#####B quest(AMULET_QUEST).status = QUEST_STATUS_REWARDED
-#####B return TRUE
-#####B else
-#####B return FALSE
-#####B end
-#####Bend,
-
-This is a fairly long function, but don't be intimidated. It's not really
-difficult to understand. As you can see we're hooking into the giving of an
-object to a monster (the 'y' key). Because of this, the function takes two
-arguments - [[[[[Bm_idx] (the monster that you're giving to) and [[[[[Bitem] (the item that
-you're giving).
-
-We then make it possible to work with the monster and item variables by
-referencing them to two functions which identify them from the edit files:
-[[[[[Bmonster()] and [[[[[Bget_object()]. This enables us to now say, 'if the name of the
-monster is "Hannah Cooke, a little girl" and the type of item is an amulet and
-that amulet is an amulet of adornment, then carry out the following commands'.
-
-We then say call the function [[[[[Binven_item_increase()] which places an object in
-the inventory. It takes two arguments, the first being what object to put in
-the inventory and the second being how many of that type of objects to put in
-the inventory. You can see that by placing -1 as the second argument it fairly
-obviously subtracts that item from the inventory. The [[[[[Binven_item_optimize()]
-function checks that there are no empty inventory slots, and if there are,
-erases them.
-
-The quest is then completed, and the stairs are revealed using the
-[[[[[Bcave_set_feat()] function. This function takes three arguments, the first is the
-x co-ordinate of the cave square you wish to change (counted from top left) the
-second is the y co-ordinate, and the third is the index number of the feature
-you wish the square to become as defined in f_info.txt.
-
-We then set about rewarding the player. As you can see we call [[[[[Bcreate_object()]
-which takes two variables: the first is the type of object (these are all
-listed in object.pkg) and the second is the sub-type of that object. I searched
-k_info.txt to see how many different types of ring there were (57) and used a
-randomly selected number with a maximum value of 57 as that specific sub-type.
-
-We then drop the object (although it's been created, it has only been created
-in the game's memory, it's nowhere that the player can interact with it until
-we drop it). The [[[[[Bdrop_near()] function takes 3 variables, the first being the
-object that you wish to drop, the second being the chance that it disappears
-(like an arrow, or mimicked creature) on drop. If you set it to -1, it won't
-ever disappear. The last two are the co-ordinates at which the object will be
-dropped. py and px are the global variables defined by where the player is
-standing, so in this case it will drop under the player. You could do
-[[[[[Binven_item_increase(reward, 1)] if you wanted, but I wanted to show a variety of
-ways of handling objects.
-
-OK, let's take a look at the next hook:
-
-#####B[HOOK_CHAT] = function(m_idx)
-#####B m_ptr = monster(m_idx)
-#####B if (m_ptr.r_idx == test_monster_name("Hannah Cooke, a little girl")) then
-#####B if (quest(AMULET_QUEST).status == QUEST_STATUS_REWARDED) then
-#####B cmsg_print(TERM_YELLOW, "'Bye!'")
-#####B else
-#####B cmsg_print(TERM_YELLOW, "'Are the monsters too tough?
-#####B Do you want to leave?'")
-#####B if (get_check("Really leave and fail the quest?") ==
-#####B FALSE)
-#####B then
-#####B cmsg_print(TERM_YELLOW, "'Go and get my
-#####B amulet then!'")
-#####B else
-#####B cmsg_print(TERM_YELLOW, "'Awww. Never
-#####B mind. It was only a bit of rabbits foot'")
-#####B quest(AMULET_QUEST).status =
-#####B QUEST_STATUS_FAILED
-#####B cave_set_feat(7, 6, 6)
-#####B cave_set_feat(12, 5, 60)
-#####B end
-#####B end
-#####B return TRUE
-#####B end
-#####B return FALSE
-#####Bend,
-
-This only looks complicated because of the nested 'if' statements. It's easy to
-lose your way when doing this kind of thing, always make sure you close all the
-statements and put the returns in the right place. [[[[[BHOOK_CHAT] functions have one
-argument - the monster you are chatting to. As you can see, we perform a check
-to make sure it's the right monster and then away we go.... If the player wants
-to leave the quest without completion they talk to Hannah, who gives them a
-chance to change their mind! If the player asks to leave the entrance to the
-corridor is blocked off (the second cave_set_feat()) so that the user can't
-then go and get the amulet. Gumband or Zangband players may at this point think
-they've lost out on the rabbits foot of burglary! (they haven't though as it
-doesn't exist in ToME).
-
-#####B[HOOK_CHAR_DUMP] = function()
-#####B if (quest(AMULET_QUEST).status == QUEST_STATUS_FAILED) then
-#####B print_hook("\n You chickened out of rescuing a necklace and
-#####B made a little girl sad. ")
-#####B elseif (quest(AMULET_QUEST).status == QUEST_STATUS_COMPLETED) or
-#####B (quest(AMULET_QUEST).status == QUEST_STATUS_REWARDED) or
-#####B (quest(AMULET_QUEST).status == QUEST_STATUS_FINISHED) then
-#####B print_hook("\n You rescued little Hannah Cooke's necklace from
-#####B the nasty monsters ")
-#####B end
-#####B return FALSE
-#####Bend,
-
-This quite simply and obviously prints an appropriate line in the character
-dump based on the status of the quest. The [[[[[B\n] bit ensures the text goes on a
-new line, so make sure you include it! Also you should return FALSE as
-returning TRUE will stop executing all the other character dump lines (and you
-may get other quests not having their lines printed).
-
-=== A word about returning TRUE and FALSE ===
-
-As I mentioned above, you need to be careful what you return when dealing with
-HOOKS as you can mess up the game a bit. Bear in mind that if you add a
-function to [[[[[BHOOK_GEN_QUEST], every time a quest is generated, that function will
-run. If you return TRUE, then no further functions attached to that hook will
-run. If you return FALSE, it continues processing functions on that hook.
-
-That is pretty much it. Do take a look at the other included scripts that I
-haven't gone into any detail about in the files, as you'll pick up some useful
-techniques there too. Especially worthy of note is the hina.lua file which uses
-hooks outside of the quest structure and also global variables and variables in
-a table. If you have any questions, let me know at the email addy below.
-
-Back to the *****lua.hlp*0[lua help index] .
-
- [[[[[gThis file by fearoffours (fearoffours@moppy.co.uk)]
diff --git a/lib/mods/theme/help/lua_skil.txt b/lib/mods/theme/help/lua_skil.txt
deleted file mode 100644
index 87385e5d..00000000
--- a/lib/mods/theme/help/lua_skil.txt
+++ /dev/null
@@ -1,342 +0,0 @@
-|||||oy
-#####R /----------------------------------------\
-#####R < Adding new skill-based powers >
-#####R \----------------------------------------/
-
-#####R=== Introduction ===
-
-This is very much in the same vein as adding a racial/extra power, but has to
-be tied into skills, and we're defining more than one spell at once. You should
-have read the *****lua_intr.txt*0[scripting introduction] and
-*****lua_pow.txt*0[racial power tutorial] before going much further. Both of the above files
-contain some fairly fundamental information which you will find necessary for
-full understanding of this file.
-
-#####R=== Getting started ===
-
-Open construc.lua (you have downloaded the example scripts from
-[[[[[Ghttp://www.moppy.co.uk/angband.htm], haven't you?). The idea behind this
-script is that it adds a skill which affects you ability to build/knock down
-stuff. It treats the equivalent of stone-to-mud and trap-door destruction
-spells as if they were "building skills". It also adds quite a few high-level
-'spells' which do funky things like carving out corridors and chambers in a
-single turn, and building doors and stuff. Just think of it as if the person
-who has plenty of skills in this area would be a builder-type with lots of
-strength and constitution...
-
-In order to add these powers we're going to edit the s_info.txt file which
-lives in the edit folder, and add a new skill, underneath the 'misc' tree,
-called construction. The powers will then be accessed through the 'm' menu, in
-a similar way to mindcraft or alchemy skills or such. (That is, no books are
-needed to cast them, as we're treating them as a craft that has been learnt,
-rather than spells.) Our fist line of the script file reads:
-
-#####BSKILL_CONSTRUCT = 57
-
-This merely links the skill index that we'll be defining in s_info.txt to this
-file. We'll come back to this at the end of the tutorial.
-
-#####Bconstructor_powers = add_magic
-
-In a similar way to the [[[[[Badd_power] function we called when we added the
-Phoenix racial ability, this line calls a special function which we use to
-define new skills. It follows a very specific, but easy to understand form. It
-starts with a brace, which indicates the add_magic function will be storing
-these values in a table. Don't worry about this too much, but understand that a
-table starts and ends with braces [[[[[B{] and [[[[[B}] respectively. Each key
-(or field name) takes the format [[[[[B"key" = value,] (the comma is
-important!).
-
-#####B ["fail"] = function()
-#####B msg_print("You decide now is a good time for a cuppa")
-#####B end,
-#####B ["stat"] = A_STR,
-#####B ["get_level"] = function()
-#####B return get_skill_scale(SKILL_CONSTRUCT, 50)
-#####B end,
-#####B ["spell_list"] =
-
-[[[[[B"fail"] is a function that is called whenever you ##fail to cast the
-spells##. Here it does nothing spectacular.
-[[[[[B"stat"] defines the stat used to cast the spells. Here it is strength.
-Any other stat can be used, prefix it with [[[[[BA_].
-[[[[[B"get_level"] is used to determine the level of the spell. It's associated
-with spells that increase in power the more points that are invested in the
-associated skill. I know that's not terribly clear, I'll come back to it in a
-moment.
-[[[[[B"spell_list"] is just that, a list of all the spells.
-Each of these four properties within the table must end with a comma. If a
-function is defined in the property itself then we add the comma after the
-closing [[[[[Bend]. Again compare with construct.lua to see it. Any line NOT
-ending with a comma will cause a lua error on startup, probably of the type
-[[[[[V'}' expected to close '{' at line <whatever>.]
-
-#####R=== The spell list ===
-
-Each spell, within the [[[[[B"spell_list"] key has its own set of properties
-that we need to define from a sub-table so we open another set of braces to
-start the spell list, and then a third set of braces to start the first spell.
-So with all this, our first spell looks like:
-
-#####B ["spell_list"] =
-#####B {
-#####B {
-#####B ["name"] =
-#####B ["desc"] =
-#####B ["mana"] =
-#####B ["level"] =
-#####B ["fail"] =
-#####B ["spell"] =
-#####B ["info"] =
-#####B },
-
-[[[[[B"name"] is, as you would expect, the name of the spell, as you want it to
-appear in the spell list when choosing a spell. The maximum number of
-characters for this is 29.
-[[[[[B"desc"] is the description received when you hit the capital letter of
-that spell in the menu. (i.e., press 'a' to cast the first spell, but press 'A'
-to receive info about the first spell.
-[[[[[B"mana"] is the amount of mana required to cast the spell.
-[[[[[B"level"] is the level required to use that spell (that's level of the (in
-this case construction) skill, not character level!).
-[[[[[B"fail"] is base fail rate.
-[[[[[B"spell"] is the function that is executed when the spell is cast. Note
-that it MUST take the form [[[[[Bfunction() blah end] even if you're calling
-a C function directly. If you have a look at the end of the file, you'll see
-the "rebuild dungeon" spell which is identical to the "alter_reality" spell.
-However, rather than reading [[[[[B"spell" = alter_reality()], it reads:
-
-#####B["spell"] = function()
-#####B alter_reality()
-#####Bend,
-
-which appears to be a long way round to do the same thing, but this is how it
-must be done.
-
-In a similar way, the [[[[[B"info"] key must begin with a [[[[[Bfunction()]
-and return the value of what is to be displayed alongside the spell name,
-level and mana in the spell list. The maximum number of characters that can be
-displayed here is dependent on the width of the user's screen, but try to keep
-it under 12 if you can, as this will fit in a standard 80x24 terminal screen.
-The first character will need to be a space otherwise you'll have the info line
-squashed right up against the fail rate and it will look odd. If you wish to
-have this part blank in the spell list, you still need to return a value, so
-just a single space will do : [[[[[Breturn " "]
-
-All of these keys are repeated for each spell, with each spell in its own
-table (therefore, it's own set of braces). Again, check the lua file for
-clarification.
-
-When entering the spells in the "spell_list", you must take care to specify
-them in the order which they are gained, otherwise they display incorrectly in
-the spell list.
-
-You should by now be experienced enough to understand most of what's going on
-in the actual spell functions (especially if you dig around in the source a
-bit, and check out Chris Hadgis' excellent *****lua_spel.txt*0[spell.pkg] helper
-files. I'm not going to go through the whole file line by line, as this is
-something you should do yourself, figuring out what's going on. I'm going to
-examine a few of the things we haven't covered before though, so pay attention.
-
-#####R=== The get_level() function ===
-
-Probably one of the most important functions that you see reappearing in the
-file is the [[[[[Bget_level()] function. All this does is return the numerical
-value of the power that is given as the first argument. So [[[[[Bget_level]
-[[[[[B(constructor_power)] will return the current level of the constructor power.
-Given that the level of this is taken directly from the construction skill, (we
-defined that in the [[[[[B"get_level"] key, by saying [[[[[Bget_skill_scale]
-[[[[[B(SKILL_CONSTRUCT, 50)] ) it will return the value of your construction skill.
-[[[[[Bconstructor_power] is the name of the whole power, we named it thus on
-the second line of the script!
-
-[[[[[Bget_level] takes the following arguments: [[[[[Bget_level(power, max, ]
-[[[[[Bmin)]. The power is obviously which power we're taking the value from, and the
-max and min allow you to define boundaries for the spell. For instance the
-current maximum value that [[[[[Bget_level(constructor_power)] can return is
-50, as that is the maximum number of skill points you can have in that skill.
-If you were using this as the basis for the damage of a low-level bolt spell,
-you might decide that having a damage of 50 would be too much (unlikely, but
-still possible). You could therefore define a maximum value of 20 so that when
-the value of the construction skill was over 50, the maximum value for
-damage of that spell would be 20. To achieve this you'd have:
-[[[[[Bget_level(constructor_power, 20)]. In a similar way, you can force the
-minimum value of the spell to be higher than the actual construction skill
-level, with a [[[[[Bget_level(constructor_power, 50, 15)]. This would be useful
-say for spells that you wanted to be available when the construction skill
-level reaches 10, but for whom you wanted a (for example) base damage of 15
-right from the word go. These re-scale values rather than capping them!
-
-You can leave out the minimum value as I have done above. You can also leave
-the maximum value out (it will default to 50). If you want to specify a minimum
-value though, you MUST specify a maximum value as well.
-
-As you have hopefully been able to tell, the [[[[[Bget_level()] function
-enables us to have spells that increase in usefulness as you gain levels. Let's
-take the "Dismantle" spell. The function in the [[[[[B"spell"] key is as
-follows:
-
-#####Bfunction()
-#####B local ret, dir, dam
-
-#####B if (get_level(constructor_powers, 50) >= 11) then
-#####B ret, dir = get_aim_dir();
-#####B if (ret == FALSE) then return end
-#####B fire_beam(GF_KILL_TRAP, dir, 1)
-#####B else
-#####B fire_ball(GF_KILL_TRAP, 0, 1, 1)
-#####B end
-#####Bend,
-
-The [[[[[Bif] statement is obviously what really interests us here. You'll
-notice that this has the amendment of an [[[[[Belse] clause, which the [[[[[Bif]
-statement we used in the previous tutorial did not. As you would expect, if the
-condition on the first line of this statement is met, then the instructions
-immediately below it are carried out. If the condition is not met, then the
-statements that follow the [[[[[Belse] are executed.
-
-Coming back to the [[[[[Bget_level] function, we learnt from above, that the
-[[[[[Bget_level] part of this function translates as, "if the value of the
-construction_power level (which happens to be identical to the construction
-skill level) is greater than or equal to 11, cast a beam of trap disarming in
-the specified direction. (The first part of this is all straightforward,
-getting a direction, and cancelling correctly if the player presses 'ESC'.)
-Otherwise, cast a ball of trap disarming with a radius of one, centred on the
-player."
-
-In the same way, as you look at the construc.lua file, you will see that
-[[[[[Bget_level()] is used many times in this way, to increase the power of
-detection spells, to change bolt spells to ball spells, to keep a constantly
-increasing damage going, and so on.
-
-#####R=== Elseif's and things ===
-
-If you want to provide more than one alternative condition, in an
-[[[[[Bif-then-else] statement, you can use [[[[[Belseif]s which do what you
-might expect. Take a look at the first spell, "Survey area", for an example of
-this:
-
-#####Bif (get_level(constructor_powers, 50) >= 28) then
-#####B wiz_lite()
-#####Belseif (get_level(constructor_powers, 50) >= 15) then
-#####B map_area()
-#####B detect_traps(DEFAULT_RADIUS)
-#####Belseif (get_level(constructor_powers, 50) >= 5) then
-#####B detect_traps(DEFAULT_RADIUS)
-#####B detect_stairs(DEFAULT_RADIUS)
-#####B detect_doors(DEFAULT_RADIUS)
-#####Belse
-#####B detect_stairs(DEFAULT_RADIUS)
-#####B detect_doors(DEFAULT_RADIUS)
-#####Bend
-
-If the level of constructor powers is greater or equal to 28, then the function
-[[[[[Bwiz_lite()] is performed, and no other part of the if statement is
-executed. [[[[[Bwiz_lite()] is just the enlightenment spell. If it is less than
-28, the next condition is examined: that if the level of constructor powers is
-greater than or equal to 15, then [[[[[Bmap_area()](Magic mapping) and detect
-traps are called. If the level of constructor power is less than 15, it moves
-onto the next condition, which says that if the level of constructor power is
-greater than 5, then detect stairs, traps and doors. If none of these
-conditions are met,(that is, if the level of construction skill is less than 5)
-then we just detect doors and stairs.
-
-You'll note that each of the detection spells includes a DEFAULT_RADIUS
-constant. You could change this to a numerical value, or a variable defined
-somewhere else in your script. eg [[[[[Bdetect_traps(2)] would detect traps
-with a radius of 2 centred on the player.
-
-#####R=== Registering the skill type ===
-
-This is what we do at the end of the file, and is what ties the powers we've
-defined to the action of pressing the 'm' key in game. Once more we're calling
-a special function [[[[[Badd_mkey()] which takes its arguments for a table.
-There are only two keys in this table though which keeps things simple.
-
-#####Badd_mkey
-#####B{
-#####B ["mkey"] = MKEY_CONSTRUCT_POWERS,
-#####B ["fct"] = function()
-#####B execute_magic(constructor_powers)
-#####B energy_use = energy_use + 100;
-#####B end
-#####B}
-
-[[[[[B"mkey"] must be a UNIQUE value > 1000 . Here I've defined it as a
-constant, [[[[[BMKEY_CONSTRUCT_POWERS], which has the value 1004. This value
-we'll call again in the s_info.txt file.
-[[[[[B"fct"] is the function that's called when the user presses the key in the
-'m' menu. So here, it calls the [[[[[Bexecute_magic] function which actually
-displays a list of powers for the user to choose from. The argument it takes is
-the powers it will use (alchemy, mindcraft, etc., or in this case constructor),
-and then the [[[[[Benergy_use] line tells the game to take one game turn to do
-the action.
-
-#####R=== Adding the skill in s_info.txt ===
-
-Take a look in the s_info.txt file, under the Misc section. You'll see,
-
-#####BN:57:Construction
-#####BD:Ability to use constructor powers
-#####BD:Construction powers use strength
-#####BA:1004:Build or knock down stuff
-#####BI:1000
-
-The first line is the index of the skill; again this must be unique. The second
-property is the name of the skill. The [[[[[BD] lines are the lines displayed
-when the skill is highlighted in the skill screen.
-The first entry on the [[[[[BA] line is the value of the [[[[[B"mkey"] we
-defined in the [[[[[Badd_mkey] function in our script. The second entry is the
-display for selecting the construction power in the 'm' menu.
-The [[[[[BI] line is currently unused, but add a 1000 there anyway. That's what
-all the others have so when it's introduced, at least it will affect your
-powers identically to how it affects all the other powers.
-
-If you scroll to the very bottom of the file now, you'll see I've placed the
-skill at the bottom of the Misc branch of the skills tree. I then made a new
-class, constructor, which you can see in p_info.txt.
-
-That is all that is NEEDED when writing a script to add a skill - defining an
-mkey using add_mkey, and defining any powers that are called in the
-[[[[[B"fct"] (generally using [[[[[Badd_magic] ).
-
-And I've added the line
-
-#####Btome_dofile("construc.lua")
-
-in init.lua so the script is loaded on start-up!
-
-Below I'm going to talk in depth about a few other functions that you may find
-useful in your scripting.
-
-#####R=== fire_bolt() and fire_beam() ===
-
-In the last help file we looked at the routine for firing a ball -
-[[[[[Bfire_ball()]. Here's a quick note about beams and bolts...
-[[[[[Bfire_beam()] and [[[[[Bfire_bolt()] take 2 arguments:
-[[[[[B(type, direction, damage)]. So in the dismantle spell we have the
-direction passed from [[[[[Bget_aim_dir()] (the function that asks the player
-for a direction), the type of damage is [[[[[BGF_KILL_TRAP], which as you might
-expect disarms traps. And the damage is only 1 because it's not going to hurt
-monsters, just dismantle traps.
-
-#####R=== set_oppose_elec() ===
-
-OK here's another thing. Wander on down to the sparky_skills spell. After the
-appropriate bolt/ball is fired, we have the line:
-
-#####Bif player.oppose_elec == 0 then
-#####B set_oppose_elec(randint(10) + 20 + get_level(constructor_powers, 20)*3)
-#####Bend
-
-This is the bit that grants temporary resist electricity. We've called the
-function [[[[[Bset_oppose_elec(turns)], which sets the player's resist
-electricity to "on" for the time specified in the argument "turns". We're only
-calling this if the player is not already granted temporary resist electricity,
-and we've linked the number of turns it is active to the level of the
-construction skill. I've limited the maximum value of get_level to 20 in this
-instance. A similar idea can be used for temporarily granting levitation,
-extended infravision, protection against evil, resist fire, stuns, cuts and so
-on and so on. Have a look in player.pkg in the source for a full list....
-
- [[[[[gThis file by fearoffours (fearoffours@moppy.co.uk)]
diff --git a/lib/mods/theme/help/lua_spel.txt b/lib/mods/theme/help/lua_spel.txt
deleted file mode 100644
index aa4a532b..00000000
--- a/lib/mods/theme/help/lua_spel.txt
+++ /dev/null
@@ -1,2150 +0,0 @@
-|||||oy
-
-#####R /----------------------------------------\
-#####R < spell.pkg functions helper file >
-#####R \----------------------------------------/
-
-----------------------------------------------------------------------
-
-#####R=== teleport_player_directed ===
-
-#####GDeclaration
- extern void teleport_player_directed(int rad, int dir);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Teleport player, using a distance and a direction as a rough guide.
- *
- * This function is not at all obsessive about correctness.
- * This function allows teleporting into vaults (!)
- */
-
-#####GDescription
-Teleport a player up to "rad" grids away roughly in "dir" direction.
-
-#####GParameters
-> "rad" must not exceed 200. The distance teleported is a minimum of a
- quarter of "rad".
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-
-----------------------------------------------------------------------
-
-#####R=== teleport_away ===
-
-#####GDeclaration
- extern void teleport_away(int m_idx, int dis);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Teleport a monster, normally up to "dis" grids away.
- *
- * Attempt to move the monster at least "dis/2" grids away.
- *
- * But allow variation to prevent infinite loops.
- */
-
-#####GDescription
-Teleport monster indicated by "m_idx" up to "dis" grids away.
-
-#####GParameters
-> "m_idx" is the index of the monster in m_list[].
-> "dis" must not exceed 200. The distance teleported is a minimum of a
- quarter of "dis".
-
-----------------------------------------------------------------------
-
-#####R=== teleport_player ===
-
-#####GDeclaration
- extern void teleport_player(int dis);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Teleport the player to a location up to "dis" grids away.
- *
- * If no such spaces are readily available, the distance may increase.
- * Try very hard to move the player at least a quarter that distance.
- */
-
-#####GDescription
-Teleport player up to "dis" grids away.
-
-#####GParameters
-> "dis" must not exceed 200. The distance teleported is a minimum of a
- quarter of "dis".
-
-----------------------------------------------------------------------
-
-#####R=== teleport_player_to ===
-
-#####GDeclaration
- extern void teleport_player_to(int ny, int nx);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Teleport player to a grid near the given location
- *
- * This function is slightly obsessive about correctness.
- * This function allows teleporting into vaults (!)
- */
-
-#####GDescription
-Teleport player to a grid near the given location ("ny", "nx"). If
-the location is empty, the player goes there, otherwise they go to
-a grid as close as possible to the location.
-
-#####GParameters
-> "ny" is the y co-ordinate of the location.
-> "nx" is the x co-ordinate of the location.
-
-----------------------------------------------------------------------
-
-#####R=== teleport_monster_to ===
-
-#####GDeclaration
- extern void teleport_monster_to(int m_idx, int ny,
- int nx);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Teleport a monster to a grid near the given location
- *
- * This function is slightly obsessive about correctness.
- */
-
-#####GDescription
-Teleport monster indicated by "m_idx" to a grid near the given
-location ("ny", "nx"). If the location is empty, the monster goes
-there, otherwise they go to a grid as close as possible to the
-location.
-
-#####GParameters
-> "m_idx" is the index of the monster in m_list[].
-> "ny" is the y co-ordinate of the location.
-> "nx" is the x co-ordinate of the location.
-
-----------------------------------------------------------------------
-
-#####R=== teleport_player_level ===
-
-#####GDeclaration
- extern void teleport_player_level(void);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Teleport the player one level up or down (random when legal)
- */
-
-#####GDescription
-Teleport the player one level up or down at random.
-
-----------------------------------------------------------------------
-
-#####R=== recall_player ===
-
-#####GDeclaration
- extern void recall_player(void);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Recall the player to town or dungeon
- */
-
-#####GDescription
-Recall the player to town (if in dungeon) or dungeon (if in town).
-
-----------------------------------------------------------------------
-
-#####R=== take_hit ===
-
-#####GDeclaration
- extern void take_hit(int damage, cptr kb_str);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Decreases players hit points and sets death flag if necessary
- *
- * XXX XXX XXX Invulnerability needs to be changed into a "shield"
- *
- * XXX XXX XXX Hack -- this function allows the user to save (or quit)
- * the game when he dies, since the "You die." message is shown before
- * setting the player to "dead".
- */
-
-#####GDescription
-Reduce the player's current hit points by "damage" points. If the
-player dies, "kb_str" is used to record what the player was killed by
-(see high-score table).
-
-#####GParameters
-> "damage" is the amount of damage.
-> "kb_str" is a string describing what killed the player.
-
-----------------------------------------------------------------------
-
-#####R=== take_sanity_hit ===
-
-#####GDeclaration
- extern void take_sanity_hit(int damage, cptr hit_from);
-
-#####GFile
- spells1.c
-
-#####GComment
-/* Decrease player's sanity. This is a copy of the function above. */
-
-#####GDescription
-Reduce the player's current sanity points by "damage" points. If the
-player dies, "hit_from" is used to record what the player was killed
-by (see high-score table).
-
-#####GParameters
-> "damage" is the amount of damage.
-> "hit_from" is a string describing what killed the player.
-
-----------------------------------------------------------------------
-
-#####R=== project ===
-
-#####GDeclaration
- extern bool project(int who, int rad, int y, int x,
- int dam, int typ, int flg);
-
-#####GFile
- spells1.c
-
-#####GComment
-/*
- * Generic "beam"/"bolt"/"ball" projection routine.
- *
- * Input:
- * who: Index of "source" monster (negative for "player")
- * jk -- -2 for traps, only used with project_jump
- * rad: Radius of explosion (0 = beam/bolt, 1 to 9 = ball)
- * y,x: Target location (or location to travel "towards")
- * dam: Base damage roll to apply to affected monsters (or player)
- * typ: Type of damage to apply to monsters (and objects)
- * flg: Extra bit flags (see PROJECT_xxxx in "defines.h")
- *
- * Return:
- * TRUE if any "effects" of the projection were observed, else FALSE
- *
- * Allows a monster (or player) to project a beam/bolt/ball of a given kind
- * towards a given location (optionally passing over the heads of interposing
- * monsters), and have it do a given amount of damage to the monsters (and
- * optionally objects) within the given radius of the final location.
- *
- * A "bolt" travels from source to target and affects only the target grid.
- * A "beam" travels from source to target, affecting all grids passed through.
- * A "ball" travels from source to the target, exploding at the target, and
- * affecting everything within the given radius of the target location.
- *
- * Traditionally, a "bolt" does not affect anything on the ground, and does
- * not pass over the heads of interposing monsters, much like a traditional
- * missile, and will "stop" abruptly at the "target" even if no monster is
- * positioned there, while a "ball", on the other hand, passes over the heads
- * of monsters between the source and target, and affects everything except
- * the source monster which lies within the final radius, while a "beam"
- * affects every monster between the source and target, except for the casting
- * monster (or player), and rarely affects things on the ground.
- *
- * Two special flags allow us to use this function in special ways, the
- * "PROJECT_HIDE" flag allows us to perform "invisible" projections, while
- * the "PROJECT_JUMP" flag allows us to affect a specific grid, without
- * actually projecting from the source monster (or player).
- *
- * The player will only get "experience" for monsters killed by himself
- * Unique monsters can only be destroyed by attacks from the player
- *
- * Only 256 grids can be affected per projection, limiting the effective
- * "radius" of standard ball attacks to nine units (diameter nineteen).
- *
- * One can project in a given "direction" by combining PROJECT_THRU with small
- * offsets to the initial location (see "line_spell()"), or by calculating
- * "virtual targets" far away from the player.
- *
- * One can also use PROJECT_THRU to send a beam/bolt along an angled path,
- * continuing until it actually hits something (useful for "stone to mud").
- *
- * Bolts and Beams explode INSIDE walls, so that they can destroy doors.
- *
- * Balls must explode BEFORE hitting walls, or they would affect monsters
- * on both sides of a wall. Some bug reports indicate that this is still
- * happening in 2.7.8 for Windows, though it appears to be impossible.
- *
- * We "pre-calculate" the blast area only in part for efficiency.
- * More importantly, this lets us do "explosions" from the "inside" out.
- * This results in a more logical distribution of "blast" treasure.
- * It also produces a better (in my opinion) animation of the explosion.
- * It could be (but is not) used to have the treasure dropped by monsters
- * in the middle of the explosion fall "outwards", and then be damaged by
- * the blast as it spreads outwards towards the treasure drop location.
- *
- * Walls and doors are included in the blast area, so that they can be
- * "burned" or "melted" in later versions.
- *
- * This algorithm is intended to maximise simplicity, not necessarily
- * efficiency, since this function is not a bottleneck in the code.
- *
- * We apply the blast effect from ground zero outwards, in several passes,
- * first affecting features, then objects, then monsters, then the player.
- * This allows walls to be removed before checking the object or monster
- * in the wall, and protects objects which are dropped by monsters killed
- * in the blast, and allows the player to see all affects before he is
- * killed or teleported away. The semantics of this method are open to
- * various interpretations, but they seem to work well in practice.
- *
- * We process the blast area from ground-zero outwards to allow for better
- * distribution of treasure dropped by monsters, and because it provides a
- * pleasing visual effect at low cost.
- *
- * Note that the damage done by "ball" explosions decreases with distance.
- * This decrease is rapid, grids at radius "dist" take "1/dist" damage.
- *
- * Notice the "napalm" effect of "beam" weapons. First they "project" to
- * the target, and then the damage "flows" along this beam of destruction.
- * The damage at every grid is the same as at the "centre" of a "ball"
- * explosion, since the "beam" grids are treated as if they ARE at the
- * centre of a "ball" explosion.
- *
- * Currently, specifying "beam" plus "ball" means that locations which are
- * covered by the initial "beam", and also covered by the final "ball", except
- * for the final grid (the epicentre of the ball), will be "hit twice", once
- * by the initial beam, and once by the exploding ball. For the grid right
- * next to the epicentre, this results in 150% damage being done. The centre
- * does not have this problem, for the same reason the final grid in a "beam"
- * plus "bolt" does not -- it is explicitly removed. Simply removing "beam"
- * grids which are covered by the "ball" will NOT work, as then they will
- * receive LESS damage than they should. Do not combine "beam" with "ball".
- *
- * The array "gy[],gx[]" with current size "grids" is used to hold the
- * collected locations of all grids in the "blast area" plus "beam path".
- *
- * Note the rather complex usage of the "gm[]" array. First, gm[0] is always
- * zero. Second, for N>1, gm[N] is always the index (in gy[],gx[]) of the
- * first blast grid (see above) with radius "N" from the blast centre. Note
- * that only the first gm[1] grids in the blast area thus take full damage.
- * Also, note that gm[rad+1] is always equal to "grids", which is the total
- * number of blast grids.
- *
- * Note that once the projection is complete, (y2,x2) holds the final location
- * of bolts/beams, and the "epicentre" of balls.
- *
- * Note also that "rad" specifies the "inclusive" radius of projection blast,
- * so that a "rad" of "one" actually covers 5 or 9 grids, depending on the
- * implementation of the "distance" function. Also, a bolt can be properly
- * viewed as a "ball" with a "rad" of "zero".
- *
- * Note that if no "target" is reached before the beam/bolt/ball travels the
- * maximum distance allowed (MAX_RANGE), no "blast" will be induced. This
- * may be relevant even for bolts, since they have a "1x1" mini-blast.
- *
- * Note that for consistency, we "pretend" that the bolt actually takes "time"
- * to move from point A to point B, even if the player cannot see part of the
- * projection path. Note that in general, the player will *always* see part
- * of the path, since it either starts at the player or ends on the player.
- *
- * Hack -- we assume that every "projection" is "self-illuminating".
- *
- * Hack -- when only a single monster is affected, we automatically track
- * (and recall) that monster, unless "PROJECT_JUMP" is used.
- *
- * Note that all projections now "explode" at their final destination, even
- * if they were being projected at a more distant destination. This means
- * that "ball" spells will *always* explode.
- *
- * Note that we must call "handle_stuff()" after affecting terrain features
- * in the blast radius, in case the "illumination" of the grid was changed,
- * and "update_view()" and "update_monsters()" need to be called.
- */
-
-#####GDescription
-Generate a beam/bolt/ball starting from "who" with a radius of "rad"
-at target grid "y,x" for "damage" points of "typ" damage. The beam/
-bolt/ball can have various properties as denoted by "flg".
-
-#####GParameters
-> "who" is > 0 (index of monster in m_list[]), < 0 and
- not -100 or -101 (player), -100 or -101 (trap).
-> "rad" is 0 for a beam/bolt and 1-9 for a ball.
-> "y" is the y co-ordinate of the target grid.
-> "x" is the x co-ordinate of the target grid.
-> "dam" is the number of points of damage.
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "flg" is the projection effect
- *****fields.txt*0[PROJECT_fields]
-
-----------------------------------------------------------------------
-
-#####R=== corrupt_player ===
-
-#####GDeclaration
- extern void corrupt_player(void);
-
-#####GFile
- spells1.c
-
-#####GComment
-(none)
-
-#####GDescription
-Swap two of the players stats at random.
-
-----------------------------------------------------------------------
-
-#####R=== grow_trees ===
-
-#####GDeclaration
- extern void grow_trees(int rad);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Grow trees
- */
-
-#####GDescription
-Grow up to (("rad" x "rad") + 11) trees around the player.
-
-#####GParameters
-> "rad" is the radius of the area where trees may grow.
-
-----------------------------------------------------------------------
-
-#####R=== hp_player ===
-
-#####GDeclaration
- extern bool hp_player(int num);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Increase players hit points, notice effects
- */
-
-#####GDescription
-Add "num" points to the player's current hit points. The total can
-not exceed the maximum.
-
-#####GParameters
-> "num" is the number of points to add.
-
-----------------------------------------------------------------------
-
-#####R=== heal_insanity ===
-
-#####GDeclaration
- extern bool heal_insanity(int val);
-
-#####GFile
- spells2.c
-
-#####GComment
-/* Heal insanity. */
-
-#####GDescription
-Add "val" points to the player's current sanity points. The total can
-not exceed the maximum.
-
-#####GParameters
-> "val" is the number of points to add.
-
-----------------------------------------------------------------------
-
-#####R=== warding_glyph ===
-
-#####GDeclaration
- extern void warding_glyph(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Leave a "glyph of warding" which prevents monster movement
- */
-
-#####GDescription
-Place a glyph at the player's location. The location must be bare.
-
-----------------------------------------------------------------------
-
-#####R=== explosive_rune ===
-
-#####GDeclaration
- extern void explosive_rune(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-(none)
-
-#####GDescription
-Place a minor glyph (explosive rune) at the player's location. The
-location must be bare.
-
-----------------------------------------------------------------------
-
-#####R=== do_dec_stat ===
-
-#####GDeclaration
- extern bool do_dec_stat(int stat, int mode);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Lose a "point"
- */
-
-#####GDescription
-Attempt to reduce the player's "stat" statistic by a point.
-
-#####GParameters
-> "stat" is the statistic
- *****fields.txt*0[A_fields]
-> "mode" is the type of decrease: temporary, normal, or permanent
- *****fields.txt*0[STAT_DEC_fields]
-
-----------------------------------------------------------------------
-
-#####R=== do_res_stat ===
-
-#####GDeclaration
- extern bool do_res_stat(int stat);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Restore lost "points" in a stat
- */
-
-#####GDescription
-Restore the player's "stat" statistic.
-
-#####GParameters
-> "stat" is the statistic
- *****fields.txt*0[A_fields]
-
-----------------------------------------------------------------------
-
-#####R=== do_inc_stat ===
-
-#####GDeclaration
- extern bool do_inc_stat(int stat);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Gain a "point" in a stat
- */
-
-#####GDescription
-Increase the player's "stat" statistic by a point.
-
-#####GParameters
-> "stat" is the statistic
- *****fields.txt*0[A_fields]
-
-----------------------------------------------------------------------
-
-#####R=== identify_pack ===
-
-#####GDeclaration
- extern void identify_pack(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Identify everything being carried.
- * Done by a potion of "self knowledge".
- */
-
-#####GDescription
-Identify all items in the inventory.
-
-----------------------------------------------------------------------
-
-#####R=== remove_curse ===
-
-#####GDeclaration
- extern bool remove_curse(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Remove most curses
- */
-
-#####GDescription
-Remove all curses except for heavy curses.
-
-----------------------------------------------------------------------
-
-#####R=== remove_all_curse ===
-
-#####GDeclaration
- extern bool remove_all_curse(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Remove all curses
- */
-
-#####GDescription
-Remove all curses including heavy curses.
-
-----------------------------------------------------------------------
-
-#####R=== restore_level ===
-
-#####GDeclaration
- extern bool restore_level(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Restores any drained experience
- */
-
-#####GDescription
-Restore all drained experience points (if any).
-
-----------------------------------------------------------------------
-
-#####R=== self_knowledge ===
-
-#####GDeclaration
- extern void self_knowledge(FILE *fff);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * self-knowledge... idea from nethack. Useful for determining powers and
- * resistances of items. It saves the screen, clears it, then starts listing
- * attributes, a screenful at a time. (There are a LOT of attributes to
- * list. It will probably take 2 or 3 screens for a powerful character whose
- * using several artifacts...) -CFT
- *
- * It is now a lot more efficient. -BEN-
- *
- * See also "identify_fully()".
- *
- * XXX XXX XXX Use the "show_file()" method, perhaps.
- */
-
-#####GDescription
-Show all attributes including racial powers, mutations, and equipment
-effects.
-
-#####GParameters
-> "*ffff" points to a file (write info to file) or is NULL (write info
- to screen).
-
-----------------------------------------------------------------------
-
-#####R=== lose_all_info ===
-
-#####GDeclaration
- extern bool lose_all_info(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Forget everything
- */
-
-#####GDescription
-Forget about objects and the map.
-
-----------------------------------------------------------------------
-
-#####R=== detect_traps ===
-
-#####GDeclaration
- extern bool detect_traps(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all traps on current panel
- */
-
-#####GDescription
-Detect all traps on current panel.
-
-----------------------------------------------------------------------
-
-#####R=== detect_doors ===
-
-#####GDeclaration
- extern bool detect_doors(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all doors on current panel
- */
-
-#####GDescription
-Detect all doors on current panel.
-
-----------------------------------------------------------------------
-
-#####R=== detect_stairs ===
-
-#####GDeclaration
- extern bool detect_stairs(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all stairs on current panel
- */
-
-#####GDescription
-Detect all stairs on current panel.
-
-----------------------------------------------------------------------
-
-#####R=== detect_treasure ===
-
-#####GDeclaration
- extern bool detect_treasure(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect any treasure on the current panel
- */
-
-#####GDescription
-Detect any treasure on the current panel.
-
-----------------------------------------------------------------------
-
-Field: hack_no_detect_message
-Value: FALSE
-
-----------------------------------------------------------------------
-
-#####R=== detect_objects_gold ===
-
-#####GDeclaration
- extern bool detect_objects_gold(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all "gold" objects on the current panel
- */
-
-#####GDescription
-Detect all objects with the TV_GOLD flag.
-
-----------------------------------------------------------------------
-
-#####R=== detect_objects_normal ===
-
-#####GDeclaration
- extern bool detect_objects_normal(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all "normal" objects on the current panel
- */
-
-#####GDescription
-Detect all objects without the TV_GOLD flag.
-
-----------------------------------------------------------------------
-
-#####R=== detect_objects_magic ===
-
-#####GDeclaration
- extern bool detect_objects_magic(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all "magic" objects on the current panel.
- *
- * This will light up all spaces with "magic" items, including artifacts,
- * ego-items, potions, scrolls, books, rods, wands, staves, amulets, rings,
- * and "enchanted" items of the "good" variety.
- *
- * It can probably be argued that this function is now too powerful.
- */
-
-#####GDescription
-Detect all "magic" objects which are artefacts, ego items, or have one
-of the following flags - TV_AMULET, TV_RING, TV_BATERIE, TV_STAFF,
-TV_WAND, TV_ROD, TV_ROD_MAIN, TV_SCROLL, TV_POTION, TV_POTION2,
-TV_VALARIN_BOOK, TV_MAGERY_BOOK, TV_SHADOW_BOOK, TV_CHAOS_BOOK,
-TV_SPIRIT_BOOK, TV_NETHER_BOOK, TV_DAEMON_BOOK, TV_CRUSADE_BOOK,
-TV_SIGALDRY_BOOK, TV_SYMBIOTIC_BOOK, TV_MUSIC_BOOK.
-
-----------------------------------------------------------------------
-
-#####R=== detect_monsters_normal ===
-
-#####GDeclaration
- extern bool detect_monsters_normal(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all "normal" monsters on the current panel
- */
-
-#####GDescription
-Detect all non-invisible monsters (without RF2_INVISIBLE).
-
-----------------------------------------------------------------------
-
-#####R=== detect_monsters_invis ===
-
-#####GDeclaration
- extern bool detect_monsters_invis(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all "invisible" monsters on current panel
- */
-
-#####GDescription
-Detect all invisible monsters (with RF2_INVISIBLE).
-
-----------------------------------------------------------------------
-
-#####R=== detect_monsters_evil ===
-
-#####GDeclaration
- extern bool detect_monsters_evil(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all "evil" monsters on current panel
- */
-
-#####GDescription
-Detect all evil monsters (with RF3_EVIL).
-
-----------------------------------------------------------------------
-
-#####R=== detect_monsters_good ===
-
-#####GDeclaration
- extern bool detect_monsters_good(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/* Detect good monsters */
-
-#####GDescription
-Detect all good monsters (with RF3_GOOD).
-
-----------------------------------------------------------------------
-
-#####R=== detect_monsters_xxx ===
-
-#####GDeclaration
- extern bool detect_monsters_xxx(u32b match_flag);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * A "generic" detect monsters routine, tagged to flags3
- */
-
-#####GDescription
-Detect all monsters with "match_flag" flag.
-
-#####GParameters
-> "match_flag" can be any RF3_ flag (see defines.h) but only
- RF3_DEMON, RF3_UNDEAD, RF3_GOOD work.
-
-----------------------------------------------------------------------
-
-#####R=== detect_monsters_string ===
-
-#####GDeclaration
- extern bool detect_monsters_string(cptr);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all (string) monsters on current panel
- */
-
-#####GDescription
-Detect all monsters whose default monster character matches a
-character pointed to by "cptr".
-
-#####GParameters
-> "cptr" is a pointer to a single character, eg 'Z' for hounds. For
- available characters, see the "symbol" field of the graphics (G)
- line of r_info.txt.
-
-----------------------------------------------------------------------
-
-#####R=== detect_monsters_nonliving ===
-
-#####GDeclaration
- extern bool detect_monsters_nonliving(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect all "nonliving", "undead" or "demonic" monsters on current panel
- */
-
-#####GDescription
-Detect all non-living monsters (with RF3_NONLIVING, RF3_UNDEAD, or
-RF3_DEMON).
-
-----------------------------------------------------------------------
-
-#####R=== detect_all ===
-
-#####GDeclaration
- extern bool detect_all(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Detect everything
- */
-
-#####GDescription
-Detects traps, doors, stairs, treasure, gold objects, normal objects,
-invisible monsters, normal (visible) monsters.
-
-----------------------------------------------------------------------
-
-#####R=== stair_creation ===
-
-#####GDeclaration
- extern void stair_creation(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Create stairs at the player location
- */
-
-#####GDescription
-Create stairs at the player location. This is not allowed if the grid
-is not empty, the player is not in a dungeon, the player is on a
-special level, the player is in an arena or quest. If the player is
-in the town or wilderness the stairs will go down. If the player is
-on a quest level or at the bottom of a dungeon, the stairs will go up.
-Otherwise there is an even chance the stairs will go up or down.
-
-----------------------------------------------------------------------
-
-#####R=== wall_stone ===
-
-#####GDeclaration
- extern bool wall_stone(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-(none)
-
-#####GDescription
-Create a stone wall on the player's grid. This function uses the
-project() function to create the stone wall. Apparently zero can be
-used as the "who" parameter for the player. See details for the
-project() function elsewhere in this document.
-
-----------------------------------------------------------------------
-
-#####R=== create_artifact ===
-
-#####GDeclaration
- extern bool create_artifact(object_type *o_ptr,
- bool a_scroll, bool get_name);
-
-#####GFile
- randart.c
-
-#####GComment
-(none)
-
-#####GDescription
-Create an artifact from object "*optr".
-
-#####GParameters
-> "*optr* is a pointer to an object
-> "a_scroll" is true if the artifact is created by reading a scroll
-> "get_name" is true if the artifact is to be named by the player (if
- a_scroll is true) or created randomly (a_scroll is false), or false
- if an inscription is used.
-
-----------------------------------------------------------------------
-
-#####R=== ident_spell ===
-
-#####GDeclaration
- extern bool ident_spell(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Identify an object in the inventory (or on the floor)
- * This routine does *not* automatically combine objects.
- * Returns TRUE if something was identified, else FALSE.
- */
-
-#####GDescription
-Identify an object in the inventory (or on the floor).
-
-----------------------------------------------------------------------
-
-#####R=== identify_fully ===
-
-#####GDeclaration
- extern bool identify_fully(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Fully "identify" an object in the inventory -BEN-
- * This routine returns TRUE if an item was identified.
- */
-
-#####GDescription
-Fully "identify" an object in the inventory (or on the floor).
-
-----------------------------------------------------------------------
-
-#####R=== recharge ===
-
-#####GDeclaration
- extern bool recharge(int num);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Recharge a wand/staff/rod from the pack or on the floor.
- * This function has been rewritten in Oangband. -LM-
- *
- * Mage -- Recharge I --> recharge(90)
- * Mage -- Recharge II --> recharge(150)
- * Mage -- Recharge III --> recharge(220)
- *
- * Priest or Necromancer -- Recharge --> recharge(140)
- *
- * Scroll of recharging --> recharge(130)
- * Scroll of *recharging* --> recharge(200)
- *
- * It is harder to recharge high level, and highly charged wands,
- * staffs, and rods. The more wands in a stack, the more easily and
- * strongly they recharge. Staffs, however, each get fewer charges if
- * stacked.
- *
- * XXX XXX XXX Beware of "sliding index errors".
- */
-
-#####GDescription
-Recharge an object in the inventory (or on the floor) with "num"
-power.
-
-#####GParameters
-> "num" is the power used in recharging. It is compared to the
- object's level to determine whether the item is recharged
- successfully or destroyed. If it is recharged, it also determines
- how many charges are added, or how much recharge time is reduced.
-
-----------------------------------------------------------------------
-
-#####R=== aggravate_monsters ===
-
-#####GDeclaration
- extern void aggravate_monsters(int who);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Wake up all monsters, and speed up "los" monsters.
- */
-
-#####GDescription
-Aggravate monsters, originating from "who".
-
-#####GParameters
-> "who" is the index of monster in m_list[] (1 if it is the player)
- which triggers the aggravation;
-
-----------------------------------------------------------------------
-
-#####R=== genocide ===
-
-#####GDeclaration
- extern bool genocide(bool player_cast);
-
-#####GFile
- spells2.c
-
-#####GComment
-(none)
-
-#####GDescription
-Genocide a monster race.
-
-#####GParameters
-> "player_cast" is true if the player cast the spell so the player can
- take damage.
-
-----------------------------------------------------------------------
-
-#####R=== mass_genocide ===
-
-#####GDeclaration
- extern bool mass_genocide(bool player_cast);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Delete all nearby (non-unique) monsters
- */
-
-#####GDescription
-Delete all nearby (non-unique) monsters.
-
-#####GParameters
-> "player_cast" is true if the player cast the spell so the player can
- take damage.
-
-----------------------------------------------------------------------
-
-#####R=== probing ===
-
-#####GDeclaration
- extern bool probing(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Probe nearby monsters
- */
-
-#####GDescription
-Probe all nearby monsters.
-
-----------------------------------------------------------------------
-
-#####R=== banish_evil ===
-
-#####GDeclaration
- extern bool banish_evil(int dist);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Banish evil monsters
- */
-
-#####GDescription
-Banish nearby evil monsters doing "dist" points of GF_AWAY_EVIL
-damage.
-
-#####GParameters
-> "dist" is the amount of damage done to each monster.
-
-----------------------------------------------------------------------
-
-#####R=== dispel_evil ===
-
-#####GDeclaration
- extern bool dispel_evil(int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Dispel evil monsters
- */
-
-#####GDescription
-Dispel nearby evil monsters doing "dam" points of GF_DISP_EVIL
-damage.
-
-#####GParameters
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== dispel_good ===
-
-#####GDeclaration
- extern bool dispel_good(int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Dispel good monsters
- */
-
-#####GDescription
-Dispel nearby good monsters doing "dam" points of GF_DISP_GOOD
-damage.
-
-#####GParameters
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== dispel_undead ===
-
-#####GDeclaration
- extern bool dispel_undead(int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Dispel undead monsters
- */
-
-#####GDescription
-Dispel nearby undead monsters doing "dam" points of GF_DISP_UNDEAD
-damage.
-
-#####GParameters
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== dispel_monsters ===
-
-#####GDeclaration
- extern bool dispel_monsters(int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Dispel all monsters
- */
-
-#####GDescription
-Dispel all nearby monsters doing "dam" points of GF_DISP_ALL
-damage.
-
-#####GParameters
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== dispel_living ===
-
-#####GDeclaration
- extern bool dispel_living(int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Dispel 'living' monsters
- */
-
-#####GDescription
-Dispel nearby living monsters doing "dam" points of GF_DISP_LIVING
-damage.
-
-#####GParameters
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== dispel_demons ===
-
-#####GDeclaration
- extern bool dispel_demons(int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Dispel demons
- */
-
-#####GDescription
-Dispel nearby demon monsters doing "dam" points of GF_DISP_DEMON
-damage.
-
-#####GParameters
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== turn_undead ===
-
-#####GDeclaration
- extern bool turn_undead(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Turn undead
- */
-
-#####GDescription
-Turn nearby undead monsters doing a point of GF_TURN_UNDEAD damage for
-each player level.
-
-----------------------------------------------------------------------
-
-#####R=== wipe ===
-
-#####GDeclaration
- extern void wipe(int y1, int x1, int r);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Wipe -- Empties a part of the dungeon
- */
-
-#####GDescription
-Delete monsters and objects from an area of the dungeon centred at
-grid "y1,x1" for a radius "r". This does not work on special levels or
-quests. The player may be blinded. The player forgets the affected
-area and it becomes dark. All grids become floor.
-
-#####GParameters
-> "y1" is the y-coordinate of the wipe's origin.
-> "x1" is the x-coordinate of the wipe's origin.
-> "r" is the radius of the wipe.
-
-----------------------------------------------------------------------
-
-#####R=== destroy_area ===
-
-#####GDeclaration
- extern void destroy_area(int y1, int x1, int r,
- bool full);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * The spell of destruction
- *
- * This spell "deletes" monsters (instead of "killing" them).
- *
- * Later we may use one function for both "destruction" and
- * "earthquake" by using the "full" to select "destruction".
- */
-
-#####GDescription
-Delete monsters and objects from an area of the dungeon centred at
-grid "y1,x1" for a radius "r". This does not work on special levels or
-quests. The epicentre is NOT affected. The player may be blinded. The
-player forgets the affected area and it becomes dark. The grids can
-become granite, quartz, magma, or floor.
-
-#####GParameters
-> "y1" is the y-coordinate of the destruction's origin.
-> "x1" is the x-coordinate of the destruction's origin.
-> "r" is the radius of the destruction.
-> "full" is currently unused.
-
-----------------------------------------------------------------------
-
-#####R=== earthquake ===
-
-#####GDeclaration
- extern void earthquake(int cy, int cx, int r);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Induce an "earthquake" of the given radius at the given location.
- *
- * This will turn some walls into floors and some floors into walls.
- *
- * The player will take damage and "jump" into a safe grid if possible,
- * otherwise, he will "tunnel" through the rubble instantaneously.
- *
- * Monsters will take damage, and "jump" into a safe grid if possible,
- * otherwise they will be "buried" in the rubble, disappearing from
- * the level in the same way that they do when genocided.
- *
- * Note that thus the player and monsters (except eaters of walls and
- * passers through walls) will never occupy the same grid as a wall.
- * Note that as of now (2.7.8) no monster may occupy a "wall" grid, even
- * for a single turn, unless that monster can pass_walls or kill_walls.
- * This has allowed massive simplification of the "monster" code.
- */
-
-#####GDescription
-Create an earthquake centred on grid "cy,cx" with a radius of "r".
-This does not work on quest levels. The epicentre is NOT affected.
-Only about 15% of the grids are affected. The player takes 300 points
-of damage if they can't be moved to a safe grid, otherwise damage is
-from 10 to 40 points. The player forgets the affected area and it
-becomes dark. The grids can become granite, quartz, magma, or floor.
-
-#####GParameters
-Parameters:
-> "cy" is the y-coordinate of the earthquake origin.
-> "cx" is the x-coordinate of the earthquake origin.
-> "r" is the radius of the earthquake.
-
-----------------------------------------------------------------------
-
-#####R=== map_area ===
-
-#####GDeclaration
- extern void map_area(void);
-
-#####GFile
- cave.c
-
-#####GComment
-/*
- * Hack -- map the current panel (plus some) ala "magic mapping"
- */
-
-#####GDescription
-Map the current panel plus up to 10 grids up and down, and up to 20
-grids left and right.
-
-----------------------------------------------------------------------
-
-#####R=== wiz_lite ===
-
-#####GDeclaration
- extern void wiz_lite(void);
-
-#####GFile
- cave.c
-
-#####GComment
-/*
- * Light up the dungeon using "clairvoyance"
- *
- * This function "illuminates" every grid in the dungeon, memorises all
- * "objects", memorises all grids as with magic mapping, and, under the
- * standard option settings (view_perma_grids but not view_torch_grids)
- * memorises all floor grids too.
- *
- * Note that if "view_perma_grids" is not set, we do not memorise floor
- * grids, since this would defeat the purpose of "view_perma_grids", not
- * that anyone seems to play without this option.
- *
- * Note that if "view_torch_grids" is set, we do not memorise floor grids,
- * since this would prevent the use of "view_torch_grids" as a method to
- * keep track of what grids have been observed directly.
- */
-
-#####GDescription
-Light up the entire dungeon and show all monsters and objects.
-
-----------------------------------------------------------------------
-
-#####R=== wiz_lite_extra ===
-
-#####GDeclaration
- extern void wiz_lite_extra(void);
-
-#####GFile
- cave.c
-
-#####GComment
-(none)
-
-#####GDescription
-Light up the entire dungeon and show all monsters and objects. All
-squares are lit and remembered.
-
-----------------------------------------------------------------------
-
-#####R=== wiz_dark ===
-
-#####GDeclaration
- extern void wiz_dark(void);
-
-#####GFile
- cave.c
-
-#####GComment
-/*
- * Forget the dungeon map (ala "Thinking of Maud...").
- */
-
-#####GDescription
-Forget all grids and objects. All grids become dark.
-
-----------------------------------------------------------------------
-
-#####R=== lite_room ===
-
-#####GDeclaration
- extern void lite_room(int y1, int x1);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Illuminate any room containing the given location.
- */
-
-#####GDescription
-Light up the room (if any) of grid "y1,x1".
-
-#####GParameters
-> "y1" is the y-coordinate of the grid.
-> "x1" is the x-coordinate of the grid.
-
-----------------------------------------------------------------------
-
-#####R=== unlite_room ===
-
-#####GDeclaration
- extern void unlite_room(int y1, int x1);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Darken all rooms containing the given location
- */
-
-#####GDescription
-Darken all rooms (if any) of grid "y1,x1".
-
-#####GParameters
-> "y1" is the y-coordinate of the grid.
-> "x1" is the x-coordinate of the grid.
-
-----------------------------------------------------------------------
-
-#####R=== lite_area ===
-
-#####GDeclaration
- extern bool lite_area(int dam, int rad);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Hack -- call light around the player
- * Affect all monsters in the projection radius
- */
-
-#####GDescription
-Light up the room (if any) of the player's grid. Monsters take "dam"
-points of GF_LITE_WEAK damage if they are within "r" grids of the
-player.
-
-#####GParameters
-> "dam" is the number of points of damage.
-> "rad" is the radius of the effect of the damage.
-
-----------------------------------------------------------------------
-
-#####R=== unlite_area ===
-
-#####GDeclaration
- extern bool unlite_area(int dam, int rad);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Hack -- call darkness around the player
- * Affect all monsters in the projection radius
- */
-
-#####GDescription
-Darken the room (if any) of the player's grid. Monsters take "dam"
-points of GF_DARK_WEAK damage if they are within "r" grids of the
-player.
-
-#####GParameters
-> "dam" is the number of points of damage.
-> "rad" is the radius of the effect of the damage.
-
-----------------------------------------------------------------------
-
-#####R=== fire_ball_beam ===
-
-#####GDeclaration
- extern bool fire_ball_beam(int typ, int dir, int dam,
- int rad);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a ball-beamed spell
- * Stop if we hit a monster, act as a "ball"
- * Allow "target" mode to pass over monsters
- * Affect grids, objects, and monsters
- */
-
-#####GDescription
-Cast a ball-beamed spell of type "typ" in direction "dir" for damage
-"dam" points with a radius of "rad" grids.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-> "rad" is the radius of the effect of the damage (must be <= 16).
-
-----------------------------------------------------------------------
-
-#####R=== fire_ball ===
-
-#####GDeclaration
- extern bool fire_ball(int typ, int dir, int dam, int rad);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a ball spell
- * Stop if we hit a monster, act as a "ball"
- * Allow "target" mode to pass over monsters
- * Affect grids, objects, and monsters
- */
-
-#####GDescription
-Cast a ball spell of type "typ" in direction "dir" for "dam" points of
-damage. The ball has a radius of "rad" grids.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-> "rad" is the radius of the effect of the damage (must be <= 16).
-
-----------------------------------------------------------------------
-
-#####R=== fire_bolt ===
-
-#####GDeclaration
- extern bool fire_bolt(int typ, int dir, int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a bolt spell
- * Stop if we hit a monster, as a "bolt"
- * Affect monsters (not grids or objects)
- */
-
-#####GDescription
-Cast a bolt spell of type "typ" in direction "dir" for "dam" points of
-damage.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== fire_beam ===
-
-#####GDeclaration
- extern bool fire_beam(int typ, int dir, int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a beam spell
- * Pass through monsters, as a "beam"
- * Affect monsters (not grids or objects)
- */
-
-#####GDescription
-Cast a beam spell of type "typ" in direction "dir" for "dam" points of
-damage.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== fire_druid_ball ===
-
-#####GDeclaration
- extern bool fire_druid_ball(int typ, int dir, int dam,
- int rad);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a druidic ball spell
- * Stop if we hit a monster, act as a "ball"
- * Allow "target" mode to pass over monsters
- * Affect grids, objects, and monsters
- */
-
-#####GDescription
-Cast a ball spell of type "typ" in direction "dir" for "dam" points of
-damage. The ball has a radius of "rad" grids. The spell follows a mana
-path.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-> "rad" is the radius of the effect of the damage (must be <= 16).
-
-----------------------------------------------------------------------
-
-#####R=== fire_druid_bolt ===
-
-#####GDeclaration
- extern bool fire_druid_bolt(int typ, int dir, int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a druidic bolt spell
- * Stop if we hit a monster, as a "bolt"
- * Affect monsters (not grids or objects)
- */
-
-#####GDescription
-Cast a bolt spell of type "typ" in direction "dir" for "dam" points of
-damage. The spell follows a mana path.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== fire_druid_beam ===
-
-#####GDeclaration
- extern bool fire_druid_beam(int typ, int dir, int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a druidistic beam spell
- * Pass through monsters, as a "beam"
- * Affect monsters (not grids or objects)
- */
-
-#####GDescription
-Cast a beam spell of type "typ" in direction "dir" for "dam" points of
-damage. The spell follows a mana path.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== fire_bolt_or_beam ===
-
-#####GDeclaration
- extern bool fire_bolt_or_beam(int prob, int typ, int dir,
- int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Cast a bolt spell, or rarely, a beam spell
- */
-
-#####GDescription
-Cast a beam (chance of "prob" in 100) or bolt spell of type "typ" in
-direction "dir" for "dam" points of damage.
-
-#####GParameters
-> "prob" is the number of times out of 100 that the bolt will actually
- be a beam. Obviously this value should range from 1 to 99 (0 will
- always give a beam, 100 or higher will always give a beam. There are
- separate functions for these cases).
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-#####R=== alchemy ===
-
-#####GDeclaration
- extern bool alchemy(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-/* Turns an object into gold, gain some of its value in a shop */
-
-#####GDescription
-The player selects an object (and quantity if it applies) from the
-inventory or the floor and attempts to turn it into gold. If the
-price of the item is < 0 then the player gains nothing (fool's gold),
-otherwise the player gets a third of the price in gold. Artifacts are
-not affected.
-
-----------------------------------------------------------------------
-
-#####R=== alter_reality ===
-
-#####GDeclaration
- extern void alter_reality(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-(none)
-
-#####GDescription
-The player leaves the level immediately.
-
-----------------------------------------------------------------------
-
-#####R=== teleport_swap ===
-
-#####GDeclaration
- extern void teleport_swap(int dir);
-
-#####GFile
- spells2.c
-
-#####GComment
-(none)
-
-#####GDescription
-Player swaps places with target in direction "dir". The target must be
-a monster. It will not work if the space-time continuum can not be
-disrupted or if the monster resists teleportation.
-
-----------------------------------------------------------------------
-
-#####R=== project_meteor ===
-
-#####GDeclaration
- extern void project_meteor(int radius, int typ, int dam,
- u32b flg);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Apply a "project()" a la meteor shower
- */
-
-#####GDescription
-Generate between "rad" and "rad" x 2 ball spells of type "typ" for
-"dam" points of damage. The ball can have various properties as
-denoted by "flg".
-
-#####GParameters
-> "rad" is the minimum number of balls created. "rad" + randint("rad")
- balls are created. Each ball has a radius of 2 grids. Each target
- grid is within 5 grids of the player.
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dam" is the number of points of damage.
-> "flg" is the projection effect
- *****fields.txt*0[PROJECT_fields]
-
-----------------------------------------------------------------------
-
-#####R=== passwall ===
-
-#####GDeclaration
- extern bool passwall(int dir, bool safe);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Send the player shooting through walls in the given direction until
- * they reach a non-wall space, or a monster, or a permanent wall.
- */
-
-#####GDescription
-Move the player through walls in direction "dir". if "safe" then the
-player can not end up in a wall - if they do, the wall is replaced by
-a floor. This does not work in the wilderness, on quest levels, or if
-teleport is not allowed. Stopping on monsters or inside vaults is not
-allowed.
-
-#####GParameters
-> "dir" must be from 0 to 9. It can not be 5.
- *****fields.txt*0[direction]
-> "safe" must be true if the player is not to be trapped in a wall
- when the movement is finished.
-
-----------------------------------------------------------------------
-
-#####R=== project_hook ===
-
-#####GDeclaration
- extern bool project_hook(int typ, int dir, int dam,
- int flg);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Hack -- apply a "projection()" in a direction (or at the target)
- */
-
-#####GDescription
-Generate a beam/bolt of type "typ" in direction "dir" (or at a target)
-for "dam" points of damage. The beam/bolt can have various properties
-as denoted by "flg".
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dir" must be from 0 to 9. 5 means use the current target.
- *****fields.txt*0[direction]
-> "dam" is the number of points of damage.
-> "flg" is the projection effect
- *****fields.txt*0[PROJECT_fields]
-
-----------------------------------------------------------------------
-
-#####R=== reset_recall ===
-
-#####GDeclaration
- extern bool reset_recall(void);
-
-#####GFile
- spells2.c
-
-#####GComment
-(none)
-
-#####GDescription
-Ask the player for a dungeon and appropriate level within the dungeon.
-The player can not specify a dungeon they have not gone to yet. If the
-player chooses levels 99 or 100, the level is set to 98.
-
-----------------------------------------------------------------------
-
-#####R=== get_aim_dir ===
-
-#####GDeclaration
- extern bool get_aim_dir(int *dp = 0);
-
-#####GFile
- xtra2.c
-
-#####GComment
-/*
- * Get an "aiming direction" from the user.
- *
- * The "dir" is loaded with 1,2,3,4,6,7,8,9 for "actual direction", and
- * "0" for "current target", and "-1" for "entry aborted".
- *
- * Note that "Force Target", if set, will pre-empt user interaction,
- * if there is a usable target already set.
- *
- * Note that confusion over-rides any (explicit?) user choice.
- */
-
-#####GDescription
-Get an aiming direction from the user and store it in "dp". A target
-can be selected. If the player is confused, the direction will be
-random.
-
-#####GParameters
-> "dp" = player direction.
-
-----------------------------------------------------------------------
-
-#####R=== project_hack ===
-
-#####GDeclaration
- extern bool project_hack(int typ, int dam);
-
-#####GFile
- spells2.c
-
-#####GComment
-/*
- * Apply a "project()" directly to all viewable monsters
- *
- * Note that affected monsters are NOT auto-tracked by this usage.
- */
-
-#####GDescription
-Generate beam/bolt spells of type "typ" for "dam" points of damage to
-all viewable monsters in line of site.
-
-#####GParameters
-> "typ" is the type of damage
- *****fields.txt*0[GF_fields]
-> "dam" is the number of points of damage.
-
-----------------------------------------------------------------------
-
-
-Back to the *****lua.hlp*0[lua help index] .
-
- [[[[[gThis file by Chris Hadgis]
diff --git a/lib/mods/theme/help/lua_util.txt b/lib/mods/theme/help/lua_util.txt
deleted file mode 100644
index 8886a2b4..00000000
--- a/lib/mods/theme/help/lua_util.txt
+++ /dev/null
@@ -1,898 +0,0 @@
-|||||oy
-
-#####R /----------------------------------------\
-#####R < util.pkg functions helper file >
-#####R \----------------------------------------/
-
-----------------------------------------------------------------------
-
-#####R=== bst ===
-
-#####GDeclaration
- s32b bst(s32b what, s32b t);
-
-#####GFile
- util.c
-
-#####GComment
-/*
- * Break scalar time
- */
-
-#####GDescription
-Return the minute, hour, day, or year for turn "t". One turn takes 7.5
-seconds.
-
-#####GParameters
-> "what" is the unit to be returned and must be one of
- MINUTE (number of turns per minute, which is 8)
- HOUR (number of turns per hour, which is 480)
- DAY (number of turns per day, which is 11,520)
- YEAR (number of turns per year, which is 4,204,800)
-> "t" is the number of turns.
-
-----------------------------------------------------------------------
-
-#####R=== path_build ===
-
-#####GDeclaration
- errr path_build(char *buf, int max, cptr path, cptr file);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Create a new path by appending a file (or directory) to a path
-*
-* This requires no special processing on simple machines, except
-* for verifying the size of the filename, but note the ability to
-* bypass the given "path" with certain special file-names.
-*
-* Note that the "file" may actually be a "sub-path", including
-* a path and a file.
-*
-* Note that this function yields a path which must be "parsed"
-* using the "parse" function above.
-*/
-
-#####GDescription
-Append file "file" to path "path" and return the result in "buf". The
-length of "buf" is a maximum of "max" characters. If "file" starts
-with '~' then return "file". If "file" starts with the path separator
-and the path separator is not blank then return "file". If there is no
-path then return "file". Otherwise return "path" + path separator +
-"file". The path separator is defined in "H-config.h".
-
-#####GParameters
-> "buf" contains the new path.
-> "max" is the maximum number of characters allowed in "buf".
-> "path" is the original path.
-> "file" is the original file.
-
-----------------------------------------------------------------------
-
-#####R=== move_cursor ===
-
-#####GDeclaration
- void move_cursor(int row, int col);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Move the cursor
-*/
-
-#####GDescription
-Move the cursor to row "row" and column "col".
-
-#####GParameters
-> "row" is the row the cursor is to be moved to.
-> "col" is the column the cursor is to be moved to.
-
-----------------------------------------------------------------------
-
-#####R=== inkey ===
-
-#####GDeclaration
- char inkey(void);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Get a keypress from the user.
-*
-* This function recognises a few "global parameters". These are variables
-* which, if set to TRUE before calling this function, will have an effect
-* on this function, and which are always reset to FALSE by this function
-* before this function returns. Thus they function just like normal
-* parameters, except that most calls to this function can ignore them.
-*
-* If "inkey_xtra" is TRUE, then all pending keypresses will be flushed,
-* and any macro processing in progress will be aborted. This flag is
-* set by the "flush()" function, which does not actually flush anything
-* itself, but rather, triggers delayed input flushing via "inkey_xtra".
-*
-* If "inkey_scan" is TRUE, then we will immediately return "zero" if no
-* keypress is available, instead of waiting for a keypress.
-*
-* If "inkey_base" is TRUE, then all macro processing will be bypassed.
-* If "inkey_base" and "inkey_scan" are both TRUE, then this function will
-* not return immediately, but will wait for a keypress for as long as the
-* normal macro matching code would, allowing the direct entry of macro
-* triggers. The "inkey_base" flag is extremely dangerous!
-*
-* If "inkey_flag" is TRUE, then we will assume that we are waiting for a
-* normal command, and we will only show the cursor if "hilite_player" is
-* TRUE (or if the player is in a store), instead of always showing the
-* cursor. The various "main-xxx.c" files should avoid saving the game
-* in response to a "menu item" request unless "inkey_flag" is TRUE, to
-* prevent savefile corruption.
-*
-* If we are waiting for a keypress, and no keypress is ready, then we will
-* refresh (once) the window which was active when this function was called.
-*
-* Note that "back-quote" is automatically converted into "escape" for
-* convenience on machines with no "escape" key. This is done after the
-* macro matching, so the user can still make a macro for "backquote".
-*
-* Note the special handling of "ascii 30" (ctrl-caret, aka ctrl-shift-six)
-* and "ascii 31" (ctrl-underscore, aka ctrl-shift-minus), which are used to
-* provide support for simple keyboard "macros". These keys are so strange
-* that their loss as normal keys will probably be noticed by nobody. The
-* "ascii 30" key is used to indicate the "end" of a macro action, which
-* allows recursive macros to be avoided. The "ascii 31" key is used by
-* some of the "main-xxx.c" files to introduce macro trigger sequences.
-*
-* Hack -- we use "ascii 29" (ctrl-right-bracket) as a special "magic" key,
-* which can be used to give a variety of "sub-commands" which can be used
-* any time. These sub-commands could include commands to take a picture of
-* the current screen, to start/stop recording a macro action, etc.
-*
-* If "angband_term[0]" is not active, we will make it active during this
-* function, so that the various "main-xxx.c" files can assume that input
-* is only requested (via "Term_inkey()") when "angband_term[0]" is active.
-*
-* Mega-Hack -- This function is used as the entry point for clearing the
-* "signal_count" variable, and of the "character_saved" variable.
-*
-* Hack -- Note the use of "inkey_next" to allow "keymaps" to be processed.
-*
-* Mega-Hack -- Note the use of "inkey_hack" to allow the "Borg" to steal
-* control of the keyboard from the user.
-*/
-
-#####GDescription
-Get a keypress from the user.
-
-----------------------------------------------------------------------
-
-#####R=== cmsg_print ===
-
-#####GDeclaration
- void cmsg_print(byte color, cptr msg);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Output a message to the top line of the screen.
-*
-* Break long messages into multiple pieces (40-72 chars).
-*
-* Allow multiple short messages to "share" the top line.
-*
-* Prompt the user to make sure he has a chance to read them.
-*
-* These messages are memorised for later reference (see above).
-*
-* We could do "Term_fresh()" to provide "flicker" if needed.
-*
-* The global "msg_flag" variable can be cleared to tell us to
-* "erase" any "pending" messages still on the screen.
-*
-* XXX XXX XXX Note that we must be very careful about using the
-* "msg_print()" functions without explicitly calling the special
-* "msg_print(NULL)" function, since this may result in the loss
-* of information if the screen is cleared, or if anything is
-* displayed on the top line.
-*
-* XXX XXX XXX Note that "msg_print(NULL)" will clear the top line
-* even if no messages are pending. This is probably a hack.
-*/
-
-#####GDescription
-In color "color", output message "msg" to the top line of the screen.
-If the message is blank or has more than 1000 characters, nothing is
-printed. Long messages are split after the 40th character and before
-the 72nd character.
-
-#####GParameters
-> "color" is the color of the message.
- *****fields.txt*0[colors]
-> "msg" is the message.
-
-----------------------------------------------------------------------
-
-#####R=== msg_print ===
-
-#####GDeclaration
- void msg_print(cptr msg);
-
-#####GFile
- util.c
-
-#####GComment
-/* Hack -- for compatibility and easy sake */
-
-#####GDescription
-Print message "msg" in white (see cmsg_print() above).
-
-#####GParameters
-> "msg" is the message.
-
-----------------------------------------------------------------------
-
-#####R=== screen_save ===
-
-#####GDeclaration
- void screen_save(void);
-
-#####GFile
- util.c
-
-#####GComment
-/*
- * Save the screen, and increase the "icky" depth.
- *
- * This function must match exactly one call to "screen_load()".
- */
-
-#####GDescription
-Save a screen shot.
-
-----------------------------------------------------------------------
-
-#####R=== screen_load ===
-
-#####GDeclaration
- void screen_load(void);
-
-#####GFile
- util.c
-
-#####GComment
-/*
- * Load the screen, and decrease the "icky" depth.
- *
- * This function must match exactly one call to "screen_save()".
- */
-
-#####GDescription
-Load a previously saved screen shot.
-
-----------------------------------------------------------------------
-
-#####R=== c_put_str ===
-
-#####GDeclaration
- void c_put_str(byte attr, cptr str, int row, int col);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Display a string on the screen using an attribute.
-*
-* At the given location, using the given attribute, if allowed,
-* add the given string. Do not clear the line.
-*/
-
-#####GDescription
-Put string "str" at row "row" and column "col" with attribute "attr".
-
-#####GParameters
-> "attr" is the color of the message.
- *****fields.txt*0[colors]
-> "msg" is the message.
-> "row" is the row the message is to be printed at.
-> "col" is the column the message is to be printed at.
-
-----------------------------------------------------------------------
-
-#####R=== c_prt ===
-
-#####GDeclaration
- void c_prt(byte attr, cptr str, int row, int col);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Display a string on the screen using an attribute, and clear
-* to the end of the line.
-*/
-
-#####GDescription
-Clear row "row" from column "col". Put string "str" at "row", "col"
-with attribute "attr".
-
-#####GParameters
-> "attr" is the color of the message.
- *****fields.txt*0[colors]
-> "msg" is the message.
-> "row" is the row the message is to be printed at.
-> "col" is the column the message is to be printed at.
-
-----------------------------------------------------------------------
-
-#####R=== clear_from ===
-
-#####GDeclaration
- void clear_from(int row);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Clear part of the screen
-*/
-
-#####GDescription
-Clear the screen from row "row" onwards.
-
-#####GParameters
-> "row" is the first row of the screen to be cleared.
-
-----------------------------------------------------------------------
-
-#####R=== askfor_aux ===
-
-#####GDeclaration
- bool askfor_aux(char *buf, int len);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Get some input at the cursor location.
-* Assume the buffer is initialized to a default string.
-* Note that this string is often "empty" (see below).
-* The default buffer is displayed in yellow until cleared.
-* Pressing RETURN right away accepts the default entry.
-* Normal chars clear the default and append the char.
-* Backspace clears the default or deletes the final char.
-* ESCAPE clears the buffer and the window and returns FALSE.
-* RETURN accepts the current buffer contents and returns TRUE.
-*/
-
-#####GDescription
-Get string "buf" from the screen. "buf" is to be no more than "len"
-bytes. The string starts at the current cursor position. The length
-can not exceed the number of bytes from the cursor to the end of the
-line. Accept user input until the escape or return key is pressed.
-
-#####GParameters
-> "buf" is the string returned from the screen.
-> "len" is the length of the string. If it is <1 it is forced to 1.
-
-----------------------------------------------------------------------
-
-#####R=== get_string ===
-
-#####GDeclaration
- bool get_string(cptr prompt, char *buf, int len);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Get a string from the user
-*
-* The "prompt" should take the form "Prompt: "
-*
-* Note that the initial contents of the string is used as
-* the default response, so be sure to "clear" it if needed.
-*
-* We clear the input, and return FALSE, on "ESCAPE".
-*/
-
-#####GDescription
-Print prompt "prompt" at the top-left corner of the screen and return
-response "buf" which will have a maximum length "length". If ESCAPE
-is entered, the function returns FALSE, otherwise it returns TRUE.
-
-#####GParameters
-> "prompt" is the prompt for input.
-> "buf" is the returned response.
-> "len" is the maximum length of the string.
-
-----------------------------------------------------------------------
-
-#####R=== get_check ===
-
-#####GDeclaration
- bool get_check(cptr prompt);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Verify something with the user
-*
-* The "prompt" should take the form "Query? "
-*
-* Note that "[y/n]" is appended to the prompt.
-*/
-
-#####GDescription
-Ask the user question "prompt" which requires a yes/no answer. The
-prompt appears in the top-left corner of the screen. A response of
-'Y' (either case) returns TRUE. A response of 'N' (either case) or
-ESCAPE returns FALSE.
-
-#####GParameters
-> "prompt" is the question asked. It has a maximum length of 70
- characters.
-
-----------------------------------------------------------------------
-
-#####R=== get_com_lua ===
-
-#####GDeclaration
- bool get_com_lua @ get_com(cptr promtp, int *com);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Prompts for a keypress
-*
-* The "prompt" should take the form "Command: "
-*
-* Returns TRUE unless the character is "Escape"
-*/
-
-#####GDescription
-Ask the user for command "prompt" and return the key press "com". A
-response of ESCAPE returns FALSE. All other responses return TRUE.
-
-#####GParameters
-> "prompt" is the prompt for the key press.
-> "com" is the returned key press.
-
-----------------------------------------------------------------------
-
-#####R=== get_quantity ===
-
-#####GDeclaration
- s32b get_quantity(cptr prompt, s32b max);
-
-#####GFile
- util.c
-
-#####GComment
-/*
-* Request a "quantity" from the user
-*
-* Hack -- allow "command_arg" to specify a quantity
-*/
-
-#####GDescription
-Ask the user for quantity "prompt" of maximum value "max" and return
-a quantity. If the user quantity is higher than the maximum then the
-maximum is returned. If the response is a letter then the maximum is
-returned. If the user quantity is negative then zero is returned.
-
-#####GParameters
-> "prompt" is the prompt for a quantity.
-> "max" is the maximum value allowed.
-
-----------------------------------------------------------------------
-
-#####R=== test_monster_name ===
-
-#####GDeclaration
- int test_monster_name(cptr name);
-
-#####GFile
- util.c
-
-#####GComment
-/*
- * Given monster name as string, return the index in r_info array. Name
- * must exactly match (look out for commas and the like!), or else 0 is
- * returned. Case doesn't matter. -GSN-
- */
-
-#####GDescription
-Return the monster index for monster with name "name". If no match is
-found then zero is returned.
-
-#####GParameters
-> "name" is the monster name.
-
-----------------------------------------------------------------------
-
-#####R=== test_item_name ===
-
-#####GDeclaration
- int test_item_name(cptr name);
-
-#####GFile
- util.c
-
-#####GComment
-/*
- * Given item name as string, return the index in k_info array. Name
- * must exactly match (look out for commas and the like!), or else 0 is
- * returned. Case doesn't matter. -DG-
- */
-
-#####GDescription
-Return the item index for item with name "name". If no match is found
-then zero is returned.
-
-#####GParameters
-> "name" is the item name.
-
-----------------------------------------------------------------------
-
-#####R=== luck ===
-
-#####GDeclaration
- int luck(int min, int max);
-
-#####GFile
- xtra1.c
-
-#####GComment
-/*
- * Return a luck number between a certain range
- */
-
-#####GDescription
-Return a number for luck between minimum "min" and maximum "max". The
-value begins with the player's current luck. The value is forced to
-be between -30 and +30. 30 is added to give a value between 0 and 60.
-The value is multiplied by the range (maximum - minimum) and divided
-by 60. The value is increased by the minimum. The value is returned.
-
-For example, if the player's current luck is 15, the minimum is -10,
-and the maximum is 10 (range 20), then the value returned is
-(45 * 20) / 60 which is 900 / 60 which is 15 + the minimum -10 gives
-a returned value of 5.
-
-#####GParameters
-> "min" is the minimum luck.
-> "max" is the maximum luck. Beware: this should be greater than the
- minimum but it is not checked!
-
-----------------------------------------------------------------------
-
-#####R=== get_player_race_name ===
-
-#####GDeclaration
- cptr get_player_race_name(int pr, int ps);
-
-#####GFile
- util.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the name for player race "pr" and player sub-race "ps".
-
-#####GParameters
-> "pr" is the index for player race.
-> "ps" is the index for player sub-race.
-
-----------------------------------------------------------------------
-
-#####R=== quit ===
-
-#####GDeclaration
- void quit(cptr str);
-
-#####GFile
- z-util.c
-
-#####GComment
-/*
- * Exit (ala "exit()"). If 'str' is NULL, do "exit(0)".
- * If 'str' begins with "+" or "-", do "exit(atoi(str))".
- * Otherwise, plog() 'str' and exit with an error code of -1.
- * But always use 'quit_aux', if set, before anything else.
- */
-
-#####GDescription
-Quit the game. If "str" is a string then write the string to the
-error file or screen. If "str" is a number then exit with the
-number as the exit code.
-
-#####GParameters
-> "str" is an error message or exit code.
-
-----------------------------------------------------------------------
-
-#####R=== dump_hooks ===
-
-#####GDeclaration
- void dump_hooks();
-
-#####GFile
- plots.c
-
-#####GComment
-(none)
-
-#####GDescription
-Print the name and type (C or Lua) of hooks in the hook list.
-
-----------------------------------------------------------------------
-
-#####R=== add_hook_script ===
-
-#####GDeclaration
- void add_hook_script(int h_idx, char *script, cptr name);
-
-#####GFile
- plots.c
-
-#####GComment
-(none)
-
-#####GDescription
-To hook list with index "h_idx", add a script with script file
-"script" and name "name" as a Lua hook if a hook with that name
-does not already exist.
-
-#####GParameters
-> "h_idx" is the index of the hook list in the array of hook lists.
-> "script" is the name of the script file.
-> "name" is the name of the hook to be added.
-
-----------------------------------------------------------------------
-
-#####R=== del_hook_name ===
-
-#####GDeclaration
- void del_hook_name(int h_idx, cptr name);
-
-#####GFile
- plots.c
-
-#####GComment
-(none)
-
-#####GDescription
-Search hook list with index "h_idx" and remove the hook with name
-"name".
-
-#####GParameters
-> "h_idx" is the index of the hook list in the array of hook lists.
-> "name" is the name of the hook to be removed.
-
-----------------------------------------------------------------------
-
-#####R=== pern_dofile ===
-
-#####GDeclaration
- bool pern_dofile(char *file);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Parse the Lua script file "file".
-
-#####GParameters
-> "file" is the Lua script file to be parsed.
-
-----------------------------------------------------------------------
-
-#####R=== intMod ===
-
-#####GDeclaration
- s32b intMod(s32b a, s32b b);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the result of operation "a" mod "b" (a % b).
-
-#####GParameters
-> "a" is a number.
-> "b" is a number.
-
-----------------------------------------------------------------------
-
-#####R=== intAnd ===
-
-#####GDeclaration
- s32b intAnd(s32b a, s32b b);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the result of bitwise operation "a" AND "b" (a & b).
-
-#####GParameters
-> "a" is a number.
-> "b" is a number.
-
-----------------------------------------------------------------------
-
-#####R=== intOr ===
-
-#####GDeclaration
- s32b intOr(s32b a, s32b b);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the result of bitwise operation "a" OR "b" (a | b).
-
-#####GParameters
-> "a" is a number.
-> "b" is a number.
-
-----------------------------------------------------------------------
-
-#####R=== intXor ===
-
-#####GDeclaration
- s32b intXor(s32b a, s32b b);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the result of bitwise operation "a" XOR "b" (a ^ b).
-
-#####GParameters
-> "a" is a number.
-> "b" is a number.
-
-----------------------------------------------------------------------
-
-#####R=== intShiftl ===
-
-#####GDeclaration
- s32b intShiftl(s32b a, s32b b);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the result of bitwise operation "a" << "b".
-
-#####GParameters
-> "a" is a number.
-> "b" is a number.
-
-----------------------------------------------------------------------
-
-#####R=== intShiftr ===
-
-#####GDeclaration
- s32b intShiftr(s32b a, s32b b);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the result of bitwise operation "a" >> "b".
-
-#####GParameters
-> "a" is a number.
-> "b" is a number.
-
-----------------------------------------------------------------------
-
-#####R=== intBitNot ===
-
-#####GDeclaration
- s32b intBitNot(s32b b);
-
-#####GFile
- script.c
-
-#####GComment
-(none)
-
-#####GDescription
-Return the result of bitwise operation NOT "b" (~ b).
-
-#####GParameters
-> "b" is a number.
-
-----------------------------------------------------------------------
-
-#####R=== register_savefile ===
-
-#####GDeclaration
- void register_savefile(int num);
-
-#####GFile
- loadsave.c
-
-#####GComment
-/*
- * Add num slots to the savefile
- */
-
-#####GDescription
-Add "num" slots to the save file.
-
-#####GParameters
-> "num" is the number of slots to add to the savefile. If num is <0
- then "num" is forced to zero.
-
-----------------------------------------------------------------------
-
-#####R=== save_number_key ===
-
-#####GDeclaration
- void save_number_key(char *key, s32b val);
-
-#####GFile
- util.c
-
-#####GComment
-(none)
-
-#####GDescription
-Save the length of key "key", the key itself, and the value "val" as
-bytes in the savefile.
-
-#####GParameters
-> "key" is the key string for the value.
-> "val" is the value to be saved.
-
-----------------------------------------------------------------------
-
-
-
-Back to the *****lua.hlp*0[lua help index] .
-
-
- [[[[[gThis file by Chris Hadgis]
-
diff --git a/lib/mods/theme/help/macrofaq.txt b/lib/mods/theme/help/macrofaq.txt
index 97fad944..035f674b 100644
--- a/lib/mods/theme/help/macrofaq.txt
+++ b/lib/mods/theme/help/macrofaq.txt
@@ -975,10 +975,6 @@ These are accessible through the (=) Set options command.
*****option.txt*2[(hilite_player)] -- causes the player's symbol to be drawn with the
"cursor" on it. It will be drawn with the same color as the character.
-*****option.txt*3[(player_symbols)] -- for graphics mode only, and only works when option
-(use_graphics) is also on. This apparently varies the player graphic
-and its color based on class, race, and sex.
-
#####G----------------------------------------------------------------------
#####G4.18 Recharging a rod using a Recharge Item spell
#####G----------------------------------------------------------------------
@@ -1070,15 +1066,7 @@ create a macro for a function key.
#####G5.2 How can I automatically inscribe items when I pick them up?
#####G----------------------------------------------------------------------
-You need to turn on the "Merge inscriptions when stacking" option.
-If you are already carrying the same item with an inscription, a new
-one will be added to the stack. Note that this WON'T merge discounts.
-Although discounts display like inscriptions, they are different.
-
-1) = Options
-2) 1 User interface options
-3) "Merge inscriptions when stacking" (stack_force_notes)
- move down to this line and change to "yes".
+(Content removed because it was obsolete. Inscribe-on-pickup is now the default.)
#####G----------------------------------------------------------------------
#####G5.3 Can I use macros inside other macros?
@@ -1788,9 +1776,7 @@ options screen.
rogue_like_commands
use_old_target
always_pickup
-depth_in_feet
alert_hitpoint
-auto_haggle
auto_scum
#####G----------------------------------------------------------------------
diff --git a/lib/mods/theme/help/magic.txt b/lib/mods/theme/help/magic.txt
index 93486f0b..14fa6570 100644
--- a/lib/mods/theme/help/magic.txt
+++ b/lib/mods/theme/help/magic.txt
@@ -24,7 +24,7 @@ schools:
Other magical skills, generally being used primarily by characters of a
specific class, are:
*****m_demono.txt*0[Demonology] *****m_necrom.txt*0[Necromancy] *****skills.txt*36[Runecraft]
- *****m_thaum.txt*0[Thaumaturgy] *****skills.txt*49[Alchemy] *****m_geoman.txt*0[Geomancy]
+ *****m_thaum.txt*0[Thaumaturgy] *****m_geoman.txt*0[Geomancy]
The *****m_demono.txt*0[Demonology] skill is primarily used by *****c_demono.txt*0[Demonologists] for their special
spells, whereas the *****m_necrom.txt*0[Necromancy] skill is used by *****c_necro.txt*0[Necromancers] for their own set
@@ -32,8 +32,7 @@ of special spells.
The same goes for *****skills.txt*36[Runecraft], which is used by *****c_runecr.txt*0[Runecrafters] to allow use of more
difficult runes or rune-combinations. *****m_thaum.txt*0[Thaumaturgy] gives you randomly chosen
attack spells, and as such each game with it will be different. *****c_geoman.txt*0[Geomancers]
-harness the powers of the elements using *****m_geoman.txt*0[Geomancy]. Lastly we have
-*****skills.txt*49[Alchemy], which is used by *****c_alchem.txt*0[Alchemists].
+harness the powers of the elements using *****m_geoman.txt*0[Geomancy].
In addition to the schools of magic, you can get access to special sets of
spells if you worship a God. There are currently four good Gods,
diff --git a/lib/mods/theme/help/option.txt b/lib/mods/theme/help/option.txt
index 34a2fe6b..00ee15a4 100644
--- a/lib/mods/theme/help/option.txt
+++ b/lib/mods/theme/help/option.txt
@@ -56,20 +56,6 @@ can also be viewed from the option menu while playing, but not changed then.
but extremely deadly - imagine that Greater Checkerboard Vault with Lokkak
on dungeon level 1!
-#####GAllow notes to be written to a file [take_notes]
- Allows any player-written notes (with the "|" command) to be written to
- a file and kept (instead of being put in the message list).
-
-#####GAutomatically note important events [auto_notes]
- Used in conjunction with the take_notes option, this option makes a note
- each time you gain a level, kill a unique, find an artifact, etc.
-
-#####GFast autoroller (NOT on multiuser systems) [fast_autoroller]
- The normal autoroller has a built-in delay that helps prevent it from
- overloading a system. This option reduces that delay, allowing characters
- to be rolled in a much shorter time, but should not be used on multiuser
- systems.
-
#####GAllow use of some 'joke' monsters [joke_monsters]
Allows monsters flagged as being some of DarkGod's jokes to be generated.
@@ -80,6 +66,10 @@ can also be viewed from the option menu while playing, but not changed then.
#####GYou can receive fates, good or bad [fate_option]
Allows the player to turn off ToME's *****fatespoi.txt*0[fates] for that character.
+#####GItems always sell for 0 gold [no_selling]
+ Disables selling items back to shops for money. The value of gold found in the
+ dungeon is increased to compensate.
+
~~~~~07|Options|Ingame
#####RIN GAME OPTIONS
#####R===============
@@ -98,9 +88,6 @@ off at will during the course of the game.
(useful for monster farming). Allows most keys to mean "no" to any
"[y/n]" prompt.
-#####GPrompt for various information [other_query_flag]
- No longer used.
-
#####GPrompt before picking things up [carry_query_flag]
Forces the game to ask you for confirmation when you do something that
would normally cause an item to be picked up.
@@ -126,54 +113,6 @@ off at will during the course of the game.
a door, tunnel through walls, or disarm traps or chests, that you
wish to repeat the command 99 times (see *****command.txt*0["command.txt"]).
-#####GShow dungeon level in feet [depth_in_feet]
- Display the dungeon depth in "feet" instead of as a level number (one
- level is equivalent to 50'). This also affects the monster memory display.
-
-#####GMerge inscriptions when stacking [stack_force_notes]
- Force otherwise identical objects to merge, even if one has an empty
- inscription and the other does not. The resulting stack keeps the
- non-empty inscription.
-
-#####GMerge discounts when stacking [stack_force_costs]
- Force otherwise identical objects to merge, even if they have different
- discounts. The resulting stack keeps the largest discount. This option
- may cause you to lose "value", but will give you optimal pack usage.
-
-#####GShow labels in object lists [show_labels]
- Display the "labels" for objects in the equipment list, and in any
- special window which is displaying the equipment. These labels
- indicate what the player is using the object for, such as "wielding"
- or "wearing" (in a given location). After you have played for a while,
- this information is no longer useful, and can be annoying.
- Note that in ToME this option no longer controls the "plain
- flavoured object descriptions": a separate option for them has been added
- under "ToME Options".
-
-#####GShow weights in object lists [show_weights]
- Display the weight of objects in the inventory and equipment lists,
- and in stores, and in any special window which is displaying any of
- these lists.
-
-#####GShow graphics in inventory list [show_inven_graph]
- Display the graphics of objects in the inventory list, and in any special
- window which is displaying the inventory list.
-
-#####GShow graphics in equipment list [show_equip_graph]
- Display the graphics of objects in the equipment list, and in any special
- window which is displaying the equipment list.
-
-#####GShow graphics in stores [show_store_graph]
- Display the graphics of objects in the store list.
-
-#####GShow choices in certain sub-windows [show_choices]
- Indicate legal choices in special windows which display lists.
-
-#####GShow details in certain sub-windows [show_details]
- Indicate extra details in special windows, currently used to activate
- the display of death counts and monster descriptions when recalling
- details about a monster.
-
#####GAudible bell (on errors, etc) [ring_bell]
Attempt to make a "bell" noise when various errors occur.
@@ -205,7 +144,7 @@ off at will during the course of the game.
monster becomes viewable for the first time, and also whenever any
viewable monster becomes no longer viewable. This option ignores
the existence of telepathy for the purpose of determining whether
- a monster is viewable. See also the "view_reduce_view" option.
+ a monster is viewable.
#####GDisturb whenever map panel changes [disturb_panel]
This option causes you to be disturbed (stop running) when the screen
@@ -245,18 +184,6 @@ off at will during the course of the game.
dies. If this option is not selected, the "You die." message is displayed
instead.
-#####GAllow shopkeepers and uniques to speak [speak_unique]
- If this option is in use, shopkeepers may sometimes whisper rumours to
- you. Also certain monsters start boasting as they attack you, and when
- they die, they say their "last words".
-
-#####GNo query to destroy known worthless items [auto_destroy]
- It can sometimes be annoying that the Destroy command asks for confirmation
- when you are attempting to destroy a Broken sword {cursed}. If this option
- is set, no confirmation will be asked if you attempt to destroy an object
- which you know to be worthless. Of course, cursed artifacts cannot be
- destroyed even if this option is set.
-
#####GConfirm to wear/wield known cursed items [confirm_wear]
Some players may occasionally, due to a typing mistake, find themselves
wearing an item which they knew was cursed. If this option is set, you
@@ -308,18 +235,6 @@ off at will during the course of the game.
is based on the dungeon level, so the deeper you go, the better the
level will be.
-#####GAllow weapons and armor to stack [stack_allow_items]
- Allow identical weapons and armor to be combined into a stack. This
- also allows unidentified, but identical, ammo to be combined, which
- may result in the auto-identification of some of the ammo, but which
- makes it a lot easier to actually use unidentified ammo.
-
-#####GAllow wands/staffs/rods to stack [stack_allow_wands]
- Allow identical wands/staffs/rods to be combined into a stack. This
- may force the items to be unstacked to use them, which may result
- in overflow of the pack. Also, the entire stack can be recharged
- (and possibly destroyed) at the same time.
-
#####GExpand the power of the look command [expand_look]
Expand the "l"ook command to allow the user to look at grids which
are not actually in view of the player, allowing the examination of
@@ -374,38 +289,10 @@ off at will during the course of the game.
Allow monsters to make paths to the player when they are nearby. This
option is extremely slow, but can produce viciously smart monsters.
~~~~~3
-#####GUse special symbols for the player char [player_symbols]
- If this option has been compiled in, it allows you to display your
- character using race / class / sex dependent colours and graphical
- symbols. Note that the support for this option may not have been
- compiled in on all platforms.
-
-#####GPlain object descriptions [plain_descriptions]
- In ToME, this option disables "full" names for identified flavoured
- objects; in other words, if this option is not in use, an identified
- Potion of Speed could be listed (for example) as a Blue Potion of Speed.
- If you prefer simpler, less verbose descriptions, set this option.
-
#####GMonsters learn from their mistakes [smart_learn]
Allow monsters to learn what spell attacks you are resistant to,
and to use this information to choose the best attacks.
-#####GMonsters exploit players weaknesses [smart_cheat]
- Allow monsters to know what spell attacks you are resistant to, without
- first having to observe such an attack upon you, and to use this
- information to choose the best attacks.
-
-#####GMonsters behave stupidly [stupid_monsters]
- ToME incorporates Keldon Jones' improved monster Artificial
- Intelligence patch. While this patch most certainly makes monsters
- behave more realistically, they will also be more deadly with the
- improved AI. If you are a sissy, set this option to get the old,
- really stupid monster AI.
- Note that the new AI is a bit processing power expensive. If you have
- an old computer (386sx) and ToME is running too slowly, you could
- try turning stupid_monsters on. Or dumpster-dive for a Pentium so you can
- run ToME. :-)
-
#####GAllow unusually small dungeon levels [small_levels]
This option enables the creation of levels of varying sizes. Levels
that are as small as one "screen" (80x24) are possible, and they can be
@@ -432,9 +319,6 @@ off at will during the course of the game.
but is extremely annoying. Certain older versions of Angband used
this behavior always, so "purists" should turn it on.
-#####GReduce view-radius in town [view_reduce_view]
- No longer in use.
-
#####GAvoid checking for user abort [avoid_abort]
Avoid checking to see if the user has pressed a key during resting
or running or repeated commands. This not only makes the game much
@@ -551,11 +435,6 @@ Features which are unique to ToME are collected in this menu.
for new players. More experienced players may wish to switch this option
off.
-#####GShow the experience needed for the next level [exp_need]
- Setting this option alters the display of experience on the left of
- the main screen to the experience needed to reach the next character level,
- instead of the character's current total experience.
-
#####GUse the old(Z) coloring scheme(reload the game) [old_colors]
Setting this option toggles the ASCII game colour display from the
standard Angband monster colours to the Zangband-based monster colours.
diff --git a/lib/mods/theme/help/skills.txt b/lib/mods/theme/help/skills.txt
index c4a02c06..fe68da6e 100644
--- a/lib/mods/theme/help/skills.txt
+++ b/lib/mods/theme/help/skills.txt
@@ -108,7 +108,7 @@ on what each skill does, try [[[[[ghttp://www.killerbunnies.org/angband/skill-22
for some third party help!
The skills are:
- *****skills.txt*27[Air] *****skills.txt*49[Alchemy] *****skills.txt*50[Antimagic] *****skills.txt*08[Archery]
+ *****skills.txt*27[Air] *****skills.txt*50[Antimagic] *****skills.txt*08[Archery]
*****skills.txt*05[Axe-mastery] *****skills.txt*18[Backstab] *****skills.txt*13[Barehand-combat] *****skills.txt*61[Bearform-combat]
*****skills.txt*12[Boomerang-mastery] *****skills.txt*58[Boulder-throwing] *****skills.txt*10[Bow-mastery] *****skills.txt*01[Combat]
*****skills.txt*30[Conveyance] *****skills.txt*44[Corpse-preservation]*****skills.txt*04[Critical-hits] *****skills.txt*11[Crossbow-mastery]
@@ -311,7 +311,7 @@ ability.
Sub-skills include: Magic-device, Spell-power, Sorcery, Mana, Fire, Water, Air,
Earth, Meta, Conveyance, Divination, Temporal, Mind, Nature, Udun, Demonology,
-Necromancy, Runecraft, Thaumaturgy, and Alchemy.
+Necromancy, Runecraft, and Thaumaturgy.
~~~~~54|Skills|Magic-device
[[[[[BMagic-device]
This skill is a sub-skill of the Magic skill. It eases the use of magical
@@ -465,13 +465,6 @@ any sort. However, once learned these spells do not gain in levels as the
thaumaturgy skill or the spell-power skills are increased. Spending 1 skill
point on your Thaumaturgy skill adds 0.06 bonus skill points to your Magic
skill.
-~~~~~49|Skills|Alchemy
-[[[[[BAlchemy]
-The Alchemy skill affects your ability to extract and use essences to create
-magical items.
-
-Investing in the Alchemy skill? You might be interested in the *****ability.txt*09[Artifact Creation]
-ability.
~~~~~38|Skills|Spirituality
[[[[[BSpirituality]
The spirituality skill influences things which have a "helping hand" from the
diff --git a/lib/mods/theme/help/spoiler.hlp b/lib/mods/theme/help/spoiler.hlp
index bc229852..996c0d32 100644
--- a/lib/mods/theme/help/spoiler.hlp
+++ b/lib/mods/theme/help/spoiler.hlp
@@ -7,7 +7,6 @@ Please choose one of the following online spoiler files:
*****/acorspoil.txt*0[(a) Corruptions]
*****/bdunspoil.txt*0[(b) Dungeons]
- *****/cessences.txt*0[(c) Essence Spoiler]
*****/dinscrip.txt*0[(d) Floor Inscriptions]
*****/eluckspoi.txt*0[(e) Luck]
*****/ffatespoi.txt*0[(f) Fates]
diff --git a/lib/mods/theme/help/tome_faq.txt b/lib/mods/theme/help/tome_faq.txt
index 756ce639..55f6375b 100644
--- a/lib/mods/theme/help/tome_faq.txt
+++ b/lib/mods/theme/help/tome_faq.txt
@@ -81,8 +81,7 @@ You can also fill empty bottles at a fountain (enabling you to identify the
potion and hence the type of fountain) by using the 'H' command and answering
'F' at the prompt. The game will then ask you to choose bottles and how many
bottles you want to fill. You can find empty bottles on the dungeon and
-drinking pints of fine ale/wine will give you emtpy bottles; if you are
-trained in Alchemy, you can reuse bottles after quaffing potions as well.
+drinking pints of fine ale/wine will give you emtpy bottles.
#####G------------------------------------------------------------------------------
#####GQ: I got killed by a Great Wyrm of Power at 50'!!! What happened?
@@ -102,13 +101,10 @@ activation can be something very nasty....
To activate it, use the normal Activation command, but when prompted for which
item to activate change to the backpack instead of wielded equipment.
-~~~~~10|Essences
~~~~~11|Runes
#####G------------------------------------------------------------------------------
-#####GQ: I keep coming across "essences" and "runes". What are they?
+#####GQ: I keep coming across "runes". What are they?
-Essences are the *****c_alchem.txt*0[Alchemist's] friend, and you can only use them if you
-have access to the *****skills.txt*49[Alchemy] skill.
Runes are used to cast and store spells of varying types. *****c_runecr.txt*0[Runecrafters] are the
class who are most proficient at using these. You can only use them if you
have access to the *****skills.txt*36[Runecrafting] skill.
diff --git a/lib/mods/theme/module.lua b/lib/mods/theme/module.lua
deleted file mode 100644
index cc0b6f08..00000000
--- a/lib/mods/theme/module.lua
+++ /dev/null
@@ -1,48 +0,0 @@
-add_module
-{
- ["name"] = "Theme",
- ["version"] = { 1, 2, 0 },
- ["author"] = { "furiosity", "furiosity@gmail.com" },
- ["desc"] = {
- "A module that goes back to Tolkien roots, though by no means canonical.",
- "A new wilderness map, new monsters, objects, artifacts, uniques, ego items,",
- "terrain features, gods, races, subraces, and classes. Have fun. :-)",
- },
-
- ["rand_quest"] = TRUE,
- ["C_quest"] = TRUE,
-
- ["base_dungeon"] = 4,
- ["death_dungeon"] = 28,
-
- ["astral_dungeon"] = 8,
- ["astral_wild_x"] = 45,
- ["astral_wild_y"] = 19,
-
- ["random_artifact_weapon_chance"] = 30,
- ["random_artifact_armor_chance"] = 30,
- ["random_artifact_jewelry_chance"] = 30,
-
- ["max_plev"] = 50,
- ["max_skill_overage"] = 5,
-
- ["mod_savefiles"]=
- {
- "Theme",
- },
- ["layout"] =
- {
- ["apex"] = "theme",
- ["core"] = "theme",
- ["data"] = "theme",
- ["dngn"] = "theme",
- ["edit"] = "theme",
- ["file"] = "theme",
- ["help"] = "theme",
- ["note"] = "theme",
- ["save"] = "theme",
- ["scpt"] = "theme",
- ["user"] = "theme",
- ["pref"] = "theme",
- },
-} \ No newline at end of file
diff --git a/lib/mods/theme/pref/font-ami.prf b/lib/mods/theme/pref/font-ami.prf
deleted file mode 100644
index 1c06dbb3..00000000
--- a/lib/mods/theme/pref/font-ami.prf
+++ /dev/null
@@ -1,28 +0,0 @@
-# File: font-ami.prf
-
-#
-# This file contains text remapping data
-# currently used in the Amiga version.
-#
-# Lars Haugseth <larshau@ifi.uio.no>
-#
-
-
-# Color palette - Text
-V:0:0x01:0x00:0x00:0x00
-V:1:0x01:0xFF:0xFF:0xFF
-V:2:0x01:0xC7:0xC7:0xC7
-V:3:0x01:0xFF:0x92:0x00
-V:4:0x01:0xFF:0x00:0x00
-V:5:0x01:0x00:0xCD:0x00
-V:6:0x01:0x00:0x00:0xFE
-V:7:0x01:0xC8:0x64:0x00
-V:8:0x01:0x8A:0x8A:0x8A
-V:9:0x01:0xE0:0xE0:0xE0
-V:10:0x01:0xA5:0x00:0xFF
-V:11:0x01:0xFF:0xFD:0x00
-V:12:0x01:0xFF:0x00:0xBC
-V:13:0x01:0x00:0xFF:0x00
-V:14:0x01:0x00:0xC8:0xFF
-V:15:0x01:0xFF:0xCC:0x80
-
diff --git a/lib/mods/theme/pref/font-dos.prf b/lib/mods/theme/pref/font-dos.prf
deleted file mode 100644
index 9cf1866f..00000000
--- a/lib/mods/theme/pref/font-dos.prf
+++ /dev/null
@@ -1,8 +0,0 @@
-# File: font-dos.prf
-
-#
-# This file is used by Angband (when it was compiled using "main-dos.c")
-# to specify simple attr/char remappings using a standard font, allowing
-# the use of special pseudo-graphic pictures for walls and such.
-#
-
diff --git a/lib/mods/theme/pref/font-mac.new b/lib/mods/theme/pref/font-mac.new
deleted file mode 100644
index 8b7f937c..00000000
--- a/lib/mods/theme/pref/font-mac.new
+++ /dev/null
@@ -1,110 +0,0 @@
-# File: font-mac.prf
-
-#
-# This file is used by Angband (when it was compiled using "main-mac.c")
-# to specify simple attr/char remappings using a standard font, allowing
-# the use of the Macintosh's special characters for some things.
-#
-
-
-##### Feature attr/char definitions #####
-
-# fountain
-F:2:0x01/0xBA
-
-# fountain
-F:15:0x08/0xBA
-
-# stream of shallow water
-F:84:0x0E/0xC5
-
-# pool of deep lava
-F:85:0x0C/0xC5
-
-# stream of shallow lava
-F:86:0x04/0xC5
-
-# dead tree
-F:92:0x08/0xB4
-
-# tree
-F:96:0x0D/0xB4
-
-# mountain chain
-F:97:0x0F/0xC6
-
-# high mountain chain
-F:101:0x09/0xC6
-
-# Void Jumpgate
-F:160:0x0A/0xBD
-
-# Altar of Being
-F:161:0x09/0xB9
-
-# Altar of Winds
-F:162:0x0E/0xB9
-
-# Altar of Force
-F:163:0x0C/0xB9
-
-# Altar of Darkness
-F:164:0x08/0xB9
-
-# stream of tainted water
-F:174:0x07/0xC5
-
-# Void Jumpgate
-F:176:0x0A/0xBD
-
-# Great Fire
-F:178:0x0A/0xC5
-
-# Ekkaia, the Encircling Sea
-F:182:0x06/0xC5
-
-# pool of deep water
-F:187:0x06/0xC5
-
-# small tree
-F:202:0x05/0xB4
-
-# a blazing fire
-F:205:0x0B/0xC5
-
-# condensing water
-F:209:0x0E/0xC5
-
-# dark pit
-F:248:0x04:0x27
-
-##### Monster attr/char definitions #####
-
-# Old Man Willow
-R:206:0x02/0xB4
-
-# Tangleweed
-R:248:0x05/0xB4
-
-# Poison ivy
-R:266:0x05/0xB4
-
-# Giant Venus Flytrap
-R:317:0x05/0xB4
-
-# Huorn
-R:329:0x05/0xB4
-
-# Xiclotlan
-R:396:0x08/0xB4
-
-# Ent
-R:708:0x0D/0xB4
-
-# Quickbeam, the Ent
-R:714:0x0D/0xB4
-
-# Fangorn the Treebeard, Lord of the Ents
-R:934:0x0D/0xB4
-
-
diff --git a/lib/mods/theme/pref/font-xxx.prf b/lib/mods/theme/pref/font-xxx.prf
index 298a8643..3e5d24ee 100644
--- a/lib/mods/theme/pref/font-xxx.prf
+++ b/lib/mods/theme/pref/font-xxx.prf
@@ -429,9 +429,6 @@ E:114:0x0D
# DAEMON BOOK
E:115:0x03
-# POWER BATERIES
-E:4:0x0D
-
# MAGE STAFFS
E:6:0x0E
diff --git a/lib/mods/theme/pref/font.prf b/lib/mods/theme/pref/font.prf
index 505964bd..38614683 100644
--- a/lib/mods/theme/pref/font.prf
+++ b/lib/mods/theme/pref/font.prf
@@ -28,33 +28,13 @@
?:[IOR [EQU $SYS xaw] [EQU $SYS x11] [EQU $SYS gtk]]
%:font-x11.prf
-?:[EQU $SYS glu]
-%:font-glu.prf
-
?:[EQU $SYS gcu]
%:font-gcu.prf
-?:[EQU $SYS ami]
-%:font-ami.prf
-
?:[EQU $SYS mac]
%:font-mac.prf
?:[EQU $SYS win]
%:font-win.prf
-?:[EQU $SYS dos]
-%:font-dos.prf
-
-?:[EQU $SYS ibm]
-%:font-ibm.prf
-
-?:[EQU $SYS emx]
-%:font-emx.prf
-
-?:[EQU $SYS acn]
-%:font-acn.prf
-
?:1
-
-
diff --git a/lib/mods/theme/pref/graf-ami.prf b/lib/mods/theme/pref/graf-ami.prf
deleted file mode 100644
index d9b1b356..00000000
--- a/lib/mods/theme/pref/graf-ami.prf
+++ /dev/null
@@ -1,64 +0,0 @@
-# File: graf-ami.prf
-
-#
-# This file contains color definitions and
-# graphics remapping for the Amiga version.
-#
-# Lars Haugseth <larshau@ifi.uio.no>
-#
-
-
-# Color palette - Graphics
-V:0:0x01:0x00:0x00:0x00
-V:1:0x01:0xF0:0xE0:0xD0
-V:2:0x01:0x80:0x80:0x80
-V:3:0x01:0x50:0x50:0x50
-V:4:0x01:0xE0:0xB0:0x00
-V:5:0x01:0xC0:0xA0:0x70
-V:6:0x01:0x80:0x60:0x40
-V:7:0x01:0x40:0x30:0x20
-V:8:0x01:0x00:0xA0:0xF0
-V:9:0x01:0x00:0x00:0xF0
-V:10:0x01:0x00:0x00:0x70
-V:11:0x01:0xF0:0x00:0x00
-V:12:0x01:0x80:0x00:0x00
-V:13:0x01:0x90:0x00:0xB0
-V:14:0x01:0x00:0x60:0x10
-V:15:0x01:0x60:0xF0:0x40
-
-
-# Color palette - Text
-V:16:0x01:0x00:0x00:0x00
-V:17:0x01:0xFF:0xFF:0xFF
-V:18:0x01:0xC7:0xC7:0xC7
-V:19:0x01:0xFF:0x92:0x00
-V:20:0x01:0xFF:0x00:0x00
-V:21:0x01:0x00:0xCD:0x00
-V:22:0x01:0x00:0x00:0xFE
-V:23:0x01:0xC8:0x64:0x00
-V:24:0x01:0x8A:0x8A:0x8A
-V:25:0x01:0xE0:0xE0:0xE0
-V:26:0x01:0xA5:0x00:0xFF
-V:27:0x01:0xFF:0xFD:0x00
-V:28:0x01:0xFF:0x00:0xBC
-V:29:0x01:0x00:0xFF:0x00
-V:30:0x01:0x00:0xC8:0xFF
-V:31:0x01:0xFF:0xCC:0x80
-
-
-# Standard file
-%:graf-xxx.prf
-
-
-### Feature attr/char definitions
-
-# nothing
-F:0:0x01/0x20
-
-# open floor
-F:1:0x81/0x8E
-
-# invis trap
-F:2:0x81/0x8E
-
-
diff --git a/lib/mods/theme/pref/graf-dos.prf b/lib/mods/theme/pref/graf-dos.prf
deleted file mode 100644
index 41f38c76..00000000
--- a/lib/mods/theme/pref/graf-dos.prf
+++ /dev/null
@@ -1,15 +0,0 @@
-# File: graf-win.prf
-
-#
-# This file defines special attr/char mappings for use in "graphics" mode
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-# Standard file
-?:[EQU $GRAF old]
-%:graf-xxx.prf
-
-# New tiles
-?:[EQU $GRAF new]
-%:graf-new.prf
diff --git a/lib/mods/theme/pref/graf-ibm.prf b/lib/mods/theme/pref/graf-ibm.prf
deleted file mode 100644
index eee54a13..00000000
--- a/lib/mods/theme/pref/graf-ibm.prf
+++ /dev/null
@@ -1,6237 +0,0 @@
-# File: graf-ibm.prf
-
-# This file defines special attr/char mappings for use in the pseudo
-# graphics mode using character generator font redefinitions. It can
-# also be used with X11/XAW/GTK ports by generating a bdf (then pcf)
-# file from lib/xtra/angband.fnt. How to do so is beyond the scope of
-# this file.
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-
-##### Special attr/char values #####
-
-## # Unused
-## S:0x00:0x00/0x40
-## S:0x01:0x01/0x40
-## S:0x02:0x02/0x40
-## S:0x03:0x03/0x40
-## S:0x04:0x04/0x40
-## S:0x05:0x05/0x40
-## S:0x06:0x06/0x40
-## S:0x07:0x07/0x40
-## S:0x08:0x08/0x40
-## S:0x09:0x09/0x40
-## S:0x0A:0x0A/0x40
-## S:0x0B:0x0B/0x40
-## S:0x0C:0x0C/0x40
-## S:0x0D:0x0D/0x40
-## S:0x0E:0x0E/0x40
-## S:0x0F:0x0F/0x40
-
-## # Unused
-## S:0x10:0x00/0x40
-## S:0x11:0x01/0x40
-## S:0x12:0x02/0x40
-## S:0x13:0x03/0x40
-## S:0x14:0x04/0x40
-## S:0x15:0x05/0x40
-## S:0x16:0x06/0x40
-## S:0x17:0x07/0x40
-## S:0x18:0x08/0x40
-## S:0x19:0x09/0x40
-## S:0x1A:0x0A/0x40
-## S:0x1B:0x0B/0x40
-## S:0x1C:0x0C/0x40
-## S:0x1D:0x0D/0x40
-## S:0x1E:0x0E/0x40
-## S:0x1F:0x0F/0x40
-
-## # Unused
-## S:0x20:0x00/0x40
-## S:0x21:0x01/0x40
-## S:0x22:0x02/0x40
-## S:0x23:0x03/0x40
-## S:0x24:0x04/0x40
-## S:0x25:0x05/0x40
-## S:0x26:0x06/0x40
-## S:0x27:0x07/0x40
-## S:0x28:0x08/0x40
-## S:0x29:0x09/0x40
-## S:0x2A:0x0A/0x40
-## S:0x2B:0x0B/0x40
-## S:0x2C:0x0C/0x40
-## S:0x2D:0x0D/0x40
-## S:0x2E:0x0E/0x40
-## S:0x2F:0x0F/0x40
-
-# Spells (*)
-S:0x30:0x00/0x2A
-S:0x31:0x01/0x2A
-S:0x32:0x02/0x2A
-S:0x33:0x03/0x2A
-S:0x34:0x04/0x2A
-S:0x35:0x05/0x2A
-S:0x36:0x06/0x2A
-S:0x37:0x07/0x2A
-S:0x38:0x08/0x2A
-S:0x39:0x09/0x2A
-S:0x3A:0x0A/0x2A
-S:0x3B:0x0B/0x2A
-S:0x3C:0x0C/0x2A
-S:0x3D:0x0D/0x2A
-S:0x3E:0x0E/0x2A
-S:0x3F:0x0F/0x2A
-
-# Spells (|)
-S:0x40:0x00/0x7C
-S:0x41:0x01/0x7C
-S:0x42:0x02/0x7C
-S:0x43:0x03/0x7C
-S:0x44:0x04/0x7C
-S:0x45:0x05/0x7C
-S:0x46:0x06/0x7C
-S:0x47:0x07/0x7C
-S:0x48:0x08/0x7C
-S:0x49:0x09/0x7C
-S:0x4A:0x0A/0x7C
-S:0x4B:0x0B/0x7C
-S:0x4C:0x0C/0x7C
-S:0x4D:0x0D/0x7C
-S:0x4E:0x0E/0x7C
-S:0x4F:0x0F/0x7C
-
-# Spells (-)
-S:0x50:0x00/0x2D
-S:0x51:0x01/0x2D
-S:0x52:0x02/0x2D
-S:0x53:0x03/0x2D
-S:0x54:0x04/0x2D
-S:0x55:0x05/0x2D
-S:0x56:0x06/0x2D
-S:0x57:0x07/0x2D
-S:0x58:0x08/0x2D
-S:0x59:0x09/0x2D
-S:0x5A:0x0A/0x2D
-S:0x5B:0x0B/0x2D
-S:0x5C:0x0C/0x2D
-S:0x5D:0x0D/0x2D
-S:0x5E:0x0E/0x2D
-S:0x5F:0x0F/0x2D
-
-# Spells (/)
-S:0x60:0x00/0x2F
-S:0x61:0x01/0x2F
-S:0x62:0x02/0x2F
-S:0x63:0x03/0x2F
-S:0x64:0x04/0x2F
-S:0x65:0x05/0x2F
-S:0x66:0x06/0x2F
-S:0x67:0x07/0x2F
-S:0x68:0x08/0x2F
-S:0x69:0x09/0x2F
-S:0x6A:0x0A/0x2F
-S:0x6B:0x0B/0x2F
-S:0x6C:0x0C/0x2F
-S:0x6D:0x0D/0x2F
-S:0x6E:0x0E/0x2F
-S:0x6F:0x0F/0x2F
-
-# Spells (\)
-S:0x70:0x00/0x5C
-S:0x71:0x01/0x5C
-S:0x72:0x02/0x5C
-S:0x73:0x03/0x5C
-S:0x74:0x04/0x5C
-S:0x75:0x05/0x5C
-S:0x76:0x06/0x5C
-S:0x77:0x07/0x5C
-S:0x78:0x08/0x5C
-S:0x79:0x09/0x5C
-S:0x7A:0x0A/0x5C
-S:0x7B:0x0B/0x5C
-S:0x7C:0x0C/0x5C
-S:0x7D:0x0D/0x5C
-S:0x7E:0x0E/0x5C
-S:0x7F:0x0F/0x5C
-
-# Amulets
-S:0x80:0x00/0xE7
-S:0x81:0x01/0xE7
-S:0x82:0x02/0xE7
-S:0x83:0x03/0xE7
-S:0x84:0x04/0xE7
-S:0x85:0x05/0xE7
-S:0x86:0x06/0xE7
-S:0x87:0x07/0xE7
-S:0x88:0x08/0xE7
-S:0x89:0x09/0xE7
-S:0x8A:0x0A/0xE7
-S:0x8B:0x0B/0xE7
-S:0x8C:0x0C/0xE7
-S:0x8D:0x0D/0xE7
-S:0x8E:0x0E/0xE7
-S:0x8F:0x0F/0xE7
-
-# Rings
-S:0x90:0x00/0xE8
-S:0x91:0x01/0xE8
-S:0x92:0x02/0xE8
-S:0x93:0x03/0xE8
-S:0x94:0x04/0xE8
-S:0x95:0x05/0xE8
-S:0x96:0x06/0xE8
-S:0x97:0x07/0xE8
-S:0x98:0x08/0xE8
-S:0x99:0x09/0xE8
-S:0x9A:0x0A/0xE8
-S:0x9B:0x0B/0xE8
-S:0x9C:0x0C/0xE8
-S:0x9D:0x0D/0xE8
-S:0x9E:0x0E/0xE8
-S:0x9F:0x0F/0xE8
-
-# Staffs
-S:0xA0:0x00/0xE9
-S:0xA1:0x01/0xE9
-S:0xA2:0x02/0xE9
-S:0xA3:0x03/0xE9
-S:0xA4:0x04/0xE9
-S:0xA5:0x05/0xE9
-S:0xA6:0x06/0xE9
-S:0xA7:0x07/0xE9
-S:0xA8:0x08/0xE9
-S:0xA9:0x09/0xE9
-S:0xAA:0x0A/0xE9
-S:0xAB:0x0B/0xE9
-S:0xAC:0x0C/0xE9
-S:0xAD:0x0D/0xE9
-S:0xAE:0x0E/0xE9
-S:0xAF:0x0F/0xE9
-
-# Wands
-S:0xB0:0x00/0xEA
-S:0xB1:0x01/0xEA
-S:0xB2:0x02/0xEA
-S:0xB3:0x03/0xEA
-S:0xB4:0x04/0xEA
-S:0xB5:0x05/0xEA
-S:0xB6:0x06/0xEA
-S:0xB7:0x07/0xEA
-S:0xB8:0x08/0xEA
-S:0xB9:0x09/0xEA
-S:0xBA:0x0A/0xEA
-S:0xBB:0x0B/0xEA
-S:0xBC:0x0C/0xEA
-S:0xBD:0x0D/0xEA
-S:0xBE:0x0E/0xEA
-S:0xBF:0x0F/0xEA
-
-# Rods
-S:0xC0:0x00/0xEB
-S:0xC1:0x01/0xEB
-S:0xC2:0x02/0xEB
-S:0xC3:0x03/0xEB
-S:0xC4:0x04/0xEB
-S:0xC5:0x05/0xEB
-S:0xC6:0x06/0xEB
-S:0xC7:0x07/0xEB
-S:0xC8:0x08/0xEB
-S:0xC9:0x09/0xEB
-S:0xCA:0x0A/0xEB
-S:0xCB:0x0B/0xEB
-S:0xCC:0x0C/0xEB
-S:0xCD:0x0D/0xEB
-S:0xCE:0x0E/0xEB
-S:0xCF:0x0F/0xEB
-
-# Scrolls
-S:0xD0:0x00/0xEC
-S:0xD1:0x01/0xEC
-S:0xD2:0x02/0xEC
-S:0xD3:0x03/0xEC
-S:0xD4:0x04/0xEC
-S:0xD5:0x05/0xEC
-S:0xD6:0x06/0xEC
-S:0xD7:0x07/0xEC
-S:0xD8:0x08/0xEC
-S:0xD9:0x09/0xEC
-S:0xDA:0x0A/0xEC
-S:0xDB:0x0B/0xEC
-S:0xDC:0x0C/0xEC
-S:0xDD:0x0D/0xEC
-S:0xDE:0x0E/0xEC
-S:0xDF:0x0F/0xEC
-
-# Potions
-S:0xE0:0x00/0xED
-S:0xE1:0x01/0xED
-S:0xE2:0x02/0xED
-S:0xE3:0x03/0xED
-S:0xE4:0x04/0xED
-S:0xE5:0x05/0xED
-S:0xE6:0x06/0xED
-S:0xE7:0x07/0xED
-S:0xE8:0x08/0xED
-S:0xE9:0x09/0xED
-S:0xEA:0x0A/0xED
-S:0xEB:0x0B/0xED
-S:0xEC:0x0C/0xED
-S:0xED:0x0D/0xED
-S:0xEE:0x0E/0xED
-S:0xEF:0x0F/0xED
-
-# Food
-S:0xF0:0x00/0xEE
-S:0xF1:0x01/0xEE
-S:0xF2:0x02/0xEE
-S:0xF3:0x03/0xEE
-S:0xF4:0x04/0xEE
-S:0xF5:0x05/0xEE
-S:0xF6:0x06/0xEE
-S:0xF7:0x07/0xEE
-S:0xF8:0x08/0xEE
-S:0xF9:0x09/0xEE
-S:0xFA:0x0A/0xEE
-S:0xFB:0x0B/0xEE
-S:0xFC:0x0C/0xEE
-S:0xFD:0x0D/0xEE
-S:0xFE:0x0E/0xEE
-S:0xFF:0x0F/0xEE
-
-
-##### Feature attr/char definitions #####
-
-# nothing
-# F:0:0x01/0x20
-
-# open floor
-F:1:0x01/0xB5
-
-# fountain
-F:2:0x0E/0xC8
-
-# glyph of warding
-F:3:0x0B/0xC6
-
-# open door
-F:4:0x0F/0xB9
-
-# broken door
-F:5:0x0F/0xBA
-
-# up staircase
-F:6:0x01/0xB6
-
-# down staircase
-F:7:0x01/0xB7
-
-# quest entrance
-F:8:0x0B/0xB7
-
-# quest exit
-F:9:0x0B/0xB6
-
-# quest down level
-F:10:0x04/0xB7
-
-# quest up level
-F:11:0x04/0xB6
-
-# town exit
-F:12:0x05/0xB7
-
-# shaft down
-F:13:0x0F/0xB7
-
-# shaft up
-F:14:0x0F/0xB6
-
-# fountain
-F:15:0x08/0xC8
-
-# web
-F:16:0x0B/0xCA
-
-# trap
-F:17:0x01/0xC7
-
-# door
-F:32:0x0F/0xB8
-
-# locked door
-F:33:0x0F/0xB8
-
-# locked door
-F:34:0x0F/0xB8
-
-# locked door
-F:35:0x0F/0xB8
-
-# locked door
-F:36:0x0F/0xB8
-
-# locked door
-F:37:0x0F/0xB8
-
-# locked door
-F:38:0x0F/0xB8
-
-# locked door
-F:39:0x0F/0xB8
-
-# jammed door
-F:40:0x0F/0xB8
-
-# jammed door
-F:41:0x0F/0xB8
-
-# jammed door
-F:42:0x0F/0xB8
-
-# jammed door
-F:43:0x0F/0xB8
-
-# jammed door
-F:44:0x0F/0xB8
-
-# jammed door
-F:45:0x0F/0xB8
-
-# jammed door
-F:46:0x0F/0xB8
-
-# jammed door
-F:47:0x0F/0xB8
-
-# secret door
-F:48:0x02/0xBC
-
-# pile of rubble
-F:49:0x02/0xBB
-
-# magma vein
-F:50:0x01/0xBC
-
-# quartz vein
-F:51:0x09/0xBC
-
-# magma vein
-F:52:0x01/0xBC
-
-# quartz vein
-F:53:0x09/0xBC
-
-# magma vein with treasure
-F:54:0x03/0xBC
-
-# quartz vein with treasure
-F:55:0x03/0xBC
-
-# granite wall
-F:56:0x02/0xBC
-
-# granite wall
-F:57:0x02/0xBC
-
-# granite wall
-F:58:0x02/0xBC
-
-# granite wall
-F:59:0x02/0xBC
-
-# permanent wall
-F:60:0x02/0xBC
-
-# permanent wall
-F:61:0x02/0xBC
-
-# permanent wall
-F:62:0x02/0xBC
-
-# permanent wall
-F:63:0x02/0xBC
-
-# explosive rune
-F:64:0x0C/0xC6
-
-# Straight Road startpoint
-F:65:0x01/0xCA
-
-# section of the Straight Road
-F:66:0x0E/0xCA
-
-# section of the Straight Road
-F:67:0x06/0xCA
-
-# section of the Straight Road
-F:68:0x0E/0xCA
-
-# section of the Straight Road
-F:69:0x06/0xCA
-
-# section of the Straight Road
-F:70:0x09/0xCA
-
-# section of the Straight Road (discharged)
-F:71:0x09/0xCA
-
-# Straight Road exit
-F:72:0x01/0xCA
-
-# corrupted section of the Straight Road
-F:73:0x08/0xCA
-
-# Building
-F:74:0x0F/0xC5
-
-# permanent wall
-F:75:0x02/0xBC
-
-# permanent wall
-F:76:0x02/0xBC
-
-# permanent wall
-F:77:0x02/0xBC
-
-# permanent wall
-F:78:0x02/0xBC
-
-# stream of shallow water
-F:84:0x0E/0xCB
-
-# pool of deep lava
-F:85:0x04/0xCB
-
-# stream of shallow lava
-F:86:0x0C/0xCB
-
-# dark pit
-F:87:0x08/0xD0
-
-# dirt
-F:88:0x07/0xB5
-
-# patch of grass
-F:89:0x0D/0xC9
-
-# ice
-F:90:0x01/0xD0
-
-# sand
-F:91:0x0F/0xB5
-
-# dead tree
-F:92:0x08/0xCC
-
-# ash
-F:93:0x02/0xB5
-
-# mud
-F:94:0x07/0xB5
-
-# ice wall
-F:95:0x01/0xCF
-
-# tree
-F:96:0x05/0xCC
-
-# mountain chain
-F:97:0x02/0xCE
-
-# sandwall
-F:98:0x0F/0xCF
-
-# sandwall
-F:99:0x0F/0xCF
-
-# sandwall with treasure
-F:100:0x03/0xCF
-
-# high mountain chain
-F:101:0x01/0xCE
-
-# nether mist
-F:102:0x0A/0xCA
-
-# Void Jumpgate
-F:160:0x0A/0xB9
-
-# Altar of Being
-F:161:0x09/0xD1
-
-# Altar of Winds
-F:162:0x0E/0xD1
-
-# Altar of Force
-F:163:0x0C/0xD1
-
-# Altar of Darkness
-F:164:0x08/0xD1
-
-# Altar of Nature
-# F:165:0x05/0x30
-
-# floor
-F:172:0x01/0xB5
-
-# Underground Tunnel
-F:173:0x02/0xB9
-
-# stream of tainted water
-F:174:0x0A/0xCB
-
-# monster trap
-F:175:0x0A/0xC6
-
-# Void Jumpgate
-F:176:0x0A/0xB9
-
-# lava wall
-F:177:0x0C/0xBC
-
-# Great Fire
-F:178:0x0C/0xCB
-
-# path to the next area
-F:179:0x01/0xB7
-
-# path to the previous area
-F:180:0x01/0xB6
-
-# field
-F:181:0x05/0xB5
-
-# Ekkaia, the Encircling Sea
-F:182:0x06/0xCB
-
-# pool of deep water
-F:187:0x06/0xCB
-
-# glass wall
-F:188:0x0E/0xD0
-
-# illusion wall
-F:189:0x02/0xBC
-
-# Grass roof
-F:190:0x0F/0xCA
-
-# grass roof top
-F:191:0x0F/0xCA
-
-# grass roof chimney
-F:192:0x0F/0xCA
-
-# brick roof
-F:193:0x04/0xCF
-
-# brick roof top
-F:194:0x04/0xCF
-
-# brick roof chimney
-F:195:0x04/0xCF
-
-# window
-F:196:0x01/0x4F
-
-# small window
-F:197:0x01/0x6F
-
-# rain barrel
-F:198:0x02/0xBC
-
-# grass with flowers
-F:199:0x04/0xC9
-
-# cobblestone road
-F:200:0x02/0xB5
-
-# cobblestone with outlet
-F:201:0x02/0xB5
-
-# small tree
-F:202:0x0D/0xCD
-
-# town
-F:203:0x01/0xC5
-
-# Underground Tunnel
-F:204:0x02/0xB9
-
-# a blazing fire
-F:205:0x0C/0xCB
-
-# pile of rubble
-F:206:0x02/0xBB
-
-# rocky ground
-F:207:0x02/0xB5
-
-# cloud-like vapour
-F:208:0x09/0xCA
-
-# condensing water
-F:209:0x0E/0xCB
-
-# dense mist
-F:210:0x01/0xCA
-
-# hail-stone wall
-F:211:0x09/0xBC
-
-
-##### Building attr/char definitions #####
-
-# General Store
-B:0:0x0F/0xBD
-
-# Armoury
-B:1:0x02/0xBE
-
-# Weaponsmith
-B:2:0x01/0xBF
-
-# Temple
-B:3:0x05/0xC0
-
-# Alchemy shop
-B:4:0x06/0xC1
-
-# Magic shop
-B:5:0x04/0xC4
-
-# Black Market
-B:6:0x08/0xC3
-
-# Home
-B:7:0x0B/0xB8
-
-# Book Store
-B:8:0x03/0xC2
-
-# Pet Shop
-B:9:0x06/0xB8
-
-# Mayor's Office
-B:10:0x03/0xB8
-
-# Inn
-B:11:0x01/0xB8
-
-# The Soothsayer
-B:12:0x0E/0xB8
-
-# Library
-B:13:0x0F/0xC2
-
-# Castle
-B:14:0x03/0xB8
-
-# Casino
-B:15:0x02/0xB8
-
-# Beastmaster Shanty
-B:16:0x05/0xB8
-
-# Fighters Hall
-B:17:0x02/0xB8
-
-# Tower of Magery
-B:18:0x06/0xB8
-
-# Inner Temple
-B:19:0x0D/0xC0
-
-# Paladins Guild
-B:20:0x05/0xB8
-
-# Rangers Guild
-B:21:0x07/0xB8
-
-# Thunderlords' Nest
-B:22:0x0F/0xB8
-
-# The Mirror
-B:23:0x0F/0xB8
-
-# Seat of Ruling
-B:24:0x0F/0xCC
-
-# Wizards Spire
-B:25:0x0F/0xB8
-
-# Priests Circle
-B:26:0x03/0xB8
-
-# Tower of the King
-B:27:0x0F/0xB8
-
-# Library
-B:28:0x0F/0xC2
-
-# The White Tree
-B:29:0x01/0xCC
-
-# Craftsmaster
-B:30:0x02/0xB8
-
-# Earth-Dome (Nature)
-B:31:0x0F/0xB8
-
-# Minstrels Haven
-B:32:0x0F/0xB8
-
-# Star-Dome
-B:33:0x0F/0xB8
-
-# Valarin Temple
-B:34:0x0F/0xC0
-
-# Sea-Dome
-B:35:0x0F/0xB8
-
-# The Golden Flower
-B:36:0x0F/0xB8
-
-# The Fountain
-B:37:0x0F/0xC8
-
-# Axe Smith
-B:38:0x01/0xBF
-
-# Hafted Smith
-B:39:0x01/0xBF
-
-# Polearm Smith
-B:40:0x01/0xBF
-
-# Sword Smith
-B:41:0x01/0xBF
-
-# Rare Jewelry Shop
-B:42:0x0A/0xC4
-
-# Jewelry Shop
-B:43:0x0B/0xC4
-
-# Footwear Shop
-B:44:0x04/0xBE
-
-# Rare Footwear Shop
-B:45:0x04/0xBE
-
-# Library
-B:46:0x0B/0xC2
-
-# Forbidden Library
-B:47:0x0A/0xC2
-
-# Expensive Black Market
-B:48:0x0A/0xC3
-
-# Common Shop
-B:49:0x0F/0xBD
-
-# Dragon Hunter
-B:50:0x0A/0xBE
-
-# Speed Ring Market
-B:51:0x0D/0xC4
-
-# Scribe
-B:52:0x0E/0xC1
-
-# Potion Store
-B:53:0x0E/0xC1
-
-# Recaller
-B:54:0x06/0xB8
-
-# Master Archer
-B:55:0x05/0xBF
-
-# Merchants Guild
-B:56:0x05/0xB8
-
-# The Mathom-house
-B:57:0x05/0xB8
-
-# The Prancing Pony
-B:58:0x01/0xB8
-
-# Mining Supply store
-B:59:0x02/0xB8
-
-
-##### Object attr/char definitions #####
-
-# something
-# K:0:0x01/0x26
-
-# Blindness
-K:1:0x00/0xEE
-
-# Paranoia
-K:2:0x00/0xEE
-
-# Confusion
-K:3:0x00/0xEE
-
-# Hallucination
-K:4:0x00/0xEE
-
-# Cure Poison
-K:5:0x00/0xEE
-
-# Cure Blindness
-K:6:0x00/0xEE
-
-# Cure Paranoia
-K:7:0x00/0xEE
-
-# Cure Confusion
-K:8:0x00/0xEE
-
-# Weakness
-K:9:0x00/0xEE
-
-# Unhealth
-K:10:0x00/0xEE
-
-# Restore Constitution
-K:11:0x00/0xEE
-
-# Restoring
-K:12:0x00/0xEE
-
-# Stupidity
-K:13:0x00/0xEE
-
-# Naivety
-K:14:0x00/0xEE
-
-# Poison
-K:15:0x00/0xEE
-
-# Sickness
-K:16:0x00/0xEE
-
-# Paralysis
-K:17:0x00/0xEE
-
-# Restore Strength
-K:18:0x00/0xEE
-
-# Disease
-K:19:0x00/0xEE
-
-# Cure Serious Wounds
-K:20:0x00/0xEE
-
-# & Ration~ of Food
-K:21:0x0F/0xF2
-
-# & Hard Biscuit~
-K:22:0x0F/0xF2
-
-# & Strip~ of Venison
-K:23:0x07/0xF2
-
-# & Slime Mold~
-K:24:0x05/0xF2
-
-# & Lembas~
-K:25:0x0E/0xF2
-
-# & Pint~ of Fine Ale
-K:26:0x0B/0xED
-
-# & Pint~ of Fine Wine
-K:27:0x04/0xED
-
-# & Mattock~
-K:28:0x08/0xD9
-
-# & Blue Stone~
-K:29:0x0E/0xE7
-
-# & Broken Dagger~
-K:30:0x08/0xDC
-
-# & Bastard Sword~
-K:31:0x09/0xDC
-
-# & Scimitar~
-K:32:0x09/0xDC
-
-# & Tulwar~
-K:33:0x09/0xDC
-
-# & Broad Sword~
-K:34:0x09/0xDC
-
-# & Short Sword~
-K:35:0x09/0xDC
-
-# & Blade~ of Chaos
-K:36:0x0A/0xDC
-
-# & Two-Handed Sword~
-K:37:0x09/0xDC
-
-# & Main Gauche~
-K:38:0x09/0xDC
-
-# & Cutlass~
-K:39:0x09/0xDC
-
-# & Executioner's Sword~
-K:40:0x04/0xDC
-
-# & Katana~
-K:41:0x09/0xDC
-
-# & Long Sword~
-K:42:0x09/0xDC
-
-# & Dagger~
-K:43:0x09/0xDC
-
-# & Rapier~
-K:44:0x09/0xDC
-
-# & Sabre~
-K:45:0x09/0xDC
-
-# & Small Sword~
-K:46:0x09/0xDC
-
-# & Broken Sword~
-K:47:0x08/0xDC
-
-# & Ball-and-Chain~
-K:48:0x08/0xDA
-
-# & Whip~
-K:49:0x08/0xDA
-
-# & Flail~
-K:50:0x08/0xDA
-
-# & Two-Handed Flail~
-K:51:0x0B/0xDA
-
-# & Morning Star~
-K:52:0x08/0xDA
-
-# & Mace~
-K:53:0x08/0xDA
-
-# & Quarterstaff~
-K:54:0x0F/0xDA
-
-# & War Hammer~
-K:55:0x08/0xDA
-
-# & Lead-Filled Mace~
-K:56:0x08/0xDA
-
-# & Mace~ of Disruption
-K:57:0x0A/0xDA
-
-# & Lucerne Hammer~
-K:58:0x0E/0xDA
-
-# & Beaked Axe~
-K:59:0x02/0xDB
-
-# & Glaive~
-K:60:0x02/0xDB
-
-# & Halberd~
-K:61:0x02/0xDB
-
-# & Awl-Pike~
-K:62:0x02/0xDB
-
-# & Pike~
-K:63:0x02/0xDB
-
-# & Spear~
-K:64:0x02/0xDB
-
-# & Trident~
-K:65:0x0B/0xDB
-
-# & Lance~
-K:66:0x02/0xDB
-
-# & Great Axe~
-K:67:0x02/0xDB
-
-# & Battle Axe~
-K:68:0x02/0xDB
-
-# & Lochaber Axe~
-K:69:0x08/0xDB
-
-# & Broad Axe~
-K:70:0x02/0xDB
-
-# & Scythe~
-K:71:0x02/0xDB
-
-# & Scythe~ of Slicing
-K:72:0x04/0xDB
-
-# & Short Bow~
-K:73:0x0F/0xD8
-
-# & Long Bow~
-K:74:0x0F/0xD8
-
-# & Light Crossbow~
-K:75:0x02/0xD8
-
-# & Heavy Crossbow~
-K:76:0x02/0xD8
-
-# & Sling~
-K:77:0x07/0xD8
-
-# & Arrow~
-K:78:0x0F/0xD7
-
-# & Seeker Arrow~
-K:79:0x0D/0xD7
-
-# & Bolt~
-K:80:0x02/0xD7
-
-# & Seeker Bolt~
-K:81:0x0E/0xD7
-
-# & Rounded Pebble~
-K:82:0x02/0xD6
-
-# & Iron Shot~
-K:83:0x02/0xD6
-
-# & Shovel~
-K:84:0x02/0xD9
-
-# & Gnomish Shovel~
-K:85:0x0D/0xD9
-
-# & Dwarven Shovel~
-K:86:0x0E/0xD9
-
-# & Pick~
-K:87:0x02/0xD9
-
-# & Orcish Pick~
-K:88:0x05/0xD9
-
-# & Dwarven Pick~
-K:89:0x06/0xD9
-
-# & Elven Cloak~
-K:90:0x0D/0xE2
-
-# & Pair~ of Soft Leather Boots
-K:91:0x0F/0xDD
-
-# & Pair~ of Hard Leather Boots
-K:92:0x0F/0xDD
-
-# & Pair~ of Metal Shod Boots
-K:93:0x02/0xDD
-
-# & Hard Leather Cap~
-K:94:0x07/0xDF
-
-# & Metal Cap~
-K:95:0x02/0xDF
-
-# & Iron Helm~
-K:96:0x02/0xDF
-
-# & Steel Helm~
-K:97:0x09/0xDF
-
-# & Iron Crown~
-K:98:0x02/0xE0
-
-# & Golden Crown~
-K:99:0x0B/0xE0
-
-# & Jewel Encrusted Crown~
-K:100:0x0A/0xE0
-
-# & Robe~
-K:101:0x06/0xE3
-
-# & Filthy Rag~
-K:102:0x08/0xE3
-
-# Soft Leather Armour~
-K:103:0x0F/0xE3
-
-# Soft Studded Leather~
-K:104:0x0F/0xE3
-
-# Hard Leather Armour~
-K:105:0x0F/0xE3
-
-# Hard Studded Leather~
-K:106:0x0F/0xE3
-
-# Leather Scale Mail~
-K:107:0x0F/0xE3
-
-# Metal Scale Mail~
-K:108:0x02/0xE4
-
-# Chain Mail~
-K:109:0x02/0xE4
-
-# Rusty Chain Mail~
-K:110:0x04/0xE4
-
-# Augmented Chain Mail~
-K:111:0x02/0xE4
-
-# Bar Chain Mail~
-K:112:0x02/0xE4
-
-# Metal Brigandine Armour~
-K:113:0x02/0xE4
-
-# Partial Plate Armour~
-K:114:0x09/0xE4
-
-# Metal Lamellar Armour~
-K:115:0x09/0xE4
-
-# Full Plate Armour~
-K:116:0x09/0xE4
-
-# Ribbed Plate Armour~
-K:117:0x09/0xE4
-
-# Adamantite Plate Mail~
-K:118:0x0D/0xE4
-
-# Mithril Plate Mail~
-K:119:0x0E/0xE4
-
-# Mithril Chain Mail~
-K:120:0x0E/0xE4
-
-# Double Chain Mail~
-K:121:0x02/0xE4
-
-# & Shield~ of Deflection
-K:122:0x0E/0xE1
-
-# & Cloak~
-K:123:0x05/0xE2
-
-# & Shadow Cloak~
-K:124:0x08/0xE2
-
-# & Set~ of Leather Gloves
-K:125:0x0F/0xDE
-
-# & Set~ of Gauntlets
-K:126:0x0F/0xDE
-
-# & Set~ of Cesti
-K:127:0x09/0xDE
-
-# & Small Leather Shield~
-K:128:0x0F/0xE1
-
-# & Large Leather Shield~
-K:129:0x0F/0xE1
-
-# & Small Metal Shield~
-K:130:0x02/0xE1
-
-# & Large Metal Shield~
-K:131:0x02/0xE1
-
-# Strength
-K:132:0x00/0xE8
-
-# Dexterity
-K:133:0x00/0xE8
-
-# Constitution
-K:134:0x00/0xE8
-
-# Intelligence
-K:135:0x00/0xE8
-
-# Speed
-K:136:0x00/0xE8
-
-# Searching
-K:137:0x00/0xE8
-
-# Teleportation
-K:138:0x00/0xE8
-
-# Slow Digestion
-K:139:0x00/0xE8
-
-# Fire Resistance
-K:140:0x00/0xE8
-
-# Cold Resistance
-K:141:0x00/0xE8
-
-# Levitation
-K:142:0x00/0xE8
-
-# Poison Resistance
-K:143:0x00/0xE8
-
-# Free Action
-K:144:0x00/0xE8
-
-# Weakness
-K:145:0x00/0xE8
-
-# Flames
-K:146:0x00/0xE8
-
-# Acid
-K:147:0x00/0xE8
-
-# Ice
-K:148:0x00/0xE8
-
-# Woe
-K:149:0x00/0xE8
-
-# Stupidity
-K:150:0x00/0xE8
-
-# Damage
-K:151:0x00/0xE8
-
-# Accuracy
-K:152:0x00/0xE8
-
-# Protection
-K:153:0x00/0xE8
-
-# Aggravate Monster
-K:154:0x00/0xE8
-
-# See Invisible
-K:155:0x00/0xE8
-
-# Sustain Strength
-K:156:0x00/0xE8
-
-# Sustain Intelligence
-K:157:0x00/0xE8
-
-# Sustain Wisdom
-K:158:0x00/0xE8
-
-# Sustain Constitution
-K:159:0x00/0xE8
-
-# Sustain Dexterity
-K:160:0x00/0xE8
-
-# Sustain Charisma
-K:161:0x00/0xE8
-
-# Slaying
-K:162:0x00/0xE8
-
-# Brilliance
-K:163:0x00/0xE7
-
-# Charisma
-K:164:0x00/0xE7
-
-# Searching
-K:165:0x00/0xE7
-
-# Teleportation
-K:166:0x00/0xE7
-
-# Slow Digestion
-K:167:0x00/0xE7
-
-# Acid Resistance
-K:168:0x00/0xE7
-
-# Adornment
-K:169:0x00/0xE7
-
-# Double Ring Mail~
-K:170:0x02/0xE4
-
-# the Magi
-K:171:0x00/0xE7
-
-# Doom
-K:172:0x00/0xE7
-
-# Enchant Weapon To-Hit
-K:173:0x00/0xEC
-
-# Enchant Weapon To-Dam
-K:174:0x00/0xEC
-
-# Enchant Armor
-K:175:0x00/0xEC
-
-# Identify
-K:176:0x00/0xEC
-
-# *Identify*
-K:177:0x00/0xEC
-
-# Rumour
-K:178:0x00/0xEC
-
-# Chaos
-K:179:0x00/0xEC
-
-# Remove Curse
-K:180:0x00/0xEC
-
-# Light
-K:181:0x00/0xEC
-
-# Fire
-K:182:0x00/0xEC
-
-# Ice
-K:183:0x00/0xEC
-
-# Summon Monster
-K:184:0x00/0xEC
-
-# Phase Door
-K:185:0x00/0xEC
-
-# Teleportation
-K:186:0x00/0xEC
-
-# Teleport Level
-K:187:0x00/0xEC
-
-# Monster Confusion
-K:188:0x00/0xEC
-
-# Magic Mapping
-K:189:0x00/0xEC
-
-# Rune of Protection
-K:190:0x00/0xEC
-
-# *Remove Curse*
-K:191:0x00/0xEC
-
-# Treasure Detection
-K:192:0x00/0xEC
-
-# Object Detection
-K:193:0x00/0xEC
-
-# Trap Detection
-K:194:0x00/0xEC
-
-# & Sheaf Arrow~
-K:195:0x03/0xD7
-
-# & Mithril Shot~
-K:196:0x0E/0xD6
-
-# Door/Stair Location
-K:197:0x00/0xEC
-
-# Acquirement
-K:198:0x00/0xEC
-
-# *Acquirement*
-K:199:0x00/0xEC
-
-# Mass Genocide
-K:200:0x00/0xEC
-
-# Detect Invisible
-K:201:0x00/0xEC
-
-# Aggravate Monster
-K:202:0x00/0xEC
-
-# Trap Creation
-K:203:0x00/0xEC
-
-# Trap/Door Destruction
-K:204:0x00/0xEC
-
-# Artifact Creation
-K:205:0x00/0xEC
-
-# Recharging
-K:206:0x00/0xEC
-
-# Genocide
-K:207:0x00/0xEC
-
-# Darkness
-K:208:0x00/0xEC
-
-# Protection from Evil
-K:209:0x00/0xEC
-
-# Satisfy Hunger
-K:210:0x00/0xEC
-
-# Dispel Undead
-K:211:0x00/0xEC
-
-# *Enchant Weapon*
-K:212:0x00/0xEC
-
-# Curse Weapon
-K:213:0x00/0xEC
-
-# *Enchant Armor*
-K:214:0x00/0xEC
-
-# Curse Armor
-K:215:0x00/0xEC
-
-# Summon Undead
-K:216:0x00/0xEC
-
-# Blessing
-K:217:0x00/0xEC
-
-# Holy Chant
-K:218:0x00/0xEC
-
-# Holy Prayer
-K:219:0x00/0xEC
-
-# Word of Recall
-K:220:0x00/0xEC
-
-# *Destruction*
-K:221:0x00/0xEC
-
-# Slime Mold Juice
-K:222:0x00/0xED
-
-# Apple Juice
-K:223:0x00/0xED
-
-# Water
-K:224:0x00/0xED
-
-# Strength
-K:225:0x00/0xED
-
-# Weakness
-K:226:0x00/0xED
-
-# Restore Strength
-K:227:0x00/0xED
-
-# Intelligence
-K:228:0x00/0xED
-
-# Stupidity
-K:229:0x00/0xED
-
-# Restore Intelligence
-K:230:0x00/0xED
-
-# Wisdom
-K:231:0x00/0xED
-
-# Naivety
-K:232:0x00/0xED
-
-# Restore Wisdom
-K:233:0x00/0xED
-
-# Charisma
-K:234:0x00/0xED
-
-# Ugliness
-K:235:0x00/0xED
-
-# Restore Charisma
-K:236:0x00/0xED
-
-# Curing
-K:237:0x00/0xED
-
-# Invulnerability
-K:238:0x00/0xED
-
-# New Life
-K:239:0x00/0xED
-
-# Cure Serious Wounds
-K:240:0x00/0xED
-
-# Cure Critical Wounds
-K:241:0x00/0xED
-
-# Healing
-K:242:0x00/0xED
-
-# Constitution
-K:243:0x00/0xED
-
-# Experience
-K:244:0x00/0xED
-
-# Sleep
-K:245:0x00/0xED
-
-# Blindness
-K:246:0x00/0xED
-
-# Booze
-K:247:0x00/0xED
-
-# Poison
-K:248:0x00/0xED
-
-# Speed
-K:249:0x00/0xED
-
-# Slowness
-K:250:0x00/0xED
-
-# Dexterity
-K:251:0x00/0xED
-
-# Restore Dexterity
-K:252:0x00/0xED
-
-# Restore Constitution
-K:253:0x00/0xED
-
-# Lose Memories
-K:254:0x00/0xED
-
-# Salt Water
-K:255:0x00/0xED
-
-# Enlightenment
-K:256:0x00/0xED
-
-# Heroism
-K:257:0x00/0xED
-
-# Berserk Strength
-K:258:0x00/0xED
-
-# Boldness
-K:259:0x00/0xED
-
-# Restore Life Levels
-K:260:0x00/0xED
-
-# Resist Heat
-K:261:0x00/0xED
-
-# Resist Cold
-K:262:0x00/0xED
-
-# Detect Invisible
-K:263:0x00/0xED
-
-# Slow Poison
-K:264:0x00/0xED
-
-# Neutralise Poison
-K:265:0x00/0xED
-
-# Restore Mana
-K:266:0x00/0xED
-
-# Infra-vision
-K:267:0x00/0xED
-
-# Resistance
-K:268:0x00/0xED
-
-# Spell
-K:269:0x00/0xEA
-
-# Manathrust
-K:270:0x00/0xEA
-
-# Fireflash
-K:271:0x00/0xEA
-
-# Firewall
-K:272:0x00/0xEA
-
-# Tidal Wave
-K:273:0x00/0xEA
-
-# Ice Storm
-K:274:0x00/0xEA
-
-# Noxious Cloud
-K:275:0x00/0xEA
-
-# Poison Blood
-K:276:0x00/0xEA
-
-# Thunderstorm
-K:277:0x00/0xEA
-
-# Dig
-K:278:0x00/0xEA
-
-# Stone Prison
-K:279:0x00/0xEA
-
-# Strike
-K:280:0x00/0xEA
-
-# Teleport Away
-K:281:0x00/0xEA
-
-# Summon Animal
-K:282:0x00/0xEA
-
-# Magelock
-K:283:0x00/0xEA
-
-# Slow Monster
-K:284:0x00/0xEA
-
-# Essence of Speed
-K:285:0x00/0xEA
-
-# Banishment
-K:286:0x00/0xEA
-
-# Disperse Magic
-K:287:0x00/0xEA
-
-# Charm
-K:288:0x00/0xEA
-
-# Confuse
-K:289:0x00/0xEA
-
-# Demon Blade
-K:290:0x00/0xEA
-
-# Heal Monster
-K:291:0x00/0xEA
-
-# Haste Monster
-K:292:0x00/0xEA
-
-# & Flight Arrow~
-K:293:0x0B/0xD7
-
-# Spell
-K:300:0x00/0xE9
-
-# Nothing
-K:301:0x00/0xE9
-
-# Globe of Light
-K:302:0x00/0xE9
-
-# Fiery Shield
-K:303:0x00/0xE9
-
-# Remove Curses
-K:304:0x00/0xE9
-
-# Wings of Winds
-K:305:0x00/0xE9
-
-# Shake
-K:306:0x00/0xE9
-
-# Disarm
-K:307:0x00/0xE9
-
-# Teleportation
-K:308:0x00/0xE9
-
-# Probability Travel
-K:309:0x00/0xE9
-
-# Recovery
-K:310:0x00/0xE9
-
-# Healing
-K:311:0x00/0xE9
-
-# Vision
-K:312:0x00/0xE9
-
-# Identify
-K:313:0x00/0xE9
-
-# Sense Hidden
-K:314:0x00/0xE9
-
-# Reveal Ways
-K:315:0x00/0xE9
-
-# Sense Monsters
-K:316:0x00/0xE9
-
-# Genocide
-K:317:0x00/0xE9
-
-# Summon
-K:318:0x00/0xE9
-
-# Wish
-K:320:0x00/0xE9
-
-# Mana
-K:321:0x00/0xE9
-
-# & Tome~ of Magical Energy
-K:330:0x0E/0xEF
-
-# & Tome~ of the Eternal Flame
-K:331:0x0C/0xEF
-
-# & Tome~ of the Blowing Wind
-K:332:0x06/0xEF
-
-# & Tome~ of the Impenetrable Earth
-K:333:0x0F/0xEF
-
-# & Tome~ of the Everrunning Wave
-K:334:0x0E/0xEF
-
-# & Tome~ of Translocation
-K:335:0x0E/0xEF
-
-# & Tome~ of the Tree
-K:336:0x0D/0xEF
-
-# & Tome~ of Knowledge
-K:337:0x08/0xEF
-
-# & Small wooden chest~
-K:338:0x02/0xD5
-
-# & Large wooden chest~
-K:339:0x02/0xD5
-
-# & Small iron chest~
-K:340:0x02/0xD5
-
-# & Large iron chest~
-K:341:0x02/0xD5
-
-# & Small steel chest~
-K:342:0x02/0xD5
-
-# & Large steel chest~
-K:343:0x02/0xD5
-
-# & Ruined chest~
-K:344:0x02/0xD5
-
-# & Iron Spike~
-K:345:0x09/0xD4
-
-# & Wooden Torch~
-K:346:0x07/0xF1
-
-# & Brass Lantern~
-K:347:0x0F/0xE6
-
-# & Flask~ of oil
-K:348:0x0B/0xED
-
-# & Empty Bottle~
-K:349:0x01/0xED
-
-# Havoc
-K:350:0x00/0xEB
-
-# Door/Stair Location
-K:351:0x00/0xEB
-
-# Trap Location
-K:352:0x00/0xEB
-
-# Probing
-K:353:0x00/0xEB
-
-# Recall
-K:354:0x00/0xEB
-
-# Illumination
-K:355:0x00/0xEB
-
-# Light
-K:356:0x00/0xEB
-
-# Lightning Bolts
-K:357:0x00/0xEB
-
-# Frost Bolts
-K:358:0x00/0xEB
-
-# Fire Bolts
-K:359:0x00/0xEB
-
-# Polymorph
-K:360:0x00/0xEB
-
-# Slow Monster
-K:361:0x00/0xEB
-
-# Sleep Monster
-K:362:0x00/0xEB
-
-# Drain Life
-K:363:0x00/0xEB
-
-# Teleport Other
-K:364:0x00/0xEB
-
-# Disarming
-K:365:0x00/0xEB
-
-# Lightning Balls
-K:366:0x00/0xEB
-
-# Cold Balls
-K:367:0x00/0xEB
-
-# Fire Balls
-K:368:0x00/0xEB
-
-# Acid Balls
-K:369:0x00/0xEB
-
-# Acid Bolts
-K:370:0x00/0xEB
-
-# Enlightenment
-K:371:0x00/0xEB
-
-# Perception
-K:372:0x00/0xEB
-
-# Curing
-K:373:0x00/0xEB
-
-# Healing
-K:374:0x00/0xEB
-
-# Detection
-K:375:0x00/0xEB
-
-# Restoration
-K:376:0x00/0xEB
-
-# Speed
-K:377:0x00/0xEB
-
-# Spell
-K:378:0x00/0xE8
-
-# Spell
-K:379:0x00/0xE7
-
-# & Broken Skull~
-K:391:0x01/0xD3
-
-# & Broken Bone~
-K:392:0x01/0xD3
-
-# & Canine Skeleton~
-K:393:0x01/0xD3
-
-# & Rodent Skeleton~
-K:394:0x01/0xD3
-
-# & Human Skeleton~
-K:395:0x01/0xD3
-
-# & Dwarf Skeleton~
-K:396:0x01/0xD3
-
-# & Elf Skeleton~
-K:397:0x01/0xD3
-
-# & Gnome Skeleton~
-K:398:0x01/0xD3
-
-# & Great Hammer~
-K:399:0x08/0xDA
-
-# Black Dragon Scale Mail~
-K:400:0x02/0xE5
-
-# Blue Dragon Scale Mail~
-K:401:0x06/0xE5
-
-# White Dragon Scale Mail~
-K:402:0x01/0xE5
-
-# Red Dragon Scale Mail~
-K:403:0x04/0xE5
-
-# Green Dragon Scale Mail~
-K:404:0x05/0xE5
-
-# Multi-Hued Dragon Scale Mail~
-K:405:0x0A/0xE5
-
-# Pseudo Dragon Scale Mail~
-K:406:0x0A/0xE5
-
-# Law Dragon Scale Mail~
-K:407:0x0E/0xE5
-
-# Bronze Dragon Scale Mail~
-K:408:0x0F/0xE5
-
-# Gold Dragon Scale Mail~
-K:409:0x0B/0xE5
-
-# Chaos Dragon Scale Mail~
-K:410:0x0A/0xE5
-
-# Balance Dragon Scale Mail~
-K:411:0x0A/0xE5
-
-# Power Dragon Scale Mail~
-K:412:0x0A/0xE5
-
-# & Dragon Helm~
-K:413:0x0D/0xDF
-
-# & Dragon Shield~
-K:414:0x0D/0xE1
-
-# Death
-K:415:0x00/0xED
-
-# Ruination
-K:416:0x00/0xED
-
-# Detonations
-K:417:0x00/0xED
-
-# Augmentation
-K:418:0x00/0xED
-
-# *Healing*
-K:419:0x00/0xED
-
-# Life
-K:420:0x00/0xED
-
-# Self Knowledge
-K:421:0x00/0xED
-
-# *Enlightenment*
-K:422:0x00/0xED
-
-# Fear Resistance
-K:425:0x00/0xE8
-
-# Light and Darkness Resistance
-K:426:0x00/0xE8
-
-# Nether Resistance
-K:427:0x00/0xE8
-
-# Nexus Resistance
-K:428:0x00/0xE8
-
-# Sound Resistance
-K:429:0x00/0xE8
-
-# Confusion Resistance
-K:430:0x00/0xE8
-
-# Shard Resistance
-K:431:0x00/0xE8
-
-# Disenchantment Resistance
-K:432:0x00/0xE8
-
-# Chaos Resistance
-K:433:0x00/0xE8
-
-# Blindness Resistance
-K:434:0x00/0xE8
-
-# Lordly Protection
-K:435:0x00/0xE8
-
-# Extra Attacks
-K:436:0x00/0xE8
-
-# Cure Light Wounds
-K:437:0x00/0xED
-
-# Clumsiness
-K:438:0x00/0xED
-
-# Sickliness
-K:439:0x00/0xED
-
-# Map of Bree
-K:440:0x02/0xEC
-
-# Map of Gondolin
-K:441:0x02/0xEC
-
-# Map of Lothlorien
-K:442:0x02/0xEC
-
-# Map of Minas Anor
-K:443:0x02/0xEC
-
-# & Silver Arrow~
-K:465:0x09/0xD7
-
-# & Silver Bolt~
-K:466:0x01/0xD7
-
-# Lightning Resistance
-K:467:0x00/0xE7
-
-# Wisdom
-K:468:0x00/0xE7
-
-# Regeneration
-K:469:0x00/0xE7
-
-# Infravision
-K:470:0x00/0xE7
-
-# Devotion
-K:471:0x00/0xE7
-
-# Weaponmastery
-K:472:0x00/0xE7
-
-# Trickery
-K:473:0x00/0xE7
-
-# Telepathy
-K:474:0x00/0xE7
-
-# Sustenance
-K:475:0x00/0xE7
-
-# & Palantir~
-K:476:0x0B/0xF0
-
-# & Elfstone~
-K:477:0x05/0xE7
-
-# & Jewel~
-K:478:0x01/0xE7
-
-# & Ring~
-K:479:0x00/0xE8
-
-# copper
-K:480:0x07/0xF3
-
-# copper
-K:481:0x07/0xF3
-
-# copper
-K:482:0x07/0xF3
-
-# silver
-K:483:0x02/0xF3
-
-# silver
-K:484:0x02/0xF3
-
-# silver
-K:485:0x02/0xF3
-
-# garnets
-K:486:0x04/0xF4
-
-# garnets
-K:487:0x04/0xF4
-
-# gold
-K:488:0x0B/0xF3
-
-# gold
-K:489:0x0B/0xF3
-
-# gold
-K:490:0x0B/0xF3
-
-# opals
-K:491:0x09/0xF4
-
-# sapphires
-K:492:0x06/0xF4
-
-# rubies
-K:493:0x04/0xF4
-
-# diamonds
-K:494:0x01/0xF4
-
-# emeralds
-K:495:0x05/0xF4
-
-# mithril
-K:496:0x0E/0xF3
-
-# adamantite
-K:497:0x0D/0xF3
-
-# & Mighty Hammer~
-K:498:0x08/0xDA
-
-# & Massive Iron Crown~
-K:499:0x08/0xE0
-
-# & Phial~
-K:500:0x0B/0xF0
-
-# & Star~
-K:501:0x0E/0xF0
-
-# & Arkenstone~
-K:502:0x0C/0xF0
-
-# & Amulet~
-K:503:0x00/0xE7
-
-# & Amulet~
-K:504:0x00/0xE7
-
-# & Necklace~
-K:505:0x00/0xE7
-
-# & Ring~
-K:506:0x00/0xE8
-
-# & Ring~
-K:507:0x00/0xE8
-
-# & Ring~
-K:508:0x00/0xE8
-
-# & Ring~
-K:509:0x00/0xE8
-
-# & Ring~
-K:510:0x00/0xE8
-
-# & Ring~
-K:511:0x0B/0xE8
-
-# Reflection
-K:520:0x00/0xE7
-
-# Anti-Magic
-K:521:0x00/0xE7
-
-# Anti-Teleportation
-K:522:0x00/0xE7
-
-# Resistance
-K:523:0x00/0xE7
-
-# & Zweihander~
-K:524:0x01/0xDC
-
-# & Dwarven Lantern~
-K:525:0x06/0xE6
-
-# Splint Mail~
-K:526:0x08/0xE4
-
-# & Everburning Torch~
-K:527:0x0C/0xF1
-
-# & Trifurcate Spear~
-K:528:0x03/0xDB
-
-# & Three Piece Rod~
-K:529:0x07/0xDA
-
-# & Feanorian Lamp~
-K:530:0x0E/0xE6
-
-# & Fur Cloak~
-K:531:0x09/0xE2
-
-# Water Curing
-K:532:0x00/0xED
-
-# & Hatchet~
-K:533:0x02/0xDB
-
-# Rhino Hide Armour~
-K:535:0x02/0xE3
-
-# Leather Jacket~
-K:536:0x0F/0xE3
-
-# & Sickle~
-K:537:0x02/0xDB
-
-# & Club~
-K:542:0x07/0xDA
-
-# & Broad Spear~
-K:543:0x01/0xDB
-
-# & Khopesh~
-K:544:0x09/0xDC
-
-# & Flamberge~
-K:545:0x09/0xDC
-
-# & Claymore~
-K:546:0x09/0xDC
-
-# & Espadon~
-K:547:0x09/0xDC
-
-# & Great Scimitar~
-K:548:0x09/0xDC
-
-# Arrow
-K:549:0x04/0xF8
-
-# Bolt
-K:550:0x03/0xF8
-
-# & Fauchard~
-K:551:0x02/0xDB
-
-# & Guisarme~
-K:552:0x02/0xDB
-
-# & Heavy Lance~
-K:553:0x02/0xDB
-
-# & Basillard~
-K:554:0x01/0xDC
-
-# Catapult
-K:555:0x0C/0xF8
-
-# Ring Mail~
-K:556:0x02/0xE4
-
-# Cord Armour~
-K:557:0x0B/0xE3
-
-# Paper Armour~
-K:558:0x01/0xE3
-
-# Padded Armour~
-K:559:0x0B/0xE3
-
-# Fumes
-K:560:0x0D/0xF8
-
-# Stone and Hide Armour~
-K:561:0x0F/0xE3
-
-# Magic
-K:562:0x05/0xF8
-
-# Device
-K:563:0x0A/0xF8
-
-# Nothing
-K:564:0x00/0xEC
-
-# Poison
-K:565:0x0D/0xF6
-
-# Nothing
-K:566:0x00/0xEA
-
-# Nothing
-K:567:0x00/0xE8
-
-# Nothing
-K:568:0x00/0xE9
-
-# Nothing
-K:569:0x00/0xEB
-
-# Explosion
-K:570:0x0D/0xF6
-
-# Teleport
-K:571:0x0D/0xF6
-
-# Nothing
-K:572:0x00/0xE7
-
-# & Blood~ of Life
-K:573:0x00/0xED
-
-# Cold
-K:574:0x0D/0xF6
-
-# Fire
-K:575:0x0D/0xF6
-
-# Acid
-K:576:0x0D/0xF6
-
-# & Mage Staff~
-K:577:0x0E/0xE9
-
-# Lightning
-K:578:0x00/0xE8
-
-# Life
-K:579:0x0D/0xF6
-
-# Confusion
-K:580:0x0D/0xF6
-
-# Light
-K:581:0x0D/0xF6
-
-# & Ring~
-K:582:0x0B/0xE8
-
-# Invisibility
-K:583:0x00/0xED
-
-# Chaos
-K:584:0x0D/0xF6
-
-# Corruption
-K:585:0x00/0xED
-
-# Invisibility
-K:586:0x00/0xE8
-
-# Time
-K:587:0x0D/0xF6
-
-# Deep Thoughts
-K:588:0x03/0xEC
-
-# More Deep Thoughts
-K:589:0x03/0xEC
-
-# Compendium of Deep Thoughts
-K:590:0x03/0xEC
-
-# Artifact Lore Vol. I
-K:591:0x03/0xEC
-
-# Artifact Lore Vol. II
-K:592:0x03/0xEC
-
-# Artifact Lore Vol. III
-K:593:0x03/0xEC
-
-# Monstrous Compendium 1
-K:594:0x03/0xEC
-
-# Monstrous Compendium 2
-K:595:0x03/0xEC
-
-# Monstrous Compendium 3
-K:596:0x03/0xEC
-
-# Monstrous Compendium 4
-K:597:0x03/0xEC
-
-# Monstrous Compendium 5
-K:598:0x03/0xEC
-
-# Monstrous Compendium 6
-K:599:0x03/0xEC
-
-# Monstrous Compendium 7
-K:600:0x03/0xEC
-
-# Monstrous Compendium 8
-K:601:0x03/0xEC
-
-# Monstrous Compendium 9
-K:602:0x03/0xEC
-
-# Monstrous Compendium 10
-K:603:0x03/0xEC
-
-# Monstrous Compendium 11
-K:604:0x03/0xEC
-
-# Abomination
-K:605:0x00/0xED
-
-# Shape of Wolf
-K:606:0x00/0xED
-
-# Shape of Ape
-K:607:0x00/0xED
-
-# Shape of Goat
-K:608:0x00/0xED
-
-# Shape of Insect
-K:609:0x00/0xED
-
-# Shape of Sparrow
-K:610:0x00/0xED
-
-# Shape of Ent
-K:611:0x00/0xED
-
-# Shape of Vampire
-K:612:0x00/0xED
-
-# Shape of Spider
-K:613:0x00/0xED
-
-# Shape of Mana ball
-K:614:0x00/0xED
-
-# Shape of Fire cloud
-K:615:0x00/0xED
-
-# Shape of Cold cloud
-K:616:0x00/0xED
-
-# Shape of Chaos cloud
-K:617:0x00/0xED
-
-# [Wolf]
-K:618:0x0B/0xE2
-
-# [Ape]
-K:619:0x0B/0xE2
-
-# [Goat]
-K:620:0x0B/0xE2
-
-# [Insect]
-K:621:0x0B/0xE2
-
-# [Sparrow]
-K:622:0x0B/0xE2
-
-# [Ent]
-K:623:0x0B/0xE2
-
-# [Vampire]
-K:624:0x0B/0xE2
-
-# [Spider]
-K:625:0x0B/0xE2
-
-# [Mana ball]
-K:626:0x0B/0xE2
-
-# [Fire cloud]
-K:627:0x0B/0xE2
-
-# [Cold cloud]
-K:628:0x0B/0xE2
-
-# [Chaos Cloud]
-K:629:0x0B/0xE2
-
-# [Ghost]
-K:630:0x0B/0xE2
-
-# [Kobold]
-K:631:0x0B/0xE2
-
-# [Dragon]
-K:632:0x0B/0xE2
-
-# [Demon]
-K:633:0x0B/0xE2
-
-# [Hound]
-K:634:0x0B/0xE2
-
-# [Quylthulg]
-K:635:0x0B/0xE2
-
-# [Maia]
-K:636:0x0B/0xE2
-
-# [Serpent]
-K:637:0x0B/0xE2
-
-# [Giant]
-K:638:0x0B/0xE2
-
-# [Vala]
-K:639:0x0B/0xE2
-
-# Magic
-K:640:0x0D/0xF6
-
-# corpse
-K:641:0x0F/0xD2
-
-# skeleton
-K:642:0x0F/0xD2
-
-# head
-K:643:0x0F/0xD2
-
-# skull
-K:644:0x0F/0xD2
-
-# raw meat
-K:645:0x0F/0xD2
-
-# & Thunderlord Coat~
-K:646:0x0B/0xE3
-
-# & Stone~
-K:647:0x05/0xF0
-
-# & Small Wooden Boomerang~
-K:648:0x0B/0xD8
-
-# & Wooden Boomerang~
-K:649:0x0B/0xD8
-
-# & Small Metal Boomerang~
-K:650:0x0B/0xD8
-
-# & metal Boomerang~
-K:651:0x0B/0xD8
-
-# & Anchor~
-K:652:0x0A/0xF0
-
-# & ~
-K:653:0x0B/0xD2
-
-# Summon Never-Moving Pet
-K:654:0x00/0xEC
-
-# Cure Light Insanity
-K:657:0x00/0xED
-
-# Cure Serious Insanity
-K:658:0x00/0xED
-
-# Cure Critical Insanity
-K:659:0x00/0xED
-
-# Cure Insanity
-K:660:0x00/0xED
-
-# & Phial~
-K:661:0x0B/0xF0
-
-# Random Artifact
-K:662:0x03/0xD3
-
-# Craftmanship
-K:663:0x00/0xEC
-
-# The One Ring
-K:664:0x02/0xEC
-
-# & Book~ of the Lays of the Heroes
-K:665:0x0B/0xEF
-
-# & Book~ of Sound Patterns
-K:666:0x0B/0xEF
-
-# & Flute~
-K:669:0x09/0xF7
-
-# & Drum~
-K:670:0x09/0xF7
-
-# & Harp~
-K:671:0x09/0xF7
-
-# & Banjo~
-K:672:0x09/0xF7
-
-# & Lute~
-K:673:0x09/0xF7
-
-# & Mandolin~
-K:674:0x09/0xF7
-
-# & Palantir~
-K:675:0x0B/0xF0
-
-# Egg
-K:676:0x09/0xD6
-
-# Reset Recall
-K:677:0x00/0xEC
-
-# Divination
-K:678:0x00/0xEC
-
-# Self
-K:679:0x06/0xF5
-
-# Ray
-K:680:0x06/0xF5
-
-# Sphere
-K:681:0x06/0xF5
-
-# Knowledge
-K:682:0x06/0xF5
-
-# Life
-K:683:0x08/0xF5
-
-# Fire
-K:684:0x04/0xF5
-
-# Cold
-K:685:0x06/0xF5
-
-# Lightning
-K:686:0x09/0xF5
-
-# Acid
-K:687:0x0E/0xF5
-
-# Element
-K:688:0x05/0xF5
-
-# Chaos
-K:689:0x0A/0xF5
-
-# Mind
-K:690:0x08/0xF5
-
-# Holding
-K:691:0x0E/0xF5
-
-# Arrow
-K:692:0x06/0xF5
-
-# Power Surge
-K:693:0x06/0xF5
-
-# Armageddon
-K:694:0x06/0xF5
-
-# Gravity
-K:695:0x0D/0xF5
-
-# Extra Life
-K:696:0x0D/0xF6
-
-# Undeath
-K:697:0x0D/0xF5
-
-# Protection
-K:698:0x0D/0xF5
-
-# & Horn~
-K:699:0x09/0xF7
-
-# & Ring~ of Precognition
-K:700:0x00/0xE8
-
-# & Sprig~ of Athelas
-K:701:0x05/0xF2
-
-# & Old Scroll~ of Deincarnation
-K:720:0x00/0xEC
-
-# & Dark Sword~
-K:721:0x08/0xDC
-
-# Numenorean for Beginners (I)
-K:722:0x02/0xEC
-
-# Numenorean for Beginners (II)
-K:723:0x02/0xEC
-
-# Advanced lessons of Numenorean
-K:724:0x02/0xEC
-
-# Advanced lessons of Sindarin
-K:725:0x02/0xEC
-
-# & Shard~ of Pottery
-K:726:0x04/0xD3
-
-# & Broken Stick~
-K:727:0x04/0xD3
-
-# & Book~ of Beginner Cantrips
-K:738:0x01/0xEF
-
-# & Book~ of Teleportation
-K:739:0x01/0xEF
-
-# & Book~ of Recall
-K:740:0x01/0xEF
-
-# & Book~ of Summoning
-K:741:0x01/0xEF
-
-# & Book~ of Fireflash
-K:742:0x01/0xEF
-
-# & Potion~ of Learning
-K:743:0x00/0xED
-
-# Spell
-K:749:0x00/0xEC
-
-# Khuzdul - The Hidden Tongue of the Dwarves
-K:751:0x02/0xEC
-
-# Nandorin for Dummies
-K:752:0x02/0xEC
-
-# Advanced Lessons of Orcish
-K:753:0x02/0xEC
-
-# Flying
-K:755:0x00/0xE8
-
-# & Tome~ of the Time
-K:756:0x06/0xEF
-
-# & Spellbook~ of #
-K:757:0x01/0xEF
-
-# & Tome~ of Meta Spells
-K:758:0x0A/0xEF
-
-# & Tome~ of the Mind
-K:759:0x0E/0xEF
-
-# & Holy Tome~ of Eru Iluvatar
-K:760:0x0D/0xEF
-
-# & Holy Tome~ of Manwe Sulimo
-K:761:0x0E/0xEF
-
-# & War Tome~ of Tulkas
-K:762:0x0C/0xEF
-
-# & Unholy Tome~ of the Hellflame
-K:763:0x0A/0xEF
-
-# & Corrupted Tome~ of Melkor
-K:764:0x08/0xEF
-
-# & Forest Tome~ of Yavanna
-K:768:0x0D/0xEF
-
-# & Ring~
-K:770:0x00/0xE8
-
-# [Earth]
-K:771:0x0C/0xEF
-
-# [Fire]
-K:772:0x0C/0xEF
-
-# [Air]
-K:773:0x04/0xEF
-
-# [Water]
-K:774:0x04/0xEF
-
-# [Mana]
-K:775:0x04/0xEF
-
-# Home Summoning
-K:776:0x00/0xEB
-
-# & Shadow Blade~
-K:777:0x08/0xDC
-
-# & Bluesteel Blade~
-K:778:0x06/0xDC
-
-# the Serpents
-K:779:0x0D/0xE7
-
-# Darkness
-K:780:0x0D/0xF6
-
-# Knowledge
-K:781:0x0D/0xF6
-
-# Force
-K:782:0x0D/0xF6
-
-# Lightning
-K:783:0x0D/0xF6
-
-# Mana
-K:784:0x0D/0xF6
-
-# Ring~ of Power
-K:785:0x00/0xE8
-
-# Climbing Set~
-K:786:0x0E/0xF8
-
-# Adventurer's Guide to Middle-earth
-K:787:0x03/0xEC
-
-# & Demonblade~
-K:788:0x0C/0xEF
-
-# & Demonshield~
-K:789:0x0C/0xEF
-
-# & Demonhorn~
-K:790:0x0C/0xEF
-
-# & Wooden Rod~ of#
-K:793:0x07/0xEB
-
-# & Copper Rod~ of#
-K:794:0x02/0xEB
-
-# & Iron Rod~ of#
-K:795:0x08/0xEB
-
-# & Moonstone Rod~ of#
-K:796:0x0F/0xEB
-
-# & Silver Rod~ of#
-K:797:0x02/0xEB
-
-# & Golden Rod~ of#
-K:798:0x0B/0xEB
-
-# & Mithril Rod~ of#
-K:799:0x0E/0xEB
-
-# & Adamantite Rod~ of#
-K:800:0x0A/0xEB
-
-# & Greater Ration~ of Health
-K:801:0x05/0xF2
-
-# & Crumpled Scroll~ of Mass Resurrection
-K:802:0x00/0xEC
-
-# & Cleaver~
-K:803:0x02/0xDB
-
-# & Light War Axe~
-K:804:0x02/0xDB
-
-# & Slaughter Axe~
-K:805:0x0D/0xDB
-
-# & Runestone~
-K:806:0x0A/0xF5
-
-# & Fortune cookie~
-K:807:0x0F/0xF2
-
-# Portable hole
-K:808:0x0E/0xF8
-
-# Critical Hits
-K:809:0x00/0xE8
-
-# & Wand~ of Digging of Thrain
-K:810:0x00/0xEA
-
-# & Gnarled Staff~ of Holy Fire of Mithrandir
-K:811:0x00/0xE9
-
-# Partial Totem
-K:812:0x0A/0xF8
-
-# True Totem
-K:813:0x0A/0xF8
-
-# & Piece~ of the Relic of Eru
-K:814:0x0A/0xD3
-
-# & Piece~ of the Relic of Manwe
-K:815:0x0A/0xD3
-
-# & Piece~ of the Relic of Tulkas
-K:816:0x0A/0xD3
-
-# & Piece~ of the Relic of Melkor
-K:817:0x0A/0xD3
-
-# & Piece~ of the Relic of Yavanna
-K:818:0x0A/0xD3
-
-
-##### Monster attr/char definitions #####
-
-# Player
-R:0:0x01/0x80
-
-# Filthy street urchin
-R:1:0x08/0xAE
-
-# Scrawny cat
-R:2:0x0F/0xA0
-
-# Sparrow
-R:3:0x0F/0x82
-
-# Chaffinch
-R:4:0x04/0x82
-
-# Wild rabbit
-R:5:0x0F/0xAC
-
-# Woodsman
-R:6:0x05/0xAE
-
-# Scruffy little dog
-R:7:0x0F/0x83
-
-# Farmer Maggot
-R:8:0x01/0xA2
-
-# Blubbering idiot
-R:9:0x09/0xAE
-
-# Boil-covered wretch
-R:10:0x05/0xAE
-
-# Village idiot
-R:11:0x0D/0xAE
-
-# Pitiful-looking beggar
-R:12:0x0F/0xAE
-
-# Mangy-looking leper
-R:13:0x07/0xAE
-
-# Agent of the black market
-R:14:0x06/0xAE
-
-# Singing, happy drunk
-R:15:0x0B/0xAE
-
-# Aimless-looking merchant
-R:16:0x03/0xAE
-
-# Mean-looking mercenary
-R:17:0x04/0xAE
-
-# Battle-scarred veteran
-R:18:0x0E/0xAE
-
-# Martti Ihrasaari
-R:19:0x01/0x90
-
-# Grey mold
-R:20:0x02/0xA7
-
-# Large white snake
-R:21:0x01/0x8A
-
-# Grey mushroom patch
-R:22:0x02/0xEE
-
-# Newt
-R:23:0x0B/0x92
-
-# Giant white centipede
-R:24:0x01/0x9D
-
-# White icky thing
-R:25:0x01/0xA3
-
-# Clear icky thing
-R:26:0x0E/0xA3
-
-# Giant white mouse
-R:27:0x01/0xAC
-
-# Large brown snake
-R:28:0x07/0x8A
-
-# Small kobold
-R:29:0x0B/0xA5
-
-# Kobold
-R:30:0x0D/0xA5
-
-# White worm mass
-R:31:0x01/0xB1
-
-# Floating eye
-R:32:0x03/0x9F
-
-# Rock lizard
-R:33:0x0F/0x92
-
-# Grid bug
-R:34:0x0A/0x89
-
-# Jackal
-R:35:0x0F/0x83
-
-# Soldier ant
-R:36:0x07/0x9B
-
-# Fruit bat
-R:37:0x03/0x9C
-
-# Insect swarm
-R:38:0x07/0x89
-
-# The Greater hell-beast
-R:39:0x02/0x95
-
-# Shrieker mushroom patch
-R:40:0x0C/0xEE
-
-# Blubbering icky thing
-R:41:0x09/0xA3
-
-# Metallic green centipede
-R:42:0x05/0x9D
-
-# Novice warrior
-R:43:0x07/0xAA
-
-# Novice rogue
-R:44:0x06/0xAA
-
-# Novice priest
-R:45:0x05/0xAA
-
-# Novice mage
-R:46:0x04/0xAA
-
-# Yellow mushroom patch
-R:47:0x0B/0xEE
-
-# White jelly
-R:48:0x01/0xA4
-
-# Giant black ant
-R:49:0x08/0x9B
-
-# Salamander
-R:50:0x03/0x92
-
-# White harpy
-R:51:0x01/0x88
-
-# Blue yeek
-R:52:0x06/0xB3
-
-# Grip, Farmer Maggot's dog
-R:53:0x01/0x83
-
-# Wolf, Farmer Maggot's dog
-R:54:0x01/0x83
-
-# Fang, Farmer Maggot's dog
-R:55:0x01/0x83
-
-# Giant green frog
-R:56:0x05/0x92
-
-# Freesia
-R:57:0x07/0xA0
-
-# Green worm mass
-R:58:0x05/0xB1
-
-# Large yellow snake
-R:59:0x0B/0x8A
-
-# Cave spider
-R:60:0x08/0x93
-
-# Crow
-R:61:0x02/0x82
-
-# Wild cat
-R:62:0x0F/0xA0
-
-# Smeagol
-R:63:0x0E/0xA2
-
-# Green ooze
-R:64:0x05/0xA4
-
-# Poltergeist
-R:65:0x02/0x87
-
-# Yellow jelly
-R:66:0x0B/0xA4
-
-# Metallic blue centipede
-R:67:0x06/0x9D
-
-# Raven
-R:68:0x08/0x82
-
-# Giant white louse
-R:69:0x01/0x89
-
-# Giant yellow centipede
-R:70:0x0B/0x9D
-
-# Black naga
-R:71:0x08/0xA8
-
-# Spotted mushroom patch
-R:72:0x03/0xEE
-
-# Silver jelly
-R:73:0x09/0xA4
-
-# Scruffy-looking hobbit
-R:74:0x02/0xA2
-
-# Giant white ant
-R:75:0x01/0x9B
-
-# Yellow mold
-R:76:0x0B/0xA7
-
-# Metallic red centipede
-R:77:0x04/0x9D
-
-# Yellow worm mass
-R:78:0x0B/0xB1
-
-# Clear worm mass
-R:79:0x0E/0xB1
-
-# Radiation eye
-R:80:0x0C/0x9F
-
-# Yellow light
-R:81:0x0B/0xF0
-
-# Cave lizard
-R:82:0x07/0x92
-
-# Novice ranger
-R:83:0x09/0xAA
-
-# Blue jelly
-R:84:0x06/0xA4
-
-# Creeping copper coins
-R:85:0x07/0xF3
-
-# Giant white rat
-R:86:0x09/0xAC
-
-# Snotling
-R:87:0x0F/0xA9
-
-# Swordfish
-R:88:0x09/0x7E
-
-# Blue worm mass
-R:89:0x06/0xB1
-
-# Large grey snake
-R:90:0x02/0x8A
-
-# Skeleton kobold
-R:91:0x09/0xAD
-
-# Ewok
-R:92:0x0D/0xA2
-
-# Novice mage
-R:93:0x04/0xAA
-
-# Green naga
-R:94:0x05/0xA8
-
-# Giant leech
-R:95:0x07/0xB1
-
-# Barracuda
-R:96:0x0D/0x7E
-
-# Novice paladin
-R:97:0x01/0xAA
-
-# Zog
-R:98:0x06/0xA2
-
-# Blue ooze
-R:99:0x06/0xA4
-
-# Green glutton ghost
-R:100:0x05/0x87
-
-# Green jelly
-R:101:0x05/0xA4
-
-# Large kobold
-R:102:0x06/0xA5
-
-# Grey icky thing
-R:103:0x02/0xA3
-
-# Disenchanter eye
-R:104:0x0A/0x9F
-
-# Red worm mass
-R:105:0x04/0xB1
-
-# Copperhead snake
-R:106:0x03/0x8A
-
-# Death sword
-R:107:0x09/0xDC
-
-# Purple mushroom patch
-R:108:0x0A/0xEE
-
-# Novice priest
-R:109:0x05/0xAA
-
-# Novice warrior
-R:110:0x07/0xAA
-
-# Nibelung
-R:111:0x08/0xA2
-
-# The disembodied hand that strangled people
-R:112:0x05/0xB4
-
-# Brown mold
-R:113:0x07/0xA7
-
-# Giant brown bat
-R:114:0x07/0x9C
-
-# Rat-thing
-R:115:0x0C/0xAC
-
-# Novice rogue
-R:116:0x06/0xAA
-
-# Creeping silver coins
-R:117:0x02/0xF3
-
-# Snaga
-R:118:0x0F/0xA9
-
-# Rattlesnake
-R:119:0x04/0x8A
-
-# Giant slug
-R:120:0x0F/0xB1
-
-# Giant pink frog
-R:121:0x04/0x92
-
-# Dark elf
-R:122:0x08/0xA2
-
-# Zombified kobold
-R:123:0x02/0xB4
-
-# Crypt creep
-R:124:0x08/0xAD
-
-# Rotting corpse
-R:125:0x0C/0xB4
-
-# Cave orc
-R:126:0x0D/0xA9
-
-# Wood spider
-R:127:0x0F/0x93
-
-# Manes
-R:128:0x04/0xAF
-
-# Bloodshot eye
-R:129:0x04/0x9F
-
-# Red naga
-R:130:0x04/0xA8
-
-# Red jelly
-R:131:0x04/0xA4
-
-# Green icky thing
-R:132:0x05/0xA3
-
-# Lost soul
-R:133:0x09/0x87
-
-# Night lizard
-R:134:0x06/0x92
-
-# Mughash, the Kobold Lord
-R:135:0x0A/0xA5
-
-# Skeleton orc
-R:136:0x09/0xAD
-
-# Wormtongue, Agent of Saruman
-R:137:0x0E/0xAA
-
-# Robin Hood, the Outlaw
-R:138:0x0D/0xAA
-
-# Nurgling
-R:139:0x03/0xAF
-
-# Lagduf, the Snaga
-R:140:0x0B/0xA9
-
-# Brown yeek
-R:141:0x07/0xB3
-
-# Novice ranger
-R:142:0x09/0xAA
-
-# Giant salamander
-R:143:0x0C/0x92
-
-# Space monster
-R:144:0x00/0xB5
-
-# Carnivorous flying monkey
-R:145:0x0C/0x88
-
-# Green mold
-R:146:0x05/0xA7
-
-# Novice paladin
-R:147:0x01/0xAA
-
-# Lemure
-R:148:0x0F/0xAF
-
-# Hill orc
-R:149:0x07/0xA9
-
-# Bandit
-R:150:0x06/0xAA
-
-# Hunting hawk
-R:151:0x07/0x82
-
-# Phantom warrior
-R:152:0x0E/0x87
-
-# Gremlin
-R:153:0x07/0xAF
-
-# Yeti
-R:154:0x01/0x99
-
-# Bloodshot icky thing
-R:155:0x04/0xA3
-
-# Giant grey rat
-R:156:0x02/0xAC
-
-# Black harpy
-R:157:0x08/0x88
-
-# Skaven
-R:158:0x0D/0xAC
-
-# The wounded bear
-R:159:0x04/0xAB
-
-# Cave bear
-R:160:0x07/0xAB
-
-# Rock mole
-R:161:0x02/0xAC
-
-# Mindcrafter
-R:162:0x0B/0xAA
-
-# Baby blue dragon
-R:163:0x06/0x9E
-
-# Baby white dragon
-R:164:0x01/0x9E
-
-# Baby green dragon
-R:165:0x05/0x9E
-
-# Baby black dragon
-R:166:0x02/0x9E
-
-# Baby red dragon
-R:167:0x04/0x9E
-
-# Giant red ant
-R:168:0x04/0x9B
-
-# Brodda, the Easterling
-R:169:0x0F/0xAA
-
-# Bloodfang, the Wolf
-R:170:0x0C/0x83
-
-# King cobra
-R:171:0x05/0x8A
-
-# Eagle
-R:172:0x07/0x82
-
-# War bear
-R:173:0x07/0xAB
-
-# Killer bee
-R:174:0x0B/0x89
-
-# Giant spider
-R:175:0x0A/0x93
-
-# Giant white tick
-R:176:0x01/0x93
-
-# The Borshin
-R:177:0x01/0xA1
-
-# Dark elven mage
-R:178:0x04/0xA2
-
-# Kamikaze yeek
-R:179:0x04/0xB3
-
-# Orfax, Son of Boldor
-R:180:0x0E/0xB3
-
-# Servant of Glaaki
-R:181:0x0D/0xB4
-
-# Dark elven warrior
-R:182:0x07/0xA2
-
-# Sand-dweller
-R:183:0x0B/0xAF
-
-# Clear mushroom patch
-R:184:0x0E/0xEE
-
-# Quiver slot
-R:185:0x0F/0xEE
-
-# Grishnakh, the Hill Orc
-R:186:0x0B/0xA9
-
-# Giant tan bat
-R:187:0x0F/0x9C
-
-# Owlbear
-R:188:0x03/0x88
-
-# Blue horror
-R:189:0x0E/0xAF
-
-# Hairy mold
-R:190:0x03/0xA7
-
-# Grizzly bear
-R:191:0x0F/0xAB
-
-# Disenchanter mold
-R:192:0x0A/0xA7
-
-# Pseudo dragon
-R:193:0x03/0x9E
-
-# Tengu
-R:194:0x06/0xAF
-
-# Creeping gold coins
-R:195:0x0B/0xF3
-
-# Wolf
-R:196:0x07/0x83
-
-# Giant fruit fly
-R:197:0x0D/0x89
-
-# Panther
-R:198:0x08/0xA0
-
-# Brigand
-R:199:0x06/0xAA
-
-# Hobbes the Tiger
-R:200:0x0B/0xA0
-
-# Shadow Creature of Fiona
-R:201:0x02/0xA2
-
-# Undead mass
-R:202:0x07/0xA4
-
-# Chaos shapechanger
-R:203:0x0A/0x88
-
-# Baby multi-hued dragon
-R:204:0x0A/0x9E
-
-# Vorpal bunny
-R:205:0x01/0xAC
-
-# Old Man Willow
-R:206:0x02/0xCC
-
-# Hippocampus
-R:207:0x0E/0x88
-
-# Zombified orc
-R:208:0x02/0xB4
-
-# Hippogriff
-R:209:0x0F/0x88
-
-# Black mamba
-R:210:0x08/0x8A
-
-# White wolf
-R:211:0x01/0x83
-
-# Grape jelly
-R:212:0x0A/0xA4
-
-# Nether worm mass
-R:213:0x08/0xB1
-
-# Abyss worm mass
-R:214:0x08/0xB1
-
-# Golfimbul, the Hill Orc Chief
-R:215:0x0B/0xA9
-
-# Swordsman
-R:216:0x07/0xAA
-
-# Skaven shaman
-R:217:0x05/0xAC
-
-# Baby bronze dragon
-R:218:0x0F/0x9E
-
-# Baby gold dragon
-R:219:0x0B/0x9E
-
-# Evil eye
-R:220:0x08/0x9F
-
-# Mine-dog
-R:221:0x07/0x83
-
-# Hellcat
-R:222:0x0C/0xA0
-
-# Moon beast
-R:223:0x09/0xAB
-
-# Master yeek
-R:224:0x05/0xB3
-
-# Priest
-R:225:0x05/0xAA
-
-# Dark elven priest
-R:226:0x05/0xA2
-
-# Air spirit
-R:227:0x0E/0x85
-
-# Skeleton human
-R:228:0x09/0xAD
-
-# Zombified human
-R:229:0x02/0xB4
-
-# Tiger
-R:230:0x03/0xA0
-
-# Moaning spirit
-R:231:0x07/0x87
-
-# Stegocentipede
-R:232:0x07/0x9D
-
-# Spotted jelly
-R:233:0x03/0xA4
-
-# Drider
-R:234:0x06/0x93
-
-# Mongbat
-R:235:0x0F/0x9C
-
-# Killer brown beetle
-R:236:0x07/0x8B
-
-# Boldor, King of the Yeeks
-R:237:0x0A/0xB3
-
-# Ogre
-R:238:0x0F/0x8F
-
-# Creeping mithril coins
-R:239:0x0E/0xF3
-
-# Illusionist
-R:240:0x0C/0xAA
-
-# Druid
-R:241:0x0D/0xAA
-
-# Pink horror
-R:242:0x0C/0xAF
-
-# Cloaker
-R:243:0x05/0xE2
-
-# Black orc
-R:244:0x08/0xA9
-
-# Ochre jelly
-R:245:0x0F/0xA4
-
-# Software bug
-R:246:0x04/0x89
-
-# Lurker
-R:247:0x01/0xB5
-
-# Tangleweed
-R:248:0x05/0xCC
-
-# Vlasta
-R:249:0x0E/0x92
-
-# Giant white dragon fly
-R:250:0x01/0x86
-
-# Snaga sapper
-R:251:0x0F/0xA9
-
-# Blue icky thing
-R:252:0x06/0xA3
-
-# Gibbering mouther
-R:253:0x03/0xA4
-
-# Wolfhound of Flora
-R:254:0x02/0x83
-
-# Hill giant
-R:255:0x0F/0x90
-
-# Flesh golem
-R:256:0x0C/0xA1
-
-# Warg
-R:257:0x08/0x83
-
-# Cheerful leprechaun
-R:258:0x0D/0xA2
-
-# Giant flea
-R:259:0x02/0x89
-
-# Ufthak of Cirith Ungol
-R:260:0x05/0xA9
-
-# Clay golem
-R:261:0x0F/0xA1
-
-# Black ogre
-R:262:0x08/0x8F
-
-# Dweller on the threshold
-R:263:0x02/0x99
-
-# Half-orc
-R:264:0x02/0xA9
-
-# Dark naga
-R:265:0x02/0xA8
-
-# Poison ivy
-R:266:0x05/0xCC
-
-# Magic mushroom patch
-R:267:0x0E/0xEE
-
-# Plaguebearer of Nurgle
-R:268:0x03/0xB4
-
-# Guardian naga
-R:269:0x0B/0xA8
-
-# Wererat
-R:270:0x08/0xAC
-
-# Light hound
-R:271:0x03/0x9A
-
-# Dark hound
-R:272:0x08/0x9A
-
-# Flying skull
-R:273:0x02/0xAD
-
-# Mi-Go
-R:274:0x0C/0x89
-
-# Giant tarantula
-R:275:0x03/0x93
-
-# Giant clear centipede
-R:276:0x0E/0x9D
-
-# Mirkwood spider
-R:277:0x0D/0x93
-
-# Frost giant
-R:278:0x01/0x90
-
-# Griffon
-R:279:0x07/0x88
-
-# Homunculus
-R:280:0x0B/0xAF
-
-# Gnome mage
-R:281:0x0C/0xA2
-
-# Clear hound
-R:282:0x0E/0x9A
-
-# Umber hulk
-R:283:0x0F/0x98
-
-# Rust monster
-R:284:0x03/0xAB
-
-# Ogrillon
-R:285:0x09/0x8F
-
-# Gelatinous cube
-R:286:0x0D/0xA4
-
-# Giant green dragon fly
-R:287:0x0D/0x86
-
-# Fire giant
-R:288:0x04/0x90
-
-# Hummerhorn
-R:289:0x0B/0x89
-
-# Lizard man
-R:290:0x0D/0xA2
-
-# Ulfast, Son of Ulfang
-R:291:0x0F/0xAA
-
-# Crebain
-R:292:0x08/0x82
-
-# Berserker
-R:293:0x07/0xAA
-
-# Quasit
-R:294:0x03/0xAF
-
-# Sphinx
-R:295:0x03/0x88
-
-# Imp
-R:296:0x05/0xAF
-
-# Forest troll
-R:297:0x05/0x94
-
-# Freezing sphere
-R:298:0x01/0xF0
-
-# Jumping fireball
-R:299:0x04/0xF0
-
-# Ball lightning
-R:300:0x0E/0xF0
-
-# 2-headed hydra
-R:301:0x07/0x8D
-
-# Swamp thing
-R:302:0x05/0x88
-
-# Water spirit
-R:303:0x06/0x85
-
-# Giant red scorpion
-R:304:0x04/0x93
-
-# Earth spirit
-R:305:0x07/0x85
-
-# Fire spirit
-R:306:0x04/0x85
-
-# Fire hound
-R:307:0x04/0x9A
-
-# Cold hound
-R:308:0x01/0x9A
-
-# Energy hound
-R:309:0x06/0x9A
-
-# Lesser Mimic
-R:310:0x0B/0xA7
-
-# Door mimic
-R:311:0x0F/0xB8
-
-# Blink dog
-R:312:0x0E/0x83
-
-# Uruk
-R:313:0x0E/0xA9
-
-# Shagrat, the Orc Captain
-R:314:0x05/0xA9
-
-# Gorbag, the Orc Captain
-R:315:0x05/0xA9
-
-# Shambling mound
-R:316:0x05/0xEE
-
-# Giant Venus Flytrap
-R:317:0x05/0xCC
-
-# Chaos beastman
-R:318:0x07/0x88
-
-# Daemonette of Slaanesh
-R:319:0x0C/0xAF
-
-# Giant bronze dragon fly
-R:320:0x0F/0x86
-
-# Stone giant
-R:321:0x09/0x90
-
-# Giant black dragon fly
-R:322:0x02/0x86
-
-# Stone golem
-R:323:0x09/0xA1
-
-# Red mold
-R:324:0x04/0xA7
-
-# Giant gold dragon fly
-R:325:0x0B/0x86
-
-# Stunwall
-R:326:0x09/0xBC
-
-# Ghast
-R:327:0x07/0xB4
-
-# Neekerbreeker
-R:328:0x08/0x89
-
-# Huorn
-R:329:0x05/0xCC
-
-# Bolg, Son of Azog
-R:330:0x0A/0xA9
-
-# Phase spider
-R:331:0x0E/0x93
-
-# Lizard king
-R:332:0x05/0xA2
-
-# Landmine
-R:333:0x01/0xB5
-
-# Wyvern
-R:334:0x05/0x9E
-
-# Great eagle
-R:335:0x07/0x82
-
-# Livingstone
-R:336:0x09/0xBC
-
-# Earth hound
-R:337:0x07/0x9A
-
-# Air hound
-R:338:0x05/0x9A
-
-# Sabre-tooth tiger
-R:339:0x0B/0xA0
-
-# Acid hound
-R:340:0x02/0x9A
-
-# Chimaera
-R:341:0x04/0x88
-
-# Quylthulg
-R:342:0x0B/0x91
-
-# Sasquatch
-R:343:0x09/0x99
-
-# Weir
-R:344:0x09/0x83
-
-# Ranger
-R:345:0x09/0xAA
-
-# Paladin
-R:346:0x01/0xAA
-
-# Werewolf
-R:347:0x08/0x83
-
-# Dark elven lord
-R:348:0x02/0xA2
-
-# Cloud giant
-R:349:0x06/0x90
-
-# Ugluk, the Uruk
-R:350:0x0A/0xA9
-
-# Blue dragon bat
-R:351:0x06/0x9C
-
-# Mimic
-R:352:0x0B/0xA7
-
-# Ultimate Mimic
-R:353:0x0B/0xA7
-
-# Fire vortex
-R:354:0x04/0xB0
-
-# Acid vortex
-R:355:0x02/0xB0
-
-# Lugdush, the Uruk
-R:356:0x0A/0xA9
-
-# Arch-vile
-R:357:0x09/0xAF
-
-# Cold vortex
-R:358:0x01/0xB0
-
-# Energy vortex
-R:359:0x06/0xB0
-
-# Globefish
-R:360:0x01/0x7E
-
-# Giant firefly
-R:361:0x04/0x89
-
-# Mummified orc
-R:362:0x01/0xB4
-
-# Wolf chieftain
-R:363:0x08/0x83
-
-# Serpent man
-R:364:0x0D/0x8A
-
-# Vampiric mist
-R:365:0x08/0xCA
-
-# Killer stag beetle
-R:366:0x05/0x8B
-
-# Iron golem
-R:367:0x02/0xA1
-
-# Auto-roller
-R:368:0x02/0xA1
-
-# Giant yellow scorpion
-R:369:0x0B/0x93
-
-# Jade monk
-R:370:0x0D/0xAA
-
-# Black ooze
-R:371:0x08/0xA4
-
-# Hardened warrior
-R:372:0x07/0xAA
-
-# Azog, King of the Uruk-Hai
-R:373:0x0A/0xA9
-
-# Fleshhound of Khorne
-R:374:0x0C/0x83
-
-# Dark elven warlock
-R:375:0x0A/0xA2
-
-# Master rogue
-R:376:0x06/0xAA
-
-# Red dragon bat
-R:377:0x04/0x9C
-
-# Killer white beetle
-R:378:0x01/0x8B
-
-# Ice skeleton
-R:379:0x01/0xAD
-
-# Angamaite of Umbar
-R:380:0x0F/0xAA
-
-# Forest wight
-R:381:0x05/0x97
-
-# Khim, Son of Mim
-R:382:0x03/0xA2
-
-# Ibun, Son of Mim
-R:383:0x03/0xA2
-
-# Meneldor the Swift
-R:384:0x07/0x82
-
-# Phantom beast
-R:385:0x0E/0x87
-
-# Giant silver ant
-R:386:0x09/0x9B
-
-# 4-headed hydra
-R:387:0x0B/0x8D
-
-# Lesser hell-beast
-R:388:0x02/0x95
-
-# Tyrannosaur
-R:389:0x05/0x92
-
-# Mummified human
-R:390:0x01/0xB4
-
-# Vampire bat
-R:391:0x08/0x9C
-
-# Sangahyando of Umbar
-R:392:0x0F/0xAA
-
-# It
-R:393:0x09/0xB5
-
-# Banshee
-R:394:0x06/0x87
-
-# Carrion crawler
-R:395:0x03/0x9D
-
-# Xiclotlan
-R:396:0x08/0xCC
-
-# Silent watcher
-R:397:0x02/0xA1
-
-# Pukelman
-R:398:0x08/0xA1
-
-# Disenchanter beast
-R:399:0x0A/0xAB
-
-# Dark elven druid
-R:400:0x0D/0xA2
-
-# Stone troll
-R:401:0x09/0x94
-
-# Black
-R:402:0x00/0xA4
-
-# Hill troll
-R:403:0x02/0x94
-
-# Wereworm
-R:404:0x07/0xB1
-
-# Killer red beetle
-R:405:0x04/0x8B
-
-# Disenchanter bat
-R:406:0x0A/0x9C
-
-# Gnoph-Keh
-R:407:0x02/0xAB
-
-# Giant grey ant
-R:408:0x02/0x9B
-
-# Khufu, the Mummified King
-R:409:0x0A/0xB4
-
-# Gwaihir the Windlord
-R:410:0x07/0x82
-
-# Giant fire tick
-R:411:0x0C/0x93
-
-# Displacer beast
-R:412:0x06/0xA0
-
-# Ulwarth, Son of Ulfang
-R:413:0x0F/0xAA
-
-# Werebear
-R:414:0x08/0xAB
-
-# Cave ogre
-R:415:0x07/0x8F
-
-# White wraith
-R:416:0x01/0x97
-
-# Angel
-R:417:0x03/0x81
-
-# Ghoul
-R:418:0x0F/0xB4
-
-# Mim, Betrayer of Turin
-R:419:0x03/0xA2
-
-# Hellblade
-R:420:0x0A/0xDC
-
-# Killer fire beetle
-R:421:0x0C/0x8B
-
-# Beast of Nurgle
-R:422:0x0B/0xAB
-
-# Creeping adamantite coins
-R:423:0x0D/0xF3
-
-# Algroth
-R:424:0x03/0x94
-
-# Flamer of Tzeentch
-R:425:0x04/0xEE
-
-# Roper
-R:426:0x08/0xBC
-
-# Headless
-R:427:0x07/0x88
-
-# Vibration hound
-R:428:0x0B/0x9A
-
-# Nexus hound
-R:429:0x0A/0x9A
-
-# Half-ogre
-R:430:0x03/0x8F
-
-# Lokkak, the Ogre Chieftain
-R:431:0x0A/0x8F
-
-# Vampire
-R:432:0x09/0x96
-
-# Gorgimaera
-R:433:0x03/0x88
-
-# Shantak
-R:434:0x08/0x88
-
-# Colbran
-R:435:0x0B/0xA1
-
-# Spirit naga
-R:436:0x01/0xA8
-
-# Corpser
-R:437:0x08/0xEE
-
-# Fiend of Slaanesh
-R:438:0x0C/0x93
-
-# Stairway to Hell
-R:439:0x09/0xB7
-
-# 5-headed hydra
-R:440:0x05/0x8D
-
-# Barney the Dinosaur
-R:441:0x0A/0x92
-
-# Black knight
-R:442:0x02/0xAA
-
-# Seahorse
-R:443:0x03/0x7E
-
-# Cyclops
-R:444:0x07/0x90
-
-# Clairvoyant
-R:445:0x0B/0xAA
-
-# Purple worm
-R:446:0x0A/0xB1
-
-# Catoblepas
-R:447:0x05/0xAB
-
-# Lesser wall monster
-R:448:0x09/0xBC
-
-# Mage
-R:449:0x04/0xAA
-
-# Mind flayer
-R:450:0x0A/0xA2
-
-# The Ultimate Dungeon Cleaner
-R:451:0x08/0xA1
-
-# Deep one
-R:452:0x05/0xAF
-
-# Basilisk
-R:453:0x02/0x92
-
-# Ice troll
-R:454:0x01/0x94
-
-# Dhole
-R:455:0x02/0xB1
-
-# Archangel
-R:456:0x0E/0x81
-
-# Greater Mimic
-R:457:0x0B/0xA7
-
-# Chaos tile
-R:458:0x0A/0xB5
-
-# Young blue dragon
-R:459:0x06/0x9E
-
-# Young white dragon
-R:460:0x01/0x9E
-
-# Young green dragon
-R:461:0x05/0x9E
-
-# Young bronze dragon
-R:462:0x0F/0x9E
-
-# Aklash
-R:463:0x0C/0x94
-
-# Mithril golem
-R:464:0x0E/0xA1
-
-# Skeleton troll
-R:465:0x09/0xAD
-
-# Skeletal tyrannosaur
-R:466:0x01/0x92
-
-# Beorn, the Shape-Changer
-R:467:0x08/0xAB
-
-# Thorondor, Lord of Eagles
-R:468:0x07/0x82
-
-# Giant blue ant
-R:469:0x06/0x9B
-
-# Grave wight
-R:470:0x06/0x97
-
-# Shadow drake
-R:471:0x0D/0x9E
-
-# Manticore
-R:472:0x0B/0x88
-
-# Giant army ant
-R:473:0x03/0x9B
-
-# Killer slicer beetle
-R:474:0x0B/0x8B
-
-# Gorgon
-R:475:0x06/0x88
-
-# Gug
-R:476:0x0D/0x90
-
-# Ghost
-R:477:0x01/0x87
-
-# Death watch beetle
-R:478:0x08/0x8B
-
-# Mountain ogre
-R:479:0x02/0x8F
-
-# Nexus quylthulg
-R:480:0x0A/0x91
-
-# Shelob, Spider of Darkness
-R:481:0x08/0x93
-
-# Giant squid
-R:482:0x05/0x7E
-
-# Ghoulking
-R:483:0x08/0xB4
-
-# Doombat
-R:484:0x0C/0x9C
-
-# Ninja
-R:485:0x07/0xAA
-
-# Memory moss
-R:486:0x06/0xEE
-
-# Storm giant
-R:487:0x0E/0x90
-
-# Spectator
-R:488:0x0E/0x9F
-
-# Bokrug
-R:489:0x0A/0x92
-
-# Biclops
-R:490:0x07/0x90
-
-# Half-troll
-R:491:0x0F/0x94
-
-# Ivory monk
-R:492:0x01/0xAA
-
-# Bert the Stone Troll
-R:493:0x09/0x94
-
-# Bill the Stone Troll
-R:494:0x09/0x94
-
-# Tom the Stone Troll
-R:495:0x09/0x94
-
-# Cave troll
-R:496:0x07/0x94
-
-# Anti-paladin
-R:497:0x08/0xAA
-
-# Chaos master
-R:498:0x0A/0xAA
-
-# Barrow wight
-R:499:0x0A/0x97
-
-# Skeleton ettin
-R:500:0x09/0xAD
-
-# Chaos drake
-R:501:0x0A/0x9E
-
-# Law drake
-R:502:0x0E/0x9E
-
-# Balance drake
-R:503:0x0A/0x9E
-
-# Ethereal drake
-R:504:0x03/0x9E
-
-# Groo, the Wanderer
-R:505:0x0F/0xAA
-
-# Fasolt the Giant
-R:506:0x07/0x90
-
-# Shade
-R:507:0x08/0x87
-
-# Spectre
-R:508:0x0F/0x87
-
-# Water troll
-R:509:0x0E/0x94
-
-# Fire elemental
-R:510:0x04/0x85
-
-# Cherub
-R:511:0x0D/0x81
-
-# Water elemental
-R:512:0x06/0x85
-
-# Multi-hued hound
-R:513:0x0A/0x9A
-
-# Invisible stalker
-R:514:0x0B/0x85
-
-# Carrion crawler
-R:515:0x03/0x9D
-
-# Master thief
-R:516:0x06/0xAA
-
-# The Watcher in the Water
-R:517:0x0A/0x7E
-
-# Lich
-R:518:0x03/0x8C
-
-# Gas spore
-R:519:0x05/0x9F
-
-# Master vampire
-R:520:0x05/0x96
-
-# Oriental vampire
-R:521:0x02/0x96
-
-# Greater mummy
-R:522:0x0B/0xB4
-
-# Bloodletter of Khorne
-R:523:0x04/0x95
-
-# Giant grey scorpion
-R:524:0x02/0x93
-
-# Earth elemental
-R:525:0x07/0x85
-
-# Air elemental
-R:526:0x0E/0x85
-
-# Shimmering mold
-R:527:0x06/0xA7
-
-# Gargoyle
-R:528:0x02/0xAF
-
-# Malicious leprechaun
-R:529:0x0A/0xA2
-
-# Eog golem
-R:530:0x07/0xA1
-
-# Little Boy
-R:531:0x08/0xD6
-
-# Dagashi
-R:532:0x07/0xAA
-
-# Headless ghost
-R:533:0x07/0x87
-
-# Dread
-R:534:0x03/0x87
-
-# Leng spider
-R:535:0x0A/0x93
-
-# Gauth
-R:536:0x02/0x9F
-
-# Smoke elemental
-R:537:0x0C/0x85
-
-# Olog
-R:538:0x0B/0x94
-
-# Halfling slinger
-R:539:0x0F/0xA2
-
-# Gravity hound
-R:540:0x09/0x9A
-
-# Acidic cytoplasm
-R:541:0x02/0xA4
-
-# Inertia hound
-R:542:0x09/0x9A
-
-# Impact hound
-R:543:0x07/0x9A
-
-# Shardstorm
-R:544:0x07/0xB0
-
-# Ooze elemental
-R:545:0x05/0x85
-
-# Young black dragon
-R:546:0x02/0x9E
-
-# Mumak
-R:547:0x02/0xAB
-
-# Giant fire ant
-R:548:0x0C/0x9B
-
-# Mature white dragon
-R:549:0x01/0x9E
-
-# Xorn
-R:550:0x07/0x98
-
-# Rogrog the Black Troll
-R:551:0x08/0x94
-
-# Mist giant
-R:552:0x0E/0xCA
-
-# Phantom
-R:553:0x0A/0x87
-
-# Grey wraith
-R:554:0x02/0x97
-
-# Revenant
-R:555:0x07/0x97
-
-# Young multi-hued dragon
-R:556:0x0A/0x9E
-
-# Raal's Tome of Destruction
-R:557:0x04/0xEF
-
-# Colossus
-R:558:0x0D/0xA1
-
-# Young gold dragon
-R:559:0x0B/0x9E
-
-# Mature blue dragon
-R:560:0x06/0x9E
-
-# Mature green dragon
-R:561:0x05/0x9E
-
-# Mature bronze dragon
-R:562:0x0F/0x9E
-
-# Young red dragon
-R:563:0x04/0x9E
-
-# Nightblade
-R:564:0x08/0xA2
-
-# Trapper
-R:565:0x01/0xB5
-
-# Bodak
-R:566:0x04/0xAF
-
-# Time bomb
-R:567:0x01/0xB5
-
-# Mezzodaemon
-R:568:0x03/0xAF
-
-# Elder thing
-R:569:0x0D/0xAF
-
-# Ice elemental
-R:570:0x01/0x85
-
-# Necromancer
-R:571:0x0C/0xAA
-
-# The Greater hell magic mushroom were-quylthulg
-R:572:0x02/0x91
-
-# Lorgan, Chief of the Easterlings
-R:573:0x0A/0xAA
-
-# Chaos spawn
-R:574:0x02/0x9F
-
-# Mummified troll
-R:575:0x01/0xB4
-
-# Storm of Unmagic
-R:576:0x0A/0xB0
-
-# Crypt thing
-R:577:0x0D/0x8C
-
-# Chaos butterfly
-R:578:0x0D/0x89
-
-# Time elemental
-R:579:0x0D/0x85
-
-# Flying polyp
-R:580:0x0C/0x7E
-
-# The Queen Ant
-R:581:0x0A/0x9B
-
-# Will o' the wisp
-R:582:0x09/0x85
-
-# Shan
-R:583:0x0E/0x89
-
-# Magma elemental
-R:584:0x03/0x85
-
-# Black pudding
-R:585:0x08/0xA4
-
-# Killer iridescent beetle
-R:586:0x0A/0x8B
-
-# Nexus vortex
-R:587:0x0A/0xB0
-
-# Plasma vortex
-R:588:0x0C/0xB0
-
-# Mature red dragon
-R:589:0x04/0x9E
-
-# Mature gold dragon
-R:590:0x0B/0x9E
-
-# Crystal drake
-R:591:0x07/0x9E
-
-# Mature black dragon
-R:592:0x02/0x9E
-
-# Mature multi-hued dragon
-R:593:0x0A/0x9E
-
-# Sky whale
-R:594:0x0D/0x7E
-
-# Draebor, the Imp
-R:595:0x0A/0xAF
-
-# Mother Hydra
-R:596:0x0A/0xAF
-
-# Death knight
-R:597:0x08/0xAA
-
-# Castamir the Usurper
-R:598:0x0C/0xAA
-
-# Time vortex
-R:599:0x0E/0xB0
-
-# Shimmering vortex
-R:600:0x03/0xB0
-
-# Ancient blue dragon
-R:601:0x06/0x84
-
-# Ancient bronze dragon
-R:602:0x0F/0x84
-
-# Beholder
-R:603:0x0F/0x9F
-
-# Emperor wight
-R:604:0x04/0x97
-
-# Seraph
-R:605:0x04/0x81
-
-# Vargo, Tyrant of Fire
-R:606:0x04/0x85
-
-# Black wraith
-R:607:0x08/0x97
-
-# Nightgaunt
-R:608:0x08/0x95
-
-# Baron of hell
-R:609:0x0F/0x95
-
-# Scylla
-R:610:0x0E/0x8D
-
-# Monastic lich
-R:611:0x07/0x8C
-
-# Nether wraith
-R:612:0x0D/0x97
-
-# Hellhound
-R:613:0x04/0x83
-
-# 7-headed hydra
-R:614:0x0D/0x8D
-
-# Waldern, King of Water
-R:615:0x06/0x85
-
-# Kavlax the Many-Headed
-R:616:0x0A/0x9E
-
-# Ancient white dragon
-R:617:0x01/0x84
-
-# Ancient green dragon
-R:618:0x05/0x84
-
-# Chthonian
-R:619:0x08/0xB1
-
-# Eldrak
-R:620:0x04/0x94
-
-# Ettin
-R:621:0x06/0x94
-
-# Night mare
-R:622:0x0D/0xAB
-
-# Vampire lord
-R:623:0x06/0x96
-
-# Ancient black dragon
-R:624:0x02/0x84
-
-# Weird fume
-R:625:0x0A/0xCA
-
-# Spawn of Ubbo-Sathla
-R:626:0x0A/0xA4
-
-# Fat Man
-R:627:0x08/0xD6
-
-# Malekith the Accursed
-R:628:0x0A/0xA2
-
-# Shadowfax, steed of Gandalf
-R:629:0x0A/0xAB
-
-# Spirit troll
-R:630:0x0D/0x87
-
-# War troll
-R:631:0x06/0x94
-
-# Disenchanter worm mass
-R:632:0x0A/0xB1
-
-# Rotting quylthulg
-R:633:0x07/0x91
-
-# Lesser titan
-R:634:0x0B/0x90
-
-# 9-headed hydra
-R:635:0x04/0x8D
-
-# Enchantress
-R:636:0x0C/0xAA
-
-# Ranger chieftain
-R:637:0x09/0xAA
-
-# Sorcerer
-R:638:0x0C/0xAA
-
-# Xaren
-R:639:0x02/0x98
-
-# Giant roc
-R:640:0x07/0x82
-
-# Minotaur
-R:641:0x0F/0x88
-
-# Medusa, the Gorgon
-R:642:0x0A/0xA8
-
-# Death drake
-R:643:0x0D/0x84
-
-# Ancient red dragon
-R:644:0x04/0x84
-
-# Ancient gold dragon
-R:645:0x0B/0x84
-
-# Great crystal drake
-R:646:0x0F/0x84
-
-# Wyrd sister
-R:647:0x0A/0xAA
-
-# Vrock
-R:648:0x02/0x95
-
-# Death quasit
-R:649:0x08/0xAF
-
-# Giganto, the Gargantuan
-R:650:0x02/0x7E
-
-# Strygalldwir
-R:651:0x09/0x95
-
-# Fallen angel
-R:652:0x02/0x81
-
-# Giant headless
-R:653:0x07/0x88
-
-# Judge Fire
-R:654:0x0C/0xAD
-
-# Ubbo-Sathla, the Unbegotten Source
-R:655:0x09/0xA4
-
-# Judge Mortis
-R:656:0x0D/0xB4
-
-# Dark elven sorcerer
-R:657:0x0C/0xA2
-
-# Master lich
-R:658:0x04/0x8C
-
-# Byakhee
-R:659:0x08/0x95
-
-# Eol, the Dark Elf
-R:660:0x08/0xA2
-
-# Archon
-R:661:0x0B/0x81
-
-# Formless spawn of Tsathoggua
-R:662:0x08/0x95
-
-# Hunting horror
-R:663:0x08/0x95
-
-# Undead beholder
-R:664:0x07/0x9F
-
-# Shadow
-R:665:0x08/0x87
-
-# Iron lich
-R:666:0x02/0x8C
-
-# Dread
-R:667:0x03/0x87
-
-# Greater basilisk
-R:668:0x08/0x92
-
-# Charybdis
-R:669:0x04/0x7E
-
-# Jack of Shadows
-R:670:0x02/0xAA
-
-# Zephyr Lord
-R:671:0x0A/0x97
-
-# Juggernaut of Khorne
-R:672:0x08/0xA1
-
-# Mumak
-R:673:0x02/0xAB
-
-# Judge Fear
-R:674:0x08/0x97
-
-# Ancient multi-hued dragon
-R:675:0x0A/0x84
-
-# Ethereal dragon
-R:676:0x03/0x84
-
-# Dark young of Shub-Niggurath
-R:677:0x05/0x95
-
-# Colour out of space
-R:678:0x0A/0xB5
-
-# Quaker, Master of Earth
-R:679:0x07/0x85
-
-# Death leprechaun
-R:680:0x08/0xA2
-
-# Chaugnar Faugn, Horror from the Hills
-R:681:0x08/0xAB
-
-# Lloigor
-R:682:0x0E/0xB0
-
-# Utgard-Loke
-R:683:0x0A/0x90
-
-# Quachil Uttaus, Treader of the Dust
-R:684:0x08/0xB4
-
-# Shoggoth
-R:685:0x08/0xA4
-
-# Judge Death
-R:686:0x08/0x97
-
-# Ariel, Queen of Air
-R:687:0x0E/0x85
-
-# 11-headed hydra
-R:688:0x0C/0x8D
-
-# Patriarch
-R:689:0x0D/0xAA
-
-# Dreadmaster
-R:690:0x0B/0x87
-
-# Drolem
-R:691:0x05/0xA1
-
-# Scatha the Worm
-R:692:0x09/0x84
-
-# Warrior of the Dawn
-R:693:0x0C/0xAA
-
-# Lesser black reaver
-R:694:0x08/0x8C
-
-# Zoth-Ommog
-R:695:0x0A/0x92
-
-# Grand master thief
-R:696:0x06/0xAA
-
-# Smaug the Golden
-R:697:0x0C/0x84
-
-# The Stormbringer
-R:698:0x08/0xDC
-
-# Knight Templar
-R:699:0x01/0xAA
-
-# Leprechaun fanatic
-R:700:0x04/0xA2
-
-# Dracolich
-R:701:0x0D/0x84
-
-# Greater titan
-R:702:0x03/0x90
-
-# Dracolisk
-R:703:0x0C/0x84
-
-# Winged Horror
-R:704:0x08/0x82
-
-# Spectral tyrannosaur
-R:705:0x0D/0x92
-
-# Yibb-Tstll, the Patient One
-R:706:0x08/0x90
-
-# Ghatanothoa
-R:707:0x08/0xB0
-
-# Ent
-R:708:0x0D/0xCC
-
-# Hru
-R:709:0x02/0x90
-
-# Itangast the Fire Drake
-R:710:0x0C/0x84
-
-# Death mold
-R:711:0x08/0xA7
-
-# Fafner the Dragon
-R:712:0x0D/0x84
-
-# Charon, Boatman of the Styx
-R:713:0x0E/0x97
-
-# Quickbeam, the Ent
-R:714:0x0D/0xCC
-
-# Glaurung, Father of the Dragons
-R:715:0x0C/0x84
-
-# Behemoth
-R:716:0x0E/0x88
-
-# Garm, Guardian of Hel
-R:717:0x06/0x83
-
-# Greater wall monster
-R:718:0x09/0xBC
-
-# Nycadaemon
-R:719:0x03/0x95
-
-# Barbazu
-R:720:0x0D/0x95
-
-# Goat of Mendes
-R:721:0x08/0xAB
-
-# Nightwing
-R:722:0x08/0x97
-
-# Maulotaur
-R:723:0x02/0x88
-
-# Nether hound
-R:724:0x0D/0x9A
-
-# Time hound
-R:725:0x0E/0x9A
-
-# Plasma hound
-R:726:0x0C/0x9A
-
-# Demonic quylthulg
-R:727:0x04/0x91
-
-# Great Storm Wyrm
-R:728:0x06/0x84
-
-# Ulik the Troll
-R:729:0x0A/0x94
-
-# Baphomet the Minotaur Lord
-R:730:0x0A/0x88
-
-# Hell knight
-R:731:0x08/0xAA
-
-# Bull Gates
-R:732:0x08/0xAA
-
-# Santa Claus
-R:733:0x04/0xA2
-
-# Eihort, the Thing in the Labyrinth
-R:734:0x0C/0xA4
-
-# The King in Yellow
-R:735:0x0B/0x8C
-
-# Great unclean one
-R:736:0x05/0x95
-
-# Lord of Chaos
-R:737:0x0A/0xAA
-
-# Old Sorcerer
-R:738:0x0C/0xAA
-
-# Ethereal hound
-R:739:0x0D/0x9A
-
-# Lesser kraken
-R:740:0x0D/0x7E
-
-# Great Ice Wyrm
-R:741:0x01/0x84
-
-# Demilich
-R:742:0x0F/0x8C
-
-# The Phoenix
-R:743:0x04/0x82
-
-# Nightcrawler
-R:744:0x08/0x97
-
-# Lord of Change
-R:745:0x0A/0x95
-
-# Keeper of Secrets
-R:746:0x0D/0x88
-
-# Shudde M'ell
-R:747:0x02/0xB1
-
-# Hand druj
-R:748:0x0B/0xAD
-
-# Eye druj
-R:749:0x04/0xAD
-
-# Skull druj
-R:750:0x03/0xAD
-
-# Chaos vortex
-R:751:0x0A/0xB0
-
-# Aether vortex
-R:752:0x0A/0xB0
-
-# Nidhogg, the Hel-Drake
-R:753:0x08/0x84
-
-# The Lernaean Hydra
-R:754:0x0A/0x8D
-
-# Thuringwethil, the Vampire Messenger
-R:755:0x0A/0x96
-
-# Great Hell Wyrm
-R:756:0x04/0x84
-
-# Hastur the Unspeakable
-R:757:0x06/0x88
-
-# Bloodthirster
-R:758:0x04/0x95
-
-# Draconic quylthulg
-R:759:0x05/0x91
-
-# Nyogtha, the Thing that Should not Be
-R:760:0x08/0xA4
-
-# Ahtu, Avatar of Nyarlathotep
-R:761:0x08/0xBC
-
-# Fundin Bluecloak
-R:762:0x0E/0xA2
-
-# Bile Demon
-R:763:0x0C/0x95
-
-# Uriel, Angel of Fire
-R:764:0x0C/0x81
-
-# Azriel, Angel of Death
-R:765:0x08/0x81
-
-# Ancalagon the Black
-R:766:0x08/0x84
-
-# Daoloth, the Render of the Veils
-R:767:0x02/0x95
-
-# Nightwalker
-R:768:0x08/0x97
-
-# Gabriel, the Messenger
-R:769:0x01/0x81
-
-# Artsi, the Champion of Chaos
-R:770:0x0A/0xA2
-
-# Saruman of Many Colours
-R:771:0x0A/0xAA
-
-# Harowen the Black Hand
-R:772:0x0E/0xAA
-
-# Osyluth
-R:773:0x09/0x95
-
-# Dreadlord
-R:774:0x04/0x87
-
-# Greater kraken
-R:775:0x0D/0x7E
-
-# Archlich
-R:776:0x0E/0x8C
-
-# The Cat Lord
-R:777:0x0A/0xA0
-
-# Jabberwock
-R:778:0x0A/0x88
-
-# Chaos hound
-R:779:0x0A/0x9A
-
-# Vlad Dracula, Prince of Darkness
-R:780:0x08/0x96
-
-# Beholder hive-mother
-R:781:0x0B/0x9F
-
-# Leviathan
-R:782:0x0A/0x7E
-
-# Great Wyrm of Chaos
-R:783:0x0A/0x84
-
-# Great Wyrm of Law
-R:784:0x0E/0x84
-
-# Great Wyrm of Balance
-R:785:0x0A/0x84
-
-# Shambler
-R:786:0x09/0x85
-
-# Gelugon
-R:787:0x01/0x95
-
-# Glaaki
-R:788:0x0A/0x7E
-
-# Trone, the Rebel Thunderlord
-R:789:0x08/0x82
-
-# Great Wyrm of Many Colours
-R:790:0x0A/0x84
-
-# Marda, rider of gold Laronth
-R:791:0x0B/0x82
-
-# Tselakus, the Dreadlord
-R:792:0x0C/0x87
-
-# Sky Drake
-R:793:0x0E/0x84
-
-# Eilinel the Entrapped
-R:794:0x08/0xAA
-
-# Horned Reaper
-R:795:0x0E/0x95
-
-# The Norsa
-R:796:0x0E/0x88
-
-# Rhan-Tegoth
-R:797:0x06/0x93
-
-# Black reaver
-R:798:0x08/0x8C
-
-# Master mindcrafter
-R:799:0x0B/0xAA
-
-# Greater demonic quylthulg
-R:800:0x0C/0x91
-
-# Greater draconic quylthulg
-R:801:0x0D/0x91
-
-# Greater rotting quylthulg
-R:802:0x0F/0x91
-
-# Null, the Living Void
-R:803:0x00/0xB5
-
-# Feagwath, the Undead Sorcerer
-R:804:0x0B/0x8C
-
-# Omarax the Eye Tyrant
-R:805:0x0A/0x9F
-
-# Tsathoggua, the Sleeper of N'kai
-R:806:0x08/0x92
-
-# Greater Balrog
-R:807:0x0A/0x95
-
-# Ungoliant, the Unlight
-R:808:0x08/0x93
-
-# Atlach-Nacha, the Spider God
-R:809:0x08/0x93
-
-# Y'golonac
-R:810:0x0C/0x88
-
-# Aether hound
-R:811:0x0A/0x9A
-
-# Pit Fiend
-R:812:0x03/0x95
-
-# The Serpent of Chaos
-R:813:0x0A/0x8A
-
-# Yig, Father of Serpents
-R:814:0x06/0x8A
-
-# Unmaker
-R:815:0x0A/0x85
-
-# Cyberdemon
-R:816:0x07/0x95
-
-# Hela, Queen of the Dead
-R:817:0x0D/0xAA
-
-# The Mouth of Sauron
-R:818:0x0A/0xAA
-
-# The Necromancer of Dol Guldur
-R:819:0x0A/0xAA
-
-# Lisa, rider of gold Romth
-R:820:0x0B/0x82
-
-# Master quylthulg
-R:821:0x0E/0x91
-
-# Qlzqqlzuup, the Lord of Flesh
-R:822:0x0A/0x91
-
-# Cthugha, the Living Flame
-R:823:0x0C/0x85
-
-# Flare, rider of bronze Moonth
-R:824:0x0F/0x82
-
-# Maeglin, the Traitor of Gondolin
-R:825:0x08/0xA2
-
-# Cyaegha
-R:826:0x0D/0x9F
-
-# Pazuzu, Lord of Air
-R:827:0x06/0x95
-
-# Ithaqua the Windwalker
-R:828:0x0E/0x99
-
-# Greater Hellhound
-R:829:0x04/0x83
-
-# Cantoras, the Skeletal Lord
-R:830:0x0A/0xAD
-
-# Mephistopheles, Lord of Hell
-R:831:0x04/0x95
-
-# Godzilla
-R:832:0x0A/0x92
-
-# Abhoth, Source of Uncleanness
-R:833:0x0D/0xA4
-
-# Ymir, the Ice Giant
-R:834:0x01/0x90
-
-# Loki, the Trickster
-R:835:0x08/0x90
-
-# Star-spawn of Cthulhu
-R:836:0x0D/0x95
-
-# Surtur, the Fire Giant
-R:837:0x04/0x90
-
-# The Tarrasque
-R:838:0x0A/0x92
-
-# Lungorthin, the Balrog of White Fire
-R:839:0x0A/0x95
-
-# Draugluin, Sire of All Werewolves
-R:840:0x0A/0x83
-
-# Shuma-Gorath
-R:841:0x0D/0x9F
-
-# Tulzscha, the Green Flame
-R:842:0x0D/0x85
-
-# Oremorj, the Cyberdemon Lord
-R:843:0x07/0x95
-
-# Vecna, the Emperor Lich
-R:844:0x0A/0x8C
-
-# Yog-Sothoth, the All-in-One
-R:845:0x0A/0xA4
-
-# Fenris Wolf
-R:846:0x08/0x83
-
-# Great Wyrm of Power
-R:847:0x0A/0x84
-
-# Shub-Niggurath, Black Goat of the Woods
-R:848:0x08/0x95
-
-# Nodens, Lord of the Great Abyss
-R:849:0x09/0x90
-
-# Carcharoth, the Jaws of Thirst
-R:850:0x08/0x83
-
-# Nyarlathotep, the Crawling Chaos
-R:851:0x04/0x95
-
-# Azathoth, the Daemon Sultan
-R:852:0x0E/0x85
-
-# Huan, Wolfhound of the Valar
-R:853:0x09/0x83
-
-# Jormungand the Midgard Serpent
-R:854:0x0A/0x8A
-
-# The Destroyer
-R:855:0x0A/0xA1
-
-# Gothmog, the High Captain of Balrogs
-R:856:0x0A/0x95
-
-# Great Cthulhu
-R:857:0x05/0x95
-
-# Sarko, rider of gold Foronth
-R:858:0x0B/0x82
-
-# The Unicorn of Order
-R:859:0x01/0xAB
-
-# Sauron, the Sorcerer
-R:860:0x0A/0xAA
-
-# DarkGod, the Mighty Coder of Hell
-R:861:0x0E/0x90
-
-# Morgoth, Lord of Darkness
-R:862:0x08/0x90
-
-# Human Warrior
-R:863:0x07/0xAA
-
-# Elven archer
-R:864:0x09/0xA2
-
-# Dwarven warrior
-R:865:0x0F/0xA2
-
-# Elite uruk
-R:866:0x01/0xA9
-
-# The Philosophy Teacher
-R:867:0x04/0xAA
-
-# The Variant Maintainer
-R:868:0x0E/0xAA
-
-# Random Number Generator
-R:869:0x06/0x89
-
-# Rocket mine
-R:870:0x0C/0xB5
-
-# Bouncing mine
-R:871:0x0E/0xB5
-
-# Durin's Bane
-R:872:0x0A/0x95
-
-# The Icky Queen
-R:873:0x0A/0xA3
-
-# Rot jelly
-R:874:0x07/0xA4
-
-# Death
-R:875:0x08/0x87
-
-# Famine
-R:876:0x0F/0x87
-
-# Pestilence
-R:877:0x0D/0x87
-
-# War
-R:878:0x04/0x87
-
-# Pike
-R:879:0x02/0x7E
-
-# Electric eel
-R:880:0x0E/0x8A
-
-# Giant crayfish
-R:881:0x0C/0x7E
-
-# Mermaid
-R:882:0x0D/0xA2
-
-# Box jellyfish
-R:883:0x0E/0x7E
-
-# Giant piranha
-R:884:0x05/0x7E
-
-# Piranha
-R:885:0x05/0x7E
-
-# Bullywug
-R:886:0x05/0xA2
-
-# Bullywug warrior
-R:887:0x05/0xA2
-
-# Bullywug shaman
-R:888:0x05/0xA2
-
-# Whale
-R:889:0x0D/0x7E
-
-# Sand mite
-R:890:0x0E/0x7E
-
-# Octopus
-R:891:0x05/0x7E
-
-# Giant octopus
-R:892:0x05/0x7E
-
-# Eye of the deep
-R:893:0x06/0x9F
-
-# Murk dweller
-R:894:0x02/0x93
-
-# Drowned soul
-R:895:0x0E/0x87
-
-# Tiger shark
-R:896:0x05/0x7E
-
-# Hammerhead shark
-R:897:0x05/0x7E
-
-# Great white shark
-R:898:0x01/0x7E
-
-# Aquatic golem
-R:899:0x06/0xA1
-
-# Aquatic kobold
-R:900:0x0E/0xA5
-
-# White shark
-R:901:0x09/0x7E
-
-# Scrag
-R:902:0x0E/0x94
-
-# Jaws
-R:903:0x01/0x7E
-
-# Aquatic elf
-R:904:0x06/0xA2
-
-# Aquatic elven warrior
-R:905:0x06/0xA2
-
-# Aquatic elven shaman
-R:906:0x06/0xA2
-
-# Stargazer
-R:907:0x0B/0x7E
-
-# Elder stargazer
-R:908:0x0B/0x7E
-
-# Flounder
-R:909:0x02/0x7E
-
-# Giant turtle
-R:910:0x0D/0x92
-
-# Baby dragon turtle
-R:911:0x09/0x9E
-
-# Young dragon turtle
-R:912:0x09/0x9E
-
-# Mature dragon turtle
-R:913:0x09/0x9E
-
-# Ancient dragon turtle
-R:914:0x09/0x84
-
-# Fastitocalon
-R:915:0x05/0x84
-
-# Undead stargazer
-R:916:0x0B/0x7E
-
-# Killer whale
-R:917:0x01/0x7E
-
-# Merrow
-R:918:0x0E/0x8F
-
-# Water naga
-R:919:0x0E/0xA8
-
-# Devilfish
-R:920:0x02/0x7E
-
-# Undead devilfish
-R:921:0x08/0x7E
-
-# Moby Dick, the White Whale
-R:922:0x01/0x7E
-
-# Aquatic hound
-R:923:0x0E/0x9A
-
-# Water demon
-R:924:0x0E/0x95
-
-# Ixitxachitl
-R:925:0x02/0x7E
-
-# Ixitxachitl priest
-R:926:0x02/0x7E
-
-# Vampiric ixitxachitl
-R:927:0x08/0x7E
-
-# Mathilde, the Science Student
-R:928:0x0B/0xA2
-
-# Child spirit
-R:929:0x09/0x87
-
-# Young spirit
-R:930:0x09/0x87
-
-# Mature spirit
-R:931:0x09/0x87
-
-# Experienced spirit
-R:932:0x09/0x87
-
-# Wise spirit
-R:933:0x09/0x87
-
-# Fangorn the Treebeard, Lord of the Ents
-R:934:0x0D/0xCC
-
-# Gandalf the Grey
-R:935:0x02/0xAA
-
-# Nar, the Dwarf
-R:936:0x0B/0xA2
-
-# Novice mindcrafter
-R:937:0x0B/0xAA
-
-# Great Swamp Wyrm
-R:938:0x05/0x84
-
-# Great Bile Wyrm
-R:939:0x02/0x84
-
-# Blue Firebird
-R:940:0x0E/0x82
-
-# Green Firebird
-R:941:0x0D/0x82
-
-# Brown Firebird
-R:942:0x07/0x82
-
-# Bronze Firebird
-R:943:0x0F/0x82
-
-# Gold Firebird
-R:944:0x0B/0x82
-
-# High-elven ranger
-R:945:0x0D/0xA2
-
-# Uvatha the Horseman
-R:946:0x08/0x97
-
-# Adunaphel the Quiet
-R:947:0x08/0x97
-
-# Akhorahil the Blind
-R:948:0x08/0x97
-
-# Ren the Unclean
-R:949:0x08/0x97
-
-# Ji Indur Dawndeath
-R:950:0x08/0x97
-
-# Dwar, Dog Lord of Waw
-R:951:0x08/0x97
-
-# Hoarmurath of Dir
-R:952:0x08/0x97
-
-# Khamul, the Black Easterling
-R:953:0x08/0x97
-
-# The Witch-King of Angmar
-R:954:0x08/0x97
-
-# Green Thunderlord
-R:955:0x05/0x82
-
-# Blue Thunderlord
-R:956:0x06/0x82
-
-# Brown Thunderlord
-R:957:0x07/0x82
-
-# Bronze Thunderlord
-R:958:0x0F/0x82
-
-# Gold Thunderlord
-R:959:0x0B/0x82
-
-# Blood Sprout
-R:960:0x05/0xEE
-
-# Gorlim, Betrayer of Barahir
-R:961:0x02/0xAA
-
-# The Blubbering idiot, agent of black market, Simon the weak
-R:962:0x09/0xAE
-
-# Aranea
-R:963:0x04/0x93
-
-# Elder aranea
-R:964:0x0A/0x93
-
-# Giant brown tick
-R:965:0x07/0x93
-
-# Wavelord
-R:966:0x06/0xAA
-
-# Novice possessor (soul)
-R:967:0x08/0x87
-
-# Bat of Gorgoroth
-R:968:0x05/0x9C
-
-# The Princess
-R:969:0x0B/0xAA
-
-# Merton Proudfoot, the lost hobbit
-R:970:0x0A/0xA2
-
-# The Wight-King of the Barrow-downs
-R:971:0x0A/0x97
-
-# Adventurer
-R:972:0x0F/0x80
-
-# Experienced possessor (soul)
-R:973:0x08/0x87
-
-# Old possessor (soul)
-R:974:0x08/0x87
-
-# Death orb
-R:975:0x08/0x85
-
-# Bronze dragon worm
-R:976:0x0F/0xB1
-
-# Gold dragon worm
-R:977:0x0B/0xB1
-
-# Moldoux, the Defenceless Mold
-R:978:0x0A/0xA7
-
-# The Physics Teacher
-R:979:0x01/0xAA
-
-# Ar-Pharazon the Golden
-R:980:0x0B/0xAA
-
-# Doppelganger
-R:981:0x01/0x80
-
-# Marylene, Heartbreakeress of the Netherworld
-R:982:0x09/0x90
-
-# The Greater Lag Monster
-R:983:0x0A/0x95
-
-# Hrungnir, the Stone Giant
-R:984:0x09/0x90
-
-# Bullroarer the Hobbit
-R:985:0x0F/0xA2
-
-# 3-headed hydra
-R:986:0x03/0x8D
-
-# Uldor the Accursed
-R:987:0x0F/0xAA
-
-# Mystic
-R:988:0x03/0xAA
-
-# Elder vampire
-R:989:0x04/0x96
-
-# Ulfang the Black
-R:990:0x0F/0xAA
-
-# Demonologist
-R:991:0x0C/0xAA
-
-# Hezrou
-R:992:0x05/0x95
-
-# Glabrezu
-R:993:0x0F/0x95
-
-# Nalfeshnee
-R:994:0x04/0x95
-
-# Marilith
-R:995:0x0B/0x95
-
-# Lesser Balrog
-R:996:0x0A/0x95
-
-# Master mystic
-R:997:0x03/0xAA
-
-# Grand master mystic
-R:998:0x03/0xAA
-
-# Erinyes
-R:999:0x07/0x95
-
-# Novice mindcrafter
-R:1000:0x0B/0xAA
-
-# Polyphemus, the Blind Cyclops
-R:1001:0x05/0x90
-
-# Great Wyrm of Perplexity
-R:1002:0x0F/0x84
-
-# Hound of Tindalos
-R:1003:0x02/0x9A
-
-# Great Wyrm of Thunder
-R:1004:0x0B/0x84
-
-# Silver mouse
-R:1005:0x09/0xAC
-
-# The Rat King
-R:1006:0x0A/0xAC
-
-# Vort the Kobold Queen
-R:1007:0x0A/0xA5
-
-# Giant black louse
-R:1008:0x08/0x89
-
-# Fire Phantom
-R:1009:0x04/0x87
-
-# The Insane Player
-R:1010:0x0A/0xAA
-
-# Glaryssa, Succubus Queen
-R:1011:0x09/0x95
-
-# Vermicious Knid
-R:1012:0x02/0xA4
-
-# Bone golem
-R:1013:0x01/0xA1
-
-# Snake of Yig
-R:1014:0x06/0x8A
-
-# Bronze golem
-R:1015:0x03/0xA1
-
-# Dimensional shambler
-R:1016:0x0E/0xA2
-
-# Cultist
-R:1017:0x0D/0xAA
-
-# Cult leader
-R:1018:0x0D/0xAA
-
-# Servitor of the outer gods
-R:1019:0x0B/0x88
-
-# Avatar of Nyarlathotep
-R:1020:0x0C/0xAA
-
-# Thiazi, the Storm Giant
-R:1021:0x0E/0x90
-
-# Hypnos, Lord of Sleep
-R:1022:0x0D/0xAA
-
-# Blue dragon worm
-R:1023:0x0E/0xB1
-
-# White dragon worm
-R:1024:0x09/0xB1
-
-# Green dragon worm
-R:1025:0x0D/0xB1
-
-# Black dragon worm
-R:1026:0x02/0xB1
-
-# Red dragon worm
-R:1027:0x0C/0xB1
-
-# Multi-hued dragon worm
-R:1028:0x0A/0xB1
-
-# The Minotaur of the Labyrinth
-R:1029:0x02/0x88
-
-# The Sandworm Queen
-R:1030:0x0A/0xB1
-
-# Sandworm
-R:1031:0x0B/0xB1
-
-# Tik'srvzllat
-R:1032:0x0A/0x87
-
-# The Glass Golem
-R:1033:0x09/0xBC
-
-# The White Balrog
-R:1034:0x09/0x95
-
-# Golgarach, the Living Rock
-R:1035:0x09/0xBC
-
-# Atlas, the Titan
-R:1036:0x02/0x90
-
-# Kronos, Lord of the Titans
-R:1037:0x0A/0x90
-
-# Water hound
-R:1038:0x04/0x9A
-
-# Improv, the mighty MoLD
-R:1039:0x0A/0xA7
-
-# Emperor Mimic
-R:1040:0x0B/0xA7
-
-# Melinda Proudfoot
-R:1041:0x0A/0xA2
-
-# Thrain, the King Under the Mountain
-R:1042:0x0E/0xA2
-
-# Fire golem
-R:1043:0x04/0xA1
-
-# Melkor, Lord of Darkness
-R:1044:0x0A/0x87
-
-# Spirit
-R:1045:0x0A/0x87
-
-# Spirit
-R:1046:0x0E/0x87
-
-# Spirit
-R:1047:0x0E/0x87
-
-# Spirit
-R:1048:0x0A/0x87
-
-# Spirit
-R:1049:0x0F/0x87
-
-# Spirit
-R:1050:0x0A/0x87
-
-# Spirit
-R:1051:0x05/0x87
-
-# Spirit
-R:1052:0x0A/0x87
-
-# Spirit
-R:1053:0x09/0xB5
-
-# Spirit
-R:1054:0x05/0x87
-
-# Spirit
-R:1055:0x09/0x87
-
-# Spirit
-R:1056:0x00/0x87
-
-# Spirit
-R:1057:0x07/0x87
-
-# Spirit
-R:1058:0x04/0x87
-
-# Spirit
-R:1059:0x0D/0x87
-
-# Spirit
-R:1060:0x09/0x87
-
-# Spirit
-R:1061:0x02/0x87
-
-# Spirit
-R:1062:0x06/0x87
-
-# Spirit
-R:1063:0x04/0x87
-
-# Spirit
-R:1064:0x01/0x87
-
-# Spirit
-R:1065:0x02/0x87
-
-# Spirit
-R:1066:0x06/0x87
-
-# Spirit
-R:1067:0x0A/0x87
-
-# Spirit
-R:1068:0x00/0x87
-
-# Spirit
-R:1069:0x09/0x87
-
-# Spirit
-R:1070:0x0A/0x87
-
-# Spirit
-R:1071:0x0D/0x87
-
-# Spirit
-R:1072:0x0B/0x87
-
-# Spirit
-R:1073:0x08/0x87
-
-# Spirit
-R:1074:0x03/0x87
-
-# Spirit
-R:1075:0x0A/0x87
-
-
diff --git a/lib/mods/theme/pref/graf-iso.prf b/lib/mods/theme/pref/graf-iso.prf
deleted file mode 100644
index eaf26901..00000000
--- a/lib/mods/theme/pref/graf-iso.prf
+++ /dev/null
@@ -1,5963 +0,0 @@
-# File: graf-iso.prf
-
-#
-# This file defines special attr/char mappings for use in "graphics" mode
-# with the isometric view.
-#
-# By Hansjoerg Malthaner < hansjoerg.malthaner@gmx.de >
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-
-# Scrolls (?)
-S:0xD0:0x80/0xBF
-S:0xD1:0x80/0xBF
-S:0xD2:0x80/0xBF
-S:0xD3:0x80/0xBF
-S:0xD4:0x80/0xBF
-S:0xD5:0x80/0xBF
-S:0xD6:0x80/0xBF
-S:0xD7:0x80/0xBF
-S:0xD8:0x80/0xBF
-S:0xD9:0x80/0xBF
-S:0xDA:0x80/0xBF
-S:0xDB:0x80/0xBF
-S:0xDC:0x80/0xBF
-S:0xDD:0x80/0xBF
-S:0xDE:0x80/0xBF
-S:0xDF:0x80/0xBF
-
-# Potions (!)
-S:0xE0:0x81/0x68
-S:0xE1:0x81/0x69
-S:0xE2:0x81/0x6A
-S:0xE3:0x81/0x6B
-S:0xE4:0x81/0x6C
-S:0xE5:0x81/0x6D
-S:0xE6:0x81/0x6E
-S:0xE7:0x81/0x6F
-S:0xE8:0x81/0x68
-S:0xE9:0x81/0x69
-S:0xEA:0x81/0x6A
-S:0xEB:0x81/0x6B
-S:0xEC:0x81/0x6C
-S:0xED:0x81/0x6D
-S:0xEE:0x81/0x6E
-S:0xEF:0x81/0x6F
-
-
-# Food (,)
-S:0xF0:0x90/0x92
-S:0xF1:0x90/0x92
-S:0xF2:0x90/0x92
-S:0xF3:0x90/0x92
-S:0xF4:0x90/0x92
-S:0xF5:0x90/0x92
-S:0xF6:0x90/0x92
-S:0xF7:0x90/0x92
-S:0xF8:0x90/0x92
-S:0xF9:0x90/0x92
-S:0xFA:0x90/0x92
-S:0xFB:0x90/0x92
-S:0xFC:0x90/0x92
-S:0xFD:0x90/0x92
-S:0xFE:0x90/0x92
-S:0xFF:0x90/0x92
-
-
-# Spells (*)
-S:48:0x82/0x60
-S:49:0x82/0x61
-S:50:0x82/0x62
-S:51:0x82/0x63
-S:52:0x82/0x64
-S:53:0x82/0x65
-S:54:0x82/0x66
-S:55:0x82/0x67
-S:56:0x82/0x60
-S:57:0x82/0x61
-S:58:0x82/0x62
-S:59:0x82/0x63
-S:60:0x82/0x64
-S:61:0x82/0x65
-S:62:0x82/0x66
-S:63:0x82/0x67
-
-# Spells (|)
-S:64:0x82/0x40
-S:65:0x82/0x44
-S:66:0x82/0x48
-S:67:0x82/0x4C
-S:68:0x82/0x50
-S:69:0x82/0x54
-S:70:0x82/0x58
-S:71:0x82/0x5C
-S:72:0x82/0x40
-S:73:0x82/0x44
-S:74:0x82/0x48
-S:75:0x82/0x4C
-S:76:0x82/0x50
-S:77:0x82/0x54
-S:78:0x82/0x58
-S:79:0x82/0x5C
-
-# Spells (-)
-S:80:0x82/0x41
-S:81:0x82/0x45
-S:82:0x82/0x49
-S:83:0x82/0x4D
-S:84:0x82/0x51
-S:85:0x82/0x55
-S:86:0x82/0x59
-S:87:0x82/0x5D
-S:88:0x82/0x41
-S:89:0x82/0x45
-S:90:0x82/0x49
-S:91:0x82/0x4D
-S:92:0x82/0x51
-S:93:0x82/0x55
-S:94:0x82/0x59
-S:95:0x82/0x5D
-
-# Spells (/)
-S:96:0x82/0x42
-S:97:0x82/0x46
-S:98:0x82/0x4A
-S:99:0x82/0x4E
-S:100:0x82/0x52
-S:101:0x82/0x56
-S:102:0x82/0x5A
-S:103:0x82/0x5D
-S:104:0x82/0x42
-S:105:0x82/0x46
-S:106:0x82/0x4A
-S:107:0x82/0x4D
-S:108:0x82/0x52
-S:109:0x82/0x56
-S:110:0x82/0x5A
-S:111:0x82/0x5D
-
-# Spells (\)
-S:112:0x82/0x43
-S:113:0x82/0x47
-S:114:0x82/0x4B
-S:115:0x82/0x4F
-S:116:0x82/0x53
-S:117:0x82/0x57
-S:118:0x82/0x5B
-S:119:0x82/0x5F
-S:120:0x82/0x43
-S:121:0x82/0x47
-S:122:0x82/0x4B
-S:123:0x82/0x4F
-S:124:0x82/0x53
-S:125:0x82/0x57
-S:126:0x82/0x5B
-S:127:0x82/0x5F
-
-
-# Feature attr/char definitions
-
-# nothing
-F:0:0x80:0xA0
-
-# open floor
-F:1:0x82:0xBC
-
-# fountain
-F:2:0x81:0x8D
-
-# glyph of warding
-F:3:0x80:0xBB
-
-# open door
-F:4:0x80:0xA7
-
-# broken door
-F:5:0x80:0xA7
-
-# up staircase
-F:6:0x80:0xBC
-
-# down staircase
-F:7:0x80:0xBE
-
-# quest entrance
-F:8:0x80:0xBE
-
-# quest exit
-F:9:0x80:0xBC
-
-# quest down level
-F:10:0x80:0xBE
-
-# quest up level
-F:11:0x80:0xBC
-
-# town exit
-F:12:0x80:0xBE
-
-# shaft down
-F:13:0x80:0xBE
-
-# shaft up
-F:14:0x80:0xBC
-
-# fountain
-F:15:0x81:0x8D
-
-# door
-F:32:0x80:0xAB
-
-# locked door
-F:33:0x80:0xAB
-
-# locked door
-F:34:0x80:0xAB
-
-# locked door
-F:35:0x80:0xAB
-
-# locked door
-F:36:0x80:0xAB
-
-# locked door
-F:37:0x80:0xAB
-
-# locked door
-F:38:0x80:0xAB
-
-# locked door
-F:39:0x80:0xAB
-
-# jammed door
-F:40:0x80:0xAB
-
-# jammed door
-F:41:0x80:0xAB
-
-# jammed door
-F:42:0x80:0xAB
-
-# jammed door
-F:43:0x80:0xAB
-
-# jammed door
-F:44:0x80:0xAB
-
-# jammed door
-F:45:0x80:0xAB
-
-# jammed door
-F:46:0x80:0xAB
-
-# jammed door
-F:47:0x80:0xAB
-
-# secret door
-F:48:0x80:0xA3
-
-# pile of rubble
-F:49:0x80:0xBA
-
-# magma vein
-F:50:0x80:0xA5
-
-# quartz vein
-F:51:0x81:0xF3
-
-# magma vein
-F:52:0x81:0xF3
-
-# quartz vein
-F:53:0x81:0xF3
-
-# magma vein with treasure
-F:54:0x80:0xAA
-
-# quartz vein with treasure
-F:55:0x80:0xAA
-
-# granite wall
-F:56:0x81:0xF0
-
-# granite wall
-F:57:0x81:0xF0
-
-# granite wall
-F:58:0x81:0xF0
-
-# granite wall
-F:59:0x81:0xF0
-
-# permanent wall
-F:60:0x81:0xF3
-
-# permanent wall
-F:61:0x81:0xF3
-
-# permanent wall
-F:62:0x81:0xF3
-
-# permanent wall
-F:63:0x81:0xF3
-
-# explosive rune
-F:64:0x80:0xAA
-
-# Straight Road startpoint
-F:65:0x80:0xAA
-
-# section of the Straight Road
-F:66:0x80:0xAA
-
-# section of the Straight Road
-F:67:0x80:0xAA
-
-# section of the Straight Road
-F:68:0x80:0xAA
-
-# section of the Straight Road
-F:69:0x80:0xAA
-
-# section of the Straight Road
-F:70:0x80:0xAA
-
-# section of the Straight Road (discharged)
-F:71:0x80:0xAA
-
-# Straight Road exit
-F:72:0x80:0xAA
-
-# corrupted section of the Straight Road
-F:73:0x80:0xAA
-
-# General Store
-B:0:0x80:0xB0
-
-# Armoury
-B:1:0x80:0xB1
-
-# Weapon Smiths
-B:2:0x80:0xB2
-
-# Temple
-B:3:0x80:0xB3
-
-# Alchemy Shop
-B:4:0x80:0xB4
-
-# Magic Shop
-B:5:0x80:0xB5
-
-# Black Market
-B:6:0x80:0xB6
-
-# Home
-B:7:0x80:0xB7
-
-# Bookstore
-B:8:0x80:0xB8
-
-# Pet shop
-B:9:0x80:0xAB
-
-# Mayors office
-B:10:0x80:0xAB
-
-# Inn
-B:11:0x80:0xAB
-
-# The Soothsayer
-B:12:0x80:0xAB
-
-# The library
-B:13:0x80:0xAB
-
-B:14:0x80:0xAB
-B:15:0x80:0xAB
-B:16:0x80:0xAB
-B:17:0x80:0xAB
-B:18:0x80:0xAB
-B:19:0x80:0xAB
-B:20:0x80:0xAB
-B:21:0x80:0xAB
-B:22:0x80:0xAB
-B:23:0x80:0xAB
-B:24:0x80:0xAB
-B:25:0x80:0xAB
-B:26:0x80:0xAB
-B:27:0x80:0xAB
-B:28:0x80:0xAB
-B:29:0x80:0xAB
-B:30:0x80:0xAB
-B:31:0x80:0xAB
-B:32:0x80:0xAB
-B:33:0x80:0xAB
-B:34:0x80:0xAB
-B:35:0x80:0xAB
-B:36:0x80:0xAB
-B:37:0x80:0xAB
-
-# Building
-F:74:0x80:0xB1
-
-# permanent wall
-F:75:0x80:0xA3
-
-# permanent wall
-F:76:0x80:0xA3
-
-# permanent wall
-F:77:0x80:0xA3
-
-# permanent wall
-F:78:0x80:0xA3
-
-# Deep water
-F:83:0xCB:0x81
-
-# stream of shallow water
-F:84:0x82:0xEB
-
-# pool of deep lava
-F:85:0x80:0xA3
-
-# stream of shallow lava
-F:86:0x80:0xA3
-
-# dark pit
-F:87:0x83:0x8B
-
-# dirt
-F:88:0x82:0xF3
-
-# patch of grass
-F:89:0x82:0xE8
-
-# ice
-F:90:0x80:0xAE
-
-# sand
-F:91:0x80:0xAE
-
-# dead tree
-F:92:0x80:0xA3
-
-# ash
-F:93:0x80:0xAE
-
-# mud
-F:94:0x80:0xAE
-
-# ice wall
-F:95:0x80:0x80
-
-# tree
-F:96:0x83:0x88
-
-# mountain chain
-F:97:0x81:0x9D
-
-# sandwall
-F:98:0x80:0xA3
-
-# sandwall
-F:99:0x80:0xA5
-
-# sandwall with treasure
-F:100:0x80:0xAA
-
-# high mountain chain
-F:101:0x80:0xDE
-
-# nether mist
-F:102:0x80:0x80
-
-# molten glass wall
-F:103:0x80:0xAE
-
-# Between gate
-F:160:0x81:0x8C
-
-# Altar of Forests
-F:161:0x81:0x94
-
-# Altar of Water
-F:162:0x81:0x94
-
-# Altar of Earth
-F:163:0x81:0x94
-
-# Altar of Darkness
-F:164:0x81:0x94
-
-# Altar of Moon
-F:165:0x81:0x94
-
-# Altar of Sun
-F:166:0x81:0x94
-
-# Altar of Rage
-F:167:0x81:0x94
-
-# Altar of Winds
-F:168:0x81:0x94
-
-# Altar of Stars
-F:169:0x81:0x94
-
-# Altar of Being
-F:170:0x81:0x94
-
-# Altar of Randomness
-F:171:0x81:0x94
-
-# pool of deep water
-F:187:0x82:0xF0
-
-# glass wall
-F:188:0x80:0xAE
-
-# illusion wall
-F:189:0x80:0xA3
-
-# Grass roof
-F:190:0x82:0xF6
-
-# grass roof top
-F:191:0x82:0xFE
-
-# grass roof chimney
-F:192:0x82:0xF7
-
-# brick roof
-F:193:0x82:0xEE
-
-# brick roof top
-F:194:0x82:0xEF
-
-# brick roof chimney
-F:195:0x80:0xA3
-
-# window
-F:196:0x80:0xA3
-
-# small window
-F:197:0x80:0xA3
-
-# rain barrel
-F:198:0x80:0xA3
-
-# grass with flowers
-F:199:0x82:0xF8
-
-# cobblestone road
-F:200:0x83:0x83
-
-# cobblestone with outlet
-F:201:0x80:0xAE
-
-# small tree
-F:202:0x80:0xA3
-
-# town
-F:203:0x80:0xAA
-
-
-
-
-
-
-
-# Object attr/char definitions
-
-# something
-K:0:0x80:0xA6
-
-# Blindness
-K:1:0x80:0xAC
-
-# Paranoia
-K:2:0x80:0xAC
-
-# Confusion
-K:3:0x80:0xAC
-
-# Hallucination
-K:4:0x80:0xAC
-
-# Cure Poison
-K:5:0x80:0xAC
-
-# Cure Blindness
-K:6:0x80:0xAC
-
-# Cure Paranoia
-K:7:0x80:0xAC
-
-# Cure Confusion
-K:8:0x80:0xAC
-
-# Weakness
-K:9:0x80:0xAC
-
-# Unhealth
-K:10:0x80:0xAC
-
-# Restore Constitution
-K:11:0x80:0xAC
-
-# Restoring
-K:12:0x80:0xAC
-
-# Stupidity
-K:13:0x80:0xAC
-
-# Naivety
-K:14:0x80:0xAC
-
-# Poison
-K:15:0x80:0xAC
-
-# Sickness
-K:16:0x80:0xAC
-
-# Paralysis
-K:17:0x80:0xAC
-
-# Restore Strength
-K:18:0x80:0xAC
-
-# Disease
-K:19:0x80:0xAC
-
-# Cure Serious Wounds
-K:20:0x80:0xAC
-
-# & Ration~ of Food
-K:21:0x80:0xAC
-
-# & Hard Biscuit~
-K:22:0x80:0xAC
-
-# & Strip~ of Venison
-K:23:0x80:0xAC
-
-# & Slime Mold~
-K:24:0x80:0xAC
-
-# & Piece~ of Elvish Waybread
-K:25:0x80:0xAC
-
-# & Pint~ of Fine Ale
-K:26:0x80:0xAC
-
-# & Pint~ of Fine Wine
-K:27:0x80:0xAC
-
-# & Mattock~
-K:28:0x80:0xDC
-
-# & No-dachi~
-K:29:0x80:0xFC
-
-# & Broken Dagger~
-K:30:0x80:0xFC
-
-# & Bastard Sword~
-K:31:0x80:0xFC
-
-# & Scimitar~
-K:32:0x80:0xFC
-
-# & Tulwar~
-K:33:0x80:0xFC
-
-# & Broad Sword~
-K:34:0x80:0xFC
-
-# & Short Sword~
-K:35:0x80:0xFC
-
-# & Blade~ of Chaos
-K:36:0x80:0xFC
-
-# & Two-Handed Sword~
-K:37:0x80:0xFC
-
-# & Main Gauche~
-K:38:0x80:0xFC
-
-# & Cutlass~
-K:39:0x80:0xFC
-
-# & Executioner's Sword~
-K:40:0x80:0xFC
-
-# & Katana~
-K:41:0x80:0xFC
-
-# & Long Sword~
-K:42:0x80:0xFC
-
-# & Dagger~
-K:43:0x80:0xFC
-
-# & Rapier~
-K:44:0x80:0xFC
-
-# & Sabre~
-K:45:0x80:0xFC
-
-# & Small Sword~
-K:46:0x80:0xFC
-
-# & Broken Sword~
-K:47:0x80:0xFC
-
-# & Ball-and-Chain~
-K:48:0x80:0xDC
-
-# & Whip~
-K:49:0x80:0xDC
-
-# & Flail~
-K:50:0x80:0xDC
-
-# & Two-Handed Flail~
-K:51:0x80:0xDC
-
-# & Morning Star~
-K:52:0x80:0xDC
-
-# & Mace~
-K:53:0x80:0xDC
-
-# & Quarterstaff~
-K:54:0x80:0xDC
-
-# & War Hammer~
-K:55:0x80:0xDC
-
-# & Lead-Filled Mace~
-K:56:0x80:0xDC
-
-# & Mace~ of Disruption
-K:57:0x80:0xDC
-
-# & Lucerne Hammer~
-K:58:0x80:0xDC
-
-# & Beaked Axe~
-K:59:0x80:0xAF
-
-# & Glaive~
-K:60:0x80:0xAF
-
-# & Halberd~
-K:61:0x80:0xAF
-
-# & Awl-Pike~
-K:62:0x80:0xAF
-
-# & Pike~
-K:63:0x80:0xAF
-
-# & Spear~
-K:64:0x80:0xAF
-
-# & Trident~
-K:65:0x80:0xAF
-
-# & Lance~
-K:66:0x80:0xAF
-
-# & Great Axe~
-K:67:0x80:0xAF
-
-# & Battle Axe~
-K:68:0x80:0xAF
-
-# & Lochaber Axe~
-K:69:0x80:0xAF
-
-# & Broad Axe~
-K:70:0x80:0xAF
-
-# & Scythe~
-K:71:0x80:0xAF
-
-# & Scythe~ of Slicing
-K:72:0x80:0xAF
-
-# & Short Bow~
-K:73:0x80:0xFD
-
-# & Long Bow~
-K:74:0x80:0xFD
-
-# & Light Crossbow~
-K:75:0x80:0xFD
-
-# & Heavy Crossbow~
-K:76:0x80:0xFD
-
-# & Sling~
-K:77:0x80:0xFD
-
-# & Arrow~
-K:78:0x80:0xFB
-
-# & Seeker Arrow~
-K:79:0x80:0xFB
-
-# & Bolt~
-K:80:0x80:0xFB
-
-# & Seeker Bolt~
-K:81:0x80:0xFB
-
-# & Rounded Pebble~
-K:82:0x81:0x93
-
-# & Iron Shot~
-K:83:0x80:0xFB
-
-# & Shovel~
-K:84:0x80:0xDC
-
-# & Gnomish Shovel~
-K:85:0x80:0xDC
-
-# & Dwarven Shovel~
-K:86:0x80:0xDC
-
-# & Pick~
-K:87:0x80:0xDC
-
-# & Orcish Pick~
-K:88:0x80:0xDC
-
-# & Dwarven Pick~
-K:89:0x80:0xDC
-
-# & Elven Cloak~
-K:90:0x80:0xA8
-
-# & Pair~ of Soft Leather Boots
-K:91:0x80:0xDD
-
-# & Pair~ of Hard Leather Boots
-K:92:0x80:0xDD
-
-# & Pair~ of Metal Shod Boots
-K:93:0x80:0xDD
-
-# & Hard Leather Cap~
-K:94:0x80:0xDD
-
-# & Metal Cap~
-K:95:0x80:0xDD
-
-# & Iron Helm~
-K:96:0x80:0xDD
-
-# & Steel Helm~
-K:97:0x80:0xDD
-
-# & Iron Crown~
-K:98:0x80:0xDD
-
-# & Golden Crown~
-K:99:0x80:0xDD
-
-# & Jewel Encrusted Crown~
-K:100:0x80:0xDD
-
-# & Robe~
-K:101:0x80:0xA8
-
-# & Filthy Rag~
-K:102:0x80:0xA8
-
-# Soft Leather Armour~
-K:103:0x80:0xA8
-
-# Soft Studded Leather~
-K:104:0x80:0xA8
-
-# Hard Leather Armour~
-K:105:0x80:0xA8
-
-# Hard Studded Leather~
-K:106:0x80:0xA8
-
-# Leather Scale Mail~
-K:107:0x80:0xA8
-
-# Metal Scale Mail~
-K:108:0x80:0xDB
-
-# Chain Mail~
-K:109:0x80:0xDB
-
-# Rusty Chain Mail~
-K:110:0x80:0xDB
-
-# Augmented Chain Mail~
-K:111:0x80:0xDB
-
-# Bar Chain Mail~
-K:112:0x80:0xDB
-
-# Metal Brigandine Armour~
-K:113:0x80:0xDB
-
-# Partial Plate Armour~
-K:114:0x80:0xDB
-
-# Metal Lamellar Armour~
-K:115:0x80:0xDB
-
-# Full Plate Armour~
-K:116:0x80:0xDB
-
-# Ribbed Plate Armour~
-K:117:0x80:0xDB
-
-# Adamantite Plate Mail~
-K:118:0x80:0xDB
-
-# Mithril Plate Mail~
-K:119:0x80:0xDB
-
-# Mithril Chain Mail~
-K:120:0x80:0xDB
-
-# Double Chain Mail~
-K:121:0x80:0xDB
-
-# & Shield~ of Deflection
-K:122:0x80:0xDB
-
-# & Cloak~
-K:123:0x80:0xA8
-
-# & Shadow Cloak~
-K:124:0x80:0xA8
-
-# & Set~ of Leather Gloves
-K:125:0x80:0xDD
-
-# & Set~ of Gauntlets
-K:126:0x80:0xDD
-
-# & Set~ of Cesti
-K:127:0x80:0xDD
-
-# & Small Leather Shield~
-K:128:0x80:0xA9
-
-# & Large Leather Shield~
-K:129:0x80:0xA9
-
-# & Small Metal Shield~
-K:130:0x80:0xA9
-
-# & Large Metal Shield~
-K:131:0x80:0xA9
-
-# Strength
-K:132:0x80:0xBD
-
-# Dexterity
-K:133:0x80:0xBD
-
-# Constitution
-K:134:0x80:0xBD
-
-# Intelligence
-K:135:0x80:0xBD
-
-# Speed
-K:136:0x80:0xBD
-
-# Searching
-K:137:0x80:0xBD
-
-# Teleportation
-K:138:0x80:0xBD
-
-# Slow Digestion
-K:139:0x80:0xBD
-
-# Resist Fire
-K:140:0x80:0xBD
-
-# Resist Cold
-K:141:0x80:0xBD
-
-# Levitation
-K:142:0x80:0xBD
-
-# Poison Resistance
-K:143:0x80:0xBD
-
-# Free Action
-K:144:0x80:0xBD
-
-# Weakness
-K:145:0x80:0xBD
-
-# Flames
-K:146:0x80:0xBD
-
-# Acid
-K:147:0x80:0xBD
-
-# Ice
-K:148:0x80:0xBD
-
-# Woe
-K:149:0x80:0xBD
-
-# Stupidity
-K:150:0x80:0xBD
-
-# Damage
-K:151:0x80:0xBD
-
-# Accuracy
-K:152:0x80:0xBD
-
-# Protection
-K:153:0x80:0xBD
-
-# Aggravate Monster
-K:154:0x80:0xBD
-
-# See Invisible
-K:155:0x80:0xBD
-
-# Sustain Strength
-K:156:0x80:0xBD
-
-# Sustain Intelligence
-K:157:0x80:0xBD
-
-# Sustain Wisdom
-K:158:0x80:0xBD
-
-# Sustain Constitution
-K:159:0x80:0xBD
-
-# Sustain Dexterity
-K:160:0x80:0xBD
-
-# Sustain Charisma
-K:161:0x80:0xBD
-
-# Slaying
-K:162:0x80:0xBD
-
-# Brilliance
-K:163:0x80:0xA2
-
-# Charisma
-K:164:0x80:0xA2
-
-# Searching
-K:165:0x80:0xA2
-
-# Teleportation
-K:166:0x80:0xA2
-
-# Slow Digestion
-K:167:0x80:0xA2
-
-# Resist Acid
-K:168:0x80:0xA2
-
-# Adornment
-K:169:0x80:0xA2
-
-# Double Ring Mail~
-K:170:0x80:0xDB
-
-# the Magi
-K:171:0x80:0xA2
-
-# DOOM
-K:172:0x80:0xA2
-
-# Enchant Weapon To-Hit
-K:173:0x80:0xBF
-
-# Enchant Weapon To-Dam
-K:174:0x80:0xBF
-
-# Enchant Armor
-K:175:0x80:0xBF
-
-# Identify
-K:176:0x80:0xBF
-
-# *Identify*
-K:177:0x80:0xBF
-
-# Rumour
-K:178:0x80:0xBF
-
-# Chaos
-K:179:0x80:0xBF
-
-# Remove Curse
-K:180:0x80:0xBF
-
-# Light
-K:181:0x80:0xBF
-
-# Fire
-K:182:0x80:0xBF
-
-# Ice
-K:183:0x80:0xBF
-
-# Summon Monster
-K:184:0x80:0xBF
-
-# Phase Door
-K:185:0x80:0xBF
-
-# Teleportation
-K:186:0x80:0xBF
-
-# Teleport Level
-K:187:0x80:0xBF
-
-# Monster Confusion
-K:188:0x80:0xBF
-
-# Magic Mapping
-K:189:0x80:0xBF
-
-# Rune of Protection
-K:190:0x80:0xBF
-
-# *Remove Curse*
-K:191:0x80:0xBF
-
-# Treasure Detection
-K:192:0x80:0xBF
-
-# Object Detection
-K:193:0x80:0xBF
-
-# Trap Detection
-K:194:0x80:0xBF
-
-# & Sheaf Arrow~
-K:195:0x80:0xFB
-
-# & Mithril Shot~
-K:196:0x80:0xFB
-
-# Door/Stair Location
-K:197:0x80:0xBF
-
-# Acquirement
-K:198:0x80:0xBF
-
-# *Acquirement*
-K:199:0x80:0xBF
-
-# Mass Genocide
-K:200:0x80:0xBF
-
-# Detect Invisible
-K:201:0x80:0xBF
-
-# Aggravate Monster
-K:202:0x80:0xBF
-
-# Trap Creation
-K:203:0x80:0xBF
-
-# Trap/Door Destruction
-K:204:0x80:0xBF
-
-# Artifact Creation
-K:205:0x80:0xBF
-
-# Recharging
-K:206:0x80:0xBF
-
-# Genocide
-K:207:0x80:0xBF
-
-# Darkness
-K:208:0x80:0xBF
-
-# Protection from Evil
-K:209:0x80:0xBF
-
-# Satisfy Hunger
-K:210:0x80:0xBF
-
-# Dispel Undead
-K:211:0x80:0xBF
-
-# *Enchant Weapon*
-K:212:0x80:0xBF
-
-# Curse Weapon
-K:213:0x80:0xBF
-
-# *Enchant Armor*
-K:214:0x80:0xBF
-
-# Curse Armor
-K:215:0x80:0xBF
-
-# Summon Undead
-K:216:0x80:0xBF
-
-# Blessing
-K:217:0x80:0xBF
-
-# Holy Chant
-K:218:0x80:0xBF
-
-# Holy Prayer
-K:219:0x80:0xBF
-
-# Word of Recall
-K:220:0x80:0xBF
-
-# *Destruction*
-K:221:0x80:0xBF
-
-# Slime Mold Juice
-K:222:0x80:0xA1
-
-# Apple Juice
-K:223:0x80:0xA1
-
-# Water
-K:224:0x80:0xA1
-
-# Strength
-K:225:0x80:0xA1
-
-# Weakness
-K:226:0x80:0xA1
-
-# Restore Strength
-K:227:0x80:0xA1
-
-# Intelligence
-K:228:0x80:0xA1
-
-# Stupidity
-K:229:0x80:0xA1
-
-# Restore Intelligence
-K:230:0x80:0xA1
-
-# Wisdom
-K:231:0x80:0xA1
-
-# Naivety
-K:232:0x80:0xA1
-
-# Restore Wisdom
-K:233:0x80:0xA1
-
-# Charisma
-K:234:0x80:0xA1
-
-# Ugliness
-K:235:0x80:0xA1
-
-# Restore Charisma
-K:236:0x80:0xA1
-
-# Curing
-K:237:0x80:0xA1
-
-# Invulnerability
-K:238:0x80:0xA1
-
-# New Life
-K:239:0x80:0xA1
-
-# Cure Serious Wounds
-K:240:0x80:0xA1
-
-# Cure Critical Wounds
-K:241:0x80:0xA1
-
-# Healing
-K:242:0x80:0xA1
-
-# Constitution
-K:243:0x80:0xA1
-
-# Experience
-K:244:0x80:0xA1
-
-# Sleep
-K:245:0x80:0xA1
-
-# Blindness
-K:246:0x80:0xA1
-
-# Booze
-K:247:0x80:0xA1
-
-# Poison
-K:248:0x80:0xA1
-
-# Speed
-K:249:0x80:0xA1
-
-# Slowness
-K:250:0x80:0xA1
-
-# Dexterity
-K:251:0x80:0xA1
-
-# Restore Dexterity
-K:252:0x80:0xA1
-
-# Restore Constitution
-K:253:0x80:0xA1
-
-# Lose Memories
-K:254:0x80:0xA1
-
-# Salt Water
-K:255:0x80:0xA1
-
-# Enlightenment
-K:256:0x80:0xA1
-
-# Heroism
-K:257:0x80:0xA1
-
-# Berserk Strength
-K:258:0x80:0xA1
-
-# Boldness
-K:259:0x80:0xA1
-
-# Restore Life Levels
-K:260:0x80:0xA1
-
-# Resist Heat
-K:261:0x80:0xA1
-
-# Resist Cold
-K:262:0x80:0xA1
-
-# Detect Invisible
-K:263:0x80:0xA1
-
-# Slow Poison
-K:264:0x80:0xA1
-
-# Neutralise Poison
-K:265:0x80:0xA1
-
-# Restore Mana
-K:266:0x80:0xA1
-
-# Infra-vision
-K:267:0x80:0xA1
-
-# Resistance
-K:268:0x80:0xA1
-
-# Light
-K:269:0x80:0xAD
-
-# Tame Monster
-K:270:0x80:0xAD
-
-# Frost Bolts
-K:271:0x80:0xAD
-
-# Fire Bolts
-K:272:0x80:0xAD
-
-# Stone to Mud
-K:273:0x80:0xAD
-
-# Polymorph
-K:274:0x80:0xAD
-
-# Heal Monster
-K:275:0x80:0xAD
-
-# Haste Monster
-K:276:0x80:0xAD
-
-# Slow Monster
-K:277:0x80:0xAD
-
-# Confuse Monster
-K:278:0x80:0xAD
-
-# Sleep Monster
-K:279:0x80:0xAD
-
-# Drain Life
-K:280:0x80:0xAD
-
-# Trap/Door Destruction
-K:281:0x80:0xAD
-
-# Magic Missile
-K:282:0x80:0xAD
-
-# Clone Monster
-K:283:0x80:0xAD
-
-# Scare Monster
-K:284:0x80:0xAD
-
-# Teleport Other
-K:285:0x80:0xAD
-
-# Disarming
-K:286:0x80:0xAD
-
-# Lightning Balls
-K:287:0x80:0xAD
-
-# Cold Balls
-K:288:0x80:0xAD
-
-# Fire Balls
-K:289:0x80:0xAD
-
-# Stinking Cloud
-K:290:0x80:0xAD
-
-# Acid Balls
-K:291:0x80:0xAD
-
-# Wonder
-K:292:0x80:0xAD
-
-# & Flight Arrow~
-K:293:0x80:0xFB
-
-# Acid Bolts
-K:294:0x80:0xAD
-
-# Dragon's Flame
-K:295:0x80:0xAD
-
-# Dragon's Frost
-K:296:0x80:0xAD
-
-# Dragon's Breath
-K:297:0x80:0xAD
-
-# Annihilation
-K:298:0x80:0xAD
-
-# Rockets
-K:299:0x80:0xAD
-
-# Trap Location
-K:300:0x80:0xDF
-
-# Treasure Location
-K:301:0x80:0xDF
-
-# Object Location
-K:302:0x80:0xDF
-
-# Teleportation
-K:303:0x80:0xDF
-
-# Earthquakes
-K:304:0x80:0xDF
-
-# Summoning
-K:305:0x80:0xDF
-
-# Light
-K:306:0x80:0xDF
-
-# *Destruction*
-K:307:0x80:0xDF
-
-# Starlight
-K:308:0x80:0xDF
-
-# Haste Monsters
-K:309:0x80:0xDF
-
-# Slow Monsters
-K:310:0x80:0xDF
-
-# Sleep Monsters
-K:311:0x80:0xDF
-
-# Cure Light Wounds
-K:312:0x80:0xDF
-
-# Detect Invisible
-K:313:0x80:0xDF
-
-# Speed
-K:314:0x80:0xDF
-
-# Slowness
-K:315:0x80:0xDF
-
-# Door/Stair Location
-K:316:0x80:0xDF
-
-# Remove Curse
-K:317:0x80:0xDF
-
-# Detect Evil
-K:318:0x80:0xDF
-
-# Curing
-K:319:0x80:0xDF
-
-# Dispel Evil
-K:320:0x80:0xDF
-
-# Probing
-K:321:0x80:0xDF
-
-# Darkness
-K:322:0x80:0xDF
-
-# Genocide
-K:323:0x80:0xDF
-
-# Power
-K:324:0x80:0xDF
-
-# the Magi
-K:325:0x80:0xDF
-
-# Perception
-K:326:0x80:0xDF
-
-# Holiness
-K:327:0x80:0xDF
-
-# Enlightenment
-K:328:0x80:0xDF
-
-# Healing
-K:329:0x80:0xDF
-
-# [Call of the West]
-K:330:0x80:0xBF
-
-# [Light of Valinor]
-K:331:0x80:0xBF
-
-# [Divine Mastery]
-K:332:0x80:0xBF
-
-# [Words of Power]
-K:333:0x80:0xBF
-
-# [Apprentice Handbook]
-K:334:0x80:0xBF
-
-# [Mystical Words]
-K:335:0x80:0xBF
-
-# [Arcane Chants]
-K:336:0x80:0xBF
-
-# [Locus of Force]
-K:337:0x80:0xBF
-
-# & Small wooden chest~
-K:338:0x80:0xFE
-
-# & Large wooden chest~
-K:339:0x80:0xFE
-
-# & Small iron chest~
-K:340:0x80:0xFE
-
-# & Large iron chest~
-K:341:0x80:0xFE
-
-# & Small steel chest~
-K:342:0x80:0xFE
-
-# & Large steel chest~
-K:343:0x80:0xFE
-
-# & Ruined chest~
-K:344:0x80:0xFE
-
-# & Iron Spike~
-K:345:0x81:0x91
-
-# & Wooden Torch~
-K:346:0x80:0xFE
-
-# & Brass Lantern~
-K:347:0x80:0xFE
-
-# & Flask~ of oil
-K:348:0x80:0xA1
-
-# & Empty Bottle~
-K:349:0x80:0xA1
-
-# Havoc
-K:350:0x80:0xAD
-
-# Door/Stair Location
-K:351:0x80:0xAD
-
-# Trap Location
-K:352:0x80:0xAD
-
-# Probing
-K:353:0x80:0xAD
-
-# Recall
-K:354:0x80:0xAD
-
-# Illumination
-K:355:0x80:0xAD
-
-# Light
-K:356:0x80:0xAD
-
-# Lightning Bolts
-K:357:0x80:0xAD
-
-# Frost Bolts
-K:358:0x80:0xAD
-
-# Fire Bolts
-K:359:0x80:0xAD
-
-# Polymorph
-K:360:0x80:0xAD
-
-# Slow Monster
-K:361:0x80:0xAD
-
-# Sleep Monster
-K:362:0x80:0xAD
-
-# Drain Life
-K:363:0x80:0xAD
-
-# Teleport Other
-K:364:0x80:0xAD
-
-# Disarming
-K:365:0x80:0xAD
-
-# Lightning Balls
-K:366:0x80:0xAD
-
-# Cold Balls
-K:367:0x80:0xAD
-
-# Fire Balls
-K:368:0x80:0xAD
-
-# Acid Balls
-K:369:0x80:0xAD
-
-# Acid Bolts
-K:370:0x80:0xAD
-
-# Enlightenment
-K:371:0x80:0xAD
-
-# Perception
-K:372:0x80:0xAD
-
-# Curing
-K:373:0x80:0xAD
-
-# Healing
-K:374:0x80:0xAD
-
-# Detection
-K:375:0x80:0xAD
-
-# Restoration
-K:376:0x80:0xAD
-
-# Speed
-K:377:0x80:0xAD
-
-# [Inner Void]
-K:378:0x80:0xBF
-
-# [Lurkings of the Night]
-K:379:0x80:0xBF
-
-# [Beings of Darkness]
-K:380:0x80:0xBF
-
-# [Material Shadow]
-K:381:0x80:0xBF
-
-# [Sign of Chaos]
-K:383:0x80:0xBF
-
-# [Chaos Mastery]
-K:384:0x80:0xBF
-
-# [Chaos Channels]
-K:385:0x80:0xBF
-
-# [Armageddon Tome]
-K:386:0x80:0xBF
-
-# [Nether Openings]
-K:387:0x80:0xBF
-
-# [Unholy Blessings]
-K:388:0x80:0xBF
-
-# & Firestone~
-K:389:0x80:0xFE
-
-# & Small Firestone~
-K:390:0x80:0xFE
-
-# & Broken Skull~
-K:391:0x80:0xFE
-
-# & Broken Bone~
-K:392:0x80:0xFE
-
-# & Canine Skeleton~
-K:393:0x80:0xFE
-
-# & Rodent Skeleton~
-K:394:0x80:0xFE
-
-# & Human Skeleton~
-K:395:0x80:0xFE
-
-# & Dwarf Skeleton~
-K:396:0x80:0xFE
-
-# & Elf Skeleton~
-K:397:0x80:0xFE
-
-# & Gnome Skeleton~
-K:398:0x80:0xFE
-
-# & Great Hammer~
-K:399:0x80:0xDC
-
-# Black Dragon Scale Mail~
-K:400:0x80:0xDB
-
-# Blue Dragon Scale Mail~
-K:401:0x80:0xDB
-
-# White Dragon Scale Mail~
-K:402:0x80:0xDB
-
-# Red Dragon Scale Mail~
-K:403:0x80:0xDB
-
-# Green Dragon Scale Mail~
-K:404:0x80:0xDB
-
-# Multi-Hued Dragon Scale Mail~
-K:405:0x80:0xDB
-
-# Pseudo Dragon Scale Mail~
-K:406:0x80:0xDB
-
-# Law Dragon Scale Mail~
-K:407:0x80:0xDB
-
-# Bronze Dragon Scale Mail~
-K:408:0x80:0xDB
-
-# Gold Dragon Scale Mail~
-K:409:0x80:0xDB
-
-# Chaos Dragon Scale Mail~
-K:410:0x80:0xDB
-
-# Balance Dragon Scale Mail~
-K:411:0x80:0xDB
-
-# Power Dragon Scale Mail~
-K:412:0x80:0xDB
-
-# & Dragon Helm~
-K:413:0x80:0xDD
-
-# & Dragon Shield~
-K:414:0x80:0xDB
-
-# Death
-K:415:0x80:0xA1
-
-# Ruination
-K:416:0x80:0xA1
-
-# Detonations
-K:417:0x80:0xA1
-
-# Augmentation
-K:418:0x80:0xA1
-
-# *Healing*
-K:419:0x80:0xA1
-
-# Life
-K:420:0x80:0xA1
-
-# Self Knowledge
-K:421:0x80:0xA1
-
-# *Enlightenment*
-K:422:0x80:0xA1
-
-# [Necromantic Incantations]
-K:423:0x80:0xBF
-
-# [Curses of Angmar]
-K:424:0x80:0xBF
-
-# Fear Resistance
-K:425:0x80:0xBD
-
-# Light and Darkness Resistance
-K:426:0x80:0xBD
-
-# Nether Resistance
-K:427:0x80:0xBD
-
-# Nexus Resistance
-K:428:0x80:0xBD
-
-# Sound Resistance
-K:429:0x80:0xBD
-
-# Confusion Resistance
-K:430:0x80:0xBD
-
-# Shard Resistance
-K:431:0x80:0xBD
-
-# Disenchantment Resistance
-K:432:0x80:0xBD
-
-# Chaos Resistance
-K:433:0x80:0xBD
-
-# Blindness Resistance
-K:434:0x80:0xBD
-
-# Lordly Protection
-K:435:0x80:0xBD
-
-# Extra Attacks
-K:436:0x80:0xBD
-
-# Cure Light Wounds
-K:437:0x80:0xA1
-
-# Clumsiness
-K:438:0x80:0xA1
-
-# Sickliness
-K:439:0x80:0xA1
-
-# Map of Bree
-K:440:0x80:0xBF
-
-# Map of Gondolin
-K:441:0x80:0xBF
-
-# Map of LothLorien
-K:442:0x80:0xBF
-
-# Map of Minas Anor
-K:443:0x80:0xBF
-
-# copper
-K:480:0x81:0xCA
-
-# copper
-K:481:0x81:0xC9
-
-# copper
-K:482:0x81:0xC8
-
-# silver
-K:483:0x80:0xA4
-
-# silver
-K:484:0x80:0xA4
-
-# silver
-K:485:0x80:0xA4
-
-# garnets
-K:486:0x80:0xA4
-
-# garnets
-K:487:0x80:0xA4
-
-# gold
-K:488:0x80:0xA4
-
-# gold
-K:489:0x80:0xA4
-
-# gold
-K:490:0x80:0xA4
-
-# opals
-K:491:0x80:0xA4
-
-# sapphires
-K:492:0x80:0xA4
-
-# rubies
-K:493:0x80:0xA4
-
-# diamonds
-K:494:0x80:0xA4
-
-# emeralds
-K:495:0x80:0xA4
-
-# mithril
-K:496:0x80:0xA4
-
-# adamantite
-K:497:0x80:0xA4
-
-# & Mighty Hammer~
-K:498:0x80:0xDC
-
-# & Massive Iron Crown~
-K:499:0x80:0xDD
-
-# & Phial~
-K:500:0x80:0xFE
-
-# & Star~
-K:501:0x80:0xFE
-
-# & Arkenstone~
-K:502:0x80:0xFE
-
-# & Amulet~
-K:503:0x80:0xA2
-
-# & Amulet~
-K:504:0x80:0xA2
-
-# & Necklace~
-K:505:0x80:0xA2
-
-# & Ring~
-K:506:0x80:0xBD
-
-# & Ring~
-K:507:0x80:0xBD
-
-# & Ring~
-K:508:0x80:0xBD
-
-# & Ring~
-K:509:0x80:0xBD
-
-# & Ring~
-K:510:0x80:0xBD
-
-# & Ring~
-K:511:0x80:0xBD
-
-# [Rites of Initiation]
-K:512:0x80:0xBF
-
-# [Ways of War]
-K:513:0x80:0xBF
-
-# [Divine Retribution]
-K:514:0x80:0xBF
-
-# [Essence of Fury]
-K:515:0x80:0xBF
-
-# [Novice Crafts]
-K:516:0x80:0xBF
-
-# [Arcane Channels]
-K:517:0x80:0xBF
-
-# [Sigils of Wizardry]
-K:518:0x80:0xBF
-
-# [Mana Focus]
-K:519:0x80:0xBF
-
-# Reflection
-K:520:0x80:0xA2
-
-# Anti-Magic
-K:521:0x80:0xA2
-
-# Anti-Teleportation
-K:522:0x80:0xA2
-
-# Resistance
-K:523:0x80:0xA2
-
-# & Zweihander~
-K:524:0x80:0xFC
-
-# & Tanto~
-K:525:0x80:0xFC
-
-# Splint Mail~
-K:526:0x80:0xDB
-
-# Do-maru~
-K:527:0x80:0xDB
-
-# & Trifurcate Spear~
-K:528:0x80:0xAF
-
-# & Three Piece Rod~
-K:529:0x80:0xDC
-
-# O-yoroi~
-K:530:0x80:0xDB
-
-# & Fur Cloak~
-K:531:0x80:0xA8
-
-# & Lajatang~
-K:532:0x80:0xAF
-
-# & Hatchet~
-K:533:0x80:0xAF
-
-# Rhino Hide Armour~
-K:535:0x80:0xA8
-
-# Leather Jacket~
-K:536:0x80:0xA8
-
-# & Sickle~
-K:537:0x80:0xAF
-
-# & Tetsubo~
-K:538:0x80:0xDC
-
-# & Nunchaku~
-K:539:0x80:0xDC
-
-# & Bo Staff~
-K:540:0x80:0xDC
-
-# & Jo Staff~
-K:541:0x80:0xDC
-
-# & Club~
-K:542:0x80:0xDC
-
-# & Broad Spear~
-K:543:0x80:0xAF
-
-# & Khopesh~
-K:544:0x80:0xFC
-
-# & Flamberge~
-K:545:0x80:0xFC
-
-# & Claymore~
-K:546:0x80:0xFC
-
-# & Espadon~
-K:547:0x80:0xFC
-
-# & Great Scimitar~
-K:548:0x80:0xFC
-
-# & Wakizashi~
-K:549:0x80:0xFC
-
-# & Naginata~
-K:550:0x80:0xAF
-
-# & Fauchard~
-K:551:0x80:0xAF
-
-# & Guisarme~
-K:552:0x80:0xAF
-
-# & Heavy Lance~
-K:553:0x80:0xAF
-
-# & Basillard~
-K:554:0x80:0xFC
-
-# & Ninjato~
-K:555:0x80:0xFC
-
-# Ring Mail~
-K:556:0x80:0xDB
-
-# Cord Armour~
-K:557:0x80:0xA8
-
-# Paper Armour~
-K:558:0x80:0xA8
-
-# Padded Armour~
-K:559:0x80:0xA8
-
-# & Kabuto~
-K:560:0x80:0xDD
-
-# Stone and Hide Armour~
-K:561:0x80:0xA8
-
-# & Jingasa~
-K:562:0x80:0xDD
-
-# Haramakido~
-K:563:0x80:0xDB
-
-# Nothing
-K:564:0x80:0xBF
-
-# Poison
-K:565:0x80:0xAA
-
-# Nothing
-K:566:0x80:0xAD
-
-# Nothing
-K:567:0x80:0xAD
-
-# Nothing
-K:568:0x80:0xAD
-
-# Nothing
-K:569:0x80:0xAD
-
-# Explosion
-K:570:0x80:0xAA
-
-# Teleport
-K:571:0x80:0xAA
-
-# Nothing
-K:572:0x80:0xAD
-
-# the Blood of Life
-K:573:0x80:0xA1
-
-# Cold
-K:574:0x80:0xAA
-
-# Fire
-K:575:0x80:0xAA
-
-# Acid
-K:576:0x80:0xAA
-
-# & Mage Staff~
-K:577:0x80:0xDC
-
-# Life
-K:579:0x80:0xAA
-
-# Confusion
-K:580:0x80:0xAA
-
-# Light
-K:581:0x80:0xAA
-
-# & Ring~
-K:582:0x80:0xBD
-
-# Invisibility
-K:583:0x80:0xA1
-
-# Chaos
-K:584:0x80:0xAA
-
-# Mutation
-K:585:0x80:0xA1
-
-# Invisibility
-K:586:0x80:0xBD
-
-# Time
-K:587:0x80:0xAA
-
-# Deep Thoughts
-K:588:0x80:0xBF
-
-# More Deep Thoughts
-K:589:0x80:0xBF
-
-# Compendium of Deep Thoughts
-K:590:0x80:0xBF
-
-# Artifact Lore Vol. I
-K:591:0x80:0xBF
-
-# Artifact Lore Vol. II
-K:592:0x80:0xBF
-
-# Artifact Lore Vol. III
-K:593:0x80:0xBF
-
-# Monstrous Compendium 1
-K:594:0x80:0xBF
-
-# Monstrous Compendium 2
-K:595:0x80:0xBF
-
-# Monstrous Compendium 3
-K:596:0x80:0xBF
-
-# Monstrous Compendium 4
-K:597:0x80:0xBF
-
-# Monstrous Compendium 5
-K:598:0x80:0xBF
-
-# Monstrous Compendium 6
-K:599:0x80:0xBF
-
-# Monstrous Compendium 7
-K:600:0x80:0xBF
-
-# Monstrous Compendium 8
-K:601:0x80:0xBF
-
-# Monstrous Compendium 9
-K:602:0x80:0xBF
-
-# Monstrous Compendium 10
-K:603:0x80:0xBF
-
-# Monstrous Compendium 11
-K:604:0x80:0xBF
-
-# Abomination
-K:605:0x80:0xA1
-
-# Shape of Wolf
-K:606:0x80:0xA1
-
-# Shape of Ape
-K:607:0x80:0xA1
-
-# Shape of Goat
-K:608:0x80:0xA1
-
-# Shape of Insect
-K:609:0x80:0xA1
-
-# Shape of Sparrow
-K:610:0x80:0xA1
-
-# Shape of Ent
-K:611:0x80:0xA1
-
-# Shape of Vampire
-K:612:0x80:0xA1
-
-# Shape of Spider
-K:613:0x80:0xA1
-
-# Shape of Mana ball
-K:614:0x80:0xA1
-
-# Shape of Fire cloud
-K:615:0x80:0xA1
-
-# Shape of Cold cloud
-K:616:0x80:0xA1
-
-# Shape of Chaos cloud
-K:617:0x80:0xA1
-
-# [Wolf]
-K:618:0x80:0xBF
-
-# [Ape]
-K:619:0x80:0xBF
-
-# [Goat]
-K:620:0x80:0xBF
-
-# [Insect]
-K:621:0x80:0xBF
-
-# [Sparrow]
-K:622:0x80:0xBF
-
-# [Ent]
-K:623:0x80:0xBF
-
-# [Vampire]
-K:624:0x80:0xBF
-
-# [Spider]
-K:625:0x80:0xBF
-
-# [Mana ball]
-K:626:0x80:0xBF
-
-# [Fire cloud]
-K:627:0x80:0xBF
-
-# [Cold cloud]
-K:628:0x80:0xBF
-
-# [Chaos Cloud]
-K:629:0x80:0xBF
-
-# [Ghost]
-K:630:0x80:0xBF
-
-# [Kobold]
-K:631:0x80:0xBF
-
-# [Dragon]
-K:632:0x80:0xBF
-
-# [Demon]
-K:633:0x80:0xBF
-
-# [Hound]
-K:634:0x80:0xBF
-
-# [Quylthulg]
-K:635:0x80:0xBF
-
-# [Maia]
-K:636:0x80:0xBF
-
-# [Serpent]
-K:637:0x80:0xBF
-
-# [Giant]
-K:638:0x80:0xBF
-
-# [Vala]
-K:639:0x80:0xBF
-
-# Magic
-K:640:0x80:0xAA
-
-# corpse
-K:641:0x80:0xFE
-
-# skeleton
-K:642:0x80:0xFE
-
-# head
-K:643:0x80:0xFE
-
-# skull
-K:644:0x80:0xFE
-
-# raw meat
-K:645:0x80:0xFE
-
-# & Dragonrider Coat~
-K:646:0x80:0xA8
-
-# & Stone~
-K:647:0x80:0xFE
-
-# & small wooden Boomerang~
-K:648:0x80:0xFB
-
-# & wooden Boomerang~
-K:649:0x80:0xFB
-
-# & small metal Boomerang~
-K:650:0x80:0xFB
-
-# & metal Boomerang~
-K:651:0x80:0xFB
-
-# & Anchor~
-K:652:0x80:0xFE
-
-# & ~
-K:653:0x80:0xFE
-
-# Summon never-moving pet
-K:654:0x80:0xBF
-
-# [Life in symbiosis]
-K:655:0x80:0xBF
-
-# [Perfect Symbiosis]
-K:656:0x80:0xBF
-
-# Cure Light Insanity
-K:657:0x80:0xA1
-
-# Cure Serious Insanity
-K:658:0x80:0xA1
-
-# Cure Critical Insanity
-K:659:0x80:0xA1
-
-# Cure Insanity
-K:660:0x80:0xA1
-
-# & Phial~
-K:661:0x80:0xFE
-
-# Random Artifact
-K:662:0x80:0xFE
-
-# Craftmanship
-K:663:0x80:0xBF
-
-# The One Ring
-K:664:0x80:0xBF
-
-# [Apprentice Handbook]
-K:665:0x80:0xBF
-
-# [Minstrel's Music]
-K:666:0x80:0xBF
-
-# [Harps of Rivendell]
-K:667:0x80:0xBF
-
-# [Lays of Beleriand]
-K:668:0x80:0xBF
-
-# & Flute~
-K:669:0x80:0xAF
-
-# & Drum~
-K:670:0x80:0xAF
-
-# & Harp~
-K:671:0x80:0xAF
-
-# & Banjo~
-K:672:0x80:0xAF
-
-# & Lute~
-K:673:0x80:0xAF
-
-# & Mandolin~
-K:674:0x80:0xAF
-
-# & Palantir~
-K:675:0x80:0xA1
-
-# Egg
-K:676:0x80:0xEF
-
-# Reset Recall
-K:677:0x80:0xBF
-
-# Divination
-K:678:0x80:0xBF
-
-# Self
-K:679:0x80:0xBF
-
-# Ray
-K:680:0x80:0xBF
-
-# Sphere
-K:681:0x80:0xBF
-
-# Knowledge
-K:682:0x80:0xBF
-
-# Life
-K:683:0x80:0xBF
-
-# Fire
-K:684:0x80:0xBF
-
-# Cold
-K:685:0x80:0xBF
-
-# Lightning
-K:686:0x80:0xBF
-
-# Acid
-K:687:0x80:0xBF
-
-# Element
-K:688:0x80:0xBF
-
-# Chaos
-K:689:0x80:0xBF
-
-# Mind
-K:690:0x80:0xBF
-
-# Holding
-K:691:0x80:0xBF
-
-# Arrow
-K:692:0x80:0xBF
-
-# Power Surge
-K:693:0x80:0xBF
-
-# Armageddon
-K:694:0x80:0xBF
-
-# Gravity
-K:695:0x80:0xBF
-
-# Extra Life
-K:696:0x80:0xAA
-
-# Anti-Death
-K:697:0x80:0xBF
-
-# Protection
-K:698:0x80:0xBF
-
-# & Horn~
-K:699:0x80:0xAF
-
-# Precognition
-K:700:0x80:0xBD
-
-# & Sprig~ of Athelas
-K:701:0x80:0xAC
-
-# [Magic for Beginners]
-K:702:0x80:0xBF
-
-# [Conjurings and Tricks]
-K:703:0x80:0xBF
-
-# [Incantations and Illusions]
-K:704:0x80:0xBF
-
-# [Sorcery and Evocations]
-K:705:0x80:0xBF
-
-# [Beginners Handbook]
-K:706:0x80:0xBF
-
-# [Words of Wisdom]
-K:707:0x80:0xBF
-
-# [Chants and Blessings]
-K:708:0x80:0xBF
-
-# [Exorcism and Dispelling]
-K:709:0x80:0xBF
-
-# [Resistance of Scarabtarices]
-K:710:0x80:0xBF
-
-# [Mordenkainen's Escapes]
-K:711:0x80:0xBF
-
-# [Kelek's Grimoire of Power]
-K:712:0x80:0xBF
-
-# [Tenser's Transformations]
-K:713:0x80:0xBF
-
-# [Raal's Tome of Destruction]
-K:714:0x80:0xBF
-
-# [Ethereal Openings]
-K:715:0x80:0xBF
-
-# [Godly Insights]
-K:716:0x80:0xBF
-
-# [Purifications and Healing]
-K:717:0x80:0xBF
-
-# [Holy Infusions]
-K:718:0x80:0xBF
-
-# [Wrath of God]
-K:719:0x80:0xBF
-
-# Deincarnation
-K:720:0x80:0xBF
-
-# Numenorean for beginners
-K:722:0x80:0xBF
-
-# Numenorean for beginners
-K:723:0x80:0xBF
-
-# Advanced lessons of Numenorean
-K:724:0x80:0xBF
-
-# Advanced lessons of Sindarin
-K:725:0x80:0xBF
-
-# & Shard~ of Pottery
-K:726:0x80:0xFE
-
-# & Broken Stick~
-K:727:0x80:0xFE
-
-# Wall Creation
-K:728:0x80:0xAD
-
-# [Illusions for Beginners]
-K:729:0x80:0xBF
-
-# [Tricks and Visions]
-K:730:0x80:0xBF
-
-# [Phantasms and Illusions]
-K:731:0x80:0xBF
-
-# [Shadows and Prisms]
-K:732:0x80:0xBF
-
-# [Serten's Immunities]
-K:733:0x80:0xBF
-
-# [Knowledge of Kenault]
-K:734:0x80:0xBF
-
-# [Otiluke's Spheres]
-K:735:0x80:0xBF
-
-# [Boccob's Book of Shadows]
-K:736:0x80:0xBF
-
-# [Bigby's Handbook]
-K:737:0x80:0xBF
-
-# [Hunt of Orome]
-K:738:0x80:0xBF
-
-# [Holy Sanctifications]
-K:739:0x80:0xBF
-
-# [Secrets of the Feanturi]
-K:740:0x80:0xBF
-
-# [War of Wrath]
-K:741:0x80:0xBF
-
-# [Gifts of Iluvatar]
-K:742:0x80:0xBF
-
-# Learning
-K:743:0x80:0xA1
-
-# [Eye of Sauron]
-K:744:0x80:0xBF
-
-# [Flame of Udun]
-K:745:0x80:0xBF
-
-# [Corruptions of Melkor]
-K:746:0x80:0xBF
-
-# [Crescent of Morgul]
-K:747:0x80:0xBF
-
-# [Morgoth's Ring]
-K:748:0x80:0xBF
-
-# Spell
-K:749:0x80:0xBF
-
-# Wishing
-K:750:0x80:0xDF
-
-# Khuzdul - The hidden tonge of the Dwarves
-K:751:0x80:0xBF
-
-# Nandorin for the dumbs
-K:752:0x80:0xBF
-
-# Advanced lessons of Orkish
-K:753:0x80:0xBF
-
-# Flying
-K:755:0x80:0xBD
-
-# [Powerful Sigils]
-K:756:0x80:0xBF
-
-# [Disruptive Forces]
-K:758:0x80:0xBF
-
-# [Forces of the Mind]
-K:759:0x80:0xBF
-
-# [Power of Ancient Sorcerors]
-K:760:0x80:0xBF
-
-# [Tricks of the Wild]
-K:761:0x80:0xBF
-
-# [Mastering the Rituals]
-K:762:0x80:0xBF
-
-# [Rites of Power]
-K:763:0x80:0xBF
-
-# [Tribal Power]
-K:764:0x80:0xBF
-
-# [Aiding Shades]
-K:765:0x80:0xBF
-
-# [Morgoth's Space-Time Warpings]
-K:766:0x80:0xBF
-
-# [Murazor Tome of Conjuring & Dispeling]
-K:767:0x80:0xBF
-
-# [Channeling the Void]
-K:768:0x80:0xBF
-
-# [Sauron's Forgotten Tome]
-K:769:0x80:0xBF
-
-# Wraith Form
-K:770:0x80:0xBD
-
-# [Earth]
-K:771:0x80:0xBF
-
-# [Fire]
-K:772:0x80:0xBF
-
-# [Air]
-K:773:0x80:0xBF
-
-# [Water]
-K:774:0x80:0xBF
-
-# [Mana]
-K:775:0x80:0xBF
-
-# Home Summoning
-K:776:0x80:0xAD
-
-# & Shadow Blade~
-K:777:0x80:0xFC
-
-# & Bluesteel Blade~
-K:778:0x80:0xFC
-
-# the Serpents
-K:779:0x80:0xA2
-
-# Darkness
-K:780:0x80:0xAA
-
-# Knowledge
-K:781:0x80:0xAA
-
-# Force
-K:782:0x80:0xAA
-
-# Lightning
-K:783:0x80:0xAA
-
-# Mana
-K:784:0x80:0xAA
-
-# Power
-K:785:0x80:0xBD
-
-# Climbing Set
-K:786:0x80:0xE0
-
-# Adventurer's Guide to Middle-earth
-K:787:0x80:0xBF
-
-# [Dark Incantations]
-K:788:0x80:0xBF
-
-# [Immortal Rituals]
-K:789:0x80:0xBF
-
-# [Minions of Azathoth]
-K:790:0x80:0xBF
-
-# [Demonthoughts]
-K:791:0x80:0xBF
-
-# [Hellfire Tome]
-K:792:0x80:0xBF
-
-# & Wooden Rod~ of#
-K:793:0x80:0xAD
-
-# & Copper Rod~ of#
-K:794:0x80:0xAD
-
-# & Iron Rod~ of#
-K:795:0x80:0xAD
-
-# & Aluminium Rod~ of#
-K:796:0x80:0xAD
-
-# & Silver Rod~ of#
-K:797:0x80:0xAD
-
-# & Golden Rod~ of#
-K:798:0x80:0xAD
-
-# & Mithril Rod~ of#
-K:799:0x80:0xAD
-
-# & Adamantite Rod~ of#
-K:800:0x80:0xAD
-
-
-
-
-
-
-
-# Monster attr/char definitions
-
-# Player
-R:0:0x80:0xC0
-
-# Filthy street urchin
-R:1:0x80:0xF4
-
-# Scrawny cat
-R:2:0x80:0xE6
-
-# Sparrow
-R:3:0x80:0xC2
-
-# Chaffinch
-R:4:0x80:0xC2
-
-# Wild rabbit
-R:5:0x80:0xF2
-
-# Woodsman
-R:6:0x80:0xF0
-
-# Scruffy little dog
-R:7:0x80:0xC3
-
-# Farmer Maggot
-R:8:0x81:0xBB
-
-# Blubbering idiot
-R:9:0x80:0xF4
-
-# Boil-covered wretch
-R:10:0x80:0xF4
-
-# Village idiot
-R:11:0x80:0xF4
-
-# Pitiful looking beggar
-R:12:0x80:0xF4
-
-# Mangy looking leper
-R:13:0x80:0xF4
-
-# Agent of black market
-R:14:0x81:0xB8
-
-# Singing, happy drunk
-R:15:0x81:0xB9
-
-# Aimless looking merchant
-R:16:0x81:0xBA
-
-# Mean looking mercenary
-R:17:0x80:0xF4
-
-# Battle scarred veteran
-R:18:0x81:0xC3
-
-# Martti Ihrasaari
-R:19:0x80:0xD0
-
-# Grey mold
-R:20:0x81:0x32
-
-# Large white snake
-R:21:0x81:0xA0
-
-# Grey mushroom patch
-R:22:0x80:0xAC
-
-# Newt
-R:23:0x80:0xD2
-
-# Giant white centipede
-R:24:0x80:0xE3
-
-# White icky thing
-R:25:0x80:0xE9
-
-# Clear icky thing
-R:26:0x80:0xE9
-
-# Giant white mouse
-R:27:0x80:0xF2
-
-# Large brown snake
-R:28:0x81:0xA1
-
-# Small kobold
-R:29:0x80:0xEB
-
-# Kobold
-R:30:0x80:0xEB
-
-# White worm mass
-R:31:0x80:0xF7
-
-# Floating eye
-R:32:0x80:0xE5
-
-# Rock lizard
-R:33:0x80:0xD2
-
-# Grid bug
-R:34:0x81:0xA9
-
-# Jackal
-R:35:0x81:0xB1
-
-# Soldier ant
-R:36:0x81:0xAA
-
-# Fruit bat
-R:37:0x80:0xE2
-
-# Insect swarm
-R:38:0x81:0xA8
-
-# Greater hell-beast
-R:39:0x80:0xD5
-
-# Shrieker mushroom patch
-R:40:0x80:0xAC
-
-# Blubbering icky thing
-R:41:0x80:0xE9
-
-# Metallic green centipede
-R:42:0x80:0xE3
-
-# Novice warrior
-R:43:0x81:0xC2
-
-# Novice rogue
-R:44:0x80:0xF0
-
-# Novice priest
-R:45:0x80:0xF0
-
-# Novice mage
-R:46:0x80:0xF0
-
-# Yellow mushroom patch
-R:47:0x80:0xAC
-
-# White jelly
-R:48:0x80:0xEA
-
-# Giant black ant
-R:49:0x80:0xE1
-
-# Salamander
-R:50:0x80:0xD2
-
-# White harpy
-R:51:0x80:0xC8
-
-# Blue yeek
-R:52:0x80:0xF9
-
-# Grip, Farmer Maggot's dog
-R:53:0x80:0xC3
-
-# Wolf, Farmer Maggot's dog
-R:54:0x80:0xC3
-
-# Fang, Farmer Maggot's dog
-R:55:0x80:0xC3
-
-# Giant green frog
-R:56:0x80:0xD2
-
-# Freesia
-R:57:0x80:0xE6
-
-# Green worm mass
-R:58:0x80:0xF7
-
-# Large yellow snake
-R:59:0x80:0xCA
-
-# Cave spider
-R:60:0x80:0xD3
-
-# Crow
-R:61:0x80:0xC2
-
-# Wild cat
-R:62:0x80:0xE6
-
-# Smeagol
-R:63:0x80:0xE8
-
-# Green ooze
-R:64:0x80:0xEA
-
-# Poltergeist
-R:65:0x80:0xC7
-
-# Yellow jelly
-R:66:0x80:0xEA
-
-# Metallic blue centipede
-R:67:0x80:0xE3
-
-# Raven
-R:68:0x80:0xC2
-
-# Giant white louse
-R:69:0x80:0xEC
-
-# Piranha
-R:70:0x80:0xFE
-
-# Black naga
-R:71:0x80:0xEE
-
-# Spotted mushroom patch
-R:72:0x80:0xAC
-
-# Silver jelly
-R:73:0x80:0xEA
-
-# Scruffy looking hobbit
-R:74:0x80:0xE8
-
-# Giant white ant
-R:75:0x80:0xE1
-
-# Yellow mold
-R:76:0x80:0xED
-
-# Metallic red centipede
-R:77:0x80:0xE3
-
-# Yellow worm mass
-R:78:0x80:0xF7
-
-# Clear worm mass
-R:79:0x80:0xF7
-
-# Radiation eye
-R:80:0x80:0xE5
-
-# Yellow light
-R:81:0x80:0xAA
-
-# Cave lizard
-R:82:0x80:0xD2
-
-# Novice ranger
-R:83:0x80:0xF0
-
-# Blue jelly
-R:84:0x80:0xEA
-
-# Creeping copper coins
-R:85:0x80:0xA4
-
-# Giant white rat
-R:86:0x80:0xF2
-
-# Snotling
-R:87:0x80:0xEF
-
-# Swordfish
-R:88:0x80:0xFE
-
-# Blue worm mass
-R:89:0x80:0xF7
-
-# Large grey snake
-R:90:0x80:0xCA
-
-# Skeleton kobold
-R:91:0x80:0xF3
-
-# Ewok
-R:92:0x80:0xE8
-
-# Novice mage
-R:93:0x80:0xF0
-
-# Green naga
-R:94:0x80:0xEE
-
-# Giant leech
-R:95:0x80:0xF7
-
-# Barracuda
-R:96:0x80:0xFE
-
-# Novice paladin
-R:97:0x80:0xF0
-
-# Zog
-R:98:0x80:0xE8
-
-# Blue ooze
-R:99:0x80:0xEA
-
-# Green glutton ghost
-R:100:0x80:0xC7
-
-# Green jelly
-R:101:0x80:0xEA
-
-# Large kobold
-R:102:0x80:0xEB
-
-# Grey icky thing
-R:103:0x80:0xE9
-
-# Disenchanter eye
-R:104:0x80:0xE5
-
-# Red worm mass
-R:105:0x80:0xF7
-
-# Copperhead snake
-R:106:0x80:0xCA
-
-# Death sword
-R:107:0x80:0xFC
-
-# Purple mushroom patch
-R:108:0x80:0xAC
-
-# Novice priest
-R:109:0x80:0xF0
-
-# Novice warrior
-R:110:0x80:0xF0
-
-# Nibelung
-R:111:0x80:0xE8
-
-# Disembodied hand that strangled people
-R:112:0x80:0xFA
-
-# Brown mold
-R:113:0x80:0xED
-
-# Giant brown bat
-R:114:0x80:0xE2
-
-# Rat-thing
-R:115:0x80:0xF2
-
-# Novice archer
-R:116:0x81:0xC1
-
-# Creeping silver coins
-R:117:0x80:0xA4
-
-# Snaga
-R:118:0x80:0xEF
-
-# Rattlesnake
-R:119:0x80:0xCA
-
-# Giant slug
-R:120:0x80:0xF7
-
-# Giant pink frog
-R:121:0x80:0xD2
-
-# Dark elf
-R:122:0x80:0xE8
-
-# Zombified kobold
-R:123:0x80:0xFA
-
-# Crypt Creep
-R:124:0x80:0xF3
-
-# Rotting corpse
-R:125:0x80:0xFA
-
-# Cave orc
-R:126:0x81:0xBC
-
-# Wood spider
-R:127:0x80:0xD3
-
-# Manes
-R:128:0x80:0xF5
-
-# Bloodshot eye
-R:129:0x80:0xE5
-
-# Red naga
-R:130:0x80:0xEE
-
-# Red jelly
-R:131:0x80:0xEA
-
-# Green icky thing
-R:132:0x80:0xE9
-
-# Lost soul
-R:133:0x80:0xC7
-
-# Night lizard
-R:134:0x80:0xD2
-
-# Mughash the Kobold Lord
-R:135:0x80:0xEB
-
-# Skeleton orc
-R:136:0x80:0xF3
-
-# Wormtongue, Agent of Saruman
-R:137:0x80:0xF0
-
-# Robin Hood, the Outlaw
-R:138:0x80:0xF0
-
-# Nurgling
-R:139:0x80:0xF5
-
-# Lagduf, the Snaga
-R:140:0x80:0xEF
-
-# Brown yeek
-R:141:0x80:0xF9
-
-# Novice ranger
-R:142:0x80:0xF0
-
-# Giant salamander
-R:143:0x80:0xD2
-
-# Space monster
-R:144:0x80:0xAE
-
-# Carnivorous flying monkey
-R:145:0x80:0xC8
-
-# Green mold
-R:146:0x80:0xED
-
-# Novice paladin
-R:147:0x80:0xF0
-
-# Lemure
-R:148:0x80:0xF5
-
-# Hill orc
-R:149:0x80:0xEF
-
-# Bandit
-R:150:0x80:0xF0
-
-# Hunting hawk
-R:151:0x80:0xC2
-
-# Phantom warrior
-R:152:0x80:0xC7
-
-# Gremlin
-R:153:0x80:0xF5
-
-# Yeti
-R:154:0x80:0xD9
-
-# Bloodshot icky thing
-R:155:0x80:0xE9
-
-# Giant grey rat
-R:156:0x80:0xF2
-
-# Black harpy
-R:157:0x80:0xC8
-
-# Skaven
-R:158:0x80:0xF2
-
-# The wounded bear
-R:159:0x80:0xF1
-
-# Portuguese man-o-war
-R:160:0x80:0xEA
-
-# Rock mole
-R:161:0x80:0xF2
-
-# Orc shaman
-R:162:0x80:0xEF
-
-# Baby blue dragon
-R:163:0x80:0xE4
-
-# Baby white dragon
-R:164:0x80:0xE4
-
-# Baby green dragon
-R:165:0x80:0xE4
-
-# Baby black dragon
-R:166:0x80:0xE4
-
-# Baby red dragon
-R:167:0x80:0xE4
-
-# Giant red ant
-R:168:0x80:0xE1
-
-# Brodda, the Easterling
-R:169:0x80:0xF0
-
-# Bloodfang the Wolf
-R:170:0x80:0xC3
-
-# King cobra
-R:171:0x80:0xCA
-
-# Eagle
-R:172:0x80:0xC2
-
-# War bear
-R:173:0x80:0xF1
-
-# Killer bee
-R:174:0x80:0xC9
-
-# Giant spider
-R:175:0x80:0xD3
-
-# Giant white tick
-R:176:0x80:0xD3
-
-# The Borshin
-R:177:0x80:0xE7
-
-# Dark elven mage
-R:178:0x80:0xE8
-
-# Kamikaze yeek
-R:179:0x80:0xF9
-
-# Orfax, Son of Boldor
-R:180:0x80:0xF9
-
-# Servant of Glaaki
-R:181:0x80:0xFA
-
-# Dark elven warrior
-R:182:0x81:0xBF
-
-# Sand-dweller
-R:183:0x80:0xF5
-
-# Clear mushroom patch
-R:184:0x80:0xAC
-
-# Quiver slot
-R:185:0x80:0xAC
-
-# Grishnakh, the Hill Orc
-R:186:0x80:0xEF
-
-# Giant piranha
-R:187:0x80:0xFE
-
-# Owlbear
-R:188:0x80:0xC8
-
-# Blue horror
-R:189:0x80:0xF5
-
-# Hairy mold
-R:190:0x80:0xED
-
-# Grizzly bear
-R:191:0x80:0xF1
-
-# Disenchanter mold
-R:192:0x80:0xED
-
-# Pseudo dragon
-R:193:0x80:0xE4
-
-# Tengu
-R:194:0x80:0xF5
-
-# Creeping gold coins
-R:195:0x80:0xA4
-
-# Wolf
-R:196:0x80:0xC3
-
-# Giant fruit fly
-R:197:0x80:0xC9
-
-# Panther
-R:198:0x80:0xE6
-
-# Brigand
-R:199:0x80:0xF0
-
-# Hobbes the Tiger
-R:200:0x80:0xE6
-
-# Shadow Creature of Fiona
-R:201:0x80:0xE8
-
-# Undead mass
-R:202:0x80:0xEA
-
-# Chaos shapechanger
-R:203:0x80:0xC8
-
-# Baby multi-hued dragon
-R:204:0x80:0xE4
-
-# Vorpal bunny
-R:205:0x80:0xF2
-
-# Old Man Willow
-R:206:0x80:0xA3
-
-# Hippocampus
-R:207:0x80:0xC8
-
-# Zombified orc
-R:208:0x80:0xFA
-
-# Hippogriff
-R:209:0x80:0xC8
-
-# Black mamba
-R:210:0x80:0xCA
-
-# White wolf
-R:211:0x80:0xC3
-
-# Grape jelly
-R:212:0x80:0xEA
-
-# Nether worm mass
-R:213:0x80:0xF7
-
-# Abyss worm mass
-R:214:0x80:0xF7
-
-# Golfimbul, the Hill Orc Chief
-R:215:0x80:0xEF
-
-# Swordsman
-R:216:0x80:0xF0
-
-# Skaven shaman
-R:217:0x80:0xF2
-
-# Gazer
-R:218:0x80:0xE5
-
-# Knight archer
-R:219:0x80:0xF0
-
-# Ixitxachitl
-R:220:0x80:0xFE
-
-# Mine-dog
-R:221:0x80:0xC3
-
-# Hellcat
-R:222:0x80:0xE6
-
-# Moon beast
-R:223:0x80:0xF1
-
-# Master yeek
-R:224:0x80:0xF9
-
-# Priest
-R:225:0x80:0xF0
-
-# Dark elven priest
-R:226:0x80:0xE8
-
-# Air spirit
-R:227:0x80:0xC5
-
-# Skeleton human
-R:228:0x80:0xF3
-
-# Zombified human
-R:229:0x80:0xFA
-
-# Tiger
-R:230:0x80:0xE6
-
-# Moaning spirit
-R:231:0x80:0xC7
-
-# Stegocentipede
-R:232:0x80:0xE3
-
-# Spotted jelly
-R:233:0x80:0xEA
-
-# Drider
-R:234:0x80:0xD3
-
-# Mongbat
-R:235:0x80:0xE2
-
-# Killer brown beetle
-R:236:0x80:0xCB
-
-# Boldor, King of the Yeeks
-R:237:0x80:0xF9
-
-# Ogre
-R:238:0x81:0xBD
-
-# Creeping mithril coins
-R:239:0x80:0xA4
-
-# Illusionist
-R:240:0x80:0xF0
-
-# Druid
-R:241:0x80:0xF0
-
-# Pink horror
-R:242:0x80:0xF5
-
-# Cloaker
-R:243:0x80:0xA8
-
-# Black orc
-R:244:0x80:0xEF
-
-# Ochre jelly
-R:245:0x80:0xEA
-
-# Software bug
-R:246:0x80:0xC9
-
-# Lurker
-R:247:0x80:0xAE
-
-# Nixie
-R:248:0x80:0xE8
-
-# Vlasta
-R:249:0x80:0xD2
-
-# Giant white dragon fly
-R:250:0x80:0xC6
-
-# Snaga sapper
-R:251:0x80:0xEF
-
-# Blue icky thing
-R:252:0x80:0xE9
-
-# Gibbering mouther
-R:253:0x80:0xEA
-
-# Irish wolfhound of Flora
-R:254:0x80:0xC3
-
-# Hill giant
-R:255:0x80:0xD0
-
-# Flesh golem
-R:256:0x80:0xE7
-
-# Warg
-R:257:0x80:0xC3
-
-# Cheerful leprechaun
-R:258:0x80:0xE8
-
-# Giant black flea
-R:259:0x80:0xC9
-
-# Ufthak of Cirith Ungol
-R:260:0x80:0xEF
-
-# Clay golem
-R:261:0x80:0xE7
-
-# Black ogre
-R:262:0x80:0xCF
-
-# Dweller on the threshold
-R:263:0x80:0xD9
-
-# Half-orc
-R:264:0x80:0xEF
-
-# Dark naga
-R:265:0x80:0xEE
-
-# Giant octopus
-R:266:0x80:0xFE
-
-# Magic mushroom patch
-R:267:0x80:0xAC
-
-# Plaguebearer of Nurgle
-R:268:0x80:0xFA
-
-# Guardian naga
-R:269:0x80:0xEE
-
-# Wererat
-R:270:0x80:0xF2
-
-# Light hound
-R:271:0x80:0xDA
-
-# Shadow hound
-R:272:0x80:0xDA
-
-# Flying skull
-R:273:0x80:0xF3
-
-# Mi-Go
-R:274:0x80:0xC9
-
-# Giant tarantula
-R:275:0x80:0xD3
-
-# Giant clear centipede
-R:276:0x80:0xE3
-
-# Mirkwood spider
-R:277:0x80:0xD3
-
-# Frost giant
-R:278:0x80:0xD0
-
-# Griffon
-R:279:0x80:0xC8
-
-# Homonculous
-R:280:0x80:0xF5
-
-# Gnome mage
-R:281:0x80:0xE8
-
-# Clear hound
-R:282:0x80:0xDA
-
-# Umber hulk
-R:283:0x80:0xD8
-
-# Rust monster
-R:284:0x80:0xF1
-
-# Orc captain
-R:285:0x80:0xEF
-
-# Gelatinous cube
-R:286:0x80:0xEA
-
-# Giant green dragon fly
-R:287:0x80:0xC6
-
-# Fire giant
-R:288:0x80:0xD0
-
-# Hummerhorn
-R:289:0x80:0xC9
-
-# Lizardman
-R:290:0x80:0xE8
-
-# Ulfast, Son of Ulfang
-R:291:0x80:0xF0
-
-# Hammerhead
-R:292:0x80:0xFE
-
-# Berserker
-R:293:0x80:0xF0
-
-# Quasit
-R:294:0x80:0xF5
-
-# Sphinx
-R:295:0x80:0xC8
-
-# Imp
-R:296:0x80:0xF5
-
-# Forest troll
-R:297:0x80:0xD4
-
-# Freezing sphere
-R:298:0x80:0xAA
-
-# Jumping fireball
-R:299:0x80:0xAA
-
-# Ball lightning
-R:300:0x80:0xAA
-
-# 2-headed hydra
-R:301:0x80:0xCD
-
-# Swamp thing
-R:302:0x80:0xC8
-
-# Water spirit
-R:303:0x80:0xC5
-
-# Giant red scorpion
-R:304:0x80:0xD3
-
-# Earth spirit
-R:305:0x80:0xC5
-
-# Fire spirit
-R:306:0x80:0xC5
-
-# Fire hound
-R:307:0x80:0xDA
-
-# Cold hound
-R:308:0x80:0xDA
-
-# Energy hound
-R:309:0x80:0xDA
-
-# Potion mimic
-R:310:0x80:0xA1
-
-# Door mimic
-R:311:0x80:0xAB
-
-# Blink dog
-R:312:0x80:0xC3
-
-# Uruk
-R:313:0x80:0xEF
-
-# Shagrat, the Orc Captain
-R:314:0x80:0xEF
-
-# Gorbag, the Orc Captain
-R:315:0x80:0xEF
-
-# Shambling mound
-R:316:0x80:0xAC
-
-# White shark
-R:317:0x80:0xFE
-
-# Chaos beastman
-R:318:0x80:0xC8
-
-# Daemonette of Slaanesh
-R:319:0x80:0xF5
-
-# Giant bronze dragon fly
-R:320:0x80:0xC6
-
-# Stone giant
-R:321:0x80:0xD0
-
-# Giant black dragon fly
-R:322:0x80:0xC6
-
-# Stone golem
-R:323:0x80:0xE7
-
-# Red mold
-R:324:0x80:0xED
-
-# Giant gold dragon fly
-R:325:0x80:0xC6
-
-# Stunwall
-R:326:0x80:0xA3
-
-# Ghast
-R:327:0x80:0xFA
-
-# Ixitxachitl priest
-R:328:0x80:0xFE
-
-# Huorn
-R:329:0x80:0xA3
-
-# Bolg, Son of Azog
-R:330:0x80:0xEF
-
-# Phase spider
-R:331:0x80:0xD3
-
-# Lizard king
-R:332:0x80:0xE8
-
-# Landmine
-R:333:0x80:0xAE
-
-# Wyvern
-R:334:0x80:0xE4
-
-# Great eagle
-R:335:0x80:0xC2
-
-# Livingstone
-R:336:0x80:0xA3
-
-# Earth hound
-R:337:0x80:0xDA
-
-# Air hound
-R:338:0x80:0xDA
-
-# Sabre-tooth tiger
-R:339:0x80:0xE6
-
-# Water hound
-R:340:0x80:0xDA
-
-# Chimera
-R:341:0x80:0xC8
-
-# Quylthulg
-R:342:0x80:0xD1
-
-# Sasquatch
-R:343:0x80:0xD9
-
-# Weir
-R:344:0x80:0xC3
-
-# Whale
-R:345:0x80:0xFE
-
-# Electric eel
-R:346:0x80:0xCA
-
-# Werewolf
-R:347:0x80:0xC3
-
-# Dark elven lord
-R:348:0x80:0xE8
-
-# Cloud giant
-R:349:0x80:0xD0
-
-# Ugluk, the Uruk
-R:350:0x80:0xEF
-
-# Blue dragon bat
-R:351:0x80:0xE2
-
-# Scroll mimic
-R:352:0x80:0xBF
-
-# Chest mimic
-R:353:0x80:0xFE
-
-# Fire vortex
-R:354:0x80:0xF6
-
-# Water vortex
-R:355:0x80:0xF6
-
-# Lugdush, the Uruk
-R:356:0x80:0xEF
-
-# Arch-vile
-R:357:0x80:0xF5
-
-# Cold vortex
-R:358:0x80:0xF6
-
-# Energy vortex
-R:359:0x80:0xF6
-
-# Globefish
-R:360:0x80:0xFE
-
-# Carrion
-R:361:0x80:0xC2
-
-# Mummified orc
-R:362:0x80:0xFA
-
-# Killer whale
-R:363:0x80:0xFE
-
-# Serpent man
-R:364:0x80:0xCA
-
-# Vampiric mist
-R:365:0x80:0xA3
-
-# Killer stag beetle
-R:366:0x80:0xCB
-
-# Iron golem
-R:367:0x80:0xE7
-
-# Auto-roller
-R:368:0x80:0xE7
-
-# Giant yellow scorpion
-R:369:0x80:0xD3
-
-# Jade monk
-R:370:0x80:0xF0
-
-# Black ooze
-R:371:0x80:0xEA
-
-# Hardened warrior
-R:372:0x80:0xF0
-
-# Azog, King of the Uruk-Hai
-R:373:0x80:0xEF
-
-# Fleshhound of Khorne
-R:374:0x80:0xC3
-
-# Dark elven warlock
-R:375:0x80:0xE8
-
-# Master rogue
-R:376:0x80:0xF0
-
-# Red dragon bat
-R:377:0x80:0xE2
-
-# Killer white beetle
-R:378:0x80:0xCB
-
-# Ice skeleton
-R:379:0x80:0xF3
-
-# Angamaite of Umbar
-R:380:0x80:0xF0
-
-# Forest wight
-R:381:0x80:0xD7
-
-# Mime, the Nibelung
-R:382:0x80:0xE8
-
-# Ibun, Son of Mim
-R:383:0x80:0xE8
-
-# Meneldor the Swift
-R:384:0x80:0xC2
-
-# Phantom beast
-R:385:0x80:0xC7
-
-# Great white shark
-R:386:0x80:0xFE
-
-# 4-headed hydra
-R:387:0x80:0xCD
-
-# Lesser hell-beast
-R:388:0x80:0xD5
-
-# Tyrannosaur
-R:389:0x80:0xD2
-
-# Mummified human
-R:390:0x80:0xFA
-
-# Vampire bat
-R:391:0x80:0xE2
-
-# Sangahyando of Umbar
-R:392:0x80:0xF0
-
-# It
-R:393:0x80:0xAE
-
-# Banshee
-R:394:0x80:0xC7
-
-# Carrion crawler
-R:395:0x80:0xE3
-
-# Xiclotlan
-R:396:0x80:0xA3
-
-# Silent watcher
-R:397:0x80:0xE7
-
-# Pukelman
-R:398:0x80:0xE7
-
-# Disenchanter beast
-R:399:0x80:0xF1
-
-# Dark elven druid
-R:400:0x80:0xE8
-
-# Stone troll
-R:401:0x80:0xD4
-
-# Black
-R:402:0x80:0xEA
-
-# Troll priest
-R:403:0x80:0xD4
-
-# Wereworm
-R:404:0x80:0xF7
-
-# Killer crimson beetle
-R:405:0x80:0xCB
-
-# Vampiric ixitxachitl
-R:406:0x80:0xFE
-
-# Gnoph-Keh
-R:407:0x80:0xF1
-
-# Giant grey ant
-R:408:0x80:0xE1
-
-# Khufu the Mummified King
-R:409:0x80:0xFA
-
-# Gwaihir the Windlord
-R:410:0x80:0xC2
-
-# Giant red tick
-R:411:0x80:0xD3
-
-# Displacer beast
-R:412:0x80:0xE6
-
-# Ulwarth, Son of Ulfang
-R:413:0x80:0xF0
-
-# Agent of Saruman
-R:414:0x80:0xF0
-
-# Cave ogre
-R:415:0x80:0xCF
-
-# White wraith
-R:416:0x80:0xD7
-
-# Monadic Deva
-R:417:0x80:0xC1
-
-# Ghoul
-R:418:0x80:0xFA
-
-# Mim, Betrayer of Turin
-R:419:0x80:0xE8
-
-# Hellblade
-R:420:0x80:0xFC
-
-# Killer red beetle
-R:421:0x80:0xCB
-
-# Beast of Nurgle
-R:422:0x80:0xF1
-
-# Creeping adamantite coins
-R:423:0x80:0xA4
-
-# Algroth
-R:424:0x80:0xD4
-
-# Flamer of Tzeentch
-R:425:0x80:0xAC
-
-# Roper
-R:426:0x80:0xA3
-
-# Headless
-R:427:0x80:0xC8
-
-# Vibration hound
-R:428:0x80:0xDA
-
-# Nexus hound
-R:429:0x80:0xDA
-
-# Ogre mage
-R:430:0x80:0xCF
-
-# Lokkak, the Ogre Chieftain
-R:431:0x80:0xCF
-
-# Vampire
-R:432:0x80:0xD6
-
-# Gorgimera
-R:433:0x80:0xC8
-
-# Shantak
-R:434:0x80:0xC2
-
-# Colbran
-R:435:0x80:0xE7
-
-# Spirit naga
-R:436:0x80:0xEE
-
-# Corpser
-R:437:0x80:0xAC
-
-# Fiend of Slaanesh
-R:438:0x80:0xD3
-
-# Stairway to hell
-R:439:0x80:0xBE
-
-# 5-headed hydra
-R:440:0x80:0xCD
-
-# Barney the Dinosaur
-R:441:0x80:0xD2
-
-# Black knight
-R:442:0x80:0xF0
-
-# Seahorse
-R:443:0x80:0xFE
-
-# Cyclops
-R:444:0x80:0xD0
-
-# Clairvoyant
-R:445:0x80:0xF0
-
-# Giant purple worm
-R:446:0x80:0xF7
-
-# Catoblepas
-R:447:0x80:0xF1
-
-# Lesser wall monster
-R:448:0x80:0xA3
-
-# Mage
-R:449:0x80:0xF0
-
-# Mind flayer
-R:450:0x80:0xE8
-
-# The Ultimate Dungeon Cleaner
-R:451:0x80:0xE7
-
-# Deep one
-R:452:0x80:0xF5
-
-# Basilisk
-R:453:0x80:0xD2
-
-# Ice troll
-R:454:0x80:0xD4
-
-# Dhole
-R:455:0x80:0xF7
-
-# Movanic Deva
-R:456:0x80:0xC1
-
-# Ring mimic
-R:457:0x80:0xBD
-
-# Chaos tile
-R:458:0x80:0xAE
-
-# Young blue dragon
-R:459:0x80:0xE4
-
-# Young white dragon
-R:460:0x80:0xE4
-
-# Young green dragon
-R:461:0x80:0xE4
-
-# Young bronze dragon
-R:462:0x80:0xE4
-
-# Aklash
-R:463:0x80:0xD4
-
-# Mithril golem
-R:464:0x80:0xE7
-
-# Skeleton troll
-R:465:0x80:0xF3
-
-# Skeletal tyrannosaur
-R:466:0x80:0xD2
-
-# Jaws
-R:467:0x80:0xFE
-
-# Thorondor
-R:468:0x80:0xC2
-
-# Giant blue ant
-R:469:0x80:0xE1
-
-# Grave wight
-R:470:0x80:0xD7
-
-# Shadow drake
-R:471:0x80:0xE4
-
-# Manticore
-R:472:0x80:0xC8
-
-# Giant army ant
-R:473:0x80:0xE1
-
-# Killer slicer beetle
-R:474:0x80:0xCB
-
-# Gorgon
-R:475:0x80:0xC8
-
-# Gug
-R:476:0x80:0xC7
-
-# Ghost
-R:477:0x80:0xC7
-
-# Death watch beetle
-R:478:0x80:0xCB
-
-# Ogre shaman
-R:479:0x80:0xCF
-
-# Nexus quylthulg
-R:480:0x80:0xD1
-
-# Shelob, Spider of Darkness
-R:481:0x80:0xD3
-
-# Giant squid
-R:482:0x80:0xFE
-
-# Ghoulking
-R:483:0x80:0xFA
-
-# Doombat
-R:484:0x80:0xE2
-
-# Ninja
-R:485:0x80:0xF0
-
-# Memory moss
-R:486:0x80:0xAC
-
-# Storm giant
-R:487:0x80:0xD0
-
-# Spectator
-R:488:0x80:0xE5
-
-# Bokrug
-R:489:0x80:0xD2
-
-# Biclops
-R:490:0x80:0xD0
-
-# Half-troll
-R:491:0x80:0xD4
-
-# Ivory monk
-R:492:0x80:0xF0
-
-# Bert the Stone Troll
-R:493:0x80:0xD4
-
-# Bill the Stone Troll
-R:494:0x80:0xD4
-
-# Tom the Stone Troll
-R:495:0x80:0xD4
-
-# Cave troll
-R:496:0x80:0xD4
-
-# Anti-paladin
-R:497:0x80:0xF0
-
-# Chaos master
-R:498:0x80:0xF0
-
-# Barrow wight
-R:499:0x80:0xD7
-
-# Giant skeleton troll
-R:500:0x80:0xF3
-
-# Chaos drake
-R:501:0x80:0xE4
-
-# Law drake
-R:502:0x80:0xE4
-
-# Balance drake
-R:503:0x80:0xE4
-
-# Ethereal drake
-R:504:0x80:0xE4
-
-# Groo the Wanderer
-R:505:0x80:0xD4
-
-# Fasolt the Giant
-R:506:0x80:0xD0
-
-# Shade
-R:507:0x80:0xC7
-
-# Spectre
-R:508:0x80:0xC7
-
-# Water troll
-R:509:0x80:0xD4
-
-# Fire elemental
-R:510:0x80:0xC5
-
-# Cherub
-R:511:0x80:0xC1
-
-# Water elemental
-R:512:0x80:0xC5
-
-# Multi-hued hound
-R:513:0x80:0xDA
-
-# Night stalker
-R:514:0x80:0xC5
-
-# Carrion crawler
-R:515:0x80:0xE3
-
-# Master thief
-R:516:0x80:0xF0
-
-# Waldern, King of Water
-R:517:0x80:0xC5
-
-# Lich
-R:518:0x80:0xCC
-
-# Gas spore
-R:519:0x80:0xE5
-
-# Master vampire
-R:520:0x80:0xD6
-
-# Oriental vampire
-R:521:0x80:0xD6
-
-# Greater mummy
-R:522:0x80:0xFA
-
-# Bloodletter of Khorne
-R:523:0x80:0xD5
-
-# Giant grey scorpion
-R:524:0x80:0xD3
-
-# Earth elemental
-R:525:0x80:0xC5
-
-# Air elemental
-R:526:0x80:0xC5
-
-# Doom drake
-R:527:0x80:0xE4
-
-# Gargoyle
-R:528:0x80:0xF5
-
-# Malicious leprechaun
-R:529:0x80:0xE8
-
-# Eog golem
-R:530:0x80:0xE7
-
-# Little Boy
-R:531:0x80:0xFB
-
-# Dagashi
-R:532:0x80:0xF0
-
-# Headless ghost
-R:533:0x80:0xC7
-
-# Dread
-R:534:0x80:0xC7
-
-# Leng spider
-R:535:0x80:0xD3
-
-# Star vampire
-R:536:0x80:0xD6
-
-# Smoke elemental
-R:537:0x80:0xC5
-
-# Olog
-R:538:0x80:0xD4
-
-# Halfling slinger
-R:539:0x80:0xE8
-
-# Gravity hound
-R:540:0x80:0xDA
-
-# Acidic cytoplasm
-R:541:0x80:0xEA
-
-# Inertia hound
-R:542:0x80:0xDA
-
-# Impact hound
-R:543:0x80:0xDA
-
-# Sea troll
-R:544:0x80:0xD4
-
-# Ooze elemental
-R:545:0x80:0xC5
-
-# Young black dragon
-R:546:0x80:0xE4
-
-# Mumak
-R:547:0x80:0xF1
-
-# Giant red ant
-R:548:0x80:0xE1
-
-# Mature white dragon
-R:549:0x80:0xE4
-
-# Xorn
-R:550:0x80:0xD8
-
-# Rogrog the Black Troll
-R:551:0x80:0xD4
-
-# Mist giant
-R:552:0x80:0xA3
-
-# Phantom
-R:553:0x80:0xC7
-
-# Grey wraith
-R:554:0x80:0xD7
-
-# Revenant
-R:555:0x80:0xD7
-
-# Young multi-hued dragon
-R:556:0x80:0xE4
-
-# Raal's Tome of Destruction
-R:557:0x80:0xBF
-
-# Colossus
-R:558:0x80:0xE7
-
-# Young gold dragon
-R:559:0x80:0xE4
-
-# Mature blue dragon
-R:560:0x80:0xE4
-
-# Mature green dragon
-R:561:0x80:0xE4
-
-# Mature bronze dragon
-R:562:0x80:0xE4
-
-# Young red dragon
-R:563:0x80:0xE4
-
-# Nightblade
-R:564:0x80:0xE8
-
-# Trapper
-R:565:0x80:0xAE
-
-# Bodak
-R:566:0x80:0xF5
-
-# Time bomb
-R:567:0x80:0xAE
-
-# Mezzodaemon
-R:568:0x80:0xF5
-
-# Elder thing
-R:569:0x80:0xF5
-
-# Ice elemental
-R:570:0x80:0xC5
-
-# Necromancer
-R:571:0x81:0xBE
-
-# The Greater hell magic mushroom were-quylthulg
-R:572:0x80:0xD1
-
-# Lorgan, Chief of the Easterlings
-R:573:0x80:0xF0
-
-# Chaos spawn
-R:574:0x80:0xE5
-
-# Mummified troll
-R:575:0x80:0xFA
-
-# Fire angel
-R:576:0x80:0xE4
-
-# Crypt thing
-R:577:0x80:0xCC
-
-# Chaos butterfly
-R:578:0x80:0xC9
-
-# Time elemental
-R:579:0x80:0xC5
-
-# Flying polyp
-R:580:0x80:0xFE
-
-# The Queen Ant
-R:581:0x80:0xE1
-
-# Will o' the wisp
-R:582:0x80:0xC5
-
-# Shan
-R:583:0x80:0xC9
-
-# Magma elemental
-R:584:0x80:0xC5
-
-# Black pudding
-R:585:0x80:0xEA
-
-# Killer iridescent beetle
-R:586:0x80:0xCB
-
-# Nexus vortex
-R:587:0x80:0xF6
-
-# Plasma vortex
-R:588:0x80:0xF6
-
-# Mature red dragon
-R:589:0x80:0xE4
-
-# Mature gold dragon
-R:590:0x80:0xE4
-
-# Crystal drake
-R:591:0x80:0xE4
-
-# Mature black dragon
-R:592:0x80:0xE4
-
-# Mature multi-hued dragon
-R:593:0x80:0xE4
-
-# Sky whale
-R:594:0x80:0xFE
-
-# Draebor, the Imp
-R:595:0x80:0xF5
-
-# Mother Hydra
-R:596:0x80:0xF5
-
-# Death knight
-R:597:0x80:0xF0
-
-# Castamir the Usurper
-R:598:0x80:0xF0
-
-# Time vortex
-R:599:0x80:0xF6
-
-# Shimmering vortex
-R:600:0x80:0xF6
-
-# Ancient blue dragon
-R:601:0x80:0xC4
-
-# Ancient bronze dragon
-R:602:0x80:0xC4
-
-# Beholder
-R:603:0x80:0xE5
-
-# Emperor wight
-R:604:0x80:0xD7
-
-# Planetar
-R:605:0x80:0xC1
-
-# Vargo, Tyrant of Fire
-R:606:0x80:0xC5
-
-# Black wraith
-R:607:0x80:0xD7
-
-# Nightgaunt
-R:608:0x80:0xD5
-
-# Baron of hell
-R:609:0x80:0xD5
-
-# Medusa
-R:610:0x80:0xCD
-
-# Monastic lich
-R:611:0x80:0xCC
-
-# Nether wraith
-R:612:0x80:0xD7
-
-# Fire vampire
-R:613:0x80:0xD6
-
-# 7-headed hydra
-R:614:0x80:0xCD
-
-# Moire, Queen of Rebma
-R:615:0x80:0xC5
-
-# Kavlax the Many-Headed
-R:616:0x80:0xE4
-
-# Ancient white dragon
-R:617:0x80:0xC4
-
-# Ancient green dragon
-R:618:0x80:0xC4
-
-# Chthonian
-R:619:0x80:0xF7
-
-# Eldrak
-R:620:0x80:0xD4
-
-# Ettin
-R:621:0x80:0xD4
-
-# Night mare
-R:622:0x80:0xF1
-
-# Vampire lord
-R:623:0x80:0xD6
-
-# Ancient black dragon
-R:624:0x80:0xC4
-
-# Weird fume
-R:625:0x80:0xA3
-
-# Spawn of Ubbo-Sathla
-R:626:0x80:0xEA
-
-# Fat Man
-R:627:0x80:0xFB
-
-# Malekith the Accursed
-R:628:0x80:0xE8
-
-# Shadowfax, steed of Gandalf
-R:629:0x80:0xF1
-
-# Spirit troll
-R:630:0x80:0xD4
-
-# War troll
-R:631:0x80:0xD4
-
-# Disenchanter worm mass
-R:632:0x80:0xF7
-
-# Rotting quylthulg
-R:633:0x80:0xD1
-
-# Lesser titan
-R:634:0x80:0xD0
-
-# 9-headed hydra
-R:635:0x80:0xCD
-
-# Enchantress
-R:636:0x80:0xF0
-
-# Archpriest
-R:637:0x80:0xF0
-
-# Sorcerer
-R:638:0x80:0xF0
-
-# Xaren
-R:639:0x80:0xD8
-
-# Giant roc
-R:640:0x80:0xC2
-
-# Minotaur
-R:641:0x80:0xC8
-
-# Jasra, Brand's Mistress
-R:642:0x80:0xEE
-
-# Death drake
-R:643:0x80:0xC4
-
-# Ancient red dragon
-R:644:0x80:0xC4
-
-# Ancient gold dragon
-R:645:0x80:0xC4
-
-# Great crystal drake
-R:646:0x80:0xC4
-
-# Wyrd sister
-R:647:0x80:0xF0
-
-# Clubber demon
-R:648:0x80:0xD5
-
-# Death quasit
-R:649:0x80:0xF5
-
-# Giganto the Gargantuan
-R:650:0x80:0xFE
-
-# Strygalldwir
-R:651:0x80:0xD5
-
-# Fallen angel
-R:652:0x80:0xC1
-
-# Giant headless
-R:653:0x80:0xC8
-
-# Judge Fire
-R:654:0x80:0xF3
-
-# Ubbo-Sathla, the Unbegotten Source
-R:655:0x80:0xEA
-
-# Judge Mortis
-R:656:0x80:0xFA
-
-# Dark elven sorceror
-R:657:0x80:0xE8
-
-# Master lich
-R:658:0x80:0xCC
-
-# Byakhee
-R:659:0x80:0xD5
-
-# Eol the Dark Elf
-R:660:0x80:0xE8
-
-# Archon
-R:661:0x80:0xC1
-
-# Formless spawn of Tsathoggua
-R:662:0x80:0xD5
-
-# Hunting horror
-R:663:0x80:0xD5
-
-# Undead beholder
-R:664:0x80:0xE5
-
-# Shadow demon
-R:665:0x80:0xC7
-
-# Iron lich
-R:666:0x80:0xCC
-
-# Dread
-R:667:0x80:0xC7
-
-# Greater basilisk
-R:668:0x80:0xD2
-
-# Charybdis
-R:669:0x80:0xFE
-
-# Jack of Shadows
-R:670:0x80:0xF0
-
-# Zephyr Lord
-R:671:0x80:0xD7
-
-# Juggernaut of Khorne
-R:672:0x80:0xE7
-
-# Great Mumak
-R:673:0x80:0xF1
-
-# Judge Fear
-R:674:0x80:0xD7
-
-# Ancient multi-hued dragon
-R:675:0x80:0xC4
-
-# Ethereal dragon
-R:676:0x80:0xC4
-
-# Dark young of Shub-Niggurath
-R:677:0x80:0xA3
-
-# Colour out of space
-R:678:0x80:0xAE
-
-# Quaker, Master of Earth
-R:679:0x80:0xC5
-
-# Death leprechaun
-R:680:0x80:0xE8
-
-# Chaugnar Faugn, Horror from the Hills
-R:681:0x80:0xF1
-
-# Lloigor
-R:682:0x80:0xF6
-
-# Utgard-Loke
-R:683:0x80:0xD0
-
-# Quachil Uttaus, Treader of the Dust
-R:684:0x80:0xFA
-
-# Shoggoth
-R:685:0x80:0xEA
-
-# Judge Death
-R:686:0x80:0xD7
-
-# Ariel, Queen of Air
-R:687:0x80:0xC5
-
-# 11-headed hydra
-R:688:0x80:0xCD
-
-# High priest
-R:689:0x80:0xF0
-
-# Dreadmaster
-R:690:0x80:0xC7
-
-# Drolem
-R:691:0x80:0xE7
-
-# Scatha the Worm
-R:692:0x80:0xC4
-
-# Warrior of the Dawn
-R:693:0x80:0xF0
-
-# Lesser black reaver
-R:694:0x80:0xCC
-
-# Zoth-Ommog
-R:695:0x80:0xD2
-
-# Grand master thief
-R:696:0x80:0xF0
-
-# Smaug the Golden
-R:697:0x80:0xC4
-
-# The Stormbringer
-R:698:0x80:0xFC
-
-# Ultra-elite paladin
-R:699:0x80:0xF0
-
-# Leprechaun fanatic
-R:700:0x80:0xE8
-
-# Dracolich
-R:701:0x80:0xC4
-
-# Greater titan
-R:702:0x80:0xD0
-
-# Dracolisk
-R:703:0x80:0xC4
-
-# Fastitocalon
-R:704:0x80:0xC4
-
-# Spectral tyrannosaur
-R:705:0x80:0xD2
-
-# Yibb-Tstll the Patient One
-R:706:0x80:0xD0
-
-# Ghatanothoa
-R:707:0x80:0xC8
-
-# Ent
-R:708:0x80:0xA3
-
-# Hru
-R:709:0x80:0xD0
-
-# Itangast the Fire Drake
-R:710:0x80:0xC4
-
-# Death mold
-R:711:0x80:0xED
-
-# Fafner the Dragon
-R:712:0x80:0xC4
-
-# Charon the Boatsman
-R:713:0x80:0xD7
-
-# Quickbeam
-R:714:0x80:0xA3
-
-# Glaurung, Father of the Dragons
-R:715:0x80:0xC4
-
-# Behemoth
-R:716:0x80:0xC8
-
-# Garm, Guardian of Hel
-R:717:0x80:0xC3
-
-# Greater wall monster
-R:718:0x80:0xA3
-
-# Nycadaemon
-R:719:0x80:0xD5
-
-# Balrog
-R:720:0x80:0xD5
-
-# Goat of Mendes
-R:721:0x80:0xF1
-
-# Nightwing
-R:722:0x80:0xD7
-
-# Maulotaur
-R:723:0x80:0xC8
-
-# Nether hound
-R:724:0x80:0xDA
-
-# Time hound
-R:725:0x80:0xDA
-
-# Plasma hound
-R:726:0x80:0xDA
-
-# Demonic quylthulg
-R:727:0x80:0xD1
-
-# Great storm wyrm
-R:728:0x80:0xC4
-
-# Ulik the Troll
-R:729:0x80:0xD4
-
-# Baphomet the Minotaur Lord
-R:730:0x80:0xC8
-
-# Hell knight
-R:731:0x80:0xF0
-
-# Bull Gates
-R:732:0x80:0xF0
-
-# Santa Claus
-R:733:0x80:0xE8
-
-# Eihort, the Thing in the Labyrinth
-R:734:0x80:0xEA
-
-# The King in Yellow
-R:735:0x80:0xCC
-
-# Great unclean one
-R:736:0x80:0xD5
-
-# Lord of Chaos
-R:737:0x80:0xF0
-
-# Old Sorcerer
-R:738:0x80:0xF0
-
-# Hound of Tindalos
-R:739:0x80:0xDA
-
-# Lesser kraken
-R:740:0x80:0xFE
-
-# Great ice wyrm
-R:741:0x80:0xC4
-
-# Demilich
-R:742:0x80:0xCC
-
-# The Phoenix
-R:743:0x80:0xC2
-
-# Nightcrawler
-R:744:0x80:0xD7
-
-# Lord of Change
-R:745:0x80:0xC2
-
-# Keeper of Secrets
-R:746:0x80:0xC8
-
-# Shudde M'ell
-R:747:0x80:0xF7
-
-# Hand druj
-R:748:0x80:0xF3
-
-# Eye druj
-R:749:0x80:0xF3
-
-# Skull druj
-R:750:0x80:0xF3
-
-# Chaos vortex
-R:751:0x80:0xF6
-
-# Aether vortex
-R:752:0x80:0xF6
-
-# Nidhogg the Hel-Drake
-R:753:0x80:0xC4
-
-# The Lernean Hydra
-R:754:0x80:0xCD
-
-# Thuringwethil
-R:755:0x80:0xD6
-
-# Great hell wyrm
-R:756:0x80:0xC4
-
-# Hastur the Unspeakable
-R:757:0x80:0xC8
-
-# Bloodthirster
-R:758:0x80:0xD5
-
-# Draconic quylthulg
-R:759:0x80:0xD1
-
-# Nyogtha, the Thing that Should not Be
-R:760:0x80:0xEA
-
-# Ahtu, Avatar of Nyarlathotep
-R:761:0x80:0xA3
-
-# Fundin Bluecloak
-R:762:0x80:0xE8
-
-# The Philosophy Teacher
-R:763:0x80:0xF0
-
-# Uriel, Angel of Fire
-R:764:0x80:0xC1
-
-# Azriel, Angel of Death
-R:765:0x80:0xC1
-
-# Ancalagon the Black
-R:766:0x80:0xC4
-
-# Daoloth, the Render of the Veils
-R:767:0x80:0xD5
-
-# Nightwalker
-R:768:0x80:0xD7
-
-# Gabriel, the Messenger
-R:769:0x80:0xC1
-
-# Artsi the Champion of Chaos
-R:770:0x80:0xE8
-
-# Saruman of Many Colours
-R:771:0x80:0xF0
-
-# Harowen the Black Hand
-R:772:0x80:0xF0
-
-# The Physics Teacher
-R:773:0x80:0xF0
-
-# Shadowlord
-R:774:0x80:0xC7
-
-# Greater kraken
-R:775:0x80:0xFE
-
-# Archlich
-R:776:0x80:0xCC
-
-# The Cat Lord
-R:777:0x80:0xE6
-
-# Chaos beetle
-R:778:0x80:0xCB
-
-# Chaos hound
-R:779:0x80:0xDA
-
-# Vlad Dracula, Prince of Darkness
-R:780:0x80:0xD6
-
-# Ultimate beholder
-R:781:0x80:0xE5
-
-# Leviathan
-R:782:0x80:0xC4
-
-# Great Wyrm of Chaos
-R:783:0x80:0xC4
-
-# Great Wyrm of Law
-R:784:0x80:0xC4
-
-# Great Wyrm of Balance
-R:785:0x80:0xC4
-
-# Shambler
-R:786:0x80:0xC5
-
-# Hypnos, Lord of Sleep
-R:787:0x80:0xD0
-
-# Glaaki
-R:788:0x80:0xFE
-
-# T'ron, the rebel DragonRider
-R:789:0x80:0xC4
-
-# Great Wyrm of Many Colours
-R:790:0x80:0xC4
-
-# Mardra, rider of the Gold Loranth
-R:791:0x80:0xC4
-
-# Tselakus, the Dreadlord
-R:792:0x80:0xC7
-
-# Sky Drake
-R:793:0x80:0xC4
-
-# Eilinel the Entrapped
-R:794:0x80:0xF0
-
-# Tiamat, Celestial Dragon of Evil
-R:795:0x80:0xC4
-
-# The Norsa
-R:796:0x80:0xC8
-
-# Rhan-Tegoth
-R:797:0x80:0xD3
-
-# Black reaver
-R:798:0x80:0xCC
-
-# Troll High Priest
-R:799:0x80:0xD4
-
-# Master quylthulg
-R:800:0x80:0xD1
-
-# Greater draconic quylthulg
-R:801:0x80:0xD1
-
-# Greater rotting quylthulg
-R:802:0x80:0xD1
-
-# Null the Living Void
-R:803:0x80:0xAE
-
-# Vecna, the Emperor Lich
-R:804:0x80:0xCC
-
-# Omarax the Eye Tyrant
-R:805:0x80:0xE5
-
-# Tsathoggua, the Sleeper of N'kai
-R:806:0x80:0xF2
-
-# Greater Balrog
-R:807:0x80:0xD5
-
-# Ungoliant, the Unlight
-R:808:0x80:0xD3
-
-# Atlach-Nacha, the Spider God
-R:809:0x80:0xD3
-
-# Y'golonac
-R:810:0x80:0xC8
-
-# Aether hound
-R:811:0x80:0xDA
-
-# Warp demon
-R:812:0x80:0xD5
-
-# Serpent of Chaos
-R:813:0x80:0xCA
-
-# Yig, Father of Serpents
-R:814:0x80:0xD2
-
-# Unmaker
-R:815:0x80:0xC5
-
-# Cyberdemon
-R:816:0x80:0xD5
-
-# Hela, Queen of the Dead
-R:817:0x80:0xF0
-
-# The Mouth of Sauron
-R:818:0x80:0xF0
-
-# Klingsor, Evil Master of Magic
-R:819:0x80:0xF0
-
-# Lessa, rider of the Gold Ramoth
-R:820:0x80:0xC4
-
-# The Emperor Quylthulg
-R:821:0x80:0xD1
-
-# Qlzqqlzuup, the Lord of Flesh
-R:822:0x80:0xD1
-
-# Cthugha, the Living Flame
-R:823:0x80:0xC5
-
-# F'lar, rider of the Bronze Mnementh
-R:824:0x80:0xC4
-
-# Maeglin, Betrayer of Gondolin
-R:825:0x80:0xE8
-
-# Cyaegha
-R:826:0x80:0xE5
-
-# Pazuzu, Lord of Air
-R:827:0x80:0xC2
-
-# Ithaqua the Windwalker
-R:828:0x80:0xD9
-
-# Hell hound
-R:829:0x80:0xC3
-
-# Cantoras, the Skeletal Lord
-R:830:0x80:0xF3
-
-# Mephistopheles, Lord of Hell
-R:831:0x80:0xD5
-
-# Godzilla
-R:832:0x80:0xD2
-
-# Abhoth, Source of Uncleanness
-R:833:0x80:0xCA
-
-# Ymir the Ice Giant
-R:834:0x80:0xD0
-
-# Loki the Trickster
-R:835:0x80:0xD0
-
-# Star-spawn of Cthulhu
-R:836:0x80:0xD5
-
-# Surtur the Giant Fire Demon
-R:837:0x80:0xD0
-
-# The Tarrasque
-R:838:0x80:0xD2
-
-# Lungorthin, the Balrog of White Fire
-R:839:0x80:0xD5
-
-# Draugluin, Sire of All Werewolves
-R:840:0x80:0xC3
-
-# Shuma-Gorath
-R:841:0x80:0xE5
-
-# Tulzscha, the Green Flame
-R:842:0x80:0xC5
-
-# Oremorj the Cyberdemon Lord
-R:843:0x80:0xD5
-
-# Feagwath the Undead Sorceror
-R:844:0x80:0xCC
-
-# Yog-Sothoth, the All-in-One
-R:845:0x80:0xEA
-
-# Fenris Wolf
-R:846:0x80:0xC3
-
-# Great Wyrm of Power
-R:847:0x80:0xC4
-
-# Shub-Niggurath, Black Goat of the Woods
-R:848:0x80:0xD5
-
-# Nodens, Lord of the Great Abyss
-R:849:0x80:0xD0
-
-# Carcharoth, the Jaws of Thirst
-R:850:0x80:0xC3
-
-# Nyarlathotep, the Crawling Chaos
-R:851:0x80:0xD5
-
-# Azathoth, the Daemon Sultan
-R:852:0x80:0xC5
-
-# Cerberus, Guardian of Hades
-R:853:0x80:0xC3
-
-# Jormungand the Midgard Serpent
-R:854:0x80:0xCA
-
-# The Destroyer
-R:855:0x80:0xE7
-
-# Gothmog, the High Captain of Balrogs
-R:856:0x80:0xD5
-
-# Great Cthulhu
-R:857:0x80:0xD5
-
-# Sorka, rider of the Gold Faranth
-R:858:0x80:0xC4
-
-# The Unicorn of Order
-R:859:0x80:0xF1
-
-# Sauron, the Sorcerer
-R:860:0x80:0xF0
-
-# Dark God, the Mighty Coder of Hell
-R:861:0x80:0xD0
-
-# Morgoth, Lord of Darkness
-R:862:0x80:0xD0
-
-# Human Warrior
-R:863:0x81:0xB7
-
-# Elven Archer
-R:864:0x81:0xC0
-
-# Dwarven Warrior
-R:865:0x80:0xE8
-
-# Mountain Orc
-R:866:0x80:0xEF
-
-# The Philosophy Teacher
-R:867:0x80:0xD0
-
-# The Variant Maintainer
-R:868:0x80:0xF0
-
-# Random Number Generator
-R:869:0x80:0xC9
-
-# Rocket mine
-R:870:0x80:0xAE
-
-# Bouncing mine
-R:871:0x80:0xAE
-
-# Muar, the Balrog
-R:872:0x80:0xD5
-
-# The Icky Queen
-R:873:0x80:0xE9
-
-# Ratmold
-R:874:0x80:0xED
-
-# Death
-R:875:0x80:0xC7
-
-# Famine
-R:876:0x80:0xC7
-
-# Pestilence
-R:877:0x80:0xC7
-
-# War
-R:878:0x80:0xC7
-
-# Pike
-R:879:0x80:0xFE
-
-# Electric eel
-R:880:0x80:0xFE
-
-# Giant crayfish
-R:881:0x80:0xFE
-
-# Mermaid
-R:882:0x80:0xE8
-
-# Merman
-R:883:0x80:0xE8
-
-# Big Pirahna
-R:884:0x80:0xFE
-
-# Lizard man
-R:885:0x80:0xE8
-
-# Frogman
-R:886:0x80:0xE8
-
-# Frogman warrior
-R:887:0x80:0xE8
-
-# Frogman shaman
-R:888:0x80:0xE8
-
-# Small medusa
-R:889:0x80:0xD1
-
-# Sand mite
-R:890:0x80:0xFE
-
-# Octopus
-R:891:0x80:0xD1
-
-# Kraken
-R:892:0x80:0xD1
-
-# Aquatic beholder
-R:893:0x80:0xE5
-
-# Murk dweller
-R:894:0x80:0xD3
-
-# Drowned soul
-R:895:0x80:0xC7
-
-# Tiger shark
-R:896:0x80:0xFE
-
-# Hammerhead shark
-R:897:0x80:0xFE
-
-# Great white shark
-R:898:0x80:0xFE
-
-# Aquatic golem
-R:899:0x80:0xE7
-
-# Aquatic kobold
-R:900:0x80:0xEB
-
-# Elder kraken
-R:901:0x80:0xD1
-
-# Aquatic troll
-R:902:0x80:0xD4
-
-# Elder aquatic beholder
-R:903:0x80:0xE5
-
-# Abysmal elf
-R:904:0x80:0xE8
-
-# Abysmal elven warrior
-R:905:0x80:0xE8
-
-# Abysmal elven shaman
-R:906:0x80:0xE8
-
-# Stargazer
-R:907:0x80:0xFE
-
-# Elder stargazer
-R:908:0x80:0xFE
-
-# Flounder
-R:909:0x80:0xFE
-
-# Giant turtle
-R:910:0x80:0xD2
-
-# Baby abysmal dragon
-R:911:0x80:0xE4
-
-# Young abysmal dragon
-R:912:0x80:0xE4
-
-# Mature abysmal dragon
-R:913:0x80:0xE4
-
-# Ancient abysmal dragon
-R:914:0x80:0xC4
-
-# Dragon turtle
-R:915:0x80:0xD2
-
-# Undead stargazer
-R:916:0x80:0xFE
-
-# Killer whale
-R:917:0x80:0xFE
-
-# Undead killer whale
-R:918:0x80:0xC7
-
-# Aquatic naga
-R:919:0x80:0xEE
-
-# Devilfish
-R:920:0x80:0xFE
-
-# Undead devilfish
-R:921:0x80:0xFE
-
-# Devilfish beholder
-R:922:0x80:0xE5
-
-# Aquatic hound
-R:923:0x80:0xDA
-
-# Aquatic demon
-R:924:0x80:0xD5
-
-# Aquatic demonlord
-R:925:0x80:0xD5
-
-# Manta ray
-R:926:0x80:0xFE
-
-# Undead manta ray
-R:927:0x80:0xFE
-
-# Mathilde, the Science Student
-R:928:0x80:0xE8
-
-# Child spirit
-R:929:0x80:0xC7
-
-# Young spirit
-R:930:0x80:0xC7
-
-# Mature spirit
-R:931:0x80:0xC7
-
-# Experienced spirit
-R:932:0x80:0xC7
-
-# Wise spirit
-R:933:0x80:0xC7
-
-# Fangorn the Treebeard
-R:934:0x80:0xA3
-
-# Gandalf the Grey
-R:935:0x80:0xF0
-
-# Nar, the Dwarf
-R:936:0x80:0xE8
-
-# Black troll
-R:937:0x80:0xD4
-
-# Troll Clan Chief
-R:938:0x80:0xD4
-
-# Troll King
-R:939:0x80:0xD4
-
-# Blue Firelizard
-R:940:0x80:0xE4
-
-# Green Firelizard
-R:941:0x80:0xE4
-
-# Brown Firelizard
-R:942:0x80:0xE4
-
-# Bronze Firelizard
-R:943:0x80:0xE4
-
-# Gold Firelizard
-R:944:0x80:0xE4
-
-# High-elven ranger
-R:945:0x80:0xE8
-
-# Uvatha the Horseman
-R:946:0x80:0xD7
-
-# Adunaphel the Quiet
-R:947:0x80:0xD7
-
-# Akhorahil the Blind
-R:948:0x80:0xD7
-
-# Ren the Unclean
-R:949:0x80:0xD7
-
-# Ji Indur Dawndeath
-R:950:0x80:0xD7
-
-# Dwar, Dog Lord of Waw
-R:951:0x80:0xD7
-
-# Hoarmurath of Dir
-R:952:0x80:0xD7
-
-# Khamul the Easterling
-R:953:0x80:0xD7
-
-# Murazor, the Witch-King of Angmar
-R:954:0x80:0xD7
-
-# Green DragonRider
-R:955:0x80:0xC4
-
-# Blue DragonRider
-R:956:0x80:0xC4
-
-# Brown DragonRider
-R:957:0x80:0xC4
-
-# Bronze DragonRider
-R:958:0x80:0xC4
-
-# Gold DragonRider
-R:959:0x80:0xC4
-
-# Thread
-R:960:0x80:0xED
-
-# Gorlim, Betrayer of Barahir
-R:961:0x80:0xF0
-
-# The Blubbering idiot, agent of black market, Simon the weak
-R:962:0x80:0xF4
-
-# Aranea
-R:963:0x80:0xD3
-
-# Elder aranea
-R:964:0x80:0xD3
-
-# Greater Aranea
-R:965:0x80:0xD3
-
-# Dolphiner
-R:966:0x80:0xF0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:967:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:968:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:969:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:970:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:971:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:972:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:973:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:974:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:975:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:976:0x80:0xC0
-
-# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-R:977:0x80:0xC0
-
-# Moldoux, the Defenceless Mold
-R:978:0x80:0xED
-
-# Ben Harrison
-R:979:0x80:0xF0
-
-# Ar-Pharazon the Golden
-R:980:0x80:0xF0
-
-# Doppleganger
-R:981:0x80:0xC0
-
-# Marylene, Heartbreakeress of the Netherworld
-R:982:0x80:0xD0
-
-# The Greater Lag Monster
-R:983:0x80:0xD5
-
-# Khim, Son of Mim
-R:984:0x80:0xE8
-
-# Bullroarer the Hobbit
-R:985:0x80:0xE8
-
-# 3-headed hydra
-R:986:0x80:0xCD
-
-# Uldor the Accursed
-R:987:0x80:0xF0
-
-# Mystic
-R:988:0x80:0xF0
-
-# Invisible stalker
-R:989:0x80:0xC5
-
-# Ulfang the Black
-R:990:0x80:0xF0
-
-# Demonologist
-R:991:0x80:0xF0
-
-# Hezrou
-R:992:0x80:0xD5
-
-# Glabrezu
-R:993:0x80:0xD5
-
-# Nalfeshnee
-R:994:0x80:0xD5
-
-# Marilith
-R:995:0x80:0xD5
-
-# Lesser Balrog
-R:996:0x80:0xD5
-
-# Master mystic
-R:997:0x80:0xF0
-
-# Grand master mystic
-R:998:0x80:0xF0
-
-# Erinyes
-R:999:0x80:0xD5
-
-# Medusa, the Gorgon
-R:1000:0x80:0xEE
-
-# Vrock
-R:1001:0x80:0xD5
-
-# Solar
-R:1002:0x80:0xC1
-
-# Ethereal hound
-R:1003:0x80:0xDA
-
-# Dreadlord
-R:1004:0x80:0xC7
-
-# Redweed
-R:1005:0x81:0xB0
-
-# The Rat King
-R:1006:0x80:0xF2
-
-# Vort the Kobold Queen
-R:1007:0x80:0xEB
-
-# Giant cockroach
-R:1008:0x80:0xC9
-
-# Fire Phantom
-R:1009:0x80:0xC7
-
-# The Insane Player
-R:1010:0x80:0xF0
-
-# Glaryssa, Succubus Queen
-R:1011:0x80:0xD5
-
-# Vermicious Knid
-R:1012:0x80:0xCF
-
-# Bone golem
-R:1013:0x80:0xE7
-
-# Snake of Yig
-R:1014:0x80:0xCA
-
-# Wild Man
-R:1015:0x80:0xE8
-
-# Dimensional shambler
-R:1016:0x80:0xE8
-
-# Cultist
-R:1017:0x80:0xF0
-
-# Cult leader
-R:1018:0x80:0xF0
-
-# Servitor of the outer gods
-R:1019:0x80:0xD5
-
-# Avatar of Nyarlathotep
-R:1020:0x80:0xF0
-
-# Fthagghua, Lord of the fire vampires
-R:1021:0x80:0xD5
-
-# Hypnos
-R:1022:0x80:0xF0
-
-# Blue Dragon Worm
-R:1023:0x80:0xF7
-
-# White Dragon Worm
-R:1024:0x80:0xF7
-
-# Red Dragon Worm
-R:1025:0x80:0xF7
-
-# Black Dragon Worm
-R:1026:0x80:0xF7
-
-# Green Dragon Worm
-R:1027:0x80:0xF7
-
-# Multi-hued Dragon Worm
-R:1028:0x80:0xF7
-
-# The Baby Minotaur
-R:1029:0x80:0xC8
-
-# The Sandworm Queen
-R:1030:0x80:0xF7
-
-# Sandworm
-R:1031:0x80:0xF7
-
-# Nobody, the Undefined Ghost
-R:1032:0x80:0xC7
-
-
-
-
-
diff --git a/lib/mods/theme/pref/graf-mac.prf b/lib/mods/theme/pref/graf-mac.prf
deleted file mode 100644
index 7bb84141..00000000
--- a/lib/mods/theme/pref/graf-mac.prf
+++ /dev/null
@@ -1,15 +0,0 @@
-# File: graf-mac.prf
-
-#
-# This file defines special attr/char mappings for use in "graphics" mode
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-# Standard file
-?:[EQU $GRAF old]
-%:graf-xxx.prf
-
-# New tiles
-?:[EQU $GRAF new]
-%:graf-new.prf
diff --git a/lib/mods/theme/pref/graf-new.prf b/lib/mods/theme/pref/graf-new.prf
deleted file mode 100644
index 2fb1b215..00000000
--- a/lib/mods/theme/pref/graf-new.prf
+++ /dev/null
@@ -1,6934 +0,0 @@
-# PRF file generated by Andreas Koch`s Tile Assigner
-# at 03.12.02 , 17:18:08 by Ja with version 1.7c
-
-# 2460 items
-# 2312 probably mapped correctly
-# 147 imported but not yet defined
-# 1 defined to value(s) lower than 0x80
-# Old header :
-# File: graf-new.prf
-#
-# This file defines special attr/char mappings for use in "graphics" mode
-# with Adam Bolt's 16x16 tiles.
-#
-# By Robert Ruehlmann < rr9@angband.org >
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-# General Store
-B:0:0x82/0x87
-
-# Armoury
-B:1:0x82/0x88
-
-# Weaponsmith
-B:2:0x82/0x89
-
-# Temple
-B:3:0x82/0x8A
-
-# Alchemy shop
-B:4:0x82/0x8B
-
-# Magic shop
-B:5:0x82/0x8C
-
-# Black Market
-B:6:0x82/0x8D
-
-# Home
-B:7:0x82/0x8E
-
-# Book Store
-B:8:0x82/0x8F
-
-# Pet Shop
-B:9:0x82/0x90
-
-# Mayor's Office
-B:10:0x86/0xA0
-
-# Inn
-B:11:0x86/0xA1
-
-# The Soothsayer
-B:12:0x86/0xA2
-
-# Library
-B:13:0x86/0xA3
-
-# Castle
-B:14:0x86/0xA4
-
-# Casino
-B:15:0x86/0xA5
-
-# Beastmaster Shanty
-B:16:0x86/0xA6
-
-# Fighters Hall
-B:17:0x86/0xA7
-
-# Tower of Magery
-B:18:0x86/0xA8
-
-# Inner Temple
-B:19:0x86/0xA9
-
-# Paladins Guild
-B:20:0x86/0xAA
-
-# Rangers Guild
-B:21:0x86/0xAB
-
-# Thunderlords' Hide
-B:22:0x86/0xAC
-
-# The Mirror
-B:23:0x86/0xAD
-
-# Seat of Ruling
-B:24:0x86/0xAE
-
-# Wizards Spire
-B:25:0x86/0xAF
-
-# Priests Circle
-B:26:0x86/0xB0
-
-# Tower of the King
-B:27:0x86/0xB1
-
-# Library
-B:28:0x86/0xA3
-
-# The White Tree
-B:29:0x86/0xB2
-
-# Craftsmaster
-B:30:0x86/0xB3
-
-# Earth-Dome (Nature)
-B:31:0x86/0xB4
-
-# Minstrels Haven
-B:32:0x86/0xB5
-
-# Star-Dome
-B:33:0x86/0xB6
-
-# Valarin Temple
-B:34:0x86/0xB7
-
-# Sea-Dome
-B:35:0x86/0xB8
-
-# The Golden Flower
-B:36:0x86/0xB9
-
-# The Fountain
-B:37:0x86/0xBA
-
-# Axe Smith
-B:38:0x86/0xBB
-
-# Hafted Smith
-B:39:0x86/0xBC
-
-# Polearm Smith
-B:40:0x86/0xBD
-
-# Sword Smith
-B:41:0x86/0xBE
-
-# Rare Jewelry Shop
-B:42:0x86/0xBF
-
-# Jewelry Shop
-B:43:0x87/0xA0
-
-# Footwear Shop
-B:44:0x87/0xA1
-
-# Rare Footwear Shop
-B:45:0x87/0xA2
-
-# Library
-B:46:0x86/0xA3
-
-# Forbidden Library
-B:47:0x87/0xA3
-
-# Expensive Black Market
-B:48:0x87/0xA4
-
-# Common Shop
-B:49:0x87/0xA5
-
-# Dragon Hunter
-B:50:0x87/0xA6
-
-# Speed Ring Market
-B:51:0x87/0xA7
-
-# Scribe
-B:52:0x87/0xA8
-
-# Potion Store
-B:53:0x87/0xA9
-
-# Recaller
-B:54:0x87/0xAA
-
-# Master Archer
-B:55:0x87/0xAB
-
-# Merchants Guild
-B:56:0x87/0xAC
-
-# The Mathom-house
-B:57:0x87/0xAD
-
-# The Prancing Pony
-B:58:0x86/0xA1
-
-# Mining Supply store
-B:59:0x86/0xB3
-
-# Library quest in Minas Anor
-B:60:0x86/0xA3
-
-# Hunting Supply Store
-B:61:0x87/0xAB
-
-# Runic Magic Shop
-B:62:0x82/0x8C
-
-# Construction Supply Store
-B:63:0x86/0xB3
-
-# Music Store
-B:64:0x86/0xB5
-
-# Magic Rod Market
-B:65:0x82/0x8C
-
-# Map store
-B:66:0x86/0xA3
-
-# Farm
-B:67:0x87/0xA5
-
-#Pelargir inn - The Grey Swan
-B:68:0x86/0xA1
-
-#Caras Galadhon inn - The Garden
-B:69:0x86/0xA1
-
-#Khazad Dum inn - The Mithril Lode
-B:70:0x86/0xA1
-
-#Dale inn - The Builder Barracks
-B:71:0x86/0xA1
-
-#Edoras inn - The Horse and Ox
-B:72:0x86/0xA1
-
-#Esgaroth inn - The Dancing Dragon
-B:73:0x86/0xA1
-
-#Hobbiton inn - The Green Dragon
-B:74:0x86/0xA1
-
-#Osgiliath inn - The Twinkling Star
-B:75:0x86/0xA1
-
-#The House of Beorn
-B:76:0x86/0xA0
-
-#Bard's Hut
-B:77:0x86/0xA0
-
-#The Ranger Conclave
-B:78:0x86/0xA0
-
-#Imladris
-B:79:0x86/0xA0
-
-#The Hornburg
-B:80:0x86/0xA0
-
-#Thranduil's Hall
-B:81:0x86/0xA0
-
-#Meduseld
-B:82:0x86/0xA0
-
-#The Master's House
-B:83:0x86/0xA0
-
-#Bag End
-B:84:0x86/0xA0
-
-#The Castle of Stars
-B:85:0x86/0xA0
-
-#The Prince's Tower
-B:86:0x86/0xA0
-
-#The Seat of Durin
-B:87:0x86/0xA0
-
-### The forge in Imladris
-B:88:0x86/0xB3
-
-# nothing
-F:0:0x80/0x80
-
-# open floor
-F:1:0x80/0x81
-
-# fountain
-F:2:0xC3/0x9A
-
-# glyph of warding
-F:3:0x8D/0x95
-
-# open door
-F:4:0x82/0x84
-
-# broken door
-F:5:0x82/0x85
-
-# up staircase
-F:6:0x80/0x96
-
-# down staircase
-F:7:0x80/0x99
-
-# quest entrance
-F:8:0x80/0x9A
-
-# quest exit
-F:9:0x80/0x97
-
-# quest down level
-F:10:0x80/0x9B
-
-# quest up level
-F:11:0x80/0x98
-
-# town exit
-F:12:0x82/0x84
-
-# shaft down
-F:13:0xC3/0x84
-
-# shaft up
-F:14:0xC3/0x85
-
-# fountain
-F:15:0xC3/0x99
-
-# web
-F:16:0x81/0x8C
-
-# trap
-F:17:0x81/0x89
-
-# visible trap -- spiked pit
-F:18:0x81/0x89
-
-# visible trap -- poison pit
-F:19:0x81/0x89
-
-# visible trap -- rune -- summon
-F:20:0x81/0x8F
-
-# visible trap -- rune -- teleport
-F:21:0x81/0x92
-
-# visible trap -- spot -- fire
-F:22:0x81/0x86
-
-# visible trap -- spot -- acid
-F:23:0x81/0x86
-
-# visible trap -- dart -- slow
-F:24:0x81/0x80
-
-# visible trap -- dart -- lose str
-F:25:0x81/0x80
-
-# visible trap -- dart -- lose dex
-F:26:0x81/0x80
-
-# visible trap -- dart -- lose con
-F:27:0x81/0x80
-
-# visible trap -- gas -- blind
-F:28:0x81/0x83
-
-# visible trap -- gas -- confuse
-F:29:0x81/0x83
-
-# visible trap -- gas -- poison
-F:30:0x81/0x83
-
-# visible trap -- gas -- sleep
-F:31:0x81/0x83
-
-# door
-F:32:0x82/0x83
-
-# locked door
-F:33:0x82/0x83
-F:34:0x82/0x83
-F:35:0x82/0x83
-F:36:0x82/0x83
-F:37:0x82/0x83
-F:38:0x82/0x86
-F:39:0x82/0x86
-
-# jammed door
-F:40:0x82/0x83
-F:41:0x82/0x83
-F:42:0x82/0x83
-F:43:0x82/0x83
-F:44:0x82/0x83
-F:45:0x82/0x86
-F:46:0x82/0x86
-F:47:0x82/0x86
-
-# secret door
-F:48:0x80/0x84
-
-# pile of rubble
-F:49:0x80/0x9C
-
-# magma vein
-F:50:0x80/0x8D
-
-# quartz vein
-F:51:0x80/0x87
-
-# magma vein
-F:52:0x80/0x90
-
-# quartz vein
-F:53:0x80/0x87
-
-# magma vein with treasure
-F:54:0x80/0x90
-
-# quartz vein with treasure
-F:55:0x80/0x8A
-
-# granite wall
-F:56:0x80/0x84
-F:57:0x80/0x84
-F:58:0x80/0x84
-F:59:0x80/0x84
-
-# permanent wall
-F:60:0x80/0x93
-F:61:0x80/0x93
-F:62:0x80/0x93
-F:63:0x80/0x93
-
-# explosive rune
-F:64:0x8D/0x9E
-
-# Straight Road startpoint
-F:65:0x81/0x95
-
-# section of the Straight Road
-F:66:0x81/0x95
-F:67:0x81/0x95
-F:68:0x81/0x95
-F:69:0x81/0x95
-F:70:0x81/0x95
-
-# section of the Straight Road (discharged)
-F:71:0x81/0x98
-
-# Straight Road exit
-F:72:0x81/0x9B
-
-# corrupted section of the Straight Road
-F:73:0x81/0x9E
-
-# Building
-F:74:0x82/0x93
-
-# permanent wall
-F:75:0x82/0x93
-F:76:0x82/0x94
-F:77:0x82/0x95
-F:78:0x82/0x96
-
-#Elanor
-F:79:0xC6:0xA0
-
-#Fumellar
-F:80:0xC6:0xA1
-
-#Anemones
-F:81:0xC6:0xA2
-
-#Niphredil
-F:82:0xC6:0xA3
-
-#Iris
-F:83:0xC6:0xA4
-
-# stream of shallow water
-F:84:0xB4/0x97
-
-# pool of deep lava
-F:85:0x83/0x8D
-
-# stream of shallow lava
-F:86:0xB4/0x9A
-
-# dark pit
-F:87:0x80/0x80
-
-# dirt
-F:88:0xB4/0x91
-
-# patch of grass
-F:89:0xB4/0x94
-
-# ice
-F:90:0xC3/0x83
-
-# sand
-F:91:0xC3/0x88
-
-# dead tree
-F:92:0xC3/0x98
-
-# ash
-F:93:0xC3/0x97
-
-# mud
-F:94:0xC3/0x96
-
-# ice wall
-F:95:0xC5/0x92
-
-# tree
-F:96:0x82/0x9A
-
-# mountain chain
-F:97:0x8D/0x98
-
-# sandwall
-F:98:0xC3/0x86
-F:99:0xC3/0x86
-
-# sandwall with treasure
-F:100:0xC3/0x87
-
-# high mountain chain
-F:101:0xC3/0x9E
-
-# nether mist
-F:102:0xC3/0x9F
-
-# molten glass wall
-F:103:0xC0/0x9F
-
-# Void Jumpgate
-F:160:0x91/0x84
-
-# Altar of Being
-F:161:0xC1/0x8E
-
-# Altar of Winds
-F:162:0xB5/0x8A
-
-# Altar of Force
-F:163:0xB5/0x86
-
-# Altar of Darkness
-F:164:0xB5/0x86
-
-# Altar of Nature
-F:165:0xB5/0x91
-
-# Altar of Sun
-F:166:0xB5/0x8F
-
-# Altar of Rage
-F:167:0xB5/0x8C
-
-# Altar of Winds
-F:168:0xB5/0x92
-
-# Altar of Stars
-F:169:0xC1/0x8F
-
-# Altar of Being
-F:170:0xB5/0x8D
-
-# Altar of Randomness
-F:171:0xB5/0x88
-
-# floor
-F:172:0x80/0x81
-
-# Underground Tunnel
-F:173:0x80/0x82
-
-# stream of tainted water
-F:174:0xAF/0x8E
-
-# monster trap
-F:175:0x81/0x9C
-
-# Void Jumpgate
-F:176:0xAF/0x8C
-
-# lava wall
-F:177:0xC6/0x8C
-
-# Great Fire
-F:178:0xC6/0x8A
-
-# path to the next area
-F:179:0x88/0xA1
-
-# path to the previous area
-F:180:0x88/0xA0
-
-# field
-F:181:0x88/0xA2
-
-# Ekkaia, the Encircling Sea
-F:182:0x88/0xA3
-
-# Altar of Energy
-F:183:0xB5/0x9A
-
-# Altar of Matter
-F:184:0xB5/0x9B
-
-# Altar of Being
-F:185:0xB5/0x9C
-
-# Altar of Unbeing
-F:186:0xB5/0x9D
-
-# pool of deep water
-F:187:0x83/0x80
-
-# glass wall
-F:188:0xC0/0x9F
-
-# illusion wall
-F:189:0x80/0x84
-
-# Grass roof
-F:190:0xC2/0x80
-
-# grass roof top
-F:191:0xC2/0x81
-
-# grass roof chimney
-F:192:0xC2/0x82
-
-# brick roof
-F:193:0xC3/0x80
-
-# brick roof top
-F:194:0xC3/0x81
-
-# brick roof chimney
-F:195:0xC3/0x82
-
-# window
-F:196:0xC2/0x83
-
-# small window
-F:197:0xC2/0x84
-
-# rain barrel
-F:198:0xC2/0x85
-
-# grass with flowers
-F:199:0xC2/0x86
-
-# cobblestone road
-F:200:0xC2/0x87
-
-# cobblestone with outlet
-F:201:0xC2/0x88
-
-# small tree
-F:202:0x82/0x9D
-
-# town
-F:203:0xC3/0x95
-
-# Underground Tunnel
-F:204:0x80/0x82
-
-# a blazing fire
-F:205:0xC6/0x8A
-
-# pile of rubble
-F:206:0xC6/0x8B
-
-# rocky ground
-F:207:0x8D/0xA0
-
-# cloud-like vapour
-F:208:0x8D/0xA1
-
-# condensing water
-F:209:0x8D/0xA2
-
-# dense mist
-F:210:0x8D/0xA3
-
-# hail-stone wall
-F:211:0x8D/0xA4
-
-# dead small tree
-F:212:0xC6:0xA5
-
-# low hill
-F:213:0xC6:0xA6
-
-# dark mountain chain
-F:214:0xC6:0xA7
-
-# blue mountain chain
-F:215:0xC6:0xA8
-
-# grey mountain chain
-F:216:0xC6:0xA9
-
-# part of Mount Doom
-F:217:0xC6:0xAA
-
-# snow-capped peak
-F:218:0xC3:0x9E
-
-# fir tree
-F:219:0xC6:0xAB
-
-# section of a flet
-F:220:0xC6:0xAC
-
-# light post
-F:221:0xC6:0xAD
-
-# water lily
-F:222:0xC6:0xAE
-
-# part of the Dead Marshes
-F:223:0xC6:0xAF
-
-# Black Gate
-F:224:0xC6:0xB0
-
-# river
-F:225:0xC6:0xB1
-
-# swamp pool
-F:226:0xC6:0xB2
-
-# stream of the Anduin river
-F:227:0xC6:0xB3
-
-# road sign that says 'Hurry to Gondolin!'
-F:228:0xC6:0xB4
-
-# beehive
-F:229:0xC6:0xB5
-
-# dirt road
-F:230:0xC6:0xB6
-
-# wide gate
-F:231:0xC6:0xB7
-
-# open gate
-F:232:0xC6:0xB8
-
-# wooden board
-F:233:0xC6:0xB9
-
-# wooden board
-F:234:0xC6:0xBA
-
-# wooden board
-F:235:0xC6:0xBB
-
-# wooden board
-F:236:0xC6:0xBC
-
-# white tree
-F:237:0xC6:0xBD
-
-# swift waterfall
-F:238:0xC6:0xBE
-
-# slippery rock ledge
-F:239:0xC5:0xA0
-
-# stable
-F:240:0xC5:0xA1
-
-# wooden plank
-F:241:0xC5:0xA2
-
-# fosse pit
-F:242:0xC5:0xA3
-
-# Mallorn
-F:243:0xC5:0xA4
-
-# copper pillar
-F:244:0xC5:0xBC
-
-# ethereal wall
-F:245:0x80/0x81
-
-# glacial wall
-F:246:0xC5/0x92
-
-# battlement
-F:247:0xC5:0xBD
-
-# dark pit
-F:248:0x82/0x84
-
-# Skeleton
-G:M:1:0xC6/0x91
-
-# Zombie
-G:M:2:0xC6/0x92
-
-# Lich
-G:M:3:0xC6/0x93
-
-# Spectral
-G:M:4:0xC6/0x94
-
-# Captain
-G:M:5:0xC6/0x95
-
-# Chieftain
-G:M:6:0xC6/0x96
-
-# Shaman
-G:M:7:0xC6/0x97
-
-# Priest
-G:M:8:0xC6/0x98
-
-# Mage
-G:M:9:0xC6/0x99
-
-# Archer
-G:M:10:0xC6/0x9A
-
-# Rogue
-G:M:11:0xC6/0x9B
-
-# Inertia Ball Trap
-G:T:95:0x82/0xBF
-
-# something
-K:0:0x01:0x20
-
-# Blindness
-K:1:0x85:0x94
-
-# Fear
-K:2:0x85:0x94
-
-# Confusion
-K:3:0x85:0x94
-
-# Hallucination
-K:4:0x85:0x94
-
-# Cure Poison
-K:5:0x85:0x94
-
-# Cure Blindness
-K:6:0x85:0x94
-
-# Cure Fear
-K:7:0xC6:0x83
-
-# Cure Confusion
-K:8:0x85:0x94
-
-# Weakness
-K:9:0x85:0x94
-
-# Unhealth
-K:10:0x85:0x94
-
-# Restore Constitution
-K:11:0x85:0x94
-
-# Restoring
-K:12:0x85:0x94
-
-# Stupidity
-K:13:0x85:0x94
-
-# Naivety
-K:14:0x85:0x94
-
-# Poison
-K:15:0x85:0x94
-
-# Sickness
-K:16:0x85:0x94
-
-# Paralysis
-K:17:0x85:0x94
-
-# Restore Strength
-K:18:0x85:0x94
-
-# Disease
-K:19:0x85:0x94
-
-# Cure Serious Wounds
-K:20:0x85:0x94
-
-# & Ration~ of Cram
-K:21:0x8E:0x84
-
-# & Round Seed-Cake~
-K:22:0x8E:0x82
-
-# & Strip~ of Venison
-K:23:0x8E:0x83
-
-# & Slime Mold~
-K:24:0x8E:0x85
-
-# & Lembas~
-K:25:0x8E:0x86
-
-# & Pint~ of Fine Ale
-K:26:0x8E:0x80
-
-# & Pint~ of Old Winyards
-K:27:0x8E:0x80
-
-# & Mattock~
-K:28:0xB6:0x8C
-
-# & Blue Stone~
-K:29:0xC5:0x93
-
-# & Broken Dagger~
-K:30:0x8A:0x8D
-
-# & Bastard Sword~
-K:31:0x8A:0x8E
-
-# & Scimitar~
-K:32:0x8A:0x97
-
-# & Tulwar~
-K:33:0x8A:0x95
-
-# & Broad Sword~
-K:34:0x8A:0x98
-
-# & Short Sword~
-K:35:0x8A:0x94
-
-# & Blade~ of Chaos
-K:36:0x8A:0x9E
-
-# & Two-Handed Sword~
-K:37:0x8A:0x9C
-
-# & Main Gauche~
-K:38:0x8A:0x90
-
-# & Cutlass~
-K:39:0x8A:0x96
-
-# & Executioner's Sword~
-K:40:0x8A:0x9D
-
-# & Katana~
-K:41:0x8A:0x9B
-
-# & Long Sword~
-K:42:0x8A:0x99
-
-# & Dagger~
-K:43:0x8A:0x8F
-
-# & Rapier~
-K:44:0x8A:0x91
-
-# & Sabre~
-K:45:0x8A:0x93
-
-# & Small Sword~
-K:46:0x8A:0x92
-
-# & Broken Sword~
-K:47:0x8A:0x8E
-
-# & Ball-and-Chain~
-K:48:0x8B:0x86
-
-# & Whip~
-K:49:0x8A:0x9F
-
-# & Flail~
-K:50:0x8B:0x83
-
-# & Two-Handed Flail~
-K:51:0x8B:0x87
-
-# & Morning Star~
-K:52:0x8B:0x84
-
-# & Mace~
-K:53:0x8B:0x81
-
-# & Quarterstaff~
-K:54:0x8B:0x82
-
-# & War Hammer~
-K:55:0x8B:0x80
-
-# & Lead-Filled Mace~
-K:56:0x8B:0x85
-
-# & Mace~ of Disruption
-K:57:0x8B:0x88
-
-# & Lucerne Hammer~
-K:58:0x8B:0x8D
-
-# & Beaked Axe~
-K:59:0x8B:0x90
-
-# & Glaive~
-K:60:0x8B:0x92
-
-# & Halberd~
-K:61:0x8B:0x93
-
-# & Awl-Pike~
-K:62:0x8B:0x8B
-
-# & Pike~
-K:63:0x8B:0x8F
-
-# & Spear~
-K:64:0x8B:0x89
-
-# & Trident~
-K:65:0x8B:0x8A
-
-# & Lance~
-K:66:0x8B:0x8C
-
-# & Great Axe~
-K:67:0x8B:0x95
-
-# & Battle Axe~
-K:68:0x8B:0x8E
-
-# & Lochaber Axe~
-K:69:0x8B:0x94
-
-# & Broad Axe~
-K:70:0x8B:0x91
-
-# & Scythe~
-K:71:0x8B:0x96
-
-# & Scythe~ of Slicing
-K:72:0x8B:0x97
-
-# & Short Bow~
-K:73:0x8B:0x98
-
-# & Long Bow~
-K:74:0x8B:0x99
-
-# & Light Crossbow~
-K:75:0x8B:0x9A
-
-# & Heavy Crossbow~
-K:76:0x8B:0x9B
-
-# & Sling~
-K:77:0x8B:0x9C
-
-# & Arrow~
-K:78:0x8C:0x80
-
-# & Seeker Arrow~
-K:79:0x8C:0x81
-
-# & Bolt~
-K:80:0x8C:0x82
-
-# & Seeker Bolt~
-K:81:0x8C:0x83
-
-# & Rounded Pebble~
-K:82:0x8C:0x84
-
-# & Iron Shot~
-K:83:0x8C:0x85
-
-# & Shovel~
-K:84:0x8E:0x8F
-
-# & Gnomish Shovel~
-K:85:0x8E:0x90
-
-# & Dwarven Shovel~
-K:86:0x8E:0x91
-
-# & Pick~
-K:87:0x8E:0x8C
-
-# & Orcish Pick~
-K:88:0x8E:0x8D
-
-# & Dwarven Pick~
-K:89:0x8E:0x91
-
-# & Elven Cloak~
-K:90:0x89:0x8A
-
-# & Pair~ of Soft Leather Boots
-K:91:0x88:0x8E
-
-# & Pair~ of Hard Leather Boots
-K:92:0x88:0x8F
-
-# & Pair~ of Metal Shod Boots
-K:93:0x88:0x90
-
-# & Hard Leather Cap~
-K:94:0x87:0x98
-
-# & Metal Cap~
-K:95:0x87:0x99
-
-# & Iron Helm~
-K:96:0x87:0x9A
-
-# & Steel Helm~
-K:97:0x87:0x9B
-
-# & Iron Crown~
-K:98:0x87:0x9C
-
-# & Golden Crown~
-K:99:0x87:0x9D
-
-# & Jewel-Encrusted Crown~
-K:100:0x87:0x9E
-
-# & Robe~
-K:101:0x89:0x8C
-
-# & Filthy Rag~
-K:102:0x89:0x8B
-
-# Soft Leather Armour~
-K:103:0x89:0x8D
-
-# Soft Studded Leather~
-K:104:0x89:0x8E
-
-# Hard Leather Armour~
-K:105:0x89:0x8F
-
-# Hard Studded Leather~
-K:106:0x89:0x90
-
-# Leather Scale Mail~
-K:107:0x89:0x91
-
-# Metal Scale Mail~
-K:108:0x89:0x92
-
-# Chain Mail~
-K:109:0x89:0x94
-
-# Rusty Chain Mail~
-K:110:0x89:0x93
-
-# Augmented Chain Mail~
-K:111:0x89:0x96
-
-# Bar Chain Mail~
-K:112:0x89:0x97
-
-# Metal Brigandine Armour~
-K:113:0x89:0x98
-
-# Partial Plate Armour~
-K:114:0x89:0x99
-
-# Metal Lamellar Armour~
-K:115:0x89:0x9A
-
-# Full Plate Armour~
-K:116:0x89:0x9B
-
-# Ribbed Plate Armour~
-K:117:0x89:0x9C
-
-# Galvorn Plate Mail~
-K:118:0x89:0x9F
-
-# Mithril Plate Mail~
-K:119:0x89:0x9E
-
-# Mithril Chain Mail~
-K:120:0x89:0x9D
-
-# Double Chain Mail~
-K:121:0x89:0x95
-
-# & Shield~ of Deflection
-K:122:0x88:0x98
-
-# & Cloak~
-K:123:0x89:0x88
-
-# & Shadow Cloak~
-K:124:0x89:0x89
-
-# & Set~ of Leather Gloves
-K:125:0x88:0x91
-
-# & Set~ of Gauntlets
-K:126:0x88:0x92
-
-# & Set~ of Cesti
-K:127:0x88:0x93
-
-# & Small Leather Shield~
-K:128:0x88:0x94
-
-# & Large Leather Shield~
-K:129:0x88:0x95
-
-# & Small Metal Shield~
-K:130:0x88:0x96
-
-# & Large Metal Shield~
-K:131:0x88:0x97
-
-# Strength
-K:132:0x84:0x81
-
-# Dexterity
-K:133:0x84:0x83
-
-# Constitution
-K:134:0x84:0x83
-
-# Intelligence
-K:135:0x84:0x83
-
-# Speed
-K:136:0x84:0x83
-
-# Searching
-K:137:0x84:0x83
-
-# Teleportation
-K:138:0x84:0x83
-
-# Slow Digestion
-K:139:0x84:0x83
-
-# Fire Resistance
-K:140:0x84:0x83
-
-# Cold Resistance
-K:141:0x84:0x83
-
-# Levitation
-K:142:0x84:0x83
-
-# Poison Resistance
-K:143:0x84:0x83
-
-# Free Action
-K:144:0x84:0x83
-
-# Weakness
-K:145:0x84:0x83
-
-# Flames
-K:146:0x84:0x83
-
-# Acid
-K:147:0x84:0x83
-
-# Ice
-K:148:0x84:0x83
-
-# Woe
-K:149:0x84:0x83
-
-# Stupidity
-K:150:0x84:0x83
-
-# Damage
-K:151:0x84:0x83
-
-# Accuracy
-K:152:0x84:0x83
-
-# Protection
-K:153:0x84:0x83
-
-# Aggravate Monster
-K:154:0x84:0x83
-
-# See Invisible
-K:155:0x84:0x83
-
-# Sustain Strength
-K:156:0x84:0x83
-
-# Sustain Intelligence
-K:157:0x84:0x83
-
-# Sustain Wisdom
-K:158:0x84:0x83
-
-# Sustain Constitution
-K:159:0x84:0x83
-
-# Sustain Dexterity
-K:160:0x84:0x83
-
-# Sustain Charisma
-K:161:0x84:0x83
-
-# Slaying
-K:162:0x84:0x83
-
-# Brilliance
-K:163:0x87:0x83
-
-# Charisma
-K:164:0x87:0x83
-
-# Searching
-K:165:0x87:0x83
-
-# Teleportation
-K:166:0x87:0x83
-
-# Slow Digestion
-K:167:0x87:0x83
-
-# Acid Resistance
-K:168:0x87:0x83
-
-# Protection from Evil
-K:169:0x87:0x83
-
-# Double Ring Mail~
-K:170:0x89:0x9B
-
-# the Magi
-K:171:0x87:0x83
-
-# Doom
-K:172:0x87:0x83
-
-# Enchant Weapon To-Hit
-K:173:0x83:0x9C
-
-# Enchant Weapon To-Dam
-K:174:0x83:0x9C
-
-# Enchant Armor
-K:175:0x83:0x9C
-
-# Identify
-K:176:0x83:0x9C
-
-# *Identify*
-K:177:0x83:0x9C
-
-# Rumour
-K:178:0x83:0x9C
-
-# Chaos
-K:179:0x83:0x9C
-
-# Remove Curse
-K:180:0x83:0x9C
-
-# Light
-K:181:0x83:0x9C
-
-# Fire
-K:182:0x83:0x9C
-
-# Ice
-K:183:0x83:0x9C
-
-# Summon Monsters
-K:184:0x83:0x9C
-
-# Phase Door
-K:185:0x83:0x9C
-
-# Teleportation
-K:186:0x83:0x9C
-
-# Teleport Level
-K:187:0x83:0x9C
-
-# Monster Confusion
-K:188:0x83:0x9C
-
-# Magic Mapping
-K:189:0x83:0x9C
-
-# Rune of Protection
-K:190:0x83:0x9C
-
-# *Remove Curse*
-K:191:0x83:0x9C
-
-# Treasure Detection
-K:192:0x83:0x9C
-
-# Object Detection
-K:193:0x83:0x9C
-
-# Trap Detection
-K:194:0x83:0x9C
-
-# & Sheaf Arrow~
-K:195:0x8C:0x81
-
-# & Mithril Shot~
-K:196:0x8C:0x85
-
-# Door/Stair Location
-K:197:0x83:0x9C
-
-# Acquirement
-K:198:0x83:0x9C
-
-# *Acquirement*
-K:199:0x83:0x9C
-
-# Mass Genocide
-K:200:0x83:0x9C
-
-# Detect Invisible
-K:201:0x83:0x9C
-
-# Aggravation
-K:202:0x83:0x9C
-
-# Trap Creation
-K:203:0x83:0x9C
-
-# Trap/Door Destruction
-K:204:0x83:0x9C
-
-# Artifact Creation
-K:205:0x83:0x9C
-
-# Recharging
-K:206:0x83:0x9C
-
-# Genocide
-K:207:0x83:0x9C
-
-# Darkness
-K:208:0x83:0x9C
-
-# Protection from Evil
-K:209:0x83:0x9C
-
-# Satisfy Hunger
-K:210:0x83:0x9C
-
-# Dispel Undead
-K:211:0x83:0x9C
-
-# *Enchant Weapon*
-K:212:0x83:0x9C
-
-# Curse Weapon
-K:213:0x83:0x9C
-
-# *Enchant Armour*
-K:214:0x83:0x9C
-
-# Curse Armour
-K:215:0x83:0x9C
-
-# Summon Undead
-K:216:0x83:0x9C
-
-# Blessing
-K:217:0x83:0x9C
-
-# Holy Chant
-K:218:0x83:0x9C
-
-# Holy Prayer
-K:219:0x83:0x9C
-
-# Word of Recall
-K:220:0x83:0x9C
-
-# *Destruction*
-K:221:0x83:0x9C
-
-# Slime Mold Juice
-K:222:0x85:0x85
-
-# Apple Juice
-K:223:0x85:0x85
-
-# Water
-K:224:0x85:0x85
-
-# Strength
-K:225:0x85:0x85
-
-# Weakness
-K:226:0x85:0x85
-
-# Restore Strength
-K:227:0x85:0x85
-
-# Intelligence
-K:228:0x85:0x85
-
-# Stupidity
-K:229:0x85:0x85
-
-# Restore Intelligence
-K:230:0x85:0x85
-
-# Wisdom
-K:231:0x85:0x85
-
-# Naivety
-K:232:0x85:0x85
-
-# Restore Wisdom
-K:233:0x85:0x85
-
-# Charisma
-K:234:0x85:0x85
-
-# Ugliness
-K:235:0x85:0x85
-
-# Restore Charisma
-K:236:0x85:0x85
-
-# Curing
-K:237:0x85:0x85
-
-# Invulnerability
-K:238:0x85:0x85
-
-# New Life
-K:239:0x85:0x85
-
-# Cure Serious Wounds
-K:240:0x85:0x85
-
-# Cure Critical Wounds
-K:241:0x85:0x85
-
-# Healing
-K:242:0x85:0x85
-
-# Constitution
-K:243:0x85:0x85
-
-# Experience
-K:244:0x85:0x85
-
-# Sleep
-K:245:0x85:0x85
-
-# Blindness
-K:246:0x85:0x85
-
-# Booze
-K:247:0x85:0x85
-
-# Poison
-K:248:0x85:0x85
-
-# Speed
-K:249:0x85:0x85
-
-# Slowness
-K:250:0x85:0x85
-
-# Dexterity
-K:251:0x85:0x85
-
-# Restore Dexterity
-K:252:0x85:0x85
-
-# Restore Constitution
-K:253:0x85:0x85
-
-# Lose Memories
-K:254:0x85:0x85
-
-# Salt Water
-K:255:0x85:0x85
-
-# Enlightenment
-K:256:0x85:0x85
-
-# Heroism
-K:257:0x85:0x85
-
-# Berserk Strength
-K:258:0x85:0x85
-
-# Boldness
-K:259:0x85:0x85
-
-# Restore Life Levels
-K:260:0x85:0x85
-
-# Resist Heat
-K:261:0x85:0x85
-
-# Resist Cold
-K:262:0x85:0x85
-
-# Detect Invisible
-K:263:0x85:0x85
-
-# Slow Poison
-K:264:0x85:0x85
-
-# Neutralise Poison
-K:265:0x85:0x85
-
-# Restore Mana
-K:266:0x85:0x85
-
-# Infra-vision
-K:267:0x85:0x85
-
-# Resistance
-K:268:0x85:0x85
-
-# Spell
-K:269:0x86:0x93
-
-# Manathrust
-K:270:0x86:0x93
-
-# Fireflash
-K:271:0x86:0x93
-
-# Firewall
-K:272:0x86:0x93
-
-# Tidal Wave
-K:273:0x86:0x93
-
-# Ice Storm
-K:274:0x86:0x93
-
-# Noxious Cloud
-K:275:0x86:0x93
-
-# Poison Blood
-K:276:0x86:0x93
-
-# Thunderstorm
-K:277:0x86:0x93
-
-# Dig
-K:278:0x86:0x93
-
-# Stone Prison
-K:279:0x86:0x93
-
-# Strike
-K:280:0x86:0x93
-
-# Teleport Away
-K:281:0x86:0x93
-
-# Summon Animal
-K:282:0x86:0x93
-
-# Magelock
-K:283:0x86:0x93
-
-# Slow Monster
-K:284:0x86:0x93
-
-# Essence of Speed
-K:285:0x86:0x93
-
-# Banishment
-K:286:0x86:0x93
-
-# Disperse Magic
-K:287:0x86:0x93
-
-# Charm
-K:288:0x86:0x93
-
-# Confuse
-K:289:0x86:0x93
-
-# Demon Blade
-K:290:0x86:0x93
-
-# Heal Monster
-K:291:0x86:0x93
-
-# Haste Monster
-K:292:0x86:0x93
-
-# & Flight Arrow~
-K:293:0x8C:0x81
-
-# & Boulder~
-K:295:0xC6:0x9F
-
-# & Flame~ Imperishable
-K:296:0xBE:0x9F
-
-# & Necromantic Teeth~
-K:297:0xC5:0xA5
-
-# & Golden Horn~ of the Eagles
-K:298:0x86:0x93
-
-# Spell
-K:300:0x87:0x92
-
-# Nothing
-K:301:0x87:0x92
-
-# Globe of Light
-K:302:0x87:0x92
-
-# Fiery Shield
-K:303:0x87:0x92
-
-# Remove Curses
-K:304:0x87:0x92
-
-# Wings of Winds
-K:305:0x87:0x92
-
-# Shake
-K:306:0x87:0x92
-
-# Disarm
-K:307:0x87:0x92
-
-# Teleportation
-K:308:0x87:0x92
-
-# Probability Travel
-K:309:0x87:0x92
-
-# Recovery
-K:310:0x87:0x92
-
-# Healing
-K:311:0x87:0x92
-
-# Vision
-K:312:0x87:0x92
-
-# Identify
-K:313:0x87:0x92
-
-# Sense Hidden
-K:314:0x87:0x92
-
-# Reveal Ways
-K:315:0x87:0x92
-
-# Sense Monsters
-K:316:0x87:0x92
-
-# Genocide
-K:317:0x87:0x92
-
-# Summon
-K:318:0x87:0x92
-
-# Sterilization
-K:319:0x87:0x92
-
-# Wish
-K:320:0x87:0x92
-
-# Mana
-K:321:0x87:0x92
-
-# & Tome~ of Magical Energy
-K:330:0x90:0xA0
-
-# & Tome~ of the Eternal Flame
-K:331:0x90:0xA1
-
-# & Tome~ of the Blowing Wind
-K:332:0x90:0xA2
-
-# & Tome~ of the Impenetrable Earth
-K:333:0x90:0xA3
-
-# & Tome~ of the Everrunning Wave
-K:334:0x90:0xA4
-
-# & Tome~ of Translocation
-K:335:0x90:0xA5
-
-# & Tome~ of the Tree
-K:336:0x90:0xA6
-
-# & Tome~ of Knowledge
-K:337:0x90:0xA7
-
-# & Small wooden chest~
-K:338:0x84:0x99
-
-# & Large wooden chest~
-K:339:0x84:0x9A
-
-# & Small iron chest~
-K:340:0x84:0x9B
-
-# & Large iron chest~
-K:341:0x84:0x9C
-
-# & Small steel chest~
-K:342:0x84:0x9D
-
-# & Large steel chest~
-K:343:0x84:0x9E
-
-# & Ruined chest~
-K:344:0x84:0x9F
-
-# & Iron Spike~
-K:345:0x8E:0x89
-
-# & Wooden Torch~
-K:346:0x8E:0x8B
-
-# & Brass Lantern~
-K:347:0x8E:0x8A
-
-# & Flask~ of oil
-K:348:0x8E:0x88
-
-# & Empty Bottle~
-K:349:0x8E:0x87
-
-# Havoc
-K:350:0x86:0x83
-
-# Door/Stair Location
-K:351:0x86:0x83
-
-# Trap Location
-K:352:0x86:0x83
-
-# Probing
-K:353:0x86:0x83
-
-# Recall
-K:354:0x86:0x83
-
-# Illumination
-K:355:0x86:0x83
-
-# Light
-K:356:0x86:0x83
-
-# Lightning Bolts
-K:357:0x86:0x83
-
-# Frost Bolts
-K:358:0x86:0x83
-
-# Fire Bolts
-K:359:0x86:0x83
-
-# Polymorph
-K:360:0x86:0x83
-
-# Slow Monster
-K:361:0x86:0x83
-
-# Sleep Monster
-K:362:0x86:0x83
-
-# Drain Life
-K:363:0x86:0x83
-
-# Teleport Other
-K:364:0x86:0x83
-
-# Disarming
-K:365:0x86:0x83
-
-# Lightning Balls
-K:366:0x86:0x83
-
-# Cold Balls
-K:367:0x86:0x83
-
-# Fire Balls
-K:368:0x86:0x83
-
-# Acid Balls
-K:369:0x86:0x83
-
-# Acid Bolts
-K:370:0x86:0x83
-
-# Enlightenment
-K:371:0x86:0x83
-
-# Perception
-K:372:0x86:0x83
-
-# Curing
-K:373:0x86:0x83
-
-# Healing
-K:374:0x86:0x83
-
-# Detection
-K:375:0x86:0x83
-
-# Restoration
-K:376:0x86:0x83
-
-# Speed
-K:377:0x86:0x83
-
-# Spell
-K:378:0x84:0x83
-
-# Spell
-K:379:0x87:0x80
-
-# & Broken Skull~
-K:391:0x8E:0x94
-
-# & Broken Bone~
-K:392:0x8E:0x95
-
-# & Canine Skeleton~
-K:393:0x8E:0x9A
-
-# & Rodent Skeleton~
-K:394:0x8E:0x9B
-
-# & Human Skeleton~
-K:395:0x8E:0x96
-
-# & Dwarf Skeleton~
-K:396:0x8E:0x98
-
-# & Elf Skeleton~
-K:397:0x8E:0x97
-
-# & Gnome Skeleton~
-K:398:0x8E:0x99
-
-# & Great Hammer~
-K:399:0xB6:0x8A
-
-# Black Dragon Scale Mail~
-K:400:0x8A:0x82
-
-# Blue Dragon Scale Mail~
-K:401:0x8A:0x80
-
-# White Dragon Scale Mail~
-K:402:0x8A:0x81
-
-# Red Dragon Scale Mail~
-K:403:0x8A:0x83
-
-# Green Dragon Scale Mail~
-K:404:0x8A:0x84
-
-# Multi-Hued Dragon Scale Mail~
-K:405:0x8A:0x8B
-
-# Pseudo Dragon Scale Mail~
-K:406:0x8A:0x87
-
-# Law Dragon Scale Mail~
-K:407:0x8A:0x89
-
-# Bronze Dragon Scale Mail~
-K:408:0x8A:0x85
-
-# Gold Dragon Scale Mail~
-K:409:0x8A:0x86
-
-# Chaos Dragon Scale Mail~
-K:410:0x8A:0x88
-
-# Balance Dragon Scale Mail~
-K:411:0x8A:0x8A
-
-# Power Dragon Scale Mail~
-K:412:0x8A:0x8C
-
-# & Dragon Helm~
-K:413:0x88:0x82
-
-# & Dragon Shield~
-K:414:0x88:0x9C
-
-# Death
-K:415:0x85:0x85
-
-# Ruination
-K:416:0x85:0x85
-
-# Detonations
-K:417:0x85:0x85
-
-# Augmentation
-K:418:0x85:0x85
-
-# *Healing*
-K:419:0x85:0x85
-
-# Life
-K:420:0x85:0x85
-
-# Self Knowledge
-K:421:0x85:0x85
-
-# *Enlightenment*
-K:422:0x85:0x85
-
-# Fear Resistance
-K:425:0x84:0x83
-
-# Light and Darkness Resistance
-K:426:0x84:0x83
-
-# Nether Resistance
-K:427:0x84:0x83
-
-# Nexus Resistance
-K:428:0x84:0x83
-
-# Sound Resistance
-K:429:0x84:0x83
-
-# Confusion Resistance
-K:430:0x84:0x83
-
-# Shard Resistance
-K:431:0x84:0x83
-
-# Disenchantment Resistance
-K:432:0x84:0x83
-
-# Chaos Resistance
-K:433:0x84:0x83
-
-# Blindness Resistance
-K:434:0x84:0x83
-
-# Lordly Protection
-K:435:0x84:0x83
-
-# Extra Attacks
-K:436:0x84:0x83
-
-# Cure Light Wounds
-K:437:0x85:0x85
-
-# Clumsiness
-K:438:0x85:0x85
-
-# Sickliness
-K:439:0x85:0x85
-
-# Map of Bree
-K:440:0xC4:0x80
-
-# Map of Gondolin
-K:441:0xC4:0x80
-
-# Map of Lothlorien
-K:442:0xC4:0x80
-
-# Map of Minas Anor
-K:443:0xC4:0x80
-
-# & Silver Arrow~
-K:465:0xC6:0x81
-
-# & Silver Bolt~
-K:466:0xC6:0x82
-
-# Lightning Resistance
-K:467:0x87:0x80
-
-# Wisdom
-K:468:0x87:0x80
-
-# Regeneration
-K:469:0x87:0x80
-
-# Infravision
-K:470:0x87:0x80
-
-# Devotion
-K:471:0x87:0x80
-
-# Weaponmastery
-K:472:0x87:0x80
-
-# Trickery
-K:473:0x87:0x80
-
-# Telepathy
-K:474:0x87:0x80
-
-# Sustenance
-K:475:0x87:0x80
-
-# & Palantir~
-K:476:0xC6:0x87
-
-# & Elfstone~
-K:477:0xC6:0x83
-
-# & Jewel~
-K:478:0xC6:0x84
-
-# & Ring~
-K:479:0xC6:0x85
-
-# copper
-K:480:0x83:0x91
-
-# copper
-K:481:0x83:0x91
-
-# copper
-K:482:0x83:0x91
-
-# silver
-K:483:0x83:0x92
-
-# silver
-K:484:0x83:0x92
-
-# silver
-K:485:0x83:0x92
-
-# garnets
-K:486:0x83:0x96
-
-# garnets
-K:487:0x83:0x96
-
-# gold
-K:488:0x83:0x93
-
-# gold
-K:489:0x83:0x93
-
-# gold
-K:490:0x83:0x93
-
-# opals
-K:491:0x83:0x97
-
-# sapphires
-K:492:0x83:0x98
-
-# rubies
-K:493:0x83:0x99
-
-# diamonds
-K:494:0x83:0x9A
-
-# emeralds
-K:495:0x83:0x9B
-
-# mithril
-K:496:0x83:0x94
-
-# adamantite
-K:497:0x83:0x95
-
-# & Mighty Hammer~
-K:498:0xB6:0x8A
-
-# & Massive Iron Crown~
-K:499:0x87:0x9C
-
-# & Phial~
-K:500:0x8E:0x9D
-
-# & Star~
-K:501:0x8E:0x9E
-
-# & Arkenstone~
-K:502:0x8E:0x9F
-
-# & Amulet~
-K:503:0x84:0x96
-
-# & Amulet~
-K:504:0x84:0x97
-
-# & Necklace~
-K:505:0x84:0x98
-
-# & Ring~
-K:506:0x84:0x8F
-
-# & Ring~
-K:507:0x84:0x83
-
-# & Ring~
-K:508:0x84:0x92
-
-# & Ring~
-K:509:0x84:0x93
-
-# & Ring~
-K:510:0x84:0x94
-
-# & Ring~
-K:511:0x84:0x95
-
-# Reflection
-K:520:0x87:0x83
-
-# Anti-Magic
-K:521:0x87:0x83
-
-# Anti-Teleportation
-K:522:0x87:0x83
-
-# Resistance
-K:523:0x87:0x83
-
-# & Zweihander~
-K:524:0xB6:0x8C
-
-# & Dwarven Lantern~
-K:525:0xC5:0x94
-
-# Splint Mail~
-K:526:0x89:0x9C
-
-# & Everburning Torch~
-K:527:0xC5:0x95
-
-# & Trifurcate Spear~
-K:528:0xB6:0x85
-
-# & Three-Piece Rod~
-K:529:0xB6:0x80
-
-# & Feanorian Lamp~
-K:530:0xC5:0x96
-
-# & Fur Cloak~
-K:531:0x89:0x89
-
-# Water Curing
-K:532:0x85:0x85
-
-# & Hatchet~
-K:533:0xB6:0x8F
-
-# Mumak Hide Armour~
-K:535:0x89:0x98
-
-# & Leather Jerkin~
-K:536:0x89:0x8F
-
-# & Sickle~
-K:537:0xB6:0x90
-
-# & Club~
-K:542:0xB6:0x92
-
-# & Broad Spear~
-K:543:0xB6:0x84
-
-# & Khopesh~
-K:544:0xB6:0x94
-
-# & Flamberge~
-K:545:0xB6:0x83
-
-# & Claymore~
-K:546:0xB6:0x8D
-
-# & Espadon~
-K:547:0xB6:0x8E
-
-# & Great Scimitar~
-K:548:0xB6:0x8B
-
-# Arrow
-K:549:0x8E:0xA0
-
-# Bolt
-K:550:0x8E:0xA1
-
-# & Fauchard~
-K:551:0xB6:0x95
-
-# & Guisarme~
-K:552:0xB6:0x96
-
-# & Heavy Lance~
-K:553:0xB6:0x82
-
-# & Bardiche~
-K:554:0xB6:0x99
-
-# Catapult
-K:555:0x8E:0xA2
-
-# Ring Mail~
-K:556:0x89:0x9C
-
-# Cord Armour~
-K:557:0x89:0x90
-
-# Paper Armour~
-K:558:0x8A:0x81
-
-# Padded Armour~
-K:559:0x89:0x91
-
-# Fumes
-K:560:0x8E:0xA3
-
-# Golden Ring Mail~
-K:561:0xC5:0xB4
-
-# Magic
-K:562:0x8E:0xA4
-
-# Device
-K:563:0x8E:0xA5
-
-# Nothing
-K:569:0x86:0x83
-
-# & Blood~ of Life
-K:573:0x85:0x85
-
-# & Mage Staff~
-K:577:0xB8:0x80
-
-# Lightning
-K:578:0x84:0x80
-
-# & Ring~
-K:582:0x84:0x85
-
-# Invisibility
-K:583:0x85:0x85
-
-# Corruption
-K:585:0x85:0x85
-
-# Invisibility
-K:586:0x84:0x80
-
-# Deep Thoughts
-K:588:0x83:0x9C
-
-# More Deep Thoughts
-K:589:0x83:0x9D
-
-# Compendium of Deep Thoughts
-K:590:0x83:0x9E
-
-# Artifact Lore Vol. I
-K:591:0x83:0x9C
-
-# Artifact Lore Vol. II
-K:592:0x83:0x9D
-
-# Artifact Lore Vol. III
-K:593:0x83:0x9F
-
-# Monstrous Compendium 1
-K:594:0x83:0x9F
-
-# Monstrous Compendium 2
-K:595:0x83:0x9E
-
-# Monstrous Compendium 3
-K:596:0x83:0x9D
-
-# Monstrous Compendium 4
-K:597:0x83:0x9C
-
-# Monstrous Compendium 5
-K:598:0x83:0x9F
-
-# Monstrous Compendium 6
-K:599:0x83:0x9E
-
-# Monstrous Compendium 7
-K:600:0x83:0x9D
-
-# Monstrous Compendium 8
-K:601:0x83:0x9C
-
-# Monstrous Compendium 9
-K:602:0x83:0x9D
-
-# Monstrous Compendium 10
-K:603:0x83:0x9E
-
-# Monstrous Compendium 11
-K:604:0x83:0x9F
-
-# & Morphic Oil~ of #
-K:605:0x85:0x85
-
-# Artifact Lore Vol. IV
-K:607:0x83:0x9C
-
-# Artifact Lore Vol. V
-K:608:0x83:0x9D
-
-# Artifact Lore Vol. VI
-K:609:0x83:0x9E
-
-# Artifact Lore Vol. VII
-K:610:0x83:0x9F
-
-# Artifact Lore Vol. VIII
-K:611:0x83:0x9C
-
-# Artifact Lore Vol. IX
-K:612:0x83:0x9D
-
-# Artifact Lore Vol. X
-K:613:0x83:0x9E
-
-# Artifact Lore Vol. XI
-K:614:0x83:0x9F
-
-# Artifact Lore Vol. IX
-K:615:0x83:0x9C
-
-# Artifact Lore Vol. X
-K:616:0x83:0x9D
-
-# Artifact Lore Vol. XI
-K:617:0x83:0x9E
-
-# & #~
-K:618:0x8F:0xA0
-
-# corpse
-K:641:0xB8:0x81
-
-# skeleton
-K:642:0x8E:0x96
-
-# head
-K:643:0x8E:0x94
-
-# skull
-K:644:0x8E:0x94
-
-# raw meat
-K:645:0x8E:0x83
-
-# & Great Eagle Down Coat~
-K:646:0x8A:0x86
-
-# & Key~
-K:647:0x8E:0x9C
-
-# & Small Wooden Boomerang~
-K:648:0xB8:0x82
-
-# & Wooden Boomerang~
-K:649:0xB8:0x83
-
-# & Small Metal Boomerang~
-K:650:0xB8:0x84
-
-# & Metal Boomerang~
-K:651:0xB8:0x85
-
-# & Anchor~
-K:652:0x8D:0x9E
-
-# & ~
-K:653:0xC5:0xB5
-
-# Summon Never-Moving Pet
-K:654:0x83:0x9D
-
-# Cure Light Insanity
-K:657:0x85:0x85
-
-# Cure Serious Insanity
-K:658:0x85:0x85
-
-# Cure Critical Insanity
-K:659:0x85:0x85
-
-# Cure Insanity
-K:660:0x85:0x85
-
-# & Phial~
-K:661:0x8E:0x9D
-
-# Junkart
-K:662:0xC5:0xB6
-
-# Craftsmanship
-K:663:0x83:0x9F
-
-# The One Ring
-K:664:0x83:0x9E
-
-# & Horn~
-K:669:0xB8:0x88
-
-# & Drum~
-K:670:0xB8:0x89
-
-# & Harp~
-K:671:0xB8:0x8A
-
-# & Palantir~
-K:675:0x8D:0x9F
-
-# Egg
-K:676:0xB7:0x8D
-
-# Reset Recall
-K:677:0x83:0x9D
-
-# Divination
-K:678:0x83:0x9D
-
-# Self
-K:679:0xB7:0x8E
-
-# Ray
-K:680:0xB7:0x8F
-
-# Sphere
-K:681:0xB7:0x90
-
-# Knowledge
-K:682:0xB7:0x94
-
-# Life
-K:683:0xB7:0x95
-
-# Fire
-K:684:0xB7:0x96
-
-# Cold
-K:685:0xB7:0x97
-
-# Lightning
-K:686:0xB7:0x98
-
-# Acid
-K:687:0xB7:0x99
-
-# Element
-K:688:0xB7:0x9A
-
-# Chaos
-K:689:0xB7:0x9B
-
-# Mind
-K:690:0xB7:0x9C
-
-# Holding
-K:691:0xB7:0x9D
-
-# Arrow
-K:692:0xB7:0x91
-
-# Power Surge
-K:693:0xB7:0x92
-
-# Armageddon
-K:694:0xB7:0x93
-
-# Gravity
-K:695:0xB7:0x9E
-
-# Undeath
-K:697:0xB6:0x9B
-
-# Protection
-K:698:0xB6:0x9C
-
-# & Ring~ of Precognition
-K:700:0x84:0x83
-
-# & Sprig~ of Athelas
-K:701:0xB8:0x8E
-
-# & Old Scroll~ of Deincarnation
-K:720:0x83:0x9F
-
-# & Dark Sword~
-K:721:0xC4:0x81
-
-# Numenorean for Beginners (I)
-K:722:0x83:0x9D
-
-# Numenorean for Beginners (II)
-K:723:0x83:0x9D
-
-# Advanced Lessons of Numenorean
-K:724:0x83:0x9D
-
-# Advanced Lessons of Sindarin
-K:725:0x83:0x9D
-
-# & Shard~ of Pottery
-K:726:0x8E:0x92
-
-# & Broken Stick~
-K:727:0x8E:0x93
-
-# & Book~ of Beginner Cantrips
-K:738:0x90:0xA0
-
-# & Book~ of Teleportation
-K:739:0x90:0xA5
-
-# & Book~ of Summoning
-K:741:0x90:0xA7
-
-# & Potion~ of Learning
-K:743:0xC1:0x82
-
-# Khuzdul - The Hidden Tongue of the Dwarves
-K:751:0x83:0x9D
-
-# Nandorin for Dummies
-K:752:0x83:0x9D
-
-# Advanced Lessons of Orcish
-K:753:0x83:0x9D
-
-# Flying
-K:755:0x84:0x88
-
-# & Tome~ of the Time
-K:756:0x90:0xA5
-
-# & Spellbook~ of #
-K:757:0x91:0xA4
-
-# & Tome~ of Meta Spells
-K:758:0x90:0xA0
-
-# & Tome~ of the Mind
-K:759:0x90:0xA7
-
-# & Holy Tome~ of Eru Iluvatar
-K:760:0x90:0xA7
-
-# & Holy Tome~ of Manwe Sulimo
-K:761:0x90:0xA2
-
-# & War Tome~ of Tulkas
-K:762:0x90:0xA5
-
-# & Unholy Tome~ of the Hellflame
-K:763:0x90:0xA1
-
-# & Corrupted Tome~ of Melkor
-K:764:0x90:0xA1
-
-# & Earth Tome~ of Aule
-K:765:0x90:0xA3
-
-# & Shining Tome~ of Varda
-K:766:0x90:0xA2
-
-# & Water Tome~ of Ulmo
-K:767:0x90:0xA4
-
-# & Forest Tome~ of Yavanna
-K:768:0x90:0xA6
-
-# Tome of#
-K:769:0x90:0xA3
-
-# & Ring~
-K:770:0x84:0x84
-
-# & Holy Tome~ of Mandos
-K:771:0x90:0xA0
-
-# & Great Rod Tip~ of Home Summoning
-K:776:0x86:0x83
-
-# & Shadow Blade~
-K:777:0xC1:0x91
-
-# & Bluesteel Blade~
-K:778:0xC1:0x92
-
-# the Serpents
-K:779:0xC4:0x88
-
-# Ring~ of Power
-K:785:0xC4:0x8E
-
-# Climbing Set~
-K:786:0xC1:0x93
-
-# Adventurer's Guide to Middle-earth
-K:787:0x83:0x9E
-
-# & Demonblade~
-K:788:0x90:0xA8
-
-# & Demonshield~
-K:789:0x90:0xA9
-
-# & Demonhorn~
-K:790:0x90:0xAA
-
-# & Wooden Rod~ of#
-K:793:0xC1:0x95
-
-# & Copper Rod~ of#
-K:794:0xC1:0x96
-
-# & Iron Rod~ of#
-K:795:0xC1:0x97
-
-# & Moonstone Rod~ of#
-K:796:0xC1:0x98
-
-# & Silver Rod~ of#
-K:797:0xC1:0x99
-
-# & Golden Rod~ of#
-K:798:0xC1:0x9B
-
-# & Mithril Rod~ of#
-K:799:0xC1:0x9C
-
-# & Tilkal Rod~ of#
-K:800:0xC1:0x9D
-
-# & Greater Ration~ of Health
-K:801:0xC4:0x87
-
-# & Crumpled Scroll~ of Mass Resurrection
-K:802:0x83:0x9E
-
-# & Cleaver~
-K:803:0xC4:0x82
-
-# & Light War Axe~
-K:804:0xC4:0x83
-
-# & Slaughter Axe~
-K:805:0xC4:0x84
-
-# & Runestone~
-K:806:0xC4:0x85
-
-# & Fortune cookie~
-K:807:0xC6:0x86
-
-# Critical Hits
-K:809:0x84:0x83
-
-# & Wand~ of Digging of Thrain
-K:810:0x86:0x93
-
-# & Gnarled Staff~ of Holy Fire of Mithrandir
-K:811:0x87:0x92
-
-# Partial Totem
-K:812:0xC6:0x9D
-
-# True Totem
-K:813:0xC6:0x9E
-
-# & Piece~ of the Relic of Eru
-K:814:0x8C:0xA2
-
-# & Piece~ of the Relic of Manwe
-K:815:0x8C:0xA3
-
-# & Piece~ of the Relic of Tulkas
-K:816:0x8C:0xA4
-
-# & Piece~ of the Relic of Melkor
-K:817:0x8C:0xA5
-
-# & Piece~ of the Relic of Yavanna
-K:818:0x8C:0xA6
-
-# & Ring~
-K:819:0x84:0x83
-
-# & Ring~
-K:820:0x84:0x83
-
-# & Ring~
-K:821:0x84:0x83
-
-# & Ring~
-K:822:0x84:0x83
-
-# & Ring~
-K:823:0x84:0x83
-
-# & Ring~
-K:824:0x84:0x83
-
-# & Piece~ of the Relic of Aule
-K:825:0x8C:0xA7
-
-# & Piece~ of the Relic of Varda
-K:826:0x8C:0xA8
-
-# & Piece~ of the Relic of Ulmo
-K:827:0x8C:0xA9
-
-# & Piece~ of the Relic of Mandos
-K:828:0x8C:0xAA
-
-# THEME
-
-# & Pinch~ of Longbottom Leaf
-K:831:0xC5:0xAA
-
-# & Ear~ of Corn
-K:832:0xC6:0xBF
-
-# & Tater~
-K:833:0xC5:0xA6
-
-# & Strawberry~
-K:834:0x93:0xA4
-
-# & Turnip~
-K:835:0xC5:0xA7
-
-# & Jar~ of Honey
-K:836:0xC5:0xA8
-
-# & Jug~ of Milk
-K:837:0xC5:0xA9
-
-# of War
-K:838:0x87:0x80
-
-# of Life
-K:839:0x87:0x80
-
-# Wizardry
-K:840:0x84:0x83
-
-# Vitality
-K:841:0x84:0x83
-
-# Clear Thought
-K:842:0x84:0x83
-
-# Clumsiness
-K:843:0x84:0x83
-
-# Sickliness
-K:844:0x84:0x83
-
-# Fortune
-K:845:0x84:0x83
-
-# Sterilise
-K:846:0x83:0x9C
-
-# Map of Middle-earth
-K:847:0xC4:0x80
-
-# Map of Edoras
-K:848:0xC4:0x80
-
-# Map of Esgaroth
-K:849:0xC4:0x80
-
-# Map of Hobbiton
-K:850:0xC4:0x80
-
-# Map of Osgiliath
-K:851:0xC4:0x80
-
-# Map of Pelargir
-K:852:0xC4:0x80
-
-# Map of Beorn's domain
-K:853:0xC4:0x80
-
-# Map of Dale
-K:854:0xC4:0x80
-
-# Map of Henneth Annun
-K:855:0xC4:0x80
-
-# Map of Helm's Deep
-K:856:0xC4:0x80
-
-# Map of Thranduil's realm
-K:857:0xC4:0x80
-
-# Map of Imladris
-K:858:0xC4:0x80
-
-# & Bearded Axe~
-K:859:0xC5:0xAD
-
-# & Double Axe~
-K:860:0xC5:0xAE
-
-# & Crusader Axe~
-K:861:0xC5:0xAF
-
-# & Reaper Axe~
-K:862:0xC5:0xB0
-
-# & Mithril Helm~
-K:863:0xC5:0xB8
-
-# & Set~ of Mithril Gauntlets
-K:864:0xC5:0xB9
-
-# & Small Mithril Shield~
-K:865:0xC5:0xBA
-
-# & Large Mithril Shield~
-K:866:0xC5:0xBB
-
-# & Map~
-K:867:0xC4:0x80
-
-# & Key~
-K:868:0x93:0xA7
-
-# & Cup~
-K:869:0xC5:0xAB
-
-# & Red Arrow~
-K:870:0xAE:0x87
-
-# & Sceptre~
-K:871:0x86:0x94
-
-# & Rod~
-K:872:0x86:0x93
-
-# & Necklace~
-K:873:0x87:0x8C
-
-# & Amulet~
-K:874:0x87:0x80
-
-# & Black Banner~
-K:875:0xC5:0xAC
-
-# & Pearl~
-K:876:0xC5:0xB1
-
-# & Silmaril~
-K:877:0xC5:0xB2
-
-# & Silmaril~
-K:878:0xC5:0xB3
-
-# & Golden Harp~
-K:879:0xC5:0xB7
-
-# Player
-R:0:0x8E/0x80
-
-# Filthy street urchin
-R:1:0xAA:0x80
-
-# Scrawny cat
-R:2:0xA7:0x82
-
-# Sparrow
-R:3:0xB4:0x9E
-
-# Chaffinch
-R:4:0xB4:0x9E
-
-# Wild rabbit
-R:5:0xB4:0x9F
-
-# Woodsman
-R:6:0xAA:0x91
-
-# Scruffy little dog
-R:7:0x9D:0x9A
-
-# Farmer Maggot
-R:8:0xAA:0x81
-
-# Blubbering idiot
-R:9:0xAA:0x82
-
-# Boil-covered wretch
-R:10:0xAA:0x83
-
-# Village idiot
-R:11:0xAA:0x84
-
-# Pitiful-looking beggar
-R:12:0xAA:0x85
-
-# Mangy-looking leper
-R:13:0xAA:0x86
-
-# Agent of the black market
-R:14:0xAA:0x87
-
-# Singing, happy drunk
-R:15:0xAA:0x88
-
-# Aimless-looking merchant
-R:16:0xAA:0x89
-
-# Mean-looking mercenary
-R:17:0xAA:0x8A
-
-# Battle-scarred veteran
-R:18:0xAA:0x8B
-
-# The Squint-eyed Southerner
-R:19:0xB0:0x80
-
-# Grey mold
-R:20:0xA8:0x9F
-
-# Large white snake
-R:21:0xA2:0x85
-
-# Grey mushroom patch
-R:22:0xB0:0x81
-
-# Newt
-R:23:0xB0:0x82
-
-# Ox
-R:24:0xC0:0xAE
-
-# Kine of Araw
-R:25:0xC0:0xAF
-
-# Sheep
-R:26:0xC0:0xB0
-
-# Giant white mouse
-R:27:0xAC:0x85
-
-# Large brown snake
-R:28:0xA2:0x84
-
-# Meara
-R:29:0xC0:0xB1
-
-# Horse
-R:30:0xC0:0xB2
-
-# White worm mass
-R:31:0xAC:0x9D
-
-# Floating eye
-R:32:0xA6:0x9B
-
-# Rock lizard
-R:33:0xA2:0x86
-
-# The Boar of Everholt
-R:34:0xC0:0xB3
-
-# Jackal
-R:35:0x9D:0x9B
-
-# Soldier ant
-R:36:0xA5:0x87
-
-# Fruit bat
-R:37:0xA5:0x8F
-
-# Insect swarm
-R:38:0xB5:0x9E
-
-# Boar
-R:39:0xC0:0xB4
-
-# Shrieker mushroom patch
-R:40:0x9D:0x86
-
-# Cow
-R:41:0xC0:0xB5
-
-# Novice warrior
-R:43:0xAA:0x8C
-
-# Novice rogue
-R:44:0xAA:0x8D
-
-# Novice priest
-R:45:0xAA:0x8E
-
-# Novice mage
-R:46:0xAA:0x8F
-
-# Yellow mushroom patch
-R:47:0x9D:0x87
-
-# White jelly
-R:48:0xA8:0x8A
-
-# Giant black ant
-R:49:0xA5:0x88
-
-# Salamander
-R:50:0xA2:0x88
-
-# White harpy
-R:51:0xA0:0x88
-
-# Deer
-R:52:0xC0:0xB6
-
-# Grip, Farmer Maggot's dog
-R:53:0x9D:0x9C
-
-# Wolf, Farmer Maggot's dog
-R:54:0x9D:0x9D
-
-# Fang, Farmer Maggot's dog
-R:55:0x9D:0x9D
-
-# Giant green frog
-R:56:0xA2:0x87
-
-# Lion
-R:57:0xC0:0xB7
-
-# Green worm mass
-R:58:0xAC:0x9E
-
-# Large yellow snake
-R:59:0xA2:0x89
-
-# Cave spider
-R:60:0xA2:0x9D
-
-# Crow
-R:61:0xB5:0x9F
-
-# Wild cat
-R:62:0xA7:0x83
-
-# Smeagol
-R:63:0xAA:0x90
-
-# Green ooze
-R:64:0xA8:0x8B
-
-# Poltergeist
-R:65:0x9F:0x99
-
-# Yellow jelly
-R:66:0xA8:0x8D
-
-# Squirrel
-R:67:0xC0:0xB8
-
-# Raven
-R:68:0xB5:0x9F
-
-# White midge
-R:69:0xA8:0x9D
-
-# Squirrel of Mirkwood
-R:70:0xC0:0xB9
-
-# Black naga
-R:71:0xA9:0x88
-
-# Spotted mushroom patch
-R:72:0x9D:0x88
-
-# Silver jelly
-R:73:0xA8:0x8C
-
-# Scruffy-looking hobbit
-R:74:0xA7:0x93
-
-# Giant white ant
-R:75:0xA5:0x89
-
-# Yellow mold
-R:76:0xA9:0x80
-
-# Ape
-R:77:0xC0:0xBA
-
-# Yellow worm mass
-R:78:0xAC:0x9F
-
-# Clear worm mass
-R:79:0xAD:0x80
-
-# Radiation eye
-R:80:0xA6:0x9C
-
-# Yellow light
-R:81:0xB8:0x93
-
-# Cave lizard
-R:82:0xA2:0x8A
-
-# Novice ranger
-R:83:0xAA:0x91
-
-# Blue jelly
-R:84:0xA8:0x8E
-
-# Creeping copper coins
-R:85:0x9D:0x80
-
-# Giant white rat
-R:86:0xAC:0x86
-
-# Snotling
-R:87:0xB9:0x89
-
-# Swordfish
-R:88:0xB6:0x9E
-
-# Blue worm mass
-R:89:0xAD:0x81
-
-# Large grey snake
-R:90:0xA2:0x8B
-
-# Corsair of Umbar
-R:91:0xC0:0xBB
-
-# Dunlending
-R:92:0xC0:0xBC
-
-# Apprentice mage
-R:93:0xAA:0x8F
-
-# Green naga
-R:94:0xA9:0x89
-
-# Giant leech
-R:95:0xB8:0x94
-
-# Barracuda
-R:96:0xB6:0x9F
-
-# Novice paladin
-R:97:0xAA:0x92
-
-# Man of Harad
-R:98:0xC0:0xBD
-
-# Blue ooze
-R:99:0xA8:0x8F
-
-# Green glutton ghost
-R:100:0x9F:0x9A
-
-# Green jelly
-R:101:0xA8:0x90
-
-# Lurtz, Uruk Captain of the White Hand
-R:102:0xA8:0x9B
-
-# Munchkin
-R:103:0xA8:0x86
-
-# Disenchanter eye
-R:104:0xA6:0x9D
-
-# Red worm mass
-R:105:0xAD:0x82
-
-# Copperhead snake
-R:106:0xA2:0x8C
-
-# Death sword
-R:107:0xB0:0x87
-
-# Purple mushroom patch
-R:108:0x9D:0x89
-
-# Apprentice priest
-R:109:0xAA:0x8E
-
-# Apprentice warrior
-R:110:0xAA:0x8C
-
-# Petty-dwarf
-R:111:0xB0:0x88
-
-# Petty-dwarf mage
-R:112:0xC0:0xBE
-
-# Brown mold
-R:113:0xA9:0x81
-
-# Giant brown bat
-R:114:0xA5:0x90
-
-# Butterfly
-R:115:0xC4:0xB3
-
-# Apprentice rogue
-R:116:0xAA:0x87
-
-# Creeping silver coins
-R:117:0x9D:0x81
-
-# Snaga
-R:118:0xA9:0x8E
-
-# Rattlesnake
-R:119:0xA2:0x8D
-
-# Giant slug
-R:120:0xB8:0x94
-
-# Giant pink frog
-R:121:0xB8:0x95
-
-# Dark elf
-R:122:0x92:0x94
-
-# Moth
-R:123:0xC4:0xB4
-
-# Crypt creep
-R:124:0xB0:0x8A
-
-# Rotting corpse
-R:125:0xB0:0x8B
-
-# Cave orc
-R:126:0xA9:0x8F
-
-# Wood spider
-R:127:0xA2:0x9E
-
-# Hurog
-R:128:0xA0:0x91
-
-# Bloodshot eye
-R:129:0xA6:0x9E
-
-# Red naga
-R:130:0xA9:0x8A
-
-# Red jelly
-R:131:0xA8:0x91
-
-# Nightingale
-R:132:0xC4:0xAD
-
-# Lost soul
-R:133:0x9F:0x9B
-
-# Night lizard
-R:134:0xA2:0x8F
-
-# Gorcrow
-R:135:0xC4:0xB1
-
-# Skeleton orc
-R:136:0xAC:0x8A
-
-# Grima the Wormtongue, Agent of Saruman
-R:137:0xAA:0x98
-
-# Robin Hood, the Outlaw
-R:138:0xB0:0x8C
-
-# Gull
-R:139:0xC4:0xAE
-
-# Lagduf, the Snaga
-R:140:0xA9:0x90
-
-# Kirinki
-R:141:0xC4:0xAF
-
-# Apprentice ranger
-R:142:0xAA:0x91
-
-# Giant salamander
-R:143:0xA2:0x90
-
-# Space monster
-R:144:0xB0:0x8D
-
-# Swan
-R:145:0xC0:0xBF
-
-# Green mold
-R:146:0xA9:0x82
-
-# Apprentice paladin
-R:147:0xAA:0x92
-
-# Caborrog
-R:148:0xA0:0x92
-
-# Hill orc
-R:149:0xA9:0x91
-
-# Bandit
-R:150:0xAA:0x9B
-
-# Hunting hawk
-R:151:0xB0:0x8E
-
-# Phantom warrior
-R:152:0xB0:0x8F
-
-# Thrush
-R:153:0xC4:0xB0
-
-# Yeti
-R:154:0xA4:0x91
-
-# Fox
-R:155:0xC4:0xAC
-
-# Giant grey rat
-R:156:0xAC:0x87
-
-# Black harpy
-R:157:0xA0:0x89
-
-# Fly of Mordor
-R:158:0xC4:0xB5
-
-# Limlug
-R:159:0xBF:0xA0
-
-# Cave bear
-R:160:0xC4:0x8F
-
-# Rock mole
-R:161:0xBA:0x82
-
-# Mindcrafter
-R:162:0xAA:0x93
-
-# Hatchling blue dragon
-R:163:0xA5:0x9D
-
-# Hatchling white dragon
-R:164:0xA5:0x9E
-
-# Hatchling green dragon
-R:165:0xA5:0x9F
-
-# Hatchling black dragon
-R:166:0xA6:0x80
-
-# Hatchling red dragon
-R:167:0xA6:0x81
-
-# Giant red ant
-R:168:0xA5:0x8D
-
-# Brodda, the Easterling
-R:169:0xAA:0x9C
-
-# Radbug, the Goblin
-R:170:0xBF:0xA1
-
-# King cobra
-R:171:0xA2:0x91
-
-# Eagle
-R:172:0xB4:0x9E
-
-# War bear
-R:173:0xB0:0x91
-
-# Killer bee
-R:174:0xB0:0x92
-
-# Giant spider
-R:175:0xA2:0x9F
-
-# Giant white tick
-R:176:0xA8:0x9D
-
-# The Lucky Hobbit
-R:177:0xBF:0xA2
-
-# Dark elven mage
-R:178:0xA7:0x96
-
-# Dark dwarven warrior
-R:179:0xBF:0xA3
-
-# Dark dwarven smith
-R:180:0xBF:0xA4
-
-# Dark dwarven lord
-R:181:0xBF:0xA5
-
-# Dark dwarven priest
-R:182:0xBF:0xA6
-
-# Dark elven warrior
-R:183:0xBF:0xA6
-
-# Clear mushroom patch
-R:184:0xB8:0x96
-
-# Quiver slot
-R:185:0xB0:0x93
-
-# Grishnakh, the Hill Orc
-R:186:0xA9:0x93
-
-# Giant tan bat
-R:187:0xC4:0x90
-
-# Owlbear
-R:188:0xBA:0x87
-
-# Clear mewlip
-R:189:0xBF:0xA7
-
-# Hairy mold
-R:190:0xA9:0x83
-
-# Grizzly bear
-R:191:0xBA:0x88
-
-# Disenchanter mold
-R:192:0xA9:0x84
-
-# Pseudo-dragon
-R:193:0xA6:0x82
-
-# Limrog
-R:194:0xA0:0x93
-
-# Creeping gold coins
-R:195:0x9D:0x82
-
-# Wolf
-R:196:0x9D:0x9E
-
-# Giant fruit fly
-R:197:0x9F:0x91
-
-# Panther
-R:198:0xA7:0x84
-
-# Brigand
-R:199:0xB0:0x94
-
-# Gray mewlip
-R:200:0xBF:0xA8
-
-# Orange mewlip
-R:201:0xBF:0xA9
-
-# Undead mass
-R:202:0xB0:0x97
-
-# Bloodshot mewlip
-R:203:0xBF:0xAA
-
-# Hatchling multi-hued dragon
-R:204:0xA6:0x83
-
-# Green mewlip
-R:205:0xBF:0xAB
-
-# Old Man Willow
-R:206:0xBA:0x89
-
-# Blue mewlip
-R:207:0xBF:0xAC
-
-# Zombified orc
-R:208:0xAC:0x8C
-
-# Hippogryph
-R:209:0xA0:0x8A
-
-# Black mamba
-R:210:0xA2:0x92
-
-# White wolf
-R:211:0x9D:0x9F
-
-# Grape jelly
-R:212:0xA8:0x92
-
-# Nether worm mass
-R:213:0xAD:0x83
-
-# Brown mewlip
-R:214:0xBF:0xAD
-
-# Golfimbul, the Hill Orc Chief
-R:215:0xA9:0x94
-
-# Swordsman
-R:216:0x97:0x81
-
-# Stone mewlip
-R:217:0xBF:0xAE
-
-# Hatchling bronze dragon
-R:218:0xA6:0x82
-
-# Hatchling gold dragon
-R:219:0xA6:0x82
-
-# Evil eye
-R:220:0xC4:0x91
-
-# Yellow mewlip
-R:221:0xBF:0xAF
-
-# Pink mewlip
-R:222:0xBF:0xB0
-
-# Tree mewlip
-R:223:0xBF:0xB1
-
-# Air mewlip
-R:224:0xBF:0xB2
-
-# Priest
-R:225:0xAA:0x9E
-
-# Dark elven priest
-R:226:0xA7:0x99
-
-# Air spirit
-R:227:0x9E:0x9F
-
-# Skeleton human
-R:228:0xAC:0x8B
-
-# Zombified human
-R:229:0xAD:0x8E
-
-# Tiger
-R:230:0xA7:0x85
-
-# Moaning spirit
-R:231:0x9F:0x9C
-
-# Plague mewlip
-R:232:0xBF:0xB3
-
-# Spotted jelly
-R:233:0xA8:0x93
-
-# Drider
-R:234:0xA3:0x80
-
-# Mongbat
-R:235:0xB0:0x9C
-
-# Killer brown beetle
-R:236:0xA0:0x9B
-
-# Death mewlip
-R:237:0xBF:0xB4
-
-# Ogre
-R:238:0xA1:0x8B
-
-# Creeping mithril coins
-R:239:0x9D:0x83
-
-# Illusionist
-R:240:0xAB:0x80
-
-# Druid
-R:241:0xAB:0x81
-
-# Fuinur, Lord of the Haradrim
-R:242:0xBF:0xB5
-
-# Cloaker
-R:243:0x89:0x88
-
-# Black orc
-R:244:0xA9:0x95
-
-# Ochre jelly
-R:245:0xA8:0x94
-
-# Software bug
-R:246:0xB0:0x9D
-
-# Lurker
-R:247:0x80:0x81
-
-# Tangleweed
-R:248:0xC4:0x92
-
-# Glorfindel of Rivendell
-R:249:0xBF:0xB6
-
-# Giant white dragonfly
-R:250:0x9F:0x93
-
-# Snaga sapper
-R:251:0xB9:0x8C
-
-# Finrod Felagund
-R:252:0xBF:0xB7
-
-# Gibbering mouther
-R:253:0xB0:0x9E
-
-# Maedhros the Tall
-R:254:0xBF:0xB8
-
-# Hill giant
-R:255:0xA1:0x91
-
-# Flesh golem
-R:256:0xA7:0x89
-
-# Warg
-R:257:0x9E:0x80
-
-# Cheerful leprawn
-R:258:0xB1:0x80
-
-# Giant flea
-R:259:0x9F:0x92
-
-# Ufthak of Cirith Ungol
-R:260:0xBA:0x8C
-
-# Clay golem
-R:261:0xB8:0x9D
-
-# Black ogre
-R:262:0xA1:0x8C
-
-# Maglor the Mighty Singer
-R:263:0xBF:0xB9
-
-# Half-orc
-R:264:0xBA:0x8D
-
-# Dark naga
-R:265:0xB8:0x9E
-
-# Poison ivy
-R:266:0xC4:0x93
-
-# Magic mushroom patch
-R:267:0x9D:0x8B
-
-# Celegorm the Fair
-R:268:0xBF:0xBA
-
-# Guardian naga
-R:269:0xA9:0x8B
-
-# Wererat
-R:270:0xBA:0x8E
-
-# Light hound
-R:271:0xA4:0x93
-
-# Dark hound
-R:272:0xA4:0x94
-
-# Flying skull
-R:273:0xB1:0x81
-
-# Caranthir the Dark
-R:274:0xBF:0xBB
-
-# Giant tarantula
-R:275:0xA3:0x81
-
-# Curufin the Crafty
-R:276:0xBF:0xBC
-
-# Mirkwood spider
-R:277:0xA3:0x82
-
-# Frost giant
-R:278:0xA1:0x92
-
-# Griffon
-R:279:0xA0:0x8B
-
-# Aewrog
-R:280:0xA0:0x94
-
-# Gnome mage
-R:281:0xA7:0x98
-
-# Clear hound
-R:282:0xA4:0x95
-
-# Umber hulk
-R:283:0xA3:0x99
-
-# Rust monster
-R:284:0xB9:0x8F
-
-# Ogrillon
-R:285:0xA9:0x98
-
-# Gelatinous cube
-R:286:0xA8:0x95
-
-# Giant green dragonfly
-R:287:0x9F:0x94
-
-# Fire giant
-R:288:0xA1:0x93
-
-# Hummerhorn
-R:289:0xBA:0x8F
-
-# Lizard man
-R:290:0xB9:0x90
-
-# Ulfast, Son of Ulfang
-R:291:0xAB:0x82
-
-# Crebain
-R:292:0xC4:0x94
-
-# Berserker
-R:293:0xA9:0x97
-
-# Draugrog
-R:294:0xA0:0x95
-
-# Sphinx
-R:295:0xB9:0x91
-
-# Narrog
-R:296:0xA0:0x96
-
-# Forest troll
-R:297:0xA3:0x89
-
-# Freezing sphere
-R:298:0xBA:0x91
-
-# Jumping fireball
-R:299:0xB9:0x92
-
-# Ball lightning
-R:300:0xBA:0x92
-
-# 2-headed hydra
-R:301:0xA2:0x93
-
-# Swamp thing
-R:302:0xB9:0x93
-
-# Water spirit
-R:303:0x9F:0x80
-
-# Giant red scorpion
-R:304:0xA3:0x83
-
-# Earth spirit
-R:305:0x9F:0x81
-
-# Fire spirit
-R:306:0x9F:0x82
-
-# Fire hound
-R:307:0xA4:0x96
-
-# Cold hound
-R:308:0xA4:0x97
-
-# Energy hound
-R:309:0xA4:0x98
-
-# Lesser mimic
-R:310:0x9D:0x8E
-
-# Door mimic
-R:311:0x82:0x83
-
-# Blink dog
-R:312:0x9E:0x81
-
-# Uruk
-R:313:0xA9:0x99
-
-# Shagrat, the Orc Captain
-R:314:0xA9:0x9A
-
-# Gorbag, the Orc Captain
-R:315:0xA9:0x9B
-
-# Shambling mound
-R:316:0x9D:0x8C
-
-# Venus Flytrap
-R:317:0xC4:0x95
-
-# Amrod, Son of Feanor
-R:318:0xBF:0xBD
-
-# Amras, Son of Feanor
-R:319:0xBF:0xBD
-
-# Giant bronze dragonfly
-R:320:0x9F:0x98
-
-# Stone giant
-R:321:0xA1:0x94
-
-# Giant black dragonfly
-R:322:0x9F:0x96
-
-# Stone golem
-R:323:0xA7:0x8B
-
-# Red mold
-R:324:0xA9:0x85
-
-# Giant gold dragonfly
-R:325:0x9F:0x97
-
-# Telchar the Smith
-R:326:0xBF:0xBE
-
-# Ghast
-R:327:0xBA:0x95
-
-# Neekerbreeker
-R:328:0xC4:0x96
-
-# Huorn
-R:329:0xBA:0x96
-
-# Bolg, Son of Azog
-R:330:0xA9:0x9C
-
-# Phase spider
-R:331:0xA3:0x84
-
-# Lizard king
-R:332:0xB9:0x97
-
-# Landmine
-R:333:0xBA:0x97
-
-# Roac, son of Carc
-R:334:0xC4:0xB2
-
-# Great eagle
-R:335:0xB9:0x98
-
-# Livingstone
-R:336:0xB1:0x84
-
-# Earth hound
-R:337:0xA4:0x99
-
-# Air hound
-R:338:0xA4:0x9A
-
-# Sabre-tooth tiger
-R:339:0xA7:0x86
-
-# Acid hound
-R:340:0xA4:0x9B
-
-# Chimaera
-R:341:0xA0:0x8C
-
-# Quylthulg
-R:342:0xA1:0x9A
-
-# Sasquatch
-R:343:0xA4:0x92
-
-# Carc of Ravenhill
-R:344:0xC4:0xB2
-
-# Ranger
-R:345:0xAA:0x97
-
-# Paladin
-R:346:0xAB:0x92
-
-# Werewolf
-R:347:0xBA:0x99
-
-# Dark elven lord
-R:348:0xA7:0x9C
-
-# Cloud giant
-R:349:0xA1:0x96
-
-# Ugluk, the Uruk
-R:350:0xA9:0x9D
-
-# Blue dragon bat
-R:351:0xA5:0x91
-
-# Mimic
-R:352:0x83:0x9D
-
-# Ultimate mimic
-R:353:0x84:0x9E
-
-# Fire vortex
-R:354:0xAC:0x94
-
-# Acid vortex
-R:355:0xAC:0x95
-
-# Lugdush, the Uruk
-R:356:0xB9:0x9A
-
-# Alatar, the Blue Wizard
-R:357:0xBF:0xBF
-
-# Cold vortex
-R:358:0xAC:0x96
-
-# Energy vortex
-R:359:0xAC:0x97
-
-# Globefish
-R:360:0xB9:0x9B
-
-# Giant firefly
-R:361:0x9F:0x95
-
-# Mummified orc
-R:362:0xA1:0x88
-
-# Wolf chieftain
-R:363:0xC4:0x97
-
-# Pallando, the Blue Wizard
-R:364:0xBF:0xBF
-
-# Vampiric mist
-R:365:0xB9:0x9D
-
-# Killer stag beetle
-R:366:0xA0:0x9D
-
-# Iron golem
-R:367:0xA7:0x8C
-
-# Auto-roller
-R:368:0xB1:0x86
-
-# Giant yellow scorpion
-R:369:0xA3:0x85
-
-# Muzgash, the Snaga
-R:370:0xBE:0xA0
-
-# Black ooze
-R:371:0xA8:0x96
-
-# Hardened warrior
-R:372:0xAB:0x83
-
-# Azog, King of the Uruk-Hai
-R:373:0xA9:0x9F
-
-# Bill Ferny
-R:374:0xBE:0xA1
-
-# Dark elven warlock
-R:375:0xB1:0x87
-
-# Master rogue
-R:376:0xAB:0x84
-
-# Red dragon bat
-R:377:0xA5:0x92
-
-# Killer white beetle
-R:378:0xBA:0x9E
-
-# Ice skeleton
-R:379:0xB9:0x9F
-
-# Angamaite of Umbar
-R:380:0xBB:0x80
-
-# Forest wight
-R:381:0xB1:0x88
-
-# Khim, Son of Mim
-R:382:0xB1:0x89
-
-# Ibun, Son of Mim
-R:383:0xB1:0x8A
-
-# Meneldor the Swift
-R:384:0xBB:0x81
-
-# Phantom beast
-R:385:0xB1:0x8B
-
-# Giant silver ant
-R:386:0xA0:0x9C
-
-# 4-headed hydra
-R:387:0xA2:0x95
-
-# Beruthiel, Queen of Cats
-R:388:0xBE:0xA2
-
-# The Hunter
-R:389:0xB1:0x8C
-
-# Mummified human
-R:390:0xA1:0x89
-
-# Vampire bat
-R:391:0xA5:0x93
-
-# Sangahyando of Umbar
-R:392:0xAB:0x85
-
-# It
-R:393:0xB1:0x8D
-
-# Banshee
-R:394:0x9F:0x9D
-
-# Herumor, Lord of the Haradrim
-R:395:0xBE:0xA3
-
-# Fimbrethil
-R:396:0xBB:0x84
-
-# Silent watcher
-R:397:0xB1:0x8E
-
-# Pukelman
-R:398:0xA7:0x8D
-
-# Mauhur, the Uruk
-R:399:0xBE:0xA4
-
-# Dark elven druid
-R:400:0xA7:0x9F
-
-# Stone troll
-R:401:0xA3:0x8A
-
-# Prince Imrahil the Proud
-R:402:0xBE:0xA5
-
-# Hill troll
-R:403:0xA3:0x8B
-
-# Wereworm
-R:404:0xAD:0x84
-
-# Killer red beetle
-R:405:0xA0:0x9F
-
-# Disenchanter bat
-R:406:0xC4:0x98
-
-# Umuiyan, Doorkeeper of Tevildo
-R:407:0xBE:0xA6
-
-# Giant grey ant
-R:408:0xA5:0x8C
-
-# Oikeroi, Bodyguard of Tevildo
-R:409:0xBE:0xA7
-
-# Gwaihir the Windlord
-R:410:0xBB:0x81
-
-# Giant fire tick
-R:411:0xBB:0x87
-
-# Lotho Sackville-Baggins, Betrayer of the Shire
-R:412:0xBE:0xA8
-
-# Ulwarth, Son of Ulfang
-R:413:0xAA:0x99
-
-# Werebear
-R:414:0xC4:0x8F
-
-# Cave ogre
-R:415:0xA1:0x8D
-
-# White wraith
-R:416:0xA3:0x9F
-
-# Thranduil, King of the Wood Elves
-R:417:0xBE:0xA9
-
-# Ghoul
-R:418:0xB4:0x8F
-
-# Mim, Betrayer of Turin
-R:419:0xB1:0x90
-
-# Hellblade
-R:420:0xB1:0x91
-
-# Killer fire beetle
-R:421:0xA1:0x80
-
-# Denethor, Steward of Gondor
-R:422:0xBE:0xAA
-
-# Creeping adamantite coins
-R:423:0x9D:0x84
-
-# Algroth
-R:424:0xA3:0x8C
-
-# Boromir, Son of Denethor
-R:425:0xBE:0xAB
-
-# Roper
-R:426:0xB9:0x80
-
-# Headless
-R:427:0xB1:0x92
-
-# Vibration hound
-R:428:0xA4:0x9C
-
-# Nexus hound
-R:429:0xA4:0x9D
-
-# Half-ogre
-R:430:0xA1:0x8E
-
-# Lokkak, the Ogre Chieftain
-R:431:0xA1:0x90
-
-# Vampire
-R:432:0xA3:0x9A
-
-# Gorgimaera
-R:433:0xA0:0x8D
-
-# Faramir, Son of Denethor
-R:434:0xBE:0xAC
-
-# Colbran
-R:435:0xA7:0x8E
-
-# Spirit naga
-R:436:0xA9:0x8C
-
-# Harry Goatleaf, Gatekeeper of Bree
-R:437:0xBE:0xAD
-
-# The Watcher of Cirith Ungol
-R:438:0xB1:0x8E
-
-# Stairway to Hell
-R:439:0xB1:0x94
-
-# 5-headed hydra
-R:440:0xA2:0x96
-
-# Tom Bombadil
-R:441:0xBE:0xAE
-
-# Wainrider
-R:442:0xAB:0x88
-
-# Seahorse
-R:443:0xBB:0x89
-
-# Cyclops
-R:444:0xBB:0x8A
-
-# Clairvoyant
-R:445:0xAB:0x86
-
-# Purple worm
-R:446:0xB9:0x82
-
-# Catoblepas
-R:447:0xAC:0x81
-
-# Lesser wall monster
-R:448:0xB1:0x96
-
-# Mage
-R:449:0xAB:0x8A
-
-# Mind flayer
-R:450:0xAB:0x8B
-
-# The Ultimate Dungeon Cleaner
-R:451:0xB1:0x97
-
-# The Mewlip Queen
-R:452:0xBE:0xAF
-
-# Basilisk
-R:453:0xA2:0x97
-
-# Snow-troll
-R:454:0xA3:0x8D
-
-# Fluithuin the Ogress, Consort of Morgoth
-R:455:0xBE:0xB0
-
-# Ulbandi the Ogress, Consort of Morgoth
-R:456:0xBE:0xB1
-
-# Naugladur, Lord of Nogrod
-R:457:0xBE:0xB2
-
-# Greater mimic
-R:458:0xB1:0x9A
-
-# Young blue dragon
-R:459:0xA6:0x84
-
-# Young white dragon
-R:460:0xA6:0x85
-
-# Young green dragon
-R:461:0xA6:0x86
-
-# Young bronze dragon
-R:462:0xA6:0x87
-
-# Androg the Outlaw
-R:463:0xBE:0xB3
-
-# Mithril golem
-R:464:0xA7:0x8F
-
-# Skeleton troll
-R:465:0xAC:0x8D
-
-# Amlach, son of Imlach
-R:466:0xBE:0xB4
-
-# Beorn, the Shape-Changer
-R:467:0xC4:0x99
-
-# Thorondor, Lord of Eagles
-R:468:0xBB:0x81
-
-# Giant blue ant
-R:469:0xA5:0x8B
-
-# Grave wight
-R:470:0xAD:0x9C
-
-# Shadow drake
-R:471:0xA6:0x88
-
-# Manticore
-R:472:0xA0:0x8E
-
-# Giant army ant
-R:473:0xAE:0x81
-
-# Killer slicer beetle
-R:474:0xA1:0x81
-
-# Gorgon
-R:475:0xBB:0x8D
-
-# Radagast the Brown
-R:476:0xBE:0xB5
-
-# Ghost
-R:477:0x9F:0x9E
-
-# Death watch beetle
-R:478:0xA1:0x82
-
-# Mountain ogre
-R:479:0xA1:0x8F
-
-# Nexus quylthulg
-R:480:0xA1:0x9B
-
-# Shelob, Spider of Darkness
-R:481:0xA3:0x86
-
-# Giant squid
-R:482:0xB9:0x83
-
-# Ghoulking
-R:483:0xAD:0x8C
-
-# Doombat
-R:484:0xB9:0x84
-
-# Easterling
-R:485:0xAB:0x8C
-
-# Memory moss
-R:486:0xA9:0x86
-
-# Storm giant
-R:487:0xA1:0x95
-
-# Spectator
-R:488:0xB1:0x9B
-
-# Bjorn the Warper
-R:489:0xC4:0x99
-
-# Vaire, the Weaver
-R:490:0xBE:0xB6
-
-# Half-troll
-R:491:0xA9:0x9E
-
-# Irmo of Lorien
-R:492:0xBE:0xB7
-
-# Bert the Stone Troll
-R:493:0xA3:0x90
-
-# Bill the Stone Troll
-R:494:0xA3:0x91
-
-# Tom the Stone Troll
-R:495:0xA3:0x92
-
-# Cave troll
-R:496:0xA3:0x8E
-
-# Este, the Gentle
-R:497:0xBE:0xB8
-
-# Barrow wight
-R:499:0xA4:0x81
-
-# Skeleton ettin
-R:500:0xC4:0x9A
-
-# Chaos drake
-R:501:0xA6:0x89
-
-# Law drake
-R:502:0xA6:0x8A
-
-# Balance drake
-R:503:0xA6:0x8B
-
-# Ethereal drake
-R:504:0xA6:0x8C
-
-# Groo, the Wanderer
-R:505:0xB1:0x9E
-
-# Nessa the Lithe
-R:506:0xBE:0xB9
-
-# Shade
-R:507:0xA4:0x89
-
-# Spectre
-R:508:0xA0:0x80
-
-# Water troll
-R:509:0xA3:0x93
-
-# Fire elemental
-R:510:0x9F:0x83
-
-# Water elemental
-R:512:0x9F:0x84
-
-# Multi-hued hound
-R:513:0xB2:0x81
-
-# Invisible stalker
-R:514:0x9F:0x85
-
-# Vana, the Ever-young
-R:515:0xBE:0xBA
-
-# Master thief
-R:516:0xAB:0x8E
-
-# The Watcher in the Water
-R:517:0xAF:0x95
-
-# Lich
-R:518:0xA1:0x83
-
-# Gas spore
-R:519:0xB2:0x8E
-
-# Master vampire
-R:520:0xA3:0x9B
-
-# Oriental vampire
-R:521:0xB2:0x83
-
-# Greater mummy
-R:522:0xA1:0x8A
-
-# Ingeborg, the Runemistress
-R:523:0xBE:0xBB
-
-# Giant grey scorpion
-R:524:0xA3:0x87
-
-# Earth elemental
-R:525:0x9F:0x86
-
-# Air elemental
-R:526:0x9F:0x87
-
-# Shimmering mold
-R:527:0xAF:0x81
-
-# Sarnrog
-R:528:0xBB:0x91
-
-# Malicious leprawn
-R:529:0xB2:0x85
-
-# Eog golem
-R:530:0xA7:0x90
-
-# Lindal Lossehelin
-R:531:0xBE:0xBC
-
-# Variag
-R:532:0x04:0x70
-
-# Headless ghost
-R:533:0xBB:0x92
-
-# Dread
-R:534:0xB9:0x87
-
-# Zizzo, Last of the Yeeks
-R:535:0xC3:0xAF
-
-# Gauth
-R:536:0xC4:0x9B
-
-# Smoke elemental
-R:537:0x9F:0x90
-
-# Olog
-R:538:0xA3:0x94
-
-# Halfling slinger
-R:539:0xB2:0x86
-
-# Gravity hound
-R:540:0xA4:0x9E
-
-# Acidic cytoplasm
-R:541:0xA8:0x97
-
-# Inertia hound
-R:542:0xA4:0x9F
-
-# Impact hound
-R:543:0xA5:0x80
-
-# Shardstorm
-R:544:0xC4:0x9C
-
-# Ooze elemental
-R:545:0x9F:0x88
-
-# Young black dragon
-R:546:0xA6:0x8D
-
-# Mumak
-R:547:0xAC:0x84
-
-# Giant fire ant
-R:548:0xA5:0x8A
-
-# Cold-drake
-R:549:0xA6:0x8E
-
-# Xorn
-R:550:0xA4:0x8F
-
-# Rogrog the Black Troll
-R:551:0xA3:0x8F
-
-# Erianyth, the Sorceress
-R:552:0xA7:0x91
-
-# Phantom
-R:553:0xB2:0x87
-
-# Grey wraith
-R:554:0xA4:0x82
-
-# Revenant
-R:555:0xA4:0x88
-
-# Young multi-hued dragon
-R:556:0xA6:0x8F
-
-# Karrazix the Brave
-R:557:0x9E:0x89
-
-# Colossus
-R:558:0xB2:0x89
-
-# Young gold dragon
-R:559:0xA6:0x90
-
-# Blue drake
-R:560:0xA6:0x91
-
-# Green drake
-R:561:0xA6:0x92
-
-# Bronze drake
-R:562:0xA6:0x93
-
-# Young red dragon
-R:563:0xA6:0x94
-
-# Sir Physt
-R:564:0x0B:0x56
-
-# Trapper
-R:565:0xAD:0x9F
-
-# Adanrog
-R:566:0xA0:0x98
-
-# Time bomb
-R:567:0xBB:0x96
-
-# Rawrog
-R:568:0xAD:0x90
-
-# Nick LeYeek, Second Last of the Yeeks
-R:569:0xC3:0xB0
-
-# Ice elemental
-R:570:0x9F:0x8A
-
-# Necromancer
-R:571:0xB2:0x8C
-
-# Slappy, Abbess of Pain
-R:572:0xBE:0xBD
-
-# Lorgan, Chief of the Easterlings
-R:573:0xB2:0x8D
-
-# Snow tiger
-R:574:0xC2:0xB0
-
-# Mummified troll
-R:575:0xBB:0x97
-
-# Storm of Unmagic
-R:576:0xC4:0x9D
-
-# Crypt thing
-R:577:0xA4:0x80
-
-# Chaos butterfly
-R:578:0xBB:0x98
-
-# Time elemental
-R:579:0xB2:0x8F
-
-# Blue yeek
-R:580:0xAD:0x87
-
-# The Queen Ant
-R:581:0xA5:0x8E
-
-# Will o' the wisp
-R:582:0x9F:0x8B
-
-# Brown yeek
-R:583:0xAD:0x88
-
-# Magma elemental
-R:584:0x9F:0x8C
-
-# Black pudding
-R:585:0xA8:0x98
-
-# Killer iridescent beetle
-R:586:0xB4:0x90
-
-# Nexus vortex
-R:587:0xAE:0x80
-
-# Plasma vortex
-R:588:0xAC:0x98
-
-# Fire-drake
-R:589:0xA6:0x95
-
-# Golden drake
-R:590:0xA6:0x96
-
-# Crystal drake
-R:591:0xA6:0x97
-
-# Black drake
-R:592:0xA6:0x98
-
-# Multi-hued drake
-R:593:0xA6:0x99
-
-# Master yeek
-R:594:0xAD:0x8A
-
-# Orfax, son of Boldor
-R:595:0xAD:0x89
-
-# Boldor, King of the Yeeks
-R:596:0xAD:0x8B
-
-# Black Numenorean
-R:597:0xAB:0x94
-
-# Castamir the Usurper
-R:598:0xB2:0x90
-
-# Time vortex
-R:599:0xAC:0x99
-
-# Shimmering vortex
-R:600:0xAC:0x9A
-
-# Ancient blue dragon
-R:601:0x9E:0x88
-
-# Ancient bronze dragon
-R:602:0x9E:0x89
-
-# Beholder
-R:603:0xA6:0x9F
-
-# Emperor wight
-R:604:0xA4:0x83
-
-# Giant tree ant
-R:605:0xC4:0xB7
-
-# Vargo, Tyrant of Fire
-R:606:0x9F:0x8D
-
-# Black wraith
-R:607:0xA4:0x84
-
-# Giant yellow ant
-R:608:0xC4:0xB8
-
-# Giant green ant
-R:609:0xC4:0xB9
-
-# Aquatic ant
-R:610:0xC4:0xBA
-
-# Monastic lich
-R:611:0xA1:0x87
-
-# Nether wraith
-R:612:0xA4:0x85
-
-# Hellhound
-R:613:0xAD:0x96
-
-# 7-headed hydra
-R:614:0xA2:0x99
-
-# Waldern, King of Water
-R:615:0x9F:0x8E
-
-# Termite
-R:616:0xC4:0xB6
-
-# Ancient white dragon
-R:617:0x9E:0x8A
-
-# Ancient green dragon
-R:618:0x9E:0x8B
-
-# Giant snow bat
-R:619:0xC4:0xBB
-
-# Eldrak
-R:620:0xA3:0x97
-
-# Ettin
-R:621:0xA3:0x96
-
-# Night mare
-R:622:0xAC:0x83
-
-# Vampire lord
-R:623:0xA3:0x9C
-
-# Ancient black dragon
-R:624:0x9E:0x8C
-
-# Weird fume
-R:625:0xAF:0x80
-
-# Giant grey bat
-R:626:0xC4:0xBC
-
-# Giant silver bat
-R:627:0xC4:0xBD
-
-# Giant yellow bat
-R:628:0xC4:0xBE
-
-# Shadowfax, steed of Gandalf
-R:629:0xBB:0x9E
-
-# Spirit troll
-R:630:0xA3:0x98
-
-# War troll
-R:631:0xB2:0x94
-
-# Disenchanter worm mass
-R:632:0xAD:0x86
-
-# Rotting quylthulg
-R:633:0xA1:0x9C
-
-# Lesser titan
-R:634:0xA1:0x97
-
-# 9-headed hydra
-R:635:0xA2:0x99
-
-# Enchantress
-R:636:0xAB:0x96
-
-# Ranger chieftain
-R:637:0xAB:0x97
-
-# Sorcerer
-R:638:0xAB:0x98
-
-# Xaren
-R:639:0xA4:0x90
-
-# Giant green bat
-R:640:0xC4:0xBF
-
-# Death vortex
-R:641:0xC3:0xA5
-
-# Gas vortex
-R:642:0xC3:0xA6
-
-# Death drake
-R:643:0x9E:0x8D
-
-# Ancient red dragon
-R:644:0x9E:0x8E
-
-# Ancient gold dragon
-R:645:0x9E:0x8F
-
-# Great crystal drake
-R:646:0x9E:0x90
-
-# Mana vortex
-R:647:0xC3:0xA7
-
-# Helcungol
-R:648:0xB2:0x95
-
-# Lygrog
-R:649:0xA0:0x99
-
-# Slow vortex
-R:650:0xC3:0xA8
-
-# Nether vortex
-R:651:0xC3:0xA9
-
-# Puzzling vortex
-R:652:0xC3:0xAA
-
-# Dark yeek
-R:653:0xC3:0xAB
-
-# Judge Fire
-R:654:0xAB:0x93
-
-# White yeek
-R:655:0xC3:0xAC
-
-# Judge Mortis
-R:656:0xBC:0x82
-
-# Dark elven sorcerer
-R:657:0xA8:0x81
-
-# Master lich
-R:658:0xA1:0x84
-
-# Gray yeek
-R:659:0xC3:0xAD
-
-# Eol, the Dark Elf
-R:660:0xB2:0x99
-
-# Yellow yeek
-R:661:0xC3:0xAE
-
-# Adventurer yeek
-R:662:0xAD:0x88
-
-# Dark mushroom patch
-R:663:0xC3:0xA1
-
-# Undead beholder
-R:664:0xA7:0x80
-
-# Shadow
-R:665:0xA0:0x81
-
-# Iron lich
-R:666:0xB2:0x9C
-
-# Dread
-R:667:0xB9:0x87
-
-# Greater basilisk
-R:668:0xBC:0x83
-
-# White mushroom patch
-R:669:0xC3:0xA0
-
-# Brown mushroom patch
-R:670:0xC3:0xA2
-
-# Silver mushroom patch
-R:671:0xC3:0xA3
-
-# Green mushroom patch
-R:672:0xC3:0xA4
-
-# Mumak
-R:673:0xAC:0x82
-
-# Judge Fear
-R:674:0xA7:0x88
-
-# Ancient multi-hued dragon
-R:675:0x9E:0x91
-
-# Ethereal dragon
-R:676:0x9E:0x92
-
-# Dark elemental
-R:677:0xC3:0xB1
-
-# Slow elemental
-R:678:0xC3:0xB2
-
-# Quaker, Master of Earth
-R:679:0x9F:0x8F
-
-# Death leprawn
-R:680:0xA7:0x9E
-
-# Chaos elemental
-R:681:0xC3:0xB4
-
-# Confusion elemental
-R:682:0xC3:0xB3
-
-# Large blue snake
-R:683:0xC2:0xA8
-
-# Large silver snake
-R:684:0xC2:0xA9
-
-# Large purple snake
-R:685:0xC2:0xAA
-
-# Judge Death
-R:686:0xBC:0x99
-
-# Ariel, Queen of Air
-R:687:0x9F:0x91
-
-# 11-headed hydra
-R:688:0xA2:0x9A
-
-# Patriarch
-R:689:0xAB:0x9A
-
-# Dreadmaster
-R:690:0xA0:0x85
-
-# Drolem
-R:691:0xA7:0x92
-
-# Scatha the Worm
-R:692:0xAD:0x9B
-
-# Warrior of the Dawn
-R:693:0xB2:0x9E
-
-# Lesser black reaver
-R:694:0xA4:0x87
-
-# Large red snake
-R:695:0xC2:0xAB
-
-# Grand master thief
-R:696:0xC2:0x8A
-
-# Smaug the Golden
-R:697:0x9E:0x93
-
-# The Stormbringer
-R:698:0xB3:0x80
-
-# Knight Templar
-R:699:0xB3:0x81
-
-# Large eel
-R:700:0xC2:0xAC
-
-# Dracolich
-R:701:0x9E:0x95
-
-# Greater titan
-R:702:0xA1:0x98
-
-# Dracolisk
-R:703:0x9E:0x94
-
-# Winged Horror
-R:704:0xC4:0x9E
-
-# Killer gray beetle
-R:705:0xC2:0xA1
-
-# Killer orange beetle
-R:706:0xC2:0xA2
-
-# Killer blue beetle
-R:707:0xC2:0xA3
-
-# Ent
-R:708:0xBC:0x86
-
-# Rock giant
-R:709:0xBC:0x9D
-
-# Itangast the Fire Drake
-R:710:0x9E:0x96
-
-# Death mold
-R:711:0xA9:0x87
-
-# Killer silver beetle
-R:712:0xC2:0xA4
-
-# Killer green beetle
-R:713:0xC2:0xA5
-
-# Quickbeam, the Ent
-R:714:0xBC:0x9F
-
-# Glaurung, Father of the Dragons
-R:715:0xAD:0x9A
-
-# Behemoth
-R:716:0xBD:0x80
-
-# Killer aquatic beetle
-R:717:0xC2:0xA6
-
-# Greater wall monster
-R:718:0xB3:0x84
-
-# Menelrog
-R:719:0xAD:0x91
-
-# Mornungol
-R:720:0xAD:0x95
-
-# Killer tree beetle
-R:721:0xC2:0xA7
-
-# Nightwing
-R:722:0xAD:0x9D
-
-# 6-headed hydra
-R:723:0xC3:0xB9
-
-# Nether hound
-R:724:0xA5:0x81
-
-# Time hound
-R:725:0xA5:0x82
-
-# Plasma hound
-R:726:0xA5:0x83
-
-# Demonic quylthulg
-R:727:0xA1:0x9D
-
-# Great Storm Worm
-R:728:0x9E:0x97
-
-# Ulik the Troll
-R:729:0xBD:0x81
-
-# 8-headed hydra
-R:730:0xC3:0xBA
-
-# Oathbreaker
-R:731:0xBD:0x82
-
-# 10-headed hydra
-R:732:0xC3:0xBB
-
-# 12-headed hydra
-R:733:0xC3:0xBC
-
-# 13-headed hydra
-R:734:0xC3:0xBD
-
-# 14-headed hydra
-R:735:0xC3:0xBE
-
-# 15-headed hydra
-R:736:0xC3:0xBF
-
-# Killer hydra
-R:737:0xC2:0xA0
-
-# Old Sorcerer
-R:738:0x9C:0x8A
-
-# Ethereal hound
-R:739:0xB3:0x8A
-
-# Lesser kraken
-R:740:0xBD:0x83
-
-# Great Ice Worm
-R:741:0x9E:0x98
-
-# Demilich
-R:742:0xA4:0x8A
-
-# The Phoenix
-R:743:0x9D:0x98
-
-# Nightcrawler
-R:744:0xA4:0x8C
-
-# Forest ogre
-R:745:0xC3:0xB8
-
-# Rebel ogre
-R:746:0xA1:0x8B
-
-# Rebel giant
-R:747:0xA1:0x91
-
-# Hand druj
-R:748:0xAC:0x8E
-
-# Eye druj
-R:749:0xAC:0x8F
-
-# Skull druj
-R:750:0xAC:0x90
-
-# Chaos vortex
-R:751:0xAC:0x9B
-
-# Aether vortex
-R:752:0xAC:0x9C
-
-# Spider quylthulg
-R:753:0xC3:0xB5
-
-# Canine quylthulg
-R:754:0xC3:0xB6
-
-# Thuringwethil, the Vampire Messenger
-R:755:0xA3:0x9D
-
-# Great Worm of Fire
-R:756:0x9E:0x99
-
-# Aquatic quylthulg
-R:757:0xC3:0xB7
-
-# Adventurer quylthulg
-R:758:0xA1:0x9A
-
-# Draconic quylthulg
-R:759:0xA1:0x9E
-
-# White hulk
-R:760:0xC4:0xA0
-
-# Death hulk
-R:761:0xC4:0xA1
-
-# Fundin Bluecloak
-R:762:0xBE:0x91
-
-# Black Balrog
-R:763:0xC0:0xA9
-
-# Orange hulk
-R:764:0xC4:0xA2
-
-# Fire hulk
-R:765:0xC4:0xA3
-
-# Ancalagon the Black
-R:766:0x9E:0x9A
-
-# Forest hulk
-R:767:0xC4:0xA4
-
-# Nightwalker
-R:768:0xBD:0x85
-
-# Night hulk
-R:769:0xC4:0xA5
-
-# Silver hulk
-R:770:0xC4:0xA6
-
-# Saruman of Many Colours
-R:771:0xAB:0x9E
-
-# Harowen the Black Hand
-R:772:0xBE:0x94
-
-# Blue Balrog
-R:773:0xC0:0xAB
-
-# Dreadlord
-R:774:0xA0:0x86
-
-# Greater kraken
-R:775:0xBD:0x86
-
-# Archlich
-R:776:0xA4:0x8D
-
-# Tevildo, Prince of Cats
-R:777:0xB3:0x8F
-
-# Jabberwock
-R:778:0xC5:0x82
-
-# Chaos hound
-R:779:0xA5:0x85
-
-# Chaos hulk
-R:780:0xC4:0xA7
-
-# Beholder hive-mother
-R:781:0xBE:0x96
-
-# Leviathan
-R:782:0xBD:0x87
-
-# Great Worm of Chaos
-R:783:0x9E:0x9B
-
-# Great Worm of Law
-R:784:0x9E:0x9C
-
-# Great Worm of Balance
-R:785:0x9E:0x9D
-
-# Yellow hulk
-R:786:0xC4:0xA8
-
-# White Balrog
-R:787:0xC0:0xAA
-
-# Red hulk
-R:788:0xC4:0xA9
-
-# Trone, the Rebel Thunderlord
-R:789:0x08:0x42
-
-# Great Worm of Many Colours
-R:790:0xB3:0x93
-
-# Marda, rider of gold Laronth
-R:791:0xB3:0x94
-
-# Tselakus, the Dreadlord
-R:792:0xA0:0x87
-
-# Sky Drake
-R:793:0xB3:0x95
-
-# Eilinel the Entrapped
-R:794:0xA0:0x83
-
-# Dagorrog
-R:795:0xC5:0x84
-
-# Green hulk
-R:796:0xC4:0xAA
-
-# Blue hulk
-R:797:0xC4:0xAB
-
-# Black reaver
-R:798:0xA1:0x85
-
-# Master mindcrafter
-R:799:0xAB:0x9F
-
-# Greater demonic quylthulg
-R:800:0xA1:0x9F
-
-# Greater draconic quylthulg
-R:801:0xA2:0x80
-
-# Greater rotting quylthulg
-R:802:0xA2:0x81
-
-# Invisible Horror
-R:803:0xBC:0x88
-
-# Feagwath, the Undead Sorcerer
-R:804:0xA1:0x86
-
-# Silver wraith
-R:805:0xA3:0x9F
-
-# Adventurer wraith
-R:806:0xA4:0x81
-
-# Balrog Captain
-R:807:0xC0:0xAC
-
-# Ungoliant, the Unlight
-R:808:0xA3:0x88
-
-# Vampire orc
-R:809:0xC0:0xA0
-
-# Vampire yeek
-R:810:0xC0:0xA1
-
-# Aether hound
-R:811:0xA5:0x86
-
-# Greater Balrog
-R:812:0xC0:0xAD
-
-# Vampire ogre
-R:813:0xC0:0xA2
-
-# Vampire troll
-R:814:0xC0:0xA3
-
-# Vampire dwarf
-R:815:0xC0:0xA4
-
-# Vampire elf
-R:816:0xC0:0xA5
-
-# Vampire gnome
-R:817:0xC0:0xA6
-
-# The Mouth of Sauron
-R:818:0xBE:0x9E
-
-# The Necromancer of Dol Guldur
-R:819:0xB3:0x9E
-
-# Lisa, rider of gold Romth
-R:820:0xB3:0x9F
-
-# Master quylthulg
-R:821:0xA2:0x82
-
-# Qlzqqlzuup, the Lord of Flesh
-R:822:0xA2:0x83
-
-# Vampire adventurer
-R:823:0xA3:0x9A
-
-# Flare, rider of bronze Moonth
-R:824:0xB4:0x80
-
-# Maeglin, the Traitor of Gondolin
-R:825:0xA4:0x8E
-
-# Snow-frog
-R:826:0xC1:0xBE
-
-# Swamp lizard
-R:827:0xC1:0xBD
-
-# Giant silver frog
-R:828:0xC1:0xBE
-
-# Greater Hellhound
-R:829:0x9E:0x83
-
-# Cantoras, the Skeletal Lord
-R:830:0xAC:0x91
-
-# Blue lizard
-R:831:0xC1:0xBF
-
-# Death dragonfly
-R:832:0xC1:0xB3
-
-# Giant swamp dragonfly
-R:833:0xC1:0xB4
-
-# Giant red dragonfly
-R:834:0xC1:0xB5
-
-# Giant forest dragonfly
-R:835:0xC1:0xB6
-
-# Giant blue dragonfly
-R:836:0xC1:0xB7
-
-# Giant brown dragonfly
-R:837:0xC1:0xB8
-
-# The Tarrasque
-R:838:0xBC:0x93
-
-# Lungorthin, the Balrog of White Fire
-R:839:0xBF:0x86
-
-# Draugluin, Sire of All Werewolves
-R:840:0xBF:0x87
-
-# Giant silver dragonfly
-R:841:0xC1:0xB9
-
-# Giant violet dragonfly
-R:842:0xC1:0xBA
-
-# Giant pink dragonfly
-R:843:0xC1:0xBB
-
-# Vecna, the Emperor Lich
-R:844:0xB4:0x85
-
-# Aquatic dragonfly
-R:845:0xC1:0xBC
-
-# Giant red mouse
-R:846:0xC1:0xB0
-
-# Great Wyrm of Power
-R:847:0xB4:0x87
-
-# Giant blue mouse
-R:848:0xC1:0xB1
-
-# Giant yellow mouse
-R:849:0xC1:0xB2
-
-# Carcharoth, the Jaws of Thirst
-R:850:0x9E:0x86
-
-# Giant pink rat
-R:851:0xC1:0xAE
-
-# Giant tree rat
-R:852:0xC1:0xAF
-
-# Huan, Wolfhound of the Valar
-R:853:0x9E:0x87
-
-# Polar bear
-R:854:0xC1:0xA8
-
-# Blue bear
-R:855:0xC1:0xA9
-
-# Gothmog, the High Captain of Balrogs
-R:856:0xAD:0x98
-
-# Old bear
-R:857:0xC1:0xAA
-
-# Sarko, rider of gold Foronth
-R:858:0xB4:0x8C
-
-# Teddy bear
-R:859:0xC1:0xAB
-
-# Sauron, the Sorcerer
-R:860:0xAC:0x80
-
-# DarkGod, the Mighty Coder of Hell
-R:861:0xC0:0x9D
-
-# Morgoth, Lord of Darkness
-R:862:0xB4:0x8E
-
-# Human Warrior
-R:863:0xB5:0x80
-
-# Elven archer
-R:864:0xB5:0x81
-
-# Dwarven warrior
-R:865:0xB5:0x82
-
-# Elite uruk
-R:866:0xB5:0x83
-
-# Fire bear
-R:867:0xC1:0xAC
-
-# The Variant Maintainer
-R:868:0xBC:0x8B
-
-# Random Number Generator
-R:869:0xBC:0x8A
-
-# Rocket mine
-R:870:0xBD:0x88
-
-# Bouncing mine
-R:871:0xBD:0x89
-
-# Durin's Bane
-R:872:0xBF:0x89
-
-# Aquatic bear
-R:873:0xC1:0xAD
-
-# Rot jelly
-R:874:0xBD:0x8A
-
-# Death
-R:875:0xBD:0x8B
-
-# Famine
-R:876:0xBD:0x8D
-
-# Pestilence
-R:877:0xBD:0x8C
-
-# War
-R:878:0xBD:0x8E
-
-# Pike
-R:879:0xBD:0x8F
-
-# Electric eel
-R:880:0xBD:0x90
-
-# Giant crayfish
-R:881:0xBD:0x91
-
-# Mermaid
-R:882:0xBD:0x92
-
-# Box jellyfish
-R:883:0xBA:0x81
-
-# Giant piranha
-R:884:0xB6:0x9D
-
-# Piranha
-R:885:0xB6:0x9D
-
-# Swamp naga
-R:886:0xC1:0xA2
-
-# Ocean naga
-R:887:0xC1:0xA3
-
-# Snail
-R:888:0xBE:0xBE
-
-# Whale
-R:889:0xBA:0x98
-
-# Sand mite
-R:890:0xBD:0x98
-
-# Octopus
-R:891:0xBD:0x99
-
-# Giant octopus
-R:892:0xBD:0x9A
-
-# Eye of the deep
-R:893:0xBD:0x9B
-
-# Murk dweller
-R:894:0xBF:0x8B
-
-# Drowned soul
-R:895:0xBF:0x8C
-
-# Tiger shark
-R:896:0xBF:0x8D
-
-# Hammerhead shark
-R:897:0xBA:0x90
-
-# Great white shark
-R:898:0xBB:0x82
-
-# Aquatic golem
-R:899:0xBF:0x8E
-
-# Brown naga
-R:900:0xC1:0xA4
-
-# White shark
-R:901:0xBB:0x82
-
-# Scrag
-R:902:0xBF:0x91
-
-# Jaws
-R:903:0xBB:0x8C
-
-# Silver naga
-R:904:0xC1:0xA5
-
-# Aquatic elven warrior
-R:905:0xBF:0x94
-
-# Aquatic elven mage
-R:906:0xBF:0x95
-
-# Stargazer
-R:907:0xBF:0x96
-
-# Elder stargazer
-R:908:0xBF:0x97
-
-# Flounder
-R:909:0xBF:0x98
-
-# Giant turtle
-R:910:0xBF:0x99
-
-# Hatchling dragon turtle
-R:911:0xBF:0x9A
-
-# Young dragon turtle
-R:912:0xBF:0x9B
-
-# Mature dragon turtle
-R:913:0xBF:0x9C
-
-# Ancient dragon turtle
-R:914:0xBF:0x9D
-
-# Fastitocalon
-R:915:0xBF:0x9E
-
-# Undead stargazer
-R:916:0xBF:0x9F
-
-# Killer whale
-R:917:0xB9:0x9C
-
-# Merrow
-R:918:0xC5:0x85
-
-# Water naga
-R:919:0xC0:0x81
-
-# Night naga
-R:920:0xC1:0xA6
-
-# Tree naga
-R:921:0xC1:0xA7
-
-# Moby Dick, the White Whale
-R:922:0xC0:0x80
-
-# Aquatic hound
-R:923:0xC0:0x85
-
-# Gaurrog
-R:924:0xC0:0x86
-
-# Adventurer naga
-R:925:0xA9:0x88
-
-# White mold
-R:926:0xC2:0xBD
-
-# Silver mold
-R:927:0xC2:0xBE
-
-# Mathilde
-R:928:0xBD:0x9C
-
-# Child spirit
-R:929:0xBD:0x9D
-
-# Young spirit
-R:930:0xBD:0x9E
-
-# Mature spirit
-R:931:0xBD:0x9F
-
-# Experienced spirit
-R:932:0xBE:0x80
-
-# Wise spirit
-R:933:0xBE:0x81
-
-# Fangorn the Treebeard, Lord of the Ents
-R:934:0xC0:0x8A
-
-# Gandalf the Grey
-R:935:0xC0:0x8B
-
-# Nar, the Dwarf
-R:936:0xC0:0x8C
-
-# Apprentice mindcrafter
-R:937:0xAA:0x9A
-
-# Great Swamp Worm
-R:938:0xC5:0x86
-
-# Great Bile Worm
-R:939:0xC5:0x87
-
-# Blue Firebird
-R:940:0xBE:0x82
-
-# Green Firebird
-R:941:0xBE:0x83
-
-# Brown Firebird
-R:942:0xBE:0x84
-
-# Bronze Firebird
-R:943:0xBE:0x85
-
-# Gold Firebird
-R:944:0xBE:0x86
-
-# High-elven ranger
-R:945:0xBE:0x87
-
-# Uvatha the Horseman
-R:946:0xC0:0x90
-
-# Adunaphel the Quiet
-R:947:0xC0:0x91
-
-# Akhorahil the Blind
-R:948:0xC0:0x92
-
-# Ren the Unclean
-R:949:0xC0:0x93
-
-# Ji Indur Dawndeath
-R:950:0xC0:0x94
-
-# Dwar, Dog Lord of Waw
-R:951:0xC0:0x95
-
-# Hoarmurath of Dir
-R:952:0xC0:0x96
-
-# Khamul, the Black Easterling
-R:953:0xC0:0x97
-
-# The Witch-King of Angmar
-R:954:0xC0:0x98
-
-# Green Thunderlord
-R:955:0xB3:0x96
-
-# Blue Thunderlord
-R:956:0xB3:0x8E
-
-# Brown Thunderlord
-R:957:0xB3:0x98
-
-# Bronze Thunderlord
-R:958:0xB3:0x98
-
-# Gold Thunderlord
-R:959:0xB3:0x94
-
-# Blood Sprout
-R:960:0xBE:0x88
-
-# Gorlim the Unhappy
-R:961:0xC0:0x99
-
-# Pink mold
-R:962:0xC2:0xBF
-
-# Aranea
-R:963:0xC1:0x9A
-
-# Elder aranea
-R:964:0xC0:0x9A
-
-# Giant brown tick
-R:965:0xC5:0x88
-
-# Wavelord
-R:966:0xC0:0x9C
-
-# Novice possessor (soul)
-R:967:0xC4:0x86
-
-# Bat of Gorgoroth
-R:968:0xC5:0x97
-
-# The Princess
-R:969:0xC5:0x98
-
-# Merton Proudfoot, the lost hobbit
-R:970:0xC5:0x99
-
-# The Wight-King of the Barrow-downs
-R:971:0xA4:0x81
-
-# Adventurer
-R:972:0xC5:0x9B
-
-# Experienced possessor (soul)
-R:973:0xC5:0x9C
-
-# Old possessor (soul)
-R:974:0xC5:0x9D
-
-# Tree mold
-R:975:0xC1:0xA0
-
-# Bronze dragon worm
-R:976:0xC6:0x80
-
-# Gold dragon worm
-R:977:0xC5:0x9F
-
-# Defenceless Mold
-R:978:0xBC:0x89
-
-# Blue mold
-R:979:0xC1:0xA1
-
-# Ar-Pharazon the Golden
-R:980:0xC0:0x9E
-
-# Doppleganger
-R:981:0x97:0x8C
-
-# Marylene, Heartbreakeress of the Netherworld
-R:982:0xC1:0x8D
-
-# Adventurer mold
-R:983:0xA9:0x81
-
-# Gnome paladin
-R:984:0xC2:0xB7
-
-# Bandobras Took
-R:985:0xA7:0x9B
-
-# 3-headed hydra
-R:986:0xA2:0x94
-
-# Uldor the Accursed
-R:987:0xAB:0x95
-
-# Mystic
-R:988:0xAB:0x9B
-
-# Elder vampire
-R:989:0xA1:0x99
-
-# Ulfang the Black
-R:990:0xAA:0x96
-
-# Demonologist
-R:991:0xA8:0x82
-
-# Ungorrog
-R:992:0xA2:0x9C
-
-# Faunungol
-R:993:0xA2:0x8E
-
-# Naurungol
-R:994:0xC2:0x8E
-
-# Sererrog
-R:995:0xC2:0x8F
-
-# Red Balrog
-R:996:0xC0:0xA8
-
-# Master mystic
-R:997:0xAA:0x94
-
-# Grand master mystic
-R:998:0xAB:0x9D
-
-# Morgulrog
-R:999:0xA0:0x84
-
-# Novice mindcrafter
-R:1000:0xAA:0x9A
-
-# Gnome lord
-R:1001:0xC2:0xB8
-
-# Great Worm of Perplexity
-R:1002:0xC2:0x92
-
-# Gnome mystic
-R:1003:0xC2:0xBA
-
-# Great Worm of Thunder
-R:1004:0xC5:0x8A
-
-# Silver mouse
-R:1005:0xC5:0x8B
-
-# The Rat King
-R:1006:0xC2:0x96
-
-# Gnome priest
-R:1007:0xC2:0xB9
-
-# Black midge
-R:1008:0xC2:0x98
-
-# Fire Phantom
-R:1009:0xC2:0x99
-
-# The Insane Player
-R:1010:0x92:0x81
-
-# Gnome rogue
-R:1011:0xC2:0xBB
-
-# Vermicious Knid
-R:1012:0xC2:0x9B
-
-# Bone golem
-R:1013:0xC2:0x9C
-
-# Gnome warrior
-R:1014:0xC2:0xBC
-
-# Bronze golem
-R:1015:0xC5:0x8C
-
-# Wizard leprawn
-R:1016:0xC2:0xB5
-
-# Kender
-R:1017:0xC2:0xB6
-
-# Adventurer gnome
-R:1018:0xC2:0xBC
-
-# Tree cat
-R:1019:0xC2:0xB1
-
-# Night cat
-R:1020:0xC2:0xB2
-
-# Leopard
-R:1021:0xC2:0xB3
-
-# Cheshire cat
-R:1022:0xC2:0xB4
-
-# Blue dragon worm
-R:1023:0xC3:0x8E
-
-# White dragon worm
-R:1024:0xC3:0x8F
-
-# Green dragon worm
-R:1025:0xC3:0x92
-
-# Black dragon worm
-R:1026:0xC3:0x91
-
-# Red dragon worm
-R:1027:0xC3:0x90
-
-# Multi-hued dragon worm
-R:1028:0xC3:0x93
-
-# The Minotaur of the Labyrinth
-R:1029:0xC3:0x94
-
-# The Sandworm Queen
-R:1030:0xC3:0x9B
-
-# Sandworm
-R:1031:0xC3:0x9C
-
-# Tik'srvzllat
-R:1032:0xC3:0x9D
-
-# The Glass Golem
-R:1033:0xC5:0x8E
-
-# Elenwe the Lost
-R:1034:0xBE:0xBF
-
-# Golgarach, the Living Rock
-R:1035:0x80:0x84
-
-# Sanctimonious-looking preacher
-R:1036:0xC2:0xAD
-
-# Weary-looking traveller
-R:1037:0xC2:0xAE
-
-# Water hound
-R:1038:0xC6:0x88
-
-# Improv, the mighty MoLD
-R:1039:0xC6:0x8E
-
-# Emperor mimic
-R:1040:0xC6:0x9C
-
-# Melinda Proudfoot
-R:1041:0x88:0xAA
-
-# Thrain, the King Under the Mountain
-R:1042:0x88:0xAB
-
-# Fire golem
-R:1043:0x8C:0xA0
-
-# Melkor, Lord of Darkness
-R:1044:0x8C:0xA1
-
-# Spirit
-R:1045:0x92:0x9F
-
-# Spirit
-R:1046:0x92:0xA0
-
-# Spirit
-R:1047:0x92:0xA1
-
-# Spirit
-R:1048:0x92:0xA2
-
-# Spirit
-R:1049:0x92:0xA3
-
-# Spirit
-R:1050:0x92:0xA4
-
-# Spirit
-R:1051:0x92:0xA5
-
-# Spirit
-R:1052:0x92:0xA6
-
-# Spirit
-R:1053:0x92:0xA7
-
-# Spirit
-R:1054:0x92:0xA8
-
-# Spirit
-R:1055:0x92:0xA9
-
-# Spirit
-R:1056:0x92:0xAA
-
-# Spirit
-R:1057:0x92:0xA3
-
-# Spirit
-R:1058:0x92:0xAB
-
-# Spirit
-R:1059:0x92:0xAC
-
-# Spirit
-R:1060:0x92:0xAD
-
-# Spirit
-R:1061:0x92:0xAE
-
-# Spirit
-R:1062:0x92:0xAF
-
-# Spirit
-R:1063:0x92:0xB0
-
-# Spirit
-R:1064:0x92:0xB1
-
-# Spirit
-R:1065:0x92:0xB2
-
-# Spirit
-R:1066:0x92:0xB3
-
-# Spirit
-R:1067:0x92:0xB4
-
-# Spirit
-R:1068:0x92:0xB5
-
-# Spirit
-R:1069:0x92:0xB6
-
-# Spirit
-R:1070:0x92:0xB7
-
-# Spirit
-R:1071:0x92:0xB8
-
-# Spirit
-R:1072:0x92:0xB9
-
-# Spirit
-R:1073:0x92:0xBA
-
-# Spirit
-R:1074:0x92:0xBB
-
-# Spirit
-R:1075:0x92:0xBC
-
-# Neil, the Sorceror
-R:1076:0x0A:0x68
-
-# Swamp wight
-R:1077:0xC0:0xA7
-
-# Knight of the Swan
-R:1078:0xC2:0xAF
-
-# Spells (*)
-S:48:0x91/0x88
-S:49:0x91/0x89
-S:50:0x91/0x8A
-S:51:0x91/0x8B
-S:52:0x91/0x8C
-S:53:0x91/0x8D
-S:54:0x91/0x8E
-S:55:0x91/0x8F
-S:56:0x91/0x90
-S:57:0x91/0x91
-S:58:0x91/0x92
-S:59:0x91/0x93
-S:60:0x91/0x94
-S:61:0x91/0x95
-S:62:0x91/0x96
-S:63:0x91/0x97
-
-# Spells (|)
-S:64:0x8F/0x80
-S:65:0x8F/0x84
-S:66:0x8F/0x88
-S:67:0x8F/0x8C
-S:68:0x8F/0x90
-S:69:0x8F/0x94
-S:70:0x8F/0x98
-S:71:0x8F/0x9C
-S:72:0x90/0x80
-S:73:0x90/0x84
-S:74:0x90/0x88
-S:75:0x90/0x8C
-S:76:0x90/0x90
-S:77:0x90/0x94
-S:78:0x90/0x98
-S:79:0x90/0x9C
-
-# Spells (-)
-S:80:0x8F/0x81
-S:81:0x8F/0x85
-S:82:0x8F/0x89
-S:83:0x8F/0x8D
-S:84:0x8F/0x91
-S:85:0x8F/0x95
-S:86:0x8F/0x99
-S:87:0x8F/0x9D
-S:88:0x90/0x81
-S:89:0x90/0x85
-S:90:0x90/0x89
-S:91:0x90/0x8D
-S:92:0x90/0x91
-S:93:0x90/0x95
-S:94:0x90/0x99
-S:95:0x90/0x9D
-
-# Spells (/)
-S:96:0x8F/0x82
-S:97:0x8F/0x86
-S:98:0x8F/0x8A
-S:99:0x8F/0x8E
-S:100:0x8F/0x92
-S:101:0x8F/0x96
-S:102:0x8F/0x9A
-S:103:0x8F/0x9E
-S:104:0x90/0x82
-S:105:0x90/0x86
-S:106:0x90/0x8A
-S:107:0x90/0x8E
-S:108:0x90/0x92
-S:109:0x90/0x96
-S:110:0x90/0x9A
-S:111:0x90/0x9E
-
-# Spells (\)
-S:112:0x8F/0x83
-S:113:0x8F/0x87
-S:114:0x8F/0x8B
-S:115:0x8F/0x8F
-S:116:0x8F/0x93
-S:117:0x8F/0x97
-S:118:0x8F/0x9B
-S:119:0x8F/0x9F
-S:120:0x90/0x83
-S:121:0x90/0x87
-S:122:0x90/0x8B
-S:123:0x90/0x8F
-S:124:0x90/0x93
-S:125:0x90/0x97
-S:126:0x90/0x9B
-S:127:0x90/0x9F
-
-# Amulets (")
-S:128:0x87/0x87
-S:129:0x87/0x80
-S:130:0x87/0x88
-S:131:0x87/0x82
-S:132:0x87/0x83
-S:133:0x87/0x84
-S:134:0x87/0x85
-S:135:0x87/0x86
-S:136:0x87/0x81
-S:137:0x87/0x81
-S:138:0x87/0x89
-S:139:0x87/0x8A
-S:140:0x87/0x8B
-S:141:0x87/0x8C
-S:142:0x87/0x8D
-S:143:0x87/0x8E
-
-# Rings (=)
-S:144:0x84/0x87
-S:145:0x84/0x80
-S:146:0x84/0x88
-S:147:0x84/0x82
-S:148:0x84/0x83
-S:149:0x84/0x84
-S:150:0x84/0x85
-S:151:0x84/0x86
-S:152:0x84/0x81
-S:153:0x84/0x81
-S:154:0x84/0x89
-S:155:0x84/0x8A
-S:156:0x84/0x8B
-S:157:0x84/0x8C
-S:158:0x84/0x8D
-S:159:0x84/0x8E
-
-# Staffs (_)
-S:160:0x87/0x96
-S:161:0x87/0x95
-S:162:0x87/0x95
-S:163:0x87/0x92
-S:164:0x87/0x92
-S:165:0x87/0x93
-S:166:0x87/0x95
-S:167:0x87/0x90
-S:168:0x87/0x95
-S:169:0x87/0x95
-S:170:0x87/0x92
-S:171:0x87/0x94
-S:172:0x87/0x92
-S:173:0x87/0x93
-S:174:0x87/0x96
-S:175:0x87/0x90
-
-# Wands (-)
-S:176:0x86/0x97
-S:177:0x86/0x90
-S:178:0x86/0x98
-S:179:0x86/0x92
-S:180:0x86/0x93
-S:181:0x86/0x94
-S:182:0x86/0x95
-S:183:0x86/0x96
-S:184:0x86/0x91
-S:185:0x86/0x91
-S:186:0x86/0x99
-S:187:0x86/0x9A
-S:188:0x86/0x9B
-S:189:0x86/0x9C
-S:190:0x86/0x9D
-S:191:0x86/0x9E
-
-# Rods (-)
-S:192:0x86/0x87
-S:193:0x86/0x80
-S:194:0x86/0x88
-S:195:0x86/0x82
-S:196:0x86/0x83
-S:197:0x86/0x84
-S:198:0x86/0x85
-S:199:0x86/0x86
-S:200:0x86/0x81
-S:201:0x86/0x81
-S:202:0x86/0x89
-S:203:0x86/0x8A
-S:204:0x86/0x8B
-S:205:0x86/0x8C
-S:206:0x86/0x8D
-S:207:0x86/0x8E
-
-# Scrolls (?)
-S:208:0x83/0x9C
-S:209:0x83/0x9D
-S:210:0x83/0x9E
-S:211:0x83/0x9F
-S:212:0x83/0x9C
-S:213:0x83/0x9D
-S:214:0x83/0x9E
-S:215:0x83/0x9F
-S:216:0x83/0x9C
-S:217:0x83/0x9D
-S:218:0x83/0x9E
-S:219:0x83/0x9F
-S:220:0x83/0x9C
-S:221:0x83/0x9D
-S:222:0x83/0x9E
-S:223:0x83/0x9F
-
-# Potions (!)
-S:224:0x85/0x87
-S:225:0x85/0x80
-S:226:0x85/0x88
-S:227:0x85/0x82
-S:228:0x85/0x83
-S:229:0x85/0x84
-S:230:0x85/0x85
-S:231:0x85/0x86
-S:232:0x85/0x81
-S:233:0x85/0x81
-S:234:0x85/0x89
-S:235:0x85/0x8A
-S:236:0x85/0x8B
-S:237:0x85/0x8C
-S:238:0x85/0x8D
-S:239:0x85/0x8E
-
-# Food (,)
-S:240:0x85/0x97
-S:241:0x85/0x90
-S:242:0x85/0x98
-S:243:0x85/0x92
-S:244:0x85/0x93
-S:245:0x85/0x94
-S:246:0x85/0x95
-S:247:0x85/0x96
-S:248:0x85/0x91
-S:249:0x85/0x91
-S:250:0x85/0x99
-S:251:0x85/0x9A
-S:252:0x85/0x9B
-S:253:0x85/0x9C
-S:254:0x85/0x9D
-S:255:0x85/0x9E
-
-# Elven
-G:M:12:0x91/0xA1
-
-# Dwarven
-G:M:13:0x91/0xA0
-
-# Spirit
-R:1045:0x92/0x9F
-R:1046:0x92/0xA0
-R:1047:0x92/0xA1
-R:1048:0x92/0xA2
-R:1049:0x92/0xA3
-R:1050:0x92/0xA4
-R:1051:0x92/0xA5
-R:1052:0x92/0xA6
-R:1053:0x92/0xA7
-R:1054:0x92/0xA8
-R:1055:0x92/0xA9
-R:1056:0x92/0xAA
-R:1057:0x92/0xA3
-R:1058:0x92/0xAB
-R:1059:0x92/0xAC
-R:1060:0x92/0xAD
-R:1061:0x92/0xAE
-R:1062:0x92/0xAF
-R:1063:0x92/0xB0
-R:1064:0x92/0xB1
-R:1065:0x92/0xB2
-R:1066:0x92/0xB3
-R:1067:0x92/0xB4
-R:1068:0x92/0xB5
-R:1069:0x92/0xB6
-R:1070:0x92/0xB7
-R:1071:0x92/0xB8
-R:1072:0x92/0xB9
-R:1073:0x92/0xBA
-R:1074:0x92/0xBB
-R:1075:0x92/0xBC
-
-# & Spellbook~ of #
-K:757:0x91/0xA4
-
-# Weakness Trap
-#G:T:1:0xFF/0xFF
-#G:T:2:0xFF/0xFF
-#G:T:3:0xFF/0xFF
-
-# Intelligence Trap
-#G:T:4:0xFF/0xFF
-#G:T:5:0xFF/0xFF
-#G:T:6:0xFF/0xFF
-
-# Wisdom Trap
-#G:T:7:0xFF/0xFF
-#G:T:8:0xFF/0xFF
-#G:T:9:0xFF/0xFF
-
-# Fumbling Fingers Trap
-#G:T:10:0xFF/0xFF
-#G:T:11:0xFF/0xFF
-#G:T:12:0xFF/0xFF
-
-# Wasting Trap
-#G:T:13:0xFF/0xFF
-#G:T:14:0xFF/0xFF
-#G:T:15:0xFF/0xFF
-
-# Beauty Trap
-#G:T:16:0xFF/0xFF
-#G:T:17:0xFF/0xFF
-#G:T:18:0xFF/0xFF
-
-# Trap of Curse Weapon
-#G:T:20:0xFF/0xFF
-
-# Trap of Curse Armor
-#G:T:21:0xFF/0xFF
-
-# Earthquake Trap
-#G:T:22:0xFF/0xFF
-
-# Poison Needle Trap
-#G:T:23:0xFF/0xFF
-
-# Summon Monster Trap
-#G:T:24:0xFF/0xFF
-
-# Summon Undead Trap
-#G:T:25:0xFF/0xFF
-
-# Summon Greater Undead Trap
-#G:T:26:0xFF/0xFF
-
-# Teleport Trap
-#G:T:27:0xFF/0xFF
-
-# Paralyzing Trap
-#G:T:28:0xFF/0xFF
-
-# Explosive Device
-#G:T:29:0xFF/0xFF
-
-# Teleport Item Trap
-#G:T:30:0xFF/0xFF
-
-# Lose Memory Trap
-#G:T:31:0xFF/0xFF
-
-# Bitter Regret Trap
-#G:T:32:0xFF/0xFF
-
-# Bowel Cramps Trap
-#G:T:33:0xFF/0xFF
-
-# Blindness
-#G:T:34:0xFF/0xFF
-
-# Aggravation Trap
-#G:T:35:0xFF/0xFF
-
-# Multiplication Trap
-#G:T:36:0xFF/0xFF
-
-# Steal Item Trap
-#G:T:37:0xFF/0xFF
-
-# Summon Fast Quylthulgs Trap
-#G:T:38:0xFF/0xFF
-
-# Trap of Sinking
-#G:T:39:0xFF/0xFF
-
-# Trap of Mana Drain
-#G:T:40:0xFF/0xFF
-
-# Trap of Missing Money
-#G:T:41:0xFF/0xFF
-
-# Trap of No Return
-#G:T:42:0xFF/0xFF
-
-# Trap of Silent Switching
-#G:T:43:0xFF/0xFF
-
-# Trap of Walls
-#G:T:44:0xFF/0xFF
-
-# Trap of Calling Out
-#G:T:45:0xFF/0xFF
-
-# Trap of Sliding
-#G:T:46:0xFF/0xFF
-
-# Trap of Charges Drain
-#G:T:47:0xFF/0xFF
-
-# Trap of Stair Movement
-#G:T:48:0xFF/0xFF
-
-# Trap of New Trap
-#G:T:49:0xFF/0xFF
-
-# Trap of Scatter Items
-#G:T:50:0xFF/0xFF
-
-# Trap of Decay
-#G:T:51:0xFF/0xFF
-
-# Trap of Wasting Wands
-#G:T:52:0xFF/0xFF
-
-# Trap of Filling
-#G:T:53:0xFF/0xFF
-
-# Trap of Drain Speed
-#G:T:54:0xFF/0xFF
-
-# Lightning Bolt Trap
-#G:T:60:0xFF/0xFF
-
-# Poison Bolt Trap
-#G:T:61:0xFF/0xFF
-
-# Acid Bolt Trap
-#G:T:62:0xFF/0xFF
-
-# Cold Bolt Trap
-#G:T:63:0xFF/0xFF
-
-# Fire Bolt Trap
-#G:T:64:0xFF/0xFF
-
-# Plasma Bolt Trap
-#G:T:65:0xFF/0xFF
-
-# Water Bolt Trap
-#G:T:66:0xFF/0xFF
-
-# Lite Bolt Trap
-#G:T:67:0xFF/0xFF
-
-# Dark Bolt Trap
-#G:T:68:0xFF/0xFF
-
-# Shards Bolt Trap
-#G:T:69:0xFF/0xFF
-
-# Sound Bolt Trap
-#G:T:70:0xFF/0xFF
-
-# Confusion Bolt Trap
-#G:T:71:0xFF/0xFF
-
-# Force Bolt Trap
-#G:T:72:0xFF/0xFF
-
-# Inertia Bolt Trap
-#G:T:73:0xFF/0xFF
-
-# Mana Bolt Trap
-#G:T:74:0xFF/0xFF
-
-# Ice Bolt Trap
-#G:T:75:0xFF/0xFF
-
-# Chaos Bolt Trap
-#G:T:76:0xFF/0xFF
-
-# Nether Bolt Trap
-#G:T:77:0xFF/0xFF
-
-# Disenchantment Bolt Trap
-#G:T:78:0xFF/0xFF
-
-# Nexus Bolt Trap
-#G:T:79:0xFF/0xFF
-
-# Time Bolt Trap
-#G:T:80:0xFF/0xFF
-
-# Gravity Bolt Trap
-#G:T:81:0xFF/0xFF
-
-# Lightning Ball Trap
-#G:T:82:0xFF/0xFF
-
-# Poison Ball Trap
-#G:T:83:0xFF/0xFF
-
-# Acid Ball Trap
-#G:T:84:0xFF/0xFF
-
-# Cold Ball Trap
-#G:T:85:0xFF/0xFF
-
-# Fire Ball Trap
-#G:T:86:0xFF/0xFF
-
-# Plasma Ball Trap
-#G:T:87:0xFF/0xFF
-
-# Water Ball Trap
-#G:T:88:0xFF/0xFF
-
-# Light Ball Trap
-#G:T:89:0xFF/0xFF
-
-# Darkness Ball Trap
-#G:T:90:0xFF/0xFF
-
-# Shards Ball Trap
-#G:T:91:0xFF/0xFF
-
-# Sound Ball Trap
-#G:T:92:0xFF/0xFF
-
-# Confusion Ball Trap
-#G:T:93:0xFF/0xFF
-
-# Force Ball Trap
-#G:T:94:0xFF/0xFF
-
-# Mana Ball Trap
-#G:T:96:0xFF/0xFF
-
-# Ice Ball Trap
-#G:T:97:0xFF/0xFF
-
-# Chaos Ball Trap
-#G:T:98:0xFF/0xFF
-
-# Nether Ball Trap
-#G:T:99:0xFF/0xFF
-
-# Disenchantment Ball Trap
-#G:T:100:0xFF/0xFF
-
-# Nexus Ball Trap
-#G:T:101:0xFF/0xFF
-
-# Time Ball Trap
-#G:T:102:0xFF/0xFF
-
-# Gravity Ball Trap
-#G:T:103:0xFF/0xFF
-
-# Arrow Trap
-#G:T:110:0xFF/0xFF
-
-# Bolt Trap
-#G:T:111:0xFF/0xFF
-
-# Seeker Arrow Trap
-#G:T:112:0xFF/0xFF
-
-# Seeker Bolt Trap
-#G:T:113:0xFF/0xFF
-
-# Poison Arrow Trap
-#G:T:114:0xFF/0xFF
-
-# Poison Bolt Trap
-#G:T:115:0xFF/0xFF
-
-# Poison Seeker Arrow Trap
-#G:T:116:0xFF/0xFF
-
-# Poison Seeker Bolt Trap
-#G:T:117:0xFF/0xFF
-
-# Broken Dagger Trap
-#G:T:118:0xFF/0xFF
-
-# Dagger Trap
-#G:T:119:0xFF/0xFF
-
-# Poison Broken Dagger Trap
-#G:T:120:0xFF/0xFF
-
-# Poison Dagger Trap
-#G:T:121:0xFF/0xFF
-
-# Arrows Trap
-#G:T:122:0xFF/0xFF
-
-# Bolts Trap
-#G:T:123:0xFF/0xFF
-
-# Seeker Arrow Trap
-#G:T:124:0xFF/0xFF
-
-# Seeker Bolt Trap
-#G:T:125:0xFF/0xFF
-
-# Poison Arrows Trap
-#G:T:126:0xFF/0xFF
-
-# Poison Bolt Trap
-#G:T:127:0xFF/0xFF
-
-# Poison Seeker Arrows Trap
-#G:T:128:0xFF/0xFF
-
-# Poison Seeker Bolts Trap
-#G:T:129:0xFF/0xFF
-
-# Broken Daggers Trap
-#G:T:130:0xFF/0xFF
-
-# Dagger Trap
-#G:T:131:0xFF/0xFF
-
-# Poison Broken Daggers Trap
-#G:T:132:0xFF/0xFF
-
-# Poison Daggers Trap
-#G:T:133:0xFF/0xFF
-
-# Trap of Drop Item
-#G:T:140:0xFF/0xFF
-
-# Trap of Drop Items
-#G:T:141:0xFF/0xFF
-
-# Trap of Drop Everything
-#G:T:142:0xFF/0xFF
-
-# Trap of Femininity
-#G:T:150:0xFF/0xFF
-
-# Trap of Masculinity
-#G:T:151:0xFF/0xFF
-
-# Trap of Neutrality
-#G:T:152:0xFF/0xFF
-
-# Trap of Aging
-#G:T:153:0xFF/0xFF
-
-# Trap of Growing
-#G:T:154:0xFF/0xFF
-
-# Trap of Shrinking
-#G:T:155:0xFF/0xFF
-
-# Trap of Tanker Drain
-#G:T:157:0xFF/0xFF
-
-# Trap of Divine Anger
-#G:T:158:0xFF/0xFF
-
-# Trap of Divine Wrath
-#G:T:159:0xFF/0xFF
-
-# Hallucination Trap
-#G:T:160:0xFF/0xFF
-
-# Greater Magic Missile Trap
-#G:T:161:0xFF/0xFF
-
-# Foulness Trap
-#G:T:162:0xFF/0xFF
-
-# Trap of Holy Fire
-#G:T:164:0xFF/0xFF
-
-# Trap of Hell Fire
-#G:T:165:0xFF/0xFF
-
-# Psi Bolt Trap
-#G:T:166:0xFF/0xFF
-
-# Psi Drain Trap
-#G:T:167:0xFF/0xFF
-
-# Plasma Ball Trap
-#G:T:168:0xFF/0xFF
-
-# Psi Ball Trap
-#G:T:169:0xFF/0xFF
-
-# Acquirement Trap
-#G:T:170:0xFF/0xFF
-
-# Greater Lightning Bolt Trap
-#G:T:171:0xFF/0xFF
-
-# Greater Poison Bolt Trap
-#G:T:172:0xFF/0xFF
-
-# Greater Acid Bolt Trap
-#G:T:173:0xFF/0xFF
-
-# Greater Cold Bolt Trap
-#G:T:174:0xFF/0xFF
-
-# Greater Fire Bolt Trap
-#G:T:175:0xFF/0xFF
-# non-defines encountered :
-# Load the special player pictures
-%:xtra-new.prf
diff --git a/lib/mods/theme/pref/graf-sdl.prf b/lib/mods/theme/pref/graf-sdl.prf
deleted file mode 100644
index 818f876a..00000000
--- a/lib/mods/theme/pref/graf-sdl.prf
+++ /dev/null
@@ -1,37 +0,0 @@
-# File: graf-x11.prf
-
-
-# Font stuff
-%:font-x11.prf
-
-
-# Color palette - Graphics
-
-#V:16:0x01:0x00:0x00:0x00
-#V:17:0x01:0xF0:0xE0:0xD0
-#V:18:0x01:0x80:0x80:0x80
-#V:19:0x01:0x50:0x50:0x50
-#V:20:0x01:0xE0:0xB0:0x00
-#V:21:0x01:0xC0:0xA0:0x70
-#V:22:0x01:0x80:0x60:0x40
-#V:23:0x01:0x50:0x3C:0x28
-#V:24:0x01:0x00:0xA0:0xF0
-#V:25:0x01:0x00:0x00:0xF0
-#V:26:0x01:0x00:0x00:0x70
-#V:27:0x01:0xF0:0x00:0x00
-#V:28:0x01:0x80:0x00:0x00
-#V:29:0x01:0x90:0x00:0xB0
-#V:30:0x01:0x00:0x60:0x10
-#V:31:0x01:0x60:0xF0:0x40
-
-
-# Standard file
-?:[EQU $GRAF old]
-%:graf-xxx.prf
-
-# New tiles
-?:[EQU $GRAF new]
-%:graf-new.prf
-
-?:1
-
diff --git a/lib/mods/theme/pref/graf-win.prf b/lib/mods/theme/pref/graf-win.prf
deleted file mode 100644
index f59edb35..00000000
--- a/lib/mods/theme/pref/graf-win.prf
+++ /dev/null
@@ -1,16 +0,0 @@
-# File: graf-win.prf
-
-#
-# This file defines special attr/char mappings for use in "graphics" mode
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-
-# Standard file
-?:[EQU $GRAF old]
-%:graf-xxx.prf
-
-# New tiles
-?:[EQU $GRAF new]
-%:graf-new.prf
diff --git a/lib/mods/theme/pref/graf-x11.prf b/lib/mods/theme/pref/graf-x11.prf
deleted file mode 100644
index 818f876a..00000000
--- a/lib/mods/theme/pref/graf-x11.prf
+++ /dev/null
@@ -1,37 +0,0 @@
-# File: graf-x11.prf
-
-
-# Font stuff
-%:font-x11.prf
-
-
-# Color palette - Graphics
-
-#V:16:0x01:0x00:0x00:0x00
-#V:17:0x01:0xF0:0xE0:0xD0
-#V:18:0x01:0x80:0x80:0x80
-#V:19:0x01:0x50:0x50:0x50
-#V:20:0x01:0xE0:0xB0:0x00
-#V:21:0x01:0xC0:0xA0:0x70
-#V:22:0x01:0x80:0x60:0x40
-#V:23:0x01:0x50:0x3C:0x28
-#V:24:0x01:0x00:0xA0:0xF0
-#V:25:0x01:0x00:0x00:0xF0
-#V:26:0x01:0x00:0x00:0x70
-#V:27:0x01:0xF0:0x00:0x00
-#V:28:0x01:0x80:0x00:0x00
-#V:29:0x01:0x90:0x00:0xB0
-#V:30:0x01:0x00:0x60:0x10
-#V:31:0x01:0x60:0xF0:0x40
-
-
-# Standard file
-?:[EQU $GRAF old]
-%:graf-xxx.prf
-
-# New tiles
-?:[EQU $GRAF new]
-%:graf-new.prf
-
-?:1
-
diff --git a/lib/mods/theme/pref/graf-xxx.prf b/lib/mods/theme/pref/graf-xxx.prf
deleted file mode 100644
index 8be9d6da..00000000
--- a/lib/mods/theme/pref/graf-xxx.prf
+++ /dev/null
@@ -1,3267 +0,0 @@
-# PRF file generated by Andreas Koch`s Tile Assigner
-# at 12:19:29 AM
-
-# 2185 items
-# 2185 probably mapped correctly
-# 0 imported but not yet defined
-# 0 defined to value(s) lower than 0x80
-# Old header :
-### Special attr:char values ###
-# # Unused (@)
-# S:0x00:0x00:0x40
-# S:0x01:0x01:0x40
-# S:0x02:0x02:0x40
-# S:0x03:0x03:0x40
-# S:0x04:0x04:0x40
-# S:0x05:0x05:0x40
-# S:0x06:0x06:0x40
-# S:0x07:0x07:0x40
-# S:0x08:0x08:0x40
-# S:0x09:0x09:0x40
-# S:0x0A:0x0A:0x40
-# S:0x0B:0x0B:0x40
-# S:0x0C:0x0C:0x40
-# S:0x0D:0x0D:0x40
-# S:0x0E:0x0E:0x40
-# S:0x0F:0x0F:0x40
-# # Unused (@)
-# S:0x10:0x00:0x40
-# S:0x11:0x01:0x40
-# S:0x12:0x02:0x40
-# S:0x13:0x03:0x40
-# S:0x14:0x04:0x40
-# S:0x15:0x05:0x40
-# S:0x16:0x06:0x40
-# S:0x17:0x07:0x40
-# S:0x18:0x08:0x40
-# S:0x19:0x09:0x40
-# S:0x1A:0x0A:0x40
-# S:0x1B:0x0B:0x40
-# S:0x1C:0x0C:0x40
-# S:0x1D:0x0D:0x40
-# S:0x1E:0x0E:0x40
-# S:0x1F:0x0F:0x40
-# # Unused (@)
-# S:0x20:0x00:0x40
-# S:0x21:0x01:0x40
-# S:0x22:0x02:0x40
-# S:0x23:0x03:0x40
-# S:0x24:0x04:0x40
-# S:0x25:0x05:0x40
-# S:0x26:0x06:0x40
-# S:0x27:0x07:0x40
-# S:0x28:0x08:0x40
-# S:0x29:0x09:0x40
-# S:0x2A:0x0A:0x40
-# S:0x2B:0x0B:0x40
-# S:0x2C:0x0C:0x40
-# S:0x2D:0x0D:0x40
-# S:0x2E:0x0E:0x40
-# S:0x2F:0x0F:0x40
-
-# General Store
-B:0:0x81/0x91
-
-# Armoury
-B:1:0x81/0x92
-
-# Weapon Smiths
-B:2:0x81/0x93
-
-# Temple
-B:3:0x81/0x94
-
-# Alchemy Shop
-B:4:0x81/0x95
-
-# Magic Shop
-B:5:0x81/0x96
-
-# Black Market
-B:6:0x81/0x97
-
-# Home
-B:7:0x81/0x98
-
-# Bookstore
-B:8:0x82/0x93
-
-# Pet Shop
-B:9:0xCB/0x96
-
-# Mayor's Office
-B:10:0xCB/0x92
-
-# Inn
-B:11:0xCB/0x95
-
-# The Soothsayer
-B:12:0xD4/0x85
-
-# Library
-B:13:0xD4/0x89
-
-# Castle
-B:14:0xCB/0x92
-
-# Casino
-B:15:0xD5/0x81
-
-# Beastmaster Shanty
-B:16:0xD3/0x8B
-
-# Fighters Hall
-B:17:0xD3/0x8C
-
-# Tower of Magery
-B:18:0xD4/0x8B
-
-# Inner Temple
-B:19:0xD4/0x9D
-
-# Paladins Guild
-B:20:0xCB/0x8F
-
-# Rangers Guild
-B:21:0xD3/0x83
-
-# Weyr
-B:22:0xCB/0x93
-
-# The Mirror
-B:23:0xD4/0x89
-
-# Seat of Ruling
-B:24:0xCB/0x92
-
-# Wizards Spire
-B:25:0xD4/0x8A
-
-# Priests Circle
-B:26:0xD4/0x92
-
-# Tower of the King
-B:27:0xCB/0x92
-
-# Library
-B:28:0xD4/0x89
-
-# The White Tree
-B:29:0xCB/0x95
-
-# Craftsmaster
-B:30:0xCB/0x97
-
-# Earth-Dome (Nature)
-B:31:0xCB/0x9A
-
-# Minstrels Haven
-B:32:0xD3/0x9F
-
-# Star-Dome
-B:33:0xD4/0x8C
-
-# Valarin Temple
-B:34:0xD4/0x90
-
-# Sea-Dome
-B:35:0xD4/0x91
-
-# The Golden Flower
-B:36:0xD3/0x83
-
-# The Fountain
-B:37:0xD4/0x9D
-
-# Axe Smith
-B:38:0xCC/0x96
-
-# Hafted Smith
-B:39:0xCC/0x97
-
-# Polearm Smith
-B:40:0xCC/0x98
-
-# Sword Smith
-B:41:0xCC/0x80
-
-# Rare Jewelry Shop
-B:42:0xD3/0x96
-
-# Jewelry Shop
-B:43:0xD3/0x93
-
-# Footwear Shop
-B:44:0xD3/0x9D
-
-# Rare Footwear Shop
-B:45:0xD3/0x9E
-
-# Library
-B:46:0xD3/0x9C
-
-# Forbidden Library
-B:47:0xD4/0x8F
-
-# Expensive Black Market
-B:48:0xD4/0x95
-
-# Common Shop
-B:49:0xD4/0x93
-
-# Dragon Hunter
-B:50:0xCC/0x89
-
-# Speed Ring Market
-B:51:0xD3/0x97
-
-# Scribe
-B:52:0xD4/0x86
-
-# Potion Store
-B:53:0xD4/0x80
-
-# Recaller
-B:54:0xD4/0x88
-
-# Master Archer
-B:55:0xD3/0x85
-
-# Merchants Guild
-B:56:0xD4/0x9B
-
-# The Mathom-house
-B:57:0xCB/0x9B
-
-# The Prancing Pony
-B:58:0xCB/0x95
-
-# Mining Supply store
-B:59:0xCB/0x97
-
-# Library quest in Minas Anor
-B:60:0xD3/0x9C
-
-# Hunting Supply Store
-B:61:0xD3/0x85
-
-# Runic Magic Shop
-B:62:0x81/0x96
-
-# Construction Supply Store
-B:63:0xCB/0x97
-
-# Music Store
-B:64:0xD3/0x9F
-
-# Magic Rod Market
-B:65:0x81/0x96
-
-# Map store
-B:66:0xD3/0x9C
-
-# Farm
-B:67:0xD4/0x93
-
-#Pelargir inn - The Grey Swan
-B:68:0xCB/0x95
-
-#Caras Galadhon inn - The Garden
-B:69:0xCB/0x95
-
-#Khazad Dum inn - The Mithril Lode
-B:70:0xCB/0x95
-
-#Dale inn - The Builder Barracks
-B:71:0xCB/0x95
-
-#Edoras inn - The Horse and Ox
-B:72:0xCB/0x95
-
-#Esgaroth inn - The Dancing Dragon
-B:73:0xCB/0x95
-
-#Hobbiton inn - The Green Dragon
-B:74:0xCB/0x95
-
-#Osgiliath inn - The Twinkling Star
-B:75:0xCB/0x95
-
-#The House of Beorn
-B:76:0xCB/0x92
-
-#Bard's Hut
-B:77:0xCB/0x92
-
-#The Ranger Conclave
-B:78:0xCB/0x92
-
-#Imladris
-B:79:0xCB/0x92
-
-#The Hornburg
-B:80:0xCB/0x92
-
-#Thranduil's Hall
-B:81:0xCB/0x92
-
-#Meduseld
-B:82:0xCB/0x92
-
-#The Master's House
-B:83:0xCB/0x92
-
-#Bag End
-B:84:0xCB/0x92
-
-#The Castle of Stars
-B:85:0xCB/0x92
-
-#The Prince's Tower
-B:86:0xCB/0x92
-
-#The Seat of Durin
-B:87:0xCB/0x92
-
-### The forge in Imladris
-B:88:0xCB/0x97
-
-# nothing
-F:0:0x81/0x80
-
-# open floor
-F:1:0x80/0x80
-
-# fountain - wet
-F:2:0xD1/0x83
-
-# glyph of warding
-F:3:0xA2/0x88
-
-# open door
-F:4:0x81/0x87
-
-# broken door
-F:5:0x81/0x87
-
-# up staircase
-F:6:0x81/0x9C
-
-# down staircase
-F:7:0x81/0x9E
-
-# quest entrance
-F:8:0x82/0x8E
-
-# quest exit
-F:9:0x82/0x8B
-
-# quest down level
-F:10:0x82/0x8F
-
-# quest up level
-F:11:0x82/0x8C
-
-# town exit
-F:12:0x82/0x91
-
-# shaft down
-F:13:0x82/0x90
-
-# shaft up
-F:14:0x82/0x8D
-
-# fountain
-F:15:0xD1/0x82
-
-# web
-F:16:0x82/0x92
-
-# Open pit
-F:17:0xA2/0x96
-
-# Spiked Pit
-F:18:0xA2/0x96
-
-# Poison Pit
-F:19:0xA2/0x96
-
-# Summon Rune
-F:20:0x8A/0x9C
-
-# Teleport Rune
-F:21:0x8A/0x9C
-
-# Fire spot
-F:22:0x8A/0x9B
-
-# Acid spot
-F:23:0x8A/0x9B
-
-# Slow dart trap
-F:24:0x82/0x9E
-
-# Lose str dart
-F:25:0xA2/0x89
-
-# Lose dex dart
-F:26:0xA2/0x8D
-
-# Lose con dart
-F:27:0xA2/0x92
-
-# gas trap - blind
-F:28:0xA2/0x8E
-
-# gas trap - confuse
-F:29:0xA2/0x8F
-
-# gas trap - poison
-F:30:0xA2/0x90
-
-# gas trap - sleep
-F:31:0xA2/0x91
-
-# door
-F:32:0x81/0x8B
-
-# locked door
-F:33:0x81/0x8B
-F:34:0x81/0x8B
-F:35:0x81/0x8B
-F:36:0x81/0x8B
-F:37:0x81/0x8B
-F:38:0x81/0x8B
-F:39:0x81/0x8B
-
-# jammed door
-F:40:0x81/0x8B
-F:41:0x81/0x8B
-F:42:0x81/0x8B
-F:43:0x81/0x8B
-F:44:0x81/0x8B
-F:45:0x81/0x8B
-F:46:0x81/0x8B
-F:47:0x81/0x8B
-
-# secret door
-F:48:0x80/0x82
-
-# pile of rubble
-F:49:0x81/0x9A
-
-# magma vein
-F:50:0x81/0x83
-
-# quartz vein
-F:51:0x80/0x83
-
-# magma vein
-F:52:0x81/0x83
-
-# quartz vein
-F:53:0x80/0x83
-
-# magma vein with treasure
-F:54:0x80/0x84
-
-# quartz vein with treasure
-F:55:0x80/0x84
-
-# granite wall
-F:56:0x80/0x82
-F:57:0x80/0x82
-F:58:0x80/0x82
-F:59:0x80/0x82
-
-# permanent wall
-F:60:0x80/0x95
-F:61:0x80/0x95
-F:62:0x80/0x95
-F:63:0x80/0x95
-
-# explosive rune
-F:64:0xA2/0x87
-
-# Straight Road startpoint
-F:65:0xA3/0x9D
-
-# section of the Straight Road
-F:66:0xA3/0x97
-F:67:0xA3/0x9C
-F:68:0xA3/0x9B
-F:69:0xA3/0x9A
-F:70:0xA3/0x98
-
-# section of the Straight Road (discharged)
-F:71:0xA3/0x98
-
-# Straight Road exit
-F:72:0xA3/0x9D
-
-# corrupted section of the Straight Road
-F:73:0xA3/0x99
-
-# Building
-F:74:0x81/0x91
-
-# permanent wall
-F:75:0x80/0x95
-F:76:0x80/0x95
-F:77:0x80/0x95
-F:78:0x80/0x95
-
-# grass with Elanor flowers
-F:79:0x82:0x95
-
-# grass with Fumella flowers
-F:80:0x82:0x96
-
-# grass with anemones
-F:81:0x82:0x97
-
-# grass with Niphredil flowers
-F:82:0x82:0x98
-
-# grass with irises
-F:83:0x82:0x99
-
-# stream of shallow water
-F:84:0xD2/0x81
-
-# pool of deep lava
-F:85:0xCB/0x89
-
-# stream of shallow lava
-F:86:0xCB/0x88
-
-# dark pit
-F:87:0x81/0x80
-
-# dirt
-F:88:0xCB/0x84
-
-# patch of grass
-F:89:0xD0/0x8E
-
-# ice
-F:90:0xCF/0x81
-
-# sand
-F:91:0xCF/0x8E
-
-# dead tree
-F:92:0xCF/0x85
-
-# ash
-F:93:0xCF/0x95
-
-# mud
-F:94:0xCF/0x8D
-
-# ice wall
-F:95:0xD0/0x88
-
-# tree
-F:96:0xCB/0x86
-
-# mountain chain
-F:97:0xCB/0x87
-
-# sandwall
-F:98:0xD0/0x87
-F:99:0xD0/0x87
-
-# sandwall with treasure
-F:100:0xD0/0x8A
-
-# high mountain chain
-F:101:0xCB/0x87
-
-# nether mist
-F:102:0xC5/0x8C
-
-# molten glass wall
-F:103:0xD0/0x89
-
-# Between gate
-F:160:0x8A/0x9D
-
-# Altar of Forests
-F:161:0xD1/0x85
-
-# Altar of Water
-F:162:0xD1/0x86
-
-# Altar of Earth
-F:163:0xD1/0x8E
-
-# Altar of Darkness
-F:164:0xD1/0x88
-
-# Altar of Moon
-F:165:0xD1/0x89
-
-# Altar of Sun
-F:166:0xD1/0x8C
-
-# Altar of Rage
-F:167:0xD1/0x8A
-
-# Altar of Winds
-F:168:0xD1/0x8B
-
-# Altar of Stars
-F:169:0xD1/0x8D
-
-# Altar of Being
-F:170:0xD1/0x87
-
-# Altar of Randomness
-F:171:0xD1/0x8F
-
-# floor
-F:172:0x80/0x80
-
-# Underground Tunnel
-F:173:0xCF/0x97
-
-# stream of tainted water
-F:174:0xD2/0x82
-
-# monster trap
-F:175:0x82/0x94
-
-# Between gate
-F:176:0x8A/0x9D
-
-# lava wall
-F:177:0xD0/0x86
-
-# Great Fire
-F:178:0xD1/0x90
-
-# Path to next area
-F:179:0xCF/0x9C
-
-# Path to previous area
-F:180:0xCF/0x9B
-
-# field
-F:181:0xCF/0x8A
-
-# Ekkaia, the Encircling Sea
-F:182:0xD2/0x84
-
-# pool of deep water
-F:187:0xD2/0x80
-
-# glass wall
-F:188:0xD0/0x89
-
-# illusion wall
-F:189:0xD0/0x8C
-
-# Grass roof
-F:190:0xD0/0x8F
-
-# grass roof top
-F:191:0xD0/0x8F
-
-# grass roof chimney
-F:192:0xD0/0x8F
-
-# brick roof
-F:193:0xD0/0x90
-
-# brick roof top
-F:194:0xD0/0x90
-
-# brick roof chimney
-F:195:0xD0/0x90
-
-# window
-F:196:0xD0/0x91
-
-# small window
-F:197:0xD0/0x92
-
-# rain barrel
-F:198:0xD0/0x93
-
-# grass with flowers
-F:199:0xD0/0x8D
-
-# cobblestone road
-F:200:0x82/0x8A
-
-# cobblestone with outlet
-F:201:0x82/0x8A
-
-# small tree
-F:202:0xD0/0x8B
-
-# town
-F:203:0xD0/0x94
-
-# Underground Tunnel
-F:204:0xD0/0x95
-
-# a blazing fire
-F:205:0xD1/0x84
-
-# pile of rubble
-F:206:0x81/0x9A
-
-# rocky ground
-F:207:0x82:0x9A
-
-# cloud-like vapour
-F:208:0x82:0x9B
-
-# condensing water
-F:209:0x82:0x9C
-
-# dense mist
-F:210:0x82:0x9D
-
-# hail-stone wall
-F:211:0x83:0x80
-
-# dead small tree
-F:212:0x83:0x83
-
-# low hill
-F:213:0x83:0x84
-
-# dark mountain chain
-F:214:0x83:0x85
-
-# blue mountain chain
-F:215:0x83:0x86
-
-# grey mountain chain
-F:216:0x83:0x87
-
-# part of Mount Doom
-F:217:0x83:0x88
-
-# snow-capped peak
-F:218:0x83:0x89
-
-# fir tree
-F:219:0x83:0x8A
-
-# section of a flet
-F:220:0x83:0x8B
-
-# light post
-F:221:0x83:0x8C
-
-# water lily
-F:222:0x83:0x8D
-
-# part of the Dead Marshes
-F:223:0x83:0x8E
-
-# Black Gate
-F:224:0x83:0x8F
-
-# river
-F:225:0x83:0x90
-
-# swamp pool
-F:226:0x83:0x91
-
-# stream of the Anduin river
-F:227:0x83:0x92
-
-# road sign that says 'Hurry to Gondolin!'
-F:228:0x83:0x93
-
-# beehive
-F:229:0x83:0x94
-
-# dirt road
-F:230:0x83:0x95
-
-# wide gate
-F:231:0x83:0x96
-
-# open gate
-F:232:0x83:0x97
-
-# wooden board
-F:233:0x83:0x98
-
-# wooden board
-F:234:0x83:0x99
-
-# wooden board
-F:235:0x83:0x9A
-
-# wooden board
-F:236:0x83:0x9B
-
-# white tree
-F:237:0x83:0x9C
-
-# swift waterfall
-F:238:0x83:0x9D
-
-# slippery rock ledge
-F:239:0x82:0x9A
-
-# stable
-F:240:0x83:0x9E
-
-# wooden plank
-F:241:0x83:0x9F
-
-# fosse pit
-F:242:0x82:0x9F
-
-# Mallorn
-F:243:0x81:0x9F
-
-# copper pillar
-F:244:0x86:0x93
-
-# ethereal wall
-F:245:0x80:0x80
-
-# glacial wall
-F:246:0xD0:0x88
-
-# battlement
-F:247:0x86:0x98
-
-# door of Orthanc
-F:248:0x04:0x27
-
-# something
-K:0:0x80:0x80
-
-# Blindness
-K:1:0xBA:0x81
-
-# Fear
-K:2:0xBA:0x81
-
-# Confusion
-K:3:0xBA:0x81
-
-# Hallucination
-K:4:0xBA:0x81
-
-# Cure Poison
-K:5:0xBA:0x81
-
-# Cure Blindness
-K:6:0xBA:0x81
-
-# Cure Fear
-K:7:0xBA:0x81
-
-# Cure Confusion
-K:8:0xBA:0x81
-
-# Weakness
-K:9:0xBA:0x81
-
-# Unhealth
-K:10:0xBA:0x81
-
-# Restore Constitution
-K:11:0xBA:0x81
-
-# Restoring
-K:12:0xBA:0x81
-
-# Stupidity
-K:13:0xBA:0x81
-
-# Naivety
-K:14:0xBA:0x81
-
-# Poison
-K:15:0xBA:0x81
-
-# Sickness
-K:16:0xBA:0x81
-
-# Paralysis
-K:17:0xBA:0x81
-
-# Restore Strength
-K:18:0xBA:0x81
-
-# Disease
-K:19:0xBA:0x81
-
-# Cure Serious Wounds
-K:20:0xBA:0x81
-
-# & Ration~ of Cram
-K:21:0x8B:0x82
-
-# & Round Seed-Cake~
-K:22:0x8B:0x82
-
-# & Strip~ of Venison
-K:23:0x8B:0x82
-
-# & Slime Mold~
-K:24:0x8A:0x9F
-
-# & Lembas~
-K:25:0x8B:0x80
-
-# & Pint~ of Fine Ale
-K:26:0x8A:0x95
-
-# & Pint~ of Old Winyards
-K:27:0x8A:0x96
-
-# & Mattock~
-K:28:0xCD:0x80
-
-# & Blue Stone~
-K:29:0xB6:0x89
-
-# & Broken Dagger~
-K:30:0x89:0x83
-
-# & Bastard Sword~
-K:31:0x89:0x85
-
-# & Scimitar~
-K:32:0x89:0x85
-
-# & Tulwar~
-K:33:0x89:0x84
-
-# & Broad Sword~
-K:34:0x89:0x85
-
-# & Short Sword~
-K:35:0x89:0x84
-
-# & Blade~ of Chaos
-K:36:0x89:0x87
-
-# & Two-Handed Sword~
-K:37:0x89:0x85
-
-# & Main Gauche~
-K:38:0x89:0x83
-
-# & Cutlass~
-K:39:0x89:0x84
-
-# & Executioner's Sword~
-K:40:0x89:0x86
-
-# & Katana~
-K:41:0x89:0x85
-
-# & Long Sword~
-K:42:0x89:0x85
-
-# & Dagger~
-K:43:0x89:0x83
-
-# & Rapier~
-K:44:0x89:0x84
-
-# & Sabre~
-K:45:0x89:0x84
-
-# & Small Sword~
-K:46:0x89:0x84
-
-# & Broken Sword~
-K:47:0x89:0x83
-
-# & Ball-and-Chain~
-K:48:0x89:0x88
-
-# & Whip~
-K:49:0x89:0x89
-
-# & Flail~
-K:50:0x89:0x8B
-
-# & Two-Handed Flail~
-K:51:0x89:0x8B
-
-# & Morning Star~
-K:52:0x89:0x8B
-
-# & Mace~
-K:53:0x89:0x8C
-
-# & Quarterstaff~
-K:54:0x89:0x8E
-
-# & War Hammer~
-K:55:0x89:0x8F
-
-# & Lead-Filled Mace~
-K:56:0x89:0x8C
-
-# & Mace~ of Disruption
-K:57:0x89:0x8D
-
-# & Lucerne Hammer~
-K:58:0x89:0x90
-
-# & Beaked Axe~
-K:59:0x89:0x90
-
-# & Glaive~
-K:60:0x89:0x90
-
-# & Halberd~
-K:61:0x89:0x90
-
-# & Awl-Pike~
-K:62:0x89:0x91
-
-# & Pike~
-K:63:0x89:0x91
-
-# & Spear~
-K:64:0x89:0x91
-
-# & Trident~
-K:65:0x89:0x92
-
-# & Lance~
-K:66:0x89:0x93
-
-# & Great Axe~
-K:67:0x89:0x90
-
-# & Battle Axe~
-K:68:0x89:0x90
-
-# & Lochaber Axe~
-K:69:0x89:0x90
-
-# & Broad Axe~
-K:70:0x89:0x90
-
-# & Scythe~
-K:71:0x89:0x94
-
-# & Scythe~ of Slicing
-K:72:0x89:0x94
-
-# & Short Bow~
-K:73:0x89:0x95
-
-# & Long Bow~
-K:74:0x89:0x96
-
-# & Light Crossbow~
-K:75:0x89:0x97
-
-# & Heavy Crossbow~
-K:76:0x89:0x98
-
-# & Sling~
-K:77:0x89:0x99
-
-# & Arrow~
-K:78:0x89:0x9A
-
-# & Seeker Arrow~
-K:79:0x89:0x9B
-
-# & Bolt~
-K:80:0x89:0x9C
-
-# & Seeker Bolt~
-K:81:0x89:0x9D
-
-# & Rounded Pebble~
-K:82:0x89:0x9E
-
-# & Iron Shot~
-K:83:0x89:0x9F
-
-# & Shovel~
-K:84:0x8A:0x98
-
-# & Gnomish Shovel~
-K:85:0x8B:0x8F
-
-# & Dwarven Shovel~
-K:86:0x8B:0x90
-
-# & Pick~
-K:87:0x8A:0x97
-
-# & Orcish Pick~
-K:88:0x8B:0x8D
-
-# & Dwarven Pick~
-K:89:0x8B:0x8E
-
-# & Elven Cloak~
-K:90:0x88:0x81
-
-# & Pair~ of Soft Leather Boots
-K:91:0x88:0x89
-
-# & Pair~ of Hard Leather Boots
-K:92:0x88:0x8A
-
-# & Pair~ of Metal Shod Boots
-K:93:0x88:0x8B
-
-# & Hard Leather Cap~
-K:94:0x88:0x82
-
-# & Metal Cap~
-K:95:0x88:0x83
-
-# & Iron Helm~
-K:96:0x88:0x84
-
-# & Steel Helm~
-K:97:0x88:0x85
-
-# & Iron Crown~
-K:98:0x88:0x86
-
-# & Golden Crown~
-K:99:0x88:0x87
-
-# & Jewel-Encrusted Crown~
-K:100:0x88:0x88
-
-# & Robe~
-K:101:0x88:0x95
-
-# & Filthy Rag~
-K:102:0x88:0x94
-
-# Soft Leather Armour~
-K:103:0x88:0x96
-
-# Soft Studded Leather~
-K:104:0x88:0x96
-
-# Hard Leather Armour~
-K:105:0x88:0x97
-
-# Hard Studded Leather~
-K:106:0x88:0x97
-
-# Leather Scale Mail~
-K:107:0x88:0x98
-
-# Metal Scale Mail~
-K:108:0x88:0x98
-
-# Chain Mail~
-K:109:0x88:0x99
-
-# Rusty Chain Mail~
-K:110:0x88:0x9A
-
-# Augmented Chain Mail~
-K:111:0x88:0x99
-
-# Bar Chain Mail~
-K:112:0x88:0x99
-
-# Metal Brigandine Armour~
-K:113:0x88:0x99
-
-# Partial Plate Armour~
-K:114:0x88:0x9B
-
-# Metal Lamellar Armour~
-K:115:0x88:0x9B
-
-# Full Plate Armour~
-K:116:0xCD:0x82
-
-# Ribbed Plate Armour~
-K:117:0x88:0x9B
-
-# Galvorn Plate Mail~
-K:118:0xA3:0x96
-
-# Mithril Plate Mail~
-K:119:0x85:0x96
-
-# Mithril Chain Mail~
-K:120:0x85:0x96
-
-# Double Chain Mail~
-K:121:0x88:0x99
-
-# & Shield~ of Deflection
-K:122:0x88:0x93
-
-# & Cloak~
-K:123:0x88:0x80
-
-# & Shadow Cloak~
-K:124:0x88:0x81
-
-# & Set~ of Leather Gloves
-K:125:0x88:0x8C
-
-# & Set~ of Gauntlets
-K:126:0x88:0x8D
-
-# & Set~ of Cesti
-K:127:0x88:0x8E
-
-# & Small Leather Shield~
-K:128:0x88:0x8F
-
-# & Large Leather Shield~
-K:129:0x88:0x90
-
-# & Small Metal Shield~
-K:130:0x88:0x91
-
-# & Large Metal Shield~
-K:131:0x88:0x92
-
-# Strength
-K:132:0xB5:0x81
-
-# Dexterity
-K:133:0xB5:0x81
-
-# Constitution
-K:134:0xB5:0x81
-
-# Intelligence
-K:135:0xB5:0x81
-
-# Speed
-K:136:0xB5:0x83
-
-# Searching
-K:137:0xB5:0x80
-
-# Teleportation
-K:138:0xB5:0x80
-
-# Slow Digestion
-K:139:0xB5:0x80
-
-# Fire Resistance
-K:140:0xB5:0x80
-
-# Cold Resistance
-K:141:0xB5:0x80
-
-# Levitation
-K:142:0xB5:0x80
-
-# Poison Resistance
-K:143:0xB5:0x82
-
-# Free Action
-K:144:0xB5:0x80
-
-# Weakness
-K:145:0xB5:0x80
-
-# Flames
-K:146:0xB5:0x82
-
-# Acid
-K:147:0xB5:0x82
-
-# Ice
-K:148:0xB5:0x82
-
-# Woe
-K:149:0xB5:0x82
-
-# Stupidity
-K:150:0xB5:0x80
-
-# Damage
-K:151:0xB5:0x81
-
-# Accuracy
-K:152:0xB5:0x81
-
-# Protection
-K:153:0xB5:0x80
-
-# Aggravate Monster
-K:154:0xB5:0x80
-
-# See Invisible
-K:155:0xB5:0x81
-
-# Sustain Strength
-K:156:0xB5:0x81
-
-# Sustain Intelligence
-K:157:0xB5:0x81
-
-# Sustain Wisdom
-K:158:0xB5:0x81
-
-# Sustain Constitution
-K:159:0xB5:0x81
-
-# Sustain Dexterity
-K:160:0xB5:0x81
-
-# Sustain Charisma
-K:161:0xB5:0x81
-
-# Slaying
-K:162:0xB5:0x81
-
-# Brilliance
-K:163:0xB6:0x9F
-
-# Charisma
-K:164:0xB6:0x9F
-
-# Searching
-K:165:0xB6:0x9E
-
-# Teleportation
-K:166:0xB6:0x9E
-
-# Slow Digestion
-K:167:0xB6:0x9E
-
-# Acid Resistance
-K:168:0xB6:0x9E
-
-# Protection from Evil
-K:169:0xB6:0x9E
-
-# Double Ring Mail~
-K:170:0xCD:0x83
-
-# the Magi
-K:171:0xB6:0x80
-
-# Doom
-K:172:0xB6:0x80
-
-# Enchant Weapon To-Hit
-K:173:0x86:0x80
-
-# Enchant Weapon To-Dam
-K:174:0x86:0x80
-
-# Enchant Armor
-K:175:0x86:0x80
-
-# Identify
-K:176:0x86:0x80
-
-# *Identify*
-K:177:0x86:0x82
-
-# Rumour
-K:178:0x86:0x80
-
-# Chaos
-K:179:0x86:0x80
-
-# Remove Curse
-K:180:0x86:0x80
-
-# Light
-K:181:0x86:0x80
-
-# Fire
-K:182:0x86:0x80
-
-# Ice
-K:183:0x86:0x80
-
-# Summon Monsters
-K:184:0x86:0x80
-
-# Phase Door
-K:185:0x86:0x80
-
-# Teleportation
-K:186:0x86:0x80
-
-# Teleport Level
-K:187:0x86:0x80
-
-# Monster Confusion
-K:188:0x86:0x80
-
-# Magic Mapping
-K:189:0x86:0x80
-
-# Rune of Protection
-K:190:0x86:0x82
-
-# *Remove Curse*
-K:191:0x86:0x82
-
-# Treasure Detection
-K:192:0x86:0x80
-
-# Object Detection
-K:193:0x86:0x80
-
-# Trap Detection
-K:194:0x86:0x80
-
-# & Sheaf Arrow~
-K:195:0xCD:0x84
-
-# & Mithril Shot~
-K:196:0xCD:0x85
-
-# Door/Stair Location
-K:197:0x86:0x80
-
-# Acquirement
-K:198:0x86:0x80
-
-# *Acquirement*
-K:199:0x86:0x82
-
-# Mass Genocide
-K:200:0x86:0x82
-
-# Detect Invisible
-K:201:0x86:0x80
-
-# Aggravation
-K:202:0x86:0x80
-
-# Trap Creation
-K:203:0x86:0x80
-
-# Trap/Door Destruction
-K:204:0x86:0x80
-
-# Artifact Creation
-K:205:0x86:0x82
-
-# Recharging
-K:206:0x86:0x81
-
-# Genocide
-K:207:0x86:0x81
-
-# Darkness
-K:208:0x86:0x80
-
-# Protection from Evil
-K:209:0x86:0x81
-
-# Satisfy Hunger
-K:210:0x86:0x80
-
-# Dispel Undead
-K:211:0x86:0x81
-
-# *Enchant Weapon*
-K:212:0x86:0x82
-
-# Curse Weapon
-K:213:0x86:0x82
-
-# *Enchant Armour*
-K:214:0x86:0x82
-
-# Curse Armour
-K:215:0x86:0x82
-
-# Summon Undead
-K:216:0x86:0x80
-
-# Blessing
-K:217:0x86:0x80
-
-# Holy Chant
-K:218:0x86:0x80
-
-# Holy Prayer
-K:219:0x86:0x81
-
-# Word of Recall
-K:220:0x86:0x80
-
-# *Destruction*
-K:221:0x86:0x82
-
-# Slime Mold Juice
-K:222:0xBC:0x85
-
-# Apple Juice
-K:223:0xBC:0x85
-
-# Water
-K:224:0xBC:0x85
-
-# Strength
-K:225:0xBC:0x86
-
-# Weakness
-K:226:0xBC:0x85
-
-# Restore Strength
-K:227:0xBC:0x86
-
-# Intelligence
-K:228:0xBC:0x86
-
-# Stupidity
-K:229:0xBC:0x85
-
-# Restore Intelligence
-K:230:0xBC:0x86
-
-# Wisdom
-K:231:0xBC:0x86
-
-# Naivety
-K:232:0xBC:0x85
-
-# Restore Wisdom
-K:233:0xBC:0x86
-
-# Charisma
-K:234:0xBC:0x86
-
-# Ugliness
-K:235:0xBC:0x86
-
-# Restore Charisma
-K:236:0xBC:0x86
-
-# Curing
-K:237:0xBC:0x86
-
-# Invulnerability
-K:238:0xBC:0x86
-
-# New Life
-K:239:0xBC:0x86
-
-# Cure Serious Wounds
-K:240:0xBC:0x85
-
-# Cure Critical Wounds
-K:241:0xBC:0x85
-
-# Healing
-K:242:0xBC:0x85
-
-# Constitution
-K:243:0xBC:0x86
-
-# Experience
-K:244:0xBC:0x87
-
-# Sleep
-K:245:0xBC:0x85
-
-# Blindness
-K:246:0xBC:0x85
-
-# Booze
-K:247:0xBC:0x85
-
-# Poison
-K:248:0xBC:0x85
-
-# Speed
-K:249:0xBC:0x85
-
-# Slowness
-K:250:0xBC:0x85
-
-# Dexterity
-K:251:0xBC:0x86
-
-# Restore Dexterity
-K:252:0xBC:0x86
-
-# Restore Constitution
-K:253:0xBC:0x86
-
-# Lose Memories
-K:254:0xBC:0x85
-
-# Salt Water
-K:255:0xBC:0x85
-
-# Enlightenment
-K:256:0xBC:0x85
-
-# Heroism
-K:257:0xBC:0x85
-
-# Berserk Strength
-K:258:0xBC:0x85
-
-# Boldness
-K:259:0xBC:0x85
-
-# Restore Life Levels
-K:260:0xBC:0x87
-
-# Resist Heat
-K:261:0xBC:0x85
-
-# Resist Cold
-K:262:0xBC:0x85
-
-# Detect Invisible
-K:263:0xBC:0x85
-
-# Slow Poison
-K:264:0xBC:0x85
-
-# Neutralise Poison
-K:265:0xBC:0x85
-
-# Restore Mana
-K:266:0xBC:0x86
-
-# Infra-vision
-K:267:0xBC:0x85
-
-# Resistance
-K:268:0xBC:0x85
-
-# Spell
-K:269:0xB7:0x8F
-
-# Manathrust
-K:270:0xB7:0x8F
-
-# Fireflash
-K:271:0xB7:0x8F
-
-# Firewall
-K:272:0xB7:0x90
-
-# Tidal Wave
-K:273:0xB7:0x8F
-
-# Ice Storm
-K:274:0xB7:0x8F
-
-# Noxious Cloud
-K:275:0xB7:0x8F
-
-# Poison Blood
-K:276:0xB7:0x8F
-
-# Thunderstorm
-K:277:0xB7:0x8F
-
-# Dig
-K:278:0xB7:0x8F
-
-# Stone Prison
-K:279:0xB7:0x8F
-
-# Strike
-K:280:0xB7:0x91
-
-# Teleport Away
-K:281:0xB7:0x8F
-
-# Summon Animal
-K:282:0xB7:0x8F
-
-# Magelock
-K:283:0xB7:0x90
-
-# Slow Monster
-K:284:0xB7:0x90
-
-# Essence of Speed
-K:285:0xB7:0x8F
-
-# Banishment
-K:286:0xB7:0x8F
-
-# Disperse Magic
-K:287:0xB7:0x90
-
-# Charm
-K:288:0xB7:0x90
-
-# Confuse
-K:289:0xB7:0x91
-
-# Demon Blade
-K:290:0xB7:0x8F
-
-# Heal Monster
-K:291:0xB7:0x91
-
-# Haste Monster
-K:292:0xB7:0x8F
-
-# & Flight Arrow~
-K:293:0xCD:0x86
-
-# & Boulder~
-K:295:0x85:0x97
-
-# & Flame~ Imperishable
-K:296:0x85:0x98
-
-# & Necromantic Teeth~
-K:297:0x85:0x99
-
-# & Golden Horn~ of the Eagles
-K:298:0xB7:0x91
-
-# Spell
-K:300:0xB9:0x99
-
-# Nothing
-K:301:0xB9:0x99
-
-# Globe of Light
-K:302:0xB9:0x99
-
-# Fiery Shield
-K:303:0xB9:0x99
-
-# Remove Curses
-K:304:0xB9:0x9A
-
-# Wings of Winds
-K:305:0xB9:0x99
-
-# Shake
-K:306:0xB9:0x99
-
-# Disarm
-K:307:0xB9:0x9B
-
-# Teleportation
-K:308:0xB9:0x99
-
-# Probability Travel
-K:309:0xB9:0x99
-
-# Recovery
-K:310:0xB9:0x99
-
-# Healing
-K:311:0xB9:0x99
-
-# Vision
-K:312:0xB9:0x99
-
-# Identify
-K:313:0xB9:0x99
-
-# Sense Hidden
-K:314:0xB9:0x9A
-
-# Reveal Ways
-K:315:0xB9:0x99
-
-# Sense Monsters
-K:316:0xB9:0x99
-
-# Genocide
-K:317:0xB9:0x9A
-
-# Summon
-K:318:0xB9:0x99
-
-# Sterilization
-K:319:0xB9:0x9A
-
-# Wish
-K:320:0xB9:0x9B
-
-# Mana
-K:321:0xB9:0x9A
-
-# & Tome~ of Magical Energy
-K:330:0xA3:0x8A
-
-# & Tome~ of the Eternal Flame
-K:331:0xA3:0x8A
-
-# & Tome~ of the Blowing Wind
-K:332:0xA3:0x8A
-
-# & Tome~ of the Impenetrable Earth
-K:333:0xA3:0x8A
-
-# & Tome~ of the Everrunning Wave
-K:334:0xA3:0x8C
-
-# & Tome~ of Translocation
-K:335:0xA3:0x8C
-
-# & Tome~ of the Tree
-K:336:0xA3:0x8C
-
-# & Tome~ of Knowledge
-K:337:0xA3:0x8C
-
-# & Small wooden chest~
-K:338:0x80:0x96
-
-# & Large wooden chest~
-K:339:0x80:0x97
-
-# & Small iron chest~
-K:340:0x80:0x98
-
-# & Large iron chest~
-K:341:0x80:0x99
-
-# & Small steel chest~
-K:342:0x80:0x9A
-
-# & Large steel chest~
-K:343:0x80:0x9B
-
-# & Ruined chest~
-K:344:0x80:0x9C
-
-# & Iron Spike~
-K:345:0x8B:0x84
-
-# & Wooden Torch~
-K:346:0x8B:0x86
-
-# & Brass Lantern~
-K:347:0x8B:0x85
-
-# & Flask~ of oil
-K:348:0xBC:0x90
-
-# & Empty Bottle~
-K:349:0x8A:0x99
-
-# Havoc
-K:350:0xB8:0x94
-
-# Door/Stair Location
-K:351:0xB8:0x94
-
-# Trap Location
-K:352:0xB8:0x94
-
-# Probing
-K:353:0xB8:0x97
-
-# Recall
-K:354:0xB8:0x96
-
-# Illumination
-K:355:0xB8:0x95
-
-# Light
-K:356:0xB8:0x94
-
-# Lightning Bolts
-K:357:0xB8:0x94
-
-# Frost Bolts
-K:358:0xB8:0x95
-
-# Fire Bolts
-K:359:0xB8:0x95
-
-# Polymorph
-K:360:0xB8:0x95
-
-# Slow Monster
-K:361:0xB8:0x95
-
-# Sleep Monster
-K:362:0xB8:0x95
-
-# Drain Life
-K:363:0xB8:0x97
-
-# Teleport Other
-K:364:0xB8:0x96
-
-# Disarming
-K:365:0xB8:0x95
-
-# Lightning Balls
-K:366:0xB8:0x96
-
-# Cold Balls
-K:367:0xB8:0x96
-
-# Fire Balls
-K:368:0xB8:0x97
-
-# Acid Balls
-K:369:0xB8:0x97
-
-# Acid Bolts
-K:370:0xB8:0x95
-
-# Enlightenment
-K:371:0xB8:0x97
-
-# Perception
-K:372:0xB8:0x96
-
-# Curing
-K:373:0xB8:0x97
-
-# Healing
-K:374:0xB8:0x97
-
-# Detection
-K:375:0xB8:0x95
-
-# Restoration
-K:376:0xB8:0x97
-
-# Speed
-K:377:0xB8:0x97
-
-# Spell
-K:378:0xA3:0x8E
-
-# Spell
-K:379:0x86:0x9E
-
-# & Broken Skull~
-K:391:0x8B:0x8A
-
-# & Broken Bone~
-K:392:0x8B:0x8B
-
-# & Canine Skeleton~
-K:393:0x8B:0x87
-
-# & Rodent Skeleton~
-K:394:0x8B:0x87
-
-# & Human Skeleton~
-K:395:0x8B:0x87
-
-# & Dwarf Skeleton~
-K:396:0x8B:0x87
-
-# & Elf Skeleton~
-K:397:0x8B:0x87
-
-# & Gnome Skeleton~
-K:398:0x8B:0x87
-
-# & Great Hammer~
-K:399:0xCD:0x87
-
-# Black Dragon Scale Mail~
-K:400:0x88:0x9F
-
-# Blue Dragon Scale Mail~
-K:401:0x88:0x9D
-
-# White Dragon Scale Mail~
-K:402:0x88:0x9E
-
-# Red Dragon Scale Mail~
-K:403:0x89:0x81
-
-# Green Dragon Scale Mail~
-K:404:0x89:0x80
-
-# Multi-Hued Dragon Scale Mail~
-K:405:0x89:0x82
-
-# Pseudo Dragon Scale Mail~
-K:406:0xBB:0x9C
-
-# Law Dragon Scale Mail~
-K:407:0x88:0x9F
-
-# Bronze Dragon Scale Mail~
-K:408:0x88:0x96
-
-# Gold Dragon Scale Mail~
-K:409:0x88:0x9C
-
-# Chaos Dragon Scale Mail~
-K:410:0x89:0x80
-
-# Balance Dragon Scale Mail~
-K:411:0x88:0x99
-
-# Power Dragon Scale Mail~
-K:412:0xA2:0x9E
-
-# & Dragon Helm~
-K:413:0xA2:0x9D
-
-# & Dragon Shield~
-K:414:0xA2:0x9C
-
-# Death
-K:415:0xBC:0x88
-
-# Ruination
-K:416:0xBC:0x87
-
-# Detonations
-K:417:0xBC:0x87
-
-# Augmentation
-K:418:0xBC:0x87
-
-# *Healing*
-K:419:0xBC:0x87
-
-# Life
-K:420:0xBC:0x88
-
-# Self Knowledge
-K:421:0xBC:0x87
-
-# *Enlightenment*
-K:422:0xBC:0x88
-
-# Fear Resistance
-K:425:0xB5:0x81
-
-# Light and Darkness Resistance
-K:426:0xB5:0x81
-
-# Nether Resistance
-K:427:0xB5:0x81
-
-# Nexus Resistance
-K:428:0xB5:0x81
-
-# Sound Resistance
-K:429:0xB5:0x81
-
-# Confusion Resistance
-K:430:0xB5:0x81
-
-# Shard Resistance
-K:431:0xB5:0x81
-
-# Disenchantment Resistance
-K:432:0xB5:0x81
-
-# Chaos Resistance
-K:433:0xB5:0x81
-
-# Blindness Resistance
-K:434:0xB5:0x81
-
-# Lordly Protection
-K:435:0xB5:0x81
-
-# Extra Attacks
-K:436:0xB5:0x81
-
-# Cure Light Wounds
-K:437:0xBC:0x85
-
-# Clumsiness
-K:438:0xBC:0x85
-
-# Sickliness
-K:439:0xBC:0x85
-
-# Map of Bree
-K:440:0xD8:0x81
-
-# Map of Gondolin
-K:441:0xD8:0x81
-
-# Map of Lothlorien
-K:442:0xD8:0x81
-
-# Map of Minas Anor
-K:443:0xD8:0x81
-
-# & Silver Arrow~
-K:465:0xCE:0x91
-
-# & Silver Bolt~
-K:466:0xCE:0x92
-
-# Lightning Resistance
-K:467:0x87:0x80
-
-# Wisdom
-K:468:0x87:0x80
-
-# Regeneration
-K:469:0x87:0x80
-
-# Infravision
-K:470:0x87:0x80
-
-# Devotion
-K:471:0x87:0x80
-
-# Weaponmastery
-K:472:0x87:0x80
-
-# Trickery
-K:473:0x87:0x80
-
-# Telepathy
-K:474:0x87:0x80
-
-# Sustenance
-K:475:0x87:0x80
-
-# & Palantir~
-K:476:0xD8:0x8F
-
-# & Elfstone~
-K:477:0xB6:0x8F
-
-# & Jewel~
-K:478:0xB6:0x90
-
-# & Ring~
-K:479:0xB5:0x8E
-
-# copper
-K:480:0x80:0x8B
-
-# copper
-K:481:0x80:0x8B
-
-# copper
-K:482:0x80:0x8B
-
-# silver
-K:483:0x80:0x8C
-
-# silver
-K:484:0x80:0x8C
-
-# silver
-K:485:0x80:0x8C
-
-# garnets
-K:486:0x80:0x8F
-
-# garnets
-K:487:0x80:0x8F
-
-# gold
-K:488:0x80:0x8D
-
-# gold
-K:489:0x80:0x8D
-
-# gold
-K:490:0x80:0x8D
-
-# opals
-K:491:0x80:0x90
-
-# sapphires
-K:492:0x80:0x91
-
-# rubies
-K:493:0x80:0x92
-
-# diamonds
-K:494:0x80:0x93
-
-# emeralds
-K:495:0x80:0x94
-
-# mithril
-K:496:0x80:0x8E
-
-# adamantite
-K:497:0xA3:0x95
-
-# & Mighty Hammer~
-K:498:0x87:0x9A
-
-# & Massive Iron Crown~
-K:499:0x87:0x9B
-
-# & Phial~
-K:500:0x87:0x9D
-
-# & Star~
-K:501:0x87:0x9E
-
-# & Arkenstone~
-K:502:0x87:0x9F
-
-# & Amulet~
-K:503:0xB6:0x82
-
-# & Amulet~
-K:504:0xB6:0x83
-
-# & Necklace~
-K:505:0xB6:0x84
-
-# & Ring~
-K:506:0xB5:0x83
-
-# & Ring~
-K:507:0xB5:0x83
-
-# & Ring~
-K:508:0xB5:0x84
-
-# & Ring~
-K:509:0xB5:0x85
-
-# & Ring~
-K:510:0xB5:0x86
-
-# & Ring~
-K:511:0xB5:0x87
-
-# Reflection
-K:520:0xB6:0x80
-
-# Anti-Magic
-K:521:0xB6:0x80
-
-# Anti-Teleportation
-K:522:0xB6:0x80
-
-# Resistance
-K:523:0xB6:0x80
-
-# & Zweihander~
-K:524:0xCD:0x88
-
-# & Dwarven Lantern~
-K:525:0xD8:0x86
-
-# Splint Mail~
-K:526:0xCD:0x8A
-
-# & Everburning Torch~
-K:527:0xD8:0x87
-
-# & Trifurcate Spear~
-K:528:0xCD:0x96
-
-# & Three-Piece Rod~
-K:529:0xCD:0x8C
-
-# & Feanorian Lamp~
-K:530:0xD8:0x85
-
-# & Fur Cloak~
-K:531:0xCD:0x8E
-
-# Water Curing
-K:532:0xBC:0x84
-
-# & Hatchet~
-K:533:0xCD:0x90
-
-# Mumak Hide Armour~
-K:535:0xCD:0x91
-
-# & Leather Jerkin~
-K:536:0xCD:0x92
-
-# & Sickle~
-K:537:0xCD:0x93
-
-# & Club~
-K:542:0xCD:0x99
-
-# & Broad Spear~
-K:543:0xCD:0x9A
-
-# & Khopesh~
-K:544:0xCD:0x9B
-
-# & Flamberge~
-K:545:0xCD:0x9C
-
-# & Claymore~
-K:546:0xCD:0x9D
-
-# & Espadon~
-K:547:0xCD:0x9E
-
-# & Great Scimitar~
-K:548:0xCD:0x9F
-
-# Arrow
-K:549:0xD7:0x84
-
-# Bolt
-K:550:0xD7:0x83
-
-# & Fauchard~
-K:551:0xCE:0x82
-
-# & Guisarme~
-K:552:0xCE:0x83
-
-# & Heavy Lance~
-K:553:0xCE:0x84
-
-# & Bardiche~
-K:554:0xCE:0x85
-
-# Catapult
-K:555:0xD7:0x82
-
-# Ring Mail~
-K:556:0xCE:0x87
-
-# Cord Armour~
-K:557:0xCE:0x88
-
-# Paper Armour~
-K:558:0xCE:0x89
-
-# Padded Armour~
-K:559:0xCE:0x8A
-
-# Fumes
-K:560:0xD7:0x80
-
-# Golden Ring Mail~
-K:561:0x87:0x98
-
-# Magic
-K:562:0xD7:0x81
-
-# Device
-K:563:0xD7:0x85
-
-# Nothing
-K:569:0xB8:0x95
-
-# & Blood~ of Life
-K:573:0x87:0x88
-
-# & Mage Staff~
-K:577:0xCE:0x97
-
-# Lightning
-K:578:0xB5:0x81
-
-# & Ring~
-K:582:0xB5:0x8F
-
-# Invisibility
-K:583:0xB8:0x85
-
-# Corruption
-K:585:0xB8:0x85
-
-# Invisibility
-K:586:0xB5:0x81
-
-# Deep Thoughts
-K:588:0xD8:0x80
-
-# More Deep Thoughts
-K:589:0xD8:0x80
-
-# Compendium of Deep Thoughts
-K:590:0xD8:0x80
-
-# Artifact Lore Vol. I
-K:591:0xD8:0x80
-
-# Artifact Lore Vol. II
-K:592:0xD8:0x80
-
-# Artifact Lore Vol. III
-K:593:0xD8:0x80
-
-# Monstrous Compendium 1
-K:594:0xD8:0x80
-
-# Monstrous Compendium 2
-K:595:0xD8:0x80
-
-# Monstrous Compendium 3
-K:596:0xD8:0x80
-
-# Monstrous Compendium 4
-K:597:0xD8:0x80
-
-# Monstrous Compendium 5
-K:598:0xD8:0x80
-
-# Monstrous Compendium 6
-K:599:0xD8:0x80
-
-# Monstrous Compendium 7
-K:600:0xD8:0x80
-
-# Monstrous Compendium 8
-K:601:0xD8:0x80
-
-# Monstrous Compendium 9
-K:602:0xD8:0x80
-
-# Monstrous Compendium 10
-K:603:0xD8:0x80
-
-# Monstrous Compendium 11
-K:604:0xD8:0x80
-
-# & Morphic Oil~ of #
-K:605:0xBC:0x85
-
-# Artifact Lore Vol. IV
-K:607:0xD8:0x80
-
-# Artifact Lore Vol. V
-K:608:0xD8:0x80
-
-# Artifact Lore Vol. VI
-K:609:0xD8:0x80
-
-# Artifact Lore Vol. VII
-K:610:0xD8:0x80
-
-# Artifact Lore Vol. VIII
-K:611:0xD8:0x80
-
-# Artifact Lore Vol. IX
-K:612:0xD8:0x80
-
-# Artifact Lore Vol. X
-K:613:0xD8:0x80
-
-# Artifact Lore Vol. XI
-K:614:0xD8:0x80
-
-# Artifact Lore Vol. IX
-K:615:0xD8:0x80
-
-# Artifact Lore Vol. X
-K:616:0xD8:0x80
-
-# Artifact Lore Vol. XI
-K:617:0xD8:0x80
-
-# & #~
-K:618:0xCE:0x93
-
-# corpse
-K:641:0xB4:0x90
-
-# skeleton
-K:642:0xB4:0x8B
-
-# head
-K:643:0xB4:0x8E
-
-# skull
-K:644:0xB4:0x8F
-
-# raw meat
-K:645:0xB4:0x8C
-
-# & Great Eagle Down Coat~
-K:646:0xCE:0x98
-
-# & Key~
-K:647:0xD8:0x90
-
-# & Small Wooden Boomerang~
-K:648:0xCE:0x99
-
-# & Wooden Boomerang~
-K:649:0xCE:0x9A
-
-# & Small Metal Boomerang~
-K:650:0xCE:0x9B
-
-# & Metal Boomerang~
-K:651:0xCE:0x9C
-
-# & Anchor~
-K:652:0xD8:0x91
-
-# & ~
-K:653:0x87:0x99
-
-# Summon Never-Moving Pet
-K:654:0x86:0x80
-
-# Cure Light Insanity
-K:657:0xBC:0x85
-
-# Cure Serious Insanity
-K:658:0xBC:0x85
-
-# Cure Critical Insanity
-K:659:0xBC:0x85
-
-# Cure Insanity
-K:660:0xBC:0x85
-
-# & Phial~
-K:661:0x87:0x9D
-
-# Junkart
-K:662:0x87:0x9C
-
-# Craftsmanship
-K:663:0x86:0x82
-
-# The One Ring
-K:664:0xD8:0x81
-
-# & Horn~
-K:669:0xD8:0x88
-
-# & Drum~
-K:670:0xD8:0x89
-
-# & Harp~
-K:671:0xD8:0x8A
-
-# & Palantir~
-K:675:0xD8:0x8F
-
-# Egg
-K:676:0xD8:0x84
-
-# Reset Recall
-K:677:0x86:0x81
-
-# Divination
-K:678:0x86:0x81
-
-# Self
-K:679:0xDA:0x80
-
-# Ray
-K:680:0xDA:0x80
-
-# Sphere
-K:681:0xDA:0x80
-
-# Knowledge
-K:682:0xDA:0x80
-
-# Life
-K:683:0xDA:0x84
-
-# Fire
-K:684:0xDA:0x81
-
-# Cold
-K:685:0xDA:0x80
-
-# Lightning
-K:686:0xDA:0x85
-
-# Acid
-K:687:0xDA:0x88
-
-# Element
-K:688:0xDA:0x89
-
-# Chaos
-K:689:0xDA:0x83
-
-# Mind
-K:690:0xDA:0x84
-
-# Holding
-K:691:0xDA:0x84
-
-# Arrow
-K:692:0xDA:0x80
-
-# Power Surge
-K:693:0xDA:0x80
-
-# Armageddon
-K:694:0xDA:0x80
-
-# Gravity
-K:695:0xDA:0x82
-
-# Undeath
-K:697:0xDA:0x82
-
-# Protection
-K:698:0xDA:0x82
-
-# & Ring~ of Precognition
-K:700:0xB5:0x8E
-
-# & Sprig~ of Athelas
-K:701:0xCE:0x96
-
-# & Old Scroll~ of Deincarnation
-K:720:0x86:0x82
-
-# & Dark Sword~
-K:721:0xCE:0x9D
-
-# Numenorean for Beginners (I)
-K:722:0xD8:0x81
-
-# Numenorean for Beginners (II)
-K:723:0xD8:0x81
-
-# Advanced Lessons of Numenorean
-K:724:0xD8:0x81
-
-# Advanced Lessons of Sindarin
-K:725:0xD8:0x81
-
-# & Shard~ of Pottery
-K:726:0x8B:0x88
-
-# & Broken Stick~
-K:727:0x8B:0x89
-
-# & Book~ of Beginner Cantrips
-K:738:0xA3:0x8B
-
-# & Book~ of Teleportation
-K:739:0xA3:0x8B
-
-# & Book~ of Summoning
-K:741:0xA3:0x8B
-
-# & Potion~ of Learning
-K:743:0x87:0x86
-
-# Khuzdul - The Hidden Tongue of the Dwarves
-K:751:0xD8:0x81
-
-# Nandorin for Dummies
-K:752:0xD8:0x81
-
-# Advanced Lessons of Orcish
-K:753:0xD8:0x81
-
-# Flying
-K:755:0xB5:0x80
-
-# & Tome~ of the Time
-K:756:0xA3:0x8D
-
-# & Spellbook~ of #
-K:757:0xA3:0x8A
-
-# & Tome~ of Meta Spells
-K:758:0xA3:0x8D
-
-# & Tome~ of the Mind
-K:759:0xA3:0x8D
-
-# & Holy Tome~ of Eru Iluvatar
-K:760:0xA3:0x8B
-
-# & Holy Tome~ of Manwe Sulimo
-K:761:0xA3:0x8C
-
-# & War Tome~ of Tulkas
-K:762:0xA3:0x90
-
-# & Unholy Tome~ of the Hellflame
-K:763:0xA3:0x91
-
-# & Corrupted Tome~ of Melkor
-K:764:0xA3:0x91
-
-# & Earth Tome~ of Aule
-K:765:0xA3:0x92
-
-# & Shining Tome~ of Varda
-K:766:0xA3:0x8B
-
-# & Water Tome~ of Ulmo
-K:767:0xA3:0x8D
-
-# & Forest Tome~ of Yavanna
-K:768:0xA3:0x8F
-
-# Tome of#
-K:769:0xA3:0x8F
-
-# & Ring~
-K:770:0xB5:0x8E
-
-# & Holy Tome~ of Mandos
-K:771:0xA3:0x8A
-
-# & Great Rod Tip~ of Home Summoning
-K:776:0xB8:0x84
-
-# & Shadow Blade~
-K:777:0xCD:0x9C
-
-# & Bluesteel Blade~
-K:778:0xCE:0x9E
-
-# the Serpents
-K:779:0xB6:0x9F
-
-# Ring~ of Power
-K:785:0xB5:0x85
-
-# Climbing Set~
-K:786:0xD8:0x92
-
-# Adventurer's Guide to Middle-earth
-K:787:0xD8:0x80
-
-# & Demonblade~
-K:788:0xCE:0x94
-
-# & Demonshield~
-K:789:0xCE:0x94
-
-# & Demonhorn~
-K:790:0xCE:0x95
-
-# & Wooden Rod~ of#
-K:793:0xDB:0x80
-
-# & Copper Rod~ of#
-K:794:0xDB:0x81
-
-# & Iron Rod~ of#
-K:795:0xDB:0x82
-
-# & Moonstone Rod~ of#
-K:796:0xDB:0x83
-
-# & Silver Rod~ of#
-K:797:0xDB:0x84
-
-# & Golden Rod~ of#
-K:798:0xDB:0x85
-
-# & Mithril Rod~ of#
-K:799:0xDB:0x86
-
-# & Tilkal Rod~ of#
-K:800:0xDB:0x87
-
-# & Greater Ration~ of Health
-K:801:0x8A:0x9E
-
-# & Crumpled Scroll~ of Mass Resurrection
-K:802:0x86:0x82
-
-# & Cleaver~
-K:803:0xD8:0x93
-
-# & Light War Axe~
-K:804:0xD8:0x94
-
-# & Slaughter Axe~
-K:805:0xD8:0x95
-
-# & Runestone~
-K:806:0xDA:0x83
-
-# & Fortune cookie~
-K:807:0x8A:0x93
-
-# Critical Hits
-K:809:0xB5:0x82
-
-# & Wand~ of Digging of Thrain
-K:810:0xB8:0x97
-
-# & Gnarled Staff~ of Holy Fire of Mithrandir
-K:811:0xCE:0x9F
-
-# Partial Totem
-K:812:0xB4:0x82
-
-# True Totem
-K:813:0xB4:0x85
-
-# & Piece~ of the Relic of Eru
-K:814:0x8B:0x91
-
-# & Piece~ of the Relic of Manwe
-K:815:0x8B:0x92
-
-# & Piece~ of the Relic of Tulkas
-K:816:0x8B:0x93
-
-# & Piece~ of the Relic of Melkor
-K:817:0x8B:0x94
-
-# & Piece~ of the Relic of Yavanna
-K:818:0x8B:0x95
-
-# & Ring~
-K:819:0xB5:0x82
-
-# & Ring~
-K:820:0xB5:0x82
-
-# & Ring~
-K:821:0xB5:0x82
-
-# & Ring~
-K:822:0xB5:0x82
-
-# & Ring~
-K:823:0xB5:0x82
-
-# & Ring~
-K:824:0xB5:0x82
-
-# & Piece~ of the Relic of Aule
-K:825:0x8B:0x96
-
-# & Piece~ of the Relic of Varda
-K:826:0x8B:0x97
-
-# & Piece~ of the Relic of Ulmo
-K:827:0x8B:0x98
-
-# & Piece~ of the Relic of Mandos
-K:828:0x8B:0x99
-
-# & Pinch~ of Longbottom Leaf
-K:831:0x87:0x8C
-
-# & Ear~ of Corn
-K:832:0x85:0x9A
-
-# & Tater~
-K:833:0x85:0x9B
-
-# & Strawberry~
-K:834:0x85:0x9C
-
-# & Turnip~
-K:835:0x85:0x9D
-
-# & Jar~ of Honey
-K:836:0x85:0x9E
-
-# & Jug~ of Milk
-K:837:0x85:0x9F
-
-# of War
-K:838:0xB9:0x9A
-
-# of Life
-K:839:0xB9:0x9C
-
-# Wizardry
-K:840:0x82:0x81
-
-# Vitality
-K:841:0x82:0x81
-
-# Clear Thought
-K:842:0x00:0x3D
-
-# Clumsiness
-K:843:0x82:0x81
-
-# Sickliness
-K:844:0x82:0x81
-
-# Fortune
-K:845:0x82:0x7F
-
-# Sterilise
-K:846:0xA3:0x92
-
-# Map of Middle-earth
-K:847:0xA3:0x92
-
-# Map of Edoras
-K:848:0xD8:0x81
-
-# Map of Esgaroth
-K:849:0xD8:0x81
-
-# Map of Hobbiton
-K:850:0xD8:0x81
-
-# Map of Osgiliath
-K:851:0xD8:0x81
-
-# Map of Pelargir
-K:852:0xD8:0x81
-
-# Map of Beorn's domain
-K:853:0xD8:0x81
-
-# Map of Dale
-K:854:0xD8:0x81
-
-# Map of Henneth Annun
-K:855:0xD8:0x81
-
-# Map of Helm's Deep
-K:856:0xD8:0x81
-
-# Map of Thranduil's realm
-K:857:0xD8:0x81
-
-# Map of Imladris
-K:858:0xD8:0x81
-
-# & Bearded Axe~
-K:859:0x87:0x90
-
-# & Double Axe~
-K:860:0x87:0x91
-
-# & Crusader Axe~
-K:861:0x87:0x92
-
-# & Reaper Axe~
-K:862:0x87:0x93
-
-# & Mithril Helm~
-K:863:0x8B:0x9A
-
-# & Set~ of Mithril Gauntlets
-K:864:0x8B:0x9B
-
-# & Small Mithril Shield~
-K:865:0x8B:0x9C
-
-# & Large Mithril Shield~
-K:866:0x8B:0x9D
-
-# & Map~
-K:867:0xA3:0x92
-
-# & Key~
-K:868:0x87:0x8D
-
-# & Cup~
-K:869:0x87:0x8E
-
-# & Red Arrow~
-K:870:0x87:0x8F
-
-# & Sceptre~
-K:871:0x86:0x91
-
-# & Rod~
-K:872:0x86:0x90
-
-# & Necklace~
-K:873:0x86:0x9F
-
-# & Amulet~
-K:874:0x86:0x9E
-
-# & Black Banner~
-K:875:0x87:0x94
-
-# & Pearl~
-K:876:0x87:0x95
-
-# & Silmaril~
-K:877:0x87:0x96
-
-# & Silmaril~
-K:878:0x87:0x97
-
-# & Golden Harp~
-K:879:0xD9:0x8A
-
-# Player
-R:0:0x8C/0x81
-
-# Spells (*)
-S:0x30:0x85/0x93
-S:0x31:0x85/0x92
-S:0x32:0x85/0x92
-S:0x33:0x85/0x8D
-S:0x34:0x85/0x8C
-S:0x35:0x85/0x8F
-S:0x36:0x85/0x90
-S:0x37:0x85/0x95
-S:0x38:0x85/0x93
-S:0x39:0x85/0x92
-S:0x3A:0x85/0x91
-S:0x3B:0x85/0x8E
-S:0x3C:0x85/0x8D
-S:0x3D:0x85/0x8F
-S:0x3E:0x85/0x90
-S:0x3F:0x85/0x95
-
-# Spells (|)
-S:0x40:0x84/0x9C
-S:0x41:0x84/0x98
-S:0x42:0x84/0x98
-S:0x43:0x85/0x88
-S:0x44:0x84/0x80
-S:0x45:0x84/0x8C
-S:0x46:0x84/0x90
-S:0x47:0x85/0x84
-S:0x48:0x84/0x9C
-S:0x49:0x84/0x98
-S:0x4A:0x84/0x94
-S:0x4B:0x84/0x88
-S:0x4C:0x85/0x88
-S:0x4D:0x84/0x8C
-S:0x4E:0x84/0x90
-S:0x4F:0x85/0x84
-
-# Spells (-)
-S:0x50:0x84/0x9D
-S:0x51:0x84/0x99
-S:0x52:0x84/0x99
-S:0x53:0x85/0x89
-S:0x54:0x84/0x81
-S:0x55:0x84/0x8D
-S:0x56:0x84/0x91
-S:0x57:0x85/0x85
-S:0x58:0x84/0x9D
-S:0x59:0x84/0x99
-S:0x5A:0x84/0x95
-S:0x5B:0x84/0x89
-S:0x5C:0x85/0x89
-S:0x5D:0x84/0x8D
-S:0x5E:0x84/0x91
-S:0x5F:0x85/0x85
-
-# Spells (:)
-S:0x60:0x84/0x9E
-S:0x61:0x84/0x9A
-S:0x62:0x84/0x9A
-S:0x63:0x85/0x8A
-S:0x64:0x84/0x82
-S:0x65:0x84/0x8E
-S:0x66:0x84/0x92
-S:0x67:0x85/0x86
-S:0x68:0x84/0x9E
-S:0x69:0x84/0x9A
-S:0x6A:0x84/0x96
-S:0x6B:0x84/0x8A
-S:0x6C:0x85/0x8A
-S:0x6D:0x84/0x8E
-S:0x6E:0x84/0x92
-S:0x6F:0x85/0x86
-
-# Spells (\)
-S:0x70:0x84/0x9F
-S:0x71:0x84/0x9B
-S:0x72:0x84/0x9B
-S:0x73:0x85/0x8B
-S:0x74:0x84/0x83
-S:0x75:0x84/0x8F
-S:0x76:0x84/0x93
-S:0x77:0x85/0x87
-S:0x78:0x84/0x9F
-S:0x79:0x84/0x9B
-S:0x7A:0x84/0x97
-S:0x7B:0x84/0x8B
-S:0x7C:0x85/0x8B
-S:0x7D:0x84/0x8F
-S:0x7E:0x84/0x93
-S:0x7F:0x85/0x87
-
-# Amulets (")
-S:0x80:0xB6/0x87
-S:0x81:0xB6/0x88
-S:0x82:0xB6/0x85
-S:0x83:0xB6/0x86
-S:0x84:0xB6/0x81
-S:0x85:0xB6/0x82
-S:0x86:0xB6/0x83
-S:0x87:0xB6/0x84
-S:0x88:0xB6/0x87
-S:0x89:0xB6/0x88
-S:0x8A:0xB6/0x8E
-S:0x8B:0xB6/0x86
-S:0x8C:0xB6/0x81
-S:0x8D:0xB6/0x82
-S:0x8E:0xB6/0x8B
-S:0x8F:0xB6/0x8C
-
-# Rings (=)
-S:0x90:0xB5/0x8B
-S:0x91:0xB5/0x8C
-S:0x92:0xB5/0x89
-S:0x93:0xB5/0x8A
-S:0x94:0xB5/0x81
-S:0x95:0xB5/0x82
-S:0x96:0xB5/0x83
-S:0x97:0xB5/0x88
-S:0x98:0xB5/0x8B
-S:0x99:0xB5/0x8C
-S:0x9A:0xB5/0x80
-S:0x9B:0xB5/0x8A
-S:0x9C:0xB5/0x81
-S:0x9D:0xB5/0x82
-S:0x9E:0xB5/0x83
-S:0x9F:0xB5/0x88
-
-# Staffs (_)
-S:0xA0:0xB9/0x84
-S:0xA1:0xB9/0x85
-S:0xA2:0xB9/0x85
-S:0xA3:0xB9/0x81
-S:0xA4:0xB9/0x81
-S:0xA5:0xB9/0x82
-S:0xA6:0xB9/0x80
-S:0xA7:0xB9/0x87
-S:0xA8:0xB9/0x84
-S:0xA9:0xB9/0x85
-S:0xAA:0xB9/0x83
-S:0xAB:0xB9/0x87
-S:0xAC:0xB9/0x81
-S:0xAD:0xB9/0x82
-S:0xAE:0xB9/0x80
-S:0xAF:0xB9/0x87
-
-# Wands (-)
-S:0xB0:0xB7/0x84
-S:0xB1:0xB7/0x85
-S:0xB2:0xB7/0x85
-S:0xB3:0xB7/0x86
-S:0xB4:0xB7/0x81
-S:0xB5:0xB7/0x82
-S:0xB6:0xB7/0x80
-S:0xB7:0xB7/0x87
-S:0xB8:0xB7/0x84
-S:0xB9:0xB7/0x85
-S:0xBA:0xB7/0x83
-S:0xBB:0xB7/0x86
-S:0xBC:0xB7/0x81
-S:0xBD:0xB7/0x82
-S:0xBE:0xB7/0x80
-S:0xBF:0xB7/0x87
-
-# Rods (-)
-S:0xC0:0xB8/0x84
-S:0xC1:0xB8/0x85
-S:0xC2:0xB8/0x85
-S:0xC3:0xB8/0x86
-S:0xC4:0xB8/0x81
-S:0xC5:0xB8/0x82
-S:0xC6:0xB8/0x80
-S:0xC7:0xB8/0x87
-S:0xC8:0xB8/0x84
-S:0xC9:0xB8/0x85
-S:0xCA:0xB8/0x83
-S:0xCB:0xB8/0x86
-S:0xCC:0xB8/0x81
-S:0xCD:0xB8/0x82
-S:0xCE:0xB8/0x80
-S:0xCF:0xB8/0x87
-
-# Scrolls (?)
-S:0xD0:0x86/0x82
-S:0xD1:0x86/0x82
-S:0xD2:0x86/0x82
-S:0xD3:0x86/0x82
-S:0xD4:0x86/0x82
-S:0xD5:0x86/0x82
-S:0xD6:0x86/0x82
-S:0xD7:0x86/0x82
-S:0xD8:0x86/0x82
-S:0xD9:0x86/0x82
-S:0xDA:0x86/0x82
-S:0xDB:0x86/0x82
-S:0xDC:0x86/0x82
-S:0xDD:0x86/0x82
-S:0xDE:0x86/0x82
-S:0xDF:0x86/0x82
-
-# Potions (!)
-S:0xE0:0xBC/0x84
-S:0xE1:0xBC/0x83
-S:0xE2:0xBC/0x8A
-S:0xE3:0xBC/0x8B
-S:0xE4:0xBC/0x87
-S:0xE5:0xBC/0x86
-S:0xE6:0xBC/0x85
-S:0xE7:0xBC/0x89
-S:0xE8:0xBC/0x84
-S:0xE9:0xBC/0x83
-S:0xEA:0xBC/0x8E
-S:0xEB:0xBC/0x88
-S:0xEC:0xBC/0x8B
-S:0xED:0xBC/0x8C
-S:0xEE:0xBC/0x8D
-S:0xEF:0xBC/0x89
-
-# Food (,)
-S:0xF0:0xBA/0x84
-S:0xF1:0xBA/0x85
-S:0xF2:0xBA/0x85
-S:0xF3:0xBA/0x86
-S:0xF4:0xBA/0x81
-S:0xF5:0xBA/0x82
-S:0xF6:0xBA/0x80
-S:0xF7:0xBA/0x87
-S:0xF8:0xBA/0x84
-S:0xF9:0xBA/0x85
-S:0xFA:0xBA/0x83
-S:0xFB:0xBA/0x86
-S:0xFC:0xBA/0x81
-S:0xFD:0xBA/0x82
-S:0xFE:0xBA/0x80
-S:0xFF:0xBA/0x87
-
-# Unknown Amulet
-U:40:0xB6/0x81
-
-# Unknown Ring
-U:45:0xB5/0x81
-
-# Unknown Staff
-U:55:0xB9/0x81
-
-# Unknown Wand
-U:65:0xB7/0x81
-
-# Unknown Rod
-U:66:0xB8/0x81
-
-# Unknown Scroll
-U:70:0x86/0x82
-
-# Unknown Potion
-U:75:0xBC/0x85
-
-# Unknown Food
-U:80:0x8B/0x81
-# non-defines encountered :
-# Load the Trap image definitions
-%:trap-xxx.prf
diff --git a/lib/mods/theme/pref/graf.prf b/lib/mods/theme/pref/graf.prf
deleted file mode 100644
index a82ce364..00000000
--- a/lib/mods/theme/pref/graf.prf
+++ /dev/null
@@ -1,51 +0,0 @@
-# File: graf.prf
-
-#
-# This file defines special attr/char mappings for use in "graphics" mode
-#
-# This file includes, if appropriate, various "sub-files"
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-
-##### Standard font file #####
-
-%:font-xxx.prf
-
-
-##### System Specific Subfiles #####
-
-?:[IOR [EQU $SYS xaw] [EQU $SYS x11] [EQU $SYS gtk]]
-%:graf-x11.prf
-
-?:[EQU $SYS gcu]
-%:graf-gcu.prf
-
-?:[EQU $SYS ami]
-%:graf-ami.prf
-
-?:[EQU $SYS mac]
-%:graf-mac.prf
-
-?:[EQU $SYS dos]
-%:graf-dos.prf
-
-?:[EQU $SYS win]
-%:graf-win.prf
-
-?:[EQU $SYS ibm]
-%:graf-ibm.prf
-
-?:[EQU $SYS emx]
-%:graf-emx.prf
-
-?:[EQU $SYS acn]
-%:graf-acn.prf
-
-?:[EQU $SYS sdl]
-%:graf-sdl.prf
-
-?:1
-
-
diff --git a/lib/mods/theme/pref/pref-acn.prf b/lib/mods/theme/pref/pref-acn.prf
deleted file mode 100644
index ae95fe26..00000000
--- a/lib/mods/theme/pref/pref-acn.prf
+++ /dev/null
@@ -1,24 +0,0 @@
-# File: pref-acn.prf
-
-# This is a minimal "pref" file for RISC OS
-
-
-# Map cursor keys onto keypad
-
-A:4
-P:^_18C\r
-
-A:6
-P:^_18D\r
-
-A:2
-P:^_18E\r
-
-A:8
-P:^_18F\r
-
-
-# Map F3 to ^S (to be a bit RISC OS-ey)
-
-A:^S
-P:^_183\r
diff --git a/lib/mods/theme/pref/pref-ami.prf b/lib/mods/theme/pref/pref-ami.prf
deleted file mode 100644
index 08a1c310..00000000
--- a/lib/mods/theme/pref/pref-ami.prf
+++ /dev/null
@@ -1,7 +0,0 @@
-# File: pref-ami.prf
-
-#
-# This file contains various default macros for use with
-# the executable built from "main-ami.c".
-#
-
diff --git a/lib/mods/theme/pref/pref-emx.prf b/lib/mods/theme/pref/pref-emx.prf
deleted file mode 100644
index 555c0dbc..00000000
--- a/lib/mods/theme/pref/pref-emx.prf
+++ /dev/null
@@ -1,19 +0,0 @@
-# File: pref-emx.prf
-
-#
-# Include "pref-ibm.prf" to get the default macros.
-#
-# Note that, while most key-to-trigger mappings are the same as DOS/Win,
-# some few odd keys will be different or not available at all.
-#
-# Examples: Ctrl-Escape, Alt-PrintScreen
-#
-# What's NOT working: color palette redefinitions.
-#
-
-%:pref-win.prf
-
-
-# shift-5 - rest
-A:R\r
-P:^_Sx4C\r
diff --git a/lib/mods/theme/pref/pref.prf b/lib/mods/theme/pref/pref.prf
index a6bfdbe1..310e5b8a 100644
--- a/lib/mods/theme/pref/pref.prf
+++ b/lib/mods/theme/pref/pref.prf
@@ -285,27 +285,13 @@ L:j:jam:Jam a door
?:[EQU $SYS gcu]
%:pref-gcu.prf
-?:[EQU $SYS ami]
-%:pref-ami.prf
-
?:[EQU $SYS mac]
%:pref-mac.prf
-?:[IOR [EQU $SYS win] [EQU $SYS dos] [EQU $SYS ibm]]
+?:[EQU $SYS win]
%:pref-win.prf
-?:[EQU $SYS emx]
-%:pref-emx.prf
-
-?:[EQU $SYS acn]
-%:pref-acn.prf
-
?:[EQU $SYS sdl]
%:pref-sdl.prf
-?:[EQU $SYS pgu]
-%:pref-pgu.prf
-
?:1
-
-
diff --git a/lib/mods/theme/pref/user.prf b/lib/mods/theme/pref/user.prf
index 9e10b2ac..04715ebc 100644
--- a/lib/mods/theme/pref/user.prf
+++ b/lib/mods/theme/pref/user.prf
@@ -24,27 +24,10 @@
?:[EQU $SYS gcu]
%:user-gcu.prf
-?:[EQU $SYS ami]
-%:user-ami.prf
-
?:[EQU $SYS mac]
%:user-mac.prf
-?:[EQU $SYS dos]
-%:user-dos.prf
-
-?:[EQU $SYS ibm]
-%:user-ibm.prf
-
?:[EQU $SYS win]
%:user-win.prf
-?:[EQU $SYS emx]
-%:user-emx.prf
-
-?:[EQU $SYS acn]
-%:user-acn.prf
-
?:1
-
-
diff --git a/lib/mods/theme/pref/xtra-new.prf b/lib/mods/theme/pref/xtra-new.prf
deleted file mode 100644
index 214796cf..00000000
--- a/lib/mods/theme/pref/xtra-new.prf
+++ /dev/null
@@ -1,63 +0,0 @@
-# File: xtra-new.prf
-
-#
-# This file defines special attr/char mappings for use in "graphics" mode
-#
-# Edited for use with Adam Bolt's new graphics by Robert Ruehlmann < rr9@angband.org >
-#
-# See "lib/help/command.txt" and "src/files.c" for more information.
-#
-
-
-##### AK 20011216 Default pictures for all races that
-# are not handled below, without caring for class
-
-
-?:[EQU $RACE Human]
-R:0:0x89/0xA0
-?:[EQU $RACE Half-Elf]
-R:0:0x89/0xA1
-?:[EQU $RACE Elf]
-R:0:0x89/0xA2
-?:[EQU $RACE Hobbit]
-R:0:0x89/0xA3
-?:[EQU $RACE Gnome]
-R:0:0x89/0xA4
-?:[EQU $RACE Dwarf]
-R:0:0x89/0xA5
-?:[EQU $RACE Orc]
-R:0:0x89/0xA6
-?:[EQU $RACE Troll]
-R:0:0x89/0xA7
-?:[EQU $RACE Dunadan]
-R:0:0x89/0xA8
-?:[EQU $RACE High-Elf]
-R:0:0x89/0xA9
-?:[EQU $RACE Half-Ogre]
-R:0:0x89/0xAA
-?:[EQU $RACE Beorning]
-R:0:0x89/0xAB
-?:[EQU $RACE Druadan]
-R:0:0x89/0xAC
-?:[EQU $RACE Petty-Dwarf]
-R:0:0x89/0xAD
-?:[EQU $RACE Dark-Elf]
-R:0:0x89/0xAE
-?:[EQU $RACE Ent]
-R:0:0x89/0xAF
-?:[EQU $RACE RohanKnight]
-R:0:0x89/0xB0
-?:[EQU $RACE Eagle]
-R:0:0x89/0xB1
-?:[EQU $RACE Dragon]
-R:0:0x89/0xB2
-?:[EQU $RACE Yeek]
-R:0:0x89/0xB3
-?:[EQU $RACE Wood-Elf]
-R:0:0x89/0xB4
-?:[EQU $RACE Maia]
-R:0:0x89/0xB5
-?:[EQU $RACE Easterling]
-R:0:0x89/0xB6
-?:[EQU $RACE Demon]
-R:0:0x89/0xB7 \ No newline at end of file
diff --git a/lib/mods/theme/scpt/bounty.lua b/lib/mods/theme/scpt/bounty.lua
deleted file mode 100644
index 94c15598..00000000
--- a/lib/mods/theme/scpt/bounty.lua
+++ /dev/null
@@ -1,90 +0,0 @@
--- The bounty quest! bring back corpses to increase your monster lore skill
-
-add_quest
-{
- ["global"] = "BOUNTY_QUEST",
- ["name"] = "Bounty quest",
- ["desc"] = function()
- if quest(BOUNTY_QUEST).status == QUEST_STATUS_TAKEN then
- print_hook("#####yBounty quest!\n")
- print_hook("You must bring back "..monster_race_desc(bounty_quest_monster, 0).." corpse to the beastmaster.\n")
- print_hook("\n")
- end
- end,
- ["level"] = -1,
- ["data"] = {
- ["bounty_quest_monster"] = 0,
- },
- ["hooks"] = {
- -- Start the game without the quest, need to request it
- [HOOK_BIRTH_OBJECTS] = function()
- quest(BOUNTY_QUEST).status = QUEST_STATUS_UNTAKEN
- end,
- },
-}
-
-add_building_action
-{
- -- Index is used in ba_info.txt to set the actions
- ["index"] = 54,
- ["action"] = function()
- if quest(BOUNTY_QUEST).status == QUEST_STATUS_UNTAKEN then
- quest(BOUNTY_QUEST).status = QUEST_STATUS_TAKEN
- bounty_quest_monster = get_new_bounty_monster(3 + ((player.lev * 3) / 2))
-
- msg_print("You must bring me back "..monster_race_desc(bounty_quest_monster, 0).." corpse.")
- else
- msg_print("You still must bring me back "..monster_race_desc(bounty_quest_monster, 0).." corpse.")
- end
- end
-}
-
-add_building_action
-{
- -- Index is used in ba_info.txt to set the actions
- ["index"] = 55,
- ["action"] = function()
- if quest(BOUNTY_QUEST).status == QUEST_STATUS_TAKEN then
- local ret, item
-
- -- Ask for an item
- ret, item = get_item("What corpse to return?",
- "You have no corpse to return.",
- bor(USE_INVEN),
- function (obj)
- if (obj.tval == TV_CORPSE) and (obj.pval2 == bounty_quest_monster) then
- return TRUE
- end
- return FALSE
- end
- )
-
- -- Ok we got the corpse!
- if ret == TRUE then
- -- Take the corpse from the inventory
- inven_item_increase(item, -1)
- inven_item_optimize(item)
-
- msg_print("Ah well done adventurer!")
- msg_print("As a reward I will teach you a bit of monster lore.")
-
- if skill(SKILL_LORE).mod == 0 then
- skill(SKILL_LORE).mod = 900
- skill(SKILL_LORE).dev = TRUE
- end
- skill(SKILL_LORE).value = skill(SKILL_LORE).value + skill(SKILL_LORE).mod
- if skill(SKILL_PRESERVATION).mod == 0 then
- skill(SKILL_PRESERVATION).value = 800
- skill(SKILL_PRESERVATION).mod = 800
- skill(SKILL_PRESERVATION).dev = TRUE
- msg_print("I see you don't know the corpse preservation skill, I shall teach you it too.")
- end
-
- quest(BOUNTY_QUEST).status = QUEST_STATUS_UNTAKEN
- bounty_quest_monster = 0
- end
- else
- msg_print("You do not have any bounty quest yet.")
- end
- end
-}
diff --git a/lib/mods/theme/scpt/corrupt.lua b/lib/mods/theme/scpt/corrupt.lua
deleted file mode 100644
index f402add3..00000000
--- a/lib/mods/theme/scpt/corrupt.lua
+++ /dev/null
@@ -1,1089 +0,0 @@
--- Definition of the corruptions
--- Theme adds the restriction T-Plus has for Maiar: they may only gain the Balrog corruptions.
-
--- The Balrog corruptions
-CORRUPT_BALROG_AURA = add_corruption
-{
- ["color"] = TERM_ORANGE,
- ["name"] = "Balrog Aura",
- ["get_text"] = "A corrupted wall of flames surrounds you.",
- ["lose_text"] = "The wall of corrupted flames abandons you.",
- ["desc"] =
- {
- " Surrounds you with a fiery aura",
- " But it can burn scrolls when you read them"
- },
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- player.xtra_f3 = bor(player.xtra_f3, TR3_SH_FIRE)
- player.xtra_f3 = bor(player.xtra_f3, TR3_LITE1)
- end,
- [HOOK_READ] = function(obj)
- if magik(5) == TRUE then
- msg_print("Your demon aura burns the scroll before you read it!")
- return TRUE, TRUE, FALSE
- else
- return FALSE
- end
- end,
- },
-}
-
-CORRUPT_BALROG_WINGS = add_corruption
-{
- ["color"] = TERM_ORANGE,
- ["name"] = "Balrog Wings",
- ["get_text"] = "Wings of shadow grow in your back.",
- ["lose_text"] = "The wings in your back fall apart.",
- ["desc"] =
- {
- " Creates ugly, but working, wings allowing you to fly",
- " But it reduces charisma by 4 and dexterity by 2"
- },
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- player.xtra_f4 = bor(player.xtra_f4, TR4_FLY)
- player.modify_stat(A_CHR, -4)
- player.modify_stat(A_DEX, -2)
- end,
- },
-}
-
-CORRUPT_BALROG_STRENGTH = add_corruption
-{
- ["color"] = TERM_ORANGE,
- ["name"] = "Balrog Strength",
- ["get_text"] = "Your muscles get unnatural strength.",
- ["lose_text"] = "Your muscles get weaker again.",
- ["desc"] =
- {
- " Provides 3 strength and 1 constitution",
- " But it reduces charisma by 1 and dexterity by 3"
- },
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- player.modify_stat(A_STR, 3)
- player.modify_stat(A_CON, 1)
- player.modify_stat(A_DEX, -3)
- player.modify_stat(A_CHR, -1)
- end,
- },
-}
-
-CORRUPT_BALROG_FORM = add_corruption
-{
- ["color"] = TERM_YELLOW,
- ["name"] = "Balrog Form",
- ["get_text"] = "You feel the might of a Balrog inside you.",
- ["lose_text"] = "The presence of the Balrog seems to abandon you.",
- ["desc"] =
- {
- " Allows you to turn into a Balrog at will",
- " You need Balrog Wings, Balrog Aura and Balrog Strength to activate it"
- },
- ["depends"] =
- {
- [CORRUPT_BALROG_AURA] = TRUE,
- [CORRUPT_BALROG_WINGS] = TRUE,
- [CORRUPT_BALROG_STRENGTH] = TRUE
- },
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_BALROG)
- end,
- },
-}
-
-
--- The Demon corruptions
-CORRUPT_DEMON_SPIRIT = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Demon Spirit",
- ["get_text"] = "Your spirit opens to corrupted thoughts.",
- ["lose_text"] = "Your spirit closes again to the corrupted thoughts.",
- ["desc"] =
- {
- " Increases your intelligence by 1",
- " But reduce your charisma by 2",
- },
-["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- player.modify_stat(A_INT, 1)
- player.modify_stat(A_CHR, -2)
- end,
- },
-}
-
-CORRUPT_DEMON_HIDE = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Demon Hide",
- ["get_text"] = "Your skin grows into a thick hide.",
- ["lose_text"] = "Your skin returns to a natural state.",
- ["desc"] =
- {
- " Increases your armour class by your level",
- " Provides immunity to fire at level 40",
- " But reduces speed by your level / 7",
- },
-["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- player.to_a = player.to_a + player.lev
- player.dis_to_a = player.dis_to_a + player.lev
- player.pspeed = player.pspeed - (player.lev / 7)
- if player.lev >= 40 then player.xtra_f2 = bor(player.xtra_f2, TR2_IM_FIRE) end
- end,
- },
-}
-
-CORRUPT_DEMON_BREATH = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Demon Breath",
- ["get_text"] = "Your breath becomes mephitic.",
- ["lose_text"] = "Your breath is once again normal.",
- ["desc"] =
- {
- " Provides fire breath",
- " But gives a small chance to spoil potions when you quaff them",
- },
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_BR_FIRE)
- end,
- [HOOK_QUAFF] = function(obj)
- if magik(9) == TRUE then
- msg_print("Your demon breath spoils the potion!")
- return TRUE, FALSE
- else
- return FALSE
- end
- end,
- },
-}
-
-CORRUPT_DEMON_REALM = add_corruption
-{
- ["color"] = TERM_L_RED,
- ["name"] = "Demon Realm",
- ["get_text"] = "You feel more attuned to the demon realm.",
- ["lose_text"] = "You lose your attunement to the demon realm.",
- ["desc"] =
- {
- " Provides access to the demon school skill and the use of demonic equipment",
- " You need Demon Spirit, Demon Hide and Demon Breath to activate it"
- },
- ["depends"] =
- {
- [CORRUPT_DEMON_SPIRIT] = TRUE,
- [CORRUPT_DEMON_HIDE] = TRUE,
- [CORRUPT_DEMON_BREATH] = TRUE
- },
-["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- -- 1500 may seem a lot, but people are rather unlikely to get the corruption very soon
- -- due to the dependencies
- if s_info[SKILL_DAEMON + 1].mod == 0 then s_info[SKILL_DAEMON + 1].mod = 1500 end
- s_info[SKILL_DAEMON + 1].hidden = FALSE;
- end,
- },
-}
-
-
--- Teleportation corruptions
-
--- Random teleportation will ask for confirmation 70% of the time
--- But 30% of the time it will teleport, without asking
-CORRUPT_RANDOM_TELEPORT = add_corruption
-{
- ["color"] = TERM_GREEN,
- ["name"] = "Random teleportation",
- ["get_text"] = "Space seems to fizzle around you.",
- ["lose_text"] = "Space solidify again around you.",
- ["desc"] =
- {
- " Randomly teleports you around",
- },
-["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- -- No oppose field, it will be automatically set when we declare the anti-telep corruption to oppose us
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- player.xtra_f3 = bor(player.xtra_f3, TR3_TELEPORT)
- end,
- [HOOK_PROCESS_WORLD] = function()
- if rand_int(300) == 1 then
- if magik(70) == TRUE then
- if get_check("Teleport?") == TRUE then
- teleport_player(50)
- end
- else
- disturb(0, 0)
- msg_print("Your corruption takes over you, you teleport!")
- teleport_player(50)
- end
- end
- end,
- },
-}
-
--- Anti-teleportation corruption, can be stopped with this power
-CORRUPT_ANTI_TELEPORT = add_corruption
-{
- ["color"] = TERM_GREEN,
- ["name"] = "Anti-teleportation",
- ["get_text"] = "Space continuum freezes around you.",
- ["lose_text"] = "Space continuum can once more be altered around you.",
- ["desc"] =
- {
- " Prevents all teleportations, be it of you or monsters",
- },
- ["oppose"] =
- {
- [CORRUPT_RANDOM_TELEPORT] = TRUE
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_BIRTH_OBJECTS] = function()
- player.corrupt_anti_teleport_stopped = FALSE
- end,
- [HOOK_CALC_POWERS] = function()
- player.add_power(POWER_COR_SPACE_TIME)
- end,
- [HOOK_CALC_BONUS] = function()
- if player.corrupt_anti_teleport_stopped == FALSE then
- player.resist_continuum = TRUE
- end
- end,
- [HOOK_PROCESS_WORLD] = function()
- if player.corrupt_anti_teleport_stopped == TRUE then
- local amt = player.msp + player.csp
- amt = amt / 100
- if (amt < 1) then amt = 1 end
- increase_mana(-amt)
- if player.csp == 0 then
- player.corrupt_anti_teleport_stopped = FALSE
- msg_print("You stop controlling your corruption.")
- player.update = bor(player.update, PU_BONUS)
- end
- end
- end,
- },
-}
-
-
--- Troll blood
-CORRUPT_TROLL_BLOOD = add_corruption
-{
- ["color"] = TERM_GREEN,
- ["name"] = "Troll Blood",
- ["get_text"] = "Your blood thickens, you sense corruption in it.",
- ["lose_text"] = "Your blood returns to a normal state.",
- ["desc"] =
- {
- " Troll blood flows in your veins, granting increased regeneration",
- " It also enables you to feel the presence of other troll beings",
- " But it will make your presence more noticeable and aggravating",
- },
- ["can_gain"] = function()
- -- Ok trolls should not get this one. never.
- local str = get_race_name()
- if (str == "Maia") or (str == "Troll") then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- player.xtra_f3 = bor(player.xtra_f3, TR3_REGEN, TR3_AGGRAVATE)
- player.xtra_esp = bor(player.xtra_esp, ESP_TROLL)
- end,
- },
-}
-
--- The vampire corruption set
-CORRUPT_VAMPIRE_TEETH = add_corruption
-{
- ["group"] = "Vampire",
- ["removable"] = FALSE,
- ["color"] = TERM_L_DARK,
- ["name"] = "Vampiric Teeth",
- ["get_text"] = "You grow vampiric teeth!",
- ["lose_text"] = "BUG! this should not happen",
- ["desc"] =
- {
- " Your teeth allow you to drain blood to feed yourself",
- " However your stomach now only accepts blood.",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["allow"] = function()
- if test_race_flags(1, PR1_NO_SUBRACE_CHANGE) == FALSE then return not nil else return nil end
- end,
- ["gain"] = function()
- switch_subrace(SUBRACE_SAVE, TRUE);
-
- subrace_add_power(subrace(SUBRACE_SAVE), PWR_VAMPIRISM)
- subrace(SUBRACE_SAVE).flags1 = bor(subrace(SUBRACE_SAVE).flags1, PR1_VAMPIRE, PR1_UNDEAD, PR1_NO_SUBRACE_CHANGE)
- end,
- ["hooks"] =
- {
- },
-}
-CORRUPT_VAMPIRE_STRENGTH = add_corruption
-{
- ["group"] = "Vampire",
- ["removable"] = FALSE,
- ["color"] = TERM_L_DARK,
- ["name"] = "Vampiric Strength",
- ["get_text"] = "Your body seems more dead than alive.",
- ["lose_text"] = "BUG! this should not happen",
- ["desc"] =
- {
- " Your body seems somewhat dead",
- " In this near undead state it has improved strength, constitution and intelligence",
- " But reduced dexterity, wisdom and charisma.",
- },
- ["depends"] =
- {
- [CORRUPT_VAMPIRE_TEETH] = TRUE,
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["gain"] = function()
- -- Apply the bonuses/penalities
- subrace(SUBRACE_SAVE).r_mhp = subrace(SUBRACE_SAVE).r_mhp + 1
- subrace(SUBRACE_SAVE).r_exp = subrace(SUBRACE_SAVE).r_exp + 100
-
- subrace(SUBRACE_SAVE).r_adj[A_STR + 1] = subrace(SUBRACE_SAVE).r_adj[A_STR + 1] + 3
- subrace(SUBRACE_SAVE).r_adj[A_INT + 1] = subrace(SUBRACE_SAVE).r_adj[A_INT + 1] + 2
- subrace(SUBRACE_SAVE).r_adj[A_WIS + 1] = subrace(SUBRACE_SAVE).r_adj[A_WIS + 1] - 3
- subrace(SUBRACE_SAVE).r_adj[A_DEX + 1] = subrace(SUBRACE_SAVE).r_adj[A_DEX + 1] - 2
- subrace(SUBRACE_SAVE).r_adj[A_CON + 1] = subrace(SUBRACE_SAVE).r_adj[A_CON + 1] + 1
- subrace(SUBRACE_SAVE).r_adj[A_CHR + 1] = subrace(SUBRACE_SAVE).r_adj[A_CHR + 1] - 4
-
- -- be reborn!
- do_rebirth()
- cmsg_print(TERM_L_DARK, "You feel death slipping inside.")
- end,
- ["hooks"] =
- {
- },
-}
-CORRUPT_VAMPIRE_VAMPIRE = add_corruption
-{
- ["group"] = "Vampire",
- ["removable"] = FALSE,
- ["color"] = TERM_L_DARK,
- ["name"] = "Vampire",
- ["get_text"] = "You die to be reborn in a Vampire form.",
- ["lose_text"] = "BUG! this should not happen",
- ["desc"] =
- {
- " You are a Vampire. As such you resist cold, poison, darkness and nether.",
- " Your life is sustained, but you cannot stand the light of the sun."
- },
- ["depends"] =
- {
- [CORRUPT_VAMPIRE_STRENGTH] = TRUE,
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["gain"] = function()
- -- Be a Vampire and be proud of it
- local title = get_subrace_title(SUBRACE_SAVE)
- if title == " " or title == "Vampire" then
- title = "Vampire"
- subrace(SUBRACE_SAVE).place = FALSE
- else
- title = "Vampire "..title
- end
- set_subrace_title(SUBRACE_SAVE, title)
-
- -- Bonus/and .. not bonus :)
- subrace(SUBRACE_SAVE).flags1 = bor(subrace(SUBRACE_SAVE).flags1, PR1_HURT_LITE)
- subrace(SUBRACE_SAVE).oflags2[2] = bor(subrace(SUBRACE_SAVE).oflags2[2], TR2_RES_POIS, TR2_RES_NETHER, TR2_RES_COLD, TR2_RES_DARK, TR2_HOLD_LIFE)
- subrace(SUBRACE_SAVE).oflags3[2] = bor(subrace(SUBRACE_SAVE).oflags3[2], TR3_LITE1)
- end,
- ["hooks"] =
- {
- },
-}
-
--- The old activable corruptions / mutations
-
-MUT1_SPIT_ACID = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Ancalagon's Breath",
- ["get_text"] = "You gain the ability to spit acid.",
- ["lose_text"] = "You lose the ability to spit acid.",
- ["desc"] =
- {
- " Fires an acid ball.",
- " Damage=level Radius 1+(level/30)",
- " Level=9, Cost=9, Stat=DEX, Difficulty=15",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_SPIT_ACID)
- end,
- },
-}
-
-MUT1_BR_FIRE = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Smaug's Breath",
- ["get_text"] = "You gain the ability to breathe fire.",
- ["lose_text"] = "You lose the ability to breathe fire.",
- ["desc"] =
- {
- " Fires a fire ball.",
- " Damage=2*level Radius 1+(level/20)",
- " Level=20, Cost=10, Stat=CON, Difficulty=18",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_BR_FIRE)
- end,
- },
-}
-
-MUT1_HYPN_GAZE = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Glaurung's Gaze",
- ["get_text"] = "Your eyes look mesmerizing...",
- ["lose_text"] = "Your eyes look uninteresting.",
- ["desc"] =
- {
- " Tries to make a monster your pet.",
- " Power=level",
- " Level=12, Cost=12, Stat=CHR, Difficulty=18",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_HYPN_GAZE)
- end,
- },
-}
-
-MUT1_TELEKINES = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Saruman's Power",
- ["get_text"] = "You gain the ability to move objects telekinetically.",
- ["lose_text"] = "You lose the ability to move objects telekinetically.",
- ["desc"] =
- {
- " Move an object in line of sight to you.",
- " Max weight equal to (level) pounds",
- " Level=9, Cost=9, Stat=WIS, Difficulty=14",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_TELEKINES)
- end,
- },
-}
-
-MUT1_VTELEPORT = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Teleport",
- ["get_text"] = "You gain the power of teleportation at will.",
- ["lose_text"] = "You lose the power of teleportation at will.",
- ["desc"] =
- {
- " Teleports the player at will.",
- " Distance 10+4*level squares",
- " Level=7, Cost=7, Stat=WIS, Difficulty=15",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_VTELEPORT)
- end,
- },
-}
-
-MUT1_MIND_BLST = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Glaurung's Spell",
- ["get_text"] = "You gain the power of Mind Blast.",
- ["lose_text"] = "You lose the power of Mind Blast.",
- ["desc"] =
- {
- " Fires a mind blasting bolt (psi damage).",
- " Psi Damage (3+(level-1)/5)d3",
- " Level=5, Cost=3, Stat=WIS, Difficulty=15",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_MIND_BLST)
- end,
- },
-}
-
-MUT1_VAMPIRISM = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Vampiric Drain",
- ["get_text"] = "You become vampiric.",
- ["lose_text"] = "You are no longer vampiric.",
- ["desc"] =
- {
- " You can drain life from a foe like a vampire.",
- " Drains (level+1d(level))*(level/10) hitpoints,",
- " heals you and satiates you. Doesn't work on all monsters",
- " Level=4, Cost=5, Stat=CON, Difficulty=9",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_VAMPIRISM)
- end,
- },
-}
-
-MUT1_SMELL_MET = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Carcharoth's Nose",
- ["get_text"] = "You smell a metallic odour.",
- ["lose_text"] = "You no longer smell a metallic odour.",
- ["desc"] =
- {
- " You can detect nearby precious metal (treasure).",
- " Radius 25",
- " Level=3, Cost=2, Stat=INT, Difficulty=12",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_SMELL_MET)
- end,
- },
-}
-
-MUT1_SMELL_MON = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Huan's Nose",
- ["get_text"] = "You smell filthy monsters.",
- ["lose_text"] = "You no longer smell filthy monsters.",
- ["desc"] =
- {
- " You can detect nearby monsters.",
- " Radius 25",
- " Level=5, Cost=4, Stat=INT, Difficulty=15",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_SMELL_MON)
- end,
- },
-}
-
-MUT1_BLINK = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Blink",
- ["get_text"] = "You gain the power of minor teleportation.",
- ["lose_text"] = "You lose the power of minor teleportation.",
- ["desc"] =
- {
- " You can teleport yourself short distances (10 squares).",
- " Level=3, Cost=3, Stat=WIS, Difficulty=12",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_BLINK)
- end,
- },
-}
-
-MUT1_EAT_ROCK = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Eat Rock",
- ["get_text"] = "The walls look delicious.",
- ["lose_text"] = "The walls look unappetizing.",
- ["desc"] =
- {
- " You can consume solid rock with food benefit,",
- " leaving an empty space behind.",
- " Level=8, Cost=12, Stat=CON, Difficulty=18",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_EAT_ROCK)
- end,
- },
-}
-
-MUT1_SWAP_POS = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Swap Position",
- ["get_text"] = "You feel like walking a mile in someone else's shoes.",
- ["lose_text"] = "You feel like staying in your own shoes.",
- ["desc"] =
- {
- " You can switch locations with another being,",
- " unless it resists teleportation.",
- " Level=15, Cost=12, Stat=DEX, Difficulty=16",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_SWAP_POS)
- end,
- },
-}
-
-MUT1_SHRIEK = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Shriek",
- ["get_text"] = "Your vocal cords get much tougher.",
- ["lose_text"] = "Your vocal cords get much weaker.",
- ["desc"] =
- {
- " Fires a sound ball and aggravates monsters.",
- " Damage=level*4, Radius=8, centered on player",
- " Level=4, Cost=4, Stat=CON, Difficulty=6",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_SHRIEK)
- end,
- },
-}
-
-MUT1_ILLUMINE = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Illuminate",
- ["get_text"] = "You can light up rooms with your presence.",
- ["lose_text"] = "You can no longer light up rooms with your presence.",
- ["desc"] =
- {
- " You can emit bright light that illuminates an area.",
- " Damage=2d(level/2) Radius=(level/10)+1",
- " Level=3, Cost=2, Stat=INT, Difficulty=10",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_ILLUMINE)
- end,
- },
-}
-
-MUT1_DET_CURSE = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Detect Curses",
- ["get_text"] = "You can feel evil magics.",
- ["lose_text"] = "You can no longer feel evil magics.",
- ["desc"] =
- {
- " You can feel the danger of evil magic.",
- " It detects cursed items in the inventory",
- " Level=7, Cost=14, Stat=WIS, Difficulty=14",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_DET_CURSE)
- end,
- },
-}
-
-MUT1_BERSERK = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Berserk",
- ["get_text"] = "You feel a controlled rage.",
- ["lose_text"] = "You no longer feel a controlled rage.",
- ["desc"] =
- {
- " You can drive yourself into a berserk frenzy.",
- " It grants super-heroism. Duration=10+1d(level)",
- " Level=8, Cost=8, Stat=STR, Difficulty=14",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_BERSERK)
- end,
- },
-}
-
-
-MUT1_MIDAS_TCH = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Midas touch",
- ["get_text"] = "You gain the Midas touch.",
- ["lose_text"] = "You lose the Midas touch.",
- ["desc"] =
- {
- " You can turn ordinary items to gold.",
- " Turns a non-artifact object into 1/3 its value in gold",
- " Level=10, Cost=5, Stat=INT, Difficulty=12",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_MIDAS_TCH)
- end,
- },
-}
-
-MUT1_GROW_MOLD = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Grow Mold",
- ["get_text"] = "You feel a sudden affinity for mold.",
- ["lose_text"] = "You feel a sudden dislike for mold.",
- ["desc"] =
- {
- " You can cause mold to grow near you.",
- " Summons up to 8 molds around the player",
- " Level=1, Cost=6, Stat=CON, Difficulty=14",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_GROW_MOLD)
- end,
- },
-}
-
-MUT1_RESIST = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Resist Elements",
- ["get_text"] = "You feel like you can protect yourself.",
- ["lose_text"] = "You feel like you might be vulnerable.",
- ["desc"] =
- {
- " You can harden yourself to the ravages of the elements.",
- " Level-dependent chance of gaining resistances to the four ",
- " elements and poison. Duration=20 + d20",
- " Level=10, Cost=12, Stat=CON, Difficulty=12",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_RESIST)
- end,
- },
-}
-
-MUT1_EARTHQUAKE = add_corruption
-{
- ["color"] = TERM_RED,
- ["name"] = "Earthquake",
- ["get_text"] = "You gain the ability to wreck the dungeon.",
- ["lose_text"] = "You lose the ability to wreck the dungeon.",
- ["desc"] =
- {
- " You can bring down the dungeon around your ears.",
- " Radius=10, center on the player",
- " Level=12, Cost=12, Stat=STR, Difficulty=16",
- },
- ["can_gain"] = function()
- -- Maiar can't get this one!
- local str = get_race_name()
- if str == "Maia" then
- return nil
- else
- return not nil
- end
- end,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- player.add_power(PWR_EARTHQUAKE)
- end,
- },
-}
---[[
-CORRUPT_ = add_corruption
-{
- ["color"] = TERM_GREEN,
- ["name"] = "",
- ["get_text"] = "",
- ["lose_text"] = "",
- ["desc"] =
- {
- " ",
- },
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- end,
- },
-}
-]]
diff --git a/lib/mods/theme/scpt/drunk.lua b/lib/mods/theme/scpt/drunk.lua
deleted file mode 100644
index 7d90af8d..00000000
--- a/lib/mods/theme/scpt/drunk.lua
+++ /dev/null
@@ -1,21 +0,0 @@
--- silly function that allows a drunk to take a bottle of wine/ale from the player
-
-function drunk_takes_wine(m_idx, item)
-
- m_ptr = monster(m_idx)
- o_ptr = get_object(item)
-
- if (m_ptr.r_idx == test_monster_name("Singing, happy drunk"))
- and (o_ptr.tval == TV_FOOD) and ((o_ptr.sval == 38) or (o_ptr.sval == 39)) then
-
- cmsg_print(TERM_YELLOW, "'Hic!'")
-
- inven_item_increase(item, -1)
- inven_item_optimize(item)
- return TRUE
- else
- return FALSE
- end
-end
-
-add_hook_script(HOOK_GIVE, "drunk_takes_wine", "drunk_takes_wine")
diff --git a/lib/mods/theme/scpt/fireprof.lua b/lib/mods/theme/scpt/fireprof.lua
deleted file mode 100644
index 8691b821..00000000
--- a/lib/mods/theme/scpt/fireprof.lua
+++ /dev/null
@@ -1,415 +0,0 @@
--- The Old Mages/Fireproofing quest: Bring back a rune from a fiery cave and get some books/scrolls/staves fireproofed in return
-
-fireproof_quest = {}
-
-
--- change this constant (and the FOO_POINTS ones) to adjust the no of items fire-proofed as a reward
-fireproof_quest.TOTAL_ITEM_POINTS = 24
-
--- These constants are how many 'points' each type of item will take up. So currently, you can fireproof 3 books, 4 staves or 12 scrolls.
-fireproof_quest.BOOK_POINTS = 4
-fireproof_quest.STAFF_POINTS = 3
-fireproof_quest.SCROLL_POINTS = 1
-
-add_quest
-{
- ["global"] = "FIREPROOF_QUEST",
- ["name"] = "Old Mages quest",
- ["desc"] = function()
- local num_books, num_staff, num_scroll
-
- num_books = fireproof_quest.item_points_remaining / fireproof_quest.BOOK_POINTS
- num_staff = fireproof_quest.item_points_remaining / fireproof_quest.STAFF_POINTS
- num_scroll = fireproof_quest.item_points_remaining / fireproof_quest.SCROLL_POINTS
-
- -- Quest taken
- if (quest(FIREPROOF_QUEST).status == QUEST_STATUS_TAKEN) then
- print_hook("#####yAn Old Mages Quest!\n")
- print_hook("Retrieve the strange rune for the old mage in Lothlorien.\n")
- print_hook("\n")
- -- essence retrieved, not taken to mage
- elseif (quest(FIREPROOF_QUEST).status == QUEST_STATUS_COMPLETED) then
- print_hook("#####yAn Old Mages Quest!\n")
- print_hook("You have retrieved the rune for the old mage in Lothlorien. Perhaps you \n")
- print_hook("should see about a reward.\n")
- print_hook("\n")
- -- essence returned, not all books fireproofed
- elseif (quest(FIREPROOF_QUEST).status == QUEST_STATUS_FINISHED) and (fireproof_quest.item_points_remaining > 0) then
- print_hook("#####yAn Old Mages Quest!\n")
- print_hook("You have retrieved the rune for the old mage in Lothlorien. He will still \n")
- print_hook("fireproof "..num_books.." book(s) or "..num_staff.." staff/staves or "..num_scroll.." scroll(s) for you.\n")
- print_hook("\n")
- end
- end,
- ["level"] = 20,
- ["data"] = {
- -- store some variables
- ["fireproof_quest.item_points_remaining"] = fireproof_quest.TOTAL_ITEM_POINTS,
- ["fireproof_quest.essence"] = 0,
- },
- ["hooks"] = {
- -- Start the game without the quest, need to request it
- [HOOK_BIRTH_OBJECTS] = function()
- quest(FIREPROOF_QUEST).status = QUEST_STATUS_UNTAKEN
-
- -- reset some variables on birth
- fireproof_quest.item_points_remaining = fireproof_quest.TOTAL_ITEM_POINTS
- fireproof_quest.essence = 0
- end,
- [HOOK_GEN_QUEST] = function()
- local essence, y, x, traps, tries, trap_y, trap_x, grid
-
- -- Only if player doing this quest
- if (player.inside_quest ~= FIREPROOF_QUEST) then
- return FALSE
- else
- -- load the map
- load_map("fireprof.map", 2, 2)
-
- -- no teleport
- level_flags2 = DF2_NO_TELEPORT
-
- -- determine type of rune
- fireproof_quest.essence = randint(5)
-
- -- create essence
- essence = create_object(TV_RUNE2, fireproof_quest.essence)
-
- -- mark rune
- essence.pval2 = fireproof_quest.essence
- essence.note = quark_add("quest")
-
- -- roll for co-ordinates in top half of map
- y = randint(3) + 2
- x = randint(45) + 2
-
- -- drop it
- drop_near(essence, -1, y, x)
-
- -- how many traps to generate
- traps = rand_range(10, 30)
-
- -- generate the traps
- while (traps > 0) do
-
- -- initialise tries variable
- tries = 0
-
- -- make sure it's a safe place
- while (tries == 0) do
-
- -- get grid coordinates
- trap_y = randint(19) + 2
- trap_x = randint(45) + 2
- grid = cave(trap_y, trap_x)
-
- -- are the coordinates on a stair, or a wall?
- if (cave_is(grid, FF1_PERMANENT) ~= 0) or (cave_is(grid, FF1_FLOOR) == 0) then
-
- -- try again
- tries = 0
- else
- -- not a stair, then stop this 'while'
- tries = 1
- end
- end
-
- -- randomise level of trap
- trap_level = rand_range(20, 40)
-
- -- put the trap there
- place_trap(trap_y, trap_x, trap_level)
-
- -- that's one less trap to place
- traps = traps - 1
- end
- return TRUE
- end
- end,
- [HOOK_STAIR] = function()
- local ret
-
- -- only ask this if player about to go up stairs of quest and hasn't retrieved rune
- if (player.inside_quest ~= FIREPROOF_QUEST) or
- (quest(FIREPROOF_QUEST).status == QUEST_STATUS_COMPLETED) then
- return FALSE
- else
- if cave(player.py, player.px).feat ~= FEAT_LESS then return end
-
- -- flush all pending input
- flush()
-
- -- confirm
- ret = get_check("Really abandon the quest?")
-
- -- if yes, then
- if (ret == TRUE) then
-
- -- fail the quest
- quest(FIREPROOF_QUEST).status = QUEST_STATUS_FAILED
- return FALSE
- else
- -- if no, they stay in the quest
- return TRUE
- end
- end
- end,
- [HOOK_GET] = function(o_ptr)
-
- -- if they're in the quest and haven't picked up the rune already, continue
- if (player.inside_quest ~= FIREPROOF_QUEST) or
- (quest(FIREPROOF_QUEST).status == QUEST_STATUS_COMPLETED) then
- return FALSE
- else
-
- -- check that it's the real rune and not another one generated via the random object placing in fireproof.map
- if (o_ptr.pval2 == fireproof_quest.essence) then
-
- -- ok mark the quest 'completed'
- quest(FIREPROOF_QUEST).status = QUEST_STATUS_COMPLETED
- msg_print(TERM_YELLOW, "Fine! Looks like you've found it.")
- end
- end
- end,
-
- },
-}
-
--- add the bit that determines what happens when the request 'q'uest bit is done in the wizard spire
-add_building_action
-{
- -- Index is used in ba_info.txt to set the actions
- ["index"] = 56,
- ["action"] = function()
-
- local num_books, num_staff, num_scroll
-
- num_books = fireproof_quest.item_points_remaining / fireproof_quest.BOOK_POINTS
- num_staff = fireproof_quest.item_points_remaining / fireproof_quest.STAFF_POINTS
- num_scroll = fireproof_quest.item_points_remaining / fireproof_quest.SCROLL_POINTS
-
- -- the quest hasn;t been requested already, right?
- if quest(FIREPROOF_QUEST).status == QUEST_STATUS_UNTAKEN then
-
- -- quest has been taken now
- quest(FIREPROOF_QUEST).status = QUEST_STATUS_TAKEN
- fireproof_quest.item_points_remaining = fireproof_quest.TOTAL_ITEM_POINTS
-
- -- issue instructions
- msg_print("I need a very special rune for a spell I am working on. I am too old to ")
- msg_print("fetch it myself. Please bring it back to me. You can find it north of here.")
- msg_print("Be careful with it, it's fragile and might be destroyed easily.")
-
- return TRUE, FALSE, TRUE
- -- if quest completed (rune was retrieved)
- elseif (quest(FIREPROOF_QUEST).status == QUEST_STATUS_COMPLETED) then
-
- -- ask for rune
- ret, item = get_item("Which rune?",
- "You have no runes to return",
- bor(USE_INVEN),
- function (obj)
-
- -- check it's the 'marked' rune
- if (obj.tval == TV_RUNE2) and (obj.sval == fireproof_quest.essence) and (obj.pval2 == fireproof_quest.essence) then
- return TRUE
- end
- return FALSE
- end
- )
-
- -- didn't get the rune?
- if (ret == FALSE) then
- return TRUE
-
- -- got the rune!
- else
-
- -- take rune
- inven_item_increase(item, -1)
- inven_item_optimize(item)
- msg_print("Great! Let me fireproof some of your items in thanks. I can do "..num_books.." books, ")
- msg_print(num_staff.." staves, or "..num_scroll.." scrolls.")
-
- -- how many items to proof?
- local items = fireproof_quest.item_points_remaining
-
- -- repeat till up to 3 (value defined as TOTAL_ITEM_POINTS constant) books fireproofed
- while items > 0 do
- ret = fireproof()
-
- -- don't loop the fireproof if there's nothing to fireproof
- if ret == FALSE then
- break
- end
-
- -- subtract item points
- items = fireproof_quest.item_points_remaining
- end
-
- -- have they all been done?
- if (fireproof_quest.item_points_remaining == 0) then
- -- mark quest to make sure no more quests are given
- quest(FIREPROOF_QUEST).status = QUEST_STATUS_REWARDED
- else
- -- mark in preparation of anymore books to fireproof
- quest(FIREPROOF_QUEST).status = QUEST_STATUS_FINISHED
- end
-
-
- end
-
- -- if the player asks for a quest when they already have it, but haven't failed it, give them some extra instructions
- elseif (quest(FIREPROOF_QUEST).status == QUEST_STATUS_TAKEN) then
- msg_print("The rune is in a cave just behind the shop.")
-
- -- ok not all books have been fireproofed... lets do the rest
- elseif (quest(FIREPROOF_QUEST).status == QUEST_STATUS_FINISHED) then
-
- -- how many books still to proof?
- local items = fireproof_quest.item_points_remaining
-
- -- repeat as necessary
- while items > 0 do
- ret = fireproof()
-
- -- don't loop the fireproof if there's nothing to fireproof
- if ret == FALSE then
- break
- else
- -- have they all been done?
- if (fireproof_quest.item_points_remaining == 0) then quest(FIREPROOF_QUEST).status = QUEST_STATUS_REWARDED end
- end
-
- -- subtract item points
- items = fireproof_quest.item_points_remaining
- end
-
- -- quest failed or completed, then give no more quests
- elseif (quest(FIREPROOF_QUEST).status == QUEST_STATUS_FAILED) or (quest(FIREPROOF_QUEST).status == QUEST_STATUS_REWARDED) then
- msg_print("I have no more quests for you")
- end
- return TRUE
- end,
-}
-
--- the routine that checks for a book and actually fireproofs it
-function fireproof()
-
- local ret, item, obj2, stack, obj3, carry_it
-
- ret, item = get_item("Which item shall I fireproof?",
- "You have no more items I can fireproof, come back when you have some.",
- bor(USE_INVEN),
- function (obj)
-
- -- get some flags
- local f1, f2, f3, f4, f5, esp = object_flags(obj)
-
- -- is it a book/staff/scroll, is it already fireproof?
- if ((obj.tval == TV_BOOK) or (obj.tval == TV_SCROLL) or (obj.tval == TV_STAFF)) and (band(f3, TR3_IGNORE_FIRE) == 0) then
- return TRUE
- end
- return FALSE
- end
- )
-
- -- get the object type from the number
- obj2 = get_object(item)
-
- -- check we have enough points (if we 'got' an item)
- if (ret == TRUE) then
- ret2, stack = enough_points(obj2)
- end
-
- -- did either routine fail?
- if (ret == FALSE) or (ret2 == FALSE) then
- return FALSE
- else
-
- -- are we part of the items from a stack?
- if (obj2.number ~= stack) then
-
- -- make a new object to handle
- object_copy(obj_forge, obj2)
-
- -- give it the right number of items
- obj_forge.number = stack
-
- -- adjust for number of items in pack not to be fireproofed
- obj2.number = obj2.number - stack
- obj3 = obj_forge
-
- -- we'll need to add this to the inventory after fireproofing
- carry_it = TRUE
- else
-
- -- use the whole stack
- obj3 = obj2
-
- -- we'll be dealing this while it's still in the inventory
- carry_it = FALSE
- end
-
- -- make it fireproof
- obj3.name2 = 149
-
- -- apply it, making sure the pvals don't change with apply_magic (it would change the type of book!)
- local oldpval = obj3.pval
- local oldpval2 = obj3.pval2
- local oldpval3 = obj3.pval3
- apply_magic(obj3, -1, FALSE, FALSE, FALSE)
- obj3.pval = oldpval
- obj3.pval2 = oldpval2
- obj3.pval3 = oldpval3
-
- -- put it in the inventory if it's only part of a stack
- if (carry_it == TRUE) then
- inven_carry(obj3, TRUE)
- end
-
- -- id and notice it
- set_known(obj3)
- set_aware(obj3)
-
- return TRUE
- end
-end
-
--- This function makes sure the player has enough 'points' left to fireproof stuff.
-function enough_points(obj)
- local item_value, stack
-
- -- are the items in a stack?
- if (obj.number > 1) then
-
- -- how many to fireproof?
- stack = get_quantity("How many would you like fireproofed?", obj.number)
- else
- stack = 1
- end
-
- -- check for item type and multiply number in the stack by the amount of points per item of that type
- if (obj.tval == TV_BOOK) then
- item_value = fireproof_quest.BOOK_POINTS * stack
- elseif (obj.tval == TV_STAFF) then
- item_value = fireproof_quest.STAFF_POINTS * stack
- elseif (obj.tval == TV_SCROLL) then
- item_value = fireproof_quest.SCROLL_POINTS * stack
- end
-
- -- do we have enough points?
- if (item_value > fireproof_quest.item_points_remaining) then
- msg_print("I do not have enough fireproofing material for that.")
- return FALSE
- else
- -- if so then subtract those points before we do the fireproofing
- fireproof_quest.item_points_remaining = fireproof_quest.item_points_remaining - item_value
- end
-
- -- Used all the points? the quest is completely rewarded.
- if fireproof_quest.item_points_remaining == 0 then quest(FIREPROOF_QUEST).status = QUEST_STATUS_REWARDED end
-
- return TRUE, stack
-end
-
diff --git a/lib/mods/theme/scpt/god.lua b/lib/mods/theme/scpt/god.lua
deleted file mode 100644
index 7567178c..00000000
--- a/lib/mods/theme/scpt/god.lua
+++ /dev/null
@@ -1,812 +0,0 @@
--- The god quest: find randomly placed relic in a randomly placed dungeon!
-
--- set some global variables (stored in the save file via the ["data"] key)
-god_quest = {}
-
--- increase this number to make god quests more common, to a max value of 100
-god_quest.CHANCE_OF_GOD_QUEST = 21
-
--- increase this number to make more quests
-god_quest.MAX_NUM_GOD_QUESTS = 7
-
--- d_idx of the god_quest (Lost Temple) dungeon
-god_quest.DUNGEON_GOD = 30
-
-add_quest
-{
- ["global"] = "GOD_QUEST",
- ["name"] = "God quest",
- ["desc"] = function()
-
- if quest(GOD_QUEST).status == QUEST_STATUS_TAKEN then
-
- -- get the direction that the dungeon lies from lothlorien/angband
- local home, home_axis, home_distance, home2, home2_axis, home2_distance = get_god_quest_axes()
-
- print_hook("#####yGod quest "..god_quest.quests_given.."!\n")
- print_hook("Thou art to find the lost temple of thy God and\n");
- print_hook("to retrieve the lost part of the relic for thy God! \n")
- if home_axis ~= "close" then
- print_hook("The temple lies "..home_distance.." to the "..home_axis.." of "..home..", \n")
- else
- print_hook("The temple lies very close to "..home..", \n")
- end
- if home2_axis ~= "close" then
- print_hook( "and "..home2_distance.." to the "..home2_axis.." of "..home2..", I can feel it.' \n")
- else
- print_hook("and very close to "..home2..", I can feel it.' \n")
- end
- print_hook("\n")
- end
- end,
- ["level"] = -1,
- ["data"] = {
- ["god_quest.relic_num"] = 1,
- ["god_quest.quests_given"] = 0,
- ["god_quest.relics_found"] = 0,
- ["god_quest.dun_mindepth"] = 1,
- ["god_quest.dun_maxdepth"] = 4,
- ["god_quest.dun_minplev"] = 0,
- ["god_quest.relic_gen_tries"] = 0,
- ["god_quest.relic_generated"] = FALSE,
- ["god_quest.dung_x"] = 1,
- ["god_quest.dung_y"] = 1,
- ["god_quest.player_x"] = 0,
- ["god_quest.player_y"] = 0,
- },
- ["hooks"] = {
- -- Start the game without the quest, given it by chance
- [HOOK_BIRTH_OBJECTS] = function()
- quest(GOD_QUEST).status = QUEST_STATUS_UNTAKEN
-
- -- initialise save-file stored variables when new character is created
- god_quest.relic_num = 1
- god_quest.quests_given = 0
- god_quest.relics_found = 0
- god_quest.dun_mindepth = 1
- god_quest.dun_maxdepth = 4
- god_quest.dun_minplev = 0
- god_quest.relic_gen_tries = 0
- god_quest.relic_generated = FALSE
- end,
- [HOOK_PLAYER_LEVEL] = function(gained)
- local home_axis, home
-
- if gained > 0 then
- -- roll for chance of quest
- local give_god_quest = magik(god_quest.CHANCE_OF_GOD_QUEST)
-
- -- check player is worshipping a god, not already on a god quest.
- if (player.astral ~= FALSE) or (player.pgod <= 0)
- or (quest(GOD_QUEST).status == QUEST_STATUS_TAKEN) or (quest(GOD_QUEST).status == QUEST_STATUS_FAILED)
- or (god_quest.quests_given >= god_quest.MAX_NUM_GOD_QUESTS) or (give_god_quest == FALSE)
- or ((current_dungeon_idx == god_quest.DUNGEON_GOD) and (dun_level > 0)) or (player.lev <= god_quest.dun_minplev) then
- -- Don't let a player get quests with trickery
- if player.lev > god_quest.dun_minplev then
- god_quest.dun_minplev = player.lev
- end
- return
- else
- -- each god has different characteristics, so the quests are differnet depending on your god
- if player.pgod == GOD_ERU then
- god_quest.relic_num = 7
- elseif player.pgod == GOD_MANWE then
- god_quest.relic_num = 8
- elseif player.pgod == GOD_TULKAS then
- god_quest.relic_num = 9
- elseif player.pgod == GOD_MELKOR then
- god_quest.relic_num = 10
- elseif player.pgod == GOD_YAVANNA then
- god_quest.relic_num = 11
- elseif player.pgod == GOD_AULE then
- god_quest.relic_num = 16
- elseif player.pgod == GOD_VARDA then
- god_quest.relic_num = 17
- elseif player.pgod == GOD_ULMO then
- god_quest.relic_num = 18
- elseif player.pgod == GOD_MANDOS then
- god_quest.relic_num = 19
- end
-
- -- This var will need resetting
- god_quest.relic_generated = FALSE
- quest(GOD_QUEST).status = QUEST_STATUS_TAKEN
- god_quest.quests_given = god_quest.quests_given + 1
-
- -- actually place the dungeon in a random place
- place_rand_dung()
-
- -- store the variables of the coords where the player was given the quest
- god_quest.player_y, god_quest.player_x = player.get_wild_coord()
-
- -- establish direction of player and 'home' from dungeon
- local home, home_axis, home_distance, home2, home2_axis, home2_distance = get_god_quest_axes()
-
- -- God issues instructions
- cmsg_print(TERM_L_BLUE, "The voice of "..deity(player.pgod).name.." booms in your head:")
-
- cmsg_print(TERM_YELLOW, "'I have a task for thee.")
- cmsg_print(TERM_YELLOW, "Centuries ago an ancient relic of mine was broken apart.")
- cmsg_print(TERM_YELLOW, "The pieces of it have been lost in fallen temples.")
- cmsg_print(TERM_YELLOW, "Thou art to find my lost temple and retrieve a piece of the relic.")
- cmsg_print(TERM_YELLOW, "When thy task is done, thou art to lift it in the air and call upon my name.")
- cmsg_print(TERM_YELLOW, "I shall then come to reclaim what is mine!")
- if home_axis ~= "close" then
- cmsg_print(TERM_YELLOW, "The temple lies "..home_distance.." to the "..home_axis.." of "..home..", ")
- else
- cmsg_print(TERM_YELLOW, "The temple lies very close to "..home..",")
- end
-
- if home2_axis ~= "close" then
- cmsg_print(TERM_YELLOW, "and "..home2_distance.." to the "..home2_axis.." of "..home2..", I can feel it.'")
- else
- cmsg_print(TERM_YELLOW, "and very close to "..home2..", I can feel it.'")
- end
-
- -- Prepare depth of dungeon. If this was generated in set_god_dungeon_attributes(),
- -- then we'd have trouble if someone levelled up in the dungeon!
- god_quest.dun_mindepth = player.lev*2/3
- god_quest.dun_maxdepth = god_quest.dun_mindepth + 4
- end
- end
- end,
- [HOOK_LEVEL_END_GEN] = function()
- local chance
-
- -- Check for dungeon
- if (current_dungeon_idx ~= god_quest.DUNGEON_GOD) or (quest(GOD_QUEST).status == QUEST_STATUS_UNTAKEN) then
- return
- -- if the relic has been created at this point, then it was created on the *PREVIOUS* call of HOOK_LEVEL_END_GEN, and
- -- therefore the player has caused another level generation in the temple and hence failed the quest.
- elseif (god_quest.relic_generated == TRUE) and quest(GOD_QUEST).status ~= QUEST_STATUS_FAILED then
-
- -- fail the quest, don't give another one, don't give this message again
- quest(GOD_QUEST).status = QUEST_STATUS_FAILED
- -- God issues instructions
- cmsg_print(TERM_L_BLUE, "The voice of "..deity(player.pgod).name.." booms in your head:")
-
- cmsg_print(TERM_YELLOW, "'Thou art a fool!")
- cmsg_print(TERM_YELLOW, "I told thee to look carefully for the relic. It appears thou hast missed the")
- cmsg_print(TERM_YELLOW, "opportunity to claim it in my name, as I sense that those monsters who ")
- cmsg_print(TERM_YELLOW, "have overrun my temple have destroyed it themselves.")
- cmsg_print(TERM_YELLOW, "I shall not ask thee to do such a thing again, as thou hast failed me in this")
- cmsg_print(TERM_YELLOW, "simple task!'")
- else
- -- Force relic generation on 5th attempt if others have been unsuccessful.
- if (god_quest.relic_gen_tries == 4) and (god_quest.relic_generated == FALSE) then
- generate_relic()
- else
- -- 1/5 chance of generation
- chance = randint(5)
- if (chance == 5) then
- generate_relic()
- else
- god_quest.relic_gen_tries = god_quest.relic_gen_tries + 1
- end
- end
- end
- end,
- [HOOK_ENTER_DUNGEON] = function(d_idx)
- -- call the function to set the dungeon variables (dependant on pgod) the first time we enter the dungeon
- if d_idx ~= god_quest.DUNGEON_GOD then
- return
- else
- set_god_dungeon_attributes()
- end
- end,
- [HOOK_GEN_LEVEL_BEGIN] = function()
- -- call the function to set the dungeon variables (dependant on pgod) when we WoR back into the dungeon
- if current_dungeon_idx ~= god_quest.DUNGEON_GOD then
- return
- else
- set_god_dungeon_attributes()
- end
- end,
- [HOOK_STAIR] = function()
- -- call the function to set the dungeon variables (dependant on pgod) every time we go down a level
- if current_dungeon_idx ~= god_quest.DUNGEON_GOD then
- return
- else
- set_god_dungeon_attributes()
- end
- end,
- [HOOK_GET] = function(o_ptr, item)
- -- Is it the relic, and check to make sure the relic hasn't already been identified
- if (quest(GOD_QUEST).status == QUEST_STATUS_TAKEN) and (o_ptr.tval == TV_JUNK) and (o_ptr.sval == god_quest.relic_num)
- and (o_ptr.pval ~= TRUE) and (god_quest.relics_found < god_quest.quests_given) then
-
- -- more God talky-talky
- cmsg_print(TERM_L_BLUE, deity(player.pgod).name.." speaks to you:")
-
- -- Is it the last piece of the relic?
- if (god_quest.quests_given == god_quest.MAX_NUM_GOD_QUESTS) then
- cmsg_print(TERM_YELLOW, "'At last! Thou hast found all of the relic pieces.")
-
- -- reward player by increasing prayer skill
- cmsg_print(TERM_YELLOW, "Thou hast done exceptionally well! I shall increase thy prayer skill even more!'")
- skill(SKILL_PRAY).value = skill(SKILL_PRAY).value + (10 * (skill(SKILL_PRAY).mod))
-
- -- Take the relic piece
- floor_item_increase(item, -1)
- floor_item_optimize(item)
- else
- cmsg_print(TERM_YELLOW, "'Well done! Thou hast found part of the relic.")
- cmsg_print(TERM_YELLOW, "I shall surely ask thee to find more of it later!")
- cmsg_print(TERM_YELLOW, "I will take it from thee for now'")
-
- -- Take the relic piece
- floor_item_increase(item, -1)
- floor_item_optimize(item)
-
- -- reward player by increasing prayer skill
- cmsg_print(TERM_YELLOW, "'As a reward, I shall teach thee how to pray better'")
- skill(SKILL_PRAY).value = skill(SKILL_PRAY).value + (5 * (skill(SKILL_PRAY).mod))
- end
-
- -- relic piece has been identified
- o_ptr.pval = TRUE
- god_quest.relics_found = god_quest.relics_found + 1
-
- -- Make sure quests can be given again if neccesary
- quest(GOD_QUEST).status = QUEST_STATUS_UNTAKEN
- return TRUE
- end
- end,
- [HOOK_CHAR_DUMP] = function()
-
- if (god_quest.quests_given > 0) then
-
- local relics = god_quest.relics_found
- local append_text = ""
- if (god_quest.relics_found == god_quest.MAX_NUM_GOD_QUESTS) then
- relics = "all"
- append_text = " and pleased your god"
- else
- if (god_quest.relics_found == 0) then
- relics = "none"
- end
- if (quest(GOD_QUEST).status == QUEST_STATUS_FAILED) then
- append_text = " and failed in your quest"
- end
- end
-
- print_hook("\n You found "..(relics).." of the relic pieces"..(append_text)..".")
-
- end
- end,
- },
-}
-
--- this function places the lost temple at a randomly determined place.
-function place_rand_dung()
- local tries, grid
-
- -- erase old dungeon
- if (god_quest.quests_given > 0) then
- place_dungeon(god_quest.dung_y, god_quest.dung_x)
-
- -- erase old recall level
- max_dlv[god_quest.DUNGEON_GOD + 1] = 0
- end
-
- -- initialise tries variable
- tries = 1000
-
- while tries > 0 do
-
- tries = tries - 1
- -- get grid coordinates, within a range which prevents dungeon being generated at the very edge of the wilderness (would crash the game).
- god_quest.dung_x = rand_range(1, max_wild_x-2)
- god_quest.dung_y = rand_range(1, max_wild_y-2)
-
- -- Is there a town/dungeon/potentially impassable feature there, ?
- if (wild_map(god_quest.dung_y, god_quest.dung_x).entrance ~= 0)
- or (wild_feat(wild_map(god_quest.dung_y, god_quest.dung_x)).entrance ~= 0)
- or (wild_feat(wild_map(god_quest.dung_y, god_quest.dung_x)).terrain_idx == TERRAIN_EDGE)
- or (wild_feat(wild_map(god_quest.dung_y, god_quest.dung_x)).terrain_idx == TERRAIN_DEEP_WATER)
- or (wild_feat(wild_map(god_quest.dung_y, god_quest.dung_x)).terrain_idx == TERRAIN_TREES)
- or (wild_feat(wild_map(god_quest.dung_y, god_quest.dung_x)).terrain_idx == TERRAIN_SHALLOW_LAVA)
- or (wild_feat(wild_map(god_quest.dung_y, god_quest.dung_x)).terrain_idx == TERRAIN_DEEP_LAVA)
- or (wild_feat(wild_map(god_quest.dung_y, god_quest.dung_x)).terrain_idx == TERRAIN_MOUNTAIN) then
- -- try again
- else
- --neither player, nor wall, then stop this 'while'
- break
- end
- end
-
- -- Uhuh BAD ! lets use the default location up bree
- if tries == 0 then
- god_quest.dung_x = 32
- god_quest.dung_y = 19
- end
-
- -- create god dungeon in that place
- place_dungeon(god_quest.dung_y, god_quest.dung_x, god_quest.DUNGEON_GOD)
-
-end
-
--- this function generates the relic at a randomly determined place in the temple.
-function generate_relic()
- local tries, grid, x, y, relic
-
- -- initialise tries variable
- tries = 1000
-
- while (tries > 0) do
-
- tries = tries - 1
- -- get grid coordinates from current height/width, minus one to prevent relic being generated in outside wall. (would crash the game)
- y = randint(cur_hgt-1)
- x = randint(cur_wid-1)
- grid = cave(y, x)
-
- -- are the coordinates on a floor, not on a permanent feature (eg stairs), and not on a trap ?
- if (cave_is(grid, FF1_FLOOR) == TRUE) and (cave_is(grid, FF1_PERMANENT) == FALSE) and (grid.t_idx == 0) then break end
-
- end
-
- -- create relic
- relic = create_object(TV_JUNK, god_quest.relic_num)
-
- -- inscribe it to prevent automatizer 'accidents'
- relic.note = quark_add("quest")
-
- -- If no safe co-ords were found, put it in the players backpack
- if tries == 0 then
-
- -- explain it
- msg_print(TERM_L_BLUE, "You luckily stumble across the relic on the stairs!")
-
- if (inven_carry_okay(relic)) then
- inven_carry(relic, FALSE)
- else
- -- no place found, drop it on the stairs
- drop_near(relic, -1, player.py, player.px)
- end
-
- else
- -- drop it
- drop_near(relic, -1, y, x)
- end
-
- -- Only generate once!
- god_quest.relic_generated = TRUE
-
- -- Reset some variables
- god_quest.relic_gen_tries = 0
-
-end
-
-
-
-
-function set_god_dungeon_attributes()
-
- -- dungeon properties altered according to which god player is worshipping,
- if player.pgod == GOD_ERU then
-
- -- The Eru temple is based on Meneltarma.
- -- W: Not too many monsters (they'll be tough though, with big levels)
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 14
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 200
-
- -- L: Dirt and grass. More dirt at bottom, more grass at top. rocky ground would be nice
- dungeon(god_quest.DUNGEON_GOD).floor1 = 88
- dungeon(god_quest.DUNGEON_GOD).floor2 = 89
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 70
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[1] = 30
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[2] = 10
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[2] = 90
-
- -- A: Outer wall mountain chain. other walls granite
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 97
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 57
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 97
- dungeon(god_quest.DUNGEON_GOD).fill_method = 2
-
- -- O: "At Meneltarma no weapon or tool had ever been borne" (but invaders would have left a small number)
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 45
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 5
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 45
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 5
-
- -- F: A large pillar, with stairs created at edges. (You can't climb a rock through the middle, can you?)
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_BIG, DF1_NO_DOORS, DF1_CIRCULAR_ROOMS, DF1_EMPTY, DF1_TOWER, DF1_FLAT, DF1_ADJUST_LEVEL_2)
- dungeon(god_quest.DUNGEON_GOD).flags2 = bor(DF2_ADJUST_LEVEL_1_2, DF2_NO_SHAFT, DF2_ADJUST_LEVEL_PLAYER)
-
- -- R:
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 50
-
- -- M: We want evil or flying characters
- dungeon(god_quest.DUNGEON_GOD).rules[1].mflags3 = RF3_EVIL
-
- dungeon(god_quest.DUNGEON_GOD).rules[2].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[2].percent = 50
-
- -- M: We want evil or flying characters
- dungeon(god_quest.DUNGEON_GOD).rules[2].mflags7 = RF7_CAN_FLY
-
-
- elseif player.pgod == GOD_MANWE then
-
- -- Manwe's lost temple is high in the clouds
- -- W: Has average number of monsters.
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 18
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 160
-
-
- -- L: floor will be 'cloud-like vapour' and pools of 'condensing water'
- dungeon(god_quest.DUNGEON_GOD).floor1 = 208
- dungeon(god_quest.DUNGEON_GOD).floor2 = 209
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 85
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[1] = 15
-
- -- A: Outer wall is 'hail stone wall', inner wall 'dense fog'. FIlled at max smoothing, like islands.
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 211
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 210
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 211
- dungeon(god_quest.DUNGEON_GOD).fill_method = 4
-
- -- O: Can't imagine Manwe having much treasure. Little need for tools in a cloud temple. lots of magical stuff though...
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 15
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 25
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 55
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 5
-
- -- F: It's open, goes up like a tower, give it a few interesting rooms, make the monsters hard(ish).
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_NO_DOORS, DF1_TOWER, DF1_CAVERN, DF1_ADJUST_LEVEL_2)
- dungeon(god_quest.DUNGEON_GOD).flags2 = bor(DF2_NO_SHAFT, DF2_ADJUST_LEVEL_PLAYER)
-
- -- R:
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[2].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[2].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[3].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[3].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[4].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[4].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[5].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[5].percent = 20
-
- -- M: We want air(poison-type) or flying characters. Orcs too. They would have ransacked his elf-loving temple :)
- dungeon(god_quest.DUNGEON_GOD).rules[1].mflags2 = RF2_INVISIBLE
- dungeon(god_quest.DUNGEON_GOD).rules[2].mflags3 = bor(RF3_ORC, RF3_IM_POIS)
- dungeon(god_quest.DUNGEON_GOD).rules[3].mflags4 = bor(RF4_BR_POIS, RF4_BR_GRAV)
- dungeon(god_quest.DUNGEON_GOD).rules[4].mflags5 = RF5_BA_POIS
- dungeon(god_quest.DUNGEON_GOD).rules[5].mflags7 = RF7_CAN_FLY
-
-
- elseif player.pgod == GOD_TULKAS then
-
- -- Tulkas dungeon is quite normal, possibly a bit boring to be honest. Maybe I should add something radical to it.
- -- 'The house of Tulkas in the midmost of Valmar was a house of mirth and revelry. It sprang into the air with many storeys,
- -- and had a tower of bronze and pillars of copper in a wide arcade'
- -- W: but with lots of monsters
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 20
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 120
-
- -- L: floor is normal
- dungeon(god_quest.DUNGEON_GOD).floor1 = 1
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 100
-
- -- A: Granite walls
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 56
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 58
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 57
- dungeon(god_quest.DUNGEON_GOD).fill_method = 0
-
- -- O: Loads of combat drops
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 10
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 70
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 5
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 15
-
- -- F: fairly standard
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_NO_DESTROY, DF1_ADJUST_LEVEL_2)
- dungeon(god_quest.DUNGEON_GOD).flags2 = DF2_ADJUST_LEVEL_PLAYER
-
- -- R:
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 100
-
- -- M: plenty demons please
- dungeon(god_quest.DUNGEON_GOD).rules[1].mflags3 = bor(RF3_DEMON, RF3_EVIL)
-
-
- elseif player.pgod == GOD_MELKOR then
-
- -- Melkors dungeon will be dark, fiery and stuff
- -- Many many monsters! (but prob ADJUST_LEVEL_1_2)
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 24
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 80
-
-
- -- L: floor is dirt/mud/nether
- dungeon(god_quest.DUNGEON_GOD).floor1 = 88
- dungeon(god_quest.DUNGEON_GOD).floor2 = 94
- dungeon(god_quest.DUNGEON_GOD).floor3 = 102
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 45
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[1] = 45
- dungeon(god_quest.DUNGEON_GOD).floor_percent3[1] = 10
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[2] = 35
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[2] = 35
- dungeon(god_quest.DUNGEON_GOD).floor_percent3[2] = 30
-
- -- A: Granite walls to fill but glass walls for room perimeters (you can see the nasty monsters coming)
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 188
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 188
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 57
- dungeon(god_quest.DUNGEON_GOD).fill_method = 1
-
- -- O: Even drops
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 25
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 25
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 25
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 25
-
- -- F: Small, lava rivers, nasty monsters hehehehehe
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_SMALL, DF1_LAVA_RIVERS, DF1_ADJUST_LEVEL_1)
- dungeon(god_quest.DUNGEON_GOD).flags2 = bor(DF2_ADJUST_LEVEL_1_2, DF2_ADJUST_LEVEL_PLAYER)
-
- -- R: No restrictions on monsters here
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 0
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 80
-
- -- R: Apart from making sure we have some GOOD ones
- dungeon(god_quest.DUNGEON_GOD).rules[2].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[2].percent = 20
-
- -- M:
- dungeon(god_quest.DUNGEON_GOD).rules[2].mflags3 = RF3_GOOD
-
- elseif player.pgod == GOD_YAVANNA then
-
- -- Yavannas dungeon will be very natural, tress and stuff.
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 22
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 100
-
- -- L: floor is grass/flowers, plus dirt so not always regenerating quick!
- dungeon(god_quest.DUNGEON_GOD).floor1 = 89
- dungeon(god_quest.DUNGEON_GOD).floor2 = 199
- dungeon(god_quest.DUNGEON_GOD).floor3 = 88
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 40
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[1] = 15
- dungeon(god_quest.DUNGEON_GOD).floor_percent3[1] = 45
-
- -- A: Tree walls to fill, small trees for inner walls
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 96
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 202
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 96
- dungeon(god_quest.DUNGEON_GOD).fill_method = 1
-
- -- O: nt much combat.. tools where ransackers have tried to chop trees down.
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 20
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 10
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 30
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 40
-
- -- F: Natural looking
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_NO_DOORS, DF1_WATER_RIVERS, DF1_NO_DESTROY, DF1_ADJUST_LEVEL_1, DF1_NO_RECALL)
- dungeon(god_quest.DUNGEON_GOD).flags2 = bor(DF2_ADJUST_LEVEL_1_2, DF2_NO_SHAFT, DF2_NO_GENO, DF2_ADJUST_LEVEL_PLAYER)
-
- -- R: Demons, Undead, non-living
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 100
-
- -- M:
- dungeon(god_quest.DUNGEON_GOD).rules[1].mflags3 = bor(RF3_DEMON, RF3_UNDEAD, RF3_NONLIVING)
-
- elseif player.pgod == GOD_AULE then
-
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 24
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 80
-
- -- L: floor is dirt/mud/shallow water
- dungeon(god_quest.DUNGEON_GOD).floor1 = 88
- dungeon(god_quest.DUNGEON_GOD).floor2 = 94
- dungeon(god_quest.DUNGEON_GOD).floor3 = 84
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 45
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[1] = 45
- dungeon(god_quest.DUNGEON_GOD).floor_percent3[1] = 10
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[2] = 35
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[2] = 35
- dungeon(god_quest.DUNGEON_GOD).floor_percent3[2] = 30
-
- -- A: Grey mountains, inner walls are low hills
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 216
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 216
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 213
- dungeon(god_quest.DUNGEON_GOD).fill_method = 1
-
- -- O: Weapons and tools only
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 0
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 50
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 0
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 50
-
- -- F: Small, no destroyed levels, min monster level = dungeon level
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_SMALL, DF1_NO_DESTROY, DF1_ADJUST_LEVEL_1, DF1_NO_STREAMERS)
-
- -- R: No restrictions on monsters here
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 0
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 80
-
- elseif player.pgod == GOD_VARDA then
-
- -- Varda lives with Manwe, so high in the clouds
- -- W: Has average number of monsters.
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 18
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 160
-
-
- -- L: floor will be grass and flowers
- dungeon(god_quest.DUNGEON_GOD).floor1 = 89
- dungeon(god_quest.DUNGEON_GOD).floor2 = 82
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 85
- dungeon(god_quest.DUNGEON_GOD).floor_percent2[1] = 15
-
- -- A: Outer wall is 'hail stone wall', inner wall 'dense fog'. Filled at max smoothing, like islands.
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 211
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 210
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 211
- dungeon(god_quest.DUNGEON_GOD).fill_method = 4
-
- -- O: Varda likes magical items and tools, not much treasure or weapons
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 15
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 5
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 55
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 25
-
- -- F: It's open, goes up like a tower, give it a few interesting rooms, make the monsters hard(ish).
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_NO_DOORS, DF1_TOWER, DF1_CAVERN, DF1_ADJUST_LEVEL_1)
- dungeon(god_quest.DUNGEON_GOD).flags2 = bor(DF2_NO_SHAFT, DF2_ADJUST_LEVEL_PLAYER)
-
- -- R:
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[2].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[2].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[3].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[3].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[4].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[4].percent = 20
- dungeon(god_quest.DUNGEON_GOD).rules[5].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[5].percent = 20
-
- -- M: We want air(poison-type) or flying characters. Orcs too.
- dungeon(god_quest.DUNGEON_GOD).rules[1].mflags2 = RF2_INVISIBLE
- dungeon(god_quest.DUNGEON_GOD).rules[2].mflags3 = bor(RF3_ORC, RF3_IM_POIS)
- dungeon(god_quest.DUNGEON_GOD).rules[3].mflags4 = bor(RF4_BR_POIS, RF4_BR_GRAV)
- dungeon(god_quest.DUNGEON_GOD).rules[4].mflags5 = RF5_BA_POIS
- dungeon(god_quest.DUNGEON_GOD).rules[5].mflags7 = RF7_CAN_FLY
-
-
- elseif player.pgod == GOD_ULMO then
-
- -- Mandos dungeon is basically Tulkas, except with undead.
- -- W: but with lots of monsters
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 20
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 120
-
- -- L: floor is dirt
- dungeon(god_quest.DUNGEON_GOD).floor1 = 88
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 100
-
- -- A: Cheat: walls are water.
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 187
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 238
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 84
- dungeon(god_quest.DUNGEON_GOD).fill_method = 0
-
- -- O: Lots of treasure, not much else.
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 90
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 0
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 5
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 5
-
- -- F: fairly standard
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_NO_DESTROY, DF1_ADJUST_LEVEL_2)
- dungeon(god_quest.DUNGEON_GOD).flags2 = DF2_ADJUST_LEVEL_PLAYER
-
- -- R:
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 35
- dungeon(god_quest.DUNGEON_GOD).rules[2].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[2].percent = 30
- dungeon(god_quest.DUNGEON_GOD).rules[3].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[3].percent = 30
-
- -- M: Aquatic creatures only.
- dungeon(god_quest.DUNGEON_GOD).rules[1].mflags3 = RF7_CAN_FLY
- dungeon(god_quest.DUNGEON_GOD).rules[2].mflags3 = RF7_AQUATIC
- dungeon(god_quest.DUNGEON_GOD).rules[3].mflags3 = RF3_RES_WATE
-
- elseif player.pgod == GOD_MANDOS then
-
- -- Mandos dungeon is basically Tulkas, except with undead.
- -- W: but with lots of monsters
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_level = 20
- dungeon(god_quest.DUNGEON_GOD).min_m_alloc_chance = 120
-
- -- L: floor is normal
- dungeon(god_quest.DUNGEON_GOD).floor1 = 1
- dungeon(god_quest.DUNGEON_GOD).floor_percent1[1] = 100
-
- -- A: Granite walls
- dungeon(god_quest.DUNGEON_GOD).fill_type1 = 56
- dungeon(god_quest.DUNGEON_GOD).fill_percent1[1] = 100
- dungeon(god_quest.DUNGEON_GOD).outer_wall = 58
- dungeon(god_quest.DUNGEON_GOD).inner_wall = 57
- dungeon(god_quest.DUNGEON_GOD).fill_method = 0
-
- -- O: Loads of combat drops
- dungeon(god_quest.DUNGEON_GOD).objs.treasure = 10
- dungeon(god_quest.DUNGEON_GOD).objs.combat = 70
- dungeon(god_quest.DUNGEON_GOD).objs.magic = 5
- dungeon(god_quest.DUNGEON_GOD).objs.tools = 15
-
- -- F: fairly standard
- dungeon(god_quest.DUNGEON_GOD).flags1 = bor(DF1_NO_DESTROY, DF1_ADJUST_LEVEL_2)
- dungeon(god_quest.DUNGEON_GOD).flags2 = DF2_ADJUST_LEVEL_PLAYER
-
- -- R:
- dungeon(god_quest.DUNGEON_GOD).rules[1].mode = 3
- dungeon(god_quest.DUNGEON_GOD).rules[1].percent = 100
-
- -- M: vampires!
- dungeon(god_quest.DUNGEON_GOD).rules[1].r_char = "V"
- dungeon(god_quest.DUNGEON_GOD).rules[1].mflags3 = bor(RF3_UNDEAD, RF3_EVIL)
-
- end
-
- -- W: All dungeons are 5 levels deep, and created at 2/3 of the player clvl when the quest is given
- dungeon(god_quest.DUNGEON_GOD).mindepth = god_quest.dun_mindepth
- dungeon(god_quest.DUNGEON_GOD).maxdepth = god_quest.dun_maxdepth
- dungeon(god_quest.DUNGEON_GOD).minplev = god_quest.dun_minplev
-
-end
-
--- Calling this function returns the direction the dungeon is in from the players position at the time
--- the quest was given, and also the direction from angband (if the player is worshipping Melkor) or lothlorien.
-function get_god_quest_axes()
- local home, home_y_coord, home_x_coord, home_axis, home2, home2_y_coord, home2_x_coord, home2_axis, mydistance
-
- -- different values for different gods...
- if player.pgod ~= GOD_MELKOR then
-
- -- one of the valar, "home" is lothlorien, home2 is Minas Arnor
- home = "Bree"
- home_y_coord = 21
- home_x_coord = 35
- home2 = "Minas Anor"
- home2_y_coord = 56
- home2_x_coord = 60
- else
- -- Melkor, "home" is angband, home2 is Barad-dur
- home = "the Pits of Angband"
- home_y_coord = 7
- home_x_coord = 11
- home2 = "the Land of Mordor"
- home2_y_coord = 49
- home2_x_coord = 70
- end
-
- home_axis = compass(home_y_coord, home_x_coord, god_quest.dung_y, god_quest.dung_x)
- home2_axis = compass(home2_y_coord, home2_x_coord, god_quest.dung_y, god_quest.dung_x)
-
- home_distance = approximate_distance(home_y_coord, home_x_coord, god_quest.dung_y, god_quest.dung_x)
- home2_distance = approximate_distance(home2_y_coord, home2_x_coord, god_quest.dung_y, god_quest.dung_x)
-
- return home, home_axis, home_distance, home2, home2_axis, home2_distance
-end
diff --git a/lib/mods/theme/scpt/gods.lua b/lib/mods/theme/scpt/gods.lua
deleted file mode 100644
index 014a4423..00000000
--- a/lib/mods/theme/scpt/gods.lua
+++ /dev/null
@@ -1,26 +0,0 @@
-add_hooks
-{
- [HOOK_FOLLOW_GOD] = function(god, action)
- if action == "ask" then
- if not (god == GOD_MELKOR) then
- local i = INVEN_WIELD
- while i < INVEN_TOTAL do
- -- 13 is ART_POWER
- if player.inventory(i).name1 == 13 then
- msg_print("The One Ring has corrupted you, and you are rejected.")
- return TRUE
- end
- i = i + 1
- end
- end
- end
- return FALSE
- end,
- [HOOK_RECALC_SKILLS] = function()
- if not (player.pgod == GOD_NONE) and (get_skill(SKILL_ANTIMAGIC) > 0) then
- msg_print("You no longer believe.")
- abandon_god(GOD_ALL)
- end
- return FALSE
- end,
-}
diff --git a/lib/mods/theme/scpt/gods_new.lua b/lib/mods/theme/scpt/gods_new.lua
deleted file mode 100644
index 8153d453..00000000
--- a/lib/mods/theme/scpt/gods_new.lua
+++ /dev/null
@@ -1,454 +0,0 @@
--- This file contains all the new gods
-
-add_loadsave("GRACE_DELAY",0)
-
-function aule_stone_skin()
-local type
- if player.grace >= 10000 then
- type = SHIELD_COUNTER
- else
- type = 0
- end
-
- set_shield(randint(10) + 10 + (player.grace / 100), 10 + (player.grace / 100), type, 2 + (player.grace / 200), 3 + (player.grace / 400))
-end
-
-GOD_AULE = add_god
-{
- ["name"] = "Aule the Smith",
- ["desc"] =
- {
- "Aule is a smith, and the creator of the Dwarves."
- },
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- if (player.pgod == GOD_AULE) and (player.grace > 0) then
- -- Resist fire, not shown on the character screen (?)
- if (player.grace > 5000) then
- player.resist_fire = TRUE
- end
-
- local bonus = player.grace / 5000
- if bonus > 5 then
- bonus = 5
- end
- player.to_h = player.to_h + bonus
- player.dis_to_h = player.dis_to_h + bonus
- player.to_d = player.to_d + bonus
- player.dis_to_d = player.dis_to_d + bonus
-
- end
- end,
- [HOOK_PROCESS_WORLD] = function()
- if (player.pgod == GOD_AULE) then
- GRACE_DELAY = GRACE_DELAY + 1
- if GRACE_DELAY >= 15 then
- -- Aule likes Dwarves and Dark Elves (Eol's influence here)
- if
- (get_race_name() ~= "Dwarf") and
- (get_race_name() ~= "Petty-dwarf") and
- (get_race_name() ~= "Gnome") and
- (get_race_name() ~= "Dark-Elf") then
- set_grace(player.grace - 1)
- end
-
- -- Search inventory for axe or hammer - Gain 1 point of grace for each hammer or axe
- for i = 0, INVEN_TOTAL - 1 do
- if ((player.inventory(i).tval) == TV_AXE) then
- set_grace(player.grace + 1)
- end
- if ((player.inventory(i).tval) == TV_HAFTED) then
- if (((player.inventory(i).sval) == SV_WAR_HAMMER) or ((player.inventory(i).sval) == SV_LUCERN_HAMMER) or ((player.inventory(i).sval) == SV_GREAT_HAMMER)) then
- set_grace(player.grace + 1)
- end
- end
- end
-
- if (player.praying == TRUE) then
- set_grace(player.grace - 2)
-
- -- Chance of casting Stoneskin if praying
- local chance
- if (player.grace >= 50000) then
- chance = 50000
- else
- chance = 50000 - player.grace
- end
-
- if (randint(100000) <= 100000 / chance) then
- aule_stone_skin()
- msg_print("Aule casts Stone Skin on you.")
- end
-
- end
- GRACE_DELAY = 0
- end
-
- end
- end,
- [HOOK_SACRIFICE_GOD] = function()
- if (player.pgod == GOD_AULE) then
- local ret, item, obj, value
- ret, item = get_item(
- "Sacrifice which item? ",
- "You have nothing to sacrifice.",
- USE_INVEN,
- function(obj)
- -- perhaps restrict this only to metal armour and weapons
- if (obj.found == OBJ_FOUND_SELFMADE) then
- return TRUE
- end
- return FALSE
- end
- )
-
- -- Item selected
- if ret == TRUE then
- -- Increase piety by the value of the item / 10
- -- object_value is not available in Lua, therefore I used the
- -- cost of the base item, without magical boni
- obj = get_object(item)
- -- value = object_value(obj)/10
- value = k_info[obj.k_idx + 1].cost/10
-
- set_grace(player.grace + value)
-
- -- remove the object
- inven_item_increase(item, -1)
- inven_item_optimize(item)
- end
- end
- end,
- [HOOK_MONSTER_DEATH] = function(m_idx)
- if (player.pgod == GOD_AULE) then
- m_ptr = monster(m_idx)
- if
- (m_ptr.r_idx == test_monster_name("Petty-dwarf")) or
- (m_ptr.r_idx == test_monster_name("Petty-dwarf mage")) or
- (m_ptr.r_idx == test_monster_name("Dark dwarven warrior")) or
- (m_ptr.r_idx == test_monster_name("Dark dwarven smith")) or
- (m_ptr.r_idx == test_monster_name("Dark dwarven lord")) or
- (m_ptr.r_idx == test_monster_name("Dark dwarven priest")) or
- (m_ptr.r_idx == test_monster_name("Dwarven warrior")) then
- -- Aule dislikes you killing dwarves
- set_grace(player.grace - 20)
- end
- if
- (m_ptr.r_idx == test_monster_name("Nar, the Dwarf")) or
- (m_ptr.r_idx == test_monster_name("Naugladur, Lord of Nogrod")) or
- (m_ptr.r_idx == test_monster_name("Telchar the Smith")) or
- (m_ptr.r_idx == test_monster_name("Fundin Bluecloak")) or
- (m_ptr.r_idx == test_monster_name("Khim, Son of Mim")) or
- (m_ptr.r_idx == test_monster_name("Ibun, Son of Mim")) or
- (m_ptr.r_idx == test_monster_name("Mim, Betrayer of Turin")) then
- -- These uniques earn a bigger penalty
- set_grace(player.grace - 500)
- end
- end
- end,
- }
-}
-
-GOD_VARDA = add_god
-{
- ["name"] = "Varda Elentari",
- ["desc"] =
- {
- "The Queen of the Stars. In light is her power and joy."
- },
- ["hooks"] =
- {
- [HOOK_PROCESS_WORLD] = function()
- if (player.pgod == GOD_VARDA) then
- GRACE_DELAY = GRACE_DELAY + 1
-
- -- piety increase if in light
- if (GRACE_DELAY >= 15) then
- if band(cave(player.py, player.px).info, CAVE_GLOW) ~= 0 then
- set_grace(player.grace + 2)
- end
- if (
- (get_race_name() == "Orc") or
- (get_race_name() == "Troll") or
- (get_race_name() == "Dragon") or
- (get_race_name() == "Demon")) then
- -- Varda hates evils
- set_grace(player.grace - 2)
- else
- set_grace(player.grace - 1)
- end
-
- if (player.praying == TRUE) then
- set_grace(player.grace - 1)
- end
- GRACE_DELAY = 0
- end
- end
- end,
- [HOOK_CALC_LITE] = function()
- if (player.pgod == GOD_VARDA) then
- -- increase lite radius
- player.cur_lite = player.cur_lite + 1
- end
- end,
- [HOOK_GF_EXEC] = function (target, who, type, dam, r, y, x, m_ptr)
- if (player.pgod == GOD_VARDA) then
- if ((type == GF_LITE) or (type == GF_LITE_WEAK)) then
- -- Raise piety for using lite
- set_grace(player.grace + 1)
- end
- end
- end,
- },
-}
-
-GOD_ULMO = add_god
-{
- ["name"] = "Ulmo",
- ["desc"] =
- {
- "Ulmo is called Lord of Waters, he rules all that is water on Arda."
- },
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- if (player.pgod == GOD_ULMO) then
- player.water_breath = TRUE
- end
- if (player.pgod == GOD_ULMO) and (player.grace > 0) then
- local bonus = player.grace / 5000
- if bonus > 5 then
- bonus = 5
- end
-
- if ((player.grace > 1000) and (player.praying == TRUE)) then
- player.resist_pois = TRUE
- end
- if ((player.grace > 15000) and (player.praying == TRUE)) then
- player.magic_breath = TRUE
- end
- end
- end,
-
- [HOOK_MONSTER_DEATH] = function(m_idx)
- if (player.pgod == GOD_ULMO) then
- m_ptr = monster(m_idx)
- if
- (m_ptr.r_idx == test_monster_name("Swordfish")) or
- (m_ptr.r_idx == test_monster_name("Barracuda")) or
- (m_ptr.r_idx == test_monster_name("Globefish")) or
- (m_ptr.r_idx == test_monster_name("Aquatic bear")) or
- (m_ptr.r_idx == test_monster_name("Pike")) or
- (m_ptr.r_idx == test_monster_name("Electric eel")) or
- (m_ptr.r_idx == test_monster_name("Giant crayfish")) or
- (m_ptr.r_idx == test_monster_name("Mermaid")) or
- (m_ptr.r_idx == test_monster_name("Leviathan")) or
- (m_ptr.r_idx == test_monster_name("Box jellyfish")) or
- (m_ptr.r_idx == test_monster_name("Giant piranha")) or
- (m_ptr.r_idx == test_monster_name("Piranha")) or
- (m_ptr.r_idx == test_monster_name("Ocean naga")) or
- (m_ptr.r_idx == test_monster_name("Whale")) or
- (m_ptr.r_idx == test_monster_name("Octopus")) or
- (m_ptr.r_idx == test_monster_name("Giant octopus")) or
- (m_ptr.r_idx == test_monster_name("Drowned soul")) or
- (m_ptr.r_idx == test_monster_name("Tiger shark")) or
- (m_ptr.r_idx == test_monster_name("Hammerhead shark")) or
- (m_ptr.r_idx == test_monster_name("Great white shark")) or
- (m_ptr.r_idx == test_monster_name("White shark")) or
- (m_ptr.r_idx == test_monster_name("Stargazer")) or
- (m_ptr.r_idx == test_monster_name("Flounder")) or
- (m_ptr.r_idx == test_monster_name("Giant turtle")) or
- (m_ptr.r_idx == test_monster_name("Killer whale")) or
- (m_ptr.r_idx == test_monster_name("Water naga")) or
- (m_ptr.r_idx == test_monster_name("Behemoth")) then
- -- He doesn't like it if you kill these monsters
- set_grace(player.grace - 20)
- end
- if
- (m_ptr.r_idx == test_monster_name("Seahorse")) or
- (m_ptr.r_idx == test_monster_name("Aquatic elven warrior")) or
- (m_ptr.r_idx == test_monster_name("Aquatic elven mage")) or
- (m_ptr.r_idx == test_monster_name("Wavelord")) or
- (m_ptr.r_idx == test_monster_name("The Watcher in the Water")) then
- -- These monsters earn higher penalties
- set_grace(player.grace - 500)
- end
- end
- end,
- [HOOK_GF_EXEC] = function (target, who, type, dam, r, y, x, m_ptr)
- if (player.pgod == GOD_ULMO) then
- if ((type == GF_FIRE) or (type == GF_HELL_FIRE) or (type == GF_HOLY_FIRE) or (type == GF_LAVA_FLOW) or (type == GF_METEOR) or (type == GF_NUKE) or (type == GF_PLASMA)) then
- -- Reduce piety for using any kind of fire magic
- set_grace(player.grace - 5)
- end
- end
- end,
- [HOOK_PROCESS_WORLD] = function()
- if (player.pgod == GOD_ULMO) then
- GRACE_DELAY = GRACE_DELAY + 1
- if GRACE_DELAY >= 15 then
- -- Ulmo likes the Edain (except Easterlings)
- if
- (get_race_name() == "Human") or
- (get_race_name() == "Dunadan") or
- (get_race_name() == "Druadan") or
- (get_race_name() == "RohanKnight") then
- set_grace(player.grace + 1)
-
- elseif (
- (get_race_name() == "Easterling") or
- (get_race_name() == "Demon") or
- (get_race_name() == "Orc")) then
- -- hated races
- set_grace(player.grace - 2)
- else
- set_grace(player.grace + 1)
- end
-
- if (player.praying == TRUE) then
- set_grace(player.grace - 1)
- end
- -- Search inventory for axe or hammer - Gain 1 point of grace for each hammer or axe
- for i = 0, INVEN_TOTAL - 1 do
- if ((player.inventory(i).tval) == TV_POLEARM) then
- if ((player.inventory(i).sval) == SV_TRIDENT) then
- set_grace(player.grace + 1)
- end
- end
- end
-
- GRACE_DELAY = 0
- end
-
- end
- end,
- },
-}
-
-GOD_MANDOS = add_god
-{
- ["name"] = "Mandos",
- ["desc"] =
- {
- "The Doomsman of the Valar and keeper of the slain."
- },
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- if (player.pgod == GOD_MANDOS) then
- player.resist_neth = TRUE
- end
- if (player.pgod == GOD_MANDOS) and (player.grace > 0) then
- local bonus = player.grace / 5000
- if bonus > 5 then
- bonus = 5
- end
-
- if ((player.grace > 10000) and (player.praying == TRUE)) then
- player.resist_continuum = TRUE
- end
-
- if ((player.grace > 20000) and (player.praying == TRUE)) then
- player.immune_neth = TRUE
- end
- end
- end,
- [HOOK_PROCESS_WORLD] = function()
- if (player.pgod == GOD_MANDOS) then
- GRACE_DELAY = GRACE_DELAY + 1
- if GRACE_DELAY >= 15 then
- -- He loves astral beings
- if (get_subrace_name() == "LostSoul") then
- set_grace(player.grace + 1)
- end
-
- -- He likes High Elves only, though, as races
- if (get_race_name() ~= "High-Elf") then
- set_grace(player.grace - 1)
- end
- end
- -- piety increase if (condition)
- if (GRACE_DELAY >= 15) then
- if (
- (get_subrace_name() == "Vampire") or
- (get_race_name() == "Demon")) then
- -- hated races
- set_grace(player.grace - 10)
- else
- set_grace(player.grace + 2)
- end
- -- he really doesn't like to be disturbed
- if (player.praying == TRUE) then
- set_grace(player.grace - 5)
- end
- GRACE_DELAY = 0
- end
-
- end
- end,
- [HOOK_MONSTER_DEATH] = function(m_idx)
- if (player.pgod == GOD_MANDOS) then
- m_ptr = monster(m_idx)
- if
- (m_ptr.r_idx == test_monster_name("Vampire")) or
- (m_ptr.r_idx == test_monster_name("Master vampire")) or
- (m_ptr.r_idx == test_monster_name("Oriental vampire")) or
- (m_ptr.r_idx == test_monster_name("Vampire lord")) or
- (m_ptr.r_idx == test_monster_name("Vampire orc")) or
- (m_ptr.r_idx == test_monster_name("Vampire yeek")) or
- (m_ptr.r_idx == test_monster_name("Vampire ogre")) or
- (m_ptr.r_idx == test_monster_name("Vampire troll")) or
- (m_ptr.r_idx == test_monster_name("Vampire dwarf")) or
- (m_ptr.r_idx == test_monster_name("Vampire gnome")) or
- (m_ptr.r_idx == test_monster_name("Elder vampire")) then
- -- He really likes it if you kill Vampires (but not the adventurer kind :P)
- set_grace(player.grace + 50)
- end
-
- if
- (m_ptr.r_idx == test_monster_name("Vampire elf")) or
- (m_ptr.r_idx == test_monster_name("Thuringwethil, the Vampire Messenger")) then
- -- He *loves* it if you kill vampire Elves
- -- He will also thank you extra kindly if you kill Thuringwethil
- set_grace(player.grace + 200)
- end
-
- if
- (m_ptr.r_idx == test_monster_name("Dark elf")) or
- (m_ptr.r_idx == test_monster_name("Dark elven druid")) or
- (m_ptr.r_idx == test_monster_name("Eol, the Dark Elf")) or
- (m_ptr.r_idx == test_monster_name("Maeglin, the Traitor of Gondolin")) or
- (m_ptr.r_idx == test_monster_name("Dark elven mage")) or
- (m_ptr.r_idx == test_monster_name("Dark elven warrior")) or
- (m_ptr.r_idx == test_monster_name("Dark elven priest")) or
- (m_ptr.r_idx == test_monster_name("Dark elven lord")) or
- (m_ptr.r_idx == test_monster_name("Dark elven warlock")) or
- (m_ptr.r_idx == test_monster_name("Dark elven sorcerer")) then
- -- He doesn't like it if you kill normal Elves (means more work for him :P)
- set_grace(player.grace - 20)
- end
- if
- (m_ptr.r_idx == test_monster_name("Glorfindel of Rivendell")) or
- (m_ptr.r_idx == test_monster_name("Finrod Felagund")) or
- (m_ptr.r_idx == test_monster_name("Thranduil, King of the Wood Elves")) or
- (m_ptr.r_idx == test_monster_name("Aquatic elven warrior")) or
- (m_ptr.r_idx == test_monster_name("Aquatic elven mage")) or
- (m_ptr.r_idx == test_monster_name("High-elven ranger")) or
- (m_ptr.r_idx == test_monster_name("Elven archer")) then
- -- He hates it if you kill coaligned Elves
- set_grace(player.grace - 200)
- end
- if
- (m_ptr.r_idx == test_monster_name("Child spirit")) or
- (m_ptr.r_idx == test_monster_name("Young spirit")) or
- (m_ptr.r_idx == test_monster_name("Mature spirit")) or
- (m_ptr.r_idx == test_monster_name("Experienced spirit")) or
- (m_ptr.r_idx == test_monster_name("Wise spirit")) then
- -- He *hates* it if you kill the coaligned Spirits
- set_grace(player.grace - 1000)
- end
- end
- end
- }
-}
diff --git a/lib/mods/theme/scpt/gondolin.lua b/lib/mods/theme/scpt/gondolin.lua
deleted file mode 100644
index c85d8f53..00000000
--- a/lib/mods/theme/scpt/gondolin.lua
+++ /dev/null
@@ -1,63 +0,0 @@
--- This script makes the void jumpgates between Minas Anor and Gondolin appear in Gondolin rather than in a weird wilderness spot
--- as well as making the Save Gondolin quest take the player straight to Gondolin instead of the Secret Valley.
--- Many thanks to TheFalcon for the code.
-
-function minas_gate()
- if (quest(16).status == QUEST_STATUS_FINISHED) and (player.wilderness_y == 56) and (player.wilderness_x == 60) and (player.wild_mode == FALSE) then
- cave(35,10).feat = 159
- end
-end
-
-add_hook_script(HOOK_QUEST_FINISH, "minas_gate", "minas_gate")
-add_hook_script(HOOK_WILD_GEN, "minas_gate", "minas_gate")
-
-function minas_jump(direction)
- if (quest(16).status == QUEST_STATUS_FINISHED) and (player.wilderness_y == 56) and (player.wilderness_x == 60) and (player.wild_mode == FALSE) then
- if (player.px == 10) and (player.py == 35) then
- if (direction == "down") then
- player.wilderness_x = 3
- player.wilderness_y = 11
- player.wild_mode = FALSE
- player.px = 119
- player.py = 25
- player.oldpx = player.px
- player.oldpy = player.py
- dun_level = 0
- player.leaving = TRUE
- return TRUE
- end
- end
- end
-end
-
-add_hook_script(HOOK_STAIR, "minas_jump", "minas_jump")
-
-add_loadsave("tolan_count", 0)
-
-function tolan_travel()
- if (quest(15).status == QUEST_STATUS_TAKEN) and (tolan_count == 0) then
- player.wilderness_x = 3
- player.wilderness_y = 11
- player.wild_mode = FALSE
- player.px = 117
- player.py = 25
- player.oldpx = player.px
- player.oldpy = player.py
- dun_level = 0
- player.leaving = TRUE
- tolan_count = 1
- return TRUE
- end
-end
-
-add_hook_script(HOOK_END_TURN, "tolan_travel", "tolan_travel")
-
-add_hooks
-{
- [HOOK_BIRTH] = function()
- if tolan_count >=1
- then tolan_count = 0
- else
- end
- end
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/help.lua b/lib/mods/theme/scpt/help.lua
deleted file mode 100644
index 4e244df6..00000000
--- a/lib/mods/theme/scpt/help.lua
+++ /dev/null
@@ -1,445 +0,0 @@
--- Ingame contextual help
-
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------------Here comes the definition of help-----------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-
-ingame_help
-{
- ["hook"] = HOOK_MOVE,
- ["event"] = function(y, x) if cave(y, x).feat == FEAT_BETWEEN then return TRUE end end,
- ["desc"] =
- {
- "Void Jumpgates can be entered by pressing the > key. They will transport",
- "you to another jumpgate, but beware of the cold damage that might kill you.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_MOVE,
- ["event"] = function(y, x) if cave(y, x).feat == FEAT_FOUNTAIN then return TRUE end end,
- ["desc"] =
- {
- "Fountains are always magical. You can quaff from them by pressing H.",
- "Beware that unlike potions they cannot be identified.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_MOVE,
- ["event"] = function(y, x) if cave(y, x).o_idx ~= 0 then return TRUE end end,
- ["desc"] =
- {
- "So you found your first item! Nice, eh? Now when you stumble across",
- "objects, you can pick them up by pressing g, and if you are wondering",
- "what they do, press I (then *, then the letter for the item) to get",
- "some basic information. You may also want to identify them with scrolls,",
- "staves, rods or spells.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_MOVE,
- ["event"] = function(y, x) if (cave(y, x).feat >= FEAT_ALTAR_HEAD) and (cave(y, x).feat <= FEAT_ALTAR_TAIL) then return TRUE end end,
- ["desc"] =
- {
- "Altars are the way to reach the Valar, powers of the world,",
- "usualy called Gods. You can press O to become a follower.",
- "Beware that once you follow a god, you are not allowed to change.",
- "For an exact description of what gods do and want, read the documentation."
- }
-}
-
--- Beware this one, if Bree is moved from 21, 34 (y, x) on the wilderness map it will break
-ingame_help
-{
- ["hook"] = HOOK_END_TURN,
- ["event"] = function(y, x)
- if ((player.wilderness_x ~= 34) or (player.wilderness_y ~= 21) and (player.astral == FALSE)) then return TRUE end
- end,
- ["desc"] =
- {
- "Ahh wilderness travel... The overview mode will allow you to travel",
- "fast, but that comes to the cost of GREATLY increased food consumption.",
- "So you should bring lots of food and really watch your hunger status.",
- "To enter the overview mode, press < while in the wilderness.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_PLAYER_LEVEL,
- ["event"] = function(y, x) if player.lev > 1 then return TRUE end end,
- ["desc"] =
- {
- "Ok, so you now gained a level, and you have skill points to spend.",
- "To do so simply press G to learn skills. Reading the documentation",
- "about skills and abilities is also strongly recommended.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_MOVE,
- ["event"] = function(y, x) if cave(y, x).feat == FEAT_MORE then return TRUE end end,
- ["desc"] =
- {
- "Ah, this is a stair, or a way into something. Press > to enter it.",
- "But be ready to fight what lies within, for it might not be too friendly.",
- }
-}
-
-ingame_help
-{
- ["callback"] = "monster_chat",
- ["desc"] =
- {
- "Somebody is speaking to you it seems. You can talk back with the Y key.",
- "This can lead to quests. You can also give items to 'monsters' with the y key.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_END_TURN,
- ["event"] = function(y, x) return TRUE end,
- ["desc"] =
- {
- "Welcome to Theme! I am the spirit of knowledge and my task is to help you",
- "to get used to how to play. I have prepared a #vparchment#y for you to #vread#y.",
- "Press r, then space then select it. You can also check the documentation",
- "by pressing ? at (nearly) any time.",
- "The first place you can explore is Barrow-downs. Go to the west of town",
- "and you should see a #v>#y there.",
- "If you miss any of this you can press ctrl+p to see your message log.",
- "Now I must reveal your task here. You are on a quest to investigate",
- "the dreadful tower of Dol Guldur in the Mirkwood forest to see what evil",
- "lurks there, but beware, you are not yet ready.",
- "If you do not want me to bother you any more with tips, press = then go",
- "into the ToME options and deactivate the ingame_help option.",
- "You can see your quest log by pressing ctrl+q. Now go to your destiny!",
- }
-}
-
-ingame_help
-{
- ["no_test"] = TRUE,
- ["callback"] = "select_context",
- ["fct"] = function(typ, name)
- -- list of files for classes, { filename, anchor }
- local t =
- {
- ["race"] =
- {
- ["Beorning"] = { "r_beorn.txt", 0 },
- ["Dragon"] = { "r_dragon.txt", 0 },
- ["Dark-Elf"] = { "r_drkelf.txt", 0 },
- ["Dunadan"] = { "r_dunad.txt", 0 },
- ["Dwarf"] = { "r_dwarf.txt", 0 },
- ["Elf"] = { "r_elf.txt", 0 },
- ["Ent"] = { "r_ent.txt", 0 },
- ["Gnome"] = { "r_gnome.txt", 0 },
- ["Half-Elf"] = { "r_hafelf.txt", 0 },
- ["Half-Ogre"] = { "r_hafogr.txt", 0 },
- ["High-Elf"] = { "r_hielf.txt", 0 },
- ["Hobbit"] = { "r_hobbit.txt", 0 },
- ["Human"] = { "r_human.txt", 0 },
- ["Druadan"] = { "r_druadan.txt", 0 },
- ["Maia"] = { "r_maia.txt", 0 },
- ["Orc"] = { "r_orc.txt", 0 },
- ["Petty-Dwarf"] = { "r_pettyd.txt", 0 },
- ["RohanKnight"] = { "r_rohank.txt", 0 },
- ["Eagle"] = { "r_eagle.txt", 0 },
- ["Troll"] = { "r_troll.txt", 0 },
- ["Wood-Elf"] = { "r_wodelf.txt", 0 },
- ["Yeek"] = { "r_yeek.txt", 0 },
- ["Easterling"] = { "r_easterl.txt", 0 },
- ["Demon"] = { "r_demon.txt", 0},
- },
- ["subrace"] =
- {
- ["Barbarian"] = { "rm_barb.txt", 0 },
- ["Classical"] = { "rm_class.txt", 0 },
- ["Corrupted"] = { "rm_corru.txt", 0 },
- ["Hermit"] = { "rm_herm.txt", 0 },
- ["LostSoul"] = { "rm_lsoul.txt", 0 },
- ["Skeleton"] = { "rm_skel.txt", 0 },
- ["Spectre"] = { "rm_spec.txt", 0 },
- ["Vampire"] = { "rm_vamp.txt", 0 },
- ["Zombie"] = { "rm_zomb.txt", 0 },
- ["Red"] = {"rm_red.txt", 0 },
- ["Black"] = {"rm_black.txt", 0 },
- ["Green"] = {"rm_green.txt", 0 },
- ["Blue"] = {"rm_blue.txt", 0 },
- ["White"] = {"rm_white.txt", 0 },
- ["Ethereal"] = {"rm_ether.txt", 0 },
- ["(Narrog)"] = {"rm_narrog.txt", 0 },
- ["(Aewrog)"] = {"rm_aewrog.txt", 0 },
- ["(Hurog)"] = {"rm_hurog.txt", 0 },
- ["(Sarnrog)"] = {"rm_sarnrog.txt", 0 },
- ["(Caborrog)"] = {"rm_cabrog.txt", 0 },
- ["(Draugrog)"] = {"rm_drarog.txt", 0 },
- ["(Lygrog)"] = {"rm_lygrog.txt", 0 },
- ["(Limrog)"] = {"rm_limrog.txt", 0 },
- ["(Rawrog)"] = {"rm_rawrog.txt", 0 },
- ["(Adanrog)"] = {"rm_adanrog.txt", 0 },
- },
- ["class"] =
- {
- ["Archer"] = { "c_archer.txt", 0 },
- ["Ascetic"] = { "c_ascet.txt", 0 },
- ["Assassin"] = { "c_assass.txt", 0 },
- ["Axemaster"] = { "c_axemas.txt", 0 },
- ["Bard"] = { "c_bard.txt", 0 },
- ["Clairvoyant"] = {"c_clairv.txt", 0},
- ["Dark-Priest"] = { "c_pr_drk.txt", 0 },
- ["Demonologist"] = { "c_demono.txt", 0 },
- ["Druid"] = { "c_druid.txt", 0 },
- ["Geomancer"] = { "c_geoman.txt", 0 },
- ["Haftedmaster"] = { "c_hafted.txt", 0 },
- ["Loremaster"] = { "c_lorema.txt", 0 },
- ["Mage"] = { "c_mage.txt", 0 },
- ["Mercenary"] = { "c_mercen.txt", 0 },
- ["Mimic"] = { "c_mimic.txt", 0 },
- ["Mindcrafter"] = { "c_mindcr.txt", 0 },
- ["Monk"] = { "c_monk.txt", 0 },
- ["Necromancer"] = { "c_necro.txt", 0 },
- ["Pacifist"] = { "c_pacif.txt", 0 },
- ["Paladin"] = { "c_palad.txt", 0 },
- ["Peace-mage"] = { "c_peacemag.txt", 0 },
- ["Polearmmaster"] = { "c_polear.txt", 0 },
- ["Possessor"] = { "c_posses.txt", 0 },
- ["Priest"] = { "c_priest.txt", 0 },
- ["Priest(Eru)"] = { "c_pr_eru.txt", 0 },
- ["Priest(Mandos)"] = { "c_pr_mand.txt", 0 },
- ["Priest(Manwe)"] = { "c_pr_man.txt", 0 },
- ["Priest(Ulmo)"] = { "c_pr_ulmo.txt", 0 },
- ["Priest(Varda)"] = { "c_pr_varda.txt", 0 },
- ["Ranger"] = { "c_ranger.txt", 0 },
- ["Rogue"] = { "c_rogue.txt", 0 },
- ["Runecrafter"] = { "c_runecr.txt", 0 },
- ["Sniper"] = {"c_sniper.txt", 0 },
- ["Sorceror"] = { "c_sorcer.txt", 0 },
- ["Stonewright"] = { "c_stonewr.txt", 0 },
- ["Summoner"] = { "c_summon.txt", 0 },
- ["Swordmaster"] = { "c_swordm.txt", 0 },
- ["Symbiant"] = { "c_symbia.txt", 0 },
- ["Thaumaturgist"] = { "c_thaum.txt", 0 },
- ["Trapper"] = { "c_trapper.txt", 0 },
- ["Unbeliever"] = { "c_unbel.txt", 0 },
- ["Wainrider"] = { "c_wainrid.txt", 0 },
- ["War-mage"] = { "c_warmage.txt", 0 },
- ["Warper"] = { "c_warper.txt", 0 },
- ["Warrior"] = { "c_warrio.txt", 0 },
- },
- ["god"] =
- {
- ["Aule the Smith"] = { "g_aule.txt", 0 },
- ["Eru Iluvatar"] = { "g_eru.txt", 0 },
- ["Mandos"] = { "g_mandos.txt", 0 },
- ["Manwe Sulimo"] = { "g_manwe.txt", 0 },
- ["Melkor Bauglir"] = { "g_melkor.txt", 0 },
- ["Tulkas"] = { "g_tulkas.txt", 0 },
- ["Ulmo"] = { "g_ulmo.txt", 0 },
- ["Varda Elentari"] = { "g_varda.txt", 0 },
- ["Yavanna Kementari"] = { "g_yavann.txt", 0 },
- },
- ["skill"] =
- {
- ["Air"] = { "skills.txt", 27 },
- ["Alchemy"] = { "skills.txt", 49 },
- ["Antimagic"] = { "skills.txt", 50 },
- ["Archery"] = { "skills.txt", 08 },
- ["Axe-mastery"] = { "skills.txt", 05 },
- ["Backstab"] = { "skills.txt", 18 },
- ["Barehand-combat"] = { "skills.txt", 13 },
- ["Boomerang-mastery"] = { "skills.txt", 12 },
- ["Boulder-throwing"] = { "skills.txt", 58 },
- ["Bow-mastery"] = { "skills.txt", 10 },
- ["Combat"] = { "skills.txt", 01 },
- ["Conveyance"] = { "skills.txt", 30 },
- ["Corpse-preservation"] = { "skills.txt", 44 },
- ["Critical-hits"] = { "skills.txt", 04 },
- ["Crossbow-mastery"] = { "skills.txt", 11 },
- ["Demonology"] = { "skills.txt", 52 },
- ["Disarming"] = { "skills.txt", 16 },
- ["Divination"] = { "skills.txt", 31 },
- ["Dodging"] = { "skills.txt", 20 },
- ["Druidistic"] = { "skills.txt", 40 },
- ["Earth"] = { "skills.txt", 28 },
- ["Fire"] = { "skills.txt", 25 },
- ["Geomancy"] = { "skills.txt", 60 },
- ["Hafted-mastery"] = { "skills.txt", 06 },
- ["Magic"] = { "skills.txt", 21 },
- ["Magic-Device"] = { "skills.txt", 54 },
- ["Mana"] = { "skills.txt", 24 },
- ["Meta"] = { "skills.txt", 29 },
- ["Mimicry"] = { "skills.txt", 47 },
- ["Mind"] = { "skills.txt", 33 },
- ["Mindcraft"] = { "skills.txt", 41 },
- ["Monster-lore"] = { "skills.txt", 42 },
- ["Music"] = { "skills.txt", 59 },
- ["Nature"] = { "skills.txt", 34 },
- ["Necromancy"] = { "skills.txt", 35 },
- ["Polearm-mastery"] = { "skills.txt", 07 },
- ["Possession"] = { "skills.txt", 45 },
- ["Prayer"] = { "skills.txt", 39 },
- ["Runecraft"] = { "skills.txt", 36 },
- ["Sling-mastery"] = { "skills.txt", 09 },
- ["Sneakiness"] = { "skills.txt", 14 },
- ["Spell-power"] = { "skills.txt", 22 },
- ["Spirituality"] = { "skills.txt", 38 },
- ["Sorcery"] = { "skills.txt", 23 },
- ["Stealing"] = { "skills.txt", 19 },
- ["Stealth"] = { "skills.txt", 15 },
- ["Stunning-blows"] = { "skills.txt", 53 },
- ["Summoning"] = { "skills.txt", 43 },
- ["Sword-mastery"] = { "skills.txt", 03 },
- ["Symbiosis"] = { "skills.txt", 46 },
- ["Temporal"] = { "skills.txt", 32 },
- ["Thaumaturgy"] = { "skills.txt", 37 },
- ["Udun"] = { "skills.txt", 48 },
- ["Weaponmastery"] = { "skills.txt", 02 },
- ["Water"] = { "skills.txt", 26 },
- },
- ["ability"] =
- {
- ["Spread blows"] = { "ability.txt", 02 },
- ["Tree walking"] = { "ability.txt", 03 },
- ["Perfect casting"] = { "ability.txt", 04 },
- ["Extra Max Blow(1)"] = { "ability.txt", 05 },
- ["Extra Max Blow(2)"] = { "ability.txt", 06 },
- ["Ammo creation"] = { "ability.txt", 07 },
- ["Touch of death"] = { "ability.txt", 08 },
- ["Artifact Creation"] = { "ability.txt", 09 },
- ["Far reaching attack"] = { "ability.txt", 10 },
- ["Trapping"] = { "ability.txt", 11 },
- ["Undead Form"] = { "ability.txt", 12 },
- },
- }
-
- if t[typ][name] then ingame_help_doc(t[typ][name][1], t[typ][name][2])
- else ingame_help_doc("help.hlp", 0)
- end
- end,
-}
-
-ingame_help
-{
- ["hook"] = HOOK_IDENTIFY,
- ["event"] = function(i, mode)
- if mode == "full" then
- local obj = get_object(i)
- local f1, f2, f3, f4, f5, esp = object_flags(obj)
- if band(f5, TR5_SPELL_CONTAIN) ~= 0 then return TRUE end
- end
- end,
- ["desc"] =
- {
- "Ah, an item that can contain a spell. To use it you must have some levels of",
- "Magic skill and then you get the option to copy a spell when pressing m.",
- "Then just select which spell to copy and to which object. Note that doing so",
- "is permanent; the spell cannot be removed or changed later.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_GET,
- ["event"] = function(obj, idx) if obj.tval == TV_BATERIE then return TRUE end end,
- ["desc"] =
- {
- "Ah, an essence! Those magical containers stores energies. They are used",
- "with the Alchemy skill to create or modify the powers of items.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_GET,
- ["event"] = function(obj, idx) if obj.tval == TV_RUNE1 or obj.tval == TV_RUNE2 then return TRUE end end,
- ["desc"] =
- {
- "Ah, a rune! Runes are used with the Runecraft skill to allow you to",
- "create spells on your own.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_GET,
- ["event"] = function(obj, idx) if obj.tval == TV_ROD_MAIN then return TRUE end end,
- ["desc"] =
- {
- "This is a rod. You will need to attach a rod tip to it before you",
- "can use it. This main part of the rod may give the rod bonuses",
- "like quicker charging time, or a larger capacity for charges.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_GET,
- ["event"] = function(obj, idx) if obj.tval == TV_ROD then return TRUE end end,
- ["desc"] =
- {
- "You've found a rod-tip! You will need to attach it to a rod base",
- "before you can use it. Once it has been attatched (use the 'z' key)",
- "you cannot unattach it! The rod tip will determine the effect of",
- "the rod. To use your rod, 'z'ap it once it has been assembled.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_GET,
- ["event"] = function(obj, idx) if obj.tval == TV_TRAPKIT then return TRUE end end,
- ["desc"] =
- {
- "Ooooh, a trapping kit. If you have ability in the trapping skill,",
- "you can lay this trap (via the 'm' key) to harm unsuspecting foes.",
- "You'll generally need either some ammo or magic device depending",
- "on the exact type of trap kit.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_RECALC_SKILLS,
- ["event"] = function() if game.started and (get_melee_skills() > 1) then return TRUE end end,
- ["desc"] =
- {
- "Ah, you now possess more than one melee type. To switch between them press m",
- "and select the switch melee type option.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_GET,
- ["event"] = function(obj, idx) if obj.tval == TV_WAND or obj.tval == TV_STAFF then return TRUE end end,
- ["desc"] =
- {
- "You've found a magical device, either a staff or a wand. Each staff",
- "contains a spell, often from one of the primary magic schools. There",
- "is a lot of information you can find about this object if you identify",
- "it and 'I'nspect it. Check the help file on Magic for more about these.",
- }
-}
-
-ingame_help
-{
- ["hook"] = HOOK_PLAYER_LEVEL,
- ["event"] = function(y, x) if player.lev >= 20 then return TRUE end end,
- ["desc"] =
- {
- "I see you are now at least level 20. Nice! If you want to gloat about your",
- "character you could press 'C' then 'f' to make a character dump and post it to",
- "http://angband.oook.cz/ where it will end up in the ladder.",
- }
-}
diff --git a/lib/mods/theme/scpt/init.lua b/lib/mods/theme/scpt/init.lua
deleted file mode 100644
index 958d8f7d..00000000
--- a/lib/mods/theme/scpt/init.lua
+++ /dev/null
@@ -1,56 +0,0 @@
---
--- This file is loaded at the initialisation of ToME
---
-
--- Load the class specific stuff
-tome_dofile("player.lua")
-
--- Load the ingame contextual help
-tome_dofile("help.lua")
-
--- let the store specific stuff happen!
-tome_dofile("stores.lua")
-
--- Add various 'U' powers
-tome_dofile("powers.lua")
-
--- Add the mimic shapes
-tome_dofile("mimic.lua")
-
--- Add the corruptions
-tome_dofile("corrupt.lua")
-
--- Add the mkey activations
-tome_dofile("mkeys.lua")
-
--- Add god stuff
-tome_dofile("gods.lua")
-tome_dofile("gods_new.lua")
-
--- Add the schools of magic
-tome_dofile("spells.lua")
-
--- Add some quests
-tome_dofile("bounty.lua")
-tome_dofile("god.lua")
-tome_dofile("fireprof.lua")
-tome_dofile("library.lua")
-
--- Add joke stuff
-tome_dofile("drunk.lua")
-tome_dofile("joke.lua")
-
--- Some tests, if the file is not present, this is fine
-tome_dofile_anywhere(ANGBAND_DIR_SCPT, "dg_test.lua", FALSE)
-
--- A nice custom intro :)
-tome_dofile("intro.lua")
-
--- Add monster interaction
-tome_dofile("monsters.lua")
-
--- Add miscellaneous stuff
-tome_dofile("misc.lua")
-
--- Add map-related quest fix
-tome_dofile("gondolin.lua") \ No newline at end of file
diff --git a/lib/mods/theme/scpt/intro.lua b/lib/mods/theme/scpt/intro.lua
deleted file mode 100644
index 3cdce225..00000000
--- a/lib/mods/theme/scpt/intro.lua
+++ /dev/null
@@ -1,43 +0,0 @@
-function tome_intro()
- screen_save()
- Term_clear()
-
- if (TRUE == drop_text_left(TERM_L_BLUE, "Three Rings for the Elven-kings under the sky,", 10, 0)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_L_BLUE, "Seven for the Dwarf-lords in their halls of stone,", 11, -1)) then screen_load() return end
- if (TRUE == drop_text_left(TERM_L_BLUE, "Nine for Mortal Men doomed to die,", 12, 0)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_L_BLUE, "One for the Dark Lord on his dark throne", 13, -1)) then screen_load() return end
- if (TRUE == drop_text_left(TERM_L_BLUE, "In the land of Mordor, where the Shadows lie.", 14, 0)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_L_BLUE, "One Ring to rule them all, One Ring to find them,", 15, -1)) then screen_load() return end
- if (TRUE == drop_text_left(TERM_L_BLUE, "One Ring to bring them all and in the darkness bind them", 16, 0)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_L_BLUE, "In the land of Mordor, where the Shadows lie.", 17, -1)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_L_GREEN, "--J.R.R. Tolkien", 18, 0)) then screen_load() return end
- if (TRUE == drop_text_left(TERM_WHITE, "[Press any key to continue]", 23, -1)) then screen_load() return end
-
- Term_putch(0, 0, TERM_DARK, 32)
- inkey_scan = FALSE
- inkey()
-
- Term_clear()
-
- if (TRUE == drop_text_left(TERM_L_BLUE, "furiosity", 8, 0)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_WHITE, "in collaboration with", 9, -1)) then screen_load() return end
- if (TRUE == drop_text_left(TERM_L_GREEN, "DarkGod and all the ToME contributors,", 10, 0)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_L_GREEN, "module creators, t-o-m-e.net forum posters,", 11, -1)) then screen_load() return end
- if (TRUE == drop_text_left(TERM_WHITE, "and", 12, 0)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_L_GREEN, "by the grace of the Valar", 13, -1)) then screen_load() return end
-
- if (TRUE == drop_text_left(TERM_WHITE, "present", 15, 1)) then screen_load() return end
- if (TRUE == drop_text_right(TERM_YELLOW, "Theme (a module for ToME)", 16, 0)) then screen_load() return end
-
- if (TRUE == drop_text_left(TERM_WHITE, "[Press any key to continue]", 23, -1)) then screen_load() return end
- Term_putch(0, 0, TERM_DARK, 32)
-
- inkey_scan = FALSE
-
- inkey()
-
- screen_load()
- return
-end
-
-add_hook_script(HOOK_INIT, "tome_intro", "lua_intro_init")
diff --git a/lib/mods/theme/scpt/joke.lua b/lib/mods/theme/scpt/joke.lua
deleted file mode 100644
index 2d87b651..00000000
--- a/lib/mods/theme/scpt/joke.lua
+++ /dev/null
@@ -1,31 +0,0 @@
--- Place a monster in a good spot
-function gen_joke_place_monster(r_idx)
- local try = 1000
- local x
- local y
- while try > 0 do
- x = randint(cur_hgt - 4) + 2
- y = randint(cur_wid - 4) + 2
- if not (0 == place_monster_one(y, x, r_idx, 0, FALSE, MSTATUS_ENEMY)) then
- return
- end
- try = try - 1
- end
-end
-
--- Check if a special joke monster can be generated here
-function gen_joke_monsters()
- if joke_monsters == FALSE then
- return
- end
-
- -- Neil
- if (current_dungeon_idx == 20) and (dun_level == 72) then
- neil = test_monster_name("Neil, the Sorceror")
- m_allow_special[neil + 1] = TRUE
- gen_joke_place_monster(neil)
- m_allow_special[neil + 1] = FALSE
- end
-end
-
-add_hook_script(HOOK_LEVEL_END_GEN, "gen_joke_monsters", "gen_joke_monsters")
diff --git a/lib/mods/theme/scpt/library.lua b/lib/mods/theme/scpt/library.lua
deleted file mode 100644
index a16d37ef..00000000
--- a/lib/mods/theme/scpt/library.lua
+++ /dev/null
@@ -1,439 +0,0 @@
--- Library quest in Minas Anor
-
--- Partially based on Fireproofing quest
-
-library_quest = {}
-
--- Map helper
-library_quest.place_random = function(minY, minX, maxY, maxX, monster)
- y = randint(maxY - minY + 1) + minY
- x = randint(maxX - minX + 1) + minX
- return place_monster_one(y, x, monster, 0, TRUE, MSTATUS_ENEMY)
-end
-
--- Book creation helpers
-library_quest.bookable_spells =
-{
- MANATHRUST, DELCURSES,
- GLOBELIGHT, FIREGOLEM, FIREFLASH, FIREWALL,
- GEYSER, VAPOR, ENTPOTION,
- NOXIOUSCLOUD, POISONBLOOD,
- STONESKIN, DIG,
- RECHARGE, DISPERSEMAGIC,
- BLINK, DISARM, TELEPORT,
- SENSEMONSTERS, SENSEHIDDEN, REVEALWAYS, IDENTIFY, VISION,
- MAGELOCK, SLOWMONSTER, ESSENCESPEED,
- CHARM, CONFUSE, ARMOROFFEAR, STUN,
- GROWTREE, HEALING, RECOVERY,
- ERU_SEE, ERU_LISTEN,
- MANWE_BLESS, MANWE_SHIELD,
- YAVANNA_CHARM_ANIMAL, YAVANNA_GROW_GRASS, YAVANNA_TREE_ROOTS,
- TULKAS_AIM, TULKAS_SPIN,
- MELKOR_CURSE, MELKOR_CORPSE_EXPLOSION, DRAIN,
- AULE_FIREBRAND, AULE_CHILD,
- VARDA_LIGHT_VALINOR, VARDA_EVENSTAR,
- ULMO_BELEGAER, ULMO_WRATH,
- MANDOS_TEARS_LUTHIEN, MANDOS_TALE_DOOM
-}
-
-library_quest.get_term_size = function()
- local width = 0
- local height = 0
- ret, width, height = Term_get_size(width, height)
- return width, height
-end
-
-library_quest.book_slots_left = function()
- if school_book[61][1] == -1 then
- return 3
- elseif school_book[61][2] == -1 then
- return 2
- elseif school_book[61][3] == -1 then
- return 1
- else
- return 0
- end
-end
-
-library_quest.book_contains_spell = function(spell)
- if school_book[61][1] == spell then
- return TRUE
- elseif school_book[61][2] == spell then
- return TRUE
- elseif school_book[61][3] == spell then
- return TRUE
- else
- return FALSE
- end
-end
-
-library_quest.add_spell = function(spell)
- if school_book[61][1] == -1 then
- school_book[61][1] = spell
- return TRUE
- elseif school_book[61][2] == -1 then
- school_book[61][2] = spell
- return TRUE
- elseif school_book[61][3] == -1 then
- school_book[61][3] = spell
- return TRUE
- else
- return FALSE
- end
-end
-
-library_quest.remove_spell = function(spell)
- if school_book[61][1] == spell then
- school_book[61][1] = school_book[61][2]
- school_book[61][2] = school_book[61][3]
- school_book[61][3] = -1
- return TRUE
- elseif school_book[61][2] == spell then
- school_book[61][2] = school_book[61][3]
- school_book[61][3] = -1
- return TRUE
- elseif school_book[61][3] == spell then
- school_book[61][3] = -1
- return TRUE
- else
- return FALSE
- end
-end
-
--- Print a spell (taken from s_aux)
-function library_quest.print_spell(color, y, spl)
- local x, index, sch, size, s
-
- x = 0
- size = 0
- book = 255
- obj = nil
-
- -- 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 lvl, na = get_level_school(s, 50, -50)
- local xx, sch_str
-
- sch_str = spell_school_name(s)
-
- if s == spl then
- if na then
- c_prt(color, format("%-20s%-16s %3s %4s %3d%s %s", spell(s).name, sch_str, na, get_mana(s), spell_chance(s), "%", __spell_info[s]()), y, x)
- else
- c_prt(color, format("%-20s%-16s %3d %4s %3d%s %s", 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
- end
- return y
-end
-
--- spell selection routines inspired by skills.c
-library_quest.print_spells = function(first, current)
- Term_clear()
- width, height = library_quest.get_term_size()
- slots = library_quest.book_slots_left()
-
- c_prt(TERM_WHITE, "Book Creation Screen", 0, 0);
- c_prt(TERM_WHITE, "Up/Down to move, Right/Left to modify, I to describe, Esc to Save/Cancel", 1, 0);
-
- if slots == 0 then
- c_prt(TERM_L_RED, "The book can hold no more spells.", 2, 0);
- elseif slots == 1 then
- c_prt(TERM_L_BLUE, "The book can hold 1 more spell.", 2, 0);
- else
- c_prt(TERM_L_BLUE, "The book can hold "..slots.." more spells.", 2, 0);
- end
-
- row = 3;
- for index, spell in library_quest.bookable_spells do
- if index >= first then
- if index == current then
- color = TERM_GREEN
- elseif library_quest.book_contains_spell(spell) == TRUE then
- color = TERM_WHITE
- else
- color = TERM_ORANGE
- end
- library_quest.print_spell(color, row, spell)
-
- if row == height - 1 then
- return
- end
- row = row + 1
- end
- end
-end
-
-library_quest.fill_book = function()
- -- Always start with a cleared book
- school_book[61] = {-1, -1, -1}
-
- screen_save()
- width, height = library_quest.get_term_size()
- -- room for legend
- margin = 3
-
- first = 1
- current = 1
- done = FALSE
-
- while done == FALSE do
- library_quest.print_spells(first, current)
-
- inkey_scan = FALSE
- inkey_base = TRUE
- char = inkey()
- dir = get_keymap_dir(char)
- if char == ESCAPE then
- if library_quest.book_slots_left() == 0 then
- flush()
- done = get_check("Really create the book?")
- else
- done = TRUE
- end
- elseif char == strbyte('\r') then
- -- TODO: make tree of schools
- elseif char == strbyte('n') then
- current = current + height
- elseif char == strbyte('p') then
- current = current - height
- elseif char == strbyte('I') then
- print_spell_desc(library_quest.bookable_spells[current], 0)
- inkey()
- elseif dir == 2 then
- current = current + 1
- elseif dir == 8 then
- current = current - 1
- elseif dir == 6 then
- if library_quest.book_contains_spell(library_quest.bookable_spells[current]) == FALSE then
- library_quest.add_spell(library_quest.bookable_spells[current])
- end
- elseif dir == 4 then
- library_quest.remove_spell(library_quest.bookable_spells[current])
- end
- total = getn(library_quest.bookable_spells)
- if current > total then
- current = total
- elseif current < 1 then
- current = 1
- end
-
- if current > (first + height - margin - 1) then
- first = current - height + margin + 1
- elseif first > current then
- first = current
- end
- end
-
- screen_load()
-end
-
--- Quest data and hooks
-add_quest
-{
- ["global"] = "LIBRARY_QUEST",
- ["name"] = "Library quest",
- ["desc"] = function()
- -- Quest taken
- if (quest(LIBRARY_QUEST).status == QUEST_STATUS_TAKEN) then
- print_hook("#####yAn Old Mages Quest! (Danger Level: 35)\n")
- print_hook("Make the library safe for the old mage in Minas Anor.\n")
- print_hook("\n")
- -- Quest done, book not gotten yet
- elseif (quest(LIBRARY_QUEST).status == QUEST_STATUS_COMPLETED) then
- print_hook("#####yAn Old Mages Quest!\n")
- print_hook("You have made the library safe for the old mage in Minas Anor.\n")
- print_hook("Perhaps you should see about a reward.\n")
- print_hook("\n")
- end
- end,
- ["level"] = 35,
- ["data"] =
- {
- ["school_book[61][1]"] = -1,
- ["school_book[61][2]"] = -1,
- ["school_book[61][3]"] = -1
- },
- ["hooks"] =
- {
- -- Start the game without the quest, need to request it
- [HOOK_BIRTH_OBJECTS] = function()
- quest(LIBRARY_QUEST).status = QUEST_STATUS_UNTAKEN
- school_book[61] = {-1, -1, -1}
- end,
-
- [HOOK_GEN_QUEST] = function()
- -- Only if player doing this quest
- if (player.inside_quest ~= LIBRARY_QUEST) then
- return FALSE
- end
-
- load_map("library.map", 2, 2)
- level_flags2 = DF2_NO_GENO
-
- -- generate the Liches 518
- liches = damroll(4, 2) -- plus one on the map
- while(liches > 0) do
- if 0 < library_quest.place_random(4, 4, 14, 37, 518) then
- liches = liches - 1
- end
- end
-
- -- generate the Monastic liches 611
- liches = damroll(1, 2)
- while(liches > 0) do
- if 0 < library_quest.place_random(14, 34, 37, 67, 611) then
- liches = liches - 1
- end
- end
-
- -- generate more Monastic liches 611
- liches = damroll(1, 2) - 1
- while(liches > 0) do
- if 0 < library_quest.place_random(4, 34, 14, 67, 611) then
- liches = liches - 1
- end
- end
-
- -- generate even more Monastic liches 611
- liches = damroll(1, 2) - 1
- while(liches > 0) do
- if 0 < library_quest.place_random(14, 4, 37, 34, 611) then
- liches = liches - 1
- end
- end
-
- -- Flesh golem 256
- golems = 2
- while(golems > 0) do
- if 0 < library_quest.place_random(10, 10, 37, 67, 256) then
- golems = golems - 1
- end
- end
-
- -- Clay golem 261
- golems = 2
- while(golems > 0) do
- if 0 < library_quest.place_random(10, 10, 37, 67, 261) then
- golems = golems - 1
- end
- end
-
- -- Iron golem 367
- golems = 2
- while(golems > 0) do
- if 0 < library_quest.place_random(10, 10, 37, 67, 367) then
- golems = golems - 1
- end
- end
-
- -- Mithril Golem 464
- golems = 1
- while(golems > 0) do
- if 0 < library_quest.place_random(10, 10, 37, 67, 464) then
- golems = golems - 1
- end
- end
-
- -- one Master lich is on the map
-
- return TRUE
- end,
- [HOOK_STAIR] = function()
- local ret
-
- -- only ask this if player about to go up stairs of quest and hasn't won yet
- if (player.inside_quest ~= LIBRARY_QUEST) or (quest(LIBRARY_QUEST).status == QUEST_STATUS_COMPLETED) then
- return FALSE
- end
-
- if cave(player.py, player.px).feat ~= FEAT_LESS then return end
-
- -- flush all pending input
- flush()
-
- -- confirm
- ret = get_check("Really abandon the quest?")
-
- -- if yes, then
- if ret == TRUE then
- -- fail the quest
- quest(LIBRARY_QUEST).status = QUEST_STATUS_FAILED
- return FALSE
- else
- -- if no, they stay in the quest
- return TRUE
- end
- end,
- [HOOK_MONSTER_DEATH] = function()
- -- if they're in the quest and haven't won, continue
- if (player.inside_quest ~= LIBRARY_QUEST) or (quest(LIBRARY_QUEST).status == QUEST_STATUS_COMPLETED) then
- return FALSE
- end
-
- i = 1
- count = -1
- while i <= m_max do
- local monster = m_list[i]
- if (monster.r_idx > 0) and (monster.status <= MSTATUS_ENEMY) then
- count = count + 1
- end
- i = i + 1
- end
-
- if count == 0 then
- quest(LIBRARY_QUEST).status = QUEST_STATUS_COMPLETED
- msg_print(TERM_YELLOW, "The library is safe now.")
- end
- end,
- },
-}
-
--- Library store action
-add_building_action
-{
- ["index"] = 61,
- ["action"] = function()
- -- the quest hasn't been requested already, right?
- if quest(LIBRARY_QUEST).status == QUEST_STATUS_UNTAKEN then
- -- quest has been taken now
- quest(LIBRARY_QUEST).status = QUEST_STATUS_TAKEN
-
- -- issue instructions
- msg_print("I need get some stock from my main library, but it is infested with monsters!")
- msg_print("Please use the side entrance and vanquish the intruders for me.")
-
- return TRUE, FALSE, TRUE
- -- if quest completed
- elseif (quest(LIBRARY_QUEST).status == QUEST_STATUS_COMPLETED) then
- msg_print("Thank you! Let me make a special book for you.")
- msg_print("Tell me three spells and I will write them in the book.")
- library_quest.fill_book()
- if library_quest.book_slots_left() == 0 then
- quest(LIBRARY_QUEST).status = QUEST_STATUS_REWARDED
- book = create_object(TV_BOOK, 61)
- book.art_name = quark_add(player_name())
- book.found = OBJ_FOUND_REWARD
- set_aware(book)
- set_known(book)
- inven_carry(book, FALSE)
- end
-
- -- if the player asks for a quest when they already have it, but haven't failed it, give them some extra instructions
- elseif (quest(LIBRARY_QUEST).status == QUEST_STATUS_TAKEN) then
- msg_print("Please use the side entrance and vanquish the intruders for me.")
-
- -- quest failed or completed, then give no more quests
- elseif (quest(LIBRARY_QUEST).status == QUEST_STATUS_FAILED) or (quest(LIBRARY_QUEST).status == QUEST_STATUS_REWARDED) then
- msg_print("I have no more quests for you.")
- end
- return TRUE
- end,
-}
diff --git a/lib/mods/theme/scpt/mimic.lua b/lib/mods/theme/scpt/mimic.lua
deleted file mode 100644
index f38f70f7..00000000
--- a/lib/mods/theme/scpt/mimic.lua
+++ /dev/null
@@ -1,419 +0,0 @@
--- Define the various possible mimic shapes
-
--- Nature shapes
-add_mimic_shape
-{
- ["name"] = "Mouse",
- ["obj_name"] = "Mouse Fur",
- ["desc"] = "Mice are small, fast and very stealthy",
- ["realm"] = "nature",
- ["level"] = 1,
- ["rarity"] = 10,
- ["duration"] = {20, 40},
- ["calc"] = function ()
- -- Mice run!
- player.pspeed = player.pspeed + 5 + (player.mimic_level / 7)
-
- -- They can crtawl under your armor to hit you ;)
- player.to_h = player.to_h + 10 + (player.mimic_level / 5)
- player.dis_to_h = player.dis_to_h + 10 + (player.mimic_level / 5)
-
- -- But they are not very powerfull
- player.to_d = player.to_d / 5
- player.dis_to_d = player.dis_to_d / 5
-
- -- But they are stealthy
- player.skill_stl = player.skill_stl + 10 + (player.mimic_level / 5)
-
- -- Stat mods
- player.modify_stat(A_STR, -5)
- player.modify_stat(A_DEX, 3)
- player.modify_stat(A_CON, 1)
-
- end,
- ["power"] = function()
- if player.mimic_level >= 30 then
- player.add_power(POWER_INVISIBILITY)
- end
- end,
-}
-
-add_mimic_shape
-{
- ["name"] = "Eagle",
- ["obj_name"] = "Feathered Cloak",
- ["desc"] = "Eagles are master of the air, good hunters with excellent vision.",
- ["realm"] = "nature",
- ["level"] = 10,
- ["rarity"] = 30,
- ["duration"] = {10, 50},
- ["calc"] = function ()
- player.ffall = TRUE
- player.pspeed = player.pspeed + 2 + (player.mimic_level / 6)
-
- player.modify_stat(A_STR, -3)
- player.modify_stat(A_DEX, 2 + (player.mimic_level / 15))
- player.modify_stat(A_CON, 4 + (player.mimic_level / 20))
- player.modify_stat(A_INT, -1)
- player.modify_stat(A_WIS, 1)
- player.modify_stat(A_CHR, -1)
-
- if player.mimic_level >= 20 then
- player.xtra_f4 = bor(player.xtra_f4, TR4_FLY)
- player.xtra_f3 = bor(player.xtra_f3, TR3_SEE_INVIS)
- end
- if player.mimic_level >= 25 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_FREE_ACT)
- end
- if player.mimic_level >= 30 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_ELEC)
- end
- if player.mimic_level >= 30 then
- player.xtra_f3 = bor(player.xtra_f3, TR3_SH_ELEC)
- end
- end,
-}
-
-add_mimic_shape
-{
- ["name"] = "Wolf",
- ["obj_name"] = "Wolf Pelt",
- ["desc"] = "Wolves are masters of movement, strong and have excellent eyesight.",
- ["realm"] = "nature",
- ["level"] = 20,
- ["rarity"] = 40,
- ["duration"] = {10, 50},
- ["calc"] = function ()
- player.modify_stat(A_STR, 2 + (player.mimic_level / 20))
- player.modify_stat(A_DEX, 3 + (player.mimic_level / 20))
- player.modify_stat(A_INT, -3)
- player.modify_stat(A_CHR, -2)
-
- player.pspeed = player.pspeed + 10 + (player.mimic_level / 5)
-
- player.xtra_f2 = bor(player.xtra_f2, TR2_FREE_ACT)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_FEAR)
-
- if player.mimic_level >= 10 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_COLD)
- end
- if player.mimic_level >= 15 then
- player.xtra_f3 = bor(player.xtra_f3, TR3_SEE_INVIS)
- end
- if player.mimic_level >= 30 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_DARK)
- end
- if player.mimic_level >= 35 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_CONF)
- end
- end,
-}
-
-add_mimic_shape
-{
- ["name"] = "Spider",
- ["obj_name"] = "Spider Web",
- ["desc"] = "Spiders are clever and become good climbers.",
- ["realm"] = "nature",
- ["level"] = 25,
- ["rarity"] = 50,
- ["duration"] = {10, 50},
- ["calc"] = function ()
- player.modify_stat(A_STR, -4)
- player.modify_stat(A_DEX, 1 + (player.mimic_level / 8))
- player.modify_stat(A_INT, 1 + (player.mimic_level / 5))
- player.modify_stat(A_WIS, 1 + (player.mimic_level / 5))
- player.modify_stat(A_CON, -5)
- player.modify_stat(A_CHR, -10)
-
- player.pspeed = player.pspeed + 5
-
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_POIS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_FEAR)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_DARK)
-
- if player.mimic_level >= 40 then
- player.xtra_f4 = bor(player.xtra_f4, TR4_CLIMB)
- end
-
- end,
- ["power"] = function()
- if player.mimic_level >= 25 then
- player.add_power(POWER_WEB)
- end
- end,
-}
-
-add_mimic_shape
-{
- ["name"] = "Elder Ent",
- ["obj_name"] = "Entish Bark",
- ["desc"] = "Ents are powerful tree-like beings dating from the dawn of time.",
- ["realm"] = "nature",
- ["level"] = 40,
- ["rarity"] = 60,
- ["duration"] = {10, 30},
- ["limit"] = TRUE,
- ["calc"] = function ()
- player.pspeed = player.pspeed - 5 - (player.mimic_level / 10)
-
- player.to_a = player.to_a + 10 + player.mimic_level
- player.dis_to_a = player.dis_to_a + 10 + player.mimic_level
-
- player.modify_stat(A_STR, player.mimic_level / 5)
- player.modify_stat(A_INT, - (player.mimic_level / 7))
- player.modify_stat(A_WIS, - (player.mimic_level / 7))
- player.modify_stat(A_DEX, -4)
- player.modify_stat(A_CON, player.mimic_level / 5)
- player.modify_stat(A_CHR, -7)
-
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_POIS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_COLD)
- player.xtra_f2 = bor(player.xtra_f2, TR2_FREE_ACT)
- player.xtra_f3 = bor(player.xtra_f3, TR3_REGEN)
- player.xtra_f3 = bor(player.xtra_f3, TR3_SEE_INVIS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_SENS_FIRE)
- end,
- ["power"] = function ()
- player.add_power(PWR_GROW_TREE)
- end,
-}
-
-add_mimic_shape
-{
- ["name"] = "Vapour",
- ["obj_name"] = "Cloak of Mist",
- ["desc"] = "A sentient cloud, darting around",
- ["realm"] = "nature",
- ["level"] = 15,
- ["rarity"] = 10,
- ["duration"] = {10, 40},
- ["calc"] = function ()
-
- player.pspeed = player.pspeed + 5
-
- --Try to hit a cloud!
- player.to_a = player.to_a + 40 + player.mimic_level
- player.dis_to_a = player.dis_to_a + 40 + player.mimic_level
-
- --Try to hit WITH a cloud!
- player.to_h = player.to_h - 40
- player.dis_to_h = player.dis_to_h -40
-
- -- Stat mods
- player.modify_stat(A_STR, -4)
- player.modify_stat(A_DEX, 5)
- player.modify_stat(A_CON, -4)
- player.modify_stat(A_CHR, -10)
-
- -- But they are stealthy
- player.skill_stl = player.skill_stl + 10 + (player.mimic_level / 5)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_POIS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_SHARDS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_COLD)
- player.xtra_f2 = bor(player.xtra_f2, TR2_FREE_ACT)
- player.xtra_f3 = bor(player.xtra_f3, TR3_REGEN)
- player.xtra_f3 = bor(player.xtra_f3, TR3_SEE_INVIS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_SENS_FIRE)
- player.xtra_f3 = bor(player.xtra_f3, TR3_FEATHER)
- end,
-}
-
-add_mimic_shape
-{
- ["name"] = "Serpent",
- ["obj_name"] = "Snakeskin Cloak",
- ["desc"] = "Serpents are fast, lethal predators.",
- ["realm"] = "nature",
- ["level"] = 30,
- ["rarity"] = 25,
- ["duration"] = {15, 20},
- ["calc"] = function ()
- player.pspeed = player.pspeed + 10 + (player.mimic_level / 6)
- player.to_a = player.to_a + 3 + (player.mimic_level / 8)
- player.dis_to_a = player.dis_to_a + 3 + (player.mimic_level / 8)
-
- player.modify_stat(A_STR, player.mimic_level / 8)
- player.modify_stat(A_INT, -6)
- player.modify_stat(A_WIS, -6)
- player.modify_stat(A_DEX, -4)
- player.modify_stat(A_CON, player.mimic_level / 7)
- player.modify_stat(A_CHR, -6)
-
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_POIS)
- if player.mimic_level >= 25 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_FREE_ACT)
- end
- end,
-}
-
-add_mimic_shape
-{
- ["name"] = "Mumak",
- ["obj_name"] = "Mumak Hide",
- ["desc"] = "A giant, elaphantine form.",
- ["realm"] = "nature",
- ["level"] = 40,
- ["rarity"] = 40,
- ["duration"] = {15, 20},
- ["calc"] = function ()
- player.pspeed = player.pspeed - 5 - (player.mimic_level / 10)
- player.to_a = player.to_a + 10 + (player.mimic_level / 6)
- player.dis_to_a = player.dis_to_a + 10 + (player.mimic_level / 6)
- player.to_d = player.to_d + 5 + ((player.mimic_level * 2) / 3)
- player.dis_to_d = player.dis_to_d + 5 + ((player.mimic_level * 2) / 3)
-
- player.modify_stat(A_STR, player.mimic_level / 4)
- player.modify_stat(A_INT, -8)
- player.modify_stat(A_WIS, -4)
- player.modify_stat(A_DEX, -5)
- player.modify_stat(A_CON, player.mimic_level / 3)
- player.modify_stat(A_CHR, -10)
-
- if player.mimic_level >= 10 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_FEAR)
- end
- if player.mimic_level >= 25 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_CONF)
- end
- if player.mimic_level >= 30 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_FREE_ACT)
- end
- if player.mimic_level >= 35 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_NEXUS)
- end
- end,
-}
-
---------- Extra shapes -----------
-
--- For Beornings
-add_mimic_shape
-{
- ["name"] = "Bear",
- ["desc"] = "A fierce, terrible bear.",
- ["realm"] = nil,
- ["level"] = 1,
- ["rarity"] = 101,
- ["duration"] = {50, 200},
- ["limit"] = TRUE,
- ["calc"] = function ()
- player.pspeed = player.pspeed - 5 + (player.mimic_level / 5)
-
- player.to_a = player.to_a + 5 + ((player.mimic_level * 2) / 3)
- player.dis_to_a = player.dis_to_a + 5 + ((player.mimic_level * 2) / 3)
-
- player.modify_stat(A_STR, player.mimic_level / 11)
- player.modify_stat(A_INT, player.mimic_level / 11)
- player.modify_stat(A_WIS, player.mimic_level / 11)
- player.modify_stat(A_DEX, -1)
- player.modify_stat(A_CON, player.mimic_level / 11)
- player.modify_stat(A_CHR, -10)
-
- if player.mimic_level >= 10 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_FREE_ACT)
- end
- if player.mimic_level >= 20 then
- player.xtra_f3 = bor(player.xtra_f3, TR3_REGEN)
- end
- if player.mimic_level >= 30 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_CONF)
- end
- if player.mimic_level >= 35 then
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_NEXUS)
- end
-
- -- activate the skill
- skill(SKILL_BEAR).hidden = FALSE
- end,
-}
-
--- For balrog corruptions
-add_mimic_shape
-{
- ["name"] = "Balrog",
- ["desc"] = "A corrupted maia.",
- ["realm"] = nil,
- ["level"] = 1,
- ["rarity"] = 101,
- ["duration"] = {30, 70},
- ["limit"] = TRUE,
- ["calc"] = function ()
- player.modify_stat(A_STR, 5 + player.mimic_level / 5)
- player.modify_stat(A_INT, player.mimic_level / 10)
- player.modify_stat(A_WIS, - ( 5 + player.mimic_level / 10))
- player.modify_stat(A_DEX, player.mimic_level / 10)
- player.modify_stat(A_CON, 5 + player.mimic_level / 5)
- player.modify_stat(A_CHR, - ( 5 + player.mimic_level / 10))
-
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_ACID)
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_FIRE)
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_ELEC)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_DARK)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_CHAOS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_POIS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_HOLD_LIFE)
- player.xtra_f3 = bor(player.xtra_f3, TR3_FEATHER)
- player.xtra_f3 = bor(player.xtra_f3, TR3_REGEN)
- player.xtra_f3 = bor(player.xtra_f3, TR3_SH_FIRE)
- player.xtra_f3 = bor(player.xtra_f3, TR3_LITE1)
- return 1
- end,
-}
-
--- For avatar spell
-add_mimic_shape
-{
- ["name"] = "Maia",
- ["desc"] = "A near god-like being.",
- ["realm"] = nil,
- ["level"] = 1,
- ["rarity"] = 101,
- ["duration"] = {30, 70},
- ["limit"] = TRUE,
- ["calc"] = function ()
- player.modify_stat(A_STR, 5 + player.mimic_level / 5)
- player.modify_stat(A_INT, 5 + player.mimic_level / 5)
- player.modify_stat(A_WIS, 5 + player.mimic_level / 5)
- player.modify_stat(A_DEX, 5 + player.mimic_level / 5)
- player.modify_stat(A_CON, 5 + player.mimic_level / 5)
- player.modify_stat(A_CHR, 5 + player.mimic_level / 5)
-
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_FIRE)
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_ELEC)
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_ACID)
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_COLD)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_POIS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_LITE)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_DARK)
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_CHAOS)
- player.xtra_f2 = bor(player.xtra_f2, TR2_HOLD_LIFE)
- player.xtra_f3 = bor(player.xtra_f3, TR3_FEATHER)
- player.xtra_f3 = bor(player.xtra_f3, TR3_REGEN)
- return 2
- end,
-}
-
--- For Geomancy
-add_mimic_shape
-{
- ["name"] = "Fire Elem.",
- ["desc"] = "A towering column of flames",
- ["realm"] = nil,
- ["level"] = 1,
- ["rarity"] = 101,
- ["duration"] = {10, 10},
- ["limit"] = TRUE,
- ["calc"] = function ()
- player.modify_stat(A_STR, 5 + (player.mimic_level / 5))
- player.modify_stat(A_DEX, 5 + (player.mimic_level / 5))
- player.modify_stat(A_WIS, -5 - (player.mimic_level / 5))
-
- player.xtra_f2 = bor(player.xtra_f2, TR2_IM_FIRE)
- -- was immune to poison in the 3.0.0 version
- player.xtra_f2 = bor(player.xtra_f2, TR2_RES_POIS)
- player.xtra_f3 = bor(player.xtra_f3, TR3_SH_FIRE)
- player.xtra_f3 = bor(player.xtra_f3, TR3_LITE1)
- return 0
- end,
-}
diff --git a/lib/mods/theme/scpt/misc.lua b/lib/mods/theme/scpt/misc.lua
deleted file mode 100644
index acb45f3c..00000000
--- a/lib/mods/theme/scpt/misc.lua
+++ /dev/null
@@ -1,213 +0,0 @@
--- New scrolls
-function sterilize_scroll(tval, sval)
- if tval == 70 and sval == 54 then
- msg_print("A neutralising wave radiates from you!")
- set_no_breeders(randint(100) + 100)
- return TRUE
- end
-end
-
-add_hook_script(HOOK_READ, "sterilize_scroll", "sterilize_scroll")
-
--- Neil's automagic statgain script
-
-player.last_rewarded_level = 1
-add_loadsave("player.last_rewarded_level", 1)
-
-add_hooks
- {
- [HOOK_PLAYER_LEVEL] = function()
- while player.last_rewarded_level * 5 <= player.lev do
- do_inc_stat(A_STR)
- do_inc_stat(A_INT)
- do_inc_stat(A_WIS)
- do_inc_stat(A_DEX)
- do_inc_stat(A_CON)
- do_inc_stat(A_CHR)
- player.last_rewarded_level = player.last_rewarded_level + 1
- end
- end,
- }
-
-add_hooks
-{
- [HOOK_BIRTH_OBJECTS] = function()
- if player.last_rewarded_level >= 1
- then player.last_rewarded_level = 1
- else
- end
- end
-}
-
--- silly function that allows a drunk to take a bottle of wine/ale from the player
-
-function drunk_takes_wine(m_idx, item)
-
- m_ptr = monster(m_idx)
- o_ptr = get_object(item)
-
- if (m_ptr.r_idx == test_monster_name("Singing, happy drunk"))
- and (o_ptr.tval == TV_FOOD) and ((o_ptr.sval == 38) or (o_ptr.sval == 39)) then
-
- cmsg_print(TERM_YELLOW, "'Hic!'")
-
- inven_item_increase(item, -1)
- inven_item_optimize(item)
-
--- HackSmurf: the drunk may drop an empty bottle
- bottle = create_object(TV_BOTTLE,1)
- drop_near(bottle, 50, player.py, player.px)
- return TRUE
- else
- return FALSE
- end
-end
-
-add_hook_script(HOOK_GIVE, "drunk_takes_wine", "drunk_takes_wine")
-
--- winged races are allowed soft armor only, no cloaks (from T-Plus)
-function __hook_wings_wear(obj)
- local str = get_race_name()
- local type = obj.tval
- if (str == "Dragon" or str == "Eagle") and (type == 35 or type == 37 or type == 38) then
- return TRUE, -1
- end
-end
-
-add_hook_script(HOOK_WIELD_SLOT, "__hook_wings_wear", "__hook_wings_wear")
-
--- A not-too-scummy way of generating junk for ammo
-function food_vessel(object)
- if ((object.tval == 80) and (object.sval == 43)) or
- ((object.tval == 80) and (object.sval == 44)) then
- local obj = create_object(TV_JUNK, 3)
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- return FALSE
- end
-end
-
-add_hook_script(HOOK_EAT, "food_vessel", "food_vessel")
-
--- Longbottom Leaf *is* a great stress reliever:
-function longbottom_leaf(object)
- if (object.tval == 80) and (object.sval == 45) then
- msg_print("What a stress reliever!")
- heal_insanity(1000)
- return FALSE
- end
-end
-add_hook_script(HOOK_EAT, "longbottom_leaf", "longbottom_leaf")
-
--- Hobbits like food
-function hobbit_food(m_idx, item)
-
- m_ptr = monster(m_idx)
- o_ptr = get_object(item)
-
- if (m_ptr.r_idx == test_monster_name("Scruffy-looking hobbit"))
- and (o_ptr.tval == TV_FOOD) then
- cmsg_print(TERM_YELLOW, "'Yum!'")
- inven_item_increase(item, -1)
- inven_item_optimize(item)
- return TRUE
- else
- return FALSE
- end
-end
-
-add_hook_script(HOOK_GIVE, "hobbit_food", "hobbit_food")
-
--- Smeagol likes rings
-function smeagol_ring(m_idx, item)
-
- m_ptr = monster(m_idx)
- o_ptr = get_object(item)
-
- if (m_ptr.r_idx == test_monster_name("Smeagol"))
- and (o_ptr.tval == TV_RING) then
-
- cmsg_print(TERM_YELLOW, "'MY... PRECIOUSSSSS!!!'")
-
- inven_item_increase(item, -1)
- inven_item_optimize(item)
- return TRUE
- else
- return FALSE
- end
-end
-
-add_hook_script(HOOK_GIVE, "smeagol_ring", "smeagol_ring")
-
--- functions to check for Map and Key of Thror before proceeding in Erebor
--- Thank you, Massimiliano Marangio :-)
-add_hooks
-{
- [HOOK_STAIR] = function(direction)
- if ((current_dungeon_idx == 20) and (dun_level == 60) and (direction == "down")) then
- local i
- local mapkey = 0
- for i = 0, INVEN_TOTAL - 1 do
- if ((player.inventory(i).name1 == 209) or (player.inventory(i).name1 == 210)) then
- mapkey = mapkey + 1
- end
- end
-
- if (mapkey == 2) then
- msg_print("The moon-letters on the map show you the keyhole! You use the key to enter.")
- return FALSE
- else
- msg_print("You have found a door, but you cannot find a way to enter. Ask in Dale, perhaps?")
- return TRUE
- end
- end
- return FALSE
- end,
-}
-
--- function to make the Dale mayor tell you about how to get to Erebor 61
-add_building_action
-{
- ["index"] = 66,
- ["action"] = function()
- msg_print("You will need Thorin's Key and Thrain's Map to get anywhere in Erebor. One may be found in the Barrow-Downs. The other, in Mirkwood.")
- end
-}
-
--- function to make Melkor like it if a player quaffs potions of corruption
-function melkor_potion_corruption(object)
- if (player.pgod == GOD_MELKOR) then
- if (object.tval == TV_POTION) and (object.sval == SV_POTION_MUTATION) then
- msg_print("Your quaffing of this potion pleases Melkor!")
- set_grace(player.grace + 2)
- return FALSE
- end
- end
-end
-add_hook_script(HOOK_QUAFF, "melkor_potion_corruption", "melkor_potion_corruption")
-
--- function to check for Key of Orthanc before proceeding to the final level in Isengard
-add_hooks
-{
- [HOOK_STAIR] = function(direction)
- if ((current_dungeon_idx == 36) and (dun_level == 39) and (direction == "down")) then
- local i
- local orthkey = 0
- for i = 0, INVEN_TOTAL - 1 do
- if (player.inventory(i).name1 == 15) then
- orthkey = orthkey + 1
- end
- end
-
- if (orthkey == 1) then
- msg_print("#BYou have the key to the tower of Orthanc! You may proceed.#w")
- return FALSE
- else
- msg_print("#yYou may not enter Orthanc without the key to the gates!#w Rumours say the key was lost in the Mines of Moria...")
- return TRUE
- end
- end
- return FALSE
- end,
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/mkeys.lua b/lib/mods/theme/scpt/mkeys.lua
deleted file mode 100644
index 07105c64..00000000
--- a/lib/mods/theme/scpt/mkeys.lua
+++ /dev/null
@@ -1,95 +0,0 @@
--- Mkeys for skills & abilities
-
-GF_INSTA_DEATH = add_spell_type
-{
- ["color"] = { TERM_DARK, 0 },
- ["angry"] = function() return TRUE, TRUE end,
- ["monster"] = function(who, dam, rad, y, x, monst)
- local race = race_info_idx(monst.r_idx, monst.ego)
- if magik(5) == FALSE or band(race.flags1, RF1_UNIQUE) ~= FALSE or band(race.flags3, RF3_UNDEAD) ~= FALSE or band(race.flags3, RF3_NONLIVING) ~= FALSE then
- return TRUE, FALSE
- else
- -- Reduce the exp gained this way
- monst.level = monst.level / 3
- return TRUE, FALSE, 32535, 0, 0, 0, 0, 0, 0, 0, " faints.", " is sucked out of life."
- end
- end,
-}
-
--- Death touch ability
-add_mkey
-{
- ["mkey"] = 100,
- ["fct"] = function()
- if player.csp > 40 then
- increase_mana(-40)
- set_project(randint(30) + 10, GF_INSTA_DEATH, 1, 0, bor(PROJECT_STOP, PROJECT_KILL))
- energy_use = 100
- else
- msg_print("You need at least 40 mana.")
- end
- end,
-}
-
-
--- Geomancy skill
-add_mkey
-{
- ["mkey"] = 101,
- ["fct"] = function()
- local s
-
- -- No magic
- if (player.antimagic > 0) then
- msg_print("Your anti-magic field disrupts any magic attempts.")
- return
- end
-
- local obj = get_object(INVEN_WIELD)
- if (obj.k_idx <= 0) or (obj.tval ~= TV_MSTAFF) then
- msg_print('You must wield a magestaff to use Geomancy.')
- return
- end
-
- s = get_school_spell("cast", "is_ok_spell", 62);
-
- -- Actualy cast the choice
- if (s ~= -1) then
- cast_school_spell(s, spell(s))
- end
- end,
-}
-
--- Far reaching attack of polearms
-add_mkey
-{
- ["mkey"] = 102,
- ["fct"] = function()
- local weapon = get_object(INVEN_WIELD);
- if weapon.tval == TV_POLEARM then
- else
- msg_print("You will need a long polearm for this!")
- return
- end
-
- ret, dir = get_rep_dir()
- if ret == FALSE then return end
-
- local dy, dx = explode_dir(dir)
- dy = dy * 2
- dx = dx * 2
- targety = player.py + dy
- targetx = player.px + dx
-
- local max_blows = get_skill_scale(SKILL_POLEARM, player.num_blow / 2)
- if max_blows == 0 then max_blows = 1 end
-
- if get_skill(SKILL_POLEARM) >= 40 then
- energy_use = energy_use + 200
- return project(0, 0, targety, targetx, max_blows, GF_ATTACK, bor(PROJECT_BEAM, PROJECT_KILL))
- else
- energy_use = energy_use + 200
- return project(0, 0, targety, targetx, max_blows, GF_ATTACK, bor(PROJECT_BEAM, PROJECT_STOP, PROJECT_KILL))
- end
- end,
-}
diff --git a/lib/mods/theme/scpt/monsters.lua b/lib/mods/theme/scpt/monsters.lua
deleted file mode 100644
index ad3a5628..00000000
--- a/lib/mods/theme/scpt/monsters.lua
+++ /dev/null
@@ -1,182 +0,0 @@
--- This file holds various things that govern monster behaviour with respect to the player
-
--- Enables player to push past any monster who is >= MSTATUS_NEUTRAL.
--- Written by BauMog for the Intets Hevn module; permission granted to use in the Theme module
-
--- Adapted from defines.h
-function cave_floor_bold(y, x)
- local c_ptr = cave(y, x);
- if(cave_is(c_ptr, FF1_FLOOR) == TRUE) and (c_ptr.feat ~= FEAT_MON_TRAP) then
- return TRUE
- else
- return FALSE
- end
-end
-
--- Adapted from cmd1.c
-function __hook_push_past(y, x)
- local c_ptr = cave(y, x);
-
- if(c_ptr.m_idx > 0) then
- m_ptr = monster(c_ptr.m_idx);
- if(m_ptr.status >= MSTATUS_NEUTRAL) then
- if(cave_floor_bold(y, x) == TRUE) or (m_ptr.flags2 == RF2_PASS_WALL) then
- msg_print(format("You push past %s.", monster_desc(m_ptr, 0)));
- m_ptr.fy = player.py;
- m_ptr.fx = player.px;
- cave(player.py, player.px).m_idx = c_ptr.m_idx;
- c_ptr.m_idx = 0;
- else
- msg_print(format("%s is in your way!", monster_desc(m_ptr, 0)));
- energy_use = 0;
- end
- end
- end
-
-end
-
-add_hook_script(HOOK_MOVE, "__hook_push_past", "__hook_push_past");
-
--- Monster vs. Player Race alignment script
--- From T-Plus by Ingeborg S. Norden
-
-monst_al = {}
-
-function monst_al_add(status, mrs, prs)
-for i,v in mrs do
--- added end
-if not monst_al[v] then monst_al[v] = {} end
-for j, w in prs do
-monst_al[v][w] = status
-end
-end
-end
-
-function monst_al_get(mr,pr)
- if monst_al[mr] then return monst_al[mr][pr]
- else return end
-end
-
--- Maia aggravation for evil beings (provided that no demonic corruptions are present)
--- Based on parts of angel.lua from T-Plus by Ingeborg S. Norden
-
--- cast dispel evil with 0 damage every 10 turns
-
-TIMER_AGGRAVATE_EVIL = new_timer
-{
- ["enabled"] = FALSE,
- ["delay"] = 10,
- ["callback"] = function()
- dispel_evil(0)
- end,
-}
-
-add_hooks{
-[HOOK_GAME_START] = function()
-
- if ((get_race_name() == "Maia") and
- (player.corruption(CORRUPT_BALROG_AURA) ~= TRUE) and
- (player.corruption(CORRUPT_BALROG_WINGS) ~= TRUE) and
- (player.corruption(CORRUPT_BALROG_STRENGTH) ~= TRUE) and
- (player.corruption(CORRUPT_BALROG_FORM) ~= TRUE)) then
- -- "Proper" Maiar aggravate evil beings
- TIMER_AGGRAVATE_EVIL.enabled = TRUE
- -- Good beings (except swans, GWoPs, Wyrm Spirits, and some joke uniques) are coaligned with Maiar
-
- monst_al_add(MSTATUS_FRIEND, {25, 29, 45, 97, 109, 147, 225, 335, 346, 443, 581, 629, 699, 853, 984, 1007, 1017}, {21})
-
- -- Non-evil humanoids are neutral to Humans, Dunedain, Druedain, Rohirrim
- elseif ((get_race_name() == "Human") or
- (get_race_name() == "Dunadan") or
- (get_race_name() == "Druadan") or
- (get_race_name() == "RohanKnight")) then
- monst_al_add(MSTATUS_NEUTRAL, {43, 45, 46, 83, 93, 97, 109, 110, 142, 147, 216, 225, 293, 345, 346, 693, 699, 937, 988, 997, 998, 1000},{0, 8, 12, 16})
-
- -- Non-evil sentient (and non-animal) creatures are neutral to Hobbits, Elves, Wood-Elves
- elseif ((get_race_name() == "Hobbit") or
- (get_race_name() == "Elf") or
- (get_race_name() == "Wood-Elf")) then
- monst_al_add(MSTATUS_NEUTRAL, {43, 45, 46, 83, 93, 97, 109, 110, 142, 147, 216, 225, 293, 345, 346, 693, 699, 937, 988, 997, 998, 1000, 74, 103, 882, 1017},{2, 3, 20})
-
- -- Gnome monsters are neutral to Gnomes
- elseif get_race_name() == "Gnome" then
- monst_al_add(MSTATUS_NEUTRAL, {103, 281, 680, 984, 1001, 1003, 1007, 1011, 1014, 1016},{4})
-
- -- Dwarven monsters are neutral to Petty-dwarves and Dwarves
- elseif ((get_race_name() == "Dwarf") or
- (get_race_name() == "Petty-Dwarf")) then
- monst_al_add(MSTATUS_NEUTRAL, {111, 112, 179, 180, 181, 182},{5, 13})
-
- -- If an Orc character worships Melkor, lower-level Orcs are neutral (not Uruk-hai, however)
- elseif ((get_race_name() == "Orc") and
- (player.pgod == GOD_MELKOR)) then
- monst_al_add(MSTATUS_FRIEND, {87, 118, 126, 149, 244, 251, 264},{6})
-
- -- If a Troll character worships Melkor, Trolls are neutral (not Eldraks, Ettins, and War trolls, though)
- elseif ((get_race_name() == "Troll") and
- (player.pgod == GOD_MELKOR)) then
- monst_al_add(MSTATUS_NEUTRAL, {297, 401, 403, 424, 454, 491, 496, 509, 538},{7})
-
- -- Ogres are neutral to Half-Ogres
- elseif get_race_name() == "Half-Ogre" then
- monst_al_add(MSTATUS_NEUTRAL, {262, 285, 415, 430, 479, 745, 918},{10})
-
- -- Bears are neutral to Beornings, except werebears.
- elseif get_race_name() == "Beorning" then
- monst_al_add(MSTATUS_NEUTRAL, {160, 173, 191, 854, 855, 867, 873},{11})
-
- -- Dark elven monsters are coaligned with Dark Elves
- elseif get_race_name() == "Dark-Elf" then
- monst_al_add(MSTATUS_FRIEND, {122, 178, 183, 226, 348, 375, 400, 657},{14})
-
- -- Plants are coaligned with Ents
- elseif get_race_name() == "Ent" then
- monst_al_add(MSTATUS_FRIEND, {248, 266, 317, 329, 396},{15})
-
- -- And since the above is largely useless except out in the wild...
- -- If an Ent worships Yavanna, lower-level animals are coaligned
- -- should make the early game a bit easier for Ents.
- elseif ((get_race_name() == "Ent") and
- (player.pgod == GOD_YAVANNA)) then
- monst_al_add(MSTATUS_FRIEND, {21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 49, 50, 52, 56, 57, 58, 59, 60, 61, 62, 69, 70, 75, 77, 78, 79, 86, 88, 89, 90, 95, 96, 105, 106, 114, 119, 120, 121, 123, 127, 134, 141, 143, 151, 154, 155, 156, 160, 161, 168, 171, 173, 174, 175, 176, 187, 191, 196, 197, 198, 210, 211, 213, 230, 236, 250, 259},{15})
-
- -- All non-evil non-neutral birds are coaligned with Eagles
- elseif get_race_name() == "Eagle" then
- monst_al_add(MSTATUS_FRIEND, {61, 141, 151, 279},{17})
-
- -- Hatchling dragons are coaligned with Dragons
- elseif get_race_name() == "Dragon" then
- monst_al_add(MSTATUS_FRIEND, {163, 164, 165, 166, 167, 204, 218, 219, 911},{18})
-
- -- Yeeks are neutral to Yeeks
- elseif get_race_name() == "Yeek" then
- monst_al_add(MSTATUS_NEUTRAL, {580, 583, 594, 653, 655, 659, 661},{19})
-
- -- Oathbreakers are coaligned if player is wielding Anduril
- -- It's dirty, but it works, and it doesn't bother checking demons and the races who can't wield weapons.
- elseif get_object(INVEN_WIELD).name1 == 83 then
- monst_al_add(MSTATUS_FRIEND, {731},{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23})
- end
-end,
-
-[HOOK_LEVEL_END_GEN] = function()
-
-for i=0,m_max-1 do
- local monst = monster(i)
- local s = monst_al_get(monst.r_idx, player.prace)
- if s then monst.status = s end
-end
-
-end,
-
-[HOOK_NEW_MONSTER] = function()
-
-for i=0,m_max-1 do
- local monst = monster(i)
- local s = monst_al_get(monst.r_idx, player.prace)
- if s then monst.status = s end
-end
-
-end,
-
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/player.lua b/lib/mods/theme/scpt/player.lua
deleted file mode 100644
index fd11ed9d..00000000
--- a/lib/mods/theme/scpt/player.lua
+++ /dev/null
@@ -1,196 +0,0 @@
-------------------------------------------------------------------------------
------------------------ Hook to create birth objects -------------------------
-------------------------------------------------------------------------------
-function __birth_hook_objects()
-
- -- Grace delay for adding piety
- GRACE_DELAY = 0
-
- -- Provide a book of Geyser to Geomancers
- if get_class_name() == "Geomancer" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Geyser")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Provide a book of prayer to priests
- if get_class_name() == "Priest(Eru)" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("See the Music")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Priest(Manwe)" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Manwe's Blessing")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Druid" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Charm Animal")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Dark-Priest" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Curse")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Paladin" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Divine Aim")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Stonewright" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Firebrand")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Priest(Varda)" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Light of Valinor")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Priest(Ulmo)" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Song of Belegaer")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
- if get_class_name() == "Priest(Mandos)" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Tears of Luthien")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- if get_class_name() == "Mimic" then
- local obj = create_object(TV_CLOAK, 100);
- obj.pval2 = resolve_mimic_name("Mouse")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the undeads, as undeads with the corruptions
- if get_subrace_name() == "Vampire" then
- player.corruption(CORRUPT_VAMPIRE_TEETH, TRUE)
- player.corruption(CORRUPT_VAMPIRE_STRENGTH, TRUE)
- player.corruption(CORRUPT_VAMPIRE_VAMPIRE, TRUE)
- end
-
- -- Start the Red (Fire) dragons with a book of Light (Theme)
- if get_subrace_name() == "Red" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Globe of Light")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Black (Water) dragons with a book of Geyser (Theme)
- if get_subrace_name() == "Black" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Geyser")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Green (Air) dragons with a book of Noxious Cloud (Theme)
- if get_subrace_name() == "Green" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Noxious Cloud")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Blue (Earth) dragons with a book of Stone Skin (Theme)
- if get_subrace_name() == "Blue" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Stone Skin")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the White dragons with a book of Sense Monsters (Theme)
- if get_subrace_name() == "White" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Sense Monsters")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Ethereal dragons with a book of Recharge (Theme)
- if get_subrace_name() == "Ethereal" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Recharge")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Aewroeg with a book of Charm (Theme)
- if get_subrace_name() == "(Aewrog)" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Charm")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Narroeg with a book of blink (Theme)
- if get_subrace_name() == "(Narrog)" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Phase Door")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Peace-mages with a book of blink (Theme)
- if get_class_name() == "Peace-mage" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Phase Door")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Start the Wainriders with a book of Curse (Theme)
- if get_class_name() == "Wainrider" then
- local obj = create_object(TV_BOOK, 255);
- obj.pval = find_spell("Curse")
- obj.ident = bor(obj.ident, IDENT_MENTAL, IDENT_KNOWN)
- inven_carry(obj, FALSE)
- end_object(obj)
- end
-
- -- Provide everyone with a scroll of WoR (Theme)
- local obj = create_object(TV_SCROLL, SV_SCROLL_WORD_OF_RECALL);
- inven_carry(obj, FALSE)
- end_object(obj)
- identify_pack_fully()
-end
-
--- Register in the hook list
-add_hook_script(HOOK_BIRTH_OBJECTS, "__birth_hook_objects", "__birth_hook_objects")
diff --git a/lib/mods/theme/scpt/powers.lua b/lib/mods/theme/scpt/powers.lua
deleted file mode 100644
index ff4c62c5..00000000
--- a/lib/mods/theme/scpt/powers.lua
+++ /dev/null
@@ -1,61 +0,0 @@
--- Various 'U' powers
-
--- Invisibility power, for the mouse mimic shape
-POWER_INVISIBILITY = add_power
-{
- ["name"] = "invisibility",
- ["desc"] = "You are able melt into the shadows to become invisible.",
- ["desc_get"] = "You suddenly become able to melt into the shadows.",
- ["desc_lose"] = "You lose your shadow-melting ability.",
- ["level"] = 30,
- ["cost"] = 10,
- ["stat"] = A_DEX,
- ["fail"] = 20,
- ["power"] = function()
- set_invis(20 + randint(30), 30)
- end,
-}
-
--- Web power, for the spider mimic shape
-POWER_WEB = add_power
-{
- ["name"] = "web",
- ["desc"] = "You are able throw a thick and very resistant spider web.",
- ["desc_get"] = "You suddenly become able to weave webs.",
- ["desc_lose"] = "You lose your web-weaving capability.",
- ["level"] = 25,
- ["cost"] = 30,
- ["stat"] = A_DEX,
- ["fail"] = 20,
- ["power"] = function()
- -- Warning, beware of f_info changes .. I hate to do that ..
- grow_things(16, 1 + (player.lev / 10))
- end,
-}
-
--- Activating/stopping space-continuum
--- When stopped it will induce constant mana loss
-player.corrupt_anti_teleport_stopped = FALSE
-add_loadsave("player.corrupt_anti_teleport_stopped", FALSE)
-POWER_COR_SPACE_TIME = add_power
-{
- ["name"] = "control space/time continuum",
- ["desc"] = "You are able to control the space/time continuum.",
- ["desc_get"] = "You become able to control the space/time continuum.",
- ["desc_lose"] = "You are no more able to control the space/time continuum.",
- ["level"] = 1,
- ["cost"] = 10,
- ["stat"] = A_WIS,
- ["fail"] = 10,
- ["power"] = function()
- if player.corrupt_anti_teleport_stopped == TRUE then
- player.corrupt_anti_teleport_stopped = FALSE
- msg_print("You stop controlling your corruption.")
- player.update = bor(player.update, PU_BONUS)
- else
- player.corrupt_anti_teleport_stopped = TRUE
- msg_print("You start controlling your corruption, teleportation works once more.")
- player.update = bor(player.update, PU_BONUS)
- end
- end,
-}
diff --git a/lib/mods/theme/scpt/s_air.lua b/lib/mods/theme/scpt/s_air.lua
deleted file mode 100644
index afd1f584..00000000
--- a/lib/mods/theme/scpt/s_air.lua
+++ /dev/null
@@ -1,193 +0,0 @@
--- handle the air school
-
-NOXIOUSCLOUD = add_spell
-{
- ["name"] = "Noxious Cloud",
- ["school"] = {SCHOOL_AIR},
- ["level"] = 3,
- ["mana"] = 3,
- ["mana_max"] = 30,
- ["fail"] = 20,
- ["stick"] =
- {
- ["charge"] = { 5, 7 },
- [TV_WAND] =
- {
- ["rarity"] = 15,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 25, 50 },
- },
- },
- ["spell"] = function()
- local ret, dir, type
-
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- if get_level(NOXIOUSCLOUD, 50) >= 30 then type = GF_UNBREATH
- else type = GF_POIS end
- fire_cloud(type, dir, 7 + get_level(NOXIOUSCLOUD, 150), 3, 5 + get_level(NOXIOUSCLOUD, 40))
- return TRUE
- end,
- ["info"] = function()
- return "dam "..(7 + get_level(NOXIOUSCLOUD, 150)).." rad 3 dur "..(5 + get_level(NOXIOUSCLOUD, 40))
- end,
- ["desc"] = {
- "Creates a cloud of poison",
- "The cloud will persist for some turns, damaging all monsters passing by",
- "At spell level 30 it turns into a thick gas attacking all living beings"
- }
-}
-
-AIRWINGS = add_spell
-{
- ["name"] = "Wings of Winds",
- ["school"] = {SCHOOL_AIR, SCHOOL_CONVEYANCE},
- ["level"] = 22,
- ["mana"] = 30,
- ["mana_max"] = 40,
- ["fail"] = 60,
- ["stick"] =
- {
- ["charge"] = { 7, 5 },
- [TV_STAFF] =
- {
- ["rarity"] = 27,
- ["base_level"] = { 1, 10 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["inertia"] = { 1, 10 },
- ["spell"] = function()
- if get_level(AIRWINGS, 50) >= 16 then
- if player.tim_fly == 0 then return set_tim_fly(randint(10) + 5 + get_level(AIRWINGS, 25)) end
- else
- if player.tim_ffall == 0 then return set_tim_ffall(randint(10) + 5 + get_level(AIRWINGS, 25)) end
- end
- return FALSE
- end,
- ["info"] = function()
- return "dur "..(5 + get_level(AIRWINGS, 25)).."+d10"
- end,
- ["desc"] = {
- "Grants the power of levitation",
- "At level 16 it grants the power of controlled flight"
- }
-}
-
-INVISIBILITY = add_spell
-{
- ["name"] = "Invisibility",
- ["school"] = {SCHOOL_AIR},
- ["level"] = 16,
- ["mana"] = 10,
- ["mana_max"] = 20,
- ["fail"] = 50,
- ["inertia"] = { 1, 30 },
- ["spell"] = function()
- if player.tim_invisible == 0 then return set_invis(randint(20) + 15 + get_level(INVISIBILITY, 50), 20 + get_level(INVISIBILITY, 50)) end
- end,
- ["info"] = function()
- return "dur "..(15 + get_level(INVISIBILITY, 50)).."+d20 power "..(20 + get_level(INVISIBILITY, 50))
- end,
- ["desc"] = {
- "Grants invisibility"
- }
-}
-
-POISONBLOOD = add_spell
-{
- ["name"] = "Poison Blood",
- ["school"] = {SCHOOL_AIR},
- ["level"] = 12,
- ["mana"] = 10,
- ["mana_max"] = 20,
- ["fail"] = 30,
- ["stick"] =
- {
- ["charge"] = { 10, 15 },
- [TV_WAND] =
- {
- ["rarity"] = 45,
- ["base_level"] = { 1, 25 },
- ["max_level"] = { 35, 50 },
- },
- },
- ["inertia"] = { 1, 35 },
- ["spell"] = function()
- local obvious = nil
- if player.oppose_pois == 0 then obvious = set_oppose_pois(randint(30) + 25 + get_level(POISONBLOOD, 25)) end
- if (player.tim_poison == 0) and (get_level(POISONBLOOD, 50) >= 15) then obvious = is_obvious(set_poison(randint(30) + 25 + get_level(POISONBLOOD, 25)), obvious) end
- return obvious
- end,
- ["info"] = function()
- return "dur "..(25 + get_level(POISONBLOOD, 25)).."+d30"
- end,
- ["desc"] = {
- "Grants resist poison",
- "At level 15 it provides poison branding to wielded weapon"
- }
-}
-
-THUNDERSTORM = add_spell
-{
- ["name"] = "Thunderstorm",
- ["school"] = {SCHOOL_AIR, SCHOOL_NATURE},
- ["level"] = 25,
- ["mana"] = 40,
- ["mana_max"] = 60,
- ["fail"] = 60,
- ["stick"] =
- {
- ["charge"] = { 5, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 85,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 25, 50 },
- },
- },
- ["inertia"] = { 2, 15 },
- ["spell"] = function()
- if player.tim_thunder == 0 then return set_tim_thunder(randint(10) + 10 + get_level(THUNDERSTORM, 25), 5 + get_level(THUNDERSTORM, 10), 10 + get_level(THUNDERSTORM, 25)) end
- return FALSE
- end,
- ["info"] = function()
- return "dam "..(5 + get_level(THUNDERSTORM, 10)).."d"..(10 + get_level(THUNDERSTORM, 25)).." dur "..(10 + get_level(THUNDERSTORM, 25)).."+d10"
- end,
- ["desc"] = {
- "Charges up the air around you with electricity",
- "Each turn it will throw a thunder bolt at a random monster in sight",
- "The thunder does 3 types of damage, one third of lightning",
- "one third of sound and one third of light"
- }
-}
-
-STERILIZE = add_spell
-{
- ["name"] = "Sterilize",
- ["school"] = {SCHOOL_AIR},
- ["level"] = 20,
- ["mana"] = 10,
- ["mana_max"] = 100,
- ["fail"] = 50,
- ["stick"] =
- {
- ["charge"] = { 7, 5 },
- [TV_STAFF] =
- {
- ["rarity"] = 20,
- ["base_level"] = { 1, 10 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["spell"] = function()
- set_no_breeders((30) + 20 + get_level(STERILIZE, 70))
- return TRUE
- end,
- ["info"] = function()
- return "dur "..(20 + get_level(STERILIZE, 70)).."+d30"
- end,
- ["desc"] = {
- "Prevents explosive breeding for a while."
- }
-}
diff --git a/lib/mods/theme/scpt/s_aule.lua b/lib/mods/theme/scpt/s_aule.lua
deleted file mode 100644
index d3ca4733..00000000
--- a/lib/mods/theme/scpt/s_aule.lua
+++ /dev/null
@@ -1,222 +0,0 @@
--- Spells for Aule school
-
-BOOK_AULE = 63
-
-AULE_FIREBRAND = add_spell
-{
- ["name"] = "Firebrand",
- ["school"] = {SCHOOL_AULE},
- ["level"] = 1,
- ["mana"] = 10,
- ["mana_max"] = 100,
- ["fail"] = 20,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local type, rad
- local level = get_level(AULE_FIREBRAND)
- type = GF_FIRE
-
- if (get_level(AULE_FIREBRAND) > 30) then
- type = GF_HOLY_FIRE
- end
-
- rad = 0
- if (level >= 15) then
- rad = 1
- end
- return set_project(level + randint(20),
- type, 4 + level, rad,
- bor(PROJECT_STOP, PROJECT_KILL))
- end,
- ["info"] = function()
- local level = get_level(AULE_FIREBRAND)
- return "dur "..(level).."+d20 dam "..(4 + level).."/blow"
- end,
- ["desc"] = {
- "Imbues your melee weapon with fire to deal more damage",
- "At level 15 it spreads over a 1 radius zone around your target",
- "At level 30 it deals holy fire damage"
- }
-}
-
-AULE_ENCHANT_WEAPON = add_spell
-{
- ["name"] = "Enchant Weapon",
- ["school"] = {SCHOOL_AULE},
- ["level"] = 10,
- ["mana"] = 100,
- ["mana_max"] = 200,
- ["fail"] = 20,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local level = get_level(AULE_ENCHANT_WEAPON)
- local num_h, num_d, num_p
-
- local ret, item, obj
-
- num_h = 1 + randint(level/12)
- num_d = 0
- num_p = 0
- if (level >= 5) then
- num_d = 1 + randint(level/12)
- end
- if (level >= 45) then
- num_p = 1
- end
- --return enchant_spell(num_h, num_d, 0, num_p)
-
- ret, item = get_item("Which object do you want to enchant?",
- "You have no objects to enchant.",
- bor(USE_INVEN),
- function (obj)
- if obj.name1 > 0 then return FALSE end
- if (obj.tval == TV_MSTAFF) then
- return TRUE
- elseif (obj.tval == TV_BOW) then
- return TRUE
- elseif (obj.tval == TV_HAFTED) then
- return TRUE
- elseif (obj.tval == TV_POLEARM) then
- return TRUE
- elseif (obj.tval == TV_SWORD) then
- return TRUE
- elseif (obj.tval == TV_AXE) then
- return TRUE
- end
- return FALSE
- end
- )
- if ret == FALSE then return FALSE end
-
- obj = get_object(item)
-
- obj.to_h = obj.to_h + num_h
- obj.to_d = obj.to_d + num_h
- obj.pval = obj.pval + num_p
-
- return TRUE
-
- end,
- ["info"] = function()
- return "tries "..(1 + get_level(AULE_ENCHANT_WEAPON)/12)
- end,
- ["desc"] = {
- "Tries to enchant a weapon to-hit",
- "At level 5 it also enchants to-dam",
- "At level 45 it enhances the special powers of magical weapons",
- "The might of the enchantment increases with the level"
- }
-}
-
-AULE_ENCHANT_ARMOUR = add_spell {
- ["name"] = "Enchant Armour",
- ["school"] = {SCHOOL_AULE},
- ["level"] = 15,
- ["mana"] = 100,
- ["mana_max"] = 200,
- ["fail"] = 20,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local level = get_level(AULE_ENCHANT_ARMOUR)
- local num_h, num_d, num_a, num_p
- local ret, item, obj
-
- num_a = 1 + randint(level/10)
- num_h = 0
- num_d = 0
- num_p = 0
- if (level >= 20) then
- num_h = 1
- num_d = 1
- end
- if (level >= 40) then
- num_p = 1
- end
- --return enchant_spell(num_h, num_d, num_a, num_p)
-
- ret, item = get_item("Which object do you want to enchant?",
- "You have no objects to enchant.",
- bor(USE_INVEN),
- function (obj)
- if obj.name1 > 0 then return FALSE end
- if (obj.tval == TV_BOOTS) then
- return TRUE
- elseif (obj.tval == TV_GLOVES) then
- return TRUE
- elseif (obj.tval == TV_HELM) then
- return TRUE
- elseif (obj.tval == TV_CROWN) then
- return TRUE
- elseif (obj.tval == TV_SHIELD) then
- return TRUE
- elseif (obj.tval == TV_CLOAK) then
- return TRUE
- elseif (obj.tval == TV_SOFT_ARMOR) then
- return TRUE
- elseif (obj.tval == TV_HARD_ARMOR) then
- return TRUE
- elseif (obj.tval == TV_DRAG_ARMOR) then
- return TRUE
- end
- return FALSE
- end
- )
- if ret == FALSE then return FALSE end
-
- obj = get_object(item)
-
- obj.to_h = obj.to_h + num_h
- obj.to_d = obj.to_d + num_h
- obj.pval = obj.pval + num_p
- obj.to_a = obj.to_a + num_h
-
- return TRUE
-
- end,
- ["info"] = function()
- return "tries "..(1 + get_level(AULE_ENCHANT_ARMOUR)/10)
- end,
- ["desc"] = {
- "Tries to enchant a piece of armour",
- "At level 20 it also enchants to-hit and to-dam",
- "At level 40 it enhances the special powers of magical armour",
- "The might of the enchantment increases with the level"
- }
-}
-
-AULE_CHILD = add_spell
-{
- ["name"] = "Child of Aule",
- ["school"] = {SCHOOL_AULE},
- ["level"] = 20,
- ["mana"] = 200,
- ["mana_max"] = 500,
- ["fail"] = 40,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local y, x, m_idx
-
- y, x = find_position(player.py, player.px)
- m_idx = place_monster_one(y, x, test_monster_name("Dwarven warrior"), 0, FALSE, MSTATUS_FRIEND)
-
- if m_idx ~= 0 then
- monster_set_level(m_idx, 20 + get_level(AULE_CHILD, 70, 0))
- return TRUE
- end
- end,
- ["info"] = function()
- return "level "..(20 + get_level(AULE_CHILD, 70))
- end,
- ["desc"] = {
- "Summons a levelled Dwarven warrior to help you battle the forces",
- "of Morgoth"
- }
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/s_convey.lua b/lib/mods/theme/scpt/s_convey.lua
deleted file mode 100644
index 1105a850..00000000
--- a/lib/mods/theme/scpt/s_convey.lua
+++ /dev/null
@@ -1,226 +0,0 @@
--- handle the conveyance school
-
-BLINK = add_spell
-{
- ["name"] = "Phase Door",
- ["school"] = {SCHOOL_CONVEYANCE},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 3,
- ["fail"] = 10,
- ["inertia"] = { 1, 5 },
- ["spell"] = function()
- if get_level(BLINK, 50) >= 30 then
- local oy, ox = player.py, player.px
-
- teleport_player(10 + get_level(BLINK, 8))
- create_between_gate(0, oy, ox)
- return TRUE
- else
- teleport_player(10 + get_level(BLINK, 8))
- return TRUE
- end
- end,
- ["info"] = function()
- return "distance "..(10 + get_level(BLINK, 8))
- end,
- ["desc"] = {
- "Teleports you on a small scale range",
- "At level 30 it creates void jumpgates",
- }
-}
-
-DISARM = add_spell
-{
- ["name"] = "Disarm",
- ["school"] = {SCHOOL_CONVEYANCE},
- ["level"] = 3,
- ["mana"] = 2,
- ["mana_max"] = 4,
- ["fail"] = 15,
- ["stick"] =
- {
- ["charge"] = { 10, 15 },
- [TV_STAFF] =
- {
- ["rarity"] = 4,
- ["base_level"] = { 1, 10 },
- ["max_level"] = { 10, 50 },
- },
- },
- ["spell"] = function()
- local obvious
- obvious = destroy_doors_touch()
- if get_level(DISARM, 50) >= 10 then obvious = is_obvious(destroy_traps_touch(), obvious) end
- return obvious
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Destroys doors and disarms traps",
- "At level 10 it unlocks doors and disarms traps",
- }
-}
-
-TELEPORT = add_spell
-{
- ["name"] = "Teleportation",
- ["school"] = {SCHOOL_CONVEYANCE},
- ["level"] = 10,
- ["mana"] = 8,
- ["mana_max"] = 14,
- ["fail"] = 30,
- ["stick"] =
- {
- ["charge"] = { 7, 7 },
- [TV_STAFF] =
- {
- ["rarity"] = 50,
- ["base_level"] = { 1, 20 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["inertia"] = { 1, 10 },
- ["spell"] = function()
- player.energy = player.energy - (25 - get_level(TELEPORT, 50))
- teleport_player(100 + get_level(TELEPORT, 100))
- return TRUE
- end,
- ["info"] = function()
- return "distance "..(100 + get_level(TELEPORT, 100))
- end,
- ["desc"] = {
- "Teleports you around the level. The casting time decreases with level",
- }
-}
-
-TELEAWAY = add_spell
-{
- ["name"] = "Teleport Away",
- ["school"] = {SCHOOL_CONVEYANCE},
- ["level"] = 23,
- ["mana"] = 15,
- ["mana_max"] = 40,
- ["fail"] = 60,
- ["stick"] =
- {
- ["charge"] = { 3, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 75,
- ["base_level"] = { 1, 20 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["spell"] = function()
- local ret, dir
-
- if get_level(TELEAWAY, 50) >= 20 then
- return project_los(GF_AWAY_ALL, 100)
- elseif get_level(TELEAWAY, 50) >= 10 then
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_ball(GF_AWAY_ALL, dir, 100, 3 + get_level(TELEAWAY, 4))
- else
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return teleport_monster(dir)
- end
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Teleports a line of monsters away",
- "At level 10 it turns into a ball",
- "At level 20 it teleports all monsters in sight"
- }
-}
-
-RECALL = add_spell
-{
- ["name"] = "Recall",
- ["school"] = {SCHOOL_CONVEYANCE},
- ["level"] = 30,
- ["mana"] = 25,
- ["mana_max"] = 25,
- ["fail"] = 60,
- ["spell"] = function()
- local ret, x, y, c_ptr
- ret, x, y = tgt_pt()
- if ret == FALSE then return end
- c_ptr = cave(y, x)
- if (y == player.py) and (x == player.px) then
- local d = 21 - get_level(RECALL, 15)
- if d < 0 then
- d = 0
- end
- local f = 15 - get_level(RECALL, 10)
- if f < 1 then
- f = 1
- end
- recall_player(d, f)
- return TRUE
- elseif c_ptr.m_idx > 0 then
- swap_position(y, x)
- return TRUE
- elseif c_ptr.o_idx > 0 then
- set_target(y, x)
- if get_level(RECALL, 50) >= 15 then
- fetch(5, 10 + get_level(RECALL, 150), FALSE)
- else
- fetch(5, 10 + get_level(RECALL, 150), TRUE)
- end
- return TRUE
- end
- end,
- ["info"] = function()
- local d = 21 - get_level(RECALL, 15)
- if d < 0 then
- d = 0
- end
- local f = 15 - get_level(RECALL, 10)
- if f < 1 then
- f = 1
- end
- return "dur "..f.."+d"..d.." weight "..(1 + get_level(RECALL, 15)).."lb"
- end,
- ["desc"] = {
- "Cast on yourself it will recall you to the surface/dungeon.",
- "Cast at a monster you will swap positions with the monster.",
- "Cast at an object it will fetch the object to you."
- }
-}
-
-PROBABILITY_TRAVEL = add_spell
-{
- ["name"] = "Probability Travel",
- ["school"] = {SCHOOL_CONVEYANCE},
- ["level"] = 35,
- ["mana"] = 30,
- ["mana_max"] = 50,
- ["fail"] = 90,
- ["stick"] =
- {
- ["charge"] = { 1, 2 },
- [TV_STAFF] =
- {
- ["rarity"] = 97,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 8, 25 },
- },
- },
- ["inertia"] = { 6, 40 },
- ["spell"] = function()
- return set_prob_travel(randint(20) + get_level(PROBABILITY_TRAVEL, 60))
- end,
- ["info"] = function()
- return "dur "..get_level(PROBABILITY_TRAVEL, 60).."+d20"
- end,
- ["desc"] = {
- "Renders you immaterial, when you hit a wall you travel through it and",
- "instantly appear on the other side of it. You can also float up and down",
- "at will"
- }
-}
diff --git a/lib/mods/theme/scpt/s_demon.lua b/lib/mods/theme/scpt/s_demon.lua
deleted file mode 100644
index ada97310..00000000
--- a/lib/mods/theme/scpt/s_demon.lua
+++ /dev/null
@@ -1,337 +0,0 @@
--- handle the demonology school
-
--- Demonblade
-DEMON_BLADE = add_spell
-{
- ["name"] = "Demon Blade",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 1,
- ["mana"] = 4,
- ["mana_max"] = 44,
- ["fail"] = 10,
- ["random"] = 0,
- ["stick"] =
- {
- ["charge"] = { 3, 7 },
- [TV_WAND] =
- {
- ["rarity"] = 75,
- ["base_level"] = { 1, 17 },
- ["max_level"] = { 20, 40 },
- },
- },
- ["spell"] = function()
- local type, rad
-
- type = GF_FIRE
- if get_level(DEMON_BLADE) >= 30 then type = GF_HELL_FIRE end
-
- rad = 0
- if get_level(DEMON_BLADE) >= 45 then rad = 1 end
-
- return set_project(randint(20) + get_level(DEMON_BLADE, 80),
- type,
- 4 + get_level(DEMON_BLADE, 40),
- rad,
- bor(PROJECT_STOP, PROJECT_KILL))
- end,
- ["info"] = function()
- return "dur "..(get_level(DEMON_BLADE, 80)).."+d20 dam "..(4 + get_level(DEMON_BLADE, 40)).."/blow"
- end,
- ["desc"] = {
- "Imbues your blade with fire to deal more damage",
- "At level 30 it deals hellfire damage",
- "At level 45 it spreads over a 1 radius zone around your target",
- }
-}
-
-DEMON_MADNESS = add_spell
-{
- ["name"] = "Demon Madness",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 10,
- ["mana"] = 5,
- ["mana_max"] = 20,
- ["fail"] = 25,
- ["random"] = 0,
- ["spell"] = function()
- local ret, dir, type, y1, x1, y2, x2
-
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- type = GF_CHAOS
- if magik(33) == TRUE then type = GF_CONFUSION end
- if magik(33) == TRUE then type = GF_CHARM end
-
- -- Calc the coordinates of arrival
- y1, x1 = get_target(dir)
- y2 = player.py - (y1 - player.py)
- x2 = player.px - (x1 - player.px)
-
- local obvious = nil
- obvious = project(0, 1 + get_level(DEMON_MADNESS, 4, 0),
- y1, x1,
- 20 + get_level(DEMON_MADNESS, 200),
- type, bor(PROJECT_STOP, PROJECT_GRID, PROJECT_ITEM, PROJECT_KILL))
- obvious = is_obvious(project(0, 1 + get_level(DEMON_MADNESS, 4, 0),
- y2, x2,
- 20 + get_level(DEMON_MADNESS, 200),
- type, bor(PROJECT_STOP, PROJECT_GRID, PROJECT_ITEM, PROJECT_KILL)), obvious)
- return obvious
- end,
- ["info"] = function()
- return "dam "..(20 + get_level(DEMON_MADNESS, 200)).." rad "..(1 + get_level(DEMON_MADNESS, 4, 0))
- end,
- ["desc"] = {
- "Fire 2 balls in opposite directions of randomly chaos, confusion or charm",
- }
-}
-
-DEMON_FIELD = add_spell
-{
- ["name"] = "Demon Field",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 20,
- ["mana"] = 20,
- ["mana_max"] = 60,
- ["fail"] = 60,
- ["random"] = 0,
- ["spell"] = function()
- local ret, dir
-
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_cloud(GF_NEXUS, dir, 20 + get_level(DEMON_FIELD, 70), 7, 30 + get_level(DEMON_FIELD, 100))
- end,
- ["info"] = function()
- return "dam "..(20 + get_level(DEMON_FIELD, 70)).." dur "..(30 + get_level(DEMON_FIELD, 100))
- end,
- ["desc"] = {
- "Fires a cloud of deadly nexus over a radius of 7",
- }
-}
-
--- Demonshield
-
-DOOM_SHIELD = add_spell
-{
- ["name"] = "Doom Shield",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 1,
- ["mana"] = 2,
- ["mana_max"] = 30,
- ["fail"] = 10,
- ["random"] = 0,
- ["spell"] = function()
- return set_shield(randint(10) + 20 + get_level(DOOM_SHIELD, 100), -300 + get_level(DOOM_SHIELD, 100), SHIELD_COUNTER, 1 + get_level(DOOM_SHIELD, 14), 10 + get_level(DOOM_SHIELD, 15))
- end,
- ["info"] = function()
- return "dur "..(20 + get_level(DOOM_SHIELD, 100)).."+d10 dam "..(1 + get_level(DOOM_SHIELD, 14)).."d"..(10 + get_level(DOOM_SHIELD, 15))
- end,
- ["desc"] = {
- "Raises a mirror of pain around you, doing very high damage to your foes",
- "that dare hit you, but greatly reduces your armour class",
- }
-}
-
-UNHOLY_WORD = add_spell
-{
- ["name"] = "Unholy Word",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 25,
- ["mana"] = 15,
- ["mana_max"] = 45,
- ["fail"] = 55,
- ["random"] = 0,
- ["spell"] = function()
- local ret, x, y, c_ptr
- ret, x, y = tgt_pt()
- if ret == FALSE then return end
- c_ptr = cave(y, x)
-
- -- ok that is a monster
- if c_ptr.m_idx > 0 then
- local m_ptr = monster(c_ptr.m_idx)
- if m_ptr.status ~= MSTATUS_PET then
- msg_print("You can only target a pet.")
- return
- end
-
- -- Oups he is angry now
- if magik(30 - get_level(UNHOLY_WORD, 25, 0)) == TRUE then
- local m_name = monster_desc(m_ptr, 0).." turns against you."
- msg_print(strupper(strsub(m_name, 0, 1))..strsub(m_name, 2))
- else
- local m_name = monster_desc(m_ptr, 0)
- msg_print("You consume "..m_name..".")
-
- local heal = (m_ptr.hp * 100) / m_ptr.maxhp
- heal = ((30 + get_level(UNHOLY_WORD, 50, 0)) * heal) / 100
-
- hp_player(heal)
-
- delete_monster_idx(c_ptr.m_idx)
- end
- return TRUE
- end
- end,
- ["info"] = function()
- return "heal mhp% of "..(30 + get_level(UNHOLY_WORD, 50, 0)).."%"
- end,
- ["desc"] = {
- "Kills a pet to heal you",
- "There is a chance that the pet won't die but will turn against you",
- "it will decrease with higher level",
- }
-}
-
-DEMON_CLOAK = add_spell
-{
- ["name"] = "Demon Cloak",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 20,
- ["mana"] = 10,
- ["mana_max"] = 40,
- ["fail"] = 70,
- ["random"] = 0,
- ["spell"] = function()
- return set_tim_reflect(randint(5) + 5 + get_level(DEMON_CLOAK, 15, 0))
- end,
- ["info"] = function()
- return "dur "..(5 + get_level(DEMON_CLOAK, 15, 0)).."+d5"
- end,
- ["desc"] = {
- "Raises a mirror that can reflect bolts and arrows for a time",
- }
-}
-
-
--- Demonhorn
-DEMON_SUMMON = add_spell
-{
- ["name"] = "Summon Demon",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 5,
- ["mana"] = 10,
- ["mana_max"] = 50,
- ["fail"] = 30,
- ["random"] = 0,
- ["spell"] = function()
- local type = SUMMON_DEMON
- local level = dun_level
- local minlevel = 4
- if level < minlevel then level=minlevel end
- summon_specific_level = 5 + get_level(DEMON_SUMMON, 100)
- if get_level(DEMON_SUMMON) >= 35 then type = SUMMON_HI_DEMON end
- if summon_monster(player.py, player.px, level, TRUE, type) == TRUE then
- return TRUE
- else
- msg_print("Something blocks your summoning!")
- return FALSE
- end
- end,
- ["info"] = function()
- return "level "..(5 + get_level(DEMON_SUMMON, 100))
- end,
- ["desc"] = {
- "Summons a leveled demon to your side",
- "At level 35 it summons a high demon",
- }
-}
-
-DISCHARGE_MINION = add_spell
-{
- ["name"] = "Discharge Minion",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 10,
- ["mana"] = 20,
- ["mana_max"] = 50,
- ["fail"] = 30,
- ["random"] = 0,
- ["spell"] = function()
- local ret, x, y, c_ptr
- ret, x, y = tgt_pt()
- if ret == FALSE then return end
- c_ptr = cave(y, x)
-
- -- ok that is a monster
- if c_ptr.m_idx > 0 then
- local m_ptr = monster(c_ptr.m_idx)
- if m_ptr.status ~= MSTATUS_PET then
- msg_print("You can only target a pet.")
- return
- end
-
- local dam = m_ptr.hp
- delete_monster_idx(c_ptr.m_idx)
- dam = (dam * (20 + get_level(DISCHARGE_MINION, 60, 0))) / 100
- if dam > 100 + get_level(DISCHARGE_MINION, 500, 0) then
- dam = 100 + get_level(DISCHARGE_MINION, 500, 0)
- end
-
- -- We use project instead of fire_ball because we must tell it exactly where to land
- return project(0, 2,
- y, x,
- dam,
- GF_GRAVITY, bor(PROJECT_STOP, PROJECT_GRID, PROJECT_ITEM, PROJECT_KILL))
- end
- end,
- ["info"] = function()
- return "dam "..(20 + get_level(DISCHARGE_MINION, 60, 0)).."% max "..(100 + get_level(DISCHARGE_MINION, 500, 0))
- end,
- ["desc"] = {
- "The targeted pet will explode in a burst of gravity",
- }
-}
-
-CONTROL_DEMON = add_spell
-{
- ["name"] = "Control Demon",
- ["school"] = {SCHOOL_DEMON},
- ["level"] = 25,
- ["mana"] = 30,
- ["mana_max"] = 70,
- ["fail"] = 55,
- ["random"] = 0,
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- return fire_ball(GF_CONTROL_DEMON, dir, 50 + get_level(CONTROL_DEMON, 250), 0)
- end,
- ["info"] = function()
- return "power "..(50 + get_level(CONTROL_DEMON, 250))
- end,
- ["desc"] = {
- "Attempts to control a demon",
- }
-}
-
--- ok we need to have different wield slots
-add_hooks
-{
- [HOOK_WIELD_SLOT] = function (obj, ideal)
- if (obj.tval == TV_DAEMON_BOOK) then
- local slot
- if (obj.sval == SV_DEMONBLADE) then
- if(ideal == TRUE) then
- slot = INVEN_WIELD
- else
- slot = get_slot(INVEN_WIELD)
- end
- elseif (obj.sval == SV_DEMONSHIELD) then
- if(ideal == TRUE) then
- slot = INVEN_ARM
- else
- slot = get_slot(INVEN_ARM)
- end
- elseif (obj.sval == SV_DEMONHORN) then
- if(ideal == TRUE) then
- slot = INVEN_HEAD
- else
- slot = get_slot(INVEN_HEAD)
- end
- end
- return TRUE, slot
- end
- end,
-}
diff --git a/lib/mods/theme/scpt/s_divin.lua b/lib/mods/theme/scpt/s_divin.lua
deleted file mode 100644
index 60b0275f..00000000
--- a/lib/mods/theme/scpt/s_divin.lua
+++ /dev/null
@@ -1,230 +0,0 @@
--- Handles thhe divination school
-
-
-STARIDENTIFY = add_spell
-{
- ["name"] = "Greater Identify",
- ["school"] = {SCHOOL_DIVINATION},
- ["level"] = 35,
- ["mana"] = 30,
- ["mana_max"] = 30,
- ["fail"] = 80,
- ["spell"] = function()
- if get_check("Cast on yourself?") == TRUE then
- self_knowledge()
- else
- identify_fully()
- end
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Asks for an object and fully identify it, providing the full list of powers",
- "Cast at yourself it will reveal your powers"
- }
-}
-
-IDENTIFY = add_spell
-{
- ["name"] = "Identify",
- ["school"] = {SCHOOL_DIVINATION},
- ["level"] = 8,
- ["mana"] = 10,
- ["mana_max"] = 50,
- ["fail"] = 40,
- ["stick"] =
- {
- ["charge"] = { 7, 10 },
- [TV_STAFF] =
- {
- ["rarity"] = 45,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 15, 40 },
- },
- },
- ["spell"] = function()
- if get_level(IDENTIFY, 50) >= 27 then
- local obvious
- obvious = identify_pack()
- obvious = is_obvious(fire_ball(GF_IDENTIFY, 0, 1, get_level(IDENTIFY, 3)), obvious)
- if obvious == TRUE then
- player.notice = bor(player.notice, PN_COMBINE, PN_REORDER)
- end
- return obvious
- elseif get_level(IDENTIFY, 50) >= 17 then
- local obvious
- obvious = identify_pack()
- obvious = is_obvious(fire_ball(GF_IDENTIFY, 0, 1, 0), obvious)
- if obvious == TRUE then
- player.notice = bor(player.notice, PN_COMBINE, PN_REORDER)
- end
- return obvious
- else
- if ident_spell() == TRUE then return TRUE else return end
- end
- end,
- ["info"] = function()
- if get_level(IDENTIFY, 50) >= 27 then
- return "rad "..(get_level(IDENTIFY, 3))
- else
- return ""
- end
- end,
- ["desc"] = {
- "Asks for an object and identifies it",
- "At level 17 it identifies all objects in the inventory",
- "At level 27 it identifies all objects in the inventory and in a",
- "radius on the floor, as well as probing monsters in that radius"
- }
-}
-
-VISION = add_spell
-{
- ["name"] = "Vision",
- ["school"] = {SCHOOL_DIVINATION},
- ["level"] = 15,
- ["mana"] = 7,
- ["mana_max"] = 55,
- ["fail"] = 45,
- ["stick"] =
- {
- ["charge"] = { 4, 6 },
- [TV_STAFF] =
- {
- ["rarity"] = 60,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 10, 30 },
- },
- },
- ["inertia"] = { 2, 200 },
- ["spell"] = function()
- if get_level(VISION, 50) >= 25 then
- wiz_lite_extra()
- else
- map_area()
- end
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Detects the layout of the surrounding area",
- "At level 25 it maps and lights the whole level",
- }
-}
-
-SENSEHIDDEN = add_spell
-{
- ["name"] = "Sense Hidden",
- ["school"] = {SCHOOL_DIVINATION},
- ["level"] = 5,
- ["mana"] = 2,
- ["mana_max"] = 10,
- ["fail"] = 25,
- ["stick"] =
- {
- ["charge"] = { 1, 15 },
- [TV_STAFF] =
- {
- ["rarity"] = 20,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 10, 50 },
- },
- },
- ["inertia"] = { 1, 10 },
- ["spell"] = function()
- local obvious = nil
- obvious = detect_traps(15 + get_level(SENSEHIDDEN, 40, 0))
- if get_level(SENSEHIDDEN, 50) >= 15 then
- obvious = is_obvious(set_tim_invis(10 + randint(20) + get_level(SENSEHIDDEN, 40)), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- if get_level(SENSEHIDDEN, 50) >= 15 then
- return "rad "..(15 + get_level(SENSEHIDDEN, 40)).." dur "..(10 + get_level(SENSEHIDDEN, 40)).."+d20"
- else
- return "rad "..(15 + get_level(SENSEHIDDEN, 40))
- end
- end,
- ["desc"] = {
- "Detects the traps in a certain radius around you",
- "At level 15 it allows you to sense invisible for a while"
- }
-}
-
-REVEALWAYS = add_spell
-{
- ["name"] = "Reveal Ways",
- ["school"] = {SCHOOL_DIVINATION},
- ["level"] = 9,
- ["mana"] = 3,
- ["mana_max"] = 15,
- ["fail"] = 20,
- ["stick"] =
- {
- ["charge"] = { 6, 6 },
- [TV_STAFF] =
- {
- ["rarity"] = 35,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 25, 50 },
- },
- },
- ["inertia"] = { 1, 10 },
- ["spell"] = function()
- local obvious
- obvious = detect_doors(10 + get_level(REVEALWAYS, 40, 0))
- obvious = is_obvious(detect_stairs(10 + get_level(REVEALWAYS, 40, 0)), obvious)
- return obvious
- end,
- ["info"] = function()
- return "rad "..(10 + get_level(REVEALWAYS, 40))
- end,
- ["desc"] = {
- "Detects the doors/stairs/ways in a certain radius around you",
- }
-}
-
-SENSEMONSTERS = add_spell
-{
- ["name"] = "Sense Monsters",
- ["school"] = {SCHOOL_DIVINATION},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 20,
- ["fail"] = 10,
- ["stick"] =
- {
- ["charge"] = { 5, 10 },
- [TV_STAFF] =
- {
- ["rarity"] = 37,
- ["base_level"] = { 1, 10 },
- ["max_level"] = { 15, 40 },
- },
- },
- ["inertia"] = { 1, 10 },
- ["spell"] = function()
- local obvious
- obvious = detect_monsters_normal(10 + get_level(SENSEMONSTERS, 40, 0))
- if get_level(SENSEMONSTERS, 50) >= 30 then
- obvious = is_obvious(set_tim_esp(10 + randint(10) + get_level(SENSEMONSTERS, 20)), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- if get_level(SENSEMONSTERS, 50) >= 30 then
- return "rad "..(10 + get_level(SENSEMONSTERS, 40)).." dur "..(10 + get_level(SENSEMONSTERS, 20)).."+d10"
- else
- return "rad "..(10 + get_level(SENSEMONSTERS, 40))
- end
- end,
- ["desc"] = {
- "Detects all monsters near you",
- "At level 30 it allows you to sense monster minds for a while"
- }
-}
diff --git a/lib/mods/theme/scpt/s_earth.lua b/lib/mods/theme/scpt/s_earth.lua
deleted file mode 100644
index 23aa001c..00000000
--- a/lib/mods/theme/scpt/s_earth.lua
+++ /dev/null
@@ -1,184 +0,0 @@
--- The earth school
-
-STONESKIN = add_spell
-{
- ["name"] = "Stone Skin",
- ["school"] = SCHOOL_EARTH,
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 50,
- ["fail"] = 10,
- ["inertia"] = { 2, 50 },
- ["spell"] = function()
- local type
- if get_level(STONESKIN, 50) >= 25 then
- type = SHIELD_COUNTER
- else
- type = 0
- end
- return set_shield(randint(10) + 10 + get_level(STONESKIN, 100), 10 + get_level(STONESKIN, 50), type, 2 + get_level(STONESKIN, 5), 3 + get_level(STONESKIN, 5))
- end,
- ["info"] = function()
- if get_level(STONESKIN, 50) >= 25 then
- return "dam "..(2 + get_level(STONESKIN, 5)).."d"..(3 + get_level(STONESKIN, 5)).." dur "..(10 + get_level(STONESKIN, 100)).."+d10 AC "..(10 + get_level(STONESKIN, 50))
- else
- return "dur "..(10 + get_level(STONESKIN, 100)).."+d10 AC "..(10 + get_level(STONESKIN, 50))
- end
- end,
- ["desc"] = {
- "Creates a shield of earth around you to protect you",
- "At level 25 it starts dealing damage to attackers"
- }
-}
-
-DIG = add_spell
-{
- ["name"] = "Dig",
- ["school"] = SCHOOL_EARTH,
- ["level"] = 12,
- ["mana"] = 14,
- ["mana_max"] = 14,
- ["fail"] = 20,
- ["stick"] =
- {
- ["charge"] = { 15, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 25,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 1, 1 },
- },
- },
- ["spell"] = function()
- local ret, dir
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return wall_to_mud(dir)
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Digs a hole in a wall much faster than any shovels",
- }
-}
-
-STONEPRISON = add_spell
-{
- ["name"] = "Stone Prison",
- ["school"] = SCHOOL_EARTH,
- ["level"] = 25,
- ["mana"] = 30,
- ["mana_max"] = 50,
- ["fail"] = 65,
- ["stick"] =
- {
- ["charge"] = { 5, 3 },
- [TV_WAND] =
- {
- ["rarity"] = 57,
- ["base_level"] = { 1, 3 },
- ["max_level"] = { 5, 20 },
- },
- },
- ["spell"] = function()
- local ret, x, y
- if get_level(STONEPRISON, 50) >= 10 then
- ret, x, y = tgt_pt()
- else
- y = player.py
- x = player.px
- end
- wall_stone(y, x)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Creates a prison of walls around you",
- "At level 10 it allows you to target a monster"
- }
-}
-
-STRIKE = add_spell
-{
- ["name"] = "Strike",
- ["school"] = {SCHOOL_EARTH},
- ["level"] = 30,
- ["mana"] = 30,
- ["mana_max"] = 50,
- ["fail"] = 60,
- ["stick"] =
- {
- ["charge"] = { 2, 6 },
- [TV_WAND] =
- {
- ["rarity"] = 635,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 10, 50 },
- },
- },
- ["spell"] = function()
- local ret, dir, rad
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- if get_level(STRIKE, 50) >= 12 then
- return fire_ball(GF_FORCE, dir, 50 + get_level(STRIKE, 50), 1)
- else
- return fire_ball(GF_FORCE, dir, 50 + get_level(STRIKE, 50), 0)
- end
- end,
- ["info"] = function()
- if get_level(STRIKE, 50) >= 12 then
- return "dam "..(50 + get_level(STRIKE, 50)).." rad 1"
- else
- return "dam "..(50 + get_level(STRIKE, 50))
- end
- end,
- ["desc"] = {
- "Creates a micro-ball of force that will push monsters backwards",
- "If the monster is caught near a wall, it'll be crushed against it",
- "At level 12 it turns into a ball of radius 1"
- }
-}
-
-SHAKE = add_spell
-{
- ["name"] = "Shake",
- ["school"] = {SCHOOL_EARTH},
- ["level"] = 27,
- ["mana"] = 25,
- ["mana_max"] = 30,
- ["fail"] = 60,
- ["stick"] =
- {
- ["charge"] = { 5, 10 },
- [TV_STAFF] =
- {
- ["rarity"] = 75,
- ["base_level"] = { 1, 3 },
- ["max_level"] = { 9, 20 },
- },
- },
- ["inertia"] = { 2, 50 },
- ["spell"] = function()
- local ret, x, y
- if get_level(SHAKE, 50) >= 10 then
- ret, x, y = tgt_pt()
- if ret == FALSE then return end
- else
- x = player.px
- y = player.py
- end
- earthquake(y, x, 4 + get_level(SHAKE, 10));
- return TRUE
- end,
- ["info"] = function()
- return "rad "..(4 + get_level(SHAKE, 10))
- end,
- ["desc"] = {
- "Creates a localised earthquake",
- "At level 10 it can be targeted at any location"
- }
-}
diff --git a/lib/mods/theme/scpt/s_eru.lua b/lib/mods/theme/scpt/s_eru.lua
deleted file mode 100644
index c0cb0aaf..00000000
--- a/lib/mods/theme/scpt/s_eru.lua
+++ /dev/null
@@ -1,130 +0,0 @@
--- Handle Eru Iluvatar magic school
-
-ERU_SEE = add_spell
-{
- ["name"] = "See the Music",
- ["school"] = {SCHOOL_ERU},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 50,
- ["fail"] = 20,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local obvious
- obvious = set_tim_invis(randint(20) + 10 + get_level(ERU_SEE, 100))
- if get_level(ERU_SEE) >= 30 then
- wiz_lite_extra()
- obvious = TRUE
- elseif get_level(ERU_SEE) >= 10 then
- map_area()
- obvious = TRUE
- end
- if get_level(ERU_SEE) >= 20 then
- obvious = is_obvious(set_blind(0), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- return "dur "..(10 + get_level(ERU_SEE, 100)).."+d20"
- end,
- ["desc"] = {
- "Allows you to 'see' the Great Music from which the world",
- "originates, allowing you to see unseen things",
- "At level 10 it allows you to see your surroundings",
- "At level 20 it allows you to cure blindness",
- "At level 30 it allows you to fully see all the level"
- }
-}
-
-ERU_LISTEN = add_spell
-{
- ["name"] = "Listen to the Music",
- ["school"] = {SCHOOL_ERU},
- ["level"] = 7,
- ["mana"] = 15,
- ["mana_max"] = 200,
- ["fail"] = 25,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- if get_level(ERU_LISTEN) >= 30 then
- ident_all()
- identify_pack()
- return TRUE
- elseif get_level(ERU_LISTEN) >= 14 then
- identify_pack()
- return TRUE
- else
- return ident_spell()
- end
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Allows you to listen to the Great Music from which the world",
- "originates, allowing you to understand the meaning of things",
- "At level 14 it allows you to identify all your pack",
- "At level 30 it allows you to identify all items on the level",
- }
-}
-
-ERU_UNDERSTAND = add_spell
-{
- ["name"] = "Know the Music",
- ["school"] = {SCHOOL_ERU},
- ["level"] = 30,
- ["mana"] = 200,
- ["mana_max"] = 600,
- ["fail"] = 50,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- if get_level(ERU_UNDERSTAND) >= 10 then
- identify_pack_fully()
- return TRUE
- else
- return identify_fully()
- end
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Allows you to understand the Great Music from which the world",
- "originates, allowing you to know the full abilities of things",
- "At level 10 it allows you to *identify* all your pack",
- }
-}
-
-ERU_PROT = add_spell
-{
- ["name"] = "Lay of Protection",
- ["school"] = {SCHOOL_ERU},
- ["level"] = 35,
- ["mana"] = 400,
- ["mana_max"] = 400,
- ["fail"] = 80,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- return fire_ball(GF_MAKE_GLYPH, 0, 1, 1 + get_level(ERU_PROT, 2, 0))
- end,
- ["info"] = function()
- return "rad "..(1 + get_level(ERU_PROT, 2, 0))
- end,
- ["desc"] = {
- "Creates a circle of safety around you",
- }
-}
diff --git a/lib/mods/theme/scpt/s_fire.lua b/lib/mods/theme/scpt/s_fire.lua
deleted file mode 100644
index dbbf7604..00000000
--- a/lib/mods/theme/scpt/s_fire.lua
+++ /dev/null
@@ -1,227 +0,0 @@
--- handle the fire school
-
-GLOBELIGHT = add_spell
-{
- ["name"] = "Globe of Light",
- ["school"] = {SCHOOL_FIRE},
- ["level"] = 1,
- ["mana"] = 2,
- ["mana_max"] = 15,
- ["fail"] = 10,
- ["stick"] =
- {
- ["charge"] = { 10, 5 },
- [TV_STAFF] =
- {
- ["rarity"] = 7,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 10, 45 },
- },
- },
- ["inertia"] = { 1, 40 },
- ["spell"] = function()
- local obvious
- if get_level(GLOBELIGHT, 50) >= 3 then
- obvious = lite_area(10, 4)
- else
- lite_room(player.py, player.px)
- obvious = TRUE
- end
- if get_level(GLOBELIGHT, 50) >= 15 then
- obvious = is_obvious(fire_ball(GF_LITE, 0, 10 + get_level(GLOBELIGHT, 100), 5 + get_level(GLOBELIGHT, 6)), obvious)
- player.update = bor(player.update, PU_VIEW)
- end
- return obvious
- end,
- ["info"] = function()
- if get_level(GLOBELIGHT, 50) >= 15 then
- return "dam "..(10 + get_level(GLOBELIGHT, 100)).." rad "..(5 + get_level(GLOBELIGHT, 6))
- else
- return ""
- end
- end,
- ["desc"] = {
- "Creates a globe of pure light",
- "At level 3 it starts damaging monsters",
- "At level 15 it starts creating a more powerful kind of light",
- }
-}
-
-FIREFLASH = add_spell
-{
- ["name"] = "Fireflash",
- ["school"] = {SCHOOL_FIRE},
- ["level"] = 10,
- ["mana"] = 5,
- ["mana_max"] = 70,
- ["fail"] = 35,
- ["stick"] =
- {
- ["charge"] = { 5, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 35,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 15, 35 },
- },
- },
- ["spell"] = function()
- local ret, dir, type
- if (get_level(FIREFLASH, 50) >= 20) then
- type = GF_HOLY_FIRE
- else
- type = GF_FIRE
- end
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_ball(type, dir, 20 + get_level(FIREFLASH, 500), 2 + get_level(FIREFLASH, 5))
- end,
- ["info"] = function()
- return "dam "..(20 + get_level(FIREFLASH, 500)).." rad "..(2 + get_level(FIREFLASH, 5))
- end,
- ["desc"] = {
- "Conjures a ball of fire to burn your foes to ashes",
- "At level 20 it turns into a ball of holy fire"
- }
-}
-
-FIERYAURA = add_spell
-{
- ["name"] = "Fiery Shield",
- ["school"] = {SCHOOL_FIRE},
- ["level"] = 20,
- ["mana"] = 20,
- ["mana_max"] = 60,
- ["fail"] = 50,
- ["stick"] =
- {
- ["charge"] = { 3, 5 },
- [TV_STAFF] =
- {
- ["rarity"] = 50,
- ["base_level"] = { 1, 10 },
- ["max_level"] = { 5, 40 },
- },
- },
- ["inertia"] = { 2, 15 },
- ["spell"] = function()
- local type
- if (get_level(FIERYAURA, 50) >= 8) then
- type = SHIELD_GREAT_FIRE
- else
- type = SHIELD_FIRE
- end
- return set_shield(randint(20) + 10 + get_level(FIERYAURA, 70), 10, type, 5 + get_level(FIERYAURA, 10), 5 + get_level(FIERYAURA, 7))
- end,
- ["info"] = function()
- return "dam "..(5 + get_level(FIERYAURA, 15)).."d"..(5 + get_level(FIERYAURA, 7)).." dur "..(10 + get_level(FIERYAURA, 70)).."+d20"
- end,
- ["desc"] = {
- "Creates a shield of fierce flames around you",
- "At level 8 it turns into a greater kind of flame that can not be resisted"
- }
-}
-
-FIREWALL = add_spell
-{
- ["name"] = "Firewall",
- ["school"] = {SCHOOL_FIRE},
- ["level"] = 15,
- ["mana"] = 25,
- ["mana_max"] = 100,
- ["fail"] = 40,
- ["stick"] =
- {
- ["charge"] = { 4, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 55,
- ["base_level"] = { 1, 10 },
- ["max_level"] = { 5, 40 },
- },
- },
- ["spell"] = function()
- local ret, dir, type
- if (get_level(FIREWALL, 50) >= 6) then
- type = GF_HELL_FIRE
- else
- type = GF_FIRE
- end
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- fire_wall(type, dir, 40 + get_level(FIREWALL, 150), 10 + get_level(FIREWALL, 14))
- return TRUE
- end,
- ["info"] = function()
- return "dam "..(40 + get_level(FIREWALL, 150)).." dur "..(10 + get_level(FIREWALL, 14))
- end,
- ["desc"] = {
- "Creates a fiery wall to incinerate monsters stupid enough to attack you",
- "At level 6 it turns into a wall of hell fire"
- }
-}
-
-FIREGOLEM = add_spell
-{
- ["name"] = "Fire Golem",
- ["school"] = {SCHOOL_FIRE, SCHOOL_MIND},
- ["level"] = 7,
- ["mana"] = 16,
- ["mana_max"] = 70,
- ["fail"] = 40,
- ["spell"] = function()
- local m_idx, y, x, ret, item
-
- -- Can we reconnect ?
- if do_control_reconnect() == TRUE then
- msg_print("Control re-established.")
- return
- end
-
- ret, item = get_item("Which light source do you want to use to create the golem?",
- "You have no light source for the golem",
- bor(USE_INVEN, USE_EQUIP),
- function (obj)
- if (obj.tval == TV_LITE) and ((obj.sval == SV_LITE_TORCH) or (obj.sval == SV_LITE_LANTERN)) then
- return TRUE
- end
- return FALSE
- end
- )
- if ret == FALSE then return TRUE end
- inven_item_increase(item, -1)
- inven_item_describe(item)
- inven_item_optimize(item)
-
- -- Summon it
- m_allow_special[1043 + 1] = TRUE
- y, x = find_position(player.py, player.px)
- m_idx = place_monster_one(y, x, 1043, 0, FALSE, MSTATUS_FRIEND)
- m_allow_special[1043 + 1] = FALSE
-
- -- level it
- if m_idx ~= 0 then
- monster_set_level(m_idx, 7 + get_level(FIREGOLEM, 70))
- player.control = m_idx
- monster(m_idx).mflag = bor(monster(m_idx).mflag, MFLAG_CONTROL)
- end
- return TRUE
- end,
- ["info"] = function()
- return "golem level "..(7 + get_level(FIREGOLEM, 70))
- end,
- ["desc"] = {
- "Creates a fiery golem and controls it",
- "During the control the available keylist is:",
- "Movement keys: movement of the golem(depending on its speed",
- " it can move more than one square)",
- ", : pickup all items on the floor",
- "d : drop all carried items",
- "i : list all carried items",
- "m : end the possession/use golem powers",
- "Most of the other keys are disabled, you cannot interact with your",
- "real body while controlling the golem",
- "But to cast the spell you will need a lantern or a wooden torch to",
- "Create the golem from"
- }
-}
diff --git a/lib/mods/theme/scpt/s_geom.lua b/lib/mods/theme/scpt/s_geom.lua
deleted file mode 100644
index b9730318..00000000
--- a/lib/mods/theme/scpt/s_geom.lua
+++ /dev/null
@@ -1,656 +0,0 @@
--- Geomancy school
-
-function geomancy_random_wall(y, x)
- local c_ptr = cave(y, x)
-
- -- Do not destroy permanent things
- if cave_is(c_ptr, FF1_PERMANENT) ~= FALSE then return end
-
- local feat = nil
- local table =
- {
- [1] = { SKILL_FIRE, FEAT_SANDWALL, 1},
-
- [2] = { SKILL_WATER, FEAT_TREES, 1},
- [3] = { SKILL_WATER, FEAT_ICE_WALL, 12},
-
- [4] = { SKILL_EARTH, FEAT_WALL_EXTRA, 1},
- }
-
- while feat == nil do
- local t = table[randint(getn(table))]
-
- -- Do we meet the requirements ?
- -- And then select the features based on skill proportions
- if get_skill(t[1]) >= t[3] and magik(get_skill_scale(t[1], 100)) == TRUE then
- feat = t[2]
- end
- end
-
- cave_set_feat(y, x, feat)
-end
-
-
-GF_ELEMENTAL_WALL = add_spell_type
-{
- ["color"] = { TERM_GREEN, 0 },
- ["angry"] = function() return TRUE, FALSE end,
- ["grid"] = function(who, dam, rad, y, x)
- if player.py ~= y or player.px ~= x then
- geomancy_random_wall(y, x)
- end
- end,
-}
-
-function geomancy_random_floor(y, x, kill_wall)
- local c_ptr = cave(y, x)
-
- -- Do not destroy permanent things
- if cave_is(c_ptr, FF1_PERMANENT) ~= FALSE then return end
- if not kill_wall then
- if cave_is(c_ptr, FF1_FLOOR) ~= TRUE then return end
- end
-
- local feat = nil
- local table =
- {
- [1] = { SKILL_FIRE, FEAT_SAND, 1},
- [2] = { SKILL_FIRE, FEAT_SHAL_LAVA, 8},
- [3] = { SKILL_FIRE, FEAT_DEEP_LAVA, 18},
-
- [4] = { SKILL_WATER, FEAT_SHAL_WATER, 1},
- [5] = { SKILL_WATER, FEAT_DEEP_WATER, 8},
- [6] = { SKILL_WATER, FEAT_ICE, 18},
-
- [7] = { SKILL_EARTH, FEAT_GRASS, 1},
- [8] = { SKILL_EARTH, FEAT_FLOWER, 8},
- [9] = { SKILL_EARTH, FEAT_DARK_PIT, 18},
- }
-
- while feat == nil do
- local t = table[randint(getn(table))]
-
- -- Do we meet the requirements ?
- -- And then select the features based on skill proportions
- if get_skill(t[1]) >= t[3] and magik(get_skill_scale(t[1], 100)) == TRUE then
- feat = t[2]
- end
- end
-
- cave_set_feat(y, x, feat)
-end
-
-
-GF_ELEMENTAL_GROWTH = add_spell_type
-{
- ["color"] = { TERM_GREEN, 0 },
- ["angry"] = function() return TRUE, FALSE end,
- ["grid"] = function(who, dam, rad, y, x)
- geomancy_random_floor(y, x)
- end,
-}
-
-CALL_THE_ELEMENTS = add_spell
-{
- ["name"] = "Call the Elements",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 1,
- ["mana"] = 2,
- ["mana_max"] = 20,
- ["fail"] = 10,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- ["random"] = 0,
- ["spell"] = function()
- local ret, dir = 0, 0
-
- if get_level(CALL_THE_ELEMENTS) >= 17 then
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- end
-
- fire_ball(GF_ELEMENTAL_GROWTH, dir, 1, 1 + get_level(CALL_THE_ELEMENTS, 5, 0))
- return TRUE
- end,
- ["info"] = function()
- return "rad "..(1 + get_level(CALL_THE_ELEMENTS, 5, 0))
- end,
- ["desc"] = {
- "Randomly creates various elements around you",
- "Each type of element chance is controlled by your level",
- "in the corresponding skill",
- "At level 17 it can be targeted",
- }
-}
-
--- Seperate function because an other spell needs it
-function channel_the_elements(y, x, level, silent)
- local t =
- {
- -- Earth stuff
- [FEAT_GRASS] = function()
- hp_player(player.mhp * (5 + get_skill_scale(SKILL_EARTH, 20)) / 100)
- end,
- [FEAT_FLOWER] = function()
- hp_player(player.mhp * (5 + get_skill_scale(SKILL_EARTH, 30)) / 100)
- end,
- [FEAT_DARK_PIT] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- local type = GF_DARK
- if get_skill(SKILL_EARTH) >= 18 then type = GF_NETHER end
- fire_bolt(type, dir, damroll(10, get_skill(SKILL_EARTH)))
- end,
-
- -- Water stuff
- [FEAT_SHAL_WATER] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- local type = GF_WATER
- if get_skill(SKILL_WATER) >= 18 then type = GF_WAVE end
-
- if get_skill(SKILL_WATER) >= 8 then
- fire_beam(type, dir, damroll(3, get_skill(SKILL_WATER)))
- else
- fire_bolt(type, dir, damroll(3, get_skill(SKILL_WATER)))
- end
- end,
- [FEAT_DEEP_WATER] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- local type = GF_WATER
- if get_skill(SKILL_WATER) >= 18 then type = GF_WAVE end
-
- if get_skill(SKILL_WATER) >= 8 then
- fire_beam(type, dir, damroll(5, get_skill(SKILL_WATER)))
- else
- fire_bolt(type, dir, damroll(5, get_skill(SKILL_WATER)))
- end
- end,
- [FEAT_ICE] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- if get_skill(SKILL_WATER) >= 12 then
- fire_ball(GF_ICE, dir, get_skill_scale(SKILL_WATER, 340), 3)
- else
- fire_bolt(GF_ICE, dir, damroll(3, get_skill(SKILL_WATER)))
- end
- end,
-
- -- Fire stuff
- [FEAT_SAND] = function()
- local type
- if (get_level(FIERYAURA, 50) >= 8) then
- type = SHIELD_GREAT_FIRE
- else
- type = SHIELD_FIRE
- end
- local dur = randint(20) + %level + get_skill(SKILL_AIR)
- set_shield(dur, 0, type, 5 + get_skill_scale(SKILL_FIRE, 20), 5 + get_skill_scale(SKILL_FIRE, 14))
- set_blind(dur)
- end,
- [FEAT_SHAL_LAVA] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- if get_skill(SKILL_FIRE) >= 15 then
- fire_bolt(GF_HELL_FIRE, dir, damroll(get_skill_scale(SKILL_FIRE, 30), 15))
- else
- fire_bolt(GF_FIRE, dir, damroll(get_skill_scale(SKILL_FIRE, 30), 15))
- end
- end,
- [FEAT_DEEP_LAVA] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- if get_skill(SKILL_FIRE) >= 15 then
- fire_ball(GF_HELL_FIRE, dir, damroll(get_skill_scale(SKILL_FIRE, 30), 15), 3)
- else
- fire_ball(GF_FIRE, dir, damroll(get_skill_scale(SKILL_FIRE, 30), 15), 3)
- end
- end,
- }
-
- if t[cave(y, x).feat] then
- t[cave(y, x).feat]()
-
- if magik(100 - level) == TRUE then
- if cave(y, x).feat == FEAT_FLOWER then
- cave_set_feat(y, x, FEAT_GRASS)
- else
- cave_set_feat(y, x, FEAT_FLOOR)
- end
- msg_print("The area is drained.")
- end
- elseif not silent then
- msg_print("You cannot channel this area.")
- end
-end
-
-CHANNEL_ELEMENTS = add_spell
-{
- ["name"] = "Channel Elements",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 3,
- ["mana"] = 3,
- ["mana_max"] = 30,
- ["fail"] = 20,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- ["random"] = 0,
- ["spell"] = function()
- channel_the_elements(player.py, player.px, get_level(CHANNEL_ELEMENTS), nil)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Draws on the caster's immediate environs to form an attack or other effect.",
- "Grass/Flower heals.",
- "Water creates water bolt attacks.",
- "Ice creates ice bolt attacks.",
- "Sand creates a wall of thick, blinding, burning sand around you.",
- "Lava creates fire bolt attacks.",
- "Deep lava creates fire ball attacks.",
- "Chasm creates darkness bolt attacks.",
- "At Earth level 18, darkness becomes nether.",
- "At Water level 8, water attacks become beams with a striking effect.",
- "At Water level 12, ice attacks become balls of ice shards.",
- "At Water level 18, water attacks push monsters back.",
- "At Fire level 15, fire become hellfire.",
- }
-}
-
-ELEMENTAL_WAVE = add_spell
-{
- ["name"] = "Elemental Wave",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 15,
- ["mana"] = 15,
- ["mana_max"] = 50,
- ["fail"] = 20,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- ["random"] = 0,
- ["spell"] = function()
- local ret, dir = get_rep_dir()
- if ret == FALSE then return end
-
- local y, x = explode_dir(dir)
- y = y + player.py
- x = x + player.px
-
- local t =
- {
- -- Earth stuff
- [FEAT_GRASS] = { GF_POIS, GF_POIS, 10 + get_skill_scale(SKILL_EARTH, 200) },
- [FEAT_FLOWER] = { GF_POIS, GF_POIS, 10 + get_skill_scale(SKILL_EARTH, 300) },
- -- cannot turn chasm into a wave
-
- -- Water stuff
- [FEAT_SHAL_WATER] = { GF_WATER, GF_WATER, 10 + get_skill_scale(SKILL_WATER, 200) },
- [FEAT_DEEP_WATER] = { GF_WATER, GF_WATER, 10 + get_skill_scale(SKILL_WATER, 300) },
- [FEAT_ICE] = { GF_ICE, GF_ICE, 10 + get_skill_scale(SKILL_WATER, 200) },
-
- -- Fire stuff
- [FEAT_SAND] = { GF_LITE, GF_LITE, 10 + get_skill_scale(SKILL_FIRE, 400) },
- [FEAT_SHAL_LAVA] = { GF_FIRE, GF_HOLY_FIRE, 10 + get_skill_scale(SKILL_FIRE, 200) },
- [FEAT_DEEP_LAVA] = { GF_FIRE, GF_HOLY_FIRE, 10 + get_skill_scale(SKILL_FIRE, 300) },
- }
-
-
- local effect = t[cave(y, x).feat]
- if not effect then
- msg_print("You cannot channel this area.")
- else
- local typ = effect[1]
- if get_level(ELEMENTAL_WAVE) >= 20 then typ = effect[2] end
-
- cave_set_feat(y, x, FEAT_FLOOR)
-
- fire_wave(typ, 0, effect[3], 0, 6 + get_level(ELEMENTAL_WAVE, 20), EFF_WAVE + EFF_LAST + getglobal("EFF_DIR"..dir))
- end
-
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Draws on an adjacent special square to project a slow-moving",
- "wave of that element in that direction",
- "Abyss squares cannot be channeled into a wave.",
- }
-}
-
-VAPORIZE = add_spell
-{
- ["name"] = "Vaporize",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 4,
- ["mana"] = 3,
- ["mana_max"] = 30,
- ["fail"] = 15,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- -- Must have at least 4 Air
- ["random"] = 0,
- ["depend"] = function()
- if get_skill(SKILL_AIR) >= 4 then return TRUE end
- end,
- ["spell"] = function()
- local t =
- {
- -- Earth stuff
- [FEAT_GRASS] = { GF_POIS, GF_POIS, 5 + get_skill_scale(SKILL_EARTH, 100) },
- [FEAT_FLOWER] = { GF_POIS, GF_POIS, 5 + get_skill_scale(SKILL_EARTH, 150) },
- [FEAT_DARK_PIT] = { GF_DARK, GF_DARK, 5 + get_skill_scale(SKILL_EARTH, 200) },
-
- -- Water stuff
- [FEAT_SHAL_WATER] = { GF_WATER, GF_WATER, 5 + get_skill_scale(SKILL_WATER, 100) },
- [FEAT_DEEP_WATER] = { GF_WATER, GF_WATER, 5 + get_skill_scale(SKILL_WATER, 150) },
- [FEAT_ICE] = { GF_ICE, GF_ICE, 5 + get_skill_scale(SKILL_WATER, 100) },
-
- -- Fire stuff
- [FEAT_SAND] = { GF_LITE, GF_LITE, 5 + get_skill_scale(SKILL_FIRE, 200) },
- [FEAT_SHAL_LAVA] = { GF_FIRE, GF_HOLY_FIRE, 5 + get_skill_scale(SKILL_FIRE, 100) },
- [FEAT_DEEP_LAVA] = { GF_FIRE, GF_HOLY_FIRE, 5 + get_skill_scale(SKILL_FIRE, 150) },
- }
-
- local effect = t[cave(player.py, player.px).feat]
- if not effect then
- msg_print("You cannot channel this area.")
- else
- local typ = effect[1]
- if get_level(VAPORIZE) >= 20 then typ = effect[2] end
-
- cave_set_feat(player.py, player.px, FEAT_FLOOR)
-
- fire_cloud(typ, 0, effect[3], 1 + get_level(VAPORIZE, 4), 10 + get_level(VAPORIZE, 20))
- end
-
- return TRUE
- end,
- ["info"] = function()
- return "rad "..(1 + get_level(VAPORIZE, 4)).." dur "..(10 + get_level(VAPORIZE, 20))
- end,
- ["desc"] = {
- "Draws upon your immediate environs to form a cloud of damaging vapors",
- }
-}
-
-geomancy_can_tunnel =
-{
- [FEAT_WALL_EXTRA] = TRUE,
- [FEAT_WALL_OUTER] = TRUE,
- [FEAT_WALL_INNER] = TRUE,
- [FEAT_WALL_SOLID] = TRUE,
-
- [FEAT_MAGMA] = TRUE,
- [FEAT_QUARTZ] = TRUE,
- [FEAT_MAGMA_H] = TRUE,
- [FEAT_QUARTZ_H] = TRUE,
- [FEAT_MAGMA_K] = TRUE,
- [FEAT_QUARTZ_K] = TRUE,
-
- [FEAT_TREES] = TRUE,
- [FEAT_DEAD_TREE] = TRUE,
-
- [FEAT_SANDWALL] = TRUE,
- [FEAT_SANDWALL_H] = TRUE,
- [FEAT_SANDWALL_K] = TRUE,
-
- [FEAT_ICE_WALL] = TRUE,
-}
-
--- Dig & sprew
-function geomancy_dig(oy, ox, dir, length)
- local dy, dx = explode_dir(dir)
- local y = dy + oy
- local x = dx + ox
-
- for i = 1, length do
- local c_ptr = cave(y, x)
- local ox = x - dx
- local oy = y - dy
-
- -- stop at the end of tunnelable things
- if not geomancy_can_tunnel[c_ptr.feat] then break end
-
- if geomancy_can_tunnel[cave(y - 1, x - 1).feat] then geomancy_random_wall(y - 1, x - 1) end
- if geomancy_can_tunnel[cave(y - 1, x).feat] then geomancy_random_wall(y - 1, x) end
- if geomancy_can_tunnel[cave(y - 1, x + 1).feat] then geomancy_random_wall(y - 1, x + 1) end
-
- if geomancy_can_tunnel[cave(y, x - 1).feat] then geomancy_random_wall(y, x - 1) end
- if geomancy_can_tunnel[cave(y, x + 1).feat] then geomancy_random_wall(y, x + 1) end
-
- if geomancy_can_tunnel[cave(y + 1, x - 1).feat] then geomancy_random_wall(y + 1, x - 1) end
- if geomancy_can_tunnel[cave(y + 1, x).feat] then geomancy_random_wall(y + 1, x) end
- if geomancy_can_tunnel[cave(y + 1, x + 1).feat] then geomancy_random_wall(y + 1, x + 1) end
-
- y = y + dy
- x = x + dx
- end
-
- y = y - dy
- x = x - dx
- while (y ~= oy) or (x ~= ox) do
- geomancy_random_floor(y, x, TRUE)
-
- -- Should we branch ?
- if magik(20) == TRUE then
- local rot = 1
- if magik(50) == TRUE then rot = -1 end
- geomancy_dig(y, x, rotate_dir(dir, rot), length / 3)
- end
-
- y = y - dy
- x = x - dx
- end
-end
-
-GEOLYSIS = add_spell
-{
- ["name"] = "Geolysis",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 7,
- ["mana"] = 15,
- ["mana_max"] = 40,
- ["fail"] = 15,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- ["random"] = 0,
- -- Must have at least 7 Earth
- ["depend"] = function()
- if get_skill(SKILL_EARTH) >= 7 then return TRUE end
- end,
- ["spell"] = function()
- local ret, dir = get_rep_dir()
- if ret == FALSE then return end
-
- msg_print("Elements recombine before you, laying down an open path.")
- geomancy_dig(player.py, player.px, dir, 5 + get_level(GEOLYSIS, 12))
-
- return TRUE
- end,
- ["info"] = function()
- return "length "..(5 + get_level(GEOLYSIS, 12))
- end,
- ["desc"] = {
- "Burrows deeply and slightly at random into a wall,",
- "leaving behind tailings of various different sorts of walls in the passage.",
- }
-}
-
-player.dripping_tread = 0
-add_loadsave("player.dripping_tread", 0)
-add_hooks
-{
- [HOOK_MOVED] = function(oy, ox)
- if player.dripping_tread > 0 then
- geomancy_random_floor(oy, ox)
- player.dripping_tread = player.dripping_tread - 1
- if player.dripping_tread == 0 then
- msg_print("You stop dripping raw elemental energies.")
- end
- end
- end
-}
-DRIPPING_TREAD = add_spell
-{
- ["name"] = "Dripping Tread",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 10,
- ["mana"] = 15,
- ["mana_max"] = 25,
- ["fail"] = 15,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- ["random"] = 0,
- -- Must have at least 10 Water
- ["depend"] = function()
- if get_skill(SKILL_WATER) >= 10 then return TRUE end
- end,
- ["spell"] = function()
- if player.dripping_tread == 0 then
- player.dripping_tread = randint(15) + 10 + get_level(DRIPPING_TREAD)
- msg_print("You start dripping raw elemental energies.")
- else
- player.dripping_tread = 0
- msg_print("You stop dripping raw elemental energies.")
- end
- return TRUE
- end,
- ["info"] = function()
- return "dur "..(10 + get_level(DRIPPING_TREAD)).."+d15 movs"
- end,
- ["desc"] = {
- "Causes you to leave random elemental forms behind as you walk",
- }
-}
-
-GROW_BARRIER = add_spell
-{
- ["name"] = "Grow Barrier",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 12,
- ["mana"] = 30,
- ["mana_max"] = 40,
- ["fail"] = 15,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- ["random"] = 0,
- -- Must have at least 12 Earth
- ["depend"] = function()
- if get_skill(SKILL_EARTH) >= 12 then return TRUE end
- end,
- ["spell"] = function()
- local ret, dir = 0, 0
-
- if get_level(GROW_BARRIER) >= 20 then
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- end
-
- fire_ball(GF_ELEMENTAL_WALL, dir, 1, 1)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Creates impassable terrain (walls, trees, etc.) around you.",
- "At level 20 it can be projected around another area.",
- }
-}
-
-ELEMENTAL_MINION = add_spell
-{
- ["name"] = "Elemental Minion",
- ["school"] = {SCHOOL_GEOMANCY},
- ["level"] = 20,
- ["mana"] = 40,
- ["mana_max"] = 80,
- ["fail"] = 25,
- -- Unnafected by blindness
- ["random"] = 0,
- -- Must have at least 12 Earth
- ["spell"] = function()
- local ret, dir = 0, 0
-
- ret, dir = get_rep_dir()
- if ret == FALSE then return end
-
- local t =
- {
- [FEAT_WALL_EXTRA] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_WALL_OUTER] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_WALL_INNER] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_WALL_SOLID] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_MAGMA] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_QUARTZ] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_MAGMA_H] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_QUARTZ_H] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_MAGMA_K] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
- [FEAT_QUARTZ_K] = { SKILL_EARTH, { "Earth elemental", "Xorn", "Xaren" } },
-
- [FEAT_DARK_PIT] = { SKILL_AIR, { "Air elemental", "Ancient blue dragon", "Great Storm Wyrm", "Sky Drake" } },
-
- [FEAT_SANDWALL] = { SKILL_FIRE, { "Fire elemental", "Ancient red dragon" } },
- [FEAT_SANDWALL_H] = { SKILL_FIRE, { "Fire elemental", "Ancient red dragon" } },
- [FEAT_SANDWALL_K] = { SKILL_FIRE, { "Fire elemental", "Ancient red dragon" } },
- [FEAT_SHAL_LAVA] = { SKILL_FIRE, { "Fire elemental", "Ancient red dragon" } },
- [FEAT_DEEP_LAVA] = { SKILL_FIRE, { "Fire elemental", "Ancient red dragon" } },
-
- [FEAT_ICE_WALL] = { SKILL_WATER, { "Water elemental", "Water troll", "Water demon" } },
- [FEAT_SHAL_WATER] = { SKILL_WATER, { "Water elemental", "Water troll", "Water demon" } },
- [FEAT_DEEP_WATER] = { SKILL_WATER, { "Water elemental", "Water troll", "Water demon" } },
- }
-
- local y, x = explode_dir(dir)
- y = y + player.py
- x = x + player.px
-
- local effect = t[cave(y, x).feat]
- if not effect then
- msg_print("You cannot summon from this area.")
- else
- local skill = effect[1]
- local types = effect[2]
-
- local max = get_skill_scale(skill, getn(types))
- if max == 0 then max = 1 end
-
- local r_idx = test_monster_name(types[rand_range(1, max)])
-
- -- Summon it
- local my, mx = find_position(y, x)
- local m_idx = place_monster_one(my, mx, r_idx, 0, FALSE, MSTATUS_FRIEND)
-
- -- level it
- if m_idx ~= 0 then
- monster_set_level(m_idx, 10 + get_level(ELEMENTAL_MINION, 120))
- end
-
- cave_set_feat(y, x, FEAT_FLOOR)
- end
-
- return TRUE
- end,
- ["info"] = function()
- return "min level "..(10 + get_level(ELEMENTAL_MINION, 120))
- end,
- ["desc"] = {
- "Summons a minion from a nearby element.",
- "Walls can summon Earth elmentals, Xorns and Xarens",
- "Dark Pits can summon Air elementals, Ancient blue dragons, Great Storm Wyrms",
- "and Sky Drakes",
- "Sandwalls and lava can summon Fire elementals and Ancient red dragons",
- "Icewall, and water can summon Water elementals, Water trolls and Water demons",
- }
-}
diff --git a/lib/mods/theme/scpt/s_mana.lua b/lib/mods/theme/scpt/s_mana.lua
deleted file mode 100644
index 736b06b0..00000000
--- a/lib/mods/theme/scpt/s_mana.lua
+++ /dev/null
@@ -1,132 +0,0 @@
--- The mana school
-
-function get_manathrust_dam()
- return 3 + get_level(MANATHRUST, 50), 1 + get_level(MANATHRUST, 20)
-end
-
-MANATHRUST = add_spell
-{
- ["name"] = "Manathrust",
- ["school"] = SCHOOL_MANA,
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 25,
- ["fail"] = 10,
- ["stick"] =
- {
- ["charge"] = { 7, 10 },
- [TV_WAND] =
- {
- ["rarity"] = 5,
- ["base_level"] = { 1, 20 },
- ["max_level"] = { 15, 33 },
- },
- },
- ["spell"] = function()
- local ret, dir
-
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_bolt(GF_MANA, dir, damroll(get_manathrust_dam()))
- end,
- ["info"] = function()
- local x, y
-
- x, y = get_manathrust_dam()
- return "dam "..x.."d"..y
- end,
- ["desc"] = {
- "Conjures up mana into a powerful bolt",
- "The damage is irresistible and will increase with level"
- }
-}
-
-DELCURSES = add_spell
-{
- ["name"] = "Remove Curses",
- ["school"] = SCHOOL_MANA,
- ["level"] = 10,
- ["mana"] = 20,
- ["mana_max"] = 40,
- ["fail"] = 30,
- ["stick"] =
- {
- ["charge"] = { 3, 8 },
- [TV_STAFF] =
- {
- ["rarity"] = 70,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 15, 50 },
- },
- },
- ["inertia"] = { 1, 10 },
- ["spell"] = function()
- local done
-
- if get_level(DELCURSES, 50) >= 20 then done = remove_all_curse()
- else done = remove_curse() end
- if done == TRUE then msg_print("The curse is broken!") end
- return done
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Remove curses of worn objects",
- "At level 20 switches to *remove curses*"
- }
-}
-
-RESISTS = add_spell
-{
- ["name"] = "Elemental Shield",
- ["school"] = SCHOOL_MANA,
- ["level"] = 20,
- ["mana"] = 17,
- ["mana_max"] = 20,
- ["fail"] = 40,
- ["inertia"] = { 2, 25 },
- ["spell"] = function()
- local obvious
- if player.oppose_fire == 0 then obvious = set_oppose_fire(randint(10) + 15 + get_level(RESISTS, 50)) end
- if player.oppose_cold == 0 then obvious = is_obvious(set_oppose_cold(randint(10) + 15 + get_level(RESISTS, 50)), obvious) end
- if player.oppose_elec == 0 then obvious = is_obvious(set_oppose_elec(randint(10) + 15 + get_level(RESISTS, 50)), obvious) end
- if player.oppose_acid == 0 then obvious = is_obvious(set_oppose_acid(randint(10) + 15 + get_level(RESISTS, 50)), obvious) end
- return obvious
- end,
- ["info"] = function()
- return "dur "..(15 + get_level(RESISTS, 50)).."+d10"
- end,
- ["desc"] = {
- "Provide resistances to the four basic elements",
- }
-}
-
-MANASHIELD = add_spell
-{
- ["name"] = "Disruption Shield",
- ["school"] = SCHOOL_MANA,
- ["level"] = 45,
- ["mana"] = 50,
- ["mana_max"] = 50,
- ["fail"] = 90,
- ["inertia"] = { 9, 10},
- ["spell"] = function()
- if get_level(MANASHIELD, 50) >= 5 then
- if (player.invuln == 0) then
- return set_invuln(randint(5) + 3 + get_level(MANASHIELD, 10))
- end
- else
- if (player.disrupt_shield == 0) then return set_disrupt_shield(randint(5) + 3 + get_level(MANASHIELD, 10)) end
- end
- end,
- ["info"] = function()
- return "dur "..(3 + get_level(MANASHIELD, 10)).."+d5"
- end,
- ["desc"] = {
- "Uses mana instead of hp to take damage",
- "At level 5 switches to Globe of Invulnerability.",
- "The spell breaks as soon as a melee, shooting, throwing or magical",
- "skill action is attempted, and lasts only a short time."
- }
-}
diff --git a/lib/mods/theme/scpt/s_mandos.lua b/lib/mods/theme/scpt/s_mandos.lua
deleted file mode 100644
index cc7e346a..00000000
--- a/lib/mods/theme/scpt/s_mandos.lua
+++ /dev/null
@@ -1,186 +0,0 @@
--- Spells for the school of Mandos
-
-BOOK_MANDOS = 66
-
--- precognition timer for high-level spell [from T-Plus by Ingeborg S. Norden]
-
-add_loadsave("tim_precognition",0)
-
-function set_precognition(v)
- local notice = FALSE
- if (v < 0) then v = 0 end
- if (v > 10000) then v = 10000 end
-
- -- Check if the state will change
- if (v > 0) and (tim_precognition == 0) then
- msg_print("You feel able to predict the future.")
- notice = TRUE
- elseif (v == 0) and (tim_precognition > 0) then
- msg_print("You feel less able to predict the future.")
- notice = TRUE
- end
-
- -- set the new value
- tim_precognition = v
-
- if (notice == TRUE) then
- player.update = bor(player.update, PU_BONUS)
- disturb(0,0)
- end
- return notice
-end
-
--- related hooks
-
-add_hooks{
- [HOOK_CALC_BONUS] = function()
- if (tim_precognition > 0) then
- --player.precognition = TRUE
- apply_flags(0, 0, 0, TR4_PRECOGNITION, 0, 0, 0, 0, 0, 0, 0)
- end
- end,
-
- [HOOK_PROCESS_WORLD] = function()
- if (tim_precognition > 0) then
- set_precognition(tim_precognition - 1)
- end
- end,
-}
-
--- "Tears of Luthien" based on Holy Word from T-Plus
-MANDOS_TEARS_LUTHIEN = add_spell
-{
- ["name"] = "Tears of Luthien",
- ["school"] = {SCHOOL_MANDOS},
- ["level"] = 5,
- ["mana"] = 10,
- ["mana_max"] = 100,
- ["fail"] = 25,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local level = get_level(MANDOS_TEARS_LUTHIEN, 30)
- local obvious = hp_player(10 * level)
- obvious = is_obvious (set_stun(0), obvious)
- obvious = is_obvious (set_cut(0), obvious)
- obvious = is_obvious (set_afraid(0), obvious)
- return obvious
- end,
- ["info"] = function()
- local level = get_level(MANDOS_TEARS_LUTHIEN, 30)
- return "heals "..(10 * level)
- end,
- ["desc"] = {
- "Calls upon the spirit of Luthien to ask Mandos for healing and succour."
- }
-}
-
--- "Spirit of the Feanturi" based on Restore Mind from T-Plus
-MANDOS_SPIRIT_FEANTURI = add_spell {
- ["name"] = "Feanturi",
- ["school"] = {SCHOOL_MANDOS},
- ["level"] = 10,
- ["mana"] = 40,
- ["mana_max"] = 200,
- ["fail"] = 50,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local level = get_level(MANDOS_SPIRIT_FEANTURI, 50)
- local obvious
- obvious = set_afraid(0)
- obvious = is_obvious(set_confused(0), obvious)
-
- if level >= 20 then
- obvious = is_obvious(do_res_stat(A_WIS, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_INT, TRUE), obvious)
- end
-
- if level >= 30 then
- obvious = is_obvious(set_image(0), obvious)
- obvious = is_obvious(heal_insanity(player.msane * level / 100), obvious)
- end
-
- return obvious
- end,
-
- ["info"] = function()
- local level = get_level(MANDOS_SPIRIT_FEANTURI, 50)
- if level >= 20 then
- return "heals "..level.."%"
- else
- return ""
- end
- end,
- ["desc"] = {
- "Channels the power of Mandos to cure fear and confusion.",
- "At level 20 it restores lost INT and WIS",
- "At level 30 it cures hallucinations and restores a percentage of lost sanity"
- }
-}
-
--- "Tale of Doom" based on Foretell from T-Plus
-MANDOS_TALE_DOOM = add_spell
-{
- ["name"] = "Tale of Doom",
- ["school"] = {SCHOOL_MANDOS},
- ["level"] = 25,
- ["mana"] = 60,
- ["mana_max"] = 300,
- ["stat"] = A_WIS,
- ["fail"] = 75,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- return set_precognition(5 + get_level(MANDOS_TALE_DOOM,10))
- end,
- ["info"] = function()
- return "dur "..(5 + get_level(MANDOS_TALE_DOOM,10))
- end,
- ["desc"] = {
- "Allows you to predict the future for a short time."
- }
-}
-
--- "Call to the Halls" based on Call Blessed Soul from T-Plus
-MANDOS_CALL_HALLS= add_spell
-
-{
- ["name"] = "Call to the Halls",
- ["school"] = {SCHOOL_MANDOS},
- ["level"] = 30,
- ["mana"] = 80,
- ["mana_max"] = 400,
- ["fail"] = 95,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local y, x, m_idx
- local summons =
- {
- test_monster_name("Experienced spirit"),
- test_monster_name("Wise spirit"),
- }
- y, x = find_position(player.py, player.px)
- m_idx = place_monster_one(y, x, summons[rand_range(1, 2)], 0, FALSE, MSTATUS_FRIEND)
- if m_idx ~= 0 then
- monster_set_level(m_idx, 20 + get_level(MANDOS_CALL_HALLS, 70, 0))
- return TRUE
- end
- end,
-
- ["info"] = function()
- return "level "..(get_level(MANDOS_CALL_HALLS, 70))
- end,
- ["desc"] = {
- "Summons a leveled spirit from the Halls of Mandos",
- "to fight for you."
-
- }
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/s_manwe.lua b/lib/mods/theme/scpt/s_manwe.lua
deleted file mode 100644
index 6f0f9661..00000000
--- a/lib/mods/theme/scpt/s_manwe.lua
+++ /dev/null
@@ -1,144 +0,0 @@
--- Handle Manwe Sulimo magic school
-
-MANWE_SHIELD = add_spell
-{
- ["name"] = "Wind Shield",
- ["school"] = {SCHOOL_MANWE},
- ["level"] = 10,
- ["mana"] = 100,
- ["mana_max"] = 500,
- ["fail"] = 30,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local dur = get_level(MANWE_SHIELD, 50) + 10 + randint(20)
- local obvious
-
- obvious = set_protevil(dur)
- if get_level(MANWE_SHIELD) >= 10 then
- local type
-
- type = 0
- if get_level(MANWE_SHIELD) >= 20 then
- type = SHIELD_COUNTER
- end
- obvious = is_obvious(set_shield(dur, get_level(MANWE_SHIELD, 30), type, 1 + get_level(MANWE_SHIELD, 2), 1 + get_level(MANWE_SHIELD, 6)), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- local desc = "dur "..(get_level(MANWE_SHIELD, 50) + 10).."+d20"
-
- if get_level(MANWE_SHIELD) >= 10 then
- desc = desc.." AC "..(get_level(MANWE_SHIELD, 30))
- end
- if get_level(MANWE_SHIELD) >= 20 then
- desc = desc.." dam "..(1 + get_level(MANWE_SHIELD, 2)).."d"..(1 + get_level(MANWE_SHIELD, 6))
- end
- return desc
- end,
- ["desc"] = {
- "It surrounds you with a shield of wind that deflects blows from evil monsters",
- "At level 10 it increases your armour rating",
- "At level 20 it retaliates against monsters that melee you",
- }
-}
-
-MANWE_AVATAR = add_spell
-{
- ["name"] = "Avatar",
- ["school"] = {SCHOOL_MANWE},
- ["level"] = 35,
- ["mana"] = 1000,
- ["mana_max"] = 1000,
- ["fail"] = 80,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- return set_mimic(get_level(MANWE_AVATAR, 20) + randint(10), resolve_mimic_name("Maia"), player.lev)
- end,
- ["info"] = function()
- return "dur "..(get_level(MANWE_AVATAR, 20)).."+d10"
- end,
- ["desc"] = {
- "It turns you into a full grown Maia",
- }
-}
-
-MANWE_BLESS = add_spell
-{
- ["name"] = "Manwe's Blessing",
- ["school"] = {SCHOOL_MANWE},
- ["level"] = 1,
- ["mana"] = 10,
- ["mana_max"] = 100,
- ["fail"] = 20,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local dur = get_level(MANWE_BLESS, 70) + 30 + randint(40)
- local obvious
-
- obvious = set_blessed(dur)
- obvious = is_obvious(set_afraid(0), obvious)
- obvious = is_obvious(set_lite(0), obvious)
- if get_level(MANWE_BLESS) >= 10 then
- obvious = is_obvious(set_hero(dur), obvious)
- end
- if get_level(MANWE_BLESS) >= 20 then
- obvious = is_obvious(set_shero(dur), obvious)
- end
- if get_level(MANWE_BLESS) >= 30 then
- obvious = is_obvious(set_holy(dur), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- return "dur "..(get_level(MANWE_BLESS, 70) + 30).."+d40"
- end,
- ["desc"] = {
- "Manwe's Blessing removes your fears, blesses you and surrounds you with",
- "holy light",
- "At level 10 it also grants heroism",
- "At level 20 it also grants super heroism",
- "At level 30 it also grants holy luck and life protection",
- }
-}
-
-MANWE_CALL = add_spell
-{
- ["name"] = "Manwe's Call",
- ["school"] = {SCHOOL_MANWE},
- ["level"] = 20,
- ["mana"] = 200,
- ["mana_max"] = 500,
- ["fail"] = 40,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local y, x, m_idx
-
- y, x = find_position(player.py, player.px)
- m_idx = place_monster_one(y, x, test_monster_name("Great eagle"), 0, FALSE, MSTATUS_FRIEND)
-
- if m_idx ~= 0 then
- monster_set_level(m_idx, 20 + get_level(MANWE_CALL, 70, 0))
- return TRUE
- end
- end,
- ["info"] = function()
- return "level "..(get_level(MANWE_CALL, 70) + 20)
- end,
- ["desc"] = {
- "Manwe's Call summons a Great Eagle to help you battle the forces",
- "of Morgoth"
- }
-}
diff --git a/lib/mods/theme/scpt/s_melkor.lua b/lib/mods/theme/scpt/s_melkor.lua
deleted file mode 100644
index b2c693dd..00000000
--- a/lib/mods/theme/scpt/s_melkor.lua
+++ /dev/null
@@ -1,154 +0,0 @@
--- handle the melkor school
-
--- Not included in the spell code directly because I need to call it from somewhere else too
-function do_melkor_curse(who)
- local m_ptr = monster(who)
-
- if get_level(MELKOR_CURSE) >= 35 then
- local r_ptr = race_info_idx(m_ptr.r_idx, m_ptr.ego)
-
- m_ptr.maxhp = m_ptr.maxhp - r_ptr.hside;
- if m_ptr.maxhp < 1 then m_ptr.maxhp = 1 end
- if m_ptr.hp > m_ptr.maxhp then m_ptr.hp = m_ptr.maxhp end
- player.redraw = bor(player.redraw, PR_HEALTH)
- end
- if get_level(MELKOR_CURSE) >= 25 then
- m_ptr.speed = m_ptr.speed - get_level(MELKOR_CURSE, 7)
- m_ptr.mspeed = m_ptr.mspeed - get_level(MELKOR_CURSE, 7)
-
- if m_ptr.speed < 70 then m_ptr.speed = 70 end
- if m_ptr.mspeed < 70 then m_ptr.mspeed = 70 end
- end
- if get_level(MELKOR_CURSE) >= 15 then
- m_ptr.ac = m_ptr.ac - get_level(MELKOR_CURSE, 50)
-
- if m_ptr.ac < -70 then m_ptr.ac = -70 end
- end
-
- local i, pow
- i = 1
- pow = get_level(MELKOR_CURSE, 2)
- while (i <= 4) do
- if m_ptr.blow[i].d_dice > 0 then
- if m_ptr.blow[i].d_dice < pow then
- pow = m_ptr.blow[i].d_dice
- end
- if m_ptr.blow[i].d_side < pow then
- pow = m_ptr.blow[i].d_side
- end
- m_ptr.blow[i].d_dice = m_ptr.blow[i].d_dice - pow
- end
- i = i + 1
- end
-
- local m_name = monster_desc(m_ptr, 0).." looks weaker."
- msg_print(strupper(strsub(m_name, 0, 1))..strsub(m_name, 2))
-
- -- wake it
- m_ptr.csleep = 0;
-end
-
-MELKOR_CURSE = add_spell
-{
- ["name"] = "Curse",
- ["school"] = {SCHOOL_MELKOR},
- ["level"] = 1,
- ["mana"] = 50,
- ["mana_max"] = 300,
- ["fail"] = 20,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- if target_who == -1 then
- msg_print("You must target a monster.")
- else
- do_melkor_curse(target_who)
- end
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "It curses a monster, reducing its melee power",
- "At level 5 it can be auto-casted (with no piety cost) while fighting",
- "At level 15 it also reduces armor",
- "At level 25 it also reduces speed",
- "At level 35 it also reduces max life (but it is never fatal)",
- }
-}
-
-MELKOR_CORPSE_EXPLOSION = add_spell
-{
- ["name"] = "Corpse Explosion",
- ["school"] = {SCHOOL_MELKOR},
- ["level"] = 10,
- ["mana"] = 100,
- ["mana_max"] = 500,
- ["fail"] = 45,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- return fire_ball(GF_CORPSE_EXPL, 0, 20 + get_level(MELKOR_CORPSE_EXPLOSION, 70), 2 + get_level(MELKOR_CORPSE_EXPLOSION, 5))
- end,
- ["info"] = function()
- return "dam "..(20 + get_level(MELKOR_CORPSE_EXPLOSION, 70)).."%"
- end,
- ["desc"] = {
- "It makes corpses in an area around you explode for a percent of their",
- "hit points as damage",
- }
-}
-
-MELKOR_MIND_STEAL = add_spell
-{
- ["name"] = "Mind Steal",
- ["school"] = {SCHOOL_MELKOR},
- ["level"] = 20,
- ["mana"] = 1000,
- ["mana_max"] = 3000,
- ["fail"] = 90,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- if target_who == -1 then
- msg_print("You must target a monster.")
- else
- local chance, m_ptr, r_ptr
-
- m_ptr = monster(target_who)
- r_ptr = race_info_idx(m_ptr.r_idx, m_ptr.ego)
- chance = get_level(MELKOR_MIND_STEAL)
- if (randint(m_ptr.level) < chance) and (band(r_ptr.flags1, RF1_UNIQUE) == 0) then
- player.control = target_who
- m_ptr.mflag = bor(m_ptr.mflag, MFLAG_CONTROL)
-
- local m_name = monster_desc(m_ptr, 0).." falls under your control."
- msg_print(strupper(strsub(m_name, 0, 1))..strsub(m_name, 2))
- else
- local m_name = monster_desc(m_ptr, 0).." resists."
- msg_print(strupper(strsub(m_name, 0, 1))..strsub(m_name, 2))
- end
- return TRUE
- end
- end,
- ["info"] = function()
- return "chance 1d(mlvl)<"..(get_level(MELKOR_MIND_STEAL))
- end,
- ["desc"] = {
- "It allows your spirit to temporarily leave your own body, which will",
- "be vulnerable, to control one of your enemies body."
- }
-}
diff --git a/lib/mods/theme/scpt/s_meta.lua b/lib/mods/theme/scpt/s_meta.lua
deleted file mode 100644
index eab691d8..00000000
--- a/lib/mods/theme/scpt/s_meta.lua
+++ /dev/null
@@ -1,287 +0,0 @@
--- handle the meta school
-
-RECHARGE = add_spell
-{
- ["name"] = "Recharge",
- ["school"] = {SCHOOL_META},
- ["level"] = 5,
- ["mana"] = 10,
- ["mana_max"] = 100,
- ["fail"] = 20,
- ["spell"] = function()
- return recharge(60 + get_level(RECHARGE, 140))
- end,
- ["info"] = function()
- return "power "..(60 + get_level(RECHARGE, 140))
- end,
- ["desc"] = {
- "Taps on the ambient mana to recharge an object's power (charges or mana)",
- }
-}
-
-function get_spellbinder_max()
- local i
-
- i = get_level(SPELLBINDER, 4)
- if i > 4 then i = 4 end
- return i
-end
---'
-SPELLBINDER = add_spell
-{
- ["name"] = "Spellbinder",
- ["school"] = {SCHOOL_META},
- ["level"] = 20,
- ["mana"] = 100,
- ["mana_max"] = 300,
- ["fail"] = 85,
- ["spell"] = function()
- local i, ret, c
-
- if player.spellbinder_num ~= 0 then
- local t =
- {
- [SPELLBINDER_HP75] = "75% HP",
- [SPELLBINDER_HP50] = "50% HP",
- [SPELLBINDER_HP25] = "25% HP",
- }
- msg_print("The spellbinder is already active.")
- msg_print("It will trigger at "..t[player.spellbinder_trigger]..".")
- msg_print("With the spells: ")
- for i = 1, player.spellbinder_num do
- msg_print(spell(player.spellbinder[i]).name)
- end
- return TRUE
- end
-
- ret, c = get_com("Trigger at [a]75% hp [b]50% hp [c]25% hp?", strbyte("a"))
- if ret == FALSE then return TRUE end
-
- if c == strbyte("a") then
- player.spellbinder_trigger = SPELLBINDER_HP75
- elseif c == strbyte("b") then
- player.spellbinder_trigger = SPELLBINDER_HP50
- elseif c == strbyte("c") then
- player.spellbinder_trigger = SPELLBINDER_HP25
- else
- return
- end
- player.spellbinder_num = get_spellbinder_max()
- i = player.spellbinder_num
- while i > 0 do
- local s
-
- s = get_school_spell("bind", "is_ok_spell", 0)
- if s == -1 then
- player.spellbinder_trigger = 0
- player.spellbinder_num = 0
- return TRUE
- else
- if spell(s).skill_level > 7 + get_level(SPELLBINDER, 35) then
- msg_print("You are only allowed spells with a base level of "..(7 + get_level(SPELLBINDER, 35))..".");
- return TRUE
- end
- end
- player.spellbinder[i] = s
- i = i - 1
- end
- player.energy = player.energy - 3100;
- msg_print("Spellbinder ready.")
- return TRUE
- end,
- ["info"] = function()
- return "number "..(get_spellbinder_max()).." max level "..(7 + get_level(SPELLBINDER, 35))
- end,
- ["desc"] = {
- "Stores spells in a trigger.",
- "When the condition is met all spells fire off at the same time",
- "This spell takes a long time to cast so you are advised to prepare it",
- "in a safe area.",
- "Also it will use the mana for the Spellbinder and the mana for the",
- "selected spells"
- }
-}
-
-DISPERSEMAGIC = add_spell
-{
- ["name"] = "Disperse Magic",
- ["school"] = {SCHOOL_META},
- ["level"] = 15,
- ["mana"] = 30,
- ["mana_max"] = 60,
- ["fail"] = 40,
- -- Unnafected by blindness
- ["blind"] = FALSE,
- -- Unnafected by confusion
- ["confusion"] = FALSE,
- ["stick"] =
- {
- ["charge"] = { 5, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 25,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 5, 40 },
- },
- },
- ["inertia"] = { 1, 5 },
- ["spell"] = function()
- local obvious
- obvious = set_blind(0)
- obvious = is_obvious(set_lite(0), obvious)
- if get_level(DISPERSEMAGIC, 50) >= 5 then
- obvious = is_obvious(set_confused(0), obvious)
- obvious = is_obvious(set_image(0), obvious)
- end
- if get_level(DISPERSEMAGIC, 50) >= 10 then
- obvious = is_obvious(set_slow(0), obvious)
- obvious = is_obvious(set_fast(0, 0), obvious)
- obvious = is_obvious(set_light_speed(0), obvious)
- end
- if get_level(DISPERSEMAGIC, 50) >= 15 then
- obvious = is_obvious(set_stun(0), obvious)
- obvious = is_obvious(set_meditation(0), obvious)
- obvious = is_obvious(set_cut(0), obvious)
- end
- if get_level(DISPERSEMAGIC, 50) >= 20 then
- obvious = is_obvious(set_hero(0), obvious)
- obvious = is_obvious(set_shero(0), obvious)
- obvious = is_obvious(set_blessed(0), obvious)
- obvious = is_obvious(set_shield(0, 0, 0, 0, 0), obvious)
- obvious = is_obvious(set_afraid(0), obvious)
- obvious = is_obvious(set_parasite(0, 0), obvious)
- obvious = is_obvious(set_mimic(0, 0, 0), obvious)
- end
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Dispels a lot of magic that can affect you, be it good or bad",
- "Level 1: blindness and light",
- "Level 5: confusion and hallucination",
- "Level 10: speed (both bad or good) and light speed",
- "Level 15: stunning, meditation, cuts",
- "Level 20: hero, super hero, bless, shields, afraid, parasites, mimicry",
- }
-}
-
-TRACKER = add_spell
-{
- ["name"] = "Tracker",
- ["school"] = {SCHOOL_META, SCHOOL_CONVEYANCE},
- ["level"] = 30,
- ["mana"] = 50,
- ["mana_max"] = 50,
- ["fail"] = 95,
- ["spell"] = function()
- if last_teleportation_y == -1 then
- msg_print("There has not been any teleporatation here.")
- return TRUE
- end
- teleport_player_to(last_teleportation_y, last_teleportation_x)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Tracks down the last teleportation that happened on the level and teleports",
- "you to it",
- }
-}
-
--- Saves the values of the timer
-save_timer("TIMER_INERTIA_CONTROL")
-add_loadsave("player.inertia_controlled_spell", -1)
-player.inertia_controlled_spell = -1
-
--- Automatically cast the inertia controlled spells
-TIMER_INERTIA_CONTROL = new_timer
-{
- ["enabled"] = FALSE,
- ["delay"] = 10,
- ["callback"] = function()
- -- Don't cast a controlled spell in wilderness mode
- if player.antimagic then
- msg_print("Your anti-magic field disrupts any magic attempts.")
- elseif player.anti_magic then
- msg_print("Your anti-magic shell disrupts any magic attempts.")
- elseif (player.inertia_controlled_spell ~= -1) and (player.wild_mode == FALSE) then
- __spell_spell[player.inertia_controlled_spell]()
- end
- end,
-}
-
-stop_inertia_controlled_spell = function()
- player.inertia_controlled_spell = -1
- TIMER_INERTIA_CONTROL.enabled = FALSE
- player.update = bor(player.update, PU_MANA)
- return TRUE
-end
-
-add_hooks
-{
- -- Reduce the mana by four times the cost of the spell
- [HOOK_CALC_MANA] = function(msp)
- if player.inertia_controlled_spell ~= -1 then
- msp = msp - (get_mana(player.inertia_controlled_spell) * 4)
- if msp < 0 then msp = 0 end
- return TRUE, msp
- end
- end,
-
- -- Stop a previous spell at birth
- [HOOK_BIRTH_OBJECTS] = function()
- stop_inertia_controlled_spell()
- end,
-}
-
-INERTIA_CONTROL = add_spell
-{
- ["name"] = "Inertia Control",
- ["school"] = {SCHOOL_META},
- ["level"] = 37,
- ["mana"] = 300,
- ["mana_max"] = 700,
- ["fail"] = 95,
- ["spell"] = function()
- if player.inertia_controlled_spell ~= -1 then
- msg_print("You cancel your inertia flow control.")
- return stop_inertia_controlled_spell()
- end
-
- local s = get_school_spell("control", "is_ok_spell", 0)
- if s == -1 then
- return stop_inertia_controlled_spell()
- end
-
- local inertia = __tmp_spells[s].inertia
-
- if inertia == nil then
- msg_print("This spell inertia flow can not be controlled.")
- return stop_inertia_controlled_spell()
- end
- if inertia[1] > get_level(INERTIA_CONTROL, 10) then
- msg_print("This spell inertia flow("..inertia[1]..") is too strong to be controlled by your current spell.")
- return stop_inertia_controlled_spell()
- end
-
- player.inertia_controlled_spell = s
- TIMER_INERTIA_CONTROL.enabled = TRUE
- TIMER_INERTIA_CONTROL.delay = inertia[2]
- TIMER_INERTIA_CONTROL.countdown = TIMER_INERTIA_CONTROL.delay
- player.update = bor(player.update, PU_MANA)
- msg_print("Inertia flow controlling spell "..spell(s).name..".")
- return TRUE
- end,
- ["info"] = function()
- return "level "..get_level(INERTIA_CONTROL, 10)
- end,
- ["desc"] = {
- "Changes the energy flow of a spell to be continuously recasted",
- "at a given interval. The inertia controlled spell reduces your",
- "maximum mana by four times its cost.",
- }
-}
diff --git a/lib/mods/theme/scpt/s_mind.lua b/lib/mods/theme/scpt/s_mind.lua
deleted file mode 100644
index d1b25e9e..00000000
--- a/lib/mods/theme/scpt/s_mind.lua
+++ /dev/null
@@ -1,132 +0,0 @@
--- handle the mind school
-
-CHARM = add_spell
-{
- ["name"] = "Charm",
- ["school"] = {SCHOOL_MIND},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 20,
- ["fail"] = 10,
- ["stick"] =
- {
- ["charge"] = { 7, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 35,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 20, 40 },
- },
- },
- ["spell"] = function()
- if get_level(CHARM, 50) >= 35 then
- return project_los(GF_CHARM, 10 + get_level(CHARM, 150))
- elseif get_level(CHARM, 50) >= 15 then
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_ball(GF_CHARM, dir, 10 + get_level(CHARM, 150), 3)
- else
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_bolt(GF_CHARM, dir, 10 + get_level(CHARM, 150))
- end
- end,
- ["info"] = function()
- return "power "..(10 + get_level(CHARM, 150))
- end,
- ["desc"] = {
- "Tries to manipulate the mind of a monster to make it friendly",
- "At level 15 it turns into a ball",
- "At level 35 it affects all monsters in sight"
- }
-}
-
-CONFUSE = add_spell
-{
- ["name"] = "Confuse",
- ["school"] = {SCHOOL_MIND},
- ["level"] = 5,
- ["mana"] = 5,
- ["mana_max"] = 30,
- ["fail"] = 20,
- ["stick"] =
- {
- ["charge"] = { 3, 4 },
- [TV_WAND] =
- {
- ["rarity"] = 45,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 20, 40 },
- },
- },
- ["spell"] = function()
- if get_level(CONFUSE, 50) >= 35 then
- return project_los(GF_OLD_CONF, 10 + get_level(CONFUSE, 150))
- elseif get_level(CONFUSE, 50) >= 15 then
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_ball(GF_OLD_CONF, dir, 10 + get_level(CONFUSE, 150), 3)
- else
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_bolt(GF_OLD_CONF, dir, 10 + get_level(CONFUSE, 150))
- end
- end,
- ["info"] = function()
- return "power "..(10 + get_level(CONFUSE, 150))
- end,
- ["desc"] = {
- "Tries to manipulate the mind of a monster to confuse it",
- "At level 15 it turns into a ball",
- "At level 35 it affects all monsters in sight"
- }
-}
-
-ARMOROFFEAR = add_spell
-{
- ["name"] = "Armor of Fear",
- ["school"] = SCHOOL_MIND,
- ["level"] = 10,
- ["mana"] = 10,
- ["mana_max"] = 50,
- ["fail"] = 35,
- ["inertia"] = { 2, 20 },
- ["spell"] = function()
- return set_shield(randint(10) + 10 + get_level(ARMOROFFEAR, 100), 10, SHIELD_FEAR, 1 + get_level(ARMOROFFEAR, 7), 5 + get_level(ARMOROFFEAR, 20))
- end,
- ["info"] = function()
- return "dur "..(10 + get_level(ARMOROFFEAR, 100)).." power "..(1 + get_level(ARMOROFFEAR, 7)).."d"..(5 + get_level(ARMOROFFEAR, 20))
- end,
- ["desc"] = {
- "Creates a shield of pure fear around you. Any monster attempting to hit you",
- "must save or flee",
- }
-}
-
-STUN = add_spell
-{
- ["name"] = "Stun",
- ["school"] = {SCHOOL_MIND},
- ["level"] = 15,
- ["mana"] = 10,
- ["mana_max"] = 90,
- ["fail"] = 45,
- ["spell"] = function()
- if get_level(STUN, 50) >= 20 then
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_ball(GF_STUN, dir, 10 + get_level(STUN, 150), 3)
- else
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_bolt(GF_STUN, dir, 10 + get_level(STUN, 150))
- end
- end,
- ["info"] = function()
- return "power "..(10 + get_level(STUN, 150))
- end,
- ["desc"] = {
- "Tries to manipulate the mind of a monster to stun it",
- "At level 20 it turns into a ball",
- }
-}
diff --git a/lib/mods/theme/scpt/s_music.lua b/lib/mods/theme/scpt/s_music.lua
deleted file mode 100644
index 9da6393a..00000000
--- a/lib/mods/theme/scpt/s_music.lua
+++ /dev/null
@@ -1,443 +0,0 @@
--- handle the music school
--- *ALL* lasting spell must return the mana cost in the lasting function
-
-MUSIC_STOP = add_spell
-{
- ["name"] = "Stop singing(I)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = -400,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 1,
- ["blind"] = FALSE,
- ["spell"] = function()
- player.start_lasting_spell(0)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Stops the current song, if any."
- }
-}
-
---- Drums
-MUSIC_HOLD = add_spell
-{
- ["name"] = "Holding Pattern(I)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 10,
- ["fail"] = 20,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 1,
- ["blind"] = FALSE,
- ["lasting"] = function()
- project_los(GF_OLD_SLOW, 10 + get_level(MUSIC_HOLD, 100))
- return get_mana(MUSIC_HOLD)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_HOLD)
- return TRUE
- end,
- ["info"] = function()
- return "power "..(10 + get_level(MUSIC_HOLD, 100))
- end,
- ["desc"] = {
- "Slows down all monsters listening the song.",
- "Consumes the amount of mana each turn.",
- }
-}
-
-MUSIC_CONF = add_spell
-{
- ["name"] = "Illusion Pattern(II)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 5,
- ["mana"] = 2,
- ["mana_max"] = 15,
- ["fail"] = 30,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 2,
- ["blind"] = FALSE,
- ["lasting"] = function()
- project_los(GF_OLD_CONF, 10 + get_level(MUSIC_CONF, 100))
- return get_mana(MUSIC_CONF)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_CONF)
- return TRUE
- end,
- ["info"] = function()
- return "power "..(10 + get_level(MUSIC_CONF, 100))
- end,
- ["desc"] = {
- "Tries to confuse all monsters listening the song.",
- "Consumes the amount of mana each turn.",
- }
-}
-
-MUSIC_STUN = add_spell
-{
- ["name"] = "Stun Pattern(IV)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 10,
- ["mana"] = 3,
- ["mana_max"] = 25,
- ["fail"] = 45,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 4,
- ["blind"] = FALSE,
- ["lasting"] = function()
- project_los(GF_STUN, 10 + get_level(MUSIC_STUN, 90))
- return get_mana(MUSIC_STUN)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_STUN)
- return TRUE
- end,
- ["info"] = function()
- return "power "..(10 + get_level(MUSIC_STUN, 90))
- end,
- ["desc"] = {
- "Stuns all monsters listening the song.",
- "Consumes the amount of mana each turn.",
- }
-}
-
---- Harps
-MUSIC_LITE = add_spell
-{
- ["name"] = "Song of the Sun(I)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 1,
- ["fail"] = 20,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["blind"] = FALSE,
- ["pval"] = 1,
- ["lasting"] = function()
- set_lite(5)
- return 1
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_LITE)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Provides light as long as you sing.",
- "Consumes the amount of mana each turn.",
- }
-}
-
-MUSIC_HEAL = add_spell
-{
- ["name"] = "Flow of Life(II)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 7,
- ["mana"] = 5,
- ["mana_max"] = 30,
- ["fail"] = 35,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 2,
- ["lasting"] = function()
- hp_player(7 + get_level(MUSIC_HEAL, 100))
- return get_mana(MUSIC_HEAL)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_HEAL)
- return TRUE
- end,
- ["info"] = function()
- return "heal "..(7 + get_level(MUSIC_HEAL, 100)).."/turn"
- end,
- ["desc"] = {
- "Heals you as long as you sing.",
- "Consumes the amount of mana each turn.",
- }
-}
-
-MUSIC_HERO = add_spell
-{
- ["name"] = "Heroic Ballad(II)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 10,
- ["mana"] = 4,
- ["mana_max"] = 14,
- ["fail"] = 45,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 2,
- ["lasting"] = function()
- set_hero(5)
- if get_level(MUSIC_HERO) >= 10 then
- set_shero(5)
- end
- if get_level(MUSIC_HERO) >= 20 then
- set_strike(5)
- end
- if get_level(MUSIC_HERO) >= 25 then
- set_oppose_cc(5)
- end
- return get_mana(MUSIC_HERO)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_HERO)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Increases melee accuracy",
- "At level 10 it increases it even more and reduces armour a bit",
- "At level 20 it increases it again",
- "At level 25 it grants protection against chaos and confusion",
- "Consumes the amount of mana each turn.",
- }
-}
-
-MUSIC_TIME = add_spell
-{
- ["name"] = "Hobbit Melodies(III)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 20,
- ["mana"] = 10,
- ["mana_max"] = 30,
- ["fail"] = 70,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 3,
- ["lasting"] = function()
- set_shield(5, 10 + get_level(MUSIC_TIME, 50), 0, 0, 0)
- if get_level(MUSIC_TIME) >= 15 then
- set_fast(5, 7 + get_level(MUSIC_TIME, 10))
- end
- return get_mana(MUSIC_TIME)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_TIME)
- return TRUE
- end,
- ["info"] = function()
- if get_level(MUSIC_TIME) >= 15 then
- return "AC "..(10 + get_level(MUSIC_TIME, 50)).." speed "..(7 + get_level(MUSIC_TIME, 10))
- else
- return "AC "..(10 + get_level(MUSIC_TIME, 50))
- end
- end,
- ["desc"] = {
- "Greatly increases your reflexes allowing you to block more melee blows.",
- "At level 15 it also makes you faster.",
- "Consumes the amount of mana each turn.",
- }
-}
-
-MUSIC_MIND = add_spell
-{
- ["name"] = "Clairaudience(IV)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 25,
- ["mana"] = 15,
- ["mana_max"] = 30,
- ["fail"] = 75,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 4,
- ["lasting"] = function()
- set_tim_esp(5)
- if get_level(MUSIC_MIND) >= 10 then
- fire_ball(GF_IDENTIFY, 0, 1, 1 + get_level(MUSIC_MIND, 3, 0))
- end
- return get_mana(MUSIC_MIND)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_MIND)
- return TRUE
- end,
- ["info"] = function()
- if get_level(MUSIC_MIND) >= 10 then
- return "rad "..(1 + get_level(MUSIC_MIND, 3, 0))
- else
- return ""
- end
- end,
- ["desc"] = {
- "Allows you to sense monster minds as long as you sing.",
- "At level 10 it identifies all objects in a radius on the floor,",
- "as well as probing monsters in that radius.",
- "Consumes the amount of mana each turn.",
- }
-}
-
---- Horns
-
-MUSIC_BLOW = add_spell
-{
- ["name"] = "Blow(I)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 4,
- ["mana"] = 3,
- ["mana_max"] = 30,
- ["fail"] = 20,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 1,
- ["spell"] = function()
- fire_ball(GF_SOUND,
- 0,
- damroll(2 + get_level(MUSIC_BLOW, 10, 0), 4 + get_level(MUSIC_BLOW, 40, 0)),
- 1 + get_level(MUSIC_BLOW, 12, 0)
- )
- return TRUE
- end,
- ["info"] = function()
- return "dam "..(2 + get_level(MUSIC_BLOW, 10, 0)).."d"..(4 + get_level(MUSIC_BLOW, 40, 0)).." rad "..(1 + get_level(MUSIC_BLOW, 12, 0))
- end,
- ["desc"] = {
- "Produces a powerful, blowing, sound all around you.",
- }
-}
-
-MUSIC_WIND = add_spell
-{
- ["name"] = "Gush of Wind(II)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 14,
- ["mana"] = 15,
- ["mana_max"] = 45,
- ["fail"] = 30,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 2,
- ["spell"] = function()
- fire_ball(GF_AWAY_ALL,
- 0,
- 10 + get_level(MUSIC_BLOW, 40, 0),
- 1 + get_level(MUSIC_BLOW, 12, 0)
- )
- return TRUE
- end,
- ["info"] = function()
- return "dist "..(10 + get_level(MUSIC_BLOW, 40, 0)).." rad "..(1 + get_level(MUSIC_BLOW, 12, 0))
- end,
- ["desc"] = {
- "Produces a outgoing gush of wind that sends monsters away.",
- }
-}
-
-MUSIC_YLMIR = add_spell
-{
- ["name"] = "Horns of Ylmir(III)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 20,
- ["mana"] = 25,
- ["mana_max"] = 30,
- ["fail"] = 20,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 3,
- ["spell"] = function()
- earthquake(player.py, player.px, 2 + get_level(SHAKE, 10))
- return TRUE
- end,
- ["info"] = function()
- return "rad "..(2 + get_level(SHAKE, 10))
- end,
- ["desc"] = {
- "Produces an earth shaking sound.",
- }
-}
-
-MUSIC_AMBARKANTA = add_spell
-{
- ["name"] = "Ambarkanta(IV)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 25,
- ["mana"] = 70,
- ["mana_max"] = 70,
- ["fail"] = 60,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 4,
- ["spell"] = function()
- alter_reality()
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Produces a reality shaking sound that transports you to a nearly",
- "identical reality.",
- }
-}
-
-
---[[
-MUSIC_ = add_spell
-{
- ["name"] = "(I)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = 20,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 1,
- ["lasting"] = function()
- return get_mana(MUSIC_)
- end,
- ["spell"] = function()
- player.start_lasting_spell(MUSIC_)
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "",
- "Consumes the amount of mana each turn.",
- }
-}
-
-or
-
-MUSIC_ = add_spell
-{
- ["name"] = "(I)",
- ["school"] = {SCHOOL_MUSIC},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = 20,
- ["stat"] = A_CHR,
- ["random"] = SKILL_MUSIC,
- ["pval"] = 1,
- ["spell"] = function()
-
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "",
- }
-}
-]]
diff --git a/lib/mods/theme/scpt/s_nature.lua b/lib/mods/theme/scpt/s_nature.lua
deleted file mode 100644
index 3d44c569..00000000
--- a/lib/mods/theme/scpt/s_nature.lua
+++ /dev/null
@@ -1,184 +0,0 @@
--- handle the nature school
-
-GROWTREE = add_spell
-{
- ["name"] = "Grow Trees",
- ["school"] = {SCHOOL_NATURE, SCHOOL_TEMPORAL},
- ["level"] = 6,
- ["mana"] = 6,
- ["mana_max"] = 30,
- ["fail"] = 35,
- ["inertia"] = { 5, 50 },
- ["spell"] = function()
- grow_trees(2 + get_level(GROWTREE, 7))
- return TRUE
- end,
- ["info"] = function()
- return "rad "..(2 + get_level(GROWTREE, 7))
- end,
- ["desc"] = {
- "Makes trees grow extremely quickly around you",
- }
-}
-
-HEALING = add_spell
-{
- ["name"] = "Healing",
- ["school"] = {SCHOOL_NATURE},
- ["level"] = 10,
- ["mana"] = 15,
- ["mana_max"] = 50,
- ["fail"] = 45,
- ["stick"] =
- {
- ["charge"] = { 2, 3 },
- [TV_STAFF] =
- {
- ["rarity"] = 90,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 20, 40 },
- },
- },
- ["spell"] = function()
- return hp_player(player.mhp * (15 + get_level(HEALING, 35)) / 100)
- end,
- ["info"] = function()
- return "heal "..(15 + get_level(HEALING, 35)).."% = "..(player.mhp * (15 + get_level(HEALING, 35)) / 100).."hp"
- end,
- ["desc"] = {
- "Heals a percent of hitpoints",
- }
-}
-
-RECOVERY = add_spell
-{
- ["name"] = "Recovery",
- ["school"] = {SCHOOL_NATURE},
- ["level"] = 15,
- ["mana"] = 10,
- ["mana_max"] = 25,
- ["fail"] = 60,
- ["stick"] =
- {
- ["charge"] = { 5, 10 },
- [TV_STAFF] =
- {
- ["rarity"] = 50,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 10, 30 },
- },
- },
- ["inertia"] = { 2, 100 },
- ["spell"] = function()
- local obvious
- obvious = set_poisoned(player.poisoned / 2)
- if get_level(RECOVERY, 50) >= 5 then
- obvious = is_obvious(set_poisoned(0), obvious)
- obvious = is_obvious(set_cut(0), obvious)
- end
- if get_level(RECOVERY, 50) >= 10 then
- obvious = is_obvious(do_res_stat(A_STR, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_CON, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_DEX, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_WIS, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_INT, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_CHR, TRUE), obvious)
- end
- if get_level(RECOVERY, 50) >= 15 then
- obvious = is_obvious(restore_level(), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Reduces the length of time that you are poisoned",
- "At level 5 it cures poison and cuts",
- "At level 10 it restores drained stats",
- "At level 15 it restores lost experience"
- }
-}
-
-REGENERATION = add_spell
-{
- ["name"] = "Regeneration",
- ["school"] = {SCHOOL_NATURE},
- ["level"] = 20,
- ["mana"] = 30,
- ["mana_max"] = 55,
- ["fail"] = 70,
- ["inertia"] = { 4, 40 },
- ["spell"] = function()
- if player.tim_regen == 0 then return set_tim_regen(randint(10) + 5 + get_level(REGENERATION, 50), 300 + get_level(REGENERATION, 700)) end
- end,
- ["info"] = function()
- return "dur "..(5 + get_level(REGENERATION, 50)).."+d10 power "..(300 + get_level(REGENERATION, 700))
- end,
- ["desc"] = {
- "Increases your body's regeneration rate",
- }
-}
-
-
-SUMMONANNIMAL = add_spell
-{
- ["name"] = "Summon Animal",
- ["school"] = {SCHOOL_NATURE},
- ["level"] = 25,
- ["mana"] = 25,
- ["mana_max"] = 50,
- ["fail"] = 90,
- ["stick"] =
- {
- ["charge"] = { 1, 3 },
- [TV_WAND] =
- {
- ["rarity"] = 85,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 15, 45 },
- },
- },
- ["spell"] = function()
- summon_specific_level = 25 + get_level(SUMMONANNIMAL, 50)
- return summon_monster(player.py, player.px, dun_level, TRUE, SUMMON_ANIMAL)
- end,
- ["info"] = function()
- return "level "..(25 + get_level(SUMMONANNIMAL, 50))
- end,
- ["desc"] = {
- "Summons a leveled animal to your aid",
- }
-}
-
--- From T-Plus
-GROW_ATHELAS = add_spell {
- ["name"] = "Grow Athelas",
- ["school"] = {SCHOOL_NATURE},
- ["level"] = 30,
- ["mana"] = 60,
- ["mana_max"] = 100,
- ["fail"] = 95,
- ["stick"] =
- {
- ["charge"] = { 1, 3 },
- [TV_WAND] =
- {
- ["rarity"] = 85,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 15, 45 },
- },
- },
- ["spell"] = function()
- if (player.black_breath == TRUE) then
- msg_print("The hold of the Black Breath on you is broken!")
- player.black_breath = FALSE
- end
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Cures the Black Breath",
- }
-}
diff --git a/lib/mods/theme/scpt/s_stick.lua b/lib/mods/theme/scpt/s_stick.lua
deleted file mode 100644
index 9bbd641a..00000000
--- a/lib/mods/theme/scpt/s_stick.lua
+++ /dev/null
@@ -1,494 +0,0 @@
--- Spells that are stick or artifacts/... only
-
-DEVICE_HEAL_MONSTER = add_spell
-{
- ["name"] = "Heal Monster",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 3,
- ["mana"] = 5,
- ["mana_max"] = 20,
- ["fail"] = 15,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 10, 10 },
- [TV_WAND] =
- {
- ["rarity"] = 17,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- return fire_ball(GF_OLD_HEAL, dir, 20 + get_level(DEVICE_HEAL_MONSTER, 380), 0)
- end,
- ["info"] = function()
- return "heal "..(20 + get_level(DEVICE_HEAL_MONSTER, 380))
- end,
- ["desc"] = {
- "Heals a monster",
- }
-}
-
-DEVICE_SPEED_MONSTER = add_spell
-{
- ["name"] = "Haste Monster",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 10,
- ["mana"] = 10,
- ["mana_max"] = 10,
- ["fail"] = 30,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 10, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 7,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- return fire_ball(GF_OLD_SPEED, dir, 1, 0)
- end,
- ["info"] = function()
- return "speed +10"
- end,
- ["desc"] = {
- "Haste a monster",
- }
-}
-
-DEVICE_WISH = add_spell
-{
- ["name"] = "Wish",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 50,
- ["mana"] = 400,
- ["mana_max"] = 400,
- ["fail"] = 99,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 1, 2 },
- [TV_STAFF] =
- {
- ["rarity"] = 98,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 1, 1 },
- },
- },
- ["spell"] = function()
- make_wish()
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "This grants you a wish, beware of what you ask for!",
- }
-}
-
-DEVICE_SUMMON = add_spell
-{
- ["name"] = "Summon",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 5,
- ["mana"] = 5,
- ["mana_max"] = 25,
- ["fail"] = 20,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 1, 20 },
- [TV_STAFF] =
- {
- ["rarity"] = 13,
- ["base_level"] = { 1, 40 },
- ["max_level"] = { 25, 50 },
- },
- },
- ["spell"] = function()
- local i, obvious
- obvious = nil
- for i = 1, 4 + get_level(DEVICE_SUMMON, 30) do
- obvious = is_obvious(summon_specific(player.py, player.px, dun_level, 0), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Summons hostile monsters near you",
- }
-}
-
-DEVICE_MANA = add_spell
-{
- ["name"] = "Mana",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 30,
- ["mana"] = 1,
- ["mana_max"] = 1,
- ["fail"] = 80,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 2, 3 },
- [TV_STAFF] =
- {
- ["rarity"] = 78,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 20, 35 },
- },
- },
- ["spell"] = function()
- increase_mana((player.msp * (20 + get_level(DEVICE_MANA, 50))) / 100)
- return TRUE
- end,
- ["info"] = function()
- return "restore "..(20 + get_level(DEVICE_MANA, 50)).."%"
- end,
- ["desc"] = {
- "Restores a part(or all) of your mana",
- }
-}
-
-DEVICE_NOTHING = add_spell
-{
- ["name"] = "Nothing",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = 0,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 0, 0 },
- [TV_WAND] =
- {
- ["rarity"] = 3,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 1, 1 },
- },
- [TV_STAFF] =
- {
- ["rarity"] = 3,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 1, 1},
- },
- },
- ["spell"] = function()
- return FALSE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "It does nothing.",
- }
-}
-
-DEVICE_MAGGOT = add_spell
-{
- ["name"] = "Artifact Maggot",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 1,
- ["mana"] = 7,
- ["mana_max"] = 7,
- ["fail"] = 20,
- ["random"] = -1,
- ["activate"] = { 10, 50 },
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_ball(GF_TURN_ALL, dir, 40, 2)
- end,
- ["info"] = function()
- return "power 40 rad 2"
- end,
- ["desc"] = {
- "terrify",
- }
-}
-
-DEVICE_HOLY_FIRE = add_spell
-{
- ["name"] = "Holy Fire of Mithrandir",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 30,
- ["mana"] = 50,
- ["mana_max"] = 150,
- ["fail"] = 75,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 2, 5 },
- [TV_STAFF] =
- {
- -- Rarity higher than 100 to be sure to not have it generated randomly
- ["rarity"] = 999,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 35, 35 },
- },
- },
- ["spell"] = function()
- return project_los(GF_HOLY_FIRE, 50 + get_level(DEVICE_HOLY_FIRE, 300))
- end,
- ["info"] = function()
- return "dam "..(50 + get_level(DEVICE_HOLY_FIRE, 250))
- end,
- ["desc"] = {
- "The Holy Fire created by this staff will deeply(double damage) burn",
- "all that is evil.",
- }
-}
-
--- Ok the Eternal Flame, to craete one of the 4 ultimate arts
--- needed to enter the last level of the Void
-DEVICE_ETERNAL_FLAME = add_spell
-{
- ["name"] = "Artifact Eternal Flame",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = 0,
- ["random"] = -1,
- ["activate"] = { 0, 0 },
- ["spell"] = function(flame_item)
- local ret, item, obj
-
- ret, item = get_item("Which object do you want to imbue?",
- "You have no objects to imbue.",
- bor(USE_INVEN),
- function (obj)
- if obj.name1 > 0 or obj.name2 > 0 then return FALSE end
- if (obj.tval == TV_SWORD) and (obj.sval == SV_LONG_SWORD) then
- return TRUE
- elseif (obj.tval == TV_MSTAFF) and (obj.sval == SV_MSTAFF) then
- return TRUE
- elseif (obj.tval == TV_BOW) and (obj.sval == SV_HEAVY_XBOW) then
- return TRUE
- elseif (obj.tval == TV_DRAG_ARMOR) and (obj.sval == SV_DRAGON_POWER) then
- return TRUE
- elseif (obj.tval == TV_HAFTED) and (obj.sval == SV_LUCERN_HAMMER) then
- return TRUE
- elseif (obj.tval == TV_POLEARM) and (obj.sval == SV_TRIDENT) then
- return TRUE
- elseif (obj.tval == TV_AXE) and (obj.sval == SV_BATTLE_AXE) then
- return TRUE
- elseif (obj.tval == TV_BOW) and (obj.sval == SV_LONG_BOW) then
- return TRUE
- elseif (obj.tval == TV_BOOMERANG) and (obj.sval == SV_BOOM_METAL) then
- return TRUE
- elseif (obj.tval == TV_BOW) and (obj.sval == SV_SLING) then
- return TRUE
- elseif (obj.tval == TV_SWORD) and (obj.sval == SV_RAPIER) then
- return TRUE
- elseif (obj.tval == TV_AMULET) and (obj.sval == SV_AMULET_SPELL) then
- return TRUE
- end
- return FALSE
- end
- )
- if ret == FALSE then return FALSE end
-
- obj = get_object(item)
-
- if (obj.tval == TV_SWORD) and (obj.sval == SV_LONG_SWORD) then
- obj.name1 = 147
- elseif (obj.tval == TV_MSTAFF) and (obj.sval == SV_MSTAFF) then
- obj.name1 = 127
- elseif (obj.tval == TV_BOW) and (obj.sval == SV_HEAVY_XBOW) then
- obj.name1 = 152
- elseif (obj.tval == TV_DRAG_ARMOR) and (obj.sval == SV_DRAGON_POWER) then
- obj.name1 = 17
- elseif (obj.tval == TV_HAFTED) and (obj.sval == SV_LUCERN_HAMMER) then
- obj.name1 = 241
- elseif (obj.tval == TV_POLEARM) and (obj.sval == SV_TRIDENT) then
- obj.name1 = 242
- elseif (obj.tval == TV_AXE) and (obj.sval == SV_BROAD_AXE) then
- obj.name1 = 243
- elseif (obj.tval == TV_BOW) and (obj.sval == SV_LONG_BOW) then
- obj.name1 = 245
- elseif (obj.tval == TV_BOOMERANG) and (obj.sval == SV_BOOM_METAL) then
- obj.name1 = 247
- elseif (obj.tval == TV_BOW) and (obj.sval == SV_SLING) then
- obj.name1 = 246
- elseif (obj.tval == TV_SWORD) and (obj.sval == SV_RAPIER) then
- obj.name1 = 244
- elseif (obj.tval == TV_AMULET) and (obj.sval == SV_AMULET_SPELL) then
- obj.name1 = 248
- end
- apply_magic(obj, -1, TRUE, TRUE, TRUE)
-
- obj.found = OBJ_FOUND_SELFMADE
-
- inven_item_increase(flame_item, -1)
- inven_item_describe(flame_item)
- inven_item_optimize(flame_item)
-
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Imbuing an object with the eternal fire",
- }
-}
-
-DEVICE_THUNDERLORDS = add_spell
-{
- ["name"] = "Artifact Thunderlords",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 1,
- ["fail"] = 20,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 5, 5 },
- [TV_STAFF] =
- {
- -- Rarity higher than 100 to be sure to not have it generated randomly
- ["rarity"] = 999,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 1, 1 },
- },
- },
- ["spell"] = function()
- if dun_level > 0 then
- msg_print("As you blow the horn, an Eagle of Manwe appears overhead.")
- recall_player(0, 1)
- else
- msg_print("You cannot use it there.")
- end
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "An Eagle of Manwe will appear to transport you quickly to the town.",
- }
-}
-
--- Two new spells from T-Plus by Ingeborg S. Norden, for artifact activations:
-
-DEVICE_RADAGAST = add_spell
-{
- ["name"] = "Artifact Radagast",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = 10,
- ["random"] = -1,
- ["activate"] = 15000,
- ["spell"] = function()
- msg_print(TERM_GREEN, "The staff's power cleanses you completely!")
- remove_all_curse()
- do_res_stat(A_STR, TRUE)
- do_res_stat(A_CON, TRUE)
- do_res_stat(A_DEX, TRUE)
- do_res_stat(A_WIS, TRUE)
- do_res_stat(A_INT, TRUE)
- do_res_stat(A_CHR, TRUE)
- restore_level()
- clean_corruptions()
- hp_player(5000)
- heal_insanity(5000)
- set_poisoned(0)
- set_blind(0)
- set_confused(0)
- set_image(0)
- set_stun(0)
- set_cut(0)
- set_parasite(0, 0)
-
- if (player.black_breath) == TRUE then
- msg_print("The hold of the Black Breath on you is broken!")
- end
- player.black_breath = FALSE
-
- player.update = bor(player.update, PU_BONUS)
- player.window = bor(player.window, PW_PLAYER)
-
- return TRUE
- end,
-
- ["info"] = function()
- return ""
- end,
-
- ["desc"] = {
- "purity and health",
- }
-}
-
-DEVICE_VALAROMA = add_spell
-{
- ["name"] = "Artifact Valaroma",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = 25,
- ["random"] = -1,
- ["activate"] = 250,
- ["spell"] = function()
- local power = 5 * player.lev
- banish_evil(power)
- return FALSE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "banish evil (level x5)",
- }
-}
---[[ Template
-DEVICE_ = add_spell
-{
- ["name"] = "",
- ["school"] = {SCHOOL_DEVICE},
- ["level"] = 1,
- ["mana"] = 2,
- ["mana_max"] = 15,
- ["fail"] = 10,
- ["random"] = -1,
- ["stick"] =
- {
- ["charge"] = { 10, 5 },
- [TV_STAFF] =
- {
- ["rarity"] = 7,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 25, 50 },
- },
- },
- ["spell"] = function()
- return FALSE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "",
- }
-}
-]]
diff --git a/lib/mods/theme/scpt/s_tempo.lua b/lib/mods/theme/scpt/s_tempo.lua
deleted file mode 100644
index d3d2fbb5..00000000
--- a/lib/mods/theme/scpt/s_tempo.lua
+++ /dev/null
@@ -1,162 +0,0 @@
--- Handles thhe temporal school
-
-
-MAGELOCK = add_spell
-{
- ["name"] = "Magelock",
- ["school"] = {SCHOOL_TEMPORAL},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 35,
- ["fail"] = 10,
- ["stick"] =
- {
- ["charge"] = { 7, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 30,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 15, 45 },
- },
- },
- ["spell"] = function()
- if get_level(MAGELOCK, 50) >= 30 then
- local ret, x, y, c_ptr
-
- if get_level(MAGELOCK, 50) >= 40 then
- ret, x, y = tgt_pt()
- if ret == FALSE then return end
- if cave_is(cave(y, x), FF1_FLOOR) == FALSE or cave_is(cave(y, x), FF1_PERMANENT) == TRUE or los(player.py, player.px, y, x) == FALSE then
- msg_print("You cannot place it there.")
- return TRUE
- end
- else
- y = player.py
- x = player.px
- end
- cave_set_feat(y, x, 3)
- return TRUE
- else
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return wizard_lock(dir)
- end
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Magically locks a door",
- "At level 30 it creates a glyph of warding",
- "At level 40 the glyph can be placed anywhere in the field of vision"
- }
-}
-
-SLOWMONSTER = add_spell
-{
- ["name"] = "Slow Monster",
- ["school"] = {SCHOOL_TEMPORAL},
- ["level"] = 10,
- ["mana"] = 10,
- ["mana_max"] = 15,
- ["fail"] = 35,
- ["stick"] =
- {
- ["charge"] = { 5, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 23,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["spell"] = function()
- local ret, dir
-
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- if get_level(SLOWMONSTER, 50) >= 20 then
- return fire_ball(GF_OLD_SLOW, dir, 40 + get_level(SLOWMONSTER, 160), 1)
- else
- return fire_bolt(GF_OLD_SLOW, dir, 40 + get_level(SLOWMONSTER, 160))
- end
- end,
- ["info"] = function()
- if get_level(SLOWMONSTER, 50) >= 20 then
- return "power "..(40 + get_level(SLOWMONSTER, 160)).." rad 1"
- else
- return "power "..(40 + get_level(SLOWMONSTER, 160))
- end
- end,
- ["desc"] = {
- "Magically slows down the passing of time around a monster",
- "At level 20 it affects a zone"
- }
-}
-
-ESSENCESPEED = add_spell
-{
- ["name"] = "Essence of Speed",
- ["school"] = {SCHOOL_TEMPORAL},
- ["level"] = 15,
- ["mana"] = 20,
- ["mana_max"] = 40,
- ["fail"] = 50,
- ["stick"] =
- {
- ["charge"] = { 3, 3 },
- [TV_WAND] =
- {
- ["rarity"] = 80,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 10, 39 },
- },
- },
- ["inertia"] = { 5, 20 },
- ["spell"] = function()
- if player.fast == 0 then return set_fast(10 + randint(10) + get_level(ESSENCESPEED, 50), 5 + get_level(ESSENCESPEED, 20)) end
- end,
- ["info"] = function()
- return "dur "..(10 + get_level(ESSENCESPEED, 50)).."+d10 speed "..(5 + get_level(ESSENCESPEED, 20))
- end,
- ["desc"] = {
- "Magically decreases the passing of time around you, making you move faster with",
- "respect to the rest of the universe."
- }
-}
-
-BANISHMENT = add_spell
-{
- ["name"] = "Banishment",
- ["school"] = {SCHOOL_TEMPORAL, SCHOOL_CONVEYANCE},
- ["level"] = 30,
- ["mana"] = 30,
- ["mana_max"] = 40,
- ["fail"] = 95,
- ["stick"] =
- {
- ["charge"] = { 1, 3 },
- [TV_WAND] =
- {
- ["rarity"] = 98,
- ["base_level"] = { 1, 15 },
- ["max_level"] = { 10, 36 },
- },
- },
- ["inertia"] = { 5, 50 },
- ["spell"] = function()
- local obvious
- obvious = project_los(GF_AWAY_ALL, 40 + get_level(BANISHMENT, 160))
- if get_level(BANISHMENT, 50) >= 15 then
- obvious = is_obvious(project_los(GF_STASIS, 20 + get_level(BANISHMENT, 120)), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- return "power "..(40 + get_level(BANISHMENT, 160))
- end,
- ["desc"] = {
- "Disrupts the space/time continuum in your area and teleports all monsters away.",
- "At level 15 it may also lock them in a time bubble for a while."
- }
-}
diff --git a/lib/mods/theme/scpt/s_tulkas.lua b/lib/mods/theme/scpt/s_tulkas.lua
deleted file mode 100644
index 4afa8082..00000000
--- a/lib/mods/theme/scpt/s_tulkas.lua
+++ /dev/null
@@ -1,81 +0,0 @@
--- Handle Tulkas magic school
-
-TULKAS_AIM = add_spell
-{
- ["name"] = "Divine Aim",
- ["school"] = {SCHOOL_TULKAS},
- ["level"] = 1,
- ["mana"] = 30,
- ["mana_max"] = 500,
- ["fail"] = 20,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local dur = get_level(TULKAS_AIM, 50) + randint(10)
- local obvious
-
- obvious = set_strike(dur)
- if get_level(TULKAS_AIM) >= 20 then
- obvious = is_obvious(set_tim_deadly(dur), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- return "dur "..(get_level(TULKAS_AIM, 50)).."+d10"
- end,
- ["desc"] = {
- "It makes you more accurate in combat",
- "At level 20 all your blows are critical hits",
- }
-}
-
-TULKAS_WAVE = add_spell
-{
- ["name"] = "Wave of Power",
- ["school"] = {SCHOOL_TULKAS},
- ["level"] = 20,
- ["mana"] = 200,
- ["mana_max"] = 200,
- ["fail"] = 75,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- return fire_bolt(GF_ATTACK, dir, get_level(TULKAS_WAVE, player.num_blow))
- end,
- ["info"] = function()
- return "blows "..(get_level(TULKAS_WAVE, player.num_blow))
- end,
- ["desc"] = {
- "It allows you to project a number of melee blows across a distance",
- }
-}
-
-TULKAS_SPIN = add_spell
-{
- ["name"] = "Whirlwind",
- ["school"] = {SCHOOL_TULKAS},
- ["level"] = 10,
- ["mana"] = 100,
- ["mana_max"] = 100,
- ["fail"] = 45,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- return fire_ball(GF_ATTACK, 0, 1, 1)
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "It allows you to spin around and hit all monsters nearby",
- }
-}
diff --git a/lib/mods/theme/scpt/s_udun.lua b/lib/mods/theme/scpt/s_udun.lua
deleted file mode 100644
index c4266239..00000000
--- a/lib/mods/theme/scpt/s_udun.lua
+++ /dev/null
@@ -1,180 +0,0 @@
--- handle the udun school
-
-DRAIN = add_spell
-{
- ["name"] = "Drain",
- ["school"] = {SCHOOL_UDUN, SCHOOL_MANA},
- ["level"] = 1,
- ["mana"] = 0,
- ["mana_max"] = 0,
- ["fail"] = 20,
- ["spell"] = function()
- local ret, item, obj, o_name, add
-
- -- Ask for an item
- ret, item = get_item("What item to drain?", "You have nothing you can drain", USE_INVEN,
- function (obj)
- if (obj.tval == TV_WAND) or (obj.tval == TV_ROD_MAIN) or (obj.tval == TV_STAFF) then
- return TRUE
- end
- return FALSE
- end
- )
-
- if ret == TRUE then
- -- get the item
- obj = get_object(item)
-
- add = 0
- if (obj.tval == TV_STAFF) or (obj.tval == TV_WAND) then
- local kind = get_kind(obj)
-
- add = kind.level * obj.pval * obj.number
-
- -- Destroy it!
- inven_item_increase(item, -99)
- inven_item_describe(item)
- inven_item_optimize(item)
- end
- if obj.tval == TV_ROD_MAIN then
- add = obj.timeout
- obj.timeout = 0;
-
- --Combine / Reorder the pack (later)
- player.notice = bor(player.notice, PN_COMBINE, PN_REORDER)
- player.window = bor(player.window, PW_INVEN, PW_EQUIP, PW_PLAYER)
- end
- increase_mana(add)
- end
- return TRUE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Drains the mana contained in wands, staves and rods to increase yours",
- }
-}
-
-GENOCIDE = add_spell
-{
- ["name"] = "Genocide",
- ["school"] = {SCHOOL_UDUN, SCHOOL_NATURE},
- ["level"] = 25,
- ["mana"] = 50,
- ["mana_max"] = 50,
- ["fail"] = 90,
- ["stick"] =
- {
- ["charge"] = { 2, 2 },
- [TV_STAFF] =
- {
- ["rarity"] = 85,
- ["base_level"] = { 1, 1 },
- ["max_level"] = { 5, 15 },
- },
- },
- ["spell"] = function()
- local type
-
- type = 0
- if get_level(GENOCIDE) >= 10 then type = 1 end
- if type == 0 then
- genocide(TRUE)
- return TRUE
- else
- if get_check("Genocide all monsters near you? ") == TRUE then
- mass_genocide(TRUE)
- else
- genocide(TRUE)
- end
- return TRUE
- end
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Genocides all monsters of a race on the level",
- "At level 10 it can genocide all monsters near you"
- }
-}
-
-WRAITHFORM = add_spell
-{
- ["name"] = "Wraithform",
- ["school"] = {SCHOOL_UDUN, SCHOOL_CONVEYANCE},
- ["level"] = 30,
- ["mana"] = 20,
- ["mana_max"] = 40,
- ["fail"] = 95,
- ["inertia"] = { 4, 30 },
- ["spell"] = function()
- return set_shadow(randint(30) + 20 + get_level(WRAITHFORM, 40))
- end,
- ["info"] = function()
- return "dur "..(20 + get_level(WRAITHFORM, 40)).."+d30"
- end,
- ["desc"] = {
- "Turns you into an immaterial being",
- }
-}
-
-FLAMEOFUDUN = add_spell
-{
- ["name"] = "Flame of Udun",
- ["school"] = {SCHOOL_UDUN, SCHOOL_FIRE},
- ["level"] = 35,
- ["mana"] = 70,
- ["mana_max"] = 100,
- ["fail"] = 95,
- ["inertia"] = { 7, 15 },
- ["spell"] = function()
- return set_mimic(randint(15) + 5 + get_level(FLAMEOFUDUN, 30), resolve_mimic_name("Balrog"), get_level(FLAMEOFUDUN))
- end,
- ["info"] = function()
- return "dur "..(5 + get_level(FLAMEOFUDUN, 30)).."+d15"
- end,
- ["desc"] = {
- "Turns you into a powerful Balrog",
- }
-}
-
-
--- Return the number of Udun/Melkor spells in a given book
-function udun_in_book(sval, pval)
- local i, y, index, sch, s
-
- i = 0
-
- -- Hack if the book is 255 it is a random book
- if sval == 255 then
- school_book[sval] = {pval}
- end
- -- Parse all spells
- for index, s in school_book[sval] do
- for index, sch in __spell_school[s] do
- if sch == SCHOOL_UDUN then i = i + 1 end
- if sch == SCHOOL_MELKOR then i = i + 1 end
- end
- end
- return i
-end
-
--- Return the total level of spells
-function levels_in_book(sval, pval)
- local i, y, index, sch, s
-
- i = 0
-
- -- Hack if the book is 255 it is a random book
- if sval == 255 then
- school_book[sval] = {pval}
- end
-
- -- Parse all spells
- for index, s in school_book[sval] do
- i = i + __tmp_spells[s].level
- end
- return i
-end
diff --git a/lib/mods/theme/scpt/s_ulmo.lua b/lib/mods/theme/scpt/s_ulmo.lua
deleted file mode 100644
index a2c24b29..00000000
--- a/lib/mods/theme/scpt/s_ulmo.lua
+++ /dev/null
@@ -1,147 +0,0 @@
--- Spells for Ulmo's school
-
-BOOK_ULMO = 65
-
--- "Song of Belegaer" copied from Geyser
-ULMO_BELEGAER = add_spell
-{
- ["name"] = "Song of Belegaer",
- ["school"] = SCHOOL_ULMO,
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 100,
- ["fail"] = 25,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local ret, dir
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_bolt_or_beam(2 * get_level(ULMO_BELEGAER, 85), GF_WATER, dir, damroll(get_geyser_damage()))
- end,
- ["info"] = function()
- local n, d
- n, d = get_geyser_damage()
- return "dam "..n.."d"..d
- end,
- ["desc"] =
- {
- "Channels the power of the Great Sea into your fingertips.",
- "Sometimes it can blast through its first target."
- },
-}
-
--- "Draught of Ulmonan" copied with tweaks from T-Plus Nature spell "Restore Body"
-ULMO_DRAUGHT_ULMONAN = add_spell
-{
- ["name"] = "Draught of Ulmonan",
- ["school"] = {SCHOOL_ULMO},
- ["level"] = 15,
- ["mana"] = 25,
- ["mana_max"] = 200,
- ["fail"] = 50,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local level = get_level(ULMO_DRAUGHT_ULMONAN, 50)
- local obvious = hp_player(5 * level)
- obvious = is_obvious(set_poisoned(0), obvious)
- obvious = is_obvious(set_cut(0), obvious)
- obvious = is_obvious(set_stun(0), obvious)
- obvious = is_obvious(set_blind(0), obvious)
- if level >= 10 then
- obvious = is_obvious(do_res_stat(A_STR, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_CON, TRUE), obvious)
- obvious = is_obvious(do_res_stat(A_DEX, TRUE), obvious)
- end
- if level >= 20 then
- obvious = is_obvious(set_parasite(0, 0), obvious)
- obvious = is_obvious(set_mimic(0, 0, 0), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- local level = get_level(ULMO_DRAUGHT_ULMONAN, 50)
- return "cure "..(5 * level)
- end,
- ["desc"] = {
- "Fills you with a draught with powerful curing effects,",
- "prepared by Ulmo himself.",
- "Level 1: blindness, poison, cuts and stunning",
- "Level 10: drained STR, DEX and CON",
- "Level 20: parasites and mimicry",
- },
-}
-
--- "Call of the Ulumuri" based on Call Blessed Soul from T-Plus
-ULMO_CALL_ULUMURI = add_spell
-
-{
- ["name"] = "Call of the Ulumuri",
- ["school"] = {SCHOOL_ULMO},
- ["level"] = 20,
- ["mana"] = 50,
- ["mana_max"] = 300,
- ["fail"] = 75,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local y, x, m_idx
- local summons =
- {
- test_monster_name("Water spirit"),
- test_monster_name("Water elemental"),
- }
- y, x = find_position(player.py, player.px)
- m_idx = place_monster_one(y, x, summons[rand_range(1, 2)], 0, FALSE, MSTATUS_FRIEND)
- if m_idx ~= 0 then
- monster_set_level(m_idx, 30 + get_level(ULMO_CALL_ULUMURI, 70, 0))
- return TRUE
- end
- end,
-
- ["info"] = function()
- return "level "..(get_level(ULMO_CALL_ULUMURI, 70))
- end,
- ["desc"] = {
- "Summons a leveled water spirit or elemental",
- "to fight for you",
-
- },
-}
-
--- "Wrath of Ulmo" based on Firewall
-ULMO_WRATH = add_spell
-{
- ["name"] = "Wrath of Ulmo",
- ["school"] = {SCHOOL_ULMO},
- ["level"] = 30,
- ["mana"] = 100,
- ["mana_max"] = 400,
- ["fail"] = 95,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local ret, dir, type
- if (get_level(ULMO_WRATH, 50) >= 30) then
- type = GF_WAVE
- else
- type = GF_WATER
- end
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- fire_wall(type, dir, 40 + get_level(ULMO_WRATH, 150), 10 + get_level(ULMO_WRATH, 14))
- return TRUE
- end,
- ["info"] = function()
- return "dam "..(40 + get_level(ULMO_WRATH, 150)).." dur "..(10 + get_level(ULMO_WRATH, 14))
- end,
- ["desc"] = {
- "Conjures up a sea storm.",
- "At level 30 it turns into a more forceful storm."
- }
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/s_varda.lua b/lib/mods/theme/scpt/s_varda.lua
deleted file mode 100644
index f4f46a83..00000000
--- a/lib/mods/theme/scpt/s_varda.lua
+++ /dev/null
@@ -1,140 +0,0 @@
--- Spells for Varda school (From Annals of Ea module)
-
-BOOK_VARDA = 64
-
--- Holy light spell copied from Globe of Light
-VARDA_LIGHT_VALINOR = add_spell
-{
- ["name"] = "Light of Valinor",
- ["school"] = {SCHOOL_VARDA},
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 100,
- ["fail"] = 20,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local obvious
- if get_level(VARDA_LIGHT_VALINOR, 50) >= 3 then
- obvious = lite_area(10, 4)
- else
- lite_room(player.py, player.px)
- obvious = TRUE
- end
- if get_level(VARDA_LIGHT_VALINOR, 50) >= 15 then
- obvious = is_obvious(fire_ball(GF_LITE, 0, 10 + get_level(VARDA_LIGHT_VALINOR, 100), 5 + get_level(GLOBELIGHT, 6)), obvious)
- end
- return obvious
- end,
- ["info"] = function()
- if get_level(VARDA_LIGHT_VALINOR, 50) >= 15 then
- return "dam "..(10 + get_level(VARDA_LIGHT_VALINOR, 100)).." rad "..(5 + get_level(VARDA_LIGHT_VALINOR, 6))
- else
- return ""
- end
- end,
- ["desc"] = {
- "Lights a room",
- "At level 3 it starts damaging monsters",
- "At level 15 it starts creating a more powerful kind of light",
- }
-}
-
-VARDA_CALL_ALMAREN = add_spell
-{
- ["name"] = "Call of Almaren",
- ["school"] = {SCHOOL_VARDA},
- ["level"] = 10,
- ["mana"] = 5,
- ["mana_max"] = 150,
- ["fail"] = 20,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local power = 5 * player.lev
- if (get_level(VARDA_CALL_ALMAREN) >= 20) then
- dispel_evil(power)
- else
- banish_evil(power)
- end
- return FALSE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Banishes evil beings",
- "At level 20 it dispels evil beings",
- }
-}
-
-VARDA_EVENSTAR = add_spell
-{
- ["name"] = "Evenstar",
- ["school"] = {SCHOOL_VARDA},
- ["level"] = 20,
- ["mana"] = 20,
- ["mana_max"] = 200,
- ["fail"] = 20,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- if (get_level(VARDA_EVENSTAR) >= 40) then
- -- Enlightenment
- wiz_lite_extra()
- -- Identify
- identify_pack()
- -- Self knowledge
- self_knowledge()
- else
- wiz_lite_extra()
- end
- return FALSE
- end,
- ["info"] = function()
- return ""
- end,
- ["desc"] = {
- "Maps and lights the whole level.",
- "At level 40 it maps and lights the whole level,",
- "in addition to letting you know yourself better",
- "and identifying your whole pack.",
- }
-}
-
-VARDA_STARKINDLER = add_spell
-{
- ["name"] = "Star Kindler",
- ["school"] = {SCHOOL_VARDA},
- ["level"] = 30,
- ["mana"] = 50,
- ["mana_max"] = 250,
- ["fail"] = 20,
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local power = player.lev / 5
- local ret, dir
-
- ret, dir = get_aim_dir()
-
- if ret == FALSE then return end
- for i = 1, power do
- fire_ball(GF_LITE, dir, 20 + get_level(VARDA_STARKINDLER, 100), 10)
- end
-
- return FALSE
- end,
- ["info"] = function()
- local power = player.lev / 5
- return "dam "..(20 + get_level(VARDA_STARKINDLER, 100)).." rad 10"
- end,
- ["desc"] = {
- "Does multiple bursts of light damage.",
- "The damage increases with level.",
- }
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/s_water.lua b/lib/mods/theme/scpt/s_water.lua
deleted file mode 100644
index 739b066b..00000000
--- a/lib/mods/theme/scpt/s_water.lua
+++ /dev/null
@@ -1,154 +0,0 @@
--- handle the water school
-
-TIDALWAVE = add_spell
-{
- ["name"] = "Tidal Wave",
- ["school"] = {SCHOOL_WATER},
- ["level"] = 16,
- ["mana"] = 16,
- ["mana_max"] = 40,
- ["fail"] = 65,
- ["stick"] =
- {
- ["charge"] = { 6, 5 },
- [TV_WAND] =
- {
- ["rarity"] = 54,
- ["base_level"] = { 1, 10 },
- ["max_level"] = { 20, 50 },
- },
- },
- ["inertia"] = { 4, 100 },
- ["spell"] = function()
- fire_wave(GF_WAVE, 0, 40 + get_level(TIDALWAVE, 200), 0, 6 + get_level(TIDALWAVE, 10), EFF_WAVE)
- return TRUE
- end,
- ["info"] = function()
- return "dam "..(40 + get_level(TIDALWAVE, 200)).." rad "..(6 + get_level(TIDALWAVE, 10))
- end,
- ["desc"] = {
- "Summons a monstrous tidal wave that will expand and crush the",
- "monsters under its mighty waves."
- }
-}
-
-ICESTORM = add_spell
-{
- ["name"] = "Ice Storm",
- ["school"] = {SCHOOL_WATER},
- ["level"] = 22,
- ["mana"] = 30,
- ["mana_max"] = 60,
- ["fail"] = 80,
- ["stick"] =
- {
- ["charge"] = { 3, 7 },
- [TV_WAND] =
- {
- ["rarity"] = 65,
- ["base_level"] = { 1, 5 },
- ["max_level"] = { 25, 45 },
- },
- },
- ["inertia"] = { 3, 40 },
- ["spell"] = function()
- local type
-
- if get_level(ICESTORM, 50) >= 10 then type = GF_ICE
- else type = GF_COLD end
- fire_wave(type, 0, 80 + get_level(ICESTORM, 200), 1 + get_level(ICESTORM, 3, 0), 20 + get_level(ICESTORM, 70), EFF_STORM)
- return TRUE
- end,
- ["info"] = function()
- return "dam "..(80 + get_level(ICESTORM, 200)).." rad "..(1 + get_level(ICESTORM, 3, 0)).." dur "..(20 + get_level(ICESTORM, 70))
- end,
- ["desc"] = {
- "Engulfs you in a storm of roaring cold that strikes your foes.",
- "At level 10 it turns into shards of ice."
- }
-}
-
-ENTPOTION = add_spell
-{
- ["name"] = "Ent's Potion",
- ["school"] = {SCHOOL_WATER},
- ["level"] = 6,
- ["mana"] = 7,
- ["mana_max"] = 15,
- ["fail"] = 35,
- ["inertia"] = { 1, 30 },
- ["spell"] = function()
- set_food(PY_FOOD_MAX - 1)
- msg_print("The Ent's Potion fills your stomach.")
- if get_level(ENTPOTION, 50) >= 5 then
- set_afraid(0)
- end
- if get_level(ENTPOTION, 50) >= 12 then
- set_hero(player.hero + randint(25) + 25 + get_level(ENTPOTION, 40))
- end
- return TRUE
- end,
- ["info"] = function()
- if get_level(ENTPOTION, 50) >= 12 then
- return "dur "..(25 + get_level(ENTPOTION, 40)).."+d25"
- else
- return ""
- end
- end,
- ["desc"] = {
- "Fills up your stomach.",
- "At level 5 it boldens your heart.",
- "At level 12 it makes you heroic."
- }
-}
-
-VAPOR = add_spell
-{
- ["name"] = "Vapor",
- ["school"] = {SCHOOL_WATER},
- ["level"] = 2,
- ["mana"] = 2,
- ["mana_max"] = 12,
- ["fail"] = 20,
- ["inertia"] = { 1, 30 },
- ["spell"] = function()
- fire_cloud(GF_WATER, 0, 3 + get_level(VAPOR, 20), 3 + get_level(VAPOR, 9, 0), 5)
- return TRUE
- end,
- ["info"] = function()
- return "dam "..(3 + get_level(VAPOR, 20)).." rad "..(3 + get_level(VAPOR, 9, 0)).." dur 5"
- end,
- ["desc"] = {
- "Fills the air with toxic moisture to eradicate annoying critters."
- }
-}
-
-function get_geyser_damage()
- return get_level(GEYSER, 10), 3 + get_level(GEYSER, 35)
-end
-
-GEYSER = add_spell
-{
- ["name"] = "Geyser",
- ["school"] = SCHOOL_WATER,
- ["level"] = 1,
- ["mana"] = 1,
- ["mana_max"] = 35,
- ["fail"] = 5,
- ["spell"] = function()
- local ret, dir
- ret, dir = get_aim_dir()
- if ret == FALSE then return end
- return fire_bolt_or_beam(2 * get_level(GEYSER, 85), GF_WATER, dir, damroll(get_geyser_damage()))
- end,
- ["info"] = function()
- local n, d
- n, d = get_geyser_damage()
- return "dam "..n.."d"..d
- end,
- ["desc"] =
- {
- "Shoots a geyser of water from your fingertips.",
- "Sometimes it can blast through its first target."
- },
-}
diff --git a/lib/mods/theme/scpt/s_yavann.lua b/lib/mods/theme/scpt/s_yavann.lua
deleted file mode 100644
index 2f594e85..00000000
--- a/lib/mods/theme/scpt/s_yavann.lua
+++ /dev/null
@@ -1,157 +0,0 @@
--- Handle Yavanna kementari magic school
-
-YAVANNA_CHARM_ANIMAL = add_spell
-{
- ["name"] = "Charm Animal",
- ["school"] = {SCHOOL_YAVANNA},
- ["level"] = 1,
- ["mana"] = 10,
- ["mana_max"] = 100,
- ["fail"] = 30,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local ret, dir = get_aim_dir()
- if ret == FALSE then return end
-
- return fire_ball(GF_CONTROL_ANIMAL, dir, 10 + get_level(YAVANNA_CHARM_ANIMAL, 170), get_level(YAVANNA_CHARM_ANIMAL, 2))
- end,
- ["info"] = function()
- return "power "..(10 + get_level(YAVANNA_CHARM_ANIMAL, 170)).." rad "..(get_level(YAVANNA_CHARM_ANIMAL, 2))
- end,
- ["desc"] = {
- "It tries to tame an animal",
- }
-}
-
-YAVANNA_GROW_GRASS = add_spell
-{
- ["name"] = "Grow Grass",
- ["school"] = {SCHOOL_YAVANNA},
- ["level"] = 10,
- ["mana"] = 70,
- ["mana_max"] = 150,
- ["fail"] = 65,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- grow_grass(get_level(YAVANNA_GROW_GRASS, 4))
- return TRUE
- end,
- ["info"] = function()
- return "rad "..(get_level(YAVANNA_GROW_GRASS, 4))
- end,
- ["desc"] = {
- "Create a floor of grass around you. While on grass and praying",
- "a worshipper of Yavanna will know a greater regeneration rate"
- }
-}
-
-YAVANNA_TREE_ROOTS = add_spell
-{
- ["name"] = "Tree Roots",
- ["school"] = {SCHOOL_YAVANNA},
- ["level"] = 15,
- ["mana"] = 50,
- ["mana_max"] = 1000,
- ["fail"] = 70,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- return set_roots(10 + get_level(YAVANNA_TREE_ROOTS, 30), 10 + get_level(YAVANNA_TREE_ROOTS, 60), 10 + get_level(YAVANNA_TREE_ROOTS, 20))
- end,
- ["info"] = function()
- return "dur "..(10 + get_level(YAVANNA_TREE_ROOTS, 30)).." AC "..(10 + get_level(YAVANNA_TREE_ROOTS, 60)).." dam "..(10 + get_level(YAVANNA_TREE_ROOTS, 20))
- end,
- ["desc"] = {
- "Creates roots deep in the floor from your feet, making you more stable and able",
- "to make stronger attacks, but prevents any movement (even teleportation).",
- "It also makes you recover from stunning almost immediately."
- }
-}
-
-YAVANNA_WATER_BITE = add_spell
-{
- ["name"] = "Water Bite",
- ["school"] = {SCHOOL_YAVANNA},
- ["level"] = 20,
- ["mana"] = 150,
- ["mana_max"] = 300,
- ["fail"] = 90,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local rad
-
- rad = 0
- if get_level(YAVANNA_WATER_BITE) >= 25 then rad = 1 end
-
- return set_project(randint(30) + 30 + get_level(YAVANNA_WATER_BITE, 150),
- GF_WATER,
- 10 + get_level(YAVANNA_WATER_BITE),
- rad,
- bor(PROJECT_STOP, PROJECT_KILL))
- end,
- ["info"] = function()
- return "dur "..(30 + get_level(YAVANNA_WATER_BITE, 150)).."+d30 dam "..(10 + get_level(YAVANNA_WATER_BITE)).."/blow"
- end,
- ["desc"] = {
- "Imbues your melee weapon with a natural stream of water",
- "At level 25, it spreads over a 1 radius zone around your target"
- }
-}
-
-YAVANNA_UPROOT = add_spell
-{
- ["name"] = "Uproot",
- ["school"] = {SCHOOL_YAVANNA},
- ["level"] = 35,
- ["mana"] = 250,
- ["mana_max"] = 350,
- ["fail"] = 95,
- -- Uses piety to cast
- ["piety"] = TRUE,
- ["stat"] = A_WIS,
- ["random"] = SKILL_SPIRITUALITY,
- ["spell"] = function()
- local m_idx, x, y, c_ptr, ret, dir
-
- ret, dir = get_rep_dir()
- if ret == FALSE then return end
- y, x = explode_dir(dir)
- y, x = y + player.py, x + player.px
- c_ptr = cave(y, x)
-
- if c_ptr.feat == FEAT_TREES then
- cave_set_feat(y, x, FEAT_GRASS);
-
- -- Summon it
- y, x = find_position(y, x)
- m_idx = place_monster_one(y, x, test_monster_name("Ent"), 0, FALSE, MSTATUS_FRIEND)
-
- -- level it
- if m_idx ~= 0 then
- monster_set_level(m_idx, 30 + get_level(YAVANNA_UPROOT, 70))
- end
-
- msg_print("The tree awakes!");
- else
- msg_print("There is no tree there.")
- end
- return TRUE
- end,
- ["info"] = function()
- return "lev "..(30 + get_level(YAVANNA_UPROOT, 70))
- end,
- ["desc"] = {
- "Awakes a tree to help you battle the forces of Morgoth",
- }
-}
diff --git a/lib/mods/theme/scpt/spells.lua b/lib/mods/theme/scpt/spells.lua
deleted file mode 100644
index 838240a3..00000000
--- a/lib/mods/theme/scpt/spells.lua
+++ /dev/null
@@ -1,627 +0,0 @@
---
--- This file takes care of the schools of magic
---
-
--- Create the schools
-SCHOOL_MANA = add_school
-{
- ["name"] = "Mana",
- ["skill"] = SKILL_MANA,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["gods"] =
- {
- -- Varda provides the Mana school at 1/4 the prayer skill
- [GOD_VARDA] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 4,
- },
- -- Eru Iluvatar provides the Mana school at half the prayer skill
- [GOD_ERU] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 2,
- },
- },
- ["hooks"] =
- {
- [HOOK_CALC_MANA] = function(msp)
- if get_skill(SKILL_MANA) >= 35 then
- msp = msp + (msp * ((get_skill(SKILL_MANA) - 34)) / 100)
- return TRUE, msp
- end
- end
- },
-}
-SCHOOL_FIRE = add_school
-{
- ["name"] = "Fire",
- ["skill"] = SKILL_FIRE,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- if get_skill(SKILL_FIRE) >= 35 then
- end
- end,
- [HOOK_CALC_POWERS] = function()
- if get_skill(SKILL_FIRE) >= 50 then
--- player.add_power(PWR_FIRE_SHAPE)
- end
- end,
- },
- ["gods"] =
- {
- -- Aule provides the Fire school at 3/5 the prayer skill
- [GOD_AULE] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 3,
- ["div"] = 5,
- },
- },
-}
-SCHOOL_AIR = add_school
-{
- ["name"] = "Air",
- ["skill"] = SKILL_AIR,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- if get_skill(SKILL_AIR) >= 50 then
- player.magical_breath = TRUE
- end
- end,
- [HOOK_CALC_POWERS] = function()
- if get_skill(SKILL_AIR) >= 50 then
--- player.add_powe(PWR_AIR_SHAPE)
- end
- end,
- },
- ["gods"] =
- {
- -- Manwe Sulimo provides the Air school at 2/3 the prayer skill
- [GOD_MANWE] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 2,
- ["div"] = 3,
- },
- },
-}
-SCHOOL_WATER = add_school
-{
- ["name"] = "Water",
- ["skill"] = SKILL_WATER,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["hooks"] =
- {
- [HOOK_CALC_BONUS] = function()
- if get_skill(SKILL_WATER) >= 30 then
- player.water_breath = TRUE
- end
- end,
- [HOOK_CALC_POWERS] = function()
- if get_skill(SKILL_WATER) >= 50 then
--- player.add_powe(PWR_WATER_SHAPE)
- end
- end,
- },
- ["gods"] =
- {
- -- Yavanna Kementari provides the Water school at 1/2 the prayer skill
- [GOD_YAVANNA] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 2,
- },
- -- Ulmo provides the Water school at 3/5 the prayer skill
- [GOD_ULMO] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 3,
- ["div"] = 5,
- },
- },
-}
-SCHOOL_EARTH = add_school
-{
- ["name"] = "Earth",
- ["skill"] = SKILL_EARTH,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["hooks"] =
- {
- [HOOK_CALC_POWERS] = function()
- if get_skill(SKILL_EARTH) >= 50 then
--- player.add_powe(PWR_EARTH_SHAPE)
- end
- end,
- },
- ["gods"] =
- {
- -- Tulkas provides the Earth school at 4/5 the prayer skill
- [GOD_TULKAS] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 4,
- ["div"] = 5,
- },
- -- Yavanna Kementari provides the Earth school at 1/2 the prayer skill
- [GOD_YAVANNA] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 2,
- },
-
- -- Aule provides the Earth school at 1/3 the prayer skill
- [GOD_AULE] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 3,
- },
- },
-}
-SCHOOL_CONVEYANCE = add_school
-{
- ["name"] = "Conveyance",
- ["skill"] = SKILL_CONVEYANCE,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["gods"] =
- {
- -- Manwe Sulimo provides the Conveyance school at 1/2 the prayer skill
- [GOD_MANWE] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 2,
- },
- },
-}
-SCHOOL_GEOMANCY = add_school
-{
- ["name"] = "Geomancy",
- ["skill"] = SKILL_GEOMANCY,
- ["spell_power"] = TRUE,
- -- Require to wield a Mage Staff, as the spells requries the caster to stomp the floor with it
- ["depend"] = function()
- -- Require at least one point in each school
- if get_skill(SKILL_FIRE) == 0 then return end
- if get_skill(SKILL_AIR) == 0 then return end
- if get_skill(SKILL_EARTH) == 0 then return end
- if get_skill(SKILL_WATER) == 0 then return end
-
- local obj = get_object(INVEN_WIELD)
- if (obj.k_idx > 0) and (obj.tval == TV_MSTAFF) then return TRUE end
- end,
-}
-SCHOOL_DIVINATION = add_school
-{
- ["name"] = "Divination",
- ["skill"] = SKILL_DIVINATION,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["gods"] =
- {
- -- Eru Iluvatar provides the Divination school at 2/3 the prayer skill
- [GOD_ERU] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 2,
- ["div"] = 3,
- },
- -- Mandos the Divination school at 1/3 the prayer skill
- [GOD_MANDOS] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 3,
- },
- },
-}
-SCHOOL_TEMPORAL = add_school
-{
- ["name"] = "Temporal",
- ["skill"] = SKILL_TEMPORAL,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["gods"] =
- {
- -- Yavanna Kementari provides the Temporal school at 1/6 the prayer skill
- [GOD_YAVANNA] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 6,
- },
- -- Mandos provides the Temporal school at 1/4 the prayer skill
- [GOD_MANDOS] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 4,
- },
- },
-}
-SCHOOL_NATURE = add_school
-{
- ["name"] = "Nature",
- ["skill"] = SKILL_NATURE,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["gods"] =
- {
- -- Yavanna Kementari provides the Nature school at 1/2 the prayer skill
- [GOD_YAVANNA] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 2,
- },
- -- Ulmo provides the Nature school at 1/2 the prayer skill
- [GOD_ULMO] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 2,
- },
- },
-}
-SCHOOL_META = add_school
-{
- ["name"] = "Meta",
- ["skill"] = SKILL_META,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["gods"] =
- {
- -- Manwe Sulimo provides the Meta school at 1/3 the prayer skill
- [GOD_MANWE] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 3,
- },
- -- Varda provides the Meta school at 1/2 the prayer skill
- [GOD_VARDA] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 2,
- },
- },
-}
-SCHOOL_MIND = add_school
-{
- ["name"] = "Mind",
- ["skill"] = SKILL_MIND,
- ["spell_power"] = TRUE,
- ["sorcery"] = TRUE,
- ["gods"] =
- {
- -- Eru Iluvatar provides the Mind school at 1/3 the prayer skill
- [GOD_ERU] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 3,
- },
- -- Melkor Bauglir provides the Mind school at 1/3 the prayer skill
- [GOD_MELKOR] =
- {
- ["skill"] = SKILL_PRAY,
- ["mul"] = 1,
- ["div"] = 3,
- },
- },
-}
-SCHOOL_UDUN = add_school
-{
- ["name"] = "Udun",
- ["skill"] = SKILL_UDUN,
- ["bonus_level"] = function()
- return ((player.lev * 2) / 3)
- end,
-}
-SCHOOL_DEMON = add_school
-{
- ["name"] = "Demon",
- ["skill"] = SKILL_DAEMON,
- ["no_random"] = TRUE,
-}
-
--- The God specific schools, all tied to the prayer skill
-SCHOOL_ERU = add_school
-{
- ["name"] = "Eru Iluvatar",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_ERU,
-}
-SCHOOL_MANWE = add_school
-{
- ["name"] = "Manwe Sulimo",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_MANWE,
-}
-SCHOOL_TULKAS = add_school
-{
- ["name"] = "Tulkas",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_TULKAS,
-}
-SCHOOL_MELKOR = add_school
-{
- ["name"] = "Melkor Bauglir",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_MELKOR,
-}
-SCHOOL_YAVANNA = add_school
-{
- ["name"] = "Yavanna Kementari",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_YAVANNA,
-}
-
--- New schools
-SCHOOL_AULE = add_school
-{
- ["name"] = "Aule the Smith",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_AULE,
-}
-SCHOOL_VARDA = add_school
-{
- ["name"] = "Varda Elentari",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_VARDA,
-}
-
-SCHOOL_ULMO = add_school
-{
- ["name"] = "Ulmo",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_ULMO,
-}
-
-SCHOOL_MANDOS = add_school
-{
- ["name"] = "Mandos",
- ["skill"] = SKILL_PRAY,
- ["spell_power"] = TRUE,
- ["god"] = GOD_MANDOS,
-}
-
--- Not a real school, rather a palcehodler for stick only spells
-SCHOOL_DEVICE = add_school
-{
- ["name"] = "Device",
- ["skill"] = SKILL_DEVICE,
-}
-
--- Music "spells"
-SCHOOL_MUSIC = add_school
-{
- ["name"] = "Music",
- ["skill"] = SKILL_MUSIC,
-}
-
--- Put some spells
-tome_dofile("s_fire.lua")
-tome_dofile("s_mana.lua")
-tome_dofile("s_water.lua")
-tome_dofile("s_air.lua")
-tome_dofile("s_earth.lua")
-tome_dofile("s_convey.lua")
-tome_dofile("s_nature.lua")
-tome_dofile("s_divin.lua")
-tome_dofile("s_tempo.lua")
-tome_dofile("s_meta.lua")
-tome_dofile("s_mind.lua")
-tome_dofile("s_udun.lua")
-tome_dofile("s_geom.lua")
-
--- God's specific spells
-tome_dofile("s_eru.lua")
-tome_dofile("s_manwe.lua")
-tome_dofile("s_tulkas.lua")
-tome_dofile("s_melkor.lua")
-tome_dofile("s_yavann.lua")
-
--- New gods' spells
-tome_dofile("s_aule.lua")
-tome_dofile("s_varda.lua")
-tome_dofile("s_ulmo.lua")
-tome_dofile("s_mandos.lua")
-
--- Specific schools
-tome_dofile("s_demon.lua")
-
--- Device spells
-tome_dofile("s_stick.lua")
-
--- Musics
-tome_dofile("s_music.lua")
-
--- List of spellbooks
-
--- Create the crystal of mana
-school_book[0] = {
- MANATHRUST, DELCURSES, RESISTS, MANASHIELD,
-}
-
--- The book of the eternal flame
-school_book[1] = {
- GLOBELIGHT, FIREGOLEM, FIREFLASH, FIREWALL, FIERYAURA,
-}
-
--- The book of the blowing winds
-school_book[2] = {
- NOXIOUSCLOUD, POISONBLOOD, INVISIBILITY, STERILIZE, AIRWINGS, THUNDERSTORM,
-}
-
--- The book of the impenetrable earth
-school_book[3] = {
- STONESKIN, DIG, STONEPRISON, SHAKE, STRIKE,
-}
-
--- The book of the unstopable wave
-school_book[4] = {
- GEYSER, VAPOR, ENTPOTION, TIDALWAVE, ICESTORM
-}
-
--- Create the book of translocation
-school_book[5] = {
- BLINK, DISARM, TELEPORT, TELEAWAY, RECALL, PROBABILITY_TRAVEL,
-}
-
--- Create the book of the tree
-school_book[6] = {
- GROWTREE, HEALING, RECOVERY, REGENERATION, SUMMONANNIMAL, GROW_ATHELAS,
-}
-
--- Create the book of Knowledge
-school_book[7] = {
- SENSEMONSTERS, SENSEHIDDEN, REVEALWAYS, IDENTIFY, VISION, STARIDENTIFY,
-}
-
--- Create the book of the Time
-school_book[8] = {
- MAGELOCK, SLOWMONSTER, ESSENCESPEED, BANISHMENT,
-}
-
--- Create the book of meta spells
-school_book[9] = {
- RECHARGE, DISPERSEMAGIC, SPELLBINDER, TRACKER, INERTIA_CONTROL,
-}
-
--- Create the book of the mind
-school_book[10] = {
- CHARM, CONFUSE, ARMOROFFEAR, STUN,
-}
-
--- Create the book of hellflame
-school_book[11] = {
- DRAIN, GENOCIDE, WRAITHFORM, FLAMEOFUDUN,
-}
-
--- Create the book of eru
-school_book[20] = {
- ERU_SEE, ERU_LISTEN, ERU_UNDERSTAND, ERU_PROT,
-}
-
--- Create the book of manwe
-school_book[21] = {
- MANWE_BLESS, MANWE_SHIELD, MANWE_CALL, MANWE_AVATAR,
-}
-
--- Create the book of tulkas
-school_book[22] = {
- TULKAS_AIM, TULKAS_SPIN, TULKAS_WAVE,
-}
-
--- Create the book of melkor
-school_book[23] = {
- MELKOR_CURSE, MELKOR_CORPSE_EXPLOSION, MELKOR_MIND_STEAL,
-}
-
--- Create the book of yavanna
-school_book[24] = {
- YAVANNA_CHARM_ANIMAL, YAVANNA_GROW_GRASS, YAVANNA_TREE_ROOTS, YAVANNA_WATER_BITE, YAVANNA_UPROOT,
-}
-
--- Create the book of beginner's cantrip
-school_book[50] = {
- MANATHRUST, GLOBELIGHT, ENTPOTION, BLINK, SENSEMONSTERS, SENSEHIDDEN,
-}
-
--- Create the book of teleporatation
-school_book[51] = {
- BLINK, TELEPORT, TELEAWAY
-}
-
--- Create the book of summoning
-school_book[52] = {
- FIREGOLEM, SUMMONANNIMAL
-}
-
-
--- Create the Armageddon Demonblade
-school_book[55] = {
- DEMON_BLADE, DEMON_MADNESS, DEMON_FIELD,
-}
-
--- Create the Shield Demonblade
-school_book[56] = {
- DOOM_SHIELD, DEMON_CLOAK, UNHOLY_WORD,
-}
-
--- Create the Control Demonblade
-school_book[57] = {
- DEMON_SUMMON, DISCHARGE_MINION, CONTROL_DEMON,
-}
-
--- Create the Drums
-school_book[58] = {
- MUSIC_STOP, MUSIC_HOLD, MUSIC_CONF, MUSIC_STUN,
-}
-
--- Create the Harps
-school_book[59] = {
- MUSIC_STOP, MUSIC_LITE, MUSIC_HERO, MUSIC_HEAL, MUSIC_TIME, MUSIC_MIND,
-}
-
--- Create the Horns
-school_book[60] = {
- MUSIC_STOP, MUSIC_BLOW, MUSIC_WIND, MUSIC_YLMIR, MUSIC_AMBARKANTA,
-}
-
--- Book of the Player, filled in by the Library Quest
-school_book[61] = { }
-
--- Geomancy spells, not a real book
-school_book[62] = {
- CALL_THE_ELEMENTS, CHANNEL_ELEMENTS, ELEMENTAL_WAVE, VAPORIZE, GEOLYSIS, DRIPPING_TREAD, GROW_BARRIER, ELEMENTAL_MINION
-}
-
--- Aule book [63]
-school_book[BOOK_AULE] =
-{
- AULE_FIREBRAND, AULE_ENCHANT_WEAPON, AULE_ENCHANT_ARMOUR, AULE_CHILD,
-}
-
--- Varda book [64]
-school_book[BOOK_VARDA] =
-{
- VARDA_LIGHT_VALINOR, VARDA_CALL_ALMAREN, VARDA_EVENSTAR, VARDA_STARKINDLER,
-}
-
--- Ulmo book [65]
-school_book[BOOK_ULMO] =
-{
- ULMO_BELEGAER, ULMO_DRAUGHT_ULMONAN, ULMO_CALL_ULUMURI, ULMO_WRATH,
-}
-
--- Mandos book [66]
-school_book[BOOK_MANDOS] =
-{
- MANDOS_TEARS_LUTHIEN, MANDOS_SPIRIT_FEANTURI, MANDOS_TALE_DOOM, MANDOS_CALL_HALLS
-} \ No newline at end of file
diff --git a/lib/mods/theme/scpt/stores.lua b/lib/mods/theme/scpt/stores.lua
deleted file mode 100644
index 4902c4d0..00000000
--- a/lib/mods/theme/scpt/stores.lua
+++ /dev/null
@@ -1,161 +0,0 @@
--- Whats shops can buy what
-store_buy_list
-{
- ["General Store"] =
- {
- TV_CORPSE,
- TV_FOOD,
- TV_LITE,
- TV_FLASK,
- TV_SPIKE,
- TV_SHOT,
- TV_ARROW,
- TV_BOLT,
- TV_DIGGING,
- TV_CLOAK,
- TV_BOTTLE,
- },
- ["Armoury"] =
- {
- TV_BOOTS,
- TV_GLOVES,
- TV_CROWN,
- TV_HELM,
- TV_SHIELD,
- TV_CLOAK,
- TV_SOFT_ARMOR,
- TV_HARD_ARMOR,
- TV_DRAG_ARMOR,
- },
- ["Weaponsmith"] =
- {
- TV_SHOT,
- TV_BOLT,
- TV_ARROW,
- TV_BOOMERANG,
- TV_BOW,
- TV_DIGGING,
- TV_HAFTED,
- TV_POLEARM,
- TV_SWORD,
- TV_AXE,
- TV_MSTAFF,
- },
- -- We use a function because we want to restrict to blessed weapons and god spells
- ["Temple"] = function (obj)
- if obj.tval == TV_DRUID_BOOK then return TRUE
- elseif obj.tval == TV_BOOK and obj.sval == 255 and (can_spell_random(obj.pval) == SKILL_SPIRITUALITY) then return TRUE
- elseif obj.tval == TV_SCROLL then return TRUE
- elseif obj.tval == TV_POTION2 then return TRUE
- elseif obj.tval == TV_POTION then return TRUE
- elseif obj.tval == TV_HAFTED then return TRUE
- elseif obj.tval == TV_POLEARM and is_blessed(obj) == TRUE then return TRUE
- elseif obj.tval == TV_SWORD and is_blessed(obj) == TRUE then return TRUE
- elseif obj.tval == TV_AXE and is_blessed(obj) == TRUE then return TRUE
- elseif obj.tval == TV_BOOMERANG and is_blessed(obj) == TRUE then return TRUE
- end
- end,
- ["Alchemy shop"] =
- {
- TV_SCROLL,
- TV_POTION2,
- TV_POTION,
- TV_BATERIE,
- TV_BOTTLE,
- },
- -- We use a function because we dont want god spells
- ["Magic shop"] = function (obj)
- local buy =
- {
- [TV_SYMBIOTIC_BOOK] = TRUE,
- [TV_AMULET] = TRUE,
- [TV_RING] = TRUE,
- [TV_STAFF] = TRUE,
- [TV_WAND] = TRUE,
- [TV_ROD] = TRUE,
- [TV_ROD_MAIN] = TRUE,
- [TV_SCROLL] = TRUE,
- [TV_POTION2] = TRUE,
- [TV_POTION] = TRUE,
- [TV_MSTAFF] = TRUE,
- [TV_RANDART] = TRUE,
- }
-
- if obj.tval == TV_BOOK and obj.sval == 255 and (can_spell_random(obj.pval) == SKILL_MAGIC) then return TRUE
- elseif obj.tval == TV_BOOK and obj.sval ~= 255 then return TRUE
- elseif buy[obj.tval] == TRUE then return TRUE
- end
- end,
- -- Black markets wants ALL!
- ["Black Market"] = function (obj)
- return TRUE
- end,
- ["Book Store"] =
- {
- TV_BOOK,
- TV_SYMBIOTIC_BOOK,
- TV_MUSIC_BOOK,
- TV_DAEMON_BOOK,
- TV_DRUID_BOOK,
- },
- ["Pet Shop"] =
- {
- TV_EGG,
- },
--- Theme stores
-
- ["Hunting Supply Store"] =
- {
- TV_TRAPKIT,
- TV_BOOMERANG,
- TV_SHOT,
- TV_BOLT,
- TV_ARROW,
- TV_BOW,
- TV_POTION2,
- },
-
- ["Runic Magic Shop"] =
- {
- TV_RUNE1,
- TV_RUNE2,
- },
-
- ["Construction Supply Store"] =
- {
- TV_LITE,
- TV_DIGGING,
- },
-
- ["Music Store"] =
- {
- TV_INSTRUMENT,
- },
-}
-
--- Take care to have Magic shop/Temple have specific spells only
-add_hooks
-{
- [HOOK_STORE_STOCK] = function (index, name, level)
- if name == "Magic shop" then
- -- Books
- if magik(20) == TRUE then
- object_prep(obj_forge, lookup_kind(TV_BOOK, 255))
- local spell = get_random_spell(SKILL_MAGIC, 20)
- if spell > -1 then
- obj_forge.pval = spell
- return TRUE, obj_forge
- end
- end
- elseif name == "Temple" then
- if magik(20) == TRUE then
- object_prep(obj_forge, lookup_kind(TV_BOOK, 255))
- local spell = get_random_spell(SKILL_SPIRITUALITY, 20)
- if spell > -1 then
- obj_forge.pval = spell
- return TRUE, obj_forge
- end
- end
- end
- end,
-}
diff --git a/lib/mods/theme/user/all.prf b/lib/mods/theme/user/all.prf
index 4e9dead3..67671aa4 100644
--- a/lib/mods/theme/user/all.prf
+++ b/lib/mods/theme/user/all.prf
@@ -8,9 +8,6 @@ X:rogue_like_commands
# Option 'Activate quick messages'
Y:quick_messages
-# Option 'Prompt for various information'
-X:other_query_flag
-
# Option 'Prompt before picking things up'
X:carry_query_flag
@@ -26,36 +23,6 @@ Y:prompt_pickup_heavy
# Option 'Repeat obvious commands'
Y:always_repeat
-# Option 'Show dungeon level in feet'
-X:depth_in_feet
-
-# Option 'Merge inscriptions when stacking'
-Y:stack_force_notes
-
-# Option 'Merge discounts when stacking'
-Y:stack_force_costs
-
-# Option 'Show labels in object listings'
-Y:show_labels
-
-# Option 'Show weights in object listings'
-Y:show_weights
-
-# Option 'Show graphics in inventory list'
-Y:show_inven_graph
-
-# Option 'Show graphics in equipment list'
-Y:show_equip_graph
-
-# Option 'Show graphics in stores'
-Y:show_store_graph
-
-# Option 'Show choices in certain sub-windows'
-Y:show_choices
-
-# Option 'Show details in certain sub-windows'
-Y:show_details
-
# Option 'Audible bell (on errors, etc)'
X:ring_bell
@@ -104,12 +71,6 @@ Y:alert_failure
# Option 'Get last words when the character dies'
Y:last_words
-# Option 'Allow shopkeepers and uniques to speak'
-Y:speak_unique
-
-# Option 'No query to destroy known worthless items'
-Y:auto_destroy
-
# Option 'Confirm to wear/wield known cursed items'
Y:confirm_wear
@@ -134,12 +95,6 @@ Y:auto_haggle
# Option 'Auto-scum for good levels'
Y:auto_scum
-# Option 'Allow weapons and armour to stack'
-Y:stack_allow_items
-
-# Option 'Allow wands/staffs/rods to stack'
-Y:stack_allow_wands
-
# Option 'Expand the power of the look command'
Y:expand_look
@@ -164,21 +119,9 @@ Y:dungeon_stair
# Option 'Monsters chase current location (v.slow)'
X:flow_by_sound
-# Option 'Use special symbols for the player char'
-X:player_symbols
-
-# Option 'Plain object descriptions'
-Y:plain_descriptions
-
# Option 'Monsters learn from their mistakes'
X:smart_learn
-# Option 'Monsters exploit players weaknesses'
-X:smart_cheat
-
-# Option 'Monsters behave stupidly'
-X:stupid_monsters
-
# Option 'Allow unusually small dungeon levels'
Y:small_levels
@@ -188,9 +131,6 @@ Y:empty_levels
# Option 'Reduce lite-radius when running'
X:view_reduce_lite
-# Option 'Reduce view-radius in town'
-X:view_reduce_view
-
# Option 'Avoid checking for user abort'
X:avoid_abort
@@ -242,9 +182,6 @@ X:center_player
# Option 'Ingame contextual help'
X:ingame_help
-# Option 'Show the experience needed for next level'
-X:exp_need
-
# Option 'Use the old(Z) coloring scheme(reload the game)'
X:old_colors