Is it possible to control who owns my collections’ tokens?

Hi guys, I’ve been learning about solidity the past few weeks and came up with some ideas, but I still have some questions to which I can’t find an answer. I want to build a game to which players will get access by owning an NFT. Then, inside the game, other tokens will be available. Is it possible to control that only wallets that own an NFT from my collection can own in-game tokens?

Here’s an example to explain what I’m trying to accomplish.

There’s an NFT collection of characters. Whenever you own at least one character you can access the game. Inside the game you can acquire items, like clothing, which will also be tokens. First of all, I don’t want non-players to be able to acquire these tokens. Is there a way to restrict these tokens from being transfered into a wallet that does not own one of my character NFTs? Then, if a player sells or transfers their character NFTs, I don’t want them to keep the items, as that would take them out of the game. Is there a way to force the character NFT to be transfered only if the wallet doesn’t have any item tokens or somehow link the items to the character NFT and when this one is transfered, transfer all the linked item tokens to the new owner?

Thanks and happy coding,

it seems possible to do that, you’ll have to override the transfer function and to add some checks there, also to have easy to use functions in your main smart contract that returns true or false if a user is allowed to transfer an item