Black Desert Online File Formats (PAB, PAC, PAA)

Post questions about game models here, or help out others!
parttimegamer15
beginner
Posts: 22
Joined: Thu Jun 16, 2016 7:00 pm
Has thanked: 3 times

Re: Black Desert Online File Formats (PAB, PAC, PAA)

Post by parttimegamer15 » Wed May 03, 2017 12:05 am

Thanks for taking your time to look into this! Yes it does work with the 3rd Jan version of the blend file :-) Thanks again
shakotay2 wrote:Seems it's a matter of the blend-file version.
I used the files you sent me:
phw_00_nude_0001_noalpha.pac
phw_01.pab

phw_06_01_stand_idle_00.paa
phw_04_01_move_run_r_00.paa

with Blender249.blend as of 3.1.2015 (3rd January) and all works fine
(apart from some oddities with the blender timeline window where the Play/Stop button had to be pressed several times)

newkuro
ultra-n00b
Posts: 2
Joined: Mon Jan 18, 2010 6:55 am

Re: Black Desert Online File Formats (PAB, PAC, PAA)

Post by newkuro » Tue Jun 27, 2017 6:35 am

black desert - new character(15_pdw) not import (.pac)
help

ciabiss
ultra-n00b
Posts: 1
Joined: Sat Nov 25, 2017 2:46 pm

Re: Black Desert Online File Formats (PAB, PAC, PAA)

Post by ciabiss » Sat Nov 25, 2017 4:01 pm

i need help...
first i get an error in the blender console saying:
SyntaxError: Missing parentheses in call to 'print'
so i fix that and then this happened:
You do not have the required permissions to view the files attached to this post.

Demrok
ultra-n00b
Posts: 4
Joined: Sat Jan 07, 2017 7:46 pm

Re: Black Desert Online File Formats (PAB, PAC, PAA)

Post by Demrok » Thu Jan 04, 2018 7:08 am

Is there an updated version of these scripts that is needed to run the .PAA extraction?
I am using blender 249 and the script fails and says "Missing parentheses in call to 'print' (inside blender)
I'm just trying to extract the animations, but I can not get it to work...
Anyone have any help/advice/tutorial?

Thanks!

User avatar
ngovandang
veteran
Posts: 84
Joined: Sun Aug 10, 2014 10:33 am
Has thanked: 19 times
Been thanked: 1 time
Contact:

Re: Black Desert Online File Formats (PAB, PAC, PAA)

Post by ngovandang » Sat Nov 03, 2018 1:41 pm

Szkaradek123 wrote:Hi

Here is an animation importer for models from this game.
It requires Blender version 249 and Python 26.
I used chrrox script for Noesis viewtopic.php?f=16&t=10909 and ArthainBaka file format research .

Steps:
1.unpack importer
2.run Blender249.blend
3.in Blender Text Window press alt+p and select:
-pac file - for importing a skinned mesh
-pab file - for importing a skeleton
-paa file - for importing an animation
-pam file - for importing static objects

Updated 2015-01-10:
-added pam importer

Updated 2015-01-06:
- added new animation importer
Can you please update the script? Its not working with many models in new recent game version
---------------------------------

Extracting and converting models from games.
Visit my Deviantart for my works:

TheForgottenSaint47

jreyesl85
ultra-n00b
Posts: 2
Joined: Wed Sep 28, 2016 3:05 am

Re: Black Desert Online File Formats (PAB, PAC, PAA)

Post by jreyesl85 » Sun Mar 24, 2019 4:26 pm

I used the method halftofloat from PAZ unpacker code to get 4bytes float values from 2bytes data representing float values
It worked for both formats PAC an PAB, even PAA keyframe values seem normal values but rotation and translation are quite weird, you can see tha t is moving but with an unacceptable result. Hope this put some light into this matter

jreyesl85
ultra-n00b
Posts: 2
Joined: Wed Sep 28, 2016 3:05 am

Re: Black Desert Online File Formats (PAB, PAC, PAA)

Post by jreyesl85 » Sun Mar 24, 2019 4:30 pm

public ushort FloatToHalf(float float32)
{
int si32 = BitConverter.ToInt32(BitConverter.GetBytes(float32),0);
int num1 = si32 >> 16 & 32768;
int num2 = (si32 >> 23 & (int) byte.MaxValue) - 112;
int num3 = si32 & 8388607;
if (num2 <= 0)
{
if (num2 < -10)
return (ushort) num1;
int num4 = num3 | 8388608;
int num5 = 14 - num2;
int num6 = (1 << num5 - 1) - 1;
int num7 = num4 >> num5 & 1;
int num8 = num4 + num6 + num7 >> num5;
return (ushort) (num1 | num8);
}
if (num2 == 143)
{
if (num3 == 0)
return (ushort) (num1 | 31744);
int num4 = num3 >> 13;
return (ushort) (num1 | 31744 | num4 | (num4 == 0 ? 1 : 0));
}
int num9 = num3 + 4095 + (num3 >> 13 & 1);
if ((num9 & 8388608) != 0)
{
num9 = 0;
++num2;
}
if (num2 > 30)
throw new ArithmeticException("Half: Hardware floating-point overflow.");
return (ushort) (num1 | num2 << 10 | num9 >> 13);
}
//---------------------------------------------
public float HalfToFloat(ushort ui16)
{
int num1 = (int)ui16 >> 15 & 1;
int num2 = (int)ui16 >> 10 & 31;
int num3 = (int)ui16 & 1023;
if (num2 == 0)
{
if (num3 == 0)
return num1 << 31;
while ((num3 & 1024) == 0)
{
num3 <<= 1;
--num2;
}
++num2;
num3 &= -1025;
}
else if (num2 == 31)
{
if (num3 == 0)
return num1 << 31 | 2139095040;
return num1 << 31 | 2139095040 | num3 << 13;
}
int num4 = num2 + 112;
int num5 = num3 << 13;
int bytes = num1 << 31 | num4 << 23 | num5;
return BitConverter.ToSingle(BitConverter.GetBytes(bytes), 0);
}

Post Reply