(include "sci.sh")
(use "Main")
(use "Class_255_0")
(use "Sound")
(use "Cycle")
(use "Game")
(use "PV")
(use "Obj")
(script 51)


(local
    newProp
    newView
    newProp_2
    newProp_3
    newView_2
    newProp_4
    local6
    local7

)
(instance keyholeMusic of Sound
    (properties
        number 61
    )
)
(instance public Room51 of Rm
    (properties
        picture 51
        style 16
    )

    (method (init)
        = global101 1
        = global189 1
        Load(rsVIEW 2)
        Load(rsVIEW 614)
        Load(rsVIEW 647)
        Load(rsVIEW 70)
        (self:setRegions(602))
        (super:init())
        (keyholeMusic:init())
        (if ((send gEgo:has(33)) and (< global165 5))
            = global165 4
        )
        (if ((== gPicture 49) or (== gPicture 0))
            (send gEgo:
                view(2)
                setStep(2 1)
                posn(156 140)
                illegalBits(32768)
                init()
            )
            (send (= newProp (Prop:new())):
                view(614)
                loop(0)
                setCel(255)
                posn(140 132)
                ignoreActors(0)
                setPri(8)
                init()
                setCycle(Beg)
            )
            (send (= newView (View:new())):
                view(614)
                setLoop(1)
                posn(165 106)
                init()
                hide()
            )
            (if (global165 and (< global165 5))
                (send newView:
                    cel(
                        (switch (global165)
                            (case 1
                                0
                            )
                            (case 2
                                1
                            )
                            (case 3
                                (if ((send gEgo:has(33)))
                                    3
                                )(else
                                    2
                                )
                            )
                            (case 4
                                0
                            )
                        )
)
                    setPri(2)
                    show()
                )
            )
            (send gEgo:
                loop(2)
                setMotion(0)
            )
        )
    )


    (method (dispose)
        (keyholeMusic:dispose())
        = global189 0
        (super:dispose())
    )


    (method (handleEvent pEvent)
        return 
            (if ((send pEvent:claimed()))
                return 1
            )(else
                (if (== (send pEvent:type()) 128)
                    (if (Said('look>'))
                        (if (Said('/keyhole'))
                            (if (== (send newProp:cel()) 0)
                                (if (not global166)
                                    (if ((> global165 0) and (<> global165 5))
                                        (self:setScript(theKeyhole))
                                    )(else
                                        (self:setScript(emptyHole))
                                    )
                                )(else
                                    (if (<> script theKeyhole)
                                        (self:setScript(emptyHole))
                                    )(else
                                        Print(51 0)
                                    )
                                )
                            )(else
                                Print(51 1)
                            )
                        )(else
                            (if (Said('/door'))
                                Print(51 2)
                            )(else
                                (if (Said('/wall'))
                                    Print(51 3)
                                )(else
                                    (if (Said('/dirt') or Said('<down'))
                                        Print(51 4)
                                    )(else
                                        (if (Said('[<around,at][/room,cottage,closet]'))
                                            Print(51 5)
                                        )
                                    )
                                )
                            )
                        )
                    )(else
                        (if (Said('open/door,closet'))
                            (if (== (send newProp:cel()) 0)
                                (if ((global166 or (== global165 0)) or (== global165 5))
                                    (if ((send gEgo:inRect(134 131 169 141)))
                                        (send newProp:setScript(doorOpen))
                                    )(else
                                        proc0_15()
                                    )
                                )(else
                                    Print(51 6)
                                )
                            )(else
                                Print(51 7)
                            )
                        )(else
                            (if (Said('close/door'))
                                (if ((send newProp:cel()))
                                    (send newProp:
                                        ignoreActors(0)
                                        setCycle(Beg)
                                    )
                                    (send newView:hide())
                                )(else
                                    Print(51 8)
                                )
                            )
                        )
                    )
                )
            )
    )

)
(instance theKeyhole of Script
    (properties)

    (method (init param1)
        Load(rsVIEW 70)
        Load(rsVIEW 251)
        Load(rsVIEW 252)
        Load(rsVIEW 253)
        Load(rsVIEW 254)
        Load(rsVIEW 255)
        Load(rsVIEW 647)
        Load(rsPIC 52)
        (send (= newProp_2 (Prop:new())):
            view(251)
            loop(0)
            cel(1)
            posn(152 90)
            init()
            hide()
        )
        (send (= newProp_3 (Prop:new())):
            view(251)
            loop(1)
            posn(175 66)
            init()
            hide()
        )
        (send (= newView_2 (View:new())):
            view(251)
            loop(0)
            cel(0)
            posn(162 116)
            init()
            hide()
        )
        (send (= newProp_4 (Prop:new())):
            view(253)
            loop(0)
            cel(0)
            posn(134 89)
            init()
            hide()
        )
        (super:init(param1))
    )


    (method (changeState newState)
        (switch (= state newState)
            (case 0
                (proc0_10() (send gEgo:setMotion(MoveTo 144 134 self))  )
            )
            (case 1
                ((send gEgo:
                    view(70)
                    loop(0)
                    cel(0)
                    setCycle(End self)
                )
  )
            )
            (case 2
                ((send gEgo:hide()) (send newView:hide()) (send newProp:hide()) (send global2:drawPic(52 15)) = global166 1 
                (if (global100)
                    (send ((View:new())):
                        view(647)
                        loop(3)
                        posn(184 88)
                        addToPic()
                    )
                )
 (send newProp_2:show()) (send newProp_3:
                    setPri(+ (send newProp_2:priority()) 1)
                    show()
                    cycleSpeed(1)
                    setCycle(Fwd)
                )
 (send newView_2:
                    show()
                    stopUpd()
                )
 (keyholeMusic:
                    loop(1)
                    play()
                )
 = local7 Print(51 9 66 global23 134 -1 15 50 12) = seconds 2  )
            )
            (case 3
                ((send newProp_3:
                    setCycle(0)
                    stopUpd()
                )
 Print(51 10 66 global23 134 -1 15 140 290 172) (send newProp_3:dispose()) (send newProp_2:
                    view(252)
                    loop(0)
                    cel(0)
                    posn(152 89)
                    setCycle(End)
                )
 = seconds 2  )
            )
            (case 4
                ((send newProp_2:
                    loop(1)
                    cel(0)
                    cycleSpeed(2)
                    setCycle(Fwd)
                )
 = seconds 10  )
            )
            (case 5
                (proc0_23() (send newProp_2:
                    loop(1)
                    cel(0)
                )
 = seconds 2  )
            )
            (case 6
                ((send newProp_2:
                    loop(1)
                    cel(0)
                    setCycle(End self)
                )
  )
            )
            (case 7
                ((send newProp_2:
                    loop(0)
                    cel(0)
                )
 (send newProp_4:
                    show()
                    setCycle(End)
                )
 = seconds 3  )
            )
            (case 8
                (Print(51 11 66 global23 134 -1 20 50 10) = seconds 3  )
            )
            (case 9
                ((send newProp_4:
                    loop(1)
                    cel(0)
                    setCycle(End)
                )
 (send ((send gInv:at(33))):moveTo(49)) = seconds 3  )
            )
            (case 10
                (Print(51 12 66 global23 134 -1 20 166 50 5) Print(51 13 66 global23 134 -1 15 140 290 172) = seconds 5  )
            )
            (case 11
                ((send newProp_4:dispose()) (send newProp_2:
                    view(254)
                    loop(0)
                    cel(0)
                    ignoreActors(1)
                    cycleSpeed(2)
                    setCycle(End)
                )
 = seconds 5  )
            )
            (case 12
                ((send newProp_2:
                    view(255)
                    loop(0)
                    cel(0)
                    cycleSpeed(0)
                    setCycle(End self)
                )
  )
            )
            (case 13
                ((send newProp_2:
                    loop(1)
                    cel(0)
                    cycleSpeed(2)
                    setCycle(Fwd)
                )
 = seconds 5  )
            )
            (case 14
                (proc0_23() = global165 3 = seconds 5  )
            )
            (case 15
                ((send newProp_2:dispose()) (send newView_2:dispose()) (send global2:drawPic(51 15)) proc0_11() (send newProp:show()) (send gEgo:
                    show()
                    setCycle(Beg self)
                )
  )
            )
            (case 16
                ((send gEgo:
                    view(2)
                    loop(3)
                    setMotion(0)
                    setCycle(Walk)
                )
 proc0_11() = seconds 60  )
            )
            (case 17
                (Print(51 14) = global165 5 (send client:setScript(0)) )
            )
        )
    )

)
(instance emptyHole of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                (proc0_10() (send gEgo:setMotion(MoveTo 144 134 self))  )
            )
            (case 1
                ((send gEgo:
                    view(70)
                    loop(0)
                    cel(0)
                    setCycle(End self)
                )
  )
            )
            (case 2
                ((send gEgo:hide()) (send newView:hide()) (send newProp:hide()) (send global2:drawPic(52 15)) 
                (if (global100)
                    (send ((View:new())):
                        view(647)
                        loop(3)
                        posn(184 88)
                        addToPic()
                    )
                )
 (keyholeMusic:play()) 
                (if (== global165 3)
                    (send (= newProp_2 (Prop:new())):
                        view(255)
                        loop(1)
                        cel(0)
                        posn(152 90)
                        init()
                        cycleSpeed(2)
                        setCycle(Fwd)
                    )
                    (send (= newView_2 (View:new())):
                        view(251)
                        loop(0)
                        cel(0)
                        posn(162 116)
                        addToPic()
                    )
                    = local7 Print(51 15 134 -1 20 166 172)
                )
 = seconds 5  )
            )
            (case 3
                (proc0_23() 
                (if (IsObject(newProp_2))
                    (send newProp_2:dispose())
                )
 (send global2:drawPic(51 15)) (send newProp:show()) (send gEgo:
                    view(70)
                    loop(0)
                    setCycle(Beg self)
                    show()
                )
  )
            )
            (case 4
                ((send gEgo:
                    view(2)
                    loop(3)
                    setCycle(Walk)
                )
 proc0_11() )
            )
        )
    )

)
(instance doorOpen of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                (proc0_10() 
                (if (global165 and (< global165 5))
                    (send newView:
                        cel(
                            (switch (global165)
                                (case 1
                                    0
                                )
                                (case 2
                                    1
                                )
                                (case 3
                                    (if ((send gEgo:has(33)))
                                        3
                                    )(else
                                        2
                                    )
                                )
                                (case 4
                                    0
                                )
                            )
)
                        setPri(2)
                        show()
                    )
                )(else
                    (send newView:hide())
                )
 (send client:
                    ignoreActors(1)
                    setCycle(End self)
                )
  )
            )
            (case 1
                (proc0_20() proc0_11() (send global2:newRoom(49)) )
            )
        )
    )

)
