(version 2)
(include "sci.sh")
(exports
    0 rm790
    1 proc790_1
)
(use "Main")
(use "FPRoom")
(use "Print")
(use "Blink")
(use "Scaler")
(use "Osc")
(use "n958")
(use "StopWalk")
(use "Cycle")
(use "Game")
(use "View")
(use "Obj")
(script 790)


(local
    local0 =     1
    local1 =     1
    local2
    local3 =     1
    local4 =     2
    theRegister
    local6
    local7

)
(procedure public (proc790_1 param1)
    (var temp0, temp1)
    = temp0 1
    (while (< temp0 4)
        = temp1 59
        (while (< temp1 62)
            Display(param1 105 150 101 1 100 temp1 
                (switch (temp0)
                    (case 1
                        - local6 1
                    )
                    (case 2
                        local6
                    )
                    (case 3
                        + local6 1
                    )
                )
 102 0 106 200)
            ++temp1
        )
        ++temp0
    )
    Display(param1 105 150 101 1 100 60 local6 102 41 106 200)
)


(class WrapMusic of List
    (properties
        elements 0
        size 0
        wrapSound 0
        currentSound 0
        loopIt 0
        vol 127
        paused 0
    )

    (method (init theLoopIt param2)
        (Sounds:eachElementDo(#check))
        (if (not wrapSound)
            = wrapSound gGameMusic1
        )
        = loopIt theLoopIt
        = currentSound 0
        (self:
            add(rest param2)
            cue()
        )
    )


    (method (dispose param1)
        (send wrapSound:client(0))
        (if (paramTotal and param1)
            (super:dispose())
        )(else
            (self:release())
        )
    )


    (method (cue)
        (var temp0, temp1, temp2)
        (if (proc999_5((send wrapSound:prevSignal) -1 0))
            = temp0 1
            (if ((== loopIt -1) and (== currentSound (- size 1)))
                = temp0 -1
            )(else
                (if (== currentSound size)
                    (switch (loopIt)
                        (case 1
                            = currentSound 0
                        )
                        (default 
                            (self:
                                release()
                                dispose()
                            )
                            return 
                        )
                    )
                )
            )
            = temp1 (self:at(currentSound))
            (if (> temp1 1000)
                = temp1 (- temp1 1000)
                = temp2 1
            )(else
                = temp2 0
            )
            (send wrapSound:
                number(temp1)
                setLoop(temp0)
                flags(1)
                play(vol self)
            )
            ++currentSound
        )(else
            (if (paused)
                (send wrapSound:pause())
            )(else
                = vol (send wrapSound:vol)
            )
        )
    )


    (method (pause param1)
        (if (IsObject(wrapSound))
            (if (paramTotal and not param1)
                = paused 0
                (send wrapSound:
                    pause(0)
                    fade(vol 5 5 0)
                )
            )(else
                = paused 1
                (send wrapSound:fade(0 5 5 0))
            )
        )
    )

)
(instance public rm790 of FPRoom
    (properties
        picture 420
        style $0064
    )

    (method (init)
        (send gGame:handsOff())
        (send gIconBar:disable())
        (send gGame:setCursor(996 1))
        (send gOldKH:addToFront(self))
        (send gOldMH:addToFront(self))
        (WrapMusic:init(1 1110 1235 1675 1260))
        (send gNarrator:
            x(20)
            y(40)
            name("Director")
            showTitle(1)
        )
        (super:init())
        (self:setScript(sRunCredits 0 2))
    )


    (method (dispose)
        (super:dispose())
        (send gOldKH:delete(self))
        (send gOldMH:delete(self))
    )


    (method (handleEvent pEvent)
        (if ((local7 and (send pEvent:type)) and (== gNumber gNewRoomNumber))
            (send pEvent:claimed(1))
            (send pEvent:claimed(1))
            (send gGame:setCursor(999 1 198 175))
            (switch ((Print:
                posn(50 160)
                addButton(1 4 0 0 1 0 0 790)
                addButton(2 4 0 0 2 60 0 790)
                addButton(0 4 0 0 3 120 0 790)
                addButton(3 4 0 0 4 179 0 790)
                init()
            )
)
                (case 0
                    (send gGameMusic1:pause(0))
                )
                (case 1
                    (send gGame:restore())
                    (send gGameMusic1:pause(0))
                )
                (case 2
                    (send gGame:restart())
                    (send gGameMusic1:pause(0))
                )
                (case 3
                    = global4 1
                )
            )
            (send gGame:setCursor(996 1))
        )
    )

)
(instance sRunCredits of Script
    (properties)

    (method (changeState newState)
        (var temp0[120], temp120)
        (switch (= state newState)
            (case 0
                = seconds 2
            )
            (case 1
                = local7 1
                Palette(palSET_INTENSITY 0 256 100)
                (send gOldCast:eachElementDo(#stopUpd))
                (if (not local3)
                    (crackSound:play())
                    = local3 0
                )
                = cycles 3
            )
            (case 2
                = theRegister register
                = local6 (/ (- 200 (+ 30 (* register 10))) 2)
                Message(msgGET 790 1 0 0 local1 @temp0)
                proc790_1(@temp0)
                = seconds 1
            )
            (case 3
                = local6 (+ local6 20)
                = cycles 3
            )
            (case 4
                (if (== local0 36)
                    = local4 3
                    = local0 1
                )
                = temp120 local0
                Message(msgGET 790 local4 0 0 temp120 @temp0)
                proc790_1(@temp0)
                (if (> theRegister 1)
                    = cycles 2
                )(else
                    = seconds 3
                )
            )
            (case 5
                ++local0
                = local6 (+ local6 10)
                (if (--theRegister)
                    (self:changeState(4))
                )(else
                    (switch (++local1)
                        (case 1
                            (rm790:picture(420))
                            proc958_0(129 420)
                            = register 1
                        )
                        (case 2
                            = register 1
                        )
                        (case 3
                            (rm790:picture(750))
                            proc958_0(129 750)
                            = register 1
                        )
                        (case 4
                            = register 1
                        )
                        (case 5
                            (rm790:picture(675))
                            proc958_0(129 675)
                            = register 1
                        )
                        (case 6
                            = register 1
                        )
                        (case 7
                            (rm790:picture(235))
                            proc958_0(129 235)
                            = register 1
                        )
                        (case 8
                            = register 3
                        )
                        (case 9
                            (rm790:picture(560))
                            proc958_0(129 560)
                            = register 4
                        )
                        (case 10
                            = register 1
                        )
                        (case 11
                            = register 2
                        )
                        (case 12
                            = local6 10
                            (rm790:picture(730))
                            proc958_0(129 730)
                            (send gEgo:wearingGuns(1))
                            (freddy:
                                view(730)
                                loop(2)
                                x(175)
                                y(93)
                                init()
                                stopUpd()
                                setScale(Scaler 121 68 153 61)
                                setScript(sRunOuttake 0 1)
                            )
                            (prop1:
                                view(734)
                                loop(1)
                                x(79)
                                y(17)
                                init()
                                setPri(10)
                                stopUpd()
                            )
                            (actor2:
                                view(802)
                                loop(0)
                                x(103)
                                y(100)
                                setScale(0)
                                stopUpd()
                                init()
                            )
                            = register 10
                        )
                        (case 13
                            = register 3
                        )
                        (case 14
                            = local6 86
                            = register 1
                        )
                        (case 15
                            = local6 10
                            (rm790:picture(720))
                            proc958_0(129 720)
                            (freddy:
                                view(741)
                                loop(2)
                                cel(3)
                                x(130)
                                y(119)
                                init()
                                setScale(Scaler 97 75 172 143)
                                setScript(sRunOuttake 0 2)
                            )
                            (prop1:
                                view(720)
                                loop(3)
                                x(107)
                                y(100)
                                init()
                                stopUpd()
                            )
                            (actor2:
                                view(740)
                                loop(2)
                                x(90)
                                y(126)
                                setPri(11)
                                init()
                                stopUpd()
                                setScale(Scaler 97 75 172 143)
                            )
                            = register 9
                        )
                        (case 16
                            = local6 86
                            = register 1
                        )
                        (case 17
                            = local6 10
                            (rm790:picture(200))
                            proc958_0(129 200)
                            (send gEgo:wearingGuns(0))
                            (freddy:
                                view(800)
                                setCycle(StopWalk -1)
                                x(165)
                                y(104)
                                init()
                                stopUpd()
                                setScale(Scaler 100 50 175 95)
                                setScript(sRunOuttake 0 3)
                            )
                            (prop1:
                                view(200)
                                loop(0)
                                x(136)
                                y(64)
                                z(-2)
                                init()
                                setCycle(Fwd)
                            )
                            (actor2:
                                view(201)
                                loop(1)
                                x(138)
                                y(67)
                                init()
                                setScale(Scaler 100 50 175 95)
                            )
                            = register 6
                        )
                        (case 18
                            = register 12
                        )
                        (case 19
                            (rm790:picture(260))
                            proc958_0(129 260)
                            (freddy:
                                view(261)
                                loop(7)
                                posn(231 25)
                                init()
                                setScale(0)
                                setPri(13)
                                stopUpd()
                                setScript(sRunOuttake 0 4)
                            )
                            (prop1:
                                view(268)
                                x(1)
                                y(47)
                                z(0)
                                setPri(10)
                                init()
                                setCycle(Fwd)
                            )
                            (prop2:
                                init()
                                stopUpd()
                                setCel(3)
                            )
                            (prop3:
                                init()
                                stopUpd()
                                setPri(15)
                            )
                            (prop4:
                                init()
                                stopUpd()
                            )
                            (actor2:
                                view(803)
                                x(138)
                                y(67)
                                init()
                                setScale(Scaler 100 50 175 95)
                                ignoreActors()
                                stopUpd()
                                setHeading(180)
                            )
                            = register 7
                        )
                        (case 20
                            = local6 86
                            = register 3
                        )
                        (case 21
                            = register 2
                            (rm790:picture(780))
                            (self:setScript(sShowText))
                        )
                        (default 
                            (rm790:picture(420))
                            = local0 1
                            = local1 1
                            = local6 86
                            = local3 1
                            (send gOldCast:eachElementDo(#dispose))
                        )
                    )
                    (send global2:drawPic((rm790:picture)))
                    (crackSound:play())
                    (if (not proc999_5(local1 12 15 17 19 21))
                        (self:changeState(0))
                    )
                )
            )
        )
    )

)
(instance sShowText of Script
    (properties)

    (method (changeState newState)
        (var temp0[260])
        (switch (= state newState)
            (case 0
                (send gOldCast:eachElementDo(#dispose))
                = seconds 2
            )
            (case 1
                Message(msgGET 791 5 0 0 1 @temp0)
                Display(@temp0 105 150 101 1 100 30 10 102 41 106 250)
                Message(msgGET 791 5 0 0 2 @temp0)
                Display(@temp0 105 150 101 1 100 30 100 102 41 106 250)
                = seconds 20
            )
            (case 2
                (WrapMusic:pause())
                (rm790:picture(420))
                (send global2:
                    style(10)
                    drawPic(780)
                )
                = cycles 150
            )
            (case 3
                (WrapMusic:dispose())
                = cycles 150
            )
            (case 4
                (WrapMusic:init(1 1110 1235 1675 1260))
                (send global2:
                    style(100)
                    drawPic((rm790:picture))
                )
                = local0 1
                = local1 1
                = local6 86
                = local3 1
                = local4 2
                (sRunCredits:changeState(0))
                (self:dispose())
            )
        )
    )

)
(instance sRunOuttake of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                = local7 0
                = cycles 50
            )
            (case 1
                (if (== register 2)
                    (self:setScript(sFight self))
                )(else
                    = cycles 2
                )
            )
            (case 2
                (if (== register 4)
                    (send (ScriptID(1817 47)):modeless(1))
                    (send (ScriptID(1800 49)):modeless(1))
                    (Narrator:modeless(1))
                )
                (send gFpMessager:say(register 0 0 1 3 self 791))
            )
            (case 3
                (if (== register 1)
                    (actor2:
                        startUpd()
                        setHeading(180)
                    )
                )
                = cycles 5
            )
            (case 4
                (if (== register 1)
                    (actor2:stopUpd())
                )
                = cycles 1
            )
            (case 5
                (send gFpMessager:say(register 0 0 4 5 self 791))
            )
            (case 6
                (if (== register 3)
                    (self:setScript(sSrini self))
                )(else
                    (send gFpMessager:say(register 0 0 6 10 self 791))
                )
            )
            (case 7
                (if (== register 3)
                    (self:changeState(16))
                )(else
                    (if (== register 1)
                        (actor2:
                            startUpd()
                            setHeading(90)
                        )
                    )
                    = cycles 5
                )
            )
            (case 8
                (if (== register 1)
                    (actor2:stopUpd())
                )
                = cycles 1
            )
            (case 9
                (send gFpMessager:say(register 0 0 11 12 self 791))
            )
            (case 10
                (if (== register 1)
                    (actor2:
                        startUpd()
                        setHeading(180)
                    )
                )
                = cycles 5
            )
            (case 11
                (if (== register 1)
                    (actor2:stopUpd())
                )
                = cycles 1
            )
            (case 12
                (send gFpMessager:say(register 0 0 13 15 self 791))
            )
            (case 13
                (if (== register 1)
                    (actor2:
                        startUpd()
                        setHeading(90)
                    )
                )
                = cycles 5
            )
            (case 14
                (if (== register 1)
                    (actor2:stopUpd())
                )
                = cycles 1
            )
            (case 15
                (if (== register 3)
                    = cycles 2
                )(else
                    (if (== register 4)
                        (self:setScript(sMadame self))
                    )(else
                        (send gFpMessager:say(register 0 0 16 self 791))
                    )
                )
            )
            (case 16
                (if (== register 2)
                    (freddy:
                        loop(1)
                        setCycle(End self)
                    )
                    (actor2:setCycle(Beg))
                )(else
                    (if (== register 4)
                        (send gFpMessager:say(register 0 0 17 18 self 791))
                    )(else
                        = cycles 2
                    )
                )
            )
            (case 17
                (if (== register 4)
                    (freddy:setCycle(End self))
                )(else
                    = cycles 2
                )
            )
            (case 18
                (if (== register 4)
                    (fartSound:play())
                    (freddy:stopUpd())
                )
                = seconds 2
            )
            (case 19
                (if (== register 4)
                    (send gFpMessager:say(register 0 0 19 20 self 791))
                )(else
                    = cycles 2
                )
            )
            (case 20
                (if (== register 4)
                    (send (ScriptID(1817 47)):modeless(0))
                    (send (ScriptID(1800 49)):modeless(0))
                    (Narrator:modeless(0))
                )
                (send gOldCast:eachElementDo(#stopUpd))
                (sRunCredits:changeState(0))
                (self:dispose())
            )
        )
    )

)
(instance sSrini of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                (actor2:
                    loop(2)
                    cel(0)
                    setCycle(End self)
                )
            )
            (case 1
                (send gFpMessager:say(3 0 0 6 7 self 791))
            )
            (case 2
                (actor2:
                    view(801)
                    setCycle(StopWalk -1)
                    setStep(7 2)
                    setSpeed(4)
                    setMotion(MoveTo (actor2:x) + (actor2:y) 30 self)
                )
            )
            (case 3
                (send gFpMessager:say(3 0 0 8 self 791))
            )
            (case 4
                (actor2:setMotion(MoveTo (- (actor2:x) 15) (- (actor2:y) 5) self))
            )
            (case 5
                (actor2:setMotion(MoveTo (+ (actor2:x) 15) (+ (actor2:y) 5) self))
            )
            (case 6
                (actor2:setMotion(MoveTo (- (actor2:x) 15) (- (actor2:y) 5) self))
            )
            (case 7
                (send gFpMessager:say(3 0 0 9 self 791))
            )
            (case 8
                (actor2:setMotion(MoveTo -20 (actor2:y) self))
            )
            (case 9
                (send gFpMessager:say(3 0 0 10 self 791))
            )
            (case 10
                (self:dispose())
            )
        )
    )

)
(instance sMadame of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                (actor2:
                    setPri(-1)
                    setMotion(MoveTo 53 26 self)
                )
            )
            (case 1
                (self:dispose())
            )
        )
    )

)
(instance sFight of Script
    (properties)

    (method (changeState newState)
        (switch (= state newState)
            (case 0
                (actor2:
                    view(740)
                    loop(0)
                    cel((actor2:lastCel()))
                )
                = ticks 30
                (freddy:
                    view(741)
                    loop(0)
                    setMotion(0)
                    setCycle(0)
                )
            )
            (case 1
                (actor2:setCycle(Osc 3 self))
                (freddy:setCycle(Osc 3))
            )
            (case 2
                (actor2:
                    loop(1)
                    setCycle(Osc 3 self)
                )
                (freddy:
                    loop(1)
                    setCycle(Osc 2)
                )
            )
            (case 3
                (freddy:
                    loop(2)
                    cel(3)
                    stopUpd()
                )
                (actor2:
                    loop(2)
                    cel(3)
                    stopUpd()
                )
                = cycles 3
            )
            (case 4
                (self:dispose())
            )
        )
    )

)
(instance prop1 of Prop
    (properties
        view 734
    )
)
(instance freddy of Actor
    (properties
        view 800
    )
)
(instance actor2 of Actor
    (properties
        view 800
    )
)
(instance prop2 of View
    (properties
        x 300
        y 60
        z 40
        view 260
        loop 4
    )
)
(instance prop3 of View
    (properties
        x 252
        y 79
        z -2
        view 260
        loop 2
    )
)
(instance prop4 of View
    (properties
        x 210
        y 60
        view 260
    )
)
(instance crackSound of FPSound
    (properties
        flags $0001
        number 2912
    )
)
(instance fartSound of FPSound
    (properties
        flags $0001
        number 2116
    )
)
