Look at the overall game in itself first. I recently played Hitman so I will try and use how I would make the NPCs work.
The game will be bigger than a single complex scene, thus all GameObjects (plus NPCs) will have to page in and out depending on their visibility. As the bird is paged out, it must be able to save its state and restore that state when it pages back into the scene.
Now on to how to save this data. Come up with or get one, a collection of data (a database). and structure it such that objects can fetch and store/update their records without having to read the entire database or parse all of it into memory. Also as fore-sight, make it so that you can fit the entire game world state into the memory as a database. The technical design is up to you but SQLite is one option.
All gameobjects report to the game's state manager and when they get paged in, they just restore their state from the database. When they go out of camera view enough to get paged, they save their state to the database. Be sure to deregister a paged-out object from the state manager too. The state manager should be designed such that can send a command to alo objects in the scene and tell them to save their state and that's how you save your entire game.
You should consider putting in place a quest tracker for objects in the game. Your gameobjects must then have some sort of looped or single quest status. If the bird poops once and doesnt need to do it again, then if it has pooped, its quest state is saved to the database. When the game tries to page it back in or reload it, the bird refuses because it's completed its quest. If it poops then goes to eat again, simply save the last state, for example eating, before it gets pajed out. When the bird is re-loaded back in or paged in, it knows it was eating and now, it should go and poop. It'll loop until it gets paged out again and the cycle repeats.
Now, when you save the entire game, the game state manager tells all in-scene objects to save their state to the database. When reloading the game you simply parse this info from however you had saved it. The technical structure is trivial, as long as it is fast and a sort of random access system.
When you reload the scene you start with global fixed gameobjects designed to keep track of which place the player was in when the game was saved. The fixed gameobject will then load that zone, position the player in it, and load in all the gameobjects that were there at the time of saving. When the gameobjects are added to the zone, they start to query their state from the database and those that need to be displayed, get displayed. those that have a completed quest status, don't need to process further.
You'll use flags that you decide on for the gameobjects. I use static strings and ints.
Get to work!