o
odinpkg.dev
packages / app / odin-fps

odin-fps

087d220app

Raylib + Odin 3d FPS Game

MIT · updated 3 months ago

Odin FPS

alt text Odin + Raylib로 만든 3D 멀티플레이어 FPS 게임. UDP 기반 클라이언트-서버 아키텍처로, 권위 서버(authoritative server) 모델을 사용합니다.

Features

  • FPS 컨트롤러 (이동, 달리기, 앉기, 점프, 헤드밥)
  • 3종 무기 시스템 (Pistol / Rifle / Shotgun) — 히트스캔 사격, 재장전, 반동, 스웨이
  • AI 타겟 (순찰 + 추격 AI)
  • PvP 전투 (플레이어 간 히트스캔)
  • 벽/장애물 차폐 (wall occlusion)
  • UDP 네트워킹 (최대 4인)
  • 클라이언트 사이드 예측 (client-side prediction) + 서버 재조정 (reconciliation)
  • 엔티티 보간 (entity interpolation)

Requirements

  • Odin 컴파일러
  • Raylib (Odin vendor 패키지에 포함)

Build & Run

# 빌드
odin build ./src -out:fps-game

# 빌드 (디버그)
odin build ./src -out:fps-game -debug

싱글플레이어 (로컬)

./fps-game

멀티플레이어

# 서버 실행
./fps-game --server

# 클라이언트 접속
./fps-game --connect 127.0.0.1
./fps-game --connect 192.168.1.100:27015

기본 포트는 27015입니다.

Controls

동작
WASD 이동
Mouse 시점
Space 점프
Left Shift 달리기
Left Ctrl 앉기
LMB 사격
R 재장전
1 / 2 / 3 무기 전환 (Pistol / Rifle / Shotgun)
Mouse Scroll 무기 순환
Escape 일시정지

Architecture

src/
├── main.odin          # 진입점, 게임 루프, UI
├── player.odin        # FPS 컨트롤러, HP/사망/리스폰
├── gun.odin           # 무기 시스템, 히트스캔
├── world.odin         # 맵 환경 (벽, 장애물)
├── target.odin        # AI 타겟 (순찰/추격)
├── entity.odin        # 엔티티 ID 시스템
├── net.odin           # 패킷 프로토콜 (UDP)
├── net_state.odin     # 직렬화 가능한 게임 상태
├── server.odin        # 전용 서버 (헤드리스)
├── client.odin        # 클라이언트 네트워크
├── predict.odin       # 클라이언트 사이드 예측
└── interpolation.odin # 엔티티 보간

네트워크 모델

  • 서버: 60Hz 고정 틱, 물리/전투 시뮬레이션 실행, 매 틱 스냅샷 브로드캐스트
  • 클라이언트: 입력 전송 → 서버 스냅샷 수신 → 로컬 예측으로 즉각 반응
  • 프로토콜: Packet_Header (9바이트) + payload, 스냅샷 ~1220바이트 (MTU 이내)
  • 신뢰성: pressed 이벤트 3프레임 중복 전송으로 UDP 패킷 손실 대응

Roadmap

  • FPS 컨트롤러 + 무기 시스템
  • AI 타겟 (순찰/추격)
  • UDP 클라이언트-서버 네트워킹
  • 클라이언트 사이드 예측 + 서버 재조정
  • 엔티티 보간
  • PvP 전투
  • 플레이어 간 충돌
  • 스코어보드 / 킬피드
  • 서버 사이드 히트 검증 (지연 보상)
  • 게임 모드 (데스매치, 팀전)
  • 맵 파일 로딩
  • 사운드

License

MIT License