MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / xMorphSeqSetup

Function xMorphSeqSetup

src/SB/Core/x/xMorph.cpp:8–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6#include <string.h>
7
8xMorphSeqFile* xMorphSeqSetup(void* data, xMorphFindAssetCallback FindAssetCB)
9{
10 S32 i, j;
11 RpAtomic* model;
12 xMorphTargetFile* mphtgt;
13 xMorphSeqFile* header;
14 F32* timelist;
15 xMorphFrame* framelist;
16 U32* assetlist;
17 char* namelist;
18 void* assetPtr;
19 U32 skipsize;
20
21 header = (xMorphSeqFile*)data;
22 timelist = (F32*)(header + 1);
23 framelist = (xMorphFrame*)(timelist + header->TimeCount);
24 assetlist = (U32*)(framelist + header->TimeCount);
25 namelist = (char*)(assetlist + header->ModelCount * 2);
26
27 if (header->Flags & 0x80000000) {
28 return header;
29 }
30
31 header->Flags |= 0x80000000;
32 if (!(header->Flags & 0x1)) {
33 namelist = NULL;
34 }
35
36 for (i = 0; i < (S32)header->ModelCount * 2; i++) {
37 if (assetlist[i]) {
38 assetPtr = FindAssetCB(assetlist[i], namelist);
39 assetlist[i] = (U32)assetPtr;
40 }
41 if (namelist) {
42 namelist = strlen(namelist) + 1 + namelist;
43 }
44 }
45
46 for (i = 0; i < (S32)header->ModelCount; i++) {
47 if (assetlist[i*2+1]) {
48 model = (RpAtomic*)assetlist[i*2];
49 mphtgt = (xMorphTargetFile*)assetlist[i*2+1];
50 iMorphOptimize(model, mphtgt->Flags & 0x1);
51 }
52 }
53
54 for (i = 0; i < (S32)header->TimeCount; i++) {
55 model = (RpAtomic*)assetlist[(U32)framelist[i].Model*2];
56 mphtgt = (xMorphTargetFile*)assetlist[(U32)framelist[i].Model*2+1];
57 framelist[i].Model = model;
58 for (j = 0; j < 4; j++) {
59 if ((U32)framelist[i].Targets[j] + 0x10000 == 0xFFFF) {
60 framelist[i].Targets[j] = NULL;
61 } else {
62 skipsize = (mphtgt->NumVerts * 3 + 7) & ~7;
63 if (mphtgt->Flags & 0x1) {
64 skipsize *= 2;
65 }

Callers 1

ATBL_ReadFunction · 0.50

Calls 2

FindAssetCBFunction · 0.50
iMorphOptimizeFunction · 0.50

Tested by

no test coverage detected