class String OBJ_SYMBOL = '!' OBJ_NAME = /!\$*[0-9A-Za-z_-]+\Z/ STRING_CACHE = Hash.new{|has, str| has[str] = self.create_character_name_cache(str) } def object_name? STRING_CACHE[self][:object_name] end def single_name? STRING_CACHE[self][:single_name] end def adjust_x STRING_CACHE[self][:adjust_x] end def adjust_y STRING_CACHE[self][:adjust_y] end class << self def create_character_name_cache(string) result = {} result[:object_name] = string.include?(OBJ_SYMBOL) && OBJ_NAME =~ string result[:single_name] = string.include?('$') result[:adjust_x] = {} result[:adjust_y] = {} ADJUST_FILES.each {|str, set| if string =~ str 4.times{|j| i = j * 2 + 2 vv = set[0][i] result[:adjust_x][i] = vv if vv vv = set[1][i] result[:adjust_y][i] = vv if vv } break end } result[:adjust_x] = Vocab::EmpHas if result[:adjust_x].empty? result[:adjust_y] = Vocab::EmpHas if result[:adjust_y].empty? result end end ADJUST_FILES = Hash.new ADJUST_FILES[/077-Devil03/i] = [{4=>40, 6=>-40},Vocab::EmpHas] ADJUST_FILES[/078-Devil04/i] = [{4=>48, 6=>-48},Vocab::EmpHas] ADJUST_FILES[/055-Snake01/i] = [Vocab::EmpHas,{8=>-16}] ADJUST_FILES[/099-Monster13/i] = [Vocab::EmpHas,{8=>-24}] ADJUST_FILES[/chara08_a_6/i] = ADJUST_FILES[/055-Snake01/i] ADJUST_FILES[/091-Monster05/i] = ADJUST_FILES[/055-Snake01/i] ADJUST_FILES[/057-Snake03/i] = [{4=>-16, 6=>16},{8=>-20}] ADJUST_FILES[/169-Small11/i] = [Vocab::EmpHas,{4=>5, 6=>5, 2=>6, 8=>6}] ADJUST_FILES[/058-Snake04/i] = [{4=>-24, 6=>24},{4=>-36, 6=>-36, 8=>-9}] ADJUST_FILES[/062-Aquatic04/i] = ADJUST_FILES[/058-Snake04/i] end