aboutsummaryrefslogtreecommitdiff
path: root/insane.cpp
diff options
context:
space:
mode:
authorJames Brown2002-03-20 17:51:07 +0000
committerJames Brown2002-03-20 17:51:07 +0000
commit718392239c0025a7e1e0af586fc54ecf7df6f58b (patch)
tree8fb5cc80777803ab440e0e398eabf8d6b7dd043e /insane.cpp
parent1e5b1308467b796c44db3ebb170111967a251f06 (diff)
downloadscummvm-rg350-718392239c0025a7e1e0af586fc54ecf7df6f58b.tar.gz
scummvm-rg350-718392239c0025a7e1e0af586fc54ecf7df6f58b.tar.bz2
scummvm-rg350-718392239c0025a7e1e0af586fc54ecf7df6f58b.zip
I know it probably doesn't look like much, but this is a start to the reorg - basically I've shuffled the Scumm struct around, and turned it into a Class - labeling and grouping functions that are related.
svn-id: r3792
Diffstat (limited to 'insane.cpp')
-rw-r--r--insane.cpp587
1 files changed, 29 insertions, 558 deletions
diff --git a/insane.cpp b/insane.cpp
index 095714c007..7b6eca6bde 100644
--- a/insane.cpp
+++ b/insane.cpp
@@ -1,8 +1,23 @@
-// insane.cpp : Defines the entry point for the console application.
-
-//
-
-
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001/2002 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
+ */
#if !defined(__APPLE__CW)
#define NEED_SDL_HEADERS
@@ -10,71 +25,42 @@
#include "stdafx.h"
-
#include "scumm.h"
-
-
#define SWAP2(a) ((((a)>>24)&0xFF) | (((a)>>8)&0xFF00) | (((a)<<8)&0xFF0000) | (((a)<<24)&0xFF000000))
-
-
void invalidblock(uint32 tag) {
-
error("Encountered invalid block %c%c%c%c", tag>>24, tag>>16, tag>>8, tag);
-
}
-
-
uint32 SmushPlayer::nextBE32() {
-
uint32 a = *((uint32*)_cur);
-
_cur += sizeof(uint32);
return SWAP2(a);
-
}
-
-
void SmushPlayer::fileRead(void *mem, int len) {
-
if (fread(mem, len,1, _in) != 1)
-
error("EOF while reading");
}
-
-
uint32 SmushPlayer::fileReadBE32() {
-
uint32 number;
fileRead(&number, sizeof(number));
-
return SWAP2(number);
-
}
-
-
uint32 SmushPlayer::fileReadLE32() {
-
uint32 number;
fileRead(&number, sizeof(number));
-
return number;
-
}
-
-
void SmushPlayer::openFile(byte* fileName) {
-
byte buf[100];
sprintf((char*)buf,"%sVIDEO/%s",(char*)sm->_gameDataPath,(char*)fileName);
@@ -85,1067 +71,552 @@ void SmushPlayer::openFile(byte* fileName) {
_in = fopen((char*)buf, "rb");
}
-
}
-
-
void SmushPlayer::nextBlock() {
-
_blockTag = fileReadBE32();
-
_blockSize = fileReadBE32();
-
-
if (_block != NULL)
-
free(_block);
-
-
_block = (byte*)malloc(_blockSize);
if (_block==NULL)
-
error("cannot allocate memory");
-
-
fileRead(_block, _blockSize);
-
}
-
-
bool SmushPlayer::parseTag() {
-
switch(nextBlock(), _blockTag) {
case 'AHDR':
-
parseAHDR();
-
break;
case 'FRME':
-
parseFRME();
-
break;
-
+
default:
-
invalidblock(_blockTag);
-
}
return true;
-
}
void SmushPlayer::parseAHDR() {
-
// memcpy(_fluPalette, _block, 0x300);
-
_paletteChanged = true;
-
-
printf("parse AHDR\n");
-
}
void SmushPlayer::parseNPAL() {
-
memcpy(_fluPalette, _cur, 0x300);
_paletteChanged = true;
-
}
void codec1(CodecData *cd) {
-
uint y = cd->y;
-
byte *src = cd->src;
-
byte *dest= cd->out;
-
uint h = cd->h;
-
-
if (!h || !cd->w)
-
return;
-
-
dest += cd->y * cd->pitch;
-
-
do {
-
byte color;
-
uint len, num;
-
uint x;
if ((uint)y >= (uint)cd->outheight) {
-
src += *(uint16*)(src) + 2;
-
continue;
-
}
len = cd->w;
-
x = cd->x;
-
-
-
src += 2;
do {
-
byte code = *src++;
num = (code>>1)+1;
-
if (num>len) num=len;
-
len -= num;
if (code&1) {
-
color = *src++;
-
// if ((color = *src++)!=0) {
-
do {
-
if ((uint)x < (uint)cd->outwidth)
-
dest[x] = color;
-
} while (++x,--num);
-
// } else {
-
// x += num;
-
// }
-
} else {
-
do {
-
color = *src++;
-
if (/*(color=*src++) != 0 &&*/ (uint)x < (uint)cd->outwidth)
-
dest[x] = color;
-
} while (++x,--num);
-
}
-
} while (len);
-
} while (dest += cd->pitch,y++,--h);
-
}
void codec37_bompdepack(byte *dst, byte *src, int len) {
-
byte code;
-
byte color;
-
int num;
-
-
do {
-
code = *src++;
-
if (code & 1) {
-
num = (code>>1) + 1;
-
color = *src++;
-
memset(dst, color, num);
-
dst += num;
-
} else {
-
num = (code>>1) + 1;
-
memcpy(dst,src,num);
-
dst += num;
-
src += num;
-
}
-
} while (len -= num);
-
}
-
-
void codec37_proc5(byte *dst, byte *src, int next_offs, int bw, int bh, int pitch, int16 *table) {
-
byte code, *tmp;
-
int i;
-
-
- if (pitch != 320)
-
- {
-
+ if (pitch != 320) {
warning("invalid pitch");
-
return;
-
}
-
-
do {
-
i = bw;
-
do {
-
code = *src++;
-
if (code==0xFF) {
-
*(uint32*)(dst+0) = ((uint32*)src)[0];
-
*(uint32*)(dst+320) = ((uint32*)src)[1];
-
*(uint32*)(dst+320*2) = ((uint32*)src)[2];
-
*(uint32*)(dst+320*3) = ((uint32*)src)[3];
-
src += 16;
-
dst += 4;
-
} else {
-
tmp = dst + table[code] + next_offs;
-
*(uint32*)(dst+0) = *(uint32*)(tmp);
-
*(uint32*)(dst+320) = *(uint32*)(tmp+320);
-
*(uint32*)(dst+320*2) = *(uint32*)(tmp+320*2);
-
*(uint32*)(dst+320*3) = *(uint32*)(tmp+320*3);
-
dst += 4;
-
}
-
} while(--i);
-
dst += 320*4 - 320;
-
} while (--bh);
-
}
static const int8 maketable_bytes[] = {
-
0, 0, 1, 0, 2, 0, 3, 0, 5, 0, 8, 0, 13, 0, 21, 0,
-
-1, 0, -2, 0, -3, 0, -5, 0, -8, 0, -13, 0, -17, 0, -21, 0,
-
0, 1, 1, 1, 2, 1, 3, 1, 5, 1, 8, 1, 13, 1, 21, 1,
-
-1, 1, -2, 1, -3, 1, -5, 1, -8, 1, -13, 1, -17, 1, -21, 1,
-
0, 2, 1, 2, 2, 2, 3, 2, 5, 2, 8, 2, 13, 2, 21, 2,
-
-1, 2, -2, 2, -3, 2, -5, 2, -8, 2, -13, 2, -17, 2, -21, 2,
-
0, 3, 1, 3, 2, 3, 3, 3, 5, 3, 8, 3, 13, 3, 21, 3,
-
-1, 3, -2, 3, -3, 3, -5, 3, -8, 3, -13, 3, -17, 3, -21, 3,
-
0, 5, 1, 5, 2, 5, 3, 5, 5, 5, 8, 5, 13, 5, 21, 5,
-
-1, 5, -2, 5, -3, 5, -5, 5, -8, 5, -13, 5, -17, 5, -21, 5,
-
0, 8, 1, 8, 2, 8, 3, 8, 5, 8, 8, 8, 13, 8, 21, 8,
-
-1, 8, -2, 8, -3, 8, -5, 8, -8, 8, -13, 8, -17, 8, -21, 8,
-
0, 13, 1, 13, 2, 13, 3, 13, 5, 13, 8, 13, 13, 13, 21, 13,
-
-1, 13, -2, 13, -3, 13, -5, 13, -8, 13, -13, 13, -17, 13, -21, 13,
-
0, 21, 1, 21, 2, 21, 3, 21, 5, 21, 8, 21, 13, 21, 21, 21,
-
-1, 21, -2, 21, -3, 21, -5, 21, -8, 21, -13, 21, -17, 21, -21, 21,
-
0, -1, 1, -1, 2, -1, 3, -1, 5, -1, 8, -1, 13, -1, 21, -1,
-
-1, -1, -2, -1, -3, -1, -5, -1, -8, -1, -13, -1, -17, -1, -21, -1,
-
0, -2, 1, -2, 2, -2, 3, -2, 5, -2, 8, -2, 13, -2, 21, -2,
-
-1, -2, -2, -2, -3, -2, -5, -2, -8, -2, -13, -2, -17, -2, -21, -2,
-
0, -3, 1, -3, 2, -3, 3, -3, 5, -3, 8, -3, 13, -3, 21, -3,
-
-1, -3, -2, -3, -3, -3, -5, -3, -8, -3, -13, -3, -17, -3, -21, -3,
-
0, -5, 1, -5, 2, -5, 3, -5, 5, -5, 8, -5, 13, -5, 21, -5,
-
-1, -5, -2, -5, -3, -5, -5, -5, -8, -5, -13, -5, -17, -5, -21, -5,
-
0, -8, 1, -8, 2, -8, 3, -8, 5, -8, 8, -8, 13, -8, 21, -8,
-
-1, -8, -2, -8, -3, -8, -5, -8, -8, -8, -13, -8, -17, -8, -21, -8,
-
0, -13, 1, -13, 2, -13, 3, -13, 5, -13, 8, -13, 13, -13, 21, -13,
-
-1, -13, -2, -13, -3, -13, -5, -13, -8, -13, -13, -13, -17, -13, -21, -13,
-
0, -17, 1, -17, 2, -17, 3, -17, 5, -17, 8, -17, 13, -17, 21, -17,
-
-1, -17, -2, -17, -3, -17, -5, -17, -8, -17, -13, -17, -17, -17, -21, -17,
-
0, -21, 1, -21, 2, -21, 3, -21, 5, -21, 8, -21, 13, -21, 21, -21,
-
-1, -21, -2, -21, -3, -21, -5, -21, -8, -21, -13, -21, -17, -21, 0, 0,
-
-8, -29, 8, -29, -18, -25, 17, -25, 0, -23, -6, -22, 6, -22, -13, -19,
-
12, -19, 0, -18, 25, -18, -25, -17, -5, -17, 5, -17, -10, -15, 10, -15,
-
0, -14, -4, -13, 4, -13, 19, -13, -19, -12, -8, -11, -2, -11, 0, -11,
-
2, -11, 8, -11, -15, -10, -4, -10, 4, -10, 15, -10, -6, -9, -1, -9,
-
1, -9, 6, -9, -29, -8, -11, -8, -8, -8, -3, -8, 3, -8, 8, -8,
-
11, -8, 29, -8, -5, -7, -2, -7, 0, -7, 2, -7, 5, -7, -22, -6,
-
-9, -6, -6, -6, -3, -6, -1, -6, 1, -6, 3, -6, 6, -6, 9, -6,
-
22, -6, -17, -5, -7, -5, -4, -5, -2, -5, 0, -5, 2, -5, 4, -5,
-
7, -5, 17, -5, -13, -4, -10, -4, -5, -4, -3, -4, -1, -4, 0, -4,
-
1, -4, 3, -4, 5, -4, 10, -4, 13, -4, -8, -3, -6, -3, -4, -3,
-
-3, -3, -2, -3, -1, -3, 0, -3, 1, -3, 2, -3, 4, -3, 6, -3,
-
8, -3, -11, -2, -7, -2, -5, -2, -3, -2, -2, -2, -1, -2, 0, -2,
-
1, -2, 2, -2, 3, -2, 5, -2, 7, -2, 11, -2, -9, -1, -6, -1,
-
-4, -1, -3, -1, -2, -1, -1, -1, 0, -1, 1, -1, 2, -1, 3, -1,
-
4, -1, 6, -1, 9, -1, -31, 0, -23, 0, -18, 0, -14, 0, -11, 0,
-
-7, 0, -5, 0, -4, 0, -3, 0, -2, 0, -1, 0, 0, -31, 1, 0,
-
2, 0, 3, 0, 4, 0, 5, 0, 7, 0, 11, 0, 14, 0, 18, 0,
-
23, 0, 31, 0, -9, 1, -6, 1, -4, 1, -3, 1, -2, 1, -1, 1,
-
0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 6, 1, 9, 1, -11, 2,
-
-7, 2, -5, 2, -3, 2, -2, 2, -1, 2, 0, 2, 1, 2, 2, 2,
-
3, 2, 5, 2, 7, 2, 11, 2, -8, 3, -6, 3, -4, 3, -2, 3,
-
-1, 3, 0, 3, 1, 3, 2, 3, 3, 3, 4, 3, 6, 3, 8, 3,
-
-13, 4, -10, 4, -5, 4, -3, 4, -1, 4, 0, 4, 1, 4, 3, 4,
-
5, 4, 10, 4, 13, 4, -17, 5, -7, 5, -4, 5, -2, 5, 0, 5,
-
2, 5, 4, 5, 7, 5, 17, 5, -22, 6, -9, 6, -6, 6, -3, 6,
-
-1, 6, 1, 6, 3, 6, 6, 6, 9, 6, 22, 6, -5, 7, -2, 7,
-
0, 7, 2, 7, 5, 7, -29, 8, -11, 8, -8, 8, -3, 8, 3, 8,
-
8, 8, 11, 8, 29, 8, -6, 9, -1, 9, 1, 9, 6, 9, -15, 10,
-
-4, 10, 4, 10, 15, 10, -8, 11, -2, 11, 0, 11, 2, 11, 8, 11,
-
19, 12, -19, 13, -4, 13, 4, 13, 0, 14, -10, 15, 10, 15, -5, 17,
-
5, 17, 25, 17, -25, 18, 0, 18, -12, 19, 13, 19, -6, 22, 6, 22,
-
0, 23, -17, 25, 18, 25, -8, 29, 8, 29, 0, 31, 0, 0, -6, -22,
-
6, -22, -13, -19, 12, -19, 0, -18, -5, -17, 5, -17, -10, -15, 10, -15,
-
0, -14, -4, -13, 4, -13, 19, -13, -19, -12, -8, -11, -2, -11, 0, -11,
-
2, -11, 8, -11, -15, -10, -4, -10, 4, -10, 15, -10, -6, -9, -1, -9,
-
1, -9, 6, -9, -11, -8, -8, -8, -3, -8, 0, -8, 3, -8, 8, -8,
-
11, -8, -5, -7, -2, -7, 0, -7, 2, -7, 5, -7, -22, -6, -9, -6,
-
-6, -6, -3, -6, -1, -6, 1, -6, 3, -6, 6, -6, 9, -6, 22, -6,
-
-17, -5, -7, -5, -4, -5, -2, -5, -1, -5, 0, -5, 1, -5, 2, -5,
-
4, -5, 7, -5, 17, -5, -13, -4, -10, -4, -5, -4, -3, -4, -2, -4,
-
-1, -4, 0, -4, 1, -4, 2, -4, 3, -4, 5, -4, 10, -4, 13, -4,
-
-8, -3, -6, -3, -4, -3, -3, -3, -2, -3, -1, -3, 0, -3, 1, -3,
-
2, -3, 3, -3, 4, -3, 6, -3, 8, -3, -11, -2, -7, -2, -5, -2,
-
-4, -2, -3, -2, -2, -2, -1, -2, 0, -2, 1, -2, 2, -2, 3, -2,
-
4, -2, 5, -2, 7, -2, 11, -2, -9, -1, -6, -1, -5, -1, -4, -1,
-
-3, -1, -2, -1, -1, -1, 0, -1, 1, -1, 2, -1, 3, -1, 4, -1,
-
5, -1, 6, -1, 9, -1, -23, 0, -18, 0, -14, 0, -11, 0, -7, 0,
-
-5, 0, -4, 0, -3, 0, -2, 0, -1, 0, 0, -23, 1, 0, 2, 0,
-
3, 0, 4, 0, 5, 0, 7, 0, 11, 0, 14, 0, 18, 0, 23, 0,
-
-9, 1, -6, 1, -5, 1, -4, 1, -3, 1, -2, 1, -1, 1, 0, 1,
-
1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 9, 1, -11, 2,
-
-7, 2, -5, 2, -4, 2, -3, 2, -2, 2, -1, 2, 0, 2, 1, 2,
-
2, 2, 3, 2, 4, 2, 5, 2, 7, 2, 11, 2, -8, 3, -6, 3,
-
-4, 3, -3, 3, -2, 3, -1, 3, 0, 3, 1, 3, 2, 3, 3, 3,
-
4, 3, 6, 3, 8, 3, -13, 4, -10, 4, -5, 4, -3, 4, -2, 4,
-
-1, 4, 0, 4, 1, 4, 2, 4, 3, 4, 5, 4, 10, 4, 13, 4,
-
-17, 5, -7, 5, -4, 5, -2, 5, -1, 5, 0, 5, 1, 5, 2, 5,
-
4, 5, 7, 5, 17, 5, -22, 6, -9, 6, -6, 6, -3, 6, -1, 6,
-
1, 6, 3, 6, 6, 6, 9, 6, 22, 6, -5, 7, -2, 7, 0, 7,
-
2, 7, 5, 7, -11, 8, -8, 8, -3, 8, 0, 8, 3, 8, 8, 8,
-
11, 8, -6, 9, -1, 9, 1, 9, 6, 9, -15, 10, -4, 10, 4, 10,
-
15, 10, -8, 11, -2, 11, 0, 11, 2, 11, 8, 11, 19, 12, -19, 13,
-
-4, 13, 4, 13, 0, 14, -10, 15, 10, 15, -5, 17, 5, 17, 0, 18,
-
-12, 19, 13, 19, -6, 22, 6, 22, 0, 23,
-
};
-
-
-
-
void codec37_maketable(PersistentCodecData37 *pcd, int pitch, byte idx) {
-
int i,j;
-
-
if (pcd->table_last_pitch==pitch && pcd->table_last_flags==idx)
-
return;
pcd->table_last_pitch = pitch;
-
pcd->table_last_flags = idx;
-
-
assert(idx*255 + 254 < (int)(sizeof(maketable_bytes)/2));
-
-
for(i=0; i<255; i++) {
-
j = i + idx*255;
-
pcd->table1[i] = maketable_bytes[j*2+1] * pitch + maketable_bytes[j*2];
-
}
-
-
-
}
void codec37(CodecData *cd, PersistentCodecData37 *pcd) {
-
int width_in_blocks, height_in_blocks;
-
int src_pitch;
-
byte *curbuf;
-
uint size;
-
bool result = false;
-
-
width_in_blocks = (cd->w + 3) >> 2;
-
height_in_blocks = (cd->h + 3) >> 2;
-
src_pitch = width_in_blocks * 4;
-
-
codec37_maketable(pcd, src_pitch, cd->src[1]);
-
-
switch(cd->src[0]) {
-
case 0: {
-
curbuf = pcd->deltaBufs[pcd->curtable];
-
memset(pcd->deltaBuf, 0, curbuf - pcd->deltaBuf);
-
size = *(uint32*)(cd->src + 4);
-
memset(curbuf + size, 0, pcd->deltaBuf + pcd->deltaSize - curbuf - size);
-
memcpy(curbuf, cd->src + 16, size);
-
break;
-
- }
+ }
case 2: {
-
size = *(uint32*)(cd->src + 4);
-
curbuf = pcd->deltaBufs[pcd->curtable];
-
if(size==64000)
-
codec37_bompdepack(curbuf, cd->src+16, size);
-
else
-
return;
memset(pcd->deltaBuf, 0, curbuf - pcd->deltaBuf);
-
memset(curbuf + size, 0, pcd->deltaBuf + pcd->deltaSize - curbuf - size);
-
break;
-
- }
+ }
case 3: {
-
uint16 number = *(uint16*)(cd->src + 2);
if ( number && pcd->flags+1 != number)
-
break;
-
-
if (number&1 && cd->src[12]&1 && cd->flags&0x10) {
-
result=true;
-
break;
-
}
-
-
if ((number&1) || !(cd->src[12]&1)) {
-
pcd->curtable ^= 1;
-
}
-
-
codec37_proc5(pcd->deltaBufs[pcd->curtable], cd->src+16,
-
pcd->deltaBufs[pcd->curtable^1] - pcd->deltaBufs[pcd->curtable],
-
width_in_blocks, height_in_blocks, src_pitch,
-
pcd->table1);
-
break;
-
- }
-
-
+ }
case 1:
-
case 4:
-
printf("code %d", cd->src[0]);
-
return;
default:
-
error("codec37 default case");
-
}
-
-
-
-
pcd->flags = *(uint16*)(cd->src + 2);
-
-
if (result) {
-
pcd->curtable ^= 1;
-
} else {
-
memcpy(cd->out, pcd->deltaBufs[pcd->curtable], 320*200);
-
}
-
-
-
}
-
-
-
-
void codec37_init(PersistentCodecData37 *pcd, int width, int height) {
-
pcd->width = width;
-
pcd->height = height;
-
pcd->deltaSize = width*height*2+0x3E00+0xBA00;
-
pcd->deltaBuf = (byte*)calloc(pcd->deltaSize, 1);
-
pcd->deltaBufs[0] = pcd->deltaBuf + 0x3E00;
-
pcd->deltaBufs[1] = pcd->deltaBuf + width * height + 0xBA00;
-
pcd->curtable = 0;
-
pcd->table1 = (int16*)calloc(255,sizeof(uint16));
-
}
-
-
void SmushPlayer::parseFOBJ() {
-
byte codec;
-
CodecData cd;
-
-
cd.out = _renderBitmap;
-
cd.pitch = cd.outwidth = 320;
-
cd.outheight = 200;
-
cd.y = 0;
-
cd.x = 0;
-
cd.src = _cur + 0xE;
-
cd.w = *(uint16*)(_cur + 6);
-
cd.h = *(uint16*)(_cur + 8);
-
-
codec = _cur[0];
-
-
switch(codec) {
-
case 1:
-
codec1(&cd);
-
break;
-
case 37:
-
codec37(&cd, &pcd37);
-
break;
-
default:
-
error("invalid codec %d", codec);
-
}
-
-
-
-
-
}
-
-
void SmushPlayer::parsePSAD() {
-
//printf("parse PSAD\n");
-
}
-
-
void SmushPlayer::parseTRES() {
-
// printf("parse TRES\n");
-
}
-
-
void SmushPlayer::parseXPAL() {
-
int num;
-
int i;
-
-
num = *(uint16*)(_cur + 2);
-
-
-
if (num==0 || num==0x200) {
-
if (num==0x200)
-
memcpy(_fluPalette, _cur + 0x604, 0x300);
-
-
for(i=0; i<0x300; i++) {
-
_fluPalMul129[i] = _fluPalette[i] * 129;
-
_fluPalWords[i] = *(uint16*)(_cur + 4 + i*2);
-
}
-
return;
-
}
-
-
for(i=0; i<0x300; i++) {
-
_fluPalMul129[i] += _fluPalWords[i];
-
_fluPalette[i] = _fluPalMul129[i]>>7;
-
}
-
-
_paletteChanged = true;
-
}
-
-
void SmushPlayer::parseFRME() {
-
_cur = _block;
-
-
do {
-
_frmeTag = nextBE32();
-
_frmeSize = nextBE32();
-
-
switch(_frmeTag) {
-
case 'NPAL':
-
parseNPAL();
-
break;
-
case 'FOBJ':
-
parseFOBJ();
-
break;
-
case 'PSAD':
-
parsePSAD();
-
break;
-
case 'TRES':
-
parseTRES();
-
break;
-
case 'XPAL':
-
parseXPAL();
-
break;
-
case 'IACT':
-
parseTRES();
-
+ break;
+ case 'STOR':
+ case 'FTCH':
break;
default:
-
invalidblock(_frmeTag);
-
}
-
-
_cur += (_frmeSize + 1) & ~1;
-
-
-
} while (_cur + 4 < _block + _blockSize);
-
}
-
-
void SmushPlayer::init() {
-
_renderBitmap = (byte*)malloc(320*200);
-
codec37_init(&pcd37, 320, 200);
-
}
-
-
void SmushPlayer::go() {
-
while (parseTag()) {}
-
}
-
-
-
-
void SmushPlayer::setPalette() {
-
int i;
-
-
for(i=0;i<768;i++)
-
sm->_currentPalette[i]=_fluPalette[i];
-
}
-
-
void SmushPlayer::startVideo(short int arg, byte* videoFile)
-
{
-
int frameIndex=0;
-
-
_in=NULL;
-
_paletteChanged=0;
-
_block=NULL;
-
_blockTag=0;
-
_blockSize=0;
-
_cur=NULL;
-
_renderBitmap=NULL;
-
_frameSize=0;
-
_frmeTag=0;
-
_frmeSize=0;
-
_deltaBuf=NULL;
-
_deltaBufSize=0;
-
-
pcd37.deltaBuf=NULL;
-
pcd37.deltaBufs[0]=NULL;
-
pcd37.deltaBufs[1]=NULL;
-
pcd37.deltaSize=0;
-
pcd37.width=0;
-
pcd37.height=0;
-
pcd37.curtable=0;
-
pcd37.unk2=0;
-
pcd37.unk3=0;
-
pcd37.flags=0;
-
pcd37.table1=NULL;
-
pcd37.table_last_pitch=0;
-
pcd37.table_last_flags=0;
-
-
-
-
-
-
init();
-
openFile(videoFile);
-
-
if(_in==NULL)
-
return;
-
-
- if (fileReadBE32() != 'ANIM')
-
+ if (fileReadBE32() != 'ANIM')
error("file is not an anim");
-
-
fileSize=fileReadBE32();
-
-
-
-
do {
-
if(ftell(_in)>=fileSize )
-
return;
-
-
parseTag();
-
frameIndex++;
-
-
if (_paletteChanged) {
-
_paletteChanged = false;
-
setPalette();
-
sm->setDirtyColors(0, 255);
-
}
-
-
blitToScreen(sm,_renderBitmap, 0, 0, 320 ,200);
-
-
-
updateScreen(sm);
-
-
waitForTimer(sm,20);
-
-
if(sm->_keyPressed == sm->_vars[sm->VAR_CUTSCENEEXIT_KEY])
-
return;
-
-
-
} while (1);
-
}