# 56k 모뎀 연결로 대량의 적을 처리한 Serious Sam

> Clean Markdown view of GeekNews topic #15329. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15329](https://news.hada.io/topic?id=15329)
- GeekNews Markdown: [https://news.hada.io/topic/15329.md](https://news.hada.io/topic/15329.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-06-14T08:34:10+09:00
- Updated: 2024-06-14T08:34:10+09:00
- Original source: [staniks.github.io](https://staniks.github.io/articles/serious-engine-networking-analysis)
- Points: 1
- Comments: 1

## Topic Body

### Serious Engine 1 소스 코드 분석

#### 개요
- Serious Sam은 멀티플레이어 게임으로 설계되었음.
- 싱글플레이어 캠페인도 멀티플레이어처럼 동작함.
- Serious Engine은 싱글플레이어, 멀티플레이어, 데모 녹화 및 재생을 지원함.

#### 부동 소수점 결정론
- 게임의 동기화를 위해 부동 소수점 연산의 결정론적 동작이 중요함.
- Windows에서만 출시되어 컴파일러 차이로 인한 동기화 문제를 피할 수 있었음.
- FPU 정밀도 차이로 인한 문제를 해결하기 위해 정밀도 가드를 사용함.

#### 틱 vs 프레임
- 게임 로직 틱레이트는 렌더링 프레임레이트와 분리되어 있음.
- 게임 로직은 초당 20틱으로 고정되어 있음.
- 부드러운 움직임과 애니메이션을 위해 보간(interpolation)을 사용함.

#### 네트워크 멀티플레이어
- Serious Engine의 네트워킹 모델은 클라이언트-서버 방식임.
- 서버는 클라이언트로부터 메시지를 받아 처리하고, 관련 정보를 모든 클라이언트에 전달함.
- UDP 프로토콜을 사용하여 패킷을 전송함.

#### 패킷 계층
- UDP 패킷은 순서가 뒤바뀌거나 도착하지 않을 수 있음.
- Serious Engine은 UDP 위에 자체 프로토콜을 구현하여 신뢰성과 패킷 순서를 보장함.
- 신뢰할 수 있는 패킷은 ACK 패킷을 통해 확인됨.

#### 연결 수명 주기
- 클라이언트와 서버 간의 가상 연결을 설정하기 위해 브로드캐스트 패킷을 사용함.
- 서버는 클라이언트에게 고유 식별자를 할당하고, 이를 통해 패킷을 라우팅함.

#### 오프라인 플레이
- 싱글플레이어와 데모 재생은 멀티플레이어의 특수한 경우임.
- 동일한 프로세스 내에서 서버와 클라이언트가 통신함.

#### 메시지 계층
- CNetworkMessage는 스트림처럼 읽고 쓸 수 있는 메시지 추상화임.
- 메시지는 압축될 수 있으며, 기본적으로 LZRW1 압축을 사용함.
- 델타 인코딩을 사용하여 데이터 전송량을 최소화함.

#### 메시지 보안
- 메시지는 암호화되지 않음.
- 채팅 메시지는 평문으로 전송됨.

### GN⁺의 의견
- **게임 개발자에게 유용함**: Serious Engine의 네트워크 구조와 동기화 메커니즘은 멀티플레이어 게임 개발에 유용한 참고 자료가 될 수 있음.
- **결정론적 동작의 중요성**: 부동 소수점 연산의 결정론적 동작을 보장하는 방법은 게임 동기화 문제를 해결하는 데 중요한 요소임.
- **네트워크 프로토콜 설계**: UDP 위에 신뢰성과 순서를 보장하는 자체 프로토콜을 구현한 것은 네트워크 프로그래밍의 좋은 예시임.
- **보안 고려사항**: 메시지 암호화가 없다는 점은 현대 게임 개발에서 보안 측면에서 고려해야 할 사항임.
- **기술적 도전과제**: 초기 2000년대의 네트워크 환경에서 빠른 속도의 멀티플레이어 게임을 구현한 기술적 도전과제를 이해하는 데 도움이 됨.

## Comments



### Comment 26248

- Author: neo
- Created: 2024-06-14T08:34:11+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40657574) 
- Serious Sam의 네트워크 코드를 구현한 개발자였음. QuakeWorld 예측 시스템에서 영감을 받아 간단한 MVP를 코딩했음.
- Serious Sam은 LAN 파티에서 항상 잘 작동했음. 다른 게임들이 문제를 겪을 때도 안정적으로 실행되었음.
- GB Color 포트의 Vigilante 8 멀티플레이어를 결정론적 게임 플레이로 구현했음. GBC 링크 케이블을 사용해 1바이트씩 데이터를 전송했음.
- Croteam은 매우 재능 있는 게임 개발 팀임. Talos Principle 시리즈와 맞춤형 Vulkan 게임 엔진을 개발했음.
- Age of Empires의 "1500 archers on a 28.8"와 같은 아이디어인지 질문함.
- 기술 자원이 증가함에 따라 소프트웨어가 더 느리고 비효율적으로 변하는 현상을 지적함. 이를 "Benjamin Button 소프트웨어 디자인 효과"라고 부름.
- Factorio의 아키텍처는 입력 이벤트만 전송하고, 동기화된 시뮬레이션 코어에 의존함.
- Serious Sam을 PC Gamer 데모로 플레이했던 기억을 떠올림. 이제는 클래식 게임으로 여겨짐.
- Serious Engine의 보간(interpolation) 기능을 설명함. 콘솔에서 `net_bLerping=0`을 입력해 보간 없이 게임을 플레이할 수 있음.
