| 79 | } |
| 80 | |
| 81 | JASSimpleWaveBank *JASWSParser::createSimpleWaveBank(const void *ptr, JKRHeap *pHeap) |
| 82 | { |
| 83 | if (pHeap == NULL) |
| 84 | pHeap = JASDram; |
| 85 | |
| 86 | u32 oldSize = pHeap->getFreeSize(); |
| 87 | const THeader *headerPtr = (const THeader *)ptr; |
| 88 | TCtrlGroup *group = headerPtr->ctrlGroupOffset.ptr(headerPtr); |
| 89 | |
| 90 | if (group->ctrlGroupCount != 1) |
| 91 | return NULL; |
| 92 | |
| 93 | JASSimpleWaveBank *simpleBank = new (pHeap, 0) JASSimpleWaveBank(); |
| 94 | if (simpleBank == NULL) |
| 95 | return NULL; |
| 96 | |
| 97 | u32 waveTableSize = 0; |
| 98 | TCtrlScene *scene = group->ctrlSceneOffsets[0].ptr(headerPtr); |
| 99 | TCtrl *ctrl = scene->ctrlOffset.ptr(headerPtr); |
| 100 | TWaveArchiveBank *archiveBank = headerPtr->archiveBankOffset.ptr(headerPtr); |
| 101 | TWaveArchive *waveArchive = archiveBank->archiveOffsets[0].ptr(headerPtr); |
| 102 | |
| 103 | for (u32 i = 0; i < ctrl->waveCount; i++) |
| 104 | { |
| 105 | TCtrlWave *ctrlWave = ctrl->ctrlWaveOffsets[i].ptr(headerPtr); |
| 106 | u16 tableSize = JSULoHalf(ctrlWave->tableSize); |
| 107 | if (waveTableSize < tableSize) |
| 108 | { |
| 109 | waveTableSize = tableSize; |
| 110 | } |
| 111 | } |
| 112 | |
| 113 | simpleBank->setWaveTableSize(waveTableSize + 1, pHeap); |
| 114 | for (u32 i = 0; i < ctrl->waveCount; i++) |
| 115 | { |
| 116 | TWave *wave = waveArchive->waveOffsets[i].ptr(headerPtr); |
| 117 | |
| 118 | JASWaveInfo waveInfo; |
| 119 | waveInfo._00 = wave->_01; |
| 120 | waveInfo._01 = wave->_02; |
| 121 | waveInfo._04 = wave->_04; |
| 122 | waveInfo._08 = wave->offset; |
| 123 | waveInfo._0c = wave->_0C; |
| 124 | waveInfo._10 = wave->_10; |
| 125 | waveInfo._14 = wave->_14; |
| 126 | waveInfo._18 = wave->_18; |
| 127 | waveInfo._1c = wave->_1C; |
| 128 | waveInfo._20 = wave->_20; |
| 129 | waveInfo._22 = wave->_22; |
| 130 | |
| 131 | TCtrlWave *ctrlWave = ctrl->ctrlWaveOffsets[i].ptr(headerPtr); |
| 132 | u16 size = JSULoHalf(ctrlWave->tableSize); |
| 133 | simpleBank->setWaveInfo(size, waveInfo); |
| 134 | } |
| 135 | simpleBank->setFileName(waveArchive->fileName); |
| 136 | |
| 137 | sUsedHeapSize += oldSize - pHeap->getFreeSize(); |
| 138 |
nothing calls this directly
no test coverage detected