토탈워 로마2 - CUF(Font) 빌더 / Total War Rome II - CUF(Font) Builder

토탈워 로마2 CUF 빌더


동작 환경

 - Total War Rome II
 - Windows 10 x64
 - DirectX 12
 - Windows에서 완성형으로 출력되어 언어

"CUF mod tool by Tellos Athenaios - twcenter.net"의 문제점

 - 관련 라이브러리 설정 및 배치 스크립트 작성에 개발관련 기초 지식이 필요함
 - 게임에서 사용되는 1789문자를 13가지 폰트 크기로 일괄 빌드시 약 1시간 소요
 - 한글의 베이스 라인 정렬이 잘못되어 위 또는 아래로 치우치거나 잘리는 문제 발생

이 프로그램으로 개선된 사항

 - DirectX 12를 지원하는 그래픽 카드만 있으면 누구나 쉽게 작업 가능
 - 게임에서 사용되는 1789문자를 13가지 폰트 크기로 일괄 빌드시 약 15초 소요
 - DirectX에서 사용되는 RAW 데이터를 캡쳐하므로 CUF 이미지 품질이 좋음
 - CUF 이미지 편집 및 일괄 처리 기능 제공

토탈워 로마2 CUF 빌더

폰트를 열때 오류 팝업(0x887A0004)이 발생하는 경우

 - 0x887A0004 DXGI_ERROR_UNSUPPORTED
 - 메시지: 요청된 기능은 디바이스 또는 드라이버에서 지원되지 않습니다.
 - 이 프로그램은 DirectX 12 API를 사용하므로, 그래픽 카드에서 DirectX 12를 지원하지 않는 경우 사용할 수 없습니다.
토탈워 로마2 CUF 빌더

사용법

1. 폰트 불러오기

 - "Font" 입력창 오른쪽 폴더 아이콘을 클릭하여 폰트 선택 후 "열기" 버튼 클릭
 - 열기 직후 폰트 스타일은 Normal로 설정
 - 굵게 또는 기울림꼴을 사용하려면 하단 "Font"탭 에서 설정 후 "Apply" 버튼 클릭

2. 폰트 크기 선택

 - "Font"탭 "Default", "Delete", "Add" 버튼으로 조작
 - 그리드 체크박스 체크시 해당 폰트 크기를 빌드 할 수 있음
 - 폰트마다 설정값이 조금씩 차이가 있으므로 사용자에 맞게 편집하여 사용
 <항목 설명>
  - Font Size: 크기(Point)는 CUF 저장시 파일명으로 사용
  - FM Height: 폰트 높이(Pixel)
  - Adj View Height: 폰트가 보여지는 높이 조정 값(Pixel), Draw Y Position = FM Height - View Height
  - Y Offset: 폰트를 그릴때 사용하는 Y축 조정 값(Pixel)
  - X Offset: 폰트를 그릴때 사용하는 X축 조정 값(Pixel)
 <폰트 크기 기준>
  - Font Point, FM Height, Real Height(Glyph Metric advanceHeight)
  - 10, 15, 13
  - 12, 19, 16
  - 14, 21, 19
  - 16, 24, 21
  - 18, 28, 24
  - 20, 31, 27
  - 22, 34, 29
  - 24, 37, 32
  - 26, 40, 35
  - 28, 43, 37
  - 30, 46, 40
  - 32, 49, 43
  - 38, 59, 51
  ※ 빌드 후 "Editor"탭에서 "한" 문자의 높이와 위 Real Height의 차이값을 Y Offset에 입력후 다시 빌드

3. 문자 선택

 - "Glyph"탭에 폰트에 디자인된 유니코드 목록이 표시되며 체크 박스 선택시 해당 코드만 빌드됨
 - 두번째 입력란에 문자 또는 유니코드("$" + 16진수, 파스칼 문법) 입력 후 "Find" 버튼 클릭시 해당 유니코드로 이동
 - 첫번째, 두번째 입력란 입력 후 "Toggle" 버튼 클릭시 해당 범위의 유니코드의 선택이 토글됨
 - "Clear" 버튼 클릭시 전체 항목 체크 해제
 - "Work" 버튼 클릭 후 "Add" 메뉴 선택시 해당 폰트에서 지원하지 않는 유니코드 추가 가능
 - "Work" 버튼 클릭 시 Ctrl이 눌려진 경우 메뉴 팝업 없이 해당 기능을 바로 실행함
 - "Add" 클릭시 나타나는 팝업창의 입력란에 있는 값은 영문버전에서 사용되는 유니코드 목록임
 <"Glyph List" 체크 박스 리스트 키 이벤트>
  - 추가(Insert), 삭제(Delete)
  - 유니코드 목록 생성(클립보드): Ctrl + Shift + C
 - 우측 "문자 목록" 입력란에는 게임에 사용된 문자가 입력되어 있음
 - "문자 목록" 우측 "Toggle" 버튼 클릭시 해당 문자의 "Glyph" 체크 박스가 토글됨
토탈워 로마2 CUF 빌더

4. CUF 이미지 빌드

 - 우측 상단 "Work" 버튼 클릭 후 "Build" 메뉴 클릭
 - "Work" 버튼 클릭 시 Ctrl키가 눌려진 경우 메뉴 팝업 없이 해당 기능을 바로 실행함
 - 작업 취소는 "Break" 버튼 클릭
 ※ 커닝기능과 연관된 Oblique 스타일을 빌드할때는 "Option"탭 "Kerning Left/Right" 값을 조정하기 바람
 <CUF 이미지 내보내기/가져오기>
  - 빌드 후 "Glyph"탭에서 대상유니코드 선택
  - "Editor"탭에서 CUF Size 선택
  - "Glyph"탭 "Work" 버튼 클릭 후 "Export" 메뉴 선택
  - "Export" 메뉴 클릭시 Ctrl + Shift키가 눌려진 경우, 모든 폰트 크기를 일괄 내보내기 실행
  - "Import" 메뉴 클릭시 Ctrl + Shift키가 눌려진 경우, 모든 폰트 크기에 일괄 가져오기 실행
  - 일괄 처리시 파일명은 "Noto Serif KR_cn_16.exp"와 같이 폰트 크기가 마지막에 표현되어야 함

커닝 관련

 - 게임에서 커닝기능이 동작하지 않음
 - "local_en.pack - georgia_italic_24.cuf"의 "f" 이미지 상, 하 커닝파트가 잘려 있는 것을 확인함
 - CUF 구조상 커닝이 가능하지만, 개발자 인수인계 과정에서 누락되었거나, 다른 버그로 인해 차단한 것 같음

5. CUF 이미지 검수

 - 폰트 크기에 따라 글자의 가독성이 떨어지는 경우가 발생함(예, NAVER 나눔명조 16pt "불")
 - 좌측 상단 "<", ">" 버튼을 클릭하면 미리보기(DirectX)창에 선택한 문자가 순서대로 나열됨
 - "Option"탭 "Line Wrap"(줄당 문자 수)과 "Len"(전체 문자 수)로 그려지는 문자 조정 가능
 - "Option"탭 "Height" 입력란에 전체 문자를 볼 수 있을 만큼의 높이 입력
토탈워 로마2 CUF 빌더

6. CUF 이미지 보정

 - "Editor"탭 좌측 입력창에 문자 또는 유니코드를 입력 후 "Get" 버튼 클릭(저장 가능)
 - 우측 패널 "Get" 버튼을 클릭하여 CUF 이미지 불러오기(패턴 설정 가능)
 - 문자 입력란에 문자 또는 유니코드 값을 넣고 "Page Up" 또는 "Page Down" 키를 입력하면 상호 변환됨
 - 우측 패널 패턴 설정은 마우스 왼쪽 다운 ~ 업 이벤트시 발생, Ctrl(가로), Alt(세로), Shift(방향) 조합 가능
 - 패턴 지우기는 마우스 오른쪽 다운 ~ 업 이벤트시 발생, Ctrl(가로), Alt(세로), Shift(방향) 조합 가능
 - 우측 패널 "Get" 버튼 클릭시 패턴은 초기화 됨
 - 우측 패널 상단 "Set Pattern" 클릭시 선택된 패턴의 이미지가 좌측 패널로 복사됨
 - 작업완료 후 좌측 패널 "Set" 버튼을 클릭하여 이미지 저장
 - "Work" 버튼 클릭 후 "Batch" 메뉴 선택시 아래 설명된 작업을 일괄 처리 가능
 <Batch 작업 설명>
  - Adjust alpha value: 알파값 일괄 조정
  - Revert alpha: 직전에 작업한 알파값으로 일괄 복원
  - Move Y Position: Y축 일괄 이동
  - Remove after Y Position: 입력된 Y 좌표 이후의 알파값 일괄 제거
  - Set View Height Value: View Height 일괄 수정
  - Set View Height as #1: 첫번째 이미지의 View Height로 일괄 수정, 다수의 폰트를 Import시 사용
  - Set View Height Range: 유니코드 범위와 View Height를 입력하여 일괄 수정

보정 예시

 - 대상 문자("불"), 참고 문자("물") 불러오기
토탈워 로마2 CUF 빌더
 - 참고 문자("물")에 복사 위치(패턴) 설정, 우측 "Add" 버튼(또는 Insert 키, Delete 키는 삭제) 클릭시 현재 설정된 패턴 저장 가능
토탈워 로마2 CUF 빌더
 - "Set Pattern" 버튼을 클릭하여 패턴이 설정된 픽셀의 이미지 복사
토탈워 로마2 CUF 빌더
 - 작업 후 "불" 문자의 가독성이 개선됨
토탈워 로마2 CUF 빌더

7. CUF 저장

 - 상단 "CUF" 입력창 저장할 파일명을 입력하고, "Work" 버튼 클릭 후 "Save" 메뉴 클릭
 - 파일명 입력시 "la_gioconda.cuf"를 입력해 두면, 빌드된 폰트크기 "la_gioconda_16.cuf"로 저장됨
 <CUF 파일명 입력창 키 이벤트>
  - 파일명(la_gioconda_uppercase.cuf) 변경(F5)
  - 파일명(la_gioconda.cuf) 변경(F6)
  - 파일명(georgia_italic.cuf) 변경(F7)

8. CUF 파일 패킹

 - "Pack File Manager v2.0 - sourceforge.net"를 이용하여 "local_kr.pack" 파일에 작업한 CUF 파일 삽입

9. 게임 실행 후 결과 확인


local_kr.pack 작업 내역

 - "토탈워 마이너 갤러리 한글화 패치(2019-03-28) - 스팀 워크샵" 기반
 - [한글]나눔명조(ⓒNAVER), [한자]Noto Serif KR(ⓒAdobe[Google Noto™]) 사용
 - 이미지 보정 20건(16pt, 18pt, 땅뚤몸봐뵌불)
 - 오타 수정 187건
오타 내역 보기   - 오타(곴) advice_info_texts_localised_text_CiG.Excerpt.Faction.gaul_suessiones.Info
  - 오타(쫒) advice_info_texts_localised_text_pel_region_pel_euboia_oreos_info
  - 오타(떄) advice_levels_onscreen_text_2139664793
  - 오타(떄) advice_levels_onscreen_text_2139664995
  - 오타(뻬) advice_levels_onscreen_text_2139659938
  - 오타(쫒) advice_levels_onscreen_text_2139659893
  - 오타(휼) advice_levels_onscreen_text_-1442955838
  - 오타(휼) advice_levels_onscreen_text_2139660625
  - 오타(휼) advice_levels_onscreen_text_2139661212
  - 오타(휼) advice_levels_onscreen_text_2139661292
  - 오타(휼) advice_levels_onscreen_text_2139661436
  - 오타(휼) advice_levels_onscreen_text_2139661440
  - 오타(휼) advice_levels_onscreen_text_2139661663
  - 오타(휼) advice_levels_onscreen_text_2139661774
  - 오타(휼) advice_levels_onscreen_text_2139661782
  - 오타(휼) advice_levels_onscreen_text_2139662022
  - 오타(휼) advice_levels_onscreen_text_2139662069
  - 오타(휼) advice_levels_onscreen_text_2139662090
  - 오타(휼) advice_levels_onscreen_text_2139662096
  - 오타(휼) advice_levels_onscreen_text_2139662102
  - 오타(휼) advice_levels_onscreen_text_2139662173
  - 오타(휼) advice_levels_onscreen_text_2139662234
  - 오타(휼) advice_levels_onscreen_text_2139662253
  - 오타(휼) advice_levels_onscreen_text_2139662323
  - 오타(휼) advice_levels_onscreen_text_2139662571
  - 오타(휼) advice_levels_onscreen_text_2139662576
  - 오타(휼) advice_levels_onscreen_text_2139662685
  - 오타(휼) advice_levels_onscreen_text_2139662746
  - 오타(휼) advice_levels_onscreen_text_2139663576
  - 오타(휼) advice_levels_onscreen_text_2139663585
  - 오타(휼) advice_levels_onscreen_text_2139663766
  - 오타(휼) advice_levels_onscreen_text_2139663948
  - 오타(쫒) battles_description_Pharsalus
  - 오타(휼) battles_description_Cannae
  - 오타(꼐) building_flavour_texts_flavour_twr2_rome_celts_Grove_of_epona_flavour
  - 오타(떄) building_flavour_texts_flavour_all_jeweller
  - 오타(떄) building_flavour_texts_flavour_black_sea_greek_water_asclepius
  - 오타(떄) building_flavour_texts_flavour_pun_iberian_Neto_flavour
  - 오타(떄) building_flavour_texts_flavour_twr2_rome_greek_Shrine_of_hermes_flavour
  - 오타(젱) building_flavour_texts_flavour_grain_chain
  - 오타(젹) building_flavour_texts_flavour_pirates_illyrian_vidasus_flavour
  - 오타(젼) building_flavour_texts_flavour_twr2_rome_carthage_Shrine_of_melqart_flavour
  - 오타(쫒) building_flavour_texts_flavour_twr2_rome_eastern_Fire_alter_flavour
  - 오타(쫒) building_flavour_texts_flavour_twr2_rome_eastern_Light_horse_studs_flavour
  - 오타(핧) building_flavour_texts_flavour_twr2_rome_barbarian_Port_flavour
  - 오타(헀) building_flavour_texts_flavour_twr2_rome_germanic_Grove_of_frijjo_flavour
  - 오타(꼐) building_short_description_texts_short_description_twr2_rome_egypt_Ptolemaic_temple_complex_short
  - 오타(앝) building_short_description_texts_short_description_lead_trench_mine
  - 오타(휼) building_short_description_texts_short_description_east_granary
  - 오타(휼) building_short_description_texts_short_description_glass_maker
  - 오타(휼) building_short_description_texts_short_description_greek_granary
  - 오타(휼) building_short_description_texts_short_description_iron_shieldmaker
  - 오타(휼) building_short_description_texts_short_description_leather_workshop
  - 오타(휼) building_short_description_texts_short_description_marble_architecht
  - 오타(휼) building_short_description_texts_short_description_marble_quarry
  - 오타(휼) building_short_description_texts_short_description_rome_goldsmith
  - 오타(휼) building_short_description_texts_short_description_rome_market_town
  - 오타(젋) campaign_subject_strings_string_barb_young_challenger
  - 오타(젋) campaign_subject_strings_string_civ_young_challenger
  - 오타(덪) cdir_events_dilemma_choice_details_localised_choice_label_3c_Faction_Leader_Cannabaudes_1THIRD
  - 오타(젋) cdir_events_dilemma_choice_details_localised_choice_label_barb_young_challengerTHIRD
  - 오타(쫒) cdir_events_dilemma_choice_details_localised_choice_label_eas_useless_bureauracySECOND
  - 오타(쫒) cdir_events_dilemma_choice_details_localised_choice_label_gre_useless_bureauracySECOND
  - 오타(쫒) cdir_events_dilemma_choice_details_localised_choice_label_rom_useless_bureauracySECOND
  - 오타(찿) cdir_events_dilemma_choice_details_localised_choice_label_rom_subject_hellenic_slaves_2_ThracianFIRST
  - 오타(휼) cdir_events_dilemma_choice_details_localised_choice_label_bar_corrupt_governorSECOND
  - 오타(휼) cdir_events_dilemma_choice_details_localised_choice_label_bar_slavedriverFIRST
  - 오타(젋) dilemmas_localised_description_eas_young_challenger
  - 오타(젋) dilemmas_localised_description_gre_young_challenger
  - 오타(젋) dilemmas_localised_description_rom_young_challenger
  - 오타(젋) dilemmas_localised_title_barb_young_challenger
  - 오타(젋) dilemmas_localised_title_eas_young_challenger
  - 오타(젋) dilemmas_localised_title_gre_young_challenger
  - 오타(젋) dilemmas_localised_title_rom_young_challenger
  - 오타(떄) diplomacy_strings_string_eastern_egypt_generic_offer_demand_06
  - 오타(앚) diplomacy_strings_string_eastern_egypt_generic_reject_angry_04
  - 오타(에) diplomacy_strings_string_eastern_beg_get_military_off_my_land_02
  - 오타(웂) diplomacy_strings_string_rome_reject_offer_demand_peace_06
  - 오타(쟎) diplomacy_strings_string_barbarian_beg_hand_over_region_02
  - 오타(졍) diplomacy_strings_string_eastern_approach_begging_01
  - 오타(졍) diplomacy_strings_string_fem_rome_zenobia_approach_begging_01
  - 오타(짋) diplomacy_strings_string_eastern_reject_angry_attack_faction_03
  - 오타(쨋) diplomacy_strings_string_greek_offer_demand_cooperation_02
  - 오타(쫒) diplomacy_strings_string_barbarian_acknowledge_cancel_cooperation_01
  - 오타(쫒) diplomacy_strings_string_greek_request_angry_get_military_off_my_land_01
  - 오타(핼) diplomacy_strings_string_rome_ee_offer_demand_cooperation_04
  - 오타(휼) diplomacy_strings_string_rome_ee_approach_begging_09
  - 오타(휼) diplomacy_strings_string_rome_ee_offer_beg_trade_01
  - 오타(샹) effect_bundles_localised_description_political_action_send_emissary
  - 오타(샹) effect_bundles_localised_description_rom_payload_mercenary_contact
  - 오타(쏨) effect_bundles_localised_description_rom_faction_trait_nomadic
  - 오타(휼) effect_bundles_localised_description_rom_subject_blessing
  - 오타(휼) effect_bundles_localised_description_subject_gdp_good
  - 오타(꼐) encyclopedia_blocks_content_enc_text_politics_parties
  - 오타(꼐) encyclopedia_historical_info_blocks_content_enc_text_hist_characters_gaul_pompey
  - 오타(떄) encyclopedia_historical_info_blocks_content_enc_text_hist_battles_pydna
  - 오타(쫒) encyclopedia_historical_info_blocks_content_enc_text_hist_battles_cannae
  - 오타(휼) faction_groups_description_localised_rom_faction_group_nomadic
  - 오타(ㄷ) incidents_localised_description_inv_plebs_07_C1
  - 오타(떄) incidents_localised_description_3c_Faction_Leader_Tetricus_1_i_C
  - 오타(떄) incidents_localised_description_dk_glorious_past_B
  - 오타(ㅇ) incidents_localised_description_inv_faction_samnite_01_A
  - 오타(읆) incidents_localised_description_festival_lemuria
  - 오타(쫒) incidents_localised_description_bar_lands_open_enemy
  - 오타(쫒) incidents_localised_description_nom_lands_open_enemy
  - 오타(헀) incidents_localised_description_inv_geographical_carthage_merchant_B
  - 오타(휼) incidents_localised_description_bar_cursed_leader
  - 오타(휼) incidents_localised_description_nom_cursed_leader
  - 오타(꼐) mission_text_text_objective_3c_caledoni_1_primary_description
  - 오타(돤) mission_text_text_objective_nabatea_9_2_description
  - 오타(좇) mission_text_text_objective_3c_sassanid_4_primary_description
  - 오타(쫒) mission_text_text_objective_ardiaei_7_2_description
  - 오타(떄) missions_localised_description_objective_3c_gallicemp_9_primary
  - 오타(좇) missions_localised_description_objective_kush_6_primary
  - 오타(탙) missions_localised_title_senate_spa_recapture_sparta
  - 오타(찿) political_actions_onscreen_name_seek_spouse
  - 오타(휼) prologue_loading_screens_main_text_33
  - 오타(햐) quotes_quote_onscreen_3661
  - 오타(듸) scripted_subtitles_localised_text_Rom.HB.NI.E3_Intro_03
  - 오타(짦) scripted_subtitles_localised_text_Rom.HB.PH.Pre_06
  - 오타(휼) scripted_subtitles_localised_text_Rom.HB.NI.E3_Intro_16
  - 오타(휼) start_pos_factions_description_2120135058
  - 오타(휼) start_pos_factions_description_2120135147
  - 오타(휼) start_pos_factions_description_2120136651
  - 오타(휼) start_pos_factions_long_description_2120135066
  - 오타(휼) start_pos_factions_long_description_2120135464
  - 오타(휼) start_pos_factions_long_description_2120135541
  - 오타(휼) start_pos_factions_long_description_2120135620
  - 오타(휼) start_pos_factions_long_description_2120136284
  - 오타(휼) start_pos_factions_long_description_2120136378
  - 오타(휼) start_pos_factions_long_description_2120136449
  - 오타(꿎) technologies_long_description_inv_iolei_military_dominance_lodestone
  - 오타(돞) technologies_long_description_rom_seleucid_military_management_fore_and_aft_rigging
  - 오타(떄) technologies_long_description_inv_insubres_military_strategy_we_sack
  - 오타(뺃) technologies_long_description_rom_briton_military_warrior_code_war_dance
  - 오타(뺃) technologies_long_description_rom_dlc_gaul_celtic_politics_people_1_war_dace
  - 오타(뺃) technologies_long_description_rom_gaul_military_warrior_code_war_dance
  - 오타(뺃) technologies_long_description_rom_german_military_warrior_code_war_dance
  - 오타(뺃) technologies_long_description_rom_iberian_military_warrior_code_war_dance
  - 오타(뺃) technologies_long_description_rom_nomad_military_war_exercises_war_dance
  - 오타(셩) technologies_long_description_rom_eastern_engineering_construction_strengthened_walls
  - 오타(ㅇ) technologies_long_description_3c_rome_civil_economy_restore_markets
  - 오타(ㅇ) technologies_long_description_rom_carthage_military_tactics_rites_of_melqart
  - 오타(ㅈ) technologies_long_description_pun_roman_civil_improvements_improved_plumbing
  - 오타(햑) technologies_long_description_rom_eastern_military_navy_greek_fire
  - 오타(햑) technologies_long_description_rom_egypt_military_navy_greek_fire
  - 오타(햑) technologies_long_description_rom_greek_military_navy_greek_fire
  - 오타(햑) technologies_long_description_rom_pontus_military_navy_greek_fire
  - 오타(햑) technologies_long_description_rom_roman_military_navy_greek_fire
  - 오타(떄) unit_description_historical_texts_text_3c_Cal_Caledonian_Oathsworn
  - 오타(떄) unit_description_historical_texts_text_3c_Ste_Steppe_Horse_Archers
  - 오타(떄) unit_description_historical_texts_text_Car_General_Long
  - 오타(떄) unit_description_historical_texts_text_inv_veneti
  - 오타(ㄹ) unit_description_historical_texts_text_Cel_Axe_Warriors_Long
  - 오타(뺴) unit_description_historical_texts_text_inv_veneti
  - 오타(뽀) unit_description_historical_texts_text_Gre_Sarissa_Cav_Long
  - 오타(죡) unit_description_historical_texts_text_Gre_Sarissa_Cav_Long
  - 오타(젋) unit_description_short_texts_text_Ger_Youths_Tooltip
  - 오타(휼) unit_description_short_texts_text_3c_auxiliary_peltasts
  - 오타(휼) unit_description_short_texts_text_Aux_Dac_Skirm_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Eas_Kartli_Axemen_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Gal_Light_Horse_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Ger_Longbow_Hunters_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Gre_Peltasts_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Ita_Socii_Equites_Extraordinarii_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Ita_Socii_Equites_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Sab_Cav_Tooltip
  - 오타(휼) unit_description_short_texts_text_Aux_Scy_Horse_Archers_Tooltip
  - 오타(휼) unit_description_short_texts_text_Car_General_Tooltip
  - 오타(휼) unit_description_short_texts_text_Dac_Heavy_Archers_Tooltip
  - 오타(휼) unit_description_short_texts_text_dk_nab_nabatean_heavy_archers
  - 오타(휼) unit_description_short_texts_text_Eas_Horse_Archers_Tooltip
  - 오타(휼) unit_description_short_texts_text_Eas_Persian_Cavalry_Tooltip
  - 오타(휼) unit_description_short_texts_text_Ger_Scorpion_Tooltip
  - 오타(휼) unit_description_short_texts_text_Gre_Cimmerian_Heavy_Archers_Tooltip
  - 오타(휼) unit_description_short_texts_text_Gre_Picked_Hoplites_Tooltip
  - 오타(휼) unit_description_short_texts_text_Gre_Polybolos_Tooltip
  - 오타(휼) unit_description_short_texts_text_Gre_Royal_Spartans_Tooltip
  - 오타(휼) unit_description_short_texts_text_Ill_Marines_Tooltip
  - 오타(휼) unit_description_short_texts_text_Ita_Samnite_Warriors_Tooltip
  - 오타(휼) unit_description_short_texts_text_Mer_Bri_Slingers_Tooltip
  - 오타(휼) unit_description_short_texts_text_Mer_Cel_Light_Horse_Tooltip
  - 오타(휼) unit_description_short_texts_text_Mer_Thr_Peltasts_Tooltip
  - 오타(휼) unit_description_short_texts_text_Mer_Thr_Warriors_Tooltip
  - 오타(휼) unit_description_short_texts_text_Rom_First_Cohort_Tooltip
  - 오타(휼) vo_fmv_texts_text_imp_aug_intro
  - 오타(짋) vo_speech_texts_text_ADC_outnumbering_enemy_unit_01

한글 패치 비교

토탈워 로마2 CUF 빌더    토탈워 로마2 CUF 빌더




Creative Commons Licenses
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글

  1. 안녕하세요! 똑같이 따라했는데, 토탈워 워해머 3에서는 적용이 안 되는 것 같습니다....
    혹시 토탈워 워해머 1,2,3 중 아무거나 보유하고 계시다면 적용되는지 확인해주실 수 있으신가요?

    답글삭제
    답글
    1. CUF 빌더는 로마2 전용입니다.
      참고로 워해머 2의 경우 한글은 CUF가 아닌 TTF폰트를 사용합니다.(local_kr.pack ▶ font\nanummyeongjo.ttf)

      삭제
  2. 이 도구의 소스 코드를 공유할 수 있습니까?

    답글삭제
    답글
    1. 라이선스 문제로 소스 공개는 불가합니다.

      이 프로그램은 DirectX Sample - Github를 참고하여 만들었으니, 샘플소스와 블로그 아이디어를 잘 결합하여 원하는 결과를 얻으시기 바랍니다.

      삭제
  3. Hello, I have a question about making a thai font with CUF Tool.
    Regarding the incorrect rendering of Thai vowel characters, specifically in the joining of Thai vowel and consonant characters, where the vowel characters often have a gap between them and do not connect to the consonant characters, resulting in incorrect display.

    https://i.imgur.com/klO1hnC.png
    As shown in the figure above, the correct display of the text should be "เล่นคนเดียวตั้ง". However, cuf separates the characters and creates a gap in the text, resulting in "เล่นคนเด ียวต ั ้ง", which is an incorrect display.

    Can your "cuf builder" tool fix the issue of Thai vowel characters not joining together? If so, how should I set it up? Thank you.
    P.S. The vowel characters in the example are “◌ี” (U+0E35) and “◌ั” (U+0E31).

    답글삭제
    답글
    1. 안타깝게도 태국어는 조합형 문자라서 CUF(이미지)로 표현하려면 완성형 문자로 변환 후 출력해야 하는데, 이 부분은 제가 지원해드릴 수 없을 것 같네요.

      참고로 한국어도 조합형 문자이지만 컴퓨터에서는 완성형을 사용하기 때문에 "한"(2개 자음 + 1개 모음)글자가 완성된 형태의 유니코드(U+D55C)로 표기됩니다.

      삭제
    2. 아래와 같은 해결법도 있습니다.
      1. TTF 글꼴 수정
       - Unicode Private Area(U+E000 ~ U+F8FF)에 완성문자 추가
       - \E000 ~ \E002에 샘플 추가함
       - 수정된 글꼴
      2. 번역문장 유니코드 변환
       - [Before]\u0E40\u0E25\u0E48\u0E19\u0E04\u0E19\u0E40\u0E14\u0E35\u0E22\u0E27\u0E15\u0E31\u0E49\u0E07
       - [After]\u0E40\uE000\u0E19\u0E04\u0E19\u0E40\uE001\u0E22\u0E27\uE002\u0E07
      3. 수정된 글꼴을 CUF Builder에서 작업
       - 빌드 후 \uFEFF\u0E40\uE000\u0E19\u0E04\u0E19\u0E40\uE001\u0E22\u0E27\uE002\u0E07를 입력하여 결과 확인
       - 빌드된 CUF
       - 스크린샷#1
       - 스크린샷#2

      삭제
    3. Thank you very much for your reply. I will try it out!

      삭제
    4. Thank you again for taking your valuable time to find a solution for me.
      However, as I understand it, Thai cannot read glyphs that are created from combination characters.
      Is it possible to use a method to shift the OffsetX of specific glyph-characters in cuf to the left, such as “◌ี” (U+0E35) -6px “◌ั” (U+0E31) -6px, and “◌้” (U+F70B) - 4px, to solve this problem?

      삭제
  4. 아틸라도 같은 방법으로 적용이 가능한가요? 오직 롬2만 가능한건가요?

    답글삭제

댓글 쓰기