From 4525e3103dc20edd984037db214548d11ffad9b9 Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Tue, 17 Dec 2024 22:41:21 +0100
Subject: [PATCH 1/8] convert literals to escaped bytes

---
 src/EterGrnLib/Mesh.cpp                       |  2 +-
 src/EterGrnLib/ModelInstanceModel.cpp         |  2 +-
 src/EterLib/GrpText.cpp                       |  6 +--
 src/EterLib/GrpTextInstance.cpp               |  2 +-
 src/EterLib/Profiler.h                        |  4 +-
 src/EterLib/Util.cpp                          |  8 +--
 src/EterLocale/StringCodec_Vietnamese.cpp     |  2 +-
 src/EterPythonLib/PythonWindow.cpp            |  2 +-
 .../PythonWindowManagerModule.cpp             |  2 +-
 src/GameLib/ActorInstanceBattle.cpp           | 10 ++--
 src/GameLib/ActorInstanceMotion.cpp           |  8 +--
 src/GameLib/ActorInstanceRotation.cpp         |  2 +-
 src/GameLib/ItemData.cpp                      |  2 +-
 src/GameLib/MapBase.cpp                       |  2 +-
 src/GameLib/MapManager.cpp                    |  6 +--
 src/GameLib/MapOutdoorLoad.cpp                |  2 +-
 src/GameLib/MapOutdoorUpdate.cpp              |  2 +-
 src/GameLib/MonsterAreaInfo.cpp               |  6 +--
 src/GameLib/PropertyManager.cpp               |  2 +-
 src/MilesLib/SoundInstance3D.cpp              |  2 +-
 src/MilesLib/SoundManager.cpp                 |  2 +-
 src/MilesLib/Type.cpp                         | 14 +++---
 src/PRTerrainLib/TextureSet.cpp               |  6 +--
 src/UserInterface/GameType.cpp                |  4 +-
 src/UserInterface/InstanceBase.cpp            | 50 +++++++++----------
 src/UserInterface/InstanceBaseBattle.cpp      |  2 +-
 src/UserInterface/InstanceBaseEffect.cpp      |  2 +-
 src/UserInterface/PythonApplication.cpp       |  6 +--
 src/UserInterface/PythonBackgroundModule.cpp  |  2 +-
 src/UserInterface/PythonChatModule.cpp        |  2 +-
 src/UserInterface/PythonEventManager.cpp      |  4 +-
 src/UserInterface/PythonGuild.cpp             |  2 +-
 src/UserInterface/PythonNetworkStream.cpp     |  2 +-
 .../PythonNetworkStreamCommand.cpp            | 12 ++---
 .../PythonNetworkStreamModule.cpp             |  2 +-
 .../PythonNetworkStreamPhaseGame.cpp          | 14 +++---
 .../PythonNetworkStreamPhaseGameActor.cpp     |  2 +-
 .../PythonNetworkStreamPhaseGameItem.cpp      |  4 +-
 src/UserInterface/PythonPlayer.cpp            |  2 +-
 .../PythonPlayerEventHandler.cpp              |  4 +-
 src/UserInterface/PythonPlayerModule.cpp      |  4 +-
 src/UserInterface/PythonPlayerSkill.cpp       |  6 +--
 src/UserInterface/PythonQuest.cpp             |  4 +-
 src/UserInterface/PythonSkill.cpp             |  2 +-
 src/UserInterface/PythonTextTail.cpp          |  4 +-
 src/UserInterface/UserInterface.cpp           |  8 +--
 46 files changed, 120 insertions(+), 120 deletions(-)

diff --git a/src/EterGrnLib/Mesh.cpp b/src/EterGrnLib/Mesh.cpp
index 2586dd56..d028e7a6 100644
--- a/src/EterGrnLib/Mesh.cpp
+++ b/src/EterGrnLib/Mesh.cpp
@@ -199,7 +199,7 @@ bool CGrannyMesh::LoadTriGroupNodeList(CGrannyMaterialPalette& rkMtrlPal)
 
 void CGrannyMesh::RebuildTriGroupNodeList()
 {
-	assert(!"CGrannyMesh::RebuildTriGroupNodeList() - �� �����带 �ϴ°�- -?");
+	assert(!"CGrannyMesh::RebuildTriGroupNodeList() - \xBF\xD6 \xB8\xAE\xBA\xF4\xB5\xE5\xB8\xA6 \xC7\xCF\xB4\xC2\xB0\xA1- -?");
 	/*
 	int mtrlCount = m_pgrnMesh->MaterialBindingCount;
 	int GroupNodeCount = GrannyGetMeshTriangleGroupCount(m_pgrnMesh);
diff --git a/src/EterGrnLib/ModelInstanceModel.cpp b/src/EterGrnLib/ModelInstanceModel.cpp
index 29bdbbcc..443efcc7 100644
--- a/src/EterGrnLib/ModelInstanceModel.cpp
+++ b/src/EterGrnLib/ModelInstanceModel.cpp
@@ -281,7 +281,7 @@ const float * CGrannyModelInstance::GetCompositeBoneMatrixPointer(int iBone) con
 
 void CGrannyModelInstance::ReloadTexture()
 {
-	assert("���� ������� ���� - CGrannyModelInstance::ReloadTexture()");
+	assert("\xC7\xF6\xC0\xE7 \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xC0\xBD - CGrannyModelInstance::ReloadTexture()");
 /*
 	assert(m_pModel != NULL);
 	const CGrannyMaterialPalette & c_rGrannyMaterialPalette = m_pModel->GetMaterialPalette();
diff --git a/src/EterLib/GrpText.cpp b/src/EterLib/GrpText.cpp
index a47d64fc..395238a0 100644
--- a/src/EterLib/GrpText.cpp
+++ b/src/EterLib/GrpText.cpp
@@ -38,9 +38,9 @@ bool CGraphicText::OnLoad(int /*iSize*/, const void* /*c_pvBuf*/)
 	bool bItalic = false;
 
 	// format
-	// ����.fnt		"����" ��Ʈ �⺻ ������ 12 �� �ε�
-	// ����:18.fnt  "����" ��Ʈ ������ 18 �� �ε�
-	// ����:14i.fnt "����" ��Ʈ ������ 14 & ���Ÿ����� �ε�
+	// ����.fnt		"\xB1\xBC\xB8\xB2" ��Ʈ �⺻ ������ 12 �� �ε�
+	// ����:18.fnt  "\xB1\xBC\xB8\xB2" ��Ʈ ������ 18 �� �ε�
+	// ����:14i.fnt "\xB1\xBC\xB8\xB2" ��Ʈ ������ 14 & ���Ÿ����� �ε�
 	const char * p = strrchr(GetFileName(), ':');
 
 	if (p)
diff --git a/src/EterLib/GrpTextInstance.cpp b/src/EterLib/GrpTextInstance.cpp
index 0b3e4145..aa93bbb7 100644
--- a/src/EterLib/GrpTextInstance.cpp
+++ b/src/EterLib/GrpTextInstance.cpp
@@ -126,7 +126,7 @@ void CGraphicTextInstance::Update()
 
 	if (m_roText.IsNull())
 	{
-		Tracef("CGraphicTextInstance::Update - ��Ʈ�� �������� �ʾҽ��ϴ�\n");
+		Tracef("CGraphicTextInstance::Update - \xC6\xF9\xC6\xAE\xB0\xA1 \xBC\xB3\xC1\xA4\xB5\xC7\xC1\xF6 \xBE\xCA\xBE\xD2\xBD\xC0\xB4\xCF\xB4\xD9\n");
 		return;
 	}
 
diff --git a/src/EterLib/Profiler.h b/src/EterLib/Profiler.h
index a9cc7a73..4b68d93f 100644
--- a/src/EterLib/Profiler.h
+++ b/src/EterLib/Profiler.h
@@ -74,7 +74,7 @@ class CProfiler : public CSingleton<CProfiler>
 			{
 				CGraphicTextInstance * pGraphicTextInstance = CGraphicTextInstance::New();
 
-				CResource * pResource = CResourceManager::Instance().GetResourcePointer("����ü.fnt");
+				CResource * pResource = CResourceManager::Instance().GetResourcePointer("\xB1\xBC\xB8\xB2\xC3\xBC.fnt");
 				pGraphicTextInstance->Clear();
 				pGraphicTextInstance->SetTextPointer(static_cast<CGraphicText*>(pResource));
 
@@ -114,7 +114,7 @@ class CProfiler : public CSingleton<CProfiler>
 
 				CGraphicTextInstance * pGraphicTextInstance = m_GraphicTextInstancePool.Alloc();
 
-				CResource * pResource = CResourceManager::Instance().GetResourcePointer("����ü.fnt");
+				CResource * pResource = CResourceManager::Instance().GetResourcePointer("\xB1\xBC\xB8\xB2\xC3\xBC.fnt");
 				pGraphicTextInstance->Clear();
 				pGraphicTextInstance->SetTextPointer(static_cast<CGraphicText*>(pResource));
 
diff --git a/src/EterLib/Util.cpp b/src/EterLib/Util.cpp
index 70988e67..d7913374 100644
--- a/src/EterLib/Util.cpp
+++ b/src/EterLib/Util.cpp
@@ -214,13 +214,13 @@ const char* GetFontFaceFromCodePage9x(WORD codePage)
 	switch( codePage )
 	{
 	case CP_932:
-		return "�l�r �o�S�V�b�N";
+		return "\x82l\x82r \x82o\x83S\x83V\x83b\x83N";
 	case CP_949:
-		return "����ü";
+		return "\xB1\xBC\xB8\xB2\xC3\xBC";
 	case CP_936:
-		return "����";
+		return "\xCB\xCE\xCC\xE5";
 	case CP_950:
-		return "�ө���";
+		return "\xB2\xD3\xA9\xFA\xC5\xE9";
 	case CP_874:
 		return "Tahoma";
 	case CP_1252:
diff --git a/src/EterLocale/StringCodec_Vietnamese.cpp b/src/EterLocale/StringCodec_Vietnamese.cpp
index eab89785..110376f2 100644
--- a/src/EterLocale/StringCodec_Vietnamese.cpp
+++ b/src/EterLocale/StringCodec_Vietnamese.cpp
@@ -370,7 +370,7 @@ static bool DecomposeLetter(wchar_t input, char* letter)
 	case 0x201c: // L'“'
 		*letter = (char)'"';
 		return true;
-	case 0x201d: // L'”'
+	case 0x201d: // L'\xE2\x80\x9D'
 		*letter = (char)'"';
 		return true;
 	}
diff --git a/src/EterPythonLib/PythonWindow.cpp b/src/EterPythonLib/PythonWindow.cpp
index fd273253..66d91d58 100644
--- a/src/EterPythonLib/PythonWindow.cpp
+++ b/src/EterPythonLib/PythonWindow.cpp
@@ -93,7 +93,7 @@ namespace UI
 		m_bShow = false;
 	}
 
-	// NOTE : IsShow�� "�ڽ��� ���̴°�?" ������, __IsShowing�� "�ڽ��� �׷����� �ִ°�?" �� üũ�Ѵ�
+	// NOTE : IsShow�� "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" ������, __IsShowing�� "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" �� üũ�Ѵ�
 	//        �ڽ��� Show ���� Tree ������ Parent �� �ϳ��� Hide �� �� �����Ƿ�.. - [levites]
 	bool CWindow::IsRendering()
 	{
diff --git a/src/EterPythonLib/PythonWindowManagerModule.cpp b/src/EterPythonLib/PythonWindowManagerModule.cpp
index 4e9fb4dc..47d092cc 100644
--- a/src/EterPythonLib/PythonWindowManagerModule.cpp
+++ b/src/EterPythonLib/PythonWindowManagerModule.cpp
@@ -1260,7 +1260,7 @@ PyObject * wndMgrSetSlotCoolTime(PyObject * poSelf, PyObject * poArgs)
 
 PyObject * wndMgrSetToggleSlot(PyObject * poSelf, PyObject * poArgs)
 {
-	assert(!"wndMgrSetToggleSlot - ������� �ʴ� �Լ�");
+	assert(!"wndMgrSetToggleSlot - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6");
 	return Py_BuildNone();
 }
 
diff --git a/src/GameLib/ActorInstanceBattle.cpp b/src/GameLib/ActorInstanceBattle.cpp
index 64b464ab..38d11517 100644
--- a/src/GameLib/ActorInstanceBattle.cpp
+++ b/src/GameLib/ActorInstanceBattle.cpp
@@ -176,7 +176,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 		// �̹� �Է� �Ѱ� �ð��� �����ٸ�..
 		if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime())
 		{
-			//Tracen("�Է� �Ѱ� �ð� ����");
+			//Tracen("\xC0\xD4\xB7\xC2 \xC7\xD1\xB0\xE8 \xBD\xC3\xB0\xA3 \xC1\xF6\xB3\xB2");
 			if (IsBowMode())
 				m_isNextPreInput = TRUE;
 			return false;
@@ -184,14 +184,14 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 
 		if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // �޺� �ߵ� �ð� �� �Ķ��
 		{
-			//Tracen("���� �޺� ����");
+			//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
 			// args : BlendingTime
 			__RunNextCombo();
 			return true;
 		}
 		else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // �� �Է� �ð� ���� ���..
 		{
-			//Tracen("�� �Է� ����");
+			//Tracen("\xBC\xB1 \xC0\xD4\xB7\xC2 \xBC\xB3\xC1\xA4");
 			m_isPreInput = TRUE;
 			return false;
 		}
@@ -201,7 +201,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 		float fElapsedTime = GetAttackingElapsedTime();	
 		if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // �޺� �ߵ� �ð� �� �Ķ��
 		{
-			//Tracen("���� �޺� ����");
+			//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
 			// args : BlendingTime
 			__RunNextCombo();
 			return true;
@@ -229,7 +229,7 @@ void CActorInstance::ComboProcess()
 		// Process PreInput
 		if (m_isPreInput)
 		{
-			//Tracenf("���Է� %f �����޺��ð� %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime());
+			//Tracenf("\xBC\xB1\xC0\xD4\xB7\xC2 %f \xB4\xD9\xC0\xBD\xC4\xDE\xBA\xB8\xBD\xC3\xB0\xA3 %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime());
 			if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime())
 			{
   				__RunNextCombo();
diff --git a/src/GameLib/ActorInstanceMotion.cpp b/src/GameLib/ActorInstanceMotion.cpp
index 338c7ff8..586b3459 100644
--- a/src/GameLib/ActorInstanceMotion.cpp
+++ b/src/GameLib/ActorInstanceMotion.cpp
@@ -65,7 +65,7 @@ void CActorInstance::ReservingMotionProcess()
 		case CRaceMotionData::NAME_STAND_UP_BACK:
 			if (IsFaint())
 			{
-				//Tracenf("�Ͼ���� ������ ������");
+				//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xB1\xE2\xC0\xFD\xC1\xDF");
 
 				SetEndStopMotion();
 
@@ -98,7 +98,7 @@ void CActorInstance::ReservingMotionProcess()
 		case CRaceMotionData::NAME_STAND_UP_BACK:
 			if (IsDead())
 			{
-				//Tracenf("�Ͼ���� ������ ���");
+				//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xBB\xE7\xB8\xC1");
 				// ���� �����ͷ� ����
 				m_kCurMotNode=kPrevMotionNode;
 				__ClearMotion(); 
@@ -668,7 +668,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 		{
 			if (!m_isMain)
 			{
-				Logn(0, "���ΰ��� �ƴ϶�� �̵����̶� ������ ������ ������ ����");
+				Logn(0, "\xC1\xD6\xC0\xCE\xB0\xF8\xC0\xCC \xBE\xC6\xB4\xCF\xB6\xF3\xB8\xE9 \xC0\xCC\xB5\xBF\xC1\xDF\xC0\xCC\xB6\xF3 \xB5\xA5\xB9\xCC\xC1\xF6 \xB5\xBF\xC0\xDB\xC0\xBB \xC3\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xC0\xBD");
 				return false;
 			}
 		}
@@ -757,7 +757,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 
 				// NOTE : ClearCombo() �� �����ؼ��� �ȵȴ�.
 				//        �޺� ������ ��ų�� �̾ ����� ��� m_pkCurRaceMotionData���� �ʱ�ȭ �Ǿ� ������.
-				//Tracef("MotionData�� �޺� ����Ÿ�� ��� ���� �ʽ��ϴ�.\n");
+				//Tracef("MotionData\xBF\xA1 \xC4\xDE\xBA\xB8 \xB5\xA5\xC0\xCC\xC5\xB8\xB0\xA1 \xB5\xE9\xBE\xEE \xC0\xD6\xC1\xF6 \xBE\xCA\xBD\xC0\xB4\xCF\xB4\xD9.\n");
 			}
 		}
 	}
diff --git a/src/GameLib/ActorInstanceRotation.cpp b/src/GameLib/ActorInstanceRotation.cpp
index 3d052eee..a95070a1 100644
--- a/src/GameLib/ActorInstanceRotation.cpp
+++ b/src/GameLib/ActorInstanceRotation.cpp
@@ -62,7 +62,7 @@ void CActorInstance::RotationProcess()
 		m_fcurRotation = m_rotEnd;
 	}
 
-	// FIXME : "�ǹ��϶��� üũ"�� �ٲ۴�. - [levites]
+	// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"�� �ٲ۴�. - [levites]
 	if (0.0f != m_rotX || 0.0f != m_rotY)
 	{
 		CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation);
diff --git a/src/GameLib/ItemData.cpp b/src/GameLib/ItemData.cpp
index c0afb27e..48f64fde 100644
--- a/src/GameLib/ItemData.cpp
+++ b/src/GameLib/ItemData.cpp
@@ -203,7 +203,7 @@ void CItemData::__SetIconImage(const char * c_szFileName)
 {
 	if (!CResourceManager::Instance().IsFileExist(c_szFileName))
 	{
-		TraceError("%s ������ �����ϴ�.CItemData::__SetIconImage",c_szFileName);
+		TraceError("%s \xC6\xC4\xC0\xCF\xC0\xCC \xBE\xF8\xBD\xC0\xB4\xCF\xB4\xD9.CItemData::__SetIconImage",c_szFileName);
 		m_pIconImage = NULL;
 	}
 	else if (m_pIconImage == NULL) 
diff --git a/src/GameLib/MapBase.cpp b/src/GameLib/MapBase.cpp
index b1957f1d..c27c615d 100644
--- a/src/GameLib/MapBase.cpp
+++ b/src/GameLib/MapBase.cpp
@@ -57,7 +57,7 @@ bool CMapBase::LoadProperty()
 	
 	if (!LoadMultipleTextData(strFileName.c_str(), stTokenVectorMap))
 	{
-		TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR ������ ���� ���ɼ��� �����ϴ�.", strFileName.c_str());
+		TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR \xC6\xC4\xC0\xCF\xC0\xCC \xBE\xF8\xC0\xBB \xB0\xA1\xB4\xC9\xBC\xBA\xC0\xCC \xB8\xB9\xBD\xC0\xB4\xCF\xB4\xD9.", strFileName.c_str());
 		return false;
 	}
 
diff --git a/src/GameLib/MapManager.cpp b/src/GameLib/MapManager.cpp
index 356a45ea..0d7128c7 100644
--- a/src/GameLib/MapManager.cpp
+++ b/src/GameLib/MapManager.cpp
@@ -184,7 +184,7 @@ float CMapManager::GetHeight(float fx, float fy)
 {
 	if (!m_pkMap)
 	{
-		TraceError("CMapManager::GetHeight(%f, %f) - ���� �������� ���� ���¿��� ����", fx, fy);
+		TraceError("CMapManager::GetHeight(%f, %f) - \xB8\xCA\xC0\xCC \xBB\xFD\xBC\xBA\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xBB\xF3\xC5\xC2\xBF\xA1\xBC\xAD \xC1\xA2\xB1\xD9", fx, fy);
 		return 0.0f;
 	}
 	CMapOutdoor& rkMap=GetMapOutdoorRef();
@@ -195,7 +195,7 @@ float CMapManager::GetTerrainHeight(float fx, float fy)
 {
 	if (!m_pkMap)
 	{
-		TraceError("CMapManager::GetTerrainHeight(%f, %f) - ���� �������� ���� ���¿��� ����", fx, fy);
+		TraceError("CMapManager::GetTerrainHeight(%f, %f) - \xB8\xCA\xC0\xCC \xBB\xFD\xBC\xBA\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xBB\xF3\xC5\xC2\xBF\xA1\xBC\xAD \xC1\xA2\xB1\xD9", fx, fy);
 		return 0.0f;
 	}
 	CMapOutdoor& rkMap=GetMapOutdoorRef();
@@ -206,7 +206,7 @@ bool CMapManager::GetWaterHeight(int iX, int iY, long * plWaterHeight)
 {
 	if (!m_pkMap)
 	{
-		TraceError("CMapManager::GetTerrainHeight(%f, %f) - ���� �������� ���� ���¿��� ����", iX, iY);
+		TraceError("CMapManager::GetTerrainHeight(%f, %f) - \xB8\xCA\xC0\xCC \xBB\xFD\xBC\xBA\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xBB\xF3\xC5\xC2\xBF\xA1\xBC\xAD \xC1\xA2\xB1\xD9", iX, iY);
 		return false;
 	}
 
diff --git a/src/GameLib/MapOutdoorLoad.cpp b/src/GameLib/MapOutdoorLoad.cpp
index 99d55cd1..55835996 100644
--- a/src/GameLib/MapOutdoorLoad.cpp
+++ b/src/GameLib/MapOutdoorLoad.cpp
@@ -398,7 +398,7 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName)
 	{
 #ifdef WORLD_EDITOR
 		// TextureSet �� ����Ǿ� ���� �ʾƵ� ����
-		LogBox("TextureSet �� ����Ǿ����� ���� �� �Դϴ�.\n���� �ؽ��� �۾��� �����Ͻñ� �ٶ��ϴ�.");
+		LogBox("TextureSet \xC0\xCC \xC0\xFB\xBF\xEB\xB5\xC7\xBE\xEE\xC0\xD6\xC1\xF6 \xBE\xCA\xC0\xBA \xB8\xCA \xC0\xD4\xB4\xCF\xB4\xD9.\n\xC1\xF6\xC7\xFC \xC5\xD8\xBD\xBA\xC3\xE7 \xC0\xDB\xBE\xF7\xBF\xA1 \xC1\xD6\xC0\xC7\xC7\xCF\xBD\xC3\xB1\xE2 \xB9\xD9\xB6\xF8\xB4\xCF\xB4\xD9.");
 #else
 		TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str());
 		return false;
diff --git a/src/GameLib/MapOutdoorUpdate.cpp b/src/GameLib/MapOutdoorUpdate.cpp
index 5fdf9ecb..7337f05a 100644
--- a/src/GameLib/MapOutdoorUpdate.cpp
+++ b/src/GameLib/MapOutdoorUpdate.cpp
@@ -742,7 +742,7 @@ void CMapOutdoor::UpdateTerrain(float fX, float fY)
 		
 		ConvertTerrainToTnL(lRealCenterX, lRealCenterY);
 		UpdateAreaList(lRealCenterX, lRealCenterY);
-		//Tracef("����ϴ� Area, Terrain : (%d, %d), ���� Area, Terrain : (%d, %d)\n",
+		//Tracef("\xBB\xE7\xBF\xEB\xC7\xCF\xB4\xC2 Area, Terrain : (%d, %d), \xC1\xF6\xBF\xEF Area, Terrain : (%d, %d)\n",
 		//	m_AreaVector.size(), m_TerrainVector.size(), m_AreaDeleteVector.size(), m_TerrainDeleteVector.size());		
 	}
 }
diff --git a/src/GameLib/MonsterAreaInfo.cpp b/src/GameLib/MonsterAreaInfo.cpp
index e7f0054f..a14fa614 100644
--- a/src/GameLib/MonsterAreaInfo.cpp
+++ b/src/GameLib/MonsterAreaInfo.cpp
@@ -126,12 +126,12 @@ void CMonsterAreaInfo::RemoveAllMonsters()
 
 	SetMonsterGroupID(0);
 	
-	m_strGroupName.assign("�̸�����");
-	m_strLeaderName.assign("�̸�����");
+	m_strGroupName.assign("\xC0\xCC\xB8\xA7\xBE\xF8\xC0\xBD");
+	m_strLeaderName.assign("\xC0\xCC\xB8\xA7\xBE\xF8\xC0\xBD");
 	SetMonsterGroupFollowerCount(0);
 	
 	SetMonsterVID(0);
-	m_strMonsterName.assign("�̸�����");
+	m_strMonsterName.assign("\xC0\xCC\xB8\xA7\xBE\xF8\xC0\xBD");
 
 	SetMonsterCount(0);
 	SetMonsterDirection(DIR_NORTH);
diff --git a/src/GameLib/PropertyManager.cpp b/src/GameLib/PropertyManager.cpp
index 7aa8e85a..f5a11841 100644
--- a/src/GameLib/PropertyManager.cpp
+++ b/src/GameLib/PropertyManager.cpp
@@ -225,7 +225,7 @@ bool CPropertyManager::Erase(DWORD dwCRC)
 	FILE * fp = fopen("property/reserve", "a+");
 
 	if (!fp)
-		LogBox("���� CRC ������ �� �� �����ϴ�.");
+		LogBox("\xBF\xB9\xBE\xE0 CRC \xC6\xC4\xC0\xCF\xC0\xBB \xBF\xAD \xBC\xF6 \xBE\xF8\xBD\xC0\xB4\xCF\xB4\xD9.");
 	else
 	{
 		char szCRC[64 + 1];
diff --git a/src/MilesLib/SoundInstance3D.cpp b/src/MilesLib/SoundInstance3D.cpp
index 42fcd9fe..eb1ea1c1 100644
--- a/src/MilesLib/SoundInstance3D.cpp
+++ b/src/MilesLib/SoundInstance3D.cpp
@@ -119,7 +119,7 @@ void CSoundInstance3D::SetPosition(float x, float y, float z) const
 void CSoundInstance3D::SetOrientation(float x_face, float y_face, float z_face, 
 									  float x_normal, float y_normal, float z_normal) const
 {
-	assert(!" CSoundInstance3D::SetOrientation - ��� ���� �ʴ� �Լ�");
+	assert(!" CSoundInstance3D::SetOrientation - \xBB\xE7\xBF\xEB \xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6");
 //	AIL_set_3D_orientation(m_sample, 
 //						   x_face, y_face, z_face,
 //						   x_normal, y_normal, z_normal);
diff --git a/src/MilesLib/SoundManager.cpp b/src/MilesLib/SoundManager.cpp
index c214b2d5..7d8ce91c 100644
--- a/src/MilesLib/SoundManager.cpp
+++ b/src/MilesLib/SoundManager.cpp
@@ -397,7 +397,7 @@ void CSoundManager::PlayCharacterSound3D(float fx, float fy, float fz, const cha
 			float fTime = itor->second;
 			if (CTimer::Instance().GetCurrentSecond() - fTime < 0.3f)
 			{
-				//Tracef("�Ȱ��� �Ҹ��� 0.3�� ���� �ٽ� �÷��� %s\n", c_szFileName);
+				//Tracef("\xB6\xC8\xB0\xB0\xC0\xBA \xBC\xD2\xB8\xAE\xB0\xA1 0.3\xC3\xCA \xB3\xBB\xBF\xA1 \xB4\xD9\xBD\xC3 \xC7\xC3\xB7\xB9\xC0\xCC %s\n", c_szFileName);
 				return;
 			}
 		}
diff --git a/src/MilesLib/Type.cpp b/src/MilesLib/Type.cpp
index 6456cd28..29258d6a 100644
--- a/src/MilesLib/Type.cpp
+++ b/src/MilesLib/Type.cpp
@@ -26,7 +26,7 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound
 	CTextFileLoader& rkTextFileLoader=*pkTextFileLoader;
 	if (rkTextFileLoader.IsEmpty())
 	{
-		SetResultString((strResult + " �� ������ �� �� ����").c_str());
+		SetResultString((strResult + " \xC0\xD0\xB1\xE2\xBF\xEB \xC6\xC4\xC0\xCF\xC0\xBB \xBF\xAD \xBC\xF6 \xBE\xF8\xC0\xBD").c_str());
 		return false;
 	}
 
@@ -35,7 +35,7 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound
 	int iCount;
 	if (!rkTextFileLoader.GetTokenInteger("sounddatacount", &iCount))
 	{
-		SetResultString((strResult + " ���� ���� ����, SoundDataCount�� � �� ����").c_str());
+		SetResultString((strResult + " \xC6\xC4\xC0\xCF \xC6\xF7\xB8\xE4 \xBF\xA1\xB7\xAF, SoundDataCount\xB8\xA6 \xC3\xA3\xC0\xBB \xBC\xF6 \xBE\xF8\xC0\xBD").c_str());
 		return false;
 	}
 
@@ -49,13 +49,13 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound
 		CTokenVector * pTokenVector;
 		if (!rkTextFileLoader.GetTokenVector(szSoundDataHeader, &pTokenVector))
 		{
-			SetResultString((strResult + " ���� ���� ����: " + szSoundDataHeader + " �� � �� ����").c_str());
+			SetResultString((strResult + " \xC6\xC4\xC0\xCF \xC6\xF7\xB8\xE4 \xBF\xA1\xB7\xAF: " + szSoundDataHeader + " \xB8\xA6 \xC3\xA3\xC0\xBB \xBC\xF6 \xBE\xF8\xC0\xBD").c_str());
 			return false;
 		}
 
 		if (2 != pTokenVector->size())
 		{
-			SetResultString((strResult + " ���� ���� ����: ���� ũ�Ⱑ 2�� �ƴ�").c_str());
+			SetResultString((strResult + " \xC6\xC4\xC0\xCF \xC6\xF7\xB8\xE4 \xBF\xA1\xB7\xAF: \xBA\xA4\xC5\xCD \xC5\xA9\xB1\xE2\xB0\xA1 2\xB0\xA1 \xBE\xC6\xB4\xD4").c_str());
 			return false;
 		}
 
@@ -71,7 +71,7 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound
 		}
 	}
 
-	SetResultString((strResult + " �ҷ���").c_str());
+	SetResultString((strResult + " \xBA\xD2\xB7\xAF\xBF\xC8").c_str());
 	return true;
 }
 
@@ -95,8 +95,8 @@ bool NSound::SaveSoundInformationPiece(const char * c_szFileName, NSound::TSound
 	{
 		char szErrorText[256+1];
 		_snprintf(szErrorText, sizeof(szErrorText), "Failed to save file (%s).\nPlease check if it is read-only or you have no space on the disk.\n", c_szFileName);
-		LogBox(szErrorText, "����");
-		SetResultString((strResult + " ����� ������ �� �� ����").c_str());
+		LogBox(szErrorText, "\xBF\xA1\xB7\xAF");
+		SetResultString((strResult + " \xBE\xB2\xB1\xE2\xBF\xEB \xC6\xC4\xC0\xCF\xC0\xBB \xBF\xAD \xBC\xF6 \xBE\xF8\xC0\xBD").c_str());
 		return false;
 	}
 
diff --git a/src/PRTerrainLib/TextureSet.cpp b/src/PRTerrainLib/TextureSet.cpp
index a429d869..0bf0f780 100644
--- a/src/PRTerrainLib/TextureSet.cpp
+++ b/src/PRTerrainLib/TextureSet.cpp
@@ -194,7 +194,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName,
 {
 	if (GetTextureCount() >= 256)
 	{
-		LogBox("�ؽ�ó�� �� �̻� �߰��� �� �����ϴ�.", "�ִ� �ؽ�ó ���� 255��");
+		LogBox("\xC5\xD8\xBD\xBA\xC3\xB3\xB8\xA6 \xB4\xF5 \xC0\xCC\xBB\xF3 \xC3\xDF\xB0\xA1\xC7\xD2 \xBC\xF6 \xBE\xF8\xBD\xC0\xB4\xCF\xB4\xD9.", "\xC3\xD6\xB4\xEB \xC5\xD8\xBD\xBA\xC3\xB3 \xB0\xB3\xBC\xF6 255\xB0\xB3");
 		return false;
 	}
 
@@ -202,7 +202,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName,
 	{
 		if (0 == m_Textures[i].stFilename.compare(c_szFileName))
 		{
-			LogBox("������ �̸��� �ؽ�ó�� �̹� �ֽ��ϴ�.", "�ߺ�");
+			LogBox("\xB5\xBF\xC0\xCF\xC7\xD1 \xC0\xCC\xB8\xA7\xC0\xC7 \xC5\xD8\xBD\xBA\xC3\xB3\xB0\xA1 \xC0\xCC\xB9\xCC \xC0\xD6\xBD\xC0\xB4\xCF\xB4\xD9.", "\xC1\xDF\xBA\xB9");
 			return false;
 		}
 	}
@@ -211,7 +211,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName,
 
 	if (!pResource->IsType(CGraphicImage::Type()))
 	{
-		LogBox("CTerrainImpl::GenerateTexture : �̹��� ������ �ƴմϴ�. %s", pResource->GetFileName());
+		LogBox("CTerrainImpl::GenerateTexture : \xC0\xCC\xB9\xCC\xC1\xF6 \xC6\xC4\xC0\xCF\xC0\xCC \xBE\xC6\xB4\xD5\xB4\xCF\xB4\xD9. %s", pResource->GetFileName());
 		return false;
 	}
 	
diff --git a/src/UserInterface/GameType.cpp b/src/UserInterface/GameType.cpp
index f57670a2..fc3114b5 100644
--- a/src/UserInterface/GameType.cpp
+++ b/src/UserInterface/GameType.cpp
@@ -7,8 +7,8 @@ std::string g_strImagePath = "d:/ymir work/ui/";
 std::string g_strGuildSymbolPathName = "mark/10/";
 
 // DEFAULT_FONT
-static std::string gs_strDefaultFontName = "����ü:12.fnt";
-static std::string gs_strDefaultItalicFontName = "����ü:12i.fnt";
+static std::string gs_strDefaultFontName = "\xB1\xBC\xB8\xB2\xC3\xBC:12.fnt";
+static std::string gs_strDefaultItalicFontName = "\xB1\xBC\xB8\xB2\xC3\xBC:12i.fnt";
 static CResource* gs_pkDefaultFont = NULL;
 static CResource* gs_pkDefaultItalicFont = NULL;
 
diff --git a/src/UserInterface/InstanceBase.cpp b/src/UserInterface/InstanceBase.cpp
index 4d4931f2..316623f3 100644
--- a/src/UserInterface/InstanceBase.cpp
+++ b/src/UserInterface/InstanceBase.cpp
@@ -410,7 +410,7 @@ void CInstanceBase::__EnableSkipCollision()
 {
 	if (__IsMainInstance())
 	{
-		TraceError("CInstanceBase::__EnableSkipCollision - �ڽ��� �浹�˻罺ŵ�� �Ǹ� �ȵȴ�!!");
+		TraceError("CInstanceBase::__EnableSkipCollision - \xC0\xDA\xBD\xC5\xC0\xBA \xC3\xE6\xB5\xB9\xB0\xCB\xBB\xE7\xBD\xBA\xC5\xB5\xC0\xCC \xB5\xC7\xB8\xE9 \xBE\xC8\xB5\xC8\xB4\xD9!!");
 		return;
 	}
 	m_GraphicThingInstance.EnableSkipCollision();
@@ -1189,8 +1189,8 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos
 {	
 	if (__IsMainInstance())
 	{
-		//assert(!"CInstanceBase::PushTCPState �÷��̾� �ڽſ��� �̵���Ŷ�� ���� �ȵȴ�!");
-		TraceError("CInstanceBase::PushTCPState �÷��̾� �ڽſ��� �̵���Ŷ�� ���� �ȵȴ�!");
+		//assert(!"CInstanceBase::PushTCPState \xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE \xC0\xDA\xBD\xC5\xBF\xA1\xB0\xD4 \xC0\xCC\xB5\xBF\xC6\xD0\xC5\xB6\xC0\xBA \xBF\xC0\xB8\xE9 \xBE\xC8\xB5\xC8\xB4\xD9!");
+		TraceError("CInstanceBase::PushTCPState \xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE \xC0\xDA\xBD\xC5\xBF\xA1\xB0\xD4 \xC0\xCC\xB5\xBF\xC6\xD0\xC5\xB6\xC0\xBA \xBF\xC0\xB8\xE9 \xBE\xC8\xB5\xC8\xB4\xD9!");
 		return;
 	}
 
@@ -1204,7 +1204,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos
 		m_dwBaseChkTime = ELTimer_GetFrameMSec()-nNetworkGap;
 		m_dwBaseCmdTime = dwCmdTime;
 
-		Tracenf("VID[%d] ��Ʈ���� [%d]", GetVirtualID(), nNetworkGap);
+		Tracenf("VID[%d] \xB3\xD7\xC6\xAE\xBF\xF7\xB0\xB8 [%d]", GetVirtualID(), nNetworkGap);
 	}
 	*/
 
@@ -1222,7 +1222,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos
 	//int nApplyGap=kCmdNew.m_dwChkTime-ELTimer_GetServerFrameMSec();
 
 	//if (nApplyGap<-500 || nApplyGap>500)
-	//	Tracenf("VID[%d] NAME[%s] ��Ʈ���� [cur:%d ave:%d] �۵��ð� (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap);
+	//	Tracenf("VID[%d] NAME[%s] \xB3\xD7\xC6\xAE\xBF\xF7\xB0\xB8 [cur:%d ave:%d] \xC0\xDB\xB5\xBF\xBD\xC3\xB0\xA3 (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap);
 }
 
 /*
@@ -1313,11 +1313,11 @@ void CInstanceBase::StateProcess()
 		TPixelPosition kPPosDir = kPPosDst - kPPosCur;
 		float fDirLen = (float)sqrt(kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y);
 
-		//Tracenf("�Ÿ� %f", fDirLen);
+		//Tracenf("\xB0\xC5\xB8\xAE %f", fDirLen);
 
 		if (!__CanProcessNetworkStatePacket())
 		{
-			Lognf(0, "vid=%d ������ �� ���� ���¶� ��ŵ IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown());
+			Lognf(0, "vid=%d \xBF\xF2\xC1\xF7\xC0\xCF \xBC\xF6 \xBE\xF8\xB4\xC2 \xBB\xF3\xC5\xC2\xB6\xF3 \xBD\xBA\xC5\xB5 IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown());
 			return;
 		}
 
@@ -1330,7 +1330,7 @@ void CInstanceBase::StateProcess()
 		{
 			case FUNC_WAIT:
 			{
-				//Tracenf("%s (%f, %f) -> (%f, %f) �����Ÿ� %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen);
+				//Tracenf("%s (%f, %f) -> (%f, %f) \xB3\xB2\xC0\xBA\xB0\xC5\xB8\xAE %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen);
 				if (fDirLen > 1.0f)
 				{
 					//NEW_GetSrcPixelPositionRef() = kPPosCur;
@@ -1348,11 +1348,11 @@ void CInstanceBase::StateProcess()
 					if (!IsWalking())
 						StartWalking();
 
-					//Tracen("��ǥ����");
+					//Tracen("\xB8\xF1\xC7\xA5\xC1\xA4\xC1\xF6");
 				}
 				else
 				{
-					//Tracen("���� ����");
+					//Tracen("\xC7\xF6\xC0\xE7 \xC1\xA4\xC1\xF6");
 
 					m_isGoing = FALSE;
 
@@ -1381,12 +1381,12 @@ void CInstanceBase::StateProcess()
 
 				if (!IsWalking())
 				{
-					//Tracen("�Ȱ� ���� �ʾ� �ȱ� ����");
+					//Tracen("\xB0\xC8\xB0\xED \xC0\xD6\xC1\xF6 \xBE\xCA\xBE\xC6 \xB0\xC8\xB1\xE2 \xBD\xC3\xC0\xDB");
 					StartWalking();
 				}
 				else
 				{
-					//Tracen("�̹� �ȴ��� ");
+					//Tracen("\xC0\xCC\xB9\xCC \xB0\xC8\xB4\xC2\xC1\xDF ");
 				}
 				break;
 			}
@@ -1409,7 +1409,7 @@ void CInstanceBase::StateProcess()
 				}
 				else
 				{
-					//Tracen("��� ���� ����");
+					//Tracen("\xB4\xEB\xB1\xE2 \xB0\xF8\xB0\xDD \xC1\xA4\xC1\xF6");
 
 					m_isGoing = FALSE;
 
@@ -1440,11 +1440,11 @@ void CInstanceBase::StateProcess()
 					if (!IsWalking())
 						StartWalking();
 
-					//Tracen("�ʹ� �־ �̵� �� ����");
+					//Tracen("\xB3\xCA\xB9\xAB \xB8\xD6\xBE\xEE\xBC\xAD \xC0\xCC\xB5\xBF \xC8\xC4 \xB0\xF8\xB0\xDD");
 				}
 				else
 				{
-					//Tracen("�븻 ���� ����");
+					//Tracen("\xB3\xEB\xB8\xBB \xB0\xF8\xB0\xDD \xC1\xA4\xC1\xF6");
 
 					m_isGoing = FALSE;
 
@@ -1456,7 +1456,7 @@ void CInstanceBase::StateProcess()
 
 					RunNormalAttack(fRotDst);
 
-					//Tracen("������ ������ ���� ����");
+					//Tracen("\xB0\xA1\xB1\xF5\xB1\xE2 \xB6\xA7\xB9\xAE\xBF\xA1 \xBF\xF6\xC7\xC1 \xB0\xF8\xB0\xDD");
 				}
 				break;
 			}
@@ -1540,11 +1540,11 @@ void CInstanceBase::StateProcess()
 						if (!IsWalking())
 							StartWalking();
 
-						//Tracen("�ʹ� �־ �̵� �� ����");
+						//Tracen("\xB3\xCA\xB9\xAB \xB8\xD6\xBE\xEE\xBC\xAD \xC0\xCC\xB5\xBF \xC8\xC4 \xB0\xF8\xB0\xDD");
 					}
 					else
 					{
-						//Tracen("��ų ����");
+						//Tracen("\xBD\xBA\xC5\xB3 \xC1\xA4\xC1\xF6");
 
 						m_isGoing = FALSE;
 
@@ -1556,7 +1556,7 @@ void CInstanceBase::StateProcess()
 						SetRotation(fRotDst);
 
 						NEW_UseSkill(0, eFunc & 0x7f, uArg&0x0f, (uArg>>4) ? true : false);
-						//Tracen("������ ������ ���� ����");
+						//Tracen("\xB0\xA1\xB1\xF5\xB1\xE2 \xB6\xA7\xB9\xAE\xBF\xA1 \xBF\xF6\xC7\xC1 \xB0\xF8\xB0\xDD");
 					}
 				}
 				break;
@@ -1604,7 +1604,7 @@ void CInstanceBase::MovementProcess()
 				if (IsWalking())
 					EndWalking();
 
-				//Tracen("��ǥ ���� ����");
+				//Tracen("\xB8\xF1\xC7\xA5 \xB5\xB5\xB4\xDE \xC1\xA4\xC1\xF6");
 
 				m_isGoing = FALSE;
 
@@ -1636,7 +1636,7 @@ void CInstanceBase::MovementProcess()
 
 				float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, NEW_GetDstPixelPositionRef());
 				SetAdvancingRotation(fDstRot);
-				//Tracenf("VID %d ���� ���⼳�� (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen);			
+				//Tracenf("VID %d \xBF\xC0\xB9\xF6 \xB9\xE6\xC7\xE2\xBC\xB3\xC1\xA4 (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen);			
 
 				// �̵����̶�� �������� ���߰� �Ѵ�
 				if (FUNC_MOVE == m_kMovAfterFunc.eFunc)
@@ -1651,11 +1651,11 @@ void CInstanceBase::MovementProcess()
 				{
 					__DisableSkipCollision();
 
-					//Tracen("��� ���¶� ���� ��ŵ");
+					//Tracen("\xBB\xE7\xB8\xC1 \xBB\xF3\xC5\xC2\xB6\xF3 \xB5\xBF\xC0\xDB \xBD\xBA\xC5\xB5");
 
 					m_isGoing = FALSE;
 
-					//Tracen("�ൿ �Ҵ� ���¶� ���� ���� ��ŵ");
+					//Tracen("\xC7\xE0\xB5\xBF \xBA\xD2\xB4\xC9 \xBB\xF3\xC5\xC2\xB6\xF3 \xC0\xCC\xC8\xC4 \xB5\xBF\xC0\xDB \xBD\xBA\xC5\xB5");
 				}
 				else
 				{
@@ -1737,7 +1737,7 @@ void CInstanceBase::MovementProcess()
 							}
 							else
 							{
-								//Tracenf("VID %d ��ų ���� (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot);
+								//Tracenf("VID %d \xBD\xBA\xC5\xB3 \xB0\xF8\xB0\xDD (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot);
 
 								__DisableSkipCollision();
 								m_isGoing = FALSE;
@@ -1751,7 +1751,7 @@ void CInstanceBase::MovementProcess()
 									EndWalking();
 								}
 
-								//Tracenf("VID %d ���� (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking());
+								//Tracenf("VID %d \xC1\xA4\xC1\xF6 (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking());
 							}
 							break;
 						}
diff --git a/src/UserInterface/InstanceBaseBattle.cpp b/src/UserInterface/InstanceBaseBattle.cpp
index 94eb4df7..37160d1f 100644
--- a/src/UserInterface/InstanceBaseBattle.cpp
+++ b/src/UserInterface/InstanceBaseBattle.cpp
@@ -497,7 +497,7 @@ BOOL CInstanceBase::CheckAdvancing()
 
 	if (m_GraphicThingInstance.CanSkipCollision())
 	{
-		//Tracenf("%x VID %d �浹 ��ŵ", ELTimer_GetMSec(), GetVirtualID());
+		//Tracenf("%x VID %d \xC3\xE6\xB5\xB9 \xBD\xBA\xC5\xB5", ELTimer_GetMSec(), GetVirtualID());
 		return FALSE;
 	}
 
diff --git a/src/UserInterface/InstanceBaseEffect.cpp b/src/UserInterface/InstanceBaseEffect.cpp
index 52390165..c183d678 100644
--- a/src/UserInterface/InstanceBaseEffect.cpp
+++ b/src/UserInterface/InstanceBaseEffect.cpp
@@ -178,7 +178,7 @@ void CInstanceBase::ProcessDamage()
 	{
 		if(index > 7)
 		{
-			TraceError("ProcessDamage���ѷ��� ���ɼ�");
+			TraceError("ProcessDamage\xB9\xAB\xC7\xD1\xB7\xE7\xC7\xC1 \xB0\xA1\xB4\xC9\xBC\xBA");
 			break;
 		}
 		num = damage%10;
diff --git a/src/UserInterface/PythonApplication.cpp b/src/UserInterface/PythonApplication.cpp
index a6b2b8a6..449052c8 100644
--- a/src/UserInterface/PythonApplication.cpp
+++ b/src/UserInterface/PythonApplication.cpp
@@ -527,7 +527,7 @@ bool CPythonApplication::Process()
 		if ( dt >= 500 )
 		{
 			s_uiNextFrameTime += nAdjustTime; 
-			printf("FrameSkip ���� %d\n",nAdjustTime);
+			printf("FrameSkip \xBA\xB8\xC1\xA4 %d\n",nAdjustTime);
 			CTimer::Instance().Adjust(nAdjustTime);
 		}
 
@@ -549,7 +549,7 @@ bool CPythonApplication::Process()
 	//	if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime)
 	//	{
 	//		s_uiNextFrameTime += dt / uiFrameTime * uiFrameTime; 
-	//		printf("FrameSkip ���� %d\n", dt / uiFrameTime * uiFrameTime);
+	//		printf("FrameSkip \xBA\xB8\xC1\xA4 %d\n", dt / uiFrameTime * uiFrameTime);
 	//		CTimer::Instance().Adjust((dt / uiFrameTime) * uiFrameTime);
 	//		s_bFrameSkip = true;
 	//	}
@@ -609,7 +609,7 @@ bool CPythonApplication::Process()
 	//m_pyNetworkStream.AbsoluteExitGame();
 
 	/*
-	TraceError("���� ������ ��ŵ���� ������ �����մϴ�");
+	TraceError("\xB9\xAB\xC7\xD1 \xC7\xC1\xB7\xB9\xC0\xD3 \xBD\xBA\xC5\xB5\xC0\xB8\xB7\xCE \xC1\xA2\xBC\xD3\xC0\xBB \xC1\xBE\xB7\xE1\xC7\xD5\xB4\xCF\xB4\xD9");
 
 	{
 	FILE* fp=fopen("errorlog.txt", "w");
diff --git a/src/UserInterface/PythonBackgroundModule.cpp b/src/UserInterface/PythonBackgroundModule.cpp
index ae5dcef1..44c9983d 100644
--- a/src/UserInterface/PythonBackgroundModule.cpp
+++ b/src/UserInterface/PythonBackgroundModule.cpp
@@ -248,7 +248,7 @@ PyObject * backgroundRenderCharacterShadowToTexture(PyObject * poSelf, PyObject
 
 PyObject * backgroundRenderDungeon(PyObject * poSelf, PyObject * poArgs)
 {
-	assert(!"background.RenderDungeon() - ������� �ʴ� �Լ��Դϴ� - [levites]");
+	assert(!"background.RenderDungeon() - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6\xC0\xD4\xB4\xCF\xB4\xD9 - [levites]");
 	return Py_BuildNone();
 }
 
diff --git a/src/UserInterface/PythonChatModule.cpp b/src/UserInterface/PythonChatModule.cpp
index d8fb01ab..af47afb1 100644
--- a/src/UserInterface/PythonChatModule.cpp
+++ b/src/UserInterface/PythonChatModule.cpp
@@ -436,7 +436,7 @@ PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)
 			}
 
 			if (isAttr)
-				//"item:��ȣ:�÷���:����0:����1:����2"
+				//"item:\xB9\xF8\xC8\xA3:\xC7\xC3\xB7\xA1\xB1\xD7:\xBC\xD2\xC4\xCF0:\xBC\xD2\xC4\xCF1:\xBC\xD2\xC4\xCF2"
 				snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
 			else
 				snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
diff --git a/src/UserInterface/PythonEventManager.cpp b/src/UserInterface/PythonEventManager.cpp
index 345a0047..1a48e1f6 100644
--- a/src/UserInterface/PythonEventManager.cpp
+++ b/src/UserInterface/PythonEventManager.cpp
@@ -585,7 +585,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet)
 			const char * name = GetArgument("name", ScriptCommand.argList);
 			
 			// ����Ʈ UI �������� �Ǹ� �ذ� �ǹǷ� �ϴ� ��ȥ���� ���� by chrislee
-			if (!strcmp(name, "������ ��ȥ��?....")) {
+			if (!strcmp(name, "\xC1\xB6\xB0\xA2\xB3\xAD \xBF\xEB\xC8\xA5\xBC\xAE?....")) {
 				PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", ""));
 			}
 			else {
@@ -1146,7 +1146,7 @@ void CPythonEventManager::SetLeftTimeString(const char * c_szString)
 }
 
 CPythonEventManager::CPythonEventManager()
-	: m_poInterface(0), m_strLeftTimeString("���� �ð� : %d��")
+	: m_poInterface(0), m_strLeftTimeString("\xB3\xB2\xC0\xBA \xBD\xC3\xB0\xA3 : %d\xC3\xCA")
 {
 	EventTypeMap["LETTER"]=EVENT_TYPE_LETTER;
 	EventTypeMap["COLOR"]=EVENT_TYPE_COLOR;
diff --git a/src/UserInterface/PythonGuild.cpp b/src/UserInterface/PythonGuild.cpp
index 4101458e..a65ef94e 100644
--- a/src/UserInterface/PythonGuild.cpp
+++ b/src/UserInterface/PythonGuild.cpp
@@ -515,7 +515,7 @@ PyObject * guildGetDragonPowerPoint(PyObject * poSelf, PyObject * poArgs)
 
 PyObject * guildGetGuildSkillLevel(PyObject * poSelf, PyObject * poArgs)
 {
-	assert(FALSE && !"guildGetGuildSkillLevel - ������� �ʴ� �Լ��Դϴ�.");
+	assert(FALSE && !"guildGetGuildSkillLevel - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6\xC0\xD4\xB4\xCF\xB4\xD9.");
 
 	int iSkillIndex;
 	if (!PyTuple_GetInteger(poArgs, 0, &iSkillIndex))
diff --git a/src/UserInterface/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp
index ebaececa..70217199 100644
--- a/src/UserInterface/PythonNetworkStream.cpp
+++ b/src/UserInterface/PythonNetworkStream.cpp
@@ -655,7 +655,7 @@ bool CPythonNetworkStream::RecvDefaultPacket(int header)
 	if (!header)
 		return true;
 
-	TraceError("ó������ ���� ��Ŷ ��� %d, state %s\n", header, m_strPhase.c_str());
+	TraceError("\xC3\xB3\xB8\xAE\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xC6\xD0\xC5\xB6 \xC7\xEC\xB4\xF5 %d, state %s\n", header, m_strPhase.c_str());
 	ClearRecvBuffer();
 	return true;
 }
diff --git a/src/UserInterface/PythonNetworkStreamCommand.cpp b/src/UserInterface/PythonNetworkStreamCommand.cpp
index 10dcd095..3f1fee60 100644
--- a/src/UserInterface/PythonNetworkStreamCommand.cpp
+++ b/src/UserInterface/PythonNetworkStreamCommand.cpp
@@ -121,7 +121,7 @@ bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char
 
 		pstTokenVector->push_back(strLine.substr(beginPos, endPos - beginPos));
 
-		// �߰� �ڵ�. �ǵڿ� ���� �ִ� ��츦 üũ�Ѵ�. - [levites]
+		// \xC3\xDF\xB0\xA1 \xC4\xDA\xB5\xE5. \xB8\xC7\xB5\xDA\xBF\xA1 \xC5\xC7\xC0\xCC \xC0\xD6\xB4\xC2 \xB0\xE6\xBF\xEC\xB8\xA6 \xC3\xBC\xC5\xA9\xC7\xD1\xB4\xD9. - [levites]
 		if (int(strLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
 			break;
 	} while (basePos < strLine.length());
@@ -131,7 +131,7 @@ bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char
 
 void CPythonNetworkStream::ServerCommand(char * c_szCommand)
 {
-	// #0000811: [M2EU] �ܼ�â ��� ���� 
+	// #0000811: [M2EU] \xC4\xDC\xBC\xD6\xC3\xA2 \xB1\xE2\xB4\xC9 \xC2\xF7\xB4\xDC 
 	if (strcmpi(c_szCommand, "ConsoleEnable") == 0)
 		return;
 
@@ -246,7 +246,7 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand)
 		else if ("r_list" == TokenVector[1])
 		{
 			// result list (/cube r_list npcVNUM resultCount resultText)
-			// 20383 4 72723,1/72725,1/72730.1/50001,5 <- �̷������� "/" ���ڷ� ���е� ����Ʈ�� ��
+			// 20383 4 72723,1/72725,1/72730.1/50001,5 <- \xC0\xCC\xB7\xB1\xBD\xC4\xC0\xB8\xB7\xCE "/" \xB9\xAE\xC0\xDA\xB7\xCE \xB1\xB8\xBA\xD0\xB5\xC8 \xB8\xAE\xBD\xBA\xC6\xAE\xB8\xA6 \xC1\xDC
 			if (5 != TokenVector.size())
 			{
 				TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5);
@@ -260,9 +260,9 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand)
 		else if ("m_info" == TokenVector[1])
 		{
 			// material list (/cube m_info requestStartIndex resultCount MaterialText)
-			// ex) requestStartIndex: 0, resultCount : 5 - �ش� NPC�� ����� �ִ� ������ �� 0~4��°�� �ش��ϴ� �������� ����� �� �ʿ��� ��� ������ MaterialText�� �������
-			// �� ����ó�� �������� �ټ��� ��� ������ "@" ���ڸ� ���
-			// 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- �̷������� �������� Ŭ��� ����Ʈ�� ��
+			// ex) requestStartIndex: 0, resultCount : 5 - \xC7\xD8\xB4\xE7 NPC\xB0\xA1 \xB8\xB8\xB5\xE9\xBC\xF6 \xC0\xD6\xB4\xC2 \xBE\xC6\xC0\xCC\xC5\xDB \xC1\xDF 0~4\xB9\xF8\xC2\xB0\xBF\xA1 \xC7\xD8\xB4\xE7\xC7\xCF\xB4\xC2 \xBE\xC6\xC0\xCC\xC5\xDB\xC0\xBB \xB8\xB8\xB5\xE5\xB4\xC2 \xB5\xA5 \xC7\xCA\xBF\xE4\xC7\xD1 \xB8\xF0\xB5\xE7 \xC0\xE7\xB7\xE1\xB5\xE9\xC0\xCC MaterialText\xBF\xA1 \xB5\xE9\xBE\xEE\xC0\xD6\xC0\xBD
+			// \xC0\xA7 \xBF\xB9\xBD\xC3\xC3\xB3\xB7\xB3 \xBE\xC6\xC0\xCC\xC5\xDB\xC0\xCC \xB4\xD9\xBC\xF6\xC0\xCE \xB0\xE6\xBF\xEC \xB1\xB8\xBA\xD0\xC0\xDA "@" \xB9\xAE\xC0\xDA\xB8\xA6 \xBB\xE7\xBF\xEB
+			// 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- \xC0\xCC\xB7\xB1\xBD\xC4\xC0\xB8\xB7\xCE \xBC\xAD\xB9\xF6\xBF\xA1\xBC\xAD \xC5\xAC\xB6\xF3\xB7\xCE \xB8\xAE\xBD\xBA\xC6\xAE\xB8\xA6 \xC1\xDC
 
 			if (5 != TokenVector.size())
 			{
diff --git a/src/UserInterface/PythonNetworkStreamModule.cpp b/src/UserInterface/PythonNetworkStreamModule.cpp
index c467c90c..f918f409 100644
--- a/src/UserInterface/PythonNetworkStreamModule.cpp
+++ b/src/UserInterface/PythonNetworkStreamModule.cpp
@@ -1551,7 +1551,7 @@ PyObject* netSendRequestRefineInfoPacket(PyObject* poSelf, PyObject* poArgs)
 
 //	CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
 //	rns.SendRequestRefineInfoPacket(iSlotIndex);
-	assert(!"netSendRequestRefineInfoPacket - ���̻� ������� �ʴ� �Լ� �Դϴ�");
+	assert(!"netSendRequestRefineInfoPacket - \xB4\xF5\xC0\xCC\xBB\xF3 \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6 \xC0\xD4\xB4\xCF\xB4\xD9");
 
 	return Py_BuildNone();
 }
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
index adc65796..44c1472a 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
@@ -1278,7 +1278,7 @@ bool CPythonNetworkStream::RecvChatPacket()
 	buf[uChatSize]='\0';
 	
 	// ���� �ƶ� ���� ó��
-	// "�̸�: ����" �Է��� "����: �̸�" ������ ����ϱ� ���� ��(0x08)�� ����
+	// "\xC0\xCC\xB8\xA7: \xB3\xBB\xBF\xEB" �Է��� "\xB3\xBB\xBF\xEB: \xC0\xCC\xB8\xA7" ������ ����ϱ� ���� ��(0x08)�� ����
 	// ���� �ƶ��� ��ȣ�� ó���� (����1) : (����2) �� �ԷµǾ (����2) : (����1) �� ����ϰ� �����
 	if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256)
 	{
@@ -1558,7 +1558,7 @@ bool CPythonNetworkStream::RecvDeadPacket()
 		CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
 		if (pkInstMain==pkChrInstSel)
 		{
-			Tracenf("���ΰ� ���");
+			Tracenf("\xC1\xD6\xC0\xCE\xB0\xF8 \xBB\xE7\xB8\xC1");
 			if (false == pkInstMain->GetDuelMode())
 			{
 				PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()"));
@@ -2303,7 +2303,7 @@ bool CPythonNetworkStream::RecvSkillCoolTimeEnd()
 
 bool CPythonNetworkStream::RecvSkillLevel()
 {
-	assert(!"CPythonNetworkStream::RecvSkillLevel - ������� �ʴ� �Լ�");
+	assert(!"CPythonNetworkStream::RecvSkillLevel - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6");
 	TPacketGCSkillLevel packet;
 	if (!Recv(sizeof(TPacketGCSkillLevel), &packet))
 	{
@@ -2529,7 +2529,7 @@ bool CPythonNetworkStream::RecvAddFlyTargetingPacket()
 
 	__GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY);
 
-	Tracef("VID [%d]�� Ÿ���� �߰� ����\n",kPacket.dwShooterVID);
+	Tracef("VID [%d]\xB0\xA1 \xC5\xB8\xB0\xD9\xC0\xBB \xC3\xDF\xB0\xA1 \xBC\xB3\xC1\xA4\n",kPacket.dwShooterVID);
 
 	CPythonCharacterManager & rpcm = CPythonCharacterManager::Instance();
 
@@ -4251,7 +4251,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacket()
 
 //#ifdef _DEBUG
 //	char szBuf[256+1];
-//	_snprintf(szBuf, sizeof(szBuf), "Ÿ���� ���� �Ǿ����ϴ� [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName);
+//	_snprintf(szBuf, sizeof(szBuf), "\xC5\xB8\xB0\xD9\xC0\xCC \xBB\xFD\xBC\xBA \xB5\xC7\xBE\xFA\xBD\xC0\xB4\xCF\xB4\xD9 [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName);
 //	CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
 //	Tracef(" >> RecvTargetCreatePacket %d : %s\n", kTargetCreate.lID, kTargetCreate.szTargetName);
 //#endif
@@ -4280,7 +4280,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacketNew()
 
 //#ifdef _DEBUG
 //	char szBuf[256+1];
-//	_snprintf(szBuf, sizeof(szBuf), "ij���� Ÿ���� ���� �Ǿ����ϴ� [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID);
+//	_snprintf(szBuf, sizeof(szBuf), "\xC4\xB3\xB8\xAF\xC5\xCD \xC5\xB8\xB0\xD9\xC0\xCC \xBB\xFD\xBC\xBA \xB5\xC7\xBE\xFA\xBD\xC0\xB4\xCF\xB4\xD9 [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID);
 //	CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
 //	Tracef(" >> RecvTargetCreatePacketNew %d : %d/%d\n", kTargetCreate.lID, kTargetCreate.byType, kTargetCreate.dwVID);
 //#endif
@@ -4303,7 +4303,7 @@ bool CPythonNetworkStream::RecvTargetUpdatePacket()
 
 //#ifdef _DEBUG
 //	char szBuf[256+1];
-//	_snprintf(szBuf, sizeof(szBuf), "Ÿ���� ��ġ�� ���� �Ǿ����ϴ� [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
+//	_snprintf(szBuf, sizeof(szBuf), "\xC5\xB8\xB0\xD9\xC0\xC7 \xC0\xA7\xC4\xA1\xB0\xA1 \xB0\xBB\xBD\xC5 \xB5\xC7\xBE\xFA\xBD\xC0\xB4\xCF\xB4\xD9 [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
 //	CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
 //	Tracef(" >> RecvTargetUpdatePacket %d : %d, %d\n", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
 //#endif
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
index 48ab65aa..c11f2224 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
@@ -173,7 +173,7 @@ bool CPythonNetworkStream::RecvCharacterAdditionalInfo()
 
 bool CPythonNetworkStream::RecvCharacterAppendPacketNew()
 {
-	TraceError("TPacketGCCharacterAdd2�� ���� �ʴ� ��Ŷ�Դϴ�.");
+	TraceError("TPacketGCCharacterAdd2\xB4\xC2 \xBE\xB2\xC1\xF6 \xBE\xCA\xB4\xC2 \xC6\xD0\xC5\xB6\xC0\xD4\xB4\xCF\xB4\xD9.");
 	TPacketGCCharacterAdd2 chrAddPacket;
 	if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
 		return false;
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
index eee1d81f..5606eee2 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
@@ -13,7 +13,7 @@
 
 bool CPythonNetworkStream::SendSafeBoxMoneyPacket(BYTE byState, DWORD dwMoney)
 {
-	assert(!"CPythonNetworkStream::SendSafeBoxMoneyPacket - ������� �ʴ� �Լ�");
+	assert(!"CPythonNetworkStream::SendSafeBoxMoneyPacket - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6");
 	return false;
 
 //	TPacketCGSafeboxMoney kSafeboxMoney;
@@ -861,7 +861,7 @@ bool CPythonNetworkStream::RecvSpecialEffect()
 
 		
 		default:
-			TraceError("%d �� ���� ����� ����Ʈ ��ȣ�Դϴ�.TPacketGCSpecialEffect",kSpecialEffect.type);
+			TraceError("%d \xB4\xC2 \xBE\xF8\xB4\xC2 \xBD\xBA\xC6\xE4\xBC\xC8 \xC0\xCC\xC6\xE5\xC6\xAE \xB9\xF8\xC8\xA3\xC0\xD4\xB4\xCF\xB4\xD9.TPacketGCSpecialEffect",kSpecialEffect.type);
 			break;
 	}
 
diff --git a/src/UserInterface/PythonPlayer.cpp b/src/UserInterface/PythonPlayer.cpp
index ae12e446..b0a13458 100644
--- a/src/UserInterface/PythonPlayer.cpp
+++ b/src/UserInterface/PythonPlayer.cpp
@@ -978,7 +978,7 @@ float CPythonPlayer::GetSkillNextEfficientPercentage(DWORD dwSlotIndex)
 
 void CPythonPlayer::SetSkillLevel(DWORD dwSlotIndex, DWORD dwSkillLevel)
 {
-	assert(!"CPythonPlayer::SetSkillLevel - ������� �ʴ� �Լ�");
+	assert(!"CPythonPlayer::SetSkillLevel - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6");
 	if (dwSlotIndex >= SKILL_MAX_NUM)
 		return;
 
diff --git a/src/UserInterface/PythonPlayerEventHandler.cpp b/src/UserInterface/PythonPlayerEventHandler.cpp
index 72d22eb4..615bd4f5 100644
--- a/src/UserInterface/PythonPlayerEventHandler.cpp
+++ b/src/UserInterface/PythonPlayerEventHandler.cpp
@@ -260,7 +260,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx
 {
 	return;
 
-	Tracef("Shoot : �ٸ� target�� �¾ҽ��ϴ� : %d, %d\n", dwSkillIndex, dwVID);
+	Tracef("Shoot : \xB4\xD9\xB8\xA5 target\xBF\xA1 \xB8\xC2\xBE\xD2\xBD\xC0\xB4\xCF\xB4\xD9 : %d, %d\n", dwSkillIndex, dwVID);
 
 	CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance();
 	rkStream.SendAttackPacket(dwSkillIndex, dwVID);
@@ -274,7 +274,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx
 }
 void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnExplodingAtTarget(DWORD dwSkillIndex)
 {
-//	Tracef("Shoot : ���ϴ� target�� �¾ҽ��ϴ� : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID());
+//	Tracef("Shoot : \xBF\xF8\xC7\xCF\xB4\xC2 target\xBF\xA1 \xB8\xC2\xBE\xD2\xBD\xC0\xB4\xCF\xB4\xD9 : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID());
 //	CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance();
 //	rkStream.SendAttackPacket(dwSkillIndex, m_pInstTarget->GetVirtualID());
 }
diff --git a/src/UserInterface/PythonPlayerModule.cpp b/src/UserInterface/PythonPlayerModule.cpp
index 25fa502f..790e5973 100644
--- a/src/UserInterface/PythonPlayerModule.cpp
+++ b/src/UserInterface/PythonPlayerModule.cpp
@@ -1051,13 +1051,13 @@ PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)
 
 		if( GetDefaultCodePage() == CP_ARABIC ) {
 			if (isAttr)
-				//"item:��ȣ:�÷���:����0:����1:����2"
+				//"item:\xB9\xF8\xC8\xA3:\xC7\xC3\xB7\xA1\xB1\xD7:\xBC\xD2\xC4\xCF0:\xBC\xD2\xC4\xCF1:\xBC\xD2\xC4\xCF2"
 				snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
 			else
 				snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
 		} else {
 			if (isAttr)
-				//"item:��ȣ:�÷���:����0:����1:����2"
+				//"item:\xB9\xF8\xC8\xA3:\xC7\xC3\xB7\xA1\xB1\xD7:\xBC\xD2\xC4\xCF0:\xBC\xD2\xC4\xCF1:\xBC\xD2\xC4\xCF2"
 				snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
 			else
 				snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
diff --git a/src/UserInterface/PythonPlayerSkill.cpp b/src/UserInterface/PythonPlayerSkill.cpp
index 5e82696d..bbc6bea0 100644
--- a/src/UserInterface/PythonPlayerSkill.cpp
+++ b/src/UserInterface/PythonPlayerSkill.cpp
@@ -572,7 +572,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 					if (pSkillData->CanUseForMe())
 					{
 						pkInstTarget = pkInstMain;
-						Tracef(" [ALERT] ���ῡ�� ����ϴ� ����ӿ��� ������ Ÿ���� �Ǿ��־ �ڽſ��Է� �缳��\n");
+						Tracef(" [ALERT] \xB5\xBF\xB7\xE1\xBF\xA1\xB0\xD4 \xBB\xE7\xBF\xEB\xC7\xCF\xB4\xC2 \xB1\xE2\xBC\xFA\xC0\xD3\xBF\xA1\xB5\xB5 \xC0\xFB\xBF\xA1\xB0\xD4 \xC5\xB8\xB0\xD9\xC6\xC3 \xB5\xC7\xBE\xEE\xC0\xD6\xBE\xEE\xBC\xAD \xC0\xDA\xBD\xC5\xBF\xA1\xB0\xD4\xB7\xCE \xC0\xE7\xBC\xB3\xC1\xA4\n");
 					}
 					else
 					{
@@ -636,7 +636,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 			{
 				pkInstTarget = pkInstMain;
 				pkInstMain->SetFlyTargetInstance(*pkInstMain);
-				Tracef(" [ALERT] Ÿ���� ��� �÷��̾�� ����մϴ�\n");
+				Tracef(" [ALERT] \xC5\xB8\xB0\xD9\xC0\xCC \xBE\xF8\xBE\xEE\xBC\xAD \xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE\xBF\xA1\xB0\xD4 \xBB\xE7\xBF\xEB\xC7\xD5\xB4\xCF\xB4\xD9\n");
 			}
 			else if (pSkillData->IsNeedCorpse())
 			{
@@ -672,7 +672,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 		}
 		else
 		{
-			Tracenf("CPythonPlayer::__UseSkill(%d) - ȭ�� ���� ���� ������ �ؾ���", dwSlotIndex);
+			Tracenf("CPythonPlayer::__UseSkill(%d) - \xC8\xAD\xB8\xE9 \xB1\xE2\xC1\xD8 \xB9\xE6\xC7\xE2 \xBC\xB3\xC1\xA4\xC0\xBB \xC7\xD8\xBE\xDF\xC7\xD4", dwSlotIndex);
 		}
 	}
 
diff --git a/src/UserInterface/PythonQuest.cpp b/src/UserInterface/PythonQuest.cpp
index cd7e35e5..174d6838 100644
--- a/src/UserInterface/PythonQuest.cpp
+++ b/src/UserInterface/PythonQuest.cpp
@@ -140,8 +140,8 @@ void CPythonQuest::__Initialize()
 		test.dwIndex = i;
 		test.strIconFileName = "";
 		test.strTitle = _getf("test%d", i);
-		test.strClockName = "���� �ð�";
-		test.strCounterName = "���� ������";
+		test.strClockName = "\xB3\xB2\xC0\xBA \xBD\xC3\xB0\xA3";
+		test.strCounterName = "\xB3\xB2\xC0\xBA \xB8\xB6\xB8\xAE\xBC\xF6";
 		test.iClockValue = 1000;
 		test.iCounterValue = 1000;
 		test.iStartTime = 0;
diff --git a/src/UserInterface/PythonSkill.cpp b/src/UserInterface/PythonSkill.cpp
index 0a1f3aed..d2b98b9e 100644
--- a/src/UserInterface/PythonSkill.cpp
+++ b/src/UserInterface/PythonSkill.cpp
@@ -496,7 +496,7 @@ bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName)
 			int numGrade = atoi(TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str());
 			if (SKILL_EFFECT_COUNT < numGrade)
 			{
-				TraceError("%s[%s] �� ��� ����[%d]�� �Ѿ���ϴ�.",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT);
+				TraceError("%s[%s] \xB0\xA1 \xB5\xEE\xB1\xDE \xC1\xA6\xC7\xD1[%d]\xC0\xBB \xB3\xD1\xBE\xEE\xB0\xAC\xBD\xC0\xB4\xCF\xB4\xD9.",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT);
 				return false;
 			}
 			for (int iGrade = 0; iGrade < numGrade; iGrade++)
diff --git a/src/UserInterface/PythonTextTail.cpp b/src/UserInterface/PythonTextTail.cpp
index 29865954..86a5c3c8 100644
--- a/src/UserInterface/PythonTextTail.cpp
+++ b/src/UserInterface/PythonTextTail.cpp
@@ -447,7 +447,7 @@ void CPythonTextTail::ShowCharacterTextTail(DWORD VirtualID)
 
 	if (m_CharacterTextTailList.end() != std::find(m_CharacterTextTailList.begin(), m_CharacterTextTailList.end(), pTextTail))
 	{
-		//Tracef("�̹� ����Ʈ�� ���� : %d\n", VirtualID);
+		//Tracef("\xC0\xCC\xB9\xCC \xB8\xAE\xBD\xBA\xC6\xAE\xBF\xA1 \xC0\xD6\xC0\xBD : %d\n", VirtualID);
 		return;
 	}
 
@@ -478,7 +478,7 @@ void CPythonTextTail::ShowItemTextTail(DWORD VirtualID)
 
 	if (m_ItemTextTailList.end() != std::find(m_ItemTextTailList.begin(), m_ItemTextTailList.end(), pTextTail))
 	{
-		//Tracef("�̹� ����Ʈ�� ���� : %d\n", VirtualID);
+		//Tracef("\xC0\xCC\xB9\xCC \xB8\xAE\xBD\xBA\xC6\xAE\xBF\xA1 \xC0\xD6\xC0\xBD : %d\n", VirtualID);
 		return;
 	}
 
diff --git a/src/UserInterface/UserInterface.cpp b/src/UserInterface/UserInterface.cpp
index 122f191c..b3e0a999 100644
--- a/src/UserInterface/UserInterface.cpp
+++ b/src/UserInterface/UserInterface.cpp
@@ -239,20 +239,20 @@ bool PackInitialize(const char * c_pszFolder)
 	}
 
 #ifdef _DISTRIBUTE
-	Tracef("�˸�: �� ����Դϴ�.\n");
+	Tracef("\xBE\xCB\xB8\xB2: \xC6\xD1 \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
 	
 	//if (0 == strPackType.compare("FILE"))
 	//{
 	//	bPackFirst = FALSE;
-	//	Tracef("�˸�: ���� ����Դϴ�.\n");
+	//	Tracef("\xBE\xCB\xB8\xB2: \xC6\xC4\xC0\xCF \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
 	//}
 	//else
 	//{
-	//	Tracef("�˸�: �� ����Դϴ�.\n");
+	//	Tracef("\xBE\xCB\xB8\xB2: \xC6\xD1 \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
 	//}
 #else
 	bPackFirst = FALSE;
-	Tracef("�˸�: ���� ����Դϴ�.\n");
+	Tracef("\xBE\xCB\xB8\xB2: \xC6\xC4\xC0\xCF \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
 #endif
 
 	CTextFileLoader::SetCacheMode();

From 361a62853d6adc26d81260ce3534f7cfb071f9e7 Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Tue, 17 Dec 2024 22:41:21 +0100
Subject: [PATCH 2/8] convert comments in cpp files to utf8

---
 src/EffectLib/EffectInstance.cpp              |  2 +-
 src/EffectLib/EffectManager.cpp               |  6 +-
 src/EffectLib/ParticleInstance.cpp            | 16 ++--
 src/EffectLib/ParticleSystemInstance.cpp      | 10 +--
 src/EterBase/FileDir.cpp                      |  6 +-
 src/EterBase/FileLoader.cpp                   |  4 +-
 src/EterBase/MappedFile.cpp                   |  8 +-
 src/EterBase/Timer.cpp                        |  6 +-
 src/EterBase/Utils.cpp                        |  2 +-
 src/EterBase/lzo.cpp                          | 12 +--
 src/EterBase/tea.cpp                          | 18 ++--
 src/EterGrnLib/LODController.cpp              | 10 +--
 src/EterGrnLib/Material.cpp                   |  8 +-
 src/EterGrnLib/Mesh.cpp                       |  2 +-
 src/EterGrnLib/Model.cpp                      |  2 +-
 .../ModelInstanceCollisionDetection.cpp       |  2 +-
 src/EterGrnLib/ModelInstanceModel.cpp         |  6 +-
 src/EterGrnLib/ModelInstanceMotion.cpp        |  2 +-
 src/EterGrnLib/ModelInstanceRender.cpp        |  4 +-
 src/EterGrnLib/ThingInstance.cpp              |  6 +-
 src/EterImageLib/TGAImage.cpp                 | 14 +--
 src/EterLib/AttributeData.cpp                 |  2 +-
 src/EterLib/Camera.cpp                        |  4 +-
 src/EterLib/CollisionData.cpp                 |  8 +-
 src/EterLib/CullingManager.cpp                |  2 +-
 src/EterLib/FileLoaderThread.cpp              |  2 +-
 src/EterLib/GrpBase.cpp                       |  4 +-
 src/EterLib/GrpDevice.cpp                     |  6 +-
 src/EterLib/GrpExpandedImageInstance.cpp      |  2 +-
 src/EterLib/GrpFontTexture.cpp                |  2 +-
 src/EterLib/GrpImage.cpp                      |  2 +-
 src/EterLib/GrpImageInstance.cpp              |  4 +-
 src/EterLib/GrpImageTexture.cpp               |  2 +-
 src/EterLib/GrpLightManager.cpp               | 12 +--
 src/EterLib/GrpMarkInstance.cpp               |  2 +-
 src/EterLib/GrpScreen.cpp                     |  8 +-
 src/EterLib/GrpText.cpp                       |  6 +-
 src/EterLib/GrpTextInstance.cpp               | 88 +++++++++----------
 src/EterLib/GrpVertexBufferStatic.cpp         |  2 +-
 src/EterLib/IME.cpp                           |  8 +-
 src/EterLib/Input.cpp                         |  4 +-
 src/EterLib/LensFlare.cpp                     |  2 +-
 src/EterLib/Resource.cpp                      |  4 +-
 src/EterLib/ResourceManager.cpp               | 16 ++--
 src/EterLib/SkyBox.cpp                        |  6 +-
 src/EterLib/TextTag.cpp                       | 16 ++--
 src/EterLib/Util.cpp                          |  8 +-
 src/EterLib/parser.cpp                        | 10 +--
 src/EterLocale/Arabic.cpp                     |  4 +-
 src/EterLocale/StringCodec_Vietnamese.cpp     |  4 +-
 src/EterPack/EterPack.cpp                     | 58 ++++++------
 src/EterPack/EterPackManager.cpp              | 12 +--
 src/EterPythonLib/PythonGraphicTextModule.cpp |  8 +-
 src/EterPythonLib/PythonGridSlotWindow.cpp    | 22 ++---
 src/EterPythonLib/PythonSlotWindow.cpp        | 18 ++--
 src/EterPythonLib/PythonWindow.cpp            | 16 ++--
 src/EterPythonLib/PythonWindowManager.cpp     | 16 ++--
 .../PythonWindowManagerModule.cpp             |  6 +-
 src/GameLib/ActorInstance.cpp                 | 18 ++--
 src/GameLib/ActorInstanceAttach.cpp           | 10 +--
 src/GameLib/ActorInstanceBattle.cpp           | 42 ++++-----
 .../ActorInstanceCollisionDetection.cpp       | 50 +++++------
 src/GameLib/ActorInstanceData.cpp             |  2 +-
 src/GameLib/ActorInstanceFly.cpp              |  2 +-
 src/GameLib/ActorInstanceMotion.cpp           | 38 ++++----
 src/GameLib/ActorInstanceMotionEvent.cpp      |  4 +-
 src/GameLib/ActorInstanceRender.cpp           |  4 +-
 src/GameLib/ActorInstanceRotation.cpp         |  2 +-
 src/GameLib/Area.cpp                          | 18 ++--
 src/GameLib/AreaLoaderThread.cpp              |  2 +-
 src/GameLib/AreaTerrain.cpp                   | 10 +--
 src/GameLib/FlyTrace.cpp                      |  4 +-
 src/GameLib/FlyingInstance.cpp                |  8 +-
 src/GameLib/GameType.cpp                      |  4 +-
 src/GameLib/GameUtil.cpp                      | 14 +--
 src/GameLib/ItemData.cpp                      | 12 +--
 src/GameLib/MapBase.cpp                       |  6 +-
 src/GameLib/MapManager.cpp                    |  2 +-
 src/GameLib/MapOutdoor.cpp                    |  4 +-
 src/GameLib/MapOutdoorLoad.cpp                | 18 ++--
 src/GameLib/MapOutdoorQuadtree.cpp            |  2 +-
 src/GameLib/MapOutdoorRender.cpp              | 16 ++--
 src/GameLib/MapOutdoorRenderHTP.cpp           |  8 +-
 src/GameLib/MapOutdoorRenderSTP.cpp           |  2 +-
 src/GameLib/MapOutdoorUpdate.cpp              |  4 +-
 src/GameLib/MapOutdoorWater.cpp               |  6 +-
 src/GameLib/PhysicsObject.cpp                 |  8 +-
 src/GameLib/Property.cpp                      | 16 ++--
 src/GameLib/PropertyLoader.cpp                |  4 +-
 src/GameLib/PropertyManager.cpp               |  8 +-
 src/GameLib/RaceData.cpp                      |  8 +-
 src/GameLib/RaceDataFile.cpp                  |  4 +-
 src/GameLib/RaceManager.cpp                   |  6 +-
 src/GameLib/SnowEnvironment.cpp               |  2 +-
 src/GameLib/WeaponTrace.cpp                   |  4 +-
 src/MilesLib/SoundData.cpp                    |  2 +-
 src/MilesLib/SoundInstance2D.cpp              | 10 +--
 src/MilesLib/SoundInstance3D.cpp              | 12 +--
 src/MilesLib/SoundManager.cpp                 |  4 +-
 src/MilesLib/SoundManager3D.cpp               |  4 +-
 src/MilesLib/Type.cpp                         |  6 +-
 src/PRTerrainLib/TextureSet.cpp               |  4 +-
 src/ScriptLib/PythonUtils.cpp                 | 12 +--
 src/SpeedTreeLib/SpeedTreeForest.cpp          |  4 +-
 src/UserInterface/AccountConnector.cpp        | 20 ++---
 src/UserInterface/CameraProcedure.cpp         | 14 +--
 src/UserInterface/GameType.cpp                |  4 +-
 src/UserInterface/GuildMarkDownloader.cpp     | 16 ++--
 src/UserInterface/GuildMarkUploader.cpp       |  2 +-
 src/UserInterface/InstanceBase.cpp            | 88 +++++++++----------
 src/UserInterface/InstanceBaseBattle.cpp      | 30 +++----
 src/UserInterface/InstanceBaseEffect.cpp      | 36 ++++----
 src/UserInterface/InstanceBaseMovement.cpp    |  2 +-
 src/UserInterface/MarkImage.cpp               | 14 +--
 src/UserInterface/MarkManager.cpp             | 10 +--
 src/UserInterface/MovieMan.cpp                | 84 +++++++++---------
 src/UserInterface/NetworkActorManager.cpp     |  4 +-
 src/UserInterface/PythonApplication.cpp       | 68 +++++++-------
 src/UserInterface/PythonApplicationCamera.cpp |  2 +-
 src/UserInterface/PythonApplicationCursor.cpp |  4 +-
 src/UserInterface/PythonApplicationEvent.cpp  |  2 +-
 src/UserInterface/PythonApplicationLogo.cpp   | 28 +++---
 src/UserInterface/PythonApplicationModule.cpp |  2 +-
 .../PythonApplicationProcedure.cpp            |  2 +-
 src/UserInterface/PythonBackground.cpp        |  2 +-
 src/UserInterface/PythonBackgroundModule.cpp  |  2 +-
 src/UserInterface/PythonCharacterManager.cpp  | 14 +--
 .../PythonCharacterManagerModule.cpp          | 16 ++--
 src/UserInterface/PythonCharacterModule.cpp   |  4 +-
 src/UserInterface/PythonChat.cpp              |  6 +-
 src/UserInterface/PythonEventManager.cpp      |  8 +-
 src/UserInterface/PythonExchange.cpp          |  6 +-
 src/UserInterface/PythonItem.cpp              |  6 +-
 src/UserInterface/PythonItemModule.cpp        | 68 +++++++-------
 src/UserInterface/PythonMiniMap.cpp           | 14 +--
 src/UserInterface/PythonNetworkStream.cpp     | 22 ++---
 .../PythonNetworkStreamPhaseGame.cpp          | 62 ++++++-------
 .../PythonNetworkStreamPhaseGameActor.cpp     | 20 ++---
 .../PythonNetworkStreamPhaseGameItem.cpp      |  8 +-
 .../PythonNetworkStreamPhaseLogin.cpp         |  4 +-
 src/UserInterface/PythonNonPlayer.cpp         |  2 +-
 src/UserInterface/PythonPackModule.cpp        |  4 +-
 src/UserInterface/PythonPlayer.cpp            |  6 +-
 .../PythonPlayerEventHandler.cpp              |  4 +-
 src/UserInterface/PythonPlayerInput.cpp       | 34 +++----
 src/UserInterface/PythonPlayerInputMouse.cpp  | 12 +--
 src/UserInterface/PythonPlayerModule.cpp      | 30 +++----
 src/UserInterface/PythonPlayerSkill.cpp       | 46 +++++-----
 src/UserInterface/PythonQuest.cpp             |  4 +-
 src/UserInterface/PythonSkill.cpp             | 16 ++--
 src/UserInterface/PythonSystem.cpp            | 18 ++--
 src/UserInterface/PythonTextTail.cpp          | 34 +++----
 src/UserInterface/UserInterface.cpp           | 34 +++----
 153 files changed, 955 insertions(+), 955 deletions(-)

diff --git a/src/EffectLib/EffectInstance.cpp b/src/EffectLib/EffectInstance.cpp
index 1e20d55a..e2618fdd 100644
--- a/src/EffectLib/EffectInstance.cpp
+++ b/src/EffectLib/EffectInstance.cpp
@@ -52,7 +52,7 @@ void CEffectInstance::UpdateSound()
 	{
 		CSoundManager& rkSndMgr=CSoundManager::Instance();
 		rkSndMgr.UpdateSoundInstance(m_matGlobal._41, m_matGlobal._42, m_matGlobal._43, m_dwFrame, m_pSoundInstanceVector);
-		// NOTE : ��Ʈ�������� ��ġ�� ���� ���´� - [levites]
+		// NOTE : 매트릭스에서 위치를 직접 얻어온다 - [levites]
 	}
 	++m_dwFrame;
 }
diff --git a/src/EffectLib/EffectManager.cpp b/src/EffectLib/EffectManager.cpp
index 480f825c..165ba3cb 100644
--- a/src/EffectLib/EffectManager.cpp
+++ b/src/EffectLib/EffectManager.cpp
@@ -48,7 +48,7 @@ bool CEffectManager::IsAliveEffect(DWORD dwInstanceIndex)
 void CEffectManager::Update()
 {
 
-	// 2004. 3. 1. myevan. ����Ʈ ����͸� �ϴ� �ڵ�
+	// 2004. 3. 1. myevan. 이펙트 모니터링 하는 코드
 	/*
 	if (GetAsyncKeyState(VK_F9))
 	{
@@ -173,8 +173,8 @@ BOOL CEffectManager::RegisterEffect(const char * c_szFileName,bool isExistDelete
 
 	return TRUE;
 }
-// CEffectData �� ������������ �����ϰ� �ϰ�..
-// CEffectData���� CRC�� ������ �ְ� �Ѵ�
+// CEffectData 를 포인터형으로 리턴하게 하고..
+// CEffectData에서 CRC를 얻을수 있게 한다
 BOOL CEffectManager::RegisterEffect2(const char * c_szFileName, DWORD* pdwRetCRC, bool isNeedCache)
 {	
 	std::string strFileName;
diff --git a/src/EffectLib/ParticleInstance.cpp b/src/EffectLib/ParticleInstance.cpp
index 21f77e91..298619ca 100644
--- a/src/EffectLib/ParticleInstance.cpp
+++ b/src/EffectLib/ParticleInstance.cpp
@@ -185,9 +185,9 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal)
 		case BILLBOARD_TYPE_ALL:
 		default:
 			{
-				// NOTE : Rotation Routine. Camera�� Up Vector�� Cross Vector ��ü�� View Vector ��������
-				//        Rotation ��Ų��.
-				// FIXME : �ݵ�� ����ȭ �� ��!
+				// NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로
+				//        Rotation 시킨다.
+				// FIXME : 반드시 최적화 할 것!
 				if (m_fRotation==0.0f)
 				{
 					v3Up = -c_rv3Cross;
@@ -239,7 +239,7 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal)
 				D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal);
 		}
 
-		// NOTE: �ӵ��� ���̿� �ִ� ���� : log(velocity)��ŭ �þ��.
+		// NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다.
 		float length = D3DXVec3Length(&v3Up);
 		if (length == 0.0f)
 		{
@@ -342,9 +342,9 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal, const float c_f
 		case BILLBOARD_TYPE_ALL:
 		default:
 			{
-				// NOTE : Rotation Routine. Camera�� Up Vector�� Cross Vector ��ü�� View Vector ��������
-				//        Rotation ��Ų��.
-				// FIXME : �ݵ�� ����ȭ �� ��!
+				// NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로
+				//        Rotation 시킨다.
+				// FIXME : 반드시 최적화 할 것!
 				if (m_fRotation==0.0f)
 				{
 					v3Up = -c_rv3Cross;
@@ -373,7 +373,7 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal, const float c_f
 				D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal);
 		}
 
-		// NOTE: �ӵ��� ���̿� �ִ� ���� : log(velocity)��ŭ �þ��.
+		// NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다.
 		float length = D3DXVec3Length(&v3Up);
 		if (length == 0.0f)
 		{
diff --git a/src/EffectLib/ParticleSystemInstance.cpp b/src/EffectLib/ParticleSystemInstance.cpp
index 6bccfdfe..b126bd4a 100644
--- a/src/EffectLib/ParticleSystemInstance.cpp
+++ b/src/EffectLib/ParticleSystemInstance.cpp
@@ -161,8 +161,8 @@ void CParticleSystemInstance::CreateParticles(float fElapsedTime)
 			D3DXVec3TransformCoord(&v3TimePosition, &v3TimePosition, mc_pmatLocal);
 		}
 		pInstance->m_v3StartPosition = v3TimePosition;
-		// NOTE : Update�� ȣ������ �ʰ� Rendering �DZ� ������ length�� 0�� �Ǵ� ������ �ִ�.
-		//        Velocity�� ���� �� �׸�ŭ ���� ������ �ʱ�ȭ ���ֵ��� �ٲ��� - [levites]
+		// NOTE : Update를 호출하지 않고 Rendering 되기 때문에 length가 0이 되는 문제가 있다.
+		//        Velocity를 구한 후 그만큼 빼준 값으로 초기화 해주도록 바꿨음 - [levites]
 		//pInstance->m_v3LastPosition = pInstance->m_v3Position;
 
 		// Direction & Velocity
@@ -212,8 +212,8 @@ void CParticleSystemInstance::CreateParticles(float fElapsedTime)
 		// Rotation
 		pInstance->m_fRotation = m_pParticleProperty->m_wRotationRandomStartingBegin;
 		pInstance->m_fRotation = frandom(m_pParticleProperty->m_wRotationRandomStartingBegin,m_pParticleProperty->m_wRotationRandomStartingEnd);
-		// Rotation - Lie �� ��� LocalMatrix �� Rotation ���� Random �� �����Ѵ�.
-		//            �Ź� �� �ʿ�� ������. ��� ������ ����ȭ�� �ʿ�. - [levites]
+		// Rotation - Lie 일 경우 LocalMatrix 의 Rotation 값을 Random 에 적용한다.
+		//            매번 할 필요는 없을듯. 어느 정도의 최적화가 필요. - [levites]
 		if (BILLBOARD_TYPE_LIE == m_pParticleProperty->m_byBillboardType && mc_pmatLocal)
 		{
 			pInstance->m_fRotation += fLieRotation;
@@ -486,7 +486,7 @@ void CParticleSystemInstance::OnInitialize()
 
 void CParticleSystemInstance::OnDestroy()
 {
-	// 2004. 3. 1. myevan. ��ƼŬ ���� ��ƾ
+	// 2004. 3. 1. myevan. 파티클 제거 루틴
 	TParticleInstanceListVector::iterator i;
 	for(i = m_ParticleInstanceListVector.begin(); i!=m_ParticleInstanceListVector.end(); ++i)
 	{
diff --git a/src/EterBase/FileDir.cpp b/src/EterBase/FileDir.cpp
index 8a207453..9c1412b1 100644
--- a/src/EterBase/FileDir.cpp
+++ b/src/EterBase/FileDir.cpp
@@ -60,9 +60,9 @@ bool CDir::Create(const char * c_szFilter, const char* c_szPath, BOOL bCheckedEx
 			if (!c_szExtension)
 				continue;
 
-			// NOTE : �ӽ� ���� - [levites]
-			//        ���������δ� ������ TRUE ���·� �����.
-			//        ������ �� ������Ʈ�� CDir�� ����ϴ� ������ Extension�� "wav", "gr2" �̷������� �ְԲ� �Ѵ�. - [levites]
+			// NOTE : 임시 변수 - [levites]
+			//        최종적으로는 무조건 TRUE 형태로 만든다.
+			//        그전에 전 프로젝트의 CDir을 사용하는 곳에서 Extension을 "wav", "gr2" 이런식으로 넣게끔 한다. - [levites]
 			if (bCheckedExtension)
 			{
 				std::string strFilter = c_szFilter;
diff --git a/src/EterBase/FileLoader.cpp b/src/EterBase/FileLoader.cpp
index 84144368..8a2c2793 100644
--- a/src/EterBase/FileLoader.cpp
+++ b/src/EterBase/FileLoader.cpp
@@ -72,7 +72,7 @@ int CMemoryTextFileLoader::SplitLine2(DWORD dwLine, CTokenVector* pstTokenVector
 
 		pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos));
 
-		// �߰� �ڵ�. �ǵڿ� ���� �ִ� ��츦 üũ�Ѵ�. - [levites]
+		// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
 		if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
 			break;
 	} while (basePos < c_rstLine.length());
@@ -116,7 +116,7 @@ bool CMemoryTextFileLoader::SplitLine(DWORD dwLine, CTokenVector* pstTokenVector
 
 		pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos));
 
-		// �߰� �ڵ�. �ǵڿ� ���� �ִ� ��츦 üũ�Ѵ�. - [levites]
+		// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
 		if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
 			break;
 	} while (basePos < c_rstLine.length());
diff --git a/src/EterBase/MappedFile.cpp b/src/EterBase/MappedFile.cpp
index 4745cb66..30b5e474 100644
--- a/src/EterBase/MappedFile.cpp
+++ b/src/EterBase/MappedFile.cpp
@@ -85,7 +85,7 @@ BYTE* CMappedFile::AppendDataBlock( const void* pBlock, DWORD dwBlockSize )
 
 void CMappedFile::Destroy()
 {
-	if (m_pLZObj)	// ����� �����Ͱ� �� �����ͷ� ���� �ȴ�
+	if (m_pLZObj)	// 압축된 데이터가 이 포인터로 연결 된다
 	{
 		delete m_pLZObj;
 		m_pLZObj = NULL;
@@ -144,7 +144,7 @@ int CMappedFile::Seek(DWORD offset, int iSeekType)
 	return m_seekPosition;
 }
 
-// 2004.09.16.myevan.MemoryMappedFile 98/ME ���� ���� ���� üũ
+// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
 //DWORD g_dwCount=0;
 
 int CMappedFile::Map(const void **dest, int offset, int size)
@@ -192,7 +192,7 @@ int CMappedFile::Map(const void **dest, int offset, int size)
 		return 0;
 	}
 	
-	// 2004.09.16.myevan.MemoryMappedFile 98/ME ���� ���� ���� üũ
+	// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
 	//g_dwCount++;
 	//Tracenf("MAPFILE %d", g_dwCount);
 	
@@ -247,7 +247,7 @@ void CMappedFile::Unmap(LPCVOID data)
 {	
 	if (UnmapViewOfFile(data))
 	{
-		// 2004.09.16.myevan.MemoryMappedFile 98/ME ���� ���� ���� üũ
+		// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
 		//g_dwCount--;
 		//Tracenf("UNMAPFILE %d", g_dwCount);
 	}
diff --git a/src/EterBase/Timer.cpp b/src/EterBase/Timer.cpp
index f1ec5f68..923b8294 100644
--- a/src/EterBase/Timer.cpp
+++ b/src/EterBase/Timer.cpp
@@ -27,7 +27,7 @@ BOOL ELTimer_Init()
 
 DWORD ELTimer_GetMSec()
 {
-	//assert(gs_dwBaseTime!=0 && "ELTimer_Init �� ���� �����ϼ���");
+	//assert(gs_dwBaseTime!=0 && "ELTimer_Init 를 먼저 실행하세요");
 	//LARGE_INTEGER liTickCount;
 	//QueryPerformanceCounter(&liTickCount);
 	return timeGetTime() - gs_dwBaseTime; //(liTickCount.QuadPart*1000  / gs_liTickCountPerSec.QuadPart)-gs_dwBaseTime;		
@@ -36,7 +36,7 @@ DWORD ELTimer_GetMSec()
 VOID	ELTimer_SetServerMSec(DWORD dwServerTime)
 {
 	NANOBEGIN
-	if (0 != dwServerTime) // nanomite�� ���� ���� if
+	if (0 != dwServerTime) // nanomite를 위한 더미 if
 	{
 		gs_dwServerTime = dwServerTime;
 		gs_dwClientTime = CTimer::instance().GetCurrentMillisecond();
@@ -70,7 +70,7 @@ CTimer::CTimer()
 	ELTimer_Init();
 
 	NANOBEGIN
-	if (this) // nanomite�� ���� ���� if
+	if (this) // nanomite를 위한 더미 if
 	{
 		m_dwCurrentTime = 0;
 		m_bUseRealTime = true;
diff --git a/src/EterBase/Utils.cpp b/src/EterBase/Utils.cpp
index e5f08dfd..859ddc61 100644
--- a/src/EterBase/Utils.cpp
+++ b/src/EterBase/Utils.cpp
@@ -433,7 +433,7 @@ void MyCreateDirectory(const char* path)
 
 	if (strlen(path) >= 3)
 	{
-		if (*(path + 1) == ':')	// C:, D: ���� ��츦 üũ
+		if (*(path + 1) == ':')	// C:, D: 같은 경우를 체크
 			path += 3;
 	}
 
diff --git a/src/EterBase/lzo.cpp b/src/EterBase/lzo.cpp
index 4541af62..0748e5ad 100644
--- a/src/EterBase/lzo.cpp
+++ b/src/EterBase/lzo.cpp
@@ -120,9 +120,9 @@ void CLZObject::BeginCompress(const void * pvIn, UINT uiInLen)
     m_pbIn = (const BYTE *) pvIn;
 	
     // sizeof(SHeader) +
-    // ��ȣȭ�� ���� fourCC 4����Ʈ
-    // ����� �� ������� �� �ִ� �ִ� �뷮 +
-    // ��ȣȭ�� ���� 8 ����Ʈ
+    // 암호화를 위한 fourCC 4바이트
+    // 압축된 후 만들어질 수 있는 최대 용량 +
+    // 암호화를 위한 8 바이트
     m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8;
 	
     m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize);
@@ -139,9 +139,9 @@ void CLZObject::BeginCompressInBuffer(const void * pvIn, UINT uiInLen, void * /*
     m_pbIn = (const BYTE *) pvIn;
 	
     // sizeof(SHeader) +
-    // ��ȣȭ�� ���� fourCC 4����Ʈ
-    // ����� �� ������� �� �ִ� �ִ� �뷮 +
-    // ��ȣȭ�� ���� 8 ����Ʈ
+    // 암호화를 위한 fourCC 4바이트
+    // 압축된 후 만들어질 수 있는 최대 용량 +
+    // 암호화를 위한 8 바이트
     m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8;
 	
     m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize);
diff --git a/src/EterBase/tea.cpp b/src/EterBase/tea.cpp
index dfa2a42c..a45f6fab 100644
--- a/src/EterBase/tea.cpp
+++ b/src/EterBase/tea.cpp
@@ -1,8 +1,8 @@
 /*
 *    Filename: tea.c
-* Description: TEA ��ȣȭ ���
+* Description: TEA 암호화 모듈
 *
-*      Author: ������ (aka. ��, Cronan), �ۿ��� (aka. myevan, ���ڷ�)
+*      Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
 */
 #include "StdAfx.h"
 #include "tea.h"
@@ -10,24 +10,24 @@
 
 /*
 * TEA Encryption Module Instruction
-*					Edited by ������ aka. ��, Cronan
+*					Edited by 김한주 aka. 비엽, Cronan
 *
 * void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
 * void tea_decode(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
-*   8����Ʈ�� ��ȣ/��ȣȭ �Ҷ� ���ȴ�. key �� 16 ����Ʈ���� �Ѵ�.
-*   sz, sy �� 8����Ʈ�� �������� �����Ѵ�. 
+*   8바이트를 암호/복호화 할때 사용된다. key 는 16 바이트여야 한다.
+*   sz, sy 는 8바이트의 역순으로 대입한다. 
 * 
 * int tea_decrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size);
 * int tea_encrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size);
-*   �Ѳ����� 8 ����Ʈ �̻��� ��ȣ/��ȣȭ �Ҷ� ����Ѵ�. ���� size ��
-*   8�� ����� �ƴϸ� 8�� ����� ũ�⸦ "�÷���" ��ȣȭ �Ѵ�. 
+*   한꺼번에 8 바이트 이상을 암호/복호화 할때 사용한다. 만약 size 가
+*   8의 배수가 아니면 8의 배수로 크기를 "늘려서" 암호화 한다. 
 *
 * ex. tea_code(pdwSrc[1], pdwSrc[0], pdwKey, pdwDest);
 *     tea_decrypt(pdwDest, pdwSrc, pdwKey, nSize);
 */
 
-#define TEA_ROUND		32		// 32 �� �����ϸ�, ���� ���� ����� ������ ����.
-#define DELTA			0x9E3779B9	// DELTA �� �ٲ��� ����.
+#define TEA_ROUND		32		// 32 를 권장하며, 높을 수록 결과가 난해해 진다.
+#define DELTA			0x9E3779B9	// DELTA 값 바꾸지 말것.
 
 void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
 {
diff --git a/src/EterGrnLib/LODController.cpp b/src/EterGrnLib/LODController.cpp
index 5fe92ef0..3095a766 100644
--- a/src/EterGrnLib/LODController.cpp
+++ b/src/EterGrnLib/LODController.cpp
@@ -282,8 +282,8 @@ void CGrannyLODController::AddModel(CGraphicThing * pThing, int iSrcModel, CGran
 	}
 	else
 	{
-		// FIXME : CModelInstance::m_pgrnWorldPose�� Update���� ����ϴµ�,
-		//         Deform�� ���� ������ NULL �Դϴ�. ������ ���� �ٲ��� ������.. - [levites]
+		// FIXME : CModelInstance::m_pgrnWorldPose를 Update에서 사용하는데,
+		//         Deform을 하지 않으면 NULL 입니다. 구조가 조금 바뀌어야 할지도.. - [levites]
  		pModelInstance->DeformNoSkin(&ms_matIdentity);
 	}	
 
@@ -460,10 +460,10 @@ void CGrannyLODController::UpdateLODLevel(float fDistanceFromCenter, float fDist
 	assert(m_pCurrentModelInstance != NULL);
 
 	
-	if (fDistanceFromCenter > LOD_APPLY_MIN) // �߽� LOD ���� ���
+	if (fDistanceFromCenter > LOD_APPLY_MIN) // 중심 LOD 예외 취소
 	{	
-		// ī�޶���� �־��� ���� fLODRate�� �۾�����
-		// 3�� LOD�� ������.. ���� �հ� 0, ����� ���� ���ڰ� Ŀ����
+		// 카메라부터 멀어질 수록 fLODRate가 작아진다
+		// 3개 LOD가 있을때.. 가장 먼게 0, 가까울 수록 숫자가 커진다
 
 		// 100fps 50fps 33fps 25fps 20fps
 		// 10ms 20ms 30ms 40ms 50ms
diff --git a/src/EterGrnLib/Material.cpp b/src/EterGrnLib/Material.cpp
index 70a7363c..b0a024f5 100644
--- a/src/EterGrnLib/Material.cpp
+++ b/src/EterGrnLib/Material.cpp
@@ -238,7 +238,7 @@ bool CGrannyMaterial::CreateFromGrannyMaterialPointer(granny_material * pgrnMate
 			pgrnOpacityTexture = GrannyGetMaterialTextureByType(m_pgrnMaterial, GrannyOpacityTexture);
 		}
 
-		// Two-Side �������� �ʿ��� �� �˻�
+		// Two-Side 렌더링이 필요한 지 검사
 		{			
 			granny_int32 twoSided = 0;
 			granny_data_type_definition TwoSidedFieldType[] =
@@ -262,7 +262,7 @@ bool CGrannyMaterial::CreateFromGrannyMaterialPointer(granny_material * pgrnMate
 	if (pgrnOpacityTexture)
 		m_roImage[1].SetPointer(__GetImagePointer(pgrnOpacityTexture->FromFileName));
 
-	// ���۽�Ƽ�� ������ ������ �޽�
+	// 오퍼시티가 있으면 블렌딩 메쉬
 	if (!m_roImage[1].IsNull())
 		m_eType = TYPE_BLEND_PNT;
 	else
@@ -285,7 +285,7 @@ void CGrannyMaterial::__ApplyDiffuseRenderState()
 
 	if (m_bTwoSideRender)
 	{
-		// -_-������ ���μ����� �� ������... Save & Restore �ϸ� ���������� �� ���δ�. �������� Save & Restore ��� ���� ������ ��.
+		// -_-렌더링 프로세스가 좀 구려서... Save & Restore 하면 순서때문에 좀 꼬인다. 귀찮으니 Save & Restore 대신 따로 저장해 둠.
 		m_dwLastCullRenderStateForTwoSideRendering = STATEMANAGER.GetRenderState(D3DRS_CULLMODE);
 		STATEMANAGER.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
 	}
@@ -511,7 +511,7 @@ DWORD CGrannyMaterialPalette::GetMaterialCount() const
 /*
 void CActorInstance::BeginSpecularRender()
 {
-	// NOTE - Blending�ؼ� ��� �κ��� Specular�� �����Ű�� �ʴ´� - [levites]
+	// NOTE - Blending해서 찍는 부분은 Specular를 적용시키지 않는다 - [levites]
 	STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
 
 	STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, D3DXCOLOR(1.0f, 1.0f, 1.0f, m_AddColor.r));
diff --git a/src/EterGrnLib/Mesh.cpp b/src/EterGrnLib/Mesh.cpp
index d028e7a6..7ddf0d80 100644
--- a/src/EterGrnLib/Mesh.cpp
+++ b/src/EterGrnLib/Mesh.cpp
@@ -159,7 +159,7 @@ bool CGrannyMesh::LoadTriGroupNodeList(CGrannyMaterialPalette& rkMtrlPal)
 	assert(m_triGroupNodes == NULL);
 
 	int mtrlCount		= m_pgrnMesh->MaterialBindingCount;
-	if (mtrlCount <= 0) // õ�� ���� 2�� ũ���� �߻�
+	if (mtrlCount <= 0) // 천의 동굴 2층 크래쉬 발생
 		return true;
 
 	int GroupNodeCount	= GrannyGetMeshTriangleGroupCount(m_pgrnMesh);
diff --git a/src/EterGrnLib/Model.cpp b/src/EterGrnLib/Model.cpp
index e054891b..8555a0da 100644
--- a/src/EterGrnLib/Model.cpp
+++ b/src/EterGrnLib/Model.cpp
@@ -155,7 +155,7 @@ bool CGrannyModel::LoadMeshs()
 	assert(m_meshs == NULL);
 	assert(m_pgrnModel != NULL);
 
-	if (m_pgrnModel->MeshBindingCount <= 0)	// �޽��� ���� ��
+	if (m_pgrnModel->MeshBindingCount <= 0)	// 메쉬가 없는 모델
 		return true;
 
 	granny_skeleton * pgrnSkeleton = m_pgrnModel->Skeleton;
diff --git a/src/EterGrnLib/ModelInstanceCollisionDetection.cpp b/src/EterGrnLib/ModelInstanceCollisionDetection.cpp
index 4b5c21bf..8f8b933d 100644
--- a/src/EterGrnLib/ModelInstanceCollisionDetection.cpp
+++ b/src/EterGrnLib/ModelInstanceCollisionDetection.cpp
@@ -239,7 +239,7 @@ void CGraphicThingInstance::DrawBoundBox()
 	D3DXVECTOR3 vtMax;
 
 	SetDiffuseColor(0.0f, 1.0f, 0.0f);
-	// ij���� ������ �ٿ�� �ڽ�
+	// 캐릭터 꽉차는 바운딩 박스
 	//GetBoundBox(&vtMin, &vtMax);
 	//DrawLineCube(vtMin.x, vtMin.y, vtMin.z, vtMax.x, vtMax.y, vtMax.z);
 	//const CThing::TMeshVector& rmeshVector=mc_pModel->meshVector;    
diff --git a/src/EterGrnLib/ModelInstanceModel.cpp b/src/EterGrnLib/ModelInstanceModel.cpp
index 443efcc7..faa16bfc 100644
--- a/src/EterGrnLib/ModelInstanceModel.cpp
+++ b/src/EterGrnLib/ModelInstanceModel.cpp
@@ -161,7 +161,7 @@ void CGrannyModelInstance::__CreateMeshMatrices()
 {
 	assert(m_pModel != NULL);
 	
-	if (m_pModel->GetMeshCount() <= 0) // �޽��� ���� (ī�޶� ����) �𵨵� ��Ȥ �ִ�..
+	if (m_pModel->GetMeshCount() <= 0) // 메쉬가 없는 (카메라 같은) 모델도 간혹 있다..
 		return;
 	
 	int meshCount = m_pModel->GetMeshCount();	
@@ -274,8 +274,8 @@ const float * CGrannyModelInstance::GetBoneMatrixPointer(int iBone) const
 
 const float * CGrannyModelInstance::GetCompositeBoneMatrixPointer(int iBone) const
 {
-	// NOTE : GrannyGetWorldPose4x4�� ������ ������ �߸����� �� ����.. �׷��ϰ� �ӵ��� ����
-	//        GrannyGetWorldPose4x4�� ��� matrix ���Ҹ� �� ������ ���� ����
+	// NOTE : GrannyGetWorldPose4x4는 스케일 값등이 잘못나올 수 있음.. 그래니가 속도를 위해
+	//        GrannyGetWorldPose4x4에 모든 matrix 원소를 제 값으로 넣지 않음
 	return GrannyGetWorldPoseComposite4x4(__GetWorldPosePtr(), iBone);
 }
 
diff --git a/src/EterGrnLib/ModelInstanceMotion.cpp b/src/EterGrnLib/ModelInstanceMotion.cpp
index 3c19e88f..70adb1cd 100644
--- a/src/EterGrnLib/ModelInstanceMotion.cpp
+++ b/src/EterGrnLib/ModelInstanceMotion.cpp
@@ -112,7 +112,7 @@ void CGrannyModelInstance::ChangeMotionPointer(const CGrannyMotion* pMotion, int
 	if (!pgrnModelInstance)
 		return;
 
-	// ���� �Ǵ� �պκ��� ��ŵ �ϱ� ���� LocalTime �� ��� ���� �����Ѵ�. - [levites]
+	// 보간 되는 앞부분을 스킵 하기 위해 LocalTime 을 어느 정도 무시한다. - [levites]
 	float fSkipTime = 0.3f;
 	float localTime = GetLocalTime() - fSkipTime;
 
diff --git a/src/EterGrnLib/ModelInstanceRender.cpp b/src/EterGrnLib/ModelInstanceRender.cpp
index f8b9a5b9..6a85c480 100644
--- a/src/EterGrnLib/ModelInstanceRender.cpp
+++ b/src/EterGrnLib/ModelInstanceRender.cpp
@@ -47,7 +47,7 @@ void CGrannyModelInstance::DeformNoSkin(const D3DXMATRIX * c_pWorldMatrix)
 // With One Texture
 void CGrannyModelInstance::RenderWithOneTexture()
 {
-	// FIXME : Deform, Render, BlendRender�� ���� �������� �ɷ��ִ� ���� �� ���� �� - [levites]
+	// FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites]
 	if (IsEmpty())
 		return;
 
@@ -99,7 +99,7 @@ void CGrannyModelInstance::BlendRenderWithOneTexture()
 // With Two Texture
 void CGrannyModelInstance::RenderWithTwoTexture()
 {
-	// FIXME : Deform, Render, BlendRender�� ���� �������� �ɷ��ִ� ���� �� ���� �� - [levites]
+	// FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites]
 	if (IsEmpty())
 		return;
 
diff --git a/src/EterGrnLib/ThingInstance.cpp b/src/EterGrnLib/ThingInstance.cpp
index 94b1bb9d..a0708e8d 100644
--- a/src/EterGrnLib/ThingInstance.cpp
+++ b/src/EterGrnLib/ThingInstance.cpp
@@ -342,8 +342,8 @@ bool CGraphicThingInstance::GetBonePosition(int iModelIndex, int iBoneIndex, flo
 	*pfz = pfMatrix[14];
 	return true;
 }
-//iSkelInstance �� ������ �⺻ ���� Link(���� �ٴ°�)��Ű��,
-//������ �⺻ ���� attach(��ǥ�� ������ ���°�) �˴ϴ�.
+//iSkelInstance 가 있으면 기본 본에 Link(본이 붙는것)시키고,
+//없으면 기본 본에 attach(좌표만 가져다 쓰는것) 됩니다.
 bool CGraphicThingInstance::SetModelInstance(int iDstModelInstance, int iSrcModelThing, int iSrcModel,int iSkelInstance)
 {
 	if (!CheckModelInstanceIndex(iDstModelInstance))
@@ -735,7 +735,7 @@ void CGraphicThingInstance::UpdateLODLevel()
 	const D3DXVECTOR3 & c_rv3CameraPosition = pcurCamera->GetEye();
 	const D3DXVECTOR3 & c_v3Position = GetPosition();
 
-	// NOTE : �߽����κ����� �Ÿ� ��꿡 z�� ���̴� ������� �ʴ´�. - [levites]
+	// NOTE : 중심으로부터의 거리 계산에 z값 차이는 사용하지 않는다. - [levites]
 	CGrannyLODController::FUpdateLODLevel update;
 	update.fDistanceFromCenter = sqrtf((c_rv3TargetPosition.x - c_v3Position.x) * (c_rv3TargetPosition.x - c_v3Position.x) +
 									   (c_rv3TargetPosition.y - c_v3Position.y) * (c_rv3TargetPosition.y - c_v3Position.y));
diff --git a/src/EterImageLib/TGAImage.cpp b/src/EterImageLib/TGAImage.cpp
index 61261394..dfcbfc13 100644
--- a/src/EterImageLib/TGAImage.cpp
+++ b/src/EterImageLib/TGAImage.cpp
@@ -33,7 +33,7 @@ void CTGAImage::Create(int width, int height)
 	m_Header.width		= (short) width;
 	m_Header.height		= (short) height;
 	m_Header.colorBits	= 32;
-	m_Header.desc		= 0x08;	// alpha channel ����
+	m_Header.desc		= 0x08;	// alpha channel 있음
 
 	CImage::Create(width, height);
 }
@@ -54,7 +54,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
 
 	switch (m_Header.imgType)
 	{
-		case 3:	// ���ĸ� �ִ� �� (1bytes per pixel, ���� �Ⱦ���)
+		case 3:	// 알파만 있는 것 (1bytes per pixel, 거의 안쓰임)
 			{
 				for (i = 0; i < hxw; ++i)
 				{
@@ -64,7 +64,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
 			}
 			break;
 
-		case 2:	// ���� �ȵ� TGA
+		case 2:	// 압축 안된 TGA
 			{
 				if (m_Header.colorBits == 16)	// 16bit
 				{
@@ -112,7 +112,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
 			}
 			break;
 
-		case 10: // ���� �� TGA (RLE)
+		case 10: // 압축 된 TGA (RLE)
 			{
 				BYTE rle;
 
@@ -123,7 +123,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
 					{
 						rle = (BYTE) *(c_pbMem++); --iSize;
 
-						if (rle < 0x80)	// ���� �ȵ� ��
+						if (rle < 0x80)	// 압축 안된 곳
 						{
 							rle++;
 
@@ -146,7 +146,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
 						}
 						else
 						{
-							// ���� �� ��
+							// 압축 된 곳
 							rle -= 127;
 
 							b = (BYTE) *(c_pbMem++); --iSize;
@@ -315,7 +315,7 @@ bool CTGAImage::SaveToDiskFile(const char* c_szFileName)
 
 	fwrite(&m_Header, 18, 1, fp);
 	
-	if (m_Header.imgType == 10)	// RLE �������� ����
+	if (m_Header.imgType == 10)	// RLE 압축으로 저장
 	{
 		DWORD * data = GetBasePointer();
 		
diff --git a/src/EterLib/AttributeData.cpp b/src/EterLib/AttributeData.cpp
index 61e0e197..786f20ba 100644
--- a/src/EterLib/AttributeData.cpp
+++ b/src/EterLib/AttributeData.cpp
@@ -61,7 +61,7 @@ bool CAttributeData::OnLoad(int /*iSize*/, const void * c_pvBuf)
 {
 	if (!c_pvBuf)
 	{
-		// NOTE: ������ �������� ������ �ٸ������� �׷��� ���� ������� �浹 �����͸� �����ϴ� ���ҽ��� �ı����� �ʰ� ������Ŵ.
+		// NOTE: 파일이 존재하지 않으면 다른곳에서 그래픽 모델을 기반으로 충돌 데이터를 생성하니 리소스를 파괴하지 않고 유지시킴.
 		return true;
 	}
 
diff --git a/src/EterLib/Camera.cpp b/src/EterLib/Camera.cpp
index 1d9110ec..31aa1cce 100644
--- a/src/EterLib/Camera.cpp
+++ b/src/EterLib/Camera.cpp
@@ -438,7 +438,7 @@ void CCamera::RotateEyeAroundTarget(float fPitchDegree, float fRollDegree)
 
 	D3DXMATRIX matRot, matRotPitch, matRotRoll;
 
-	// �Ӹ����� �Ѿ�� ����...
+	// 머리위로 넘어가기 막기...
 	if (m_fPitch + fPitchDegree > 80.0f)
 	{
 		fPitchDegree = 80.0f - m_fPitch;
@@ -593,7 +593,7 @@ bool CCameraManager::isCurrentCamera(unsigned char ucCameraNum)
 	return false;
 }
 
-// �⽺���� �Լ���...
+// 잡스러운 함수들...
 bool CCameraManager::AddCamera(unsigned char ucCameraNum)
 {
 	if(m_CameraMap.end() != m_CameraMap.find(ucCameraNum))
diff --git a/src/EterLib/CollisionData.cpp b/src/EterLib/CollisionData.cpp
index fdcd410c..fb9a896a 100644
--- a/src/EterLib/CollisionData.cpp
+++ b/src/EterLib/CollisionData.cpp
@@ -230,7 +230,7 @@ bool CSphereCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamicSp
 {
 	if (square_distance_between_linesegment_and_point(s.v3LastPosition,s.v3Position,m_attribute.v3Position) < (m_attribute.fRadius+s.fRadius)*(m_attribute.fRadius+s.fRadius))
 	{
-		// NOTE : �Ÿ��� ����� ��������.. - [levites]
+		// NOTE : 거리가 가까워 졌을때만.. - [levites]
 		if (GetVector3Distance(s.v3Position, m_attribute.v3Position) <
 			GetVector3Distance(s.v3LastPosition, m_attribute.v3Position))
 			return true;
@@ -321,7 +321,7 @@ bool CPlaneCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamicSph
 				if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[2]) > - s.fRadius/*0.0f*/)
 					if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[3]) > - s.fRadius/*0.0f*/)
 					{
-						// NOTE : �Ÿ��� ����� ��������.. - [levites]
+						// NOTE : 거리가 가까워 졌을때만.. - [levites]
 						if (fabs(D3DXVec3Dot(&(s.v3Position - m_attribute.v3Position), &m_attribute.v3Normal)) <
 							fabs(D3DXVec3Dot(&(s.v3LastPosition - m_attribute.v3Position), &m_attribute.v3Normal)))
 							return true;
@@ -471,14 +471,14 @@ bool CCylinderCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamic
 {
 	if (CollideCylinderVSDynamicSphere(m_attribute, s))
 	{
-		// NOTE : �Ÿ��� ����� ��������.. - [levites]
+		// NOTE : 거리가 가까워 졌을때만.. - [levites]
 		if (GetVector3Distance(s.v3Position, m_attribute.v3Position) <
 			GetVector3Distance(s.v3LastPosition, m_attribute.v3Position))
 			return true;
 	}
 
 	
-	// NOTE : �̵� �Ÿ��� Ŭ ��� ��ƴ���� (�� ũ�� ������) �̵��ϸ鼭 ���� üũ �� ���� - [levites]
+	// NOTE : 이동 거리가 클 경우 빈틈없이 (원 크기 단위로) 이동하면서 전부 체크 해 본다 - [levites]
 	D3DXVECTOR3 v3Distance = s.v3Position - s.v3LastPosition;
 	float fDistance = D3DXVec3Length(&v3Distance);
 	if (s.fRadius<=0.0001f)
diff --git a/src/EterLib/CullingManager.cpp b/src/EterLib/CullingManager.cpp
index 86c89ec6..c5affff4 100644
--- a/src/EterLib/CullingManager.cpp
+++ b/src/EterLib/CullingManager.cpp
@@ -93,7 +93,7 @@ void CCullingManager::Reset()
 void CCullingManager::Update()
 {
 	// TODO : update each object
-	// �������� ���� �ϰ� �غ���
+	// 하지말고 각자 하게 해보자
 
 	//DWORD time = ELTimer_GetMSec();
 	//Reset();
diff --git a/src/EterLib/FileLoaderThread.cpp b/src/EterLib/FileLoaderThread.cpp
index 3b5c0673..e7fcb649 100644
--- a/src/EterLib/FileLoaderThread.cpp
+++ b/src/EterLib/FileLoaderThread.cpp
@@ -79,7 +79,7 @@ void CFileLoaderThread::Shutdown()
 	}
 	while (!bRet);
 
-	WaitForSingleObject(m_hThread, 10000);	// �����尡 ���� �DZ⸦ 10�� ��ٸ�
+	WaitForSingleObject(m_hThread, 10000);	// 쓰레드가 종료 되기를 10초 기다림
 }
 
 UINT CFileLoaderThread::Execute(void * /*pvArg*/)
diff --git a/src/EterLib/GrpBase.cpp b/src/EterLib/GrpBase.cpp
index ca5bab91..c27652bd 100644
--- a/src/EterLib/GrpBase.cpp
+++ b/src/EterLib/GrpBase.cpp
@@ -75,13 +75,13 @@ int						CGraphicBase::ms_iWavingPower;
 DWORD					CGraphicBase::ms_dwFlashingEndTime;
 D3DXCOLOR				CGraphicBase::ms_FlashingColor;
 
-// Terrain picking�� Ray... CCamera �̿��ϴ� ����.. ������ Ray�� ���� �ʿ�...
+// Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요...
 CRay					CGraphicBase::ms_Ray;
 bool					CGraphicBase::ms_bSupportDXT = true;
 bool					CGraphicBase::ms_isLowTextureMemory = false;
 bool					CGraphicBase::ms_isHighTextureMemory = false;
 
-// 2004.11.18.myevan.DynamicVertexBuffer�� ��ü
+// 2004.11.18.myevan.DynamicVertexBuffer로 교체
 /*
 std::vector<TIndex>		CGraphicBase::ms_lineIdxVector;
 std::vector<TIndex>		CGraphicBase::ms_lineTriIdxVector;
diff --git a/src/EterLib/GrpDevice.cpp b/src/EterLib/GrpDevice.cpp
index bda3aa23..6c06303a 100644
--- a/src/EterLib/GrpDevice.cpp
+++ b/src/EterLib/GrpDevice.cpp
@@ -183,7 +183,7 @@ static DWORD   s_MaxTextureWidth, s_MaxTextureHeight;
 
 BOOL EL3D_ConfirmDevice(D3DCAPS9& rkD3DCaps, UINT uBehavior, D3DFORMAT /*eD3DFmt*/)
 {
-	// PUREDEVICE�� GetTransform / GetViewport ���� ���� �ʴ´�.
+	// PUREDEVICE는 GetTransform / GetViewport 등이 되지 않는다.
 	if (uBehavior & D3DCREATE_PUREDEVICE) 
         return FALSE;
 	
@@ -369,7 +369,7 @@ RETRY:
 				ms_iD3DAdapterInfo,
 				D3DDEVTYPE_HAL,
 				hWnd,
-				// 2004. 1. 9 myevan ���ؽ� ���μ��� ��� �ڵ� ���� �߰�
+				// 2004. 1. 9 myevan 버텍스 프로세싱 방식 자동 선택 추가
 				pkD3DModeInfo->m_dwD3DBehavior,
 				&ms_d3dPresentParameter,
 				&ms_lpd3dDevice)))
@@ -393,7 +393,7 @@ RETRY:
 		if (ErrorCorrection)
 			return CREATE_DEVICE;
 	
-		// 2004. 1. 9 myevan ū�ǹ� ���� �ڵ��ε�.. �������� ǥ���ϰ� ��������
+		// 2004. 1. 9 myevan 큰의미 없는 코드인듯.. 에러나면 표시하고 종료하자
 		iReflashRate = 0;
 		++ErrorCorrection;
 		iRet = CREATE_REFRESHRATE;
diff --git a/src/EterLib/GrpExpandedImageInstance.cpp b/src/EterLib/GrpExpandedImageInstance.cpp
index a634a506..4021f5c9 100644
--- a/src/EterLib/GrpExpandedImageInstance.cpp
+++ b/src/EterLib/GrpExpandedImageInstance.cpp
@@ -116,7 +116,7 @@ void CGraphicExpandedImageInstance::OnRender()
 			break;
 	}
 
-	// 2004.11.18.myevan.ctrl+alt+del �ݺ� ���� ƨ��� ���� 	
+	// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제 	
 	if (CGraphicBase::SetPDTStream(vertices, 4))
 	{
 		CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
diff --git a/src/EterLib/GrpFontTexture.cpp b/src/EterLib/GrpFontTexture.cpp
index 93fb1527..88c732dd 100644
--- a/src/EterLib/GrpFontTexture.cpp
+++ b/src/EterLib/GrpFontTexture.cpp
@@ -213,7 +213,7 @@ CGraphicFontTexture::TCharacterInfomation* CGraphicFontTexture::UpdateCharacterI
 	wchar_t keyValue = code.second;
 
 	if (keyValue == 0x08)
-		keyValue = L' '; // ���� �������� �ٲ۴� (�ƶ� ��½� �� ���: NAME:\tTEXT -> TEXT\t:NAME �� ��ȯ�� )
+		keyValue = L' '; // 탭은 공백으로 바꾼다 (아랍 출력시 탭 사용: NAME:\tTEXT -> TEXT\t:NAME 로 전환됨 )
 
 	ABCFLOAT	stABC;
 	SIZE		size;
diff --git a/src/EterLib/GrpImage.cpp b/src/EterLib/GrpImage.cpp
index 13d0fff4..cfd3b4b9 100644
--- a/src/EterLib/GrpImage.cpp
+++ b/src/EterLib/GrpImage.cpp
@@ -68,7 +68,7 @@ bool CGraphicImage::OnLoad(int iSize, const void * c_pvBuf)
 
 	m_imageTexture.SetFileName(CResource::GetFileName());
 
-	// Ư�� ��ǻ�Ϳ��� Unknown���� '��'�ϸ� ƨ��� ������ ����-_-; -��
+	// 특정 컴퓨터에서 Unknown으로 '안'하면 튕기는 현상이 있음-_-; -비엽
 	if (!m_imageTexture.CreateFromMemoryFile(iSize, c_pvBuf, D3DFMT_UNKNOWN, m_dwFilter))
 		return false;
 
diff --git a/src/EterLib/GrpImageInstance.cpp b/src/EterLib/GrpImageInstance.cpp
index 023f9c98..b34cf539 100644
--- a/src/EterLib/GrpImageInstance.cpp
+++ b/src/EterLib/GrpImageInstance.cpp
@@ -83,7 +83,7 @@ void CGraphicImageInstance::OnRender()
 	vertices[3].texCoord	= TTextureCoordinate(eu, ev);	
 	vertices[3].diffuse		= m_DiffuseColor;
 
-	// 2004.11.18.myevan.ctrl+alt+del �ݺ� ���� ƨ��� ���� 
+	// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제 
 	if (CGraphicBase::SetPDTStream(vertices, 4))
 	{
 		CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
@@ -207,7 +207,7 @@ void CGraphicImageInstance::Initialize()
 
 void CGraphicImageInstance::Destroy()
 {
-	m_roImage.SetPointer(NULL); // CRef ���� ���۷��� ī��Ʈ�� �������� ��.
+	m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함.
 	Initialize();
 }
 
diff --git a/src/EterLib/GrpImageTexture.cpp b/src/EterLib/GrpImageTexture.cpp
index e63432fb..1b7391bb 100644
--- a/src/EterLib/GrpImageTexture.cpp
+++ b/src/EterLib/GrpImageTexture.cpp
@@ -44,7 +44,7 @@ bool CGraphicImageTexture::CreateDeviceObjects()
 
 	if (m_stFileName.empty())
 	{
-		// ��Ʈ �ؽ���
+		// 폰트 텍스쳐
 		if (FAILED(ms_lpd3dDevice->CreateTexture(m_width, m_height, 1, 0, m_d3dFmt, D3DPOOL_MANAGED, &m_lpd3dTexture, NULL)))
 			return false;
 	}
diff --git a/src/EterLib/GrpLightManager.cpp b/src/EterLib/GrpLightManager.cpp
index bd76e6a0..57bcaa6a 100644
--- a/src/EterLib/GrpLightManager.cpp
+++ b/src/EterLib/GrpLightManager.cpp
@@ -97,18 +97,18 @@ struct LightComp
 	}
 };
 
-// NOTE : FlushLight�� ������
-//        �� �� �ݵ�� RestoreLight�� ����߸� �Ѵ�.
+// NOTE : FlushLight후 렌더링
+//        그 후 반드시 RestoreLight를 해줘야만 한다.
 void CLightManager::FlushLight()
 {
 	Update();
 
 	m_LightSortVector.clear();
 
-	// NOTE: Dynamic�� Static�� �и� ��Ű�� CenterPosition�� �ٲ𶧸��� Static��
-	//		 �ٽ� Flush �ϴ� ������ ����ȭ �� �� �ִ�. - [levites]
+	// NOTE: Dynamic과 Static을 분리 시키고 CenterPosition이 바뀔때마다 Static만
+	//		 다시 Flush 하는 식으로 최적화 할 수 있다. - [levites]
 
-	// light���� �Ÿ��� ������ �����Ѵ�.
+	// light들의 거리를 추출해 정렬한다.
 	TLightMap::iterator itor = m_LightMap.begin();
 
 	for (; itor != m_LightMap.end(); ++itor)
@@ -124,7 +124,7 @@ void CLightManager::FlushLight()
 	// quick sort lights
 	std::sort(m_LightSortVector.begin(), m_LightSortVector.end(), LightComp());
 
-	// NOTE - �Ÿ��� ���ĵ� ����Ʈ�� Limit ���� ��ŭ �����ؼ� ���ش�.
+	// NOTE - 거리로 정렬된 라이트를 Limit 갯수 만큼 제한해서 켜준다.
 	STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, TRUE);
 
 	for (DWORD k = 0; k < min(m_dwLimitLightCount, m_LightSortVector.size()); ++k)
diff --git a/src/EterLib/GrpMarkInstance.cpp b/src/EterLib/GrpMarkInstance.cpp
index e78261e6..a4d9b71d 100644
--- a/src/EterLib/GrpMarkInstance.cpp
+++ b/src/EterLib/GrpMarkInstance.cpp
@@ -241,7 +241,7 @@ void CGraphicMarkInstance::Initialize()
 
 void CGraphicMarkInstance::Destroy()
 {
-	m_roImage.SetPointer(NULL); // CRef ���� ���۷��� ī��Ʈ�� �������� ��.
+	m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함.
 	Initialize();
 }
 
diff --git a/src/EterLib/GrpScreen.cpp b/src/EterLib/GrpScreen.cpp
index 80cd27da..b667a327 100644
--- a/src/EterLib/GrpScreen.cpp
+++ b/src/EterLib/GrpScreen.cpp
@@ -53,7 +53,7 @@ void CScreen::RenderBox3d(float sx, float sy, float sz, float ex, float ey, floa
 		{ ex, ey, ez, ms_diffuseColor, 0.0f, 0.0f },	// 3
 
 		{ sx, ey, ez, ms_diffuseColor, 0.0f, 0.0f },	// 2
-		{ ex+1.0f, ey, ez, ms_diffuseColor, 0.0f, 0.0f }	// 3, (x�� 1������ 3)
+		{ ex+1.0f, ey, ez, ms_diffuseColor, 0.0f, 0.0f }	// 3, (x가 1증가된 3)
 	};
 
 	// 2004.11.18.myevan.DrawIndexPrimitiveUP -> DynamicVertexBuffer
@@ -510,11 +510,11 @@ void CScreen::SetCursorPosition(int x, int y, int hres, int vres)
     ms_vtPickRayOrig.y = matViewInverse._42;
     ms_vtPickRayOrig.z = matViewInverse._43;
 	
-//	// 2003. 9. 9 ���� �߰�
-//	// ���� picking�� ���� ����... �Ѥ�; ���� �Ͱ� ���� �ʿ�...
+//	// 2003. 9. 9 동현 추가
+//	// 지형 picking을 위한 뻘짓... ㅡㅡ; 위에 것과 통합 필요...
 	ms_Ray.SetStartPoint(ms_vtPickRayOrig);
 	ms_Ray.SetDirection(-ms_vtPickRayDir, 51200.0f);
-//	// 2003. 9. 9 ���� �߰�
+//	// 2003. 9. 9 동현 추가
 }
 
 bool CScreen::GetCursorPosition(float* px, float* py, float* pz)
diff --git a/src/EterLib/GrpText.cpp b/src/EterLib/GrpText.cpp
index 395238a0..c3676431 100644
--- a/src/EterLib/GrpText.cpp
+++ b/src/EterLib/GrpText.cpp
@@ -38,9 +38,9 @@ bool CGraphicText::OnLoad(int /*iSize*/, const void* /*c_pvBuf*/)
 	bool bItalic = false;
 
 	// format
-	// ����.fnt		"\xB1\xBC\xB8\xB2" ��Ʈ �⺻ ������ 12 �� �ε�
-	// ����:18.fnt  "\xB1\xBC\xB8\xB2" ��Ʈ ������ 18 �� �ε�
-	// ����:14i.fnt "\xB1\xBC\xB8\xB2" ��Ʈ ������ 14 & ���Ÿ����� �ε�
+	// 굴림.fnt		"\xB1\xBC\xB8\xB2" 폰트 기본 사이즈 12 로 로딩
+	// 굴림:18.fnt  "\xB1\xBC\xB8\xB2" 폰트 사이즈 18 로 로딩
+	// 굴림:14i.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 14 & 이탤릭으로 로딩
 	const char * p = strrchr(GetFileName(), ':');
 
 	if (p)
diff --git a/src/EterLib/GrpTextInstance.cpp b/src/EterLib/GrpTextInstance.cpp
index aa93bbb7..e520ea58 100644
--- a/src/EterLib/GrpTextInstance.cpp
+++ b/src/EterLib/GrpTextInstance.cpp
@@ -121,7 +121,7 @@ int ReadToken(const char* token)
 
 void CGraphicTextInstance::Update()
 {
-	if (m_isUpdate) // ���ڿ��� �ٲ���� ���� ������Ʈ �Ѵ�.
+	if (m_isUpdate) // 문자열이 바뀌었을 때만 업데이트 한다.
 		return;
 
 	if (m_roText.IsNull())
@@ -139,7 +139,7 @@ void CGraphicTextInstance::Update()
 
 	UINT defCodePage = GetDefaultCodePage();
 
-	UINT dataCodePage = defCodePage; // �ƶ� �� ��Ʈ�� ���� �����͸� UTF8 �� ����Ϸ� ������ ����
+	UINT dataCodePage = defCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
 		
 	CGraphicFontTexture::TCharacterInfomation* pSpaceInfo = pFontTexture->GetCharacterInfomation(dataCodePage, ' ');
 
@@ -185,7 +185,7 @@ void CGraphicTextInstance::Update()
 				bool isEnglish = true;
 				int nEnglishBase = wArabicTextLen - 1;
 
-				//<<������ ��ũ>>
+				//<<하이퍼 링크>>
 				int x = 0;
 
 				int len;				
@@ -194,7 +194,7 @@ void CGraphicTextInstance::Update()
 				std::wstring hyperlinkBuffer;
 				int no_hyperlink = 0;
 
-				// �ɺ��� ������ �ƶ��� ���� �����ؾ��Ѵ�
+				// 심볼로 끝나면 아랍어 모드로 시작해야한다
 				if (Arabic_IsInSymbol(wArabicText[wArabicTextLen - 1]))
 				{
 					isEnglish = false;
@@ -208,24 +208,24 @@ void CGraphicTextInstance::Update()
 					if (isEnglish)
 					{
 
-						// <<�ɺ��� ��� (ex. ��ȣ, ����)>> -> ���� ��� ����.
-						//		<<(�ɺ��� �ƴ� �͵� : ����, ����, �ƶ���)>>
-						//  (1) �� ���� �ɺ� or
+						// <<심볼의 경우 (ex. 기호, 공백)>> -> 영어 모드 유지.
+						//		<<(심볼이 아닌 것들 : 숫자, 영어, 아랍어)>>
+						//  (1) 맨 앞의 심볼 or
 						//	(2) 
-						//		1) �� ���ڰ� �ƶ��� �ƴ� &&
-						//		2) �� ���ڰ� �ƶ��� �ƴ� &&
-						//		3) �� ���ڰ� �ɺ�'|'�� �ƴ� &&
+						//		1) 앞 글자가 아랍어 아님 &&
+						//		2) 뒷 글자가 아랍어 아님 &&
+						//		3) 뒷 글자가 심볼'|'이 아님 &&
 						//		or
-						//	(3) ���� �ɺ��� '|'
-						// <<�ƶ��� ���� �Ѿ�� ��� : �ɺ�����.>>
-						//	1) �ձ��� �ƶ���
-						//	2) �ޱ��� �ƶ���
+						//	(3) 현재 심볼이 '|'
+						// <<아랍어 모드로 넘어가는 경우 : 심볼에서.>>
+						//	1) 앞글자 아랍어
+						//	2) 뒷글자 아랍어
 						//
 						//
 						if (Arabic_IsInSymbol(wArabicChar) && (
 								(i == 0) ||
 								(i > 0 && 
-									!(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1]))  && //�ձ���, �ޱ��ڰ� �ƶ��� �ƴ�.
+									!(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1]))  && //앞글자, 뒷글자가 아랍어 아님.
 									wArabicText[i+1] != '|'
 								) ||
 								wArabicText[i] == '|'
@@ -234,10 +234,10 @@ void CGraphicTextInstance::Update()
 							// pass
 							int temptest = 1;
 						}
-						// (1)�ƶ����̰ų� (2)�ƶ��� ������ �ɺ��̶�� �ƶ��� ��� ��ȯ
+						// (1)아랍어이거나 (2)아랍어 다음의 심볼이라면 아랍어 모드 전환
 						else if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
 						{
-							//�� �������� ��� �׸���.
+							//그 전까지의 영어를 그린다.
 							for (int e = i + 1; e <= nEnglishBase;) {
 								int ret = GetTextTag(&wArabicText[e], wArabicTextLen - e, len, hyperlinkBuffer);
 
@@ -251,7 +251,7 @@ void CGraphicTextInstance::Update()
 										kHyperlink.ex += charWidth;
 										//x += charWidth;
 										
-										//���� �߰��� �����۸�ũ�� ��ǥ ����.
+										//기존 추가한 하이퍼링크의 좌표 수정.
 										for (int j = 1; j <= no_hyperlink; j++)
 										{
 											if(m_hyperlinkVector.size() < j)
@@ -279,7 +279,7 @@ void CGraphicTextInstance::Update()
 										if (hyperlinkStep == 1)
 										{
 											++hyperlinkStep;
-											kHyperlink.ex = kHyperlink.sx = 0; // ���� �ؽ�Ʈ�� ���۵Ǵ� ��ġ
+											kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
 										}
 										else
 										{
@@ -299,7 +299,7 @@ void CGraphicTextInstance::Update()
 							int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
 							kHyperlink.ex += charWidth;
 							
-							//���� �߰��� �����۸�ũ�� ��ǥ ����.
+							//기존 추가한 하이퍼링크의 좌표 수정.
 							for (int j = 1; j <= no_hyperlink; j++)
 							{
 								if(m_hyperlinkVector.size() < j)
@@ -313,16 +313,16 @@ void CGraphicTextInstance::Update()
 							isEnglish = false;
 						}
 					}
-					else //[[[�ƶ��� ���]]]
+					else //[[[아랍어 모드]]]
 					{
-						// �ƶ����̰ų� �ƶ��� ����� ������ �ɺ��̶��
+						// 아랍어이거나 아랍어 출력중 나오는 심볼이라면
 						if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
 						{
 							int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
 							kHyperlink.ex += charWidth;
 							x += charWidth;
 							
-							//���� �߰��� �����۸�ũ�� ��ǥ ����.
+							//기존 추가한 하이퍼링크의 좌표 수정.
 							for (int j = 1; j <= no_hyperlink; j++)
 							{
 								if(m_hyperlinkVector.size() < j)
@@ -333,7 +333,7 @@ void CGraphicTextInstance::Update()
 								tempLink.sx += charWidth;
 							}
 						}
-						else //�����̰ų�, ���� ������ ������ �ɺ��̶��,
+						else //영어이거나, 영어 다음에 나오는 심볼이라면,
 						{
 							nEnglishBase = i;
 							isEnglish = true;
@@ -355,7 +355,7 @@ void CGraphicTextInstance::Update()
 								int charWidth = __DrawCharacter(pFontTexture, dataCodePage, wArabicText[e], dwColor);
 								kHyperlink.ex += charWidth;
 
-								//���� �߰��� �����۸�ũ�� ��ǥ ����.
+								//기존 추가한 하이퍼링크의 좌표 수정.
 								for (int j = 1; j <= no_hyperlink; j++)
 								{
 									if(m_hyperlinkVector.size() < j)
@@ -383,7 +383,7 @@ void CGraphicTextInstance::Update()
 								if (hyperlinkStep == 1)
 								{
 									++hyperlinkStep;
-									kHyperlink.ex = kHyperlink.sx = 0; // ���� �ؽ�Ʈ�� ���۵Ǵ� ��ġ
+									kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
 								}
 								else
 								{
@@ -401,7 +401,7 @@ void CGraphicTextInstance::Update()
 
 				}
 			}
-			else	// �ƶ��� �ٸ� ����.
+			else	// 아랍외 다른 지역.
 			{
 				int x = 0;
 				int len;				
@@ -440,7 +440,7 @@ void CGraphicTextInstance::Update()
 							if (hyperlinkStep == 1)
 							{
 								++hyperlinkStep;
-								kHyperlink.ex = kHyperlink.sx = x; // ���� �ؽ�Ʈ�� ���۵Ǵ� ��ġ
+								kHyperlink.ex = kHyperlink.sx = x; // 실제 텍스트가 시작되는 위치
 							}
 							else
 							{
@@ -460,7 +460,7 @@ void CGraphicTextInstance::Update()
 		if (token < end)
 		{			
 			int newCodePage = ReadToken(token);			
-			dataCodePage = newCodePage;	// �ƶ� �� ��Ʈ�� ���� �����͸� UTF8 �� ����Ϸ� ������ ����
+			dataCodePage = newCodePage;	// 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
 			begin = token + 5;			
 		}
 		else
@@ -570,7 +570,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 
 		CGraphicFontTexture::TCharacterInfomation* pCurCharInfo;		
 
-		// �׵θ�
+		// 테두리
 		if (m_isOutline)
 		{
 			fCurX=fStanX;
@@ -586,7 +586,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 				fFontHeight=float(pCurCharInfo->height);
 				fFontAdvance=float(pCurCharInfo->advance);
 
-				// NOTE : ��Ʈ ��¿� Width ������ �Ӵϴ�. - [levites]
+				// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
 				if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
 				{
 					if (m_isMultiLine)
@@ -636,7 +636,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 				akVertex[2].y=fFontSy-feather;
 				akVertex[3].y=fFontEy+feather;
 
-				// ��
+				// 왼
 				akVertex[0].x=fFontSx-fFontHalfWeight-feather;
 				akVertex[1].x=fFontSx-fFontHalfWeight-feather;
 				akVertex[2].x=fFontEx-fFontHalfWeight+feather;
@@ -646,7 +646,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 					STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
 				
 
-				// ����
+				// 오른
 				akVertex[0].x=fFontSx+fFontHalfWeight-feather;
 				akVertex[1].x=fFontSx+fFontHalfWeight-feather;
 				akVertex[2].x=fFontEx+fFontHalfWeight+feather;
@@ -660,7 +660,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 				akVertex[2].x=fFontEx+feather;
 				akVertex[3].x=fFontEx+feather;
 				
-				// ��
+				// 위
 				akVertex[0].y=fFontSy-fFontHalfWeight-feather;
 				akVertex[1].y=fFontEy-fFontHalfWeight+feather;
 				akVertex[2].y=fFontSy-fFontHalfWeight-feather;
@@ -670,7 +670,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 				if (CGraphicBase::SetPDTStream((SPDTVertex*)akVertex, 4))
 					STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
 				
-				// �Ʒ�
+				// 아래
 				akVertex[0].y=fFontSy+fFontHalfWeight-feather;
 				akVertex[1].y=fFontEy+fFontHalfWeight+feather;
 				akVertex[2].y=fFontSy+fFontHalfWeight-feather;
@@ -684,7 +684,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 			}
 		}
 
-		// ���� ��Ʈ
+		// 메인 폰트
 		fCurX=fStanX;
 		fCurY=fStanY;
 		fFontMaxHeight=0.0f;
@@ -698,7 +698,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 			fFontMaxHeight=max(fFontHeight, pCurCharInfo->height);
 			fFontAdvance=float(pCurCharInfo->advance);
 
-			// NOTE : ��Ʈ ��¿� Width ������ �Ӵϴ�. - [levites]
+			// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
 			if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
 			{
 				if (m_isMultiLine)
@@ -811,9 +811,9 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 				sy -= float(m_textHeight) / 2.0f;
 				break;
 		}		
-		// ����ȭ ����
-		// �����ؽ��ĸ� ����Ѵٸ�... STRIP�� �����ϰ�, �ؽ��İ� ����ǰų� ������ DrawPrimitive�� ȣ����
-		// �ִ��� ���ڸ� ���̵�������!
+		// 최적화 사항
+		// 같은텍스쳐를 사용한다면... STRIP을 구성하고, 텍스쳐가 변경되거나 끝나면 DrawPrimitive를 호출해
+		// 최대한 숫자를 줄이도록하자!
 
 		TPDTVertex vertices[4];
 		vertices[0].diffuse = diffuse;
@@ -865,13 +865,13 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
 	STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, dwFogEnable);
 	STATEMANAGER.SetRenderState(D3DRS_LIGHTING, dwLighting);
 
-	//�ݰ��� ��ũ ����ִ� �κ�.
+	//금강경 링크 띄워주는 부분.
 	if (m_hyperlinkVector.size() != 0)
 	{
 		int lx = gs_mx - m_v3Position.x;
 		int ly = gs_my - m_v3Position.y;
 
-		//�ƶ��� ��ǥ ��ȣ�� �ٲ��ش�.
+		//아랍은 좌표 부호를 바꿔준다.
 		if (GetDefaultCodePage() == CP_ARABIC) {
 			lx = -lx;
 			ly = -ly + m_textHeight;
@@ -1063,7 +1063,7 @@ WORD CGraphicTextInstance::GetTextLineCount()
 		float fFontAdvance=float(pCurCharInfo->advance);
 		//float fFontHeight=float(pCurCharInfo->height);
 
-		// NOTE : ��Ʈ ��¿� Width ������ �Ӵϴ�. - [levites]
+		// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
 		if (fx+fFontWidth > m_fLimitWidth)
 		{
 			fx = 0.0f;
@@ -1110,7 +1110,7 @@ void CGraphicTextInstance::__Initialize()
 	m_vAlign = VERTICAL_ALIGN_TOP;
 
 	m_iMax = 0;
-	m_fLimitWidth = 1600.0f; // NOTE : �ػ��� �ִ�ġ. �̺��� ��� �� ���� ������? - [levites]
+	m_fLimitWidth = 1600.0f; // NOTE : 해상도의 최대치. 이보다 길게 쓸 일이 있을까? - [levites]
 
 	m_isCursor = false;
 	m_isSecret = false;
diff --git a/src/EterLib/GrpVertexBufferStatic.cpp b/src/EterLib/GrpVertexBufferStatic.cpp
index 780450fc..669b6c1a 100644
--- a/src/EterLib/GrpVertexBufferStatic.cpp
+++ b/src/EterLib/GrpVertexBufferStatic.cpp
@@ -3,7 +3,7 @@
 
 bool CStaticVertexBuffer::Create(int vtxCount, DWORD fvf, bool /*isManaged*/)
 {
-	// ������ MANAGED ���
+	// 무조건 MANAGED 모드
 	return CGraphicVertexBuffer::Create(vtxCount, fvf, D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED);
 }
 
diff --git a/src/EterLib/IME.cpp b/src/EterLib/IME.cpp
index adf0db27..0a99614f 100644
--- a/src/EterLib/IME.cpp
+++ b/src/EterLib/IME.cpp
@@ -819,7 +819,7 @@ void CIME::SetCurPos(int offset)
 	}
 	else
 	{
-		// offset�� �������� �ؽ�Ʈ�� ��ġ�� �´�. ���� ���� ����ؾ���.
+		// offset은 보여지는 텍스트의 위치로 온다. 따라서 새로 계산해야함.
 		//ms_curpos = min(ms_lastpos, offset);
 		ms_curpos = min(ms_lastpos, GetTextTagInternalPosFromRenderPos(m_wText, ms_lastpos, offset));
 	}
@@ -1503,8 +1503,8 @@ void CIME::CheckInputLocale()
         ms_wszCurrentIndicator[1] = towlower(szLang[1]);
     }
 
-	// �ƶ���� ����� ����� �ڵ� �������� �ٲ��� �ʴ´�
-	// ���뵵 ������ �ʴ´�.
+	// 아랍어에서 영어로 변경시 코드 페이지를 바꾸지 않는다
+	// 내용도 지우지 않는다.
 	if(ms_uOutputCodePage != 1256) {
 		ms_uOutputCodePage = ms_uInputCodePage;
 		Clear();
@@ -2147,7 +2147,7 @@ LRESULT CIME::WMComposition(HWND hWnd, UINT /*uiMsg*/, WPARAM /*wParam*/, LPARAM
 		AttributeProcess(hImc);
 	if(lParam&GCS_COMPSTR)
 	{
-		if (ms_uOutputCodePage == 950) // �븸 ���� �Է� ó��
+		if (ms_uOutputCodePage == 950) // 대만 주음 입력 처리
 		{
 			if (lParam&GCS_COMPATTR) 
 				CompositionProcessBuilding(hImc);
diff --git a/src/EterLib/Input.cpp b/src/EterLib/Input.cpp
index 07decf11..47a528b4 100644
--- a/src/EterLib/Input.cpp
+++ b/src/EterLib/Input.cpp
@@ -72,7 +72,7 @@ bool CInputKeyboard::InitializeKeyboard(HWND hWnd)
 	if (FAILED(hr = ms_lpKeyboard->SetDataFormat(&c_dfDIKeyboard)))
 		return false;
 
-// Alt + F4�� ���� ���� ���� - [levites]
+// Alt + F4를 위해 비독점 모드로 - [levites]
 //	DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_EXCLUSIVE;
 //	DWORD dwCoopFlags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND;
 	DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
@@ -99,7 +99,7 @@ void CInputKeyboard::UpdateKeyboard()
 	{
 		hr = ms_lpKeyboard->Acquire();			
 		
-		// ���� ���ø����̼��� ��Ȱ��ȭ �Ǿ� �־� �Է��� ���� �� ����.
+		// 현재 어플리케이션이 비활성화 되어 있어 입력을 받을 수 없다.
 		//if (hr == DIERR_OTHERAPPHASPRIO || hr == DIERR_NOTACQUIRED);
 		return;
 	}
diff --git a/src/EterLib/LensFlare.cpp b/src/EterLib/LensFlare.cpp
index b9d13130..cb7c64b3 100644
--- a/src/EterLib/LensFlare.cpp
+++ b/src/EterLib/LensFlare.cpp
@@ -206,7 +206,7 @@ void CLensFlare::DrawBeforeFlare()
 	STATEMANAGER.SaveRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
 	STATEMANAGER.SaveRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
 	/*
-	if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false)	// �� false?
+	if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false)	// 왠 false?
 	{
 		glColor4f(1.0f, 1.0f, 1.0f, m_fBeforeBright);
 		glDisable(GL_TEXTURE_2D);
diff --git a/src/EterLib/Resource.cpp b/src/EterLib/Resource.cpp
index 1dbe7d01..a37003c2 100644
--- a/src/EterLib/Resource.cpp
+++ b/src/EterLib/Resource.cpp
@@ -131,8 +131,8 @@ int CResource::ConvertPathName(const char * c_szPathName, char * pszRetPathName,
 
 void CResource::SetFileName(const char* c_szFileName)
 {
-	// 2004. 2. 1. myevan. �����尡 ���Ǵ� ��Ȳ���� static ������ ������� �ʴ°��� ����.
-	// 2004. 2. 1. myevan. ���� �̸� ó���� std::string ���
+	// 2004. 2. 1. myevan. 쓰레드가 사용되는 상황에서 static 변수는 사용하지 않는것이 좋다.
+	// 2004. 2. 1. myevan. 파일 이름 처리를 std::string 사용
 	m_stFileName=c_szFileName;
 }
 
diff --git a/src/EterLib/ResourceManager.cpp b/src/EterLib/ResourceManager.cpp
index d40dfa9d..c917caa6 100644
--- a/src/EterLib/ResourceManager.cpp
+++ b/src/EterLib/ResourceManager.cpp
@@ -10,9 +10,9 @@
 
 int g_iLoadingDelayTime = 20;
 
-const long c_Deleting_Wait_Time = 30000;			// ���� ��� �ð� (30��)
-const long c_DeletingCountPerFrame = 30;			// �����Ӵ� üũ ���ҽ� ����
-const long c_Reference_Decrease_Wait_Time = 30000;	// ���ε� ���ҽ��� ���� ��� �ð� (30��)
+const long c_Deleting_Wait_Time = 30000;			// 삭제 대기 시간 (30초)
+const long c_DeletingCountPerFrame = 30;			// 프레임당 체크 리소스 갯수
+const long c_Reference_Decrease_Wait_Time = 30000;	// 선로딩 리소스의 해제 대기 시간 (30초)
 
 CFileLoaderThread CResourceManager::ms_loadingThread;
 
@@ -56,7 +56,7 @@ void CResourceManager::ProcessBackgroundLoading()
 		ms_loadingThread.Request(stFileName);
 		m_WaitingMap.insert(TResourceRequestMap::value_type(dwFileCRC, stFileName));
 		itor = m_RequestMap.erase(itor);
-		//break; // NOTE: ���⼭ break �ϸ� õõ�� �ε� �ȴ�.
+		//break; // NOTE: 여기서 break 하면 천천히 로딩 된다.
 	}
 
 	DWORD dwCurrentTime = ELTimer_GetMSec();
@@ -74,7 +74,7 @@ void CResourceManager::ProcessBackgroundLoading()
 				pResource->OnLoad(pData->dwSize, pData->pvBuf);
 				pResource->AddReferenceOnly();
 
-				// ���⼭ �ö� ���۷��� ī��Ʈ�� ���� �ð��� ���� �ڿ� Ǯ���ֱ� ���Ͽ�
+				// 여기서 올라간 레퍼런스 카운트를 일정 시간이 지난 뒤에 풀어주기 위하여
 				m_pResRefDecreaseWaitingMap.insert(TResourceRefDecreaseWaitingMap::value_type(dwCurrentTime, pResource));
 			}
 		}
@@ -85,7 +85,7 @@ void CResourceManager::ProcessBackgroundLoading()
 		delete pData;
 	}
 
-	// DO : ���� �ð��� ������ ���� �̸� �ε��� �ξ��� ���ҽ��� ���۷��� ī��Ʈ�� ���� ��Ų�� - [levites]
+	// DO : 일정 시간이 지나고 난뒤 미리 로딩해 두었던 리소스의 레퍼런스 카운트를 감소 시킨다 - [levites]
 	long lCurrentTime = ELTimer_GetMSec();
 
 	TResourceRefDecreaseWaitingMap::iterator itorRef = m_pResRefDecreaseWaitingMap.begin();
@@ -233,7 +233,7 @@ CResource * CResourceManager::GetTypeResourcePointer(const char * c_szFileName,
 	DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile);
 	CResource * pResource = FindResourcePointer(dwFileCRC);
 
-	if (pResource)	// �̹� ���ҽ��� ������ ���� �Ѵ�.
+	if (pResource)	// 이미 리소스가 있으면 리턴 한다.
 		return pResource;
 
 	CResource *	(*newFunc) (const char *) = NULL;
@@ -283,7 +283,7 @@ CResource * CResourceManager::GetResourcePointer(const char * c_szFileName)
 	DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile);
 	CResource * pResource = FindResourcePointer(dwFileCRC);
 
-	if (pResource)	// �̹� ���ҽ��� ������ ���� �Ѵ�.
+	if (pResource)	// 이미 리소스가 있으면 리턴 한다.
 		return pResource;
 
 	const char * pcFileExt = strrchr(c_pszFile, '.');
diff --git a/src/EterLib/SkyBox.cpp b/src/EterLib/SkyBox.cpp
index fcc743cb..579316c7 100644
--- a/src/EterLib/SkyBox.cpp
+++ b/src/EterLib/SkyBox.cpp
@@ -272,7 +272,7 @@ void CSkyBox::SetCloudTexture(const char * c_szFileName)
 	CGraphicImageInstance * pGraphicImageInstance = GenerateTexture(c_szFileName);
 	m_GraphicImageInstanceMap.insert(TGraphicImageInstanceMap::value_type(m_FaceCloud.m_strfacename, pGraphicImageInstance));
 
-	// �̰� �Ⱦ��°� ��������? [cronan]
+	// 이거 안쓰는거 같은데요? [cronan]
 //	CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer("D:\\Ymir Work\\special/cloudalpha.tga");
 //	m_CloudAlphaImageInstance.SetImagePointer(pImage);
 }
@@ -803,7 +803,7 @@ void CSkyBox::Update()
 
 void CSkyBox::Render()
 {
-	// 2004.01.25 myevan ó���� ������ �Ĺ����� �ű��, DepthTest ó��
+	// 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리
 	STATEMANAGER.SaveRenderState(D3DRS_ZENABLE,	TRUE);
 	STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
 	STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE);
@@ -872,7 +872,7 @@ void CSkyBox::RenderCloud()
 	if (!pCloudGraphicImageInstance)
 		return;
 
-	// 2004.01.25 myevan ó���� ������ �Ĺ����� �ű��, DepthTest ó��
+	// 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리
 	STATEMANAGER.SaveRenderState(D3DRS_ZENABLE,	TRUE);
 	STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
 	STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE);	
diff --git a/src/EterLib/TextTag.cpp b/src/EterLib/TextTag.cpp
index ca6311de..de171723 100644
--- a/src/EterLib/TextTag.cpp
+++ b/src/EterLib/TextTag.cpp
@@ -19,7 +19,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext
         extraInfo.assign(++cur, 8);
         return TEXT_TAG_COLOR;
     }
-    else if (*cur == L'|') // ||�� |�� ǥ���Ѵ�.
+    else if (*cur == L'|') // ||는 |로 표시한다.
     {
         tagLen = 2;
         return TEXT_TAG_TAG;
@@ -29,7 +29,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext
         tagLen = 2;
         return TEXT_TAG_RESTORE_COLOR;
     }
-    else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[�̸�]|h
+    else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[이름]|h
     {
         tagLen = 2;
         return TEXT_TAG_HYPERLINK_START;
@@ -154,20 +154,20 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len)
 
     const wchar_t * cur = src;
 
-    // |r�� ���
+    // |r의 경우
     if (*cur == L'r' && *(cur - 1) == L'|')
     {
 	    int len = src_len;
 
-        // ||r�� ����
+        // ||r은 무시
         if (len >= 2 && *(cur - 2) == L'|')
             return 1;
 
         cur -= 2;
         len -= 2;
 
-        // |c���� ã�Ƽ� |��ġ���� �����Ѵ�.
-        while (len > 1) // �ּ� 2�ڸ� �˻��ؾ� �ȴ�.
+        // |c까지 찾아서 |위치까지 리턴한다.
+        while (len > 1) // 최소 2자를 검사해야 된다.
         {
             if (*cur == L'c' && *(cur - 1) == L'|')
                 return (src - cur) + 1;
@@ -175,9 +175,9 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len)
             --cur;
             --len;
         }
-        return (src_len); // ����� ����;;
+        return (src_len); // 못찾으면 전부;;
     }
-	// ||�� ���
+	// ||의 경우
 	else if (*cur == L'|' && *(cur - 1) == L'|')
 		return 1;
 
diff --git a/src/EterLib/Util.cpp b/src/EterLib/Util.cpp
index d7913374..cccd5715 100644
--- a/src/EterLib/Util.cpp
+++ b/src/EterLib/Util.cpp
@@ -332,7 +332,7 @@ void base64_decode(const char * str,char * resultStr)
 	{
 		i=0;
 		strcpy(szDest, "");
-		while(nCount<length && i<4)	// 4���� ����Ʈ�� ��´�.
+		while(nCount<length && i<4)	// 4개의 바이트를 얻는다.
 		{			
 			r = str[nCount++];
 			result = __base64_get(r);
@@ -340,13 +340,13 @@ void base64_decode(const char * str,char * resultStr)
 			{
 				if(result!=-1)
 					szDest[i++] = result;
-				else szDest[i++] = '@';	// It's end  (64���� ���ڵ��� ������ �ʱ� ����)
+				else szDest[i++] = '@';	// It's end  (64번은 디코딩시 사용되지 않기 때문)
 			}
 		}
 
-		if(i==4)	// 4���� �ҽ��� ��� ���´�. ���ڵ� ����
+		if(i==4)	// 4개의 소스를 모두 얻어냈다. 디코드 시작
 		{	
-			if( nCount+3 >= length )	// �������� ���� �����ߴ�.
+			if( nCount+3 >= length )	// 데이터의 끝에 도달했다.
 			{
 				if( szDest[1] == '@' )
 				{
diff --git a/src/EterLib/parser.cpp b/src/EterLib/parser.cpp
index 2e86c378..110806bd 100644
--- a/src/EterLib/parser.cpp
+++ b/src/EterLib/parser.cpp
@@ -220,11 +220,11 @@ bool Group::GetArg(const char *c_arg_base, int arg_len, TArgList & argList)
 			{
 				isValue = true;
 			}
-			// ���� �ƴϰ�, �̸��� ���۵��� �ʾ��� ��� ��ĭ�� �dz� �ڴ�.
+			// 값이 아니고, 이름이 시작되지 않았을 경우 빈칸은 건너 뛴다.
 			else if (!isValue && iNameLen == 0 && isspace((unsigned char) c))
 			{
 			}
-			// ���ʹ� �dz� �ڴ�
+			// 엔터는 건너 뛴다
 			else if (c == '\r' || c == '\n')
 			{
 			}
@@ -350,12 +350,12 @@ bool Group::Create(const std::string & stSource)
 					memcpy(box_data, data_begin, data_len);
 					box_data[data_len] = '\0';
 
-					data_len = LocaleString_RightTrim(box_data, data_len); // ������ ��ĭ �ڸ���
+					data_len = LocaleString_RightTrim(box_data, data_len); // 오른쪽 빈칸 자르기
 				}
 
 				{
 					const char* space = LocaleString_FindChar(box_data, data_len, ' ');
-					if (space)  // ���ڰ� ����
+					if (space)  // 인자가 있음
 					{
 						int name_len = space - box_data;
 						cmd.name.assign(box_data, name_len);
@@ -371,7 +371,7 @@ bool Group::Create(const std::string & stSource)
 							return false;
 						}
 					}
-					else        // ���ڰ� �����Ƿ� ��� ��Ʈ���� ���ɾ��.
+					else        // 인자가 없으므로 모든 스트링이 명령어다.
 					{
 						cmd.name.assign(box_data);
 						cmd.argList.clear();
diff --git a/src/EterLocale/Arabic.cpp b/src/EterLocale/Arabic.cpp
index 1cd08df3..e735e7ec 100644
--- a/src/EterLocale/Arabic.cpp
+++ b/src/EterLocale/Arabic.cpp
@@ -258,7 +258,7 @@ size_t Arabic_MakeShape(wchar_t* src, size_t srcLen, wchar_t* dst, size_t dstLen
 
 		if (Arabic_IsInMap(cur))
 		{
-			// ���� ���� ����
+			// 이전 글자 얻어내기
 			wchar_t prev = 0;			
 			{
 				size_t prevIndex = srcIndex;
@@ -282,7 +282,7 @@ size_t Arabic_MakeShape(wchar_t* src, size_t srcLen, wchar_t* dst, size_t dstLen
 				}
 			}
 
-			// ���� ���� ����
+			// 다음 글자 얻어내기
 			wchar_t next = 0;
 			{
 				size_t nextIndex = srcIndex;
diff --git a/src/EterLocale/StringCodec_Vietnamese.cpp b/src/EterLocale/StringCodec_Vietnamese.cpp
index 110376f2..9dd31ce3 100644
--- a/src/EterLocale/StringCodec_Vietnamese.cpp
+++ b/src/EterLocale/StringCodec_Vietnamese.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "StringCodec_Vietnamese.h"
 
 #pragma warning(disable: 4310) // char 짤림 경고 무시
@@ -551,4 +551,4 @@ int EL_String_Encode_Vietnamese(const wchar_t* wide, int wideLen, char* multi, i
 	}
 
 	return dest;
-}
\ No newline at end of file
+}
diff --git a/src/EterPack/EterPack.cpp b/src/EterPack/EterPack.cpp
index 68b9def9..62d55618 100644
--- a/src/EterPack/EterPack.cpp
+++ b/src/EterPack/EterPack.cpp
@@ -254,7 +254,7 @@ bool CEterPack::Create(CEterFileDict& rkFileDict, const char * dbname, const cha
 	
 	m_bReadOnly = bReadOnly;
 
-	// bReadOnly ��尡 �ƴϰ� ������ ���̽��� �����ٸ� ���� ����
+	// bReadOnly 모드가 아니고 데이터 베이스가 열린다면 생성 실패
 	if (!CreateIndexFile())
 		return false;
 
@@ -283,7 +283,7 @@ bool CEterPack::DecryptIV(DWORD dwPanamaKey)
 	if (m_stIV_Panama.length() != 32)
 		return false;
 
-	if (m_bDecrypedIV) // �̹� ��ȣȭ�� Ǯ������ �ٽ� ó�� ����
+	if (m_bDecrypedIV) // 이미 암호화가 풀렸으면 다시 처리 안함
 		return true;
 
 	DWORD* ivs = (DWORD*)&m_stIV_Panama[0];
@@ -474,7 +474,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite)
 
 			m_DataPositionMap.insert(TDataPositionMap::value_type(index->filename_crc, index));
 
-			if (bOverwrite) // ���� ���� ��ŷ ������ ���߿� �������� �ֻ����� ����ؾ��Ѵ�
+			if (bOverwrite) // 서버 연동 패킹 파일은 나중에 들어오지만 최상위로 등록해야한다
 				rkFileDict.UpdateItem(this, index);
 			else
 				rkFileDict.InsertItem(this, index);
@@ -492,7 +492,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite)
 //
 //void CEterPack::ClearDataMemoryMap()
 //{
-//	// m_file�� data file�̴�...
+//	// m_file이 data file이다...
 //	m_file.Destroy();
 //	m_tLastAccessTime = 0;
 //	m_bIsDataLoaded = false;
@@ -516,8 +516,8 @@ bool CEterPack::Get(CMappedFile& out_file, const char * filename, LPCVOID * data
 	//	m_bIsDataLoaded = true;
 	//}
 	
-	// �������� CEterPack���� epk�� memory map�� �÷�����, ��û�� ���� �� �κ��� ��ũ�ؼ� �Ѱ� ����µ�,
-	// ������ ��û�� ����, �ʿ��� �κи� memory map�� �ø���, ��û�� ������ �����ϰ� ��.
+	// 기존에는 CEterPack에서 epk를 memory map에 올려놓고, 요청이 오면 그 부분을 링크해서 넘겨 줬었는데,
+	// 이제는 요청이 오면, 필요한 부분만 memory map에 올리고, 요청이 끝나면 해제하게 함.
 	out_file.Create(m_stDataFileName.c_str(), data, index->data_position, index->data_size);
 	
 	bool bIsSecurityCheckRequired = ( index->compressed_type == COMPRESSED_TYPE_SECURITY ||
@@ -982,15 +982,15 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType
 	data_crc = GetCRC32((const char *) data, len);
 #endif
 
-	// ���� �����Ͱ� ������..
+	// 기존 데이터가 있으면..
 	if (pIndex)
 	{
-		// ���� data ũ�Ⱑ ���� ������ ũ�⸦ ������ �� �ִٸ�
+		// 기존 data 크기가 넣을 데이터 크기를 수용할 수 있다면
 		if (pIndex->real_data_size >= len)
 		{
 			++m_map_indexRefCount[pIndex->id];
 
-			// ���̰� Ʋ���ų�, checksum�� Ʋ�� ���� ���� �Ѵ�.
+			// 길이가 틀리거나, checksum이 틀릴 때만 저장 한다.
 			if ( (pIndex->data_size != len) || 
 #ifdef CHECKSUM_CHECK_MD5
 				(memcmp( pIndex->MD5Digest, context.digest, 16 ) != 0) )
@@ -1022,13 +1022,13 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType
 			return true;
 		}
 
-		// ���� ������ ũ�Ⱑ ���� �� �� ���� ���ٸ�, ���� �ε����� �Ҵ���
-		// �־�� �Ѵ�. ���� �ִ� �ε����� ��� �д�.
+		// 기존 데이터 크기가 새로 들어갈 것 보다 적다면, 새로 인덱스를 할당해
+		// 넣어야 한다. 원래 있던 인덱스는 비워 둔다.
 		PushFreeIndex(pIndex);
 		WriteIndex(fileIndex, pIndex);
 	}
 
-	// �� ������
+	// 새 데이터
 	pIndex = NewIndex(fileIndex, filename, len);
 	pIndex->data_size = len;
 
@@ -1077,7 +1077,7 @@ bool CEterPack::CreateIndexFile()
 		return false;
 
 	//
-	// ������ �����Ƿ� ���� �����.
+	// 파일이 없으므로 새로 만든다.
 	//
 	fp = fopen(m_indexFileName, "wb");
 	
@@ -1107,16 +1107,16 @@ void CEterPack::WriteIndex(CFileBase & file, TEterPackIndex * index)
 }
 
 /*
- *	Free Block �̶� �����Ϳ��� ������ �κ��� ���Ѵ�.
- *	Free Block ���� ���� FREE_INDEX_BLOCK_SIZE (32768) ������ ��������
- *	����Ʈ�� �����ȴ�.
+ *	Free Block 이란 데이터에서 지워진 부분을 말한다.
+ *	Free Block 들은 각각 FREE_INDEX_BLOCK_SIZE (32768) 단위로 나누어져
+ *	리스트로 관리된다.
  *
- *	���� ��� 128k �� �����ʹ�
- *	128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 �̹Ƿ�
- *	���� �����δ� m_FreeIndexList[4] �� ����.
+ *	예를 들어 128k 의 데이터는
+ *	128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 이므로
+ *	최종 적으로는 m_FreeIndexList[4] 에 들어간다.
  *
- *	FREE_INDEX_BLOCK_SIZE �� �ִ� ���� FREE_INDEX_MAX_SIZE(512) �̴�.
- *	���� 16MB �̻��� �����ʹ� ������ �迭�� 512 ��ġ�� ����.
+ *	FREE_INDEX_BLOCK_SIZE 의 최대 값은 FREE_INDEX_MAX_SIZE(512) 이다.
+ *	따라서 16MB 이상의 데이터는 무조건 배열의 512 위치에 들어간다.
  */
 int CEterPack::GetFreeBlockIndex(long size)
 {
@@ -1153,7 +1153,7 @@ TEterPackIndex* CEterPack::NewIndex(CFileBase& file, const char* filename, long
 {
 	TEterPackIndex* index = NULL;
 	int block_size = size + (DATA_BLOCK_SIZE - (size % DATA_BLOCK_SIZE));
-//	if ((index = FindIndex(filename))) // �̹� �ε����� �����ϴ��� Ȯ��
+//	if ((index = FindIndex(filename))) // 이미 인덱스가 존재하는지 확인
 //		return index;
 
 	int blockidx = GetFreeBlockIndex(block_size);
@@ -1323,7 +1323,7 @@ const char * CEterPack::GetDBName()
 
 void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, unsigned int keySize)
 {
-	// Ű ��ȣȭ
+	// 키 암호화
 	if (keySize != 32)
 		return;
 
@@ -1365,7 +1365,7 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un
 					 ) // HashFilter
 				 ); // StringSource
 
-	// ������� Ű�� ù��° 4����Ʈ�� ���� 16����Ʈ Ű ���� �˰����� ����
+	// 만들어진 키의 첫번째 4바이트로 다음 16바이트 키 생성 알고리즘 선택
 	unsigned int idx2 = *(unsigned int*) key;
 
 	switch (idx2 & 3)
@@ -1394,14 +1394,14 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un
 						//) // HexEncoder
 					 ) // HashFilter
 				 ); // StringSource
-	// Ű ���� �Ϸ�
+	// 키 생성 완료
 }
 
 bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T dataSize, CLZObject& zObj)
 {
 	if (32 != m_stIV_Panama.length())
 	{
-		// ��Ŀ�� �� �޼����� ���� ��Ʈ�� ������� ����׿����� ���
+		// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
 #ifdef _DEBUG
 		TraceError("IV not set (filename: %s)", filename);
 #endif
@@ -1423,7 +1423,7 @@ bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T
 	__CreateFileNameKey_Panama(filename, key, sizeof(key));
 	Encryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
 
-	// MandatoryBlockSize�� ������ �������� ����� �ִ� 2048 ����Ʈ��
+	// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
 	DWORD cryptSize = dataSize - (dataSize % Encryptor.MandatoryBlockSize());
 	cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
 
@@ -1458,7 +1458,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T
 {
 	if (32 != m_stIV_Panama.length())
 	{
-		// ��Ŀ�� �� �޼����� ���� ��Ʈ�� ������� ����׿����� ���
+		// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
 #ifdef _DEBUG
 		TraceError("IV not set (filename: %s)", filename);
 #endif
@@ -1472,7 +1472,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T
 	__CreateFileNameKey_Panama(filename, key, sizeof(key));
 	Decryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
 
-	// MandatoryBlockSize�� ������ �������� ����� �ִ� 2048 ����Ʈ��
+	// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
 	DWORD cryptSize = dataSize - (dataSize % Decryptor.MandatoryBlockSize());
 	cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
 
diff --git a/src/EterPack/EterPackManager.cpp b/src/EterPack/EterPackManager.cpp
index 075eca8d..5c9b7355 100644
--- a/src/EterPack/EterPackManager.cpp
+++ b/src/EterPack/EterPackManager.cpp
@@ -48,7 +48,7 @@ void CEterPackManager::SetRelativePathMode()
 }
 
 
-// StringPath std::string ����
+// StringPath std::string 버전
 int CEterPackManager::ConvertFileName(const char * c_szFileName, std::string & rstrFileName)
 {
 	rstrFileName = c_szFileName;
@@ -226,7 +226,7 @@ bool CEterPackManager::GetFromPack(CMappedFile & rMappedFile, const char * c_szF
 	return false;
 }
 
-const time_t g_tCachingInterval = 10; // 10��
+const time_t g_tCachingInterval = 10; // 10초
 void CEterPackManager::ArrangeMemoryMappedPack()
 {
 	//time_t curTime = time(NULL);
@@ -250,8 +250,8 @@ bool CEterPackManager::GetFromFile(CMappedFile & rMappedFile, const char * c_szF
 #ifndef _DEBUG
 	//const char *pcExt = strchr(c_szFileName, '.');
 	//if (pcExt && 
-	//	_strnicmp(pcExt, ".py", 3) == 0 && // python ��ũ��Ʈ ��
-	//	stricmp(c_szFileName, "logininfo.py") != 0 && // �α��� ���� ������ �ƴϰ�
+	//	_strnicmp(pcExt, ".py", 3) == 0 && // python 스크립트 중
+	//	stricmp(c_szFileName, "logininfo.py") != 0 && // 로그인 정보 파일이 아니고
 	//	strnicmp(c_szFileName, "locale", 6) != 0
 	//	)
 	//{
@@ -289,7 +289,7 @@ bool CEterPackManager::isExistInPack(const char * c_szFileName)
 				return pkFileItem->pkPack->IsExist(strFileName.c_str());
 	}
 
-	// NOTE : ��ġ �Ǵ� ���� ���ٸ� false - [levites]
+	// NOTE : 매치 되는 팩이 없다면 false - [levites]
 	return false;
 }
 
@@ -447,7 +447,7 @@ void CEterPackManager::RetrieveHybridCryptPackKeys(const BYTE *pStream)
 	{
 		int iRecvedCryptKeySize = 0;
 		memcpy( &iRecvedCryptKeySize, pStream + iMemOffset, sizeof(iRecvedCryptKeySize) );
-		iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // �������� ���� key stream���� filename hash�� ���ԵǾ� �����Ƿ�, hash ������ ��ŭ ����.
+		iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // 서버에서 받은 key stream에는 filename hash가 포함되어 있으므로, hash 사이즈 만큼 배줌.
 		iMemOffset += sizeof(iRecvedCryptKeySize); 
 
 		memcpy( &dwPackageNameHash, pStream + iMemOffset, sizeof(dwPackageNameHash) );
diff --git a/src/EterPythonLib/PythonGraphicTextModule.cpp b/src/EterPythonLib/PythonGraphicTextModule.cpp
index 060bf0c0..2378bbbc 100644
--- a/src/EterPythonLib/PythonGraphicTextModule.cpp
+++ b/src/EterPythonLib/PythonGraphicTextModule.cpp
@@ -287,7 +287,7 @@ PyObject* grpGetSplitingTextLineCount(PyObject* poSelf, PyObject* poArgs)
 		{
 			i += 1;
 			
-			// �ڵ� �� �ٲ޵ǰ� �ٷ� | �� ���� ���
+			// 자동 줄 바꿈되고 바로 | 가 있을 경우
 			if (iPosition>0)
 				++iLineCount;
 
@@ -337,15 +337,15 @@ PyObject* grpGetSplitingTextLine(PyObject* poSelf, PyObject* poArgs)
 	int iPosition = 0;
 	int iLineCount = 0;
 
-	// 1�� : ���� �� ����ϰ� �ȵɱ� -_-a
-	// 2�� : ��.. �� �������� +_+
+	// 1차 : 조금 더 깔끔하게 안될까 -_-a
+	// 2차 : 오.. 좀 나아졌다 +_+
 	for (DWORD i = 0; i < strlen(szText);)
 	{
 		if ('|' == szText[i])
 		{
 			i += 1;
 
-			// �ڵ� �� �ٲ޵ǰ� �ٷ� | �� ���� ���
+			// 자동 줄 바꿈되고 바로 | 가 있을 경우
 			if (iPosition>0)
 				++iLineCount;
 			iPosition = 0;
diff --git a/src/EterPythonLib/PythonGridSlotWindow.cpp b/src/EterPythonLib/PythonGridSlotWindow.cpp
index 936aec19..a9cb515d 100644
--- a/src/EterPythonLib/PythonGridSlotWindow.cpp
+++ b/src/EterPythonLib/PythonGridSlotWindow.cpp
@@ -18,10 +18,10 @@ void CGridSlotWindow::OnRenderPickingSlot()
 		DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
 		DWORD dwItemIndex = UI::CWindowManager::Instance().GetAttachingIndex();
 
-		// UseMode �̰�..
+		// UseMode 이고..
 		if (m_isUseMode)
 		{
-			// Pick �� �������� ������..
+			// Pick 된 아이템이 있으면..
 			TSlot * pSlot = *SlotList.begin();
 			TSlot * pCenterSlot;
 			if (GetSlotPointer(pSlot->dwCenterSlotNumber, &pCenterSlot))
@@ -40,7 +40,7 @@ void CGridSlotWindow::OnRenderPickingSlot()
 			}
 		}
 
-		// �ƴϸ� �׳� �ű��
+		// 아니면 그냥 옮기기
 		if (CheckMoving(dwSlotNumber, dwItemIndex, SlotList))
 			CPythonGraphic::Instance().SetDiffuseColor(1.0f, 1.0f, 1.0f, 0.5f);
 		else
@@ -85,8 +85,8 @@ BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
 	{
 		TSlot * pSlot = *itor;
 
-		// NOTE : �� ���� �̻� �������� �������� ��� ���� ���� ���� ���� �����͸� �����Ѵ�.
-		//        ���������� ���� �ڵ�.. �� ���� ����� ���°�? - [levites]
+		// NOTE : 한 슬롯 이상 사이즈의 아이템의 경우 가장 왼쪽 위의 슬롯 포인터를 리턴한다.
+		//        명시적이지 못한 코드.. 더 좋은 방법은 없는가? - [levites]
 		if (!pMinSlot)
 		{
 			pMinSlot = pSlot;
@@ -119,7 +119,7 @@ BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
 
 		*ppSlot = pCenterSlot;
 
-		// ���� �������� ��� �ִ� ���̰�..
+		// 현재 아이템을 들고 있는 중이고..
 		if (UI::CWindowManager::Instance().IsAttaching())
 		{
 			DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
@@ -159,7 +159,7 @@ BOOL CGridSlotWindow::GetPickedSlotList(int iWidth, int iHeight, std::list<TSlot
 		int ixStart = int(ix) - int(ixHalfStep - (ixHalfStep % 2));
 		int ixEnd = int(ix) + int(ixHalfStep);
 
-		// FIXME : ����� �� ��� ������ � - [levites]
+		// FIXME : 제대로 된 계산 공식을 찾자 - [levites]
 		int iyStart = 0, iyEnd = 0;
 
 		if (1 == iHeight)
@@ -214,7 +214,7 @@ BOOL CGridSlotWindow::GetPickedSlotList(int iWidth, int iHeight, std::list<TSlot
 			}
 		}
 
-		// Refine Scroll ���� ���� ���� ó��
+		// Refine Scroll 등을 위한 예외 처리
 		if (m_isUseMode && 1 == pSlotPointerList->size())
 		{
 			TSlot * pMainSlot = *pSlotPointerList->begin();
@@ -349,11 +349,11 @@ BOOL CGridSlotWindow::CheckMoving(DWORD dwSlotNumber, DWORD dwItemIndex, const s
 	{
 		TSlot * pSlot = *itor;
 
-		if (dwSlotNumber != pSlot->dwCenterSlotNumber) // ����� �ڸ��� �ƴ� ��쿡
+		if (dwSlotNumber != pSlot->dwCenterSlotNumber) // 들었던 자리가 아닐 경우에
 		{
-			if (0 != pSlot->dwItemIndex || pSlot->dwCenterSlotNumber != pSlot->dwSlotNumber) // �������� �ְ�
+			if (0 != pSlot->dwItemIndex || pSlot->dwCenterSlotNumber != pSlot->dwSlotNumber) // 아이템이 있고
 			{
-				if (dwItemIndex != pSlot->dwItemIndex) // �ٸ� �������̸� �� �ű�
+				if (dwItemIndex != pSlot->dwItemIndex) // 다른 아이템이면 못 옮김
 					return false;
 			}
 		}
diff --git a/src/EterPythonLib/PythonSlotWindow.cpp b/src/EterPythonLib/PythonSlotWindow.cpp
index a5059b6c..e321d071 100644
--- a/src/EterPythonLib/PythonSlotWindow.cpp
+++ b/src/EterPythonLib/PythonSlotWindow.cpp
@@ -252,7 +252,7 @@ void CSlotWindow::SetCoverButton(DWORD dwIndex, const char * c_szUpImageName, co
 	rpCoverButton->Enable();
 	rpCoverButton->Show();
 
-	// NOTE : Cover ��ư�� Plus ��ư�� ���������� �ӽ� �ڵ带..
+	// NOTE : Cover 버튼이 Plus 버튼을 가려버려서 임시 코드를..
 	if (pSlot->pSlotButton)
 	{
 		SetTop(pSlot->pSlotButton);
@@ -585,7 +585,7 @@ void CSlotWindow::RefreshSlot()
 {
 	OnRefreshSlot();
 
-	// NOTE : Refresh �ɶ� ToolTip �� ���� �մϴ� - [levites]
+	// NOTE : Refresh 될때 ToolTip 도 갱신 합니다 - [levites]
 	if (IsRendering())
 	{
 		TSlot * pSlot;
@@ -862,8 +862,8 @@ void CSlotWindow::OnMouseOverOut()
 
 void CSlotWindow::OnMouseOver()
 {
-	// FIXME : �����츦 �巡�� �ϴ� ���߿� SetTop�� �Ǿ������ Capture�� Ǯ���� ������. �װ��� ���� �ڵ�.
-	//         �� �� �ٺ����� �ذ�å�� ã�ƾ� �� �� - [levites]
+	// FIXME : 윈도우를 드래깅 하는 도중에 SetTop이 되어버리면 Capture가 풀어져 버린다. 그것의 방지 코드.
+	//         좀 더 근본적인 해결책을 찾아야 할 듯 - [levites]
 //	if (UI::CWindowManager::Instance().IsCapture())
 //	if (!UI::CWindowManager::Instance().IsAttaching())
 //		return;
@@ -991,7 +991,7 @@ void CSlotWindow::OnRender()
 	TSlotListIterator itor;
 
 	//
-	// ��� ���� ���� �׸���
+	// 모든 슬롯 상자 그리기
 	//////////////////////////////////////////////////////////////////////////
 #ifdef __RENDER_SLOT_AREA__
 	CPythonGraphic::Instance().SetDiffuseColor(0.5f, 0.5f, 0.5f);
@@ -1056,7 +1056,7 @@ void CSlotWindow::OnRender()
 
 			if (fcurTime - rSlot.fStartCoolTime >= rSlot.fCoolTime)
 			{
-				// ��Ÿ���� ������ 1�� �̳����..
+				// 쿨타임이 끝난지 1초 이내라면..
 				if ((fcurTime - rSlot.fStartCoolTime) - rSlot.fCoolTime < 1.0f)
 					__CreateFinishCoolTimeEffect(&rSlot);
 
@@ -1218,8 +1218,8 @@ BOOL CSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
 	int ixLocal = lx - m_rect.left;
 	int iyLocal = ly - m_rect.top;
 
-	// NOTE : ���� ���� ��� �Ѱ��� ���� �̶�� ���� �̿��� ���� ���������� ������ �Ʒ���
-	//        ���ʷ� �˻��� �����ν� ���� �ִ� Slot�� �ڵ� ���� �ȴٴ� Ư���� �̿��Ѵ�. - [levites]
+	// NOTE : 왼쪽 맨위 상단 한곳이 기준 이라는 점을 이용해 왼쪽 위에서부터 오른쪽 아래로
+	//        차례로 검색해 감으로써 덮혀 있는 Slot은 자동 무시 된다는 특성을 이용한다. - [levites]
 	for (TSlotListIterator itor = m_SlotList.begin(); itor != m_SlotList.end(); ++itor)
 	{
 		TSlot & rSlot = *itor;
@@ -1227,7 +1227,7 @@ BOOL CSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
 		int ixCellSize = rSlot.ixCellSize;
 		int iyCellSize = rSlot.iyCellSize;
 
-		// NOTE : Item�� Hide �Ǿ����� ��츦 ����..
+		// NOTE : Item이 Hide 되어있을 경우를 위한..
 		if (rSlot.isItem)
 		{
 			ixCellSize = max(rSlot.ixCellSize, int(rSlot.byxPlacedItemSize * ITEM_WIDTH));
diff --git a/src/EterPythonLib/PythonWindow.cpp b/src/EterPythonLib/PythonWindow.cpp
index 66d91d58..5e3a7690 100644
--- a/src/EterPythonLib/PythonWindow.cpp
+++ b/src/EterPythonLib/PythonWindow.cpp
@@ -66,10 +66,10 @@ namespace UI
 
 	void CWindow::Clear()
 	{
-		// FIXME : Children�� ��� Delete������ �ʴ´�.
-		//         ������ Python�ʿ��� Destroy�� �ϳ��� �ٽ� ȣ�� �� ���̹Ƿ�..
-		//         ������ ������ ���� ��ũ�� ���� ���´�.
-		//         �� ���� ���´� �ִ°�? - [levites]
+		// FIXME : Children을 즉시 Delete하지는 않는다.
+		//         어차피 Python쪽에서 Destroy가 하나씩 다시 호출 될 것이므로..
+		//         하지만 만약을 위해 링크는 끊어 놓는다.
+		//         더 좋은 형태는 있는가? - [levites]
 		std::for_each(m_pChildList.begin(), m_pChildList.end(), FClear());
 		m_pChildList.clear();
 
@@ -93,8 +93,8 @@ namespace UI
 		m_bShow = false;
 	}
 
-	// NOTE : IsShow�� "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" ������, __IsShowing�� "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" �� üũ�Ѵ�
-	//        �ڽ��� Show ���� Tree ������ Parent �� �ϳ��� Hide �� �� �����Ƿ�.. - [levites]
+	// NOTE : IsShow는 "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" 이지만, __IsShowing은 "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" 를 체크한다
+	//        자신은 Show 지만 Tree 위쪽의 Parent 중 하나는 Hide 일 수 있으므로.. - [levites]
 	bool CWindow::IsRendering()
 	{
 		if (!IsShow())
@@ -577,7 +577,7 @@ namespace UI
 	BOOL CWindow::OnMouseLeftButtonUp()
 	{
 		PyCallClassMemberFunc(m_poHandler, "OnMouseLeftButtonUp", BuildEmptyTuple());
-		return TRUE; // NOTE : ButtonUp�� ���ܷ� ������ TRUE
+		return TRUE; // NOTE : ButtonUp은 예외로 무조건 TRUE
 	}
 
 	BOOL CWindow::OnMouseLeftButtonDoubleClick()
@@ -1291,7 +1291,7 @@ namespace UI
 	}
 
 	///////////////////////////////////////////////////////////////////////////////////////////////
-	// MarkBox - ��ũ ��¿� UI ������
+	// MarkBox - 마크 출력용 UI 윈도우
 	///////////////////////////////////////////////////////////////////////////////////////////////
 	CMarkBox::CMarkBox(PyObject * ppyObject) : CWindow(ppyObject)
 	{
diff --git a/src/EterPythonLib/PythonWindowManager.cpp b/src/EterPythonLib/PythonWindowManager.cpp
index 1b48e84e..2e5c3ccf 100644
--- a/src/EterPythonLib/PythonWindowManager.cpp
+++ b/src/EterPythonLib/PythonWindowManager.cpp
@@ -534,7 +534,7 @@ namespace UI
 		if (m_pActiveWindow)
 			m_pActiveWindow->OnKillFocus();
 
-		// �̹� ���� �����츮��Ʈ�ȿ� �ִٸ� �����Ѵ�..
+		// 이미 락된 윈도우리스트안에 있다면 제거한다..
 		m_LockWindowList.remove(pWin);
 
 		if (m_pLockWindow)
@@ -575,8 +575,8 @@ namespace UI
 
 		if (m_pActiveWindow)
 		{
-			// NOTE : ������ Window�� �������� Clear�� ����� �ұ�?
-			//        �ϴ��� �ߺ� ������ �ȵǸ� ��Ŀ�� �Ǵ� ���� ��ü�� 5�� �̸��̴� ���� �ʿ������� ���� ��.. - [levites]
+			// NOTE : 누적된 Window가 많아지면 Clear를 해줘야 할까?
+			//        일단은 중복 누적이 안되며 포커스 되는 갯수 자체가 5개 미만이니 굳이 필요하지는 않을 듯.. - [levites]
 			m_ActiveWindowList.push_back(m_pActiveWindow);
 			m_pActiveWindow->OnKillFocus();
 		}
@@ -618,8 +618,8 @@ namespace UI
 		CWindow * pParentWindow = pWin->GetParent();
 		pParentWindow->SetTop(pWin);
 
-		// NOTE : Capture�� ���µȴ�..? - [levites]
-		// NOTE : �κ��丮���� �������� �巡�� �ؼ� �ۿ��� ������ ĸ�簡 ���Ƽ� â�� ��ư�� �ι� ������ �ϴ� ���׸� ���� �߰�
+		// NOTE : Capture가 리셋된다..? - [levites]
+		// NOTE : 인벤토리에서 아이템을 드래그 해서 밖에다 놓을때 캡춰가 남아서 창의 버튼을 두번 눌러야 하는 버그를 위해 추가
 //		ResetCapture();
 	}
 
@@ -628,7 +628,7 @@ namespace UI
 		if (m_pLockWindow)
 			return;
 
-		// GameLayer�� ���� �ִ� �����찡 ��ŷ �ƴٸ� ������ SetTop�� ���ش�.
+		// GameLayer에 속해 있는 윈도우가 피킹 됐다면 무조건 SetTop을 해준다.
 		TLayerContainer::iterator itor = m_LayerWindowMap.find("UI");
 		if (itor == m_LayerWindowMap.end())
 			return;
@@ -896,7 +896,7 @@ namespace UI
 		{
 			if (m_pLeftCaptureWindow->OnMouseLeftButtonUp())
 			{
-				// NOTE : ���⼭ m_pLeftCaptureWindow�� NULL �� �� �ֽ��ϴ�!! - [levites]
+				// NOTE : 여기서 m_pLeftCaptureWindow가 NULL 일 수 있습니다!! - [levites]
 				m_pLeftCaptureWindow = NULL;
 				return;
 			}
@@ -1099,7 +1099,7 @@ namespace UI
 				return;
 		}
 
-		// NOTE : ��ü�� ������ �ʰ� Activate�Ǿ��ִ� EditLine���� ������ �̺�Ʈ
+		// NOTE : 전체로 돌리지 않고 Activate되어있는 EditLine에만 보내는 이벤트
 	}
 
 	void CWindowManager::RunChangeCodePage()
diff --git a/src/EterPythonLib/PythonWindowManagerModule.cpp b/src/EterPythonLib/PythonWindowManagerModule.cpp
index 47d092cc..4301cc02 100644
--- a/src/EterPythonLib/PythonWindowManagerModule.cpp
+++ b/src/EterPythonLib/PythonWindowManagerModule.cpp
@@ -1883,13 +1883,13 @@ PyObject * wndMarkBox_SetImageFilename(PyObject * poSelf, PyObject * poArgs)
 
 PyObject * wndMarkBox_SetImage(PyObject * poSelf, PyObject * poArgs)
 {
-	// �ƹ��͵� ���� ����
+	// 아무것도 하지 않음
 	return Py_BuildNone();
 }
 
 PyObject * wndMarkBox_Load(PyObject * poSelf, PyObject * poArgs)
 {
-	// �ƹ��͵� ���� ����
+	// 아무것도 하지 않음
 	return Py_BuildNone();
 }
 
@@ -2495,7 +2495,7 @@ void initwndMgr()
 
 	PyObject * poModule = Py_InitModule("wndMgr", s_methods);
 
-// �ϳ��� ��ųʸ��� �ʹ� ���� Function�� ���� �Ǵ� �� ���� �̷������� ��ųʸ��� ������ ���� ���� �� - [levites]
+// 하나의 딕셔너리에 너무 많은 Function이 포함 되는 것 같아 이런식으로 딕셔너리를 나누는 것을 고려 중 - [levites]
 //	PyObject * poMgrModule = Py_InitModule("wndMgr", s_methods);
 //	PyObject * poTextModule = Py_InitModule("wndText", s_methods);
 //	PyObject * poSlotModule = Py_InitModule("wndSlot", s_methods);
diff --git a/src/GameLib/ActorInstance.cpp b/src/GameLib/ActorInstance.cpp
index 0e3254c9..de687acb 100644
--- a/src/GameLib/ActorInstance.cpp
+++ b/src/GameLib/ActorInstance.cpp
@@ -112,7 +112,7 @@ void CActorInstance::OnUpdate()
 }
 
 
-// 2004.07.05.myevan. �ý�ź�� �ʿ� ���̴� �����ذ�
+// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결
 IBackground& CActorInstance::GetBackground()
 {
 	return IBackground::Instance();
@@ -202,7 +202,7 @@ void CActorInstance::SetFishingPosition(D3DXVECTOR3 & rv3Position)
 	m_v3FishingPosition = rv3Position;
 }
 
-// ActorInstanceMotion.cpp �� �ֵ��� ����
+// ActorInstanceMotion.cpp 에 넣도록 하자
 void  CActorInstance::Move()
 {
 	if (m_isWalking)
@@ -459,8 +459,8 @@ void CActorInstance::PhysicsProcess()
 
 void CActorInstance::__AccumulationMovement(float fRot)
 {
-	// NOTE - �ϴ��� WAIT�� �̲����� ����
-	//        ���Ŀ��� RaceMotionData�� �̵��Ǵ� ��������� ���� Flag�� ���� �ְԲ� �Ѵ�. - [levites]
+	// NOTE - 일단은 WAIT로 미끄러짐 방지
+	//        추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites]
 	if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
 		return;
 
@@ -606,9 +606,9 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
 		return;
 	}
 
-	// NOTE : ������ Sphere Overlap������� ó���� ���⸦ �ϸ��� Penetration�� ������ ���Ƽ� ( �����ε� ���԰� --)
-	// Sphere�� Collision�� ������ ��� ������ġ�� RollBack�ϴ� ������� �ٲ��.
-	// �� BGObject�� ���ؼ���.
+	// NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --)
+	// Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다.
+	// 단 BGObject에 대해서만.
 
 	if (isAttacking() )
 		return;
@@ -618,7 +618,7 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
 	{
 		BlockMovement();
 
-		//Movement�ʱ�ȭ
+		//Movement초기화
 	/*	m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f);
 
 		TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
@@ -682,7 +682,7 @@ void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_
 		return;
 	}
 
-	// Body�� �ϳ����� �����մϴ�.
+	// Body는 하나임을 가정합니다.
 
 	if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f) 
 		return;
diff --git a/src/GameLib/ActorInstanceAttach.cpp b/src/GameLib/ActorInstanceAttach.cpp
index bfc104b2..f5f1a639 100644
--- a/src/GameLib/ActorInstanceAttach.cpp
+++ b/src/GameLib/ActorInstanceAttach.cpp
@@ -159,7 +159,7 @@ void CActorInstance::AttachWeapon(DWORD dwItemIndex,DWORD dwParentPartIndex, DWO
 	}
 
 	__DestroyWeaponTrace();
-	//��չ���(�ڰ� �̵���) �޼�,������ ��ο� ����.
+	//양손무기(자객 이도류) 왼손,오른손 모두에 장착.
 	if (__IsRightHandWeapon(pItemData->GetWeaponType()))
 		AttachWeapon(dwParentPartIndex, CRaceData::PART_WEAPON, pItemData);
 	if (__IsLeftHandWeapon(pItemData->GetWeaponType()))
@@ -182,7 +182,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
 	if (!GetAttachingBoneName(dwPartIndex, &szBoneName))
 		return;
 
-	// NOTE : (�̵���ó��)�ܵ��� ��� ���°� �ٸ� ������ ��´�. ���� ��� ����Ʈ�� ����
+	// NOTE : (이도류처리)단도일 경우 형태가 다른 것으로 얻는다. 없을 경우 디폴트를 리턴
 	if (CRaceData::PART_WEAPON_LEFT == dwPartIndex)
 	{
 		RegisterModelThing(dwPartIndex, pItemData->GetSubModelThing());
@@ -205,7 +205,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
 	SetModelInstance(dwPartIndex, dwPartIndex, 0);
 	AttachModelInstance(dwParentPartIndex, szBoneName, dwPartIndex);
 
-	// 20041208.myevan.���⽺��ŧ��(������ SetShape���� ���� ���ش�.)
+	// 20041208.myevan.무기스펙큘러(값옷은 SetShape에서 직접 해준다.)
 	if (USE_WEAPON_SPECULAR)
 	{
 		SMaterialData kMaterialData;
@@ -424,8 +424,8 @@ void CActorInstance::RefreshActorInstance()
 					{
 						const NRaceData::TCollisionData * c_pCollisionData = c_pAttachingData->pCollisionData;
 						
-						// FIXME : ù��° ���ڴ� Part�� ��ȣ��.
-						//         Base�� ������ 0�� - [levites]
+						// FIXME : 첫번째 인자는 Part의 번호다.
+						//         Base는 무조건 0인가? - [levites]
 						TCollisionPointInstance PointInstance;
 						if (NRaceData::COLLISION_TYPE_ATTACKING == c_pCollisionData->iCollisionType)
 							continue;
diff --git a/src/GameLib/ActorInstanceBattle.cpp b/src/GameLib/ActorInstanceBattle.cpp
index 38d11517..25c50e8b 100644
--- a/src/GameLib/ActorInstanceBattle.cpp
+++ b/src/GameLib/ActorInstanceBattle.cpp
@@ -170,10 +170,10 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 	}
 	else if (m_pkCurRaceMotionData->IsComboInputTimeData())
 	{
-		// ���� ��� �ð�
+		// 동작 경과 시간
  		float fElapsedTime = GetAttackingElapsedTime();	
 
-		// �̹� �Է� �Ѱ� �ð��� �����ٸ�..
+		// 이미 입력 한계 시간이 지났다면..
 		if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime())
 		{
 			//Tracen("\xC0\xD4\xB7\xC2 \xC7\xD1\xB0\xE8 \xBD\xC3\xB0\xA3 \xC1\xF6\xB3\xB2");
@@ -182,14 +182,14 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 			return false;
 		}
 
-		if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // �޺� �ߵ� �ð� �� �Ķ��
+		if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면
 		{
 			//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
 			// args : BlendingTime
 			__RunNextCombo();
 			return true;
 		}
-		else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // �� �Է� �ð� ���� ���..
+		else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면..
 		{
 			//Tracen("\xBC\xB1 \xC0\xD4\xB7\xC2 \xBC\xB3\xC1\xA4");
 			m_isPreInput = TRUE;
@@ -199,7 +199,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 	else
 	{
 		float fElapsedTime = GetAttackingElapsedTime();	
-		if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // �޺� �ߵ� �ð� �� �Ķ��
+		if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면
 		{
 			//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
 			// args : BlendingTime
@@ -243,8 +243,8 @@ void CActorInstance::ComboProcess()
 	{
 		m_isPreInput = FALSE;
 
-		if (!IsUsingSkill())	// m_isNextPreInput�� Ȱ��� �϶��� ����ϴ� ����
-		if (m_isNextPreInput)	// Ȱ�϶��� ��ų�� ĵ�� �Ǵ°� �̰� ������
+		if (!IsUsingSkill())	// m_isNextPreInput는 활모드 일때만 사용하는 변수
+		if (m_isNextPreInput)	// 활일때만 스킬이 캔슬 되는건 이곳 때문임
 		{
 			__RunNextCombo();
 			m_isNextPreInput = FALSE;
@@ -288,7 +288,7 @@ void CActorInstance::__RunNextCombo()
 	ComboAttack(wcurComboMotionIndex, m_fAtkDirRot, 0.1f);
 
 	////////////////////////////////
-	// �޺��� �����ٸ�
+	// 콤보가 끝났다면
 	if (m_dwcurComboIndex == pComboData->ComboIndexVector.size())
 	{
 		__OnEndCombo();
@@ -302,8 +302,8 @@ void CActorInstance::__OnEndCombo()
 		m_dwcurComboIndex = 1;
 	}
 
-	// ���⼭ �޺��� �ʱ�ȭ �ؼ� �ȵȴ�.
-	// �޺��� �ʱ�ȭ �Ǵ� ���� ������ �޺��� ������ Motion �� �ڵ����� Wait ���� ���ư��� �����̴�.
+	// 여기서 콤보를 초기화 해선 안된다.
+	// 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다.
 }
 
 void CActorInstance::__ClearCombo()
@@ -566,7 +566,7 @@ bool CActorInstance::__CanPushDestActor(CActorInstance& rkActorDst)
 	if (rkActorDst.IsNPC())
 		return false;
 
-	// �Ŵ� ���� �и� ����
+	// 거대 몬스터 밀림 제외
 	extern bool IS_HUGE_RACE(unsigned int vnum);
 	if (IS_HUGE_RACE(rkActorDst.GetRace()))
 		return false;
@@ -587,15 +587,15 @@ bool IS_PARTY_HUNTING_RACE(unsigned int vnum)
 {
 	return true;
 
-	// ��� ���� ��Ƽ ��� ����
+	// 모든 몬스터 파티 사냥 적용
 	/*
-	if (vnum < 8) // �÷��̾�
+	if (vnum < 8) // 플레이어
 		return true;
 
-	if (vnum >= 8000 && vnum <= 8112) // ��ƾ��
+	if (vnum >= 8000 && vnum <= 8112) // 메틴석
 		return true;
 
-	if (vnum >= 2400 && vnum <  5000) // õ�� ���� ���� ����
+	if (vnum >= 2400 && vnum <  5000) // 천의 동굴 이후 몬스터
 		return true;
 
 	return false;
@@ -623,13 +623,13 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
 	// Invisible Time
 	if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
 	{
-		if (uiSkill) // ��Ƽ ��� ���Ͷ� ��ų�̸� �����ð� ����
+		if (uiSkill) // 파티 사냥 몬스터라도 스킬이면 무적시간 적용
 			rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
 
-		if (m_isMain) // #0000794: [M2KR] �������� - �뷱�� ���� Ÿ�� ���ݿ� ���� ���� Ÿ���� �������� �ʰ� �ڽ� ���ݿ� ���Ѱ͸� üũ�Ѵ�
+		if (m_isMain) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다
 			rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
 	}
-	else // ��Ƽ ��� ���Ͱ� �ƴ� ��츸 ����
+	else // 파티 사냥 몬스터가 아닐 경우만 적용
 	{
 		rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
 	}
@@ -640,7 +640,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
 	// Hit Effect
 	D3DXVECTOR3 vec3Effect(rVictim.m_x, rVictim.m_y, rVictim.m_z);
 	
-	// #0000780: [M2KR] ���� Ÿ�ݱ� ����
+	// #0000780: [M2KR] 수룡 타격구 문제
 	extern bool IS_HUGE_RACE(unsigned int vnum);
 	if (IS_HUGE_RACE(rVictim.GetRace()))
 	{
@@ -651,7 +651,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
 
 	float fHeight = D3DXToDegree(atan2(-vec3Effect.x + v3Pos.x,+vec3Effect.y - v3Pos.y));
 
-	// 2004.08.03.myevan.�����̳� ���� ��� Ÿ�� ȿ���� ������ �ʴ´�
+	// 2004.08.03.myevan.빌딩이나 문의 경우 타격 효과가 보이지 않는다
 	if (rVictim.IsBuilding()||rVictim.IsDoor())
 	{
 		D3DXVECTOR3 vec3Delta=vec3Effect-v3Pos;
@@ -673,7 +673,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
 
 	if (rVictim.IsBuilding())
 	{
-		// 2004.08.03.������ ��� ��鸮�� �̻��ϴ�
+		// 2004.08.03.빌딩의 경우 흔들리면 이상하다
 	}
 	else if (rVictim.IsStone() || rVictim.IsDoor())
 	{
diff --git a/src/GameLib/ActorInstanceCollisionDetection.cpp b/src/GameLib/ActorInstanceCollisionDetection.cpp
index 40f94eb2..12d5c449 100644
--- a/src/GameLib/ActorInstanceCollisionDetection.cpp
+++ b/src/GameLib/ActorInstanceCollisionDetection.cpp
@@ -34,7 +34,7 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
 {
 	if (!pPointInstance)
 	{
-		assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // ���۷����� ��ü�Ͻÿ�
+		assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // 레퍼런스로 교체하시오
 		return;
 	}
 
@@ -95,12 +95,12 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
 
 void CActorInstance::UpdateAdvancingPointInstance()
 {
-	// ���� ���� ��� ����� �̵����� ������ ���� �ʱ� ������ ���� ���� ���;� �Ѵ� - [levites]
+	// 말을 탔을 경우 사람은 이동값을 가지고 있지 않기 때문에 말로 부터 얻어와야 한다 - [levites]
 	D3DXVECTOR3 v3Movement = m_v3Movement;
 	if (m_pkHorse)
 		v3Movement = m_pkHorse->m_v3Movement;
 
-	// ���� ������Ʈ ���� �ʾƵ� �ȴ� - [levites]
+	// 말은 업데이트 하지 않아도 된다 - [levites]
 	if (m_pkHorse)
 		m_pkHorse->UpdateAdvancingPointInstance();
 
@@ -169,7 +169,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
 {
 	if (!c_pAttackingSphereVector)
 	{
-		assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // ���۷����� ��ü�Ͻÿ�
+		assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // 레퍼런스로 교체하시오
 		return false;
 	}
 
@@ -186,7 +186,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
 
 			if (DetectCollisionDynamicSphereVSDynamicSphere(c_rAttackingSphere, c_rDefendingSphere))
 			{
-				// FIXME : �� ���� ������ ã�Ƴ��� ������ �ٲ�� �Ѵ�.
+				// FIXME : 두 원의 교점을 찾아내는 식으로 바꿔야 한다.
 				*pv3Position = (c_rAttackingSphere.v3Position + c_rDefendingSphere.v3Position) / 2.0f;
 				return true;
 			}
@@ -200,19 +200,19 @@ bool CActorInstance::CreateCollisionInstancePiece(DWORD dwAttachingModelIndex, c
 {
 	if (!c_pAttachingData)
 	{
-		assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // ���۷����� ��ü�Ͻÿ�
+		assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // 레퍼런스로 교체하시오
 		return false;
 	}
 
 	if (!c_pAttachingData->pCollisionData)
 	{
-		assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // ���۷����� ��ü�Ͻÿ�
+		assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // 레퍼런스로 교체하시오
 		return false;
 	}
 
 	if (!pPointInstance)
 	{
-		assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // ���۷����� ��ü�Ͻÿ�
+		assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // 레퍼런스로 교체하시오
 		return false;
 	}
 
@@ -279,18 +279,18 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
 	const NRaceData::TAttackData & c_rAttackData = c_pAttackingEvent->AttackData;
 	THittedInstanceMap & rHittedInstanceMap = m_kSplashArea.HittedInstanceMap;
 
-	// NOTE : �̹� ���ȴٸ� ���� �� ����
+	// NOTE : 이미 때렸다면 때릴 수 없음
 	if (rHittedInstanceMap.end() != rHittedInstanceMap.find(&rVictim))
 	{
 		return FALSE;
 	}
 
-	// NOTE : Snipe ����̰�..
+	// NOTE : Snipe 모드이고..
 	if (NRaceData::ATTACK_TYPE_SNIPE == c_rAttackData.iAttackType)
 	{
-		// Target �� PC ���..
+		// Target 이 PC 라면..
 		if (__IsFlyTargetPC())
-			// �ٸ� ��ü�� ���� �� ����
+			// 다른 객체는 때릴 수 없다
 			if (!__IsSameFlyTarget(&rVictim))
 				return FALSE;
 
@@ -299,7 +299,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
 		{
 			CActorInstance * pActorInstance = (CActorInstance *)m_kFlyTarget.GetFlyTarget();
 
-			// NOTE : Target �� PC �϶��� �Ѹ��� ���� �� �ִ�.
+			// NOTE : Target 이 PC 일때는 한명만 때릴 수 있다.
 			if (pActorInstance->IsPC())
 				if (&rVictim != pActorInstance)
 					return FALSE;
@@ -333,7 +333,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
 BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
 {
 	// Check Distance
-	// NOTE - �ϴ� ���� üũ�� �ϰ� ����
+	// NOTE - 일단 근접 체크만 하고 있음
 	D3DXVECTOR3 v3Distance(rVictim.m_x - m_x, rVictim.m_z - m_z, rVictim.m_z - m_z);
 	float fDistance = D3DXVec3LengthSq(&v3Distance);
 
@@ -362,7 +362,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
 	{
 		const NRaceData::THitData & c_rHitData = *itorHitData;
 
-		// NOTE : �̹� �¾Ҵ��� üũ
+		// NOTE : 이미 맞았는지 체크
 		THitDataMap::iterator itHitData = m_HitDataMap.find(&c_rHitData);
 		if (itHitData != m_HitDataMap.end())
 		{
@@ -437,7 +437,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
 							//Tracef(" ----------- Next Hit : %d\n", itHitData->second.size());
 
 							int iCurrentHitCount = itHitData->second.size();
-							// NOTE : ���� ������ 16���� �Ѱ�
+							// NOTE : 보통 공격은 16명이 한계
 							if (NRaceData::MOTION_TYPE_COMBO == pad->iMotionType || NRaceData::MOTION_TYPE_NORMAL == pad->iMotionType)
 							{
 								if (iCurrentHitCount > 16)
@@ -458,7 +458,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
 
 						D3DXVECTOR3 v3HitPosition = (GetPosition() + rVictim.GetPosition()) *0.5f;
 
-						// #0000780: [M2KR] ���� Ÿ�ݱ� ����
+						// #0000780: [M2KR] 수룡 타격구 문제
 						extern bool IS_HUGE_RACE(unsigned int vnum);
 						if (IS_HUGE_RACE(rVictim.GetRace()))
 						{
@@ -503,8 +503,8 @@ BOOL CActorInstance::TestPhysicsBlendingCollision(CActorInstance & rVictim)
 	if (fDistance > 800.0f*800.0f)
 		return FALSE;
 	
-	// NOTE : ���� ���϶��� Defending Sphere�� Collision Check�� �մϴ�.
-	// NOTE : Wait�� ������ �Ǵ� ���߿� �հ� ���� ������ �־.. - [levites]
+	// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
+	// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
 	TCollisionPointInstanceList * pMainList;
 	TCollisionPointInstanceList * pVictimList;
 	if (isAttacking() || IsWaiting())
@@ -589,17 +589,17 @@ BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim)
 		return FALSE;
 
 	// Check Distance
-	// NOTE : ������ �ָ� üũ ����
-	//        ������ ��ŵ�ó� ��� ������Ʈ�� ũ�Ⱑ Ŭ��� ������ ���� ������ ����
-	//        ij���Ͱ� �ڽ��� Body Sphere Radius ���� �� ũ�� �̵��ߴ����� üũ�ϰ�,
-	//        ���� �׷��� �ʴٸ� �Ÿ��� üũ�ؼ� �ɷ��ش�.
+	// NOTE : 적당히 멀면 체크 안함
+	//        프레임 스킵시나 대상 오브젝트의 크기가 클경우 문제가 생길 여지가 있음
+	//        캐릭터가 자신의 Body Sphere Radius 보다 더 크게 이동했는지를 체크하고,
+	//        만약 그렇지 않다면 거리로 체크해서 걸러준다.
 	D3DXVECTOR3 v3Distance = D3DXVECTOR3(rVictim.m_x - m_x, rVictim.m_y - m_y, rVictim.m_z - m_z);
 	float fDistance = D3DXVec3LengthSq(&v3Distance);
 	if (fDistance > 800.0f*800.0f)
 		return FALSE;
 	
-	// NOTE : ���� ���϶��� Defending Sphere�� Collision Check�� �մϴ�.
-	// NOTE : Wait�� ������ �Ǵ� ���߿� �հ� ���� ������ �־.. - [levites]
+	// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
+	// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
 	TCollisionPointInstanceList * pMainList;
 	TCollisionPointInstanceList * pVictimList;
 	if (isAttacking() || IsWaiting())
diff --git a/src/GameLib/ActorInstanceData.cpp b/src/GameLib/ActorInstanceData.cpp
index 0eb70694..4119ff9e 100644
--- a/src/GameLib/ActorInstanceData.cpp
+++ b/src/GameLib/ActorInstanceData.cpp
@@ -79,7 +79,7 @@ bool CActorInstance::SetRace(DWORD eRace)
 
 	CGraphicThingInstance::Clear();
 
-	//NOTE : PC�� Part���� �� �����ϰ� ���ش�.
+	//NOTE : PC만 Part별로 다 생성하게 해준다.
 	if( IsPC())
 	{
 		CGraphicThingInstance::ReserveModelThing(CRaceData::PART_MAX_NUM);
diff --git a/src/GameLib/ActorInstanceFly.cpp b/src/GameLib/ActorInstanceFly.cpp
index 44d26436..25724de5 100644
--- a/src/GameLib/ActorInstanceFly.cpp
+++ b/src/GameLib/ActorInstanceFly.cpp
@@ -107,7 +107,7 @@ void CActorInstance::SetFlyEventHandler(IFlyEventHandler * pHandler)
 	m_pFlyEventHandler = pHandler;
 }
 
-// 2004. 07. 07. [levites] - ��ų ����� Ÿ���� �ٲ�� ���� �ذ��� ���� �ڵ�
+// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
 bool CActorInstance::CanChangeTarget()
 {
 	if (__IsNeedFlyTargetMotion())
diff --git a/src/GameLib/ActorInstanceMotion.cpp b/src/GameLib/ActorInstanceMotion.cpp
index 586b3459..3af4004d 100644
--- a/src/GameLib/ActorInstanceMotion.cpp
+++ b/src/GameLib/ActorInstanceMotion.cpp
@@ -69,7 +69,7 @@ void CActorInstance::ReservingMotionProcess()
 
 				SetEndStopMotion();
 
-				// ������ ��� ���� 1�ʾ� ������
+				// 이후의 모션 전부 1초씩 딜레이
 				TMotionDeque::iterator itor = m_MotionDeque.begin();
 				for (; itor != m_MotionDeque.end(); ++itor)
 				{
@@ -99,11 +99,11 @@ void CActorInstance::ReservingMotionProcess()
 			if (IsDead())
 			{
 				//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xBB\xE7\xB8\xC1");
-				// ���� �����ͷ� ����
+				// 예전 데이터로 복구
 				m_kCurMotNode=kPrevMotionNode;
 				__ClearMotion(); 
 
-				// ���� ���� ������ ���� ����
+				// 이전 동작 마지막 상태 유지
 				SetEndStopMotion();
 				return;
 			}
@@ -129,7 +129,7 @@ void CActorInstance::ReservingMotionProcess()
 	if (0 == dwRealMotionKey)
 		return;
 
-	// FIX: ������ ȣ���� __SetMotion �Լ� �ȿ��� �������� �ٸ� ����� ����� ���ɼ��� �����Ƿ� duration�� '���� �������' ����� duration���� ����ؾ� ��.
+	// FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함.
 	//float fDurationTime=rReservingMotionNode.fDuration;
 	float fDurationTime = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
 	float fStartTime = rReservingMotionNode.fStartTime;
@@ -153,7 +153,7 @@ void CActorInstance::ReservingMotionProcess()
 
 void CActorInstance::CurrentMotionProcess()
 {
-	if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // �ӽô�. �������� ��ǥ�� Once�� ����� �Ѿ�� �ȵȴ�. - [levites]
+	if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites]
 		if (m_kCurMotNode.dwcurFrame >= m_kCurMotNode.dwFrameCount)
 			m_kCurMotNode.dwcurFrame = 0;
 
@@ -169,7 +169,7 @@ void CActorInstance::CurrentMotionProcess()
 
 	bool isLooping=false;
 
-	// �����ٸ� Playing Flag�� ����
+	// 끝났다면 Playing Flag를 끈다
 	if (m_pkCurRaceMotionData && m_pkCurRaceMotionData->IsLoopMotion())
 	{
 		if (m_kCurMotNode.iLoopCount > 1 || m_kCurMotNode.iLoopCount == -1)
@@ -332,7 +332,7 @@ void CActorInstance::SetLoopMotion(DWORD dwMotion, float fBlendTime, float fSpee
 	m_kCurMotNode.uSkill = 0;
 }
 
-// ���ϰ� == SetMotion�� ���ϰ� == ������ �ִϸ��̼� �����͸� �÷��� �ߴ���?
+// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐?
 bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime, UINT uSkill, float fSpeedRatio)
 {
 	if (!m_pkCurRaceData)
@@ -379,8 +379,8 @@ bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion,
 
 	assert(NULL != m_pkCurRaceMotionData);
 
-	// FIX : ������ ȣ���� __SetMotion �Լ� ������ �������� �ٸ� ����� ������ ���� �ֱ� ������ dwMotionKey���� ��ȿ���� �ʰ�
-	// ���� �ش� Ű�� ������ duration�� ��ȿ���� ����. �翬�� ���� play���� ����� �ð��� ���ؾ� ��.. -_-;; 
+	// FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고
+	// 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;; 
 	// float fDuration=GetMotionDuration(dwMotionKey)/fSpeedRatio;
 	float fDuration = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
 
@@ -588,8 +588,8 @@ float CActorInstance::GetMotionDuration(DWORD dwMotionKey)
 
 MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
 {
-	// NOTE : ���� ȣ�� �Ǵ� �κ��� �ƴ����� ��� ������ ����ȭ ������ ���� - [levites]
-	// FIXME : ó���� ���õ� ����� ���� �Ϳ� ���� ó���� �Ǿ� ���� �ʴ�.
+	// NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites]
+	// FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다.
 	WORD wMode = GET_MOTION_MODE(dwMotionKey);
 	WORD wIndex = GET_MOTION_INDEX(dwMotionKey);
 
@@ -608,7 +608,7 @@ MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
 				dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMode, wIndex, i);
 
 				// Temporary
-				// NOTE: ����μ� ���⼭ �غ��� �ǹ̾���. ��ü������ Ȯ�ΰ�� �Ʒ��� ������ �ڵ�� �ٸ������� �ذ��ؾ� �ϹǷ� �ϴ� �ּ�ó����. ���߿� ��ä�� ������..
+				// NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자..
 				// m_kCurMotNode.fEndTime = m_kCurMotNode.fStartTime + GetMotionDuration(dwMotionKey);
 				// Temporary
 
@@ -689,7 +689,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 	}
 
 
-	// NOTE : ��ų ����� ������� ������ ���� ���� ��ġ - [levites]
+	// NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites]
 	if (__IsHiding())
 	{
 		__ShowEvent();
@@ -719,7 +719,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 		m_pkHorse->__BindMotionData(dwChildMotKey);
 
 		if (c_rkSetMotData.iLoopCount)
-			m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // ������ ���� ��� Ÿ������ �����ǰ� �־���
+			m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음
 		else
 			m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_LOOP;
 
@@ -741,7 +741,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 
 		if (__CanAttack())
 		{
-			// ���⼭ ���� ����� ����� ó���� �մϴ� - [levites]
+			// 여기서 공격 모션일 경우의 처리를 합니다 - [levites]
 			__ShowWeaponTrace();
 
 			m_HitDataMap.clear();
@@ -752,11 +752,11 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 		{
 			if (!__CanNextComboAttack())
 			{
-				// 2004.11.19.myevan.���� ���Ž� �̺κп��� �ٷ� ���µǾ� �������� �ȳ��´�
-				m_dwcurComboIndex = 0; // �޺� ���� - [levites]
+				// 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다
+				m_dwcurComboIndex = 0; // 콤보 리셋 - [levites]
 
-				// NOTE : ClearCombo() �� �����ؼ��� �ȵȴ�.
-				//        �޺� ������ ��ų�� �̾ ����� ��� m_pkCurRaceMotionData���� �ʱ�ȭ �Ǿ� ������.
+				// NOTE : ClearCombo() 를 수행해서는 안된다.
+				//        콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다.
 				//Tracef("MotionData\xBF\xA1 \xC4\xDE\xBA\xB8 \xB5\xA5\xC0\xCC\xC5\xB8\xB0\xA1 \xB5\xE9\xBE\xEE \xC0\xD6\xC1\xF6 \xBE\xCA\xBD\xC0\xB4\xCF\xB4\xD9.\n");
 			}
 		}
diff --git a/src/GameLib/ActorInstanceMotionEvent.cpp b/src/GameLib/ActorInstanceMotionEvent.cpp
index c6d4b403..051feb10 100644
--- a/src/GameLib/ActorInstanceMotionEvent.cpp
+++ b/src/GameLib/ActorInstanceMotionEvent.cpp
@@ -303,7 +303,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
 	if (CRaceMotionData::MOTION_EVENT_TYPE_WARP != c_pData->iType)
 		return;
 	
-	// FIXME : TMotionWarpEventData�� �� ���� - [levites]
+	// FIXME : TMotionWarpEventData로 뺄 변수 - [levites]
 	static const float sc_fDistanceFromTarget = 270.0f;
 
 	if (m_kFlyTarget.IsValidTarget())
@@ -315,7 +315,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
 		D3DXVec3Normalize(&v3Distance, &v3Distance);
 		TPixelPosition DestPixelPosition = c_rv3TargetPosition - (v3Distance * sc_fDistanceFromTarget);
 
-		// 2004.07.05.myevan.�ý�ź�� �ʿ� ���̴� �����ذ�. ��ǥ��ġ�� �̵� ���ϴ� ���� ��� �̵����� �ʴ´�
+		// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결. 목표위치가 이동 못하는 곳일 경우 이동하지 않는다
 		IBackground& rkBG=GetBackground();
 		if (!rkBG.IsBlock(DestPixelPosition.x, -DestPixelPosition.y))
 			SetPixelPosition(DestPixelPosition);
diff --git a/src/GameLib/ActorInstanceRender.cpp b/src/GameLib/ActorInstanceRender.cpp
index 18bdb5cb..58bda991 100644
--- a/src/GameLib/ActorInstanceRender.cpp
+++ b/src/GameLib/ActorInstanceRender.cpp
@@ -38,8 +38,8 @@ void CActorInstance::OnRender()
 	kMtrl.Diffuse=D3DXCOLOR(m_dwMtrlColor);	
 	STATEMANAGER.SetMaterial(&kMtrl);
 
-	// ����� �̷���.. �������� ���´� Diffuse�� Blend�� �и���..
-	// �ƴϸ� �̷� ���·� ���� Texture & State Sorting ��������.. - [levites]
+	// 현재는 이렇게.. 최종적인 형태는 Diffuse와 Blend의 분리로..
+	// 아니면 이런 형태로 가되 Texture & State Sorting 지원으로.. - [levites]
 	STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE);	
 
 	switch(m_iRenderMode)
diff --git a/src/GameLib/ActorInstanceRotation.cpp b/src/GameLib/ActorInstanceRotation.cpp
index a95070a1..4572a61d 100644
--- a/src/GameLib/ActorInstanceRotation.cpp
+++ b/src/GameLib/ActorInstanceRotation.cpp
@@ -62,7 +62,7 @@ void CActorInstance::RotationProcess()
 		m_fcurRotation = m_rotEnd;
 	}
 
-	// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"�� �ٲ۴�. - [levites]
+	// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"로 바꾼다. - [levites]
 	if (0.0f != m_rotX || 0.0f != m_rotY)
 	{
 		CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation);
diff --git a/src/GameLib/Area.cpp b/src/GameLib/Area.cpp
index f1272a0b..97a7783c 100644
--- a/src/GameLib/Area.cpp
+++ b/src/GameLib/Area.cpp
@@ -483,7 +483,7 @@ void CArea::__Load_BuildObjectInstances()
 
 		__SetObjectInstance(*it, c_pObjectData);
 
-		// ����ȭ��
+		// 최적화용
 		if ((*it)->dwType == prt::PROPERTY_TYPE_BUILDING)
 			m_GraphicThingInstanceCRCMap.insert(TGraphicThingInstanceCRCMap::value_type( (*it)->pThingInstance, c_pObjectData->dwCRC ) );
 	}
@@ -718,7 +718,7 @@ void CArea::__SetObjectInstance_SetDungeonBlock(TObjectInstance * pObjectInstanc
 
 void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
 {
-	// OBB�� ����� �浹 ���� �ڵ� ����.
+	// OBB를 사용한 충돌 정보 자동 생성.
 	const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
 	
 	CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
@@ -736,7 +736,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
 		
 		const bool bIsDungeonObject = (std::string::npos != attrFileName.find("/dungeon/")) || (std::string::npos != attrFileName.find("\\dungeon\\"));
 
-		// NOTE: dungeon ������Ʈ�� Dummy Collision�� �ڵ����� �������� �ʵ��� �� (������ ��� ���� �ø��������� ������ �� ��찡 ������ �־���. �̷��� �ϱ�� �׷��� ���� ���� �Ϸ�)
+		// NOTE: dungeon 오브젝트는 Dummy Collision을 자동으로 생성하지 않도록 함 (던전의 경우 더미 컬리전때문에 문제가 된 경우가 수차례 있었음. 이렇게 하기로 그래픽 팀과 협의 완료)
 		if (pAttributeData->IsEmpty() && false == bIsDungeonObject)
 		{
 			if (NULL != pObjectInstance && NULL != pObjectInstance->pThingInstance)
@@ -778,7 +778,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
 /*
 void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
 {
-	// AABB�� ����� �浹 ���� �ڵ� ����.
+	// AABB를 사용한 충돌 정보 자동 생성.
 	const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
 	
 	CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
@@ -806,7 +806,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
 				collision.v3Position = (v3Min + v3Max) * 0.5f;
 
 				D3DXVECTOR3 vDelta = (v3Max - v3Min);
-				collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max�� ���ϱ� ���� ����, ����, ������ ���ݰ� ����
+				collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max를 구하기 위한 가로, 세로, 높이의 절반값 저장
 				collision.fDimensions[1] = vDelta.y * 0.5f;
 				collision.fDimensions[2] = vDelta.z * 0.5f;
 				
@@ -830,7 +830,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
 /*
 void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
 {
-	// Sphere�� ����� �浹 ���� �ڵ� ����.
+	// Sphere를 사용한 충돌 정보 자동 생성.
 	const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
 	
 	CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
@@ -940,7 +940,7 @@ bool CArea::__Load_LoadObject(const char * c_szFileName)
 		ObjectData.Position.z = atof(c_rstrzPosition.c_str());
 		ObjectData.dwCRC = atoi	(c_rstrCRC.c_str());
 
-		// 20041217.myevan.�����̼� ���� ����
+		// 20041217.myevan.로테이션 공식 변경
 		ObjectData.InitializeRotation(); //ObjectData.m_fYaw = ObjectData.m_fPitch = ObjectData.m_fRoll = 0;
 		if (rVector.size() > 4)
 		{
@@ -1040,7 +1040,7 @@ bool CArea::__Load_LoadAmbience(const char * c_szFileName)
 		ObjectData.dwCRC = atoi	(c_rstrCRC.c_str());
 		ObjectData.dwRange = atoi(c_rstrRange.c_str());
 
-		// 20041217.myevan.�����̼� �ʱ�ȭ
+		// 20041217.myevan.로테이션 초기화
 		ObjectData.InitializeRotation();
 		ObjectData.m_fHeightBias = 0.0f;
 		ObjectData.fMaxVolumeAreaPercentage = 0.0f;
@@ -1274,7 +1274,7 @@ void CArea::__Clear_DestroyObjectInstance(TObjectInstance * pObjectInstance)
 
 
 //////////////////////////////////////////////////////////////////////////
-// Coordination ����
+// Coordination 관련
 void CArea::GetCoordinate(unsigned short * usCoordX, unsigned short * usCoordY)
 {
 	*usCoordX = m_wX;
diff --git a/src/GameLib/AreaLoaderThread.cpp b/src/GameLib/AreaLoaderThread.cpp
index 4b21d82f..5c63104f 100644
--- a/src/GameLib/AreaLoaderThread.cpp
+++ b/src/GameLib/AreaLoaderThread.cpp
@@ -111,7 +111,7 @@ void TEMP_CAreaLoaderThread::Shutdown()
 	}
 	while (!bRet);
 
-	WaitForSingleObject(m_hThread, 10000);	// �����尡 ���� �DZ⸦ 10�� ��ٸ�
+	WaitForSingleObject(m_hThread, 10000);	// 쓰레드가 종료 되기를 10초 기다림
 }
 
 UINT TEMP_CAreaLoaderThread::Execute(void * pvArg)
diff --git a/src/GameLib/AreaTerrain.cpp b/src/GameLib/AreaTerrain.cpp
index eb86a165..ec71a228 100644
--- a/src/GameLib/AreaTerrain.cpp
+++ b/src/GameLib/AreaTerrain.cpp
@@ -130,7 +130,7 @@ bool CTerrain::LoadShadowMap(const char * c_pszFileName)
 }
 
 //////////////////////////////////////////////////////////////////////////
-// Seamless�� ���ο� �Լ���...
+// Seamless용 새로운 함수들...
 //////////////////////////////////////////////////////////////////////////
 
 void CTerrain::CopySettingFromGlobalSetting()
@@ -891,7 +891,7 @@ void CTerrain::PutImage16(BYTE *src, BYTE *dst, long src_pitch, long dst_pitch,
 		for (int x = 0; x < texturewidth; ++x)
 		{
 			WORD packed_pixel = src[x] << 8;
-			//& ���� �ѹ��� �Ʊ���
+			//& 연산 한번이 아깝다
 			//WORD packed_pixel = (src[x]&0xF0) << 8;
 			*((WORD*)(dst+x*2)) = packed_pixel;
 		}
@@ -998,11 +998,11 @@ void CTerrain::_CalculateTerrainPatch(BYTE byPatchNumX, BYTE byPatchNumY)
 			lpTerrainVertex->kPosition = kPosition;
 			lpTerrainVertex->kNormal = kNormal;
 
-			if (0.5f > kNormal.z)				// �������� ���� 30�� ���� ������  ������ �ִ�. Cliff type���� ����
+			if (0.5f > kNormal.z)				// 수평으로 부터 30도 이하 각으로  기울어져 있다. Cliff type으로 정의
 				++wNumCliffType;
-			else if (0.8660254f > kNormal.z)	// �������� ���� 60�� ���� ������  ������ �ִ�. Hill type���� ����
+			else if (0.8660254f > kNormal.z)	// 수평으로 부터 60도 이하 각으로  기울어져 있다. Hill type으로 정의
 				++wNumHillType;
-			else										// �� �̻��� plain Ÿ��
+			else										// 그 이상은 plain 타입
 				++wNumPlainType;
 			
 			if (kPosition.z > fMaxZ)
diff --git a/src/GameLib/FlyTrace.cpp b/src/GameLib/FlyTrace.cpp
index 1e15861a..949184c9 100644
--- a/src/GameLib/FlyTrace.cpp
+++ b/src/GameLib/FlyTrace.cpp
@@ -83,8 +83,8 @@ void CFlyTrace::Update()
 	
 }
 
-//1. ���ĸ� ������ ���� �ټ��ִ�.
-//2. �ؽ��ĸ� ������ ���� ����-_-
+//1. 알파를 쓰려면 색깔만 줄수있다.
+//2. 텍스쳐를 쓰려면 알파 없다-_-
 
 
 struct TFlyVertex
diff --git a/src/GameLib/FlyingInstance.cpp b/src/GameLib/FlyingInstance.cpp
index b78796b8..1629c3c1 100644
--- a/src/GameLib/FlyingInstance.cpp
+++ b/src/GameLib/FlyingInstance.cpp
@@ -111,7 +111,7 @@ void CFlyingInstance::__SetTargetDirection(const CFlyTarget& c_rkTarget)
 {
 	D3DXVECTOR3 v3TargetPos=c_rkTarget.GetFlyTargetPosition();
 
-	// �ӽ� �ڵ�
+	// 임시 코드
 	if (m_pData->m_bMaintainParallel)
 	{
 		v3TargetPos.z += 50.0f;
@@ -131,7 +131,7 @@ void CFlyingInstance::__SetTargetNormalizedDirection(const D3DXVECTOR3 & v3Nomal
 	Vec3TransformQuaternion(&m_v3Accel, &m_pData->m_v3Accel, &m_qRot);
 }
 
-// 2004. 3. 26. myevan. ����� ���� �ϴ� �ּ� ó��. ������ ���̹��� �ʿ�. ���ӿ��� ������� �ʴ´ٸ� ������ �� �������� ��ӹ޾� ���鵵�� ����
+// 2004. 3. 26. myevan. 기능을 몰라 일단 주석 처리. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
 void CFlyingInstance::SetFlyTarget(const CFlyTarget & cr_Target)
 {
 	//m_pFlyTarget = pTarget;
@@ -462,7 +462,7 @@ bool CFlyingInstance::Update()
 
 	if (m_pData->m_bHitOnBackground)
 	{
-		// ���� �浹
+		// 지형 충돌
 
 		if (CFlyingManager::Instance().GetMapManagerPtr())
 		{
@@ -477,7 +477,7 @@ bool CFlyingInstance::Update()
 			}
 		}
 
-		// �ǹ�+���� �浹
+		// 건물+나무 충돌
 
 		FCheckBackgroundDuringFlying kCheckBackgroundDuringFlying(v3LastPosition,m_v3Position);
 		rkCullingMgr.ForInRange(vecStart,fCollisionSphereRadius, &kCheckBackgroundDuringFlying);
diff --git a/src/GameLib/GameType.cpp b/src/GameLib/GameType.cpp
index 4ffc3d55..ce110690 100644
--- a/src/GameLib/GameType.cpp
+++ b/src/GameLib/GameType.cpp
@@ -82,8 +82,8 @@ BOOL NRaceData::LoadMotionAttackData(CTextFileLoader & rTextFileLoader, TMotionA
 	if (!LoadAttackData(rTextFileLoader, pData))
 		return FALSE;
 
-	// NOTE : ������ AttackingType�� MotionType���� �ٲ����
-	//        ���� ����Ÿ�� ��� ������ ���� ������ �аԲ�..
+	// NOTE : 기존의 AttackingType이 MotionType으로 바뀌었음
+	//        기존 데이타의 경우 없으면 기존 것으로 읽게끔..
 	if (!rTextFileLoader.GetTokenInteger("motiontype", &pData->iMotionType))
 	{
 		if (!rTextFileLoader.GetTokenInteger("attackingtype", &pData->iMotionType))
diff --git a/src/GameLib/GameUtil.cpp b/src/GameLib/GameUtil.cpp
index 28de1b61..a879dc7a 100644
--- a/src/GameLib/GameUtil.cpp
+++ b/src/GameLib/GameUtil.cpp
@@ -98,7 +98,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
 	float ta = D3DXVec3Dot(&p,&da)/la/la;
 	float tb = D3DXVec3Dot(&p,&db)/lb/lb;
 
-	// FIXME �� üũ�� �ƴϴ�
+	// FIXME 구 체크가 아니다
 
 	if (ta<0)
 		return false;
@@ -146,7 +146,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
 	//*/
 
 	/*
-	// NOTE : AABB üũ �� ��
+	// NOTE : AABB 체크 할 것
 	///////////////////////////////////////////////////////////////////////////////////////////////
 	D3DXVECTOR3 v3Distance = c_rSphere1.v3Position - c_rSphere2.v3Position;
 	float fDistance = D3DXVec3Length(&v3Distance);
@@ -273,15 +273,15 @@ bool DetectCollisionStaticSphereVSStaticCylinder(const TSphereData & c_rSphere,
 
 bool IsCWAcuteAngle(float begin, float end)
 {
-	// 360 - src + dest		// �ð� �ݴ� ����
-	// src - dest			// �ð� ����
+	// 360 - src + dest		// 시계 반대 방향
+	// src - dest			// 시계 방향
 	return ((360.0f - begin + end) > (begin - end));
 }
 
 bool IsCCWAcuteAngle(float begin, float end)
 {
-	// abs(360 - dest + src) 	// �ð� ����
-	// dest - src				// �ð� �ݴ� ����
+	// abs(360 - dest + src) 	// 시계 방향
+	// dest - src				// 시계 반대 방향
 	int fValue = abs((int) (360.0f - end + begin));
 	return fValue >= (end - begin) ? true : false;
 }
@@ -297,7 +297,7 @@ bool IsCCWRotation(float begin, float end)
 	// 270      90
 	//      0
 	//
-	// �ð� �ݴ�
+	// 시계 반대
 	return (begin - end < 0);
 }
 
diff --git a/src/GameLib/ItemData.cpp b/src/GameLib/ItemData.cpp
index 48f64fde..fb6efaee 100644
--- a/src/GameLib/ItemData.cpp
+++ b/src/GameLib/ItemData.cpp
@@ -137,7 +137,7 @@ BOOL CItemData::LoadItemData(const char * c_szFileName)
 	}
 
 	// Attaching Data
-	// Item �� Attaching Data �ϴ� ����.
+	// Item 에 Attaching Data 일단 없음.
 //	if (TextFileLoader.SetChildNode("attachingdata"))
 //	{
 //		if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector))
@@ -389,10 +389,10 @@ long CItemData::GetSocket(BYTE byIndex) const
 	return m_ItemTable.alSockets[byIndex];
 }
 
-//������ ���� ���� �Լ� ����� ���� ����!!(���Ŀ� ��ģ��)
-//SocketCount = 1 �̸� �ʱ޹���
-//SocketCount = 2 �̸� �߱޹���
-//SocketCount = 3 �̸� ���޹���
+//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다)
+//SocketCount = 1 이면 초급무기
+//SocketCount = 2 이면 중급무기
+//SocketCount = 3 이면 고급무기
 int CItemData::GetSocketCount() const		
 {
 	return m_ItemTable.bGainSocketPct;
@@ -417,7 +417,7 @@ float CItemData::GetSpecularPowerf() const
 	return float(uSpecularPower) / 100.0f;	
 }
 
-//refine ���� �����۹�ȣ ���ڸ��� ��ġ�Ѵ�-_-(���̺��̿����� �ٲ� ����)
+//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정)
 UINT CItemData::GetRefine() const
 {
 	return GetIndex()%10;
diff --git a/src/GameLib/MapBase.cpp b/src/GameLib/MapBase.cpp
index c27c615d..347b7712 100644
--- a/src/GameLib/MapBase.cpp
+++ b/src/GameLib/MapBase.cpp
@@ -73,9 +73,9 @@ bool CMapBase::LoadProperty()
 		return false;
 	}
 
-	// NOTE: �̹� �����ϴ� �� �����Ϳ� ������ �����͸� ����ϴ� ���� ���� �߰��� ��, �� ���� �뷮�� ���̱� ���� �۾�.
-	// MapProperty.txt ���Ͽ� ParentMapName ���� �����Ǿ� �ִٸ�, ���� ��� �����ʹ� ParentMap���� �о�´�.
-	// �������� �κа���(�κ� ��������Ʈ?) ����� �ʿ� ���뼭, Parent Map���� ��� �����͸� �о��.
+	// NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업.
+	// MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다.
+	// 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴.
 	if (stTokenVectorMap.end() != stTokenVectorMap.find("parentmapname"))
 	{
 		m_strParentMapName = stTokenVectorMap["parentmapname"][0];
diff --git a/src/GameLib/MapManager.cpp b/src/GameLib/MapManager.cpp
index 0d7128c7..3cb3ebe3 100644
--- a/src/GameLib/MapManager.cpp
+++ b/src/GameLib/MapManager.cpp
@@ -8,7 +8,7 @@
 #include "PropertyLoader.h"
 
 //////////////////////////////////////////////////////////////////////////
-// �⺻ �Լ�
+// 기본 함수
 //////////////////////////////////////////////////////////////////////////
 
 bool CMapManager::IsMapOutdoor()
diff --git a/src/GameLib/MapOutdoor.cpp b/src/GameLib/MapOutdoor.cpp
index f8ff254b..0927103e 100644
--- a/src/GameLib/MapOutdoor.cpp
+++ b/src/GameLib/MapOutdoor.cpp
@@ -226,8 +226,8 @@ bool CMapOutdoor::Destroy()
 void CMapOutdoor::Clear()
 {
 	UnloadWaterTexture();
-	Destroy();		// ����
-	Initialize();	// �ʱ�ȭ
+	Destroy();		// 해제
+	Initialize();	// 초기화
 }
 
 bool CMapOutdoor::SetTerrainCount(short sTerrainCountX, short sTerrainCountY)
diff --git a/src/GameLib/MapOutdoorLoad.cpp b/src/GameLib/MapOutdoorLoad.cpp
index 55835996..708904b1 100644
--- a/src/GameLib/MapOutdoorLoad.cpp
+++ b/src/GameLib/MapOutdoorLoad.cpp
@@ -15,7 +15,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
 	{
 		static std::string s_strOldPathName="";
 
-		// 2004.08.09.myevan.Pack������ ã����.. �����������δ� �׳� ���ϵǴ� �κ��� �ִ�
+		// 2004.08.09.myevan.Pack파일을 찾을때.. 폴더명만으로는 그냥 리턴되는 부분이 있다
 		std::string c_rstrNewPathName=GetName()+"\\cache";
 		
 		s_strOldPathName=c_rstrNewPathName;
@@ -36,7 +36,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
 
 	m_lOldReadX = -1;
 
-	// TODO: SetRenderingDevice���� Environment�� ���� ����Ʈ �Ӽ��� �Ѱ���� ����ƽ ����Ʈ�� ����� �۵��Ѵ�.
+	// TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다.
 	CSpeedTreeDirectX::Instance().SetRenderingDevice();
 
 	Update(x, y, z);
@@ -100,13 +100,13 @@ bool CMapOutdoor::isAreaLoaded(WORD wX, WORD wY)
 }
 
 
-// ���� ��ǥ�� ������� ����(ex. 3x3)�� �ִ� Terrain�� Area�����͸� 
-// m_pTerrain�� m_pArea�� �����Ѵ�.
+// 현재 좌표를 기반으로 주위(ex. 3x3)에 있는 Terrain과 Area포인터를 
+// m_pTerrain과 m_pArea에 연결한다.
 void CMapOutdoor::AssignTerrainPtr()
 {
-	// ���忡���Ϳ��� ȭ���� ������ �ѱ� �� �ͷ����� �����ؾ� �ϱ�
-	// ������ �� virtual method�� ȣ�� �Ѵ�. �� �޼ҵ�� CMapOutDoor������ �ƹ� �ൿ��
-	// ���� �ʴ´�.
+	// 월드에디터에서 화면을 죽죽죽 넘길 때 터레인을 저장해야 하기
+	// 때문에 이 virtual method를 호출 한다. 이 메소드는 CMapOutDoor에서는 아무 행동도
+	// 하지 않는다.
 	OnPreAssignTerrainPtr();
 
 	short sReferenceCoordMinX, sReferenceCoordMaxX, sReferenceCoordMinY, sReferenceCoordMaxY;
@@ -390,14 +390,14 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName)
 	
 	std::string stTextureSetFileName = strTextureSet;
 
-	// TextureSet �� �̹� �پ� ���� ��� �Ⱥ��δ�.
+	// TextureSet 이 이미 붙어 있을 경우 안붙인다.
 	if (0 != stTextureSetFileName.find_first_of("textureset", 0))
 		stTextureSetFileName = "textureset\\"+strTextureSet;
 
  	if (!m_TextureSet.Load(stTextureSetFileName.c_str(), m_fTerrainTexCoordBase))
 	{
 #ifdef WORLD_EDITOR
-		// TextureSet �� ����Ǿ� ���� �ʾƵ� ����
+		// TextureSet 이 적용되어 있지 않아도 진행
 		LogBox("TextureSet \xC0\xCC \xC0\xFB\xBF\xEB\xB5\xC7\xBE\xEE\xC0\xD6\xC1\xF6 \xBE\xCA\xC0\xBA \xB8\xCA \xC0\xD4\xB4\xCF\xB4\xD9.\n\xC1\xF6\xC7\xFC \xC5\xD8\xBD\xBA\xC3\xE7 \xC0\xDB\xBE\xF7\xBF\xA1 \xC1\xD6\xC0\xC7\xC7\xCF\xBD\xC3\xB1\xE2 \xB9\xD9\xB6\xF8\xB4\xCF\xB4\xD9.");
 #else
 		TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str());
diff --git a/src/GameLib/MapOutdoorQuadtree.cpp b/src/GameLib/MapOutdoorQuadtree.cpp
index 8c35f0b3..d7a72268 100644
--- a/src/GameLib/MapOutdoorQuadtree.cpp
+++ b/src/GameLib/MapOutdoorQuadtree.cpp
@@ -9,7 +9,7 @@ void CMapOutdoor::BuildQuadTree()
 {
 	FreeQuadTree();
 
-	// m_wPatchCount�� ConvertPatchSplat������ ���Ѵ�, ������ ���� ���⼭ üũ�Ѵ�.
+	// m_wPatchCount는 ConvertPatchSplat에서도 정한다, 안전을 위해 여기서 체크한다.
 	if (0 == m_wPatchCount)
 	{
 		TraceError("MapOutdoor::BuildQuadTree : m_wPatchCount is zero, you must call ConvertPatchSplat before call this method.");
diff --git a/src/GameLib/MapOutdoorRender.cpp b/src/GameLib/MapOutdoorRender.cpp
index d60fd1bb..16f47654 100644
--- a/src/GameLib/MapOutdoorRender.cpp
+++ b/src/GameLib/MapOutdoorRender.cpp
@@ -42,10 +42,10 @@ void CMapOutdoor::RenderTerrain()
 	
 	__RenderTerrain_RecurseRenderQuadTree(m_pRootNode);
 	
-	// �Ÿ��� ����
+	// 거리순 정렬
 	std::sort(m_PatchVector.begin(),m_PatchVector.end());
 
-	// �׸��� ���� ���� ����
+	// 그리기 위한 벡터 세팅
 	if (CTerrainPatch::SOFTWARE_TRANSFORM_PATCH_ENABLE)
 		__RenderTerrain_RenderSoftwareTransformPatch();
 	else
@@ -133,13 +133,13 @@ void CMapOutdoor::ApplyLight(DWORD dwVersion, const D3DLIGHT9& c_rkLight)
 	STATEMANAGER.SetLight(0, &c_rkLight);
 }
 
-// 2004. 2. 17. myevan. ��� �κ��� ���̰� �ʱ�ȭ �Ѵ�
+// 2004. 2. 17. myevan. 모든 부분을 보이게 초기화 한다
 void CMapOutdoor::InitializeVisibleParts()
 {
 	m_dwVisiblePartFlags=0xffffffff;
 }
 
-// 2004. 2. 17. myevan. Ư�� �κ��� ���̰� �ϰų� ���ߴ� �Լ�
+// 2004. 2. 17. myevan. 특정 부분을 보이게 하거나 감추는 함수
 void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
 {
 	DWORD dwMask=(1<<ePart);
@@ -154,7 +154,7 @@ void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
 	}
 }
 
-// 2004. 2. 17. myevan. Ư�� �κ��� ���̴��� �˾Ƴ��� �Լ�
+// 2004. 2. 17. myevan. 특정 부분이 보이는지 알아내는 함수
 bool CMapOutdoor::IsVisiblePart(int ePart)
 {
 	DWORD dwMask=(1<<ePart);
@@ -164,7 +164,7 @@ bool CMapOutdoor::IsVisiblePart(int ePart)
 	return false;
 }
 
-// Splat ���� ����
+// Splat 개수 제한
 void CMapOutdoor::SetSplatLimit(int iSplatNum)
 {
 	m_iSplatLimit = iSplatNum;
@@ -353,7 +353,7 @@ struct CMapOutdoor_LessThingInstancePtrRenderOrder
 {
 	bool operator() (CGraphicThingInstance* pkLeft, CGraphicThingInstance* pkRight)
 	{
-		//TODO : Camera��ġ������� ����
+		//TODO : Camera위치기반으로 소팅
 		CCamera * pCurrentCamera = CCameraManager::Instance().GetCurrentCamera();
 		const D3DXVECTOR3 & c_rv3CameraPos = pCurrentCamera->GetEye();
 		const D3DXVECTOR3 & c_v3LeftPos  = pkLeft->GetPosition();
@@ -387,7 +387,7 @@ void CMapOutdoor::RenderArea(bool bRenderAmbience)
 	m_dwRenderedGraphicThingInstanceNum = 0;
 	m_dwRenderedCRCWithNumberVector.clear();
 
-	// NOTE - 20041201.levites.���� �׸��� �߰�
+	// NOTE - 20041201.levites.던젼 그림자 추가
 	for (int j = 0; j < AROUND_AREA_NUM; ++j)
 	{
 		CArea * pArea;
diff --git a/src/GameLib/MapOutdoorRenderHTP.cpp b/src/GameLib/MapOutdoorRenderHTP.cpp
index 7ce43543..2b410685 100644
--- a/src/GameLib/MapOutdoorRenderHTP.cpp
+++ b/src/GameLib/MapOutdoorRenderHTP.cpp
@@ -100,7 +100,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
 	std::vector<std::pair<float ,long> >::iterator far_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_far);
 	std::vector<std::pair<float ,long> >::iterator near_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_near);
 
-	// NOTE: Word Editor �������� fog far���� �ָ��ִ� ��ü�� �ؽ��� ���� �׸��� �۾��� ���� ����
+	// NOTE: Word Editor 툴에서는 fog far보다 멀리있는 물체를 텍스쳐 없이 그리는 작업을 하지 않음
 #ifdef WORLD_EDITOR
 	near_it = m_PatchVector.begin();
 	far_it = m_PatchVector.end();
@@ -119,7 +119,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
 	DWORD dwFogEnable = STATEMANAGER.GetRenderState(D3DRS_FOGENABLE);
 	std::vector<std::pair<float, long> >::iterator it = m_PatchVector.begin();
 
-	// NOTE: ���������� view ~ fog near ������ ������ fog disabled ���·� �׸��� �۾��� ���� ����.
+	// NOTE: 맵툴에서는 view ~ fog near 사이의 지형을 fog disabled 상태로 그리는 작업을 하지 않음.
 #ifndef WORLD_EDITOR
 	STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
 
@@ -379,7 +379,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
 		}
 		else
 		{
-			// 0�� �ؽ�ó
+			// 0번 텍스처
 			if ( 0 < rTerrainSplatPatch.PatchTileCount[sPatchNum][0] )
 			{
 				DWORD dwTextureFactorFor0Texture = STATEMANAGER.GetRenderState(D3DRS_TEXTUREFACTOR);
@@ -602,7 +602,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
 */
 #endif
 
-	// �׸���
+	// 그림자
 	if (m_bDrawShadow)
 	{
 		STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);
diff --git a/src/GameLib/MapOutdoorRenderSTP.cpp b/src/GameLib/MapOutdoorRenderSTP.cpp
index 9c82255d..989bfa3c 100644
--- a/src/GameLib/MapOutdoorRenderSTP.cpp
+++ b/src/GameLib/MapOutdoorRenderSTP.cpp
@@ -221,7 +221,7 @@ void CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat(SoftwareTransformPat
 			break;
 	}	
 
-	// �׸���
+	// 그림자
 	if (m_bDrawShadow)
 	{	
 		__SoftwareTransformPatch_SetShadowStream(akTransVertex);
diff --git a/src/GameLib/MapOutdoorUpdate.cpp b/src/GameLib/MapOutdoorUpdate.cpp
index 7337f05a..33191e84 100644
--- a/src/GameLib/MapOutdoorUpdate.cpp
+++ b/src/GameLib/MapOutdoorUpdate.cpp
@@ -8,7 +8,7 @@
 #include "TerrainQuadtree.h"
 #include "ActorInstance.h"
 
-// 2004.08.17.myevan.std::vector �� ����� ��� �޸� ���ٿ� �����ɷ� ���������� ����ϵ��� ����
+// 2004.08.17.myevan.std::vector 를 사용할 경우 메모리 접근에 오래걸려 스택쪽으로 계산하도록 수정
 class PCBlocker_CDynamicSphereInstanceVector
 {
 	public:
@@ -239,7 +239,7 @@ void CMapOutdoor::__Game_UpdateArea(D3DXVECTOR3& v3Player)
 	D3DXVECTOR3 v3Target = pCamera->GetTarget();
 	D3DXVECTOR3 v3Eye= pCamera->GetEye();
 
-	D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // ���� ����
+	D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // 빛의 방향
 	v3Light *= 50.0f / D3DXVec3Length(&v3Light);
 
 	/*
diff --git a/src/GameLib/MapOutdoorWater.cpp b/src/GameLib/MapOutdoorWater.cpp
index e5670b76..f852ba28 100644
--- a/src/GameLib/MapOutdoorWater.cpp
+++ b/src/GameLib/MapOutdoorWater.cpp
@@ -69,14 +69,14 @@ void CMapOutdoor::RenderWater()
 	// RenderState
 	//////////////////////////////////////////////////////////////////////////
 
-	// �� �� �Ʒ� �ִϽ�Ű��...
+	// 물 위 아래 애니시키기...
 	static float s_fWaterHeightCurrent = 0;
 	static float s_fWaterHeightBegin = 0;
 	static float s_fWaterHeightEnd = 0;
 	static DWORD s_dwLastHeightChangeTime = CTimer::Instance().GetCurrentMillisecond();
 	static DWORD s_dwBlendtime = 300;
 
-	// 1.5�� ���� ����
+	// 1.5초 마다 변경
 	if ((CTimer::Instance().GetCurrentMillisecond() - s_dwLastHeightChangeTime) > s_dwBlendtime)
 	{
 		s_dwBlendtime = random_range(1000, 3000);
@@ -116,7 +116,7 @@ void CMapOutdoor::RenderWater()
 			DrawWater(i->second);
 	}
 
-	// ������ �� �Ŀ��� �� z ��ġ�� ����
+	// 렌더링 한 후에는 물 z 위치를 복구
 	m_matWorldForCommonUse._43 = 0.0f;
 
 	//////////////////////////////////////////////////////////////////////////
diff --git a/src/GameLib/PhysicsObject.cpp b/src/GameLib/PhysicsObject.cpp
index 2373ce38..ab2fa8f3 100644
--- a/src/GameLib/PhysicsObject.cpp
+++ b/src/GameLib/PhysicsObject.cpp
@@ -61,7 +61,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
 		m_v3Acceleration.y,
 		m_v3Acceleration.z);
 */
-	// NOTE : ���� ��ġ�� ���صд�. �ٵ� 100���� ũ�ٸ�? ;
+	// NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ;
 	const int LoopValue = 100;
 	D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);
 
@@ -80,7 +80,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
 
 				//for (float fRatio = 0.0f; fRatio < 1.0f; fRatio += 0.1f)
 				//{
-				//	// ���� �����ϰ� üũ�Ѵ�
+				//	// 좀더 정밀하게 체크한다
 				//	if (pWorld->isPhysicalCollision(c_rvBasePosition + v3Movement * fRatio))
 				//	{
 				//		v3Movement = D3DXVECTOR3 (0.0f, 0.0f, 0.0f);
@@ -142,11 +142,11 @@ float CPhysicsObject::GetYMovement()
 
 bool CPhysicsObject::isBlending()
 {
-	// NOTE : IncreaseExternalForce() �� ���� �и��� ó�����ΰ�?
+	// NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가?
 	if (0.0f != D3DXVec3Length(&m_v3Velocity))
 		return true;
 
-	// NOTE : SetLastPosition() �� ���� �и��� ó�����ΰ�?
+	// NOTE : SetLastPosition() 에 의해 밀리는 처리중인가?
 	if (m_xPushingPosition.isPlaying() ||
 		m_yPushingPosition.isPlaying())
 		return true;
diff --git a/src/GameLib/Property.cpp b/src/GameLib/Property.cpp
index abafe14c..ef408820 100644
--- a/src/GameLib/Property.cpp
+++ b/src/GameLib/Property.cpp
@@ -5,12 +5,12 @@
 #include "PropertyManager.h"
 #include "Property.h"
 /*
- *	CProperty ���� ����
+ *	CProperty 파일 포맷
  *
  *  0 ~ 4 bytes: fourcc
  *  5 ~ 6 bytes: \r\n
  *
- *  �� ������ ����Ʈ���� �ؽ�Ʈ ���� �δ��� ���� ����
+ *  그 이후의 바이트들은 텍스트 파일 로더와 같은 구조
  */
 CProperty::CProperty(const char * c_pszFileName) : mc_pFileName(NULL), m_dwCRC(0)
 {
@@ -68,9 +68,9 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
 	if (m_stTokenMap.end() == it)
 		return false;
 
-// NOTE : ƨ�� ���� �߰�
+// NOTE : 튕김 현상 발견
 //	std::copy(rTokenVector.begin(), it->second.begin(), it->second.end());
-// NOTE : ���۷������� �̷� ������ �ϰԲ� �Ǿ� ����
+// NOTE : 레퍼런스에는 이런 식으로 하게끔 되어 있음
 ///////////////////////////////////////////////////////////////////////////////
 //	template <class InputIterator, class OutputIterator>
 //	OutputIterator copy(InputIterator first, InputIterator last,
@@ -82,11 +82,11 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
 //	copy(V.begin(), V.end(), L.begin());
 //	assert(equal(V.begin(), V.end(), L.begin()));
 ///////////////////////////////////////////////////////////////////////////////
-// �嵥 �׷��� ƨ��. - [levites]
+// 헌데 그래도 튕김. - [levites]
 //	std::copy(it->second.begin(), it->second.end(), rTokenVector.begin());
 
-// �ᱹ �̷���.. - [levites]
-// ���� ����ϴ� �� : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
+// 결국 이렇게.. - [levites]
+// 현재 사용하는 곳 : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
 	CTokenVector & rSourceTokenVector = it->second;
 	CTokenVector::iterator itor = rSourceTokenVector.begin();
 	for (; itor != rSourceTokenVector.end(); ++itor)
@@ -102,7 +102,7 @@ void CProperty::PutString(const char * c_pszKey, const char * c_pszString)
 	std::string stTempKey = c_pszKey;
 	stl_lowers(stTempKey);
 
-	// �̹� �ִ°� ����
+	// 이미 있는걸 지움
 	CTokenVectorMap::iterator itor = m_stTokenMap.find(stTempKey);
 
 	if (itor != m_stTokenMap.end())
diff --git a/src/GameLib/PropertyLoader.cpp b/src/GameLib/PropertyLoader.cpp
index 4a1520e5..44070423 100644
--- a/src/GameLib/PropertyLoader.cpp
+++ b/src/GameLib/PropertyLoader.cpp
@@ -33,10 +33,10 @@ DWORD CPropertyLoader::RegisterFile(const char * c_szPathName, const char * c_sz
 	stl_lowers(stExt);
 	stl_lowers(strFileName);
 
-	// �н��� �ҹ��ڷ� ����� \\ �� / �� �ٲ۴�.
+	// 패스를 소문자로 만들고 \\ 는 / 로 바꾼다.
 	StringPath(strFileName);
 
-	// ����� CRC ó�� (������ CRC)
+	// 예약된 CRC 처리 (지워진 CRC)
 	if (0 == strFileName.compare("property/reserve"))
 	{
 		m_pPropertyManager->LoadReservedCRC(strFileName.c_str());
diff --git a/src/GameLib/PropertyManager.cpp b/src/GameLib/PropertyManager.cpp
index f5a11841..ea34b781 100644
--- a/src/GameLib/PropertyManager.cpp
+++ b/src/GameLib/PropertyManager.cpp
@@ -53,8 +53,8 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName)
 	else
 	{
 		m_isFileMode = true;
-		// NOTE : ���⼭ Property�� ��Ͻ�Ű�� WorldEditor���� �̻��� ���� ;
-		//        ����, Property Tree List���� ����� ���Ѿ� �DZ� ������ �ٱ��ʿ���.. - [levites]
+		// NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ;
+		//        또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites]
 	}
 
 	return true;
@@ -193,7 +193,7 @@ bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceF
 	if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE))
 		return false;
 
-	if (!m_isFileMode)	// �� ���Ͽ��� ����
+	if (!m_isFileMode)	// 팩 파일에도 넣음
 	{
 		if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,""))
 		{
@@ -219,7 +219,7 @@ bool CPropertyManager::Erase(DWORD dwCRC)
 	DeleteFile(pProperty->GetFileName());
 	ReserveCRC(pProperty->GetCRC());
 
-	if (!m_isFileMode)	// ���� ��尡 �ƴϸ� �ѿ����� ����
+	if (!m_isFileMode)	// 파일 모드가 아니면 팩에서도 지움
 		m_pack.Delete(pProperty->GetFileName());
 
 	FILE * fp = fopen("property/reserve", "a+");
diff --git a/src/GameLib/RaceData.cpp b/src/GameLib/RaceData.cpp
index b321236c..de48b19c 100644
--- a/src/GameLib/RaceData.cpp
+++ b/src/GameLib/RaceData.cpp
@@ -323,17 +323,17 @@ CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex
 		return NULL;
 	}
 
-	// 2004. 3. 15. myevan. ������ ��dz� �ε��� ������ �־�� �Ѵ�.
+	// 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다.
 	pRaceMotionData->SetName(wMotionIndex);
 
 	/////
 
-	// FIXME : �̹� GR2�� �ε� �Ǿ� ���� ��쿡�� ��� �ؾ� �ϴ°�?
-	//         ����� �Ȱ��� ���� �ϳ� �� �߰� �Ǿ� ������. - [levites]
+	// FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가?
+	//         현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites]
 
 	return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
 
-	// 2004.09.03.myevan.���ο��Լ��� ��ó	
+	// 2004.09.03.myevan.새로운함수로 대처	
 	//TMotion	Motion;
 	//Motion.byPercentage	= byPercentage;
 	//Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName());
diff --git a/src/GameLib/RaceDataFile.cpp b/src/GameLib/RaceDataFile.cpp
index 809965e3..ee05fa92 100644
--- a/src/GameLib/RaceDataFile.cpp
+++ b/src/GameLib/RaceDataFile.cpp
@@ -73,7 +73,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
 				}
 
 				/////////////////////////
-				// Temporary - �̺�Ʈ�� ���� �ӽ� ���
+				// Temporary - 이벤트를 위한 임시 기능
 				TextFileLoader.GetTokenString("specialpath", &strPathName);
 				/////////////////////////
 
@@ -146,7 +146,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
 				}
 
 				/////////////////////////
-				// Temporary - �̺�Ʈ�� ���� �ӽ� ���
+				// Temporary - 이벤트를 위한 임시 기능
 				TextFileLoader.GetTokenString("specialpath", &strPathName);
 				/////////////////////////
 
diff --git a/src/GameLib/RaceManager.cpp b/src/GameLib/RaceManager.cpp
index 9a28aa30..58601698 100644
--- a/src/GameLib/RaceManager.cpp
+++ b/src/GameLib/RaceManager.cpp
@@ -51,7 +51,7 @@ void __GetRaceResourcePathes(unsigned race, std::vector <std::string>& vec_stPat
 			vec_stPathes.push_back ("d:/ymir work/guild/");
 		}
 	}
-	// ������ �̺�Ʈ�� ���� ����
+	// 만우절 이벤트용 예외 몬스터
 	else if (8507 == race || 8510 == race)
 	{
 		vec_stPathes.push_back ("d:/ymir work/monster2/");
@@ -273,8 +273,8 @@ bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathN
 
 		if (s_kMap_stType_dwIndex.end() == fTypeIndex)
 		{
-			// ��� ��Ͽ� WAIT, WAIT4, WAIT20  �̷� ������ ��ϵǾ� ���� ��,
-			// WAIT4, WAIT20�� WAIT�� �ν��� �� �ֵ��� ó��
+			// 모션 목록에 WAIT, WAIT4, WAIT20  이런 식으로 등록되어 있을 때,
+			// WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리
 			const size_t c_cutLengthLimit = 2;
 			bool bFound = false;
 
diff --git a/src/GameLib/SnowEnvironment.cpp b/src/GameLib/SnowEnvironment.cpp
index 11ffd146..8aed9304 100644
--- a/src/GameLib/SnowEnvironment.cpp
+++ b/src/GameLib/SnowEnvironment.cpp
@@ -124,7 +124,7 @@ void CSnowEnvironment::__ApplyBlur()
 //									BlurVertex(D3DXVECTOR3(wTextureSize,0.0f,0.0f),1.0f,		alphaColor, 1,0) , 
 //									BlurVertex(D3DXVECTOR3(0.0f,wTextureSize,0.0f),1.0f,		alphaColor, 0,1) , 
 //									BlurVertex(D3DXVECTOR3(wTextureSize,wTextureSize,0.0f),1.0f,	alphaColor, 1,1) };
-//				//���� ���� �ؽ��ĸ� ��´�.
+//				//누적 블러 텍스쳐를 찍는다.
 //				STATEMANAGER.SetTexture(0,m_lpAccumTexture);
 //				STATEMANAGER.SetVertexShader( D3DFVF_XYZRHW | D3DFVF_DIFFUSE|D3DFVF_TEX1 );
 //				STATEMANAGER.DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,V,sizeof(BlurVertex));
diff --git a/src/GameLib/WeaponTrace.cpp b/src/GameLib/WeaponTrace.cpp
index c447c49f..d4384691 100644
--- a/src/GameLib/WeaponTrace.cpp
+++ b/src/GameLib/WeaponTrace.cpp
@@ -32,7 +32,7 @@ void CWeaponTrace::Update(float fReachScale)
 	if (!m_pInstance)
 		return;
 	{
-		// �ܻ��� ����� �ð� ���� ���� ���鸸 �����մϴ�.
+		// 잔상을 남기는 시간 범위 내의 점들만 유지합니다.
 		TTimePointList::iterator it;
 		for(it=m_ShortTimePointList.begin();it!=m_ShortTimePointList.end();++it)
 		{
@@ -69,7 +69,7 @@ void CWeaponTrace::Update(float fReachScale)
 			mat._41 = pBoneMat->_41;
 			mat._42 = pBoneMat->_42;
 			mat._43 = pBoneMat->_43;
-			// ���� ��ġ�� �߰��մϴ�.
+			// 현재 위치를 추가합니다.
 			D3DXMATRIX matPoint;
 			D3DXMATRIX matTranslation;
 			D3DXMATRIX matRotation;
diff --git a/src/MilesLib/SoundData.cpp b/src/MilesLib/SoundData.cpp
index 91c99f1a..e1a52e12 100644
--- a/src/MilesLib/SoundData.cpp
+++ b/src/MilesLib/SoundData.cpp
@@ -86,7 +86,7 @@ bool CSoundData::ReadFromDisk()
 			}
 			break;
 
-		case AILFILETYPE_ADPCM_WAV:	// 3D ����� decompress �ؾ� ��.
+		case AILFILETYPE_ADPCM_WAV:	// 3D 사운드는 decompress 해야 함.
 			{
 				AIL_WAV_info(s + 1, &info);
 				AIL_decompress_ADPCM(&info, &m_data, &m_size);
diff --git a/src/MilesLib/SoundInstance2D.cpp b/src/MilesLib/SoundInstance2D.cpp
index 594c6101..aa542813 100644
--- a/src/MilesLib/SoundInstance2D.cpp
+++ b/src/MilesLib/SoundInstance2D.cpp
@@ -34,11 +34,11 @@ bool CSoundInstance2D::SetSound(CSoundData * pSoundData)
 {
 	assert(m_sample != NULL && pSoundData != NULL);
 
-	// ���۷��� ī��Ʈ�� 1�� �� �� �ε带 �ؾ� ����� ����� ����
-	// �ǹǷ� �ݵ�� Get�� ȣ�� �ϰ� �����ؾ� �Ѵ�.
-	// ��, m_pSoundData�� pSoundData�� ���� m_pSoundData�� ���۷���
-	// ī���Ͱ� 1�� ���, ���ʿ��ϰ� �ε尡 �Ͼ�Ƿ� �̸� ���۷���
-	// ī���͸� �÷����� �Ѵ�.
+	// 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴
+	// 되므로 반드시 Get을 호출 하고 진행해야 한다.
+	// 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스
+	// 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스
+	// 카운터를 올려놔야 한다.
 	LPVOID lpData = pSoundData->Get();
 
 	AIL_init_sample(m_sample);
diff --git a/src/MilesLib/SoundInstance3D.cpp b/src/MilesLib/SoundInstance3D.cpp
index eb1ea1c1..a7c18781 100644
--- a/src/MilesLib/SoundInstance3D.cpp
+++ b/src/MilesLib/SoundInstance3D.cpp
@@ -35,11 +35,11 @@ bool CSoundInstance3D::SetSound(CSoundData* pSoundData)
 {
 	assert(m_sample != NULL && pSoundData != NULL);
 
-	// ���۷��� ī��Ʈ�� 1�� �� �� �ε带 �ؾ� ����� ����� ����
-	// �ǹǷ� �ݵ�� Get�� ȣ�� �ϰ� �����ؾ� �Ѵ�.
-	// ��, m_pSoundData�� pSoundData�� ���� m_pSoundData�� ���۷���
-	// ī���Ͱ� 1�� ���, ���ʿ��ϰ� �ε尡 �Ͼ�Ƿ� �̸� ���۷���
-	// ī���͸� �÷����� �Ѵ�.
+	// 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴
+	// 되므로 반드시 Get을 호출 하고 진행해야 한다.
+	// 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스
+	// 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스
+	// 카운터를 올려놔야 한다.
 	LPVOID lpData = pSoundData->Get();
 	
 	if (m_pSoundData != NULL)
@@ -97,7 +97,7 @@ void CSoundInstance3D::Stop()
 {
 	AIL_end_3D_sample(m_sample);
 //	m_sample = NULL;
-// NOTE : IsDone�� üũ�Ϸ��� m_sample�� ����־�� �մϴ� - [levites]
+// NOTE : IsDone을 체크하려면 m_sample이 살아있어야 합니다 - [levites]
 }
 
 void CSoundInstance3D::GetVolume(float& rfVolume) const
diff --git a/src/MilesLib/SoundManager.cpp b/src/MilesLib/SoundManager.cpp
index 7d8ce91c..159f6aac 100644
--- a/src/MilesLib/SoundManager.cpp
+++ b/src/MilesLib/SoundManager.cpp
@@ -381,7 +381,7 @@ void CSoundManager::PlayCharacterSound3D(float fx, float fy, float fz, const cha
 	if (0.0f == GetSoundVolume())
 		return;
 
-	// ��� ������ ����ȭ�� �ʿ��� ���� �ִ� - [levites]
+	// 어느 정도의 최적화가 필요할 수도 있다 - [levites]
 	if (bCheckFrequency)
 	{
 		static float s_fLimitDistance = 5000*5000;
@@ -548,7 +548,7 @@ void CSoundManager::FadeOutAllMusic()
 
 void CSoundManager::SaveVolume()
 {
-	// NOTE : �ι� �̻� Save�� �õ��Ҷ��� �׳� Return
+	// NOTE : 두번 이상 Save를 시도할때는 그냥 Return
 	if (m_isSoundDisable)
 		return;
 
diff --git a/src/MilesLib/SoundManager3D.cpp b/src/MilesLib/SoundManager3D.cpp
index e0e8631d..7bfebff8 100644
--- a/src/MilesLib/SoundManager3D.cpp
+++ b/src/MilesLib/SoundManager3D.cpp
@@ -150,7 +150,7 @@ int CSoundManager3D::SetInstance(const char * c_pszFileName)
 			if (!pkInst->SetSound(pkSoundData))
 			{
 				TraceError("CSoundManager3D::GetInstance (filename: %s)", c_pszFileName);
-				// NOTE : ���尡 ���� ��� Failed to set. return NULL. - [levites]
+				// NOTE : 사운드가 없을 경우 Failed to set. return NULL. - [levites]
 				return -1;
 			}
 
@@ -159,7 +159,7 @@ int CSoundManager3D::SetInstance(const char * c_pszFileName)
 
 		++start;
 
-		// ���� DWORD �Ѱ谪�� �Ѿ���� ��������.. �׷���.. Ȥ�ó�.. - [levites]
+		// 설마 DWORD 한계값을 넘어갈리야 없겠지만.. 그래도.. 혹시나.. - [levites]
 		if (start > 50000)
 		{
 			start = 0;
diff --git a/src/MilesLib/Type.cpp b/src/MilesLib/Type.cpp
index 29258d6a..a717fd2b 100644
--- a/src/MilesLib/Type.cpp
+++ b/src/MilesLib/Type.cpp
@@ -77,11 +77,11 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound
 
 bool NSound::SaveSoundInformationPiece(const char * c_szFileName, NSound::TSoundDataVector & rSoundDataVector)
 {
-	if (rSoundDataVector.empty())	// �����Ͱ� ������ �������� ����
+	if (rSoundDataVector.empty())	// 데이터가 없으면 성공으로 간주
 	{
-		if (IsFile(c_szFileName))	// �����ʹ� ����ִµ� ������ �ִٸ�
+		if (IsFile(c_szFileName))	// 데이터는 비어있는데 파일이 있다면
 		{
-			_unlink(c_szFileName);		// �����.
+			_unlink(c_szFileName);		// 지운다.
 		}
 		return true;
 	}
diff --git a/src/PRTerrainLib/TextureSet.cpp b/src/PRTerrainLib/TextureSet.cpp
index 0bf0f780..a7eac9b2 100644
--- a/src/PRTerrainLib/TextureSet.cpp
+++ b/src/PRTerrainLib/TextureSet.cpp
@@ -19,7 +19,7 @@ void CTextureSet::Create()
 {
 	CResource * pResource = CResourceManager::Instance().GetResourcePointer("d:/ymir work/special/error.tga");
 	m_ErrorTexture.ImageInstance.SetImagePointer(static_cast<CGraphicImage *> (pResource));
-	AddEmptyTexture();	// ���찳 �ؽ��縦 ó���� �߰� �ؾ� ��
+	AddEmptyTexture();	// 지우개 텍스춰를 처음에 추가 해야 함
 }
 
 bool CTextureSet::Load(const char * c_szTextureSetFileName, float fTerrainTexCoordBase)
@@ -251,7 +251,7 @@ bool CTextureSet::Save(const char * c_pszFileName)
 	fprintf(pFile, "TextureSet\n");
 	fprintf(pFile, "\n");
 	
-	fprintf(pFile, "TextureCount %ld\n", GetTextureCount() - 1);	// -1 �� �ϴ� ������ ���찳 ������
+	fprintf(pFile, "TextureCount %ld\n", GetTextureCount() - 1);	// -1 을 하는 이유는 지우개 때문임
 	fprintf(pFile, "\n");
 
 	for (DWORD i = 1; i < GetTextureCount(); ++i)
diff --git a/src/ScriptLib/PythonUtils.cpp b/src/ScriptLib/PythonUtils.cpp
index 7dd71610..06e2abb0 100644
--- a/src/ScriptLib/PythonUtils.cpp
+++ b/src/ScriptLib/PythonUtils.cpp
@@ -203,7 +203,7 @@ bool PyCallClassMemberFunc(PyObject* poClass, PyObject* poFunc, PyObject* poArgs
 {
 	PyObject* poRet;
 
-	// NOTE : NULL üũ �߰�.. - [levites]
+	// NOTE : NULL 체크 추가.. - [levites]
 	if (!poClass)
 	{
 		Py_XDECREF(poArgs);
@@ -221,7 +221,7 @@ bool PyCallClassMemberFunc(PyObject* poClass, const char* c_szFunc, PyObject* po
 {
 	PyObject* poRet;
 
-	// NOTE : NULL üũ �߰�.. - [levites]
+	// NOTE : NULL 체크 추가.. - [levites]
 	if (!poClass)
 	{
 		Py_XDECREF(poArgs);
@@ -239,7 +239,7 @@ bool PyCallClassMemberFunc_ByPyString(PyObject* poClass, PyObject* poFuncName, P
 {
 	PyObject* poRet;
 
-	// NOTE : NULL üũ �߰�.. - [levites]
+	// NOTE : NULL 체크 추가.. - [levites]
 	if (!poClass)
 	{
 		Py_XDECREF(poArgs);
@@ -288,9 +288,9 @@ bool PyCallClassMemberFunc(PyObject* poClass, const char* c_szFunc, PyObject* po
 }
 
 /*
- *	�� �Լ��� ���� ȣ������ �ʵ��� �Ѵ�.
- *	�ε��� �ϰ� ���� ȣ���� ��쿡�� �ݵ�� false �� ���� ���� ��
- *	Py_DECREF(poArgs); �� ���ش�.
+ *	이 함수를 직접 호출하지 않도록 한다.
+ *	부득이 하게 직접 호출할 경우에는 반드시 false 가 리턴 됐을 때
+ *	Py_DECREF(poArgs); 를 해준다.
  */
 bool __PyCallClassMemberFunc_ByCString(PyObject* poClass, const char* c_szFunc, PyObject* poArgs, PyObject** ppoRet)
 {
diff --git a/src/SpeedTreeLib/SpeedTreeForest.cpp b/src/SpeedTreeLib/SpeedTreeForest.cpp
index 6512770b..ef84787e 100644
--- a/src/SpeedTreeLib/SpeedTreeForest.cpp
+++ b/src/SpeedTreeLib/SpeedTreeForest.cpp
@@ -78,7 +78,7 @@ BOOL CSpeedTreeForest::GetMainTree(DWORD dwCRC, CSpeedTreeWrapper ** ppMainTree,
 		CMappedFile file;
 		LPCVOID c_pvData;
 
-		// NOTE : ������ �������� return FALSE �ƴѰ���? - [levites]
+		// NOTE : 파일이 없을때는 return FALSE 아닌가요? - [levites]
 		if (!CEterPackManager::Instance().Get(file, c_pszFileName, &c_pvData))
 			return FALSE;
 
@@ -127,7 +127,7 @@ void CSpeedTreeForest::DeleteInstance(CSpeedTreeWrapper * pInstance)
 
 void CSpeedTreeForest::UpdateSystem(float fCurrentTime)
 {
-	// ������Ʈ �� �� �ѹ�
+	// 업데이트 할 때 한번
 	static float fLastTime = fCurrentTime;
 	float fElapsedTime = fCurrentTime - fLastTime;
 	CSpeedTreeRT::SetTime(fElapsedTime);
diff --git a/src/UserInterface/AccountConnector.cpp b/src/UserInterface/AccountConnector.cpp
index 6badd1c3..4e06c0fd 100644
--- a/src/UserInterface/AccountConnector.cpp
+++ b/src/UserInterface/AccountConnector.cpp
@@ -141,7 +141,7 @@ bool CAccountConnector::__HandshakeState_Process()
 	if (!__AnalyzePacket(HEADER_GC_PING, sizeof(TPacketGCPing), &CAccountConnector::__AuthState_RecvPing))
 		return false;
 
-	//  TODO :  ���� ������ �����ϰ� �������� data serialize & deserialize  �۾��ؾ� �Ѵ�.
+	//  TODO :  차후 서버와 동일하게 가변길이 data serialize & deserialize  작업해야 한다.
 	if (!__AnalyzeVarSizePacket(HEADER_GC_HYBRIDCRYPT_KEYS, &CAccountConnector::__AuthState_RecvHybridCryptKeys))
 		return false;
 
@@ -188,7 +188,7 @@ bool CAccountConnector::__AuthState_Process()
 	if (!__AnalyzePacket(HEADER_GC_PANAMA_PACK, sizeof(TPacketGCPanamaPack), &CAccountConnector::__AuthState_RecvPanamaPack))
 		return false;
 
-	//  TODO :  ���� ������ �����ϰ� �������� data serialize & deserialize  �۾��ؾ� �Ѵ�.
+	//  TODO :  차후 서버와 동일하게 가변길이 data serialize & deserialize  작업해야 한다.
 	if (!__AnalyzeVarSizePacket(HEADER_GC_HYBRIDCRYPT_KEYS, &CAccountConnector::__AuthState_RecvHybridCryptKeys))
 		return false;
 
@@ -221,11 +221,11 @@ bool CAccountConnector::__AuthState_RecvPhase()
 #ifdef USE_OPENID		
 		if (!openid_test)
 		{
-			//2012.07.19 OpenID : ���� 
-			//Ongoing : ���� ���̵� ���-> TPacketCGLogin5
-			//Ŭ�� ������ �ִ� ����Ű���� ������ ��������.
+			//2012.07.19 OpenID : 김용욱 
+			//Ongoing : 오픈 아이디 경우-> TPacketCGLogin5
+			//클라가 가지고 있는 인증키만을 서버에 보내도록.
 
-			//const char* tempAuthKey = "d4025bc1f752b64fe5d51ae575ec4730"; //�ϵ��ڵ� ���� 32
+			//const char* tempAuthKey = "d4025bc1f752b64fe5d51ae575ec4730"; //하드코딩 길이 32
 			TPacketCGLogin5 LoginPacket;
 			LoginPacket.header = HEADER_CG_LOGIN5_OPENID;
 
@@ -256,7 +256,7 @@ bool CAccountConnector::__AuthState_RecvPhase()
 			LoginPacket.name[ID_MAX_NUM] = '\0';
 			LoginPacket.pwd[PASS_MAX_NUM] = '\0';
 
-			// ��й�ȣ�� �޸𸮿� ��� ���� �ִ� ������ �־, ��� ��� ������ ������ ����
+			// 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경
 			ClearLoginInfo();
 			CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
 			rkNetStream.ClearLoginInfo();
@@ -287,7 +287,7 @@ bool CAccountConnector::__AuthState_RecvPhase()
 		LoginPacket.name[ID_MAX_NUM] = '\0';
 		LoginPacket.pwd[PASS_MAX_NUM] = '\0';
 
-		// ��й�ȣ�� �޸𸮿� ��� ���� �ִ� ������ �־, ��� ��� ������ ������ ����
+		// 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경
 		ClearLoginInfo();
 		CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
 		rkNetStream.ClearLoginInfo();
@@ -455,7 +455,7 @@ bool CAccountConnector::__AuthState_RecvAuthSuccess_OpenID()
 		CEterPackManager::instance().DecryptPackIV(dwPanamaKey);
 
 		CPythonNetworkStream & rkNet = CPythonNetworkStream::Instance();
-		rkNet.SetLoginInfo(kAuthSuccessOpenIDPacket.login, "0000");		//OpenID ���� �������� ��й�ȣ�� ������ �ʴ´�.
+		rkNet.SetLoginInfo(kAuthSuccessOpenIDPacket.login, "0000");		//OpenID 인증 과정에서 비밀번호는 사용되지 않는다.
 		rkNet.SetLoginKey(kAuthSuccessOpenIDPacket.dwLoginKey);
 		rkNet.Connect(m_strAddr.c_str(), m_iPort);
 	}
@@ -593,7 +593,7 @@ void CAccountConnector::OnConnectSuccess()
 
 void CAccountConnector::OnRemoteDisconnect()
 {
-	// Matrix Card Number �� ���� ���Ҵµ� close �Ǹ� ���α׷��� ���� �Ѵ�.
+	// Matrix Card Number 를 보내 놓았는데 close 되면 프로그램을 종료 한다.
 	if (m_isWaitKey)
 	{
 		if (m_poHandler)
diff --git a/src/UserInterface/CameraProcedure.cpp b/src/UserInterface/CameraProcedure.cpp
index 79bb0783..de16b46d 100644
--- a/src/UserInterface/CameraProcedure.cpp
+++ b/src/UserInterface/CameraProcedure.cpp
@@ -3,7 +3,7 @@
 #include "../eterlib/Camera.h"
 
 //////////////////////////////////////////////////////////////////////////
-// �޼���
+// 메세지
 
 extern void SetHeightLog(bool isLog);
 
@@ -135,7 +135,7 @@ void CCamera::ProcessBuildingCollision()
 	Vector3d aVector3d;
 	aVector3d.Set(m_v3Eye.x, m_v3Eye.y, m_v3Eye.z);
 
-	// ��
+	// 뒤
 
 	CCullingManager & rkCullingMgr = CCullingManager::Instance();
 
@@ -186,7 +186,7 @@ void CCamera::ProcessBuildingCollision()
 		}
 	}
 
-	// ��
+	// 위
 	{
 		v3CheckVector = m_v3Eye + 2.0f * m_fObjectCollisionRadius * m_v3Up;
 		s.v3Position = v3CheckVector;
@@ -203,7 +203,7 @@ void CCamera::ProcessBuildingCollision()
 		}
 	}
 
-	// ��
+	// 좌
 	{
 		v3CheckVector = m_v3Eye + 3.0f * m_fObjectCollisionRadius * m_v3Cross;
 		s.v3Position = v3CheckVector;
@@ -223,7 +223,7 @@ void CCamera::ProcessBuildingCollision()
 		}
 	}
 
-	// ��
+	// 우
 	{
 		v3CheckVector = m_v3Eye - 3.0f * m_fObjectCollisionRadius * m_v3Cross;
 		s.v3Position = v3CheckVector;
@@ -243,7 +243,7 @@ void CCamera::ProcessBuildingCollision()
 		}
 	}
 
-	// �Ʒ�
+	// 아래
 	{
 		v3CheckVector = m_v3Eye - 2.0f * m_fTerrainCollisionRadius * m_v3Up;
 		s.v3Position = v3CheckVector;
@@ -263,7 +263,7 @@ void CCamera::ProcessBuildingCollision()
 		}
 	}
 
-	// ��
+	// 앞
 	{
 		v3CheckVector = m_v3Eye + 4.0f * m_fObjectCollisionRadius * m_v3View;
 		s.v3Position = v3CheckVector;
diff --git a/src/UserInterface/GameType.cpp b/src/UserInterface/GameType.cpp
index fc3114b5..7dd2fc43 100644
--- a/src/UserInterface/GameType.cpp
+++ b/src/UserInterface/GameType.cpp
@@ -97,9 +97,9 @@ BYTE c_aSlotTypeToInvenType[SLOT_TYPE_MAX] =
 	RESERVED_WINDOW,		// SLOT_TYPE_EXCHANGE_OWNER
 	RESERVED_WINDOW,		// SLOT_TYPE_EXCHANGE_TARGET
 	RESERVED_WINDOW,		// SLOT_TYPE_QUICK_SLOT
-	RESERVED_WINDOW,		// SLOT_TYPE_SAFEBOX	<- SAFEBOX, MALL�� ��� �ϵ� �ڵ��Ǿ��ִ� LEGACY �ڵ带 ������.
+	RESERVED_WINDOW,		// SLOT_TYPE_SAFEBOX	<- SAFEBOX, MALL의 경우 하드 코딩되어있는 LEGACY 코드를 유지함.
 	RESERVED_WINDOW,		// SLOT_TYPE_PRIVATE_SHOP
-	RESERVED_WINDOW,		// SLOT_TYPE_MALL		<- SAFEBOX, MALL�� ��� �ϵ� �ڵ��Ǿ��ִ� LEGACY �ڵ带 ������.
+	RESERVED_WINDOW,		// SLOT_TYPE_MALL		<- SAFEBOX, MALL의 경우 하드 코딩되어있는 LEGACY 코드를 유지함.
 	DRAGON_SOUL_INVENTORY,	// SLOT_TYPE_DRAGON_SOUL_INVENTORY
 };
 
diff --git a/src/UserInterface/GuildMarkDownloader.cpp b/src/UserInterface/GuildMarkDownloader.cpp
index fb0c9712..2f931b16 100644
--- a/src/UserInterface/GuildMarkDownloader.cpp
+++ b/src/UserInterface/GuildMarkDownloader.cpp
@@ -158,7 +158,7 @@ UINT CGuildMarkDownloader::__GetPacketSize(UINT header)
 			return sizeof(TPacketGCMarkBlock);
 		case HEADER_GC_GUILD_SYMBOL_DATA:
 			return sizeof(TPacketGCGuildSymbolData);
-		case HEADER_GC_MARK_DIFF_DATA:	// ������� ����
+		case HEADER_GC_MARK_DIFF_DATA:	// 사용하지 않음
 			return sizeof(BYTE);
 	}
 	return 0;
@@ -180,7 +180,7 @@ bool CGuildMarkDownloader::__DispatchPacket(UINT header)
 			return __LoginState_RecvMarkBlock();
 		case HEADER_GC_GUILD_SYMBOL_DATA:
 			return __LoginState_RecvSymbolData();
-		case HEADER_GC_MARK_DIFF_DATA: // ������� ����
+		case HEADER_GC_MARK_DIFF_DATA: // 사용하지 않음
 			return true;
 	}
 	return false;	
@@ -289,11 +289,11 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkIndex()
 		Recv(sizeof(WORD), &guildID);
 		Recv(sizeof(WORD), &markID);
 
-		// ���ID -> ��ũID �ε��� ���
+		// 길드ID -> 마크ID 인덱스 등록
 		CGuildMarkManager::Instance().AddMarkIDByGuildID(guildID, markID);
 	}
 
-	// ��� ��ũ �̹��� ������ �ε��Ѵ�. (������ ������ �������)
+	// 모든 마크 이미지 파일을 로드한다. (파일이 없으면 만들어짐)
 	CGuildMarkManager::Instance().LoadMarkImages();
 
 	m_currentRequestingImageIndex = 0;
@@ -348,17 +348,17 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkBlock()
 		else
 		{
 			Recv(compSize, compBuf);
-			// ����� �̹����� ������ �����Ѵ�. CRC�� �������� ������ �Բ� ����ȴ�.
+			// 압축된 이미지를 실제로 저장한다. CRC등 여러가지 정보가 함께 빌드된다.
 			CGuildMarkManager::Instance().SaveBlockFromCompressedData(kPacket.imgIdx, posBlock, (const BYTE *) compBuf, compSize);
 		}
 	}
 
 	if (kPacket.count > 0)
 	{
-		// ��ũ �̹��� ����
+		// 마크 이미지 저장
 		CGuildMarkManager::Instance().SaveMarkImage(kPacket.imgIdx);
 
-		// ���ҽ� ���ε� (�������� ���ص� ���ΰ��� �� ���̰� ��)
+		// 리소스 리로딩 (재접속을 안해도 본인것은 잘 보이게 함)
 		std::string imagePath;
 
 		if (CGuildMarkManager::Instance().GetMarkImageFilename(kPacket.imgIdx, imagePath))
@@ -372,7 +372,7 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkBlock()
 		}
 	}
 
-	// �� ��û�� ���� ������ ��û�ϰ� �ƴϸ� �̹����� �����ϰ� ����
+	// 더 요청할 것이 있으면 요청하고 아니면 이미지를 저장하고 종료
 	if (m_currentRequestingImageIndex < CGuildMarkManager::Instance().GetMarkImageCount())
 		__SendMarkCRCList();
 	else
diff --git a/src/UserInterface/GuildMarkUploader.cpp b/src/UserInterface/GuildMarkUploader.cpp
index fa790d67..6de63421 100644
--- a/src/UserInterface/GuildMarkUploader.cpp
+++ b/src/UserInterface/GuildMarkUploader.cpp
@@ -31,7 +31,7 @@ bool CGuildMarkUploader::IsCompleteUploading()
 
 bool CGuildMarkUploader::__Save(const char* c_szFileName)
 {
-	/* ���δ����� �������� �ʾƾ� ��;
+	/* 업로더에서 저장하지 않아야 함;
 	ILuint uImg;
 	ilGenImages(1, &uImg);
 	ilBindImage(uImg);
diff --git a/src/UserInterface/InstanceBase.cpp b/src/UserInterface/InstanceBase.cpp
index 316623f3..805459fe 100644
--- a/src/UserInterface/InstanceBase.cpp
+++ b/src/UserInterface/InstanceBase.cpp
@@ -139,10 +139,10 @@ UINT CInstanceBase::SHORSE::GetLevel()
 			case 20107:
 			case 20108:
 			case 20109:
-			case 20110: // #0000673: [M2EU] ���ο� Ż�� Ÿ�� ���� �ȵ� 
-			case 20111: // #0000673: [M2EU] ���ο� Ż�� Ÿ�� ���� �ȵ� 
-			case 20112: // #0000673: [M2EU] ���ο� Ż�� Ÿ�� ���� �ȵ� 
-			case 20113: // #0000673: [M2EU] ���ο� Ż�� Ÿ�� ���� �ȵ� 
+			case 20110: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 
+			case 20111: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 
+			case 20112: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 
+			case 20113: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 
 			case 20114:
 			case 20115:
 			case 20116:
@@ -155,26 +155,26 @@ UINT CInstanceBase::SHORSE::GetLevel()
 			case 20124:
 			case 20125:
 				return 3;
-			case 20119: // �󸶴� �̺�Ʈ�� �渶�� ��ų�Ұ�, ���ݰ����� ����2�� ����
-			case 20219: // �ҷ��� �̺�Ʈ�� �渶�� ��ų�Ұ�, ���ݰ����� ����2�� ���� (=�󸶴� �渶 Ŭ��)
+			case 20119: // 라마단 이벤트용 흑마는 스킬불가, 공격가능한 레벨2로 설정
+			case 20219: // 할로윈 이벤트용 흑마는 스킬불가, 공격가능한 레벨2로 설정 (=라마단 흑마 클론)
 			case 20220:
 			case 20221:
 			case 20222:
 				return 2;
 		}
 
-		// ����Ʈ Ȯ�� �ý��ۿ� Ư�� ó�� (20201 ~ 20212 �뿪�� ����ϰ� ������� 4���� ������ �ʱ�, �߱�, ������)
-		//	-- Ż�� ������ Ŭ�󿡼� �����ϰ� ����/��ų ��밡�� ���ε� Ŭ�󿡼� ó���ϴ� �� ��ü�� ������ �ִ� ��.. [hyo]
+		// 마운트 확장 시스템용 특수 처리 (20201 ~ 20212 대역을 사용하고 순서대로 4개씩 나눠서 초급, 중급, 고급임)
+		//	-- 탈것 레벨을 클라에서 측정하고 공격/스킬 사용가능 여부도 클라에서 처리하는 것 자체에 문제가 있는 듯.. [hyo]
 		{
-			// �߱� Ż���� ����2 (���� ����, ��ų �Ұ�)
+			// 중급 탈것은 레벨2 (공격 가능, 스킬 불가)
 			if ((20205 <= mount &&  20208 >= mount) ||
-				(20214 == mount) || (20217 == mount)			// ������ ����������, ������ �����ϼ���
+				(20214 == mount) || (20217 == mount)			// 난폭한 전갑순순록, 난폭한 전갑암순록
 				)
 				return 2;
 
-			// ���� Ż���� ����3 (���� ����, ��ų ����)
+			// 고급 탈것은 레벨3 (공격 가능, 스킬 가능)
 			if ((20209 <= mount &&  20212 >= mount) || 
-				(20215 == mount) || (20218 == mount) ||			// ����� ����������, ����� �����ϼ���
+				(20215 == mount) || (20218 == mount) ||			// 용맹한 전갑순순록, 용맹한 전갑암순록
 				(20220 == mount)
 				)
 				return 3;
@@ -190,13 +190,13 @@ bool CInstanceBase::SHORSE::IsNewMount()
 	DWORD mount = m_pkActor->GetRace();
 
 	if ((20205 <= mount &&  20208 >= mount) ||
-		(20214 == mount) || (20217 == mount)			// ������ ����������, ������ �����ϼ���
+		(20214 == mount) || (20217 == mount)			// 난폭한 전갑순순록, 난폭한 전갑암순록
 		)
 		return true;
 
-	// ���� Ż��
+	// 고급 탈것
 	if ((20209 <= mount &&  20212 >= mount) || 
-		(20215 == mount) || (20218 == mount) ||			// ����� ����������, ����� �����ϼ���
+		(20215 == mount) || (20218 == mount) ||			// 용맹한 전갑순순록, 용맹한 전갑암순록
 		(20220 == mount)
 		)
 		return true;
@@ -205,7 +205,7 @@ bool CInstanceBase::SHORSE::IsNewMount()
 }
 bool CInstanceBase::SHORSE::CanUseSkill()
 {
-	// ����ų�� ���� ������ 3 �̻��̾�߸� ��.
+	// 마상스킬은 말의 레벨이 3 이상이어야만 함.
 	if (IsMounting())
 		return 2 < GetLevel();
 
@@ -303,7 +303,7 @@ bool __ArmorVnumToShape(int iVnum, DWORD * pdwShape)
 	return true;
 }
 
-// 2004.07.05.myevan.�ý�ź�� ���̴� ����
+// 2004.07.05.myevan.궁신탄영 끼이는 문제
 class CActorInstanceBackground : public IBackground
 {
 	public:
@@ -666,7 +666,7 @@ void CInstanceBase::__ClearMainInstance()
 	rkChrMgr.ClearMainInstance();
 }
 
-/* ���� �÷��̾� ij�������� ����.*/
+/* 실제 플레이어 캐릭터인지 조사.*/
 bool CInstanceBase::__IsMainInstance()
 {
 	if (this==__GetMainInstancePtr())
@@ -771,10 +771,10 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData)
 	SetMoveSpeed(c_rkCreateData.m_dwMovSpd);
 	SetAttackSpeed(c_rkCreateData.m_dwAtkSpd);
 	
-	// NOTE : Dress �� �԰� ������ Alpha �� ���� �ʴ´�.
+	// NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다.
 	if (!IsWearingDress())
 	{
-		// NOTE : �ݵ�� Affect ���� ���ʿ� �־�� ��
+		// NOTE : 반드시 Affect 셋팅 윗쪽에 있어야 함
 		m_GraphicThingInstance.SetAlphaValue(0.0f);
 		m_GraphicThingInstance.BlendAlphaValue(1.0f, 0.5f);
 	}
@@ -784,7 +784,7 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData)
 		SetAffectFlagContainer(c_rkCreateData.m_kAffectFlags);
 	}	
 
-	// NOTE : �ݵ�� Affect ���� �Ŀ� �ؾ� ��
+	// NOTE : 반드시 Affect 셋팅 후에 해야 함
 	AttachTextTail();
 	RefreshTextTail();
 
@@ -830,7 +830,7 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData)
 
 	__AttachHorseSaddle();
 
-	// ��� �ɺ��� ���� �ӽ� �ڵ�, ���� ��ġ�� ã�� ��
+	// 길드 심볼을 위한 임시 코드, 적정 위치를 찾는 중
 	const int c_iGuildSymbolRace = 14200;
 	if (c_iGuildSymbolRace == GetRace())
 	{
@@ -899,7 +899,7 @@ bool CInstanceBase::SetRace(DWORD eRace)
 
 BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID)
 {	
-	// �巹�� �԰� �������� ���ɿ��� ���� ������ �ʰ�..
+	// 드레스 입고 있을때는 부케외의 장비는 나오지 않게..
 	if (IsWearingDress())
 	{
 		const int c_iBouquets[] =
@@ -908,7 +908,7 @@ BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID)
 			50202,	// Bouquet for Shaman
 			50203,
 			50204,
-			0, // #0000545: [M2CN] ���� �巹���� ��� ���� ����
+			0, // #0000545: [M2CN] 웨딩 드레스와 장비 착용 문제
 		};
 
 		for (int i = 0; c_iBouquets[i] != 0; ++i)
@@ -1571,7 +1571,7 @@ void CInstanceBase::MovementProcess()
 	TPixelPosition kPPosCur;
 	NEW_GetPixelPosition(&kPPosCur);
 
-	// ������ ��ǥ���̹Ƿ� y�� -ȭ�ؼ� ���Ѵ�.
+	// 렌더링 좌표계이므로 y를 -화해서 더한다.
 
 	TPixelPosition kPPosNext;
 	{
@@ -1629,7 +1629,7 @@ void CInstanceBase::MovementProcess()
 
 			SetAdvancingRotation(fDstRot);
 
-			// ���� ���Ͻð� �ʾ� �ʹ� ���� �̵��ߴٸ�..
+			// 만약 렌턴시가 늦어 너무 많이 이동했다면..
 			if (fRestLen < -100.0f)
 			{
 				NEW_SetSrcPixelPosition(kPPosCur);
@@ -1638,13 +1638,13 @@ void CInstanceBase::MovementProcess()
 				SetAdvancingRotation(fDstRot);
 				//Tracenf("VID %d \xBF\xC0\xB9\xF6 \xB9\xE6\xC7\xE2\xBC\xB3\xC1\xA4 (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen);			
 
-				// �̵����̶�� �������� ���߰� �Ѵ�
+				// 이동중이라면 다음번에 멈추게 한다
 				if (FUNC_MOVE == m_kMovAfterFunc.eFunc)
 				{
 					m_kMovAfterFunc.eFunc = FUNC_WAIT;
 				}
 			}
-			// �����ߴٸ�...
+			// 도착했다면...
 			else if (fCurLen <= fTotalLen && fTotalLen <= fNextLen)
 			{
 				if (m_GraphicThingInstance.IsDead() || m_GraphicThingInstance.IsKnockDown())
@@ -1936,7 +1936,7 @@ void CInstanceBase::Transform()
 
 void CInstanceBase::Deform()
 {
-	// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+	// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 	if (!__CanRender())
 		return;
 
@@ -1960,7 +1960,7 @@ void CInstanceBase::RenderTrace()
 
 void CInstanceBase::Render()
 {
-	// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+	// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 	if (!__CanRender())
 		return;
 
@@ -2252,13 +2252,13 @@ bool CInstanceBase::IsTargetableInstance(CInstanceBase& rkInstVictim)
 	return rkInstVictim.CanPickInstance();
 }
 
-// 2004. 07. 07. [levites] - ��ų ����� Ÿ���� �ٲ�� ���� �ذ��� ���� �ڵ�
+// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
 bool CInstanceBase::CanChangeTarget()
 {
 	return m_GraphicThingInstance.CanChangeTarget();
 }
 
-// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 bool CInstanceBase::CanPickInstance()
 {
 	if (!__IsInViewFrustum())
@@ -2327,7 +2327,7 @@ BOOL CInstanceBase::IsStone()
 }
 
 
-BOOL CInstanceBase::IsGuildWall()	//IsBuilding ���ǹ���ü IsGuildWall�� ���庮��(���� ����)
+BOOL CInstanceBase::IsGuildWall()	//IsBuilding 길드건물전체 IsGuildWall은 담장벽만(문은 제외)
 {
 	return IsWall(m_dwRace);		
 }
@@ -2391,9 +2391,9 @@ BOOL CInstanceBase::IsWoodenDoor()
 	if (m_GraphicThingInstance.IsDoor())
 	{
 		int vnum = GetVirtualNumber();
-		if (vnum == 13000) // ������
+		if (vnum == 13000) // 나무문
 			return true;
-		else if (vnum >= 30111 && vnum <= 30119) // ��͹�
+		else if (vnum >= 30111 && vnum <= 30119) // 사귀문
 			return true;
 		else
 			return false;
@@ -2447,7 +2447,7 @@ DWORD CInstanceBase::GetVirtualNumber()
 	return m_dwVirtualNumber;
 }
 
-// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 bool CInstanceBase::__IsInViewFrustum()
 {
 	return m_GraphicThingInstance.isShow();
@@ -2689,7 +2689,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
 	{
 	case CItemData::ITEM_TYPE_WEAPON:
 		__ClearWeaponRefineEffect();		
-		if (refine < 7)	//���� ���õ� 7 �̻� ����Ʈ�� �ֽ��ϴ�.
+		if (refine < 7)	//현재 제련도 7 이상만 이펙트가 있습니다.
 			return 0;
 		switch(pItem->GetSubType())
 		{
@@ -2718,7 +2718,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
 	case CItemData::ITEM_TYPE_ARMOR:
 		__ClearArmorRefineEffect();
 
-		// ���� Ưȭ ����Ʈ
+		// 갑옷 특화 이펙트
 		if (pItem->GetSubType() == CItemData::ARMOR_BODY)
 		{
 			DWORD vnum = pItem->GetIndex();
@@ -2730,7 +2730,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
 			}
 		}
 
-		if (refine < 7)	//���� ���õ� 7 �̻� ����Ʈ�� �ֽ��ϴ�.
+		if (refine < 7)	//현재 제련도 7 이상만 이펙트가 있습니다.
 			return 0;
 
 		if (pItem->GetSubType() == CItemData::ARMOR_BODY)
@@ -2797,7 +2797,7 @@ bool CInstanceBase::ChangeArmor(DWORD dwArmor)
 	if (IsWalking())
 		EndWalking();
 
-	// 2004.07.25.myevan.����Ʈ �� �ٴ� ����
+	// 2004.07.25.myevan.이펙트 안 붙는 문제
 	//////////////////////////////////////////////////////
 	__ClearAffects();
 	//////////////////////////////////////////////////////
@@ -2819,7 +2819,7 @@ bool CInstanceBase::ChangeArmor(DWORD dwArmor)
 
 	RefreshState(CRaceMotionData::NAME_WAIT, TRUE);
 
-	// 2004.07.25.myevan.����Ʈ �� �ٴ� ����
+	// 2004.07.25.myevan.이펙트 안 붙는 문제
 	/////////////////////////////////////////////////
 	SetAffectFlagContainer(kAffectFlagContainer);
 	/////////////////////////////////////////////////
@@ -2974,9 +2974,9 @@ void CInstanceBase::RefreshState(DWORD dwMotIndex, bool isLoop)
 
 void CInstanceBase::RegisterBoundingSphere()
 {
-	// Stone �� ��� DeforomNoSkin �� �ϸ�
-	// �����ϴ� �ִϸ��̼� ���� ��� �ִϸ��̼���
-	// �ٿ�� �ڽ��� ������ ���� �ø��� ����� �̷������ �ʴ´�.
+	// Stone 일 경우 DeforomNoSkin 을 하면
+	// 낙하하는 애니메이션 같은 경우 애니메이션이
+	// 바운드 박스에 영향을 미쳐 컬링이 제대로 이루어지지 않는다.
 	if (!IsStone())
 	{
 		m_GraphicThingInstance.DeformNoSkin();
diff --git a/src/UserInterface/InstanceBaseBattle.cpp b/src/UserInterface/InstanceBaseBattle.cpp
index 37160d1f..5e8942b9 100644
--- a/src/UserInterface/InstanceBaseBattle.cpp
+++ b/src/UserInterface/InstanceBaseBattle.cpp
@@ -49,7 +49,7 @@ void CInstanceBase::ClearFlyTargetInstance()
 
 void CInstanceBase::SetFlyTargetInstance(CInstanceBase& rkInstDst)
 {
-// NOTE : NEW_Attack �� Target�� �ٲܶ� ���⼭ ���� �Ǿ���� - [levites]
+// NOTE : NEW_Attack 때 Target을 바꿀때 여기서 리턴 되어버림 - [levites]
 //	if (isLock())
 //		return;
 
@@ -188,7 +188,7 @@ bool CInstanceBase::NEW_GetFrontInstance(CInstanceBase ** ppoutTargetInstance, f
 	return true;
 }
 
-// 2004.07.21.levites - ���ĺ� ���� Ÿ�� ����
+// 2004.07.21.levites - 비파부 다중 타겟 지원
 bool CInstanceBase::NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInstanceBase& rkInstTarget, std::vector<CInstanceBase*>* pkVct_pkInst)
 {
 	const float HALF_FAN_ROT_MIN = 20.0f;
@@ -198,7 +198,7 @@ bool CInstanceBase::NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInsta
 
 	float fDstDirRot=NEW_GetRotationFromDestInstance(rkInstTarget);
 
-	// 2004.07.24.myevan - ���ĺ� ������ �ִ� ������ ����
+	// 2004.07.24.myevan - 비파부 가까이 있는 적부터 공격
 	std::multimap<float, CInstanceBase*> kMap_pkInstNear;
 	{
 		CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
@@ -209,11 +209,11 @@ bool CInstanceBase::NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInsta
 			if (pkInstEach==this)
 				continue;
 
-			// 2004.07.25.myevan - ���� ��츸 �߰��Ѵ�
+			// 2004.07.25.myevan - 적인 경우만 추가한다
 			if (!IsAttackableInstance(*pkInstEach))
 				continue;
 
-			// 2004.07.21.levites - ���ĺ� ���� Ÿ�� ����
+			// 2004.07.21.levites - 비파부 다중 타겟 지원
 			if (m_GraphicThingInstance.IsClickableDistanceDestInstance(pkInstEach->m_GraphicThingInstance, fSkillDistance))
 			{
 				float fEachInstDistance=min(NEW_GetDistanceFromDestInstance(*pkInstEach), HALF_FAN_ROT_MIN_DISTANCE);
@@ -253,11 +253,11 @@ bool CInstanceBase::NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std
 		{
 			CInstanceBase* pkInstEach=*i;
 
-			// �ڽ��� ��� �߰����� �ʴ´�
+			// 자신인 경우 추가하지 않는다
 			if (pkInstEach==this)
 				continue;
 
-			// ���� ��츸 �߰��Ѵ�
+			// 적인 경우만 추가한다
 			if (!IsAttackableInstance(*pkInstEach))
 				continue;
 
@@ -423,7 +423,7 @@ void CInstanceBase::AttackProcess()
 		CInstanceBase* pkInstEach=*i;
 		++i;
 
-		// ����� InstanceType ��
+		// 서로간의 InstanceType 비교
 		if (!IsAttackableInstance(*pkInstEach))
 			continue;
 
@@ -465,7 +465,7 @@ void CInstanceBase::RunComboAttack(float fAtkDirRot, DWORD wMotionIndex)
 	m_GraphicThingInstance.ComboAttack(wMotionIndex, fAtkDirRot);
 }
 
-// ���ϰ� TRUE�� �����ΰ��� �ִ�
+// 리턴값 TRUE가 무엇인가가 있다
 BOOL CInstanceBase::CheckAdvancing()
 {
 #ifdef __MOVIE_MODE__
@@ -517,11 +517,11 @@ BOOL CInstanceBase::CheckAdvancing()
 		CActorInstance& rkActorSelf=m_GraphicThingInstance;
 		CActorInstance& rkActorEach=pkInstEach->GetGraphicThingInstanceRef();
 
-		//NOTE : Skil�� ������ Door Type���� Collisionüũ �Ѵ�.
+		//NOTE : Skil을 쓰더라도 Door Type과는 Collision체크 한다.
 		if( bUsingSkill && !rkActorEach.IsDoor() )
 			continue;
 			
-		// ������ �����Ҽ� �ִ°�?
+		// 앞으로 전진할수 있는가?
 		if (rkActorSelf.TestActorCollision(rkActorEach))
 		{
 			uCollisionCount++;
@@ -544,13 +544,13 @@ BOOL CInstanceBase::CheckAdvancing()
 		}
 	}
 
-	// �ʼӼ� üũ
+	// 맵속성 체크
 	CPythonBackground& rkBG=CPythonBackground::Instance();
 	const D3DXVECTOR3 & rv3Position = m_GraphicThingInstance.GetPosition();
 	const D3DXVECTOR3 & rv3MoveDirection = m_GraphicThingInstance.GetMovementVectorRef();
 
-	// NOTE : ���� �̵� �Ÿ��� ũ�ٸ� �ɰ��� ���� ���� �Ӽ��� üũ�� ����
-	//        ���� ������ ���� 10.0f�� ������ �Ÿ� - [levites]
+	// NOTE : 만약 이동 거리가 크다면 쪼개서 구간 별로 속성을 체크해 본다
+	//        현재 설정해 놓은 10.0f는 임의의 거리 - [levites]
 	int iStep = int(D3DXVec3Length(&rv3MoveDirection) / 10.0f);
 	D3DXVECTOR3 v3CheckStep = rv3MoveDirection / float(iStep);
 	D3DXVECTOR3 v3CheckPosition = rv3Position;
@@ -695,7 +695,7 @@ void CInstanceBase::Die()
 	if (IsAffect(AFFECT_SPAWN))
 		__AttachEffect(EFFECT_SPAWN_DISAPPEAR);
 
-	// 2004.07.25.����Ʈ �Ⱥٴ� �����ذ�
+	// 2004.07.25.이펙트 안붙는 문제해결
 	////////////////////////////////////////
 	__ClearAffects();
 	////////////////////////////////////////
diff --git a/src/UserInterface/InstanceBaseEffect.cpp b/src/UserInterface/InstanceBaseEffect.cpp
index c183d678..13c22259 100644
--- a/src/UserInterface/InstanceBaseEffect.cpp
+++ b/src/UserInterface/InstanceBaseEffect.cpp
@@ -135,7 +135,7 @@ void CInstanceBase::ProcessDamage()
 	else if (flag & DAMAGE_CRITICAL)
 	{
 		//rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot);
-		//return; ���ڵ� ǥ��.
+		//return; 숫자도 표시.
 	}
 
 	std::string strDamageType;
@@ -162,7 +162,7 @@ void CInstanceBase::ProcessDamage()
 		{
 			strDamageType = "nontarget_";
 			rdwCRCEft = EFFECT_DAMAGE_NOT_TARGET;
-			return;//���� ���� �ȵ�.
+			return;//현재 적용 안됨.
 		}
 		else
 		{
@@ -258,7 +258,7 @@ CInstanceBase::SEffectContainer::Dict& CInstanceBase::__EffectContainer_GetDict(
 	return m_kEffectContainer.m_kDct_dwEftID;
 }
 
-// Return value �� boolean ���� ID �� �ٲߴϴ�
+// Return value 를 boolean 에서 ID 로 바꿉니다
 DWORD CInstanceBase::__EffectContainer_AttachEffect(DWORD dwEftKey)
 {
 	SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
@@ -481,7 +481,7 @@ bool CInstanceBase::__FindPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst)
 
 	return true;
 }
-//������� ��� ������� Ȯ���Ҷ�.
+//길드전시 상대 길드인지 확인할때.
 bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID)
 {
 	DWORD dwGVGKey=__GetPVPKey(dwSrcGuildID, dwDstGuildID);
@@ -491,7 +491,7 @@ bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID)
 
 	return true;
 }
-//��� ��忡���� ��� ��븸 ������ �� �ִ�.
+//대련 모드에서는 대련 상대만 공격할 수 있다.
 bool CInstanceBase::__FindDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst)
 {
 	DWORD dwDUELKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
@@ -510,7 +510,7 @@ bool CInstanceBase::IsPVPInstance(CInstanceBase& rkInstSel)
 	DWORD dwGuildIDSrc=GetGuildID();
 	DWORD dwGuildIDDst=rkInstSel.GetGuildID();
 
-	if (GetDuelMode())	//��� ����϶��� ~_~
+	if (GetDuelMode())	//대련 모드일때는 ~_~
 		return true;	
 
 	return __FindPVPKey(dwVIDSrc, dwVIDDst) || __FindGVGKey(dwGuildIDSrc, dwGuildIDDst);
@@ -688,7 +688,7 @@ void CInstanceBase::RefreshTextTailTitle()
 	RefreshTextTail();
 }
 
-// 2004.07.25.myevan.����Ʈ �� �ٴ� ���� �ذ�
+// 2004.07.25.myevan.이펙트 안 붙는 문제 해결
 /////////////////////////////////////////////////
 void CInstanceBase::__ClearAffectFlagContainer()
 {
@@ -782,7 +782,7 @@ void CInstanceBase::__SetReviveInvisibilityAffect(bool isVisible)
 {
 	if (isVisible)
 	{
-		// NOTE : Dress �� �԰� ������ Alpha �� ���� �ʴ´�.
+		// NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다.
 		if (IsWearingDress())
 			return;
 
@@ -798,7 +798,7 @@ void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible)
 {
 	if (isVisible)
 	{
-		// NOTE : Dress �� �԰� ������ Alpha �� ���� �ʴ´�.
+		// NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다.
 		if (IsWearingDress())
 			return;
 
@@ -808,7 +808,7 @@ void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible)
 		}
 		else
 		{
-			// 2004.10.16.myevan.������ ���� ����
+			// 2004.10.16.myevan.은형법 완전 투명
 			m_GraphicThingInstance.BlendAlphaValue(0.0f, 1.0f);
 			m_GraphicThingInstance.HideAllAttachingEffect();
 		}
@@ -861,7 +861,7 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible)
 				return;
 			break;
 /*
-		case AFFECT_GWIGEOM: // ���� �Ӽ� �������� �ٲ� ����
+		case AFFECT_GWIGEOM: // 전기 속성 공격으로 바뀔 예정
 			if (isVisible)
 			{
 				m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_HIT]);
@@ -874,7 +874,7 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible)
 			}
 			return;
 			break;
-		case AFFECT_HWAYEOM: // ȭ�� �Ӽ� �������� �ٲ� ����
+		case AFFECT_HWAYEOM: // 화염 속성 공격으로 바뀔 예정
 			if (isVisible)
 			{
 				m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_HIT]);
@@ -885,7 +885,7 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible)
 				m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
 				m_GraphicThingInstance.SetBattleAttachEffect(0);
 			}
-			// ȭ������ ������ ���� �Ͻ������� Visible �մϴ�.
+			// 화염참은 공격할 때만 일시적으로 Visible 합니다.
 			return;
 			break;
 */
@@ -904,13 +904,13 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible)
 			break;
 		case AFFECT_GYEONGGONG:
 		case AFFECT_KWAESOK:
-			// �����, ����� �۶��� Attaching ��ŵ�ϴ�. - [levites]
+			// 경공술, 쾌속은 뛸때만 Attaching 시킵니다. - [levites]
 			if (isVisible)
 				if (!IsWalking())
 					return;
 			break;
 		case AFFECT_INVISIBILITY:
-			// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+			// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 			if (isVisible)
 			{
 				m_GraphicThingInstance.ClearAttachingEffect();
@@ -1028,7 +1028,7 @@ void CInstanceBase::__DetachEffect(DWORD dwEID)
 
 DWORD CInstanceBase::__AttachEffect(UINT eEftType)
 {
-	// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+	// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 	if (IsAffect(AFFECT_INVISIBILITY))
 		return 0;
 
@@ -1043,8 +1043,8 @@ DWORD CInstanceBase::__AttachEffect(UINT eEftType)
 	{
 		std::string & rstrBoneName = ms_astAffectEffectAttachBone[eEftType];
 		const char * c_szBoneName;
-		// ��տ� ���� �� ����Ѵ�.
-		// �̷� ���� ���� ó���� �س��� ���� ij���� ���� Equip �� Bone Name �� �ٸ��� ����.
+		// 양손에 붙일 때 사용한다.
+		// 이런 식의 예외 처리를 해놓은 것은 캐릭터 마다 Equip 의 Bone Name 이 다르기 때문.
 		if (0 == rstrBoneName.compare("PART_WEAPON"))
 		{
 			if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szBoneName))
diff --git a/src/UserInterface/InstanceBaseMovement.cpp b/src/UserInterface/InstanceBaseMovement.cpp
index d55d19c5..eed8ff18 100644
--- a/src/UserInterface/InstanceBaseMovement.cpp
+++ b/src/UserInterface/InstanceBaseMovement.cpp
@@ -166,7 +166,7 @@ void CInstanceBase::EndWalking(float fBlendingTime)
 
 	m_isGoing = FALSE;
 
-	// �Ȱ� �������� ������ ���߰� �ؾ� �Ѵ�
+	// 걷고 있을때는 무조건 멈추게 해야 한다
 	if (IsWalking()||!IsAttacked())
 	{
 		m_GraphicThingInstance.Stop(fBlendingTime);
diff --git a/src/UserInterface/MarkImage.cpp b/src/UserInterface/MarkImage.cpp
index 33c42924..90b1659a 100644
--- a/src/UserInterface/MarkImage.cpp
+++ b/src/UserInterface/MarkImage.cpp
@@ -140,10 +140,10 @@ void CGuildMarkImage::GetData(UINT x, UINT y, UINT width, UINT height, void * da
 	ilCopyPixels(x, y, 0, width, height, 1, IL_BGRA, IL_UNSIGNED_BYTE, data);	
 }
 
-// �̹��� = 512x512
-//   ���� = ��ũ 4 x 4
-//   ��ũ = 16 x 12
-// �� �̹����� ���� = 8 x 10
+// 이미지 = 512x512
+//   블럭 = 마크 4 x 4
+//   마크 = 16 x 12
+// 한 이미지의 블럭 = 8 x 10
 
 // SERVER
 bool CGuildMarkImage::SaveMark(DWORD posMark, BYTE * pbImage)
@@ -154,14 +154,14 @@ bool CGuildMarkImage::SaveMark(DWORD posMark, BYTE * pbImage)
 		return false;
 	}
 
-	// ��ũ�� ��ü �̹����� �׸���.
+	// 마크를 전체 이미지에 그린다.
 	DWORD colMark = posMark % MARK_COL_COUNT;
 	DWORD rowMark = posMark / MARK_COL_COUNT;
 
 	printf("PutMark pos %u %ux%u\n", posMark, colMark * SGuildMark::WIDTH, rowMark * SGuildMark::HEIGHT);
 	PutData(colMark * SGuildMark::WIDTH, rowMark * SGuildMark::HEIGHT, SGuildMark::WIDTH, SGuildMark::HEIGHT, pbImage);
 
-	// �׷��� ���� ������ ������Ʈ
+	// 그려진 곳의 블럭을 업데이트
 	DWORD rowBlock = rowMark / SGuildMarkBlock::MARK_PER_BLOCK_HEIGHT;
 	DWORD colBlock = colMark / SGuildMarkBlock::MARK_PER_BLOCK_WIDTH;
 
@@ -208,7 +208,7 @@ bool CGuildMarkImage::SaveBlockFromCompressedData(DWORD posBlock, const BYTE * p
 	return true;
 }
 
-void CGuildMarkImage::BuildAllBlocks() // �̹��� ��ü�� ����ȭ
+void CGuildMarkImage::BuildAllBlocks() // 이미지 전체를 블럭화
 {
 	Pixel apxBuf[SGuildMarkBlock::SIZE];
 	sys_log(0, "CGuildMarkImage::BuildAllBlocks");
diff --git a/src/UserInterface/MarkManager.cpp b/src/UserInterface/MarkManager.cpp
index dcd7c1ae..1ac3494f 100644
--- a/src/UserInterface/MarkManager.cpp
+++ b/src/UserInterface/MarkManager.cpp
@@ -25,7 +25,7 @@ CGuildMarkManager::CGuildMarkManager()
 #if _MSC_VER >= 1200
 	mkdir("mark");
 #endif
-	// ���� mark id ���� �����. (������)
+	// 남은 mark id 셋을 만든다. (서버용)
 	for (DWORD i = 0; i < MAX_IMAGE_COUNT * CGuildMarkImage::MARK_TOTAL_COUNT; ++i)
 		m_setFreeMarkID.insert(i);
 }
@@ -54,7 +54,7 @@ void CGuildMarkManager::SetMarkPathPrefix(const char * prefix)
 	m_pathPrefix = prefix;
 }
 
-// ��ũ �ε��� �ҷ����� (���������� ���)
+// 마크 인덱스 불러오기 (서버에서만 사용)
 bool CGuildMarkManager::LoadMarkIndex()
 {
 	char buf[64];
@@ -182,7 +182,7 @@ DWORD CGuildMarkManager::__AllocMarkID(DWORD guildID)
 	DWORD markID = *it;
 	
 	DWORD imgIdx = markID / CGuildMarkImage::MARK_TOTAL_COUNT;
-	CGuildMarkImage * pkImage = __GetImage(imgIdx); // �̹����� ���ٸ� ����� ���� 
+	CGuildMarkImage * pkImage = __GetImage(imgIdx); // 이미지가 없다면 만들기 위해 
 
 	if (pkImage && AddMarkIDByGuildID(guildID, markID))
 		return markID;
@@ -271,7 +271,7 @@ void CGuildMarkManager::GetDiffBlocks(DWORD imgIdx, const DWORD * crcList, std::
 {
 	mapDiffBlocks.clear();
 
-	// Ŭ���̾�Ʈ���� ������ ���� �̹����� ��û�� ���� ����.
+	// 클라이언트에서 서버에 없는 이미지를 요청할 수는 없다.
 	if (m_mapIdx_Image.end() == m_mapIdx_Image.find(imgIdx))
 	{
 		sys_err("invalid idx %u", imgIdx);
@@ -298,7 +298,7 @@ bool CGuildMarkManager::SaveBlockFromCompressedData(DWORD imgIdx, DWORD posBlock
 // CLIENT
 bool CGuildMarkManager::GetBlockCRCList(DWORD imgIdx, DWORD * crcList)
 {
-	// Ŭ���̾�Ʈ���� ������ ���� �̹����� ��û�� ���� ����.
+	// 클라이언트에서 서버에 없는 이미지를 요청할 수는 없다.
 	if (m_mapIdx_Image.end() == m_mapIdx_Image.find(imgIdx))
 	{
 		sys_err("invalid idx %u", imgIdx);
diff --git a/src/UserInterface/MovieMan.cpp b/src/UserInterface/MovieMan.cpp
index a74a1bb2..bea4eab2 100644
--- a/src/UserInterface/MovieMan.cpp
+++ b/src/UserInterface/MovieMan.cpp
@@ -55,7 +55,7 @@ void CMovieMan::FillRect( RECT& fillRect, DWORD fillColor )
 
 	if (fillRect.bottom == fillRect.top || fillRect.left == fillRect.right)
 	{
-		// ä�� �ʿ� ����
+		// 채울 필요 없음
 		return;
 	}
 
@@ -83,7 +83,7 @@ inline void CMovieMan::GDIFillRect( RECT& fillRect, DWORD fillColor )
 }
 
 //----------------------------------------------------------------------------------------------------
-// Ư�� ���ǽ��� GDI�� ����ȭ�鿡 �Ѹ���
+// 특정 서피스를 GDI로 바탕화면에 뿌린다
 //
 inline void CMovieMan::GDIBlt(IDirectDrawSurface *pSrcSurface, RECT *pDestRect)
 {
@@ -105,7 +105,7 @@ void CMovieMan::PlayLogo(const char *pcszName)
 
 void CMovieMan::PlayIntro()
 {
-	// ��Ʈ�� ������ Ű���� �Է��̳� ���콺 Ŭ������ ��ŵ ����
+	// 인트로 영상은 키보드 입력이나 마우스 클릭으로 스킵 가능
 	PlayMovie( INTRO_FILE, MOVIEMAN_SKIPPABLE_YES, MOVIEMAN_POSTEFFECT_FADEOUT, 0xFFFFFF );
 }
 
@@ -146,7 +146,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons
 		return FALSE;
 	}
 
-	// 32��Ʈ���� �˾ƺ���
+	// 32비트인지 알아본다
 	ZeroMemory(&ddsd, sizeof(ddsd));
 	ddsd.dwSize = sizeof(ddsd);
 	ddsd.dwFlags = DDSD_PIXELFORMAT;
@@ -178,12 +178,12 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons
 			hr = pDDStream->GetFormat(&ddsd, NULL, NULL, NULL);
 			if (SUCCEEDED(hr))
 			{
-				// ������ ũ��� ������ ũ�⸦ �������� ������ ����� ������ ������ ����
+				// 동영상 크기와 윈도우 크기를 기준으로 동영상 재생될 적당한 영역을 설정
 				m_movieWidth = ddsd.dwWidth;
 				m_movieHeight = ddsd.dwHeight;
 
-				// ����۴� ������ RGB32�� ����� PrimarySurface�� ������ �ٸ���
-				// GDI fallback �ؼ� StretchBlt �Ѵ�
+				// 백버퍼는 무조건 RGB32로 만들고 PrimarySurface와 형식이 다르면
+				// GDI fallback 해서 StretchBlt 한다
 				DDSURFACEDESC ddsdBackSurface;
 				ZeroMemory(&ddsdBackSurface, sizeof(ddsdBackSurface));
 				ddsdBackSurface.ddpfPixelFormat.dwSize = sizeof(ddsdBackSurface.ddpfPixelFormat);
@@ -228,7 +228,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons
 
 	pDD->Release(); 
 
-	// Ű����, ���콺 ���� ����
+	// 키보드, 마우스 버퍼 비우기
 	MSG msg;
 	while (PeekMessage(&msg, hWnd, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE));
 	while (PeekMessage(&msg, hWnd, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE));
@@ -237,7 +237,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons
 }
 
 //----------------------------------------------------------------------------------------------------
-// ���� �������� Screen ��ǥ�� ��ȯ
+// 메인 윈도우의 Screen 좌표를 반환
 //
 void CMovieMan::GetWindowRect(RECT& windowRect)
 {
@@ -256,12 +256,12 @@ void CMovieMan::GetWindowRect(RECT& windowRect)
 	//
 	GetClientRect( hWnd, &windowRect );
 
-	// clientRect�� ClientToScreen �ϴ� �Ͱ� ����
+	// clientRect를 ClientToScreen 하는 것과 같음
 	OffsetRect( &windowRect, p.x, p.y );
 }
 
 //----------------------------------------------------------------------------------------------------
-// ���� �����쿡 �������� ��ä��� RECT ��ȯ(����/���� ���� ����)
+// 메인 윈도우에 동영상을 꽉채우는 RECT 반환(가로/세로 비율 유지)
 //
 void CMovieMan::CalcMovieRect(int srcWidth, int srcHeight, RECT& movieRect)
 {
@@ -290,7 +290,7 @@ void CMovieMan::CalcMovieRect(int srcWidth, int srcHeight, RECT& movieRect)
 }
 
 //----------------------------------------------------------------------------------------------------
-// ȭ�� ������ �������� �ƴ� ������ ����, �׻� 2���� RECT�� ǥ�� ����
+// 화면 위에서 동영상이 아닌 검은색 영역, 항상 2개의 RECT로 표현 가능
 //
 void CMovieMan::CalcBackgroundRect(const RECT& movieRect, RECT& upperRect, RECT& lowerRect)
 {
@@ -299,20 +299,20 @@ void CMovieMan::CalcBackgroundRect(const RECT& movieRect, RECT& upperRect, RECT&
 
 	if (m_movieWidth > m_movieHeight)
 	{
-		// ���Ʒ� �ΰ�
+		// 위아래 두개
 		SetRect(&upperRect, windowRect.left, windowRect.top, windowRect.right, movieRect.top);
 		SetRect(&lowerRect, windowRect.left, movieRect.bottom, windowRect.right, windowRect.bottom);
 	}
 	else
 	{
-		// �¿� �ΰ�
+		// 좌우 두개
 		SetRect(&upperRect, windowRect.left, windowRect.top, movieRect.left, windowRect.bottom);
 		SetRect(&lowerRect, movieRect.right, windowRect.top, windowRect.right, windowRect.bottom);
 	}
 }
 
 //----------------------------------------------------------------------------------------------------
-// Ư�� ���ǽ��� Blocking���� �������� �׸���
+// 특정 서피스에 Blocking으로 동영상을 그린다
 //
 HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDrawMediaStream *pDDStream, IMultiMediaStream *pMMStream, bool bSkipAllowed, int nPostEffectID, DWORD dwPostEffectData)
 {    
@@ -322,7 +322,7 @@ HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDr
 	HRESULT hr = pDDStream->CreateSample(pSurface, NULL, 0, &pSample);
 	if (SUCCEEDED(hr))
 	{
-		// ���� �ѹ� ���������� ����� ĥ���ش�
+		// 최초 한번 검은색으로 배경을 칠해준다
 		RECT movieRect;
 		RECT upperRect, lowerRect;
 		CalcMovieRect(m_movieWidth, m_movieHeight, movieRect);
@@ -333,21 +333,21 @@ HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDr
 		pMMStream->SetState(STREAMSTATE_RUN);
 		while (pSample->Update(0, NULL, NULL, NULL) == S_OK)
 		{
-			// ������ �߾��� �������� ������ �׸���
+			// 윈도우 중앙을 기준으로 꽉차게 그린다
 			CalcMovieRect(m_movieWidth, m_movieHeight, movieRect);
 			if (FAILED(m_pPrimarySurface->Blt(&movieRect, pSurface, NULL, DDBLT_WAIT, NULL)))
 			{
 				GDIBlt(pSurface, &movieRect);
 			}
 
-			// �߰��� ��ŵ �����ϸ� Ű����ESC/���콺 �Է½� Ż��
+			// 중간에 스킵 가능하면 키보드ESC/마우스 입력시 탈출
 			if (bSkipAllowed && (KEY_DOWN(VK_LBUTTON) || KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE)))
 			{
 				break;
 			}
 		}
 
-		// ������ ��� ����ÿ� 2�� ���� ���̵�ƿ�
+		// 동영상 재생 종료시에 2초 동안 페이드아웃
 		switch(nPostEffectID)
 		{
 		case MOVIEMAN_POSTEFFECT_FADEOUT:
@@ -393,15 +393,15 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea
 	if (ext == "mpg")
 	{
 		// 2007-08-01, nuclei
-		// MPG�� ����Ѵٰ� �����ϰ� �Ŵ���� ���� �ڵ��� ������ 
-		// �ܺ� �ڵ�(ffdshow ��)�� ������ ���� �ʵ��� �Ѵ�
-		// (��Ÿ ���ϵ� ����� ������ �ڵ��� ������ ���� �� ����)
+		// MPG만 재생한다고 가정하고 매뉴얼로 각종 코덱을 연결해 
+		// 외부 코덱(ffdshow 등)에 영향을 받지 않도록 한다
+		// (기타 파일도 재생은 되지만 코덱에 영향을 받을 수 있음)
 		hr = BuildFilterGraphManually(wPath, pAMStream, CLSID_MPEG1Splitter, CLSID_CMpegVideoCodec, CLSID_CMpegAudioCodec);
 	}
 	else if (ext == "mp43")
 	{
 		// 2007-08-12, nuclei
-		// MPEG-4, MP3 �ڵ��� �̿��� AVI�� ��� �߰�(Ȯ���ڴ� .mp43���� �ؾ���)
+		// MPEG-4, MP3 코덱을 이용한 AVI의 재생 추가(확장자는 .mp43으로 해야함)
 		hr = BuildFilterGraphManually(wPath, pAMStream, CLSID_AviSplitter, CLSID_MP4VideoCodec, CLSID_MP3AudioCodec);
 	}
 	else
@@ -409,7 +409,7 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea
 		hr = pAMStream->OpenFile(wPath, 0);
 	}
 
-	// ��� ������ hr�� S_OK
+	// 재생 성공시 hr은 S_OK
 	if (SUCCEEDED(hr))
 	{
 		pAMStream->QueryInterface(IID_IMultiMediaStream, (void**) ppMMStream);
@@ -421,11 +421,11 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea
 }
 
 //----------------------------------------------------------------------------------------------------
-// Ư�������� ȭ���� ������ų� ��ο���
+// 특정색으로 화면이 밝아지거나 어두워짐
 //
 HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fadeOutDuration, DWORD fadeOutColor)
 {
-	// Lock �ɱ� ���� �ʱ�ȭ
+	// Lock 걸기 위해 초기화
 	DDSURFACEDESC lockedSurfaceDesc;
 
 	int *pCopiedSrcSurBuf = NULL;
@@ -441,7 +441,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad
 			return hr;
 		}
 
-		// ���� 1ȸ�� ���ǽ� �����ϰ� ���纻�� FadeOut ó���Ѵ�
+		// 최초 1회에 서피스 복사하고 복사본에 FadeOut 처리한다
 		if (!pCopiedSrcSurBuf)
 		{
 			if (!(pCopiedSrcSurBuf = (int*)malloc((LONG)lockedSurfaceDesc.lPitch * m_movieHeight)))
@@ -452,7 +452,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad
 			CopyMemory(pCopiedSrcSurBuf, lockedSurfaceDesc.lpSurface, (LONG)lockedSurfaceDesc.lPitch * m_movieHeight);
 		}
 
-		// �ȼ� �ö���(32��Ʈ)
+		// 픽셀 플랏팅(32비트)
 		int *pSrcSurfaceBuf = pCopiedSrcSurBuf;
 		int *pDestSurfaceBuf = (int*)lockedSurfaceDesc.lpSurface;
 
@@ -476,7 +476,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad
 		}
 		pSurface->Unlock(lockedSurfaceDesc.lpSurface);
 
-		// ������ �ٲ� ������ �̹��� �׸���
+		// 색상이 바뀐 동영상 이미지 그리기
 		RECT movieRect;
 		CalcMovieRect(m_movieWidth, m_movieHeight, movieRect);
 		if (FAILED(m_pPrimarySurface->Blt(&movieRect, pSurface, NULL, DDBLT_WAIT, NULL)))
@@ -484,23 +484,23 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad
 			GDIBlt(pSurface, &movieRect);
 		}
 
-		// �� �Ǵ� ���� ��ĭ ��ä���
+		// 위 또는 좌측 빈칸 색채우기
 		RECT upperRect, lowerRect;
 		CalcBackgroundRect(movieRect, upperRect, lowerRect);
 		FillRect(upperRect, (fadeOutColorRed << 16) | (fadeOutColorGreen << 8) | fadeOutColorBlue);
 		FillRect(lowerRect, (fadeOutColorRed << 16) | (fadeOutColorGreen << 8) | fadeOutColorBlue);
 		
-		// ���� ����
+		// 음량 조절
 		if (m_pBasicAudio)
 		{
 			m_pBasicAudio->put_Volume((long)(-10000 * fadeProgress));
 		}
 	}
 
-	// �޸� ����
+	// 메모리 해제
 	free(pCopiedSrcSurBuf);
 
-	// �������� 1.0�� �������� ������ FadeOut�� ȭ�� �׸���
+	// 마지막엔 1.0을 기준으로 완전히 FadeOut된 화면 그리기
 	RECT windowRect;
 	GetWindowRect(windowRect);
 	FillRect(windowRect, fadeOutColor);
@@ -509,7 +509,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad
 }
 
 //----------------------------------------------------------------------------------------------------
-// MPEG-1 ���� ������ �ܺ� �ڵ� �������� �������ϴ� �Լ�
+// MPEG-1 비디오 파일을 외부 코덱 간섭없이 렌더링하는 함수
 //
 HRESULT CMovieMan::BuildFilterGraphManually(
 	WCHAR* wpFilename, 
@@ -537,8 +537,8 @@ HRESULT CMovieMan::BuildFilterGraphManually(
 	CoCreateInstance(clsidVideoCodec, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pVideoFilter);
 	CoCreateInstance(clsidAudioCodec, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pAudioFilter);
 
-	// ���� MP43 ���ڴ��� ���ٸ� DMO �ڵ��� ��� �־��ش�
-	// MONSTER������ �߰ߵ� ���̽�(�ڵ��� ������ ������ ����)
+	// 만약 MP43 디코더가 없다면 DMO 코덱을 대신 넣어준다
+	// MONSTER팀에서 발견된 케이스(코덱을 누군가 강제로 삭제)
 	if (!pVideoFilter && IsEqualGUID(clsidVideoCodec, CLSID_MP4VideoCodec))
 	{
 		// Create the DMO Wrapper filter.
@@ -580,7 +580,7 @@ HRESULT CMovieMan::BuildFilterGraphManually(
 	pOutPin->Release();
 	if (SUCCEEDED(hr))
 	{
-		// �����Ŀ��� Output �ɵ��� ��Ÿ����
+		// 연결후에만 Output 핀들이 나타난다
 		pSplitterFilter->EnumPins(&pEnumPins);
 		PIN_INFO pinInfo;
 		while( SUCCEEDED(pEnumPins->Next(1, &pInPin, NULL)) )
@@ -589,7 +589,7 @@ HRESULT CMovieMan::BuildFilterGraphManually(
 			pinInfo.pFilter->Release();
 			if (pinInfo.dir == PINDIR_OUTPUT)
 			{
-				// Pin�� ������ ����-������� ����
+				// Pin의 순서를 비디오-오디오로 가정
 				pSplitterVideoOutPin = pInPin;
 				pEnumPins->Next(1, &pSplitterAudioOutPin, NULL);
 				break;
@@ -606,12 +606,12 @@ HRESULT CMovieMan::BuildFilterGraphManually(
 		hr = pGraphBuilder->Connect(pSplitterVideoOutPin, pInPin);
 		if (SUCCEEDED(hr))
 		{
-			// ���� ����
+			// 비디오 렌더
 			hr = pGraphBuilder->Render(pOutPin);
 			pInPin->Release();
 			pOutPin->Release();
 
-			// ������� ���Ͽ� ���� ���� ���� �ִ�
+			// 오디오는 파일에 따라 없을 수도 있다
 			if (pSplitterAudioOutPin && pAudioFilter)
 			{
 				pAudioFilter->EnumPins(&pEnumPins);
@@ -619,7 +619,7 @@ HRESULT CMovieMan::BuildFilterGraphManually(
 				pEnumPins->Next(1, &pOutPin, NULL);
 				pEnumPins->Release();
 				pGraphBuilder->Connect(pSplitterAudioOutPin, pInPin);
-				// ����� ������ �����ص� �Ѿ �� ����
+				// 오디오 렌더는 실패해도 넘어갈 수 있음
 				pGraphBuilder->Render(pOutPin);
 				pInPin->Release();
 				pOutPin->Release();
@@ -627,7 +627,7 @@ HRESULT CMovieMan::BuildFilterGraphManually(
 		}
 	}
 
-	// ����
+	// 해제
 //#ifdef _DEBUG
 //	RemoveFromRot(dwRegister);
 //#endif
diff --git a/src/UserInterface/NetworkActorManager.cpp b/src/UserInterface/NetworkActorManager.cpp
index f3d8c4cc..7b7806cf 100644
--- a/src/UserInterface/NetworkActorManager.cpp
+++ b/src/UserInterface/NetworkActorManager.cpp
@@ -273,7 +273,7 @@ bool CNetworkActorManager::__IsVisibleActor(const SNetworkActorData& c_rkNetActo
 	if (__IsMainActorVID(c_rkNetActorData.m_dwVID))
 		return true;
 
-	// 2004.08.02.myevan.�׻� ���̱� �÷���
+	// 2004.08.02.myevan.항상 보이기 플래그
 	if (c_rkNetActorData.m_kAffectFlags.IsSet(CInstanceBase::AFFECT_SHOW_ALWAYS))
 		return true;
 
@@ -293,7 +293,7 @@ bool CNetworkActorManager::__IsVisiblePos(LONG lPosX, LONG lPosY)
 	LONG len = (LONG)sqrt(double(dx * dx + dy * dy));
 
 	extern int CHAR_STAGE_VIEW_BOUND;
-	if (len < CHAR_STAGE_VIEW_BOUND) // �Ÿ����� cm
+	if (len < CHAR_STAGE_VIEW_BOUND) // 거리제한 cm
 		return true;
 
 	return false;
diff --git a/src/UserInterface/PythonApplication.cpp b/src/UserInterface/PythonApplication.cpp
index 449052c8..2e96ce22 100644
--- a/src/UserInterface/PythonApplication.cpp
+++ b/src/UserInterface/PythonApplication.cpp
@@ -323,7 +323,7 @@ void CPythonApplication::UpdateGame()
 
 	DWORD t2=ELTimer_GetMSec();
 
-	//!@# Alt+Tab �� SetTransfor ���� ƨ�� ���� �ذ��� ���� - [levites]
+	//!@# Alt+Tab 중 SetTransfor 에서 튕김 현상 해결을 위해 - [levites]
 	//if (m_isActivateWnd)
 	{
 		CScreen s;
@@ -357,8 +357,8 @@ void CPythonApplication::UpdateGame()
 	m_pyPlayer.Update();
 	DWORD t11=ELTimer_GetMSec();
 
-	// NOTE : Update ���� ��ġ ���� �ٲ�Ƿ� �ٽ� ��� �ɴϴ� - [levites]
-	//        �� �κ� ������ ���� �ɸ����� Sound�� ���� ��ġ���� �÷��� �Ǵ� ������ �־���.
+	// NOTE : Update 동안 위치 값이 바뀌므로 다시 얻어 옵니다 - [levites]
+	//        이 부분 때문에 메인 케릭터의 Sound가 이전 위치에서 플레이 되는 현상이 있었음.
 	m_pyPlayer.NEW_GetMainActorPosition(&kPPosMainActor);
 	SetCenterPosition(kPPosMainActor.x, kPPosMainActor.y, kPPosMainActor.z);
 	DWORD t12=ELTimer_GetMSec();
@@ -432,7 +432,7 @@ bool CPythonApplication::Process()
 	m_fGlobalElapsedTime = rkTimer.GetElapsedSecond();
 
 	UINT uiFrameTime = rkTimer.GetElapsedMilliecond();
-	s_uiNextFrameTime += uiFrameTime;	//17 - 1�ʴ� 60fps����.
+	s_uiNextFrameTime += uiFrameTime;	//17 - 1초당 60fps기준.
 
 	DWORD updatestart = ELTimer_GetMSec();
 #ifdef __PERFORMANCE_CHECK__
@@ -468,7 +468,7 @@ bool CPythonApplication::Process()
 #ifdef __PERFORMANCE_CHECK__
 	DWORD dwUpdateTime5=ELTimer_GetMSec();
 #endif
-	//!@# Alt+Tab �� SetTransfor ���� ƨ�� ���� �ذ��� ���� - [levites]
+	//!@# Alt+Tab 중 SetTransfor 에서 튕김 현상 해결을 위해 - [levites]
 	//if (m_isActivateWnd)
 	__UpdateCamera();
 #ifdef __PERFORMANCE_CHECK__
@@ -511,7 +511,7 @@ bool CPythonApplication::Process()
 	}		
 #endif
 
-	//Update�ϴµ� �ɸ��ð�.delta��
+	//Update하는데 걸린시간.delta값
 	m_dwCurUpdateTime = ELTimer_GetMSec() - updatestart;
 
 	DWORD dwCurrentTime = ELTimer_GetMSec();
@@ -541,11 +541,11 @@ bool CPythonApplication::Process()
 	//{
 	//	int dt = dwCurrentTime - s_uiNextFrameTime;
 
-	//	//�ʹ� �ʾ��� ��� ������´�.
-	//	//�׸��� m_dwCurUpdateTime�� delta�ε� delta�� absolute time�̶� ���ϸ� ��¼�ڴ°�?
+	//	//너무 늦었을 경우 따라잡는다.
+	//	//그리고 m_dwCurUpdateTime는 delta인데 delta랑 absolute time이랑 비교하면 어쩌자는겨?
 	//	//if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime)
 
-	//	//�����ڵ��� �ϸ� 0.5�� ���� ���̳� ���·� update�� ���ӵǸ� ��� rendering frame skip�߻�
+	//	//기존코드대로 하면 0.5초 이하 차이난 상태로 update가 지속되면 계속 rendering frame skip발생
 	//	if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime)
 	//	{
 	//		s_uiNextFrameTime += dt / uiFrameTime * uiFrameTime; 
@@ -577,13 +577,13 @@ bool CPythonApplication::Process()
 
 	if (s_bFrameSkip)
 	{
-	// ���� �����ӵ� ��ŵ�̶��..
+	// 이전 프레임도 스킵이라면..
 	if (s_isPrevFrameSkip)
 	{
 	if (s_dwFrameSkipEndTime==0)
 	{
-	s_dwFrameSkipCount=0; // ������ üũ�� �ε� ���
-	s_dwFrameSkipEndTime=dwFrameSkipCurTime+ERROR_FRAME_SKIP_TIME; // �ð� üũ�� �ε��� ������ ��ŵ üũ
+	s_dwFrameSkipCount=0; // 프레임 체크는 로딩 대비
+	s_dwFrameSkipEndTime=dwFrameSkipCurTime+ERROR_FRAME_SKIP_TIME; // 시간 체크는 로딩후 프레임 스킵 체크
 
 	//printf("FrameSkipCheck Start\n");
 	}
@@ -599,7 +599,7 @@ bool CPythonApplication::Process()
 	//	s_dwFrameSkipEndTime);
 
 	//#ifndef _DEBUG
-	// ���� �ð����� ��� ������ ��ŵ�� �Ѵٸ�...
+	// 일정 시간동안 계속 프레임 스킵만 한다면...
 	if (s_dwFrameSkipCount>ERROR_FRAME_SKIP_COUNT && s_dwFrameSkipEndTime<dwFrameSkipCurTime)
 	{
 	s_isPrevFrameSkip=false;
@@ -684,7 +684,7 @@ bool CPythonApplication::Process()
 			SkipRenderBuffering(3000);
 		}
 
-		// ������� ó������ ������ ���� �ð������� ���۸��� ���� �ʴ´�
+		// 리스토어 처리때를 고려해 일정 시간동안은 버퍼링을 하지 않는다
 		if (!canRender)
 		{
 			SkipRenderBuffering(3000);
@@ -742,7 +742,7 @@ bool CPythonApplication::Process()
 
 				if (dwCurFaceCount > 5000)
 				{
-					// ������ ���� ó��
+					// 프레임 완충 처리
 					if (dwRenderEndTime > m_dwBufSleepSkipTime)
 					{	
 						static float s_fBufRenderTime = 0.0f;
@@ -760,7 +760,7 @@ bool CPythonApplication::Process()
 							s_fBufRenderTime = (s_fBufRenderTime * (100.0f - fRatio) + fCurRenderTime * fRatio) / 100.0f;
 						}
 
-						// �Ѱ�ġ�� ���Ѵ�
+						// 한계치를 정한다
 						if (s_fBufRenderTime > 100.0f)
 							s_fBufRenderTime = 100.0f;
 
@@ -780,8 +780,8 @@ bool CPythonApplication::Process()
 								dwBufRenderTime=8;
 						}
 
-						// ���� ������ �ӵ��� ���߾��ִ��ʿ� ���� ���ϴ�
-						// �Ʒ����� �ѹ� �ϸ� ���.
+						// 일정 프레임 속도에 맞추어주는쪽에 눈에 편하다
+						// 아래에서 한번 하면 됬다.
 						//if (m_dwCurRenderTime<dwBufRenderTime)
 						//	Sleep(dwBufRenderTime-m_dwCurRenderTime);			
 
@@ -793,7 +793,7 @@ bool CPythonApplication::Process()
 
 					m_fFaceSpd=(m_dwFaceAccCount/m_dwFaceAccTime);
 
-					// �Ÿ� �ڵ� ����
+					// 거리 자동 조절
 					if (-1 == m_iForceSightRange)
 					{
 						static float s_fAveRenderTime = 16.0f;
@@ -808,7 +808,7 @@ bool CPythonApplication::Process()
 						float fDistance=max(fNear+(fFar-fNear)*(dbAvePow)/dbMaxPow, fNear);
 						m_pyBackground.SetViewDistanceSet(0, fDistance);
 					}
-					// �Ÿ� ���� ������
+					// 거리 강제 설정시
 					else
 					{
 						m_pyBackground.SetViewDistanceSet(0, float(m_iForceSightRange));
@@ -816,7 +816,7 @@ bool CPythonApplication::Process()
 				}
 				else
 				{
-					// 10000 ������ ���� �������� ���� �ָ� ���̰� �Ѵ�
+					// 10000 폴리곤 보다 적을때는 가장 멀리 보이게 한다
 					m_pyBackground.SetViewDistanceSet(0, 25600.0f);
 				}
 
@@ -829,7 +829,7 @@ bool CPythonApplication::Process()
 
 	if (rest > 0 && !bCurrentLateUpdate )
 	{
-		s_uiLoad -= rest;	// �� �ð��� �ε忡�� ����..
+		s_uiLoad -= rest;	// 쉰 시간은 로드에서 뺀다..
 		Sleep(rest);
 	}	
 
@@ -858,12 +858,12 @@ int CPythonApplication::CheckDeviceState()
 
 	switch (e_deviceState)
 	{
-		// ����̽��� ������ ���α׷��� ���� �Ǿ�� �Ѵ�.
+		// 디바이스가 없으면 프로그램이 종료 되어야 한다.
 	case CGraphicDevice::DEVICESTATE_NULL:
 		return DEVICE_STATE_FALSE;
 
-		// DEVICESTATE_BROKEN�� ���� ���� �������� ���� �� �� �ֵ��� ���� �Ѵ�.
-		// �׳� ������ ��� DrawPrimitive ���� ���� �ϸ� ���α׷��� ������.
+		// DEVICESTATE_BROKEN일 때는 다음 루프에서 복구 될 수 있도록 리턴 한다.
+		// 그냥 진행할 경우 DrawPrimitive 같은 것을 하면 프로그램이 터진다.
 	case CGraphicDevice::DEVICESTATE_BROKEN:
 		return DEVICE_STATE_SKIP;
 
@@ -1097,9 +1097,9 @@ bool CPythonApplication::Create(PyObject * poSelf, const char * c_szName, int wi
 		CPythonIME::Instance().UseDefaultIME();
 	}
 
-	// Ǯ��ũ�� ����̰�
-	// ����Ʈ IME �� ����ϰų� ���� �����̸�
-	// ������ Ǯ��ũ�� ��带 ����Ѵ�
+	// 풀스크린 모드이고
+	// 디폴트 IME 를 사용하거나 유럽 버전이면
+	// 윈도우 풀스크린 모드를 사용한다
 	if (!m_pySystem.IsWindowed() && (m_pySystem.IsUseDefaultIME() || LocaleService_IsEUROPE()))
 	{
 		m_isWindowed = false;
@@ -1153,7 +1153,7 @@ bool CPythonApplication::Create(PyObject * poSelf, const char * c_szName, int wi
 			// Sound
 			if (!m_SoundManager.Create())
 			{
-				// NOTE : �߱����� ��û���� ����
+				// NOTE : 중국측의 요청으로 생략
 				//		LogBox(ApplicationStringTable_GetStringz(IDS_WARN_NO_SOUND_DEVICE));
 			}
 		}
@@ -1229,14 +1229,14 @@ bool CPythonApplication::Create(PyObject * poSelf, const char * c_szName, int wi
 
 		CGraphicImageInstance::CreateSystem(32);
 
-		// ���
+		// 백업
 		STICKYKEYS sStickKeys;
 		memset(&sStickKeys, 0, sizeof(sStickKeys));
 		sStickKeys.cbSize = sizeof(sStickKeys);
 		SystemParametersInfo( SPI_GETSTICKYKEYS, sizeof(sStickKeys), &sStickKeys, 0 );
 		m_dwStickyKeysFlag = sStickKeys.dwFlags;
 
-		// ����
+		// 설정
 		sStickKeys.dwFlags &= ~(SKF_AVAILABLE|SKF_HOTKEYACTIVE);
 		SystemParametersInfo( SPI_SETSTICKYKEYS, sizeof(sStickKeys), &sStickKeys, 0 );
 
@@ -1283,8 +1283,8 @@ time_t CPythonApplication::GetServerTime()
 	return (ELTimer_GetMSec() - m_dwStartLocalTime) + m_tServerTime;
 }
 
-// 2005.03.28 - MALL �����ۿ� ����ִ� �ð��� ������ �������� time(0) ���� ���������
-//              ���̱� ������ ������ ���߱� ���� �ð� ���� ó���� ������ �߰�
+// 2005.03.28 - MALL 아이템에 들어있는 시간의 단위가 서버에서 time(0) 으로 만들어지는
+//              값이기 때문에 단위를 맞추기 위해 시간 관련 처리를 별도로 추가
 time_t CPythonApplication::GetServerTimeStamp()
 {
 	return (time(0) - m_tLocalStartTime) + m_tServerTime;
@@ -1402,7 +1402,7 @@ void CPythonApplication::Destroy()
 	m_SoundManager.Destroy();
 	m_grpDevice.Destroy();
 
-	// FIXME : ������� ���� ���� - [levites]
+	// FIXME : 만들어져 있지 않음 - [levites]
 	//CSpeedTreeForestDirectX8::Instance().Clear();
 
 	CAttributeInstance::DestroySystem();
diff --git a/src/UserInterface/PythonApplicationCamera.cpp b/src/UserInterface/PythonApplicationCamera.cpp
index cd201d4a..8668345b 100644
--- a/src/UserInterface/PythonApplicationCamera.cpp
+++ b/src/UserInterface/PythonApplicationCamera.cpp
@@ -91,7 +91,7 @@ void CPythonApplication::__UpdateCamera()
 	// Sound Setting
 	const D3DXVECTOR3 & c_rv3CameraDirection = pMainCamera->GetView();
 	const D3DXVECTOR3 & c_rv3CameraUp = pMainCamera->GetUp();
-	m_SoundManager.SetPosition(m_v3CenterPosition.x, m_v3CenterPosition.y, m_v3CenterPosition.z);	// Listener - ij���� ��ġ
+	m_SoundManager.SetPosition(m_v3CenterPosition.x, m_v3CenterPosition.y, m_v3CenterPosition.z);	// Listener - 캐릭터 위치
 	m_SoundManager.SetDirection(c_rv3CameraDirection.x, c_rv3CameraDirection.y, c_rv3CameraDirection.z, c_rv3CameraUp.x, c_rv3CameraUp.y, c_rv3CameraUp.z);
 	m_SoundManager.Update();
 	//////////////////////
diff --git a/src/UserInterface/PythonApplicationCursor.cpp b/src/UserInterface/PythonApplicationCursor.cpp
index 0b7e2f63..c103c15e 100644
--- a/src/UserInterface/PythonApplicationCursor.cpp
+++ b/src/UserInterface/PythonApplicationCursor.cpp
@@ -122,9 +122,9 @@ BOOL CPythonApplication::SetCursorNum(int iCursorNum)
 	}
 	else
 	{
-		if (__IsContinuousChangeTypeCursor(m_iCursorNum))		// ���� Ŀ���� ���� Ŀ���϶���
+		if (__IsContinuousChangeTypeCursor(m_iCursorNum))		// 현재 커서가 지속 커서일때만
 		{
-			m_iContinuousCursorNum = m_iCursorNum;			// ������ Ŀ���� �����Ѵ�.
+			m_iContinuousCursorNum = m_iCursorNum;			// 현재의 커서를 저장한다.
 		}
 	}
 
diff --git a/src/UserInterface/PythonApplicationEvent.cpp b/src/UserInterface/PythonApplicationEvent.cpp
index 7919e3b4..88e5d5c8 100644
--- a/src/UserInterface/PythonApplicationEvent.cpp
+++ b/src/UserInterface/PythonApplicationEvent.cpp
@@ -81,7 +81,7 @@ void CPythonApplication::OnMouseMove(int x, int y)
 			y = Point.y;
 			ClientToScreen(m_hWnd, &Point);
 
-			// 2004.07.26.myevan.��ö��HackShield�� �浹
+			// 2004.07.26.myevan.안철수HackShield와 충돌
 			SetCursorPos(Point.x, Point.y);
 
 		}
diff --git a/src/UserInterface/PythonApplicationLogo.cpp b/src/UserInterface/PythonApplicationLogo.cpp
index 5452b7ce..4c4bde1c 100644
--- a/src/UserInterface/PythonApplicationLogo.cpp
+++ b/src/UserInterface/PythonApplicationLogo.cpp
@@ -23,7 +23,7 @@ int CPythonApplication::OnLogoOpen(char* szName)
 	m_nLeft = 0; m_nRight = 0; m_nTop = 0; m_nBottom = 0;
 
 
-	// ó������ 1/1 ũ���� �ؽ��ĸ� �����صд�.
+	// 처음에는 1/1 크기의 텍스쳐를 생성해둔다.
 	if(!m_pLogoTex->Create(1, 1, D3DFMT_A8R8G8B8)) { return 0; }
 
 	// Set GraphBuilder / SampleGrabber
@@ -60,7 +60,7 @@ int CPythonApplication::OnLogoOpen(char* szName)
 	// Media Event
 	if(FAILED(m_pGraphBuilder->QueryInterface(IID_IMediaEventEx, (VOID**) &m_pMediaEvent))) { return 0; }
 
-	// Window �Ⱥ��̰�
+	// Window 안보이게
 	m_pVideoWnd->SetWindowPosition( 3000, 3000, 0, 0 );
 	m_pVideoWnd->put_Visible(0);
 	m_pSampleGrabber->SetBufferSamples(TRUE);
@@ -80,8 +80,8 @@ int CPythonApplication::OnLogoUpdate()
 	//osvi.dwOSVersionInfoSize = sizeof(osvi);
 	//GetVersionEx(&osvi);
 
-	//// windows xp ������ ������ logo skip.
-	////	m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize,  (LONG*)m_pCaptureBuffer) fail ���� ����.
+	//// windows xp 이하인 버전은 logo skip.
+	////	m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize,  (LONG*)m_pCaptureBuffer) fail 나기 때문.
 	//if (osvi.dwMajorVersion <= 5)
 	//{
 	//	return 0;
@@ -94,10 +94,10 @@ int CPythonApplication::OnLogoUpdate()
 
 	BYTE* pBuffer = m_pCaptureBuffer; LONG lBufferSize = m_lBufferSize;
 
-	// ����� �ȉ��� ��� ���.
+	// 재생이 안됬을 경우 재생.
 	if(!m_bLogoPlay) { m_pMediaCtrl->Run(); m_bLogoPlay = true; }
 
-	// �о�� ���۰� 0�ΰ�� ���۸� ���Ҵ�.
+	// 읽어온 버퍼가 0인경우 버퍼를 재할당.
 	if( lBufferSize == 0  ) {
 		m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize, NULL);
 
@@ -107,8 +107,8 @@ int CPythonApplication::OnLogoUpdate()
 		lBufferSize = m_lBufferSize;
 	}
 	
-	// ���� �ε��߿� Update�Ǵ� ���, ���� ��⿡ �����ϴ� ��찡 ����.
-	// �����ϴ��� ������ ����Ǵ� ���� �ƴϹǷ�, ������ �ߴ������� �ʴ´�.
+	// 영상 로딩중에 Update되는 경우, 버퍼 얻기에 실패하는 경우가 많다.
+	// 실패하더라도 완전히 종료되는 경우는 아니므로, 실행을 중단하지는 않는다.
 	if(FAILED(m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize,  (LONG*)m_pCaptureBuffer)))
 	{
 		m_bLogoError = true;
@@ -117,7 +117,7 @@ int CPythonApplication::OnLogoUpdate()
 		D3DLOCKED_RECT rt;
 		ZeroMemory(&rt, sizeof(rt));
 
-		// ������ ��쿡�� �ؽ��ĸ� ��İ� ����.
+		// 실패한 경우에는 텍스쳐를 까맣게 비운다.
 		tex->LockRect(0, &rt, 0, 0);
 		BYTE* destb = static_cast<byte*>(rt.pBits);
 		for(int a = 0; a < 4; a+= 4)
@@ -150,14 +150,14 @@ int CPythonApplication::OnLogoUpdate()
 
 
 
-	// ũ�Ⱑ 1, �� �ؽ��� ������ ����� �غ� �ȵȰ�� �ٽ� �����.
+	// 크기가 1, 즉 텍스쳐 공간이 제대로 준비 안된경우 다시 만든다.
 	if(m_pLogoTex->GetWidth() == 1)
 	{
 		m_pLogoTex->Destroy(); m_pLogoTex->Create(lWidth, lHeight, D3DFMT_A8R8G8B8);
 		
 	}
 
-	// �غ������ ���ۿ��� �ؽ��ķ� �����ؿ´�.
+	// 준비됬으면 버퍼에서 텍스쳐로 복사해온다.
 	LPDIRECT3DTEXTURE9 tex = m_pLogoTex->GetD3DTexture();
 	D3DLOCKED_RECT rt;
 	ZeroMemory(&rt, sizeof(rt));
@@ -171,7 +171,7 @@ int CPythonApplication::OnLogoUpdate()
 	}
 	tex->UnlockRect(0);
 
-	// ������ ���� üũ (����Ǿ�����)
+	// 영상의 상태 체크 (종료되었는지)
 	long evCode, param1, param2;
 	while(SUCCEEDED(m_pMediaEvent->GetEvent(&evCode, &param1, &param2, 0)))
 	{
@@ -206,7 +206,7 @@ void CPythonApplication::OnLogoRender()
 
 void CPythonApplication::OnLogoClose()
 {
-	// NOTE: LOGO �������� �� ���� �� �ҷ��� ��쿡�� OnLogoClose �������� ũ���ð� ���� ���� ����
+	// NOTE: LOGO 동영상이 한 번도 안 불렸을 경우에는 OnLogoClose 과정에서 크래시가 나는 문제 수정
 	if (false == bInitializedLogo)
 		return;
 
@@ -239,4 +239,4 @@ void CPythonApplication::OnLogoClose()
 	STATEMANAGER.SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
 
 	
-}
\ No newline at end of file
+}
diff --git a/src/UserInterface/PythonApplicationModule.cpp b/src/UserInterface/PythonApplicationModule.cpp
index a5e0645c..feb2027c 100644
--- a/src/UserInterface/PythonApplicationModule.cpp
+++ b/src/UserInterface/PythonApplicationModule.cpp
@@ -1356,7 +1356,7 @@ void initapp()
 	PyModule_AddIntConstant(poModule, "VK_DELETE",	     VK_DELETE);
 
 	PyModule_AddIntConstant(poModule, "DIK_ESCAPE",      DIK_ESCAPE);
-	PyModule_AddIntConstant(poModule, "DIK_ESC",         DIK_ESCAPE);	// ���Ǹ� ����
+	PyModule_AddIntConstant(poModule, "DIK_ESC",         DIK_ESCAPE);	// 편의를 위해
 	PyModule_AddIntConstant(poModule, "DIK_1",           DIK_1);
 	PyModule_AddIntConstant(poModule, "DIK_2",           DIK_2);
 	PyModule_AddIntConstant(poModule, "DIK_3",           DIK_3);
diff --git a/src/UserInterface/PythonApplicationProcedure.cpp b/src/UserInterface/PythonApplicationProcedure.cpp
index d6ecf8d7..746654c8 100644
--- a/src/UserInterface/PythonApplicationProcedure.cpp
+++ b/src/UserInterface/PythonApplicationProcedure.cpp
@@ -182,7 +182,7 @@ LRESULT CPythonApplication::WindowProcedure(HWND hWnd, UINT uiMsg, WPARAM wParam
 		case 0x20a:
 			if (WebBrowser_IsVisible())
 			{
-				// �������� �����϶��� �� �۵� �ȵǵ��� ó��
+				// 웹브라우저 상태일때는 휠 작동 안되도록 처리
 			}
 			else
 			{
diff --git a/src/UserInterface/PythonBackground.cpp b/src/UserInterface/PythonBackground.cpp
index fbef52c0..300c4f5f 100644
--- a/src/UserInterface/PythonBackground.cpp
+++ b/src/UserInterface/PythonBackground.cpp
@@ -144,7 +144,7 @@ void CPythonBackground::SelectViewDistanceNum(int eNum)
 
 	TEnvironmentData * env = ((TEnvironmentData *) mc_pcurEnvironmentData);
 
-	// ���� �����⸦ �ٲ���� �� �����Ƿ� reserve�� �Ǿ������� ��ġ�� �ʴ´�.
+	// 게임 분위기를 바꿔놓을 수 있으므로 reserve로 되어있으면 고치지 않는다.
 	if (env->bReserve)
 	{
 		env->m_fFogNearDistance = m_ViewDistanceSet[m_eViewDistanceNum].m_fFogStart;
diff --git a/src/UserInterface/PythonBackgroundModule.cpp b/src/UserInterface/PythonBackgroundModule.cpp
index 44c9983d..35f39082 100644
--- a/src/UserInterface/PythonBackgroundModule.cpp
+++ b/src/UserInterface/PythonBackgroundModule.cpp
@@ -95,7 +95,7 @@ PyObject * backgroundRegisterEnvironmentData(PyObject * poSelf, PyObject * poArg
 		TraceError("background.RegisterEnvironmentData(iIndex=%d, szEnvironmentFileName=%s)", iIndex, pszEnvironmentFileName);
 
 		// TODO:
-		// ����Ʈ ȯ�� ���� �۾��� ������
+		// 디폴트 환경 설정 작업을 해주자
 	}
 
 	return Py_BuildNone();
diff --git a/src/UserInterface/PythonCharacterManager.cpp b/src/UserInterface/PythonCharacterManager.cpp
index ee4f0f15..b68f648d 100644
--- a/src/UserInterface/PythonCharacterManager.cpp
+++ b/src/UserInterface/PythonCharacterManager.cpp
@@ -39,8 +39,8 @@ void CPythonCharacterManager::AdjustCollisionWithOtherObjects(CActorInstance* pI
 
 		if(pInst->TestPhysicsBlendingCollision(*rkActorEach) )
 		{
-			// NOTE : �ϴ� ������ġ�� ����
-			// TODO : ���� ���ݴ� �� ó���Ѵٸ� physic movement�Ÿ��� steping�ؼ� iterationó���ؾ� ��.
+			// NOTE : 일단 기존위치로 원복
+			// TODO : 향후 조금더 잘 처리한다면 physic movement거리를 steping해서 iteration처리해야 함.
 			TPixelPosition curPos;
 			pInst->GetPixelPosition(&curPos);
 			pInst->SetBlendingPosition(curPos);
@@ -276,8 +276,8 @@ void CPythonCharacterManager::UpdateTransform()
 
 			pSrcInstance->CheckAdvancing();
 
-			// 2004.08.02.myevan.IsAttacked �� ��� �׾������� üũ�ϹǷ�, 
-			// ���������� �Ÿ��� ����Ǵ� IsPushing�϶��� üũ�ϵ��� �Ѵ�
+			// 2004.08.02.myevan.IsAttacked 일 경우 죽었을때도 체크하므로, 
+			// 실질적으로 거리가 변경되는 IsPushing일때만 체크하도록 한다
 			if (pSrcInstance->IsPushing())
 				rkBG.CheckAdvancing(pSrcInstance);
 		}
@@ -688,7 +688,7 @@ void CPythonCharacterManager::__UpdatePickedActorList()
 	for (i=m_kAliveInstMap.begin(); i!=m_kAliveInstMap.end(); ++i)
 	{
 		CInstanceBase* pkInstEach=i->second;
-		// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+		// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 		if (pkInstEach->CanPickInstance())
 		{
 			if (pkInstEach->IsDead())
@@ -751,7 +751,7 @@ void CPythonCharacterManager::__NEW_Pick()
 		}
 #endif
 
-	// ������ üũ
+	// 정밀한 체크
 	{
 		std::vector<CInstanceBase*>::iterator f;
 		for (f=m_kVct_pkInstPicked.begin(); f!=m_kVct_pkInstPicked.end(); ++f)
@@ -773,7 +773,7 @@ void CPythonCharacterManager::__NEW_Pick()
 		}
 	}
 
-	// ������� �� �������
+	// 못찾겠으면 걍 순서대로
 	{
 		std::vector<CInstanceBase*>::iterator f;
 		for (f=m_kVct_pkInstPicked.begin(); f!=m_kVct_pkInstPicked.end(); ++f)
diff --git a/src/UserInterface/PythonCharacterManagerModule.cpp b/src/UserInterface/PythonCharacterManagerModule.cpp
index 7d440fda..aca294d3 100644
--- a/src/UserInterface/PythonCharacterManagerModule.cpp
+++ b/src/UserInterface/PythonCharacterManagerModule.cpp
@@ -5,7 +5,7 @@
 #include "../gamelib/RaceManager.h"
 
 //////////////////////////////////////////////////////////////////////////
-// RaceData ���� ����
+// RaceData 관련 시작
 //////////////////////////////////////////////////////////////////////////
 
 PyObject * chrmgrSetEmpireNameMode(PyObject* poSelf, PyObject* poArgs)
@@ -230,7 +230,7 @@ PyObject * chrmgrRegisterNormalAttack(PyObject* poSelf, PyObject* poArgs)
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// ������ �Լ���
+// 없어질 함수들
 PyObject * chrmgrReserveComboAttack(PyObject* poSelf, PyObject* poArgs)
 {
 	int iMode;
@@ -270,7 +270,7 @@ PyObject * chrmgrRegisterComboAttack(PyObject* poSelf, PyObject* poArgs)
 	pRaceData->RegisterComboAttack(iMode, 0, iComboIndex, iMotionIndex);
 	return Py_BuildNone();
 }
-// ������ �Լ���
+// 없어질 함수들
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 PyObject * chrmgrReserveComboAttackNew(PyObject* poSelf, PyObject* poArgs)
@@ -520,7 +520,7 @@ PyObject * chrmgrAppendShapeSkin(PyObject* poSelf, PyObject* poArgs)
 	return Py_BuildNone();
 }
 //////////////////////////////////////////////////////////////////////////
-// RaceData ���� ��
+// RaceData 관련 끝
 //////////////////////////////////////////////////////////////////////////
 
 PyObject * chrmgrSetMovingSpeed(PyObject* poSelf, PyObject* poArgs)
@@ -717,7 +717,7 @@ void initchrmgr()
 {
 	static PyMethodDef s_methods[] =
 	{
-		// RaceData ����		
+		// RaceData 관련		
 		{ "SetEmpireNameMode",			chrmgrSetEmpireNameMode,				METH_VARARGS },
 		{ "GetVIDInfo",					chrmgrGetVIDInfo,						METH_VARARGS },
 		{ "GetPickedVID",				chrmgrGetPickedVID,						METH_VARARGS },
@@ -826,13 +826,13 @@ void initchrmgr()
 	PyModule_AddIntConstant(poModule, "EFFECT_SUCCESS",				CInstanceBase::EFFECT_SUCCESS) ;
 	PyModule_AddIntConstant(poModule, "EFFECT_FAIL",				CInstanceBase::EFFECT_FAIL) ;
 	PyModule_AddIntConstant(poModule, "EFFECT_FR_SUCCESS",				CInstanceBase::EFFECT_FR_SUCCESS) ;	
-	PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_ON_14_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_ON_14_FOR_GERMANY );	//������ 14�϶� ( �������� )
-	PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_UNDER_15_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_UNDER_15_FOR_GERMANY );//������ 15�϶� ( �������� )
+	PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_ON_14_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_ON_14_FOR_GERMANY );	//레벨업 14일때 ( 독일전용 )
+	PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_UNDER_15_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_UNDER_15_FOR_GERMANY );//레벨업 15일때 ( 독일전용 )
 	PyModule_AddIntConstant(poModule, "EFFECT_PERCENT_DAMAGE1",				CInstanceBase::EFFECT_PERCENT_DAMAGE1);	
 	PyModule_AddIntConstant(poModule, "EFFECT_PERCENT_DAMAGE2",				CInstanceBase::EFFECT_PERCENT_DAMAGE2);	
 	PyModule_AddIntConstant(poModule, "EFFECT_PERCENT_DAMAGE3",				CInstanceBase::EFFECT_PERCENT_DAMAGE3);
 
-	// �ڵ����� HP, SP
+	// 자동물약 HP, SP
 	PyModule_AddIntConstant(poModule, "EFFECT_AUTO_HPUP",					CInstanceBase::EFFECT_AUTO_HPUP);
 	PyModule_AddIntConstant(poModule, "EFFECT_AUTO_SPUP",					CInstanceBase::EFFECT_AUTO_SPUP);
 
diff --git a/src/UserInterface/PythonCharacterModule.cpp b/src/UserInterface/PythonCharacterModule.cpp
index bbd95c5e..ad76433f 100644
--- a/src/UserInterface/PythonCharacterModule.cpp
+++ b/src/UserInterface/PythonCharacterModule.cpp
@@ -219,7 +219,7 @@ PyObject * chrSelect(PyObject* poSelf, PyObject* poArgs)
 			break;
 
 		default:
-			// NOTE: ���������� ������ �ϸ� ���� ���� �� ���Ⱑ �����Ƽ� �ڸ�Ʈ �Ͽ����ϴ� [cronan 040226]
+			// NOTE: 빨간색으로 나오게 하면 스샷 찍을 때 보기가 안좋아서 코멘트 하였습니다 [cronan 040226]
 			//pkInst->SetAddColor(D3DXCOLOR(0.3f, 0.0f, 0.0f, 1.0f));
 			break;
 	}
@@ -528,7 +528,7 @@ PyObject * chrRefresh(PyObject* poSelf, PyObject* poArgs)
 	if (!pkInst)
 		return Py_BuildNone();
 
-	// Select ȭ�鿡���� WAIT ����� �غ� ���� ���� �����̱� ������ ������ �����.
+	// Select 화면에서는 WAIT 모션이 준비 되지 않은 상태이기 때문에 문제가 생긴다.
 	//pkInst->Refresh(CRaceMotionData::NAME_WAIT, true);
 	return Py_BuildNone();
 }
diff --git a/src/UserInterface/PythonChat.cpp b/src/UserInterface/PythonChat.cpp
index 28acd7e8..177caf1a 100644
--- a/src/UserInterface/PythonChat.cpp
+++ b/src/UserInterface/PythonChat.cpp
@@ -474,7 +474,7 @@ void CPythonChat::AppendChat(int iType, const char * c_szChat)
 		TChatSet * pChatSet = &(itor->second);
 		//pChatLine->SetColor(itor->first, GetChatColor(iType));
 
-		// Edit Mode �� ������ ���� ���߱� ���� �߰�
+		// Edit Mode 를 억지로 끼워 맞추기 위해 추가
 		if (BOARD_STATE_EDIT == pChatSet->m_iBoardState)
 		{
 			ArrangeShowingChat(itor->first);
@@ -512,12 +512,12 @@ DWORD CPythonChat::GetChatColor(int iType)
 void CPythonChat::IgnoreCharacter(const char * c_szName)
 {
 	TIgnoreCharacterSet::iterator itor = m_IgnoreCharacterSet.find(c_szName);
-	// NOTE : �̹� ���� ���̶��..
+	// NOTE : 이미 차단 중이라면..
 	if (m_IgnoreCharacterSet.end() != itor)
 	{
 		m_IgnoreCharacterSet.erase(itor);
 	}
-	// NOTE : ������ ���� ���� ij���Ͷ��..
+	// NOTE : 차단이 되지 않은 캐릭터라면..
 	else
 	{
 		m_IgnoreCharacterSet.insert(c_szName);
diff --git a/src/UserInterface/PythonEventManager.cpp b/src/UserInterface/PythonEventManager.cpp
index 1a48e1f6..7b4007fb 100644
--- a/src/UserInterface/PythonEventManager.cpp
+++ b/src/UserInterface/PythonEventManager.cpp
@@ -145,7 +145,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript
 	if (!pEventSet)
 		return -1;
 
-	// SCRIPT_PARSING_FAILURE_CLEAR_BUG ��ũ��Ʈ �Ľ� ���н� __ClearEventSetp ���� ���� �߻�
+	// SCRIPT_PARSING_FAILURE_CLEAR_BUG 스크립트 파싱 실패시 __ClearEventSetp 에서 에러 발생
 	pEventSet->pCurrentTextLine = NULL;
 	// END_OF_SCRIPT_PARSING_FAILURE_CLEAR_BUG
 	
@@ -159,7 +159,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript
 	pEventSet->poEventHandler = NULL;
 	__InitEventSet(*pEventSet);
 
-	// NOTE : ���� �ܼ��� ��ũ��Ʈ �̺�Ʈ ���� Ŀ�ǵ��� �ٽ� �����.
+	// NOTE : 만약 단순한 스크립트 이벤트 실행 커맨드라면 다시 만든다.
 	script::TCmd ScriptCommand;
 	int pEventPosition;
 	int iEventType;
@@ -468,7 +468,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet)
 
 		case EVENT_TYPE_WAIT:
 		{
-			//ijƽ�� ����� ���� ������� ���� ������ ������ ���� ����/EVENT_TYPE_WAIT �����ؼ� �׽�Ʈ �ʿ�.
+			//캐틱터 만들기 제국 설명등에서 설명 밑으로 쳐지는 버그 수정/EVENT_TYPE_WAIT 관련해서 테스트 필요.
 			pEventSet->iyLocal = 0;
 			pEventSet->isLock = true;
 			break;
@@ -584,7 +584,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet)
 			int idx = atoi(GetArgument("idx", ScriptCommand.argList));
 			const char * name = GetArgument("name", ScriptCommand.argList);
 			
-			// ����Ʈ UI �������� �Ǹ� �ذ� �ǹǷ� �ϴ� ��ȥ���� ���� by chrislee
+			// 퀘스트 UI 리뉴얼이 되면 해결 되므로 일단 용혼석만 땜빵 by chrislee
 			if (!strcmp(name, "\xC1\xB6\xB0\xA2\xB3\xAD \xBF\xEB\xC8\xA5\xBC\xAE?....")) {
 				PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", ""));
 			}
diff --git a/src/UserInterface/PythonExchange.cpp b/src/UserInterface/PythonExchange.cpp
index 4d21dccb..40fd3493 100644
--- a/src/UserInterface/PythonExchange.cpp
+++ b/src/UserInterface/PythonExchange.cpp
@@ -239,9 +239,9 @@ CPythonExchange::CPythonExchange()
 	Clear();
 	m_isTrading = false;
 	m_elk_mode = false;
-		// Clear�� �Ȱܳ����� �ȵ�. 
-		// trade_start ��Ŷ�� ���� Clear�� �����ϴµ�
-		// m_elk_mode�� Ŭ���� �Ǽ� �ȵ�.;  
+		// Clear로 옴겨놓으면 안됨. 
+		// trade_start 페킷이 오면 Clear를 실행하는데
+		// m_elk_mode는 클리어 되선 안됨.;  
 }
 CPythonExchange::~CPythonExchange()
 {
diff --git a/src/UserInterface/PythonItem.cpp b/src/UserInterface/PythonItem.cpp
index e77a7509..d109d171 100644
--- a/src/UserInterface/PythonItem.cpp
+++ b/src/UserInterface/PythonItem.cpp
@@ -371,7 +371,7 @@ void CPythonItem::CreateItem(DWORD dwVirtualID, DWORD dwVirtualNumber, float x,
 
 		if (/*f[1].first-f[0].first < (f[2].first-f[0].first)*0.30f*/ bStabGround)
 		{
-			// ����
+			// 뾰족
 			if (f[2].second == 0) // axis x
 			{
 				rEnd.y = 90.0f + frandom(-15.0f, 15.0f);
@@ -393,8 +393,8 @@ void CPythonItem::CreateItem(DWORD dwVirtualID, DWORD dwVirtualNumber, float x,
 		}
 		else
 		{
-			// ����
-			// ���� �븻�� ������ ���� ��
+			// 넓적
+			// 땅의 노말의 영향을 받을 것
 			if (f[0].second == 0)
 			{
 				// y,z = by normal
diff --git a/src/UserInterface/PythonItemModule.cpp b/src/UserInterface/PythonItemModule.cpp
index 705b19e7..6ea23771 100644
--- a/src/UserInterface/PythonItemModule.cpp
+++ b/src/UserInterface/PythonItemModule.cpp
@@ -310,7 +310,7 @@ PyObject * itemIsEquipmentVID(PyObject * poSelf, PyObject * poArgs)
 	return Py_BuildValue("i", pItemData->IsEquipment());
 }
 
-// 2005.05.20.myevan.���� USE_TYPE üũ
+// 2005.05.20.myevan.통합 USE_TYPE 체크
 PyObject* itemGetUseType(PyObject * poSelf, PyObject * poArgs)
 {
 	int iItemVID;
@@ -619,7 +619,7 @@ void initItem()
 	PyModule_AddIntConstant(poModule, "COSTUME_TYPE_BODY",			CItemData::COSTUME_BODY);
 	PyModule_AddIntConstant(poModule, "COSTUME_TYPE_HAIR",			CItemData::COSTUME_HAIR);
 
-	// �κ��丮 �� ���â������ ���� ��ȣ
+	// 인벤토리 및 장비창에서의 슬롯 번호
 	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_START",			c_Costume_Slot_Start);
 	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_COUNT",			c_Costume_Slot_Count);
 	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_BODY",			c_Costume_Slot_Body);
@@ -772,37 +772,37 @@ void initItem()
     PyModule_AddIntConstant(poModule, "APPLY_POISON_PCT",			CItemData::APPLY_POISON_PCT);
     PyModule_AddIntConstant(poModule, "APPLY_SLOW_PCT", 			CItemData::APPLY_SLOW_PCT);
     PyModule_AddIntConstant(poModule, "APPLY_STUN_PCT", 			CItemData::APPLY_STUN_PCT);
-	PyModule_AddIntConstant(poModule, "APPLY_CRITICAL_PCT",			CItemData::APPLY_CRITICAL_PCT);			// n% Ȯ���� �ι� Ÿ��
-	PyModule_AddIntConstant(poModule, "APPLY_PENETRATE_PCT",		CItemData::APPLY_PENETRATE_PCT);		// n% Ȯ���� ���� ���� ����
-	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ORC",			CItemData::APPLY_ATTBONUS_ORC);			// ���Ϳ��� n% �߰� ������
-	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_MILGYO",		CItemData::APPLY_ATTBONUS_MILGYO);		// �б����� n% �߰� ������
-	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_UNDEAD",		CItemData::APPLY_ATTBONUS_UNDEAD);		// ��ü���� n% �߰� ������
-	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DEVIL",		CItemData::APPLY_ATTBONUS_DEVIL);		// �Ǹ����� n% �߰� ������
-	PyModule_AddIntConstant(poModule, "APPLY_STEAL_HP",				CItemData::APPLY_STEAL_HP);				// n% Ȯ���� Ÿ���� 10% �� ���������� ����
-	PyModule_AddIntConstant(poModule, "APPLY_STEAL_SP",				CItemData::APPLY_STEAL_SP);				// n% Ȯ���� Ÿ���� 10% �� ���ŷ����� ����
-	PyModule_AddIntConstant(poModule, "APPLY_MANA_BURN_PCT",		CItemData::APPLY_MANA_BURN_PCT);		// n% Ȯ���� ����� ������ ��´�
-	PyModule_AddIntConstant(poModule, "APPLY_DAMAGE_SP_RECOVER",	CItemData::APPLY_DAMAGE_SP_RECOVER);	// n% Ȯ���� ���ŷ� 2 ȸ��
-	PyModule_AddIntConstant(poModule, "APPLY_BLOCK",				CItemData::APPLY_BLOCK);				// n% Ȯ���� �������� �Ϻ� ���
-	PyModule_AddIntConstant(poModule, "APPLY_DODGE",				CItemData::APPLY_DODGE);				// n% Ȯ���� �������� �Ϻ� ȸ��
-	PyModule_AddIntConstant(poModule, "APPLY_RESIST_SWORD",			CItemData::APPLY_RESIST_SWORD);			// �Ѽհ˿� ���� ���ظ� n% ����
-	PyModule_AddIntConstant(poModule, "APPLY_RESIST_TWOHAND",		CItemData::APPLY_RESIST_TWOHAND);		// ��հ˿� ���� ���ظ� n% ����
-	PyModule_AddIntConstant(poModule, "APPLY_RESIST_DAGGER",		CItemData::APPLY_RESIST_DAGGER);		// �ܵ��� ���� ���ظ� n% ����
-	PyModule_AddIntConstant(poModule, "APPLY_RESIST_BELL",			CItemData::APPLY_RESIST_BELL);			// ��£ ���� ���ظ� n% ����
-	PyModule_AddIntConstant(poModule, "APPLY_RESIST_FAN",			CItemData::APPLY_RESIST_FAN);			// ��ä�� ���� ���ظ� n% ����
-	PyModule_AddIntConstant(poModule, "APPLY_RESIST_WIND",			CItemData::APPLY_RESIST_WIND);			// �ٶ��� ���� ���ظ� n% ����
-	PyModule_AddIntConstant(poModule, "APPLY_REFLECT_MELEE",		CItemData::APPLY_REFLECT_MELEE);		// ���� Ÿ�� n% �� ������ �ǵ�����
-	PyModule_AddIntConstant(poModule, "APPLY_REFLECT_CURSE",		CItemData::APPLY_REFLECT_CURSE);		// ���� ������ ���� ���� n% Ȯ���� �ǵ�����
-	PyModule_AddIntConstant(poModule, "APPLY_POISON_REDUCE",		CItemData::APPLY_POISON_REDUCE);		// ���� ���� ������ ����
-	PyModule_AddIntConstant(poModule, "APPLY_KILL_SP_RECOVER",		CItemData::APPLY_KILL_SP_RECOVER);		// ���� �׿����� n% Ȯ���� ���ŷ� 10 ȸ��
-	PyModule_AddIntConstant(poModule, "APPLY_EXP_DOUBLE_BONUS",		CItemData::APPLY_EXP_DOUBLE_BONUS);		// n% Ȯ���� ����ġ ȹ�淮 2��
-	PyModule_AddIntConstant(poModule, "APPLY_GOLD_DOUBLE_BONUS",	CItemData::APPLY_GOLD_DOUBLE_BONUS);	// n% Ȯ���� �� ȹ�淮 2��
-	PyModule_AddIntConstant(poModule, "APPLY_ITEM_DROP_BONUS",		CItemData::APPLY_ITEM_DROP_BONUS);		// n% Ȯ���� ������ ȹ�淮 2��
-	PyModule_AddIntConstant(poModule, "APPLY_POTION_BONUS",			CItemData::APPLY_POTION_BONUS);			// ���� ����� n% ��ŭ ���� ����
-	PyModule_AddIntConstant(poModule, "APPLY_KILL_HP_RECOVER",		CItemData::APPLY_KILL_HP_RECOVER);		// ���϶����� ������ ȸ�� 
-	PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_STUN",			CItemData::APPLY_IMMUNE_STUN);			// ���� ���� �ʴ´�
-	PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_SLOW",			CItemData::APPLY_IMMUNE_SLOW);			// �������� �ʴ´�
-	PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_FALL",			CItemData::APPLY_IMMUNE_FALL);			// �Ѿ����� �ʴ´�
-	PyModule_AddIntConstant(poModule, "APPLY_MAX_STAMINA",			CItemData::APPLY_MAX_STAMINA);			// �ִ� ���׹̳� ����
+	PyModule_AddIntConstant(poModule, "APPLY_CRITICAL_PCT",			CItemData::APPLY_CRITICAL_PCT);			// n% 확률로 두배 타격
+	PyModule_AddIntConstant(poModule, "APPLY_PENETRATE_PCT",		CItemData::APPLY_PENETRATE_PCT);		// n% 확률로 적의 방어력 무시
+	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ORC",			CItemData::APPLY_ATTBONUS_ORC);			// 웅귀에게 n% 추가 데미지
+	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_MILGYO",		CItemData::APPLY_ATTBONUS_MILGYO);		// 밀교에게 n% 추가 데미지
+	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_UNDEAD",		CItemData::APPLY_ATTBONUS_UNDEAD);		// 시체에게 n% 추가 데미지
+	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DEVIL",		CItemData::APPLY_ATTBONUS_DEVIL);		// 악마에게 n% 추가 데미지
+	PyModule_AddIntConstant(poModule, "APPLY_STEAL_HP",				CItemData::APPLY_STEAL_HP);				// n% 확률로 타격의 10% 를 생명력으로 흡수
+	PyModule_AddIntConstant(poModule, "APPLY_STEAL_SP",				CItemData::APPLY_STEAL_SP);				// n% 확률로 타격의 10% 를 정신력으로 흡수
+	PyModule_AddIntConstant(poModule, "APPLY_MANA_BURN_PCT",		CItemData::APPLY_MANA_BURN_PCT);		// n% 확률로 상대의 마나를 깎는다
+	PyModule_AddIntConstant(poModule, "APPLY_DAMAGE_SP_RECOVER",	CItemData::APPLY_DAMAGE_SP_RECOVER);	// n% 확률로 정신력 2 회복
+	PyModule_AddIntConstant(poModule, "APPLY_BLOCK",				CItemData::APPLY_BLOCK);				// n% 확률로 물리공격 완벽 방어
+	PyModule_AddIntConstant(poModule, "APPLY_DODGE",				CItemData::APPLY_DODGE);				// n% 확률로 물리공격 완벽 회피
+	PyModule_AddIntConstant(poModule, "APPLY_RESIST_SWORD",			CItemData::APPLY_RESIST_SWORD);			// 한손검에 의한 피해를 n% 감소
+	PyModule_AddIntConstant(poModule, "APPLY_RESIST_TWOHAND",		CItemData::APPLY_RESIST_TWOHAND);		// 양손검에 의한 피해를 n% 감소
+	PyModule_AddIntConstant(poModule, "APPLY_RESIST_DAGGER",		CItemData::APPLY_RESIST_DAGGER);		// 단도에 의한 피해를 n% 감소
+	PyModule_AddIntConstant(poModule, "APPLY_RESIST_BELL",			CItemData::APPLY_RESIST_BELL);			// 방울에 의한 피해를 n% 감소
+	PyModule_AddIntConstant(poModule, "APPLY_RESIST_FAN",			CItemData::APPLY_RESIST_FAN);			// 부채에 의한 피해를 n% 감소
+	PyModule_AddIntConstant(poModule, "APPLY_RESIST_WIND",			CItemData::APPLY_RESIST_WIND);			// 바람에 의한 피해를 n% 감소
+	PyModule_AddIntConstant(poModule, "APPLY_REFLECT_MELEE",		CItemData::APPLY_REFLECT_MELEE);		// 근접 타격 n% 를 적에게 되돌린다
+	PyModule_AddIntConstant(poModule, "APPLY_REFLECT_CURSE",		CItemData::APPLY_REFLECT_CURSE);		// 적이 나에게 저주 사용시 n% 확률로 되돌린다
+	PyModule_AddIntConstant(poModule, "APPLY_POISON_REDUCE",		CItemData::APPLY_POISON_REDUCE);		// 독에 의한 데미지 감소
+	PyModule_AddIntConstant(poModule, "APPLY_KILL_SP_RECOVER",		CItemData::APPLY_KILL_SP_RECOVER);		// 적을 죽였을때 n% 확률로 정신력 10 회복
+	PyModule_AddIntConstant(poModule, "APPLY_EXP_DOUBLE_BONUS",		CItemData::APPLY_EXP_DOUBLE_BONUS);		// n% 확률로 경험치 획득량 2배
+	PyModule_AddIntConstant(poModule, "APPLY_GOLD_DOUBLE_BONUS",	CItemData::APPLY_GOLD_DOUBLE_BONUS);	// n% 확률로 돈 획득량 2배
+	PyModule_AddIntConstant(poModule, "APPLY_ITEM_DROP_BONUS",		CItemData::APPLY_ITEM_DROP_BONUS);		// n% 확률로 아이템 획득량 2배
+	PyModule_AddIntConstant(poModule, "APPLY_POTION_BONUS",			CItemData::APPLY_POTION_BONUS);			// 물약 복용시 n% 만큼 성능 증대
+	PyModule_AddIntConstant(poModule, "APPLY_KILL_HP_RECOVER",		CItemData::APPLY_KILL_HP_RECOVER);		// 죽일때마다 생명력 회복 
+	PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_STUN",			CItemData::APPLY_IMMUNE_STUN);			// 기절 하지 않는다
+	PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_SLOW",			CItemData::APPLY_IMMUNE_SLOW);			// 느려지지 않는다
+	PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_FALL",			CItemData::APPLY_IMMUNE_FALL);			// 넘어지지 않는다
+	PyModule_AddIntConstant(poModule, "APPLY_MAX_STAMINA",			CItemData::APPLY_MAX_STAMINA);			// 최대 스테미너 증가
 	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_WARRIOR",		CItemData::APPLY_ATT_BONUS_TO_WARRIOR);
 	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ASSASSIN",	CItemData::APPLY_ATT_BONUS_TO_ASSASSIN);
 	PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_SURA",		CItemData::APPLY_ATT_BONUS_TO_SURA);
@@ -827,7 +827,7 @@ void initItem()
 	PyModule_AddIntConstant(poModule, "APPLY_RESIST_ASSASSIN",	CItemData::APPLY_RESIST_ASSASSIN );
 	PyModule_AddIntConstant(poModule, "APPLY_RESIST_SURA",		CItemData::APPLY_RESIST_SURA );
 	PyModule_AddIntConstant(poModule, "APPLY_RESIST_SHAMAN",	CItemData::APPLY_RESIST_SHAMAN );
-	PyModule_AddIntConstant(poModule, "APPLY_ENERGY",	CItemData::APPLY_ENERGY );		// ���
+	PyModule_AddIntConstant(poModule, "APPLY_ENERGY",	CItemData::APPLY_ENERGY );		// 기력
 	PyModule_AddIntConstant(poModule, "APPLY_COSTUME_ATTR_BONUS",	CItemData::APPLY_COSTUME_ATTR_BONUS );		
 
 	PyModule_AddIntConstant(poModule, "APPLY_MAGIC_ATTBONUS_PER",	CItemData::APPLY_MAGIC_ATTBONUS_PER );		
diff --git a/src/UserInterface/PythonMiniMap.cpp b/src/UserInterface/PythonMiniMap.cpp
index 6d794b04..0d57dffd 100644
--- a/src/UserInterface/PythonMiniMap.cpp
+++ b/src/UserInterface/PythonMiniMap.cpp
@@ -91,11 +91,11 @@ void CPythonMiniMap::Update(float fCenterX, float fCenterY)
 	if (!rkBG.IsMapOutdoor())
 		return;
 	
-	// �̴ϸ� �׸� ����
+	// 미니맵 그림 갱신
 	if (m_fCenterX != fCenterX || m_fCenterY != fCenterY )
 		SetCenterPosition(fCenterX, fCenterY);
 
-	// ij���� ����Ʈ ����
+	// 캐릭터 리스트 갱신
 	m_OtherPCPositionVector.clear();
 	m_PartyPCPositionVector.clear();
 	m_NPCPositionVector.clear();
@@ -434,7 +434,7 @@ void CPythonMiniMap::Render(float fScreenX, float fScreenY)
 	STATEMANAGER.SaveSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
 	STATEMANAGER.SaveSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
 
-	// ij���� ��ũ
+	// 캐릭터 마크
 	CInstanceBase * pkInst = CPythonCharacterManager::Instance().GetMainInstancePtr();
 
 	if (pkInst)
@@ -470,7 +470,7 @@ void CPythonMiniMap::Render(float fScreenX, float fScreenY)
 
 	CCamera* pkCmrCur=CCameraManager::Instance().GetCurrentCamera();
 
-	// ī�޶� ����
+	// 카메라 방향
 	if (pkCmrCur)
 	{
 		m_MiniMapCameraraphicImageInstance.SetRotation(pkCmrCur->GetRoll());
@@ -530,7 +530,7 @@ bool CPythonMiniMap::Create()
 	const std::string strPlayerMark = strImageRoot + "minimap/playermark.sub";
 	const std::string strWhiteMark = strImageRoot + "minimap/whitemark.sub";
 
-	// �̴ϸ� Ŀ��
+	// 미니맵 커버
 	CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer(strImageFilter.c_str());
 	m_MiniMapFilterGraphicImageInstance.SetImagePointer(pImage);
 	pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer(strImageCamera.c_str());
@@ -540,7 +540,7 @@ bool CPythonMiniMap::Create()
 	m_matMiniMapCover._22 = 1.0f / ((float)m_MiniMapFilterGraphicImageInstance.GetHeight());
 	m_matMiniMapCover._33 = 0.0f;
 
-	// ij���� ��ũ
+	// 캐릭터 마크
 	CGraphicSubImage * pSubImage = (CGraphicSubImage *) CResourceManager::Instance().GetResourcePointer(strPlayerMark.c_str());
 	m_PlayerMark.SetImagePointer(pSubImage);
 
@@ -569,7 +569,7 @@ bool CPythonMiniMap::Create()
 
 	m_GuildAreaFlagImageInstance.SetImagePointer((CGraphicSubImage *) CResourceManager::Instance().GetResourcePointer("d:/ymir work/ui/minimap/GuildArea01.sub"));
 
-	// �׷��� ������ ����
+	// 그려질 폴리곤 세팅
 #pragma pack(push)
 #pragma pack(1)
 	LPMINIMAPVERTEX		lpMiniMapVertex;
diff --git a/src/UserInterface/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp
index 70217199..e0179917 100644
--- a/src/UserInterface/PythonNetworkStream.cpp
+++ b/src/UserInterface/PythonNetworkStream.cpp
@@ -239,7 +239,7 @@ void CPythonNetworkStream::AbsoluteExitApplication()
 
 bool CPythonNetworkStream::__IsNotPing()
 {
-	// ������ ���� �ȿö� üũ�̳� ������ ��Ȯ�� ���߾�� �Ѵ�.
+	// 원래는 핑이 안올때 체크이나 서버랑 정확히 맞추어야 한다.
 	return false;
 }
 
@@ -251,7 +251,7 @@ DWORD CPythonNetworkStream::GetGuildID()
 UINT CPythonNetworkStream::UploadMark(const char * c_szImageFileName)
 {
 	// MARK_BUG_FIX
-	// ��带 ���� ���Ĵ� ��� ���̵� 0�̴�.
+	// 길드를 만든 직후는 길드 아이디가 0이다.
 	if (0 == m_dwGuildID)
 		return ERROR_MARK_UPLOAD_NEED_RECONNECT;
 
@@ -321,13 +321,13 @@ UINT CPythonNetworkStream::UploadSymbol(const char* c_szImageFileName)
 
 void CPythonNetworkStream::__DownloadMark()
 {
-	// 3�� �ȿ��� �ٽ� �������� �ʴ´�.
+	// 3분 안에는 다시 접속하지 않는다.
 	DWORD curTime = ELTimer_GetMSec();
 
 	if (curTime < gs_nextDownloadMarkTime)
 		return;
 
-	gs_nextDownloadMarkTime = curTime + 60000 * 3; // 3��
+	gs_nextDownloadMarkTime = curTime + 60000 * 3; // 3분
 
 	CGuildMarkDownloader& rkGuildMarkDownloader = CGuildMarkDownloader::Instance();
 	rkGuildMarkDownloader.Connect(m_kMarkAuth.m_kNetAddr, m_kMarkAuth.m_dwHandle, m_kMarkAuth.m_dwRandomKey);
@@ -593,19 +593,19 @@ bool CPythonNetworkStream::RecvPhasePacket()
 
 	switch (packet_phase.phase)
 	{
-		case PHASE_CLOSE:				// ����� ���� (�Ǵ� ���� �� ����)
+		case PHASE_CLOSE:				// 끊기는 상태 (또는 끊기 전 상태)
 			ClosePhase();
 			break;
 
-		case PHASE_HANDSHAKE:			// �Ǽ�..;;
+		case PHASE_HANDSHAKE:			// 악수..;;
 			SetHandShakePhase();
 			break;
 
-		case PHASE_LOGIN:				// ��� ��
+		case PHASE_LOGIN:				// 로그인 중
 			SetLoginPhase();
 			break;
 
-		case PHASE_SELECT:				// ij���� ���� ȭ��
+		case PHASE_SELECT:				// 캐릭터 선택 화면
 			SetSelectPhase();
 
 			BuildProcessCRC();
@@ -615,15 +615,15 @@ bool CPythonNetworkStream::RecvPhasePacket()
 			// END_OF_MARK_BUG_FIX
 			break;
 
-		case PHASE_LOADING:				// ���� �� �ε� ȭ��
+		case PHASE_LOADING:				// 선택 후 로딩 화면
 			SetLoadingPhase();
 			break;
 
-		case PHASE_GAME:				// ���� ȭ��
+		case PHASE_GAME:				// 게임 화면
 			SetGamePhase();
 			break;
 
-		case PHASE_DEAD:				// �׾��� ��.. (���� �ȿ� �ִ� ���� ����..)
+		case PHASE_DEAD:				// 죽었을 때.. (게임 안에 있는 것일 수도..)
 			break;
 	}
 
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
index 44c1472a..efa11f4d 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
@@ -212,7 +212,7 @@ void CPythonNetworkStream::GamePhase()
     while (ret)
 	{
 		if(dwRecvCount++ >= MAX_RECV_COUNT-1 && GetRecvBufferSize() < SAFE_RECV_BUFSIZE
-			&& m_strPhase == "Game") //phase_game �� �ƴϾ ����� ������ ��찡 �ִ�.
+			&& m_strPhase == "Game") //phase_game 이 아니어도 여기로 들어오는 경우가 있다.
 			break;
 
 		if (!CheckPacket(&header))
@@ -239,7 +239,7 @@ void CPythonNetworkStream::GamePhase()
 
 			case HEADER_GC_PHASE:
 				ret = RecvPhasePacket();
-				return; // ���߿� Phase �� �ٲ�� �ϴ� ������ GamePhase Ż�� - [levites]
+				return; // 도중에 Phase 가 바뀌면 일단 무조건 GamePhase 탈출 - [levites]
 				break;
 
 			case HEADER_GC_PVP:
@@ -807,9 +807,9 @@ void CPythonNetworkStream::Warp(LONG lGlobalX, LONG lGlobalY)
 	//rkBgMgr.SetShadowLevel(CPythonBackground::SHADOW_ALL);
 	rkBgMgr.RefreshShadowLevel();
 
-	// NOTE : Warp ������ CenterPosition�� Height�� 0�̱� ������ ī�޶� ���ٴڿ� �����ְ� ��
-	//        �����϶����� Height�� ���� �DZ� �����̹Ƿ� ���� �̵��ϸ� Position�� ������ �ѹ�
-	//        �������ش� - [levites]
+	// NOTE : Warp 했을때 CenterPosition의 Height가 0이기 때문에 카메라가 땅바닥에 박혀있게 됨
+	//        움직일때마다 Height가 갱신 되기 때문이므로 맵을 이동하면 Position을 강제로 한번
+	//        셋팅해준다 - [levites]
 	LONG lLocalX = lGlobalX;
 	LONG lLocalY = lGlobalY;
 	__GlobalPositionToLocalPosition(lLocalX, lLocalY);
@@ -857,7 +857,7 @@ void CPythonNetworkStream::SetGamePhase()
 	m_phaseProcessFunc.Set(this, &CPythonNetworkStream::GamePhase);
 	m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveGamePhase);
 
-	// Main Character ���O
+	// Main Character 등록O
 
 	IAbstractPlayer & rkPlayer = IAbstractPlayer::GetSingleton();
 	rkPlayer.SetMainCharacterIndex(GetMainActorVID());
@@ -972,11 +972,11 @@ bool CPythonNetworkStream::RecvPVPPacket()
 		case PVP_MODE_AGREE:
 			rkChrMgr.RemovePVPKey(kPVPPacket.dwVIDSrc, kPVPPacket.dwVIDDst);
 
-			// ��밡 ��(Dst)���� ���Ǹ� ��������
+			// 상대가 나(Dst)에게 동의를 구했을때
 			if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDDst))
 				rkPlayer.RememberChallengeInstance(kPVPPacket.dwVIDSrc);
 
-			// ��뿡�� ���Ǹ� ���� ���ȿ��� ��� �Ҵ�
+			// 상대에게 동의를 구한 동안에는 대결 불능
 			if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDSrc))
 				rkPlayer.RememberCantFightInstance(kPVPPacket.dwVIDDst);
 			break;
@@ -987,11 +987,11 @@ bool CPythonNetworkStream::RecvPVPPacket()
 			DWORD dwKiller = kPVPPacket.dwVIDSrc;
 			DWORD dwVictim = kPVPPacket.dwVIDDst;
 
-			// ��(victim)�� ��뿡�� ������ �� ������
+			// 내(victim)가 상대에게 복수할 수 있을때
 			if (rkPlayer.IsMainCharacterIndex(dwVictim))
 				rkPlayer.RememberRevengeInstance(dwKiller);
 
-			// ���(victim)�� ������ �����ϴ� ���ȿ��� ��� �Ҵ�
+			// 상대(victim)가 나에게 복수하는 동안에는 대결 불능
 			if (rkPlayer.IsMainCharacterIndex(dwKiller))
 				rkPlayer.RememberCantFightInstance(dwVictim);
 			break;
@@ -1009,7 +1009,7 @@ bool CPythonNetworkStream::RecvPVPPacket()
 			break;
 	}
 
-	// NOTE : PVP ��۽� TargetBoard �� ������Ʈ �մϴ�.
+	// NOTE : PVP 토글시 TargetBoard 를 업데이트 합니다.
 	__RefreshTargetBoardByVID(kPVPPacket.dwVIDSrc);
 	__RefreshTargetBoardByVID(kPVPPacket.dwVIDDst);
 
@@ -1072,7 +1072,7 @@ bool CPythonNetworkStream::SendMessengerAddByNamePacket(const char * c_szName)
 		return false;
 	char szName[CHARACTER_NAME_MAX_LEN];
 	strncpy(szName, c_szName, CHARACTER_NAME_MAX_LEN-1);
-	szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: �޽��� �̸� ���� ���� �����÷ο� ���� ����
+	szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: 메신저 이름 관련 버퍼 오버플로우 버그 수정
 
 	if (!Send(sizeof(szName), &szName))
 		return false;
@@ -1106,7 +1106,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP
 	else if (fDstRot > 360.0f)
 		fDstRot = fmodf(fDstRot, 360.0f);
 
-	// TODO: ���߿� ��Ŷ�̸��� �ٲ���
+	// TODO: 나중에 패킷이름을 바꾸자
 	TPacketCGMove kStatePacket;
 	kStatePacket.bHeader = HEADER_CG_CHARACTER_MOVE;
 	kStatePacket.bFunc = eFunc;
@@ -1135,7 +1135,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP
 	return SendSequence();
 }
 
-// NOTE : SlotIndex�� �ӽ�
+// NOTE : SlotIndex는 임시
 bool CPythonNetworkStream::SendUseSkillPacket(DWORD dwSkillIndex, DWORD dwTargetVID)
 {
 	TPacketCGUseSkill UseSkillPacket;
@@ -1277,9 +1277,9 @@ bool CPythonNetworkStream::RecvChatPacket()
 
 	buf[uChatSize]='\0';
 	
-	// ���� �ƶ� ���� ó��
-	// "\xC0\xCC\xB8\xA7: \xB3\xBB\xBF\xEB" �Է��� "\xB3\xBB\xBF\xEB: \xC0\xCC\xB8\xA7" ������ ����ϱ� ���� ��(0x08)�� ����
-	// ���� �ƶ��� ��ȣ�� ó���� (����1) : (����2) �� �ԷµǾ (����2) : (����1) �� ����ϰ� �����
+	// 유럽 아랍 버전 처리
+	// "\xC0\xCC\xB8\xA7: \xB3\xBB\xBF\xEB" 입력을 "\xB3\xBB\xBF\xEB: \xC0\xCC\xB8\xA7" 순서로 출력하기 위해 탭(0x08)을 넣음
+	// 탭을 아랍어 기호로 처리해 (영어1) : (영어2) 로 입력되어도 (영어2) : (영어1) 로 출력하게 만든다
 	if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256)
 	{
 		char * p = strchr(buf, ':'); 
@@ -1305,11 +1305,11 @@ bool CPythonNetworkStream::RecvChatPacket()
 		
 		switch (kChat.type)
 		{
-		case CHAT_TYPE_TALKING:  /* �׳� ä�� */
-		case CHAT_TYPE_PARTY:    /* ��Ƽ�� */
-		case CHAT_TYPE_GUILD:    /* ��帻 */
-		case CHAT_TYPE_SHOUT:	/* ��ġ�� */
-		case CHAT_TYPE_WHISPER:	// �����ʹ� �������� �ʴ� Only Client Enum
+		case CHAT_TYPE_TALKING:  /* 그냥 채팅 */
+		case CHAT_TYPE_PARTY:    /* 파티말 */
+		case CHAT_TYPE_GUILD:    /* 길드말 */
+		case CHAT_TYPE_SHOUT:	/* 외치기 */
+		case CHAT_TYPE_WHISPER:	// 서버와는 연동되지 않는 Only Client Enum
 			{
 				char * p = strchr(buf, ':');
 
@@ -1347,9 +1347,9 @@ bool CPythonNetworkStream::RecvChatPacket()
 				}
 			}
 			break;
-		case CHAT_TYPE_COMMAND:	/* ���� */
-		case CHAT_TYPE_INFO:     /* ���� (�������� ������, ����ġ�� �����. ��) */
-		case CHAT_TYPE_NOTICE:   /* �������� */
+		case CHAT_TYPE_COMMAND:	/* 명령 */
+		case CHAT_TYPE_INFO:     /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */
+		case CHAT_TYPE_NOTICE:   /* 공지사항 */
 		case CHAT_TYPE_BIG_NOTICE:
 		case CHAT_TYPE_MAX_NUM:
 		default:
@@ -1461,7 +1461,7 @@ bool CPythonNetworkStream::RecvPointChange()
 
 	CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
 
-	// �ڽ��� Point�� ����Ǿ��� ���..
+	// 자신의 Point가 변경되었을 경우..
 	if (pInstance)
 	if (PointChange.dwVID == pInstance->GetVirtualID())
 	{
@@ -2149,7 +2149,7 @@ bool CPythonNetworkStream::SendExchangeExitPacket()
 	return SendSequence();
 }
 
-// PointReset ���ӽ�
+// PointReset 개임시
 bool CPythonNetworkStream::SendPointResetPacket()
 {
 	PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartPointReset", Py_BuildValue("()"));
@@ -2927,7 +2927,7 @@ bool CPythonNetworkStream::RecvPartyUpdate()
 
 	PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "UpdatePartyMemberInfo", Py_BuildValue("(i)", kPartyUpdatePacket.pid));
 
-	// ���� ������ �ٲ���ٸ�, TargetBoard �� ��ư�� ������Ʈ �Ѵ�.
+	// 만약 리더가 바뀌었다면, TargetBoard 의 버튼을 업데이트 한다.
 	DWORD dwVID;
 	if (CPythonPlayer::Instance().PartyMemberPIDToVID(kPartyUpdatePacket.pid, &dwVID))
 	if (byOldState != kPartyUpdatePacket.state)
@@ -3291,7 +3291,7 @@ bool CPythonNetworkStream::RecvGuild()
 			if (!Recv(sizeof(dwPID), &dwPID))
 				return false;
 
-			// Main Player �� ��� DeleteGuild
+			// Main Player 일 경우 DeleteGuild
 			if (CPythonGuild::Instance().IsMainPlayer(dwPID))
 			{
 				CPythonGuild::Instance().Destroy();
@@ -4110,7 +4110,7 @@ bool CPythonNetworkStream::SendClientVersionPacket()
 		TPacketCGClientVersion2 kVersionPacket;
 		kVersionPacket.header = HEADER_CG_CLIENT_VERSION2;
 		strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1);
-		strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time ���ڸ�
+		strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time 앞자리
 		//strncpy(kVersionPacket.timestamp, __TIMESTAMP__, sizeof(kVersionPacket.timestamp)-1); // old_string_ver
 		//strncpy(kVersionPacket.timestamp, "1218055205", sizeof(kVersionPacket.timestamp)-1); // new_future
 		//strncpy(kVersionPacket.timestamp, "1214055205", sizeof(kVersionPacket.timestamp)-1); // old_past
@@ -4382,7 +4382,7 @@ bool CPythonNetworkStream::RecvDigMotionPacket()
 }
 
 
-// ��ȥ�� ��ȭ
+// 용혼석 강화
 bool CPythonNetworkStream::SendDragonSoulRefinePacket(BYTE bRefineType, TItemPos* pos)
 {
 	TPacketCGDragonSoulRefine pk;
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
index c11f2224..82c1aa8b 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
@@ -62,8 +62,8 @@ void __SetWeaponPower(IAbstractPlayer& rkPlayer, DWORD dwWeaponID)
 	rkPlayer.SetWeaponPower(minPower, maxPower, minMagicPower, maxMagicPower, addPower);
 }
 
-//���̺����� �̸��� "." �� �͵�
-//���Ŀ� �������� �������� �ʰ� �Ǹ� ������ �Լ�..(�����Բ� ��!!����; )
+//테이블에서 이름이 "." 인 것들
+//차후에 서버에서 보내주지 않게 되면 없어질 함수..(서버님께 꼭!!협박; )
 bool IsInvisibleRace(WORD raceNum)
 {
 	switch(raceNum)
@@ -115,7 +115,7 @@ bool CPythonNetworkStream::RecvCharacterAppendPacket()
 	kNetActorData.m_dwHair=0;/*chrAddPacket.awPart[CHR_EQUIPPART_HAIR]*/;	
 	kNetActorData.m_dwMountVnum=0;/*chrAddPacket.dwMountVnum*/;	
 
-	kNetActorData.m_dwLevel = 0; // ���� ���� ǥ�� ����
+	kNetActorData.m_dwLevel = 0; // 몬스터 레벨 표시 안함
 
 	if(kNetActorData.m_bType != CActorInstance::TYPE_PC && 
 		kNetActorData.m_bType != CActorInstance::TYPE_NPC)
@@ -260,10 +260,10 @@ bool CPythonNetworkStream::RecvCharacterUpdatePacketNew()
 
 void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNetActorData)
 {
-	// NOTE : ī�޶� ���� ������ ������ �ذ��� ���� ���� ij���Ͱ� ������ �÷�����
-	//        ���� ���� ������Ʈ �� ���̸� ���� �� �ֵ��� �س��ƾ� �մϴ�.
-	//        ��, ������ ������ �ƴ� �̹� ij���Ͱ� �߰� �� ���Ŀ��� �մϴ�.
-	//        �嵥 �̵��ε� �� Move�� ���ϰ� Append�� �ϴ���..? - [levites]
+	// NOTE : 카메라가 땅에 묻히는 문제의 해결을 위해 메인 캐릭터가 지형에 올려지기
+	//        전에 맵을 업데이트 해 높이를 구할 수 있도록 해놓아야 합니다.
+	//        단, 게임이 들어갈때가 아닌 이미 캐릭터가 추가 된 이후에만 합니다.
+	//        헌데 이동인데 왜 Move로 안하고 Append로 하는지..? - [levites]
 	IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton();
 	if (rkPlayer.IsMainCharacterIndex(pkNetActorData->m_dwVID))
 	{
@@ -276,7 +276,7 @@ void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNet
 			CPythonBackground::Instance().Update(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY, 0.0f);
 			CPythonCharacterManager::Instance().Update();
 
-			// NOTE : ��� Ÿ���� ��� GOTO �� �̵��ÿ��� �� �̸��� ����ϵ��� ó��
+			// NOTE : 사귀 타워일 경우 GOTO 로 이동시에도 맵 이름을 출력하도록 처리
 			{
 				std::string strMapName = CPythonBackground::Instance().GetWarpMapName();
 				if (strMapName == "metin2_map_deviltower1")
@@ -335,8 +335,8 @@ bool CPythonNetworkStream::RecvCharacterDeletePacket()
 
 	m_rokNetActorMgr->RemoveActor(chrDelPacket.dwVID);
 
-	// ij���Ͱ� ������� ���� ������ �����ݴϴ�.
-	// Key Check �� �ϱ⶧���� ��� ����� �����ϴ�.
+	// 캐릭터가 사라질때 개인 상점도 없애줍니다.
+	// Key Check 를 하기때문에 없어도 상관은 없습니다.
 	PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], 
 		"BINARY_PrivateShop_Disappear", 
 		Py_BuildValue("(i)", chrDelPacket.dwVID)
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
index 5606eee2..cab142a6 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
@@ -772,8 +772,8 @@ bool CPythonNetworkStream::RecvSpecialEffect()
 		return false;
 
 	DWORD effect = -1;
-	bool bPlayPotionSound = false;	//������ ���� ���� ���� ���带 �������.!!
-	bool bAttachEffect = true;		//ij���Ϳ� �ٴ� ����ġ ����Ʈ�� �Ϲ� ����Ʈ ����.!!
+	bool bPlayPotionSound = false;	//포션을 먹을 경우는 포션 사운드를 출력하자.!!
+	bool bAttachEffect = true;		//캐리터에 붙는 어태치 이펙트와 일반 이펙트 구분.!!
 	switch (kSpecialEffect.type)
 	{
 		case SE_HPUP_RED:
@@ -823,11 +823,11 @@ bool CPythonNetworkStream::RecvSpecialEffect()
 			effect = CInstanceBase::EFFECT_FR_SUCCESS;
 			bAttachEffect = false ;
 			break;
-		case SE_LEVELUP_ON_14_FOR_GERMANY:	//������ 14�϶� ( �������� )
+		case SE_LEVELUP_ON_14_FOR_GERMANY:	//레벨업 14일때 ( 독일전용 )
 			effect = CInstanceBase::EFFECT_LEVELUP_ON_14_FOR_GERMANY;
 			bAttachEffect = false ;
 			break;
-		case SE_LEVELUP_UNDER_15_FOR_GERMANY: //������ 15�϶� ( �������� )
+		case SE_LEVELUP_UNDER_15_FOR_GERMANY: //레벨업 15일때 ( 독일전용 )
 			effect = CInstanceBase::EFFECT_LEVELUP_UNDER_15_FOR_GERMANY;
 			bAttachEffect = false ;
 			break;
diff --git a/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp b/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp
index d951be11..9d933653 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp
@@ -110,7 +110,7 @@ void CPythonNetworkStream::SetLoginPhase()
 		else
 			SendLoginPacket(m_stID.c_str(), m_stPassword.c_str());
 
-		// ��й�ȣ�� �޸𸮿� ��� ���� �ִ� ������ �־, ��� ��� ������ ������ ����
+		// 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경
 		ClearLoginInfo();
 		CAccountConnector & rkAccountConnector = CAccountConnector::Instance();
 		rkAccountConnector.ClearLoginInfo();
@@ -122,7 +122,7 @@ void CPythonNetworkStream::SetLoginPhase()
 		else
 			SendLoginPacket(m_stID.c_str(), m_stPassword.c_str());
 
-		// ��й�ȣ�� �޸𸮿� ��� ���� �ִ� ������ �־, ��� ��� ������ ������ ����
+		// 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경
 		ClearLoginInfo();
 		CAccountConnector & rkAccountConnector = CAccountConnector::Instance();
 		rkAccountConnector.ClearLoginInfo();
diff --git a/src/UserInterface/PythonNonPlayer.cpp b/src/UserInterface/PythonNonPlayer.cpp
index e54e44b0..63edfdfd 100644
--- a/src/UserInterface/PythonNonPlayer.cpp
+++ b/src/UserInterface/PythonNonPlayer.cpp
@@ -84,7 +84,7 @@ bool CPythonNonPlayer::GetInstanceType(DWORD dwVnum, BYTE* pbType)
 {
 	const TMobTable * p = GetTable(dwVnum);
 
-	// dwVnum�� ã�� �� ������ �÷��̾� ij���ͷ� ���� �Ѵ�. ������ �ڵ� -_- [cronan]
+	// dwVnum를 찾을 수 없으면 플레이어 캐릭터로 간주 한다. 문제성 코드 -_- [cronan]
 	if (!p)
 		return false;
 
diff --git a/src/UserInterface/PythonPackModule.cpp b/src/UserInterface/PythonPackModule.cpp
index e3bad81a..ad58d3da 100644
--- a/src/UserInterface/PythonPackModule.cpp
+++ b/src/UserInterface/PythonPackModule.cpp
@@ -55,9 +55,9 @@ PyObject * packGet(PyObject * poSelf, PyObject * poArgs)
 	if (!PyTuple_GetString(poArgs, 0, &strFileName))
 		return Py_BuildException();
 
-	// ���̽㿡�� �о�帮�� ��ŷ ������ python ���ϰ� txt ���Ͽ� �����Ѵ�
+	// 파이썬에서 읽어드리는 패킹 파일은 python 파일과 txt 파일에 한정한다
 	const char* pcExt = strrchr(strFileName, '.');
-	if (pcExt) // Ȯ���ڰ� �ְ�
+	if (pcExt) // 확장자가 있고
 	{
 		if ((stricmp(pcExt, ".py") == 0) ||
 			(stricmp(pcExt, ".pyc") == 0) ||
diff --git a/src/UserInterface/PythonPlayer.cpp b/src/UserInterface/PythonPlayer.cpp
index b0a13458..be48be6b 100644
--- a/src/UserInterface/PythonPlayer.cpp
+++ b/src/UserInterface/PythonPlayer.cpp
@@ -213,7 +213,7 @@ void CPythonPlayer::__Update_AutoAttack()
 	if (!pkInstMain)
 		return;
 
-	// źȯ�� ���� �޷����� ���߿��� ��ŵ
+	// 탄환격 쓰고 달려가는 도중에는 스킵
 	if (__IsUsingChargeSkill())
 		return;
 
@@ -1191,7 +1191,7 @@ void CPythonPlayer::SendClickItemPacket(DWORD dwIID)
 
 void CPythonPlayer::__SendClickActorPacket(CInstanceBase& rkInstVictim)
 {
-	// ���� Ÿ�� ������ ij�� �Ϳ� ���� ���� ó��
+	// 말을 타고 광산을 캐는 것에 대한 예외 처리
 	CInstanceBase* pkInstMain=NEW_GetMainActorPtr();
 	if (pkInstMain)
 	if (pkInstMain->IsHoldingPickAxe())
@@ -1566,7 +1566,7 @@ void CPythonPlayer::NEW_ClearSkillData(bool bAll)
 
 	for (int j = 0; j < SKILL_MAX_NUM; ++j)
 	{
-		// 2004.09.30.myevan.��ų���Ž� ��ų ����Ʈ��[+] ��ư�� �ȳ��� ó��
+		// 2004.09.30.myevan.스킬갱신시 스킬 포인트업[+] 버튼이 안나와 처리
 		m_playerStatus.aSkill[j].iGrade = 0;
 		m_playerStatus.aSkill[j].fcurEfficientPercentage=0.0f;
 		m_playerStatus.aSkill[j].fnextEfficientPercentage=0.05f;
diff --git a/src/UserInterface/PythonPlayerEventHandler.cpp b/src/UserInterface/PythonPlayerEventHandler.cpp
index 615bd4f5..25898557 100644
--- a/src/UserInterface/PythonPlayerEventHandler.cpp
+++ b/src/UserInterface/PythonPlayerEventHandler.cpp
@@ -171,7 +171,7 @@ void CPythonPlayerEventHandler::OnHit(UINT uSkill, CActorInstance& rkActorVictim
 	if (!rkActorVictim.IsPushing())
 		return;
 
-	// �Ŵ� ���� �и� ����
+	// 거대 몬스터 밀림 제외
 	extern bool IS_HUGE_RACE(unsigned int vnum);
 	if (IS_HUGE_RACE(rkActorVictim.GetRace()))
 		return;
@@ -196,7 +196,7 @@ void CPythonPlayerEventHandler::FlushVictimList()
 	if (m_kVctkVictim.empty())
 		return;
 
-	// #0000682: [M2EU] ������ ��ų ���� ƨ�� 
+	// #0000682: [M2EU] 대진각 스킬 사용시 튕김 
 	unsigned int SYNC_POSITION_COUNT_LIMIT = 16;
 	unsigned int uiVictimCount = m_kVctkVictim.size();
 
diff --git a/src/UserInterface/PythonPlayerInput.cpp b/src/UserInterface/PythonPlayerInput.cpp
index c5bd4b57..444786f5 100644
--- a/src/UserInterface/PythonPlayerInput.cpp
+++ b/src/UserInterface/PythonPlayerInput.cpp
@@ -115,7 +115,7 @@ void CPythonPlayer::SetTarget(DWORD dwVID, BOOL bForceChange)
 	if (!pkInstMain)
 		return;
 
-	// 2004. 07. 07. [levites] - ��ų ����� Ÿ���� �ٲ�� ���� �ذ��� ���� �ڵ�
+	// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
 	if (!pkInstMain->CanChangeTarget())
 	{
 		return;
@@ -259,15 +259,15 @@ void CPythonPlayer::__OnClickItem(CInstanceBase& rkInstMain, DWORD dwItemID)
 
 void CPythonPlayer::__OnClickActor(CInstanceBase& rkInstMain, DWORD dwPickedActorID, bool isAuto)
 {
-	// ���� ��ų�� �Ἥ �������̶��..
+	// 만약 스킬을 써서 접근중이라면..
 	if (MODE_USE_SKILL == m_eReservedMode)
 	{
-		// ���� ij���͸� Ŭ�� ������ ����
+		// 같은 캐릭터를 클릭 했으면 리턴
 		if (__GetTargetVID() == dwPickedActorID)
 			return;
 
 		// 2005.03.25.levites
-		// źȯ���� ���� �޷������� ������ �� �ִ� �ٸ� Ÿ���� Ŭ���ϸ�
+		// 탄환격을 쓰고 달려가는중 공격할 수 있는 다른 타겟을 클릭하면
 		if (__CheckDashAffect(rkInstMain))
 		{
 			m_dwVIDReserved = dwPickedActorID;
@@ -283,7 +283,7 @@ void CPythonPlayer::__OnClickActor(CInstanceBase& rkInstMain, DWORD dwPickedActo
 		return;
 	
 	// 2005.01.28.myevan
-	// �ʱ޸� ���¿����� ������ �ȵdz� NPC Ŭ���̵Ǿ����
+	// 초급말 상태에서는 공격이 안되나 NPC 클릭이되어야함
 	if (rkInstMain.IsAttackableInstance(*pkInstVictim))
 		if (!__CanAttack())
 			return;
@@ -305,15 +305,15 @@ void CPythonPlayer::__OnClickActor(CInstanceBase& rkInstMain, DWORD dwPickedActo
 
 void CPythonPlayer::__OnPressActor(CInstanceBase& rkInstMain, DWORD dwPickedActorID, bool isAuto)
 {
-	// ���� ��ų�� �Ἥ �������̶��..
+	// 만약 스킬을 써서 접근중이라면..
 	if (MODE_USE_SKILL == m_eReservedMode)
 	{
-		// ���� ij���͸� Ŭ�� ������ ����
+		// 같은 캐릭터를 클릭 했으면 리턴
 		if (__GetTargetVID() == dwPickedActorID)
 			return;
 
 		// 2005.03.25.levites
-		// źȯ���� ���� �޷������� ������ �� �ִ� �ٸ� Ÿ���� Ŭ���ϸ�
+		// 탄환격을 쓰고 달려가는중 공격할 수 있는 다른 타겟을 클릭하면
 		if (__CheckDashAffect(rkInstMain))
 		{
 			m_dwVIDReserved = dwPickedActorID;
@@ -335,7 +335,7 @@ void CPythonPlayer::__OnPressActor(CInstanceBase& rkInstMain, DWORD dwPickedActo
 
 	if (isAuto)
 	{
-		// 2004.10.21.myevan.���ݰ����� ��븸 �ڵ� ����
+		// 2004.10.21.myevan.공격가능한 상대만 자동 공격
 		if (rkInstMain.IsAttackableInstance(rkInstVictim))
 			__SetAutoAttackTargetActorID(rkInstVictim.GetVirtualID());
 	}
@@ -463,7 +463,7 @@ bool CPythonPlayer::NEW_MoveToDirection(float fDirRot)
 	{
 		float fCmrCurRot=CameraRotationToCharacterRotation(pkCmrCur->GetRoll());
 
-		// ���� 
+		// 현재 
 		if (m_isCmrRot)
 		{
 			float fSigDirRot=fDirRot;
@@ -612,7 +612,7 @@ void CPythonPlayer::NEW_Attack()
 	}
 	else
 	{
-		//!@# ���� ź ���¿��� �Ǽ� ������ �������� �ʴ´� - [levites]
+		//!@# 말에 탄 상태에서 맨손 공격은 지원되지 않는다 - [levites]
 		if (pkInstMain->IsMountingHorse())
 		{
 			if (pkInstMain->IsHandMode())
@@ -752,10 +752,10 @@ bool CPythonPlayer::__CanAttack()
 		return false;
 	
 	// Fix me
-	// ������Ʈ 25���� �̻� 35���� �̸��� ��� �߱� ����Ʈ�� Ÿ�� ���ݸ��ϵ��� �ϵ� �ڵ�... 
-	// ���߿� �ð� ���� can attack üũ�� �������� ������...
-	// ��_�� unique ���Կ� ���� Ż���� �� �����̶� ������� ������ �� �־�� �Ѵ� ��_��
-	// ��_�� ������Ʈ�� �� üũ�� �ϰ� ��... ��_��_��_��_��
+	// 뉴마운트 25레벨 이상 35레벨 미만인 경우 중급 마운트를 타고 공격못하도록 하드 코딩... 
+	// 나중에 시간 나면 can attack 체크를 서버에서 해주자...
+	// ㅡ_ㅡ unique 슬롯에 차는 탈것은 이 조건이랑 관계없이 공격할 수 있어야 한다 ㅡ_ㅡ
+	// ㅡ_ㅡ 뉴마운트만 이 체크를 하게 함... ㅡ_ㅡ_ㅡ_ㅡ_ㅡ
 	if (pkInstMain->IsMountingHorse() && pkInstMain->IsNewMount() && (GetSkillGrade(109) < 1 && GetSkillLevel(109) < 11))
 	{
 		return false;
@@ -858,7 +858,7 @@ void CPythonPlayer::__ReserveUseSkill(DWORD dwActorID, DWORD dwSkillSlotIndex, D
 	m_dwSkillSlotIndexReserved=dwSkillSlotIndex;
 	m_dwSkillRangeReserved=dwRange;
 
-	// NOTE : �ƽ��ƽ��ϰ� �Ÿ��� ���̴� ������ �־ �ణ �����ϰ�..
+	// NOTE : 아슬아슬하게 거리가 꼬이는 문제가 있어서 약간 느슨하게..
 	if (m_dwSkillRangeReserved > 100)
 		m_dwSkillRangeReserved -= 10;
 }
@@ -920,7 +920,7 @@ void CPythonPlayer::__ReserveProcess_ClickActor()
 		return;
 	}
 
-	// źȯ�� ���� �޷����� ���߿��� �������� �ʴ´�.
+	// 탄환격 쓰고 달려가는 도중에는 공격하지 않는다.
 	if (__CheckDashAffect(*pkInstMain))
 	{
 		return;
diff --git a/src/UserInterface/PythonPlayerInputMouse.cpp b/src/UserInterface/PythonPlayerInputMouse.cpp
index 85c47df9..c42ebd28 100644
--- a/src/UserInterface/PythonPlayerInputMouse.cpp
+++ b/src/UserInterface/PythonPlayerInputMouse.cpp
@@ -100,7 +100,7 @@ void CPythonPlayer::NEW_SetMouseSmartState(int eMBS, bool isAuto)
 	// PrivateShop
 	if (IsOpenPrivateShop())
 	{
-		// ShopPacket �� ������ ��� ����  
+		// ShopPacket 이 오기전 잠깐 동안  
 		m_isSmtMov=false;
 		return;
 	}
@@ -111,7 +111,7 @@ void CPythonPlayer::NEW_SetMouseSmartState(int eMBS, bool isAuto)
 		return;
 	}
 
-	// AFFECT_STUN ó��
+	// AFFECT_STUN 처리
 	if (pkInstMain->IsSleep())
 	{
 		return;
@@ -346,16 +346,16 @@ void CPythonPlayer::NEW_RefreshMouseWalkingDirection()
 			{
 				float fDistance=pkInstMain->GetDistance(pkInstReserved);
 
-				// #0000806: [M2EU] ���濡�� ����(���ѱ�) źȯ�� ��ų ��� �ȵ�
+				// #0000806: [M2EU] 수룡에게 무사(나한군) 탄환격 스킬 사용 안됨
 				extern bool IS_HUGE_RACE(unsigned int vnum);
-				if (IS_HUGE_RACE(pkInstReserved->GetRace())) // �Ŵ� ������ ������ ����
+				if (IS_HUGE_RACE(pkInstReserved->GetRace())) // 거대 종족은 근접을 못함
 				{
-					fDistance -= 200.0f; // TEMP: �ϴ� �ϵ� �ڵ� ó��. ���������δ� �ٿ�� ���Ǿ �����ؾ���
+					fDistance -= 200.0f; // TEMP: 일단 하드 코딩 처리. 정석적으로는 바운드 스피어를 고려해야함
 				}
 
 				if (fDistance < float(m_dwSkillRangeReserved))
 				{
-					// ���� ���� Target �� �ٲ�� ���� ���� �ִ� - [levites]
+					// 접근 도중 Target 이 바뀌어 있을 수도 있다 - [levites]
 					SetTarget(m_dwVIDReserved);
 					if (__UseSkill(m_dwSkillSlotIndexReserved))
 						__ClearReservedAction();
diff --git a/src/UserInterface/PythonPlayerModule.cpp b/src/UserInterface/PythonPlayerModule.cpp
index 790e5973..f20dd23d 100644
--- a/src/UserInterface/PythonPlayerModule.cpp
+++ b/src/UserInterface/PythonPlayerModule.cpp
@@ -24,7 +24,7 @@ enum
 	EMOTION_DANCE_3,
 	EMOTION_DANCE_4,
 	EMOTION_DANCE_5,
-	EMOTION_DANCE_6,		// ������Ÿ��
+	EMOTION_DANCE_6,		// 강남스타일
 	EMOTION_CONGRATULATION,
 	EMOTION_FORGIVE,
 	EMOTION_ANGRY,
@@ -57,7 +57,7 @@ public:
 	{
 		static TGradeUnit beltGradeByLevelTable[] = 
 		{
-			0,			// ��Ʈ+0
+			0,			// 벨트+0
 			1,			// +1
 			1,			// +2
 			2,			// +3
@@ -72,20 +72,20 @@ public:
 		return beltGradeByLevelTable[refineLevel];
 	}
 
-	// ���� ��Ʈ ������ ��������, � ������ �̿��� �� �ִ��� ����
+	// 현재 벨트 레벨을 기준으로, 어떤 셀들을 이용할 수 있는지 리턴
 	static const TGradeUnit* GetAvailableRuleTableByGrade()
 	{
 		/**
-			��Ʈ�� �� +0 ~ +9 ������ ���� �� ������, ������ ���� 7�ܰ� ������� ���еǾ� �κ��丮�� Ȱ�� ȭ �ȴ�.
-			��Ʈ ������ ���� ��� ������ ���� �Ʒ� �׸��� ����. ���� ��� >= Ȱ������ ����̸� ��� ����.
-			(��, ���� ������ 0�̸� ������ ��� �Ұ�, ��ȣ ���� ���ڴ� ���)
+			벨트는 총 +0 ~ +9 레벨을 가질 수 있으며, 레벨에 따라 7단계 등급으로 구분되어 인벤토리가 활성 화 된다.
+			벨트 레벨에 따른 사용 가능한 셀은 아래 그림과 같음. 현재 등급 >= 활성가능 등급이면 사용 가능.
+			(단, 현재 레벨이 0이면 무조건 사용 불가, 괄호 안의 숫자는 등급)
 			
 				2(1)  4(2)  6(4)  8(6)
 				5(3)  5(3)  6(4)  8(6)
 				7(5)  7(5)  7(5)  8(6)
 				9(7)  9(7)  9(7)  9(7)
 
-			��Ʈ �κ��丮�� ũ��� 4x4 (16ĭ)
+			벨트 인벤토리의 크기는 4x4 (16칸)
 		*/
 
 		static TGradeUnit availableRuleByGrade[c_Belt_Inventory_Slot_Count] = {
@@ -100,7 +100,7 @@ public:
 
 	static bool IsAvailableCell(WORD cell, int beltGrade /*int beltLevel*/)
 	{
-		// ��ȹ �� �ٲ�.. �Ƴ�...
+		// 기획 또 바뀜.. 아놔...
 		//const TGradeUnit beltGrade = GetBeltGradeByRefineLevel(beltLevel);		
 		const TGradeUnit* ruleTable = GetAvailableRuleTableByGrade();
 
@@ -2077,7 +2077,7 @@ PyObject * playerSlotTypeToInvenType(PyObject* poSelf, PyObject* poArgs)
 }
 
 #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
-// �÷��̾ ��Ʈ�� ���� ������?
+// 플레이어가 벨트를 착용 중인지?
 PyObject * playerIsEquippingBelt(PyObject* poSelf, PyObject* poArgs)
 {
 	const CPythonPlayer* player = CPythonPlayer::InstancePtr();
@@ -2092,7 +2092,7 @@ PyObject * playerIsEquippingBelt(PyObject* poSelf, PyObject* poArgs)
 	
 }
 
-// �˻��Ϸ��� ��Ʈ �κ��丮 Cell�� ��� ������ ĭ����? (��밡�� ���δ� ���� ���� ��Ʈ�� ��ȭ ������ ���� �޶���)
+// 검사하려는 벨트 인벤토리 Cell이 사용 가능한 칸인지? (사용가능 여부는 착용 중인 벨트의 강화 정도에 따라 달라짐)
 PyObject * playerIsAvailableBeltInventoryCell(PyObject* poSelf, PyObject* poArgs)
 {
 	const CPythonPlayer* player = CPythonPlayer::InstancePtr();
@@ -2116,7 +2116,7 @@ PyObject * playerIsAvailableBeltInventoryCell(PyObject* poSelf, PyObject* poArgs
 #endif
 
 
-// ��ȥ�� ��ȭ
+// 용혼석 강화
 PyObject* playerSendDragonSoulRefine(PyObject* poSelf, PyObject* poArgs)
 {
 	BYTE bSubHeader;
@@ -2528,7 +2528,7 @@ void initPlayer()
 	PyModule_AddIntConstant(poModule, "EMOTION_DANCE_3",		EMOTION_DANCE_3);
 	PyModule_AddIntConstant(poModule, "EMOTION_DANCE_4",		EMOTION_DANCE_4);
 	PyModule_AddIntConstant(poModule, "EMOTION_DANCE_5",		EMOTION_DANCE_5);
-	PyModule_AddIntConstant(poModule, "EMOTION_DANCE_6",		EMOTION_DANCE_6);				// PSY ������Ÿ��
+	PyModule_AddIntConstant(poModule, "EMOTION_DANCE_6",		EMOTION_DANCE_6);				// PSY 강남스타일
 	PyModule_AddIntConstant(poModule, "EMOTION_CONGRATULATION",	EMOTION_CONGRATULATION);
 	PyModule_AddIntConstant(poModule, "EMOTION_FORGIVE",		EMOTION_FORGIVE);
 	PyModule_AddIntConstant(poModule, "EMOTION_ANGRY",			EMOTION_ANGRY);
@@ -2543,11 +2543,11 @@ void initPlayer()
 	PyModule_AddIntConstant(poModule, "EMOTION_FRENCH_KISS",	EMOTION_FRENCH_KISS);
 	PyModule_AddIntConstant(poModule, "EMOTION_SLAP",			EMOTION_SLAP);
 
-	//// �ڵ����� Ÿ��
+	//// 자동물약 타입
 	PyModule_AddIntConstant(poModule, "AUTO_POTION_TYPE_HP",	CPythonPlayer::AUTO_POTION_TYPE_HP);
 	PyModule_AddIntConstant(poModule, "AUTO_POTION_TYPE_SP",	CPythonPlayer::AUTO_POTION_TYPE_SP);
 
-	// ��ȥ��
+	// 용혼석
 	PyModule_AddIntConstant(poModule, "DRAGON_SOUL_PAGE_SIZE",	c_DragonSoul_Inventory_Box_Size);
 	PyModule_AddIntConstant(poModule, "DRAGON_SOUL_PAGE_COUNT",	DRAGON_SOUL_GRADE_MAX);
 	PyModule_AddIntConstant(poModule, "DRAGON_SOUL_SLOT_COUNT",	c_DragonSoul_Inventory_Count);
@@ -2555,7 +2555,7 @@ void initPlayer()
 	PyModule_AddIntConstant(poModule, "DRAGON_SOUL_EQUIPMENT_PAGE_COUNT",	DS_DECK_MAX_NUM);
 	PyModule_AddIntConstant(poModule, "DRAGON_SOUL_EQUIPMENT_FIRST_SIZE",	c_DragonSoul_Equip_Slot_Max);
 
-	// ��ȥ�� ����â
+	// 용혼석 개량창
 	PyModule_AddIntConstant(poModule, "DRAGON_SOUL_REFINE_CLOSE",	DS_SUB_HEADER_CLOSE);
 	PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_DO_UPGRADE",	DS_SUB_HEADER_DO_UPGRADE);
 	PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_DO_IMPROVEMENT",	DS_SUB_HEADER_DO_IMPROVEMENT);
diff --git a/src/UserInterface/PythonPlayerSkill.cpp b/src/UserInterface/PythonPlayerSkill.cpp
index bbc6bea0..2d1c8750 100644
--- a/src/UserInterface/PythonPlayerSkill.cpp
+++ b/src/UserInterface/PythonPlayerSkill.cpp
@@ -38,7 +38,7 @@ void CPythonPlayer::SetAffect(UINT uAffect)
 
 void CPythonPlayer::ResetAffect(UINT uAffect)
 {
-	// 2004.07.17.myevan.��ų �ƴ� ����Ʈ�� �� ������� ���� 
+	// 2004.07.17.myevan.스킬 아닌 이펙트가 안 사라지는 문제 
 	PyCallClassMemberFunc(m_ppyGameWindow, "ResetAffect", Py_BuildValue("(i)", uAffect));
 
 	DWORD dwSkillIndex;
@@ -196,8 +196,8 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex)
 		}
 	}
 
-	// 2004.07.26.levites - �������뿡�� ���� ���ϵ��� ����
-	// NOTE : ���� ��ų�� �������뿡�� ������� ���մϴ� - [levites]
+	// 2004.07.26.levites - 안전지대에서 공격 못하도록 수정
+	// NOTE : 공격 스킬은 안전지대에서 사용하지 못합니다 - [levites]
 	if (pSkillData->IsAttackSkill())
 	{
 		if (pkInstMain->IsInSafe())
@@ -208,13 +208,13 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex)
 		}
 	}	
 
-	// NOTE : �нú� ��ų�� ������� ���մϴ� - [levites]
+	// NOTE : 패시브 스킬은 사용하지 못합니다 - [levites]
 	if (!pSkillData->IsCanUseSkill())
 		return false;
 //	if (CPythonSkill::SKILL_TYPE_PASSIVE == pSkillData->byType)
 //		return false;
 
-	// NOTE : [Only Assassin] ���� �ִ��� üũ �մϴ�.
+	// NOTE : [Only Assassin] 빈병이 있는지 체크 합니다.
 	if (pSkillData->IsNeedEmptyBottle())
 	{
 		if (!__HasItem(27995))
@@ -224,7 +224,7 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex)
 		}
 	}
 
-	// NOTE : [Only Assassin] ������ �ִ��� üũ �մϴ�.
+	// NOTE : [Only Assassin] 독병이 있는지 체크 합니다.
 	if (pSkillData->IsNeedPoisonBottle())
 	{
 		if (!__HasItem(27996))
@@ -234,14 +234,14 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex)
 		}
 	}
 
-	// NOTE : ���� ���϶��� ��ų�� ������� ���մϴ�.
+	// NOTE : 낚시 중일때는 스킬을 사용하지 못합니다.
 	if (pkInstMain->IsFishingMode())
 	{
 		PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotUseSkill", Py_BuildValue("(is)", GetMainCharacterIndex(), "REMOVE_FISHING_ROD"));
 		return false;
 	}
 
-	// NOTE : ���� üũ
+	// NOTE : 레벨 체크
 	if (m_sysIsLevelLimit)
 	{
 		if (rkSkillInst.iLevel <= 0)
@@ -251,19 +251,19 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex)
 		}
 	}
 
-	// NOTE : ��� �ִ� ���� üũ
+	// NOTE : 들고 있는 무기 체크
 	if (!pSkillData->CanUseWeaponType(pkInstMain->GetWeaponType()))
 	{
 		PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotUseSkill", Py_BuildValue("(is)", GetMainCharacterIndex(), "NOT_MATCHABLE_WEAPON"));
 		return false;
 	}
 
-	if (!pSkillData->IsHorseSkill()) // HORSE ��ų �߿� ȭ���� ���� �ʴ� ��ų�� �ֱ� ������
+	if (!pSkillData->IsHorseSkill()) // HORSE 스킬 중에 화살을 쓰지 않는 스킬이 있기 때문에
 	{
 		if (__CheckShortArrow(rkSkillInst, *pSkillData))
 			return false;
 
-		// NOTE : Ȱ�� �ʿ��� ��� ȭ�� ���� üũ
+		// NOTE : 활이 필요할 경우 화살 개수 체크
 		if (pSkillData->IsNeedBow())
 		{
 			if (!__HasEnoughArrow())
@@ -326,7 +326,7 @@ bool CPythonPlayer::__CheckShortMana(TSkillInstance& rkSkillInst, CPythonSkill::
 	int iNeedSP = rkSkillData.GetNeedSP(rkSkillInst.fcurEfficientPercentage);
 	int icurSP = GetStatus(POINT_SP);
 
-	// NOTE : ToggleSkill �� �ƴѵ� �Ҹ� SP �� 0 �̴�.
+	// NOTE : ToggleSkill 이 아닌데 소모 SP 가 0 이다.
 	if (!rkSkillData.IsToggleSkill())
 	{
 		if (iNeedSP == 0)
@@ -400,13 +400,13 @@ bool CPythonPlayer::__ProcessEnemySkillTargetRange(CInstanceBase& rkInstMain, CI
 	if (fSkillTargetRange <= 0.0f)
 		return true;
 
-	// #0000806: [M2EU] ���濡�� ����(���ѱ�) źȯ�� ��ų ��� �ȵ�	
+	// #0000806: [M2EU] 수룡에게 무사(나한군) 탄환격 스킬 사용 안됨	
 	float fTargetDistance = rkInstMain.GetDistance(&rkInstTarget);
 
 	extern bool IS_HUGE_RACE(unsigned int vnum);
 	if (IS_HUGE_RACE(rkInstTarget.GetRace()))
 	{
-		fTargetDistance -= 200.0f; // TEMP: �ϴ� �ϵ� �ڵ� ó��. ���������δ� �ٿ�� ���Ǿ �����ؾ���
+		fTargetDistance -= 200.0f; // TEMP: 일단 하드 코딩 처리. 정석적으로는 바운드 스피어를 고려해야함
 	}
 
 	if (fTargetDistance >= fSkillTargetRange)
@@ -422,7 +422,7 @@ bool CPythonPlayer::__ProcessEnemySkillTargetRange(CInstanceBase& rkInstMain, CI
 		return false;
 	}
 
-	// 2004.07.05.myevan. �ý�ź�� ���� �ʿ� ����. ����ϱ��� ���� �ִ°� üũ
+	// 2004.07.05.myevan. 궁신탄영 사용시 맵에 끼임. 사용하기전 갈수 있는곳 체크
 	TPixelPosition kPPosTarget;
 	rkInstTarget.NEW_GetPixelPosition(&kPPosTarget);
 
@@ -446,8 +446,8 @@ bool CPythonPlayer::__CanUseSkill()
 		return false;
 
 	// Fix me
-	// ������Ʈ. �¸���ų���� 20 �̸��� ���, ���� ����Ʈ�� Ÿ�� �¸� ���� ��ų �� ������ ���ϵ��� �ϵ� �ڵ�... 
-	// ���߿� �ð� ���� can use skill üũ�� �������� ������...
+	// 뉴마운트. 승마스킬레벨 20 미만인 경우, 고급 마운트를 타고 승마 관련 스킬 못 쓰도록 못하도록 하드 코딩... 
+	// 나중에 시간 나면 can use skill 체크를 서버에서 해주자...
 	if (pkInstMain->IsMountingHorse() && (GetSkillGrade(109) < 1 && GetSkillLevel(109) < 20))
 	{
 		return false;
@@ -518,7 +518,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 
 	CInstanceBase * pkInstTarget = NULL;
 
-	// NOTE : Ÿ���� �ʿ��� ���
+	// NOTE : 타겟이 필요한 경우
 	if (pSkillData->IsNeedTarget() ||
 		pSkillData->CanChangeDirection() ||
 		pSkillData->IsAutoSearchTarget())
@@ -528,13 +528,13 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 		else
 			pkInstTarget=__GetAliveTargetInstancePtr();
 
-		// ���� Ÿ���� ������..
+		// 현재 타겟이 없으면..
 		if (!pkInstTarget)
 		{
-			// ������Ʈ�ϰ�..
+			// 업데이트하고..
 			__ChangeTargetToPickedInstance();
 
-			// �ٽ� ����.
+			// 다시 얻어낸다.
 			if (pSkillData->IsNeedCorpse())
 				pkInstTarget=__GetDeadTargetInstancePtr();
 			else
@@ -676,7 +676,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 		}
 	}
 
-	// ���ݼ� ó��
+	// 관격술 처리
 	DWORD dwTargetMaxCount = pSkillData->GetTargetCount(rkSkillInst.fcurEfficientPercentage);
 	DWORD dwRange = __GetSkillTargetRange(*pSkillData);
 	if (dwTargetMaxCount>0 && pkInstTarget)
@@ -748,7 +748,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 	}
 
 	/////
-	// NOTE : �ָ��� ���� Ŭ���س��� ��ų�� ���� ��ų�� ���� �ٷ� ���� �����ϴ� ������ �����ϱ� ���� �ڵ� - [levites]
+	// NOTE : 멀리서 적을 클릭해놓고 스킬을 쓰면 스킬을 쓴뒤 바로 적을 공격하는 문제를 수정하기 위한 코드 - [levites]
 	__ClearReservedAction();
 	/////
 
diff --git a/src/UserInterface/PythonQuest.cpp b/src/UserInterface/PythonQuest.cpp
index 174d6838..1cf1f747 100644
--- a/src/UserInterface/PythonQuest.cpp
+++ b/src/UserInterface/PythonQuest.cpp
@@ -196,7 +196,7 @@ PyObject * questGetQuestData(PyObject * poSelf, PyObject * poArgs)
 	else
 	{
 		{
-			// ������� ��� ����Ʈ �̹����� �ִ´�.
+			// 비어있을 경우 디폴트 이미지를 넣는다.
 			std::string strIconFileName = "season1/icon/scroll_open.tga";
 			pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str());
 		}
@@ -238,7 +238,7 @@ PyObject * questGetQuestLastTime(PyObject * poSelf, PyObject * poArgs)
 		iLastTime = (pQuestInstance->iStartTime + pQuestInstance->iClockValue) - int(CTimer::Instance().GetCurrentSecond());
 	}
 
-	// �ð� ���� ó�� �ڵ�
+	// 시간 증가 처리 코드
 //	else
 //	{
 //		iLastTime = int(CTimer::Instance().GetCurrentSecond()) - pQuestInstance->iStartTime;
diff --git a/src/UserInterface/PythonSkill.cpp b/src/UserInterface/PythonSkill.cpp
index d2b98b9e..9e8906d3 100644
--- a/src/UserInterface/PythonSkill.cpp
+++ b/src/UserInterface/PythonSkill.cpp
@@ -50,7 +50,7 @@ int SplitLine(const char * c_szText, CTokenVector* pstTokenVector, const char *
 
 		pstTokenVector->push_back(stLine.substr(beginPos, endPos - beginPos));
 
-		// �߰� �ڵ�. �ǵڿ� ���� �ִ� ��츦 üũ�Ѵ�. - [levites]
+		// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
 		if (int(stLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
 			break;
 	} while (basePos < stLine.length());
@@ -226,7 +226,7 @@ bool CPythonSkill::RegisterSkillTable(const char * c_szFileName)
 								
 				switch (iVnum)
 				{
-					case 1: // �↓��
+					case 1: // 삼연참
 						affect.strAffectMinFormula += "* 3";
 						affect.strAffectMaxFormula += "* 3";
 						break;					
@@ -405,7 +405,7 @@ bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName)
 			const std::string & c_rstrJob = TokenVector[DESC_TOKEN_TYPE_JOB];
 			const std::string & c_rstrIconName = TokenVector[DESC_TOKEN_TYPE_ICON_NAME];
 
-			// NOTE : Support ��ų�ӿ��� 3�ܰ踦 �����ؾ� �ؼ� ���� ó�� - [levites]
+			// NOTE : Support 스킬임에도 3단계를 지원해야 해서 예외 처리 - [levites]
 			if (c_iSkillIndex_Riding == iSkillIndex)
 			{
 				char szIconFileNameHeader[64+1];
@@ -1231,7 +1231,7 @@ bool CPythonSkill::SSkillData::GetState(const char * c_szStateName, int * piStat
 	{
 		*piState = 0;
 
-		// ������ �ӽ� ����
+		// 증지술 임시 제외
 /*
 		if (0 != ms_dwTimeIncreaseSkillNumber)
 		{
@@ -1307,7 +1307,7 @@ const char * CPythonSkill::SSkillData::GetAffectDescription(DWORD dwIndex, float
 
 	if (CP_ARABIC == ::GetDefaultCodePage())
 	{
-		// #0000870: [M2AE] �ѱ��� ����϶� Ư�� �ƶ��� ���忡�� ũ���� �߻� 
+		// #0000870: [M2AE] 한국어 모드일때 특정 아랍어 문장에서 크래쉬 발생 
 		static std::string strDescription;
 		strDescription = c_rstrAffectDescription;
 		int first = strDescription.find("%.0f");
@@ -1990,7 +1990,7 @@ PyObject * skillIsLevelUpSkill(PyObject * poSelf, PyObject * poArgs)
 	if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData))
 		return Py_BuildException("skill.IsLevelUpSkill - Failed to find skill by %d", iSkillIndex);
 
-	// ��� ������ ����
+	// 모두 레벨업 가능
 
 	return Py_BuildValue("i", TRUE);
 }
@@ -2016,7 +2016,7 @@ PyObject * skillGetIconImage(PyObject * poSelf, PyObject * poArgs)
 
 	CPythonSkill::SSkillData * c_pSkillData;
 	if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData))
-		return Py_BuildValue("i", 0);	// �ͼ����� ���� ��� 0�� �����Ѵ�.
+		return Py_BuildValue("i", 0);	// 익셉션을 내는 대신 0을 리턴한다.
 
 	return Py_BuildValue("i", c_pSkillData->pImage);
 }
@@ -2051,7 +2051,7 @@ PyObject * skillGetIconImageNew(PyObject * poSelf, PyObject * poArgs)
 
 	CPythonSkill::SSkillData * c_pSkillData;
 	if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData))
-		return Py_BuildValue("i", 0);	// �ͼ����� ���� ��� 0�� �����Ѵ�.
+		return Py_BuildValue("i", 0);	// 익셉션을 내는 대신 0을 리턴한다.
 
 	if (iGradeIndex < 0)
 		iGradeIndex = 0;
diff --git a/src/UserInterface/PythonSystem.cpp b/src/UserInterface/PythonSystem.cpp
index ce02a8a3..3c8b86da 100644
--- a/src/UserInterface/PythonSystem.cpp
+++ b/src/UserInterface/PythonSystem.cpp
@@ -6,8 +6,8 @@
 
 void CPythonSystem::SetInterfaceHandler(PyObject * poHandler)
 {
-// NOTE : ���۷��� ī��Ʈ�� �ٲ��� �ʴ´�. ���۷����� ���� �־� Python���� ������ �������� �ʱ� ����.
-//        ��ſ� __del__�� Destroy�� ȣ���� Handler�� NULL�� �����Ѵ�. - [levites]
+// NOTE : 레퍼런스 카운트는 바꾸지 않는다. 레퍼런스가 남아 있어 Python에서 완전히 지워지지 않기 때문.
+//        대신에 __del__때 Destroy를 호출해 Handler를 NULL로 셋팅한다. - [levites]
 //	if (m_poInterfaceHandler)
 //		Py_DECREF(m_poInterfaceHandler);
 
@@ -44,7 +44,7 @@ void CPythonSystem::GetDisplaySettings()
 	lpD3D->GetAdapterIdentifier(D3DADAPTER_DEFAULT, D3DENUM_WHQL_LEVEL, &d3dAdapterIdentifier);
 	lpD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddmDesktop);
 
-	// �� ��Ͱ� ������ �ִ� ���÷��� ��尹���� �����Ѵ�..
+	// 이 어뎁터가 가지고 있는 디스플래이 모드갯수를 나열한다..
 	DWORD dwNumAdapterModes = lpD3D->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_UNKNOWN);
 
 	for (UINT iMode = 0; iMode < dwNumAdapterModes; iMode++)
@@ -53,12 +53,12 @@ void CPythonSystem::GetDisplaySettings()
 		lpD3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_UNKNOWN, iMode, &DisplayMode);
 		DWORD bpp = 0;
 
-		// 800 600 �̻� �ɷ�����.
+		// 800 600 이상만 걸러낸다.
 		if (DisplayMode.Width < 800 || DisplayMode.Height < 600)
 			continue;
 
-		// �ϴ� 16bbp �� 32bbp�� �������.
-		// 16bbp�� ó���ϰԲ� ���� - [levites]
+		// 일단 16bbp 와 32bbp만 취급하자.
+		// 16bbp만 처리하게끔 했음 - [levites]
 		if (DisplayMode.Format == D3DFMT_R5G6B5)
 			bpp = 16;
 		else if (DisplayMode.Format == D3DFMT_X8R8G8B8)
@@ -77,7 +77,7 @@ void CPythonSystem::GetDisplaySettings()
 
 			int check_fre = false;
 
-			// �������ø� �ٸ��Ƿ� �������ø� �������ش�.
+			// 프리퀀시만 다르므로 프리퀀시만 셋팅해준다.
 			for (int j = 0; j < m_ResolutionList[i].frequency_count; ++j)
 			{
 				if (m_ResolutionList[i].frequency[j] == DisplayMode.RefreshRate)
@@ -96,7 +96,7 @@ void CPythonSystem::GetDisplaySettings()
 
 		if (!check_res)
 		{
-			// ���ο� �Ŵϱ� �߰�������.
+			// 새로운 거니까 추가해주자.
 			if (m_ResolutionCount < RESOLUTION_MAX_NUM)
 			{
 				m_ResolutionList[m_ResolutionCount].width			= DisplayMode.Width;
@@ -586,7 +586,7 @@ const CPythonSystem::TWindowStatus & CPythonSystem::GetWindowStatusReference(int
 	return m_WindowStatus[iIndex];
 }
 
-void CPythonSystem::ApplyConfig() // ���� ������ ���� ������ ���ؼ� �ٲ� ������ ���� �Ѵ�.
+void CPythonSystem::ApplyConfig() // 이전 설정과 현재 설정을 비교해서 바뀐 설정을 적용 한다.
 {
 	if (m_OldConfig.gamma != m_Config.gamma)
 	{
diff --git a/src/UserInterface/PythonTextTail.cpp b/src/UserInterface/PythonTextTail.cpp
index 86a5c3c8..b05ab052 100644
--- a/src/UserInterface/PythonTextTail.cpp
+++ b/src/UserInterface/PythonTextTail.cpp
@@ -1,5 +1,5 @@
 //
-// ij���͸� ����ٴϴ� �ؽ�Ʈ ���� �ҽ� (�̸�, ����̸�, ��帶ũ ��)
+// 캐릭터를 따라다니는 텍스트 관련 소스 (이름, 길드이름, 길드마크 등)
 //
 #include "stdafx.h"
 #include "InstanceBase.h"
@@ -75,7 +75,7 @@ void CPythonTextTail::UpdateAllTextTail()
 		{
 			UpdateDistance(pixelPos, itorChat->second);
 
-			// NOTE : Chat TextTail�� ������ ij���� �̸��� ����Ѵ�.
+			// NOTE : Chat TextTail이 있으면 캐릭터 이름도 출력한다.
 			if (itorChat->second->bNameFlag)
 			{
 				DWORD dwVID = itorChat->first;
@@ -104,7 +104,7 @@ void CPythonTextTail::UpdateShowingTextTail()
 		TTextTail * pTextTail = *itor;
 		UpdateTextTail(pTextTail);
 
-		// NOTE : Chat TextTail�� ���� ��� ��ġ�� �ٲ۴�.
+		// NOTE : Chat TextTail이 있을 경우 위치를 바꾼다.
 		TChatTailMap::iterator itor = m_ChatTailMap.find(pTextTail->dwVirtualID);
 		if (m_ChatTailMap.end() != itor)
 		{
@@ -138,7 +138,7 @@ void CPythonTextTail::UpdateTextTail(TTextTail * pTextTail)
 	pTextTail->x = floorf(pTextTail->x);
 	pTextTail->y = floorf(pTextTail->y);
 
-	// NOTE : 13m �ۿ� �������� ���̸� �ֽ��ϴ� - [levites]
+	// NOTE : 13m 밖에 있을때만 깊이를 넣습니다 - [levites]
 	if (pTextTail->fDistanceFromPlayer < 1300.0f)
 	{
 		pTextTail->z = 0.0f;
@@ -215,7 +215,7 @@ void CPythonTextTail::ArrangeTextTail()
 
 		float fxAdd = 0.0f;
 
-		// Mark ��ġ ������Ʈ
+		// Mark 위치 업데이트
 		CGraphicMarkInstance * pMarkInstance = pTextTail->pMarkInstance;
 		CGraphicTextInstance * pGuildNameInstance = pTextTail->pGuildNameTextInstance;
 		if (pMarkInstance && pGuildNameInstance)
@@ -232,7 +232,7 @@ void CPythonTextTail::ArrangeTextTail()
 		int iNameWidth, iNameHeight;
 		pTextTail->pTextInstance->GetTextSize(&iNameWidth, &iNameHeight);
 
-		// Title ��ġ ������Ʈ
+		// Title 위치 업데이트
 		CGraphicTextInstance * pTitle = pTextTail->pTitleTextInstance;
 		if (pTitle)
 		{			
@@ -241,7 +241,7 @@ void CPythonTextTail::ArrangeTextTail()
 
 			fxAdd = 8.0f;
 
-			if (LocaleService_IsEUROPE()) // ���Ͼ�� ��Ī�� ��� ��������
+			if (LocaleService_IsEUROPE()) // 독일어는 명칭이 길어 오른정렬
 			{
 				if( GetDefaultCodePage() == CP_ARABIC )
 				{
@@ -258,14 +258,14 @@ void CPythonTextTail::ArrangeTextTail()
 			}			
 			pTitle->Update();
 
-			// Level ��ġ ������Ʈ
+			// Level 위치 업데이트
 			CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance;
 			if (pLevel)
 			{
 				int iLevelWidth, iLevelHeight;
 				pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
 				
-				if (LocaleService_IsEUROPE()) // ���Ͼ�� ��Ī�� ��� ��������
+				if (LocaleService_IsEUROPE()) // 독일어는 명칭이 길어 오른정렬
 				{
 					if( GetDefaultCodePage() == CP_ARABIC )
 					{
@@ -288,14 +288,14 @@ void CPythonTextTail::ArrangeTextTail()
 		{
 			fxAdd = 4.0f;
 
-			// Level ��ġ ������Ʈ
+			// Level 위치 업데이트
 			CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance;
 			if (pLevel)
 			{
 				int iLevelWidth, iLevelHeight;
 				pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
 				
-				if (LocaleService_IsEUROPE()) // ���Ͼ�� ��Ī�� ��� ��������
+				if (LocaleService_IsEUROPE()) // 독일어는 명칭이 길어 오른정렬
 				{
 					if( GetDefaultCodePage() == CP_ARABIC )
 					{
@@ -382,7 +382,7 @@ void CPythonTextTail::Render()
 
 void CPythonTextTail::RenderTextTailBox(TTextTail * pTextTail)
 {
-	// ������ �׵θ�
+	// 검은색 테두리
 	CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 1.0f);
 	CPythonGraphic::Instance().RenderBox2d(pTextTail->x + pTextTail->xStart,
 										   pTextTail->y + pTextTail->yStart,
@@ -390,7 +390,7 @@ void CPythonTextTail::RenderTextTailBox(TTextTail * pTextTail)
 										   pTextTail->y + pTextTail->yEnd,
 										   pTextTail->z);
 
-	// ������ �����ڽ�
+	// 검은색 투명박스
 	CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f);
 	CPythonGraphic::Instance().RenderBar2d(pTextTail->x + pTextTail->xStart,
 										   pTextTail->y + pTextTail->yStart,
@@ -406,8 +406,8 @@ void CPythonTextTail::RenderTextTailName(TTextTail * pTextTail)
 
 void CPythonTextTail::HideAllTextTail()
 {
-	// NOTE : Show All�� ���ص� Hide All�� ������ ������ ���� �߻� ���ɼ� ����
-	//        ������ ��ü�� �׷��� ����ϰ� ���� �ʾ��� - [levites]
+	// NOTE : Show All을 해준뒤 Hide All을 해주지 않으면 문제 발생 가능성 있음
+	//        디자인 자체가 그렇게 깔끔하게 되지 않았음 - [levites]
 	m_CharacterTextTailList.clear();
 	m_ItemTextTailList.clear();
 }
@@ -451,8 +451,8 @@ void CPythonTextTail::ShowCharacterTextTail(DWORD VirtualID)
 		return;
 	}
 
-	// NOTE : ShowAll �ÿ��� ��� Instance �� Pointer �� ã�Ƽ� üũ�ϹǷ� ���ϰ� �ɸ� ���ɼ��� �ִ�.
-	//        CInstanceBase �� TextTail �� ���� ������ �ִ� ���� ���� ���� ������ ��..
+	// NOTE : ShowAll 시에는 모든 Instance 의 Pointer 를 찾아서 체크하므로 부하가 걸릴 가능성도 있다.
+	//        CInstanceBase 가 TextTail 을 직접 가지고 있는 것이 가장 좋은 형태일 듯..
 	if (!pTextTail->pOwner->isShow())
 		return;
 	
diff --git a/src/UserInterface/UserInterface.cpp b/src/UserInterface/UserInterface.cpp
index b3e0a999..2a6aee3a 100644
--- a/src/UserInterface/UserInterface.cpp
+++ b/src/UserInterface/UserInterface.cpp
@@ -262,7 +262,7 @@ bool PackInitialize(const char * c_pszFolder)
 	CEterPackManager::Instance().SetCacheMode();
 	CEterPackManager::Instance().SetSearchMode(bPackFirst);
 
-	CSoundData::SetPackMode(); // Miles ���� �ݹ��� ����
+	CSoundData::SetPackMode(); // Miles 파일 콜백을 셋팅
 
 	std::string strPackName, strTexCachePackName;
 	for (DWORD i = 1; i < TextLoader.GetLineCount() - 1; i += 2)
@@ -353,7 +353,7 @@ bool RunMainScript(CPythonLauncher& pyLauncher, const char* lpCmdLine)
 		SplitLine(lpCmdLine,seperator,&stVec);
 		if (CmdSize == stVec.size() && stVec[0]==loginMark)
 		{
-			char buf[MAX_PATH];	//TODO �Ʒ� �Լ� string ���·� ����
+			char buf[MAX_PATH];	//TODO 아래 함수 string 형태로 수정
 			base64_decode(stVec[2].c_str(),buf);
 			stVec[2] = buf;
 			string_join(seperator,stVec,&stCmdLine);
@@ -462,12 +462,12 @@ bool Main(HINSTANCE hInstance, LPSTR lpCmdLine)
 
 		if (pyLauncher.Create())
 		{
-			ret=RunMainScript(pyLauncher, lpCmdLine);	//���� �����߿� �Լ��� ������ �ʴ´�.
+			ret=RunMainScript(pyLauncher, lpCmdLine);	//게임 실행중엔 함수가 끝나지 않는다.
 		}
 
 		//ProcessScanner_ReleaseQuitEvent();
 		
-		//���� �����.
+		//게임 종료시.
 		app->Clear();
 
 		timeEndPeriod(1);
@@ -538,14 +538,14 @@ bool __IsLocaleVersion(LPSTR lpCmdLine)
 }
 
 #ifdef USE_OPENID
-//2012.07.16 ����
-//�Ϻ� OpenID ����. ����Ű ���� �߰�
+//2012.07.16 김용욱
+//일본 OpenID 지원. 인증키 인자 추가
 bool __IsOpenIDAuthKeyOption(LPSTR lpCmdLine)
 {
 	return (strcmp(lpCmdLine, "--openid-authkey") == 0);
 }
 
-bool __IsOpenIDTestOption(LPSTR lpCmdLine) //Ŭ���̾�Ʈ���� �α����� �����ϴ�.
+bool __IsOpenIDTestOption(LPSTR lpCmdLine) //클라이언트에서 로그인이 가능하다.
 {
 	return (strcmp(lpCmdLine, "--openid-test") == 0);
 }
@@ -567,14 +567,14 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 	SetDefaultCodePage(LocaleService_GetCodePage());	
 
 	bool bQuit = false;
-	bool bAuthKeyChecked = false;	//OpenID �������� ����Ű�� ���Դ��� �˱� ���� ����.
+	bool bAuthKeyChecked = false;	//OpenID 버전에서 인증키가 들어왔는지 알기 위한 인자.
 	int nArgc = 0;
 	PCHAR* szArgv = CommandLineToArgv( lpCmdLine, &nArgc );
 
 	for( int i=0; i < nArgc; i++ ) {
 		if(szArgv[i] == 0)
 			continue;
-		if (__IsLocaleVersion(szArgv[i])) // #0000829: [M2EU] ���� ������ �׻� ������ �ʵ��� ���� 
+		if (__IsLocaleVersion(szArgv[i])) // #0000829: [M2EU] 버전 파일이 항상 생기지 않도록 수정 
 		{
 			char szModuleName[MAX_PATH];
 			char szVersionPath[MAX_PATH];
@@ -601,7 +601,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 			bQuit = true;
 		} else if ((strcmp(szArgv[i], "--force-set-locale") == 0))
 		{
-			// locale ������ ���ڰ� �� �� �� �ʿ��� (������ ��Ī, ������ ���)
+			// locale 설정엔 인자가 두 개 더 필요함 (로케일 명칭, 데이터 경로)
 			if (nArgc <= i + 2)
 			{
 				MessageBox(NULL, "Invalid arguments", ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP);
@@ -614,9 +614,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 			LocaleService_ForceSetLocale(localeName, localePath);
 		}
 #ifdef USE_OPENID
-		else if (__IsOpenIDAuthKeyOption(szArgv[i]))	//2012.07.16 OpenID : ����
+		else if (__IsOpenIDAuthKeyOption(szArgv[i]))	//2012.07.16 OpenID : 김용욱
 		{
-			// ����Ű ������ ���ڰ� �� �� �� �ʿ��� (����Ű)
+			// 인증키 설정엔 인자가 한 개 더 필요함 (인증키)
 			if (nArgc <= i + 1)
 			{
 				MessageBox(NULL, "Invalid arguments", ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP);
@@ -626,7 +626,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 			const char* authKey = szArgv[++i];
 
 			//ongoing (2012.07.16)
-			//����Ű �����ϴ� �κ�
+			//인증키 저장하는 부분
 			LocaleService_SetOpenIDAuthKey(authKey);
 
 			bAuthKeyChecked = true;
@@ -641,7 +641,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 
 #ifdef USE_OPENID
 	//OpenID
-	//OpenID Ŭ���̾�Ʈ�� �������Ű�� �޾ƿ��� ���� ��� (���� �����ϰ� ���� ��) Ŭ���̾�Ʈ ����.
+	//OpenID 클라이언트의 경우인증키를 받아오지 않을 경우 (웹을 제외하고 실행 시) 클라이언트 종료.
 	
 	if (false == bAuthKeyChecked && !openid_test)
 	{
@@ -655,7 +655,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 		goto Clean;
 
 #if defined(NEEDED_COMMAND_ARGUMENT)
-	// �ɼ��� ������ ������ �������� ����, ���α׷� ����
+	// 옵션이 없으면 비정상 실행으로 간주, 프로그램 종료
 	if (strstr(lpCmdLine, NEEDED_COMMAND_ARGUMENT) == 0) {
 		MessageBox(NULL, ApplicationStringTable_GetStringz(IDS_ERR_MUST_LAUNCH_FROM_PATCHER, "ERR_MUST_LAUNCH_FROM_PATCHER"), ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP);
 			goto Clean;
@@ -713,7 +713,7 @@ static void GrannyError(granny_log_message_type Type,
 int Setup(LPSTR lpCmdLine)
 {
 	/* 
-	 *	Ÿ�̸� ���е��� �ø���.
+	 *	타이머 정밀도를 올린다.
 	 */
 	TIMECAPS tc; 
 	UINT wTimerRes; 
@@ -725,7 +725,7 @@ int Setup(LPSTR lpCmdLine)
 	timeBeginPeriod(wTimerRes); 
 
 	/*
-	 *	�׷��� ���� �ڵ鸵
+	 *	그래니 에러 핸들링
 	 */
 
 	granny_log_callback Callback;

From 373c184dfe8558c229b71d510a5036728644b0b3 Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Tue, 17 Dec 2024 22:41:21 +0100
Subject: [PATCH 3/8] convert comments in h files to utf8

---
 src/EffectLib/EffectData.h                   |   4 +-
 src/EffectLib/EffectManager.h                |   4 +-
 src/EffectLib/EffectMeshInstance.h           |   2 +-
 src/EffectLib/Type.h                         |   8 +-
 src/EterBase/CPostIt.h                       |  34 +-
 src/EterBase/FileLoader.h                    |   2 +-
 src/EterBase/StdAfx.h                        |   2 +-
 src/EterBase/Utils.h                         |   6 +-
 src/EterBase/lzo.h                           |   6 +-
 src/EterGrnLib/LODController.h               |   2 +-
 src/EterGrnLib/ModelInstance.h               |  16 +-
 src/EterGrnLib/StdAfx.h                      |   2 +-
 src/EterGrnLib/ThingInstance.h               |   2 +-
 src/EterImageLib/Image.h                     |   8 +-
 src/EterLib/AttributeInstance.h              |   2 +-
 src/EterLib/Camera.h                         |  44 +--
 src/EterLib/ColorTransitionHelper.h          |   6 +-
 src/EterLib/Decal.h                          |   6 +-
 src/EterLib/GrpBase.h                        |   6 +-
 src/EterLib/GrpCollisionObject.h             |   4 +-
 src/EterLib/GrpDevice.h                      |   4 +-
 src/EterLib/GrpLightManager.h                |   4 +-
 src/EterLib/LensFlare.h                      |   2 +-
 src/EterLib/ResourceManager.h                |   4 +-
 src/EterLib/SkyBox.h                         |  12 +-
 src/EterLib/StdAfx.h                         |   2 +-
 src/EterLib/Thread.h                         |   4 +-
 src/EterLib/parser.h                         |  20 +-
 src/EterPack/EterPack.h                      |   8 +-
 src/EterPack/EterPackManager.h               |   4 +-
 src/EterPythonLib/PythonSlotWindow.h         |   8 +-
 src/EterPythonLib/PythonWindow.h             |  28 +-
 src/GameLib/ActorInstance.h                  |  72 ++--
 src/GameLib/Area.h                           |   6 +-
 src/GameLib/FlyingInstance.h                 |   8 +-
 src/GameLib/GameEventManager.h               |   6 +-
 src/GameLib/Interface.h                      |   2 +-
 src/GameLib/ItemData.h                       | 150 ++++-----
 src/GameLib/MapBase.h                        |  14 +-
 src/GameLib/MapManager.h                     |  10 +-
 src/GameLib/MapOutdoor.h                     |  22 +-
 src/GameLib/MapType.h                        |   2 +-
 src/GameLib/MonsterAreaInfo.h                |   6 +-
 src/GameLib/PhysicsObject.h                  |   4 +-
 src/GameLib/RaceData.h                       |   4 +-
 src/GameLib/RaceMotionData.h                 |  78 ++---
 src/GameLib/StdAfx.h                         |   2 +-
 src/PRTerrainLib/Terrain.h                   |   4 +-
 src/PRTerrainLib/TextureSet.h                |   2 +-
 src/UserInterface/AccountConnector.h         |   4 +-
 src/UserInterface/GameType.h                 |  36 +-
 src/UserInterface/InstanceBase.h             | 102 +++---
 src/UserInterface/Locale_inc_VI2.h           |   4 +-
 src/UserInterface/MarkImage.h                |  14 +-
 src/UserInterface/MarkManager.h              |   8 +-
 src/UserInterface/MovieMan.h                 |   4 +-
 src/UserInterface/NetworkActorManager.h      |   2 +-
 src/UserInterface/Packet.h                   | 326 +++++++++----------
 src/UserInterface/PythonApplication.h        |  14 +-
 src/UserInterface/PythonExchange.h           |   4 +-
 src/UserInterface/PythonItem.h               |   6 +-
 src/UserInterface/PythonMiniMap.h            |   8 +-
 src/UserInterface/PythonNetworkStream.h      |  16 +-
 src/UserInterface/PythonNonPlayer.h          |   2 +-
 src/UserInterface/PythonPlayer.h             |  30 +-
 src/UserInterface/PythonPlayerEventHandler.h |   6 +-
 src/UserInterface/PythonShop.h               |   8 +-
 src/UserInterface/PythonSkill.h              |   8 +-
 src/UserInterface/PythonTextTail.h           |   8 +-
 69 files changed, 634 insertions(+), 634 deletions(-)

diff --git a/src/EffectLib/EffectData.h b/src/EffectLib/EffectData.h
index 739f6ff6..404f5071 100644
--- a/src/EffectLib/EffectData.h
+++ b/src/EffectLib/EffectData.h
@@ -42,8 +42,8 @@ class CEffectData
 		void __ClearLightDataVector();
 		void __ClearMeshDataVector();
 
-		// FIXME : �� �κ��� �״��� ���� ���� �ʴ´�. ���� ���̵� ã�Ƴ��� ��ġ��.
-		//         ������ (Ưȭ��) ������ �������̽� ������ ����� �ٲ��� �Ѵٴ� ���� ���� ���ϴ�. - [levites]
+		// FIXME : 이 부분은 그다지 맘에 들지 않는다. 좋은 아이디어를 찾아내어 고치자.
+		//         상위가 (특화된) 상위의 인터페이스 때문에 모양이 바뀌어야 한다는 것은 옳지 못하다. - [levites]
 		virtual CParticleSystemData *	AllocParticle();
 		virtual CEffectMeshScript *		AllocMesh();
 		virtual CLightData *			AllocLight();
diff --git a/src/EffectLib/EffectManager.h b/src/EffectLib/EffectManager.h
index 682f1fd7..a395a85f 100644
--- a/src/EffectLib/EffectManager.h
+++ b/src/EffectLib/EffectManager.h
@@ -62,8 +62,8 @@ class CEffectManager : public CScreen, public CSingleton<CEffectManager>
 		bool GetEffectData(DWORD dwID, CEffectData ** ppEffect);
 		bool GetEffectData(DWORD dwID, const CEffectData ** c_ppEffect);
 
-		// Area�� ���� ��� Effect�� �Լ�... EffectInstance�� Pointer�� ��ȯ�Ѵ�.
-		// EffectManager ���� EffectInstanceMap�� �̿����� �ʴ´�.
+		// Area에 직접 찍는 Effect용 함수... EffectInstance의 Pointer를 반환한다.
+		// EffectManager 내부 EffectInstanceMap을 이용하지 않는다.
 		void CreateUnsafeEffectInstance(DWORD dwEffectDataID, CEffectInstance ** ppEffectInstance);
 		bool DestroyUnsafeEffectInstance(CEffectInstance * pEffectInstance);
 
diff --git a/src/EffectLib/EffectMeshInstance.h b/src/EffectLib/EffectMeshInstance.h
index eaf17d11..185d4336 100644
--- a/src/EffectLib/EffectMeshInstance.h
+++ b/src/EffectLib/EffectMeshInstance.h
@@ -9,7 +9,7 @@
 class CEffectMeshInstance : public CEffectElementBaseInstance
 {
 	public:
-		// NOTE : Mesh ���� �ؽ��� ����Ÿ�� �ν��Ͻ��̴�.
+		// NOTE : Mesh 단위 텍스춰 데이타의 인스턴스이다.
 		typedef struct STextureInstance
 		{
 			CFrameController							TextureFrameController;
diff --git a/src/EffectLib/Type.h b/src/EffectLib/Type.h
index ecbd20ea..18c0f2f0 100644
--- a/src/EffectLib/Type.h
+++ b/src/EffectLib/Type.h
@@ -71,12 +71,12 @@ enum EBillBoardType
 	BILLBOARD_TYPE_ALL,
 	BILLBOARD_TYPE_Y,
 	
-	BILLBOARD_TYPE_LIE, // �ٴڿ� ���� ����
+	BILLBOARD_TYPE_LIE, // 바닥에 누은 형상
 
 	BILLBOARD_TYPE_2FACE, //     / and \ 
 	BILLBOARD_TYPE_3FACE, //     / and \ and -
 
-	//BILLBOARD_TYPE_RAY, // �ܻ�
+	//BILLBOARD_TYPE_RAY, // 잔상
 
 };
 
@@ -220,8 +220,8 @@ typedef std::vector<TTimeEventTypeVector2>		TTimeEventTableVector2;
 typedef std::vector<TTimeEventTypeVector3>		TTimeEventTableVector3;
 
 
-// NOTE : TimeEventValue �Լ����� ���� �Ѱ� ���� ���ƾ� �ϴ� ���� �����Ƿ�
-//        ���� ���� ������ �ƴ� ������ �������� �ۼ� �߽��ϴ�. - [levites]
+// NOTE : TimeEventValue 함수들은 값을 넘겨 받지 말아야 하는 때도 있으므로
+//        값의 직접 리턴이 아닌 포인터 리턴으로 작성 했습니다. - [levites]
 
 template <typename T>
 __forceinline void GetTimeEventBlendValue(float fElapsedTime, std::vector<CTimeEvent<T> >& rVector, T * pReturnValue)
diff --git a/src/EterBase/CPostIt.h b/src/EterBase/CPostIt.h
index d5f00cc3..ca9a2b4b 100644
--- a/src/EterBase/CPostIt.h
+++ b/src/EterBase/CPostIt.h
@@ -6,14 +6,14 @@ class _CPostItMemoryBlock;
 
 /**
  * @class	CPostIt
- * @brief	���ӷ�ó���� ���� Ŭ���̾�Ʈ�� ������ ���� �� Ŭ���̾�Ʈ���� �����ϱ� ���Ͽ� ���Ǵ� Ŭ����
+ * @brief	게임런처에서 게임 클라이언트로 정보를 전달 및 클라이언트에서 수신하기 위하여 사용되는 클래스
  */
 class CPostIt
 {
 public:
 	/**
 	 * @brief	CPostIt constructor
-	 * @param [in]	szAppName	: ������ �̸��� ����.
+	 * @param [in]	szAppName	: 게임의 이름이 들어간다.
 	 */
 	explicit CPostIt( LPCSTR szAppName );
 
@@ -23,45 +23,45 @@ public:
 	~CPostIt( void );
 
 	/**
-	 * @brief	CPostIt class���� �����ϰ� �ִ� ����Ÿ�� Ŭ�����忡 �����Ѵ�.
+	 * @brief	CPostIt class에서 보유하고 있는 데이타를 클립보드에 저장한다.
 	 */
 	BOOL	Flush( void );
 
 	/**
-	 * @brief	CPostIt class���� �����ϰ� �ִ� ����Ÿ �� Ŭ�����忡 �ִ� ������ �����.
+	 * @brief	CPostIt class에서 보유하고 있는 데이타 및 클립보드에 있는 내용을 지운다.
 	 */
 	void	Empty( void );
 
 	/**
-	 * @brief	����Ÿ�� �о�´�.
-	 * @param [in]	lpszKeyName	: �ҷ��� ����Ÿ�� Ű. "KEY" ���� ������ �ִ´�.
-	 * @param [in]	lpszData	: �ҷ��� ����Ÿ�� ����
-	 * @param [in]	nSize		: lpszData ������ �ִ������
+	 * @brief	데이타를 읽어온다.
+	 * @param [in]	lpszKeyName	: 불러올 데이타의 키. "KEY" 식의 내용을 넣는다.
+	 * @param [in]	lpszData	: 불러올 데이타의 버퍼
+	 * @param [in]	nSize		: lpszData 버퍼의 최대사이즈
 	 */
 	BOOL	Get( LPCSTR lpszKeyName, LPSTR lpszData, DWORD nSize );
 
 	/**
-	 * @brief	������ ����Ÿ�� �ִ´�.
-	 * @param [in]	lpBuffer	: ������ ����Ÿ. "KEY=DATA" ���� ������ �ִ´�.
+	 * @brief	저장할 데이타를 넣는다.
+	 * @param [in]	lpBuffer	: 저장할 데이타. "KEY=DATA" 식의 내용을 넣는다.
 	 */
 	BOOL	Set( LPCSTR lpszData );
 
 	/**
-	 * @brief	������ ����Ÿ�� �ִ´�.
-	 * @param [in]	lpszKeyName	: ������ ����Ÿ�� Ű. "KEY" ���� ������ �ִ´�.
-	 * @param [in]	lpszData	: ������ ����Ÿ. "DATA" ���� ������ �ִ´�.
+	 * @brief	저장할 데이타를 넣는다.
+	 * @param [in]	lpszKeyName	: 저장할 데이타의 키. "KEY" 식의 내용을 넣는다.
+	 * @param [in]	lpszData	: 저장할 데이타. "DATA" 식의 내용을 넣는다.
 	 */
 	BOOL	Set( LPCSTR lpszKeyName, LPCSTR lpszData );
 
 	/**
-	 * @brief	������ ����Ÿ(DWORD)�� �ִ´�.
-	 * @param [in]	lpBuffer	: ������ ����Ÿ. "KEY=DATA" ���� ����Ÿ�� �ִ´�.
-	 * @param [in]	dwValue		: ������ ����Ÿ. (DWORD)
+	 * @brief	저장할 데이타(DWORD)를 넣는다.
+	 * @param [in]	lpBuffer	: 저장할 데이타. "KEY=DATA" 식의 데이타를 넣는다.
+	 * @param [in]	dwValue		: 저장할 데이타. (DWORD)
 	 */
 	BOOL	Set( LPCSTR lpszKeyName, DWORD dwValue );
 
 	/**
-	 * @brief	CPostIt class�� �����Ѵ�. (Ŭ���� constructor�� �̸� ���ڰ� �ֱ� ������, �� �̸��� �����ؾ���)
+	 * @brief	CPostIt class를 복사한다. (클래스 constructor에 이름 인자가 있기 때문에, 새 이름을 지정해야함)
 	 * @param [in]	pPostIt		: Destination class
 	 * @param [in]	lpszKeyName	: Destination class's new app-name
 	 */
diff --git a/src/EterBase/FileLoader.h b/src/EterBase/FileLoader.h
index 90d8b7d5..39915bd3 100644
--- a/src/EterBase/FileLoader.h
+++ b/src/EterBase/FileLoader.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#pragma warning(disable:4786)	// character 255 �Ѿ�°� ����
+#pragma warning(disable:4786)	// character 255 넘어가는거 끄기
 
 #include <windows.h>
 #include <vector>
diff --git a/src/EterBase/StdAfx.h b/src/EterBase/StdAfx.h
index ac19b5e8..c13c470b 100644
--- a/src/EterBase/StdAfx.h
+++ b/src/EterBase/StdAfx.h
@@ -6,7 +6,7 @@
 #endif
 
 #pragma warning(disable:4710)	// not inlined
-#pragma warning(disable:4786)	// character 255 �Ѿ�°� ����
+#pragma warning(disable:4786)	// character 255 넘어가는거 끄기
 #pragma warning(disable:4244)	// type conversion possible lose of data
 
 #include <windows.h>
diff --git a/src/EterBase/Utils.h b/src/EterBase/Utils.h
index db81e353..fc6b35ff 100644
--- a/src/EterBase/Utils.h
+++ b/src/EterBase/Utils.h
@@ -64,9 +64,9 @@ extern void			GetExceptionPathName(const char * sz_Name, std::string & OnlyFileN
 extern void			GetWorkingFolder(std::string & strFileName);
 extern void			StringLowers(char * pString);
 extern void			StringPath(std::string & rString);
-extern void			StringPath(char * pString);	// ��� �ҹ��ڷ� �����, \�� /�� �ٲ۴�.
-extern void			StringPath(const char * c_szSrc, char * szDest);	// ��� �ҹ��ڷ� �����, \�� /�� �ٲ۴�.
-extern void			StringPath(const char * c_szSrc, std::string & rString);	// ��� �ҹ��ڷ� �����, \�� /�� �ٲ۴�.
+extern void			StringPath(char * pString);	// 모두 소문자로 만들고, \는 /로 바꾼다.
+extern void			StringPath(const char * c_szSrc, char * szDest);	// 모두 소문자로 만들고, \는 /로 바꾼다.
+extern void			StringPath(const char * c_szSrc, std::string & rString);	// 모두 소문자로 만들고, \는 /로 바꾼다.
 extern void			PrintAsciiData(const void* data, int bytes);
 bool				IsFile(const char* filename);
 bool				IsGlobalFileName(const char * c_szFileName);
diff --git a/src/EterBase/lzo.h b/src/EterBase/lzo.h
index 21810cd3..c2877eab 100644
--- a/src/EterBase/lzo.h
+++ b/src/EterBase/lzo.h
@@ -12,9 +12,9 @@ class CLZObject
 			typedef struct SHeader
 			{
 				DWORD	dwFourCC;
-				DWORD	dwEncryptSize;		// ��ȣȭ�� ũ��
-				DWORD	dwCompressedSize;	// ����� ������ ũ��
-				DWORD	dwRealSize;		// ���� ������ ũ��
+				DWORD	dwEncryptSize;		// 암호화된 크기
+				DWORD	dwCompressedSize;	// 압축된 데이터 크기
+				DWORD	dwRealSize;		// 실제 데이터 크기
 			} THeader;
 		#pragma pack()
 		
diff --git a/src/EterGrnLib/LODController.h b/src/EterGrnLib/LODController.h
index 93d896da..84f64662 100644
--- a/src/EterGrnLib/LODController.h
+++ b/src/EterGrnLib/LODController.h
@@ -269,7 +269,7 @@ class CGrannyLODController : public CGraphicBase
 
 		BOOL	isModelInstance();
 		CGrannyModelInstance*	GetModelInstance();
-		bool	HaveBlendThing() { return 0 != GetModelInstance() ? GetModelInstance()->HaveBlendThing() : false; }		// NOTE: GetModelInstance() == 0�� �� Ŭ�� ũ�������� ���� ����(2012. 05. 07)
+		bool	HaveBlendThing() { return 0 != GetModelInstance() ? GetModelInstance()->HaveBlendThing() : false; }		// NOTE: GetModelInstance() == 0일 때 클라 크래쉬나는 문제 수정(2012. 05. 07)
 
 	protected:
 		void	SetCurrentModelInstance(CGrannyModelInstance * pgrnModelInstance);
diff --git a/src/EterGrnLib/ModelInstance.h b/src/EterGrnLib/ModelInstance.h
index 57f11f50..a06a4a9f 100644
--- a/src/EterGrnLib/ModelInstance.h
+++ b/src/EterGrnLib/ModelInstance.h
@@ -55,12 +55,12 @@ class CGrannyModelInstance : public CGraphicCollisionObject
 		void	DeformNoSkin(const D3DXMATRIX * c_pWorldMatrix);
 		void	Deform(const D3DXMATRIX * c_pWorldMatrix);
 
-		// FIXME : ����� �ϵ������ �Ѱ�� 2���� �ؽ���� ������ �Ǿ��ִ� �����̱⿡ �̷�
-		//         �Ҿ����� ��Ű���簡 ����������, �ñ����� ������ (�� �ؽ��� ����) + (ȿ���� �ؽ���)
-		//         �̷����� �ڵ� ������ �̷����� ���� �ʳ� �����մϴ�. - [levites]
-		// NOTE : ���ο� if���� ���� ��Ű�� ���ٴ� ������ ���ŷ����� �̷��� �Լ� �� ��ü�� �и�
-		//        ��Ű�� ���� �����ս� ���� ���鿡���� �� ���� �� �����ϴ�. - [levites]
-		// NOTE : �ǹ��� ������ OneTexture. ij���ʹ� ��쿡 ���� TwoTexture.
+		// FIXME : 현재는 하드웨어의 한계로 2장의 텍스춰로 제한이 되어있는 상태이기에 이런
+		//         불안정한 아키텍춰가 가능하지만, 궁극적인 방향은 (모델 텍스춰 전부) + (효과용 텍스춰)
+		//         이런식의 자동 셋팅이 이뤄져야 되지 않나 생각합니다. - [levites]
+		// NOTE : 내부에 if문을 포함 시키기 보다는 조금은 번거롭지만 이렇게 함수 콜 자체를 분리
+		//        시키는 것이 퍼포먼스 적인 측면에서는 더 나은 것 같습니다. - [levites]
+		// NOTE : 건물은 무조건 OneTexture. 캐릭터는 경우에 따라 TwoTexture.
 		void	RenderWithOneTexture();
 		void	RenderWithTwoTexture();
 		void	BlendRenderWithOneTexture();
@@ -160,7 +160,7 @@ class CGrannyModelInstance : public CGraphicCollisionObject
 		// Granny Data
 		granny_model_instance *			m_pgrnModelInstance;
 
-		//granny_world_pose *				m_pgrnWorldPose;		// ���� ���� ���� ������
+		//granny_world_pose *				m_pgrnWorldPose;		// 현재 월드 포즈 포인터
 
 		granny_control *				m_pgrnCtrl;
 		granny_animation *				m_pgrnAni;
@@ -182,7 +182,7 @@ class CGrannyModelInstance : public CGraphicCollisionObject
 		CGrannyMaterialPalette			m_kMtrlPal;
 
 		// WORK
-		granny_world_pose*					m_pgrnWorldPoseReal;	// ���� �޸𸮴� ���⿡ �Ҵ�
+		granny_world_pose*					m_pgrnWorldPoseReal;	// 실제 메모리는 여기에 할당
 		std::vector<granny_mesh_binding*>	m_vct_pgrnMeshBinding;		
 
 		// Dynamic Vertex Buffer
diff --git a/src/EterGrnLib/StdAfx.h b/src/EterGrnLib/StdAfx.h
index e7ff8ae1..a0cb07cc 100644
--- a/src/EterGrnLib/StdAfx.h
+++ b/src/EterGrnLib/StdAfx.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#pragma warning(disable:4786)	// character 255 �Ѿ�°� ����
+#pragma warning(disable:4786)	// character 255 넘어가는거 끄기
 
 //#include <crtdbg.h>
 #include <granny/granny.h>
diff --git a/src/EterGrnLib/ThingInstance.h b/src/EterGrnLib/ThingInstance.h
index 857558af..1b896b97 100644
--- a/src/EterGrnLib/ThingInstance.h
+++ b/src/EterGrnLib/ThingInstance.h
@@ -34,7 +34,7 @@ class CGraphicThingInstance : public CGraphicObjectInstance
 
 		void		UpdateLODLevel();
 		void		UpdateTime();
-		void		DeformAll(); // ��� LOD ����
+		void		DeformAll(); // 모든 LOD 디폼
 		
 		bool		LessRenderOrder(CGraphicThingInstance* pkThingInst);
 
diff --git a/src/EterImageLib/Image.h b/src/EterImageLib/Image.h
index a9f5c3e9..45f5a34d 100644
--- a/src/EterImageLib/Image.h
+++ b/src/EterImageLib/Image.h
@@ -9,11 +9,11 @@
 struct TGA_HEADER
 {
 	char idLen;			// 0
-	char palType;		// �ķ�Ʈ������ 1, ���� 0
-	char imgType;		// �ķ�Ʈ������ 1, ���� 2
+	char palType;		// 파레트있으면 1, 없음 0
+	char imgType;		// 파레트있으면 1, 없음 2
 	WORD colorBegin;	// 0
-	WORD colorCount;	// �ķ�Ʈ ������ 256, ���� 0
-	char palEntrySize;	// �ķ�Ʈ ������ 24, ���� 0
+	WORD colorCount;	// 파레트 있으면 256, 없음 0
+	char palEntrySize;	// 파레트 있으면 24, 없음 0
 	WORD left;
 	WORD top;
 	WORD width;
diff --git a/src/EterLib/AttributeInstance.h b/src/EterLib/AttributeInstance.h
index 22b39140..b347cf3a 100644
--- a/src/EterLib/AttributeInstance.h
+++ b/src/EterLib/AttributeInstance.h
@@ -15,7 +15,7 @@ class CAttributeInstance
 
 		const char * GetDataFileName() const;
 
-		// NOTE : Object ����
+		// NOTE : Object 전용
 		void SetObjectPointer(CAttributeData * pAttributeData);
 		void RefreshObject(const D3DXMATRIX & c_rmatGlobal);
 		CAttributeData * GetObjectPointer() const;
diff --git a/src/EterLib/Camera.h b/src/EterLib/Camera.h
index 4ef3cea3..f5578053 100644
--- a/src/EterLib/Camera.h
+++ b/src/EterLib/Camera.h
@@ -51,8 +51,8 @@ class CCamera
 		void SetResistance(float fResistance);
 
 	private:
-		const CCamera & operator = (const CCamera &) ; // �������� ����
-		CCamera (const CCamera & ) ; //�������� ���� 
+		const CCamera & operator = (const CCamera &) ; // 지원하지 않음
+		CCamera (const CCamera & ) ; //지원하지 않음 
 
 		// Camera Update
 		eCameraState	m_eCameraState;
@@ -85,14 +85,14 @@ class CCamera
 		D3DXMATRIX m_matInverseView;
 		D3DXMATRIX m_matBillboard; // Special matrix for billboarding effects
 
-		//�߰���
+		//추가분
 		float m_fPitch;
 		float m_fRoll;
 		float m_fDistance;
 
-		// ī�޶� AI�� ���� Ray ��
+		// 카메라 AI를 위한 Ray 들
 
-		// ī�޶� �ѷ��� Ray
+		// 카메라를 둘러싼 Ray
 		CRay	m_kCameraBottomToTerrainRay;
 		CRay	m_kCameraFrontToTerrainRay;
 		CRay	m_kCameraBackToTerrainRay;
@@ -124,14 +124,14 @@ class CCamera
 		bool			m_bDrag;
 
 //	protected:
-		// ����
+		// 물리
 		D3DXVECTOR3		m_v3AngularAcceleration;
 		D3DXVECTOR3		m_v3AngularVelocity;
 
 		float			m_fResistance;
 	public:
 		//////////////////////////////////////////////////////////////////////////
-		// ����
+		// 물리
 		//////////////////////////////////////////////////////////////////////////
 		void SetAngularAcceleration(D3DXVECTOR3 v3AngularAcceleration) { m_v3AngularAcceleration = v3AngularAcceleration; }
 		
@@ -185,7 +185,7 @@ class CCamera
 		float GetRoll() const { return m_fRoll; }
 		float GetDistance() const { return m_fDistance; }
 		
-		void Pitch(const float fPitchDelta);	//���ư��� ������ �ִ´�.
+		void Pitch(const float fPitchDelta);	//돌아가는 각도를 넣는다.
 		void Roll(const float fRollDelta);
 		void SetDistance(const float fdistance);
 
@@ -193,35 +193,35 @@ class CCamera
 		// camera movement
 		//////////////////////////////////////////////////////////////////////////
 		
-		// ���״�� �̵�... ī�޶� ��ġ�� Ÿ�� ��ġ�� ��� �޶�����.
+		// 말그대로 이동... 카메라 위치와 타겟 위치가 모두 달라진다.
 		void Move(const D3DXVECTOR3 & v3Displacement);
-		// ��.. ī�޶� ��ġ�� �̵�.. Ÿ�� ��ġ�� ����...
+		// 줌.. 카메라 위치만 이동.. 타겟 위치는 고정...
 		void Zoom(float fRatio);
 
-		// �� �������� �̵�.. Ÿ����ġ�� �޶����Ƿ� �ܰ��� �ٸ���...
+		// 뷰 방향으로 이동.. 타겟위치가 달라지므로 줌과는 다르다...
 		void MoveAlongView(float fDistance);
-		// ī�޶� �� �������� �̵�..
+		// 카메라 옆 방향으로 이동..
 		void MoveAlongCross(float fDistance);
-		// ī�޶� ������ �������� �̵�...
+		// 카메라 업벡터 방향으로 이동...
 		void MoveAlongUp(float fDistance);
 
-		// ī�޶� �� �������� �̵�... MoveAlongCross�� ����..
+		// 카메라 옆 방향으로 이동... MoveAlongCross과 동일..
 		void MoveLateral(float fDistance);
-		// �� ������ Z ������ ������ XY��� �������� �̵�..
+		// 뷰 방향의 Z 성분을 무시한 XY평면 방향으로 이동..
 		void MoveFront(float fDistance);
-		// Z����(���� ����)���� �̵�...
+		// Z방향(연직 방향)으로 이동...
 		void MoveVertical(float fDistance);
 		
-	//	//ī�޶� ��ġ�� ������Ű�� �Ӹ��� ���. Ÿ���� �޶�������?
-	//	//ȸ������ ������ �ƴ� "��(Degree)"�� �ִ´�.
+	//	//카메라 위치는 고정시키고 머리만 든다. 타겟이 달라지겠죠?
+	//	//회전각을 라디안이 아닌 "도(Degree)"로 넣는다.
 	//	void RotateUpper(float fDegree);
 		
-		// Ÿ�� �߽����� ����. Eterlib�� SetAroundCamera�� ��ɰ� ����...
-		// fPitchDegree�� ����(0��)�κ��� �Ʒ������� �������� ����...
-		// fRollDegree�� Ÿ�� �߽����� �ð�������� ���� ����...
+		// 타겟 중심으로 돈다. Eterlib의 SetAroundCamera의 기능과 유사...
+		// fPitchDegree는 수평(0도)로부터 아랫쪽으로 꺽어지는 각도...
+		// fRollDegree는 타겟 중심으로 시계방향으로 도는 각도...
 		void RotateEyeAroundTarget(float fPitchDegree, float fRollDegree);
 
-		// ���� �߽����� ���� ���� �� ���� �߽����� ����. Ÿ�� ���� �޶�������?
+		// 도는 중심점을 따로 지정 그 점을 중심으로 돈다. 타겟 점도 달라지겠죠?
 		void RotateEyeAroundPoint(const D3DXVECTOR3 & v3Point, float fPitchDegree, float fRollDegree);
 
 	protected:
diff --git a/src/EterLib/ColorTransitionHelper.h b/src/EterLib/ColorTransitionHelper.h
index deb7a60d..b5319672 100644
--- a/src/EterLib/ColorTransitionHelper.h
+++ b/src/EterLib/ColorTransitionHelper.h
@@ -27,10 +27,10 @@ class CColorTransitionHelper
 		bool isTransitionStarted() { return m_bTransitionStarted; }
 
 	private:
- 		D3DCOLOR m_dwCurColor;		// ���� ��
+ 		D3DCOLOR m_dwCurColor;		// 현재 색
 
-		DWORD m_dwStartTime;		// �ٲ�� �����ϴ� �ð�
-		DWORD m_dwDuration;			// �� ���ȿ� �ٲ�°�?
+		DWORD m_dwStartTime;		// 바뀌기 시작하는 시간
+		DWORD m_dwDuration;			// 얼마 동안에 바뀌는가?
 
 		bool m_bTransitionStarted;
 
diff --git a/src/EterLib/Decal.h b/src/EterLib/Decal.h
index a19ba980..f5533b5c 100644
--- a/src/EterLib/Decal.h
+++ b/src/EterLib/Decal.h
@@ -42,15 +42,15 @@ protected:
 	D3DXPLANE		m_v4FrontPlane;
 	D3DXPLANE		m_v4BackPlane;
 
-	// ����
+	// 개수
 	DWORD			m_dwVertexCount;
 	DWORD			m_dwPrimitiveCount;
 
-	// ���ý� ���ۿ� �δ콺 ����
+	// 버택스 버퍼와 인댁스 버퍼
 //	CGraphicVertexBuffer	m_GraphicVertexBuffer;
 //	CGraphicIndexBuffer		m_GraphicIndexBuffer;
 
-	// ���ý� ���ۿ� �δ콺 ���� ��ſ� �迭 ����� DrawIndexedPrimitiveUP�� �׸���.
+	// 버택스 버퍼와 인댁스 버퍼 대신에 배열 만들고 DrawIndexedPrimitiveUP로 그리자.
 	typedef struct 
 	{
 		WORD			m_wMinIndex;
diff --git a/src/EterLib/GrpBase.h b/src/EterLib/GrpBase.h
index eeafa076..10bbf9d9 100644
--- a/src/EterLib/GrpBase.h
+++ b/src/EterLib/GrpBase.h
@@ -230,7 +230,7 @@ class CGraphicBase
 		void		UpdatePipeLineMatrix();
 
 	protected:
-		// ���� D3DX Mesh �� (�÷��� ������ ���� ǥ��Ȱ �� ����)
+		// 각종 D3DX Mesh 들 (컬루젼 데이터 등을 표시활 때 쓴다)
 		static LPD3DXMESH				ms_lpSphereMesh;
 		static LPD3DXMESH				ms_lpCylinderMesh;
 
@@ -274,7 +274,7 @@ class CGraphicBase
 		static float					ms_fNearY;
 		static float					ms_fFarY;
 
-		// 2004.11.18.myevan.DynamicVertexBuffer�� ��ü
+		// 2004.11.18.myevan.DynamicVertexBuffer로 교체
 		/*
 		static std::vector<TIndex>		ms_lineIdxVector;
 		static std::vector<TIndex>		ms_lineTriIdxVector;
@@ -292,7 +292,7 @@ class CGraphicBase
 		static DWORD					ms_dwFlashingEndTime;
 		static D3DXCOLOR				ms_FlashingColor;
 
-		// Terrain picking�� Ray... CCamera �̿��ϴ� ����.. ������ Ray�� ���� �ʿ�...
+		// Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요...
  		static CRay						ms_Ray;
 
 		// 
diff --git a/src/EterLib/GrpCollisionObject.h b/src/EterLib/GrpCollisionObject.h
index 94f9018c..b82d995f 100644
--- a/src/EterLib/GrpCollisionObject.h
+++ b/src/EterLib/GrpCollisionObject.h
@@ -18,8 +18,8 @@ class CGraphicCollisionObject : public CGraphicBase
 		bool IntersectSphere(const D3DXVECTOR3 & c_rv3Position, float fRadius, const D3DXVECTOR3 & c_rv3RayOriginal, const D3DXVECTOR3 & c_rv3RayDirection);
 		bool IntersectCylinder(const D3DXVECTOR3 & c_rv3Position, float fRadius, float fHeight, const D3DXVECTOR3 & c_rv3RayOriginal, const D3DXVECTOR3 & c_rv3RayDirection);
 
-		// NOTE : ms_vtPickRayOrig�� ms_vtPickRayDir�� CGraphicBGase�� ������ �ִµ�
-		//        ���� ���ڷ� �־���� �ϴ� ������ �ִ°�? Customize�� ���ؼ�? - [levites]
+		// NOTE : ms_vtPickRayOrig와 ms_vtPickRayDir를 CGraphicBGase가 가지고 있는데
+		//        굳이 인자로 넣어줘야 하는 이유가 있는가? Customize를 위해서? - [levites]
 		bool IntersectSphere(const D3DXVECTOR3 & c_rv3Position, float fRadius);
 		bool IntersectCylinder(const D3DXVECTOR3 & c_rv3Position, float fRadius, float fHeight);
 };
diff --git a/src/EterLib/GrpDevice.h b/src/EterLib/GrpDevice.h
index 70152745..4d7abbf3 100644
--- a/src/EterLib/GrpDevice.h
+++ b/src/EterLib/GrpDevice.h
@@ -23,8 +23,8 @@ public:
 		CREATE_GET_DEVICE_CAPS2 = (1 << 3),
 		CREATE_DEVICE			= (1 << 4),
 		CREATE_REFRESHRATE		= (1 << 5),
-		CREATE_ENUM				= (1 << 6), // 2003. 01. 09. myevan ��� ����Ʈ ��� ����
-		CREATE_DETECT			= (1 << 7), // 2003. 01. 09. myevan ��� ���� ����
+		CREATE_ENUM				= (1 << 6), // 2003. 01. 09. myevan 모드 리스트 얻기 실패
+		CREATE_DETECT			= (1 << 7), // 2003. 01. 09. myevan 모드 선택 실패
 		CREATE_NO_TNL			= (1 << 8),
 		CREATE_BAD_DRIVER		= (1 << 9),
 		CREATE_FORMAT			= (1 << 10),
diff --git a/src/EterLib/GrpLightManager.h b/src/EterLib/GrpLightManager.h
index a0567c4f..eb1e8399 100644
--- a/src/EterLib/GrpLightManager.h
+++ b/src/EterLib/GrpLightManager.h
@@ -93,8 +93,8 @@ class CLightManager : public CGraphicBase, public CLightBase, public CSingleton<
 
 		void		Initialize();
 
-		// NOTE : FlushLight�� ������
-		//        �� �� �ݵ�� RestoreLight�� ����߸� �Ѵ�.
+		// NOTE : FlushLight후 렌더링
+		//        그 후 반드시 RestoreLight를 해줘야만 한다.
 		void		Update();
 		void		FlushLight();
 		void		RestoreLight();
diff --git a/src/EterLib/LensFlare.h b/src/EterLib/LensFlare.h
index 7522cbfc..c53ef2b2 100644
--- a/src/EterLib/LensFlare.h
+++ b/src/EterLib/LensFlare.h
@@ -81,7 +81,7 @@ public:
 	CLensFlare();
 	virtual ~CLensFlare();
 	
-	void			Compute(const D3DXVECTOR3 & c_rv3LightDirection); // D3DTS_VIEW�� ���� ī�޶� ������ �����Ƿ�, ī�޶� ���� �ڿ� �ؾ� ��.
+	void			Compute(const D3DXVECTOR3 & c_rv3LightDirection); // D3DTS_VIEW로 부터 카메라 방향을 얻어오므로, 카메라 설정 뒤에 해야 함.
 
 	void			DrawBeforeFlare();
 	void			DrawAfterFlare();
diff --git a/src/EterLib/ResourceManager.h b/src/EterLib/ResourceManager.h
index 143cff19..22308a5e 100644
--- a/src/EterLib/ResourceManager.h
+++ b/src/EterLib/ResourceManager.h
@@ -26,7 +26,7 @@ class CResourceManager : public CSingleton<CResourceManager>
 		CResource *	GetResourcePointer(const char * c_szFileName);
 		CResource *	GetTypeResourcePointer(const char * c_szFileName, int iType=-1);
 
-		// �߰�
+		// 추가
 		bool		isResourcePointerData(DWORD dwFileCRC);
 
 		void		RegisterResourceNewFunctionPointer(const char* c_szFileExt, CResource* (*pResNewFunc)(const char* c_szFileName));
@@ -63,7 +63,7 @@ class CResourceManager : public CSingleton<CResourceManager>
 		TResourceNewFunctionPointerMap			m_pResNewFuncMap;
 		TResourceNewFunctionByTypePointerMap	m_pResNewFuncByTypeMap;
 		TResourceDeletingMap					m_ResourceDeletingMap;
-		TResourceRequestMap						m_RequestMap;	// ������� �ε� ��û�� ����Ʈ
+		TResourceRequestMap						m_RequestMap;	// 쓰레드로 로딩 요청한 리스트
 		TResourceRequestMap						m_WaitingMap;
 		TResourceRefDecreaseWaitingMap			m_pResRefDecreaseWaitingMap;
 
diff --git a/src/EterLib/SkyBox.h b/src/EterLib/SkyBox.h
index 0cb713a1..c0ff5871 100644
--- a/src/EterLib/SkyBox.h
+++ b/src/EterLib/SkyBox.h
@@ -63,7 +63,7 @@ public:
 	
 private:
 	TPDTVertex m_Vertex[4];
-	TIndex m_Indices[4];					// ��� ����...
+	TIndex m_Indices[4];					// 인덱스 버퍼...
 	CColorTransitionHelper m_Helper[4];
 };
 
@@ -99,7 +99,7 @@ protected:
 
 protected:
 	//////////////////////////////////////////////////////////////////////////
-	// Ÿ�� ����
+	// 타입 정의
 
 	typedef std::vector<CSkyObjectQuad> TSkyObjectQuadVector;
 	typedef TSkyObjectQuadVector::iterator TSkyObjectQuadIterator;
@@ -118,8 +118,8 @@ protected:
 
 	//////////////////////////////////////////////////////////////////////////
 	
-	// ����...
-	TSkyObjectFace m_FaceCloud;		// ���� �ϴ� ����...
+	// 구름...
+	TSkyObjectFace m_FaceCloud;		// 구름 일단 한장...
 	D3DXMATRIX m_matWorldCloud, m_matTranslationCloud, m_matTextureCloud;
 	D3DXVECTOR3 m_v3PositionCloud;
 	float m_fCloudScaleX, m_fCloudScaleY, m_fCloudHeight;
@@ -129,7 +129,7 @@ protected:
 
 	DWORD m_dwlastTime;
 
-	// ��ī�� �ڽ� �̹���...
+	// 스카이 박스 이미지...
 	TGraphicImageInstanceMap m_GraphicImageInstanceMap;
 	
 	// Transform...
@@ -137,7 +137,7 @@ protected:
 	D3DXVECTOR3 m_v3Position;
 	float m_fScaleX, m_fScaleY, m_fScaleZ;
 
-	// ������ ����... �ӽ� ����..
+	// 랜더링 관련... 임시 변수..
 	unsigned char m_ucRenderMode;
 
 	std::string m_strCurTime;
diff --git a/src/EterLib/StdAfx.h b/src/EterLib/StdAfx.h
index 9eb0782c..99bbf796 100644
--- a/src/EterLib/StdAfx.h
+++ b/src/EterLib/StdAfx.h
@@ -8,7 +8,7 @@
 #define _WIN32_DCOM
 
 #pragma warning(disable:4710)	// not inlined
-#pragma warning(disable:4786)	// character 255 �Ѿ�°� ����
+#pragma warning(disable:4786)	// character 255 넘어가는거 끄기
 #pragma warning(disable:4244)	// type conversion possible lose of data
 
 #pragma warning(disable:4018)
diff --git a/src/EterLib/Thread.h b/src/EterLib/Thread.h
index ce096989..6b4225ad 100644
--- a/src/EterLib/Thread.h
+++ b/src/EterLib/Thread.h
@@ -10,8 +10,8 @@ class CThread
 	protected:
 		static UINT CALLBACK	EntryPoint(void * pThis);
 
-		virtual UINT			Setup() = 0;				// Execute�� �ҷ����� ���� �ҷ�����.
-		virtual UINT			Execute(void * arg) = 0;	// ���� �����尡 �ϴ� ���� ���� ��
+		virtual UINT			Setup() = 0;				// Execute이 불려지기 전에 불려진다.
+		virtual UINT			Execute(void * arg) = 0;	// 실제 쓰레드가 하는 일이 들어가는 곳
 
 		UINT					Run(void * arg);
 
diff --git a/src/EterLib/parser.h b/src/EterLib/parser.h
index 2952f6b0..1578a2f9 100644
--- a/src/EterLib/parser.h
+++ b/src/EterLib/parser.h
@@ -55,30 +55,30 @@ namespace script
 			~Group();
 			
 		public:
-			/** ��Ʈ������ ���� ��ũ��Ʈ �׷��� �����.
+			/** 스트링으로 부터 스크립트 그룹을 만든다.
 			*
-			* �����ϸ� GetError �޼ҵ�� Ȯ���� �� �ִ�.
+			* 실패하면 GetError 메소드로 확인할 수 있다.
 			*
-			* @param stSource �� ��Ʈ������ ���� �׷��� ����� ����.
-			* @return ������ true, �����ϸ� false
+			* @param stSource 이 스트링으로 부터 그룹이 만들어 진다.
+			* @return 성공시 true, 실패하면 false
 			*/
 			bool                Create(const std::string & stSource);
 			
-			/** ���ɾ �޴� �޼ҵ�
+			/** 명령어를 받는 메소드
 			*
-			* @param cmd �����ÿ� �� ����ü�� ���ɾ ���� �ȴ�.
-			* @return ���ɾ ���� �ִٸ� true, ���ٸ� false
+			* @param cmd 성공시에 이 구조체로 명령어가 복사 된다.
+			* @return 명령어가 남아 있다면 true, 없다면 false
 			*/
 			bool                GetCmd(TCmd & cmd);
 
 			/*
-				���ɾ �������� �������� �ʴ´�.
+				명령어를 가져오되 꺼내지는 않는다.
 			*/
 			bool                ReadCmd(TCmd & cmd);
 			
-			/** ������ ��� �޴� �޼ҵ�
+			/** 에러를 출력 받는 메소드
 			*
-			* @return stError �� ������ ������ ��� �ȴ�.
+			* @return stError 이 곳으로 에러가 출력 된다.
 			*/
 			std::string &       GetError();
 			
diff --git a/src/EterPack/EterPack.h b/src/EterPack/EterPack.h
index 8ab20589..72597784 100644
--- a/src/EterPack/EterPack.h
+++ b/src/EterPack/EterPack.h
@@ -134,7 +134,7 @@ class CEterPack
 		bool				EncryptIndexFile();
 		bool				DecryptIndexFile();
 
-		DWORD				DeleteUnreferencedData();	// ��� ���� �Ǿ����� ���� �Ѵ�.
+		DWORD				DeleteUnreferencedData();	// 몇개가 삭제 되었는지 리턴 한다.
 
 		bool				GetNames(std::vector<std::string>* retNames);
 		
@@ -177,7 +177,7 @@ class CEterPack
 
 		std::unordered_map<DWORD, DWORD> m_map_indexRefCount;
 		TDataPositionMap		m_DataPositionMap;
-		TFreeIndexList			m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1];	// MAX �� �\�� �ϹǷ� + 1 ũ�⸸ŭ �����.
+		TFreeIndexList			m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1];	// MAX 도 억세스 하므로 + 1 크기만큼 만든다.
 
 		std::string				m_stDataFileName;
 		std::string				m_stPathName;
@@ -193,8 +193,8 @@ class CEterPack
 
 	//private:
 	//	bool				m_bIsDataLoaded;
-	//	// �׳� time_t�� ����, 32bit time_t�� ����ϴ� �ҽ�������, 
-	//	// CEterPack�� size�� ���� size - 4�� �ν��ϱ� ������ ������ �߻��� �� �ִ�.
+	//	// 그냥 time_t를 쓰면, 32bit time_t를 사용하는 소스에서는, 
+	//	// CEterPack의 size를 실제 size - 4로 인식하기 때문에 문제가 발생할 수 있다.
 	//	__time64_t			m_tLastAccessTime;
 	//public:
 	//	__time64_t			GetLastAccessTime() { return m_tLastAccessTime; }
diff --git a/src/EterPack/EterPackManager.h b/src/EterPack/EterPackManager.h
index b202876f..e73eb6e9 100644
--- a/src/EterPack/EterPackManager.h
+++ b/src/EterPack/EterPackManager.h
@@ -60,12 +60,12 @@ class CEterPackManager : public CSingleton<CEterPackManager>
 		void RetrieveHybridCryptPackKeys( const BYTE* pStream );
 		void RetrieveHybridCryptPackSDB( const BYTE* pStream );
 
-		// �޸𸮿� ���ε� �ѵ� ���, �����ؾ��� �͵� ����.
+		// 메모리에 매핑된 팩들 가운데, 정리해야할 것들 정리.
 	public:
 		void ArrangeMemoryMappedPack();
 
 	protected:
-		int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string ����
+		int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string 버전
 		bool CompareName(const char * c_szDirectoryName, DWORD iLength, const char * c_szFileName);
 
 		CEterPack* FindPack(const char* c_szPathName);
diff --git a/src/EterPythonLib/PythonSlotWindow.h b/src/EterPythonLib/PythonSlotWindow.h
index 4c7e82e4..ba45ac7e 100644
--- a/src/EterPythonLib/PythonSlotWindow.h
+++ b/src/EterPythonLib/PythonSlotWindow.h
@@ -24,7 +24,7 @@ namespace UI
 		SLOT_STATE_LOCK		= (1 << 0),
 		SLOT_STATE_CANT_USE	= (1 << 1),
 		SLOT_STATE_DISABLE	= (1 << 2),
-		SLOT_STATE_ALWAYS_RENDER_COVER = (1 << 3),			// ���� Cover ��ư�� ���Կ� ���� ���� ���� ������ ������ �ϴµ�, �� flag�� ������ �� �����̾ Ŀ�� ������
+		SLOT_STATE_ALWAYS_RENDER_COVER = (1 << 3),			// 현재 Cover 버튼은 슬롯에 무언가 들어와 있을 때에만 렌더링 하는데, 이 flag가 있으면 빈 슬롯이어도 커버 렌더링
 	};
 
 	class CSlotWindow : public CWindow
@@ -44,9 +44,9 @@ namespace UI
 			{
 				DWORD	dwState;
 				DWORD	dwSlotNumber;
-				DWORD	dwCenterSlotNumber;		// NOTE : ����� ū �������� ��� �������� ���� ��ġ ��ȣ
-				DWORD	dwItemIndex;			// NOTE : ���⼭ ���Ǵ� Item�̶�� �ܾ�� ���� ������ ���� �ƴ�,
-				BOOL	isItem;					//        "������ ���빰"�̶�� �������� �����. �� ���� ���� ������? - [levites]
+				DWORD	dwCenterSlotNumber;		// NOTE : 사이즈가 큰 아이템의 경우 아이템의 실제 위치 번호
+				DWORD	dwItemIndex;			// NOTE : 여기서 사용되는 Item이라는 단어는 좁은 개념의 것이 아닌,
+				BOOL	isItem;					//        "슬롯의 내용물"이라는 포괄적인 개념어. 더 좋은 것이 있을까? - [levites]
 
 				// CoolTime
 				float	fCoolTime;
diff --git a/src/EterPythonLib/PythonWindow.h b/src/EterPythonLib/PythonWindow.h
index ef8cb8ad..e1255304 100644
--- a/src/EterPythonLib/PythonWindow.h
+++ b/src/EterPythonLib/PythonWindow.h
@@ -28,16 +28,16 @@ namespace UI
 
 			enum EFlags
 			{
-				FLAG_MOVABLE			= (1 <<  0),	// ������ �� �ִ� â
-				FLAG_LIMIT				= (1 <<  1),	// â�� ȭ���� ����� ����
-				FLAG_SNAP				= (1 <<  2),	// ���� �� �� �ִ� â
+				FLAG_MOVABLE			= (1 <<  0),	// 움직일 수 있는 창
+				FLAG_LIMIT				= (1 <<  1),	// 창이 화면을 벗어나지 않음
+				FLAG_SNAP				= (1 <<  2),	// 스냅 될 수 있는 창
 				FLAG_DRAGABLE			= (1 <<  3),
-				FLAG_ATTACH				= (1 <<  4),	// ������ �θ� �پ� �ִ� â (For Drag / ex. ScriptWindow)
-				FLAG_RESTRICT_X			= (1 <<  5),	// �¿� �̵� ����
-				FLAG_RESTRICT_Y			= (1 <<  6),	// ���� �̵� ����
+				FLAG_ATTACH				= (1 <<  4),	// 완전히 부모에 붙어 있는 창 (For Drag / ex. ScriptWindow)
+				FLAG_RESTRICT_X			= (1 <<  5),	// 좌우 이동 제한
+				FLAG_RESTRICT_Y			= (1 <<  6),	// 상하 이동 제한
 				FLAG_NOT_CAPTURE		= (1 <<  7),
-				FLAG_FLOAT				= (1 <<  8),	// ���߿� ���־ ���� ���ġ�� �Ǵ� â
-				FLAG_NOT_PICK			= (1 <<  9),	// ���콺�� ���� Pick���� �ʴ� â
+				FLAG_FLOAT				= (1 <<  8),	// 공중에 떠있어서 순서 재배치가 되는 창
+				FLAG_NOT_PICK			= (1 <<  9),	// 마우스에 의해 Pick되지 않는 창
 				FLAG_IGNORE_SIZE		= (1 << 10),
 				FLAG_RTL				= (1 << 11),	// Right-to-left
 			};
@@ -91,8 +91,8 @@ namespace UI
 			bool			IsIn(long x, long y);
 			bool			IsIn();
 			CWindow *		PickWindow(long x, long y);
-			CWindow *		PickTopWindow(long x, long y);	// NOTE : Children���� �������� �ʰ� ���������� 
-															//        üũ �ϴ� Ưȭ�� �Լ�
+			CWindow *		PickTopWindow(long x, long y);	// NOTE : Children으로 내려가지 않고 상위에서만 
+															//        체크 하는 특화된 함수
 
 			void			__RemoveReserveChildren();
 
@@ -166,10 +166,10 @@ namespace UI
 
 			EHorizontalAlign	m_HorizontalAlign;
 			EVerticalAlign		m_VerticalAlign;
-			long				m_x, m_y;				// X,Y �����ǥ
-			long				m_lWidth, m_lHeight;	// ũ��
-			RECT				m_rect;					// Global ��ǥ
-			RECT				m_limitBiasRect;		// limit bias ��
+			long				m_x, m_y;				// X,Y 상대좌표
+			long				m_lWidth, m_lHeight;	// 크기
+			RECT				m_rect;					// Global 좌표
+			RECT				m_limitBiasRect;		// limit bias 값
 
 			bool				m_bMovable;
 			bool				m_bShow;
diff --git a/src/GameLib/ActorInstance.h b/src/GameLib/ActorInstance.h
index 0011a583..7ff67ad3 100644
--- a/src/GameLib/ActorInstance.h
+++ b/src/GameLib/ActorInstance.h
@@ -2,8 +2,8 @@
 
 // class CActorInstance
 
-//		Note : ij������ Lighting, Local Point Light, Weapon Trace ���� ȿ���� �޺� ����Ÿ, ���� ����Ÿ,
-//             ��� ����Ÿ ���� �߻���, ��ü������ �����ϴ� ���� �Ŵ����� �� ���̴�.
+//		Note : 캐릭터의 Lighting, Local Point Light, Weapon Trace 등의 효과와 콤보 데이타, 사운드 데이타,
+//             모션 데이타 들을 추상적, 총체적으로 관리하는 개별 매니저가 될 것이다.
 
 #include "FlyTarget.h"
 #include "RaceData.h"
@@ -64,7 +64,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 				virtual void OnChangeShape() = 0;
 		};
 
-	// 2004.07.05.myevan.�ý�ź�� �ʿ� ���̴� �����ذ�
+	// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결
 	private:
 		static IBackground& GetBackground();
 
@@ -217,7 +217,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		CActorInstance();
 		virtual ~CActorInstance();
 
-		// 20041201.myevan.�ν��Ͻ����̽��� �Լ�
+		// 20041201.myevan.인스턴스베이스용 함수
 		void INSTANCEBASE_Transform();
 		void INSTANCEBASE_Deform();
 
@@ -294,13 +294,13 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 
 		/////////////////////////////////////////////////////////////////////////////////////
 		// Motion Queueing System
-		void SetMotionMode(int iMotionMode); // FIXME : ����� �ð��� ������ �����ϰԲ� �Ѵ�.
+		void SetMotionMode(int iMotionMode); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
 		int GetMotionMode();
 		void SetLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f);
 		bool InterceptOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f);
 		bool InterceptLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f);
-		bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : ����� �ð��� ������ �����ϰԲ� �Ѵ�.
-		bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : ����� �ð��� ������ �����ϰԲ� �Ѵ�.
+		bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
+		bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
 		void SetMotionLoopCount(int iCount);
 
 		bool IsPushing();
@@ -346,9 +346,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		/////////////////////////////////////////////////////////////////////////////////////
 		// Battle
 		// Input
-		// ������ �ű� ���ɼ��� �ִ� �ڵ��
-		// ��Ʈ�� ������ ���� ������ �÷��̾ �����ϰ� �ܼ��� Showing Type�̱� ������
-		// ���� �˻簡 �ʿ� ����.
+		// 하위로 옮길 가능성이 있는 코드들
+		// 네트웍 연동시 전투 관련은 플레이어를 제외하곤 단순히 Showing Type이기 때문에
+		// 조건 검사가 필요 없다.
 		void		InputNormalAttackCommand(float fDirRot);	// Process input - Only used by player's character
 		bool		InputComboAttackCommand(float fDirRot);	// Process input - Only used by player's character
 
@@ -524,7 +524,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		void ClearFlyEventHandler();
 		void SetFlyEventHandler(IFlyEventHandler * pHandler);
 
-		// 2004. 07. 07. [levites] - ��ų ����� Ÿ���� �ٲ�� ���� �ذ��� ���� �ڵ�
+		// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
 		bool CanChangeTarget();
 
 	protected:
@@ -567,7 +567,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		void		CurrentMotionProcess();
 		MOTION_KEY	GetRandomMotionKey(MOTION_KEY dwMotionKey);
 
-		float GetLastMotionTime(float fBlendTime); // NOTE : �ڵ����� BlendTime��ŭ�� �մ�� �ð��� ����
+		float GetLastMotionTime(float fBlendTime); // NOTE : 자동으로 BlendTime만큼을 앞당긴 시간을 리턴
 		float GetMotionDuration(DWORD dwMotionKey);
 
 		bool InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f);
@@ -637,31 +637,31 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 
 	protected:
 		float		__GetAttackSpeed();
-		DWORD		__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // ��� ������ ����
+		DWORD		__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // 모션 데이터 설정
 		void		__ClearMotion();
 
-		bool		__BindMotionData(DWORD dwMotionKey);	// ��� �����͸� ���ε�
-		void		__ClearHittedActorInstanceMap();		// ������ ���� �ν��Ͻ� ���� �����
+		bool		__BindMotionData(DWORD dwMotionKey);	// 모션 데이터를 바인딩
+		void		__ClearHittedActorInstanceMap();		// 때려진 액터 인스턴스 맵을 지운다
 
-		UINT		__GetMotionType();			// ��� Ÿ�� ���
+		UINT		__GetMotionType();			// 모션 타입 얻기
 
-		bool		__IsNeedFlyTargetMotion();	// FlyTarget �� �ʿ��� ����ΰ�?
-		bool		__HasMotionFlyEvent();		// ���𰡸� ��°�?
-		bool		__IsWaitMotion();			// ��� ��� ��
-		bool		__IsMoveMotion();			// �̵� ��� �ΰ�?
-		bool		__IsAttackMotion();			// ���� ��� ��
-		bool		__IsComboAttackMotion();	// �޺� ���� ��� �ΰ�?
-		bool		__IsDamageMotion();			// ������ �����
-		bool		__IsKnockDownMotion();		// �˴ٿ� ����ΰ�?
-		bool		__IsDieMotion();			// ��� ��� ��
-		bool		__IsStandUpMotion();		// �Ͼ�� ����ΰ�?
+		bool		__IsNeedFlyTargetMotion();	// FlyTarget 이 필요한 모션인가?
+		bool		__HasMotionFlyEvent();		// 무언가를 쏘는가?
+		bool		__IsWaitMotion();			// 대기 모션 인가?
+		bool		__IsMoveMotion();			// 이동 모션 인가?
+		bool		__IsAttackMotion();			// 공격 모션 인가?
+		bool		__IsComboAttackMotion();	// 콤보 공격 모션 인가?
+		bool		__IsDamageMotion();			// 데미지 모션인가?
+		bool		__IsKnockDownMotion();		// 넉다운 모션인가?
+		bool		__IsDieMotion();			// 사망 모션 인가?
+		bool		__IsStandUpMotion();		// 일어서기 모션인가?
 		bool		__IsMountingHorse();
 
-		bool		__CanAttack();				// ���� �Ҽ� �ִ°�?
-		bool		__CanNextComboAttack();		// ���� �޺� ������ �����Ѱ�?
+		bool		__CanAttack();				// 공격 할수 있는가?
+		bool		__CanNextComboAttack();		// 다음 콤보 어택이 가능한가?
 
-		bool		__IsComboAttacking();	// �޺� �������ΰ�?
-		void		__CancelComboAttack();	// �޺� ���� ���
+		bool		__IsComboAttacking();	// 콤보 공격중인가?
+		void		__CancelComboAttack();	// 콤보 공격 취소
 
 		WORD		__GetCurrentMotionIndex();
 		DWORD		__GetCurrentMotionKey();
@@ -683,9 +683,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		D3DXVECTOR3	__GetFlyTargetPosition();
 
 	protected:
-		void		__DestroyWeaponTrace();	// ���� �ܻ��� �����Ѵ�
-		void		__ShowWeaponTrace();	// ���� �ܻ��� ���δ�
-		void		__HideWeaponTrace();	// ���� �ܻ��� �����
+		void		__DestroyWeaponTrace();	// 무기 잔상을 제거한다
+		void		__ShowWeaponTrace();	// 무기 잔상을 보인다
+		void		__HideWeaponTrace();	// 무기 잔상을 감춘다
 
 	protected:
 		// collision data
@@ -705,7 +705,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		// For Collision Detection
 		TCollisionPointInstanceList		m_BodyPointInstanceList;
 		TCollisionPointInstanceList		m_DefendingPointInstanceList;
-		SSplashArea						m_kSplashArea; // TODO : ������ ���� ������ �ؾ��Ѵ� - [levites]
+		SSplashArea						m_kSplashArea; // TODO : 복수에 대한 고려를 해야한다 - [levites]
 		CAttributeInstance *			m_pAttributeInstance;
 		/////////////////////////////////////////////////////////////////////////////////////
 
@@ -736,7 +736,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		float						m_fInvisibleTime;
 		BOOL						m_isHiding;
 
-		// TODO : State�� ���� ��ų �� �ִ��� ������ ����
+		// TODO : State로 통합 시킬 수 있는지 고려해 볼것
 		BOOL						m_isResistFallen;
 		BOOL						m_isSleep;
 		BOOL						m_isFaint;
@@ -822,7 +822,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
 		void __InitializeRotationData();
 		void __InitializePositionData();
 
-	public: // InstanceBase ������ �ӽ÷� public
+	public: // InstanceBase 통합전 임시로 public
 		IEventHandler* __GetEventHandlerPtr();
 		IEventHandler& __GetEventHandlerRef();
 
diff --git a/src/GameLib/Area.h b/src/GameLib/Area.h
index 1fae3c70..98d2febc 100644
--- a/src/GameLib/Area.h
+++ b/src/GameLib/Area.h
@@ -157,7 +157,7 @@ class CArea
 		typedef std::vector<CDungeonBlock *>				TDungeonBlockInstanceVector;
 		typedef std::vector<TObjectInstance *>				TObjectInstanceVector;
 		typedef std::vector<TAmbienceInstance *>			TAmbienceInstanceVector;
-		typedef std::map<CGraphicThingInstance *, DWORD>	TGraphicThingInstanceCRCMap;	// ����ȭ�� by ����
+		typedef std::map<CGraphicThingInstance *, DWORD>	TGraphicThingInstanceCRCMap;	// 최적화용 by 동현
 		typedef std::set<int>								TShowingPortalIDSet;
 
 		typedef struct SCRCWithNumber
@@ -264,7 +264,7 @@ class CArea
 
 	protected:
 		// Static Data
-		TObjectDataVector				m_ObjectDataVector;		// Area �� �ִ� ������Ʈ��
+		TObjectDataVector				m_ObjectDataVector;		// Area 상에 있는 오브젝트들
 
 		// Rendering Instances
 		TObjectInstanceVector			m_ObjectInstanceVector;
@@ -280,7 +280,7 @@ class CArea
 		TCRCWithNumberVector			m_kRenderedThingInstanceCRCWithNumberVector;
 		TThingInstanceVector			m_kRenderedGrapphicThingInstanceVector;
 
-		// ��ǥ : �ɸ��� �� ��ü �߿����� ��ǥ... �Ѵ� 0~999
+		// 좌표 : 심리스 맵 전체 중에서의 좌표... 둘다 0~999
 		WORD							m_wX;
 		WORD							m_wY;
 
diff --git a/src/GameLib/FlyingInstance.h b/src/GameLib/FlyingInstance.h
index 33db1658..5541fdfb 100644
--- a/src/GameLib/FlyingInstance.h
+++ b/src/GameLib/FlyingInstance.h
@@ -11,8 +11,8 @@ class CActorInstance;
 class CFlyingInstance 
 {	
 public:
-	// 2004. 3. 26. myevan. ������ ���̹��� �ʿ�. ���ӿ��� ������� �ʴ´ٸ� ������ �� �������� ��ӹ޾� ���鵵�� ����
-	void Clear(); // Destroy�� ����
+	// 2004. 3. 26. myevan. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
+	void Clear(); // Destroy와 같다
 	void SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition);
 	void SetFlyTarget(const CFlyTarget & cr_Target); // Shot at Target	
 	
@@ -56,7 +56,7 @@ public:
 	void SetOwner(IActorInstance * pOwner) { m_pOwner = pOwner; }
 	void SetSkillIndex(DWORD dwIndex) { m_dwSkillIndex = dwIndex; }
 
-	// FIXME : ������ ����ϰ� �ֽ��ϴ�. �ӽ÷� ����.. - [levites]
+	// FIXME : 툴에서 사용하고 있습니다. 임시로 위로.. - [levites]
 	void __Explode(bool bBomb=true);
 	void __Bomb();
 
@@ -67,7 +67,7 @@ protected:
 
 	void __SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition);
 	void __SetTargetDirection(const CFlyTarget& c_rkTarget);
-	void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // ���� Ÿ�� ���� ����
+	void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // 시작 타겟 방향 설정
 
 protected:
 	
diff --git a/src/GameLib/GameEventManager.h b/src/GameLib/GameEventManager.h
index 8fe95a7f..801fd06e 100644
--- a/src/GameLib/GameEventManager.h
+++ b/src/GameLib/GameEventManager.h
@@ -6,10 +6,10 @@
 //
 //	CGameEventManager
 //
-//		Note : Game�󿡼� �Ͼ�� ����, ȭ�� ��鸲, Range ������� �����Ӱ� Ÿ�� ���� Event
-//             �� ���������� �����ϴ� Ŭ����. - [levites]
+//		Note : Game상에서 일어나는 폭발, 화면 흔들림, Range 무기들의 움직임과 타격 등의 Event
+//             를 종합적으로 관리하는 클래스. - [levites]
 //
-//		Note : ���ӻ��� Cinematic Event �� ��Ʈ���ϴ� �Ŵ����� ����Ѵ�. 2004.07.19 - [levites]
+//		Note : 게임상의 Cinematic Event 를 컨트롤하는 매니져로 사용한다. 2004.07.19 - [levites]
 //
 
 class CGameEventManager : public CSingleton<CGameEventManager>, public CScreen
diff --git a/src/GameLib/Interface.h b/src/GameLib/Interface.h
index 78cf53cf..5e252553 100644
--- a/src/GameLib/Interface.h
+++ b/src/GameLib/Interface.h
@@ -1,6 +1,6 @@
 #pragma once
 
-// 2004.07.05.myevan.�ý�ź�� �ʿ� ���̴� �����ذ�
+// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결
 class IBackground : public CSingleton<IBackground>
 {
 	public:
diff --git a/src/GameLib/ItemData.h b/src/GameLib/ItemData.h
index a8b7b286..c05d7ec6 100644
--- a/src/GameLib/ItemData.h
+++ b/src/GameLib/ItemData.h
@@ -1,6 +1,6 @@
 #pragma once
 
-// NOTE : Item�� ���� ���� Ŭ������.
+// NOTE : Item의 통합 관리 클래스다.
 //        Icon, Model (droped on ground), Game Data
 
 #include "../eterLib/GrpSubImage.h"
@@ -22,18 +22,18 @@ class CItemData
 		enum EItemType
 		{
 			ITEM_TYPE_NONE,					//0
-			ITEM_TYPE_WEAPON,				//1//����
-			ITEM_TYPE_ARMOR,				//2//����
-			ITEM_TYPE_USE,					//3//������ ���
+			ITEM_TYPE_WEAPON,				//1//무기
+			ITEM_TYPE_ARMOR,				//2//갑옷
+			ITEM_TYPE_USE,					//3//아이템 사용
 			ITEM_TYPE_AUTOUSE,				//4
 			ITEM_TYPE_MATERIAL,				//5
-			ITEM_TYPE_SPECIAL,				//6 //����� ������
+			ITEM_TYPE_SPECIAL,				//6 //스페셜 아이템
 			ITEM_TYPE_TOOL,					//7
-			ITEM_TYPE_LOTTERY,				//8//����
-			ITEM_TYPE_ELK,					//9//��
+			ITEM_TYPE_LOTTERY,				//8//복권
+			ITEM_TYPE_ELK,					//9//돈
 			ITEM_TYPE_METIN,				//10
 			ITEM_TYPE_CONTAINER,			//11
-			ITEM_TYPE_FISH,					//12//����
+			ITEM_TYPE_FISH,					//12//낚시
 			ITEM_TYPE_ROD,					//13
 			ITEM_TYPE_RESOURCE,				//14
 			ITEM_TYPE_CAMPFIRE,				//15
@@ -41,21 +41,21 @@ class CItemData
 			ITEM_TYPE_SKILLBOOK,			//17
 			ITEM_TYPE_QUEST,				//18
 			ITEM_TYPE_POLYMORPH,			//19
-			ITEM_TYPE_TREASURE_BOX,			//20//��������
-			ITEM_TYPE_TREASURE_KEY,			//21//�������� ����
+			ITEM_TYPE_TREASURE_BOX,			//20//보물상자
+			ITEM_TYPE_TREASURE_KEY,			//21//보물상자 열쇠
 			ITEM_TYPE_SKILLFORGET,			//22
 			ITEM_TYPE_GIFTBOX,				//23
 			ITEM_TYPE_PICK,					//24
-			ITEM_TYPE_HAIR,					//25//�Ӹ�
-			ITEM_TYPE_TOTEM,				//26//����
-			ITEM_TYPE_BLEND,				//27//�����ɶ� �����ϰ� �Ӽ��� �ٴ� �๰
-			ITEM_TYPE_COSTUME,				//28//�ڽ��� ������ (2011�� 8�� �߰��� �ڽ��� �ý��ۿ� ������)
-			ITEM_TYPE_DS,					//29 //��ȥ��
-			ITEM_TYPE_SPECIAL_DS,			//30 // Ư���� ��ȥ�� (DS_SLOT�� �����ϴ� UNIQUE �������̶� �����ϸ� ��)
-			ITEM_TYPE_EXTRACT,					//31 ���⵵��.
-			ITEM_TYPE_SECONDARY_COIN,			//32 ������.
-			ITEM_TYPE_RING,						//33 ���� (����ũ ������ �ƴ� ���� ���� ����)
-			ITEM_TYPE_BELT,						//34 ��Ʈ
+			ITEM_TYPE_HAIR,					//25//머리
+			ITEM_TYPE_TOTEM,				//26//토템
+			ITEM_TYPE_BLEND,				//27//생성될때 랜덤하게 속성이 붙는 약물
+			ITEM_TYPE_COSTUME,				//28//코스츔 아이템 (2011년 8월 추가된 코스츔 시스템용 아이템)
+			ITEM_TYPE_DS,					//29 //용혼석
+			ITEM_TYPE_SPECIAL_DS,			//30 // 특수한 용혼석 (DS_SLOT에 착용하는 UNIQUE 아이템이라 생각하면 됨)
+			ITEM_TYPE_EXTRACT,					//31 추출도구.
+			ITEM_TYPE_SECONDARY_COIN,			//32 명도전.
+			ITEM_TYPE_RING,						//33 반지 (유니크 슬롯이 아닌 순수 반지 슬롯)
+			ITEM_TYPE_BELT,						//34 벨트
 
 			ITEM_TYPE_MAX_NUM,				
 		};
@@ -63,7 +63,7 @@ class CItemData
 		enum EWeaponSubTypes
 		{
 			WEAPON_SWORD,
-			WEAPON_DAGGER,	//�̵���
+			WEAPON_DAGGER,	//이도류
 			WEAPON_BOW,
 			WEAPON_TWO_HANDED,
 			WEAPON_BELL,
@@ -100,8 +100,8 @@ class CItemData
 
 		enum ECostumeSubTypes
 		{
-			COSTUME_BODY,				//0	����(main look)
-			COSTUME_HAIR,				//1	���(Ż������)
+			COSTUME_BODY,				//0	갑옷(main look)
+			COSTUME_HAIR,				//1	헤어(탈착가능)
 			COSTUME_NUM_TYPES,
 		};
 
@@ -136,8 +136,8 @@ class CItemData
 			USE_UNBIND,
 			USE_TIME_CHARGE_PER,
 			USE_TIME_CHARGE_FIX,				// 28
-			USE_PUT_INTO_BELT_SOCKET,			// 29 ��Ʈ ���Ͽ� ����� �� �ִ� ������ 
-			USE_PUT_INTO_RING_SOCKET,			// 30 ���� ���Ͽ� ����� �� �ִ� ������ (����ũ ���� ����, ���� �߰��� ���� ����)
+			USE_PUT_INTO_BELT_SOCKET,			// 29 벨트 소켓에 사용할 수 있는 아이템 
+			USE_PUT_INTO_RING_SOCKET,			// 30 반지 소켓에 사용할 수 있는 아이템 (유니크 반지 말고, 새로 추가된 반지 슬롯)
 		};
 
 		enum EDragonSoulSubType
@@ -168,16 +168,16 @@ class CItemData
 			LIMIT_CON,
 			LIMIT_PCBANG,
 
-			/// ���� ���ο� ��� ���� �ǽð����� �ð� ���� (socket0�� �Ҹ� �ð��� ����: unix_timestamp Ÿ��)
+			/// 착용 여부와 상관 없이 실시간으로 시간 차감 (socket0에 소멸 시간이 박힘: unix_timestamp 타입)
 			LIMIT_REAL_TIME,						
 
-			/// �������� �� ó�� ���(Ȥ�� ����) �� �������� ����Ÿ�� Ÿ�̸� ���� 
-			/// ���� ��� ������ socket0�� ��밡�ɽð�(�ʴ���, 0�̸� �������� limit value�� ���) ���� �����ִٰ� 
-			/// ������ ���� socket1�� ��� Ƚ���� ������ socket0�� unix_timestamp Ÿ���� �Ҹ�ð��� ����.
+			/// 아이템을 맨 처음 사용(혹은 착용) 한 순간부터 리얼타임 타이머 시작 
+			/// 최초 사용 전에는 socket0에 사용가능시간(초단위, 0이면 프로토의 limit value값 사용) 값이 쓰여있다가 
+			/// 아이템 사용시 socket1에 사용 횟수가 박히고 socket0에 unix_timestamp 타입의 소멸시간이 박힘.
 			LIMIT_REAL_TIME_START_FIRST_USE,
 
-			/// �������� ���� ���� ���� ��� �ð��� �����Ǵ� ������
-			/// socket0�� ���� �ð��� �ʴ����� ����. (������ ���� ���� �ش� ���� 0�̸� �������� limit value���� socket0�� ����)
+			/// 아이템을 착용 중일 때만 사용 시간이 차감되는 아이템
+			/// socket0에 남은 시간이 초단위로 박힘. (아이템 최초 사용시 해당 값이 0이면 프로토의 limit value값을 socket0에 복사)
 			LIMIT_TIMER_BASED_ON_WEAR,
 
 			LIMIT_MAX_NUM
@@ -185,41 +185,41 @@ class CItemData
 
 		enum EItemAntiFlag
 		{
-			ITEM_ANTIFLAG_FEMALE        = (1 << 0),		// ���� ��� �Ұ�
-			ITEM_ANTIFLAG_MALE          = (1 << 1),		// ���� ��� �Ұ�
-			ITEM_ANTIFLAG_WARRIOR       = (1 << 2),		// ���� ��� �Ұ�
-			ITEM_ANTIFLAG_ASSASSIN      = (1 << 3),		// �ڰ� ��� �Ұ�
-			ITEM_ANTIFLAG_SURA          = (1 << 4),		// ���� ��� �Ұ� 
-			ITEM_ANTIFLAG_SHAMAN        = (1 << 5),		// ���� ��� �Ұ�
-			ITEM_ANTIFLAG_GET           = (1 << 6),		// ���� �� ����
-			ITEM_ANTIFLAG_DROP          = (1 << 7),		// ���� �� ����
-			ITEM_ANTIFLAG_SELL          = (1 << 8),		// �� �� ����
-			ITEM_ANTIFLAG_EMPIRE_A      = (1 << 9),		// A ���� ��� �Ұ�
-			ITEM_ANTIFLAG_EMPIRE_B      = (1 << 10),	// B ���� ��� �Ұ�
-			ITEM_ANTIFLAG_EMPIRE_R      = (1 << 11),	// C ���� ��� �Ұ�
-			ITEM_ANTIFLAG_SAVE          = (1 << 12),	// ������� ����
-			ITEM_ANTIFLAG_GIVE          = (1 << 13),	// �ŷ� �Ұ�
-			ITEM_ANTIFLAG_PKDROP        = (1 << 14),	// PK�� �������� ����
-			ITEM_ANTIFLAG_STACK         = (1 << 15),	// ��ĥ �� ����
-			ITEM_ANTIFLAG_MYSHOP        = (1 << 16),	// ���� ������ �ø� �� ����
+			ITEM_ANTIFLAG_FEMALE        = (1 << 0),		// 여성 사용 불가
+			ITEM_ANTIFLAG_MALE          = (1 << 1),		// 남성 사용 불가
+			ITEM_ANTIFLAG_WARRIOR       = (1 << 2),		// 무사 사용 불가
+			ITEM_ANTIFLAG_ASSASSIN      = (1 << 3),		// 자객 사용 불가
+			ITEM_ANTIFLAG_SURA          = (1 << 4),		// 수라 사용 불가 
+			ITEM_ANTIFLAG_SHAMAN        = (1 << 5),		// 무당 사용 불가
+			ITEM_ANTIFLAG_GET           = (1 << 6),		// 집을 수 없음
+			ITEM_ANTIFLAG_DROP          = (1 << 7),		// 버릴 수 없음
+			ITEM_ANTIFLAG_SELL          = (1 << 8),		// 팔 수 없음
+			ITEM_ANTIFLAG_EMPIRE_A      = (1 << 9),		// A 제국 사용 불가
+			ITEM_ANTIFLAG_EMPIRE_B      = (1 << 10),	// B 제국 사용 불가
+			ITEM_ANTIFLAG_EMPIRE_R      = (1 << 11),	// C 제국 사용 불가
+			ITEM_ANTIFLAG_SAVE          = (1 << 12),	// 저장되지 않음
+			ITEM_ANTIFLAG_GIVE          = (1 << 13),	// 거래 불가
+			ITEM_ANTIFLAG_PKDROP        = (1 << 14),	// PK시 떨어지지 않음
+			ITEM_ANTIFLAG_STACK         = (1 << 15),	// 합칠 수 없음
+			ITEM_ANTIFLAG_MYSHOP        = (1 << 16),	// 개인 상점에 올릴 수 없음
 		};
 
 		enum EItemFlag
 		{
-			ITEM_FLAG_REFINEABLE        = (1 << 0),		// ���� ����
+			ITEM_FLAG_REFINEABLE        = (1 << 0),		// 개량 가능
 			ITEM_FLAG_SAVE              = (1 << 1),
-			ITEM_FLAG_STACKABLE         = (1 << 2),     // ������ ��ĥ �� ����
-			ITEM_FLAG_COUNT_PER_1GOLD   = (1 << 3),		// ������ ���� / �������� ����
-			ITEM_FLAG_SLOW_QUERY        = (1 << 4),		// ���� ����ÿ��� SQL�� ������
+			ITEM_FLAG_STACKABLE         = (1 << 2),     // 여러개 합칠 수 있음
+			ITEM_FLAG_COUNT_PER_1GOLD   = (1 << 3),		// 가격이 개수 / 가격으로 변함
+			ITEM_FLAG_SLOW_QUERY        = (1 << 4),		// 게임 종료시에만 SQL에 쿼리함
 			ITEM_FLAG_RARE              = (1 << 5),
 			ITEM_FLAG_UNIQUE            = (1 << 6),
 			ITEM_FLAG_MAKECOUNT			= (1 << 7),
 			ITEM_FLAG_IRREMOVABLE		= (1 << 8),
 			ITEM_FLAG_CONFIRM_WHEN_USE	= (1 << 9),
-			ITEM_FLAG_QUEST_USE         = (1 << 10),    // ����Ʈ ��ũ��Ʈ ��������?
-			ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11),    // ����Ʈ ��ũ��Ʈ ��������?
+			ITEM_FLAG_QUEST_USE         = (1 << 10),    // 퀘스트 스크립트 돌리는지?
+			ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11),    // 퀘스트 스크립트 돌리는지?
 			ITEM_FLAG_UNUSED03          = (1 << 12),    // UNUSED03
-			ITEM_FLAG_LOG               = (1 << 13),    // ���� �α׸� ����� �������ΰ�?
+			ITEM_FLAG_LOG               = (1 << 13),    // 사용시 로그를 남기는 아이템인가?
 			ITEM_FLAG_APPLICABLE		= (1 << 14),
 		};
 
@@ -319,17 +319,17 @@ class CItemData
 			APPLY_ATT_BONUS_TO_SURA,    // 61
 			APPLY_ATT_BONUS_TO_SHAMAN,  // 62
 			APPLY_ATT_BONUS_TO_MONSTER, // 63
-			APPLY_MALL_ATTBONUS,        // 64 ���ݷ� +x%
-			APPLY_MALL_DEFBONUS,        // 65 ���� +x%
-			APPLY_MALL_EXPBONUS,        // 66 ����ġ +x%
-			APPLY_MALL_ITEMBONUS,       // 67 ������ ����� x/10��
-			APPLY_MALL_GOLDBONUS,       // 68 �� ����� x/10��
-			APPLY_MAX_HP_PCT,           // 69 �ִ� ������ +x%
-			APPLY_MAX_SP_PCT,           // 70 �ִ� ���ŷ� +x%
-			APPLY_SKILL_DAMAGE_BONUS,   // 71 ��ų ������ * (100+x)%
-			APPLY_NORMAL_HIT_DAMAGE_BONUS,      // 72 ��Ÿ ������ * (100+x)%
-			APPLY_SKILL_DEFEND_BONUS,   // 73 ��ų ������ ��� * (100-x)%
-			APPLY_NORMAL_HIT_DEFEND_BONUS,      // 74 ��Ÿ ������ ��� * (100-x)%
+			APPLY_MALL_ATTBONUS,        // 64 공격력 +x%
+			APPLY_MALL_DEFBONUS,        // 65 방어력 +x%
+			APPLY_MALL_EXPBONUS,        // 66 경험치 +x%
+			APPLY_MALL_ITEMBONUS,       // 67 아이템 드롭율 x/10배
+			APPLY_MALL_GOLDBONUS,       // 68 돈 드롭율 x/10배
+			APPLY_MAX_HP_PCT,           // 69 최대 생명력 +x%
+			APPLY_MAX_SP_PCT,           // 70 최대 정신력 +x%
+			APPLY_SKILL_DAMAGE_BONUS,   // 71 스킬 데미지 * (100+x)%
+			APPLY_NORMAL_HIT_DAMAGE_BONUS,      // 72 평타 데미지 * (100+x)%
+			APPLY_SKILL_DEFEND_BONUS,   // 73 스킬 데미지 방어 * (100-x)%
+			APPLY_NORMAL_HIT_DEFEND_BONUS,      // 74 평타 데미지 방어 * (100-x)%
 			APPLY_EXTRACT_HP_PCT,		//75
 			APPLY_PC_BANG_EXP_BONUS,		//76
 			APPLY_PC_BANG_DROP_BONUS,		//77
@@ -338,17 +338,17 @@ class CItemData
 			APPLY_RESIST_SURA,				//80
 			APPLY_RESIST_SHAMAN,			//81
 			APPLY_ENERGY,					//82
-			APPLY_DEF_GRADE,				// 83 ����. DEF_GRADE_BONUS�� Ŭ�󿡼� �ι�� �������� �ǵ��� ����(...)�� �ִ�.
-			APPLY_COSTUME_ATTR_BONUS,		// 84 �ڽ�Ƭ �����ۿ� ���� �Ӽ�ġ ���ʽ�
-			APPLY_MAGIC_ATTBONUS_PER,		// 85 ���� ���ݷ� +x%
-			APPLY_MELEE_MAGIC_ATTBONUS_PER,			// 86 ���� + �и� ���ݷ� +x%
+			APPLY_DEF_GRADE,				// 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
+			APPLY_COSTUME_ATTR_BONUS,		// 84 코스튬 아이템에 붙은 속성치 보너스
+			APPLY_MAGIC_ATTBONUS_PER,		// 85 마법 공격력 +x%
+			APPLY_MELEE_MAGIC_ATTBONUS_PER,			// 86 마법 + 밀리 공격력 +x%
 			
-			APPLY_RESIST_ICE,		// 87 �ñ� ����
-			APPLY_RESIST_EARTH,		// 88 ���� ����
-			APPLY_RESIST_DARK,		// 89 ��� ����
+			APPLY_RESIST_ICE,		// 87 냉기 저항
+			APPLY_RESIST_EARTH,		// 88 대지 저항
+			APPLY_RESIST_DARK,		// 89 어둠 저항
 
-			APPLY_ANTI_CRITICAL_PCT,	//90 ũ��Ƽ�� ����
-			APPLY_ANTI_PENETRATE_PCT,	//91 ����Ÿ�� ����
+			APPLY_ANTI_CRITICAL_PCT,	//90 크리티컬 저항
+			APPLY_ANTI_PENETRATE_PCT,	//91 관통타격 저항
 
    			MAX_APPLY_NUM,              // 
 		};
diff --git a/src/GameLib/MapBase.h b/src/GameLib/MapBase.h
index e32c55f9..39d8cf5e 100644
--- a/src/GameLib/MapBase.h
+++ b/src/GameLib/MapBase.h
@@ -22,13 +22,13 @@ class CMapBase : public CScreen
 		virtual bool	Update(float fX, float fY, float fZ) = 0;
 		virtual void	UpdateAroundAmbience(float fX, float fY, float fZ) = 0;
 		virtual float	GetHeight(float fx, float fy) = 0;
-		virtual void	OnBeginEnvironment() = 0; // ������ �� �� �ҷ����� ���⼭ Environment�� ���� �ִ� �͵��� ���� �Ѵ�.
+		virtual void	OnBeginEnvironment() = 0; // 렌더링 할 때 불려지며 여기서 Environment에 관련 있는 것들을 셋팅 한다.
 
 		virtual void 	ApplyLight(DWORD dwVersion, const D3DLIGHT9& c_rkLight) = 0;
 
 	protected:
 		virtual void	OnRender() = 0;
-		virtual void	OnSetEnvironmentDataPtr() = 0;	// Environment �����Ͱ� ������ �� �ҷ�����.
+		virtual void	OnSetEnvironmentDataPtr() = 0;	// Environment 데이터가 설정될 때 불려진다.
 		virtual void	OnResetEnvironmentDataPtr() = 0;
 
 	public:
@@ -50,14 +50,14 @@ class CMapBase : public CScreen
 		const std::string & GetName() const { return m_strName; }
 		void SetName(const std::string & cr_strName) { m_strName = cr_strName; }
 
-		bool IsCopiedMap() const { return m_strParentMapName.length() > 0; }		// "���� �����ʹ� ���� �ִ�" ���� ���ΰ�?
-		const std::string& GetParentMapName() const { return m_strParentMapName; }	// ���� �����͸� �����ִ� ���� �̸��� ���� (������� ��� �ʼ��� ���õǾ�� ��)
+		bool IsCopiedMap() const { return m_strParentMapName.length() > 0; }		// "원본 데이터는 따로 있는" 복사 맵인가?
+		const std::string& GetParentMapName() const { return m_strParentMapName; }	// 원본 데이터를 갖고있는 맵의 이름을 리턴 (복사맵의 경우 필수로 세팅되어야 함)
 		const std::string& GetMapDataDirectory() const { return IsCopiedMap() ? m_strParentMapName : m_strName; }
 
 	protected:
-		EMAPTYPE				m_eType;				// �� ����... ����� Indoor�� Ourdoor�� �ִ�.
-		std::string				m_strName;				// �� �̸�. �� �̸��� �� �ĺ��ڰ� �� �� ������?
-		std::string				m_strParentMapName;		// ���� ���� �̸�. �� ���� ���õǾ� �ִٸ� ���� ��� �� �����ʹ� ParentMap/* ��ο��� �о�´�. ���� �Ϻθ� �о���� ����� �ʿ���뼭 �н�.
+		EMAPTYPE				m_eType;				// 맵 종류... 현재는 Indoor와 Ourdoor가 있다.
+		std::string				m_strName;				// 맵 이름. 맵 이름이 맵 식별자가 될 수 있을까?
+		std::string				m_strParentMapName;		// 원본 맵의 이름. 이 값이 세팅되어 있다면 실제 모든 맵 데이터는 ParentMap/* 경로에서 읽어온다. 맵의 일부만 읽어오는 기능은 필요없대서 패스.
 		bool					m_bReady;
 
 		const TEnvironmentData *	mc_pEnvironmentData;
diff --git a/src/GameLib/MapManager.h b/src/GameLib/MapManager.h
index 829693f7..4cc0f574 100644
--- a/src/GameLib/MapManager.h
+++ b/src/GameLib/MapManager.h
@@ -27,13 +27,13 @@ class CMapManager : public CScreen, public IPhysicsWorld
 		void					Initialize();
 		void					Destroy();
 
-		void					Create();		// AllocMap ȣ�� �ؼ� m_pMap �� ����
+		void					Create();		// AllocMap 호출 해서 m_pMap 을 만듬
 
 		virtual void			Clear();
 		virtual CMapBase *		AllocMap();
 
 		//////////////////////////////////////////////////////////////////////////
-		// Map ���� �Լ�
+		// Map 관리 함수
 		//////////////////////////////////////////////////////////////////////////
 		bool					IsMapReady();
 
@@ -51,9 +51,9 @@ class CMapManager : public CScreen, public IPhysicsWorld
 		//////////////////////////////////////////////////////////////////////////
 		// Environment
 		///
-		// NOTE : ���� Environment�� ������ ������ ��Ų��
-		//        ���� ���� ������ �Ǿ����� ����. �� �Լ����� Protected�� �ְ�,
-		//        MapManager�� TimeControl �κ��� �����ϵ��� �Ѵ�. - [levites]
+		// NOTE : 다음 Environment로 서서히 블렌딩 시킨다
+		//        아직 세부 구현은 되어있지 않음. 이 함수들은 Protected로 넣고,
+		//        MapManager에 TimeControl 부분을 구현하도록 한다. - [levites]
 		void					SetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData);
 		void					ResetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData);
 		void					SetEnvironmentData(int nEnvDataIndex);
diff --git a/src/GameLib/MapOutdoor.h b/src/GameLib/MapOutdoor.h
index ae015f4d..bf2d30ea 100644
--- a/src/GameLib/MapOutdoor.h
+++ b/src/GameLib/MapOutdoor.h
@@ -27,7 +27,7 @@
 
 typedef struct SOutdoorMapCoordinate
 {
-	short m_sTerrainCoordX;		// Terrain ��ǥ
+	short m_sTerrainCoordX;		// Terrain 좌표
 	short m_sTerrainCoordY;
 } TOutdoorMapCoordinate;
 
@@ -161,7 +161,7 @@ class CMapOutdoor : public CMapBase
 		bool			isTerrainLoaded(WORD wX, WORD wY);
 		bool			isAreaLoaded(WORD wX, WORD wY);
 
-		void			AssignTerrainPtr();				// ���� ��ǥ���� ����(ex. 3x3)�� �ִ� �͵��� �����͸� �����Ѵ�. (������Ʈ �� �ҷ���)
+		void			AssignTerrainPtr();				// 현재 좌표에서 주위(ex. 3x3)에 있는 것들의 포인터를 연결한다. (업데이트 시 불려짐)
 
 		void			SaveAlphaFogOperation();
 		void			RestoreAlphaFogOperation();
@@ -169,7 +169,7 @@ class CMapOutdoor : public CMapBase
 		//////////////////////////////////////////////////////////////////////////
 		// New
 		//////////////////////////////////////////////////////////////////////////
-		// �������� �ʵ��� ��´�.
+		// 여러가지 맵들을 얻는다.
 		void			GetHeightMap(const BYTE & c_rucTerrainNum, WORD ** pwHeightMap);
 		void			GetNormalMap(const BYTE & c_rucTerrainNum, char ** pucNormalMap);
 
@@ -182,19 +182,19 @@ class CMapOutdoor : public CMapBase
 	// Terrain
 	//////////////////////////////////////////////////////////////////////////
 	protected:
-		// ������
+		// 데이터
 		CTerrain *					m_pTerrain[AROUND_AREA_NUM];	// Terrain
-		CTerrainPatchProxy *		m_pTerrainPatchProxyList;			// CTerrain�� ������ �Ҷ� ������ �������ϴ� ������ ��ġ��... Seamless Map �� ���� CTerrain���κ��� ����...
+		CTerrainPatchProxy *		m_pTerrainPatchProxyList;			// CTerrain을 랜더링 할때 실제로 랜더링하는 폴리곤 패치들... Seamless Map 을 위해 CTerrain으로부터 독립...
 
-		long						m_lViewRadius;				// �þ� �Ÿ�.. ��������..
-		float						m_fHeightScale;				// ���� ������... 1.0�϶� 0~655.35���ͱ��� ǥ�� ����.
+		long						m_lViewRadius;				// 시야 거리.. 셀단위임..
+		float						m_fHeightScale;				// 높이 스케일... 1.0일때 0~655.35미터까지 표현 가능.
 
-		short						m_sTerrainCountX, m_sTerrainCountY;		// seamless map �ȿ� ���� Terrain����
+		short						m_sTerrainCountX, m_sTerrainCountY;		// seamless map 안에 들어가는 Terrain개수
 
-		TOutdoorMapCoordinate		m_CurCoordinate;		// ������ ��ǥ
+		TOutdoorMapCoordinate		m_CurCoordinate;		// 현재의 좌표
 
 		long						m_lCurCoordStartX, m_lCurCoordStartY;
-		TOutdoorMapCoordinate		m_PrevCoordinate;		// ������ ��ǥ
+		TOutdoorMapCoordinate		m_PrevCoordinate;		// 현재의 좌표
 		TOutdoorMapCoordinateMap	m_EntryPointMap;
 
 		WORD						m_wPatchCount;
@@ -316,7 +316,7 @@ class CMapOutdoor : public CMapBase
 		//////////////////////////////////////////////////////////////////////////
 		// New
 		//////////////////////////////////////////////////////////////////////////
-		long					m_lCenterX, m_lCenterY;		// Terrain ��ǥ ���� �� ��ǥ...
+		long					m_lCenterX, m_lCenterY;		// Terrain 좌표 내의 셀 좌표...
 		long					m_lOldReadX, m_lOldReadY;	/* Last center */
 
 		//////////////////////////////////////////////////////////////////////////
diff --git a/src/GameLib/MapType.h b/src/GameLib/MapType.h
index 11e26cea..d84fb815 100644
--- a/src/GameLib/MapType.h
+++ b/src/GameLib/MapType.h
@@ -182,7 +182,7 @@ typedef struct SEnvironmentData
 	std::string strMainFlareTextureFileName; 
 	float fMainFlareSize;
 	
-	BOOL bReserve; // �ܺο��� ������ ��ġ�� ����
+	BOOL bReserve; // 외부에서 설정을 고치지 않음
 } TEnvironmentData;
 
 typedef std::map<DWORD, TEnvironmentData*> TEnvironmentDataMap;
diff --git a/src/GameLib/MonsterAreaInfo.h b/src/GameLib/MonsterAreaInfo.h
index 8f314728..e118ba5c 100644
--- a/src/GameLib/MonsterAreaInfo.h
+++ b/src/GameLib/MonsterAreaInfo.h
@@ -89,17 +89,17 @@ protected:
 protected:
 	EMonsterAreaInfoType	m_eMonsterAreaInfoType;
 
-	// Group Type ����
+	// Group Type 정보
 	DWORD			m_dwGroupID;
 	std::string		m_strGroupName;
 	std::string		m_strLeaderName;
 	DWORD			m_dwFollowerCount;
 
-	// Monster Type ����
+	// Monster Type 정보
 	DWORD			m_dwVID;
 	std::string		m_strMonsterName;
 
-	// ���� ����
+	// 공통 정보
 	DWORD			m_dwMonsterCount;
 	EMonsterDir		m_eMonsterDir;
 	D3DXVECTOR2		m_v2Monsterdirection;
diff --git a/src/GameLib/PhysicsObject.h b/src/GameLib/PhysicsObject.h
index 302e51b2..69c2bcaa 100644
--- a/src/GameLib/PhysicsObject.h
+++ b/src/GameLib/PhysicsObject.h
@@ -29,8 +29,8 @@ private:
 };
 
 class CActorInstance;
-//NOTE : ���� �ȵ����� Dependency Inversion�� ���� ������ ������ interface�� �����ϱ� ���ؼ� �̹�Ĵ�� ����
-//������ ����� ���踦 �Ѵٸ� world�� live object���� ������ ���ݴ� base project���� (gamelib�̳� �� base project���� �ؾ� �Ѵ� )
+//NOTE : 맘에 안들지만 Dependency Inversion을 막고 이전과 동일한 interface를 유지하기 위해서 이방식대로 간다
+//하지만 제대로 설계를 한다면 world와 live object들의 관리는 조금더 base project에서 (gamelib이나 더 base project에서 해야 한다 )
 class IObjectManager 
 {
 public:
diff --git a/src/GameLib/RaceData.h b/src/GameLib/RaceData.h
index 94d43d07..61becf22 100644
--- a/src/GameLib/RaceData.h
+++ b/src/GameLib/RaceData.h
@@ -16,8 +16,8 @@ class CRaceData
 		enum EParts
 		{
 			// Share index with server 
-			// ECharacterEquipmentPart�� �������ּ���.
-			//��Ŷ ũ�Ⱑ ���մϴ� ������ ������ �߰����ּ���.
+			// ECharacterEquipmentPart도 수정해주세요.
+			//패킷 크기가 변합니다 서버와 상의후 추가해주세요.
 			PART_MAIN,
 			PART_WEAPON,
 			PART_HEAD,
diff --git a/src/GameLib/RaceMotionData.h b/src/GameLib/RaceMotionData.h
index 5d61894c..ca4fe624 100644
--- a/src/GameLib/RaceMotionData.h
+++ b/src/GameLib/RaceMotionData.h
@@ -56,41 +56,41 @@ class CRaceMotionData
 
 		enum EName
 		{
-			NAME_NONE,                // 0 ����
-			NAME_WAIT,                // 1 ���          (00.msa)
-			NAME_WALK,                // 2 �ȱ�          (02.msa)
-			NAME_RUN,                 // 3 �ٱ�          (03.msa)
-			NAME_CHANGE_WEAPON,       // 4 ����ٲٱ�
-			NAME_DAMAGE,              // 5 ����±�      (30.msa)
-			NAME_DAMAGE_FLYING,       // 6 ���鳯�ư���  (32.msa)
-			NAME_STAND_UP,            // 7 �����Ͼ��  (33.msa)
-			NAME_DAMAGE_BACK,         // 8 �ĸ�±�      (34.msa)
-			NAME_DAMAGE_FLYING_BACK,  // 9 �ĸ鳯�ư���  (35.msa)
-			NAME_STAND_UP_BACK,       // 10 �ĸ��Ͼ�� (36.msa)
-			NAME_DEAD,                // 11 �ױ�         (31.msa)
-			NAME_DEAD_BACK,           // 12 �ĸ��ױ�     (37.msa)
-			NAME_NORMAL_ATTACK,       // 13 ����         (20.msa)
-			NAME_COMBO_ATTACK_1,      // 14 �޺� ����
-			NAME_COMBO_ATTACK_2,      // 15 �޺� ����
-			NAME_COMBO_ATTACK_3,      // 16 �޺� ����
-			NAME_COMBO_ATTACK_4,      // 17 �޺� ����
-			NAME_COMBO_ATTACK_5,      // 18 �޺� ����
-			NAME_COMBO_ATTACK_6,      // 19 �޺� ����
-			NAME_COMBO_ATTACK_7,      // 20 �޺� ����
-			NAME_COMBO_ATTACK_8,      // 21 �޺� ����
-			NAME_INTRO_WAIT,          // 22 ����ȭ�� ���
-			NAME_INTRO_SELECTED,      // 23 ����ȭ�� ����
-			NAME_INTRO_NOT_SELECTED,  // 24 ����ȭ�� ����
-			NAME_SPAWN,               // 25 ��ȯ
-			NAME_FISHING_THROW,       // 26 ���� ������
-			NAME_FISHING_WAIT,        // 27 ���� ���
-			NAME_FISHING_STOP,        // 28 ���� �׸��α�
-			NAME_FISHING_REACT,       // 29 ���� ����
-			NAME_FISHING_CATCH,       // 30 ���� ���
-			NAME_FISHING_FAIL,        // 31 ���� ����
-			NAME_STOP,                // 32 �� ���߱�
-			NAME_SPECIAL_1,           // 33 ����/NPC Ư�� ���� (24.msa)
-			NAME_SPECIAL_2,           // 34 ����/NPC Ư�� ���� (25.msa)
+			NAME_NONE,                // 0 없음
+			NAME_WAIT,                // 1 대기          (00.msa)
+			NAME_WALK,                // 2 걷기          (02.msa)
+			NAME_RUN,                 // 3 뛰기          (03.msa)
+			NAME_CHANGE_WEAPON,       // 4 무기바꾸기
+			NAME_DAMAGE,              // 5 정면맞기      (30.msa)
+			NAME_DAMAGE_FLYING,       // 6 정면날아가기  (32.msa)
+			NAME_STAND_UP,            // 7 정면일어나기  (33.msa)
+			NAME_DAMAGE_BACK,         // 8 후면맞기      (34.msa)
+			NAME_DAMAGE_FLYING_BACK,  // 9 후면날아가기  (35.msa)
+			NAME_STAND_UP_BACK,       // 10 후면일어나기 (36.msa)
+			NAME_DEAD,                // 11 죽기         (31.msa)
+			NAME_DEAD_BACK,           // 12 후면죽기     (37.msa)
+			NAME_NORMAL_ATTACK,       // 13 공격         (20.msa)
+			NAME_COMBO_ATTACK_1,      // 14 콤보 공격
+			NAME_COMBO_ATTACK_2,      // 15 콤보 공격
+			NAME_COMBO_ATTACK_3,      // 16 콤보 공격
+			NAME_COMBO_ATTACK_4,      // 17 콤보 공격
+			NAME_COMBO_ATTACK_5,      // 18 콤보 공격
+			NAME_COMBO_ATTACK_6,      // 19 콤보 공격
+			NAME_COMBO_ATTACK_7,      // 20 콤보 공격
+			NAME_COMBO_ATTACK_8,      // 21 콤보 공격
+			NAME_INTRO_WAIT,          // 22 선택화면 대기
+			NAME_INTRO_SELECTED,      // 23 선택화면 선택
+			NAME_INTRO_NOT_SELECTED,  // 24 선택화면 비선택
+			NAME_SPAWN,               // 25 소환
+			NAME_FISHING_THROW,       // 26 낚시 던지기
+			NAME_FISHING_WAIT,        // 27 낚시 대기
+			NAME_FISHING_STOP,        // 28 낚시 그만두기
+			NAME_FISHING_REACT,       // 29 낚시 반응
+			NAME_FISHING_CATCH,       // 30 낚시 잡기
+			NAME_FISHING_FAIL,        // 31 낚시 실패
+			NAME_STOP,                // 32 말 멈추기
+			NAME_SPECIAL_1,           // 33 몬스터/NPC 특수 동작 (24.msa)
+			NAME_SPECIAL_2,           // 34 몬스터/NPC 특수 동작 (25.msa)
 			NAME_SPECIAL_3,
 			NAME_SPECIAL_4,
 			NAME_SPECIAL_5,
@@ -139,7 +139,7 @@ class CRaceMotionData
 			NAME_DANCE_3,
 			NAME_DANCE_4,
 			NAME_DANCE_5,
-			NAME_DANCE_6,		// ������Ÿ��
+			NAME_DANCE_6,		// 강남스타일
 			
 			NAME_DANCE_END = NAME_DANCE_1 + 16,
 
@@ -210,8 +210,8 @@ class CRaceMotionData
 
 		void			SetName(UINT eName);
 
-		UINT			GetType() const;		// ��� Ÿ�� ���
-		bool			IsLock() const;			// ���� ��� �ΰ�? (�ٸ� ��ǿ� ĵ������ ����)
+		UINT			GetType() const;		// 모션 타입 얻기
+		bool			IsLock() const;			// 락된 모션 인가? (다른 모션에 캔슬되지 않음)
 
 		int				GetLoopCount() const;
 
@@ -225,7 +225,7 @@ class CRaceMotionData
 		void			SetAccumulationPosition(const TPixelPosition & c_rPos);
 		const			TPixelPosition & GetAccumulationPosition() { return m_accumulationPosition; }
 
-		BOOL			IsComboInputTimeData() const; // �޺� �Է� Ÿ�̹� �����Ͱ� �ִ°�? 
+		BOOL			IsComboInputTimeData() const; // 콤보 입력 타이밍 데이터가 있는가? 
 
 		float			GetComboInputStartTime() const;
 		float			GetNextComboTime() const;
diff --git a/src/GameLib/StdAfx.h b/src/GameLib/StdAfx.h
index 1e1287aa..90268e0d 100644
--- a/src/GameLib/StdAfx.h
+++ b/src/GameLib/StdAfx.h
@@ -6,7 +6,7 @@
 #endif
 
 #pragma warning(disable:4710)	// not inlined
-#pragma warning(disable:4786)	// character 255 �Ѿ�°� ����
+#pragma warning(disable:4786)	// character 255 넘어가는거 끄기
 #pragma warning(disable:4244)	// type conversion possible lose of data
 
 #pragma warning(disable:4018)
diff --git a/src/PRTerrainLib/Terrain.h b/src/PRTerrainLib/Terrain.h
index d6cc607b..f5e8d765 100644
--- a/src/PRTerrainLib/Terrain.h
+++ b/src/PRTerrainLib/Terrain.h
@@ -74,7 +74,7 @@ class CTerrainImpl
 
 	public:
 		static void				SetTextureSet(CTextureSet * pTextureSet);
-		static CTextureSet *	GetTextureSet();	// ������ �����ؾ� ��
+		static CTextureSet *	GetTextureSet();	// 무조건 성공해야 함
 
 	protected:
 		static CTextureSet	*	ms_pTextureSet;
@@ -134,7 +134,7 @@ class CTerrainImpl
 		//////////////////////////////////////////////////////////////////////////
 
 		//////////////////////////////////////////////////////////////////////////
-		// TileMap�� HeightMap ����
+		// TileMap과 HeightMap 비율
 // 		int						m_iHeightTileRatio;
 
 		//////////////////////////////////////////////////////////////////////////
diff --git a/src/PRTerrainLib/TextureSet.h b/src/PRTerrainLib/TextureSet.h
index b62d9038..3221f406 100644
--- a/src/PRTerrainLib/TextureSet.h
+++ b/src/PRTerrainLib/TextureSet.h
@@ -28,7 +28,7 @@ typedef struct STerrainTexture
 	float						UOffset;
 	float						VOffset;
 	bool						bSplat;
-	unsigned short				Begin, End;	// 0 ~ 65535 �� 16bit heightfield ���̰�.
+	unsigned short				Begin, End;	// 0 ~ 65535 의 16bit heightfield 높이값.
 	D3DXMATRIX					m_matTransform;
 } TTerrainTexture;
 
diff --git a/src/UserInterface/AccountConnector.h b/src/UserInterface/AccountConnector.h
index 89337226..67134284 100644
--- a/src/UserInterface/AccountConnector.h
+++ b/src/UserInterface/AccountConnector.h
@@ -64,8 +64,8 @@ class CAccountConnector : public CNetworkStream, public CSingleton<CAccountConne
 		bool __AuthState_RecvHybridCryptSDB(int VarSize);
 
 		bool __AnalyzePacket(UINT uHeader, UINT uPacketSize, bool (CAccountConnector::*pfnDispatchPacket)());
-		// TODO:  ���� ����� �ӽô�.  header�ڿ� size 4byte�� ������ �´ٴ� ������.
-		// ����� �Ϸ���  Packet System Refactoring�ؾ� �Ѵ�. 
+		// TODO:  지금 현재는 임시다.  header뒤에 size 4byte가 무조건 온다는 가정임.
+		// 제대로 하려면  Packet System Refactoring해야 한다. 
 		bool __AnalyzeVarSizePacket(UINT uHeader, bool (CAccountConnector::*pfnDispatchPacket)(int));
 
 	protected:
diff --git a/src/UserInterface/GameType.h b/src/UserInterface/GameType.h
index 8d84dd92..114d022a 100644
--- a/src/UserInterface/GameType.h
+++ b/src/UserInterface/GameType.h
@@ -56,12 +56,12 @@ const DWORD c_Equipment_Unique2	= c_Equipment_Start + 8;
 const DWORD c_Equipment_Arrow	= c_Equipment_Start + 9;
 const DWORD c_Equipment_Shield	= c_Equipment_Start + 10;
 
-// ���� �߰��� �ű� ���� & ��Ʈ
-// ������ �����ۿ� �Ҵ��� �� �ִ� ��ġ�� ���� ���, ä��� ����Ʈ ����, �ڽ�Ƭ �ý��� ������ ���ؼ� ������ �߷��ִ�.
-// �̰� �� ä��� ���� ������ ����������ó�� ������ ���� ������ ��������... ����
+// 새로 추가된 신규 반지 & 벨트
+// 장착형 아이템에 할당할 수 있는 위치가 기존 장비, 채기랍 퀘스트 보상, 코스튬 시스템 등으로 인해서 공간이 잘려있다.
+// 이게 다 채기랍 보상 버프를 장착아이템처럼 구현한 ㅅㄲ 때문에 난리났따... ㅆㅂ
 // 
-// �����ϸ�, ���� ���â���� ����DB�� ������ �������� 90 ~ 102 �̰�,
-// 2013�� �ʿ� ���� �߰��Ǵ� ���Ե��� 111 ~ ���� �����Ѵ�. ���� ��񿡼� �ִ�� ����� �� �ִ� ���� 121 �����̰�, 122���ʹ� ��ȥ������ ����Ѵ�.
+// 정리하면, 기존 장비창들은 서버DB상 아이템 포지션이 90 ~ 102 이고,
+// 2013년 초에 새로 추가되는 슬롯들은 111 ~ 부터 시작한다. 착용 장비에서 최대로 사용할 수 있는 값은 121 까지이고, 122부터는 용혼석에서 사용한다.
 #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
 	const DWORD c_New_Equipment_Start = c_Equipment_Start + 21;
 	const DWORD c_New_Equipment_Count = 3;
@@ -99,7 +99,7 @@ enum EDragonSoulStepTypes
 };
 
 #ifdef ENABLE_COSTUME_SYSTEM
-	const DWORD c_Costume_Slot_Start	= c_Equipment_Start + 19;	// [����] ����(19) �ϵ��ڵ� ����. ���� �������� �ڽ��� ������ 19������. ���� common/length.h ������ EWearPositions ������ ����.
+	const DWORD c_Costume_Slot_Start	= c_Equipment_Start + 19;	// [주의] 숫자(19) 하드코딩 주의. 현재 서버에서 코스츔 슬롯은 19부터임. 서버 common/length.h 파일의 EWearPositions 열거형 참고.
 	const DWORD	c_Costume_Slot_Body		= c_Costume_Slot_Start + 0;
 	const DWORD	c_Costume_Slot_Hair		= c_Costume_Slot_Start + 1;
 	const DWORD c_Costume_Slot_Count	= 2;
@@ -107,19 +107,19 @@ enum EDragonSoulStepTypes
 #endif
 
 
-// [����] ����(32) �ϵ��ڵ� ����. ���� �������� ��ȥ�� ������ 32������. 
-// ���� common/length.h ������ EWearPositions �������� 32���� Ȯ��� ���� �����ϰ�(32 �̻��� Ȯ�� �ϱ� ����� �Ǿ�����.), 
-// �� ���ĺ��͸� ��ȥ�� ���� �������� ���.
+// [주의] 숫자(32) 하드코딩 주의. 현재 서버에서 용혼석 슬롯은 32부터임. 
+// 서버 common/length.h 파일의 EWearPositions 열거형이 32까지 확장될 것을 염두하고(32 이상은 확장 하기 힘들게 되어있음.), 
+// 그 이후부터를 용혼석 장착 슬롯으로 사용.
 const DWORD c_Wear_Max = 32;
 const DWORD c_DragonSoul_Equip_Start = c_ItemSlot_Count + c_Wear_Max;
 const DWORD c_DragonSoul_Equip_Slot_Max = 6;
 const DWORD c_DragonSoul_Equip_End = c_DragonSoul_Equip_Start + c_DragonSoul_Equip_Slot_Max * DS_DECK_MAX_NUM;
 
-// NOTE: 2013�� 2�� 5�� ����... ��ȥ�� ��ũ�� 2���� �����ϴµ�, ���� Ȯ�� ���ɼ��� �־ 3�� ��ũ �������� �Ҵ� �� ��. �� �� ������ ��Ʈ �κ��丮�� ���
+// NOTE: 2013년 2월 5일 현재... 용혼석 데크는 2개가 존재하는데, 향후 확장 가능성이 있어서 3개 데크 여유분을 할당 해 둠. 그 뒤 공간은 벨트 인벤토리로 사용
 const DWORD c_DragonSoul_Equip_Reserved_Count = c_DragonSoul_Equip_Slot_Max * 3;		
 
 #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
-	// ��Ʈ �������� �����ϴ� �κ��丮
+	// 벨트 아이템이 제공하는 인벤토리
 	const DWORD c_Belt_Inventory_Slot_Start = c_DragonSoul_Equip_End + c_DragonSoul_Equip_Reserved_Count;
 	const DWORD c_Belt_Inventory_Width = 4;
 	const DWORD c_Belt_Inventory_Height= 4;
@@ -131,7 +131,7 @@ const DWORD c_DragonSoul_Equip_Reserved_Count = c_DragonSoul_Equip_Slot_Max * 3;
 	const DWORD c_Inventory_Count	= c_DragonSoul_Equip_End;
 #endif
 
-// ��ȥ�� ���� �κ��丮
+// 용혼석 전용 인벤토리
 const DWORD c_DragonSoul_Inventory_Start = 0;
 const DWORD c_DragonSoul_Inventory_Box_Size = 32;
 const DWORD c_DragonSoul_Inventory_Count = CItemData::DS_SLOT_NUM_TYPES * DRAGON_SOUL_GRADE_MAX * c_DragonSoul_Inventory_Box_Size;
@@ -157,13 +157,13 @@ enum ESlotType
 enum EWindows
 {
 	RESERVED_WINDOW,
-	INVENTORY,				// �⺻ �κ��丮. (45ĭ ¥���� 2������ ���� = 90ĭ)
+	INVENTORY,				// 기본 인벤토리. (45칸 짜리가 2페이지 존재 = 90칸)
 	EQUIPMENT,
 	SAFEBOX,
 	MALL,
 	DRAGON_SOUL_INVENTORY,
-	GROUND,					// NOTE: 2013�� 2��5�� ������� unused.. �� �ִ°���???
-	BELT_INVENTORY,			// NOTE: W2.1 ������ ���� �߰��Ǵ� ��Ʈ ���� �������� �����ϴ� ��Ʈ �κ��丮
+	GROUND,					// NOTE: 2013년 2월5일 현재까지 unused.. 왜 있는거지???
+	BELT_INVENTORY,			// NOTE: W2.1 버전에 새로 추가되는 벨트 슬롯 아이템이 제공하는 벨트 인벤토리
 	
 	WINDOW_TYPE_MAX,
 };
@@ -192,9 +192,9 @@ typedef struct SItemPos
         cell = _cell;
     }
 
-	// ������ cell�� ���� ���� BYTE�� ��������, oi
-	// � �κ��� int, � �κ��� WORD�� �Ǿ��־�,
-	// ���� ū �ڷ����� int�� �޴´�.
+	// 기존에 cell의 형을 보면 BYTE가 대부분이지만, oi
+	// 어떤 부분은 int, 어떤 부분은 WORD로 되어있어,
+	// 가장 큰 자료형인 int로 받는다.
   //  int operator=(const int _cell)
   //  {
 		//window_type = INVENTORY;
diff --git a/src/UserInterface/InstanceBase.h b/src/UserInterface/InstanceBase.h
index 5295e02f..d508ec17 100644
--- a/src/UserInterface/InstanceBase.h
+++ b/src/UserInterface/InstanceBase.h
@@ -73,8 +73,8 @@ class CInstanceBase
 			AFFECT_SLOW,
 			AFFECT_STUN,
 
-			AFFECT_DUNGEON_READY,			// �������� �غ� ����
-			AFFECT_SHOW_ALWAYS,				// AFFECT_DUNGEON_UNIQUE ���� ����(Ŭ���̾�Ʈ���� �ø���������)
+			AFFECT_DUNGEON_READY,			// 던전에서 준비 상태
+			AFFECT_SHOW_ALWAYS,				// AFFECT_DUNGEON_UNIQUE 에서 변경(클라이언트에서 컬링되지않음)
 
 			AFFECT_BUILDING_CONSTRUCTION_SMALL,
 			AFFECT_BUILDING_CONSTRUCTION_LARGE,
@@ -85,34 +85,34 @@ class CInstanceBase
 
 			AFFECT_FISH_MIND,				// 13
 
-			AFFECT_JEONGWI,					// 14 ����ȥ
-			AFFECT_GEOMGYEONG,				// 15 �˰�
-			AFFECT_CHEONGEUN,				// 16 õ����
-			AFFECT_GYEONGGONG,				// 17 �����
-			AFFECT_EUNHYEONG,				// 18 ������
-			AFFECT_GWIGEOM,					// 19 �Ͱ�
-			AFFECT_GONGPO,					// 20 ����
-			AFFECT_JUMAGAP,					// 21 �ָ���
-			AFFECT_HOSIN,					// 22 ȣ��
-			AFFECT_BOHO,					// 23 ��ȣ
-			AFFECT_KWAESOK,					// 24 ���
-		    AFFECT_HEUKSIN,					// 25 ��ż�ȣ
-			AFFECT_MUYEONG,					// 26 ������
-			AFFECT_REVIVE_INVISIBILITY,		// 27 ��Ȱ ����
-			AFFECT_FIRE,					// 28 ���� ��
-			AFFECT_GICHEON,					// 29 ��õ ���
-			AFFECT_JEUNGRYEOK,				// 30 ���¼� 
-			AFFECT_DASH,					// 31 �뽬
-			AFFECT_PABEOP,					// 32 ����
-			AFFECT_FALLEN_CHEONGEUN,		// 33 �ٿ� �׷��̵� õ����
-			AFFECT_POLYMORPH,				// 34 ��������
+			AFFECT_JEONGWI,					// 14 전귀혼
+			AFFECT_GEOMGYEONG,				// 15 검경
+			AFFECT_CHEONGEUN,				// 16 천근추
+			AFFECT_GYEONGGONG,				// 17 경공술
+			AFFECT_EUNHYEONG,				// 18 은형법
+			AFFECT_GWIGEOM,					// 19 귀검
+			AFFECT_GONGPO,					// 20 공포
+			AFFECT_JUMAGAP,					// 21 주마갑
+			AFFECT_HOSIN,					// 22 호신
+			AFFECT_BOHO,					// 23 보호
+			AFFECT_KWAESOK,					// 24 쾌속
+		    AFFECT_HEUKSIN,					// 25 흑신수호
+			AFFECT_MUYEONG,					// 26 무영진
+			AFFECT_REVIVE_INVISIBILITY,		// 27 부활 무적
+			AFFECT_FIRE,					// 28 지속 불
+			AFFECT_GICHEON,					// 29 기천 대공
+			AFFECT_JEUNGRYEOK,				// 30 증력술 
+			AFFECT_DASH,					// 31 대쉬
+			AFFECT_PABEOP,					// 32 파법술
+			AFFECT_FALLEN_CHEONGEUN,		// 33 다운 그레이드 천근추
+			AFFECT_POLYMORPH,				// 34 폴리모프
 			AFFECT_WAR_FLAG1,				// 35
 			AFFECT_WAR_FLAG2,				// 36
 			AFFECT_WAR_FLAG3,				// 37
 			AFFECT_CHINA_FIREWORK,			// 38
 			AFFECT_PREMIUM_SILVER,
 			AFFECT_PREMIUM_GOLD,
-			AFFECT_RAMADAN_RING,			// 41 �ʽ´� ���� ���� Affect
+			AFFECT_RAMADAN_RING,			// 41 초승달 반지 착용 Affect
 
 			AFFECT_NUM = 64,
 
@@ -154,31 +154,31 @@ class CInstanceBase
 
 			NEW_AFFECT_BOW_DISTANCE,        // 225
 
-			NEW_AFFECT_EXP_BONUS         = 500, // ������ ����
-			NEW_AFFECT_ITEM_BONUS        = 501, // ������ �尩
+			NEW_AFFECT_EXP_BONUS         = 500, // 경험의 반지
+			NEW_AFFECT_ITEM_BONUS        = 501, // 도둑의 장갑
 			NEW_AFFECT_SAFEBOX           = 502, // PREMIUM_SAFEBOX,
 			NEW_AFFECT_AUTOLOOT          = 503, // PREMIUM_AUTOLOOT,
 			NEW_AFFECT_FISH_MIND         = 504, // PREMIUM_FISH_MIND,
-			NEW_AFFECT_MARRIAGE_FAST     = 505, // ������ ���� (�ݽ�),
+			NEW_AFFECT_MARRIAGE_FAST     = 505, // 원앙의 깃털 (금슬),
 			NEW_AFFECT_GOLD_BONUS        = 506,
 
-		    NEW_AFFECT_MALL              = 510, // �� ������ ����Ʈ
-			NEW_AFFECT_NO_DEATH_PENALTY  = 511, // ����� ��ȣ (����ġ �г�Ƽ�� �ѹ� �����ش�)
-			NEW_AFFECT_SKILL_BOOK_BONUS  = 512, // ������ ���� (å ���� ���� Ȯ���� 50% ����)
-			NEW_AFFECT_SKILL_BOOK_NO_DELAY  = 513, // �־� ���� (å ���� ������ ����)
+		    NEW_AFFECT_MALL              = 510, // 몰 아이템 에펙트
+			NEW_AFFECT_NO_DEATH_PENALTY  = 511, // 용신의 가호 (경험치 패널티를 한번 막아준다)
+			NEW_AFFECT_SKILL_BOOK_BONUS  = 512, // 선인의 교훈 (책 수련 성공 확률이 50% 증가)
+			NEW_AFFECT_SKILL_BOOK_NO_DELAY  = 513, // 주안 술서 (책 수련 딜레이 없음)
 
-			NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // ������ ���� (���� ���� 14 ���� ���� �⺻ ȿ��)
+			NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과)
 			NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517,
 
-			NEW_AFFECT_AUTO_HP_RECOVERY		= 534,		// �ڵ����� HP
-			NEW_AFFECT_AUTO_SP_RECOVERY		= 535,		// �ڵ����� SP
+			NEW_AFFECT_AUTO_HP_RECOVERY		= 534,		// 자동물약 HP
+			NEW_AFFECT_AUTO_SP_RECOVERY		= 535,		// 자동물약 SP
 
 			NEW_AFFECT_DRAGON_SOUL_QUALIFIED = 540, 
 			NEW_AFFECT_DRAGON_SOUL_DECK1 = 541,
 			NEW_AFFECT_DRAGON_SOUL_DECK2 = 542,
 
 			NEW_AFFECT_RAMADAN_ABILITY = 300,
-			NEW_AFFECT_RAMADAN_RING    = 301,			// �󸶴� �̺�Ʈ�� Ư�������� �ʽ´��� ���� ���� ����
+			NEW_AFFECT_RAMADAN_RING    = 301,			// 라마단 이벤트용 특수아이템 초승달의 반지 착용 유무
 
 			NEW_AFFECT_NOG_POCKET_ABILITY = 302,
 
@@ -263,7 +263,7 @@ class CInstanceBase
 			TITLE_NONE				= 4,
 		};
 
-		enum	//�Ʒ� ��ȣ�� �ٲ�� registerEffect �ʵ� �ٲپ� ��� �Ѵ�.
+		enum	//아래 번호가 바뀌면 registerEffect 쪽도 바꾸어 줘야 한다.
 		{
 			EFFECT_REFINED_NONE,
 
@@ -291,8 +291,8 @@ class CInstanceBase
 			EFFECT_BODYARMOR_REFINED8,
 			EFFECT_BODYARMOR_REFINED9,
 
-			EFFECT_BODYARMOR_SPECIAL,	// ���� 4-2-1
-			EFFECT_BODYARMOR_SPECIAL2,	// ���� 4-2-2
+			EFFECT_BODYARMOR_SPECIAL,	// 갑옷 4-2-1
+			EFFECT_BODYARMOR_SPECIAL2,	// 갑옷 4-2-2
 
 			EFFECT_REFINED_NUM,
 		};
@@ -305,7 +305,7 @@ class CInstanceBase
 			DAMAGE_BLOCK	= (1<<3),
 			DAMAGE_PENETRATE= (1<<4),
 			DAMAGE_CRITICAL = (1<<5),
-			// ��-_-��
+			// 반-_-사
 		};
 
 		enum
@@ -359,17 +359,17 @@ class CInstanceBase
 			EFFECT_SUCCESS,
 			EFFECT_FAIL,
 			EFFECT_FR_SUCCESS,			
-			EFFECT_LEVELUP_ON_14_FOR_GERMANY,	//������ 14�϶� ( �������� )
-			EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,//������ 15�϶� ( �������� )
+			EFFECT_LEVELUP_ON_14_FOR_GERMANY,	//레벨업 14일때 ( 독일전용 )
+			EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 )
 			EFFECT_PERCENT_DAMAGE1,
 			EFFECT_PERCENT_DAMAGE2,
 			EFFECT_PERCENT_DAMAGE3,
 			EFFECT_AUTO_HPUP,
 			EFFECT_AUTO_SPUP,
-			EFFECT_RAMADAN_RING_EQUIP,			// �ʽ´� ���� ���� ������ �ߵ��ϴ� ����Ʈ
-			EFFECT_HALLOWEEN_CANDY_EQUIP,		// �ҷ��� ���� ���� ������ �ߵ��ϴ� ����Ʈ
-			EFFECT_HAPPINESS_RING_EQUIP,				// �ູ�� ���� ���� ������ �ߵ��ϴ� ����Ʈ
-			EFFECT_LOVE_PENDANT_EQUIP,				// �ູ�� ���� ���� ������ �ߵ��ϴ� ����Ʈ
+			EFFECT_RAMADAN_RING_EQUIP,			// 초승달 반지 착용 순간에 발동하는 이펙트
+			EFFECT_HALLOWEEN_CANDY_EQUIP,		// 할로윈 사탕 착용 순간에 발동하는 이펙트
+			EFFECT_HAPPINESS_RING_EQUIP,				// 행복의 반지 착용 순간에 발동하는 이펙트
+			EFFECT_LOVE_PENDANT_EQUIP,				// 행복의 반지 착용 순간에 발동하는 이펙트
 			EFFECT_TEMP,
 			EFFECT_NUM,
 		};
@@ -434,7 +434,7 @@ class CInstanceBase
 		void MountHorse(UINT eRace);
 		void DismountHorse();		
 
-		// ��ũ��Ʈ�� �׽�Ʈ �Լ�. ���߿� ������
+		// 스크립트용 테스트 함수. 나중에 없에자
 		void SCRIPT_SetAffect(UINT eAffect, bool isVisible); 
 
 		float CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst);
@@ -604,7 +604,7 @@ class CInstanceBase
 		BOOL					CanAttackHorseLevel();
 
 #ifdef __MOVIE_MODE__
-		BOOL					IsMovieMode(); // ��ڿ� ������ �Ⱥ��̴°�
+		BOOL					IsMovieMode(); // 운영자용 완전히 안보이는거
 #endif
 		bool					NEW_CanMoveToDestPixelPosition(const TPixelPosition& c_rkPPosDst);
 
@@ -750,8 +750,8 @@ class CInstanceBase
 		//void					SetParts(const WORD * c_pParts);
 		void					Refresh(DWORD dwMotIndex, bool isLoop);
 
-		//void					AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // ������ ms�����Դϴ�.
-		//void					AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // ������ ms�����Դϴ�.
+		//void					AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다.
+		//void					AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다.
 
 		float					GetDistance(CInstanceBase * pkTargetInst);
 		float					GetDistance(const TPixelPosition & c_rPixelPosition);
@@ -763,7 +763,7 @@ class CInstanceBase
 		bool __Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos);
 		bool __Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight);
 
-		// 2004.07.25.myevan.����Ʈ �ȳ����� ����
+		// 2004.07.25.myevan.이펙트 안나오는 문제
 		/////////////////////////////////////////////////////////////
 		void __ClearAffectFlagContainer();
 		void __ClearAffects();
@@ -817,7 +817,7 @@ class CInstanceBase
 		void __DisableChangingTCPState();
 		BOOL __IsEnableTCPProcess(UINT eCurFunc);
 
-		// 2004.07.17.levites.isShow�� ViewFrustumCheck�� ����
+		// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
 		bool __CanRender();
 		bool __IsInViewFrustum();
 
diff --git a/src/UserInterface/Locale_inc_VI2.h b/src/UserInterface/Locale_inc_VI2.h
index 3a382159..ea94c9d7 100644
--- a/src/UserInterface/Locale_inc_VI2.h
+++ b/src/UserInterface/Locale_inc_VI2.h
@@ -1,2 +1,2 @@
-#define LOCALE_SERVICE_VIETNAM			// ��Ʈ��
-#define LOCALE_SERVICE_VIETNAM_MILD		// ���� ����
+#define LOCALE_SERVICE_VIETNAM			// 베트남
+#define LOCALE_SERVICE_VIETNAM_MILD		// 심의 버전
diff --git a/src/UserInterface/MarkImage.h b/src/UserInterface/MarkImage.h
index 6ea85af0..ce30b3cc 100644
--- a/src/UserInterface/MarkImage.h
+++ b/src/UserInterface/MarkImage.h
@@ -16,7 +16,7 @@ struct SGuildMark
 	};
 
 	///////////////////////////////////////////////////////////////////////////////
-	Pixel m_apxBuf[SIZE];	// ���� �̹���
+	Pixel m_apxBuf[SIZE];	// 실제 이미지
 
 	///////////////////////////////////////////////////////////////////////////////
 	void Clear();
@@ -38,11 +38,11 @@ struct SGuildMarkBlock
 	};
 
 	///////////////////////////////////////////////////////////////////////////////
-	Pixel	m_apxBuf[SIZE];	// ���� �̹���
+	Pixel	m_apxBuf[SIZE];	// 실제 이미지
 
-	BYTE 	m_abCompBuf[MAX_COMP_SIZE];	// ����� ������
-	size_t	m_sizeCompBuf;	// ����� ũ��
-	DWORD	m_crc;			// ����� �������� CRC
+	BYTE 	m_abCompBuf[MAX_COMP_SIZE];	// 압축된 데이터
+	size_t	m_sizeCompBuf;	// 압축된 크기
+	DWORD	m_crc;			// 압축된 데이터의 CRC
 
 	///////////////////////////////////////////////////////////////////////////////
 	DWORD	GetCRC() const;
@@ -87,9 +87,9 @@ class CGuildMarkImage
 
 		bool SaveMark(DWORD posMark, BYTE * pbMarkImage);
 		bool DeleteMark(DWORD posMark);
-		bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // ���� -> Ŭ���̾�Ʈ
+		bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // 서버 -> 클라이언트
 
-		DWORD GetEmptyPosition(); // �� ��ũ ��ġ�� ��´�.
+		DWORD GetEmptyPosition(); // 빈 마크 위치를 얻는다.
 
 		void GetBlockCRCList(DWORD * crcList);
 		void GetDiffBlocks(const DWORD * crcList, std::map<BYTE, const SGuildMarkBlock *> & mapDiffBlocks);
diff --git a/src/UserInterface/MarkManager.h b/src/UserInterface/MarkManager.h
index f8fa1427..90df0579 100644
--- a/src/UserInterface/MarkManager.h
+++ b/src/UserInterface/MarkManager.h
@@ -32,11 +32,11 @@ class CGuildMarkManager : public singleton<CGuildMarkManager>
 		//
 		void SetMarkPathPrefix(const char * prefix);
 
-		bool LoadMarkIndex(); // ��ũ �ε��� �ҷ����� (���������� ���)
-		bool SaveMarkIndex(); // ��ũ �ε��� �����ϱ�
+		bool LoadMarkIndex(); // 마크 인덱스 불러오기 (서버에서만 사용)
+		bool SaveMarkIndex(); // 마크 인덱스 저장하기
 
-		void LoadMarkImages(); // ��� ��ũ �̹����� �ҷ�����
-		void SaveMarkImage(DWORD imgIdx); // ��ũ �̹��� ����
+		void LoadMarkImages(); // 모든 마크 이미지를 불러오기
+		void SaveMarkImage(DWORD imgIdx); // 마크 이미지 저장
 
 		bool GetMarkImageFilename(DWORD imgIdx, std::string & path) const;
 		bool AddMarkIDByGuildID(DWORD guildID, DWORD markID);
diff --git a/src/UserInterface/MovieMan.h b/src/UserInterface/MovieMan.h
index 54acfc9d..d089c4fa 100644
--- a/src/UserInterface/MovieMan.h
+++ b/src/UserInterface/MovieMan.h
@@ -1,11 +1,11 @@
 #pragma once
 
-// ���̵�ƿ� ����(��)
+// 페이드아웃 길이(초)
 #define		MOVIEMAN_FADE_DURATION		1300
 #define		MOVIEMAN_SKIPPABLE_YES		true
 #define		MOVIEMAN_POSTEFFECT_FADEOUT	1
 
-// ������ ����� DX 7.0 ���
+// 동영상 재생에 DX 7.0 사용
 struct IDirectDraw;
 struct IDirectDrawSurface;
 struct IDirectDrawMediaStream;
diff --git a/src/UserInterface/NetworkActorManager.h b/src/UserInterface/NetworkActorManager.h
index 629b967c..577feba8 100644
--- a/src/UserInterface/NetworkActorManager.h
+++ b/src/UserInterface/NetworkActorManager.h
@@ -90,7 +90,7 @@ struct SNetworkUpdateActorData
 	short m_sAlignment;
 	BYTE m_byPKMode;
 	DWORD m_dwMountVnum;
-	DWORD m_dwStateFlags; // ���� Create ���� ���̴� ������
+	DWORD m_dwStateFlags; // 본래 Create 때만 쓰이는 변수임
 	CAffectFlagContainer m_kAffectFlags;
 
 	SNetworkUpdateActorData()
diff --git a/src/UserInterface/Packet.h b/src/UserInterface/Packet.h
index 048aee1f..e86e61d4 100644
--- a/src/UserInterface/Packet.h
+++ b/src/UserInterface/Packet.h
@@ -4,18 +4,18 @@
 #include "Hackshield.h"
 #include METIN2HS_INCLUDE_ANTICPXSVR
 #else
-#pragma pack(push) //���� alignment ����
+#pragma pack(push) //기존 alignment 저장
 #pragma pack(8)
 
 #define ANTICPX_TRANS_BUFFER_MAX			400
 
 typedef struct _AHNHS_TRANS_BUFFER
 {
-	unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* �ۼ��� ��Ŷ�� �ִ� ũ�� */];
+	unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* 송수신 패킷의 최대 크기 */];
 	unsigned short nLength;
 } AHNHS_TRANS_BUFFER, *PAHNHS_TRANS_BUFFER;
 
-#pragma pack(pop) // ���� alignment ����.
+#pragma pack(pop) // 기존 alignment 복구.
 #endif /* !USE_AHNLAB_HACKSHIELD */
 
 #include "../gamelib/RaceData.h"
@@ -30,8 +30,8 @@ enum
 	HEADER_CG_LOGIN								= 1,
 	HEADER_CG_ATTACK							= 2,
 	HEADER_CG_CHAT								= 3,
-	HEADER_CG_PLAYER_CREATE						= 4,		// ���ο� �÷��̾ ����
-	HEADER_CG_PLAYER_DESTROY					= 5,		// �÷��̾ ����.
+	HEADER_CG_PLAYER_CREATE						= 4,		// 새로운 플래이어를 생성
+	HEADER_CG_PLAYER_DESTROY					= 5,		// 플래이어를 삭제.
 	HEADER_CG_PLAYER_SELECT						= 6,
 	HEADER_CG_CHARACTER_MOVE					= 7,
 	HEADER_CG_SYNC_POSITION  					= 8,
@@ -95,8 +95,8 @@ enum
     HEADER_CG_MESSENGER                         = 67,
 	//HEADER_BLANK68								= 68,
     HEADER_CG_MALL_CHECKOUT                     = 69,
-    HEADER_CG_SAFEBOX_CHECKIN                   = 70,   // �������� â���� �ִ´�.
-    HEADER_CG_SAFEBOX_CHECKOUT                  = 71,   // �������� â���� ���� ���´�.
+    HEADER_CG_SAFEBOX_CHECKIN                   = 70,   // 아이템을 창고에 넣는다.
+    HEADER_CG_SAFEBOX_CHECKOUT                  = 71,   // 아이템을 창고로 부터 빼온다.
     HEADER_CG_PARTY_INVITE                      = 72,
     HEADER_CG_PARTY_INVITE_ANSWER               = 73,
     HEADER_CG_PARTY_REMOVE                      = 74,
@@ -144,7 +144,7 @@ enum
 	HEADER_CG_GUILD_SYMBOL_CRC					= 113,
 	HEADER_CG_SCRIPT_SELECT_ITEM				= 114,
 	HEADER_CG_LOGIN4							= 115,
-	HEADER_CG_LOGIN5_OPENID						= 116,	//OpenID : ����� ���� ������ ������ ����.
+	HEADER_CG_LOGIN5_OPENID						= 116,	//OpenID : 실행시 받은 인증키를 서버에 보냄.
 
 	HEADER_CG_RUNUP_MATRIX_ANSWER               = 201,
 	HEADER_CG_NEWCIBN_PASSPOD_ANSWER			= 202,
@@ -188,17 +188,17 @@ enum
 	HEADER_GC_CHANGE_SPEED						= 18,
 	HEADER_GC_CHARACTER_UPDATE                  = 19,
 #if defined(GAIDEN)
-	HEADER_GC_ITEM_DEL							= 20, // ������ â�� �߰�
-	HEADER_GC_ITEM_SET							= 21, // ������ â�� �߰�
+	HEADER_GC_ITEM_DEL							= 20, // 아이템 창에 추가
+	HEADER_GC_ITEM_SET							= 21, // 아이템 창에 추가
 #else
-	HEADER_GC_ITEM_SET							= 20, // ������ â�� �߰�
-	HEADER_GC_ITEM_SET2							= 21, // ������ â�� �߰�
+	HEADER_GC_ITEM_SET							= 20, // 아이템 창에 추가
+	HEADER_GC_ITEM_SET2							= 21, // 아이템 창에 추가
 #endif
-	HEADER_GC_ITEM_USE							= 22, // ������ ��� (���� ����鿡�� �����ֱ� ����)
-	HEADER_GC_ITEM_DROP							= 23, // ������ ������
-	HEADER_GC_ITEM_UPDATE						= 25, // ������ ��ġ ������Ʈ
-	HEADER_GC_ITEM_GROUND_ADD					= 26, // �ٴڿ� ������ �߰�
-	HEADER_GC_ITEM_GROUND_DEL					= 27, // �ٴڿ��� ������ ����
+	HEADER_GC_ITEM_USE							= 22, // 아이템 사용 (주위 사람들에게 보여주기 위해)
+	HEADER_GC_ITEM_DROP							= 23, // 아이템 버리기
+	HEADER_GC_ITEM_UPDATE						= 25, // 아이템 수치 업데이트
+	HEADER_GC_ITEM_GROUND_ADD					= 26, // 바닥에 아이템 추가
+	HEADER_GC_ITEM_GROUND_DEL					= 27, // 바닥에서 아이템 삭제
     HEADER_GC_QUICKSLOT_ADD                     = 28,
     HEADER_GC_QUICKSLOT_DEL                     = 29,
     HEADER_GC_QUICKSLOT_SWAP                    = 30,
@@ -386,13 +386,13 @@ enum
 	PLAYER_PER_ACCOUNT3 = 3,
 	PLAYER_PER_ACCOUNT4 = 4,
 
-	PLAYER_ITEM_SLOT_MAX_NUM = 20,		// �÷��̾��� ���Դ� ���� ����.
+	PLAYER_ITEM_SLOT_MAX_NUM = 20,		// 플래이어의 슬롯당 들어가는 갯수.
 
 	QUICKSLOT_MAX_LINE = 4,
-	QUICKSLOT_MAX_COUNT_PER_LINE = 8, // Ŭ���̾�Ʈ ���� ������
+	QUICKSLOT_MAX_COUNT_PER_LINE = 8, // 클라이언트 임의 결정값
 	QUICKSLOT_MAX_COUNT = QUICKSLOT_MAX_LINE * QUICKSLOT_MAX_COUNT_PER_LINE,
 
-	QUICKSLOT_MAX_NUM = 36, // ������ ������ �ִ� ��
+	QUICKSLOT_MAX_NUM = 36, // 서버와 맞춰져 있는 값
 
 	SHOP_HOST_ITEM_MAX_NUM = 40,
 
@@ -465,7 +465,7 @@ typedef struct packet_mark_idxlist
     BYTE    header;
 	DWORD	bufSize;
     WORD    count;
-    //�ڿ� size * (WORD + WORD)��ŭ ������ ����
+    //뒤에 size * (WORD + WORD)만큼 데이터 붙음
 } TPacketGCMarkIDXList;
 
 typedef struct packet_mark_block
@@ -474,7 +474,7 @@ typedef struct packet_mark_block
     DWORD   bufSize;
 	BYTE	imgIdx;
     DWORD   count;
-    // �ڿ� 64 x 48 x �ȼ�ũ��(4����Ʈ) = 12288��ŭ ������ ����
+    // 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음
 } TPacketGCMarkBlock;
 
 typedef struct command_symbol_upload
@@ -543,7 +543,7 @@ typedef struct command_login
     char pwd[PASS_MAX_NUM + 1];
 } TPacketCGLogin;
 
-// start - ���� ���� ������ ���� ��Ŷ��
+// start - 권한 서버 접속을 위한 패킷들
 typedef struct command_login2
 {
 	BYTE	header;
@@ -566,7 +566,7 @@ typedef struct command_login5
     char	authKey[OPENID_AUTHKEY_LEN + 1];
     DWORD	adwClientKey[4];
 } TPacketCGLogin5;
-// end - ���� ���� ������ ���� ��Ŷ��
+// end - 권한 서버 접속을 위한 패킷들
 
 typedef struct command_direct_enter
 {
@@ -585,8 +585,8 @@ typedef struct command_player_select
 typedef struct command_attack
 {
 	BYTE	header;
-	BYTE	bType;			// ���� ����
-	DWORD	dwVictimVID;	// �� VID
+	BYTE	bType;			// 공격 유형
+	DWORD	dwVictimVID;	// 적 VID
 	BYTE	bCRCMagicCubeProcPiece;
 	BYTE	bCRCMagicCubeFilePiece;
 } TPacketCGAttack;
@@ -1014,9 +1014,9 @@ typedef struct SShopItemTable
     DWORD		vnum;
     BYTE		count;
 
-    TItemPos	pos;			// PC �������� �̿�
-    DWORD		price;			// PC �������� �̿�
-    BYTE		display_pos;	//	PC �������� �̿�, ���� ��ġ.
+    TItemPos	pos;			// PC 상점에만 이용
+    DWORD		price;			// PC 상점에만 이용
+    BYTE		display_pos;	//	PC 상점에만 이용, 보일 위치.
 } TShopItemTable;
 
 typedef struct SPacketCGMyShop
@@ -1116,18 +1116,18 @@ typedef struct command_script_select_item
 // From Server
 enum EPhase
 {
-    PHASE_CLOSE,				// ����� ���� (�Ǵ� ���� �� ����)
-    PHASE_HANDSHAKE,			// �Ǽ�..;;
-    PHASE_LOGIN,				// ��� ��
-    PHASE_SELECT,				// ij���� ���� ȭ��
-    PHASE_LOADING,				// ���� �� �ε� ȭ��
-    PHASE_GAME,					// ���� ȭ��
-    PHASE_DEAD,					// �׾��� ��.. (���� �ȿ� �ִ� ���� ����..)
+    PHASE_CLOSE,				// 끊기는 상태 (또는 끊기 전 상태)
+    PHASE_HANDSHAKE,			// 악수..;;
+    PHASE_LOGIN,				// 로그인 중
+    PHASE_SELECT,				// 캐릭터 선택 화면
+    PHASE_LOADING,				// 선택 후 로딩 화면
+    PHASE_GAME,					// 게임 화면
+    PHASE_DEAD,					// 죽었을 때.. (게임 안에 있는 것일 수도..)
 
-	PHASE_DBCLIENT_CONNECTING,	// ������
-    PHASE_DBCLIENT,				// ������
-    PHASE_P2P,					// ������
-    PHASE_AUTH,					// ��� ���� ��
+	PHASE_DBCLIENT_CONNECTING,	// 서버용
+    PHASE_DBCLIENT,				// 서버용
+    PHASE_P2P,					// 서버용
+    PHASE_AUTH,					// 로그인 인증 용
 };
 
 typedef struct packet_phase
@@ -1136,7 +1136,7 @@ typedef struct packet_phase
     BYTE        phase;
 } TPacketGCPhase;
 
-typedef struct packet_blank		// ������Ŷ.
+typedef struct packet_blank		// 공백패킷.
 {
 	BYTE		header;
 } TPacketGCBlank;
@@ -1273,7 +1273,7 @@ enum EPKModes
 	PK_MODE_MAX_NUM,
 };
 
-// 2004.11.20.myevan.CRaceData::PART_MAX_NUM �����ϰ� ���� - �������� ����ϴ°Ͱ� ��ġ���� ����
+// 2004.11.20.myevan.CRaceData::PART_MAX_NUM 사용안하게 수정 - 서버에서 사용하는것과 일치하지 않음
 enum ECharacterEquipmentPart
 {
 	CHR_EQUIPPART_ARMOR,
@@ -1293,7 +1293,7 @@ typedef struct packet_char_additional_info
 	BYTE	bEmpire;
 	DWORD   dwGuildID;
 	DWORD   dwLevel;
-	short   sAlignment; //����ġ
+	short   sAlignment; //선악치
 	BYTE    bPKMode;
 	DWORD   dwMountVnum;
 } TPacketGCCharacterAdditionalInfo;
@@ -1405,14 +1405,14 @@ typedef struct packet_GlobalTime
 
 enum EChatType
 {
-	CHAT_TYPE_TALKING,  /* �׳� ä�� */
-	CHAT_TYPE_INFO,     /* ���� (�������� ������, ����ġ�� �����. ��) */
-	CHAT_TYPE_NOTICE,   /* �������� */
-	CHAT_TYPE_PARTY,    /* ��Ƽ�� */
-	CHAT_TYPE_GUILD,    /* ��帻 */
-	CHAT_TYPE_COMMAND,	/* ���� */
-	CHAT_TYPE_SHOUT,	/* ��ġ�� */
-	CHAT_TYPE_WHISPER,	// �����ʹ� �������� �ʴ� Only Client Enum
+	CHAT_TYPE_TALKING,  /* 그냥 채팅 */
+	CHAT_TYPE_INFO,     /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */
+	CHAT_TYPE_NOTICE,   /* 공지사항 */
+	CHAT_TYPE_PARTY,    /* 파티말 */
+	CHAT_TYPE_GUILD,    /* 길드말 */
+	CHAT_TYPE_COMMAND,	/* 명령 */
+	CHAT_TYPE_SHOUT,	/* 외치기 */
+	CHAT_TYPE_WHISPER,	// 서버와는 연동되지 않는 Only Client Enum
 	CHAT_TYPE_BIG_NOTICE,
 	CHAT_TYPE_MAX_NUM,
 };
@@ -1426,7 +1426,7 @@ typedef struct packet_chatting
 	BYTE	bEmpire;
 } TPacketGCChat;
 
-typedef struct packet_whisper   // ���� ��Ŷ    
+typedef struct packet_whisper   // 가변 패킷    
 {   
     BYTE        bHeader;                        
     WORD        wSize;
@@ -1513,57 +1513,57 @@ enum EPointTypes
     POINT_MAX_HP,               // 6
     POINT_SP,                   // 7
     POINT_MAX_SP,               // 8  
-    POINT_STAMINA,              // 9  ���׹̳�
-    POINT_MAX_STAMINA,          // 10 �ִ� ���׹̳�
+    POINT_STAMINA,              // 9  스테미너
+    POINT_MAX_STAMINA,          // 10 최대 스테미너
     
     POINT_GOLD,                 // 11
-    POINT_ST,                   // 12 �ٷ�
-    POINT_HT,                   // 13 ü��
-    POINT_DX,                   // 14 ��ø��
-    POINT_IQ,                   // 15 ���ŷ�
-    POINT_ATT_POWER,            // 16 ���ݷ�
-    POINT_ATT_SPEED,            // 17 ���ݼӵ�
-    POINT_EVADE_RATE,           // 18 ȸ����
-    POINT_MOV_SPEED,            // 19 �̵��ӵ�
-    POINT_DEF_GRADE,            // 20 �����
-	POINT_CASTING_SPEED,        // 21 �ֹ��ӵ� (��ٿ�Ÿ��*100) / (100 + �̰�) = ���� ��ٿ� Ÿ��
-	POINT_MAGIC_ATT_GRADE,      // 22 �������ݷ�
-    POINT_MAGIC_DEF_GRADE,      // 23 ��������
-    POINT_EMPIRE_POINT,         // 24 ��������
-    POINT_LEVEL_STEP,           // 25 �� ���������� �ܰ�.. (1 2 3 �� �� ����, 4 �Ǹ� ���� ��)
-    POINT_STAT,                 // 26 �ɷ�ġ �ø� �� �ִ� ����
-	POINT_SUB_SKILL,            // 27 ���� ��ų ����Ʈ
-	POINT_SKILL,                // 28 ��Ƽ�� ��ų ����Ʈ
-//    POINT_SKILL_PASV,           // 27 �нú� ��� �ø� �� �ִ� ����
-//    POINT_SKILL_ACTIVE,         // 28 ��Ƽ�� ��ų ����Ʈ
-	POINT_MIN_ATK,				// 29 �ּ� �ı���
-	POINT_MAX_ATK,				// 30 �ִ� �ı���
-    POINT_PLAYTIME,             // 31 �÷��̽ð�
-    POINT_HP_REGEN,             // 32 HP ȸ����
-    POINT_SP_REGEN,             // 33 SP ȸ����
+    POINT_ST,                   // 12 근력
+    POINT_HT,                   // 13 체력
+    POINT_DX,                   // 14 민첩성
+    POINT_IQ,                   // 15 정신력
+    POINT_ATT_POWER,            // 16 공격력
+    POINT_ATT_SPEED,            // 17 공격속도
+    POINT_EVADE_RATE,           // 18 회피율
+    POINT_MOV_SPEED,            // 19 이동속도
+    POINT_DEF_GRADE,            // 20 방어등급
+	POINT_CASTING_SPEED,        // 21 주문속도 (쿨다운타임*100) / (100 + 이값) = 최종 쿨다운 타임
+	POINT_MAGIC_ATT_GRADE,      // 22 마법공격력
+    POINT_MAGIC_DEF_GRADE,      // 23 마법방어력
+    POINT_EMPIRE_POINT,         // 24 제국점수
+    POINT_LEVEL_STEP,           // 25 한 레벨에서의 단계.. (1 2 3 될 때 보상, 4 되면 레벨 업)
+    POINT_STAT,                 // 26 능력치 올릴 수 있는 개수
+	POINT_SUB_SKILL,            // 27 보조 스킬 포인트
+	POINT_SKILL,                // 28 액티브 스킬 포인트
+//    POINT_SKILL_PASV,           // 27 패시브 기술 올릴 수 있는 개수
+//    POINT_SKILL_ACTIVE,         // 28 액티브 스킬 포인트
+	POINT_MIN_ATK,				// 29 최소 파괴력
+	POINT_MAX_ATK,				// 30 최대 파괴력
+    POINT_PLAYTIME,             // 31 플레이시간
+    POINT_HP_REGEN,             // 32 HP 회복률
+    POINT_SP_REGEN,             // 33 SP 회복률
     
-    POINT_BOW_DISTANCE,         // 34 Ȱ �����Ÿ� ����ġ (meter)
+    POINT_BOW_DISTANCE,         // 34 활 사정거리 증가치 (meter)
     
-    POINT_HP_RECOVERY,          // 35 ü�� ȸ�� ������
-    POINT_SP_RECOVERY,          // 36 ���ŷ� ȸ�� ������
+    POINT_HP_RECOVERY,          // 35 체력 회복 증가량
+    POINT_SP_RECOVERY,          // 36 정신력 회복 증가량
     
-    POINT_POISON_PCT,           // 37 �� Ȯ��
-    POINT_STUN_PCT,             // 38 ���� Ȯ��
-    POINT_SLOW_PCT,             // 39 ���ο� Ȯ��
-    POINT_CRITICAL_PCT,         // 40 ũ��Ƽ�� Ȯ��
-    POINT_PENETRATE_PCT,        // 41 ����Ÿ�� Ȯ��
-    POINT_CURSE_PCT,            // 42 ���� Ȯ��
+    POINT_POISON_PCT,           // 37 독 확률
+    POINT_STUN_PCT,             // 38 기절 확률
+    POINT_SLOW_PCT,             // 39 슬로우 확률
+    POINT_CRITICAL_PCT,         // 40 크리티컬 확률
+    POINT_PENETRATE_PCT,        // 41 관통타격 확률
+    POINT_CURSE_PCT,            // 42 저주 확률
     
-    POINT_ATTBONUS_HUMAN,       // 43 ����� ����
-    POINT_ATTBONUS_ANIMAL,      // 44 �������� ������ % ����
-    POINT_ATTBONUS_ORC,         // 45 ���Ϳ��� ������ % ����
-    POINT_ATTBONUS_MILGYO,      // 46 ����� ������ % ����
-    POINT_ATTBONUS_UNDEAD,      // 47 ��ü���� ������ % ����
-    POINT_ATTBONUS_DEVIL,       // 48 ����(�Ǹ�)���� ������ % ����
-    POINT_ATTBONUS_INSECT,      // 49 ������
-    POINT_ATTBONUS_FIRE,        // 50 ȭ����
-    POINT_ATTBONUS_ICE,         // 51 ������
-    POINT_ATTBONUS_DESERT,      // 52 �縷��
+    POINT_ATTBONUS_HUMAN,       // 43 인간에게 강함
+    POINT_ATTBONUS_ANIMAL,      // 44 동물에게 데미지 % 증가
+    POINT_ATTBONUS_ORC,         // 45 웅귀에게 데미지 % 증가
+    POINT_ATTBONUS_MILGYO,      // 46 밀교에게 데미지 % 증가
+    POINT_ATTBONUS_UNDEAD,      // 47 시체에게 데미지 % 증가
+    POINT_ATTBONUS_DEVIL,       // 48 마귀(악마)에게 데미지 % 증가
+    POINT_ATTBONUS_INSECT,      // 49 벌레족
+    POINT_ATTBONUS_FIRE,        // 50 화염족
+    POINT_ATTBONUS_ICE,         // 51 빙설족
+    POINT_ATTBONUS_DESERT,      // 52 사막족
     POINT_ATTBONUS_UNUSED0,     // 53 UNUSED0
     POINT_ATTBONUS_UNUSED1,     // 54 UNUSED1
     POINT_ATTBONUS_UNUSED2,     // 55 UNUSED2
@@ -1575,42 +1575,42 @@ enum EPointTypes
     POINT_ATTBONUS_UNUSED8,     // 61 UNUSED8
     POINT_ATTBONUS_UNUSED9,     // 62 UNUSED9
 
-    POINT_STEAL_HP,             // 63 ������ ����
-    POINT_STEAL_SP,             // 64 ���ŷ� ����
+    POINT_STEAL_HP,             // 63 생명력 흡수
+    POINT_STEAL_SP,             // 64 정신력 흡수
 
-    POINT_MANA_BURN_PCT,        // 65 ���� ��
+    POINT_MANA_BURN_PCT,        // 65 마나 번
 
-    /// ���ؽ� ���ʽ� ///
+    /// 피해시 보너스 ///
 
-    POINT_DAMAGE_SP_RECOVER,    // 66 ���ݴ��� �� ���ŷ� ȸ�� Ȯ��
+    POINT_DAMAGE_SP_RECOVER,    // 66 공격당할 시 정신력 회복 확률
 
-    POINT_BLOCK,                // 67 ������
-    POINT_DODGE,                // 68 ȸ����
+    POINT_BLOCK,                // 67 블럭율
+    POINT_DODGE,                // 68 회피율
 
     POINT_RESIST_SWORD,         // 69
     POINT_RESIST_TWOHAND,       // 70
     POINT_RESIST_DAGGER,        // 71
     POINT_RESIST_BELL,          // 72
     POINT_RESIST_FAN,           // 73
-    POINT_RESIST_BOW,           // 74  ȭ��   ����   : ����� ����
-    POINT_RESIST_FIRE,          // 75  ȭ��   ����   : ȭ�����ݿ� ���� ����� ����
-    POINT_RESIST_ELEC,          // 76  ����   ����   : ������ݿ� ���� ����� ����
-    POINT_RESIST_MAGIC,         // 77  ����   ����   : �������� ���� ����� ����
-    POINT_RESIST_WIND,          // 78  �ٶ�   ����   : �ٶ����ݿ� ���� ����� ����
+    POINT_RESIST_BOW,           // 74  화살   저항   : 대미지 감소
+    POINT_RESIST_FIRE,          // 75  화염   저항   : 화염공격에 대한 대미지 감소
+    POINT_RESIST_ELEC,          // 76  전기   저항   : 전기공격에 대한 대미지 감소
+    POINT_RESIST_MAGIC,         // 77  술법   저항   : 모든술법에 대한 대미지 감소
+    POINT_RESIST_WIND,          // 78  바람   저항   : 바람공격에 대한 대미지 감소
 
-    POINT_REFLECT_MELEE,        // 79 ���� �ݻ�
+    POINT_REFLECT_MELEE,        // 79 공격 반사
 
-    /// Ư�� ���ؽ� ///
-    POINT_REFLECT_CURSE,        // 80 ���� �ݻ�
-    POINT_POISON_REDUCE,        // 81 �������� ����
+    /// 특수 피해시 ///
+    POINT_REFLECT_CURSE,        // 80 저주 반사
+    POINT_POISON_REDUCE,        // 81 독데미지 감소
 
-    /// �� �Ҹ�� ///
-    POINT_KILL_SP_RECOVER,      // 82 �� �Ҹ�� MP ȸ��
+    /// 적 소멸시 ///
+    POINT_KILL_SP_RECOVER,      // 82 적 소멸시 MP 회복
     POINT_EXP_DOUBLE_BONUS,     // 83
     POINT_GOLD_DOUBLE_BONUS,    // 84
     POINT_ITEM_DROP_BONUS,      // 85
 
-    /// ȸ�� ���� ///
+    /// 회복 관련 ///
     POINT_POTION_BONUS,         // 86
     POINT_KILL_HP_RECOVER,      // 87
 
@@ -1635,32 +1635,32 @@ enum EPointTypes
 	POINT_STAT_RESET_COUNT = 112,
     POINT_HORSE_SKILL = 113,
 
-	POINT_MALL_ATTBONUS,		// 114 ���ݷ� +x%
-	POINT_MALL_DEFBONUS,		// 115 ���� +x%
-	POINT_MALL_EXPBONUS,		// 116 ����ġ +x%
-	POINT_MALL_ITEMBONUS,		// 117 ������ ����� x/10��
-	POINT_MALL_GOLDBONUS,		// 118 �� ����� x/10��
-    POINT_MAX_HP_PCT,			// 119 �ִ������ +x%
-    POINT_MAX_SP_PCT,			// 120 �ִ����ŷ� +x%
+	POINT_MALL_ATTBONUS,		// 114 공격력 +x%
+	POINT_MALL_DEFBONUS,		// 115 방어력 +x%
+	POINT_MALL_EXPBONUS,		// 116 경험치 +x%
+	POINT_MALL_ITEMBONUS,		// 117 아이템 드롭율 x/10배
+	POINT_MALL_GOLDBONUS,		// 118 돈 드롭율 x/10배
+    POINT_MAX_HP_PCT,			// 119 최대생명력 +x%
+    POINT_MAX_SP_PCT,			// 120 최대정신력 +x%
 
-	POINT_SKILL_DAMAGE_BONUS,       // 121 ��ų ������ *(100+x)%
-	POINT_NORMAL_HIT_DAMAGE_BONUS,  // 122 ��Ÿ ������ *(100+x)%
+	POINT_SKILL_DAMAGE_BONUS,       // 121 스킬 데미지 *(100+x)%
+	POINT_NORMAL_HIT_DAMAGE_BONUS,  // 122 평타 데미지 *(100+x)%
    
-    POINT_SKILL_DEFEND_BONUS,       // 123 ��ų ��� ������
-    POINT_NORMAL_HIT_DEFEND_BONUS,  // 124 ��Ÿ ��� ������
+    POINT_SKILL_DEFEND_BONUS,       // 123 스킬 방어 데미지
+    POINT_NORMAL_HIT_DEFEND_BONUS,  // 124 평타 방어 데미지
     POINT_PC_BANG_EXP_BONUS,        // 125
-	POINT_PC_BANG_DROP_BONUS,       // 126 PC�� ���� ��ӷ� ���ʽ�
+	POINT_PC_BANG_DROP_BONUS,       // 126 PC방 전용 드롭률 보너스
 
-	POINT_ENERGY = 128,				// 128 ���
+	POINT_ENERGY = 128,				// 128 기력
 
-	// ��� ui ��.
-	// �̷��� �ϰ� ���� �ʾ�����, 
-	// uiTaskBar������ affect�� ������ �� ����,
-	// ������ Ŭ�󸮾�Ʈ������ blend_affect�� �������� �ʾ�,
-	// �ӽ÷� �̷��� �д�.
-	POINT_ENERGY_END_TIME = 129,	// 129 ��� ���� �ð�
+	// 기력 ui 용.
+	// 이렇게 하고 싶지 않았지만, 
+	// uiTaskBar에서는 affect에 접근할 수 없고,
+	// 더구나 클라리언트에서는 blend_affect는 관리하지 않아,
+	// 임시로 이렇게 둔다.
+	POINT_ENERGY_END_TIME = 129,	// 129 기력 종료 시간
 
-	// Ŭ���̾�Ʈ ����Ʈ
+	// 클라이언트 포인트
 	POINT_MIN_WEP = 200,
 	POINT_MAX_WEP,
 	POINT_MIN_MAGIC_WEP,
@@ -1668,7 +1668,7 @@ enum EPointTypes
 	POINT_HIT_RATE,
 
 
-    //POINT_MAX_NUM = 255,=>stdafx.h ��/
+    //POINT_MAX_NUM = 255,=>stdafx.h 로/
 };
 
 typedef struct packet_points
@@ -1684,8 +1684,8 @@ typedef struct packet_point_change
 	DWORD		dwVID;
 	BYTE		Type;
 
-	long        amount; // �ٲ� ��
-    long        value;  // ���� ��
+	long        amount; // 바뀐 값
+    long        value;  // 현재 값
 } TPacketGCPointChange;
 
 typedef struct packet_motion
@@ -1723,7 +1723,7 @@ typedef struct packet_set_item
 	BYTE		pos;
 	DWORD		vnum;
 	BYTE		count;
-	DWORD		flags;	// �÷��� �߰�
+	DWORD		flags;	// 플래그 추가
 	long		alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
     TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
 } TPacketGCItemSet;
@@ -1750,8 +1750,8 @@ typedef struct packet_set_item2
 	TItemPos	Cell;
 	DWORD		vnum;
 	BYTE		count;
-	DWORD		flags;	// �÷��� �߰�
-	DWORD		anti_flags;	// �÷��� �߰�
+	DWORD		flags;	// 플래그 추가
+	DWORD		anti_flags;	// 플래그 추가
 	bool		highlight;
 	long		alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
     TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
@@ -1832,7 +1832,7 @@ typedef struct packet_shop_start
 	struct packet_shop_item		items[SHOP_HOST_ITEM_MAX_NUM];
 } TPacketGCShopStart;
 
-typedef struct packet_shop_start_ex // ������ TSubPacketShopTab* shop_tabs �� �����.
+typedef struct packet_shop_start_ex // 다음에 TSubPacketShopTab* shop_tabs 이 따라옴.
 {
 	typedef struct sub_packet_shop_tab 
 	{
@@ -1975,12 +1975,12 @@ typedef struct packet_move
 enum
 {
 	QUEST_SEND_IS_BEGIN         = 1 << 0,
-    QUEST_SEND_TITLE            = 1 << 1,  // 28�� ����
-    QUEST_SEND_CLOCK_NAME       = 1 << 2,  // 16�� ����
+    QUEST_SEND_TITLE            = 1 << 1,  // 28자 까지
+    QUEST_SEND_CLOCK_NAME       = 1 << 2,  // 16자 까지
     QUEST_SEND_CLOCK_VALUE      = 1 << 3,
-    QUEST_SEND_COUNTER_NAME     = 1 << 4,  // 16�� ����
+    QUEST_SEND_COUNTER_NAME     = 1 << 4,  // 16자 까지
     QUEST_SEND_COUNTER_VALUE    = 1 << 5,
-	QUEST_SEND_ICON_FILE		= 1 << 6,  // 24�� ���� 
+	QUEST_SEND_ICON_FILE		= 1 << 6,  // 24자 까지 
 };
 
 typedef struct packet_quest_info
@@ -2003,8 +2003,8 @@ typedef struct packet_attack
 {
     BYTE        header;
     DWORD       dwVID;
-    DWORD       dwVictimVID;    // �� VID
-    BYTE        bType;          // ���� ����
+    DWORD       dwVictimVID;    // 적 VID
+    BYTE        bType;          // 공격 유형
 } TPacketGCAttack;
 
 typedef struct packet_c2c
@@ -2074,7 +2074,7 @@ enum EPVPModes
 typedef struct packet_duel_start
 {
     BYTE	header ;
-    WORD	wSize ;	// DWORD�� �? ���� = (wSize - sizeof(TPacketGCPVPList)) / 4
+    WORD	wSize ;	// DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4
 } TPacketGCDuelStart ;
 
 typedef struct packet_pvp
@@ -2230,7 +2230,7 @@ enum
 
 typedef struct packet_guild_sub_grade
 {
-	char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 �����, ���� ���� �̸�
+	char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 길드장, 길드원 등의 이름
 	BYTE auth_flag;
 } TPacketGCGuildSubGrade;
 
@@ -2271,7 +2271,7 @@ enum EGuildWarState
     GUILD_WAR_ON_WAR,
     GUILD_WAR_END,
 
-    GUILD_WAR_DURATION = 2*60*60, // 2�ð�
+    GUILD_WAR_DURATION = 2*60*60, // 2시간
 };
 
 typedef struct packet_guild_war
@@ -2347,8 +2347,8 @@ typedef struct SRefineTable
     DWORD src_vnum;
     DWORD result_vnum;
     BYTE material_count;
-    int cost; // �ҿ� ���
-    int prob; // Ȯ��
+    int cost; // 소요 비용
+    int prob; // 확률
     TMaterial materials[REFINE_MATERIAL_MAX_NUM];
 } TRefineTable;
 
@@ -2383,17 +2383,17 @@ enum SPECIAL_EFFECT
 	SE_SUCCESS,
 	SE_FAIL,
 	SE_FR_SUCCESS,    
-    SE_LEVELUP_ON_14_FOR_GERMANY,	//������ 14�϶� ( �������� )
-    SE_LEVELUP_UNDER_15_FOR_GERMANY,//������ 15�϶� ( �������� )
+    SE_LEVELUP_ON_14_FOR_GERMANY,	//레벨업 14일때 ( 독일전용 )
+    SE_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 )
     SE_PERCENT_DAMAGE1,
     SE_PERCENT_DAMAGE2,
     SE_PERCENT_DAMAGE3,    
 	SE_AUTO_HPUP,
 	SE_AUTO_SPUP,
-	SE_EQUIP_RAMADAN_RING,			// �ʽ´��� ������ �����ϴ� ������ �ߵ��ϴ� ����Ʈ
-	SE_EQUIP_HALLOWEEN_CANDY,		// �ҷ��� ������ ����(-_-;)�� ������ �ߵ��ϴ� ����Ʈ
-	SE_EQUIP_HAPPINESS_RING,		// ũ�������� �ູ�� ������ �����ϴ� ������ �ߵ��ϴ� ����Ʈ
-	SE_EQUIP_LOVE_PENDANT,		// �߷�Ÿ�� ����� �Ҵ�Ʈ(71145) ������ �� ����Ʈ (�ߵ�����Ʈ��, ��������Ʈ �ƴ�)
+	SE_EQUIP_RAMADAN_RING,			// 초승달의 반지를 착용하는 순간에 발동하는 이펙트
+	SE_EQUIP_HALLOWEEN_CANDY,		// 할로윈 사탕을 착용(-_-;)한 순간에 발동하는 이펙트
+	SE_EQUIP_HAPPINESS_RING,		// 크리스마스 행복의 반지를 착용하는 순간에 발동하는 이펙트
+	SE_EQUIP_LOVE_PENDANT,		// 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
 };
 
 typedef struct SPacketGCSpecialEffect
@@ -2696,7 +2696,7 @@ typedef struct packet_hs_check_req
 	AHNHS_TRANS_BUFFER	Req;
 } TPacketHSCheck;
 
-//NOTE : recv/send�� �������� ����, bPacketData�� ���븸 �ٲ��.
+//NOTE : recv/send에 공통으로 생김, bPacketData의 내용만 바뀐다.
 typedef struct packet_xtrap_verify
 {
 	BYTE	bHeader;
@@ -2714,7 +2714,7 @@ typedef struct packet_autoban_quiz
 // END_OF_AUTOBAN
 
 #ifdef __AUCTION__
-// Argument�� �뵵�� cmd�� ���� �ٸ���.
+// Argument의 용도는 cmd에 따라 다르다.
 typedef struct SPacketCGAuctionCmd
 {
 	BYTE bHeader;
@@ -2740,7 +2740,7 @@ typedef struct SPacketGCSpecificEffect
 	char effect_file[128];
 } TPacketGCSpecificEffect;
 
-// ��ȥ��
+// 용혼석
 enum EDragonSoulRefineWindowRefineType
 {
 	DragonSoulRefineWindow_UPGRADE,
diff --git a/src/UserInterface/PythonApplication.h b/src/UserInterface/PythonApplication.h
index 90850381..c511a5f1 100644
--- a/src/UserInterface/PythonApplication.h
+++ b/src/UserInterface/PythonApplication.h
@@ -80,7 +80,7 @@ class CPythonApplication : public CMSApplication, public CInputKeyboard, public
 
 			CURSOR_SHAPE_COUNT,
 
-			// �������� ���̹� ��ȯ�� ���� �ӽ� enumerate
+			// 안정적인 네이밍 변환을 위한 임시 enumerate
 			NORMAL = CURSOR_SHAPE_NORMAL,
 			ATTACK = CURSOR_SHAPE_ATTACK,
 			TARGET = CURSOR_SHAPE_TARGET,
@@ -254,16 +254,16 @@ class CPythonApplication : public CMSApplication, public CInputKeyboard, public
 
 	protected:
 		IGraphBuilder*			m_pGraphBuilder;			// Graph Builder
-		IBaseFilter*			m_pFilterSG;				// Sample Grabber ����
-		ISampleGrabber*			m_pSampleGrabber;			// ���� �̹��� ĸó�� ���� ���� �׷���
+		IBaseFilter*			m_pFilterSG;				// Sample Grabber 필터
+		ISampleGrabber*			m_pSampleGrabber;			// 영상 이미지 캡처를 위한 샘플 그래버
 		IMediaControl*			m_pMediaCtrl;				// Media Control
 		IMediaEventEx*			m_pMediaEvent;				// Media Event
 		IVideoWindow*			m_pVideoWnd;				// Video Window
 		IBasicVideo*			m_pBasicVideo;
-		BYTE*					m_pCaptureBuffer;			// ���� �̹����� ĸó�� ����
-		LONG					m_lBufferSize;				// Video ���� ũ�� ���� 
-		CGraphicImageTexture*	m_pLogoTex;					// ����� �ؽ���
-		bool					m_bLogoError;				// ���� �б� ����
+		BYTE*					m_pCaptureBuffer;			// 영상 이미지를 캡처한 버퍼
+		LONG					m_lBufferSize;				// Video 버퍼 크기 변수 
+		CGraphicImageTexture*	m_pLogoTex;					// 출력할 텍스쳐
+		bool					m_bLogoError;				// 영상 읽기 상태
 		bool					m_bLogoPlay;
 
 		int						m_nLeft, m_nRight, m_nTop, m_nBottom;
diff --git a/src/UserInterface/PythonExchange.h b/src/UserInterface/PythonExchange.h
index 3e34ba3b..832ec01d 100644
--- a/src/UserInterface/PythonExchange.h
+++ b/src/UserInterface/PythonExchange.h
@@ -3,7 +3,7 @@
 #include "Packet.h"
 
 /*
- *	��ȯ â ����
+ *	교환 창 관련
  */
 class CPythonExchange : public CSingleton<CPythonExchange>
 {
@@ -86,7 +86,7 @@ class CPythonExchange : public CSingleton<CPythonExchange>
 	protected:
 		bool				m_isTrading;
 
-		bool				m_elk_mode;   // ��ũ�� Ŭ���ؼ� ��ȯ�������� ���� ������.
+		bool				m_elk_mode;   // 엘크를 클릭해서 교환했을때를 위한 변종임.
 		TExchangeData		m_self;
 		TExchangeData		m_victim;
 };
diff --git a/src/UserInterface/PythonItem.h b/src/UserInterface/PythonItem.h
index 3b6b4b4d..9824758d 100644
--- a/src/UserInterface/PythonItem.h
+++ b/src/UserInterface/PythonItem.h
@@ -1,8 +1,8 @@
 #pragma once
 
-// Note : ȭ��� ������ Item�� Update�� Rendering�� å������ ����
-//        �� �������� ����Ÿ�� Icon Image Instance�� �Ŵ��� ���ұ��� �ְ�
-//        ���� ���������� ���⵵ �ϴ� - 2003. 01. 13. [levites]
+// Note : 화면상에 떨어진 Item의 Update와 Rendering을 책임지는 한편
+//        각 아이템의 데이타와 Icon Image Instance의 매니져 역할까지 주관
+//        조금 난잡해진거 같기도 하다 - 2003. 01. 13. [levites]
 
 #include "../EterGrnLib/ThingInstance.h"
 
diff --git a/src/UserInterface/PythonMiniMap.h b/src/UserInterface/PythonMiniMap.h
index e6bf29b1..0f7b880d 100644
--- a/src/UserInterface/PythonMiniMap.h
+++ b/src/UserInterface/PythonMiniMap.h
@@ -148,7 +148,7 @@ class CPythonMiniMap : public CScreen, public CSingleton<CPythonMiniMap>
 			DWORD dwDstTime;
 		};
 
-		// ij���� ����Ʈ
+		// 캐릭터 리스트
 		typedef struct 
 		{
 			float	m_fX;
@@ -180,14 +180,14 @@ class CPythonMiniMap : public CScreen, public CSingleton<CPythonMiniMap>
 
 		float							m_fMiniMapRadius;
 
-		// �� �׸�...
+		// 맵 그림...
 		LPDIRECT3DTEXTURE9				m_lpMiniMapTexture[AROUND_AREA_NUM];
 
-		// �̴ϸ� Ŀ��
+		// 미니맵 커버
 		CGraphicImageInstance			m_MiniMapFilterGraphicImageInstance;
 		CGraphicExpandedImageInstance	m_MiniMapCameraraphicImageInstance;
 
-		// ij���� ��ũ
+		// 캐릭터 마크
 		CGraphicExpandedImageInstance	m_PlayerMark;
 		CGraphicImageInstance			m_WhiteMark;
 
diff --git a/src/UserInterface/PythonNetworkStream.h b/src/UserInterface/PythonNetworkStream.h
index db38104a..b855d771 100644
--- a/src/UserInterface/PythonNetworkStream.h
+++ b/src/UserInterface/PythonNetworkStream.h
@@ -154,7 +154,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
 		bool SendQuickSlotDelPacket(BYTE wpos);
 		bool SendQuickSlotMovePacket(BYTE wpos, BYTE change_pos);
 
-		// PointReset �� �ӽ�
+		// PointReset 개 임시
 		bool SendPointResetPacket();
 
 		// Shop
@@ -257,7 +257,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
 		// CRC Report
 		bool __SendCRCReportPacket();
 
-		// ��ȫ�� ��ȭ
+		// 용홍석 강화
 		bool SendDragonSoulRefinePacket(BYTE bRefineType, TItemPos* pos);
 
 		// Handshake
@@ -277,7 +277,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
 		void __TEST_SetSkillGroupFake(int iIndex);
 
 	//////////////////////////////////////////////////////////////////////////
-	// Phase ����
+	// Phase 관련
 	//////////////////////////////////////////////////////////////////////////
 	public:
 		void SetOffLinePhase();
@@ -314,7 +314,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
 		bool SendMessengerRemovePacket(const char * c_szKey, const char * c_szName);
 
 	protected:
-		bool OnProcess();	// State���� ������ �����Ѵ�.
+		bool OnProcess();	// State들을 실제로 실행한다.
 		void OffLinePhase();
 		void HandShakePhase();
 		void LoginPhase();
@@ -528,10 +528,10 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
 		// Use Potion
 		bool RecvSpecialEffect();
 
-		// �������� ������ ����Ʈ �ߵ� ��Ŷ.
+		// 서버에서 지정한 이팩트 발동 패킷.
 		bool RecvSpecificEffect();
 		
-		// ��ȥ�� ����
+		// 용혼석 관련
 		bool RecvDragonSoulRefine();
 
 		// MiniMap Info
@@ -554,10 +554,10 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
 		bool RecvXTrapVerifyRequest();
 
 	protected:
-		// �̸�Ƽ��
+		// 이모티콘
 		bool ParseEmoticon(const char * pChatMsg, DWORD * pdwEmoticon);
 
-		// ���̽����� ������ �ݵ�
+		// 파이썬으로 보내는 콜들
 		void OnConnectFailure();
 		void OnScriptEventStart(int iSkin, int iIndex);
 		
diff --git a/src/UserInterface/PythonNonPlayer.h b/src/UserInterface/PythonNonPlayer.h
index 7c3a9a6d..cdba8f83 100644
--- a/src/UserInterface/PythonNonPlayer.h
+++ b/src/UserInterface/PythonNonPlayer.h
@@ -1,7 +1,7 @@
 #pragma once
 
 /*
- *	NPC ������ ������ Ÿ���� ���� �Ѵ�.
+ *	NPC 데이터 프로토 타잎을 관리 한다.
  */
 class CPythonNonPlayer : public CSingleton<CPythonNonPlayer>
 {
diff --git a/src/UserInterface/PythonPlayer.h b/src/UserInterface/PythonPlayer.h
index 50a61898..1da22bd4 100644
--- a/src/UserInterface/PythonPlayer.h
+++ b/src/UserInterface/PythonPlayer.h
@@ -7,13 +7,13 @@
 class CInstanceBase;
 
 /*
- *	���� ij���� (�ڽ��� �����ϴ� ij����) �� ���� �������� �����Ѵ�.
+ *	메인 캐릭터 (자신이 조정하는 캐릭터) 가 가진 정보들을 관리한다.
  *
- * 2003-01-12 Levites	������ CPythonCharacter�� ������ �־����� �Ը� �ʹ� Ŀ�� ��������
- *						��ġ�� �ָ��ؼ� ���� �и�
- * 2003-07-19 Levites	���� ij������ �̵� ó�� CharacterInstance���� ����� ����
- *						������ ����Ÿ ������ ���ҿ��� �Ϻ��� ���� �÷��̾� ���� Ŭ������
- *						Ż�ٲ� ��.
+ * 2003-01-12 Levites	본래는 CPythonCharacter가 가지고 있었지만 규모가 너무 커져 버린데다
+ *						위치도 애매해서 따로 분리
+ * 2003-07-19 Levites	메인 캐릭터의 이동 처리 CharacterInstance에서 떼어다 붙임
+ *						기존의 데이타 보존의 역할에서 완벽한 메인 플레이어 제어 클래스로
+ *						탈바꿈 함.
  */
 
 class CPythonPlayer : public CSingleton<CPythonPlayer>, public IAbstractPlayer
@@ -88,8 +88,8 @@ class CPythonPlayer : public CSingleton<CPythonPlayer>, public IAbstractPlayer
 			float fnextEfficientPercentage;
 			BOOL isCoolTime;
 
-			float fCoolTime;			// NOTE : ��Ÿ�� ���� ��ų ������
-			float fLastUsedTime;		//        ��â�� ����� �� ����ϴ� ����
+			float fCoolTime;			// NOTE : 쿨타임 중인 스킬 슬롯을
+			float fLastUsedTime;		//        퀵창에 등록할 때 사용하는 변수
 			BOOL bActive;
 		} TSkillInstance;
 
@@ -161,15 +161,15 @@ class CPythonPlayer : public CSingleton<CPythonPlayer>, public IAbstractPlayer
 			SKILL_PERFECT_MASTER,
 		};
 
-		// �ڵ����� ���� ���� Ưȭ ����ü.. �̷����� Ưȭ ó�� �۾��� �� �Ϸ��� �ִ��� ��������� �����ϰ� �ᱹ Ưȭó��.
+		// 자동물약 상태 관련 특화 구조체.. 이런식의 특화 처리 작업을 안 하려고 최대한 노력했지만 실패하고 결국 특화처리.
 		struct SAutoPotionInfo
 		{
 			SAutoPotionInfo() : bActivated(false), totalAmount(0), currentAmount(0) {}
 
-			bool bActivated;					// Ȱ��ȭ �Ǿ��°�?			
-			long currentAmount;					// ���� ���� ��
-			long totalAmount;					// ��ü ��
-			long inventorySlotIndex;			// ������� �������� �κ��丮�� ���� �ε���
+			bool bActivated;					// 활성화 되었는가?			
+			long currentAmount;					// 현재 남은 양
+			long totalAmount;					// 전체 양
+			long inventorySlotIndex;			// 사용중인 아이템의 인벤토리상 슬롯 인덱스
 		};
 
 		enum EAutoPotionType
@@ -227,7 +227,7 @@ class CPythonPlayer : public CSingleton<CPythonPlayer>, public IAbstractPlayer
 
 
 		// Reserved
-		bool	NEW_IsEmptyReservedDelayTime(float fElapsedtime);	// ���̹� ���� ���� �ʿ� - [levites]
+		bool	NEW_IsEmptyReservedDelayTime(float fElapsedtime);	// 네이밍 교정 논의 필요 - [levites]
 
 
 		// Dungeon
@@ -240,7 +240,7 @@ class CPythonPlayer : public CSingleton<CPythonPlayer>, public IAbstractPlayer
 
 		// flying target set
 		void	Clear();
-		void	ClearSkillDict(); // �������ų� ClearGame ������ ���Ե� �Լ�
+		void	ClearSkillDict(); // 없어지거나 ClearGame 쪽으로 포함될 함수
 		void	NEW_ClearSkillData(bool bAll = false);
 
 		void	Update();
diff --git a/src/UserInterface/PythonPlayerEventHandler.h b/src/UserInterface/PythonPlayerEventHandler.h
index d8fd73d5..b1fa3675 100644
--- a/src/UserInterface/PythonPlayerEventHandler.h
+++ b/src/UserInterface/PythonPlayerEventHandler.h
@@ -63,9 +63,9 @@ class CPythonPlayerEventHandler : public CActorInstance::IEventHandler
 				virtual void OnSetFlyTarget();
 				virtual void OnShoot(DWORD dwSkillIndex);
 
-				virtual void OnNoTarget() { /*Tracenf("Shoot : target�� �����ϴ�.");*/ }
-				virtual void OnExplodingOutOfRange() { /*Tracenf("Shoot : �����Ÿ��� �������ϴ�.");*/ }
-				virtual void OnExplodingAtBackground() { /*Tracenf("Shoot : ��濡 �¾ҽ��ϴ�.");*/ }
+				virtual void OnNoTarget() { /*Tracenf("Shoot : target이 없습니다.");*/ }
+				virtual void OnExplodingOutOfRange() { /*Tracenf("Shoot : 사정거리가 끝났습니다.");*/ }
+				virtual void OnExplodingAtBackground() { /*Tracenf("Shoot : 배경에 맞았습니다.");*/ }
 				virtual void OnExplodingAtAnotherTarget(DWORD dwSkillIndex, DWORD dwVID);
 				virtual void OnExplodingAtTarget(DWORD dwSkillIndex);
 
diff --git a/src/UserInterface/PythonShop.h b/src/UserInterface/PythonShop.h
index 40ecbf6c..d285acbc 100644
--- a/src/UserInterface/PythonShop.h
+++ b/src/UserInterface/PythonShop.h
@@ -3,12 +3,12 @@
 #include "Packet.h"
 
 /*
- *	���� ó��
+ *	상점 처리
  *
- *	2003-01-16 anoa	���� �Ϸ�
- *	2003-12-26 levites ����
+ *	2003-01-16 anoa	일차 완료
+ *	2003-12-26 levites 수정
  *
- *	2012-10-29 rtsummit ���ο� ȭ�� ���� �� tab ��� �߰��� ���� shop Ȯ��.
+ *	2012-10-29 rtsummit 새로운 화폐 출현 및 tab 기능 추가로 인한 shop 확장.
  *
  */
 typedef enum
diff --git a/src/UserInterface/PythonSkill.h b/src/UserInterface/PythonSkill.h
index 8b11109c..9e9b7427 100644
--- a/src/UserInterface/PythonSkill.h
+++ b/src/UserInterface/PythonSkill.h
@@ -104,7 +104,7 @@ class CPythonSkill : public CSingleton<CPythonSkill>
 			SKILL_ATTRIBUTE_NEED_EMPTY_BOTTLE		= (1 << 12),
 			SKILL_ATTRIBUTE_NEED_POISON_BOTTLE		= (1 << 13),
 			SKILL_ATTRIBUTE_ATTACK_SKILL			= (1 << 14),
-			SKILL_ATTRIBUTE_TIME_INCREASE_SKILL		= (1 << 15), // ������ ���� attribute
+			SKILL_ATTRIBUTE_TIME_INCREASE_SKILL		= (1 << 15), // 증지술 전용 attribute
 			SKILL_ATTRIBUTE_CHARGE_ATTACK			= (1 << 16),
 			SKILL_ATTRIBUTE_PASSIVE					= (1 << 17),
 			SKILL_ATTRIBUTE_CANNOT_LEVEL_UP			= (1 << 18),
@@ -138,7 +138,7 @@ class CPythonSkill : public CSingleton<CPythonSkill>
 		enum
 		{
 			SKILL_GRADE_COUNT = 3,
-			SKILL_EFFECT_COUNT = 4,	//��ų�� ��,��,���� �̿ܿ� �������϶� ����Ʈ �߰�.
+			SKILL_EFFECT_COUNT = 4,	//스킬은 초,중,고급 이외에 마스터일때 이펙트 추가.
 			SKILL_GRADE_STEP_COUNT = 20,
 			SKILL_GRADEGAP = 25,
 		};
@@ -243,8 +243,8 @@ class CPythonSkill : public CSingleton<CPythonSkill>
 			DWORD dwSkillAttribute;
 			DWORD dwNeedWeapon;
 			DWORD dwTargetRange;
-			WORD wMotionIndex; // ������ ����
-			WORD wMotionIndexForMe; // ������ ����
+			WORD wMotionIndex; // 없어질 변수
+			WORD wMotionIndexForMe; // 없어질 변수
 
 			BOOL isRequirement;
 			std::string strRequireSkillName;
diff --git a/src/UserInterface/PythonTextTail.h b/src/UserInterface/PythonTextTail.h
index ea59a0c0..ee14a4ad 100644
--- a/src/UserInterface/PythonTextTail.h
+++ b/src/UserInterface/PythonTextTail.h
@@ -3,7 +3,7 @@
 #include "../eterBase/Singleton.h"
 
 /*
- *	����ٴϴ� �ؽ�Ʈ ó��
+ *	따라다니는 텍스트 처리
  */
 class CPythonTextTail : public CSingleton<CPythonTextTail>
 {
@@ -20,8 +20,8 @@ class CPythonTextTail : public CSingleton<CPythonTextTail>
 			CGraphicTextInstance*			pLevelTextInstance;
 
 
-			// Todo : �̰� ���� VID�� �ٲٵ��� �Ѵ�.
-			//        ���� ij���Ͱ� ������ ��� ƨ�� ���ɼ��� ����
+			// Todo : 이건 전부 VID로 바꾸도록 한다.
+			//        도중 캐릭터가 없어질 경우 튕길 가능성이 있음
 			CGraphicObjectInstance *		pOwner;
 
 			DWORD							dwVirtualID;
@@ -29,7 +29,7 @@ class CPythonTextTail : public CSingleton<CPythonTextTail>
 			float							x, y, z;
 			float							fDistanceFromPlayer;
 			D3DXCOLOR						Color;
-			BOOL							bNameFlag;		// �̸��� �Բ� �Ӱ������� �÷���
+			BOOL							bNameFlag;		// 이름도 함께 켤것인지의 플래그
 
 			float							xStart, yStart;
 			float							xEnd, yEnd;

From 077a365840ace9a3b39340ee47ec476bd406ad73 Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Wed, 1 Jan 2025 19:37:28 +0100
Subject: [PATCH 4/8] use modern fontfaces in GetFontFaceFromCodePage9x

---
 src/EterLib/Util.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/EterLib/Util.cpp b/src/EterLib/Util.cpp
index cccd5715..764947d1 100644
--- a/src/EterLib/Util.cpp
+++ b/src/EterLib/Util.cpp
@@ -214,13 +214,13 @@ const char* GetFontFaceFromCodePage9x(WORD codePage)
 	switch( codePage )
 	{
 	case CP_932:
-		return "\x82l\x82r \x82o\x83S\x83V\x83b\x83N";
+		return "MS PGothic";
 	case CP_949:
-		return "\xB1\xBC\xB8\xB2\xC3\xBC";
+		return "GulimChe";
 	case CP_936:
-		return "\xCB\xCE\xCC\xE5";
+		return "SimSun";
 	case CP_950:
-		return "\xB2\xD3\xA9\xFA\xC5\xE9";
+		return "MingLiU";
 	case CP_874:
 		return "Tahoma";
 	case CP_1252:

From 2589163a491f0490c085c4fb6fd4ebcbb927f326 Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Sun, 12 Jan 2025 18:14:49 +0100
Subject: [PATCH 5/8] translate commented out code and traces

---
 src/EterLib/GrpText.cpp                       |  6 +--
 src/EterLib/GrpTextInstance.cpp               |  2 +-
 src/EterLocale/StringCodec_Vietnamese.cpp     |  2 +-
 src/EterPythonLib/PythonWindow.cpp            |  2 +-
 src/GameLib/ActorInstanceBattle.cpp           | 10 ++--
 src/GameLib/ActorInstanceMotion.cpp           |  8 ++--
 src/GameLib/ActorInstanceRotation.cpp         |  2 +-
 src/GameLib/ItemData.cpp                      |  2 +-
 src/GameLib/MapBase.cpp                       |  4 +-
 src/GameLib/MapManager.cpp                    |  6 +--
 src/GameLib/MapOutdoorUpdate.cpp              |  2 +-
 src/MilesLib/SoundManager.cpp                 |  2 +-
 src/UserInterface/InstanceBase.cpp            | 46 +++++++++----------
 src/UserInterface/InstanceBaseBattle.cpp      |  4 +-
 src/UserInterface/InstanceBaseEffect.cpp      |  2 +-
 src/UserInterface/PythonApplication.cpp       |  6 +--
 src/UserInterface/PythonChatModule.cpp        |  2 +-
 src/UserInterface/PythonNetworkStream.cpp     |  2 +-
 .../PythonNetworkStreamCommand.cpp            | 13 +++---
 .../PythonNetworkStreamPhaseGame.cpp          |  7 ++-
 .../PythonNetworkStreamPhaseGameActor.cpp     |  2 +-
 .../PythonNetworkStreamPhaseGameItem.cpp      |  2 +-
 .../PythonPlayerEventHandler.cpp              |  4 +-
 src/UserInterface/PythonPlayerSkill.cpp       |  6 +--
 src/UserInterface/PythonSkill.cpp             |  2 +-
 src/UserInterface/PythonTextTail.cpp          |  4 +-
 src/UserInterface/UserInterface.cpp           |  8 ++--
 27 files changed, 79 insertions(+), 79 deletions(-)

diff --git a/src/EterLib/GrpText.cpp b/src/EterLib/GrpText.cpp
index c3676431..1c24ce0b 100644
--- a/src/EterLib/GrpText.cpp
+++ b/src/EterLib/GrpText.cpp
@@ -38,9 +38,9 @@ bool CGraphicText::OnLoad(int /*iSize*/, const void* /*c_pvBuf*/)
 	bool bItalic = false;
 
 	// format
-	// 굴림.fnt		"\xB1\xBC\xB8\xB2" 폰트 기본 사이즈 12 로 로딩
-	// 굴림:18.fnt  "\xB1\xBC\xB8\xB2" 폰트 사이즈 18 로 로딩
-	// 굴림:14i.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 14 & 이탤릭으로 로딩
+	// 굴림.fnt		"굴림" 폰트 기본 사이즈 12 로 로딩
+	// 굴림:18.fnt  "굴림" 폰트 사이즈 18 로 로딩
+	// 굴림:14i.fnt "굴림" 폰트 사이즈 14 & 이탤릭으로 로딩
 	const char * p = strrchr(GetFileName(), ':');
 
 	if (p)
diff --git a/src/EterLib/GrpTextInstance.cpp b/src/EterLib/GrpTextInstance.cpp
index e520ea58..aa40201b 100644
--- a/src/EterLib/GrpTextInstance.cpp
+++ b/src/EterLib/GrpTextInstance.cpp
@@ -126,7 +126,7 @@ void CGraphicTextInstance::Update()
 
 	if (m_roText.IsNull())
 	{
-		Tracef("CGraphicTextInstance::Update - \xC6\xF9\xC6\xAE\xB0\xA1 \xBC\xB3\xC1\xA4\xB5\xC7\xC1\xF6 \xBE\xCA\xBE\xD2\xBD\xC0\xB4\xCF\xB4\xD9\n");
+		Tracef("CGraphicTextInstance::Update - Font not set\n");
 		return;
 	}
 
diff --git a/src/EterLocale/StringCodec_Vietnamese.cpp b/src/EterLocale/StringCodec_Vietnamese.cpp
index 9dd31ce3..3f270d9c 100644
--- a/src/EterLocale/StringCodec_Vietnamese.cpp
+++ b/src/EterLocale/StringCodec_Vietnamese.cpp
@@ -370,7 +370,7 @@ static bool DecomposeLetter(wchar_t input, char* letter)
 	case 0x201c: // L'“'
 		*letter = (char)'"';
 		return true;
-	case 0x201d: // L'\xE2\x80\x9D'
+	case 0x201d: // L'”'
 		*letter = (char)'"';
 		return true;
 	}
diff --git a/src/EterPythonLib/PythonWindow.cpp b/src/EterPythonLib/PythonWindow.cpp
index 5e3a7690..fd0a7a12 100644
--- a/src/EterPythonLib/PythonWindow.cpp
+++ b/src/EterPythonLib/PythonWindow.cpp
@@ -93,7 +93,7 @@ namespace UI
 		m_bShow = false;
 	}
 
-	// NOTE : IsShow는 "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" 이지만, __IsShowing은 "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" 를 체크한다
+	// NOTE : IsShow는 "자신이 보이는가?" 이지만, __IsShowing은 "자신이 그려지고 있는가?" 를 체크한다
 	//        자신은 Show 지만 Tree 위쪽의 Parent 중 하나는 Hide 일 수 있으므로.. - [levites]
 	bool CWindow::IsRendering()
 	{
diff --git a/src/GameLib/ActorInstanceBattle.cpp b/src/GameLib/ActorInstanceBattle.cpp
index 25c50e8b..479a7639 100644
--- a/src/GameLib/ActorInstanceBattle.cpp
+++ b/src/GameLib/ActorInstanceBattle.cpp
@@ -176,7 +176,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 		// 이미 입력 한계 시간이 지났다면..
 		if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime())
 		{
-			//Tracen("\xC0\xD4\xB7\xC2 \xC7\xD1\xB0\xE8 \xBD\xC3\xB0\xA3 \xC1\xF6\xB3\xB2");
+			//Tracen("Input Timeout");
 			if (IsBowMode())
 				m_isNextPreInput = TRUE;
 			return false;
@@ -184,14 +184,14 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 
 		if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면
 		{
-			//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
+			//Tracen("Next combo action");
 			// args : BlendingTime
 			__RunNextCombo();
 			return true;
 		}
 		else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면..
 		{
-			//Tracen("\xBC\xB1 \xC0\xD4\xB7\xC2 \xBC\xB3\xC1\xA4");
+			//Tracen("Setting up line input");
 			m_isPreInput = TRUE;
 			return false;
 		}
@@ -201,7 +201,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
 		float fElapsedTime = GetAttackingElapsedTime();	
 		if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면
 		{
-			//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
+			//Tracen("Next combo action");
 			// args : BlendingTime
 			__RunNextCombo();
 			return true;
@@ -229,7 +229,7 @@ void CActorInstance::ComboProcess()
 		// Process PreInput
 		if (m_isPreInput)
 		{
-			//Tracenf("\xBC\xB1\xC0\xD4\xB7\xC2 %f \xB4\xD9\xC0\xBD\xC4\xDE\xBA\xB8\xBD\xC3\xB0\xA3 %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime());
+			//Tracenf("Prefix %f NextComboTime %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime());
 			if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime())
 			{
   				__RunNextCombo();
diff --git a/src/GameLib/ActorInstanceMotion.cpp b/src/GameLib/ActorInstanceMotion.cpp
index 3af4004d..d3e9a32e 100644
--- a/src/GameLib/ActorInstanceMotion.cpp
+++ b/src/GameLib/ActorInstanceMotion.cpp
@@ -65,7 +65,7 @@ void CActorInstance::ReservingMotionProcess()
 		case CRaceMotionData::NAME_STAND_UP_BACK:
 			if (IsFaint())
 			{
-				//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xB1\xE2\xC0\xFD\xC1\xDF");
+				//Tracenf("You tried to stand up but are fainted");
 
 				SetEndStopMotion();
 
@@ -98,7 +98,7 @@ void CActorInstance::ReservingMotionProcess()
 		case CRaceMotionData::NAME_STAND_UP_BACK:
 			if (IsDead())
 			{
-				//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xBB\xE7\xB8\xC1");
+				//Tracenf("You tried to stand up but are dead");
 				// 예전 데이터로 복구
 				m_kCurMotNode=kPrevMotionNode;
 				__ClearMotion(); 
@@ -668,7 +668,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 		{
 			if (!m_isMain)
 			{
-				Logn(0, "\xC1\xD6\xC0\xCE\xB0\xF8\xC0\xCC \xBE\xC6\xB4\xCF\xB6\xF3\xB8\xE9 \xC0\xCC\xB5\xBF\xC1\xDF\xC0\xCC\xB6\xF3 \xB5\xA5\xB9\xCC\xC1\xF6 \xB5\xBF\xC0\xDB\xC0\xBB \xC3\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xC0\xBD");
+				Logn(0, "If you're not the main character, you're moving and don't do damage moves.");
 				return false;
 			}
 		}
@@ -757,7 +757,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
 
 				// NOTE : ClearCombo() 를 수행해서는 안된다.
 				//        콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다.
-				//Tracef("MotionData\xBF\xA1 \xC4\xDE\xBA\xB8 \xB5\xA5\xC0\xCC\xC5\xB8\xB0\xA1 \xB5\xE9\xBE\xEE \xC0\xD6\xC1\xF6 \xBE\xCA\xBD\xC0\xB4\xCF\xB4\xD9.\n");
+				//Tracef("MotionData does not contain combo data.\n");
 			}
 		}
 	}
diff --git a/src/GameLib/ActorInstanceRotation.cpp b/src/GameLib/ActorInstanceRotation.cpp
index 4572a61d..6d3761ae 100644
--- a/src/GameLib/ActorInstanceRotation.cpp
+++ b/src/GameLib/ActorInstanceRotation.cpp
@@ -62,7 +62,7 @@ void CActorInstance::RotationProcess()
 		m_fcurRotation = m_rotEnd;
 	}
 
-	// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"로 바꾼다. - [levites]
+	// FIXME : "건물일때만 체크"로 바꾼다. - [levites]
 	if (0.0f != m_rotX || 0.0f != m_rotY)
 	{
 		CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation);
diff --git a/src/GameLib/ItemData.cpp b/src/GameLib/ItemData.cpp
index fb6efaee..9ada26f5 100644
--- a/src/GameLib/ItemData.cpp
+++ b/src/GameLib/ItemData.cpp
@@ -203,7 +203,7 @@ void CItemData::__SetIconImage(const char * c_szFileName)
 {
 	if (!CResourceManager::Instance().IsFileExist(c_szFileName))
 	{
-		TraceError("%s \xC6\xC4\xC0\xCF\xC0\xCC \xBE\xF8\xBD\xC0\xB4\xCF\xB4\xD9.CItemData::__SetIconImage",c_szFileName);
+		TraceError("%s file is missing.CItemData::__SetIconImage",c_szFileName);
 		m_pIconImage = NULL;
 	}
 	else if (m_pIconImage == NULL) 
diff --git a/src/GameLib/MapBase.cpp b/src/GameLib/MapBase.cpp
index 347b7712..0b4bd024 100644
--- a/src/GameLib/MapBase.cpp
+++ b/src/GameLib/MapBase.cpp
@@ -57,7 +57,7 @@ bool CMapBase::LoadProperty()
 	
 	if (!LoadMultipleTextData(strFileName.c_str(), stTokenVectorMap))
 	{
-		TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR \xC6\xC4\xC0\xCF\xC0\xCC \xBE\xF8\xC0\xBB \xB0\xA1\xB4\xC9\xBC\xBA\xC0\xCC \xB8\xB9\xBD\xC0\xB4\xCF\xB4\xD9.", strFileName.c_str());
+		TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR The file is likely missing.", strFileName.c_str());
 		return false;
 	}
 
@@ -98,4 +98,4 @@ bool CMapBase::LoadProperty()
 		SetType(MAPTYPE_OUTDOOR);
 
 	return true;
-}
\ No newline at end of file
+}
diff --git a/src/GameLib/MapManager.cpp b/src/GameLib/MapManager.cpp
index 3cb3ebe3..cae13853 100644
--- a/src/GameLib/MapManager.cpp
+++ b/src/GameLib/MapManager.cpp
@@ -184,7 +184,7 @@ float CMapManager::GetHeight(float fx, float fy)
 {
 	if (!m_pkMap)
 	{
-		TraceError("CMapManager::GetHeight(%f, %f) - \xB8\xCA\xC0\xCC \xBB\xFD\xBC\xBA\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xBB\xF3\xC5\xC2\xBF\xA1\xBC\xAD \xC1\xA2\xB1\xD9", fx, fy);
+		TraceError("CMapManager::GetHeight(%f, %f) - Access without a map created", fx, fy);
 		return 0.0f;
 	}
 	CMapOutdoor& rkMap=GetMapOutdoorRef();
@@ -195,7 +195,7 @@ float CMapManager::GetTerrainHeight(float fx, float fy)
 {
 	if (!m_pkMap)
 	{
-		TraceError("CMapManager::GetTerrainHeight(%f, %f) - \xB8\xCA\xC0\xCC \xBB\xFD\xBC\xBA\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xBB\xF3\xC5\xC2\xBF\xA1\xBC\xAD \xC1\xA2\xB1\xD9", fx, fy);
+		TraceError("CMapManager::GetTerrainHeight(%f, %f) - Access without a map created", fx, fy);
 		return 0.0f;
 	}
 	CMapOutdoor& rkMap=GetMapOutdoorRef();
@@ -206,7 +206,7 @@ bool CMapManager::GetWaterHeight(int iX, int iY, long * plWaterHeight)
 {
 	if (!m_pkMap)
 	{
-		TraceError("CMapManager::GetTerrainHeight(%f, %f) - \xB8\xCA\xC0\xCC \xBB\xFD\xBC\xBA\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xBB\xF3\xC5\xC2\xBF\xA1\xBC\xAD \xC1\xA2\xB1\xD9", iX, iY);
+		TraceError("CMapManager::GetTerrainHeight(%f, %f) - Access without a map created", iX, iY);
 		return false;
 	}
 
diff --git a/src/GameLib/MapOutdoorUpdate.cpp b/src/GameLib/MapOutdoorUpdate.cpp
index 33191e84..ac91a418 100644
--- a/src/GameLib/MapOutdoorUpdate.cpp
+++ b/src/GameLib/MapOutdoorUpdate.cpp
@@ -742,7 +742,7 @@ void CMapOutdoor::UpdateTerrain(float fX, float fY)
 		
 		ConvertTerrainToTnL(lRealCenterX, lRealCenterY);
 		UpdateAreaList(lRealCenterX, lRealCenterY);
-		//Tracef("\xBB\xE7\xBF\xEB\xC7\xCF\xB4\xC2 Area, Terrain : (%d, %d), \xC1\xF6\xBF\xEF Area, Terrain : (%d, %d)\n",
+		//Tracef("Use Area, Terrain : (%d, %d), Clear Area, Terrain : (%d, %d)\n",
 		//	m_AreaVector.size(), m_TerrainVector.size(), m_AreaDeleteVector.size(), m_TerrainDeleteVector.size());		
 	}
 }
diff --git a/src/MilesLib/SoundManager.cpp b/src/MilesLib/SoundManager.cpp
index 159f6aac..bbfce774 100644
--- a/src/MilesLib/SoundManager.cpp
+++ b/src/MilesLib/SoundManager.cpp
@@ -397,7 +397,7 @@ void CSoundManager::PlayCharacterSound3D(float fx, float fy, float fz, const cha
 			float fTime = itor->second;
 			if (CTimer::Instance().GetCurrentSecond() - fTime < 0.3f)
 			{
-				//Tracef("\xB6\xC8\xB0\xB0\xC0\xBA \xBC\xD2\xB8\xAE\xB0\xA1 0.3\xC3\xCA \xB3\xBB\xBF\xA1 \xB4\xD9\xBD\xC3 \xC7\xC3\xB7\xB9\xC0\xCC %s\n", c_szFileName);
+				//Tracef("Play the same sound again in 0.3 seconds\n", c_szFileName);
 				return;
 			}
 		}
diff --git a/src/UserInterface/InstanceBase.cpp b/src/UserInterface/InstanceBase.cpp
index 805459fe..2eca8bac 100644
--- a/src/UserInterface/InstanceBase.cpp
+++ b/src/UserInterface/InstanceBase.cpp
@@ -410,7 +410,7 @@ void CInstanceBase::__EnableSkipCollision()
 {
 	if (__IsMainInstance())
 	{
-		TraceError("CInstanceBase::__EnableSkipCollision - \xC0\xDA\xBD\xC5\xC0\xBA \xC3\xE6\xB5\xB9\xB0\xCB\xBB\xE7\xBD\xBA\xC5\xB5\xC0\xCC \xB5\xC7\xB8\xE9 \xBE\xC8\xB5\xC8\xB4\xD9!!");
+		TraceError("CInstanceBase::__EnableSkipCollision - You shouldn't be a conflict check skip yourself!!");
 		return;
 	}
 	m_GraphicThingInstance.EnableSkipCollision();
@@ -1190,7 +1190,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos
 	if (__IsMainInstance())
 	{
 		//assert(!"CInstanceBase::PushTCPState \xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE \xC0\xDA\xBD\xC5\xBF\xA1\xB0\xD4 \xC0\xCC\xB5\xBF\xC6\xD0\xC5\xB6\xC0\xBA \xBF\xC0\xB8\xE9 \xBE\xC8\xB5\xC8\xB4\xD9!");
-		TraceError("CInstanceBase::PushTCPState \xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE \xC0\xDA\xBD\xC5\xBF\xA1\xB0\xD4 \xC0\xCC\xB5\xBF\xC6\xD0\xC5\xB6\xC0\xBA \xBF\xC0\xB8\xE9 \xBE\xC8\xB5\xC8\xB4\xD9!");
+		TraceError("CInstanceBase::PushTCPState Movement packets should not come from the player themselves!");
 		return;
 	}
 
@@ -1204,7 +1204,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos
 		m_dwBaseChkTime = ELTimer_GetFrameMSec()-nNetworkGap;
 		m_dwBaseCmdTime = dwCmdTime;
 
-		Tracenf("VID[%d] \xB3\xD7\xC6\xAE\xBF\xF7\xB0\xB8 [%d]", GetVirtualID(), nNetworkGap);
+		Tracenf("VID[%d] Network Gap [%d]", GetVirtualID(), nNetworkGap);
 	}
 	*/
 
@@ -1222,7 +1222,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos
 	//int nApplyGap=kCmdNew.m_dwChkTime-ELTimer_GetServerFrameMSec();
 
 	//if (nApplyGap<-500 || nApplyGap>500)
-	//	Tracenf("VID[%d] NAME[%s] \xB3\xD7\xC6\xAE\xBF\xF7\xB0\xB8 [cur:%d ave:%d] \xC0\xDB\xB5\xBF\xBD\xC3\xB0\xA3 (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap);
+	//	Tracenf("VID[%d] NAME[%s] Network Gap [cur:%d ave:%d] applyGap (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap);
 }
 
 /*
@@ -1313,7 +1313,7 @@ void CInstanceBase::StateProcess()
 		TPixelPosition kPPosDir = kPPosDst - kPPosCur;
 		float fDirLen = (float)sqrt(kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y);
 
-		//Tracenf("\xB0\xC5\xB8\xAE %f", fDirLen);
+		//Tracenf("Distance %f", fDirLen);
 
 		if (!__CanProcessNetworkStatePacket())
 		{
@@ -1330,7 +1330,7 @@ void CInstanceBase::StateProcess()
 		{
 			case FUNC_WAIT:
 			{
-				//Tracenf("%s (%f, %f) -> (%f, %f) \xB3\xB2\xC0\xBA\xB0\xC5\xB8\xAE %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen);
+				//Tracenf("%s (%f, %f) -> (%f, %f) 남은거리 %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen);
 				if (fDirLen > 1.0f)
 				{
 					//NEW_GetSrcPixelPositionRef() = kPPosCur;
@@ -1348,11 +1348,11 @@ void CInstanceBase::StateProcess()
 					if (!IsWalking())
 						StartWalking();
 
-					//Tracen("\xB8\xF1\xC7\xA5\xC1\xA4\xC1\xF6");
+					//Tracen("Target Stop");
 				}
 				else
 				{
-					//Tracen("\xC7\xF6\xC0\xE7 \xC1\xA4\xC1\xF6");
+					//Tracen("Freeze");
 
 					m_isGoing = FALSE;
 
@@ -1381,12 +1381,12 @@ void CInstanceBase::StateProcess()
 
 				if (!IsWalking())
 				{
-					//Tracen("\xB0\xC8\xB0\xED \xC0\xD6\xC1\xF6 \xBE\xCA\xBE\xC6 \xB0\xC8\xB1\xE2 \xBD\xC3\xC0\xDB");
+					//Tracen("I'm not walking, start walking");
 					StartWalking();
 				}
 				else
 				{
-					//Tracen("\xC0\xCC\xB9\xCC \xB0\xC8\xB4\xC2\xC1\xDF ");
+					//Tracen("Already walking");
 				}
 				break;
 			}
@@ -1409,7 +1409,7 @@ void CInstanceBase::StateProcess()
 				}
 				else
 				{
-					//Tracen("\xB4\xEB\xB1\xE2 \xB0\xF8\xB0\xDD \xC1\xA4\xC1\xF6");
+					//Tracen("Stopping Standby Attacks");
 
 					m_isGoing = FALSE;
 
@@ -1440,11 +1440,11 @@ void CInstanceBase::StateProcess()
 					if (!IsWalking())
 						StartWalking();
 
-					//Tracen("\xB3\xCA\xB9\xAB \xB8\xD6\xBE\xEE\xBC\xAD \xC0\xCC\xB5\xBF \xC8\xC4 \xB0\xF8\xB0\xDD");
+					//Tracen("Attack after moving too far away");
 				}
 				else
 				{
-					//Tracen("\xB3\xEB\xB8\xBB \xB0\xF8\xB0\xDD \xC1\xA4\xC1\xF6");
+					//Tracen("Stop normal attacks");
 
 					m_isGoing = FALSE;
 
@@ -1456,7 +1456,7 @@ void CInstanceBase::StateProcess()
 
 					RunNormalAttack(fRotDst);
 
-					//Tracen("\xB0\xA1\xB1\xF5\xB1\xE2 \xB6\xA7\xB9\xAE\xBF\xA1 \xBF\xF6\xC7\xC1 \xB0\xF8\xB0\xDD");
+					//Tracen("Warp Attack due to proximity");
 				}
 				break;
 			}
@@ -1540,11 +1540,11 @@ void CInstanceBase::StateProcess()
 						if (!IsWalking())
 							StartWalking();
 
-						//Tracen("\xB3\xCA\xB9\xAB \xB8\xD6\xBE\xEE\xBC\xAD \xC0\xCC\xB5\xBF \xC8\xC4 \xB0\xF8\xB0\xDD");
+						//Tracen("Attack after moving too far away");
 					}
 					else
 					{
-						//Tracen("\xBD\xBA\xC5\xB3 \xC1\xA4\xC1\xF6");
+						//Tracen("Stop Skills");
 
 						m_isGoing = FALSE;
 
@@ -1556,7 +1556,7 @@ void CInstanceBase::StateProcess()
 						SetRotation(fRotDst);
 
 						NEW_UseSkill(0, eFunc & 0x7f, uArg&0x0f, (uArg>>4) ? true : false);
-						//Tracen("\xB0\xA1\xB1\xF5\xB1\xE2 \xB6\xA7\xB9\xAE\xBF\xA1 \xBF\xF6\xC7\xC1 \xB0\xF8\xB0\xDD");
+						//Tracen("Warp Attack due to proximity");
 					}
 				}
 				break;
@@ -1604,7 +1604,7 @@ void CInstanceBase::MovementProcess()
 				if (IsWalking())
 					EndWalking();
 
-				//Tracen("\xB8\xF1\xC7\xA5 \xB5\xB5\xB4\xDE \xC1\xA4\xC1\xF6");
+				//Tracen("Stop reaching goals");
 
 				m_isGoing = FALSE;
 
@@ -1636,7 +1636,7 @@ void CInstanceBase::MovementProcess()
 
 				float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, NEW_GetDstPixelPositionRef());
 				SetAdvancingRotation(fDstRot);
-				//Tracenf("VID %d \xBF\xC0\xB9\xF6 \xB9\xE6\xC7\xE2\xBC\xB3\xC1\xA4 (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen);			
+				//Tracenf("VID %d Over Orientation (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen);			
 
 				// 이동중이라면 다음번에 멈추게 한다
 				if (FUNC_MOVE == m_kMovAfterFunc.eFunc)
@@ -1651,11 +1651,11 @@ void CInstanceBase::MovementProcess()
 				{
 					__DisableSkipCollision();
 
-					//Tracen("\xBB\xE7\xB8\xC1 \xBB\xF3\xC5\xC2\xB6\xF3 \xB5\xBF\xC0\xDB \xBD\xBA\xC5\xB5");
+					//Tracen("Skip the action because you're dead");
 
 					m_isGoing = FALSE;
 
-					//Tracen("\xC7\xE0\xB5\xBF \xBA\xD2\xB4\xC9 \xBB\xF3\xC5\xC2\xB6\xF3 \xC0\xCC\xC8\xC4 \xB5\xBF\xC0\xDB \xBD\xBA\xC5\xB5");
+					//Tracen("Skip subsequent actions because you're dead");
 				}
 				else
 				{
@@ -1737,7 +1737,7 @@ void CInstanceBase::MovementProcess()
 							}
 							else
 							{
-								//Tracenf("VID %d \xBD\xBA\xC5\xB3 \xB0\xF8\xB0\xDD (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot);
+								//Tracenf("VID %d Skill Attacks (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot);
 
 								__DisableSkipCollision();
 								m_isGoing = FALSE;
@@ -1751,7 +1751,7 @@ void CInstanceBase::MovementProcess()
 									EndWalking();
 								}
 
-								//Tracenf("VID %d \xC1\xA4\xC1\xF6 (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking());
+								//Tracenf("VID %d Stop (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking());
 							}
 							break;
 						}
diff --git a/src/UserInterface/InstanceBaseBattle.cpp b/src/UserInterface/InstanceBaseBattle.cpp
index 5e8942b9..74ab69c6 100644
--- a/src/UserInterface/InstanceBaseBattle.cpp
+++ b/src/UserInterface/InstanceBaseBattle.cpp
@@ -497,7 +497,7 @@ BOOL CInstanceBase::CheckAdvancing()
 
 	if (m_GraphicThingInstance.CanSkipCollision())
 	{
-		//Tracenf("%x VID %d \xC3\xE6\xB5\xB9 \xBD\xBA\xC5\xB5", ELTimer_GetMSec(), GetVirtualID());
+		//Tracenf("%x VID %d Skip collisions", ELTimer_GetMSec(), GetVirtualID());
 		return FALSE;
 	}
 
@@ -716,4 +716,4 @@ void CInstanceBase::Show()
 {
 	m_GraphicThingInstance.SetAlphaValue(1.0f);
 	m_GraphicThingInstance.BlendAlphaValue(1.0f, 0.1f);
-}
\ No newline at end of file
+}
diff --git a/src/UserInterface/InstanceBaseEffect.cpp b/src/UserInterface/InstanceBaseEffect.cpp
index 13c22259..633ec7ca 100644
--- a/src/UserInterface/InstanceBaseEffect.cpp
+++ b/src/UserInterface/InstanceBaseEffect.cpp
@@ -178,7 +178,7 @@ void CInstanceBase::ProcessDamage()
 	{
 		if(index > 7)
 		{
-			TraceError("ProcessDamage\xB9\xAB\xC7\xD1\xB7\xE7\xC7\xC1 \xB0\xA1\xB4\xC9\xBC\xBA");
+			TraceError("ProcessDamage possible infinite loop");
 			break;
 		}
 		num = damage%10;
diff --git a/src/UserInterface/PythonApplication.cpp b/src/UserInterface/PythonApplication.cpp
index 2e96ce22..5f92da30 100644
--- a/src/UserInterface/PythonApplication.cpp
+++ b/src/UserInterface/PythonApplication.cpp
@@ -527,7 +527,7 @@ bool CPythonApplication::Process()
 		if ( dt >= 500 )
 		{
 			s_uiNextFrameTime += nAdjustTime; 
-			printf("FrameSkip \xBA\xB8\xC1\xA4 %d\n",nAdjustTime);
+			printf("FrameSkip Calibration %d\n",nAdjustTime);
 			CTimer::Instance().Adjust(nAdjustTime);
 		}
 
@@ -549,7 +549,7 @@ bool CPythonApplication::Process()
 	//	if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime)
 	//	{
 	//		s_uiNextFrameTime += dt / uiFrameTime * uiFrameTime; 
-	//		printf("FrameSkip \xBA\xB8\xC1\xA4 %d\n", dt / uiFrameTime * uiFrameTime);
+	//		printf("FrameSkip Calibration %d\n", dt / uiFrameTime * uiFrameTime);
 	//		CTimer::Instance().Adjust((dt / uiFrameTime) * uiFrameTime);
 	//		s_bFrameSkip = true;
 	//	}
@@ -609,7 +609,7 @@ bool CPythonApplication::Process()
 	//m_pyNetworkStream.AbsoluteExitGame();
 
 	/*
-	TraceError("\xB9\xAB\xC7\xD1 \xC7\xC1\xB7\xB9\xC0\xD3 \xBD\xBA\xC5\xB5\xC0\xB8\xB7\xCE \xC1\xA2\xBC\xD3\xC0\xBB \xC1\xBE\xB7\xE1\xC7\xD5\xB4\xCF\xB4\xD9");
+	TraceError("Terminate a connection with infinite frame skips");
 
 	{
 	FILE* fp=fopen("errorlog.txt", "w");
diff --git a/src/UserInterface/PythonChatModule.cpp b/src/UserInterface/PythonChatModule.cpp
index af47afb1..47354e9c 100644
--- a/src/UserInterface/PythonChatModule.cpp
+++ b/src/UserInterface/PythonChatModule.cpp
@@ -436,7 +436,7 @@ PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)
 			}
 
 			if (isAttr)
-				//"item:\xB9\xF8\xC8\xA3:\xC7\xC3\xB7\xA1\xB1\xD7:\xBC\xD2\xC4\xCF0:\xBC\xD2\xC4\xCF1:\xBC\xD2\xC4\xCF2"
+				//"item:번호:플래그:소켓0:소켓1:소켓2"
 				snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
 			else
 				snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
diff --git a/src/UserInterface/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp
index e0179917..abc97ee0 100644
--- a/src/UserInterface/PythonNetworkStream.cpp
+++ b/src/UserInterface/PythonNetworkStream.cpp
@@ -655,7 +655,7 @@ bool CPythonNetworkStream::RecvDefaultPacket(int header)
 	if (!header)
 		return true;
 
-	TraceError("\xC3\xB3\xB8\xAE\xB5\xC7\xC1\xF6 \xBE\xCA\xC0\xBA \xC6\xD0\xC5\xB6 \xC7\xEC\xB4\xF5 %d, state %s\n", header, m_strPhase.c_str());
+	TraceError("Unprocessed packet header %d, state %s\n", header, m_strPhase.c_str());
 	ClearRecvBuffer();
 	return true;
 }
diff --git a/src/UserInterface/PythonNetworkStreamCommand.cpp b/src/UserInterface/PythonNetworkStreamCommand.cpp
index 3f1fee60..2f7252c9 100644
--- a/src/UserInterface/PythonNetworkStreamCommand.cpp
+++ b/src/UserInterface/PythonNetworkStreamCommand.cpp
@@ -121,7 +121,7 @@ bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char
 
 		pstTokenVector->push_back(strLine.substr(beginPos, endPos - beginPos));
 
-		// \xC3\xDF\xB0\xA1 \xC4\xDA\xB5\xE5. \xB8\xC7\xB5\xDA\xBF\xA1 \xC5\xC7\xC0\xCC \xC0\xD6\xB4\xC2 \xB0\xE6\xBF\xEC\xB8\xA6 \xC3\xBC\xC5\xA9\xC7\xD1\xB4\xD9. - [levites]
+		// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
 		if (int(strLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
 			break;
 	} while (basePos < strLine.length());
@@ -131,7 +131,7 @@ bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char
 
 void CPythonNetworkStream::ServerCommand(char * c_szCommand)
 {
-	// #0000811: [M2EU] \xC4\xDC\xBC\xD6\xC3\xA2 \xB1\xE2\xB4\xC9 \xC2\xF7\xB4\xDC 
+	// #0000811: [M2EU] 콘솔창 기능 차단 
 	if (strcmpi(c_szCommand, "ConsoleEnable") == 0)
 		return;
 
@@ -246,7 +246,7 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand)
 		else if ("r_list" == TokenVector[1])
 		{
 			// result list (/cube r_list npcVNUM resultCount resultText)
-			// 20383 4 72723,1/72725,1/72730.1/50001,5 <- \xC0\xCC\xB7\xB1\xBD\xC4\xC0\xB8\xB7\xCE "/" \xB9\xAE\xC0\xDA\xB7\xCE \xB1\xB8\xBA\xD0\xB5\xC8 \xB8\xAE\xBD\xBA\xC6\xAE\xB8\xA6 \xC1\xDC
+			// 20383 4 72723,1/72725,1/72730.1/50001,5 <- 이런식으로 "/" 문자로 구분된 리스트를 줌
 			if (5 != TokenVector.size())
 			{
 				TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5);
@@ -260,9 +260,10 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand)
 		else if ("m_info" == TokenVector[1])
 		{
 			// material list (/cube m_info requestStartIndex resultCount MaterialText)
-			// ex) requestStartIndex: 0, resultCount : 5 - \xC7\xD8\xB4\xE7 NPC\xB0\xA1 \xB8\xB8\xB5\xE9\xBC\xF6 \xC0\xD6\xB4\xC2 \xBE\xC6\xC0\xCC\xC5\xDB \xC1\xDF 0~4\xB9\xF8\xC2\xB0\xBF\xA1 \xC7\xD8\xB4\xE7\xC7\xCF\xB4\xC2 \xBE\xC6\xC0\xCC\xC5\xDB\xC0\xBB \xB8\xB8\xB5\xE5\xB4\xC2 \xB5\xA5 \xC7\xCA\xBF\xE4\xC7\xD1 \xB8\xF0\xB5\xE7 \xC0\xE7\xB7\xE1\xB5\xE9\xC0\xCC MaterialText\xBF\xA1 \xB5\xE9\xBE\xEE\xC0\xD6\xC0\xBD
-			// \xC0\xA7 \xBF\xB9\xBD\xC3\xC3\xB3\xB7\xB3 \xBE\xC6\xC0\xCC\xC5\xDB\xC0\xCC \xB4\xD9\xBC\xF6\xC0\xCE \xB0\xE6\xBF\xEC \xB1\xB8\xBA\xD0\xC0\xDA "@" \xB9\xAE\xC0\xDA\xB8\xA6 \xBB\xE7\xBF\xEB
-			// 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- \xC0\xCC\xB7\xB1\xBD\xC4\xC0\xB8\xB7\xCE \xBC\xAD\xB9\xF6\xBF\xA1\xBC\xAD \xC5\xAC\xB6\xF3\xB7\xCE \xB8\xAE\xBD\xBA\xC6\xAE\xB8\xA6 \xC1\xDC
+			// ex) requestStartIndex: 0, resultCount : 5 - 해당 NPC가 만들수 있는 아이템 중 0~4번째에 해당하는 아이템을 만드는 데 필요한 모든 재료들이 MaterialText에 들어있음
+			// 위 예시처럼 아이템이 다수인 경우 구분자 "@" 문자를 사용
+			// 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- 이런식으로 서버에서 클라로 리스트를 줌
+
 
 			if (5 != TokenVector.size())
 			{
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
index efa11f4d..6bd5af06 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
@@ -1278,7 +1278,7 @@ bool CPythonNetworkStream::RecvChatPacket()
 	buf[uChatSize]='\0';
 	
 	// 유럽 아랍 버전 처리
-	// "\xC0\xCC\xB8\xA7: \xB3\xBB\xBF\xEB" 입력을 "\xB3\xBB\xBF\xEB: \xC0\xCC\xB8\xA7" 순서로 출력하기 위해 탭(0x08)을 넣음
+	// "이름: 내용" 입력을 "내용: 이름" 순서로 출력하기 위해 탭(0x08)을 넣음
 	// 탭을 아랍어 기호로 처리해 (영어1) : (영어2) 로 입력되어도 (영어2) : (영어1) 로 출력하게 만든다
 	if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256)
 	{
@@ -1558,7 +1558,7 @@ bool CPythonNetworkStream::RecvDeadPacket()
 		CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
 		if (pkInstMain==pkChrInstSel)
 		{
-			Tracenf("\xC1\xD6\xC0\xCE\xB0\xF8 \xBB\xE7\xB8\xC1");
+			Tracenf("Player Dead");
 			if (false == pkInstMain->GetDuelMode())
 			{
 				PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()"));
@@ -2303,7 +2303,6 @@ bool CPythonNetworkStream::RecvSkillCoolTimeEnd()
 
 bool CPythonNetworkStream::RecvSkillLevel()
 {
-	assert(!"CPythonNetworkStream::RecvSkillLevel - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6");
 	TPacketGCSkillLevel packet;
 	if (!Recv(sizeof(TPacketGCSkillLevel), &packet))
 	{
@@ -2529,7 +2528,7 @@ bool CPythonNetworkStream::RecvAddFlyTargetingPacket()
 
 	__GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY);
 
-	Tracef("VID [%d]\xB0\xA1 \xC5\xB8\xB0\xD9\xC0\xBB \xC3\xDF\xB0\xA1 \xBC\xB3\xC1\xA4\n",kPacket.dwShooterVID);
+	Tracef("VID [%d] Set up additional targets\n",kPacket.dwShooterVID);
 
 	CPythonCharacterManager & rpcm = CPythonCharacterManager::Instance();
 
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
index 82c1aa8b..b1597d2d 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp
@@ -173,7 +173,7 @@ bool CPythonNetworkStream::RecvCharacterAdditionalInfo()
 
 bool CPythonNetworkStream::RecvCharacterAppendPacketNew()
 {
-	TraceError("TPacketGCCharacterAdd2\xB4\xC2 \xBE\xB2\xC1\xF6 \xBE\xCA\xB4\xC2 \xC6\xD0\xC5\xB6\xC0\xD4\xB4\xCF\xB4\xD9.");
+	TraceError("TPacketGCCharacterAdd2 is an unwritten packet.");
 	TPacketGCCharacterAdd2 chrAddPacket;
 	if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
 		return false;
diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
index cab142a6..19d0e546 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp
@@ -861,7 +861,7 @@ bool CPythonNetworkStream::RecvSpecialEffect()
 
 		
 		default:
-			TraceError("%d \xB4\xC2 \xBE\xF8\xB4\xC2 \xBD\xBA\xC6\xE4\xBC\xC8 \xC0\xCC\xC6\xE5\xC6\xAE \xB9\xF8\xC8\xA3\xC0\xD4\xB4\xCF\xB4\xD9.TPacketGCSpecialEffect",kSpecialEffect.type);
+			TraceError("%d is a special effect number that does not exist. TPacketGCSpecialEffect",kSpecialEffect.type);
 			break;
 	}
 
diff --git a/src/UserInterface/PythonPlayerEventHandler.cpp b/src/UserInterface/PythonPlayerEventHandler.cpp
index 25898557..af9e8672 100644
--- a/src/UserInterface/PythonPlayerEventHandler.cpp
+++ b/src/UserInterface/PythonPlayerEventHandler.cpp
@@ -260,7 +260,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx
 {
 	return;
 
-	Tracef("Shoot : \xB4\xD9\xB8\xA5 target\xBF\xA1 \xB8\xC2\xBE\xD2\xBD\xC0\xB4\xCF\xB4\xD9 : %d, %d\n", dwSkillIndex, dwVID);
+	Tracef("Shoot : Hit a different target : %d, %d\n", dwSkillIndex, dwVID);
 
 	CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance();
 	rkStream.SendAttackPacket(dwSkillIndex, dwVID);
@@ -274,7 +274,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx
 }
 void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnExplodingAtTarget(DWORD dwSkillIndex)
 {
-//	Tracef("Shoot : \xBF\xF8\xC7\xCF\xB4\xC2 target\xBF\xA1 \xB8\xC2\xBE\xD2\xBD\xC0\xB4\xCF\xB4\xD9 : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID());
+//	Tracef("Shoot : Hit the desired target : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID());
 //	CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance();
 //	rkStream.SendAttackPacket(dwSkillIndex, m_pInstTarget->GetVirtualID());
 }
diff --git a/src/UserInterface/PythonPlayerSkill.cpp b/src/UserInterface/PythonPlayerSkill.cpp
index 2d1c8750..b4870785 100644
--- a/src/UserInterface/PythonPlayerSkill.cpp
+++ b/src/UserInterface/PythonPlayerSkill.cpp
@@ -572,7 +572,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 					if (pSkillData->CanUseForMe())
 					{
 						pkInstTarget = pkInstMain;
-						Tracef(" [ALERT] \xB5\xBF\xB7\xE1\xBF\xA1\xB0\xD4 \xBB\xE7\xBF\xEB\xC7\xCF\xB4\xC2 \xB1\xE2\xBC\xFA\xC0\xD3\xBF\xA1\xB5\xB5 \xC0\xFB\xBF\xA1\xB0\xD4 \xC5\xB8\xB0\xD9\xC6\xC3 \xB5\xC7\xBE\xEE\xC0\xD6\xBE\xEE\xBC\xAD \xC0\xDA\xBD\xC5\xBF\xA1\xB0\xD4\xB7\xCE \xC0\xE7\xBC\xB3\xC1\xA4\n");
+						Tracef(" [ALERT] Reset to yourself because the skill is targeted at an enemy even though you're using it on a teammate\n");
 					}
 					else
 					{
@@ -636,7 +636,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 			{
 				pkInstTarget = pkInstMain;
 				pkInstMain->SetFlyTargetInstance(*pkInstMain);
-				Tracef(" [ALERT] \xC5\xB8\xB0\xD9\xC0\xCC \xBE\xF8\xBE\xEE\xBC\xAD \xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE\xBF\xA1\xB0\xD4 \xBB\xE7\xBF\xEB\xC7\xD5\xB4\xCF\xB4\xD9\n");
+				Tracef(" [ALERT] Use on player because there are no targets\n");
 			}
 			else if (pSkillData->IsNeedCorpse())
 			{
@@ -672,7 +672,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex)
 		}
 		else
 		{
-			Tracenf("CPythonPlayer::__UseSkill(%d) - \xC8\xAD\xB8\xE9 \xB1\xE2\xC1\xD8 \xB9\xE6\xC7\xE2 \xBC\xB3\xC1\xA4\xC0\xBB \xC7\xD8\xBE\xDF\xC7\xD4", dwSlotIndex);
+			Tracenf("CPythonPlayer::__UseSkill(%d) - Need to set the orientation relative to the screen", dwSlotIndex);
 		}
 	}
 
diff --git a/src/UserInterface/PythonSkill.cpp b/src/UserInterface/PythonSkill.cpp
index 9e8906d3..94568773 100644
--- a/src/UserInterface/PythonSkill.cpp
+++ b/src/UserInterface/PythonSkill.cpp
@@ -496,7 +496,7 @@ bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName)
 			int numGrade = atoi(TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str());
 			if (SKILL_EFFECT_COUNT < numGrade)
 			{
-				TraceError("%s[%s] \xB0\xA1 \xB5\xEE\xB1\xDE \xC1\xA6\xC7\xD1[%d]\xC0\xBB \xB3\xD1\xBE\xEE\xB0\xAC\xBD\xC0\xB4\xCF\xB4\xD9.",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT);
+				TraceError("%s[%s] has exceeded its rating limit [%d].",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT);
 				return false;
 			}
 			for (int iGrade = 0; iGrade < numGrade; iGrade++)
diff --git a/src/UserInterface/PythonTextTail.cpp b/src/UserInterface/PythonTextTail.cpp
index b05ab052..30dd0c6e 100644
--- a/src/UserInterface/PythonTextTail.cpp
+++ b/src/UserInterface/PythonTextTail.cpp
@@ -447,7 +447,7 @@ void CPythonTextTail::ShowCharacterTextTail(DWORD VirtualID)
 
 	if (m_CharacterTextTailList.end() != std::find(m_CharacterTextTailList.begin(), m_CharacterTextTailList.end(), pTextTail))
 	{
-		//Tracef("\xC0\xCC\xB9\xCC \xB8\xAE\xBD\xBA\xC6\xAE\xBF\xA1 \xC0\xD6\xC0\xBD : %d\n", VirtualID);
+		//Tracef("Already in the list : %d\n", VirtualID);
 		return;
 	}
 
@@ -478,7 +478,7 @@ void CPythonTextTail::ShowItemTextTail(DWORD VirtualID)
 
 	if (m_ItemTextTailList.end() != std::find(m_ItemTextTailList.begin(), m_ItemTextTailList.end(), pTextTail))
 	{
-		//Tracef("\xC0\xCC\xB9\xCC \xB8\xAE\xBD\xBA\xC6\xAE\xBF\xA1 \xC0\xD6\xC0\xBD : %d\n", VirtualID);
+		//Tracef("Already in the list : %d\n", VirtualID);
 		return;
 	}
 
diff --git a/src/UserInterface/UserInterface.cpp b/src/UserInterface/UserInterface.cpp
index 2a6aee3a..9eede980 100644
--- a/src/UserInterface/UserInterface.cpp
+++ b/src/UserInterface/UserInterface.cpp
@@ -239,20 +239,20 @@ bool PackInitialize(const char * c_pszFolder)
 	}
 
 #ifdef _DISTRIBUTE
-	Tracef("\xBE\xCB\xB8\xB2: \xC6\xD1 \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
+	Tracef("You are in pack mode.\n");
 	
 	//if (0 == strPackType.compare("FILE"))
 	//{
 	//	bPackFirst = FALSE;
-	//	Tracef("\xBE\xCB\xB8\xB2: \xC6\xC4\xC0\xCF \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
+	//	Tracef("You are in file mode.\n");
 	//}
 	//else
 	//{
-	//	Tracef("\xBE\xCB\xB8\xB2: \xC6\xD1 \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
+	//	Tracef("You are in pack mode.\n");
 	//}
 #else
 	bPackFirst = FALSE;
-	Tracef("\xBE\xCB\xB8\xB2: \xC6\xC4\xC0\xCF \xB8\xF0\xB5\xE5\xC0\xD4\xB4\xCF\xB4\xD9.\n");
+	Tracef("You are in file mode.\n");
 #endif
 
 	CTextFileLoader::SetCacheMode();

From 62916f0622980015e182281baedb980192f9015c Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Sun, 12 Jan 2025 18:29:08 +0100
Subject: [PATCH 6/8] logbox

---
 src/GameLib/MapOutdoorLoad.cpp  | 2 +-
 src/GameLib/PropertyManager.cpp | 2 +-
 src/MilesLib/Type.cpp           | 4 ++--
 src/PRTerrainLib/TextureSet.cpp | 6 +++---
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/GameLib/MapOutdoorLoad.cpp b/src/GameLib/MapOutdoorLoad.cpp
index 708904b1..800cf425 100644
--- a/src/GameLib/MapOutdoorLoad.cpp
+++ b/src/GameLib/MapOutdoorLoad.cpp
@@ -398,7 +398,7 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName)
 	{
 #ifdef WORLD_EDITOR
 		// TextureSet 이 적용되어 있지 않아도 진행
-		LogBox("TextureSet \xC0\xCC \xC0\xFB\xBF\xEB\xB5\xC7\xBE\xEE\xC0\xD6\xC1\xF6 \xBE\xCA\xC0\xBA \xB8\xCA \xC0\xD4\xB4\xCF\xB4\xD9.\n\xC1\xF6\xC7\xFC \xC5\xD8\xBD\xBA\xC3\xE7 \xC0\xDB\xBE\xF7\xBF\xA1 \xC1\xD6\xC0\xC7\xC7\xCF\xBD\xC3\xB1\xE2 \xB9\xD9\xB6\xF8\xB4\xCF\xB4\xD9.");
+		LogBox("This map does not have a TextureSet applied. Be careful when working with terrain textures.");
 #else
 		TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str());
 		return false;
diff --git a/src/GameLib/PropertyManager.cpp b/src/GameLib/PropertyManager.cpp
index ea34b781..27cd6a3a 100644
--- a/src/GameLib/PropertyManager.cpp
+++ b/src/GameLib/PropertyManager.cpp
@@ -225,7 +225,7 @@ bool CPropertyManager::Erase(DWORD dwCRC)
 	FILE * fp = fopen("property/reserve", "a+");
 
 	if (!fp)
-		LogBox("\xBF\xB9\xBE\xE0 CRC \xC6\xC4\xC0\xCF\xC0\xBB \xBF\xAD \xBC\xF6 \xBE\xF8\xBD\xC0\xB4\xCF\xB4\xD9.");
+		LogBox("Unable to Open Scheduled CRC Files.");
 	else
 	{
 		char szCRC[64 + 1];
diff --git a/src/MilesLib/Type.cpp b/src/MilesLib/Type.cpp
index a717fd2b..da1d528e 100644
--- a/src/MilesLib/Type.cpp
+++ b/src/MilesLib/Type.cpp
@@ -95,7 +95,7 @@ bool NSound::SaveSoundInformationPiece(const char * c_szFileName, NSound::TSound
 	{
 		char szErrorText[256+1];
 		_snprintf(szErrorText, sizeof(szErrorText), "Failed to save file (%s).\nPlease check if it is read-only or you have no space on the disk.\n", c_szFileName);
-		LogBox(szErrorText, "\xBF\xA1\xB7\xAF");
+		LogBox(szErrorText, "Errors");
 		SetResultString((strResult + " \xBE\xB2\xB1\xE2\xBF\xEB \xC6\xC4\xC0\xCF\xC0\xBB \xBF\xAD \xBC\xF6 \xBE\xF8\xC0\xBD").c_str());
 		return false;
 	}
@@ -133,4 +133,4 @@ void NSound::DataToInstance(const TSoundDataVector & c_rSoundDataVector, TSoundI
 		rSoundInstance.dwFrame = (DWORD) (c_rSoundData.fTime / c_fFrameTime);
 		rSoundInstance.strSoundFileName = c_rSoundData.strSoundFileName;
 	}
-}
\ No newline at end of file
+}
diff --git a/src/PRTerrainLib/TextureSet.cpp b/src/PRTerrainLib/TextureSet.cpp
index a7eac9b2..078199cb 100644
--- a/src/PRTerrainLib/TextureSet.cpp
+++ b/src/PRTerrainLib/TextureSet.cpp
@@ -194,7 +194,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName,
 {
 	if (GetTextureCount() >= 256)
 	{
-		LogBox("\xC5\xD8\xBD\xBA\xC3\xB3\xB8\xA6 \xB4\xF5 \xC0\xCC\xBB\xF3 \xC3\xDF\xB0\xA1\xC7\xD2 \xBC\xF6 \xBE\xF8\xBD\xC0\xB4\xCF\xB4\xD9.", "\xC3\xD6\xB4\xEB \xC5\xD8\xBD\xBA\xC3\xB3 \xB0\xB3\xBC\xF6 255\xB0\xB3");
+		LogBox("You cannot add any more textures.","Maximum number of textures 255");
 		return false;
 	}
 
@@ -202,7 +202,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName,
 	{
 		if (0 == m_Textures[i].stFilename.compare(c_szFileName))
 		{
-			LogBox("\xB5\xBF\xC0\xCF\xC7\xD1 \xC0\xCC\xB8\xA7\xC0\xC7 \xC5\xD8\xBD\xBA\xC3\xB3\xB0\xA1 \xC0\xCC\xB9\xCC \xC0\xD6\xBD\xC0\xB4\xCF\xB4\xD9.", "\xC1\xDF\xBA\xB9");
+			LogBox("There is already a texture with the same name.", "Duplicate");
 			return false;
 		}
 	}
@@ -211,7 +211,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName,
 
 	if (!pResource->IsType(CGraphicImage::Type()))
 	{
-		LogBox("CTerrainImpl::GenerateTexture : \xC0\xCC\xB9\xCC\xC1\xF6 \xC6\xC4\xC0\xCF\xC0\xCC \xBE\xC6\xB4\xD5\xB4\xCF\xB4\xD9. %s", pResource->GetFileName());
+		LogBox("CTerrainImpl::GenerateTexture : Not an image file. %s", pResource->GetFileName());
 		return false;
 	}
 	

From 67c4325b01f947a7ae8f6dd528bb4cb7103b6a9a Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Sun, 12 Jan 2025 18:31:32 +0100
Subject: [PATCH 7/8] lognf instancebase

---
 src/UserInterface/InstanceBase.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/UserInterface/InstanceBase.cpp b/src/UserInterface/InstanceBase.cpp
index 2eca8bac..1b9d541f 100644
--- a/src/UserInterface/InstanceBase.cpp
+++ b/src/UserInterface/InstanceBase.cpp
@@ -1317,7 +1317,7 @@ void CInstanceBase::StateProcess()
 
 		if (!__CanProcessNetworkStatePacket())
 		{
-			Lognf(0, "vid=%d \xBF\xF2\xC1\xF7\xC0\xCF \xBC\xF6 \xBE\xF8\xB4\xC2 \xBB\xF3\xC5\xC2\xB6\xF3 \xBD\xBA\xC5\xB5 IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown());
+			Lognf(0, "vid=%d Skip because you can't move IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown());
 			return;
 		}
 

From 540ba33b0e68089e3ed3096598dc5c06ba563036 Mon Sep 17 00:00:00 2001
From: Tr0n <sdgmt@protonmail.com>
Date: Sun, 12 Jan 2025 18:37:38 +0100
Subject: [PATCH 8/8] translate according to pr review

---
 src/UserInterface/PythonNetworkStreamPhaseGame.cpp | 6 +++---
 src/UserInterface/PythonPlayerModule.cpp           | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
index 6bd5af06..5eb4b38b 100644
--- a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
+++ b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp
@@ -4250,7 +4250,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacket()
 
 //#ifdef _DEBUG
 //	char szBuf[256+1];
-//	_snprintf(szBuf, sizeof(szBuf), "\xC5\xB8\xB0\xD9\xC0\xCC \xBB\xFD\xBC\xBA \xB5\xC7\xBE\xFA\xBD\xC0\xB4\xCF\xB4\xD9 [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName);
+//	_snprintf(szBuf, sizeof(szBuf), "Target created [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName);
 //	CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
 //	Tracef(" >> RecvTargetCreatePacket %d : %s\n", kTargetCreate.lID, kTargetCreate.szTargetName);
 //#endif
@@ -4279,7 +4279,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacketNew()
 
 //#ifdef _DEBUG
 //	char szBuf[256+1];
-//	_snprintf(szBuf, sizeof(szBuf), "\xC4\xB3\xB8\xAF\xC5\xCD \xC5\xB8\xB0\xD9\xC0\xCC \xBB\xFD\xBC\xBA \xB5\xC7\xBE\xFA\xBD\xC0\xB4\xCF\xB4\xD9 [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID);
+//	_snprintf(szBuf, sizeof(szBuf), "Character Target created [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID);
 //	CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
 //	Tracef(" >> RecvTargetCreatePacketNew %d : %d/%d\n", kTargetCreate.lID, kTargetCreate.byType, kTargetCreate.dwVID);
 //#endif
@@ -4302,7 +4302,7 @@ bool CPythonNetworkStream::RecvTargetUpdatePacket()
 
 //#ifdef _DEBUG
 //	char szBuf[256+1];
-//	_snprintf(szBuf, sizeof(szBuf), "\xC5\xB8\xB0\xD9\xC0\xC7 \xC0\xA7\xC4\xA1\xB0\xA1 \xB0\xBB\xBD\xC5 \xB5\xC7\xBE\xFA\xBD\xC0\xB4\xCF\xB4\xD9 [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
+//	_snprintf(szBuf, sizeof(szBuf), "The target's location has been updated [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
 //	CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
 //	Tracef(" >> RecvTargetUpdatePacket %d : %d, %d\n", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
 //#endif
diff --git a/src/UserInterface/PythonPlayerModule.cpp b/src/UserInterface/PythonPlayerModule.cpp
index f20dd23d..c786ebbe 100644
--- a/src/UserInterface/PythonPlayerModule.cpp
+++ b/src/UserInterface/PythonPlayerModule.cpp
@@ -1051,13 +1051,13 @@ PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)
 
 		if( GetDefaultCodePage() == CP_ARABIC ) {
 			if (isAttr)
-				//"item:\xB9\xF8\xC8\xA3:\xC7\xC3\xB7\xA1\xB1\xD7:\xBC\xD2\xC4\xCF0:\xBC\xD2\xC4\xCF1:\xBC\xD2\xC4\xCF2"
+				//item:item:number:flags:socket0:socket1:socket2"
 				snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
 			else
 				snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
 		} else {
 			if (isAttr)
-				//"item:\xB9\xF8\xC8\xA3:\xC7\xC3\xB7\xA1\xB1\xD7:\xBC\xD2\xC4\xCF0:\xBC\xD2\xC4\xCF1:\xBC\xD2\xC4\xCF2"
+				//item:item:number:flags:socket0:socket1:socket2"
 				snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
 			else
 				snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());