Wing Commander II
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
iffload.c
Go to the documentation of this file.
1/*
2 * Cutscene IFF resource parsing and release.
3 *
4 * Retail object 0x40D6B0-0x40F01F (link order; see docs/ORDER.md).
5 */
6#include "game.h"
7
21
22/* Function start: 0x40D6B0 */
23void ReleasePacketSlot(void **slot)
24{
25 if (slot == 0)
26 return;
28 *slot = 0;
29}
30
31/* Function start: 0x40D6E1 */
33{
34 char *bytes;
35
36 bytes = (char *)value;
37 bytes[0] ^= bytes[3];
38 bytes[3] ^= bytes[0];
39 bytes[0] ^= bytes[3];
40 bytes[1] ^= bytes[2];
41 bytes[2] ^= bytes[1];
42 bytes[1] ^= bytes[2];
43}
44
45/* Function start: 0x40D762 */
46signed char AreCutsceneResourceNamesEqual(const char *left,
47 const char *right)
48{
49 short length;
50
51 if (left == right)
52 return 1;
53 length = DosStrlen(left);
54 if (DosStrlen(right) == length) {
55 while (length-- != 0) {
56 if (toupper((int)right[length]) !=
57 toupper((int)left[length]))
58 return 0;
59 }
60 return 1;
61 }
62 return 0;
63}
64
65/* Function start: 0x40D812 */
66unsigned int ReadNextSceneForm(unsigned char **cursor,
67 unsigned char **nextForm)
68{
69 unsigned int chunkSize;
70 unsigned int formType;
71 unsigned char *read;
72
73 read = *cursor;
74 formType = 0;
75 if (*(unsigned int *)read == 0x4d524f46) {
76 read += 4;
77 chunkSize = *(unsigned int *)read;
78 read += 4;
79 SwapSceneChunkSizeEndian((int *)&chunkSize);
80 *nextForm = read + ((chunkSize + 1) & ~1);
81 formType = *(unsigned int *)read;
82 read += 4;
83 *cursor = IdentityHandle(read);
84 }
85 return formType;
86}
87
88/* Function start: 0x40D88E */
89void SkipCutsceneChunk(unsigned char **cursor)
90{
91 unsigned int size;
92 unsigned char *data;
93
94 data = *cursor;
95 size = *(unsigned int *)data;
96 data += 4;
97 SwapSceneChunkSizeEndian((int *)&size);
98 data += (size + 1) & ~1U;
99 *cursor = IdentityHandle(data);
100}
101
102/* Function start: 0x40D8D7 */
104 short scriptHalf,
105 const char *symbol)
106{
108 char **symbols;
109 short count;
110 short symbolIndex;
111
112 if (list != 0) {
113 if (scriptHalf == 0)
114 halfInfo = (CutsceneObjectResourceHalf *)list;
115 else if (scriptHalf == 1)
116 halfInfo = (CutsceneObjectResourceHalf *)
117 ((char *)list + sizeof(CutsceneObjectResourceHalf));
118 symbols = halfInfo->symbols;
119 count = halfInfo->symbolCount;
120 for (symbolIndex = 0; symbolIndex < count; symbolIndex++, symbols++) {
121 if (AreCutsceneResourceNamesEqual(*symbols, symbol) != 0)
122 return halfInfo->symbolIndices[symbolIndex];
123 }
124 return FindCutsceneResourceSymbolIndex(list->next, scriptHalf,
125 symbol);
126 }
127 return -1;
128}
129
130/* Function start: 0x40D9AD */
131void *AllocateScenePointerTable(int count, short elementSize,
132 unsigned short flags,
133 const char *errorMessage)
134{
135 void *allocation;
136
137 allocation = AllocateZeroedRecords(count, elementSize, flags);
138 if (count * elementSize <= 4)
139 flags = 0;
140 if (allocation == 0)
141 FatalCutsceneError("%s", errorMessage);
142 return allocation;
143}
144
145/* Function start: 0x40DA0C */
148 short index)
149{
150 SceneFlicObject *sprite;
151 CutscenePlane *plane;
152 CutsceneSequence *sequence;
153 CutsceneScene *cutscene;
154 short entry;
155
156 entry = 0;
157 switch (formType) {
158 case 0x54525053:
159 while (entry < 0x80) {
160 if (g_apSceneObjects[entry] == 0) {
162 1, sizeof(SceneFlicObject), 0,
163 "Cannot Allocate Sprite Data");
164 sprite = g_apSceneObjects[entry];
166 sprite->field_3 = -1;
167 sprite->active = 1;
168 sprite->visible = 1;
169 sprite->scale = 0x100;
170 sprite->scriptStart = list->scripts[index];
171 sprite->scriptCursor = sprite->scriptStart;
172 if (sprite->scriptCursor != 0)
174 sprite->scriptStart = sprite->scriptCursor;
175 break;
176 }
177 entry++;
178 }
179 if (entry == 0x80)
180 FatalCutsceneError("Too few sprite slots");
181 break;
182 case 0x454e4c50:
183 while (entry < 0x40) {
184 if (g_apCutscenePlanes[entry] == 0) {
186 1, sizeof(CutscenePlane), 0,
187 "Cannot Allocate Plane Data");
188 plane = g_apCutscenePlanes[entry];
190 plane->active = 1;
191 plane->visible = 1;
192 plane->scriptStart = list->scripts[index];
193 plane->scriptCursor = plane->scriptStart;
195 0x10, 1, 0, "Cannot allocate SpriteNumList");
196 if (plane->scriptCursor != 0)
198 plane->scriptStart = plane->scriptCursor;
199 break;
200 }
201 entry++;
202 }
203 if (entry == 0x40)
204 FatalCutsceneError("Too few plane slots");
205 break;
206 case 0x55514553:
207 while (entry < 0x100) {
208 if (g_apCutsceneSequences[entry] == 0) {
210 1, sizeof(CutsceneSequence), 0,
211 "Cannot allocate Sequence Data");
212 sequence = g_apCutsceneSequences[entry];
214 sequence->active = 1;
215 sequence->scriptStart = list->scripts[index];
216 sequence->scriptCursor = sequence->scriptStart;
218 0x10, 1, 0, "Cannot Allocate PlaneNumList");
219 if (sequence->scriptCursor != 0)
220 ExecuteCutsceneSequence(sequence, 0, 0);
221 sequence->scriptStart = sequence->scriptCursor;
222 break;
223 }
224 entry++;
225 }
226 if (entry == 0x100)
227 FatalCutsceneError("Too few sequence slots");
228 break;
229 case 0x454e4353:
230 while (entry < 0x20) {
231 if (g_apCutsceneScenes[entry] == 0) {
233 1, sizeof(CutsceneScene), 0,
234 "Cannot Allocate Script Data");
235 cutscene = g_apCutsceneScenes[entry];
237 cutscene->active = 1;
238 cutscene->scriptStart = list->scripts[index];
239 cutscene->scriptCursor = cutscene->scriptStart;
241 0x10, 1, 0, "Cannot Allocate SequenceNumList");
242 if (cutscene->scriptCursor != 0)
243 ExecuteCutsceneScene(cutscene);
244 cutscene->scriptStart = cutscene->scriptCursor;
245 break;
246 }
247 entry++;
248 }
249 if (entry == 0x20)
250 FatalCutsceneError("Too few script slots");
251 break;
252 case 0x52435346:
253 break;
254 }
255 return entry;
256}
257
258/* Function start: 0x40DE5A */
260 short scriptHalf,
261 int formType)
262{
265 short id;
266 SceneFlicObject *sprite;
267 CutscenePlane *plane;
268 CutsceneSequence *sequence;
269 short num;
270 CutsceneScene *cutscene;
271
272 if (scriptHalf == 0)
273 upperHalf = (CutsceneObjectResourceHalf *)list;
274 else if (scriptHalf == 1)
275 upperHalf = (CutsceneObjectResourceHalf *)
276 ((char *)list + sizeof(CutsceneObjectResourceHalf));
277 num = upperHalf->symbolCount;
278 node = list->next;
279 if (node == 0) {
280 while (num-- != 0)
282 formType, list, num);
283 upperHalf->count = (unsigned char)upperHalf->symbolCount;
284 } else {
285 upperHalf->count = (unsigned char)(upperHalf->inheritedCount + num);
286 while (num-- != 0) {
288 node, scriptHalf, upperHalf->symbols[num]);
289 if (id != -1) {
290 upperHalf->symbolIndices[num] = id;
291 switch (formType) {
292 case 0x54525053:
293 sprite = g_apSceneObjects[id];
294 if (sprite->scriptCursor == 0) {
295 sprite->scriptStart = list->scripts[num];
296 sprite->scriptCursor = sprite->scriptStart;
298 }
299 break;
300 case 0x454e4c50:
301 plane = g_apCutscenePlanes[id];
302 if (plane->scriptCursor == 0) {
303 plane->scriptStart = list->scripts[num];
304 plane->scriptCursor = plane->scriptStart;
306 }
307 break;
308 case 0x55514553:
309 sequence = g_apCutsceneSequences[id];
310 if (sequence->scriptCursor == 0) {
311 sequence->scriptStart = list->scripts[num];
312 sequence->scriptCursor = sequence->scriptStart;
313 ExecuteCutsceneSequence(sequence, 0, 0);
314 }
315 break;
316 case 0x454e4353:
317 cutscene = g_apCutsceneScenes[id];
318 if (cutscene->scriptCursor == 0) {
319 cutscene->scriptStart = list->scripts[num];
320 cutscene->scriptCursor = cutscene->scriptStart;
321 ExecuteCutsceneScene(cutscene);
322 }
323 break;
324 }
325 } else {
327 formType, list, num);
328 }
329 }
330 }
331 return 1;
332}
333
334/* Function start: 0x40E130 */
335signed char DecodeSceneResourceChunk(unsigned char **cursor,
336 SceneResourceTable *resource)
337{
338 unsigned char *chunk;
339 signed char decoded;
340
341 chunk = *cursor;
342 decoded = 0;
343 switch (*(int *)chunk) {
344 case 0x43525453:
345 decoded = DecodeSceneStructChunk(&chunk, &resource);
346 break;
347 case 0x5453464f:
348 decoded = DecodeSceneOffsetChunk(&chunk, &resource);
349 break;
350 case 0x424d5953:
351 decoded = DecodeSceneSymbolChunk(&chunk, &resource);
352 break;
353 case 0x454c4946:
354 decoded = DecodeSceneFileChunk(&chunk, &resource);
355 break;
356 case 0x4d524f46:
357 break;
358 default:
359 break;
360 }
361 *cursor = IdentityHandle(chunk);
362 return decoded;
363}
364
365/* Function start: 0x40E230 */
368{
369 CutsceneResourceTable *resource;
370
371 resource = AllocateScenePointerTable(
372 1, sizeof(CutsceneResourceTable), 0,
373 "Cannot allocate FileChunk");
374 if (resource != 0) {
376 resource->next = *head;
377 *head = resource;
378 }
379 return resource;
380}
381
382/* Function start: 0x40E285 */
384 unsigned char **cursor)
385{
386 SceneResourceTable decodedResource;
387 short entryCount;
388
389 DecodeSceneResourceChunk(cursor, &decodedResource);
390 resource->count = decodedResource.count;
391 entryCount = resource->count;
393 resource->filenameIndices = decodedResource.data;
394 resource->sectionIndices =
395 entryCount + (const unsigned char *)decodedResource.data;
396 resource->packedFilenames =
397 entryCount * 2 + (char *)decodedResource.data;
399 entryCount, HOST_POINTER_SIZE, 0,
400 "Cannot Allocate InMemory List");
401 if (resource->loadedPackets == 0)
402 ReleasePacketSlot((void **)&resource);
403}
404
405/* Read into an unused local when a GLOB chunk is decoded (DOS g_ce02); no
406 * code in the Win32 port writes it. */
407extern short g_nEarlierGlobalCount; /* 0x005d2ec4 */
408
409/* Function start: 0x40E31F */
410unsigned char ParseCutsceneContainer(void *scenePacket)
411{
412 unsigned char *formEnd;
413 SceneResourceTable decodedResource;
414 unsigned char *containerEnd;
416 unsigned char *location;
417 short globalLength;
418 short oldCount;
419
420 location = IdentityHandle(scenePacket);
422 if (ReadNextSceneForm(&location, &containerEnd) != 0x50435343)
423 return 0;
436 while (location < containerEnd) {
437 switch ((long)ReadNextSceneForm(&location, &formEnd)) {
438 case 0x54525053:
441 &location, formEnd, 0x54525053);
442 break;
443 case 0x454e4c50:
446 &location, formEnd, 0x454e4c50);
447 break;
448 case 0x55514553:
451 &location, formEnd, 0x55514553);
452 break;
453 case 0x454e4353:
456 &location, formEnd, 0x454e4353);
457 break;
458 case 0x20205846:
460 g_pCutsceneFxResources, &location);
461 break;
462 case 0x2053554d:
464 g_pCutsceneMusicResources, &location);
465 break;
466 case 0x204c4150:
468 g_pCutscenePaletteResources, &location);
469 break;
470 case 0x544e4f46:
472 g_pCutsceneFontResources, &location);
473 break;
474 case 0x48435053:
476 g_pCutsceneSpeechResources, &location);
477 break;
478 case 0x4d4c4946:
480 g_pCutsceneFilmResources, &location);
481 break;
482 case 0x50414853:
484 g_pCutsceneShapeResources, &location);
485 break;
486 case 0x53554f4d:
488 g_pCutsceneMouseResources, &location);
489 break;
490 case 0x424f4c47:
491 oldCount = g_nEarlierGlobalCount;
492 DecodeSceneResourceChunk(&location, &decodedResource);
493 globalLength = *(short *)(
494 ((void **)decodedResource.data)[0]);
495 if (g_pCampaignGlobals == 0) {
497 globalLength, 2, 0, "Cannot Reallocate Globals");
498 }
499 ReleasePacketSlot(&decodedResource.data);
500 break;
501 case 0x54584554:
502 DecodeSceneResourceChunk(&location, &decodedResource);
504 1, sizeof(CutsceneTextResource), 0,
505 "Cannot Allocate Text Ptrs");
508 text->entries = decodedResource.data;
510 break;
511 default:
512 location = formEnd;
513 break;
514 }
515 }
516 return 1;
517}
518
519unsigned int ReadNextSceneForm(unsigned char **cursor,
520 unsigned char **nextForm);
521signed char DecodeSceneResourceChunk(unsigned char **cursor,
522 SceneResourceTable *resource);
523void SkipCutsceneChunk(unsigned char **cursor);
524
525/* Function start: 0x40E726 */
527 CutsceneObjectResourceList *resource, unsigned char **cursor,
528 unsigned char *end, unsigned int formType)
529{
530 unsigned char *chunkCursor;
531 unsigned char *formEnd;
532 SceneResourceTable decoded;
533
534 chunkCursor = *cursor;
535 while (chunkCursor < end) {
536 switch (ReadNextSceneForm(&chunkCursor, &formEnd)) {
537 case 0x41544144:
538 while (chunkCursor < formEnd) {
540 &chunkCursor, &decoded) != 0) {
541 switch (decoded.type) {
542 case 0:
543 resource->dataEntries = decoded.data;
544 resource->localDataCount = decoded.count;
545 resource->dataRuntimeIndices =
547 decoded.count, 2, 0,
548 "Cannot Allocate Index Array");
549 break;
550 case 2:
551 resource->dataSymbols = decoded.data;
552 resource->dataSymbolCount = decoded.count;
553 resource->dataSymbolIndices =
555 decoded.count, 2, 0,
556 "Cannot Allocate Symbol Index Array");
558 resource, 0, formType) == 0)
559 return 0;
560 break;
561 }
562 }
563 }
564 break;
565 case 0x50524353:
566 while (chunkCursor < formEnd) {
568 &chunkCursor, &decoded) != 0) {
569 switch (decoded.type) {
570 case 1:
571 resource->scripts = decoded.data;
572 resource->localScriptCount = decoded.count;
573 resource->scriptRuntimeIndices =
575 decoded.count, 2, 0,
576 "Cannot Allocate Index Array");
577 break;
578 case 2:
579 resource->scriptSymbols = decoded.data;
580 resource->scriptSymbolCount = decoded.count;
581 resource->scriptSymbolIndices =
583 decoded.count, 2, 0,
584 "Cannot Allocate Symbol Index Array");
586 resource, 1, formType) == 0)
587 return 0;
588 break;
589 }
590 }
591 }
592 break;
593 default:
594 SkipCutsceneChunk(&chunkCursor);
595 break;
596 }
597 }
598 *cursor = chunkCursor;
599 return 1;
600}
601
602/* Function start: 0x40E985 */
605{
606 ReleasePacketSlot((void **)&resource->dataEntries);
607 ReleasePacketSlot((void **)&resource->dataRuntimeIndices);
608 ReleasePacketSlot((void **)&resource->dataSymbols);
609 ReleasePacketSlot((void **)&resource->dataSymbolIndices);
610 ReleasePacketSlot((void **)&resource->scripts);
611 ReleasePacketSlot((void **)&resource->scriptRuntimeIndices);
612 ReleasePacketSlot((void **)&resource->scriptSymbols);
613 ReleasePacketSlot((void **)&resource->scriptSymbolIndices);
614 return 1;
615}
616
617/* Function start: 0x40EA0F */
620{
622
623 resource = AllocateScenePointerTable(
624 1, sizeof(CutsceneObjectResourceList), 0,
625 "Cannot Allocate Chunk Descriptor");
626 if (resource != 0) {
627 resource->next = *head;
628 if (*head != 0) {
630 resource->dataCount = (*head)->dataCount;
631 resource->inheritedDataCount = resource->dataCount;
632 resource->scriptCount = (*head)->scriptCount;
633 resource->inheritedScriptCount = resource->scriptCount;
634 }
635 *head = resource;
636 }
637 return resource;
638}
639
640/* Function start: 0x40EAA4 */
643 int formType)
644{
646 CutscenePlane *plane;
647 CutsceneSequence *sequence;
648 CutsceneScene *cutscene;
649 short index;
650
651 res = *head;
652 if (res->owner == owner) {
654 switch (formType) {
655 case 0x54525053:
656 for (index = 0; index < 0x80; index++) {
657 if (g_apSceneObjects[index] != 0 &&
658 g_apSceneObjects[index]->owner == owner) {
660 (void **)&g_apSceneObjects[index]->locals);
662 (void **)&g_apSceneObjects[index]);
663 }
664 }
665 break;
666 case 0x454e4c50:
667 for (index = 0; index < 0x40; index++) {
668 if (g_apCutscenePlanes[index] != 0 &&
669 g_apCutscenePlanes[index]->owner == owner) {
670 plane = g_apCutscenePlanes[index];
671 ReleasePacketSlot((void **)&plane->locals);
672 ReleasePacketSlot((void **)&plane->spriteIndices);
674 (void **)&g_apCutscenePlanes[index]);
675 }
676 }
677 break;
678 case 0x55514553:
679 for (index = 0; index < 0x100; index++) {
680 if (g_apCutsceneSequences[index] != 0 &&
681 g_apCutsceneSequences[index]->owner == owner) {
682 sequence = g_apCutsceneSequences[index];
683 ReleasePacketSlot((void **)&sequence->locals);
684 ReleasePacketSlot((void **)&sequence->planeIndices);
686 (void **)&g_apCutsceneSequences[index]);
687 }
688 }
689 break;
690 case 0x454e4353:
691 for (index = 0; index < 0x20; index++) {
692 if (g_apCutsceneScenes[index] != 0 &&
693 g_apCutsceneScenes[index]->owner == owner) {
694 cutscene = g_apCutsceneScenes[index];
695 ReleasePacketSlot((void **)&cutscene->locals);
696 ReleasePacketSlot((void **)&cutscene->sequenceIndices);
698 (void **)&g_apCutsceneScenes[index]);
699 }
700 }
701 break;
702 }
703 *head = res->next;
705 }
706}
707
708/* Function start: 0x40ED9F */
710 short owner, CutsceneResourceTable **head, void *retainedPacket)
711{
712 CutsceneResourceTable *resource;
713 short index;
714
715 resource = *head;
716 if (resource->owner == owner) {
717 index = resource->count;
718 while (index-- != 0) {
719 if (resource->loadedPackets[index] != retainedPacket) {
721 &resource->loadedPackets[index]);
722 }
723 }
724 ReleasePacketSlot((void **)&resource->loadedPackets);
725 *head = resource->next;
726 ReleasePacketHandle(resource);
727 }
728}
729
730/* Function start: 0x40EE41 */
733{
734 CutsceneResourceTable *resource;
735 short index;
736
737 resource = *head;
738 if (resource->owner == owner) {
739 index = resource->count;
740 while (index-- != 0)
741 ReleaseLoadedCutsceneResource(resource, index);
742 ReleasePacketSlot((void **)&resource->loadedPackets);
743 *head = resource->next;
744 ReleasePacketHandle(resource);
745 }
746}
747
748/* Function start: 0x40EEC7 */
751{
752 CutsceneTextResource *resource;
753
754 resource = *head;
755 if (resource->owner == owner) {
756 ReleasePacketSlot((void **)&resource->entries);
757 *head = resource->next;
758 ReleasePacketHandle(resource);
759 }
760}
761
762/* Function start: 0x40EF15 */
CutsceneResourceTable * PushCutsceneFileResource(CutsceneResourceTable **head)
Definition iffload.c:366
void FatalCutsceneError(const char *format,...)
Definition gameflow.c:455
void ReleaseLoadedCutsceneResource(CutsceneResourceTable *resources, short index)
Definition gameflow.c:3649
void DecodeCutsceneFileResource(CutsceneResourceTable *resource, unsigned char **cursor)
Definition iffload.c:383
void ReleaseCutsceneFileResourceExceptPacket(short owner, CutsceneResourceTable **head, void *retainedPacket)
Definition iffload.c:709
short DosStrlen(const char *s)
Definition eventmgr.c:479
void ReleaseCutsceneResourceLevel(short owner)
Definition iffload.c:763
signed char DecodeSceneOffsetChunk(unsigned char **cursor, SceneResourceTable **resource)
Definition iffindex.c:44
short CreateCutsceneResourceInstance(int formType, CutsceneObjectResourceList *list, short index)
Definition iffload.c:146
void UpdateCutsceneSpriteObject(SceneFlicObject *sprite)
Definition gameflow.c:1406
signed char AreCutsceneResourceNamesEqual(const char *left, const char *right)
Definition iffload.c:46
void * AllocateZeroedRecords(int count, short elementSize, short flags)
Definition eventmgr.c:1437
void ExecuteCutsceneSequence(CutsceneSequence *sequence, unsigned char *text, signed char draw)
Definition gameflow.c:1284
void InitializeCutsceneRuntimeResources(void)
Definition gameflow.c:808
signed char DecodeCutsceneObjectResource(CutsceneObjectResourceList *resource, unsigned char **cursor, unsigned char *end, unsigned int formType)
Definition iffload.c:526
signed char DecodeSceneSymbolChunk(unsigned char **cursor, SceneResourceTable **resource)
Definition iffindex.c:82
void ReleaseCutsceneTextResource(short owner, CutsceneTextResource **head)
Definition iffload.c:749
void ReleasePacketSlot(void **slot)
Definition iffload.c:23
unsigned int ReadNextSceneForm(unsigned char **cursor, unsigned char **nextForm)
Definition iffload.c:66
void * AllocateScenePointerTable(int count, short elementSize, unsigned short flags, const char *errorMessage)
Definition iffload.c:131
signed char LinkCutsceneObjectResources(CutsceneObjectResourceList *list, short scriptHalf, int formType)
Definition iffload.c:259
signed char DecodeSceneFileChunk(unsigned char **cursor, SceneResourceTable **resource)
Definition iffindex.c:127
void UpdateCutscenePlaneObject(CutscenePlane *plane, signed char updateChildren)
Definition gameflow.c:1364
void ReleaseCutsceneObjectResource(short owner, CutsceneObjectResourceList **head, int formType)
Definition iffload.c:641
void * IdentityHandle(void *v)
Definition eventmgr.c:196
CutsceneObjectResourceList * PushCutsceneObjectResource(CutsceneObjectResourceList **head)
Definition iffload.c:618
signed char DecodeSceneStructChunk(unsigned char **cursor, SceneResourceTable **resource)
Definition iffindex.c:9
void ReleasePacketHandle(void *handle)
Definition memapi.c:108
unsigned char ReleaseCutsceneObjectResourceData(CutsceneObjectResourceList *resource)
Definition iffload.c:603
void SwapSceneChunkSizeEndian(int *value)
Definition iffload.c:32
void ReleaseCutsceneFileResource(short owner, CutsceneResourceTable **head)
Definition iffload.c:731
void SkipCutsceneChunk(unsigned char **cursor)
Definition iffload.c:89
short FindCutsceneResourceSymbolIndex(CutsceneObjectResourceList *list, short scriptHalf, const char *symbol)
Definition iffload.c:103
signed char DecodeSceneResourceChunk(unsigned char **cursor, SceneResourceTable *resource)
Definition iffload.c:335
unsigned char ParseCutsceneContainer(void *scenePacket)
Definition iffload.c:410
void ExecuteCutsceneScene(CutsceneScene *scene)
Definition gameflow.c:1006
Shared Win32 declarations, types and library interfaces.
#define HOST_POINTER_SIZE
Definition game.h:103
short g_nEarlierGlobalCount
Definition gameflow.c:3793
CutsceneScene ** g_apCutsceneScenes
Definition gameflow.c:3685
CutsceneResourceTable * g_pCutsceneMouseResources
Definition iffload.c:16
CutsceneObjectResourceList * g_pCutsceneSceneResources
Definition iffload.c:11
short g_nCutsceneResourceLevel
Definition gameflow.c:3726
CutsceneResourceTable * g_pCutsceneMusicResources
Definition iffload.c:20
CutsceneObjectResourceList * g_pCutsceneSpriteResources
Definition iffload.c:8
CampaignGlobals * g_pCampaignGlobals
Definition gameflow.c:3707
CutsceneSequence ** g_apCutsceneSequences
Definition gameflow.c:3684
CutsceneResourceTable * g_pCutsceneFilmResources
Definition iffload.c:18
CutsceneResourceTable * g_pCutsceneFxResources
Definition iffload.c:19
CutsceneTextResource * g_pCutsceneTextResources
Definition iffload.c:12
CutsceneResourceTable * g_pCutsceneFontResources
Definition iffload.c:13
CutsceneResourceTable * g_pCutsceneSpeechResources
Definition iffload.c:14
SceneFlicObject ** g_apSceneObjects
Definition gameflow.c:3682
CutscenePlane ** g_apCutscenePlanes
Definition gameflow.c:3683
CutsceneResourceTable * g_pCutsceneShapeResources
Definition iffload.c:15
CutsceneResourceTable * g_pCutscenePaletteResources
Definition iffload.c:17
CutsceneObjectResourceList * g_pCutscenePlaneResources
Definition iffload.c:9
CutsceneObjectResourceList * g_pCutsceneSequenceResources
Definition iffload.c:10
unsigned char inheritedCount
Definition game_data.h:886
unsigned char inheritedDataCount
Definition game_data.h:897
unsigned char ** scripts
Definition game_data.h:907
struct CutsceneObjectResourceList * next
Definition game_data.h:914
unsigned char scriptCount
Definition game_data.h:906
unsigned char inheritedScriptCount
Definition game_data.h:905
signed char visible
Definition game_data.h:938
unsigned char * spriteIndices
Definition game_data.h:943
signed char active
Definition game_data.h:937
unsigned char * scriptCursor
Definition game_data.h:940
short * locals
Definition game_data.h:941
unsigned char * scriptStart
Definition game_data.h:939
const unsigned char * filenameIndices
Definition game_data.h:874
const unsigned char * sectionIndices
Definition game_data.h:875
struct CutsceneResourceTable * next
Definition game_data.h:878
unsigned char * sequenceIndices
Definition game_data.h:974
short * locals
Definition game_data.h:978
unsigned char * scriptCursor
Definition game_data.h:977
signed char active
Definition game_data.h:972
unsigned char * scriptStart
Definition game_data.h:976
signed char active
Definition game_data.h:959
unsigned char * scriptCursor
Definition game_data.h:964
unsigned char * scriptStart
Definition game_data.h:963
unsigned char * planeIndices
Definition game_data.h:961
struct CutsceneTextResource * next
Definition game_data.h:920
signed char visible
Definition game_data.h:987
unsigned char * scriptCursor
Definition game_data.h:997
unsigned char * scriptStart
Definition game_data.h:996
signed char active
Definition game_data.h:986
signed char field_3
Definition game_data.h:989