PuppetMasterG
PuppetMasterG is presumably the tool used by Ntreev to stitch together development assets like 3D models and their animations into Puppet files.
The "G" suffix probably means that this is a specific version of PuppetMaster for Pangya (also known as ProjectG).
Functionality
File Format
The PuppetMasterG project files have been partially leaked in some patches of the game. They end in the .pmp file extension.
An example file to demonstrate this is \data\avatar\i_lucia\i_def.pmp
PMPF VER 2.21
ASE 이름 : i_def.ASE
텍스쳐( void )
{
부모텍스쳐 : @
텍스쳐이름 : d:/datasafe/projectg_s4/bin/data/avatar/z_common/club01_01_w.jpg
텍스쳐파일 : d:/datasafe/projectg_bank/bin/data/avatar/i_lucia/i_body.jpg
텍스쳐연결 : 1
}
[...]
스크립트( 0000 )
{
메시지 : *hidebone("I_MIC" "I_Car") *hideclub *ptex("i_face" "I_def_reset.png")
플래그 : 0
원본파일 : I_1등모션.Ani
원본프레임 : 0
}
[...]
충돌박스( void )
{
모양(o,ㅁ) : 1
보이기 : 1
박스이름 : Bip Dummy
부모본이름 : Bip Dummy
스크립트0 : @
스크립트1 : @
최소값x : -1.000000
최소값y : -1.000000
최소값z : -1.000000
최대값x : 1.000000
최대값y : 1.000000
최대값z : 1.000000
}
[...]
동작( void )
{
동작이름 : 1등모션
원본시작시간 : 0.0000
원본종료시간 : 4.3333
다음동작 : 1등모션끝
연결방법 : Transition
연결시간 : 0.0000
최상위본 : Bip Dummy
원본시작프레임 : 0
원본종료프레임 : 130
원본길이사용 : Yes
원본파일 : I_1등모션.Ani
원본유무 : 있음
시작프레임 : 0
종료프레임 : 130
그룹이름 : def
}
[...]The file has been truncated due to being about 11,000 lines long.
Header
Structurally, these files start with a header line specifying PMPF VER 2.21, PMPF most likely meaning PuppetMaster Project File, following a version of PuppetMaster this file has been generated with.
Across all .pmp files that have been accidentally included with clients, following PMPF versions have been observed:
- 2.2
- 2.21
- 2.22
ASE
Next up is ASE 이름, standing for "ASE name", ASE being .ase files, 3DSMAX ASCII Exports. These are predominantly used by Pangya development tooling.
General block format
Configured entities in PMPF files all follow a certain format. It is relatively simple, possibly done to be straight-forward in line-by-line parsing without having to write tokenizers for a custom format.
The format looks like so:
type( id )
{
key : value
}
Blocks
Textures
Texture (텍스쳐) blocks define textures used by the models and related properties.
텍스쳐( void )
{
부모텍스쳐 : @
텍스쳐이름 : d:/datasafe/projectg_s4/bin/data/avatar/z_common/club01_01_w.jpg
텍스쳐파일 : d:/datasafe/projectg_bank/bin/data/avatar/i_lucia/i_body.jpg
텍스쳐연결 : 1
}Properties:
- 부모텍스쳐: Parent texture
- 텍스쳐이름: Texture name
- 텍스쳐파일: Texture file
- 텍스쳐연결: Texture connection
Scripts
Script (스크립트) blocks define scripts executed at certain times/for certain actions.
스크립트( 0000 )
{
메시지 : *hidebone("I_MIC" "I_Car") *hideclub *ptex("i_face" "I_def_reset.png")
플래그 : 0
원본파일 : I_1등모션.Ani
원본프레임 : 0
}Properties:
- 메시지: Message, the script content
- 플래그: Flag
- 원본파일: Original file, animation export this script runs
- 원본프레임: Original frame, starting frame for this script
Collision Boxes
Collision Boxes (충돌박스) define collision boxes (or spheres) for bones in models.
충돌박스( void )
{
모양(o,ㅁ) : 1
보이기 : 1
박스이름 : Bip Dummy
부모본이름 : Bip Dummy
스크립트0 : @
스크립트1 : @
최소값x : -1.000000
최소값y : -1.000000
최소값z : -1.000000
최대값x : 1.000000
최대값y : 1.000000
최대값z : 1.000000
}Properties:
- 모양(o,ㅁ): Shape (o,ㅁ), whether the collision box is a box or a sphere
- 보이기: Visible
- 박스이름: Box name
- 부모본이름: Parent name
- 스크립트0: Script 0
- 스크립트1: Script 1
- 최소값x: Min X
- 최소값y: Min Y
- 최소값z: Min Z
- 최대값x: Max X
- 최대값y: Max Y
- 최대값z: Max Z
Movements
Movements (동작) define model animations and their properties.
동작( void )
{
동작이름 : 1등모션
원본시작시간 : 0.0000
원본종료시간 : 4.3333
다음동작 : 1등모션끝
연결방법 : Transition
연결시간 : 0.0000
최상위본 : Bip Dummy
원본시작프레임 : 0
원본종료프레임 : 130
원본길이사용 : Yes
원본파일 : I_1등모션.Ani
원본유무 : 있음
시작프레임 : 0
종료프레임 : 130
그룹이름 : def
}Properties:
- 동작이름: Movement name
- 원본시작시간: Start time
- 원본종료시간: End time
- 다음동작: Next movement
- 등모션끝연결방법: Movement end connection type
- 연결시간: Connection time
- 최상위본: Top-level bone
- 원본시작프레임: Start frame
- 원본종료프레임: End frame
- 원본길이사용: Original length used
- 원본파일: Original file
- 원본유무: Originality (The value "있음" means "exists")
- 시작프레임: Start frame
- 종료프레임: End frame
- 그룹이름: Group name
Discovery
This tool is mentioned in the default QuickPatch file exclusion list.