Need help creating spart contract where initial nft hatches/changes into a different image

So I want an egg hatching nft, imagine a pokemon go egg and after some time has passed, the egg hatches into a new image which will be the final image of the nft.
Does anyone know of any ideas of how this can be done? is it even possible?

I first thought having the image in the metadata point to a dynamic file, however, that is not secure and defeats the purpose.
Or can this just be done in the smart contract itself where it modifies the image? Has this been done by anyone? Any tutorials? tips? code that does this?
is this just a basic dynamic smart contract?