diff options
| -rw-r--r-- | Makefile.irix | 46 | ||||
| -rw-r--r-- | boxes.cpp | 1 | ||||
| -rw-r--r-- | gfx.cpp | 65 | ||||
| -rw-r--r-- | object.cpp | 1 | ||||
| -rw-r--r-- | saveload.cpp | 2 | ||||
| -rw-r--r-- | script_v1.cpp | 20 | ||||
| -rw-r--r-- | script_v2.cpp | 1 | ||||
| -rw-r--r-- | scumm.h | 3 | ||||
| -rw-r--r-- | scummsys.h | 5 | ||||
| -rw-r--r-- | scummvm.cpp | 13 | ||||
| -rw-r--r-- | simon/simon.cpp | 4 | ||||
| -rw-r--r-- | simon/simon.h | 12 | ||||
| -rw-r--r-- | v4/resource_v4.cpp | 4 | 
13 files changed, 165 insertions, 12 deletions
| diff --git a/Makefile.irix b/Makefile.irix new file mode 100644 index 0000000000..58e2db8680 --- /dev/null +++ b/Makefile.irix @@ -0,0 +1,46 @@ +CC      = CC +CFLAGS  = -O2 -Olimit 9000 -mips2 +#CFLAGS  = -g -O -Wall -Wstrict-prototypes -Wuninitialized -Wno-long-long -Wno-multichar +# Remove -DHAVE_NO_BOOL if your compiler has a builtin bool type +DEFINES = -DUNIX -DHAVE_NO_BOOL -DCOMPRESSED_SOUND_FILE +LDFLAGS := +INCLUDES:= `sdl-config --cflags` -I./ -I./sound +CPPFLAGS= $(DEFINES) $(INCLUDES) + +# Add -lmad for -DCOMPRESSED_SOUND_FILE +LIBS   = `sdl-config --libs` -lmad -lm +ZIPFILE := scummvm-`date '+%Y-%m-%d'`.zip + +INCS = scumm.h scummsys.h stdafx.h + +OBJS = actor.o boxes.o costume.o gfx.o object.o resource.o \ +	saveload.o script.o scummvm.o sound.o string.o \ +	sys.o verbs.o sdl.o script_v1.o script_v2.o debug.o gui.o \ +	sound/imuse.o sound/fmopl.o sound/mixer.o debugrl.o \ +	akos.o vars.o insane.o gameDetector.o init.o \ +	v3/resource_v3.o v4/resource_v4.o 2xsai.o main.o \ +	simon/midi.o simon/simon.o simon/simonsys.o sound/mididrv.o + +DISTFILES=$(OBJS:.o=.cpp) Makefile scumm.h scummsys.h stdafx.h stdafx.cpp \ +	debugrl.h whatsnew.txt readme.txt copying.txt \ +	scummvm.dsp scummvm.dsw sound/fmopl.h gui.h sound.h \ + +.cpp.o: +	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(<) -o $*.o + +all: scummvm + +scummvm: $(OBJS) +	$(CC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) + +$(OBJS): Makefile + +clean: +	rm -f $(OBJS) scummvm + +dist: +	rm -f $(ZIPFILE) +	zip -q $(ZIPFILE) $(DISTFILES) + +check: +$(OBJS): $(INCS) @@ -29,6 +29,7 @@ byte Scumm::getMaskFromBox(int box)  	Box *ptr = getBoxBaseAddr(box);  	if (!ptr)  		return 0; +  	return ptr->mask;  } @@ -2639,68 +2639,133 @@ void Scumm::drawBomp(BompDrawData * bd)  CHECK_HEAP;  } +  void Scumm::createSpecialPalette(int16 a, int16 b, int16 c, int16 d, int16 e, int16 colorMin, int16 colorMax) +  { +  	byte *palPtr; +  	byte *curPtr; +  	byte *searchPtr; + +  	byte colorComp1; +  	byte colorComp2; +  	byte colorComp3; + +  	byte searchComp1; +  	byte searchComp2; +  	byte searchComp3; + +  	short int bestResult; +  	short int currentResult; +  	byte currentIndex; + +  	int i; +  	int j; + +  	palPtr = getPalettePtr(); + +  	for(i=colorMin;i<colorMax;i++) +  		_proc_special_palette[i]=i; + +  	curPtr = palPtr + colorMin*3; + +  	for(i=colorMin;i<colorMax;i++) +  	{ +  	/*	colorComp1=((((*curPtr++)>>2)*c)>>8)&0x7F;  +  		colorComp2=((((*curPtr++)>>2)*d)>>8)&0x7F; +  		colorComp3=((((*curPtr++)>>2)*e)>>8)&0x7F;*/ + +  		/* Yazoo: I can't get the right formula, so I made one that just work fine with SamnMax flashlight */ + +  		colorComp1=(*curPtr++)+10; +  		colorComp2=(*curPtr++)+10; +  		colorComp3=(*curPtr++)+10; + + +  		searchPtr = palPtr; +  		bestResult = 0x7FFF; +  		currentIndex = 0; + +  		for(j=0;j<256;j++) +  		{ +  			searchComp1 = (*searchPtr++); +  			searchComp2 = (*searchPtr++); +  			searchComp3 = (*searchPtr++); + +  			currentResult = abs(searchComp1-colorComp1) + abs(searchComp2-colorComp2) + abs(searchComp3-colorComp3); + +  			if(currentResult<bestResult) +  				if(currentIndex >= a && currentIndex <= b) +  				{ +  					_proc_special_palette[i]=currentIndex; +  					bestResult=currentResult; +  				} + +  			currentIndex++; +  		} + +  	} +  }
\ No newline at end of file diff --git a/object.cpp b/object.cpp index 48a19c820b..c389cfaacf 100644 --- a/object.cpp +++ b/object.cpp @@ -44,6 +44,7 @@ void Scumm::putClass(int obj, int cls, bool set)  	cls &= 0x7F;  	checkRange(32, 1, cls, "Class %d out of range in getClass"); +  	if (_features & GF_SMALL_HEADER) {  		if (cls == 32)							// CLASS_TOUCHABLE  			cls = 24; diff --git a/saveload.cpp b/saveload.cpp index 8993b34a53..ccfbd5d92f 100644 --- a/saveload.cpp +++ b/saveload.cpp @@ -467,6 +467,7 @@ void Scumm::saveOrLoad(Serializer * s)  		MKLINE(Scumm, gdi._transparency, sleByte),  		MKARRAY(Scumm, _currentPalette[0], sleByte, 768), +  		/* virtscr */  		MKARRAY(Scumm, charset._buffer[0], sleByte, 256), @@ -566,6 +567,7 @@ void Scumm::saveOrLoad(Serializer * s)  		MKARRAY(Scumm, gfxUsageBits[0], sleUint32, 200),  		MKLINE(Scumm, gdi._transparency, sleByte),  		MKARRAY(Scumm, _currentPalette[0], sleByte, 768), +  		MKARRAY(Scumm, _proc_special_palette[0], sleByte, 256),  		/* virtscr */ diff --git a/script_v1.cpp b/script_v1.cpp index 3b15ce6856..2523097a9f 100644 --- a/script_v1.cpp +++ b/script_v1.cpp @@ -836,9 +836,12 @@ void Scumm::o5_actorSetClass()  			continue;  		} +  		if(_gameId == GID_INDY3_256) +  			newClass--; +  		if (newClass & 0x80)  			putClass(act, newClass, 1);  		else @@ -1305,32 +1308,46 @@ void Scumm::o5_getActorX()  {  	int actor;  	getResultPos(); +  	if(_gameId == GID_INDY3_256) +  		actor = getVarOrDirectByte(0x80); +  	else  		actor = getVarOrDirectWord(0x80); +  	setResult(getObjX(actor));  }  void Scumm::o5_getActorY()  { +  	int actor;  	getResultPos(); +  	if(_gameId == GID_INDY3_256) +  		actor = getVarOrDirectByte(0x80); +  	else +  		actor = getVarOrDirectWord(0x80);  	setResult(getObjY(actor));  }  void Scumm::o5_getAnimCounter()  { +  	Actor *a;  	getResultPos(); +  	a=derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorAnimCounter"); +  	if(a) // FIXME  		setResult(a->cost.animCounter1); +  	else +  		setResult(0);  } @@ -2207,6 +2224,7 @@ void Scumm::o5_soundKludge()  void Scumm::o5_startMusic()  { +  	addSoundToQueue(getVarOrDirectByte(0x80));  } @@ -2244,7 +2262,9 @@ void Scumm::o5_startScript()  void Scumm::o5_startSound()  { +  	_vars[VAR_MUSIC_FLAG]=0; +  	addSoundToQueue(getVarOrDirectByte(0x80));  } diff --git a/script_v2.cpp b/script_v2.cpp index 8a4df8e907..e61a42448e 100644 --- a/script_v2.cpp +++ b/script_v2.cpp @@ -2798,6 +2798,7 @@ void Scumm::o6_miscOps()  		case 108:									/* create proc_special_palette */  		case 109: +  			createSpecialPalette(args[1], args[2],args[3], args[4], args[5], 0, 256);  			break; @@ -24,7 +24,7 @@  #include "sound/mixer.h"  #define SCUMMVM_VERSION "0.2.0 devel" -#define SCUMMVM_CVS "031402" +#define SCUMMVM_CVS "042002"  #define SWAP(a,b) do{int tmp=a; a=b; b=tmp; } while(0)  #define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0])) @@ -958,6 +958,7 @@ public:  	uint16 _mouthSyncTimes[52];  	uint _curSoundPos;  	int current_cd_sound; +  	int tempMusic;  #ifdef COMPRESSED_SOUND_FILE diff --git a/scummsys.h b/scummsys.h index 07b7c96651..e19957555f 100644 --- a/scummsys.h +++ b/scummsys.h @@ -19,6 +19,11 @@   *   */ +#if defined(HAVE_NO_BOOL) +typedef int bool; +const bool true(1), false(0); +#endif  /*  HAVE_NO_BOOL  */ +  #if defined(_MSC_VER)  //#pragma warning (disable: 4244) diff --git a/scummvm.cpp b/scummvm.cpp index 0014384a7f..067d64a3d6 100644 --- a/scummvm.cpp +++ b/scummvm.cpp @@ -53,8 +53,10 @@ void Scumm::scummInit()  	int i;  	Actor *a; +  	tempMusic=0; +  	debug(9, "scummInit");  	if (_features & GF_SMALL_HEADER) @@ -254,18 +256,29 @@ int Scumm::scummLoop(int delta)  			}				  		}  	} else if (_features & GF_OLD256) +  	{ +  		if(tempMusic == 3) +  		{ +  			tempMusic = 0;  			_vars[VAR_MUSIC_FLAG]++; +  		} +  		else +  		{ +  			tempMusic ++; +  		} +  	} +  	if (_saveLoadFlag) {  		if (_saveLoadFlag == 1) {  			saveState(_saveLoadSlot, _saveLoadCompatible); diff --git a/simon/simon.cpp b/simon/simon.cpp index f0890e600f..0d9e8db987 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -302,7 +302,7 @@ void SimonState::readItemChildren(FILE *in, Item *item, uint tmp) {  		uint j, k;  		Child1 *child; -		size = sizeof(Child1); +		size = CHILD1_SIZE;  		for(i=0,j=fr2; i!=6; i++, j>>=2)  			if (j&3)  				size += sizeof(child->array[0]); @@ -319,7 +319,7 @@ void SimonState::readItemChildren(FILE *in, Item *item, uint tmp) {  		uint i,k,size;  		Child2 *child; -		size = sizeof(Child2); +		size = CHILD2_SIZE;  		for(i=0; i!=16; i++)  			if (fr & (1<<i))  				size += sizeof(child->array[0]); diff --git a/simon/simon.h b/simon/simon.h index 1581007fbe..d44271dcfb 100644 --- a/simon/simon.h +++ b/simon/simon.h @@ -47,10 +47,10 @@ void fileWriteBE16(FILE *in, uint16 value);  #define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0]))  #define CHECK_BOUNDS(x,y) assert((uint)(x)<ARRAYSIZE(y)) -#ifdef WIN32 -/* don't complain about zero sized arrays */ -#pragma warning (disable: 4200) -#endif +enum { +       CHILD1_SIZE = 12, +       CHILD2_SIZE = 16 +};  struct Child {  	Child *next; @@ -62,7 +62,7 @@ struct Child2 {  	uint16 string_id;  	uint32 avail_props; -	int16 array[0]; +	int16 array[1];  };  struct Child1 { @@ -70,7 +70,7 @@ struct Child1 {  	uint16 subroutine_id;  	uint16 fr2; -	uint16 array[0]; +	uint16 array[1];  };  struct Child9 { diff --git a/v4/resource_v4.cpp b/v4/resource_v4.cpp index 2514641020..f2b897489e 100644 --- a/v4/resource_v4.cpp +++ b/v4/resource_v4.cpp @@ -26,9 +26,7 @@  void Scumm_v4::loadCharset(int no)  {  	uint32 size; -	 - -memset(_charsetData, 0, sizeof(_charsetData)); +	memset(_charsetData, 0, sizeof(_charsetData));  	checkRange(4, 0, no, "Loading illegal charset %d");  	openRoom(-1); | 
