(version 2)
(include "sci.sh")
(exports
    0 Room420
)
(use "Main")
(use "Class_255_0")
(use "Cycle")
(use "Game")
(use "Feature")
(use "Obj")
(script 420)



(instance elevTop of View
    (properties)
)
(instance elevBottom of View
    (properties)
)
(instance cable1 of View
    (properties)
)
(instance cable2 of View
    (properties)
)
(instance cable3 of View
    (properties)
)
(instance cable4 of View
    (properties)
)
(instance public Room420 of Rm
    (properties
        picture 420
    )

    (method (init)
        = global104 0
        (super:init())
        (send gEgo:init())
        (switch (gNorth)
            (case 42
                proc0_1()
                (send gEgo:posn(93 156))
                (elevTop:
                    view(83)
                    ignoreActors()
                    posn(164 112)
                    setPri(12)
                    loop(1)
                    cel(1)
                    init()
                    stopUpd()
                )
                (elevBottom:
                    view(83)
                    ignoreActors()
                    posn(164 112)
                    setPri(7)
                    loop(1)
                    cel(0)
                    init()
                    stopUpd()
                )
                (cable1:
                    view(83)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 80)
                    setPri(10)
                    init()
                    stopUpd()
                )
                (cable2:
                    view(83)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 42)
                    setPri(10)
                    init()
                    stopUpd()
                )
                (cable3:
                    view(83)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 12)
                    setPri(10)
                    init()
                    stopUpd()
                )
                (cable4:
                    view(83)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 0)
                    setPri(10)
                    init()
                    stopUpd()
                )
            )
            (case 421
                (send gEgo:
                    view(83)
                    setLoop(1)
                    setCel(2)
                    posn()
                )
                (cable1:
                    view(777)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 80)
                    setPri(10)
                    init()
                    stopUpd()
                )
                (cable2:
                    view(777)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 42)
                    setPri(10)
                    init()
                    stopUpd()
                )
                (cable3:
                    view(777)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 12)
                    setPri(10)
                    init()
                    stopUpd()
                )
                (cable4:
                    view(777)
                    loop(1)
                    cel(3)
                    ignoreActors()
                    posn(164 0)
                    setPri(10)
                    init()
                    stopUpd()
                )
                (send global2:setScript(lowerElevator))
            )
        )
        (send gEgo:init())
    )


    (method (doit)
        (super:doit())
        (if (<> global11 global13)
            return 
        )
        (if (& (send gEgo:onControl(1)) $0040)
            (send global2:newRoom(42))
        )
    )


    (method (handleEvent pEvent)
        (if ((send pEvent:claimed))
            return 1
        )
        return 
            (if (== (send pEvent:type) 128)
                (if (Said('look>'))
                    (if ((Said('/area') or Said('/around')) or Said('[<around][/!*]'))
                        proc255_0(420 0)
                    )(else
                        (if (Said('/elevator'))
                            proc255_0(420 1)
                        )(else
                            (if (Said('/button,console,control'))
                                proc255_0(420 2)
                            )(else
                                (if (Said('<up'))
                                    proc255_0(420 3)
                                )(else
                                    (if (Said('/pit'))
                                        proc255_0(420 4)
                                    )(else
                                        proc255_0(420 5)
                                        (send pEvent:claimed(1))
                                    )
                                )
                            )
                        )
                    )
                )(else
                    (if ((Said('press/button') or Said('use/elevator')) or Said('press<up/'))
                        (if ((send gEgo:inRect(150 147 180 158)))
                            (send global2:setScript(raise))
                        )(else
                            proc0_5()
                        )
                    )(else
                        (if (Said('press<down'))
                            proc255_0(420 6)
                        )(else
                            (if (Said('climb'))
                                proc255_0(420 7)
                            )
                        )
                    )
                )
            )(else
                0
            )
    )


    (method (newRoom newRoomNumber)
        (if (<> newRoomNumber 421)
            (send gLongSong:
                owner(-1)
                number(22)
                priority(1)
                loop(-1)
                play()
            )
        )
        (super:newRoom(newRoomNumber))
    )

)
(instance raise of Script
    (properties)

    (method (doit)
        (super:doit())
        (if (<> global11 global13)
            return 
        )
        (if (< Abs((- (send gEgo:y) (cable1:y))) 2)
            (cable1:dispose())
        )(else
            (if (< Abs((- (send gEgo:y) (cable2:y))) 2)
                (cable2:dispose())
            )(else
                (if (< Abs((- (send gEgo:y) (cable3:y))) 2)
                    (cable3:dispose())
                )(else
                    (if (< Abs((- (send gEgo:y) (cable4:y))) 2)
                        (cable4:dispose())
                    )
                )
            )
        )
    )


    (method (changeState newState)
        (switch (= state newState)
            (case 0
                proc0_2()
                (send gEgo:setMotion(MoveTo 164 153 self))
            )
            (case 1
                (send gEgo:
                    view(83)
                    cel(255)
                    setLoop(0)
                    setCycle(End self)
                )
            )
            (case 2
                (send gEgo:
                    ignoreActors()
                    illegalBits(0)
                    setLoop(1)
                    setCel(2)
                    posn(164 (elevTop:y))
                    setPri(11)
                    setMotion(MoveTo 164 -60 self)
                )
                (elevTop:dispose())
                (elevBottom:dispose())
            )
            (case 3
                (send global2:newRoom(421))
            )
        )
    )

)
(instance lowerElevator of Script
    (properties)

    (method (doit)
        (super:doit())
        (if (<> global11 global13)
            return 
        )
        (if (< Abs((- (send gEgo:y) (cable1:y))) 2)
            (cable1:
                view(83)
                loop(1)
                cel(3)
                forceUpd()
                stopUpd()
            )
        )(else
            (if (< Abs((- (send gEgo:y) (cable2:y))) 2)
                (cable2:
                    view(83)
                    loop(1)
                    cel(3)
                    forceUpd()
                    stopUpd()
                )
            )(else
                (if (< Abs((- (send gEgo:y) (cable3:y))) 2)
                    (cable3:
                        view(83)
                        loop(1)
                        cel(3)
                        forceUpd()
                        stopUpd()
                    )
                )(else
                    (if (< Abs((- (send gEgo:y) (cable4:y))) 2)
                        (cable4:
                            view(83)
                            loop(1)
                            cel(3)
                            forceUpd()
                            stopUpd()
                        )
                    )
                )
            )
        )
    )


    (method (changeState newState)
        (switch (= state newState)
            (case 0
                proc0_2()
                (send gEgo:
                    view(83)
                    ignoreActors()
                    illegalBits(0)
                    setLoop(1)
                    setCel(2)
                    posn(164 -60)
                    setPri(11)
                    setMotion(MoveTo 164 112 self)
                )
            )
            (case 1
                (elevTop:
                    view(83)
                    ignoreActors()
                    posn(164 112)
                    setPri(12)
                    loop(1)
                    cel(1)
                    init()
                    stopUpd()
                )
                (elevBottom:
                    view(83)
                    ignoreActors()
                    posn(164 112)
                    setPri(7)
                    loop(1)
                    cel(0)
                    init()
                    stopUpd()
                )
                proc0_1()
                (send gEgo:
                    view(0)
                    setLoop(-1)
                    setCel(-1)
                    setCycle(Walk)
                    illegalBits(-32768)
                    posn(164 153)
                )
                proc0_3()
            )
        )
    )

)
