summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorManoj Srivastava <srivasta@debian.org>2016-01-27 13:11:31 -0800
committerManoj Srivastava <srivasta@debian.org>2016-01-27 13:11:31 -0800
commit02819db3483514d49df7ec3f7e372b5aeb831466 (patch)
tree6a86adac74beac293bc688dafcfa1709a6476901 /lib
parent2a61dffe127e22c1aaf955db6f085ac2eefbebba (diff)
parent6f6de67c70fd98815088ce49f046f48f88ea35bd (diff)
Merge branch 'upstream'
Signed-off-by: Manoj Srivastava <srivasta@debian.org> # Conflicts: # src/CMakeLists.txt # src/config.h # src/lua/llimits.h
Diffstat (limited to 'lib')
-rw-r--r--lib/.gitignore2
-rw-r--r--lib/CMakeLists.txt10
-rw-r--r--lib/apex/.cvsignore1
-rw-r--r--lib/core/auto.lua859
-rw-r--r--lib/core/building.lua15
-rw-r--r--lib/core/crpt_aux.lua182
-rw-r--r--lib/core/dungeon.lua55
-rw-r--r--lib/core/gen_idx.lua261
-rw-r--r--lib/core/gods.lua40
-rw-r--r--lib/core/help.lua141
-rw-r--r--lib/core/init.lua83
-rw-r--r--lib/core/load.lua37
-rw-r--r--lib/core/load2.lua56
-rw-r--r--lib/core/mimc_aux.lua96
-rw-r--r--lib/core/monsters.lua16
-rw-r--r--lib/core/objects.lua45
-rw-r--r--lib/core/player.lua135
-rw-r--r--lib/core/quests.lua57
-rw-r--r--lib/core/s_aux.lua716
-rw-r--r--lib/core/stores.lua32
-rw-r--r--lib/core/util.lua158
-rw-r--r--lib/core/xml.lua375
-rw-r--r--lib/data/.cvsignore2
-rw-r--r--lib/edit/a_info.txt190
-rw-r--r--lib/edit/ab_info.txt19
-rw-r--r--lib/edit/al_info.txt2097
-rw-r--r--lib/edit/ba_info.txt50
-rw-r--r--lib/edit/d_info.txt6
-rw-r--r--lib/edit/e_info.txt22
-rw-r--r--lib/edit/f_info.txt5
-rw-r--r--lib/edit/k_info.txt193
-rw-r--r--lib/edit/misc.txt3
-rw-r--r--lib/edit/ow_info.txt146
-rw-r--r--lib/edit/p_info.txt50
-rw-r--r--lib/edit/r_info.txt4
-rw-r--r--lib/edit/ra_info.txt4
-rw-r--r--lib/edit/re_info.txt4
-rw-r--r--lib/edit/s_info.txt10
-rw-r--r--lib/edit/set_info.txt4
-rw-r--r--lib/edit/st_info.txt23
-rw-r--r--lib/edit/t_basic.txt80
-rw-r--r--lib/edit/t_bree.txt5
-rw-r--r--lib/edit/t_gondol.txt5
-rw-r--r--lib/edit/t_minas.txt5
-rw-r--r--lib/edit/tr_info.txt2
-rw-r--r--lib/edit/v_info.txt5
-rw-r--r--lib/edit/wf_info.txt4
-rw-r--r--lib/file/elvish.txt218
-rw-r--r--lib/help/ability.txt20
-rw-r--r--lib/help/advanced.hlp5
-rw-r--r--lib/help/automat.txt7
-rw-r--r--lib/help/birth.txt3
-rw-r--r--lib/help/c_alchem.txt135
-rw-r--r--lib/help/c_merch.txt29
-rw-r--r--lib/help/command.txt44
-rw-r--r--lib/help/debug.txt5
-rw-r--r--lib/help/def.aux3
-rw-r--r--lib/help/defines.txt23
-rw-r--r--lib/help/dungeon.txt2
-rw-r--r--lib/help/essences.txt219
-rw-r--r--lib/help/index.txt9
-rw-r--r--lib/help/lua.hlp34
-rw-r--r--lib/help/lua_gf.txt45
-rw-r--r--lib/help/lua_intr.txt133
-rw-r--r--lib/help/lua_mon.txt535
-rw-r--r--lib/help/lua_play.txt1225
-rw-r--r--lib/help/lua_pow.txt266
-rw-r--r--lib/help/lua_ques.txt299
-rw-r--r--lib/help/lua_skil.txt342
-rw-r--r--lib/help/lua_spel.txt2150
-rw-r--r--lib/help/lua_util.txt898
-rw-r--r--lib/help/macrofaq.txt16
-rw-r--r--lib/help/magic.txt5
-rw-r--r--lib/help/option.txt131
-rw-r--r--lib/help/skills.txt11
-rw-r--r--lib/help/spoiler.hlp1
-rw-r--r--lib/help/tome_faq.txt8
-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
-rw-r--r--lib/module.lua36
-rw-r--r--lib/patch/.cvsignore1
-rw-r--r--lib/pref/422color.prf909
-rw-r--r--lib/pref/font-ami.prf28
-rw-r--r--lib/pref/font-dos.prf8
-rw-r--r--lib/pref/font-mac.new108
-rw-r--r--lib/pref/font-xxx.prf3
-rw-r--r--lib/pref/font.prf20
-rw-r--r--lib/pref/graf-ami.prf64
-rw-r--r--lib/pref/graf-dos.prf15
-rw-r--r--lib/pref/graf-iso.prf6878
-rw-r--r--lib/pref/graf-mac.prf15
-rw-r--r--lib/pref/graf-new.prf6847
-rw-r--r--lib/pref/graf-sdl.prf37
-rw-r--r--lib/pref/graf-win.prf16
-rw-r--r--lib/pref/graf-x11.prf37
-rw-r--r--lib/pref/graf-xxx.prf6348
-rw-r--r--lib/pref/graf.prf51
-rw-r--r--lib/pref/pref-acn.prf24
-rw-r--r--lib/pref/pref-ami.prf7
-rw-r--r--lib/pref/pref-emx.prf19
-rw-r--r--lib/pref/pref-iso.prf118
-rw-r--r--lib/pref/pref.prf16
-rw-r--r--lib/pref/trap-iso.prf429
-rw-r--r--lib/pref/user.prf17
-rw-r--r--lib/pref/xtra-new.prf1128
-rw-r--r--lib/scpt/.cvsignore1
-rw-r--r--lib/scpt/bounty.lua90
-rw-r--r--lib/scpt/corrupt.lua433
-rw-r--r--lib/scpt/drunk.lua21
-rw-r--r--lib/scpt/fireprof.lua415
-rw-r--r--lib/scpt/god.lua640
-rw-r--r--lib/scpt/gods.lua26
-rw-r--r--lib/scpt/help.lua411
-rw-r--r--lib/scpt/init.lua46
-rw-r--r--lib/scpt/intro.lua39
-rw-r--r--lib/scpt/joke.lua31
-rw-r--r--lib/scpt/library.lua436
-rw-r--r--lib/scpt/mimic.lua419
-rw-r--r--lib/scpt/mkeys.lua95
-rw-r--r--lib/scpt/player.lua76
-rw-r--r--lib/scpt/powers.lua61
-rw-r--r--lib/scpt/s_air.lua193
-rw-r--r--lib/scpt/s_convey.lua227
-rw-r--r--lib/scpt/s_demon.lua337
-rw-r--r--lib/scpt/s_divin.lua230
-rw-r--r--lib/scpt/s_earth.lua184
-rw-r--r--lib/scpt/s_eru.lua130
-rw-r--r--lib/scpt/s_fire.lua227
-rw-r--r--lib/scpt/s_geom.lua656
-rw-r--r--lib/scpt/s_mana.lua132
-rw-r--r--lib/scpt/s_manwe.lua144
-rw-r--r--lib/scpt/s_melkor.lua154
-rw-r--r--lib/scpt/s_meta.lua287
-rw-r--r--lib/scpt/s_mind.lua132
-rw-r--r--lib/scpt/s_music.lua443
-rw-r--r--lib/scpt/s_nature.lua152
-rw-r--r--lib/scpt/s_stick.lua444
-rw-r--r--lib/scpt/s_tempo.lua162
-rw-r--r--lib/scpt/s_tulkas.lua81
-rw-r--r--lib/scpt/s_udun.lua180
-rw-r--r--lib/scpt/s_water.lua154
-rw-r--r--lib/scpt/s_yavann.lua157
-rw-r--r--lib/scpt/spells.lua475
-rw-r--r--lib/scpt/stores.lua132
-rw-r--r--lib/xtra/graf/16x16.bmpbin1164238 -> 0 bytes
-rw-r--r--lib/xtra/graf/16x16.pngbin210021 -> 0 bytes
-rw-r--r--lib/xtra/graf/8x8.bmpbin203830 -> 0 bytes
-rw-r--r--lib/xtra/graf/8x8.pngbin44451 -> 0 bytes
-rw-r--r--lib/xtra/graf/mask.bmpbin1164342 -> 0 bytes
-rw-r--r--lib/xtra/graf/tome-128.pngbin45589 -> 0 bytes
-rw-r--r--lib/xtra/sound/Sound.cfg79
-rw-r--r--lib/xtra/sound/readme.txt33
296 files changed, 679 insertions, 90344 deletions
diff --git a/lib/.gitignore b/lib/.gitignore
new file mode 100644
index 00000000..2de989fd
--- /dev/null
+++ b/lib/.gitignore
@@ -0,0 +1,2 @@
+*.raw
+
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 44d7d1ee..15591830 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -1,25 +1,19 @@
-INSTALL(FILES
- module.lua
- DESTINATION ${DEFAULT_PATH}
-)
INSTALL(DIRECTORY
apex
cmov
- core
data
dngn
edit
file
help
info
- mods
note
pref
save
- scpt
user
xtra
DESTINATION ${DEFAULT_PATH}
- PATTERN "*.raw" EXCLUDE
PATTERN "delete.me" EXCLUDE
)
+
+ADD_SUBDIRECTORY (mods)
diff --git a/lib/apex/.cvsignore b/lib/apex/.cvsignore
deleted file mode 100644
index dfa43964..00000000
--- a/lib/apex/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-scores.raw
diff --git a/lib/core/auto.lua b/lib/core/auto.lua
deleted file mode 100644
index b758db52..00000000
--- a/lib/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/core/building.lua b/lib/core/building.lua
deleted file mode 100644
index 8e88888a..00000000
--- a/lib/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/core/crpt_aux.lua b/lib/core/crpt_aux.lua
deleted file mode 100644
index 97f8d4b6..00000000
--- a/lib/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/core/dungeon.lua b/lib/core/dungeon.lua
deleted file mode 100644
index d91d785b..00000000
--- a/lib/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/core/gen_idx.lua b/lib/core/gen_idx.lua
deleted file mode 100644
index 5f3af435..00000000
--- a/lib/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/core/gods.lua b/lib/core/gods.lua
deleted file mode 100644
index 77e0aad5..00000000
--- a/lib/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/core/help.lua b/lib/core/help.lua
deleted file mode 100644
index a581fe63..00000000
--- a/lib/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/core/init.lua b/lib/core/init.lua
deleted file mode 100644
index 11b812d5..00000000
--- a/lib/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/core/load.lua b/lib/core/load.lua
deleted file mode 100644
index 9522ec91..00000000
--- a/lib/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/core/load2.lua b/lib/core/load2.lua
deleted file mode 100644
index 7e151d91..00000000
--- a/lib/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/core/mimc_aux.lua b/lib/core/mimc_aux.lua
deleted file mode 100644
index cea1f4dc..00000000
--- a/lib/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/core/monsters.lua b/lib/core/monsters.lua
deleted file mode 100644
index ca2851a0..00000000
--- a/lib/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/core/objects.lua b/lib/core/objects.lua
deleted file mode 100644
index 97320b82..00000000
--- a/lib/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/core/player.lua b/lib/core/player.lua
deleted file mode 100644
index 16878228..00000000
--- a/lib/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/core/quests.lua b/lib/core/quests.lua
deleted file mode 100644
index dfe9db51..00000000
--- a/lib/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/core/s_aux.lua b/lib/core/s_aux.lua
deleted file mode 100644
index ec609b04..00000000
--- a/lib/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/core/stores.lua b/lib/core/stores.lua
deleted file mode 100644
index d4a63168..00000000
--- a/lib/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/core/util.lua b/lib/core/util.lua
deleted file mode 100644
index eea13014..00000000
--- a/lib/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/core/xml.lua b/lib/core/xml.lua
deleted file mode 100644
index 14f0511f..00000000
--- a/lib/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/data/.cvsignore b/lib/data/.cvsignore
deleted file mode 100644
index 82490963..00000000
--- a/lib/data/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.cvsignore
-*.raw \ No newline at end of file
diff --git a/lib/edit/a_info.txt b/lib/edit/a_info.txt
index 427d5060..2e9c38b2 100644
--- a/lib/edit/a_info.txt
+++ b/lib/edit/a_info.txt
@@ -24,10 +24,6 @@
# -Leon Marrick
# Contributors: Jeff Butler, Neal Hackler, Ethan Sicotte, Pat Tracy, Divia
-# Version stamp (required)
-
-V:2.0.0
-
# The Phial of Galadriel
@@ -38,7 +34,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.
@@ -51,7 +47,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.
@@ -65,7 +61,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
-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.
@@ -79,7 +75,7 @@ W:50:10:3:60000
F:CON | HIDE_TYPE |
F:ACTIVATE | RES_FIRE |
F:INSTA_ART
-a:HARDCORE=PROT_EVIL
+a:PROT_EVIL
D:A fiery circle of bronze, with mighty spells to ward off evil.
@@ -92,7 +88,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.
@@ -120,7 +116,7 @@ F:STR | CON | CHR | HIDE_TYPE |
F:IM_FIRE | ACTIVATE | SEARCH |
F:ESP_THUNDERLORD | SEE_INVIS | FLY |
F:INSTA_ART
-a:HARDCORE=DIM_DOOR
+a:DIM_DOOR
Z:swap position
D:The mighty ring of the Thunderlord Flare that makes the wearer
D:strong and healthy. Once a ring of power, it was
@@ -136,7 +132,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.
@@ -149,7 +145,7 @@ W:70:50:2:175000
F:STR | DEX | CON | HIDE_TYPE |
F:ACTIVATE | SPEED | ESP_EVIL |
F:INSTA_ART
-a:HARDCORE=TULKAS
+a:TULKAS
D:The treasure of Tulkas, most fleet and wrathful of the Valar.
@@ -164,7 +160,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 +177,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 +195,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 +217,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,
@@ -252,7 +248,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:A great emerald that fills your mind with images of knowledge and dreadful
D:understanding as you stare into its depths.
@@ -267,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, and you feel the raw elemental might of
D:untamed Lightning as you put it on.
@@ -286,7 +282,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 adamant, set with scales of every colour, surrounded in a nimbus
D:of perfectly untramelled yet inextricably intermingled and utterly mastered
D:powers elemental and ethereal.
@@ -314,7 +310,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 adamant, with unconquerable strength to endure evil
D:and disruptive magics, that protects the life force of its wearer as
D:nothing else can.
@@ -357,7 +353,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.
@@ -372,7 +368,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.
@@ -399,7 +395,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.
@@ -509,7 +505,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.
@@ -593,7 +589,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.
@@ -605,7 +601,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.
@@ -621,7 +617,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.
@@ -635,7 +631,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.
@@ -651,7 +647,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
@@ -665,7 +661,7 @@ I:35:1:0
W:5:45:10:40000
P:1:0d0:0:0:20
F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_POIS | ACTIVATE | ESP_GOOD
-a:HARDCORE=COLLUIN
+a:COLLUIN
D:A cape worn by a hero from Valinor, a land utterly beyond the strife
D:of Elements.
@@ -678,7 +674,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.
@@ -692,7 +688,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.
@@ -717,7 +713,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.
@@ -731,7 +727,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
@@ -780,7 +776,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.
@@ -792,7 +788,7 @@ I:31:2:0
W:10:5:25:15000
P:2:1d1:0:0:15
F:RES_FIRE | ACTIVATE | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=BO_FIRE_1
+a:BO_FIRE_1
D:A fiery set of gauntlets that can even shoot fire from the user's
D:hands.
@@ -805,7 +801,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.
@@ -816,7 +812,7 @@ I:31:2:0
W:10:5:25:11000
P:2:1d1:0:0:15
F:RES_ELEC | ACTIVATE | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=BO_ELEC_1
+a:BO_ELEC_1
D:A set of handgear with sparks surrounding it, able to fire
D:bolts of electricity.
@@ -828,7 +824,7 @@ I:31:2:0
W:10:5:25:12000
P:2:1d1:0:0:15
F:RES_ACID | ACTIVATE | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=BO_ACID_1
+a:BO_ACID_1
D:A set of handgear so corrosive that it may fire bolts of acid.
@@ -853,7 +849,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.
@@ -867,7 +863,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.
@@ -882,7 +878,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.
@@ -952,7 +948,7 @@ I:23:4:0
W:4:100:12:12000
P:0:1d4:4:6:0
F:BRAND_FIRE | RES_FIRE | ACTIVATE | SHOW_MODS | LITE1 | LEVELS
-a:HARDCORE=BO_FIRE_1
+a:BO_FIRE_1
D:A fiery dagger finely balanced for deadly throws.
@@ -963,7 +959,7 @@ I:23:4:0
W:3:100:12:11000
P:0:1d4:4:6:0
F:BRAND_COLD | RES_COLD | ACTIVATE | SHOW_MODS | LEVELS
-a:HARDCORE=BO_COLD_1
+a:BO_COLD_1
D:A frosty dagger finely balanced for deadly throws.
@@ -974,7 +970,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:A dagger covered in sparks and finely balanced for deadly throws.
@@ -985,7 +981,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.
@@ -1000,7 +996,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.
@@ -1182,7 +1178,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.
@@ -1198,7 +1194,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
@@ -1333,7 +1329,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.
@@ -1394,7 +1390,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.
@@ -1412,7 +1408,7 @@ F:RES_FIRE | RES_LITE | HOLD_LIFE | RES_FEAR |
F:FEATHER | ESP_GIANT
F:SEE_INVIS |
F:ACTIVATE | BLESSED | SHOW_MODS
-a:HARDCORE=STONE_MUD
+a:STONE_MUD
D:The thrusting spear of wise Orome the Vala, strong against giants of frost,
D:which can melt rock or flesh with ease.
@@ -1472,7 +1468,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.
@@ -1502,7 +1498,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.
@@ -1564,7 +1560,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 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.
@@ -1581,7 +1577,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.
@@ -1596,7 +1592,7 @@ P:0:3d5:20:20:0
F:ACTIVATE | BRAND_FIRE | FREE_ACT | RES_FIRE | INFRA | LEVELS |
F:SLAY_EVIL | SLAY_DRAGON | SLAY_UNDEAD | SLAY_DEMON | VORPAL | CLONE |
F:CHR | SUST_CHR | RES_FEAR | RES_LITE | RES_BLIND | REGEN | SHOW_MODS
-a:HARDCORE=DAWN
+a:DAWN
D:Forged in the farthest East by a race of mighty spellcasters, this
D:shiny pale sword gleams with the rays of rising sun as you invoke
D:its power of commanding legions of powerful immortal warriors...
@@ -1614,7 +1610,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.
@@ -1630,7 +1626,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.
@@ -1671,7 +1667,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.
@@ -1685,7 +1681,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.
@@ -1730,7 +1726,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.
@@ -1744,7 +1740,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.
@@ -1780,7 +1776,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.
@@ -1833,7 +1829,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.
@@ -1852,7 +1848,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.
@@ -1992,7 +1988,7 @@ W:50:15:200:55000
P:0:3d4:0:0:0
F:STR | TUNNEL | SUST_STR | HIDE_TYPE | LITE1 | ACTIVATE | CLIMB
F:RES_CHAOS | RES_LITE | RES_DARK
-a:HARDCORE=EREBOR
+a:EREBOR
D:A pick that provides a magical light by which to see while tunnelling.
@@ -2003,7 +1999,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 | WIELD_CAST
-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.
@@ -2016,7 +2012,7 @@ I:14:60:2
W:14:10:15:80000
P:0:3d4:0:0:0
F:ACTIVATE | CHR | WIS | ESP_DRAGON | WIELD_CAST
-a:HARDCORE=ROHAN
+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.
@@ -2029,7 +2025,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 | WIELD_CAST
-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.
@@ -2042,7 +2038,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 | WIELD_CAST
-a:HARDCORE=BOROMIR
+a:BOROMIR
D:Boromir's horn gives courage and endurance to the wearer, provided he does
D:not wish to travel in secrecy: for it must always sound when its wielder
D:sets forth on a journey. "Loud and clear it sounds in the valleys of the
@@ -2056,7 +2052,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.
@@ -2085,7 +2081,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.
@@ -2111,7 +2107,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
@@ -2210,7 +2206,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.
@@ -2223,7 +2219,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.
@@ -2236,7 +2232,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.
@@ -2261,7 +2257,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.
@@ -2326,8 +2322,8 @@ N:165:'Lebohaum'
I:32:6:0
W:20:15:15:25000
P:20:0d0:0:0:80
-F:ACTIVATE
-a:SPELL=Artifact Lebauhaum
+F:ACTIVATE | EASY_USE
+a:LEBOHAUM
D:With the Helm 'Lebohaum' your head is safe!
@@ -2342,7 +2338,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.
@@ -2354,7 +2350,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.
@@ -2382,7 +2378,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.
@@ -2396,7 +2392,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
@@ -2413,7 +2409,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.
@@ -2459,7 +2455,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.
@@ -2477,7 +2473,7 @@ F:RES_FIRE | RES_ELEC | RES_NETHER | RES_DISEN | HOLD_LIFE |
F:ACTIVATE
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.
@@ -2492,7 +2488,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
@@ -2512,7 +2508,7 @@ F:KILL_DRAGON | SLAY_ANIMAL | BRAND_POIS | BRAND_ELEC |
F:ACTIVATE
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.
@@ -2525,7 +2521,7 @@ W:55:35:25:40000
P:3:1d1:0:0:15
F:INT | MANA | FREE_ACT | FEATHER | RES_ELEC | RES_DARK | RES_POIS | ACTIVATE
F:LUCK | SPELL_CONTAIN | WIELD_CAST
-a:HARDCORE=EOL
+a:EOL
D:The iron-shod gauntlets of the Dark Elven smith Eol, tingling with magics
D:that he could channel in battle.
@@ -2595,8 +2591,8 @@ I:23:17:3
W:5:10:130:500
P:0:2d5:5:6:0
F:RES_FEAR | LUCK
-F:ACTIVATE | SHOW_MODS
-a:SPELL=Artifact Durandil
+F:ACTIVATE | EASY_USE | SHOW_MODS
+a:DURANDIL
D:Don't go adventuring without your Durandil sword!
@@ -2609,7 +2605,7 @@ P:0:1d1:0:0:0
F:CURSED | INT | WIS | CON | DEX | CHR | STR | ACTIVATE |
F:LITE3 | LITE2 | LUCK | MAGIC_BREATH
F:INSTA_ART | DG_CURSE | ESP_UNDEAD |
-a:HARDCORE=UNDEATH
+a:UNDEATH
D:It appears like the Phial of Galadriel at first - but wait! It
D:is a cursed phial created by an evil wizard to lure adventurers
D:into wielding it unknowingly.
@@ -2633,7 +2629,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
@@ -2702,7 +2698,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.
@@ -2716,7 +2712,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.
@@ -2731,7 +2727,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
diff --git a/lib/edit/ab_info.txt b/lib/edit/ab_info.txt
index 7b9aa152..976c6d03 100644
--- a/lib/edit/ab_info.txt
+++ b/lib/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
@@ -83,15 +77,6 @@ k:40:Combat
S:30:DEX
S:30:STR
-N:7:Artifact Creation
-D:In combination with a high alchemy skill this ability will let you
-D:design your very own artifacts
-D:Prereq: Alchemy@40, INT@35, WIS@35
-I:70
-k:40:Alchemy
-S:35:INT
-S:35:WIS
-
N:8:Far reaching attack
D:You can attack an enemy one square far using a long polearm.
D:At high levels of Polearm-mastery skill, you can even hit two enemies at once.
diff --git a/lib/edit/al_info.txt b/lib/edit/al_info.txt
deleted file mode 100644
index fbd4c9a0..00000000
--- a/lib/edit/al_info.txt
+++ /dev/null
@@ -1,2097 +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
-
-# Do not modify this file unless you know exactly what you are doing,
-# unless you wish to risk possible system crashes.
-
-# Version stamp (required)
-
-V:2.0.0
-
-
-#Note: when you add anything to this file, you also need to change the M:a
-#line of misc.txt. Unlike other files, there is no 'count' entry. The
-#easiest and fastest way to find out what to say in misc.txt is:
-#
-# grep '^[Ia]:' <al.txt | wc -l
-# you need to add one to the result of the above statement.
-#
-# Which only works on unix systems. But if you have the misfortune not to
-#be working on a unix system, you can use an editor and to a global search
-#and replace, searching for I: and then for a:, which will give you a count
-#that's a few high, but will still work.
-
-
-#Format: There's only one kind of line here, and that's the
-# Item line. Goes like this:
-
-
-# I:tval:sval:Qty:essence
-#
-# The problem here is that it doesn't matter what order things are in.
-# Since the tval and sval are specified on each line, the lines that
-# describe a particular recipe for a particular item don't have to be
-# anywhere even close to each other in the file. This could cause a problem:
-# if the same item has two different entries for the same essence, it will
-# find one, assume that the player has enough, and display that one in green.
-# But when the player goes to make it, they may not have enough. It would also
-# cause weird recipe displays, with one essence listed twice. Funny-looking
-
-
-
-# Some special tvals:
-# 0 Not a tval, used internally by the parser to store the artifact flag essences.
-# We don't currently have any mechanism to control which tvals flags are used on.
-# 1 Not actually a tval, used for ego items, in which case the 'sval' is the e_idx
-# We don't need tvals or svals for ego items, because that information is
-# contained in the e_info record, which the e_idx points us to.
-#
-# 40 Amulet
-# 45 ring
-# 55 staff
-# 65 wand
-# 66 rod tip
-# 70 scroll
-# 71 potion
-# 40 Amulet
-# 45 ring
-# 55 staff
-# 65 wand
-# 66 rod tip
-# 70 scroll
-# 71 potion
-# 72 potion2
-# 80 Food ('shrooms, etc)
-
-# I:tval:sval:Qty:essence
-
-#**********************Mushrooms***********************
-
-#SV_FOOD_POISON 0
-I:80:0:1:LIFE
-I:80:0:8:POISON
-
-#SV_FOOD_BLINDNESS 1
-I:80:1:1:LIFE
-I:80:1:6:DARKNESS
-I:80:1:2:LITE
-
-#SV_FOOD_PARANOIA 2
-I:80:2:1:LIFE
-I:80:2:4:KNOWLEDGE
-I:80:2:4:CONFUSION
-
-#SV_FOOD_CONFUSION 3
-I:80:3:1:LIFE
-I:80:3:8:CONFUSION
-
-#SV_FOOD_HALLUCINATION 4
-I:80:4:1:LIFE
-I:80:4:4:CONFUSION
-I:80:4:4:MANA
-I:80:4:4:TELEPORT
-
-#SV_FOOD_PARALYSIS 5
-I:80:5:1:LIFE
-I:80:5:8:FORCE
-
-#SV_FOOD_WEAKNESS 6
-I:80:6:1:LIFE
-I:80:6:4:POISON
-I:80:6:4:FORCE
-
-#SV_FOOD_SICKNESS 7
-I:80:7:8:LIFE
-I:80:7:1:POISON
-
-#SV_FOOD_STUPIDITY 8
-I:80:8:1:LIFE
-I:80:8:1:MANA
-I:80:8:8:KNOWLEDGE
-
-#SV_FOOD_NAIVETY 9
-I:80:9:1:LIFE
-I:80:9:1:MANA
-I:80:9:4:CONFUSION
-I:80:9:4:KNOWLEDGE
-
-#SV_FOOD_UNHEALTH 10
-I:80:10:8:LIFE
-I:80:10:1:FORCE
-I:80:10:1:POISON
-
-#SV_FOOD_DISEASE 11
-I:80:11:1:LIFE
-I:80:11:1:TIME
-I:80:11:8:POISON
-
-#SV_FOOD_CURE_POISON 12
-I:80:12:1:LIFE
-I:80:12:8:POISON
-
-#SV_FOOD_CURE_BLINDNESS 13
-I:80:13:1:LIFE
-I:80:13:6:LITE
-I:80:13:2:DARKNESS
-
-#SV_FOOD_CURE_PARANOIA 14
-I:80:14:1:LIFE
-I:80:14:1:TIME
-
-#SV_FOOD_CURE_CONFUSION 15
-I:80:15:1:LIFE
-I:80:15:12:KNOWLEDGE
-
-#SV_FOOD_CURE_SERIOUS 16
-I:80:16:8:LIFE
-
-#SV_FOOD_RESTORE_STR 17
-I:80:17:20:LIFE
-I:80:17:2:TIME
-
-#SV_FOOD_RESTORE_CON 18
-I:80:18:20:LIFE
-I:80:18:2:TIME
-
-#SV_FOOD_RESTORING 19
-I:80:19:40:LIFE
-I:80:19:4:TIME
-
-#/* many missing mushrooms */
-#Note - the comment below appears on the list in defines.h, but I can't find
-#any more mushrooms in k_info.txt
-
-#define SV_FOOD_BISCUIT 32
-#define SV_FOOD_JERKY 33
-#define SV_FOOD_RATION 35
-#define SV_FOOD_SLIME_MOLD 36
-#define SV_FOOD_WAYBREAD 37
-#define SV_FOOD_PINT_OF_ALE 38
-#define SV_FOOD_PINT_OF_WINE 39
-#define SV_FOOD_ATHELAS 40
-#define SV_FOOD_GREAT_HEALTH 41
-#define SV_FOOD_FORTUNE_COOKIE 42
-
-
-
-#***************************Artifact Flags************************************
-#
-#A:Group:tval:sval:pval:pval?:level:xp
-# The first three describe the required item, they can be left unspecified
-# for no object, or specify starting with tval for increasingly specific
-# objects.
-# Note: pval? is boolean (0 or 1) if true, then this flag has a
-# variable effect, and we should require more experience and times for
-# increasing pvals.
-# Note:for tval=TV_CORPSE, sval=corpse type, pval=monster idx,
-# or use f:moster_race_flags, or leave all blank for any corpse at all.
-#F:object flag to be set
-#D:Description of flag
-#x:Description of activation (instead of description of flag, see below)
-#d:Description of required item
-#p:Description of required item (plural, optional. Illegal if pval != 1)
-#a:qty:object_flag_to_be_set Essence_name (not used)
-
-# Note that like I: lines, a: lines can be anywhere and in any order.
-# Note: 'flag' is the flag name from a_info.txt,
-# 'monster_race_flag' is from r_info.txt
-
-#The group numbers are 1-5, and the descriptions of the groups
-#are hard coded. see cmd7.c
-
-
-A:1:45:24:1:1:40:5000
-F:STR
-D:Add to Strength
-d:Ring of Strength
-p:Rings of Strength
-
-A:1:45:25:1:1:43:5000
-F:INT
-D:Add to Intelligence
-d:Ring of Intelligence
-p:Rings of Intelligence
-
-A:1:40:28:1:1:46:5000
-F:WIS
-D:Add to Wisdom
-d:Amulet of Wisdom
-p:Amulets of Wisdom
-
-A:1:45:26:1:1:46:5000
-F:DEX
-D:Add to Dexterity
-d:Ring of Dexterity
-p:Rings of Dexterity
-
-A:1:45:27:1:1:42:5000
-F:CON
-D:Add to Constitution
-d:Ring of Constitution
-p:Rings of Constitution
-
-A:1:40:2:0:1:30:5000
-F:CHR
-D:Add to Charisma
-d:Amulet of Adornment
-p:Amulets of Adornment
-
-A:1:45:10:0:0:32:1000
-F:SUST_STR
-D:Sustain Strength
-d:Ring of Sustain Strength
-
-A:1:45:11:0:0:34:1000
-F:SUST_INT
-D:Sustain Intelligence
-d:Ring of Sustain Intelligence
-
-A:1:45:12:0:0:28:1000
-F:SUST_WIS
-D:Sustain Wisdom
-d:Ring of Sustain Wisdom
-
-A:1:45:14:0:0:36:1000
-F:SUST_DEX
-D:Sustain Dexterity
-d:Ring of Sustain Dexterity
-
-A:1:45:13:0:0:36:1000
-F:SUST_CON
-D:Sustain Constitution
-d:Ring of Sustain Constitution
-
-A:1:45:15:0:0:25:1000
-F:SUST_CHR
-D:Sustain Charisma
-d:Ring of Sustain Charisma
-
-A:1:45:31:1:1:40:50000
-F:SPEED
-D:Speed
-d:Ring of Speed
-p:Rings of Speed
-
-A:1:45:49:1:1:38:150000
-F:BLOWS
-D:Extra Attacks
-d:Ring of Extra Attacks
-p:Rings of Extra Attacks
-
-A:1:30:2:0:1:32:5000
-F:STEALTH
-D:Stealthy
-d:Left Insole from a Used Soft Boot
-p:Left Insoles from Used Soft Boots
-
-A:1:36:1:0:1:29:2000
-F:SEARCH
-D:Adds to Searching
-d:Filthy Rag
-p:Filthy Rags
-
-A:1:39:1:0:1:6:1000
-F:INFRA
-D:Helps Infravision
-d:Brass Lantern
-p:Brass Lanterns
-
-A:1:9:-1:5:1:30:1000
-F:LUCK
-D:Lucky
-d:Rabbit's Left Forefoot
-p:Rabbit's Left Forefeet
-
-A:1:20:4:0:1:25:30000
-F:TUNNEL
-D:Aids in digging
-d:Pick
-p:Picks
-
-A:1:9:1:0:1:40:50000
-F:LIFE
-f:TROLL
-D:Multiplies Life
-d:Troll's Heart
-p:Troll's Hearts
-
-A:2:71:8:0:0:20:15000
-F:INVIS
-D:Invisibility
-d:Potion of Invisibility
-
-A:2:71:8:0:0:20:4000
-F:SEE_INVIS
-D:See Invisible
-d:Potion of Invisibility
-
-A:2:5:0:0:0:20:30000
-F:FREE_ACT
-D:Free Action
-d:Iron Spike
-
-A:2:34:5:0:0:38:90000
-F:REFLECT
-D:Reflection
-d:Large Metal Shield
-
-A:2:9:1:644:0:20:30000
-F:SH_FIRE
-D:Aura of Fire
-d:Lungs from an Ancient Red Dragon
-
-A:2:9:1:601:0:25:30000
-F:SH_ELEC
-D:Aura of Lightning
-d:Lungs from an Ancient Blue Dragon
-
-A:2:39:2:0:0:8:1000
-F:LITE1
-D:Light
-d:Everburning Torch
-
-A:2:39:3:0:0:20:10000
-F:LITE2
-D:Bright Light
-d:Dwarven Lantern
-
-A:2:39:4:0:0:40:100000
-F:LITE3
-D:Sunlight
-d:Feanorian Lamp
-
-A:2:38:-1:0:0:40:200000
-F:FLY
-D:Flight
-d:Suit of Dragon Armour (any colour)
-
-A:2:9:-1:862:0:50:10000000
-F:AUTO_ID
-D:Automatically IDs
-d:Morgoth's Testicles
-
-A:2:40:14:0:0:29:2000
-F:NO_TELE
-D:Anti-Teleportation
-d:Teleport Inhibiting Amulet
-
-A:2:40:13:0:0:34:2000
-F:NO_MAGIC
-D:Anti-Magic
-d:Magic Inhibiting Amulet
-
-A:2:71:62:0:0:50:100000
-F:WRAITH
-D:Wraith Form
-d:Potion of Invulnerability
-
-A:2:71:33:0:0:15:1000
-F:FEATHER
-D:Levitation
-d:Potion of Berserk Strength
-
-A:2:80:37:0:0:20:10000
-F:SLOW_DIGEST
-D:Slow Digestion
-d:Lembas Wafer
-
-A:2:80:10:0:0:32:20000
-F:REGEN
-D:Regenerate
-d:Mushroom of Unhealth
-
-A:2:80:3:0:0:12:20000
-F:TELEPORT
-D:Teleport
-d:Mushroom of Confusion
-
-A:3:21:2:0:1:30:20000
-F:CRIT
-D:Extra Critical Hits
-d:Whip
-p:Whips
-
-A:3:23:30:0:0:30:30000
-F:WOUNDING
-D:Wounds Monsters
-d:Blade of Chaos
-
-A:3:66:18:0:1:26:6000
-F:VAMPIRIC
-D:Vampiric
-d:Rod Tip of Drain Life
-
-A:3:9:1:0:0:16:2000
-F:SLAY_ANIMAL
-f:ANIMAL
-D:Slay Animal
-d:Dead Animal's Body
-
-A:3:9:-1:0:0:25:2000
-F:SLAY_EVIL
-f:EVIL
-D:Slay Evil
-d:Evil Dead Thing's Remains
-
-A:3:9:-1:0:0:30:2000
-F:SLAY_UNDEAD
-f:UNDEAD
-D:Slay Undead
-d:Remains of Undead Monster
-
-A:3:9:1:0:0:40:1500
-F:SLAY_DEMON
-f:DEMON
-D:Slay Demon
-d:Demon's Corpse
-
-A:3:9:1:0:0:10:700
-F:SLAY_ORC
-f:ORC
-D:Slay Orc
-d:Dead Orc
-
-A:3:9:1:0:0:16:700
-F:SLAY_TROLL
-f:TROLL
-D:Slay Troll
-d:Dead Troll
-
-A:3:9:1:0:0:25:900
-F:SLAY_GIANT
-f:GIANT
-D:Slay Giant
-d:Dead Giant
-
-A:3:9:1:0:0:33:2000
-F:SLAY_DRAGON
-f:DRAGON
-D:Slay Dragon
-d:Dead Dragon (any size will do)
-
-A:3:9:-1:593:0:41:5000
-F:KILL_DRAGON
-D:*Slay* Dragon
-d:Mature Multi-Hued Dragon's Remains
-
-A:3:9:-1:0:0:41:90000
-F:KILL_UNDEAD
-f:S_HI_UNDEAD
-D:*Slay* Undead
-d:Dead Summoner of Greater Undead
-
-A:3:9:-1:996:0:41:90000
-F:KILL_DEMON
-D:*Slay* Demon
-d:Lesser Balrog's Corpse
-
-A:3:0:0:0:0:36:20000
-F:VORPAL
-D:Vorpal
-
-A:3:0:0:0:0:40:90000
-F:IMPACT
-D:Earthquakes
-
-A:3:0:0:0:0:3:2000
-F:BRAND_POIS
-D:Poison Brand
-
-A:3:0:0:0:0:12:2000
-F:BRAND_ACID
-D:Acid Brand
-
-A:3:0:0:0:0:10:2000
-F:BRAND_ELEC
-D:Lightning Brand
-
-A:3:0:0:0:0:6:2000
-F:BRAND_FIRE
-D:Fire Brand
-
-A:3:0:0:0:0:8:2000
-F:BRAND_COLD
-D:Frost Brand
-
-A:3:0:0:0:1:30:3000
-F:XTRA_MIGHT
-D:Extra Might (Bows Only)
-
-A:3:0:0:0:1:35:3000
-F:XTRA_SHOTS
-D:Extra Shots (Bows Only)
-
-A:4:9:1:624:0:49:500000
-F:IM_ACID
-D:Immune to Acid
-d:Ancient Black Dragon's Foreskin
-
-A:4:9:1:601:0:50:500000
-F:IM_ELEC
-D:Immune to Lightning
-d:Ancient Blue Dragon's Foreskin
-
-A:4:9:1:644:0:49:500000
-F:IM_FIRE
-D:Immune to Fire
-d:Ancient Red Dragon's Foreskin
-
-A:4:9:1:617:0:50:500000
-F:IM_COLD
-D:Immune to Cold
-d:Ancient White Dragon's Foreskin
-
-A:4:40:8:0:0:30:30000
-F:HOLD_LIFE
-D:Hold Life
-d:Amulet of the Magi
-
-A:4:45:17:0:0:12:10000
-F:RES_ACID
-D:Resist Acid
-d:Ring of Acid
-
-A:4:45:56:0:0:15:10000
-F:RES_ELEC
-D:Resist Lightning
-d:Ring of Lightning
-
-A:4:71:30:0:0:13:10000
-F:RES_FIRE
-D:Resist Fire
-d:Potion of Resist Heat
-
-A:4:71:31:0:0:14:10000
-F:RES_COLD
-D:Resist Cold
-d:Potion of Resist Cold
-
-A:4:71:27:0:0:25:30000
-F:RES_POIS
-D:Resist Poison
-d:Potion of Cure Poison
-
-A:4:45:38:0:0:26:10000
-F:RES_FEAR
-D:Resist Fear
-d:Ring of Fear Resistance
-
-A:4:45:39:0:0:31:60000
-F:RES_LITE
-D:Resist Light
-d:Ring of Light and Darkness Resistance
-
-A:4:45:39:0:0:31:60000
-F:RES_DARK
-D:Resist Darkness
-d:Ring of Light and Darkness Resistance
-
-A:4:45:47:0:0:30:30000
-F:RES_BLIND
-D:Resist Blindness
-d:Ring of Blindness Resistance
-
-A:4:45:43:0:0:30:30000
-F:RES_CONF
-D:Resist Confusion
-d:Ring of Confusion Resistance
-
-A:4:45:42:0:0:30:60000
-F:RES_SOUND
-D:Resist Sound
-d:Ring of Sound Resistance
-
-A:4:45:44:0:0:30:60000
-F:RES_SHARDS
-D:Resist Shards
-d:Ring of Shard Resistance
-
-A:4:45:40:0:0:30:60000
-F:RES_NETHER
-D:Resist Nether
-d:Ring of Nether Resistance
-
-A:4:45:41:0:0:30:60000
-F:RES_NEXUS
-D:Resist Nexus
-d:Ring of Nexus Resistance
-
-A:4:45:46:0:0:30:60000
-F:RES_CHAOS
-D:Resist Chaos
-d:Ring of Chaos Resistance
-
-A:4:45:45:0:0:30:60000
-F:RES_DISEN
-D:Resist Disenchantment
-d:Ring of Disenchantment Resistance
-
-A:5:9:1:0:0:50:-100000
-F:TEMPORARY
-D:Temporary Item
-d:Corpse, any corpse
-
-A:5:36:1:0:0:10:-2000
-F:AUTO_CURSE
-D:Self-Cursing
-d:Filthy Rag
-
-A:5:80:40:0:0:45:-10000
-F:BLACK_BREATH
-D:Causes the Black Breath
-d:Sprig of Athelas
-
-A:5:70:15:0:0:40:-5000
-F:TY_CURSE
-D:Ancient Curse
-d:Scroll of *Remove Curse*
-
-A:5:0:0:0:0:40:-5000
-F:DRAIN_EXP
-D:Drains your Experience
-
-A:5:0:0:0:0:30:-5000
-F:AGGRAVATE
-D:Aggravates Monsters
-
-A:5:70:14:0:0:30:-500
-F:CURSED
-D:Curse
-d:Scroll of Remove Curse
-
-#Removed for balance - allows you to trade two essences of extra life,
-# and 25+ magic essence for 10000xp on your artifact, which isn't
-# anything to sneeze at. Curse, above, has the same problem, but
-# for 1000xp, I figure it's a fair trade.
-#A:5:70:15:0:0:40:-10000
-#D:Heavy Curse
-#F:HEAVY_CURSE
-#d:Scroll of *Remove Curse*
-
-A:5:0:0:0:0:50:-5000
-F:PERMA_CURSE
-D:Permanently Cursed
-
-A:5:0:0:0:0:35:-2000
-F:CURSE_NO_DROP
-D:Can't be Dropped
-
-A:5:0:0:0:0:45:-5000
-F:DRAIN_HP
-D:Drains your Hit Points
-
-A:5:0:0:0:0:20:-50000
-F:IMMOVABLE
-D:Wielder Can't Move
-
-#/* Floating eye corpse for esp all :) other ESP's don't require anything at all...*/
-A:5:9:1:32:0:40:20000
-F:ESP_ALL
-D:Telepathy
-d:Formerly Floating Eye
-
-A:5:0:0:0:0:25:3000
-F:ESP_ORC
-D:Sense Orcs
-
-A:5:0:0:0:0:25:3000
-F:ESP_TROLL
-D:Sense Trolls
-
-A:5:0:0:0:0:25:5000
-F:ESP_DRAGON
-D:Sense Dragons
-
-A:5:0:0:0:0:25:5000
-F:ESP_GIANT
-D:Sense Giants
-
-A:5:0:0:0:0:25:5000
-F:ESP_DEMON
-D:Sense Demons
-
-A:5:0:0:0:0:25:5000
-F:ESP_UNDEAD
-D:Sense Undead
-
-A:5:0:0:0:0:25:5000
-F:ESP_EVIL
-D:Sense Evil
-
-A:5:0:0:0:0:25:5000
-F:ESP_ANIMAL
-D:Sense Animals
-
-A:5:0:0:0:0:25:5000
-F:ESP_THUNDERLORD
-D:Sense Thunderlords
-
-A:5:0:0:0:0:25:5000
-F:ESP_GOOD
-D:Sense Good
-
-A:5:0:0:0:0:25:5000
-F:ESP_NONLIVING
-D:Sense Nonliving
-
-A:5:0:0:0:0:25:5000
-F:ESP_UNIQUE
-D:Sense Unique Monsters
-
-A:5:0:0:0:0:25:2000
-F:ESP_SPIDER
-D:Sense Spiders
-
-
-#***************************Activations for artifacts***********************
-# Activations follow all of the rules for artifact flags.
-# except: group number and pval are IGNORED
-# They MUST come after ALL artifact flags in this file!!!
-# There is no way (currently) to require essences...
-#
-# They use a LOWER CASE x: instead of the F: object flag
-#
-# all ACT_ constants are supported, anything else must be coded into init1.c
-# Internally, they are assigned the magic group number of '88'
-# and a NEGATIVE flag number (which is the activation number)
-# Note that although you can use the p: to give activations a plural
-# item description, it will never be used, because pval is forced to 0.
-#
-#A:<Ógnored>:tval:sval:<ignored>:<ignored>:level:xp
-# tval and sval describe the required item, they can be left unspecified
-# for no object, or specify starting with tval for increasingly specific
-# objects.
-#F:object flag to be set
-#D:Description of flag
-#x:Description of activation (instead of description of flag)
-#d:Description of required item
-#p:Description of required item (plural, not used for activations)
-#a:qty:object_flag_to_be_set Essence_name
-
-#define ACT_PET_SUMMON 150
-#define ACT_CURE_PARA 151
-#define ACT_CURE_HALLU 152
-#define ACT_CURE_POIS 153
-#define ACT_CURE_HUNGER 154
-#define ACT_CURE_STUN 155
-#define ACT_CURE_CUTS 156
-#define ACT_CURE_FEAR 157
-#define ACT_CURE_CONF 158
-#define ACT_CURE_BLIND 159
-#define ACT_CURING 160
-#define ACT_ACQUIREMENT 163
-#define ACT_MUT 166
-#define ACT_CURE_INSANITY 167
-#define ACT_CURE_MUT 168
-#define ACT_REST_LIFE 84
-#define ACT_REST_ALL 85
-#define ACT_CURE_LW 81
-#define ACT_CURE_MW 82
-#define ACT_CURE_POISON 83
-#define ACT_CURE_700 86
-#define ACT_CURE_1000 87
-
-#define ACT_LIGHT 111
-
-#define ACT_SUNLIGHT 1
-A:0:70:15:0:0:40:40000
-x:SUNLIGHT
-D:Sunlight
-d:Brass Lantern
-
-#define ACT_MAP_LIGHT 112
-#define ACT_DETECT_ALL 113
-#define ACT_DETECT_XTRA 114
-#define ACT_ID_FULL 115
-#define ACT_ID_PLAIN 116
-
-#define ACT_GROW_MOLD 197
-
-
-#define ACT_BO_MISS_1 2
-A:0:0:0:0:0:20:4000
-x:BO_MISS_1
-D:Magic Missile (1)
-
-#define ACT_BO_MISS_2 15
-A:0:0:0:0:0:30:300000
-x:BO_MISS_2
-D:Magic Missile (2)
-
-#define ACT_BA_MISS_3 24
-A:0:0:0:0:0:40:400000
-x:BA_MISS_3
-D:Ball of Missiles
-
-#define ACT_BO_ELEC_1 4
-A:0:0:0:0:0:30:300000
-x:BO_ELEC_1
-D:Bolt of Lightning
-
-#define ACT_BA_ELEC_2 12
-A:0:0:0:0:0:30:300000
-x:BA_ELEC_2
-D:Ball of Lightning
-
-#define ACT_BA_ELEC_3 18
-A:0:0:0:0:0:35:350000
-x:BA_ELEC_3
-D:Ball of Lightning(2)
-
-#define ACT_BA_ELEC_H 172
-A:0:0:0:0:0:40:400000
-x:BA_ELEC_H
-D:Ball of Lightning(3)
-
-#define ACT_BA_ELEC_4 183
-A:0:0:0:0:0:40:400000
-x:BA_ELEC_4
-D:Ball of Lightning(4)
-
-#define ACT_BR_ELEC 184
-A:0:0:0:0:0:45:450000
-x:BR_ELEC
-D:Breathe Lightning
-
-#define ACT_BO_ACID_1 5
-#define ACT_BA_COLD_1 8
-#define ACT_BA_ACID_H 173
-#define ACT_BA_ACID_4 182
-#define ACT_BR_ACID 187
-#define ACT_BO_COLD_1 6
-#define ACT_BA_COLD_2 11
-#define ACT_BA_COLD_3 17
-#define ACT_BA_COLD_H 171
-#define ACT_BA_COLD_4 180
-#define ACT_BR_COLD 185
-#define ACT_BO_FIRE_1 7
-#define ACT_BA_FIRE_1 9
-#define ACT_BA_FIRE_2 16
-#define ACT_BA_FIRE_H 170
-#define ACT_BA_FIRE_4 181
-#define ACT_BR_FIRE 186
-#define ACT_BA_POIS_1 3
-#define ACT_BA_POIS_4 179
-#define ACT_BR_POIS 188
-#define ACT_BR_MANY 189
-#define ACT_BR_CONF 190
-#define ACT_BR_SOUND 191
-#define ACT_BR_CHAOS 192
-#define ACT_BR_SHARD 193
-#define ACT_BR_BALANCE 194
-#define ACT_BR_LIGHT 195
-#define ACT_BR_POWER 196
-#define ACT_ROCKET 22
-A:0:0:0:0:0:50:40000
-x:ROCKET
-D:Fire a Rocket
-
-#define ACT_JUMP 177
-#define ACT_WHIRLWIND 19
-#define ACT_CALL_CHAOS 21
-#define ACT_DISP_EVIL 23
-#define ACT_DISP_GOOD 25
-#define ACT_DAWN 61
-#define ACT_CHARM_ANIMAL 65
-#define ACT_CHARM_UNDEAD 66
-#define ACT_CHARM_OTHER 67
-#define ACT_CHARM_ANIMALS 68
-#define ACT_CHARM_OTHERS 69
-#define ACT_SUMMON_ANIMAL 70
-#define ACT_SUMMON_PHANTOM 71
-#define ACT_SUMMON_ELEMENTAL 72
-#define ACT_SUMMON_DEMON 73
-#define ACT_SUMMON_UNDEAD 74
-#define ACT_RUNE_EXPLO 117
-#define ACT_RUNE_PROT 118
-#define ACT_SATIATE 119
-#define ACT_DEST_DOOR 120
-#define ACT_STONE_MUD 121
-#define ACT_RECHARGE 122
-#define ACT_ALCHEMY 123
-#define ACT_DIM_DOOR 124
-#define ACT_TELEPORT 125
-#define ACT_RECALL 126
-
-#define ACT_SPIN 174
-#define ACT_NOLDOR 175
-#define ACT_SPECTRAL 176
-#define ACT_DEST_TELE 178
-#define ACT_DRAIN_1 10
-#define ACT_DRAIN_2 13
-#define ACT_VAMPIRE_1 14
-#define ACT_VAMPIRE_2 20
-#define ACT_GILGALAD 26
-#define ACT_CELEBRIMBOR 27
-#define ACT_SKULLCLEAVER 28
-#define ACT_HARADRIM 29
-#define ACT_FUNDIN 30
-#define ACT_EOL 31
-#define ACT_UMBAR 32
-#define ACT_NUMENOR 33
-#define ACT_KNOWLEDGE 34
-#define ACT_UNDEATH 35
-#define ACT_THRAIN 36
-#define ACT_BARAHIR 37
-#define ACT_TULKAS 38
-#define ACT_NARYA 39
-#define ACT_NENYA 40
-#define ACT_VILYA 41
-#define ACT_POWER 42
-#define ACT_STONE_LORE 43
-#define ACT_RAZORBACK 44
-#define ACT_BLADETURNER 45
-#define ACT_MEDIATOR 46
-#define ACT_BELEGENNON 47
-#define ACT_GORLIM 48
-#define ACT_COLLUIN 49
-#define ACT_BELANGIL 50
-#define ACT_CONFUSE 51
-#define ACT_SLEEP 52
-#define ACT_QUAKE 53
-#define ACT_TERROR 54
-#define ACT_TELE_AWAY 55
-#define ACT_BANISH_EVIL 56
-#define ACT_GENOCIDE 57
-#define ACT_MASS_GENO 58
-#define ACT_ANGUIREL 59
-#define ACT_ERU 60
-#define ACT_FIRESTAR 62
-#define ACT_TURMIL 63
-#define ACT_CUBRAGOL 64
-#define ACT_ELESSAR 75
-#define ACT_GANDALF 76
-#define ACT_MARDA 77
-#define ACT_PALANTIR 78
-#define ACT_ROBINTON 79
-#define ACT_PIEMUR 80
-#define ACT_MENOLLY 88
-#define ACT_EREBOR 89
-#define ACT_DRUEDAIN 90
-#define ACT_ESP 91
-#define ACT_BERSERK 92
-#define ACT_PROT_EVIL 93
-#define ACT_RESIST_ALL 94
-#define ACT_SPEED 95
-#define ACT_XTRA_SPEED 96
-#define ACT_WRAITH 97
-#define ACT_INVULN 98
-#define ACT_ROHAN 99
-#define ACT_HELM 100
-#define ACT_BOROMIR 101
-#define ACT_HURIN 102
-#define ACT_AXE_GOTHMOG 103
-#define ACT_MELKOR 104
-#define ACT_GROND 105
-#define ACT_NATUREBANE 106
-#define ACT_NIGHT 107
-#define ACT_ORCHAST 108
-
-#define ACT_DEATH 127
-#define ACT_RUINATION 128
-#define ACT_DESTRUC 129
-#define ACT_UNINT 130
-#define ACT_UNSTR 131
-#define ACT_UNCON 132
-#define ACT_UNCHR 133
-#define ACT_UNDEX 134
-#define ACT_UNWIS 135
-#define ACT_STATLOSS 136
-#define ACT_HISTATLOSS 137
-#define ACT_EXPLOSS 138
-#define ACT_HIEXPLOSS 139
-#define ACT_SUMMON_MONST 140
-#define ACT_PARALYZE 141
-#define ACT_HALLU 142
-#define ACT_POISON 143
-#define ACT_HUNGER 144
-#define ACT_STUN 145
-#define ACT_CUTS 146
-#define ACT_PARANO 147
-#define ACT_CONFUSION 148
-#define ACT_BLIND 149
-#define ACT_DARKNESS 161
-#define ACT_LEV_TELE 162
-#define ACT_WEIRD 164
-#define ACT_AGGRAVATE 165
-#define ACT_LIGHT_ABSORBTION 169
-#define ACT_MUSIC 200
-
-
-#***************************Amulets***********************
-
-#SV_AMULET_ADORNMENT
-I:40:2:4:DARKNESS
-
-#SV_AMULET_BRILLANCE
-I:40:6:1:KNOWLEDGE
-I:40:6:2:CONFUSION
-
-#SV_AMULET_CHARISMA
-I:40:7:4:DARKNESS
-
-#SV_AMULET_DEVOTION
-I:40:25:1:MAGIC
-I:40:25:2:CONFUSION
-I:40:25:8:KNOWLEDGE
-
-#SV_AMULET_ESP
-I:40:22:4:KNOWLEDGE
-
-#SV_AMULET_INFRA
-I:40:26:1:LITE
-
-#SV_AMULET_NO_MAGIC
-I:40:13:4:MAGIC
-
-#SV_AMULET_NO_TELE
-I:40:14:8:TELEPORT
-
-#SV_AMULET_REFLECTION
-I:40:9:10:FORCE
-I:40:9:10:MANA
-
-#SV_AMULET_REGENERATION
-I:40:30:4:LIFE
-
-#SV_AMULET_RESISTANCE
-I:40:15:4:ACID
-I:40:15:4:COLD
-I:40:15:4:FIRE
-I:40:15:4:LIGHTNING
-
-#SV_AMULET_RESIST_ACID
-I:40:4:4:ACID
-
-#SV_AMULET_RESIST_ELEC
-I:40:29:4:LIGHTNING
-
-#SV_AMULET_SEARCHING
-I:40:5:4:KNOWLEDGE
-I:40:5:4:LITE
-
-#SV_AMULET_SERPENT
-I:40:17:1:MANA
-I:40:17:4:ACID
-
-#SV_AMULET_SLOW_DIGEST
-I:40:3:4:LIFE
-
-#SV_AMULET_SUSTENANCE
-I:40:21:8:LIFE
-
-#SV_AMULET_TELEPORT
-I:40:1:8:TELEPORT
-
-#SV_AMULET_THE_MAGI
-I:40:8:1:MAGIC
-I:40:8:4:KNOWLEDGE
-
-#SV_AMULET_TRICKERY
-#I:40:23:1:MAGIC
-I:40:23:8:CONFUSION
-
-#SV_AMULET_WEAPONMASTERY
-I:40:24:12:EXPLOSION
-I:40:24:1:MAGIC
-
-#SV_AMULET_WISDOM
-I:40:28:1:KNOWLEDGE
-I:40:28:2:CONFUSION
-
-#*********Potions******************************
-#Note that these first few potions are the ones which
-#can be thrown for much damage, and are thus an integral part of
-#the alchemist's arsenal.
-
-#SV_POTION_DETONATIONS
-I:71:22:6:EXPLOSION
-
-#SV_POTION_DEATH
-I:71:23:10:LIFE
-
-#SV_POTION_RUINATION
-I:71:15:5:DARKNESS
-
-#SV_POTION_APPLE_JUICE
-I:71:1:1:LIFE
-
-#SV_POTION_AUGMENTATION
-I:71:55:16:POISON
-I:71:55:24:CONFUSION
-I:71:55:6:MAGIC
-I:71:55:8:EXPLOSION
-I:71:55:16:LIFE
-I:71:55:8:LIGHTNING
-I:71:55:16:DARKNESS
-
-#SV_POTION_BESERK_STRENGTH
-I:71:33:1:FIRE
-
-#SV_POTION_BLINDNESS
-I:71:7:1:DARKNESS
-
-#SV_POTION_BOLDNESS
-I:71:28:1:LITE
-
-#SV_POTION_CONFUSION
-I:71:9:1:CONFUSION
-
-#SV_POTION_CURE_CRITICAL
-I:71:36:4:LIFE
-
-#SV_POTION_CURE_LIGHT
-I:71:34:1:LIFE
-
-#SV_POTION_CURE_SERIOUS
-I:71:35:2:LIFE
-
-#SV_POTION_CURING
-I:71:61:1:LIFE
-
-#SV_POTION_DEC_CHR
-I:71:21:1:MANA
-I:71:21:8:DARKNESS
-I:71:21:8:CONFUSION
-
-#SV_POTION_DEC_CON
-I:71:20:1:MANA
-I:71:20:8:LIFE
-I:71:20:8:POISON
-
-#SV_POTION_DEC_DEX
-I:71:19:1:MANA
-I:71:19:8:LIGHTNING
-I:71:19:8:DARKNESS
-
-#SV_POTION_DEC_INT
-I:71:17:1:MANA
-I:71:17:8:CONFUSION
-I:71:17:8:KNOWLEDGE
-
-#SV_POTION_DEC_STR
-I:71:16:1:MANA
-I:71:16:8:EXPLOSION
-I:71:16:8:POISON
-
-#SV_POTION_DEC_WIS
-I:71:18:1:MANA
-I:71:18:8:CONFUSION
-I:71:18:8:LIFE
-
-#SV_POTION_DETECT_INVIS
-I:71:25:1:DARKNESS
-I:71:25:1:LITE
-
-#SV_POTION_ENLIGHTENMENT
-I:71:56:8:KNOWLEDGE
-
-#SV_POTION_EXPERIENCE
-I:71:59:30:EXTRALIFE
-
-#SV_POTION_HEALING
-I:71:37:1:EXTRALIFE
-
-#SV_POTION_HEROISM
-I:71:32:1:COLD
-
-#SV_POTION_INC_CHR
-I:71:53:1:MAGIC
-I:71:53:8:DARKNESS
-I:71:53:8:CONFUSION
-
-#SV_POTION_INC_CON
-I:71:52:1:MAGIC
-I:71:52:8:LIFE
-I:71:52:8:POISON
-
-#Potion of Slow Poison
-I:71:26:1:POISON
-
-#Potion of Cure Poison
-I:71:27:2:POISON
-
-#Potion of Poison
-I:71:6:1:POISON
-
-#SV_POTION_INC_DEX
-I:71:51:1:MAGIC
-I:71:51:8:LIGHTNING
-I:71:51:8:DARKNESS
-
-#SV_POTION_INC_INT
-I:71:49:1:MAGIC
-I:71:49:8:KNOWLEDGE
-I:71:49:8:CONFUSION
-
-#SV_POTION_INC_STR
-I:71:48:1:MAGIC
-I:71:48:8:EXPLOSION
-I:71:48:8:POISON
-
-#SV_POTION_INC_WIS
-I:71:50:1:MAGIC
-I:71:50:8:CONFUSION
-I:71:50:8:LIFE
-
-#SV_POTION_INFRAVISION
-I:71:24:1:LITE
-
-#SV_POTION_INVIS
-I:71:8:4:DARKNESS
-
-#SV_POTION_INVULNERABILITY
-I:71:62:10:FORCE
-I:71:62:4:MAGIC
-
-#SV_POTION_LIFE
-I:71:39:8:EXTRALIFE
-
-#SV_POTION_LOSE_MEMORIES
-I:71:13:20:DARKNESS
-
-#SV_POTION_MUTATION
-I:71:10:12:CHAOS
-
-#SV_POTION_NEW_LIFE
-I:71:63:16:EXTRALIFE
-
-#SV_POTION_RESISTANCE
-I:71:60:2:ACID
-I:71:60:2:COLD
-I:71:60:2:FIRE
-I:71:60:2:LIGHTNING
-
-#SV_POTION_RESIST_COLD
-I:71:31:1:COLD
-
-#SV_POTION_RESIST_HEAT
-I:71:30:1:FIRE
-
-#SV_POTION_RESTORE_EXP
-I:71:41:8:LIFE
-I:71:41:3:KNOWLEDGE
-
-#SV_POTION_RESTORE_MANA
-I:71:40:12:MANA
-
-#SV_POTION_RES_CHR
-I:71:47:12:LIFE
-
-#SV_POTION_RES_CON
-I:71:46:12:LIFE
-
-#SV_POTION_RES_DEX
-I:71:45:12:LIFE
-
-#SV_POTION_RES_INT
-I:71:43:12:LIFE
-
-#SV_POTION_RES_STR
-I:71:42:12:LIFE
-
-#SV_POTION_RES_WIS
-I:71:44:12:LIFE
-
-#SV_POTION_SALT_WATER
-I:71:5:1:LIGHTNING
-
-#SV_POTION_SELF_KNOWLEDGE
-I:71:58:2:KNOWLEDGE
-
-#SV_POTION_SLEEP
-I:71:11:1:MANA
-
-#SV_POTION_SLIME_MOLD
-I:71:2:1:LIFE
-
-#SV_POTION_SLOWNESS
-I:71:4:1:MANA
-
-#SV_POTION_SPEED
-I:71:29:1:TIME
-
-#SV_POTION_STAR_ENLIGHTENMENT
-I:71:57:12:KNOWLEDGE
-
-#SV_POTION_STAR_HEALING
-I:71:38:4:EXTRALIFE
-
-#SV_POTION_WATER
-I:71:0:1:LIFE
-
-#********************************Potion 2*********************************
-
-#SV_POTION2_MIMIC 1
-I:72:1:2:LIFE
-#SV_POTION2_CURE_LIGHT_SANITY 14
-I:72:14:1:CONFUSION
-I:72:14:1:DARKNESS
-#SV_POTION2_CURE_SERIOUS_SANITY 15
-I:72:15:2:CONFUSION
-I:72:15:2:DARKNESS
-#SV_POTION2_CURE_CRITICAL_SANITY 16
-I:72:16:4:CONFUSION
-I:72:16:4:DARKNESS
-#SV_POTION2_CURE_SANITY 17
-I:72:17:8:CONFUSION
-I:72:17:8:DARKNESS
-#SV_POTION2_CURE_WATER 18
-#I:72:18:4:EXPLOSION
-#I:72:18:4:POISON
-#I:72:18:2:EXTRALIFE
-
-#************Rod Tips.****************************
-
-#SV_ROD_ACID_BALL
-I:66:24:1:MAGIC
-I:66:24:8:ACID
-
-#SV_ROD_ACID_BOLT
-I:66:20:4:ACID
-
-#SV_ROD_COLD_BALL
-I:66:27:1:MAGIC
-I:66:27:8:COLD
-
-#SV_ROD_COLD_BOLT
-I:66:23:4:COLD
-
-#SV_ROD_CURING
-I:66:8:3:LIFE
-
-#SV_ROD_DETECTION
-I:66:6:8:KNOWLEDGE
-
-#SV_ROD_DETECT_DOOR
-I:66:1:1:KNOWLEDGE
-
-#SV_ROD_DETECT_TRAP
-I:66:29:1:KNOWLEDGE
-
-#SV_ROD_DISARMING
-I:66:14:4:TELEPORT
-
-#SV_ROD_DRAIN_LIFE
-I:66:18:10:LIFE
-
-#SV_ROD_ELEC_BALL
-I:66:25:1:MAGIC
-I:66:25:8:LIGHTNING
-
-#SV_ROD_ELEC_BOLT
-I:66:21:4:LIGHTNING
-
-#SV_ROD_FIRE_BALL
-I:66:26:1:MAGIC
-I:66:26:8:FIRE
-
-#SV_ROD_FIRE_BOLT
-I:66:22:4:FIRE
-
-#SV_ROD_HAVOC
-I:66:28:5:CHAOS
-
-#SV_ROD_HEALING
-I:66:9:4:EXTRALIFE
-
-#SV_ROD_IDENTIFY
-I:66:2:4:MANA
-I:66:2:4:KNOWLEDGE
-
-#SV_ROD_ILLUMINATION
-I:66:4:4:LITE
-
-#SV_ROD_LITE
-I:66:15:1:LITE
-
-#SV_ROD_MAPPING
-I:66:5:1:KNOWLEDGE
-I:66:5:8:LITE
-
-#SV_ROD_POLYMORPH
-I:66:19:1:CHAOS
-
-#SV_ROD_PROBING
-I:66:7:20:KNOWLEDGE
-I:66:7:3:MANA
-
-#SV_ROD_RECALL
-I:66:3:3:FORCE
-I:66:3:9:TELEPORT
-
-#SV_ROD_RESTORATION
-I:66:10:30:LIFE
-
-#SV_ROD_SLEEP_MONSTER
-I:66:16:1:MANA
-
-#SV_ROD_SLOW_MONSTER
-I:66:17:1:TIME
-
-#SV_ROD_SPEED
-I:66:11:10:TIME
-
-#SV_ROD_TELEPORT_AWAY
-I:66:13:8:TELEPORT
-
-#**************************Scrolls ********************
-
-#SV_SCROLL_ACQUIREMENT
-I:70:46:10:MAGIC
-
-#SV_SCROLL_ARTIFACT
-I:70:52:99:MAGIC
-
-#SV_SCROLL_BLESSING
-I:70:33:1:LIFE
-
-#SV_SCROLL_CHAOS
-I:70:50:2:CHAOS
-
-#SV_SCROLL_DARKNESS
-I:70:0:1:DARKNESS
-
-#SV_SCROLL_DETECT_DOOR
-I:70:29:1:KNOWLEDGE
-
-#SV_SCROLL_DETECT_GOLD
-I:70:26:1:KNOWLEDGE
-
-#SV_SCROLL_DETECT_INVIS
-I:70:30:1:DARKNESS
-I:70:30:1:KNOWLEDGE
-
-#SV_SCROLL_DETECT_ITEM
-I:70:27:2:KNOWLEDGE
-
-#SV_SCROLL_DETECT_TRAP
-I:70:28:1:KNOWLEDGE
-
-#SV_SCROLL_DISPEL_UNDEAD
-I:70:42:1:EXTRALIFE
-
-#SV_SCROLL_ENCHANT_ARMOR
-I:70:16:3:EXPLOSION
-
-#SV_SCROLL_ENCHANT_WEAPON_PVAL
-I:70:19:10:MAGIC
-
-#SV_SCROLL_ENCHANT_WEAPON_TO_DAM
-I:70:18:3:EXPLOSION
-
-#SV_SCROLL_ENCHANT_WEAPON_TO_HIT
-I:70:17:3:LITE
-
-#SV_SCROLL_FIRE
-I:70:48:1:FIRE
-
-#SV_SCROLL_GENOCIDE
-I:70:44:1:FORCE
-I:70:44:5:DARKNESS
-
-#SV_SCROLL_HOLY_CHANT
-I:70:34:2:LIFE
-
-#SV_SCROLL_HOLY_PRAYER
-I:70:35:3:LIFE
-
-#SV_SCROLL_ICE
-I:70:49:1:COLD
-
-#SV_SCROLL_IDENTIFY
-I:70:12:1:KNOWLEDGE
-
-#SV_SCROLL_LIGHT
-I:70:24:1:LITE
-
-#SV_SCROLL_MAPPING
-I:70:25:2:KNOWLEDGE
-I:70:25:5:LITE
-
-#SV_SCROLL_MASS_GENOCIDE
-I:70:45:1:FORCE
-I:70:45:30:DARKNESS
-
-#SV_SCROLL_MONSTER_CONFUSION
-I:70:36:1:CONFUSION
-
-#SV_SCROLL_PHASE_DOOR
-I:70:8:1:TELEPORT
-
-#SV_SCROLL_PROTECTION_FROM_EVIL
-I:70:37:1:MANA
-I:70:37:9:LIFE
-
-#SV_SCROLL_RECHARGING
-I:70:22:4:LIGHTNING
-
-#SV_SCROLL_REMOVE_CURSE
-I:70:14:1:LIFE
-
-#SV_SCROLL_RESET_RECALL
-I:70:23:1:FORCE
-
-#SV_SCROLL_RUMOR
-I:70:51:1:LIGHTNING
-
-#SV_SCROLL_RUNE_OF_PROTECTION
-I:70:38:1:EXTRALIFE
-I:70:38:6:FORCE
-
-#SV_SCROLL_SATISFY_HUNGER
-I:70:32:1:LIFE
-
-#SV_SCROLL_STAR_ACQUIREMENT
-I:70:47:20:MAGIC
-
-#SV_SCROLL_STAR_DESTRUCTION
-I:70:41:12:FORCE
-
-#SV_SCROLL_STAR_ENCHANT_ARMOR
-I:70:20:9:EXPLOSION
-
-#SV_SCROLL_STAR_ENCHANT_WEAPON
-I:70:21:9:EXPLOSION
-I:70:21:9:LITE
-
-#SV_SCROLL_STAR_IDENTIFY
-I:70:13:1:MAGIC
-I:70:13:20:KNOWLEDGE
-
-#SV_SCROLL_STAR_REMOVE_CURSE
-I:70:15:1:EXTRALIFE
-
-#SV_SCROLL_TELEPORT
-I:70:9:1:TELEPORT
-
-#SV_SCROLL_TELEPORT_LEVEL
-I:70:10:5:TELEPORT
-
-#SV_SCROLL_TRAP_CREATION
-I:70:7:1:CONFUSION
-I:70:7:1:TELEPORT
-
-#SV_SCROLL_TRAP_DOOR_DESTRUCTION
-I:70:39:1:FORCE
-
-#SV_SCROLL_WORD_OF_RECALL
-I:70:11:1:FORCE
-I:70:11:3:TELEPORT
-
-#***************************Staves************************
-
-#Globe of Light
-I:55:3:1:LITE
-#Fiery Shield
-I:55:4:2:FIRE
-I:55:4:1:MANA
-#Remove Curse
-I:55:5:2:LIFE
-#Wings of Winds
-I:55:6:1:FORCE
-#Shake
-I:55:7:4:FORCE
-#Disarm
-I:55:8:1:FORCE
-I:55:8:1:KNOWLEDGE
-#Teleportation
-I:55:9:1:TELEPORT
-#Probability Travel
-I:55:10:1:MANA
-I:55:10:1:TELEPORT
-#11 Recovery
-I:55:11:1:LIFE
-#12 Healing
-I:55:12:1:EXTRALIFE
-#13 Vision
-I:55:13:1:LITE
-#Identify
-I:55:14:1:KNOWLEDGE
-I:55:14:1:MANA
-#Sense Hidden
-I:55:15:1:KNOWLEDGE
-#Reveal Ways
-I:55:16:1:KNOWLEDGE
-#Sense Monsters
-I:55:17:1:KNOWLEDGE
-#Genocide
-I:55:18:1:FORCE
-I:55:18:5:DARKNESS
-#19 Summon
-I:55:19:1:LIFE
-I:55:19:1:TELEPORT
-#Wish
-I:55:20:99:MAGIC
-#Mana
-I:55:21:1:MANA
-#Sterilize
-I:55:24:1:POISON
-I:55:24:1:MANA
-
-#********************Wands*****************
-
-#MannaThrust
-I:65:3:4:MANA
-
-#FireFlash
-I:65:4:1:FIRE
-
-#FireWall
-I:65:5:4:FIRE
-I:65:5:1:MANA
-
-#Tidal Wave
-I:65:6:1:POISON
-I:65:6:1:ACID
-I:65:6:1:COLD
-
-#Ice Storm
-I:65:7:4:COLD
-I:65:7:1:MANA
-
-#Wand of Noxious Cloud
-I:65:8:1:POISON
-
-#Poison Blood
-I:65:9:2:POISON
-I:65:9:1:LIFE
-
-#Thunderstorm
-I:65:10:4:LIGHTNING
-
-#DIG
-I:65:11:1:FORCE
-
-#Stone Prison
-I:65:12:3:FORCE
-I:65:12:1:MANA
-
-#Strike
-I:65:13:1:FORCE
-#Teleport Away
-I:65:14:1:TELEPORT
-#Summon Animal
-I:65:15:4:LIFE
-I:65:15:1:MANA
-#MageLock
-I:65:16:1:FORCE
-#Slow Monster
-I:65:17:1:MANA
-#Essence of Speed
-I:65:18:1:TIME
-#Banishment
-I:65:19:2:TELEPORT
-#20 Disperse Magic
-I:65:20:4:LIFE
-I:65:20:4:MANA
-#Charm
-I:65:21:1:MANA
-I:65:21:1:LIFE
-#Confuse
-I:65:22:1:CONFUSION
-#Deamon Blade
-I:65:23:1:FORCE
-I:65:23:1:FIRE
-#Heal Monster
-I:65:24:1:LIFE
-#25 Haste Monster
-I:65:25:1:MANA
-
-
-
-#RINGS*********************************************************
-
-#ring of poison resistance
-I:45:20:8:POISON
-
-#Ring of Critical Hits
-I:45:59:8:MANA
-
-#Damage
-I:45:29:1:EXPLOSION
-
-#Slaying
-I:45:30:8:EXPLOSION
-I:45:30:8:LITE
-
-#Sound Resistance
-I:45:42:4:EXPLOSION
-I:45:42:4:LITE
-
-#Shard Resistance
-I:45:44:4:EXPLOSION
-I:45:44:4:TELEPORT
-
-#Flying
-I:45:54:12:TELEPORT
-
-#Extra Attacks
-I:45:49:8:TELEPORT
-I:45:49:4:TIME
-
-#Teleportation
-I:45:4:8:TELEPORT
-
-#Lordly Protection
-I:45:48:4:TELEPORT
-I:45:48:12:LITE
-I:45:48:1:EXTRALIFE
-
-#Ring of Ice
-I:45:19:8:COLD
-
-#Ring of Cold Resistance
-I:45:9:4:COLD
-
-#Ring of Flames
-I:45:18:8:FIRE
-
-#Ring of Fire Resistance
-I:45:8:4:FIRE
-
-#Ring of Acid
-I:45:17:8:ACID
-
-#Ring of Disenchantment Resistance
-I:45:45:8:ACID
-I:45:45:2:CHAOS
-
-#Ring of slow digestion
-I:45:6:4:LIFE
-I:45:6:1:TIME
-
-#ring of confusion resistance
-I:45:43:8:CONFUSION
-
-#Ring of Stupidity
-I:45:3:1:CONFUSION
-
-#Ring of Blindness Resistance
-I:45:47:8:LITE
-
-#Ring of Accuracy
-I:45:28:1:LITE
-
-#Ring of Searching
-I:45:23:4:LITE
-I:45:23:3:KNOWLEDGE
-
-#Ring of Chaos
-I:45:46:8:LITE
-
-#Ring of Light and Darkness Resistance
-I:45:39:8:LITE
-I:45:39:8:DARKNESS
-
-#Ring of Speed
-I:45:31:12:TIME
-
-#ring of Weakness
-I:45:2:1:POISON
-
-#ring of Constitution
-I:45:27:2:POISON
-I:45:27:8:LIFE
-
-#ring of Strength
-I:45:24:1:POISON
-I:45:24:1:EXPLOSION
-
-#Ring of Dexterity
-I:45:26:1:KNOWLEDGE
-I:45:26:1:LIGHTNING
-
-#ring of Sustain Constitution
-I:45:13:1:POISON
-I:45:13:4:LIFE
-I:45:13:1:MANA
-
-#ring of Sustain Strength
-I:45:10:1:POISON
-I:45:10:1:EXPLOSION
-I:45:10:1:MANA
-
-#ring of Sustain Intelligence
-I:45:11:1:CONFUSION
-I:45:11:1:MANA
-
-#ring of Intelligence
-I:45:25:1:CONFUSION
-I:45:25:12:KNOWLEDGE
-
-#Ring of Sustain Wisdom
-I:45:12:1:MANA
-I:45:12:4:CONFUSION
-
-#Ring of Sustain Dexterity
-I:45:14:1:MANA
-I:45:14:1:LIGHTNING
-
-#Ring of Sustain Charisma
-I:45:15:1:MANA
-I:45:15:1:DARKNESS
-
-#Ring of See Invisible
-I:45:22:8:DARKNESS
-
-#Ring of Invisibility
-I:45:53:8:DARKNESS
-
-#Ring of Fear resistance
-I:45:38:1:MAGIC
-
-#Ring of Levitation
-I:45:7:1:MANA
-
-#Ring of Nether Resistance
-I:45:40:1:MANA
-I:45:40:12:LIFE
-
-#Ring of Nexus Resistance
-I:45:41:1:MANA
-
-#Ring of Free Action
-I:45:21:1:FORCE
-
-#Ring of Protection
-I:45:16:10:FORCE
-
-#Ring of Lightning
-I:45:56:12:LIGHTNING
-
-#EGO ITEMS, in order by e_idx
-I:1:1:1:MAGIC },/*of Mana*/
-I:1:2:2:MAGIC },/*of Power*/
-I:1:3:3:MAGIC },/*of Wizardry*/
-I:1:4:2:MAGIC },/*of Spell*/
-I:1:5:4:ACID },/*of Resist Acid*/
-I:1:6:4:LIGHTNING },/*of Resist Lightning*/
-I:1:7:4:FIRE },/*of Resist Fire*/
-I:1:8:4:COLD },/*of Resist Cold*/
-I:1:9:4:ACID },/*of Resistance*/
-I:1:9:4:COLD },/*of Resistance*/
-I:1:9:4:FIRE },/*of Resistance*/
-I:1:9:4:LIGHTNING },/*of Resistance*/
-I:1:10:5:ACID },/*Elven*/
-I:1:10:5:COLD },/*Elven*/
-I:1:10:5:FIRE },/*Elven*/
-I:1:10:5:LIGHTNING },/*Elven*/
-I:1:11:1:MAGIC },/*of Permanence*/
-I:1:11:6:ACID },/*of Permanence*/
-I:1:11:6:COLD },/*of Permanence*/
-I:1:11:6:FIRE },/*of Permanence*/
-I:1:11:6:LIGHTNING },/*of Permanence*/
-I:1:12:1:POISON },/*of Leprousness*/
-I:1:13:3:MAGIC },/*of Immunity*/
-I:1:14:5:MAGIC },/*of Defense*/
-I:1:15:4:TELEPORT },/*of Jumping*/
-I:1:16:4:ACID },/*of Resist Acid*/
-I:1:17:4:LIGHTNING },/*of Resist Lightning*/
-I:1:18:4:FIRE },/*of Resist Fire*/
-I:1:19:4:COLD },/*of Resist Cold*/
-I:1:20:4:ACID },/*of Resistance*/
-I:1:20:4:COLD },/*of Resistance*/
-I:1:20:4:FIRE },/*of Resistance*/
-I:1:20:4:LIGHTNING },/*of Resistance*/
-I:1:21:12:FORCE },/*of Reflection*/
-I:1:22:8:LIGHTNING },/*of Electricity*/
-I:1:23:4:DARKNESS },/*of the Noldor*/
-I:1:24:4:KNOWLEDGE },/*of Intelligence*/
-I:1:25:4:KNOWLEDGE },/*of Wisdom*/
-I:1:26:4:KNOWLEDGE },/*of Beauty*/
-I:1:27:12:KNOWLEDGE },/*of the Magi*/
-I:1:28:12:EXPLOSION },/*of Might*/
-I:1:29:4:MANA },/*of Lordliness*/
-I:1:30:8:KNOWLEDGE },/*of Seeing*/
-I:1:31:1:LITE },/*of Infravision*/
-I:1:32:1:LITE },/*of Light*/
-I:1:33:8:KNOWLEDGE },/*of Telepathy*/
-I:1:34:4:LIFE },/*of Regeneration*/
-I:1:35:4:TELEPORT },/*of Teleportation*/
-I:1:40:8:EXPLOSION },/*Dwarven*/
-I:1:40:8:FIRE },/*Dwarven*/
-I:1:40:8:LIFE },/*Dwarven*/
-I:1:40:8:LITE },/*Dwarven*/
-I:1:40:8:MANA },/*Dwarven*/
-I:1:41:4:FORCE },/*of Protection*/
-I:1:42:4:DARKNESS },/*of Stealth*/
-I:1:43:4:ACID },/*of Aman*/
-I:1:43:4:COLD },/*of Aman*/
-I:1:43:4:DARKNESS },/*of Aman*/
-I:1:43:4:FIRE },/*of Aman*/
-I:1:43:4:LIGHTNING },/*of Aman*/
-I:1:44:8:FIRE },/*of Immolation*/
-I:1:48:8:LIGHTNING },/*of Electricity*/
-I:1:49:1:FORCE },/*of Free Action*/
-I:1:50:4:FORCE },/*of Slaying*/
-I:1:50:4:LITE },/*of Slaying*/
-I:1:51:4:LIGHTNING },/*of Agility*/
-I:1:52:4:EXPLOSION },/*of Power*/
-I:1:54:2:DARKNESS },/*of Charming*/
-I:1:57:3:DARKNESS },/*of Levitation*/
-I:1:58:3:DARKNESS },/*of Stealth*/
-I:1:59:3:DARKNESS },/*of Free Action*/
-I:1:60:5:TIME },/*of Speed*/
-I:1:61:2:DARKNESS },/*of Dwarvish Endurance*/
-I:1:61:2:EXPLOSION },/*of Dwarvish Endurance*/
-I:1:65:4:ACID },/*of Aman*/
-I:1:65:4:COLD },/*of Aman*/
-I:1:65:4:DARKNESS },/*of Aman*/
-I:1:65:4:FIRE },/*of Aman*/
-I:1:65:4:LIGHTNING },/*of Aman*/
-I:1:66:1:MAGIC },/*(Defender)*/
-I:1:66:4:ACID },/*(Defender)*/
-I:1:66:4:COLD },/*(Defender)*/
-I:1:66:4:FIRE },/*(Defender)*/
-I:1:66:4:LIGHTNING },/*(Defender)*/
-I:1:67:8:KNOWLEDGE },/*Blessed*/
-I:1:68:12:LIFE },/*of Greater Life*/
-I:1:68:2:MAGIC },/*of Greater Life*/
-I:1:69:4:DARKNESS },/*of Westernesse*/
-I:1:69:4:EXPLOSION },/*of Westernesse*/
-I:1:69:4:LIGHTNING },/*of Westernesse*/
-I:1:69:4:LITE },/*of Westernesse*/
-I:1:70:2:TIME },/*of Extra Attacks*/
-I:1:71:4:FORCE },/*of Slaying*/
-I:1:71:4:LITE },/*of Slaying*/
-I:1:72:4:EXPLOSION },/*of Spinning*/
-I:1:72:4:LIGHTNING },/*of Spinning*/
-I:1:73:4:ACID },/*Acidic*/
-I:1:74:4:LIGHTNING },/*Shocking*/
-I:1:75:4:FIRE },/*Fiery*/
-I:1:76:4:COLD },/*Frozen*/
-I:1:77:4:POISON },/*Venomous*/
-I:1:78:4:CHAOS },/*Chaotic*/
-I:1:79:4:FORCE },/*Sharp*/
-I:1:80:4:FORCE },/*of Earthquakes*/
-I:1:81:8:CHAOS },/*of Slay Animal*/
-I:1:82:8:CHAOS },/*of Slay Evil*/
-I:1:83:8:CHAOS },/*of Slay Undead*/
-I:1:84:8:CHAOS },/*of Slay Demon*/
-I:1:85:8:CHAOS },/*of Slay Orc*/
-I:1:86:8:CHAOS },/*of Slay Troll*/
-I:1:87:8:CHAOS },/*of Slay Giant*/
-I:1:88:8:CHAOS },/*of Slay Dragon*/
-I:1:89:12:CHAOS },/*of *Slay Animal**/
-I:1:90:12:CHAOS },/*of *Slay Evil**/
-I:1:91:12:CHAOS },/*of *Slay Undead**/
-I:1:92:12:CHAOS },/*of *Slay Demon**/
-I:1:93:12:CHAOS },/*of *Slay Orc**/
-I:1:94:12:CHAOS },/*of *Slay Troll**/
-I:1:95:12:CHAOS },/*of *Slay Giant**/
-I:1:96:12:CHAOS },/*of *Slay Dragon**/
-I:1:97:8:LIFE },/*Vampiric*/
-I:1:98:4:MAGIC },/*(*Defender*)*/
-I:1:98:8:ACID },/*(*Defender*)*/
-I:1:98:8:COLD },/*(*Defender*)*/
-I:1:98:8:FIRE },/*(*Defender*)*/
-I:1:98:8:LIGHTNING },/*(*Defender*)*/
-I:1:98:8:POISON },/*(*Defender*)*/
-I:1:99:12:TELEPORT },/*of the Thunderlords*/
-I:1:100:12:KNOWLEDGE },/*of Gondolin*/
-I:1:100:1:MAGIC },/*of Gondolin*/
-I:1:101:1:FORCE },/*of Digging*/
-I:1:102:12:LIFE },/*Spectral*/
-I:1:102:4:MANA },/*Spectral*/
-I:1:105:1:LITE },/*of Accuracy*/
-I:1:106:2:FORCE },/*of Power*/
-I:1:107:2:FORCE },/*of Extra Might*/
-I:1:108:1:FORCE },/*of Extra Shots*/
-I:1:108:1:LITE },/*of Extra Shots*/
-I:1:108:1:TIME },/*of Extra Shots*/
-I:1:109:2:FORCE },/*of Lothlorien*/
-I:1:109:2:LITE },/*of Lothlorien*/
-I:1:110:2:FORCE },/*of the Haradrim*/
-I:1:110:2:LITE },/*of the Haradrim*/
-I:1:111:2:FORCE },/*of Buckland*/
-I:1:111:2:LITE },/*of Buckland*/
-I:1:112:1:CHAOS },/*of Slay Animal*/
-I:1:113:1:CHAOS },/*of Slay Evil*/
-I:1:114:1:CHAOS },/*of Slay Undead*/
-I:1:115:1:POISON },/*of Venom*/
-I:1:116:1:ACID },/*of Acid*/
-I:1:117:12:ACID },/*Elemental*/
-I:1:117:12:COLD },/*Elemental*/
-I:1:117:12:FIRE },/*Elemental*/
-I:1:117:12:LIGHTNING },/*Elemental*/
-I:1:117:12:POISON },/*Elemental*/
-I:1:118:1:CHAOS },/*of Slay Demon*/
-I:1:119:1:CHAOS },/*of Slay Dragon*/
-I:1:120:1:FORCE },/*of Slaying*/
-I:1:120:1:LITE },/*of Slaying*/
-I:1:121:1:LIGHTNING },/*of Lightning*/
-I:1:121:1:LITE },/*of Lightning*/
-I:1:122:1:FIRE },/*of Flame*/
-I:1:122:1:LITE },/*of Flame*/
-I:1:123:1:COLD },/*of Frost*/
-I:1:123:1:LITE },/*of Frost*/
-I:1:124:1:LIFE },/*of Wounding*/
-I:1:128:2:ACID },/*of the Eldar*/
-I:1:128:2:DARKNESS },/*of the Eldar*/
-I:1:129:2:ACID },/*of Power*/
-I:1:129:2:COLD },/*of Power*/
-I:1:129:2:DARKNESS },/*of Power*/
-I:1:129:2:FIRE },/*of Power*/
-I:1:129:2:LIGHTNING },/*of Power*/
-I:1:130:1:MANA },/*Dragon*/
-I:1:131:1:MANA },/*Capacity of */
-I:1:132:1:LIFE },/*Cheapness of */
-I:1:133:1:TIME },/*Quickness of */
-I:1:134:1:TIME },/*Charging of */
-I:1:135:3:LIFE },/*the Istari of */
-I:1:135:3:MANA },/*the Istari of */
-I:1:135:3:TIME },/*the Istari of */
-I:1:136:1:LITE },/*of Boldness*/
-I:1:137:1:LITE },/*of Fearlessness*/
-I:1:138:2:LITE },/*of Illumination*/
-I:1:139:2:LITE },/*of Brightness*/
-I:1:140:4:LITE },/*of *Brightness**/
-I:1:141:4:DARKNESS },/*of the Shadows*/
-I:1:141:4:LITE },/*of the Shadows*/
-I:1:142:4:DARKNESS },/*of Infravision*/
-I:1:142:4:LITE },/*of Infravision*/
-I:1:143:8:DARKNESS },/*of the Eternal Eye*/
-I:1:144:4:MANA },/*of the Ethereal Eye*/
-I:1:146:4:DARKNESS },/*Dwarven*/
-I:1:146:4:EXPLOSION },/*Dwarven*/
-I:1:146:4:LITE },/*Dwarven*/
-I:1:147:1:MAGIC },/*Indestructible*/
-I:1:147:4:ACID },/*Indestructible*/
-I:1:147:4:COLD },/*Indestructible*/
-I:1:147:4:FIRE },/*Indestructible*/
-I:1:147:4:LIGHTNING },/*Indestructible*/
-I:1:147:4:MANA },/*Indestructible*/
-I:1:149:1:FIRE },/*Fireproof*/
-I:1:163:3:DARKNESS },/*of the Magi*/
-I:1:163:3:KNOWLEDGE },/*of the Magi*/
-I:1:163:3:MANA },/*of the Magi*/
-I:1:166:4:MAGIC },/*of Preservation*/
-I:1:166:4:MANA },/*of Preservation*/
-I:1:167:12:MANA },/*of Serenity*/
-I:1:168:4:DARKNESS },/*of Night and Day*/
-I:1:168:4:LITE },/*of Night and Day*/
-I:1:169:1:TIME },/*of the Magi*/
-I:1:169:8:KNOWLEDGE },/*of the Magi*/
-I:1:170:4:DARKNESS },/*of Invisibility*/
-I:1:171:8:DARKNESS },/*of the Bat*/
-I:1:171:8:TELEPORT },/*of the Bat*/
-I:1:172:4:LIGHTNING },/*of Thievery*/
-I:1:173:4:FORCE },/*of Combat*/
-I:1:174:4:TELEPORT },/*of Stability*/
-I:1:175:4:ACID },/*of Elvenkind*/
-I:1:175:4:COLD },/*of Elvenkind*/
-I:1:175:4:FIRE },/*of Elvenkind*/
-I:1:175:4:LIGHTNING },/*of Elvenkind*/
-I:1:176:1:MAGIC },/*of Fury*/
-I:1:176:4:CHAOS },/*of Fury*/
-I:1:176:4:EXPLOSION },/*of Fury*/
-I:1:176:4:MANA },/*of Fury*/
-I:1:178:8:FORCE },/*Magical*/
-I:1:179:4:KNOWLEDGE },/*Simplicity of */
-I:1:180:1:FIRE },/*of Warmth*/
-I:1:185:12:LIFE },/*of Life*/
-I:1:185:2:MAGIC },/*of Life*/
diff --git a/lib/edit/ba_info.txt b/lib/edit/ba_info.txt
index 8156fd2f..e5c49759 100644
--- a/lib/edit/ba_info.txt
+++ b/lib/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/edit/d_info.txt b/lib/edit/d_info.txt
index 59a1e6f2..24526ea2 100644
--- a/lib/edit/d_info.txt
+++ b/lib/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
@@ -303,7 +299,7 @@ M:ORC | R_CHAR_k | 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/edit/e_info.txt b/lib/edit/e_info.txt
index f01d8cf7..f3bc1d31 100644
--- a/lib/edit/e_info.txt
+++ b/lib/edit/e_info.txt
@@ -63,10 +63,6 @@
-# Version stamp (required)
-
-V:2.0.0
-
### Mage Staff ###
N:1:of Mana
@@ -231,7 +227,7 @@ C:0:0:0:3
Z:blink
R:100
F:ACTIVATE
-a:HARDCORE=JUMP
+a:JUMP
### Shields ###
@@ -321,7 +317,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
@@ -859,7 +855,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)
@@ -1239,7 +1235,7 @@ T:24:0:255
X:A:24:22
W:0:1:100:7000
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_NEXUS | ACTIVATE | FLY | ESP_DRAGON
@@ -1295,7 +1291,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:255
@@ -1602,7 +1598,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
@@ -2123,7 +2119,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 |
@@ -2132,7 +2128,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 |
@@ -2141,7 +2137,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 |
diff --git a/lib/edit/f_info.txt b/lib/edit/f_info.txt
index c0dc2e9a..5ab0cbdc 100644
--- a/lib/edit/f_info.txt
+++ b/lib/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/edit/k_info.txt b/lib/edit/k_info.txt
index aba86074..612bdc5c 100644
--- a/lib/edit/k_info.txt
+++ b/lib/edit/k_info.txt
@@ -20,11 +20,6 @@
# Note that object zero is used for the "stack" picture (unused).
-# Version stamp (required)
-
-V:2.0.0
-
-
##### Something special #####
N:0:something
@@ -1404,7 +1399,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.
@@ -1483,7 +1478,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 | IGNORE_FIRE | ACTIVATE
f:RES_FIRE
D:This fiery circlet grants you protection, makes fire less dangerous and even
@@ -1495,7 +1490,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 | IGNORE_ACID | ACTIVATE
f:RES_ACID
D:This magical ring is imbued with spells of devouring acid, granting protection against such
@@ -1506,7 +1501,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 | IGNORE_COLD | ACTIVATE
f:RES_COLD
@@ -2775,9 +2770,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.
@@ -3518,7 +3513,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
@@ -3530,7 +3525,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
@@ -3541,7 +3536,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 |
@@ -3554,7 +3549,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
@@ -3566,7 +3561,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
@@ -3578,7 +3573,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 |
@@ -3591,7 +3586,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 suit of armour made of dragon hide, glowing with a strange light, or is it darkness?
@@ -3602,7 +3597,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 piece of dragonhide cut and shaped so it can be worn as armour. The scales are very sharp,
@@ -3614,7 +3609,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 suit of armour made from dragon skin. Its brownish scales glitter in a dazzling light.
@@ -3625,7 +3620,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 golden-hued armour made of dragonhide. The rustle of its scales occasionally
@@ -3637,7 +3632,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 |
@@ -3652,7 +3647,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
@@ -3664,7 +3659,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 |
@@ -4782,13 +4777,6 @@ W:1:0:5:2
A:1/1
P:0:1d1:0:0:0
-N:565:Poison
-G:*:G
-I:4:1:5
-W:0:0:4:2
-A:0/1
-P:0:1d1:0:0:0
-
# wand
N:566:Nothing
G:-:d
@@ -4821,24 +4809,10 @@ A:5/1
P:0:1d1:0:0:0
-# Here comes the Essences (randomly interspersed with other stuff...)
-
-N:570:Explosion
-G:*:G
-I:4:2:50
-W:0:0:4:2
-A:0/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
-N:571:Teleport
-G:*:G
-I:4:3:190
-W:0:0:4:2
-A:5/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
# Amulet of Nothing
+# FIXME: Could remove "of Nothing" (amulets, rings, rods)
+
N:572:Nothing
G:":d
I:40:16:0
@@ -4859,27 +4833,6 @@ F:NORM_ART | FULL_NAME
D:Quaffing this measure of living blood will imbue your body and soul
D:with the power to escape death one time.
-N:574:Cold
-G:*:G
-I:4:4:200
-W:0:0:4:2
-A:5/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
-N:575:Fire
-G:*:G
-I:4:5:200
-W:0:0:4:2
-A:5/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
-N:576:Acid
-G:*:G
-I:4:6:200
-W:0:0:4:2
-A:6/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
# Mage staffs (for Sorcerers to wield.)
N:577:& Mage Staff~
@@ -4901,35 +4854,12 @@ 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 | IGNORE_ELEC | ACTIVATE
f:RES_ELEC |
D:This sparkling circlet grants you protection, makes electricity less
D:dangerous and even allows you to call forth a ball of lightning.
-# More essences
-
-N:579:Life
-G:*:G
-I:4:7:300
-W:0:0:4:2
-A:0/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
-N:580:Confusion
-G:*:G
-I:4:8:100
-W:0:0:4:2
-A:0/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
-N:581:Light
-G:*:G
-I:4:9:60
-W:0:0:4:2
-A:0/1:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
# The Ring of Flare -- see artifact list
N:582:& Ring~
@@ -4950,14 +4880,6 @@ F:FOUNTAIN
D:This magical brew will temporarily hide you from sight, and also attunes you
D:to this state so that your eyes can still perceive your hidden form.
-N:584:Chaos
-G:*:G
-I:4:10:200
-W:20:0:4:2
-A:20/1
-P:0:1d1:0:0:0
-F:ATTR_MULTI
-
# Potion of Corruption
N:585:Corruption
@@ -4980,15 +4902,6 @@ F:INVIS | HIDE_TYPE
f:INVIS |
D:This magical bauble will hide you from sight.
-### Just another essence, to confuse the edit file hackers ;) ###
-
-N:587:Time
-G:*:G
-I:4:11:600
-W:20:0:4:2
-A:20/1:40/1:60/1
-P:0:1d1:0:0:0
-
######### Here are the parchments ########
N:588:Deep Thoughts
@@ -5154,15 +5067,6 @@ D:extra protection.
# XXX 619 -> 639
-# One more essence...
-
-N:640:Magic
-G:*:G
-I:4:12:700
-W:20:0:4:2
-A:30/1:50/1:80/1
-P:0:1d1:0:0:0
-
# Here are the corpses
N:641:corpse
@@ -5602,15 +5506,6 @@ A:16/1
P:0:1d1:0:0:0
F:IGNORE_ACID
-# And, among the runes, one more essence...
-
-N:696:Extra Life
-G:*:G
-I:4:13:900
-W:50:0:4:2
-A:50/1:70/1:90/1
-P:0:1d1:0:0:0
-
# Now, the rest of the runes...
N:697:Undeath
@@ -6047,54 +5942,12 @@ 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 unto snakes, able to wriggle out of tight corners, impervious to poisons and poisonous
D:yourself.
-# Here comes the new Essences
-
-N:780:Darkness
-G:*:G
-I:4:14:20
-W:0:0:4:1
-A:0/1:20/1:40/1
-P:0:1d1:0:0:0
-D:It's a gem that eats all light that reaches it. It's perfectly black.
-
-N:781:Knowledge
-G:*:G
-I:4:15:100
-W:0:0:4:1
-A:20/1:30/1:70/1
-P:0:1d1:0:0:0
-D:It's a blue gem with countless formulae scribbled on it.
-
-N:782:Force
-G:*:G
-I:4:16:180
-W:0:0:4:1
-A:10/1:40/1
-P:0:1d1:0:0:0
-D:It's a green gem that can barely contain the forces in it.
-
-N:783:Lightning
-G:*:G
-I:4:17:200
-W:0:0:4:1
-A:28/1
-P:0:1d1:0:0:0
-D:It's a white gem. Inside you see lightning rage.
-
-N:784:Mana
-G:*:G
-I:4:18:400
-W:0:0:4:1
-A:45/2
-P:0:1d1:0:0:0
-D:It's an everchanging gem. You feel the magic throbbing through it.
-
# The Nine Rings for mortal men doomed to die! When a Nazgul is
# destroyed, it drops a Ring of Power with random powers.
diff --git a/lib/edit/misc.txt b/lib/edit/misc.txt
index 08e35c1f..b2471a06 100644
--- a/lib/edit/misc.txt
+++ b/lib/edit/misc.txt
@@ -33,9 +33,6 @@ M:V:108
# Maximum number of terrain features in f_info.txt
M:F:256
-# Maximum number of alchemist recipes
-M:a:1000
-
# Maximum number of artifacts in a_info.txt
M:A:219
diff --git a/lib/edit/ow_info.txt b/lib/edit/ow_info.txt
index a1e3d0a3..d71dfa26 100644
--- a/lib/edit/ow_info.txt
+++ b/lib/edit/ow_info.txt
@@ -13,435 +13,429 @@
# L:liked races
# H:hated races
-# Version stamp (required)
-
-V:2.0.0
-
N:0:Bilbo the Friendly(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:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold
N:1:Uldrik(Human)
-I:20000:170:108:1:1
+I:20000:120
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:2:Otick(Human)
-I:100:170:108:4:10
+I:100:120
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:3:Merana(Human)
-I:0:170:108:1:1
+I:0:120
C:200:100:95
L:Human
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:4:Mirimbar(High-Elf)
-I:0:170:108:1:1
+I:0:120
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:5:Raistlin the Chicken(Human)
-I:20000:175:108:4:12
+I:20000:130
C:120:100:80
L:Human
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:6:Sultan the Midget(Gnome)
-I:30000:170:107:5:15
+I:30000:120
C:120:100:80
L:Gnome | Dwarf | Petty-Dwarf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:7:Lyar-el the Comely(Elf)
-I:30000:165:107:6:18
+I:30000:120
C:120:100:80
L:Elf | Half-Elf | Dark-Elf | High-Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:8:Kon-Dar the Ugly(Half-Orc)
-I:5000:210:115:5:7
+I:5000:140
C:120:100:80
L:Orc | Troll | Half-Ogre | Beorning | Kobold
H:Gnome | Dwarf | Human | RohanKnight | Elf | Half-Elf | High-Elf
N:9:Darg-Low the Grim(Human)
-I:10000:190:111:4:9
+I:10000:130
C:120:100:80
L:Human
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:10:Decado the Handsome(Dunadan)
-I:25000:200:112:4:10
+I:25000:140
C:120:100:80
L:Human | Dunadan | RohanKnight
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:11:Wieland the Smith(Dwarf)
-I:30000:200:112:4:5
+I:30000:140
C:120:100:80
L:Gnome | Dwarf | Petty-Dwarf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:12:Arnold the Beastly(Barbarian)
-I:5000:210:115:6:6
+I:5000:140
C:120:100:80
N:13:Arndal Beast-Slayer(Half-Elf)
-I:10000:185:110:5:9
+I:10000:130
C:120:100:80
L:Elf | Half-Elf | Dark-Elf | High-Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:14:Eddie Beast-Master(Half-Orc)
-I:25000:190:115:5:7
+I:25000:140
C:120:100:80
L:Orc | Troll | Half-Ogre | Beorning | Kobold
H:Gnome | Dwarf | Human | RohanKnight | Elf | Half-Elf | High-Elf
N:15:Oglign Dragon-Slayer(Dwarf)
-I:30000:195:112:4:8
+I:30000:130
C:120:100:80
L:Gnome | Dwarf | Petty-Dwarf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:16:Aragorn(Dunadan)
-I:20000:200:112:4:10
+I:20000:140
C:120:100:80
L:Human | Dunadan | RohanKnight
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:17:Sondar(Human)
-I:0:200:112:4:10
+I:0:140
C:120:100:80
N:18:Celebor(Half-Elf)
-I:100:170:108:4:10
+I:100:120
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:19:Sharra(Human)
-I:25000:200:112:4:10
+I:25000:140
C:120:100:80
L:Human | Dunadan | RohanKnight
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:20:Hjolgar(Barbarian)
-I:5000:210:115:6:6
+I:5000:140
C:120:100:80
#L:Warrior |
N:21:Tanistil(Elf)
-I:5000:210:115:6:6
+I:5000:140
C:120:100:80
#L:Mage | Sorceror | Thaumaturgist
#H:Warrior |
N:22:Eldore(Human)
-I:5000:210:115:6:6
+I:5000:140
C:120:100:80
#L:Priest
#H:Necromancer
N:23:Vilios(Human)
-I:5000:210:115:6:6
+I:5000:140
C:120:100:80
#L:Paladin
#H:Necromancer
N:24:Angros(Elf)
-I:5000:210:115:6:6
+I:5000:140
C:120:100:80
#L:Ranger
N:25:Palano(Thunderlord)
-I:0:210:115:6:6
+I:0:140
C:120:100:80
L:Thunderlord
N:26:Ludwig the Humble(Dwarf)
-I:5000:175:109:6:15
+I:5000:130
C:120:100:80
L:Gnome | Dwarf | Petty-Dwarf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:27:Gunnar the Paladin(Half-Troll)
-I:10000:185:110:5:23
+I:10000:130
C:120:100:80
L:Orc | Troll | Half-Ogre | Beorning | Kobold
H:Gnome | Dwarf | Human | RohanKnight | Elf | Half-Elf | High-Elf
N:28:Torin the Chosen(High-Elf)
-I:25000:180:107:6:20
+I:25000:130
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:29:Sarastro the Wise(Human)
-I:30000:185:109:5:15
+I:30000:130
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:30:Mauser the Chemist(Half-Elf)
-I:10000:190:111:5:8
+I:10000:130
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:31:Wizzle the Chaotic(Hobbit)
-I:10000:190:110:6:8
+I:10000:130
C:120:100:80
L:Elf | Half-Elf | High-Elf | Dunadan | Hobbit | Dwarf | RohanKnight
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:32:Midas the Greedy(Gnome)
-I:15000:200:116:6:9
+I:15000:140
C:120:100:80
L:Gnome | Dwarf | Petty-Dwarf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:33:Ja-Far the Alchemist(Elf)
-I:15000:220:111:4:9
+I:15000:140
C:120:100:80
L:Elf | Half-Elf | Dark-Elf | High-Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:34:Ariel the Sorceress(Half-Elf)
-I:20000:200:110:7:8
+I:20000:140
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:35:Buggerby the Great(Gnome)
-I:20000:215:113:6:10
+I:20000:140
C:120:100:80
L:Gnome | Dwarf | Petty-Dwarf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:36:Inglorian the Mage(Human)
-I:30000:200:110:7:10
+I:30000:140
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:37:Luthien Starshine(High-Elf)
-I:30000:175:110:5:11
+I:30000:130
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:38:Gary Gygaz(Half-Troll)
-I:20000:250:150:10:5
+I:20000:180
C:120:100:80
#L:Rogue
H:Gnome | Dwarf | Human | RohanKnight | Elf | Half-Elf | High-Elf
N:39:Histor the Goblin(Half-Orc)
-I:20000:250:150:10:5
+I:20000:180
C:120:100:80
#L:Rogue
H:Gnome | Dwarf | Human | RohanKnight | Elf | Half-Elf | High-Elf
N:40:Zorak the Smart(Dwarf)
-I:30000:250:150:10:5
+I:30000:180
C:120:100:80
#L:Rogue
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:41:Tipo the Fair(Human)
-I:30000:250:150:10:5
+I:30000:180
C:120:100:80
#L:Rogue
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:42:Dolaf the Greedy(Human)
-I:10000:175:108:4:12
+I:10000:130
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
N:43:Odnar the Sage(High-Elf)
-I:15000:120:105:6:16
+I:15000:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:44:Gandar the Neutral(Dark-Elf)
-I:25000:120:110:7:19
+I:25000:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold
N:45:Ro-sha the Patient(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
L:Elf | Half-Elf | Dark-Elf | High-Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:46:N'rak the Summoner(Human)
-I:10000:175:108:4:12
+I:10000:130
C:120:100:80
L:Human | Dunadan | RohanKnight
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:47:Esperion the Beastlover(High-Elf)
-I:15000:120:105:6:16
+I:15000:110
C:120:100:80
L:High-Elf | Half-Elf | Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:48:Flarim the Shopkeeper(Dunadan)
-I:25000:120:110:7:19
+I:25000:110
C:120:100:80
L:Human | Dunadan | RohanKnight
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:49:Tril-akheb the Supreme(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
L:Elf | Half-Elf | Dark-Elf | High-Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:50:Dorchel(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
L:Elf | Half-Elf | Dark-Elf | High-Elf
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:53:Aulendil(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Warrior |
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:54:Valceronwe(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Mage | Thaumaturgist | Sorceror
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:55:Voronwe(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Priest | Paladin
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:56:Celegail(Elf)
-I:30000:140:105:6:12
+I:30000:110
C:120:100:80
#L:Ranger
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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:Orc | Troll | Half-Ogre | Beorning | Kobold |
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
H:Orc | Troll | Half-Ogre | Beorning | Kobold |
N:68:Kanris(Human)
-I:5000:210:115:6:6
+I:5000:140
C:120:100:80
-#L:Merchant
-#H:Rogue
N:69:Barliman Butterbur(Human)
-I:100:170:108:4:10
+I:100:120
C:120:100:80
L:Dunadan | Hobbit | Human |
H:Orc | Troll | DeathMold | Half-Ogre | Beorning | Kobold |
diff --git a/lib/edit/p_info.txt b/lib/edit/p_info.txt
index 1531f4fd..c02e765a 100644
--- a/lib/edit/p_info.txt
+++ b/lib/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
-
##############################################################################
##############################################################################
##############################################################################
@@ -342,35 +340,6 @@ C:a:k:+0:-150:Magic-Device
C:a:O:23:4:1d1
C:a:O:111:50:1d1
-C:a:N:Alchemist
-C:a:D:Alchemists can quickly create powerful magic items through the correct use
-C:a:D:of the essences of magic they can extract from magical objects.
-C:a:k:+2000:+0:Magic
-C:a:k:+0:-600:Spell-power
-C:a:k:+0:-600:Necromancy
-C:a:k:+0:-600:Thaumaturgy
-C:a:k:+0:+250:Spirituality
-C:a:k:+0:+500:Combat
-C:a:k:+0:+200:Weaponmastery
-C:a:k:-1000:-600:Mana
-C:a:k:+0:-600:Fire
-C:a:k:+0:-600:Water
-C:a:k:+0:-600:Air
-C:a:k:+0:-600:Earth
-C:a:k:+0:-600:Conveyance
-C:a:k:+0:-600:Nature
-C:a:k:+0:-600:Temporal
-C:a:k:+0:-200:Divination
-C:a:k:+0:-200:Meta
-C:a:k:+0:-600:Mind
-C:a:k:+1000:+800:Alchemy
-C:a:k:+0:+50:Magic-Device
-C:a:O:31:1:1d1
-C:a:O:4:2:6d1
-C:a:O:2:1:1d1
-C:a:O:23:4:1d1
-C:a:G:EXPERIMENTAL
-
C:N:2:Archer
C:D:0:'Kill them before they see you' could be the motto of the archer class.
C:D:0:As deadly with a bow as a warrior is with a sword.
@@ -1953,22 +1922,3 @@ M:C:Rogue
M:C:Mage
M:C:Priest
M:C:Loremaster
-#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/edit/r_info.txt b/lib/edit/r_info.txt
index e7801d09..5c93f1f6 100644
--- a/lib/edit/r_info.txt
+++ b/lib/edit/r_info.txt
@@ -182,10 +182,6 @@
# Note that monster zero is used for the "player" picture.
-# Version stamp (required)
-
-V:2.2.0
-
##### The Player #####
N:0:Player
diff --git a/lib/edit/ra_info.txt b/lib/edit/ra_info.txt
index 57dcee95..30ff3f38 100644
--- a/lib/edit/ra_info.txt
+++ b/lib/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/edit/re_info.txt b/lib/edit/re_info.txt
index c0e36a92..c1fb01c8 100644
--- a/lib/edit/re_info.txt
+++ b/lib/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/edit/s_info.txt b/lib/edit/s_info.txt
index 5e41fe97..d53fb7e0 100644
--- a/lib/edit/s_info.txt
+++ b/lib/edit/s_info.txt
@@ -22,10 +22,6 @@
# T:father:child
-# Version stamp (required)
-
-V:2.0.0
-
################################## MAGIC ##################################
N:56:Magic-Device
@@ -371,11 +367,6 @@ I:1000
F:RANDOM_GAIN
G:80
-N:39:Alchemy
-D:Ability to use essences to modify/create magic items
-A:5:Use Alchemy
-I:1000
-
# Antimagic exclude all magic
E:Magic-Device:Antimagic
E:Mana:Antimagic
@@ -526,7 +517,6 @@ T:Magic:Demonology
T:Magic:Necromancy
T:Magic:Runecraft
T:Magic:Thaumaturgy
-T:Magic:Alchemy
T:Geomancy:Fire
T:Geomancy:Water
diff --git a/lib/edit/set_info.txt b/lib/edit/set_info.txt
index b6141e01..f114b7ef 100644
--- a/lib/edit/set_info.txt
+++ b/lib/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/edit/st_info.txt b/lib/edit/st_info.txt
index 3762d0c5..d0defd31 100644
--- a/lib/edit/st_info.txt
+++ b/lib/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~
@@ -271,7 +259,7 @@ N:7:Home
A:0:0:54:55:3:0
O:0:0:0:0
G:8:y
-W:24
+W:240
N:8:Book Store
# & Book~ of Beginner Cantrips
@@ -348,9 +336,6 @@ G:+:s
W:0
N:16:Beastmaster Shanty
-# Disabled the bounty list for the time being to not confuse people
-# with the bounty quest
-# A:18:0:19:20:21:22
A:18:0:21:22:0:0
O:19:19:19:19
G:+:g
@@ -692,12 +677,6 @@ F:RANDOM | MEDIUM_LEVEL | DEPEND_LEVEL
F:RARE
W:24
-N:56:Merchants Guild
-A:0:0:56:57:58:0
-O:68:68:68:68
-G:+:g
-W:0
-
N:57:The Mathom-house
A:0:0:59:0:3:0
O:0:0:0:0
diff --git a/lib/edit/t_basic.txt b/lib/edit/t_basic.txt
deleted file mode 100644
index 78103425..00000000
--- a/lib/edit/t_basic.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-# File: t_lite.txt
-
-# *Basic* town (vanilla style)
-
-
-############### Town Layout ###############
-
-F:*:7:3:0:0:0:0:0:8
-
-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:###################################################################.......#########.....####3####......#######......####1####......###################################################################
-D:###################################################################.......####4####....................#######.....................###################################################################
-D:###################################################################....................................###2###.....................###################################################################
-D:###################################################################................................................................###################################################################
-D:###################################################################.................................*..............................###################################################################
-D:###################################################################...##8##........................................................###################################################################
-D:###################################################################...#####..............####5####...................###7###.......###################################################################
-D:###################################################################...#####..............#########.....####6####.....#######.......###################################################################
-D:###################################################################...#####..............#########.....#########.....#######.......###################################################################
-D:###################################################################...........###9###....#########.....#########.....#######.......###################################################################
-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:######################################################################################################################################################################################################
-
-############### Starting positions ###############
-
-# Standard starting position for normal races
-P:32:100
diff --git a/lib/edit/t_bree.txt b/lib/edit/t_bree.txt
index c74fd58a..3ea29922 100644
--- a/lib/edit/t_bree.txt
+++ b/lib/edit/t_bree.txt
@@ -44,9 +44,6 @@ F:a:74:3:0:0:0:0:0:58
# Soothsayer
F:c:74:3:0:0:0:0:0:12
-# Merchant Guild
-F:d:74:3:0:0:0:0:0:56
-
# The Mathom-house
F:e:74:3:0:0:0:0:0:57
@@ -93,7 +90,7 @@ D:# ---- ---- ,,CT--.B#.-SStSS-
D:# ------- ---- ,,CTT-....-sssss--,,,,,,-------------OO-,--SSSSSt-ss-,-,---...-T^^ ^ ^ -, OOOO #
D:# ------- ------ ,,CCTT---..#2###-,sssss,-SSSSSSSS-----OO,--ssssss-tS--,.....---^^ ^^ ^^^ -, OOOOOOOO #
D:# ----- ----- ,,CCT----..,,,,,-StSSS,-ssssssss------OOO-#1##a#-ss....-----T^^ ^^ -,- OOOOO #
-D:# ---- -------- ,,CCTT----..----,sssss,-##7###d#--------OO,.,,.,-##.----TTTT^^ ^ ^^ -, OOOOO #
+D:# ---- -------- ,,CCTT----..----,sssss,-##7#####--------OO,.,,.,-##.----TTTT^^ ^ ^^ -, OOOOO #
D:# --------------- ,,,CCTTTT--..---,##3##-,--,,,---------...OOOOOOOOOOOTTTTTCC^^^ ^^ ^^ ,- OOO #
D:# -------- ,,,CCCC --..........,-,,---,--.......-------TTTTTOCCCCC,,^^^^^^^^^^^ -.- OOOOO #
D:# ---------- ,, ,,CCCTT----------.....-......-------TTTTTTTCCCCO,,,,, ^^^^^^^ -.- O #
diff --git a/lib/edit/t_gondol.txt b/lib/edit/t_gondol.txt
index 779c4fbb..51cf4b39 100644
--- a/lib/edit/t_gondol.txt
+++ b/lib/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:######$$$$$$$$$$$$$$$$$$## ... C##T.V#######V...........TTTT#######TTTT..................TT####C----,--TTT##TTT----TTT##TTTTTT------,,,,,^^^^###
D:#####$$$$$$$$$$$$$$$$$$$## ######### ... ############# CC#T.VV#####VV.............................................TTT#CC----,---TT#TT--------TT##T-T-TT------,,,,^^^^###
D:#####$$$$$$$#####$$$$$$$## ######### ... ############# C#T..VV###VV.....TTTTTTTTTTT.......TTTTTTTTTTT..............T#C-----,,,,,,,,,,,,,,,,,,,e#TT-TTT------,,,,^^^^###
-D:####$$$$#############$$$$# ########o.........7############ C#T...VVVVV....TTT#########TTT...TTT#########TTT............T#C----------T#TT--------TT##TTT-------,,,,^^^^^^###
+D:####$$$$#############$$$$# #########.........7############ C#T...VVVVV....TTT#########TTT...TTT#########TTT............T#C----------T#TT--------TT##TTT-------,,,,^^^^^^###
D:####$###################$# ######### ... ############# C#TT..........TT###VVVVVV####TT.TT####WWWWWW###TT..........TT#C--------TTT##TTT----TTT##TTTTT-----,,,,^^^^^^^###
D:########################## ######### ... ############# C##T..........T##VVV....VVV###TTT###WWW....WWW##T..........T##C-------TTTTT###TTTTTT###TTTTT-----,,,,,^^^^^^^###
D:########################### ... CC#T..........T#VV........VV#######WW........WW#T..........T#CC -----TTTT-TTT########TTTTTT------,,,,,,,^^^^^###
diff --git a/lib/edit/t_minas.txt b/lib/edit/t_minas.txt
index 51c74da3..9f6ae669 100644
--- a/lib/edit/t_minas.txt
+++ b/lib/edit/t_minas.txt
@@ -64,9 +64,6 @@ F:l:74:3:0:0:0:0:0:22
# Castle: Plot Minas Anor
F:B:75:3:0:0:0:0:0:5
-# Merchant guild
-F:m:74:3:0:0:0:0:0:56
-
# Library Quest
F:x:63:3
@@ -84,7 +81,7 @@ D:#^^----ssss-----###--------####------ ^^^^^^
D:#^^^---StSS-------###--#ssss--###------- ^^^^^^^^ @@VVVVVVVV@VVV@@@@@@@@ @@@V@@ @@@@VV@@@@ , #
D:#^^----ssss----OO---##--#StSS---####------ ^^^^^^^^ @@V@V,@@@@@@VVVVVVVV@@@VVV@ @@VVVV@@ ,, #
D:#^^----x#a#-----OOO--##--#sssss----###------ ^^^^^^^^ @@@@@ @@@@@@@@VVVVV@@@ @@@@VV@@@ ,,, #
-D:#^ ---------------OO--###-#m#7#------###----- ^^^^^^^^^^ @VVV@@ @@VVV@@ ,O, #
+D:#^ ---------------OO--###-###7#------###----- ^^^^^^^^^^ @VVV@@ @@VVV@@ ,O, #
D:#^ StSSSS-----ss---OO---##-----OOOOO---###---- ^^^^^^^^^^^ @@@ @@VVV@@ OO #
D:#^^ssssss----Ssss---OOO--##---OOOOOOOO---##---- ^l^^^^^^^ @@VVV@ OO #
D:#^ ####9#---sstSss---OOO--##-OOOOOOOOOOO--##---- ^^^^^ @@VVV@@ OO #
diff --git a/lib/edit/tr_info.txt b/lib/edit/tr_info.txt
index e86d9617..0643f1ab 100644
--- a/lib/edit/tr_info.txt
+++ b/lib/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/edit/v_info.txt b/lib/edit/v_info.txt
index fb4a4d20..964f2b54 100644
--- a/lib/edit/v_info.txt
+++ b/lib/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/edit/wf_info.txt b/lib/edit/wf_info.txt
index 80ab14a6..1d4b25f9 100644
--- a/lib/edit/wf_info.txt
+++ b/lib/edit/wf_info.txt
@@ -28,10 +28,6 @@
# if < 1000 then it points to a town
# if >= 1000 then it points to the x - 1000 dungeon type
-# Version stamp (required)
-
-V:2.0.0
-
N:0:Ekkaia
D:the Encircling Sea
W:1:0:0:182:0:X
diff --git a/lib/file/elvish.txt b/lib/file/elvish.txt
deleted file mode 100644
index a00b5a22..00000000
--- a/lib/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/help/ability.txt b/lib/help/ability.txt
index 175d6745..17d89dbc 100644
--- a/lib/help/ability.txt
+++ b/lib/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/help/advanced.hlp b/lib/help/advanced.hlp
index 3f6fe4bd..8595712b 100644
--- a/lib/help/advanced.hlp
+++ b/lib/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/help/automat.txt b/lib/help/automat.txt
index bf6478f8..0ba56d19 100644
--- a/lib/help/automat.txt
+++ b/lib/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/help/birth.txt b/lib/help/birth.txt
index 00b1a921..990b5eba 100644
--- a/lib/help/birth.txt
+++ b/lib/help/birth.txt
@@ -240,7 +240,7 @@ Paladin. For the first few adventures it is suggested that you run a warrior
or rogue. Spell casting generally requires a more experienced player that is
familiar with survival techniques.
- *****c_alchem.txt*0[Alchemist] *****c_mage.txt*0[Mage] *****c_rogue.txt*0[Rogue]
+ *****c_mage.txt*0[Mage] *****c_rogue.txt*0[Rogue]
*****c_archer.txt*0[Archer] *****c_mimic.txt*0[Mimic] *****c_runecr.txt*0[Runecrafter]
*****c_assass.txt*0[Assassin] *****c_mindcr.txt*0[Mindcrafter] *****c_sorcer.txt*0[Sorceror]
*****c_axemas.txt*0[Axemaster] *****c_monk.txt*0[Monk] *****c_summon.txt*0[Summoner]
@@ -504,7 +504,6 @@ are listed in the following table.
Unbeliever +5 -2 -2 +2 +2 -1
Warrior +5 -2 -2 +2 +2 -1
- Alchemist -5 +3 0 +1 -2 +1
Geomancer -5 +3 0 +1 -2 +1
Mage -5 +3 0 +1 -2 +1
Necromancer -5 +3 0 +1 -2 +1
diff --git a/lib/help/c_alchem.txt b/lib/help/c_alchem.txt
deleted file mode 100644
index 2f7cd58c..00000000
--- a/lib/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/help/c_merch.txt b/lib/help/c_merch.txt
deleted file mode 100644
index 31fb60dd..00000000
--- a/lib/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/help/command.txt b/lib/help/command.txt
index 6616c252..04a63fd8 100644
--- a/lib/help/command.txt
+++ b/lib/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/help/debug.txt b/lib/help/debug.txt
index 4d5e75da..65e7ff91 100644
--- a/lib/help/debug.txt
+++ b/lib/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] P (unused)
*****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/help/def.aux b/lib/help/def.aux
deleted file mode 100644
index 983e9683..00000000
--- a/lib/help/def.aux
+++ /dev/null
@@ -1,3 +0,0 @@
-file_ext="html"
-link_prefix=""
-link_suffix=""
diff --git a/lib/help/defines.txt b/lib/help/defines.txt
index ac997501..147e61a1 100644
--- a/lib/help/defines.txt
+++ b/lib/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/help/dungeon.txt b/lib/help/dungeon.txt
index eca8046d..f719fabc 100644
--- a/lib/help/dungeon.txt
+++ b/lib/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/help/essences.txt b/lib/help/essences.txt
deleted file mode 100644
index f329fa80..00000000
--- a/lib/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/help/index.txt b/lib/help/index.txt
index d306b688..87293d27 100644
--- a/lib/help/index.txt
+++ b/lib/help/index.txt
@@ -27,7 +27,6 @@ Don't forget you can browse the help from the *****help.hlp*02[Main menu].
*****birth.txt*26[SP]
*****ability.txt*01[Abilities]
*****ability.txt*07[Ammo creation]
- *****ability.txt*09[Artifact Creation]
*****ability.txt*05[Extra Max Blow 1]
*****ability.txt*06[Extra Max Blow 2]
*****ability.txt*10[Far reaching attack]
@@ -38,9 +37,6 @@ Don't forget you can browse the help from the *****help.hlp*02[Main menu].
*****ability.txt*03[Tree walking]
*****ability.txt*12[Undead Form]
*****m_air.txt*02[Air Magic]
- *****c_alchem.txt*01[Alchemist]
- *****c_alchem.txt*03[Alchemy powers explained]
- *****essences.txt*02[Essence Spoiler]
*****tome_faq.txt*03[Altars]
*****tome_faq.txt*37[Anti-magic Amulets and the Anti-magic shell]
*****c_unbel.txt*04[Antimagic]
@@ -88,7 +84,6 @@ Don't forget you can browse the help from the *****help.hlp*02[Main menu].
*****tome_faq.txt*34[Character choice is too confusing]
*****birth.txt*45[Charisma]
*****birth.txt*05[Classes]
- *****c_alchem.txt*02[Alchemist]
*****c_archer.txt*02[Archer]
*****c_assass.txt*02[Assassin]
*****c_axemas.txt*02[Axemaster]
@@ -192,7 +187,6 @@ Don't forget you can browse the help from the *****help.hlp*02[Main menu].
*****g_eru.txt*02[Eru]
*****g_eru.txt*03[Prayers]
*****c_pr_eru.txt*03[Priest - Eru]
- *****tome_faq.txt*10[Essences]
*****experien.hlp*01[Experience]
*****explore.hlp*02[Exploring menu]
~~~~~70
@@ -424,8 +418,6 @@ Don't forget you can browse the help from the *****help.hlp*02[Main menu].
*****skills.txt*55[Skills]
*****skills.txt*27[Air]
*****m_air.txt*03[Air - Spell Info]
- *****skills.txt*49[Alchemy]
- *****c_alchem.txt*05[Alchemy - Alchemy powers]
*****skills.txt*50[Antimagic]
*****c_unbel.txt*05[Antimagic powers]
*****skills.txt*08[Archery]
@@ -509,7 +501,6 @@ Don't forget you can browse the help from the *****help.hlp*02[Main menu].
*****spoiler.hlp*01[Spoilers]
*****corspoil.txt*02[Corruptions]
*****dunspoil.txt*02[Dungeons]
- *****essences.txt*01[Essences]
*****fatespoi.txt*01[Fates]
*****inscrip.txt*02[Floor Inscriptions]
*****spoil_faq.txt*20[God Quest - directions]
diff --git a/lib/help/lua.hlp b/lib/help/lua.hlp
deleted file mode 100644
index ba61676a..00000000
--- a/lib/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/help/lua_gf.txt b/lib/help/lua_gf.txt
deleted file mode 100644
index 000f4af5..00000000
--- a/lib/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/help/lua_intr.txt b/lib/help/lua_intr.txt
deleted file mode 100644
index ccb87067..00000000
--- a/lib/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/help/lua_mon.txt b/lib/help/lua_mon.txt
deleted file mode 100644
index 9bb363c0..00000000
--- a/lib/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/help/lua_play.txt b/lib/help/lua_play.txt
deleted file mode 100644
index 6ab64ddb..00000000
--- a/lib/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/help/lua_pow.txt b/lib/help/lua_pow.txt
deleted file mode 100644
index c221a664..00000000
--- a/lib/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/help/lua_ques.txt b/lib/help/lua_ques.txt
deleted file mode 100644
index 1d4b9c65..00000000
--- a/lib/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/help/lua_skil.txt b/lib/help/lua_skil.txt
deleted file mode 100644
index 87385e5d..00000000
--- a/lib/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/help/lua_spel.txt b/lib/help/lua_spel.txt
deleted file mode 100644
index aa4a532b..00000000
--- a/lib/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/help/lua_util.txt b/lib/help/lua_util.txt
deleted file mode 100644
index 8886a2b4..00000000
--- a/lib/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/help/macrofaq.txt b/lib/help/macrofaq.txt
index 03a00eaa..8194d7fe 100644
--- a/lib/help/macrofaq.txt
+++ b/lib/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?
@@ -1784,9 +1772,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/help/magic.txt b/lib/help/magic.txt
index 93486f0b..14fa6570 100644
--- a/lib/help/magic.txt
+++ b/lib/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/help/option.txt b/lib/help/option.txt
index 6fd3b413..7563f83b 100644
--- a/lib/help/option.txt
+++ b/lib/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
@@ -552,11 +436,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/help/skills.txt b/lib/help/skills.txt
index c4a02c06..fe68da6e 100644
--- a/lib/help/skills.txt
+++ b/lib/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/help/spoiler.hlp b/lib/help/spoiler.hlp
index bc229852..996c0d32 100644
--- a/lib/help/spoiler.hlp
+++ b/lib/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/help/tome_faq.txt b/lib/help/tome_faq.txt
index 7ad7a421..171b74d4 100644
--- a/lib/help/tome_faq.txt
+++ b/lib/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/.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