(version 2)
(include "sci.sh")
(exports
    0 proc26_0
)
(use "Main")
(use "GloryWindow")
(use "Class_255_0")
(use "Print")
(use "DIcon")
(use "IconI")
(use "DCIcon")
(use "GameControls")
(use "Cycle")
(use "Obj")
(script 26)


(local
    local0 =     400
    local1
    theGClientModNum
    gLongSongNumber
    local4
    local5[10]
    local15[10]
    local25[5]
    local30[20]
    local50
    local51
    local52
    local53
    local54
    local55
    local56
    local57[30]

)
(procedure public (proc26_0 param1 theTheGClientModNum param3 param4 param5)
    proc0_2()
    (if (not proc0_6(140))
        (if (proc0_6(162))
            return 0
        )(else
            proc0_4(162)
        )
    )
    (send gGame:setCursor(global20 1))
    = local54 0
    = local55 152
    (if (>= paramTotal 1)
        = local1 param1
        (if (>= paramTotal 2)
            (if (theTheGClientModNum)
                = theGClientModNum theTheGClientModNum
            )(else
                = theGClientModNum gClientModNum
            )
            (if (>= paramTotal 3)
                = local53 param3
                (if (>= paramTotal 4)
                    = local54 param4
                    (if (== paramTotal 5)
                        = local55 param5
                    )
                )
            )(else
                = local53 937
            )
        )(else
            = theGClientModNum gClientModNum
            = local53 937
        )
    )(else
        = local53 937
        = theGClientModNum 26
        = local1 1
    )
    (deathViewIcon:view(local53))
    = local56 (+ CelWide((deathViewIcon:view) (deathViewIcon:loop)) 10)
    = local50 (- 200 local56)
    = local51 (+ (* (+ (/ Message(2 theGClientModNum 0 63 local1 1) (/ local50 6)) 4) 9) 5)
    = local52 (+ CelHigh((deathViewIcon:view) (deathViewIcon:loop)) 25)
    (if (> local52 local51)
        = local51 local52
    )
    = gLongSongNumber (send gLongSong:number)
    (send gSounds:eachElementDo(170 0 1 5 1))
    (DIcon:state((| (DIcon:state) $0004)))
    SetCursor(-2)
    return localproc_01a8()
)


(procedure (localproc_01a8)
    (asm
        pushi   7
        pushi   0
        pushi   26
        pushi   1
        pushi   0
        pushi   3
        pushi   1
        lea     @local5
        push    
        callk   Message, 14
        pushi   7
        pushi   0
        pushi   26
        pushi   1
        pushi   0
        pushi   4
        pushi   1
        lea     @local15
        push    
        callk   Message, 14
        pushi   7
        pushi   0
        pushi   26
        pushi   1
        pushi   0
        pushi   5
        pushi   1
        lea     @local25
        push    
        callk   Message, 14
        pushi   7
        pushi   0
        pushi   26
        pushi   1
        pushi   0
        pushi   6
        pushi   1
        lea     @local30
        push    
        callk   Message, 14
code_01ec:lsl     local4
        dup     
        ldi     1
        eq?     
        bnt     code_0256
        pushi   1
        pushi   140
        callb   proc0_6, 2
        bnt     code_0240
        pushi   1
        pushi   140
        callb   proc0_5, 2
        pushi   #say
        pushi   6
        pushi   0
        pushi   63
        lsl     local1
        pushi   3
        pushi   0
        lsl     theGClientModNum
        lag     gQg3Messager
        send    16
        pushi   1
        lofsa   deathViewIcon
        push    
        callk   IsObject, 2
        bnt     code_0229
        pushi   #dispose
        pushi   0
        lofsa   deathViewIcon
        send    4
code_0229:pushi   #number
        pushi   1
        lsl     gLongSongNumber
        pushi   155
        pushi   1
        pushi   1
        pushi   39
        pushi   0
        lag     gLongSong
        send    16
        jmp     code_03cb
        jmp     code_03b0
code_0240:pushi   4
        dup     
        pushi   0
        pushi   255
        pushi   100
        callk   Palette, 8
        pushi   #restart
        pushi   0
        lag     gGame
        send    4
        jmp     code_03b0
code_0256:dup     
        ldi     2
        eq?     
        bnt     code_02be
        pushi   1
        pushi   140
        callb   proc0_6, 2
        bnt     code_02a8
        pushi   1
        pushi   140
        callb   proc0_5, 2
        pushi   #say
        pushi   6
        pushi   0
        pushi   63
        lsl     local1
        pushi   3
        pushi   0
        lsl     theGClientModNum
        lag     gQg3Messager
        send    16
        pushi   1
        lofsa   deathViewIcon
        push    
        callk   IsObject, 2
        bnt     code_0291
        pushi   #dispose
        pushi   0
        lofsa   deathViewIcon
        send    4
code_0291:pushi   #number
        pushi   1
        lsl     gLongSongNumber
        pushi   155
        pushi   1
        pushi   1
        pushi   39
        pushi   0
        lag     gLongSong
        send    16
        jmp     code_03cb
        jmp     code_03b0
code_02a8:pushi   4
        dup     
        pushi   0
        pushi   255
        pushi   100
        callk   Palette, 8
        pushi   #restore
        pushi   0
        lag     gGame
        send    4
        jmp     code_03b0
code_02be:dup     
        ldi     3
        eq?     
        bnt     code_030d
        pushi   1
        pushi   140
        callb   proc0_6, 2
        bnt     code_0303
        pushi   1
        pushi   140
        callb   proc0_5, 2
        pushi   #say
        pushi   6
        pushi   0
        pushi   63
        lsl     local1
        pushi   3
        pushi   0
        lsl     theGClientModNum
        lag     gQg3Messager
        send    16
        pushi   #dispose
        pushi   0
        lofsa   deathViewIcon
        send    4
        pushi   #number
        pushi   1
        lsl     gLongSongNumber
        pushi   155
        pushi   1
        pushi   1
        pushi   39
        pushi   0
        lag     gLongSong
        send    16
        jmp     code_03cb
code_0303:ldi     1
        sag     global4
        jmp     code_03cb
        jmp     code_03b0
code_030d:lsl     local53
        ldi     937
        eq?     
        bnt     code_032c
        pushi   #cel
        pushi   1
        pushi   0
        pushi   248
        pushi   1
        pushi   #new
        pushi   0
        class   End
        send    4
        push    
        lofsa   deathViewIcon
        send    12
        jmp     code_033f
code_032c:lal     local54
        bnt     code_033f
        pushi   #cycler
        pushi   1
        pushi   #new
        pushi   0
        send    4
        push    
        lofsa   deathViewIcon
        send    6
code_033f:pushi   #cycler
        pushi   0
        lofsa   deathViewIcon
        send    4
        bnt     code_035c
        pushi   #init
        pushi   1
        lofsa   deathViewIcon
        push    
        pushi   #cycler
        pushi   0
        lofsa   deathViewIcon
        send    4
        send    6
code_035c:pushi   #number
        pushi   1
        lsl     local55
        pushi   155
        pushi   1
        pushi   1
        pushi   172
        pushi   1
        pushi   80
        pushi   39
        pushi   0
        lag     gLongSong
        send    22
        pushi   #addIcon
        pushi   5
        pushi   935
        pushi   1
        pushi   0
        pushi   5
        pushi   0
        pushi   206
        pushi   5
        lofsa   deathViewIcon
        push    
        pushi   0
        pushi   0
        pushi   2
        pushi   22
        pushi   67
        pushi   1
        lsl     local50
        pushi   30
        pushi   1
        pushi   0
        pushi   198
        pushi   7
        pushi   0
        pushi   63
        lsl     local1
        pushi   1
        lsl     local56
        pushi   22
        lsl     theGClientModNum
        pushi   110
        pushi   0
        lofsa   myPrint
        send    62
code_03b0:toss    
        pushi   #stop
        pushi   0
        lag     gLongSong
        send    4
        pushi   #init
        pushi   0
        pushi   217
        pushi   0
        pushi   111
        pushi   0
        lofsa   quest
        send    12
        jmp     code_01ec
code_03cb:ret     
    )
)


(instance deathViewIcon of DCIcon
    (properties)

    (method (init)
    )


    (method (draw)
        (var temp0[30])
        Message(0 theGClientModNum 0 63 local1 2 @temp0)
        Display(@temp0 100 6 6 101 1 102 42 105 123 106 200)
        Display(@temp0 100 5 6 101 1 102 41 105 123 106 200)
        (super:draw())
    )

)
(instance myPrint of Print
    (properties)

    (method (showSelf)
        (var theFirst, temp1, temp2, temp3, temp4)
        (if (saveCursor)
            (send gGame:setCursor(999))
        )
        (if (not dialog)
            = dialog myDialog
            (myDialog:init())
        )
        (send dialog:
            window(
                (if (window)
                )(else
                    gGloryWindow
                )
)
            name("PODialog")
            caller(self)
        )
        (send dialog:
            text(title)
            time(ticks)
            setSize()
        )
        (send dialog:center())
        = temp3 
            (if (== x -1)
                (send dialog:nsLeft)
            )(else
                x
            )
        = temp4 
            (if (== y -1)
                (send dialog:nsTop)
            )(else
                y
            )
        (send dialog:moveTo(temp3 temp4))
        = temp1 GetPort()
        (send dialog:open(
            (if (title)
                4
            )(else
                0
            )
 15))
        return 
            (if (modeless)
                = global41 GetPort()
                SetPort(temp1)
                = gDialog dialog
            )(else
                (send gSounds:pause(1))
                = theFirst first
                (if (not theFirst)
                    = theFirst (send dialog:firstTrue(#checkState 1))
                    (if (theFirst and not (send dialog:firstTrue(#checkState 2)))
                        (send theFirst:state((| (send theFirst:state) $0002)))
                    )
                )(else
                    (if (not IsObject(theFirst))
                        = theFirst (send dialog:at(theFirst))
                    )
                )
                = retValue (send dialog:doit(theFirst))
                SetPort(temp1)
                (if (== retValue -1)
                    = retValue 0
                )(else
                    (if (IsObject(retValue) and (send retValue:isKindOf(DButton)))
                        = retValue (send retValue:value)
                    )(else
                        (if (not (send dialog:theItem))
                            = retValue 1
                        )
                    )
                )
                (if (saveCursor)
                    (send gGame:setCursor((send ((send gMainIconBar:curIcon)):cursor)))
                )
                (send dialog:dispose())
                return retValue
            )
    )


    (method (addIcon param1 param2 param3 param4 param5)
        (var temp0, temp1)
        (if (not dialog)
            = dialog (myDialog:new())
        )
        (if (> paramTotal 3)
            = temp0 param4
            = temp1 param5
        )(else
            = temp1 0
            = temp0 temp1
        )
        (if (IsObject(param1))
            (send dialog:
                add((send param1:
                        setSize()
                        moveTo(+ temp0 4 + temp1 4)
                        yourself()
                    )
)
                setSize()
            )
        )(else
            (send dialog:
                add((send ((DIcon:new())):
                        view(param1)
                        loop(param2)
                        cel(param3)
                        setSize()
                        moveTo(+ temp0 4 + temp1 4)
                        yourself()
                    )
)
                setSize()
            )
        )
    )

)
(instance myDialog of Dialog
    (properties)

    (method (doit param1)
        (var temp0, temp1, temp2)
        = gLastTicks (+ global86 GetTime())
        = temp2 0
        (self:eachElementDo(110))
        (if (theItem)
            (send theItem:select(0))
        )
        = theItem 
            (if (paramTotal and param1)
                param1
            )(else
                (self:firstTrue(#checkState 1))
            )
        (if (theItem)
            (send theItem:select(1))
        )
        (if (not theItem)
            = eatTheMice gEatTheMice
            = lastTicks GetTime()
        )(else
            = eatTheMice 0
        )
        = temp1 0
        (while (not temp1)
            = gLastTicks (+ global86 GetTime())
            (if (< --local0 0)
                = local0 400
                return temp1
            )
            (self:eachElementDo(186))
            = temp0 (send ((Event:new())):localize())
            (if (eatTheMice)
                --eatTheMice
                (if (== (send temp0:type) 1)
                    (send temp0:type(0))
                )
                (while (== lastTicks GetTime())
                )
                = lastTicks GetTime()
            )
            = temp1 (self:handleEvent(temp0))
            (send temp0:dispose())
            (if ((self:check()))
                break
            )
            (if (== temp1 -2)
                break
            )
            Wait(1)
        )
        return temp1
    )

)
(instance quest of GameControls
    (properties)

    (method (init param1)
        (send gGame:setCursor(999))
        (send (= window (GloryWindow:new())):
            top(50)
            left(85)
            bottom(125)
            right(235)
            priority(15)
            yourself()
        )
        (self:add(titleIcon backIcon restartIcon restoreIcon quitIcon))
        (super:init(rest param1))
    )

)
(instance titleIcon of IconI
    (properties
        view 935
        loop 2
        cel 0
        nsTop 0
        signal $0004
        maskView 361
        maskLoop 3
    )

    (method (show)
        (var temp0[20])
        Message(0 26 1 0 7 1 @temp0)
        Display(@temp0 100 5 3 102 17)
    )

)
(instance backIcon of IconI
    (properties
        view 935
        loop 2
        cel 0
        nsTop 15
        signal $0101
        maskView 361
        maskLoop 3
    )

    (method (show)
        (var temp0[15])
        = nsRight 80
        = nsBottom (+ nsTop 15)
        DrawCel(view loop cel nsLeft nsTop -1)
        Display(@local30 100 20 + nsTop 3 102 17)
        (if (& signal $0004)
            (self:mask())
        )
        (if (gPseudoMouse and (send gPseudoMouse:respondsTo(#stop)))
            (send gPseudoMouse:stop())
        )
    )


    (method (select)
        = local4 0
        (quest:state((& (quest:state) $ffdf)))
    )


    (method (highlight param1)
        (var temp0)
        (if (param1)
            DrawCel(view loop 1 nsLeft nsTop -1)
            = temp0 46
        )(else
            DrawCel(view loop 0 nsLeft nsTop -1)
            = temp0 17
        )
        Display(@local30 100 20 + nsTop 3 102 temp0)
    )

)
(instance restoreIcon of IconI
    (properties
        view 935
        loop 2
        cel 0
        nsTop 45
        signal $0101
        maskView 361
        maskLoop 3
    )

    (method (show)
        (var temp0[15])
        = nsRight 80
        = nsBottom (+ nsTop 15)
        DrawCel(view loop cel nsLeft nsTop -1)
        Display(@local5 100 20 + nsTop 3 102 17)
        (if (& signal $0004)
            (self:mask())
        )
        (if (gPseudoMouse and (send gPseudoMouse:respondsTo(#stop)))
            (send gPseudoMouse:stop())
        )
    )


    (method (select)
        = local4 2
        (quest:state((& (quest:state) $ffdf)))
    )


    (method (highlight param1)
        (var temp0)
        (if (param1)
            DrawCel(view loop 1 nsLeft nsTop -1)
            = temp0 46
        )(else
            DrawCel(view loop 0 nsLeft nsTop -1)
            = temp0 17
        )
        Display(@local5 100 20 + nsTop 3 102 temp0)
    )

)
(instance restartIcon of IconI
    (properties
        view 935
        loop 2
        cel 0
        nsTop 30
        signal $0101
        maskView 361
        maskLoop 3
    )

    (method (show)
        = nsRight 80
        = nsBottom (+ nsTop 15)
        DrawCel(view loop cel nsLeft nsTop -1)
        Display(@local15 100 20 + nsTop 3 102 17)
        (if (& signal $0004)
            (self:mask())
        )
        (if (gPseudoMouse and (send gPseudoMouse:respondsTo(#stop)))
            (send gPseudoMouse:stop())
        )
    )


    (method (select)
        = local4 1
        (quest:state((& (quest:state) $ffdf)))
    )


    (method (highlight param1)
        (var temp0)
        (if (param1)
            DrawCel(view loop 1 nsLeft nsTop -1)
            = temp0 46
        )(else
            DrawCel(view loop 0 nsLeft nsTop -1)
            = temp0 17
        )
        Display(@local15 100 20 + nsTop 3 102 temp0)
    )

)
(instance quitIcon of IconI
    (properties
        view 935
        loop 2
        cel 0
        nsTop 60
        signal $0101
        maskView 361
        maskLoop 3
    )

    (method (show)
        (var temp0[15])
        = nsRight 80
        = nsBottom (+ nsTop 15)
        DrawCel(view loop cel nsLeft nsTop -1)
        Display(@local25 100 20 + nsTop 3 102 17)
        (if (& signal $0004)
            (self:mask())
        )
        (if (gPseudoMouse and (send gPseudoMouse:respondsTo(#stop)))
            (send gPseudoMouse:stop())
        )
    )


    (method (select)
        = local4 3
        (quest:state((& (quest:state) $ffdf)))
    )


    (method (highlight param1)
        (var temp0)
        (if (param1)
            DrawCel(view loop 1 nsLeft nsTop -1)
            = temp0 46
        )(else
            DrawCel(view loop 0 nsLeft nsTop -1)
            = temp0 17
        )
        Display(@local25 100 20 + nsTop 3 102 temp0)
    )

)
