Surely some other people may help you much better than I can, but I think that your problem is the same I had at the beginning of my project.
It is my understating global variables carry over from scene to scene.
I understood that too, so I was confused the same way. Now I understand: the global variables really carry over from scene to scene, so you can use one in a scene and you can use it in other scene, having the same value you left it the last time you used it, no matter what scene was. But you always have to define the variable in the scripts you want to use it.
The solution is to write the line
global progress;
in every script where that variable is used (say, the "scene_init.script" of both scenes, the bookcase object code, the script for the character conversation...), not only in one of them.
Other solution may be defining the variable in the "base.inc" file. Since all the script files contains by default the
#include "scripts\base.inc"
line, it makes that the global variable will be always defined.
One more thing:
Watch out for this line:
progress.bookknown==”true”;
If you want this line change the progress.bookkonwn value to true, it must be
progress.bookknown=”true”;
It's an error I usually have too and many times is difficult to see.
Remember:
= for operations (say, change the value of the variables)
== for comparisons (logical operations, like conditions in "while" or "if" statements...)