동작 환경
- 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 이미지 편집 및 일괄 처리 기능 제공
폰트를 열때 오류 팝업(0x887A0004)이 발생하는 경우
- 0x887A0004 DXGI_ERROR_UNSUPPORTED- 메시지: 요청된 기능은 디바이스 또는 드라이버에서 지원되지 않습니다.
- 이 프로그램은 DirectX 12 API를 사용하므로, 그래픽 카드에서 DirectX 12를 지원하지 않는 경우 사용할 수 없습니다.
사용법
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" 체크 박스가 토글됨
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" 입력란에 전체 문자를 볼 수 있을 만큼의 높이 입력
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를 입력하여 일괄 수정
보정 예시
- 대상 문자("불"), 참고 문자("물") 불러오기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
한글 패치 비교
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.
안녕하세요! 똑같이 따라했는데, 토탈워 워해머 3에서는 적용이 안 되는 것 같습니다....
답글삭제혹시 토탈워 워해머 1,2,3 중 아무거나 보유하고 계시다면 적용되는지 확인해주실 수 있으신가요?
CUF 빌더는 로마2 전용입니다.
삭제참고로 워해머 2의 경우 한글은 CUF가 아닌 TTF폰트를 사용합니다.(local_kr.pack ▶ font\nanummyeongjo.ttf)
이 도구의 소스 코드를 공유할 수 있습니까?
답글삭제라이선스 문제로 소스 공개는 불가합니다.
삭제이 프로그램은 DirectX Sample - Github를 참고하여 만들었으니, 샘플소스와 블로그 아이디어를 잘 결합하여 원하는 결과를 얻으시기 바랍니다.
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).
안타깝게도 태국어는 조합형 문자라서 CUF(이미지)로 표현하려면 완성형 문자로 변환 후 출력해야 하는데, 이 부분은 제가 지원해드릴 수 없을 것 같네요.
삭제참고로 한국어도 조합형 문자이지만 컴퓨터에서는 완성형을 사용하기 때문에 "한"(2개 자음 + 1개 모음)글자가 완성된 형태의 유니코드(U+D55C)로 표기됩니다.
아래와 같은 해결법도 있습니다.
삭제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
Thank you very much for your reply. I will try it out!
삭제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?
아틸라도 같은 방법으로 적용이 가능한가요? 오직 롬2만 가능한건가요?
답글삭제아틸라를 안해봐서 모르겠네요
삭제