# NeoRylClient 프로젝트 의존성 및 외부 라이브러리

**분석 날짜**: 2025-11-29
**프로젝트**: NeoRylClient (RYLClient.vcxproj)

---

## 1. 인클루드 디렉토리 (AdditionalIncludeDirectories)

### 전체 인클루드 경로

모든 빌드 설정에서 공통으로 사용되는 인클루드 디렉토리:

```
./                                          # 현재 디렉토리 (RYLClient)
../                                         # 상위 디렉토리 (Client)
../../Engine/zalla3d base class             # Zalla3D 3D 엔진 기본 클래스
../../Engine/zalla3d scene class            # Zalla3D 씬 관리 클래스
../../Engine/SoundLib                       # 사운드 라이브러리
../../Engine/Effect                         # 이펙트 시스템
../../Engine/Caldron                        # 엔진 유틸리티
../ScriptEngine                             # 커스텀 스크립트 엔진
../GlobalScript                             # 게임 로직 및 네트워크
../CharacterActionControl                   # 캐릭터 애니메이션 제어
./RYLUI                                     # UI 시스템
./RYLClient                                 # 클라이언트 메인
./EventHandler                              # 이벤트 핸들러
../../MemoryManager                         # 메모리 관리
../../Engine/CrossM/Include                 # 크로스 플랫폼 호환성
```

### 카테고리별 정리

#### 엔진 모듈
```
../../Engine/zalla3d base class     # 3D 렌더링 기본 클래스
../../Engine/zalla3d scene class    # 씬 관리 (지형, 오브젝트 등)
../../Engine/SoundLib               # 오디오 재생 (DirectSound, Vorbis)
../../Engine/Effect                 # 파티클, 이펙트 시스템
../../Engine/Caldron                # 엔진 공통 유틸리티
../../Engine/CrossM/Include         # 멀티플랫폼 호환 레이어
```

#### 게임 로직
```
../GlobalScript                     # 네트워크, 게임 로직, 안티치트
../ScriptEngine                     # 커스텀 스크립트 VM (Flex/Bison)
../CharacterActionControl           # 캐릭터 동작 제어
```

#### 클라이언트 구조
```
./RYLClient                         # 메인 클라이언트 로직
./EventHandler                      # 서버 이벤트 처리
./RYLUI                             # UI 프레임워크
```

#### 시스템
```
../../MemoryManager                 # 커스텀 메모리 관리자
```

---

## 2. 라이브러리 디렉토리 (AdditionalLibraryDirectories)

### Debug 빌드
```
../../Engine/SoundLib/vorbis_sdk/lib        # Ogg Vorbis 라이브러리
../../Library/Debug                          # 프로젝트 빌드 출력 라이브러리 (Debug)
```

### Release 빌드
```
../../Engine/SoundLib/vorbis_sdk/lib        # Ogg Vorbis 라이브러리
../../Library/Release                        # 프로젝트 빌드 출력 라이브러리 (Release)
```

### Release_NoGD / Release_MY 빌드
```
../../Engine/SoundLib/vorbis_sdk/lib        # Ogg Vorbis 라이브러리
```

---

## 3. 링크 라이브러리 (AdditionalDependencies)

### Windows 시스템 라이브러리

| 라이브러리 | 용도 |
|-----------|------|
| **ws2_32.lib** | Winsock 2.0 (네트워크 통신) |
| **winmm.lib** | Windows Multimedia (타이머, 사운드) |
| **shlwapi.lib** | Shell API (경로 처리) |
| **ole32.lib** | COM/OLE (WMI 사용) |
| **wbemuuid.lib** | WMI (시스템 정보 조회) |
| **odbc32.lib** | ODBC 데이터베이스 |
| **odbccp32.lib** | ODBC 설치/설정 |
| **iphlpapi.lib** | IP Helper API (네트워크 정보) |
| **imm32.lib** | Input Method Manager (한글 입력) |

### DirectX 라이브러리

| 라이브러리 | 용도 |
|-----------|------|
| **d3d8.lib** | Direct3D 8 (3D 그래픽 렌더링) |
| **d3dx8.lib** | Direct3D 8 확장 (수학, 텍스처 로딩) |
| **dxguid.lib** | DirectX GUID 정의 |
| **dxerr8.lib** | DirectX 오류 메시지 |
| **dinput8.lib** | DirectInput 8 (키보드, 마우스, 조이스틱) |
| **dsound.lib** | DirectSound (3D 오디오) |

### 오디오 라이브러리

| 라이브러리 | 용도 |
|-----------|------|
| **eaxguid.lib** | EAX (3D 오디오 효과) GUID |
| **dsound.lib** | DirectSound |

#### Ogg Vorbis (오픈소스 오디오 코덱)

**Debug 빌드**:
```
../../Engine/SoundLib/vorbis_sdk/lib/ogg_static_d.lib
../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static_d.lib
../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static_d.lib
```

**Release 빌드**:
```
../../Engine/SoundLib/vorbis_sdk/lib/ogg_static.lib
../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static.lib
../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static.lib
```

### 이미지 처리

| 라이브러리 | 용도 |
|-----------|------|
| **ijl15.lib** | Intel JPEG Library 1.5 (JPEG 이미지 로딩) |

### 스크립팅

| 라이브러리 | 용도 | 빌드 |
|-----------|------|------|
| **luad.lib** | Lua 스크립팅 엔진 | Debug |
| **lua.lib** | Lua 스크립팅 엔진 | Release |

---

## 4. 빌드 설정별 라이브러리 상세

### Debug 빌드 (개발용)

```cpp
// 링크 라이브러리
ws2_32.lib          // Winsock
dsound.lib          // DirectSound
eaxguid.lib         // EAX
d3d8.lib            // Direct3D 8
d3dx8.lib           // Direct3D Extensions
dxguid.lib          // DirectX GUID
dinput8.lib         // DirectInput
shlwapi.lib         // Shell API
ole32.lib           // COM/OLE
wbemuuid.lib        // WMI
winmm.lib           // Multimedia
dxerr8.lib          // DirectX Errors
odbc32.lib          // ODBC
odbccp32.lib        // ODBC Config
iphlpapi.lib        // IP Helper
ijl15.lib           // Intel JPEG
imm32.lib           // IME (한글 입력)

// Ogg Vorbis (Debug 버전)
ogg_static_d.lib
vorbis_static_d.lib
vorbisfile_static_d.lib

// Lua (Debug 버전)
luad.lib

// 라이브러리 경로
../../Engine/SoundLib/vorbis_sdk/lib
../../Library/Debug
```

### Release 빌드 (배포용)

```cpp
// 링크 라이브러리 (시스템 라이브러리는 동일)
ws2_32.lib
dsound.lib
eaxguid.lib
d3d8.lib
d3dx8.lib
dxguid.lib
dinput8.lib
shlwapi.lib
ole32.lib
wbemuuid.lib
winmm.lib
dxerr8.lib
odbc32.lib
odbccp32.lib
iphlpapi.lib
ijl15.lib
imm32.lib

// Ogg Vorbis (Release 버전)
ogg_static.lib
vorbis_static.lib
vorbisfile_static.lib

// Lua (Release 버전)
lua.lib

// 라이브러리 경로
../../Engine/SoundLib/vorbis_sdk/lib
../../Library/Release
```

### Release_NoGD / Release_MY 빌드

```cpp
// 링크 라이브러리 (Lua 제외, Vorbis는 동일)
ws2_32.lib
dsound.lib
eaxguid.lib
d3d8.lib
d3dx8.lib
shlwapi.lib
ole32.lib
wbemuuid.lib
winmm.lib
dxguid.lib
dxerr8.lib
dinput8.lib
odbc32.lib
odbccp32.lib
iphlpapi.lib
ijl15.lib
imm32.lib

// Ogg Vorbis (Release 버전)
ogg_static.lib
vorbis_static.lib
vorbisfile_static.lib

// 라이브러리 경로
../../Engine/SoundLib/vorbis_sdk/lib
```

**주의**: Lua 라이브러리가 명시적으로 링크되지 않음 (프로젝트 참조로 처리)

---

## 5. 프로젝트 참조 (내부 모듈)

NeoRylClient는 다음 프로젝트들을 참조합니다 (솔루션 의존성):

```
1. MemoryManager          # 커스텀 메모리 관리자
2. Caldron                # 엔진 유틸리티
3. CrossM                 # 크로스 플랫폼 레이어
4. Effect                 # 이펙트 시스템
5. SoundLib               # 사운드 라이브러리
6. Zalla3D Base Class     # 3D 엔진 기본
7. Zalla3D Scene Class    # 3D 씬 관리
8. CharacterActionControl # 캐릭터 제어
9. GlobalScript           # 게임 로직/네트워크
10. ScriptEngine          # 스크립트 VM
11. LUA                   # Lua 엔진
```

**빌드 순서**: 위 순서대로 빌드되며, NeoRylClient가 마지막에 빌드됨

**출력 위치**:
- Debug: `../../Library/Debug/`
- Release: `../../Library/Release/`

---

## 6. 전처리기 정의 (PreprocessorDefinitions)

### Debug 빌드
```cpp
WIN32                   // Windows 32비트
DEBUG                   // 디버그 모드
_DEBUG                  // 디버그 플래그
_WINDOWS                // Windows 애플리케이션
_RYL_LANGUAGE           // 다국어 지원
_USE_32BIT_TIME_T       // 32비트 time_t (2038년 문제)
USE_STATIC              // 정적 라이브러리 사용
NO_GAMEGUARD            // GameGuard 비활성화
```

### Release 빌드
```cpp
WIN32                   // Windows 32비트
NDEBUG                  // Release 모드
_WINDOWS                // Windows 애플리케이션
NO_GAMEGUARD            // GameGuard 비활성화
_RYL_GAME_CLIENT_       // 게임 클라이언트 빌드
_RYL_LANGUAGE           // 다국어 지원
```

### Release_MY / Release_NoGD 빌드
```cpp
WIN32                   // Windows 32비트
NDEBUG                  // Release 모드
_WINDOWS                // Windows 애플리케이션
_RYL_GAME_CLIENT_       // 게임 클라이언트 빌드
NO_GAMEGUARD            // GameGuard 비활성화
ON_HACKSHIELD           // HackShield 활성화
_RYL_LANGUAGE           // 다국어 지원
_RYL_TEST               // 테스트 빌드 (NoGD만)
```

### Debug_MY 빌드
```cpp
WIN32                   // Windows 32비트
_DEBUG                  // 디버그 플래그
_WINDOWS                // Windows 애플리케이션
_RYL_GAME_CLIENT_       // 게임 클라이언트 빌드
DEBUG                   // 디버그 모드
_PACKET_PROFILE_        // 패킷 프로파일링
NO_GAMEGUARD            // GameGuard 비활성화
_RYL_TEST               // 테스트 빌드
ON_HACKSHIELD           // HackShield 활성화
```

---

## 7. 외부 라이브러리 버전 및 출처

### DirectX 8 SDK
- **버전**: DirectX 8.0 / 8.1
- **출시**: 2000-2001년
- **용도**: 3D 그래픽, 사운드, 입력 처리
- **파일**: d3d8.dll, d3dx8.dll, dsound.dll, dinput8.dll

### EAX (Environmental Audio Extensions)
- **제조사**: Creative Labs
- **버전**: EAX 2.0+
- **용도**: 3D 오디오 효과 (반향, 에코)
- **파일**: eax.dll, eaxguid.lib

### Ogg Vorbis
- **버전**: 불명 (SDK 경로: vorbis_sdk)
- **라이선스**: BSD-style (오픈소스)
- **용도**: 고품질 오디오 압축 (배경음악)
- **라이브러리**: libogg, libvorbis, libvorbisfile

### Intel JPEG Library
- **버전**: IJL 1.5
- **제조사**: Intel
- **용도**: JPEG 이미지 로딩/저장
- **파일**: ijl15.lib

### Lua
- **버전**: 불명 (추정 Lua 5.0 ~ 5.1)
- **라이선스**: MIT (오픈소스)
- **용도**: 게임 스크립팅 (스킬, 퀘스트 등)
- **라이브러리**: lua.lib / luad.lib

---

## 8. 특이사항 및 주의점

### 1. 구형 DirectX 버전
- DirectX 8 사용 (2000년대 초반 기술)
- 현대 Windows에서는 호환성 문제 발생 가능
- DirectX 9 이상으로 업그레이드 권장

### 2. 32비트 전용
- `_USE_32BIT_TIME_T` 정의
- 64비트 빌드 미지원
- 2038년 문제 (Year 2038 problem) 존재

### 3. EAX 의존성
- Creative Sound Blaster 사운드카드 전용 기술
- 현대 시스템에서는 소프트웨어 에뮬레이션 필요
- OpenAL로 대체 권장

### 4. Lua 버전 불명
- 정확한 버전을 파악하려면 lua.lib 확인 필요
- Lua 5.0 ~ 5.1 추정 (2003-2006년)

### 5. Intel JPEG Library
- 2008년 단종된 라이브러리
- libjpeg-turbo로 대체 권장

### 6. MultiByte 문자셋
- Unicode 미사용
- 한글 처리는 IMM32 (Input Method Manager) 사용
- 국제화(i18n)에 제약

### 7. 라이브러리 경로 하드코딩
```xml
<!-- 절대 경로 사용 예시 -->
<OutputFile>C:\project\trunk\Game\Client.exe</OutputFile>

<!-- 개발 환경 종속 경로 -->
<OutDir>D:\Navezine\ROWTest_MY\</OutDir>
```
**문제**: 다른 개발자 환경에서 빌드 실패 가능
**해결**: 상대 경로 또는 환경 변수 사용 권장

---

## 9. 의존성 그래프

```
NeoRylClient.exe
├── [Windows System]
│   ├── ws2_32.lib (네트워크)
│   ├── winmm.lib (멀티미디어)
│   ├── ole32.lib (COM)
│   ├── wbemuuid.lib (WMI)
│   ├── odbc32.lib (데이터베이스)
│   ├── iphlpapi.lib (네트워크 정보)
│   ├── shlwapi.lib (Shell API)
│   └── imm32.lib (한글 입력)
│
├── [DirectX 8]
│   ├── d3d8.lib (3D 그래픽)
│   ├── d3dx8.lib (확장 기능)
│   ├── dsound.lib (사운드)
│   ├── dinput8.lib (입력)
│   ├── dxguid.lib (GUID)
│   └── dxerr8.lib (오류 처리)
│
├── [Audio]
│   ├── eaxguid.lib (3D 오디오)
│   ├── ogg_static.lib (Ogg 컨테이너)
│   ├── vorbis_static.lib (Vorbis 코덱)
│   └── vorbisfile_static.lib (파일 I/O)
│
├── [Image]
│   └── ijl15.lib (JPEG 처리)
│
├── [Scripting]
│   └── lua.lib (스크립팅 엔진)
│
└── [Internal Projects]
    ├── MemoryManager.lib
    ├── Caldron.lib
    ├── CrossM.lib
    ├── Effect.lib
    ├── SoundLib.lib
    ├── Zalla3D_Base.lib
    ├── Zalla3D_Scene.lib
    ├── CharacterActionControl.lib
    ├── GlobalScript.lib
    └── ScriptEngine.lib
```

---

## 10. 빌드 환경 요구사항

### 필수 소프트웨어
1. **Visual Studio 2010** (또는 상위 버전)
2. **DirectX 8 SDK**
3. **Windows SDK**

### 필수 런타임
1. **DirectX 8 런타임**
2. **Visual C++ 2010 재배포 패키지**
3. **Creative EAX 드라이버** (선택, 3D 사운드용)

### 빌드 전 확인사항
1. ✅ DirectX 8 SDK 설치
2. ✅ Ogg Vorbis SDK 위치: `Engine/SoundLib/vorbis_sdk/`
3. ✅ Intel JPEG Library: `ijl15.lib` 존재 확인
4. ✅ Lua 라이브러리: `lua.lib` / `luad.lib` 존재 확인
5. ✅ 프로젝트 참조 순서대로 빌드

---

## 11. 업그레이드 권장 사항

### 기술 부채 해결

| 현재 | 권장 | 이유 |
|------|------|------|
| DirectX 8 | DirectX 11/12 | 현대 GPU 지원, 성능 향상 |
| EAX | OpenAL | 크로스 플랫폼, 활발한 개발 |
| IJL15 | libjpeg-turbo | 유지보수 중, 성능 향상 |
| Lua 5.0/5.1 | Lua 5.4 | 보안, 성능 개선 |
| MultiByte | Unicode (UTF-16) | 국제화 지원 |
| 32비트 | 64비트 | 메모리 제약 해결 |
| Visual Studio 2010 | Visual Studio 2022 | 최신 C++ 기능, 도구 |

### 라이브러리 현대화

**우선순위 1 (필수)**:
- DirectX 8 → DirectX 11 (또는 Vulkan)
- 32비트 → 64비트
- MultiByte → Unicode

**우선순위 2 (권장)**:
- EAX → OpenAL
- IJL15 → libjpeg-turbo
- Lua 업데이트

**우선순위 3 (선택)**:
- Visual Studio 업그레이드
- C++ 표준 업데이트 (C++11/14/17)

---

**문서 작성일**: 2025-11-29
**분석 도구**: Claude Code
**프로젝트**: NeoRylClient - ROW (Reign of Revolution)
