(version 2)
(include "sci.sh")
(exports
    0 eRS
)
(use "Main")
(use "PolyPath")
(use "Game")
(use "User")
(use "Obj")
(script 17)


(local
    local0

)
(procedure (localproc_050c)
    (if (< (send gEgo:x) 0)
        (send gEgo:x((+ 0 (* (send gEgo:xStep) 2))))
    )(else
        (if (> (send gEgo:x) 319)
            (send gEgo:x((- 319 (* (send gEgo:xStep) 2))))
        )
    )
)


(procedure (localproc_0552)
    (if (< (send gEgo:y) (send global2:horizon))
        (send gEgo:y((+ (send global2:horizon) (* (send gEgo:yStep) 2))))
    )(else
        (if (> (send gEgo:y) 189)
            (send gEgo:y((- 189 (* (send gEgo:yStep) 2))))
        )
    )
)


(class FPRoom of Rm
    (properties
        script 0
        number 0
        modNum -1
        noun 0
        timer 0
        keep 0
        initialized 0
        picture 0
        style $ffff
        horizon 15
        controls 0
        north 0
        east 0
        south 0
        west 0
        curPic 0
        picAngle 0
        vanishingX 160
        vanishingY -30000
        obstacles 0
        inset 0
    )

    (method (init param1)
        (var temp0, temp1, temp2[2])
        (if (== global119 9)
            (if (proc999_5(gNumber 410 600 610 620 630 640 650 660 670 690 710 720 730))
                proc0_4(70)
                (send gTimers:delete(ScriptID(0 14)))
            )(else
                (if (not (send gTimers:contains(ScriptID(0 14))))
                    (send (ScriptID(0 14)):setReal(ScriptID(0 14) 40))
                )
            )
        )
        = number gNumber
        = gPicAngle picAngle
        (if (proc0_2(1))
            PalVary(pvUNINIT)
        )
        (if (picture)
            (self:drawPic(picture))
        )
        (if (proc0_2(1))
            (if (proc999_5(gNumber 200 210 220 230 235 240 250 260 265 270))
                PalVary(pvINIT 900 0)
            )(else
                (if (proc999_5(gNumber 300 310 320))
                    PalVary(pvINIT 910 0)
                )(else
                    (if (== gNumber 500)
                        PalVary(pvINIT 920 0)
                    )(else
                        (if (== gNumber 400)
                            PalVary(pvINIT 930 0)
                        )
                    )
                )
            )
        )
        (if (proc999_5(gNumber 200 210 220 230 235 240 250 260 265 270 300 310 320) and (<> global105 16))
            SetVideoMode(2)
        )(else
            SetVideoMode(0)
        )
        (if (== gNumber 620)
            (if (<> gGNumber 610)
                0
            )(else
                (self:setScript(eRS param1 gGNumber))
            )
        )(else
            (if (not (send gOldCast:contains(gEgo)))
                0
            )(else
                (if (script)
                    0
                )(else
                    (if (not (send ((User:alterEgo)):edgeHit))
                        0
                    )(else
                        (if (proc999_5(style 11 12 13 14))
                            = temp0 (+ 1 (/ CelWide((send ((User:alterEgo)):view) (send ((User:alterEgo)):loop) (send ((User:alterEgo)):cel)) 2))
                            = temp1 (+ 1 (/ CelHigh((send ((User:alterEgo)):view) (send ((User:alterEgo)):loop) (send ((User:alterEgo)):cel)) 2))
                            (switch ((send ((User:alterEgo)):edgeHit))
                                (case 1
                                    (send ((User:alterEgo)):y(188))
                                )
                                (case 4
                                    (send ((User:alterEgo)):x((- 319 temp0)))
                                )
                                (case 3
                                    (send ((User:alterEgo)):y((+ horizon temp1)))
                                )
                                (case 2
                                    (send ((User:alterEgo)):x((+ 0 temp0)))
                                )
                            )
                            (send ((User:alterEgo)):edgeHit(0))
                        )(else
                            (if (not paramTotal)
                                = param1 0
                            )
                            (self:setScript(eRS param1 gGNumber))
                        )
                    )
                )
            )
        )
        (if ((send gEgo:scaler))
            (send ((send gEgo:scaler)):doit())
        )
    )


    (method (doit)
        (var temp0)
        (if (script)
            (send script:doit())
        )(else
            (if (<> gNumber gNewRoomNumber)
                0
            )(else
                (if (not (send gOldCast:contains(gEgo)))
                    0
                )(else
                    (if (
                    (switch (= temp0 (send ((User:alterEgo)):edgeHit))
                        (case 1
                            north
                        )
                        (case 2
                            east
                        )
                        (case 3
                            south
                        )
                        (case 4
                            west
                        )
                    )
)
                        (self:setScript(lRS 0 temp0))
                    )
                )
            )
        )
    )


    (method (doVerb theVerb)
        (if (not (super:doVerb(theVerb)))
            proc0_6(self theVerb)
        )
    )


    (method (setInset param1)
        (send gIconBar:disable(7))
        (super:setInset(rest param1))
    )

)
(instance lRS of Script
    (properties)

    (method (changeState newState)
        (var temp0, temp1)
        (switch (= state newState)
            (case 0
                (send gGame:handsOff())
                = temp1 CelWide((send gEgo:view) (send gEgo:loop) (send gEgo:cel))
                = temp0 CelHigh((send gEgo:view) (send gEgo:loop) (send gEgo:cel))
                (switch (register)
                    (case 1
                        (send global2:newRoom((send global2:north)))
                    )
                    (case 3
                        (send gEgo:setMotion(PolyPath (send gEgo:x) (+ 189 temp0) self))
                        = register (send global2:south)
                    )
                    (case 2
                        (send gEgo:setMotion(PolyPath (+ 319 temp1) (send gEgo:y) self))
                        = register (send global2:east)
                    )
                    (case 4
                        (send gEgo:setMotion(PolyPath (- 0 temp1) (send gEgo:y) self))
                        = register (send global2:west)
                    )
                )
            )
            (case 1
                (send gEgo:hide())
                = cycles 2
            )
            (case 2
                (send global2:newRoom(register))
            )
        )
    )

)
(instance public eRS of Script
    (properties)

    (method (changeState newState)
        (var temp0, temp1)
        (switch (= state newState)
            (case 0
                = cycles 0
                (if ((send gUser:canControl()))
                    (send gGame:handsOff())
                )
                = temp0 CelHigh((send gEgo:view) (send gEgo:loop) (send gEgo:cel))
                = temp1 CelWide((send gEgo:view) (send gEgo:loop) (send gEgo:cel))
                (switch (register)
                    (case (send client:north)
                        localproc_050c()
                        (send gEgo:y((+ (send global2:horizon) (send gEgo:yStep))))
                        = cycles 1
                    )
                    (case (send client:south)
                        localproc_050c()
                        (send gEgo:
                            y(+ 189 temp0)
                            setMotion(PolyPath (send gEgo:x) - 189 (* (send gEgo:yStep) 2) self)
                        )
                    )
                    (case (send client:east)
                        localproc_0552()
                        (send gEgo:
                            x(+ 319 (/ temp1 2))
                            setMotion(PolyPath - 319 (* (send gEgo:xStep) 2) (send gEgo:y) self)
                        )
                    )
                    (case (send client:west)
                        localproc_0552()
                        (send gEgo:
                            x(- 0 (/ temp1 2))
                            setMotion(PolyPath + 0 (* (send gEgo:xStep) 2) (send gEgo:y) self)
                        )
                    )
                    (default 
                        = cycles 1
                    )
                )
            )
            (case 1
                (send gGame:handsOn(1))
                (self:dispose())
            )
        )
    )

)
