본문으로 이동

아이에프피(GTA)

게임세상 위키

IFPGrand Theft Auto III 이후 Grand Theft Auto 시리즈에서 사용되는 애니메이션 형식입니다. Grand Theft Auto: San Andreas부터는 새로운 버전의 파일 형식이 도입되었으나, 여전히 이전 버전의 애니메이션도 지원합니다. IFP 파일은 여러 개의 개별 애니메이션을 포함할 수 있으며, 이들은 객체별로 분할되어 해당 애니메이션 객체나 배우에게 연결됩니다. 각 객체는 시간 키를 포함하여 특정 수의 프레임을 가집니다. 두 프레임 사이는 게임 내에서 보간 처리됩니다.

파일 사양

버전 1

버전 1 패키지는 평소와 같이 여러 데이터 구조로 나뉩니다. 해당 구조의 값들은 4바이트 정보 마커로 식별됩니다. 이 마커는 뒤따르는 값들을 설명하는 4개의 문자입니다. 실제로 사용되는 마커는 "DGAN"과 "NAME"뿐이라는 점에 유의하십시오. 나머지는 단순히 공간 낭비입니다. 모든 애니메이션에 예상 위치에 정보 마커가 있는 것은 아니므로 코드에서 이들을 찾으려 하지 마십시오. 때로는 단순히 0으로 되어 있기도 합니다.

오프셋은 항상 현재 파일 위치를 기준으로 합니다. 상대 오프셋을 절대 오프셋으로 변환하려면 읽은 바이트 수를 더하기만 하면 됩니다. 문자열은 항상 4바이트 경계에 맞춰 패딩됩니다. "NAME" 정보 마커 뒤의 "AnimNameLength" 문자열은 널 종료 바이트를 포함한 문자열을 설명합니다. 작성해야 할 바이트 수를 얻으려면 이 값을 나머지가 없이 4로 나눌 수 있을 때까지 올림해야 합니다.

헤더

4b   - FourCC   - "ANPK" (애니메이션 패키지, 버전 식별자)
4b   - Int32    - 파일 끝까지의 오프셋
4b   - FourCC   - "INFO"
4b   - Int32    - 헤더 끝까지의 오프셋
4b   - Int32    - 애니메이션 개수
Xb   - Char[X]  - 널 종료 문자열 (스크립트에서 사용되는 내부 파일 이름)

애니메이션

4b   - FourCC   - "NAME"
4b   - Int32    - 애니메이션 이름의 길이 (X)
Xb   - char[X]  - 애니메이션 이름 (널 종료 문자열)
4b   - FourCC   - "DGAN"
4b   - Int32    - 애니메이션 끝까지의 오프셋 (콘텐츠 포함)
4b   - FourCC   - "INFO"
4b   - Int32    - 첫 번째 객체까지의 오프셋 (보통 0x08)
4b   - Int32    - 애니메이션 내 객체 개수
4b   - Int32    - NULL

객체

4b   - FourCC   - "CPAN"
4b   - Int32    - 객체 끝까지의 오프셋
4b   - FourCC   - "ANIM"
4b   - Int32    - 프레임 시작까지의 오프셋 (보통 0x2C)
28b  - Char[28] - 객체 이름 (널 종료 문자열)
4b   - Int32    - 프레임 개수
4b   - Int32    - NULL
4b   - Int32    - 다음 형제 객체
4b   - Int32    - 이전 형제 객체

프레임 정보

4b   - FourCC   - 유형
4b   - Int32    - 프레임 데이터의 끝
프레임 유형

프레임 유형은 프레임의 크기와 내용을 정의합니다. 실제로 알려진 유형은 3가지입니다. 각 프레임 유형 식별자는 "Keyframe"을 의미하는 K로 시작합니다. 뒤따르는 3바이트는 데이터의 순서와 내용을 정의하며, ASCII 인코딩된 문자입니다.

R - 회전 (Rotation)
T - 변환 (Translation)
S - 크기 조절 (Scale)
0 - 없음

변환은 부모 프레임에 의해 정의된 세계 내 현재 오프셋을 기준으로 위치의 차이를 설명하는 벡터입니다. 컷신의 경우 특수 파일에 지정된 오프셋을 기준으로 합니다. 일반적으로 루트 객체만이 변환된 프레임을 포함합니다.

프레임 데이터

각 유형은 서로 다른 구조를 가집니다. 이들은 결합될 수 있으며 유형 값에 기록된 순서대로 게임이 읽습니다.

// 회전
4b   - Float    - 쿼터니언 X
4b   - Float    - 쿼터니언 Y
4b   - Float    - 쿼터니언 Z
4b   - Float    - 쿼터니언 W
// 변환
4b   - Float    - 위치 X
4b   - Float    - 위치 Y
4b   - Float    - 위치 Z
// 크기 조절
4b   - Float    - 크기 X
4b   - Float    - 크기 Y
4b   - Float    - 크기 Z

모든 프레임은 마지막에 초 단위 시간을 설명하는 부동 소수점 값을 가집니다.

4b   - Float    - 시간

버전 2

버전 2 아카이브는 기본적으로 위와 동일한 계층 구조를 가지지만, 구조가 다소 다릅니다. 버전 2의 모든 문자열은 널 종료되지만 24바이트의 고정 크기를 갖습니다.

헤더

4b   - FourCC   - 'ANP3' (애니메이션 패키지 3, 버전 식별자. 단, ANP2 패키지는 존재하지 않음)
4b   - Int32    - 파일 끝까지의 오프셋
24b  - Char[24] - 스크립트에서 사용되는 내부 파일 이름
4b   - Int32    - 애니메이션 개수

애니메이션

24b  - Char[24] - 애니메이션 이름
4b   - Int32    - 객체 개수
4b   - Int32    - 프레임 데이터 크기
4b   - Int32    - 알 수 없음, 항상 1

데이터 크기 값은 압축된 좌표와 회전 정보를 포함하여 프레임의 실제 사용 가능한 데이터 크기에 해당하는 바이트 수입니다.

객체

24b  - Char[24] - 객체 이름
4b   - Int32    - 프레임 유형: 자식 = 3, 루트 = 4
4b   - Int32    - 프레임 개수
4b   - Int32    - 본 ID

프레임

루트 프레임은 일반적으로 다음 구조를 따릅니다.

2b   - Int16    - 쿼터니언 X
2b   - Int16    - 쿼터니언 Y
2b   - Int16    - 쿼터니언 Z
2b   - Int16    - 쿼터니언 W
2b   - Int16    - 시간 (초 단위)
2b   - Int16    - 변환 X
2b   - Int16    - 변환 Y
2b   - Int16    - 변환 Z

자식 섹션은 일반적으로 변환 값을 가지지 않습니다.

2b   - Int16    - 쿼터니언 X
2b   - Int16    - 쿼터니언 Y
2b   - Int16    - 쿼터니언 Z
2b   - Int16    - 쿼터니언 W
2b   - Int16    - 시간 (초 단위)

쿼터니언 및 변환 값을 부동 소수점 값으로 변환하려면 4096으로 나누고, 시간을 부동 소수점 값으로 변환하려면 60으로 나누십시오.

시간은 이전 프레임으로부터의 상대적인 델타 시간이 아니라 객체 계산 시작 시점부터의 총 델타 시간입니다.

외부 링크

틀:Fdl

탐색

틀:Navbox modding