Пример #1
0
void cBuilder::roomChange( int pNumber ) {

	if( mCurrentObject && mCurrentObject->partGet(0)->mPlaced == false ) {
		mCurrentRoom->objectDelete( mCurrentObject );
		delete mCurrentObject;
		mCurrentObject = 0;
	}

	if( mLinkMode ) {
		mOriginalRoom = mCurrentRoom;
		mOriginalObject = mCurrentObject;
	}

	mCurrentRoom = mCastle->roomCreate( this, pNumber );
	
	save( false );	

	// Set the room number in the window title
	mScreen->roomNumberSet( pNumber );

	if( pNumber == -1) {

		screenClear();
		mObjectPtr = readLEWord( &mMemory[ 0x785F ] );
		roomPrepare();

	} else {
		mMemory[ 0x7809 ] = pNumber;
		mMemory[ 0x780A ] = pNumber;
		roomLoad();
	}

	playerDraw();
}
Пример #2
0
void cGraphics_PC::map_Tiles_Draw() {

	uint8* Target = mImage->GetSurfaceBuffer();

	uint8* CurrentMapPtr = &mFodder->mMap[mFodder->mMapTilePtr];

	// Y
	for (uint16 cx = 0; cx < 0x0F; ++cx) {
		uint8* MapPtr = CurrentMapPtr;
		uint8* TargetRow = Target;

		uint16 StartY = 0;

		if (cx == 0)
			StartY = mFodder->word_3B610;
		else
			StartY = 0;

		// X
		for (uint16 cx2 = 0; cx2 < 0x16; ++cx2) {
			uint8* TargetTmp = TargetRow;

			uint16 Tile = readLEWord( MapPtr ) & 0x1FF;
			if (/*Tile > 0xE0 && Tile < 0xF0 ||*/ Tile > 0x1DF)
				Tile = 0;

			uint8* TilePtr = mGraphicBlkPtrs[Tile];
			uint16 StartX = 0;

			TilePtr += StartY * 0x140;
			
			if (cx2 == 0)
				StartX = mFodder->word_3B60E;
			else
				StartX = 0;

			// Each Tile Row
			for (uint16 i = StartX; i < 16; ++i) {

				memcpy( TargetTmp, TilePtr + StartX, 16 - StartX );
				TilePtr += 0x140;
				TargetTmp += mImage->GetWidth();
			}

			MapPtr += 2;
			TargetRow += (16-StartX);
		}

		Target += mImage->GetWidth() * (16-StartY);
		CurrentMapPtr += mFodder->mMapWidth << 1;
	}

	mImage->Save();
}
Пример #3
0
void cBuilder::castlePrepare( ) {
	save( false );

	// Final Room?
	if( (char) mCurrentRoom->mNumber == -1) {
		screenClear();
		mObjectPtr = readLEWord( &mMemory[ 0x785F ] );
		roomPrepare();

	} else {
		mMemory[ 0x7809 ] = mCurrentRoom->mNumber;
		mMemory[ 0x780A ] = mCurrentRoom->mNumber;
		roomLoad();
	}

	// Print any strings
	objectStringsPrint();

	// Force draw of sprites
	Sprite_Execute();
	object_Execute();

	playerDraw();
}