36 bytes = (
char *)value;
55 while (length-- != 0) {
56 if (toupper((
int)right[length]) !=
57 toupper((
int)left[length]))
67 unsigned char **nextForm)
69 unsigned int chunkSize;
70 unsigned int formType;
75 if (*(
unsigned int *)read == 0x4d524f46) {
77 chunkSize = *(
unsigned int *)read;
80 *nextForm = read + ((chunkSize + 1) & ~1);
81 formType = *(
unsigned int *)read;
95 size = *(
unsigned int *)data;
98 data += (size + 1) & ~1U;
115 else if (scriptHalf == 1)
120 for (symbolIndex = 0; symbolIndex < count; symbolIndex++, symbols++) {
132 unsigned short flags,
133 const char *errorMessage)
138 if (count * elementSize <= 4)
159 while (entry < 0x80) {
163 "Cannot Allocate Sprite Data");
169 sprite->
scale = 0x100;
183 while (entry < 0x40) {
187 "Cannot Allocate Plane Data");
195 0x10, 1, 0,
"Cannot allocate SpriteNumList");
207 while (entry < 0x100) {
211 "Cannot allocate Sequence Data");
218 0x10, 1, 0,
"Cannot Allocate PlaneNumList");
230 while (entry < 0x20) {
234 "Cannot Allocate Script Data");
241 0x10, 1, 0,
"Cannot Allocate SequenceNumList");
274 else if (scriptHalf == 1)
282 formType, list, num);
288 node, scriptHalf, upperHalf->
symbols[num]);
327 formType, list, num);
338 unsigned char *chunk;
343 switch (*(
int *)chunk) {
373 "Cannot allocate FileChunk");
376 resource->
next = *head;
384 unsigned char **cursor)
391 entryCount = resource->
count;
395 entryCount + (
const unsigned char *)decodedResource.
data;
397 entryCount * 2 + (
char *)decodedResource.
data;
400 "Cannot Allocate InMemory List");
412 unsigned char *formEnd;
414 unsigned char *containerEnd;
416 unsigned char *location;
436 while (location < containerEnd) {
441 &location, formEnd, 0x54525053);
446 &location, formEnd, 0x454e4c50);
451 &location, formEnd, 0x55514553);
456 &location, formEnd, 0x454e4353);
493 globalLength = *(
short *)(
494 ((
void **)decodedResource.
data)[0]);
497 globalLength, 2, 0,
"Cannot Reallocate Globals");
505 "Cannot Allocate Text Ptrs");
520 unsigned char **nextForm);
528 unsigned char *end,
unsigned int formType)
530 unsigned char *chunkCursor;
531 unsigned char *formEnd;
534 chunkCursor = *cursor;
535 while (chunkCursor < end) {
538 while (chunkCursor < formEnd) {
540 &chunkCursor, &decoded) != 0) {
541 switch (decoded.
type) {
548 "Cannot Allocate Index Array");
556 "Cannot Allocate Symbol Index Array");
558 resource, 0, formType) == 0)
566 while (chunkCursor < formEnd) {
568 &chunkCursor, &decoded) != 0) {
569 switch (decoded.
type) {
576 "Cannot Allocate Index Array");
584 "Cannot Allocate Symbol Index Array");
586 resource, 1, formType) == 0)
598 *cursor = chunkCursor;
625 "Cannot Allocate Chunk Descriptor");
627 resource->
next = *head;
630 resource->
dataCount = (*head)->dataCount;
652 if (res->
owner == owner) {
656 for (index = 0; index < 0x80; index++) {
667 for (index = 0; index < 0x40; index++) {
679 for (index = 0; index < 0x100; index++) {
691 for (index = 0; index < 0x20; index++) {
716 if (resource->
owner == owner) {
717 index = resource->
count;
718 while (index-- != 0) {
725 *head = resource->
next;
738 if (resource->
owner == owner) {
739 index = resource->
count;
743 *head = resource->
next;
755 if (resource->
owner == owner) {
757 *head = resource->
next;
CutsceneResourceTable * PushCutsceneFileResource(CutsceneResourceTable **head)
void FatalCutsceneError(const char *format,...)
void ReleaseLoadedCutsceneResource(CutsceneResourceTable *resources, short index)
void DecodeCutsceneFileResource(CutsceneResourceTable *resource, unsigned char **cursor)
void ReleaseCutsceneFileResourceExceptPacket(short owner, CutsceneResourceTable **head, void *retainedPacket)
short DosStrlen(const char *s)
void ReleaseCutsceneResourceLevel(short owner)
signed char DecodeSceneOffsetChunk(unsigned char **cursor, SceneResourceTable **resource)
short CreateCutsceneResourceInstance(int formType, CutsceneObjectResourceList *list, short index)
void UpdateCutsceneSpriteObject(SceneFlicObject *sprite)
signed char AreCutsceneResourceNamesEqual(const char *left, const char *right)
void * AllocateZeroedRecords(int count, short elementSize, short flags)
void ExecuteCutsceneSequence(CutsceneSequence *sequence, unsigned char *text, signed char draw)
void InitializeCutsceneRuntimeResources(void)
signed char DecodeCutsceneObjectResource(CutsceneObjectResourceList *resource, unsigned char **cursor, unsigned char *end, unsigned int formType)
signed char DecodeSceneSymbolChunk(unsigned char **cursor, SceneResourceTable **resource)
void ReleaseCutsceneTextResource(short owner, CutsceneTextResource **head)
void ReleasePacketSlot(void **slot)
unsigned int ReadNextSceneForm(unsigned char **cursor, unsigned char **nextForm)
void * AllocateScenePointerTable(int count, short elementSize, unsigned short flags, const char *errorMessage)
signed char LinkCutsceneObjectResources(CutsceneObjectResourceList *list, short scriptHalf, int formType)
signed char DecodeSceneFileChunk(unsigned char **cursor, SceneResourceTable **resource)
void UpdateCutscenePlaneObject(CutscenePlane *plane, signed char updateChildren)
void ReleaseCutsceneObjectResource(short owner, CutsceneObjectResourceList **head, int formType)
void * IdentityHandle(void *v)
CutsceneObjectResourceList * PushCutsceneObjectResource(CutsceneObjectResourceList **head)
signed char DecodeSceneStructChunk(unsigned char **cursor, SceneResourceTable **resource)
void ReleasePacketHandle(void *handle)
unsigned char ReleaseCutsceneObjectResourceData(CutsceneObjectResourceList *resource)
void SwapSceneChunkSizeEndian(int *value)
void ReleaseCutsceneFileResource(short owner, CutsceneResourceTable **head)
void SkipCutsceneChunk(unsigned char **cursor)
short FindCutsceneResourceSymbolIndex(CutsceneObjectResourceList *list, short scriptHalf, const char *symbol)
signed char DecodeSceneResourceChunk(unsigned char **cursor, SceneResourceTable *resource)
unsigned char ParseCutsceneContainer(void *scenePacket)
void ExecuteCutsceneScene(CutsceneScene *scene)
Shared Win32 declarations, types and library interfaces.
#define HOST_POINTER_SIZE
short g_nEarlierGlobalCount
CutsceneScene ** g_apCutsceneScenes
CutsceneResourceTable * g_pCutsceneMouseResources
CutsceneObjectResourceList * g_pCutsceneSceneResources
short g_nCutsceneResourceLevel
CutsceneResourceTable * g_pCutsceneMusicResources
CutsceneObjectResourceList * g_pCutsceneSpriteResources
CampaignGlobals * g_pCampaignGlobals
CutsceneSequence ** g_apCutsceneSequences
CutsceneResourceTable * g_pCutsceneFilmResources
CutsceneResourceTable * g_pCutsceneFxResources
CutsceneTextResource * g_pCutsceneTextResources
CutsceneResourceTable * g_pCutsceneFontResources
CutsceneResourceTable * g_pCutsceneSpeechResources
SceneFlicObject ** g_apSceneObjects
CutscenePlane ** g_apCutscenePlanes
CutsceneResourceTable * g_pCutsceneShapeResources
CutsceneResourceTable * g_pCutscenePaletteResources
CutsceneObjectResourceList * g_pCutscenePlaneResources
CutsceneObjectResourceList * g_pCutsceneSequenceResources
unsigned char inheritedCount
unsigned char inheritedDataCount
short * dataSymbolIndices
struct CutsceneObjectResourceList * next
short * dataRuntimeIndices
unsigned char scriptCount
short * scriptSymbolIndices
short * scriptRuntimeIndices
unsigned char inheritedScriptCount
unsigned char * spriteIndices
unsigned char * scriptCursor
unsigned char * scriptStart
const unsigned char * filenameIndices
const unsigned char * sectionIndices
struct CutsceneResourceTable * next
unsigned char * sequenceIndices
unsigned char * scriptCursor
unsigned char * scriptStart
unsigned char * scriptCursor
unsigned char * scriptStart
unsigned char * planeIndices
struct CutsceneTextResource * next
unsigned char * scriptCursor
unsigned char * scriptStart