여러분의 참여가 더 멋진 한글패치를 만들 수 있는 힘이 됩니다.
번역에 참여 하실 분 : 이메일 주소를 포함하여 글을 남겨주세요. 번역할 분량을 보내드리겠습니다.
번역 검수 하실 분 : 어색한 문장을 찾아 원문과 고쳐졌으면 하는 문장을 같이 적어주세요.
드디어 슈컴 채팅을 한글로 할 수 있는 날이 멀지 않았습니다!!;;
슈컴 mod 제작 포럼을 뒤지고 슈컴 자체 lua 스크립트들을 뒤진 끝에 어떻게 하면 채팅창에 올라가는 메시지를 중간에 가로챌 수 있는지 알아냈고, 실제로 모든 입력 메시지를 "한글입력기 테스트"로 바꿔서 보여주는 데 성공했습니다.
이제 실제로 영타를 치면 그것을 한글로 변환하여 보여주는 부분을 짜면 될 것 같네요.
실시간으로 치는 동안 보여주는 부분은 나중에 만들 생각이고, 일단은 다음과 같이
"i am /qnffk/." -> "i am 블라."
와 같이 변환되도록 짜보겠습니다. :D
한영키나 Shift+Space와 같은 단축키 인식이 가능한지는 아직 불확실합니다. 이 부분은 나중에 좀더 연구해보도록 하겠습니다.
슈컴 mod 제작 포럼을 뒤지고 슈컴 자체 lua 스크립트들을 뒤진 끝에 어떻게 하면 채팅창에 올라가는 메시지를 중간에 가로챌 수 있는지 알아냈고, 실제로 모든 입력 메시지를 "한글입력기 테스트"로 바꿔서 보여주는 데 성공했습니다.
이제 실제로 영타를 치면 그것을 한글로 변환하여 보여주는 부분을 짜면 될 것 같네요.
실시간으로 치는 동안 보여주는 부분은 나중에 만들 생각이고, 일단은 다음과 같이
"i am /qnffk/." -> "i am 블라."
와 같이 변환되도록 짜보겠습니다. :D
한영키나 Shift+Space와 같은 단축키 인식이 가능한지는 아직 불확실합니다. 이 부분은 나중에 좀더 연구해보도록 하겠습니다.
daybreaker
- 2008.06.26
- 16:34:59
- (*.234.74.57)
말씀하신 내용 중에 입력과 출력을 반대로(?) 말씀하신 것 같네요.;
출력할 때 유니코드로 처리하기 때문에 영문 글꼴에 한글 glyph가 없으므로 자동으로 굴림으로 치환하여 보여주고 있는 것이고, 키입력을 받는 부분에서 IME와 연동 처리가 되어 있지 않아 발생하는 문제입니다.
(슈컴 내부에서는 utf-8 인코딩을 사용합니다. 예를 들어 '가'를 표현하려면 유니코드로 0xAC00인 것을 0xEBB080으로 인코딩해야 하지요.)
출력할 때 유니코드로 처리하기 때문에 영문 글꼴에 한글 glyph가 없으므로 자동으로 굴림으로 치환하여 보여주고 있는 것이고, 키입력을 받는 부분에서 IME와 연동 처리가 되어 있지 않아 발생하는 문제입니다.
(슈컴 내부에서는 utf-8 인코딩을 사용합니다. 예를 들어 '가'를 표현하려면 유니코드로 0xAC00인 것을 0xEBB080으로 인코딩해야 하지요.)
daybreaker
- 2008.06.26
- 17:36:07
- (*.234.74.57)
정확히는 utf-8인게 문제가 아니고, 일단 슈컴이 IME와 전혀 상관 없는 방식으로 문자열 입력을 처리하기 때문입니다.
utf-8 얘기는 슈컴 내부로 한글을 보낼 때 utf-8로 인코딩 상태로 보내면 된다는 얘기지요.
lua 언어의 경우 인코딩 설정을 따로 하는 방법이 없고 사용하는 환경을 따라가는데(그냥 C에서 char 배열 쓰는 것과 같습니다) 슈컴 내부에선 utf-8로 받아야 출력이 되는 것 같습니다.
utf-8 얘기는 슈컴 내부로 한글을 보낼 때 utf-8로 인코딩 상태로 보내면 된다는 얘기지요.
lua 언어의 경우 인코딩 설정을 따로 하는 방법이 없고 사용하는 환경을 따라가는데(그냥 C에서 char 배열 쓰는 것과 같습니다) 슈컴 내부에선 utf-8로 받아야 출력이 되는 것 같습니다.
daybreaker
- 2008.06.26
- 04:46:59
- (*.234.74.57)
그게, 내부 스크립트를 뜯어보면 글자 하나하나를 받아서 영문이 아닌 걸 무시해버리는 방식을 쓰기 때문에 어쩔 수가 없더군요...ㄱ-
뭐, 핵심 구동 로직은 간단합니다. hook 방식의 ui mod를 만들어서 lua/ui/game/chat.lua 파일을 다음과 같이 override해주면 되더군요.
-- Hangul Chatting Mod for Supreme Commander: Forged Alliance by Joongi Kim.
-- Setup dependency
--local UIUtil = import('uiutil.lua')
--local UIFile = UIUtil.UIFile
LOG('loading hangulchat...')
local hangul_mod = import('/mods/hangulchat/hangul.lua')
-- Initialize
local old_CreateChatEdit = CreateChatEdit
function CreateChatEdit()
local group = old_CreateChatEdit()
local old_OnEnterPressed = group.edit.OnEnterPressed
group.edit.OnEnterPressed = function(self, text)
old_OnEnterPressed(self, hangul_mod.conv2hangul(text))
end
return group
end
여기서 hangul_mod.conv2hangul()이 실제 변환을 수행하는 루틴이지요.
현재 전에 올렸던 파이썬 코드를 루아 코드로 바꿔서 문법 에러는 다 잡았습니다만 기대했던대로 동작하는지 여부를 체크해봐야 해서 하루 정도 더 걸릴 듯합니다.
ps. 게임 시작 전 로비에서의 채팅은 별도로 만져줘야 할 것 같더군요. 일단 한글 변환이 잘 작동하기만 한다면 그리 어렵지 않을 것으로 생각됩니다.
뭐, 핵심 구동 로직은 간단합니다. hook 방식의 ui mod를 만들어서 lua/ui/game/chat.lua 파일을 다음과 같이 override해주면 되더군요.
-- Hangul Chatting Mod for Supreme Commander: Forged Alliance by Joongi Kim.
-- Setup dependency
--local UIUtil = import('uiutil.lua')
--local UIFile = UIUtil.UIFile
LOG('loading hangulchat...')
local hangul_mod = import('/mods/hangulchat/hangul.lua')
-- Initialize
local old_CreateChatEdit = CreateChatEdit
function CreateChatEdit()
local group = old_CreateChatEdit()
local old_OnEnterPressed = group.edit.OnEnterPressed
group.edit.OnEnterPressed = function(self, text)
old_OnEnterPressed(self, hangul_mod.conv2hangul(text))
end
return group
end
여기서 hangul_mod.conv2hangul()이 실제 변환을 수행하는 루틴이지요.
현재 전에 올렸던 파이썬 코드를 루아 코드로 바꿔서 문법 에러는 다 잡았습니다만 기대했던대로 동작하는지 여부를 체크해봐야 해서 하루 정도 더 걸릴 듯합니다.
ps. 게임 시작 전 로비에서의 채팅은 별도로 만져줘야 할 것 같더군요. 일단 한글 변환이 잘 작동하기만 한다면 그리 어렵지 않을 것으로 생각됩니다.
daybreaker
- 2008.06.26
- 16:29:44
- (*.234.74.57)
제가 세벌식 유저라서 두벌식을 치면 가끔 틀릴 때가 있습니다...=3==3
프로그램은 따로 테스트까지 마친 코드를 그대로 변환해서 만드는 것이니 걱정하지 않으셔도 돼요.;
제가 전에 자유게시판에 올렸던 변형 두벌식 오토마타를 기반으로 만들어지므로 자음 연타로 쌍자음 입력하기 같은 것이 가능합니다.
프로그램은 따로 테스트까지 마친 코드를 그대로 변환해서 만드는 것이니 걱정하지 않으셔도 돼요.;
제가 전에 자유게시판에 올렸던 변형 두벌식 오토마타를 기반으로 만들어지므로 자음 연타로 쌍자음 입력하기 같은 것이 가능합니다.
daybreaker
- 2008.06.26
- 17:33:20
- (*.234.74.57)
지금 입력기 루틴은 다 짜놓고 unicode -> utf8 변환 루틴에서 막혔습니다...
lua 스크립트 언어가 스펙이 단순하다못해 비트연산자가 존재하지 않아 인코딩 변환 루틴 코딩에 애를 먹고 있네요..OTL
lua 스크립트 언어가 스펙이 단순하다못해 비트연산자가 존재하지 않아 인코딩 변환 루틴 코딩에 애를 먹고 있네요..OTL
daybreaker
- 2008.06.27
- 00:40:07
- (*.234.74.57)
하아, 일단 GPGNet 포럼에 올려두었습니다.
http://forums.gaspowered.com/viewtopic.php?p=434455#434455
ㅠ_ㅠ;
http://forums.gaspowered.com/viewtopic.php?p=434455#434455
ㅠ_ㅠ;


zero
내용보기 : http://www.parkoz.com/zboard/view.php?id=my_tips&no=6702
오토핫키라고, 일반적으로는 키 배치를 바꿀 때 쓰는 공개 프로그램입니다만 이 프로그램의 기능이 무긍무진합니다.
온라인게임에서 오토봇 돌릴 때 쓰는 프로그램이 이 오토핫키로 만든것 같더군요. 화면 상태나 창, 마우스위치 같은것도 탐지가능하고 명령어를 이용해 복잡한 프로그램도 제작 가능합니다. 네이버에 관련 까페도 있더군요.
이거라면 할 수 있을까해서. 여러가지 시도를 해봤습니다만 단순히 입력된 키를 한글입력으로 바꾸는걸로는 되지 않더군요. 그러니까 IME는 정상작동 하는데 프로그램차원에서 영문 이외의 유니코드는 이게뭥미? 하고 무시해버리는 것 같습니다. 결국 입력되는 값이 문제가 아니라 입력을 받은후에 출력으로 이어지지 않는거죠.
한글을 복사하는건 단순히 메모리만 불러오는거니 입력은 되고 폰트는 자동으로 찾아서 한글로 볼 수 있는건데 한글 스캔코드가 입력되는것을 문자로 인식하지 못하는것 같습니다.
아무튼 제가 파악한건 여기까지입니다. 저기가 어떤부분인지 잘 안보이네요. 스크립트를 알려주시면 저도 같이 생각해 보겠습니다.