##### Crawl Init file ###############################################
# For descriptions of all options, as well as some more in-depth information
# on setting them, consult the file
# options_guide.txt
# in your /docs directory. If you can't find it, the file is also available
# online at:
# https://github.com/crawl/crawl/blob/master/crawl-ref/docs/options_guide.txt
#
# Crawl uses the first file of the following list as its option file:
# * init.txt in the -rcdir directory (if specified)
# * .crawlrc in the -rcdir directory (if specified)
# * init.txt (in the Crawl directory)
# * ~/.crawl/init.txt (Unix only)
# * ~/.crawlrc (Unix only)
# * ~/init.txt (Unix only)
# * settings/init.txt (in the Crawl directory)
##### Some basic explanation of option syntax #######################
# Lines beginning with '#' are comments. The basic syntax is:
#
# field = value or field.subfield = value
#
# Only one specification is allowed per line.
#
# The terms are typically case-insensitive except in the fairly obvious
# cases (the character's name and specifying files or directories when
# on a system that has case-sensitive filenames).
#
# White space is stripped from the beginning and end of the line, as
# well as immediately before and after the '='. If the option allows
# multiple comma/semicolon-separated terms (such as
# autopickup_exceptions), all whitespace around the separator is also
# trimmed. All other whitespace is left intact.
#
# There are three broad types of Crawl options: true/false values (booleans),
# arbitrary values, and lists of values. The first two types use only the
# simple =, with later options - which includes your options that are different
# from the defaults - overriding earlier ones. List options allow using +=, ^=,
# -=, and = to append, prepend, remove, and reset, respectively. Usually you will
# want to use += to add to a list option. Lastly, there is := which you can use
# to create an alias, like so:
# ae := autopickup_exceptions
# From there on, 'ae' will be treated as if it you typed autopickup_exceptions,
# so you can save time typing it.
#
##### Other files ###################################################
# You can include other files from your options file using the 'include'
# option. Crawl will treat it as if you copied the whole text of that file
# into your options file in that spot. You can uncomment some of the following
# lines by removing the beginning '#' to include some of the other files in
# this folder.
# Some useful, more advanced options, implemented in LUA.
# include = advanced_optioneering.txt
# Alternative vi bindings for Dvorak users.
# include = dvorak_command_keys.txt
# Alternative vi bindings for Colemak users.
# include = colemak_command_keys.txt
# Alternative vi bindings for Neo users.
# include = neo_command_keys.txt
# Override the vi movement keys with a non-command.
# include = no_vi_command_keys.txt
# Turn the shift-vi keys into safe move, instead of run.
# include = safe_move_shift.txt
#################################
# macros
macros += M 1 za
macros += M 2 zb
macros += M 3 zc
macros += M 4 zd
# autofight hp
autofight_stop = 80
# zot, gem timer
always_show_zot = true
always_show_gems = true
more_gem_info = true
# show more
show_more = false
# death's door almost end force more
force_more_message += Your time is quickly running out!
# death channel expiring force more
force_more_message += Your unholy channel is weakening.
# Rebind move to safe moving. and shift-move to original move
bindkey = [h] CMD_SAFE_MOVE_LEFT
bindkey = [j] CMD_SAFE_MOVE_DOWN
bindkey = [k] CMD_SAFE_MOVE_UP
bindkey = [l] CMD_SAFE_MOVE_RIGHT
bindkey = [y] CMD_SAFE_MOVE_UP_LEFT
bindkey = [u] CMD_SAFE_MOVE_UP_RIGHT
bindkey = [b] CMD_SAFE_MOVE_DOWN_LEFT
bindkey = [n] CMD_SAFE_MOVE_DOWN_RIGHT
bindkey = [H] CMD_MOVE_LEFT
bindkey = [J] CMD_MOVE_DOWN
bindkey = [K] CMD_MOVE_UP
bindkey = [L] CMD_MOVE_RIGHT
bindkey = [Y] CMD_MOVE_UP_LEFT
bindkey = [U] CMD_MOVE_UP_RIGHT
bindkey = [B] CMD_MOVE_DOWN_LEFT
bindkey = [N] CMD_MOVE_DOWN_RIGHT
# display stats with gdr
{
function with_gdr()
local armour_class = you.ac()
local gdr = math.floor(16 * math.sqrt(math.sqrt(math.max(0, armour_class))))
crawl.formatted_mpr(string.format("GDR: %d%%", gdr))
crawl.sendkeys('@')
end
crawl.setopt("macros += M \@ ===with_gdr")
}
## display damage, healing, exhausted (sepcially serpent's lash)
{
local last_hp = you.hp()
local last_mp = you.mp()
local last_turn = you.turns()
local exhausted_start_turn = nil
local EXHAUSTED_BASE_DURATION = 14 -- serpent's lash의 기본 exhaust
function get_damage_color(damage, max_hp)
local damage_percent = (damage / max_hp) * 100
if damage_percent >= 25 then -- 1/4 이상 데미지
return "lightmagenta" -- 매우 심각
elseif damage_percent >= 15 then -- 1/6.67 데미지
return "lightred" -- 매우 위험
elseif damage_percent >= 10 then -- 1/10 데미지
return "red" -- 위험
elseif damage_percent >= 5 then -- 1/20 데미지
return "yellow" -- 주의
elseif damage > 1 or damage_percent > 2 then -- 2% 초과 또는 2 이상의 모든 데미지
return "white"
else
return "lightgray" -- 1 데미지나 2% 이하만 회색으로
end
end
function ready()
local current_hp, max_hp = you.hp()
local current_mp, max_mp = you.mp()
-- Exhausted 상태 체크
if you.exhausted() then
-- exhausted 시작 시점 기록
if not exhausted_start_turn then
exhausted_start_turn = you.turns()
end
else
-- exhausted가 끝나면 시작 시점 초기화
exhausted_start_turn = nil
end
-- 메시지 표시는 턴이 변경되었을 때만
if you.turns() ~= last_turn then
-- HP 변화 체크
local hp_change = current_hp - last_hp
if hp_change ~= 0 then
local msg
if hp_change < 0 then
local damage = -hp_change
local color = get_damage_color(damage, max_hp)
msg = string.format("You took <%s>%d%s> damage!",
color, damage, color)
else
msg = string.format("You recovered %d HP!",
hp_change)
end
crawl.formatted_mpr(msg)
end
-- MP 변화 체크
local mp_change = current_mp - last_mp
if mp_change > 0 then
local msg = string.format("You recovered %d MP!",
mp_change)
crawl.formatted_mpr(msg)
end
-- Exhausted 상태 메시지
if exhausted_start_turn then
local current_turn = you.turns()
local elapsed_turns = current_turn - exhausted_start_turn + 1 -- +1을 해서 1부터 시작하도록 수정
local max_duration = EXHAUSTED_BASE_DURATION + 4 -- 최대 지속시간 (14 + 0~4)
local remaining_turns = max_duration - elapsed_turns + 1 -- 남은 턴도 1부터 시작하도록 조정
-- 최소/최대 남은 시간 계산
local min_remaining = math.max(1, remaining_turns - 4)
local max_remaining = math.max(1, remaining_turns)
local remaining_str
if min_remaining == max_remaining then
remaining_str = string.format("%d remaining", min_remaining)
else
remaining_str = string.format("%d-%d remaining", min_remaining, max_remaining)
end
local msg = string.format("Exhausted: %d turns (%s)",
elapsed_turns,
remaining_str)
crawl.formatted_mpr(msg)
end
end
-- 현재 상태 저장
last_hp = current_hp
last_mp = current_mp
last_turn = you.turns()
end
}
# Magical Staff Percentage
{
function calc_staff_info(school_level, evo_level, multiplier)
-- multiplier 파라미터 추가, 기본값은 1.575
multiplier = multiplier or 1.575
local max_damage = multiplier * (school_level + evo_level/2)
local activation = (evo_level + school_level/2) * 6.66
if activation > 100 then activation = 100 end
return max_damage, activation
end
function staff_info_display()
local evo = you.skill("Evocations")
local output = ""
-- Fire staff
local fire = you.skill("Fire Magic")
local fire_dmg, fire_chance = calc_staff_info(fire, evo)
output = output .. string.format("[Fire] D: 0-%.1f, P: %.1f%% \n", fire_dmg, fire_chance)
-- Cold staff
local ice = you.skill("Ice Magic")
local cold_dmg, cold_chance = calc_staff_info(ice, evo)
output = output .. string.format("[Cold] D: 0-%.1f, P: %.1f%% \n", cold_dmg, cold_chance)
-- Earth staff (1.5x 공식)
local earth = you.skill("Earth Magic")
local earth_dmg, earth_chance = calc_staff_info(earth, evo, 1.5)
output = output .. string.format("[Earth] D: 0-%.1f, P: %.1f%% (33%% to flying)\n", earth_dmg, earth_chance)
-- Air staff (1.25x 공식)
local air = you.skill("Air Magic")
local air_dmg, air_chance = calc_staff_info(air, evo, 1.25)
output = output .. string.format("[Air] D: 0-%.1f, P: %.1f%% (Half AC)\n", air_dmg, air_chance)
-- Alchemy staff
local alchemy = you.skill("Alchemy")
local poison_dmg, poison_chance = calc_staff_info(alchemy, evo)
output = output .. string.format("[Alchemy] D: 0-%.1f, P: %.1f%% \n", poison_dmg, poison_chance)
-- Death staff
local necro = you.skill("Necromancy")
local death_dmg, death_chance = calc_staff_info(necro, evo)
output = output .. string.format("[Death] D: 0-%.1f, P: %.1f%% \n", death_dmg, death_chance)
-- Conjuration staff (1.25x 공식)
local conj = you.skill("Conjurations")
local conj_dmg, conj_chance = calc_staff_info(conj, evo, 1.25)
output = output .. string.format("[Conj] D: 0-%.1f, P: %.1f%% (Irresistible)", conj_dmg, conj_chance)
crawl.formatted_mpr(output)
end
crawl.setopt("macros += M \\{F2} ===staff_info_display")
}