Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

[PC] Aliens versus Predator 2 (2001) .abc / .dat

Featured Replies

  • Localization

What is LithExport.dll and is it possible to decompile this plugin to port to 3ds Max or Blender and is it part of AVP2 toolkit, and is there a way to export custom character meshes ABCs?

Here is the AVP2 toolkit download link: https://www.moddb.com/games/aliens-vs-predator-2/downloads/avp2-official-tools

Samples: https://drive.google.com/file/d/1ElgjCPgYsxZyCxAZOKbPsWNIZqZ2j_3w/view?usp=sharing

https://drive.google.com/file/d/1-38_A_7s15zy63WzxA-8LSD822mkXicB/view?usp=sharing

avp2modelexportplugins.zip pc_abc.bt

Edited by mrmaller1905

  • Supporter
47 minutes ago, mrmaller1905 said:

What is LithExport.dll and is it possible to decompile this plugin

 

Quote

Quote from internet:

Legality and Ethics: Decompiling software may be restricted by licensing agreements or copyright laws. Ensure you have the legal right or permission to decompile the specific DLL file, especially if it is proprietary commercial software.

Quote

mrmaller1905 said:

and is there a way to export custom character meshes ABCs?

Did you try out the bt (binary template) on an ABC sample using the 010 editor?

Edited by shak-otay

  • Author
  • Localization
47 minutes ago, shak-otay said:

Did you try out the bt (binary template) on an ABC sample using the 010 editor?

Sure, here is the result I parsed and exported to CSV using 010 Editor.

Name,Value,Start,Size,Type,Color,Comment
section,,0h,Ch,struct Section,Fg: Bg:,
stringLength,6,0h,2h,short,Fg: Bg:,
Type[6],Header,2h,6h,char,Fg: Bg:,
Type[0],72 'H',2h,1h,char,Fg: Bg:,
Type[1],101 'e',3h,1h,char,Fg: Bg:,
Type[2],97 'a',4h,1h,char,Fg: Bg:,
Type[3],100 'd',5h,1h,char,Fg: Bg:,
Type[4],101 'e',6h,1h,char,Fg: Bg:,
Type[5],114 'r',7h,1h,char,Fg: Bg:,
NextSection,217,8h,4h,uint32,Fg: Bg:,
hdr,,Ch,CDh,struct Header,Fg: Bg:,
Version,12,Ch,4h,uint32,Fg: Bg:,
KeyframeCount,2,10h,4h,uint32,Fg: Bg:,
AnimationCount,2,14h,4h,uint32,Fg: Bg:,
NodeCount,27,18h,4h,uint32,Fg: Bg:,
PieceCount,15,1Ch,4h,uint32,Fg: Bg:,
ChildModelCount,9,20h,4h,uint32,Fg: Bg:,
FaceCount,4555,24h,4h,uint32,Fg: Bg:,
VertexCount,2612,28h,4h,uint32,Fg: Bg:,
WeightCount,4113,2Ch,4h,uint32,Fg: Bg:,
LODCount,5,30h,4h,uint32,Fg: Bg:,
SocketCount,19,34h,4h,uint32,Fg: Bg:,
WeightSetCount,35,38h,4h,uint32,Fg: Bg:,
StringCount,38,3Ch,4h,uint32,Fg: Bg:,
StringLengthTotal,577,40h,4h,uint32,Fg: Bg:,
CommandString,,44h,41h,struct LTString,Fg: Bg:,
stringLength,63,44h,2h,short,Fg: Bg:,
Type[63],NormalRef Right_armu_shoulder_node Dims_Default; ShadowEnable; ,46h,3Fh,char,Fg: Bg:,
Type[0],78 'N',46h,1h,char,Fg: Bg:,
Type[1],111 'o',47h,1h,char,Fg: Bg:,
Type[2],114 'r',48h,1h,char,Fg: Bg:,
Type[3],109 'm',49h,1h,char,Fg: Bg:,
Type[4],97 'a',4Ah,1h,char,Fg: Bg:,
Type[5],108 'l',4Bh,1h,char,Fg: Bg:,
Type[6],82 'R',4Ch,1h,char,Fg: Bg:,
Type[7],101 'e',4Dh,1h,char,Fg: Bg:,
Type[8],102 'f',4Eh,1h,char,Fg: Bg:,
Type[9],32 ' ',4Fh,1h,char,Fg: Bg:,
Type[10],82 'R',50h,1h,char,Fg: Bg:,
Type[11],105 'i',51h,1h,char,Fg: Bg:,
Type[12],103 'g',52h,1h,char,Fg: Bg:,
Type[13],104 'h',53h,1h,char,Fg: Bg:,
Type[14],116 't',54h,1h,char,Fg: Bg:,
Type[15],95 '_',55h,1h,char,Fg: Bg:,
Type[16],97 'a',56h,1h,char,Fg: Bg:,
Type[17],114 'r',57h,1h,char,Fg: Bg:,
Type[18],109 'm',58h,1h,char,Fg: Bg:,
Type[19],117 'u',59h,1h,char,Fg: Bg:,
Type[20],95 '_',5Ah,1h,char,Fg: Bg:,
Type[21],115 's',5Bh,1h,char,Fg: Bg:,
Type[22],104 'h',5Ch,1h,char,Fg: Bg:,
Type[23],111 'o',5Dh,1h,char,Fg: Bg:,
Type[24],117 'u',5Eh,1h,char,Fg: Bg:,
Type[25],108 'l',5Fh,1h,char,Fg: Bg:,
Type[26],100 'd',60h,1h,char,Fg: Bg:,
Type[27],101 'e',61h,1h,char,Fg: Bg:,
Type[28],114 'r',62h,1h,char,Fg: Bg:,
Type[29],95 '_',63h,1h,char,Fg: Bg:,
Type[30],110 'n',64h,1h,char,Fg: Bg:,
Type[31],111 'o',65h,1h,char,Fg: Bg:,
Type[32],100 'd',66h,1h,char,Fg: Bg:,
Type[33],101 'e',67h,1h,char,Fg: Bg:,
Type[34],32 ' ',68h,1h,char,Fg: Bg:,
Type[35],68 'D',69h,1h,char,Fg: Bg:,
Type[36],105 'i',6Ah,1h,char,Fg: Bg:,
Type[37],109 'm',6Bh,1h,char,Fg: Bg:,
Type[38],115 's',6Ch,1h,char,Fg: Bg:,
Type[39],95 '_',6Dh,1h,char,Fg: Bg:,
Type[40],68 'D',6Eh,1h,char,Fg: Bg:,
Type[41],101 'e',6Fh,1h,char,Fg: Bg:,
Type[42],102 'f',70h,1h,char,Fg: Bg:,
Type[43],97 'a',71h,1h,char,Fg: Bg:,
Type[44],117 'u',72h,1h,char,Fg: Bg:,
Type[45],108 'l',73h,1h,char,Fg: Bg:,
Type[46],116 't',74h,1h,char,Fg: Bg:,
Type[47],59 ';',75h,1h,char,Fg: Bg:,
Type[48],32 ' ',76h,1h,char,Fg: Bg:,
Type[49],83 'S',77h,1h,char,Fg: Bg:,
Type[50],104 'h',78h,1h,char,Fg: Bg:,
Type[51],97 'a',79h,1h,char,Fg: Bg:,
Type[52],100 'd',7Ah,1h,char,Fg: Bg:,
Type[53],111 'o',7Bh,1h,char,Fg: Bg:,
Type[54],119 'w',7Ch,1h,char,Fg: Bg:,
Type[55],69 'E',7Dh,1h,char,Fg: Bg:,
Type[56],110 'n',7Eh,1h,char,Fg: Bg:,
Type[57],97 'a',7Fh,1h,char,Fg: Bg:,
Type[58],98 'b',80h,1h,char,Fg: Bg:,
Type[59],108 'l',81h,1h,char,Fg: Bg:,
Type[60],101 'e',82h,1h,char,Fg: Bg:,
Type[61],59 ';',83h,1h,char,Fg: Bg:,
Type[62],32 ' ',84h,1h,char,Fg: Bg:,
InternalRadius,386.3593,85h,4h,float,Fg: Bg:,
LODDistanceCount,4,89h,4h,uint32,Fg: Bg:,
Padding[60],,8Dh,3Ch,char,Fg: Bg:,
Padding[0],0,8Dh,1h,char,Fg: Bg:,
Padding[1],0,8Eh,1h,char,Fg: Bg:,
Padding[2],0,8Fh,1h,char,Fg: Bg:,
Padding[3],0,90h,1h,char,Fg: Bg:,
Padding[4],0,91h,1h,char,Fg: Bg:,
Padding[5],0,92h,1h,char,Fg: Bg:,
Padding[6],0,93h,1h,char,Fg: Bg:,
Padding[7],0,94h,1h,char,Fg: Bg:,
Padding[8],0,95h,1h,char,Fg: Bg:,
Padding[9],0,96h,1h,char,Fg: Bg:,
Padding[10],0,97h,1h,char,Fg: Bg:,
Padding[11],0,98h,1h,char,Fg: Bg:,
Padding[12],0,99h,1h,char,Fg: Bg:,
Padding[13],0,9Ah,1h,char,Fg: Bg:,
Padding[14],0,9Bh,1h,char,Fg: Bg:,
Padding[15],0,9Ch,1h,char,Fg: Bg:,
Padding[16],0,9Dh,1h,char,Fg: Bg:,
Padding[17],0,9Eh,1h,char,Fg: Bg:,
Padding[18],0,9Fh,1h,char,Fg: Bg:,
Padding[19],0,A0h,1h,char,Fg: Bg:,
Padding[20],0,A1h,1h,char,Fg: Bg:,
Padding[21],0,A2h,1h,char,Fg: Bg:,
Padding[22],0,A3h,1h,char,Fg: Bg:,
Padding[23],0,A4h,1h,char,Fg: Bg:,
Padding[24],0,A5h,1h,char,Fg: Bg:,
Padding[25],0,A6h,1h,char,Fg: Bg:,
Padding[26],0,A7h,1h,char,Fg: Bg:,
Padding[27],0,A8h,1h,char,Fg: Bg:,
Padding[28],0,A9h,1h,char,Fg: Bg:,
Padding[29],0,AAh,1h,char,Fg: Bg:,
Padding[30],0,ABh,1h,char,Fg: Bg:,
Padding[31],0,ACh,1h,char,Fg: Bg:,
Padding[32],0,ADh,1h,char,Fg: Bg:,
Padding[33],0,AEh,1h,char,Fg: Bg:,
Padding[34],0,AFh,1h,char,Fg: Bg:,
Padding[35],0,B0h,1h,char,Fg: Bg:,
Padding[36],0,B1h,1h,char,Fg: Bg:,
Padding[37],0,B2h,1h,char,Fg: Bg:,
Padding[38],0,B3h,1h,char,Fg: Bg:,
Padding[39],0,B4h,1h,char,Fg: Bg:,
Padding[40],0,B5h,1h,char,Fg: Bg:,
Padding[41],0,B6h,1h,char,Fg: Bg:,
Padding[42],0,B7h,1h,char,Fg: Bg:,
Padding[43],0,B8h,1h,char,Fg: Bg:,
Padding[44],0,B9h,1h,char,Fg: Bg:,
Padding[45],0,BAh,1h,char,Fg: Bg:,
Padding[46],0,BBh,1h,char,Fg: Bg:,
Padding[47],0,BCh,1h,char,Fg: Bg:,
Padding[48],0,BDh,1h,char,Fg: Bg:,
Padding[49],0,BEh,1h,char,Fg: Bg:,
Padding[50],0,BFh,1h,char,Fg: Bg:,
Padding[51],0,C0h,1h,char,Fg: Bg:,
Padding[52],0,C1h,1h,char,Fg: Bg:,
Padding[53],0,C2h,1h,char,Fg: Bg:,
Padding[54],0,C3h,1h,char,Fg: Bg:,
Padding[55],0,C4h,1h,char,Fg: Bg:,
Padding[56],0,C5h,1h,char,Fg: Bg:,
Padding[57],0,C6h,1h,char,Fg: Bg:,
Padding[58],0,C7h,1h,char,Fg: Bg:,
Padding[59],0,C8h,1h,char,Fg: Bg:,
LODDistances[4],,C9h,10h,float,Fg: Bg:,
LODDistances[0],300,C9h,4h,float,Fg: Bg:,
LODDistances[1],600,CDh,4h,float,Fg: Bg:,
LODDistances[2],1000,D1h,4h,float,Fg: Bg:,
LODDistances[3],1500,D5h,4h,float,Fg: Bg:,
pieceSection,,D9h,Ch,struct Section,Fg: Bg:,
stringLength,6,D9h,2h,short,Fg: Bg:,
Type[6],Pieces,DBh,6h,char,Fg: Bg:,
Type[0],80 'P',DBh,1h,char,Fg: Bg:,
Type[1],105 'i',DCh,1h,char,Fg: Bg:,
Type[2],101 'e',DDh,1h,char,Fg: Bg:,
Type[3],99 'c',DEh,1h,char,Fg: Bg:,
Type[4],101 'e',DFh,1h,char,Fg: Bg:,
Type[5],115 's',E0h,1h,char,Fg: Bg:,
NextSection,293252,E1h,4h,uint32,Fg: Bg:,
piece,,E5h,4789Fh,struct PieceHeader,Fg: Bg:,
WeightCount,4113,E5h,4h,uint32,Fg: Bg:,
PieceCount,15,E9h,4h,uint32,Fg: Bg:,
Pieces[15],,EDh,47897h,struct Piece,Fg: Bg:,
Pieces[0],,EDh,18F8Bh,struct Piece,Fg: Bg:,
MaterialIndex,0,EDh,2h,uint16,Fg: Bg:,
SpecularPower,5,EFh,4h,float,Fg: Bg:,
SpecularScale,1,F3h,4h,float,Fg: Bg:,
LODWeight,3,F7h,4h,float,Fg: Bg:,
Unknown,0,FBh,2h,uint16,Fg: Bg:,
Name,,FDh,7h,struct LTString,Fg: Bg:,
stringLength,5,FDh,2h,short,Fg: Bg:,
Type[5],Torso,FFh,5h,char,Fg: Bg:,
Type[0],84 'T',FFh,1h,char,Fg: Bg:,
Type[1],111 'o',100h,1h,char,Fg: Bg:,
Type[2],114 'r',101h,1h,char,Fg: Bg:,
Type[3],115 's',102h,1h,char,Fg: Bg:,
Type[4],111 'o',103h,1h,char,Fg: Bg:,
LODs[5],,104h,18F74h,struct LOD,Fg: Bg:,
LODs[0],,104h,688Ch,struct LOD,Fg: Bg:,
FaceCount,430,104h,4h,uint32,Fg: Bg:,
Faces[430],,108h,3264h,struct Face,Fg: Bg:,
Faces[0],,108h,1Eh,struct Face,Fg: Bg:,
Vertices[3],,108h,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,108h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,108h,8h,struct LTTexCoord,Fg: Bg:,
u,0.788496,108h,4h,float,Fg: Bg:,
v,0.6695881,10Ch,4h,float,Fg: Bg:,
VertexIndex,105,110h,2h,uint16,Fg: Bg:,
Vertices[1],,112h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,112h,8h,struct LTTexCoord,Fg: Bg:,
u,0.7709522,112h,4h,float,Fg: Bg:,
v,0.7941003,116h,4h,float,Fg: Bg:,
VertexIndex,61,11Ah,2h,uint16,Fg: Bg:,
Vertices[2],,11Ch,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,11Ch,8h,struct LTTexCoord,Fg: Bg:,
u,0.7183208,11Ch,4h,float,Fg: Bg:,
v,0.676167,120h,4h,float,Fg: Bg:,
VertexIndex,97,124h,2h,uint16,Fg: Bg:,
Faces[1],,126h,1Eh,struct Face,Fg: Bg:,
Vertices[3],,126h,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,126h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,126h,8h,struct LTTexCoord,Fg: Bg:,
u,0.7007771,126h,4h,float,Fg: Bg:,
v,0.7083306,12Ah,4h,float,Fg: Bg:,
VertexIndex,101,12Eh,2h,uint16,Fg: Bg:,
Vertices[1],,130h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,130h,8h,struct LTTexCoord,Fg: Bg:,
u,0.7183208,130h,4h,float,Fg: Bg:,
v,0.676167,134h,4h,float,Fg: Bg:,
VertexIndex,97,138h,2h,uint16,Fg: Bg:,
Vertices[2],,13Ah,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,13Ah,8h,struct LTTexCoord,Fg: Bg:,
u,0.7709522,13Ah,4h,float,Fg: Bg:,
v,0.7941003,13Eh,4h,float,Fg: Bg:,
VertexIndex,61,142h,2h,uint16,Fg: Bg:,
Faces[2],,144h,1Eh,struct Face,Fg: Bg:,
Vertices[3],,144h,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,144h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,144h,8h,struct LTTexCoord,Fg: Bg:,
u,0.7709522,144h,4h,float,Fg: Bg:,
v,0.7941003,148h,4h,float,Fg: Bg:,
VertexIndex,61,14Ch,2h,uint16,Fg: Bg:,
Vertices[1],,14Eh,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,14Eh,8h,struct LTTexCoord,Fg: Bg:,
u,0.709549,14Eh,4h,float,Fg: Bg:,
v,0.8155427,152h,4h,float,Fg: Bg:,
VertexIndex,70,156h,2h,uint16,Fg: Bg:,
Vertices[2],,158h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,158h,8h,struct LTTexCoord,Fg: Bg:,
u,0.7007771,158h,4h,float,Fg: Bg:,
v,0.7083306,15Ch,4h,float,Fg: Bg:,
VertexIndex,101,160h,2h,uint16,Fg: Bg:,
Faces[3],,162h,1Eh,struct Face,Fg: Bg:,
Vertices[3],,162h,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,162h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,162h,8h,struct LTTexCoord,Fg: Bg:,
u,0.7007771,162h,4h,float,Fg: Bg:,
v,0.7083306,166h,4h,float,Fg: Bg:,
VertexIndex,101,16Ah,2h,uint16,Fg: Bg:,
Vertices[1],,16Ch,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,16Ch,8h,struct LTTexCoord,Fg: Bg:,
u,0.709549,16Ch,4h,float,Fg: Bg:,
v,0.8155427,170h,4h,float,Fg: Bg:,
VertexIndex,70,174h,2h,uint16,Fg: Bg:,
Vertices[2],,176h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,176h,8h,struct LTTexCoord,Fg: Bg:,
u,0.6871319,176h,4h,float,Fg: Bg:,
v,0.7787495,17Ah,4h,float,Fg: Bg:,
VertexIndex,60,17Eh,2h,uint16,Fg: Bg:,
Faces[4],,180h,1Eh,struct Face,Fg: Bg:,
Vertices[3],,180h,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,180h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,180h,8h,struct LTTexCoord,Fg: Bg:,
u,0.9025307,180h,4h,float,Fg: Bg:,
v,0.7512155,184h,4h,float,Fg: Bg:,
VertexIndex,111,188h,2h,uint16,Fg: Bg:,
Vertices[1],,18Ah,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,18Ah,8h,struct LTTexCoord,Fg: Bg:,
u,0.8674431,18Ah,4h,float,Fg: Bg:,
v,0.8048215,18Eh,4h,float,Fg: Bg:,
VertexIndex,47,192h,2h,uint16,Fg: Bg:,
Vertices[2],,194h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,194h,8h,struct LTTexCoord,Fg: Bg:,
u,0.8323555,194h,4h,float,Fg: Bg:,
v,0.7512155,198h,4h,float,Fg: Bg:,
VertexIndex,71,19Ch,2h,uint16,Fg: Bg:,
Faces[5],,19Eh,1Eh,struct Face,Fg: Bg:,
Vertices[3],,19Eh,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,19Eh,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,19Eh,8h,struct LTTexCoord,Fg: Bg:,
u,0.8323555,19Eh,4h,float,Fg: Bg:,
v,0.7512155,1A2h,4h,float,Fg: Bg:,
VertexIndex,71,1A6h,2h,uint16,Fg: Bg:,
Vertices[1],,1A8h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1A8h,8h,struct LTTexCoord,Fg: Bg:,
u,0.788496,1A8h,4h,float,Fg: Bg:,
v,0.6695881,1ACh,4h,float,Fg: Bg:,
VertexIndex,105,1B0h,2h,uint16,Fg: Bg:,
Vertices[2],,1B2h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1B2h,8h,struct LTTexCoord,Fg: Bg:,
u,0.8586712,1B2h,4h,float,Fg: Bg:,
v,0.6773853,1B6h,4h,float,Fg: Bg:,
VertexIndex,98,1BAh,2h,uint16,Fg: Bg:,
Faces[6],,1BCh,1Eh,struct Face,Fg: Bg:,
Vertices[3],,1BCh,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,1BCh,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1BCh,8h,struct LTTexCoord,Fg: Bg:,
u,0.9025307,1BCh,4h,float,Fg: Bg:,
v,0.7512155,1C0h,4h,float,Fg: Bg:,
VertexIndex,111,1C4h,2h,uint16,Fg: Bg:,
Vertices[1],,1C6h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1C6h,8h,struct LTTexCoord,Fg: Bg:,
u,0.9113026,1C6h,4h,float,Fg: Bg:,
v,0.8048215,1CAh,4h,float,Fg: Bg:,
VertexIndex,46,1CEh,2h,uint16,Fg: Bg:,
Vertices[2],,1D0h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1D0h,8h,struct LTTexCoord,Fg: Bg:,
u,0.8674431,1D0h,4h,float,Fg: Bg:,
v,0.8048215,1D4h,4h,float,Fg: Bg:,
VertexIndex,47,1D8h,2h,uint16,Fg: Bg:,
Faces[7],,1DAh,1Eh,struct Face,Fg: Bg:,
Vertices[3],,1DAh,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,1DAh,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1DAh,8h,struct LTTexCoord,Fg: Bg:,
u,0.8323555,1DAh,4h,float,Fg: Bg:,
v,0.7512155,1DEh,4h,float,Fg: Bg:,
VertexIndex,71,1E2h,2h,uint16,Fg: Bg:,
Vertices[1],,1E4h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1E4h,8h,struct LTTexCoord,Fg: Bg:,
u,0.8060398,1E4h,4h,float,Fg: Bg:,
v,0.8477063,1E8h,4h,float,Fg: Bg:,
VertexIndex,38,1ECh,2h,uint16,Fg: Bg:,
Vertices[2],,1EEh,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1EEh,8h,struct LTTexCoord,Fg: Bg:,
u,0.7709522,1EEh,4h,float,Fg: Bg:,
v,0.7941003,1F2h,4h,float,Fg: Bg:,
VertexIndex,61,1F6h,2h,uint16,Fg: Bg:,
Faces[8],,1F8h,1Eh,struct Face,Fg: Bg:,
Vertices[3],,1F8h,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,1F8h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,1F8h,8h,struct LTTexCoord,Fg: Bg:,
u,0.9756298,1F8h,4h,float,Fg: Bg:,
v,0.8177357,1FCh,4h,float,Fg: Bg:,
VertexIndex,44,200h,2h,uint16,Fg: Bg:,
Vertices[1],,202h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,202h,8h,struct LTTexCoord,Fg: Bg:,
u,0.9025307,202h,4h,float,Fg: Bg:,
v,0.7512155,206h,4h,float,Fg: Bg:,
VertexIndex,111,20Ah,2h,uint16,Fg: Bg:,
Vertices[2],,20Ch,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,20Ch,8h,struct LTTexCoord,Fg: Bg:,
u,0.9288464,20Ch,4h,float,Fg: Bg:,
v,0.7163715,210h,4h,float,Fg: Bg:,
VertexIndex,109,214h,2h,uint16,Fg: Bg:,
Faces[9],,216h,1Eh,struct Face,Fg: Bg:,
Vertices[3],,216h,1Eh,struct FaceVertex,Fg: Bg:,
Vertices[0],,216h,Ah,struct FaceVertex,Fg: Bg:,
TexCoord,,216h,8h,struct LTTexCoord,Fg: Bg:,
u,0.9025307,216h,4h,float,Fg: Bg:,

 

bandicam 2026-01-14 12-32-42-380.jpg

harris_fileformatspecresults.zip

Edited by mrmaller1905

  • Supporter

uvs are easy to get:

mesh_viewer_harris_uvsH.png.6a8957a22491dee95ea7c93bd9b49108.png

If you own AvP2 you should install the avp2 tools.

edit: because, meshes are harder to obtain and I fear I'm lacking the time...

blender_point_cloud.png.ac5dbf7fbc088991d175df7bcea217b1.png

But there's a .ABC importer for blender from Colin Basnet and HeyJake.

 

Quote

and is there a way to export custom character meshes ABCs?

Wait, you want to export to .ABC?

Edited by shak-otay

  • Author
  • Localization
On 1/14/2026 at 4:46 PM, shak-otay said:

uvs are easy to get:

mesh_viewer_harris_uvsH.png.6a8957a22491dee95ea7c93bd9b49108.png

If you own AvP2 you should install the avp2 tools.

edit: because, meshes are harder to obtain and I fear I'm lacking the time...

blender_point_cloud.png.ac5dbf7fbc088991d175df7bcea217b1.png

But there's a .ABC importer for blender from Colin Basnet and HeyJake.

 

Wait, you want to export to .ABC?

Yes I can export custom character models ABC files using the Softimage 3D v3.7 / v3.9 plugin LithExport.dll.

 

Quote from official AVP2 modding tutorial documentation:

Quote

 

Creating Models

This is broad overview of modeling for LithTech. This chapter will cover model creation as it pertains to LithTech in a very abstract term.

Creating models for LithTech is conceptually pretty straightforward: First, use a modeling package to create a polygonal mesh model and "skin" it over a bone hierarchy. Skinning involves weighting each vertex of the mesh to one or more bones. Afterwards, select a texture for the model, apply UV texture coordinates to it, and animate its bones. The resulting model is ready to export.

The geometric center of the model should be at the origin. For human character models, for example, this would be the pelvis. The model can be made up of one or more meshes. Generally, splitting up models helps make UV mapping easier and can create reusable parts such as hands, feet and so on. The UV mapping of a model has to be done in the modeling package.

All textures in LithTech are 32-bit by default and their size must be a power of 2.

Textures and material values are not explicitly assigned in the modeler, except for UVW Mapping. LithTech uses a special mesh naming convention to associate a texture index to a mesh in the engine. This index will later be used in either game code or DEdit to assign a texture name to the models. The mesh name should take the form meshname_zTex#. The "#" represents the texture index and "_zTex" is the key that must be in the name. For example, a piece named "lower_body_zTex0" will be assigned texture map index 0, while "head_zTex1" will have index 1. Texture indexes correspond to the indexes on your model's different meshes. This way, the game programmer or the level designer controls explicit texture assignment for each mesh in a model. For the current release, there can be only two texture maps per model.

All surface material properties defined in the modeling package are ignored in the exporter. Vertex colors, lighting etc are lost in the conversion, except for UVW Mapping.

Use DEdit to convert images into the DTX format required for the game. DEdit can understand and import .PCX or .TGA files. The advantage to using a .TGA file is that since Targa files have a built-in alpha channel, DEdit can automatically generate an alpha mask for the texture without the need to import a second file as your alpha mask. .PCX files require a second file for their alpha mask, adding a second step and a second file to keep track of.

If you want models to share animations, then all models sharing a set of animations should have the exact same hierarchy. This is very important. Differently organized hierarchies cannot share animations. The skeleton offsets should be similar, but do not have to be exact. There are problems using animation from a short character on a tall character, but most things like walks, runs, and general hand movement work fine. The biggest problem is two characters with different shoulder/arm proportions sharing an animation that requires using two hands together, like holding a rifle, or even something like clapping hands. This will almost never work right, but LithTech supports overriding a shared animation on a per-character basis, so it can be worked around. Remember that you cannot scale bones.

An important concept to remember about the .abc file format is that it is a database that contains the model's geometry, bone hierarchy, level of detail information, and mode. The model database can refer to other files, especially if many models share the same set of animations.

All of the models in AVP2 were created to be exported from Softimage 3.7 and 3.9 using our Softimage exporter.

 

 

 

Quote

 

Setting up a Character

The steps below will walk through the character creation process for Aliens vs. Predator 2. All the characters in AVP2 were created in Softimage. This is the only package for which we have a reliable AVP2 exporter.

All the human characters in AVP2 have the same skeletal hierarchy. This allows animations to be universally shared. Another guideline for sharing animations is to keep their height within a range of about 15%. Having extra tall or short characters will cause strange floating when using a shared animation.

If exporters become available for other animation/modeling packages, the exported skeleton will still need to match the existing AVP2 skeleton in order to share animations. This will require some trial and error experimentation.

If you'd rather use a different skeleton (like for a ponytail...) then you will need to redo all of the animations used by that character.

All characters used in AVP2 were modeled using 1000-1500 triangles.

All texture mapping for AVP2 was done in Softimage. Each character uses two to four texture maps: a 256x256 map for the body and a 128x128 one for the head. These should be saved as 32 bit .tga files. They are converted in DEdit to .dtx files by going to the textures tab and importing the .tga files to AvP2/skins/characters/...

Any piece of model geometry that uses the head texture should be named with the extension '_zTex1', for example head_zTex1. If you don't do this, the head will default to the body texture.

When the skeleton is set up, use a node called 'Eyelid' to control vertices that allow blinking. It is important to name this bone correctly since the game code uses this node to tell what a character is looking at.

Any model that is going to use the AVP2 AI needs to be named in the same form as the characters that shipped with AVP2, such as drone.abc. There is no comprehensive list of appropriate character names, but looking at the file /AvP2/attributes/modelbutes.txt should point you in the right direction.

Textures should be named in the same form as the models. Head textures need the extension '_head', for example, drone_head.dtx.

In addition, DEdit contains a 'body skin extension' and 'head skin extension' that allows any extension to be added to the body name or replace '_head' in the head name.

Characters should be exported to the folder AvP2/models/characters.

After exporting a character, ModelEdit must be used to add several attributes including sockets, weight sets, LODs, user dims, and internal dims. Most of these can be imported from within. Just select File, then Import and select a similar character file, and then check the items you want to import.

Each file must contain 2 animations that determine the models bounding boxes for hit detection. Dims_Default is the standing dimensions and Dims_Crouch is for the crouching dimensions. The X & Z dimensions must be the same and must allow for passage through most openings in a level. For example most characters Dim_Default dimensions are X=15, Y=52, Z=15. The actual dims are double these values. Not setting dims results in a very long bounding box that will remind you that you didn't set them. All animations that come from a child model will use the dims from the child model.

14.   There are specific sockets which AVP2 looks for that appear on all the AVP2 characters. The best way to figure these out is to look at an existing character. The way they are named is self-explanatory. To create an individual socket, select the desired node and go to sockets>Add Socket. Name it so you know what it is.

Sockets are used to place attachments (such as guns, helmets, etc...) on characters. Select Options>Show Attachments and >Show Attachments. A multi colored axis will appear at each socket location. Double click on a socket name in the sockets window (like "right hand"). Browse to the location of attachment abc file and open it. Adjust its position and rotation using the colored buttons in the Transform Edit box, making sure 'socket' is selected first. Any model can be used as an attachment.

AVP2 characters use a lot of weight sets to allow morphing animations for up and down aims with guns and also for blending upper and lower body animations. These can be created individually, but it's a lot easier to just import them from an existing character. If you change skeletons, these will not import properly and will need to be created from scratch.

Most AVP2 characters have 4 levels of detail (LODs). These can often be imported from existing characters, but only from a character that has the same number of pieces. If your new character has more or less pieces than any of the existing AVP2 characters, you can still look at the LOD values of the existing characters and manually copy the values onto the new character.

In Model>Command String, Click the ShadowEnable checkbox. Enter Right_armu_shoulder_node in the first Normal Reference box, and Dims_Default in the second. This defines a source from which the model will be lit by model lights.

Another thing that must usually be done is to turn off the translation information from child models on most of the bones. This is done by checking the box next to each node name in the nodes window, except the first three. The top three should be left blank, since this is where all the translation takes place. Not doing this may result in strangely stretched or squished characters.

20.   All of the above steps are valid for both single and multi player characters. However, multiplayer characters use different animations than the single player ones and thus must be duplicated at this point. Place the copy in /Avp2/Models/Characters/MP. The child model animations are in this directory already.

After adding these animations, the internal radius must be set, and is most easily done by going to Model>Calc Internal Radius. This is a rendering optimization that must be done.

Any animation that is used by game code can be overridden by adding a '*' sign to the beginning of the animation name. Any animation that is named with some obscure code probably falls into this category. Some animations are scripted (called by the level designer rather than the program) and cannot be overridden, but must be either renamed or replaced on the desired character. An example of an override animation is on Femalelabtech.abc, where there is an override for the walk forward animation called *WF_PS1.

23.   Any model can be used as an attachment, but they cannot be animated themselves without specifically being called by the game code. To use an attachment in the game, update the file AvP2/attributes/attachments.txt. Copy and paste any attachment section to the end of the attachment list. Change the number and name to be appropriate for your new attachment. Also change the file paths to point to your attachment file and texture. These can be named however you want, and it's best to keep them in the /Avp2/Models/Attachments and skins/ folder. The attachment must now be added to the character in DEdit.

All AVP2 guns go in the RightHand socket. All hats go on the Helmet socket.

25.   Frame strings are added to provide animation based cues to the game code. For characters, the ones used are 'bute_sounds' for death sounds, 'FOOTSTEP_KEY' for footsteps. These are entered by going to the frame of animation where the incident occurs and typing the appropriate string in the Frame String box. These should usually be placed on the child models when possible so many characters can use them.

The simple animation editing features of ModelEdit can only be used on animations which are native to a model (not from a child model) and are pretty effectively described in the documentation below, with a couple of clarifications.

Use Animation>Set Animation Length to speed up or slow down an animation.

Use Animation>Set Animation Rate to get rid of frames in a really dense animation. This is mostly useful when dealing with motion capture which is at 30 frames/sec. Most animations look fine at 8-10 frames/sec using the linear interpolation of the engine.

Animation>Make Continuous is an easy way to get good cycling animations in some cases. Select an animation and delete the last couple of frames making a note of how much time is being cut by doing this. Then go to Make Continuous and enter the time that was noted above. This may need to be tweaked a little, but on animations that don't have a lot of action, usually this will give a good cycle.

 

 

Edited by mrmaller1905

  • Supporter
10 minutes ago, mrmaller1905 said:

Yes I can export custom character models ABC files using the Softimage 3D v3.7 / v3.9 plugin LithExport.dll.

So there is no need that someone is making an effort, is it?:classic_huh:

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.