void PullBook(string &in asParent, string &in asChild, int alState) {
    if(asParent == StringSub(asParent, 0, asParent.length() - 1) + bookCounter) {
        AddDebugMessage("Pulled the correct book. Number: " + bookCounter, false);
        bookCounter++;
    } else {
        AddDebugMessage("Pulled the wrong book. Number: " + bookCounter, false);
        bookCounter = 1;
        AddTimer("", 0.1f, "resetbook");
    }
    if(bookCounter > 3) {
        AddDebugMessage("Completed the puzzle!", false);
        SetMoveObjectState("shelf_secret_door_1", 1);
    }
} 
void resetbook(string &in asTimer)
{
        PlayGuiSound("wrong_book.ogg", 1.0f);
        AddPropForce("book_1", 0, 0, -180, "world");
        AddPropForce("book_2", 0, 0, -180, "world");
        AddPropForce("book_3", 0, 0, 180, "world");
}