bool CItemMulti::Ship_MoveDelta( CPointBase pdelta ) { // Move the ship one space in some direction. ASSERT( m_pRegion->m_iLinkedSectors ); int znew = GetTopZ() + pdelta.m_z; if ( pdelta.m_z > 0 ) { if ( znew >= (UO_SIZE_Z - PLAYER_HEIGHT )-1 ) return( false ); } else if ( pdelta.m_z < 0 ) { if ( znew <= (UO_SIZE_MIN_Z + 3 )) return( false ); } // Move the ship and everything on the deck CObjBase * ppObjs[MAX_MULTI_LIST_OBJS+1]; int iCount = Ship_ListObjs( ppObjs ); for ( int i=0; i <iCount; i++ ) { CObjBase * pObj = ppObjs[i]; ASSERT(pObj); CPointMap pt = pObj->GetTopPoint(); pt += pdelta; if ( ! pt.IsValidPoint()) // boat goes out of bounds ! { DEBUG_ERR(( "Ship uid=0%x out of bounds\n", (DWORD) GetUID())); continue; } pObj->MoveTo( pt ); if ( pObj->IsChar()) { ASSERT( m_pRegion->m_iLinkedSectors ); pObj->RemoveFromView(); // Get rid of the blink/walk pObj->Update(); } } return( true ); }