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(); }
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(); }
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(); }