diff options
| author | Paul Gilbert | 2008-12-07 07:44:52 +0000 | 
|---|---|---|
| committer | Paul Gilbert | 2008-12-07 07:44:52 +0000 | 
| commit | 87a097618583e6044c8c9d08e32b6a28932f7815 (patch) | |
| tree | 46a3285492a668651990509f8583ba43ce6eb809 | |
| parent | 5d1e3fd03e21e9486168783b31d18d8738b2a559 (diff) | |
| download | scummvm-rg350-87a097618583e6044c8c9d08e32b6a28932f7815.tar.gz scummvm-rg350-87a097618583e6044c8c9d08e32b6a28932f7815.tar.bz2 scummvm-rg350-87a097618583e6044c8c9d08e32b6a28932f7815.zip | |
Added code differences for DW1 demo to allow the first game screen to start
svn-id: r35268
| -rw-r--r-- | engines/tinsel/bg.cpp | 3 | ||||
| -rw-r--r-- | engines/tinsel/dialogs.cpp | 17 | ||||
| -rw-r--r-- | engines/tinsel/dw.h | 10 | ||||
| -rw-r--r-- | engines/tinsel/graphics.cpp | 4 | ||||
| -rw-r--r-- | engines/tinsel/strres.cpp | 4 | ||||
| -rw-r--r-- | engines/tinsel/tinlib.cpp | 11 | 
6 files changed, 35 insertions, 14 deletions
| diff --git a/engines/tinsel/bg.cpp b/engines/tinsel/bg.cpp index 41628a55e8..a5b4170673 100644 --- a/engines/tinsel/bg.cpp +++ b/engines/tinsel/bg.cpp @@ -250,8 +250,7 @@ void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {  	pim = GetImageFromFilm(hFilm, 0, NULL, NULL, &pfilm); -	if (!TinselV0) -		SetBackPal(FROM_LE_32(pim->hImgPal)); +	SetBackPal(FROM_LE_32(pim->hImgPal));  	// Extract the film speed  	BGspeed = ONE_SECOND / FROM_LE_32(pfilm->frate); diff --git a/engines/tinsel/dialogs.cpp b/engines/tinsel/dialogs.cpp index 7118c6a784..986a4bf936 100644 --- a/engines/tinsel/dialogs.cpp +++ b/engines/tinsel/dialogs.cpp @@ -3887,6 +3887,10 @@ void SetMenuGlobals(CONFINIT *ci) {  void OpenMenu(CONFTYPE menuType) {  	int curX, curY; +	// In the DW 1 demo, don't allow any menu to be opened +	if (TinselV0) +		return; +  	if (InventoryState != IDLE_INV)  		return; @@ -5523,7 +5527,18 @@ void RegisterIcons(void *cptr, int num) {  	numObjects = num;  	invObjects = (INV_OBJECT *) cptr; -	if (TinselV2) { +	if (TinselV0) { +		// In Tinsel 0, the INV_OBJECT structure doesn't have an attributes field, so we +		// need to 'unpack' the source structures into the standard Tinsel v1/v2 format +		invObjects = (INV_OBJECT *)MemoryAlloc(DWM_FIXED, numObjects * sizeof(INV_OBJECT)); +		byte *srcP = (byte *)cptr; +		INV_OBJECT *destP = (INV_OBJECT *)invObjects; + +		for (int i = 0; i < num; ++i, ++destP, srcP += 12) { +			memmove(destP, srcP, 12); +			destP->attribute = 0; +		} +	} else if (TinselV2) {  		if (invFilms == NULL)  			// First time - allocate memory  			invFilms = (SCNHANDLE *)MemoryAlloc(DWM_FIXED | DWM_ZEROINIT, numObjects * sizeof(SCNHANDLE)); diff --git a/engines/tinsel/dw.h b/engines/tinsel/dw.h index af5ce99d29..aa7fa26080 100644 --- a/engines/tinsel/dw.h +++ b/engines/tinsel/dw.h @@ -57,14 +57,8 @@ typedef int HPOLYGON;  // the maximum value a integer number can have  #define	MAX_INT	(~MIN_INT) -// TODO: v1->v2 scene files -#ifdef FILE_SPLIT -// each scene is split into 2 files -#define	INV_OBJ_SCNHANDLE	(2 << SCNHANDLE_SHIFT)	// inventory object handle (if there are inventory objects) -#else -#define	INV_OBJ_SCNHANDLE	(1 << SCNHANDLE_SHIFT)	// inventory object handle (if there are inventory objects) -#endif - +// inventory object handle (if there are inventory objects) +#define	INV_OBJ_SCNHANDLE (TinselV0 ? (2 << SCNHANDLE_SHIFT) : (1 << SCNHANDLE_SHIFT))  #define FIELD_WORLD	0  #define FIELD_STATUS	1 diff --git a/engines/tinsel/graphics.cpp b/engines/tinsel/graphics.cpp index 8790075375..a15f5aa0dd 100644 --- a/engines/tinsel/graphics.cpp +++ b/engines/tinsel/graphics.cpp @@ -623,6 +623,10 @@ void DrawObject(DRAWOBJECT *pObj) {  		case 0x48:  			WrtAll(pObj, srcPtr, destPtr, typeId >= 0x40);  			break; +		case 0x84: +		case 0xC4: +			WrtTrans(pObj, destPtr, (typeId & 0x40) != 0); +			break;  		default:  			error("Unknown drawing type %d", typeId);  		} diff --git a/engines/tinsel/strres.cpp b/engines/tinsel/strres.cpp index 0997d68fbe..979b05fb8d 100644 --- a/engines/tinsel/strres.cpp +++ b/engines/tinsel/strres.cpp @@ -170,6 +170,10 @@ static byte *FindStringBase(int id) {  	// pointer to strings  	pText = pText + index; +	// For Tinsel 0 Ids, reduce the skip amount by 1 +	if (TinselV0 && (strSkip != 0)) +		--strSkip; +  	// skip to the correct string  	while (strSkip-- != 0) {  		// skip to next string diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp index 241a319360..5076008292 100644 --- a/engines/tinsel/tinlib.cpp +++ b/engines/tinsel/tinlib.cpp @@ -180,7 +180,7 @@ enum MASTER_LIB_CODES {  const MASTER_LIB_CODES DW1DEMO_CODES[] = {  	ACTORREF, ACTORXPOS, ACTORYPOS, ADDTOPIC, ADDINV1, ADDINV2, AUXSCALE, BACKGROUND,  	CAMERA, CONTROL, CONVERSATION, CONVTOPIC, HIGHEST_LIBCODE, CURSORXPOS, CURSORYPOS, -	DECCONVW, DECCURSOR, DECFLAGS, DECINVW, DECINV1, DECINV2, DECLEAD, DELICON, +	DECCONVW, DECCURSOR, DECTAGFONT, DECINVW, DECINV1, DECINV2, DECLEAD, DELICON,  	DELINV, EVENT, HIGHEST_LIBCODE, HELDOBJECT, HIDEACTOR, ININVENTORY, HIGHEST_LIBCODE,  	INVENTORY, HIGHEST_LIBCODE, KILLACTOR, KILLBLOCK, KILLTAG, SCREENXPOS,  	HIGHEST_LIBCODE, MOVECURSOR, NEWSCENE, NOSCROLL, OBJECTHELD, OFFSET, HIGHEST_LIBCODE, @@ -987,6 +987,8 @@ static void DecScale(int actor, int scale,   */  static void DecTagFont(SCNHANDLE hf) {  	SetTagFontHandle(hf);		// Store the font handle +	if (TinselV0) +		SetTalkFontHandle(hf);	// Also re-use for talk text  }  /** @@ -2371,6 +2373,9 @@ static int RandomFn(int n1, int n2, int norpt) {  	int i = 0;  	uint32 value; +	// In DW1 demo, upper/lower limit can be reversed +	if (n2 < n1) SWAP(n1, n2); +  	do {  		value = n1 + _vm->getRandomNumber(n2 - n1);  	} while ((lastValue == value) && (norpt == RAND_NORPT) && (++i <= 10)); @@ -3719,7 +3724,7 @@ static void WaitKey(CORO_PARAM, bool escOn, int myEscape) {  	for (;;) {  		_ctx->startEvent = getUserEvents(); -		if (!TinselV2) { +		if (TinselV1) {  			// Store cursor position  			while (!GetCursorXYNoWait(&_ctx->startX, &_ctx->startY, false))  				CORO_SLEEP(1); @@ -3729,7 +3734,7 @@ static void WaitKey(CORO_PARAM, bool escOn, int myEscape) {  			CORO_SLEEP(1);  			// Not necessary to monitor escape as it's an event anyway -			if (!TinselV2) { +			if (TinselV1) {  				int curX, curY;  				GetCursorXY(&curX, &curY, false);	// Store cursor position  				if (curX != _ctx->startX || curY != _ctx->startY) | 
