BYTE NameCaptain (QUEUE *pQueue, SPECIES_ID SpeciesID) { BYTE name_index; HLINK hStarShip; assert (GetLinkSize (pQueue) == sizeof (STARSHIP) || GetLinkSize (pQueue) == sizeof (SHIP_FRAGMENT)); do { HLINK hNextShip; name_index = PickCaptainName (); for (hStarShip = GetHeadLink (pQueue); hStarShip; hStarShip = hNextShip) { SHIP_BASE *ShipPtr; BYTE test_name_index = -1; ShipPtr = (SHIP_BASE *) LockLink (pQueue, hStarShip); hNextShip = _GetSuccLink (ShipPtr); if (ShipPtr->SpeciesID == SpeciesID) test_name_index = ShipPtr->captains_name_index; UnlockLink (pQueue, hStarShip); if (name_index == test_name_index) break; } } while (hStarShip /* name matched another ship */); return name_index; }
BYTE NameCaptain (PQUEUE pQueue, STARSHIPPTR StarShipPtr) { BYTE name_index; HSTARSHIP hStarShip; do { HSTARSHIP hNextShip; name_index = PickCaptainName (); for (hStarShip = GetHeadLink (pQueue); hStarShip; hStarShip = hNextShip) { STARSHIPPTR TestShipPtr; TestShipPtr = LockStarShip (pQueue, hStarShip); hNextShip = _GetSuccLink (TestShipPtr); if (TestShipPtr->RaceResIndex == StarShipPtr->RaceResIndex) { BOOLEAN SameName; if (LOBYTE (GLOBAL (CurrentActivity)) == SUPER_MELEE) SameName = (BOOLEAN)( name_index == TestShipPtr->captains_name_index ); else SameName = (BOOLEAN)( name_index == StarShipCaptain (TestShipPtr) ); if (SameName) { UnlockStarShip (pQueue, hStarShip); break; } } UnlockStarShip (pQueue, hStarShip); } } while (hStarShip); return (name_index); }