개발 블로그
Dogkov Arena 개발 과정에서 마주친 설계 결정과 구현 기록입니다. 2D 탑다운 데스매치 슈터를 브라우저에서 LAN 멀티플레이로 돌리는 데 들어간 잡다한 선택들.
엔진렌더링
HTML5 Canvas 2D 탑다운 엔진의 구조
월드 좌표 → 카메라 → 캔버스 변환, 레이어 순서, FOV 안개 마스킹까지. esbuild로 모듈 번들링한 클라이언트 렌더 파이프라인 전반.
2026-05-19 네트워크socket.ioSocket.io LAN 리슨 서버 + 룸 시스템
호스트 권한 모델, 룸/비밀번호/봇 추가, 클라 입력 → 서버 시뮬 → 스냅샷 브로드캐스트 사이클.
2026-05-19 서버node.jsNode "Listen Server" 패턴: 60Hz 시뮬레이션 루프
setInterval로 매 16.67ms 시뮬레이션을 돌리고, 매 tick 스냅샷을 broadcasting. 호스트가 곧 서버가 되는 Quake식 모델.
2026-05-19 렌더링raycastFOV 시야 안개: 120 Ray Raycasting
플레이어 전방 90° 시야를 캔버스 마스크로 그리는 법. destination-out 합성 모드와 벽 polygon 자르기.
Quake식 무기 픽업: 인벤토리 없는 단순함
Tarkov 슬롯 인벤토리에서 Q3 자동 픽업으로 갈아탄 이유. hasWeapon/weapons 두 dict로 끝나는 단순한 무기 보유 상태 관리.
이펙트 시스템: 로켓 폴리라인 + 레일건 나선
토막난 segment에서 연결된 폴리라인으로. 시간 따라 perpendicular drift로 흩어지는 연기. 두 가닥 helix로 그리는 레일건.
2026-05-19 AI봇Bot AI: 거리 밴드별 무기 선택 + LoS 추적
봇 50줄로 시작해서 "그럴듯한" 데스매치 상대 만들기. 가까이면 건틀릿, 멀면 레일건, 중거리는 로켓/유탄.
2026-05-19 배포dockerFly.io에 Node + Socket.io 배포 (도쿄 리전)
Dockerfile에서 esbuild 빌드, internal_port 매칭, WebSocket 통과. macOS 방화벽 프롬프트 해결까지.
2026-05-19