| 481 | } |
| 482 | |
| 483 | xAnimFile* xAnimFileNewBilinear(void** rawData, const char* name, U32 flags, xAnimFile** linkedList, |
| 484 | U32 numX, U32 numY) |
| 485 | { |
| 486 | xAnimFile* afile; |
| 487 | if (gxAnimUseGrowAlloc) |
| 488 | { |
| 489 | afile = (xAnimFile*)xMemGrowAlloc(gActiveHeap, numX * numY * 4 + sizeof(xAnimFile)); |
| 490 | } |
| 491 | else |
| 492 | { |
| 493 | afile = (xAnimFile*)xMemAlloc(gActiveHeap, numX * numY * 4 + sizeof(xAnimFile), 0); |
| 494 | } |
| 495 | |
| 496 | if (numX > 1 || numY > 1) |
| 497 | { |
| 498 | flags |= 0x4000; |
| 499 | } |
| 500 | |
| 501 | if (**(U32**)rawData == 'QSPM') |
| 502 | { |
| 503 | flags |= 0x8000; |
| 504 | } |
| 505 | |
| 506 | if (linkedList != NULL) |
| 507 | { |
| 508 | afile->Next = *linkedList; |
| 509 | *linkedList = afile; |
| 510 | } |
| 511 | else |
| 512 | { |
| 513 | afile->Next = NULL; |
| 514 | } |
| 515 | |
| 516 | afile->RawData = (void**)&afile[1]; |
| 517 | for (S32 i = 0; i < (S32)numX * (S32)numY; ++i) |
| 518 | { |
| 519 | afile->RawData[i] = rawData[i]; |
| 520 | } |
| 521 | |
| 522 | afile->Name = name; |
| 523 | afile->ID = xStrHash(name); |
| 524 | afile->FileFlags = flags; |
| 525 | |
| 526 | F32 dur; |
| 527 | if (afile->FileFlags & 0x2000) |
| 528 | { |
| 529 | if (afile->FileFlags & 0x8000) |
| 530 | { |
| 531 | dur = xMorphSeqDuration(*(xMorphSeqFile**)afile->RawData); |
| 532 | } |
| 533 | else |
| 534 | { |
| 535 | dur = iAnimDuration(*afile->RawData); |
| 536 | } |
| 537 | dur = dur * 2.0f; |
| 538 | } |
| 539 | else if (afile->FileFlags & 0x8000) |
| 540 | { |
no test coverage detected