Translate Korean comments/strings to English; fix UTF-8 encoding across source tree

Korean translation (84 source files, 876 lines):
- Translated all EUC-KR/CP949 Korean developer comments to English across
  84 source files in Gameleap/code/. Zero Korean bytes remain outside the
  intentional font-table headers (D3FFontEdit2/fontedit all.h etc.).
- Comment markers: //상훈 앞/뒤 -> //sanghoon begin/end (Sang-hun's code
  region markers); //상훈짱 begin/end, //상훈.. variants; // 鉉 -> // hyun
  (second developer's markers); // 鉉 - start/end patterns.
- Functional string translations in recscore.cpp (mw4 + mw4print copies):
  body-part return values (왼발/오른발/etc. -> Left Leg/Right Leg/etc.),
  kill-announcer format strings (~30 entries), and the nonmfc.h assert dialog.
- GosView profiler: 킪 -> us (microseconds) in timing display strings.
- Network/socket code (ctcl.cpp, mugsocs.h, ctime.cpp across Launcher/
  MW4Application/MW4GameEd2/AnimScript): state-machine comments, socket
  ID comments, login/session management comments.
- render.hpp CHSH_Device member comments; GUIRadarManager.cpp drawing
  routine comments; hudchat/hudcomp2/huddamage/hudmap/hudweapon/hudtarg
  HUD component comments.
- DXRasterizer.cpp: cleaned residual U+FFFD replacement characters left
  from a prior partial encoding conversion.

UTF-8 encoding cleanup (76+ files):
- Latin-1 single bytes converted to proper UTF-8 multi-byte sequences:
  © (0xA9) in 3dsmax4/Maxscrpt Autodesk/Wainwright copyright headers,
  ® (0xAE) in gosHelp/Remote.cpp, · (0xB7) bullet points in ai command.hpp,
  Û (0xDB) in SafeChain_Test.cpp tool header,
  ß (0xDF) in AnimationSuite version strings (8 files).
- Font lookup tables (D3FFontEdit2/, fontedit/ *.h) intentionally left
  as-is: raw byte values are C array data, not text.

Language DLL:
- Replaced Gameleap/mw4/Language.dll (original Korean binary) and
  MW4/Language.dll with freshly built English version from
  Language - Win32 English config (Language.dsp). Fixes Korean button
  labels in the GameOS exception/crash dialog (??? ??... / ?? / ???
  were showing instead of More Details.../Continue/Exit).
This commit is contained in:
2026-07-18 13:10:31 -05:00
parent eaa5fd3bbe
commit af416960fa
171 changed files with 973 additions and 973 deletions
+1 -1
View File
@@ -1077,7 +1077,7 @@ int CStrArray::GetTotalLength() const
int nTotalLength;
int i, nSize = GetSize();
nTotalLength = nSize; // nSize개의 '\0'
nTotalLength = nSize; // nSize null terminators '\0'
for(i = 0; i < nSize; i++) {
nTotalLength += strlen(GetAt(i));
}
+22 -22
View File
@@ -517,7 +517,7 @@ void CSOC_Server::OnSendFile()
BYTE bCode;
if (Disassemble("B", &bCode)) {
ASSERT((bCode == 0) || (bCode == 3));
// 받아가시오 from Game to console...
// Receiving from Game to console...
SYSTEMTIME* pSysTime;
WORD wSysTimeSize;
GUID* pGUID;
@@ -533,7 +533,7 @@ void CSOC_Server::OnSendFile()
pSF = g_pCTCLManager->m_SFM_Recv.Find(*pGUID, nType);
if (pSF) {
if (bCode == 3) {
// 미션리뷰 서버가 mission review 받았다는 것을 받았느냐?
// Did we receive confirmation the mission review server got the mission review?
pSF->m_bProcessed = true;
g_pCTCLManager->m_SFM_Recv.Cut(pSF);
g_pCTCLManager->m_SFM_Done.AddTail(pSF);
@@ -910,7 +910,7 @@ void CSOC_Client::OnSendFile()
BYTE bCode;
if (Disassemble("B", &bCode)) {
ASSERT((bCode == 1) || (bCode == 2));
// 받았오 from console to Game...
// Received from console to Game...
SYSTEMTIME* pSysTime;
WORD wSysTimeSize;
GUID* pGUID;
@@ -1438,21 +1438,21 @@ void CCTCLManager::Run()
#endif // !defined(CTCL_LAUNCHER)
} else {
/*
.
Code executed for both client and server.
*
/ ..
(// .)
*Possible states:
Before server/client role is determined: waiting for commands
(Commands such as exit/start-server/start-client may arrive.)
(CreateSession가 .)
Bot들에
( .)
Launch를
Running as server, waiting for server mech configuration data
(State after CreateSession has been called.)
Running as server, waiting for Bot information
(Client joining happens automatically between client and server.)
Running as server, waiting for Launch
==> .
==>Client has no waiting state as data is transferred immediately on startup.
==> .
==>Define each state and implement the appropriate handling for each.
switch(state){
}
*/
@@ -1534,8 +1534,8 @@ void CCTCLManager::DoMech4Comm()
}
break;
case 1:
//서버/클라이언트로서 실행준비하도록 명령을 전달한다.
//또한 서버를 실행하는데 필요한 모든 파라미터도 함께 전달한다.
//Send command to prepare for execution as server/client.
//Also transmit all parameters required to run the server.
for(i = 0; i < g_nPlayerInfos; i++) {
SPlayerInfo& pi = g_aPlayerInfos[i];
if (!pi.m_bBot) {
@@ -1562,12 +1562,12 @@ void CCTCLManager::DoMech4Comm()
}
}
if (i == g_nPlayerInfos) {
// Bot들에 대한 정보를 모두 한데 묶어서 보낸다.
// Bundle and send all Bot information together.
CPacket pak(&SVR.GetGameSOC());
pak.Assemble("B", C_BOTS);
for(i = 0; i < g_nPlayerInfos; i++) {
if (i != g_nServer) { // 원래 Bot만 지금은 서버를 제외한 전부...
if (i != g_nServer) { // Originally bots only; now everyone except the server...
SPlayerInfo& pi = g_aPlayerInfos[i];
pak.Assemble("BnsDWwsnn", pi.m_bBot, pi.m_nLevelOrTesla, pi.m_szName, pi.m_nMechIndex, pi.m_fileID, pi.m_recordID, pi.m_szMech, pi.m_nTeamOrSkin, pi.m_nDecal);
}
@@ -1578,10 +1578,10 @@ void CCTCLManager::DoMech4Comm()
}
break;
case 4:
// 게임이 성공적으로 만들어지면 서버와 클라이언트들의 Mech에 대한 정보들을 Set한다...
// Once the game is successfully created, set Mech info for server and all clients...
if (SOCGame.m_nGameReturn == _EGR_OkCreateSession) {
for(i = 0; i < g_nPlayerInfos; i++) {
if (i != g_nServer) { // 서버는 이미 SetMech에 진입한 상태...
if (i != g_nServer) { // Server has already entered SetMech...
SPlayerInfo& pi = g_aPlayerInfos[i];
if (!pi.m_bBot) {
CTeslaInfo& ti = m_aTIs.GetAt(pi.m_nLevelOrTesla);
@@ -1594,8 +1594,8 @@ void CCTCLManager::DoMech4Comm()
}
break;
case 6:
//모든 클라이언드들이 서버에 참여하기를 기다린다.<==이 응답은 서버로 부터 얻을 수 있다.
//참여가 모두 끝났으면, 서버로 하여금 게임을 Launch시키도록 한다.
//Wait for all clients to join the server. <==This response comes from the server.
//Once all clients have joined, instruct the server to Launch the game.
if (SOCGame.m_nGameReturn == _EGR_OkLaunchReady) {
g_nMech4Comm = 9;
}
+1 -1
View File
@@ -42,7 +42,7 @@ public:
const char* m_pcsz;
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
int m_nConnection2; // m_bCameraShip값에 따라 게임 혹은 카메라 쉽과의 접속을 의미, 0: no connection, +1: connection, -1: connecting
int m_nConnection2; // Connection to game or camera ship per m_bCameraShip, 0: no connection, +1: connected, -1: connecting
int m_nApplType;
int m_nApplState;
int m_nGameState;
+4 -4
View File
@@ -44,7 +44,7 @@ int GetDayEnd(int nYear, int nMonth)
long GetTotalSeconds(int nYear, int nMonth, int nDay)
{
// nYear, nMonth, nDay날의 0시 0분 0초를 0으로 한 초단위 수...
// Seconds elapsed since 00:00:00 on the date nYear/nMonth/nDay...
ASSERT(nYear >= 1970);
ASSERT((1 <= nMonth) && (nMonth <= 12));
ASSERT(1 <= nDay);
@@ -57,13 +57,13 @@ long GetTotalSeconds(int nYear, int nMonth, int nDay)
if (IsLeapYear(nStart)) {
nDays++;
}
lTotal += nDays * 24 * 60 * 60; // 24시간 60분 60초
lTotal += nDays * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
}
for(nStart = 1; nStart < nMonth; nStart++) {
int nDayEnd = GetDayEnd(nYear, nStart);
lTotal += nDayEnd * 24 * 60 * 60; // 24시간 60분 60초
lTotal += nDayEnd * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
}
lTotal += (nDay - 1) * 24 * 60 * 60; // 24시간 60분 60초
lTotal += (nDay - 1) * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
return lTotal;
}
+1 -1
View File
@@ -16,7 +16,7 @@ class CTimeDate
public:
union {
struct {
// Bit Field는 앞쪽에 지정된 것이 LowBit이다.
// Bit Fields declared first are at the low-bit end.
DWORD m_xDay: 5; // 2^0, 2^5-1
DWORD m_xMonth: 4; // 2^5, 2^4-1
DWORD m_xYear: TIMEDATE_YEAR_BITS; // from 1900-2155 // 2^9, 2^8-1
@@ -1375,7 +1375,7 @@ void CSockAddr::SetTarget(const char* pcszAddr)
{
if (pcszAddr) {
sin_addr.s_addr = inet_addr(pcszAddr);
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0이기 때문에 HOST/Network Addr무관
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0, HOST/Network Addr irrelevant
hostent* pHN = gethostbyname(pcszAddr);
if (pHN) {
sin_addr.s_addr = *(u_long*)pHN->h_addr;
@@ -3667,7 +3667,7 @@ CSOCListen* CSOCManager::DoListen(int nPort, PFN_CreateSOCClient pfnCSC, DWORD d
pSOCListen = new CSOCListen(nPort);
pSOCListen->SetCSCParam(pfnCSC, dwCSCParam1, dwCSCParam2);
if (!DoListen(pSOCListen, nPort)) {
// 같은 포트를 2번 Listen 하는 경우?...
// Case of Listen on the same port twice?...
pSOCListen = NULL;
}
+25 -25
View File
@@ -41,7 +41,7 @@ extern char SERVERID[];
#endif // !MAX_PACKET
#ifndef MAX_FTPBUF
#define MAX_FTPBUF 1024
// MAX_FTPBUF는 MAX_PACKET보다 반드시 작아야 한다?
// MAX_FTPBUF must be smaller than MAX_PACKET?
// 9+size==sizeof(bCmd) + sizeof(FTID) + sizeof(size) + size
#endif // !MAX_FTPBUF
@@ -251,7 +251,7 @@ private:
#define ESTRF_USER_START 100
#define ESTRF_PASSWORDCHANGED 110 // 로그인하고 있는 동안에 패스워드가 바뀜
#define ESTRF_PASSWORDCHANGED 110 // Password changed while logged in
void Randomize();
@@ -268,7 +268,7 @@ union UPacketValue
class CDAPacket : public SOCBase_Class
{
// Packet의 앞 부분을 처리하고 난 뒷 부분의 가변 파라미터...
// Variable parameters in the tail portion after processing the packet header...
public:
BYTE m_bCmd;
BYTE m_bReserved;
@@ -361,8 +361,8 @@ public:
#define C_ROOM_MAKE 232
// s - name, s - password
#define C_ROOM_JOIN 233
// d - number(Room을 떠나는 것은 -1), s - password
#define S_ROOM_JOIN 233 // C_ROOM_MAKE/C_ROOM_JOIN의 결과...
// d - number (leaving a Room = -1), s - password
#define S_ROOM_JOIN 233 // Result of C_ROOM_MAKE/C_ROOM_JOIN...
// b - code(CSCODE_OK or error code), d - number
#define C_ROOM_UPDS 234 // CSCODE_... + @
@@ -384,13 +384,13 @@ public:
#define S_FTP 254 //... see ftp.txt
#define X_KEEPALIVE 255 // no parameters, should be ignored...
#define TX_SYSTEM 0 // 시스템 메시지...
#define TX_NORMAL 1 // 일반 채팅 텍스트
#define TX_WARNING 2 // 경고
#define TX_ERROR 3 // 오류
#define TX_FATAL 4 // 치명적인 오류
#define TX_INFO 5 // 사용자 정보 등의 Information Result...
#define TX_SAY 6 // 귓속말
#define TX_SYSTEM 0 // System message...
#define TX_NORMAL 1 // Regular chat text
#define TX_WARNING 2 // Warning
#define TX_ERROR 3 // Error
#define TX_FATAL 4 // Fatal error
#define TX_INFO 5 // Information result (e.g. user info)...
#define TX_SAY 6 // Whisper
#define TX_LOCAL 7 // local echo....
#define TX_UNKNOWN 0xffff // unknown...
@@ -493,7 +493,7 @@ CPacket
protected:
CSOC* m_pSOC;
private:
// 이 안의 블럭은 반드시 연속해야 한다...
// The block within must be contiguous...
WORD m_wLen;
BYTE m_ba[MAX_PACKET];
//
@@ -587,7 +587,7 @@ end of variable PACKET_MAP definitions...
class CFileTransfer : public TDBLNK(CFileTransfer*)
{
public:
// 서버로 부터 받은 정보... - 혹은 클라이언트에게 전해줄 정보...
// Information received from server... - or information to relay to client...
BOOL m_bClientSite;
DWORD m_dwFTID;
DWORD m_dwGUARD;
@@ -680,18 +680,18 @@ protected:
// time out to Drop...
DWORD m_dwKARcvTimeOut;
#ifdef WIN32
// 보통 Login과정에 쓰이는 윈도우 핸들
// Window handle typically used during Login process
HWND m_hWndOwner;
#endif // WIN32
// 보통 글로벌 변수로 쓰이는 소켓포인터에 대한 자동 NULL Assign을 위하여
// For auto NULL assignment of socket pointer typically used as a global variable
PSOC* m_ppSOC;
// 소켓을 구분하기 위하여 사용자 프로그램에서 쓰이는 아이디
// 주로 서버의 경우에는 클라이언트가 접속할 때마다 고유 아이디를 부여하여 사용
// 하나의 Client가 다수의 서버에 접속할 때(주로 Star형) 각각의 접속을 구분할 때 사용
// 클라이언트가 하나의 서버에만 접속하는 경우 클라이언트가 서버에 접속 중인지 혹은 접속했는지를 판단할 때
// CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState()를 사용.
// limits.h를 include해야함.
// CSOC생성시의 기본값: CSOCServer == CSOC_SERVER_ID(=INT_MIN), CSOCClient == CSOC_CLIENT_ID(=0), CSOCListen == CSOC_LISTEN_ID(=-1)
// ID used in user program to identify a socket
// Mainly for servers: assigns a unique ID each time a client connects
// Used to distinguish each connection when a client connects to multiple servers (Star topology)
// When a client connects to only one server: used to check if client is connecting or already connected
// Use CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState().
// Must include limits.h.
// Default values at CSOC creation: CSOCServer==CSOC_SERVER_ID(INT_MIN), CSOCClient==CSOC_CLIENT_ID(0), CSOCListen==CSOC_LISTEN_ID(-1)
union {
int m_nID;
UINT m_uID;
@@ -725,8 +725,8 @@ protected:
DWORD m_xGracefulRemote: 1;
DWORD m_xAbortyLocal: 1;
DWORD m_xAbortyRemote: 1;
DWORD m_xLoginStarted: 1; // 사용자가 직접 값을 Setting해야 한다.
DWORD m_xLoginOK: 1; // 사용자가 직접 값을 Setting해야 한다.
DWORD m_xLoginStarted: 1; // Must be set directly by the caller.
DWORD m_xLoginOK: 1; // Must be set directly by the caller.
} m_DW;
DWORD m_dwVarFlags;
};
+1 -1
View File
@@ -6,7 +6,7 @@ inline BOOL AssertDialog(const char* pcszExpr, const char* pcszfile, int nLine)
{
char szBuf[MAX_PATH * 2];
sprintf(szBuf, "\"%s\" 파일의 %d줄에서 ASSERT!!!\n\n디버깅을 하시겠습니까?", pcszfile, nLine);
sprintf(szBuf, "ASSERT!!! in \"%s\" at line %d\n\nDo you want to debug?", pcszfile, nLine);
#ifdef WIN32
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;