| 88 | } |
| 89 | |
| 90 | void cOriginalMap::loadCF1Spt(tSharedBuffer pSpriteData, bool pCF2) { |
| 91 | tool_EndianSwap((uint8*)pSpriteData->data(), pSpriteData->size()); |
| 92 | |
| 93 | uint16* SptPtr = (uint16*)pSpriteData->data(); |
| 94 | uint16* SptFileEnd = SptPtr + (pSpriteData->size() / 2); |
| 95 | |
| 96 | size_t Sprites = pSpriteData->size() / 8; |
| 97 | mSprites.resize(Sprites < g_Fodder->mParams->mSpritesMax ? g_Fodder->mParams->mSpritesMax : Sprites); |
| 98 | sSprite* Sprite = mSprites.data(); |
| 99 | |
| 100 | |
| 101 | for (uint16 HumanCount = 0; SptPtr != SptFileEnd; ++Sprite) { |
| 102 | ++SptPtr; |
| 103 | Sprite->field_8 = 0x7C; |
| 104 | |
| 105 | uint16 ax = HumanCount / 8; |
| 106 | Sprite->field_32 = ax; |
| 107 | ++SptPtr; |
| 108 | |
| 109 | ax = SptPtr[0]; |
| 110 | ++SptPtr; |
| 111 | Sprite->field_0 = ax + 0x10; |
| 112 | Sprite->field_26 = ax + 0x10; |
| 113 | |
| 114 | ax = SptPtr[0]; |
| 115 | ++SptPtr; |
| 116 | Sprite->field_4 = ax; |
| 117 | Sprite->field_28 = ax; |
| 118 | |
| 119 | ax = SptPtr[0]; |
| 120 | ++SptPtr; |
| 121 | Sprite->field_18 = ax; |
| 122 | |
| 123 | // 114B |
| 124 | |
| 125 | // HACK: Some SPT files don't contain enough null sprites between entries |
| 126 | // This causes some sprites to be overwritten by null/lights on later missions in CF2 |
| 127 | if (pCF2) { |
| 128 | if (Sprite > mSprites.data()) |
| 129 | if (Sprite->field_18 == 4 && (Sprite - 1)->field_18 >= 114 && (Sprite - 1)->field_18 <= 117) { |
| 130 | ++Sprite; |
| 131 | } |
| 132 | } |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | bool cOriginalMap::load(tSharedBuffer pMapFile, tSharedBuffer pSptFile, const bool pCF2) { |
| 137 | loadCF1Map(pMapFile); |
nothing calls this directly
no test coverage detected