-
[PBL] CodeWalker ( 3 / N )카테고리 없음 2026. 6. 29. 21:04
- https://github.com/dexyfex/CodeWalker
- 월드 생성 과정 요약.
① 게임 파일 스캔 (RpfManager)
└─ 모든 RPF 내 .ymap / .ybn / .ynv를 이름 해시 → 파일 엔트리 딕셔너리(YmapDict)로 구성
② gta5_cache_y.dat 로드 (CacheDatFile)
└─ MapDataStoreNode[] 전체를 메모리에 적재
└─ DLC 최신 버전이 기존 항목을 덮어씀
③ InitMapDataStore() — SpaceMapDataStore 구성
└─ YmapDict에 실제 파일이 존재하는 노드만 nodedict에 포함
└─ 모든 노드를 Quadtree에 평탄하게(flat) 투입 후 TrySplit() 재귀 호출
④ 카메라 이동 → GetVisibleYmaps()
└─ Quadtree.GetItems(cam.Position)
↳ 노드 AABB 1차 컬링
↳ 개별 streamingExtents 2차 정밀 판정
└─ 매칭된 MapDataStoreNode 목록 반환
⑤ item.Name (해시) → GameFileCache.GetYmap(hash)
└─ mainCache에 있으면 즉시 반환
└─ 없으면 YmapDict[hash] → RPF 엔트리 조회
→ 빈 YmapFile 객체 생성 후 캐시 등록
→ TryLoadEnqueue() → 백그라운드 비동기 파싱
⑥ parent 해시 체인 순회 (LOD 계층 연쇄 로드)
└─ ymap._CMapData.parent 해시로 이동 → GetYmap(parentHash)
└─ 반복 (이미 로드된 hash이거나 parent == 0 이면 종료)
⑦ YmapFile 활성화
└─ 엔티티, 라이트, 오클루더, 물리 데이터 생성