##### 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 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") }