(version 2)
(include "sci.sh")
(exports
    0 Room42
)
(use "Main")
(use "Class_255_0")
(use "Sound")
(use "Cycle")
(use "Game")
(use "Feature")
(use "Obj")
(script 42)


(local
    newAct

)
(instance lightning of Prop
    (properties)
)
(instance thunder of Sound
    (properties)
)
(instance public Room42 of Rm
    (properties
        picture 42
    )

    (method (init)
        = east 43
        = south 46
        = west 41
        = north 54
        = horizon 94
        = global109 0
        = global591 0
        = global104 0
        (super:init())
        (send gEgo:init())
        Load(132 31)
        Load(132 32)
        (lightning:
            view(69)
            loop(6)
            cel(0)
            posn(123 59)
            setScript(flash)
            init()
        )
        (switch (global12)
            (case 41
                proc0_1()
                = global104 0
                (if (< (send gEgo:y) (+ horizon 2))
                    (send gEgo:posn(1 (+ horizon 2)))
                )(else
                    (send gEgo:posn(1 (send gEgo:y)))
                )
            )
            (case 46
                proc0_1()
                = global104 0
                (send gEgo:
                    view(0)
                    posn((send gEgo:x) 188)
                )
            )
            (case 43
                proc0_1()
                (send gEgo:
                    view(0)
                    posn(318 (send gEgo:y))
                )
            )
            (case 420
                proc0_1()
                (send gLongSong:
                    number(22)
                    priority(0)
                    loop(-1)
                    play()
                )
                (send gEgo:
                    view(0)
                    loop(1)
                    posn(266 107)
                )
            )
            (case 54
                (send gEgo:posn((send gEgo:x) (+ horizon 2)))
            )
            (case 421
                (send global2:setScript(festerOut))
            )
            (default 
                (send gEgo:
                    posn(188 160)
                    view(0)
                )
            )
        )
        (send gEgo:init())
        (self:setRegions(501))
        (switch (global110)
            (case 1
                (if (== Random(1 4) 3)
                    Load(128 106)
                    = gNewAct (Act:new())
                    (send gNewAct:
                        posn(1000 1000)
                        init()
                    )
                    = global114 Random(2 12)
                )
            )
            (case 2
                = gNewAct (Act:new())
                (send gNewAct:
                    posn(1000 1000)
                    init()
                )
                = global114 3
            )
        )
        (if ((send global5:contains(gNewAct)))
            (send gNewAct:
                view(106)
                setCycle(Walk)
                observeControl(2)
                posn(1000 1000)
                init()
            )
            (switch (global12)
                (case east
                    (send gNewAct:posn(359 167))
                )
                (case west
                    (send gNewAct:posn(-40 143))
                )
                (case south
                    (send gNewAct:posn(160 249))
                )
                (case north
                    (send gNewAct:posn(160 (+ horizon 2)))
                )
            )
            = global110 1
            (send (ScriptID(501 0)):notify(1))
        )(else
            (if (== (send global2:script) 0)
                (send (ScriptID(501 0)):notify(4))
            )
        )
    )


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


    (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(42 0)
                    )(else
                        (if (Said('/feet,toe,leg'))
                            proc255_0(42 1)
                        )(else
                            (if (Said('/entrance,cavity'))
                                proc255_0(42 2)
                            )(else
                                (if (Said('/door,door'))
                                    proc255_0(42 3)
                                )(else
                                    (if (Said('/mog,animal'))
                                        proc255_0(42 4)
                                    )(else
                                        (if (Said('/sign'))
                                            proc255_0(42 5)
                                        )
                                    )
                                )
                            )
                        )
                    )
                )(else
                    (if (Said('get,drag,beat/sign,mog'))
                        proc255_0(42 6)
                    )(else
                        (if (Said('read/sign'))
                            (if (& (send gEgo:onControl(0)) $2000)
                                (if ((== (send gEgo:loop) 0) or (== (send gEgo:loop) 2))
                                    proc255_0(42 7 30 1 67 -1 100)
                                )(else
                                    proc255_0(42 8)
                                )
                            )(else
                                (if (& (send gEgo:onControl(0)) $1000)
                                    (if (<> (send gEgo:loop) 3)
                                        proc255_0(42 8)
                                    )(else
                                        proc255_0(42 9 67 -1 100)
                                    )
                                )(else
                                    proc255_0(42 10)
                                )
                            )
                        )
                    )
                )
            )(else
                0
            )
    )


    (method (newRoom newRoomNumber)
        (if (== newRoomNumber 420)
            (send gLongSong:fade())
        )
        (if ((send global5:contains(gNewAct)) and (< (send gEgo:distanceTo(gNewAct)) 120))
            = global110 2
        )
        (if (not global155)
            (super:newRoom(newRoomNumber))
        )
    )

)
(instance flash of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                = seconds Random(8 30)
            )
            (case 1
                (lightning:
                    cel(255)
                    setCycle(End self)
                )
            )
            (case 2
                (lightning:cel(0))
                = seconds Random(2 5)
            )
            (case 3
                (thunder:
                    priority(2)
                    number(Random(31 32))
                    play(self)
                )
            )
            (case 4
                = state -1
            )
        )
    )

)
(instance festerOut of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                proc0_3()
                (send gLongSong:
                    number(22)
                    priority(0)
                    loop(-1)
                    play()
                )
                = newAct (Act:new())
                (send newAct:
                    view(67)
                    setLoop(0)
                    setCycle(Walk)
                    posn(244 128)
                    setMotion(MoveTo 329 175 self)
                    init()
                )
                proc0_1()
                (send gEgo:
                    view(0)
                    loop(1)
                    posn(266 107)
                    init()
                )
            )
            (case 1
                (send newAct:dispose())
            )
        )
    )

)
