(version 2)
(include "sci.sh")
(exports
    0 import
)
(use "Main")
(use "GloryWindow")
(use "Class_255_0")
(use "Print")
(use "DIcon")
(use "IconI")
(use "FileSelector")
(use "n958")
(use "GameControls")
(use "File")
(use "Game")
(use "Obj")
(script 54)


(local
    local0 =     83
    local1
    local2[3]
    local5
    theGGOwnerMaxStamina[30]
    local36
    local37
    local38
    local39
    local40
    local41 =     160
    local42 =     62
    local43
    local44
    local45 =     47
    local46 =     144
    local47 =     25
    local48 =     163
    local49 =     218
    local50
    local51
    local52
    local53[44]
    local97[300]
    local397[40]
    local437[20]
    local457[20]
    local477[60]
    local537[30] = (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 )
    local567 =     83
    local568
    local569[3]
    local572
    local573[25]
    local598
    local599[4]
    local603 =     121
    local604 =     134
    local605
    local606
    local607 =     67
    local608 =     136
    local609 =     173
    local610 =     240
    local611 =     206
    local612[25] = (0 1 2 3 4 5 6 7 8 9 10 11 12 15 16 17 18 19 20 21 22 23 24 25 26 )
    local637[20]
    local657
    local658[5]
    local663[5]
    local668[10]
    local678[10]
    local688[10]
    local698[10]

)
(procedure (localproc_02c0)
    (var temp0)
    = temp0 1
    (while (< temp0 13)
        = gGGOwnerMaxStamina_2[temp0] 0
        ++temp0
    )
    = global125 0
    = temp0 0
    (while (< temp0 47)
        (send ((send gInv:at(temp0))):
            amount(0)
            owner(0)
        )
        ++temp0
    )
    = global15 0
    StrCpy(@global157 "xxxxxxxxxxy")
    = temp0 0
    (while (< temp0 48)
        = local0[(+ temp0 1)] 0
        ++temp0
    )
)


(procedure (localproc_0326)
    (if (not ({glory2.sav}:open(1)))
        Message(0 54 2 6 7 1 @local97)
        proc921_1(@local97 ({glory2.sav}:name))
        return 0
    )
    ({glory2.sav}:readString(@global157 52))
    ({glory2.sav}:readString(@local97 90))
    (if (== StrLen(@local97) 86)
        (if (not localproc_0ae2())
            return 0
        )
    )(else
        (if (not localproc_0849())
            return 0
        )
    )
    return 1
)


(procedure (localproc_03a3 param1)
    return + localproc_03bf((>> param1 $0008)) (* localproc_03bf((& param1 $00ff)) 16)
)


(procedure (localproc_03bf param1)
    return 
        (if (== param1 32)
            return 0
        )(else
            (if ((<= 48 param1) and (<= param1 57))
                return - param1 48
            )(else
                return - param1 87
            )
        )
)


(procedure (localproc_069e param1 param2 param3)
    (var temp0, temp1)
    = temp1 StrLen(param2)
    (if (temp1)
        = temp0 StrAt(param2 (- (= temp1 StrLen(param2)) 1))
        Format(param1 "%s%c%s" param2 
            (if (proc999_5(temp0 92 58))
                0
            )(else
                92
            )
 param3)
    )(else
        StrCpy(param1 param3)
    )
    return param1
)


(procedure (localproc_0759 param1)
    (if (localproc_07a1(@local637))
        (send gGame:setCursor(global21))
        (if (not (savedHeros:init()))
            return 0
        )
        (send param1:dispose())
        (send param1:init())
        (savedHeros:draw())
    )
    (send gGame:setCursor(global20))
    return 1
)


(procedure (localproc_07a1 param1)
    (var temp0, temp1[60])
    = temp0 0
    (while (TRUE)
        = temp0 (Print:
                addText(1 0 1 1 0 12)
                addEdit(StrCpy(@temp1 param1) 30 0 26 param1)
                addButton(1 1 0 0 1 0 40)
                addButton(0 1 0 0 2 0 54)
                init()
            )
        (if (not temp0)
            break
        )
        (if (not StrLen(@temp1))
            GetCWD(@temp1)
        )
        (if (ValidPath(@temp1))
            break
        )
        Message(0 54 2 6 15 1 @local97)
        proc921_1(@local97 @temp1)
    )
    return temp0
)


(procedure (localproc_0849)
    (var temp0, temp1)
    = temp0 0
    (while (< temp0 48)
        = local0[(+ temp0 1)] localproc_03a3(local97[temp0])
        ++temp0
    )
    = temp0 48
    (while (< 0 temp0)
        = local0[temp0] (^ local0[temp0] (& local0[(- temp0 1)] $00ff))
        --temp0
    )
    = local50 local49
    = temp0 0
    (while (< temp0 40)
        = local0[(+ temp0 1)] (& local0[(+ temp0 1)] $00ff)
        = local50 (+ local50 local0[(+ temp0 1)])
        = temp0 (+ temp0 2)
    )
    = local51 0
    = temp0 1
    (while (< temp0 40)
        = local0[(+ temp0 1)] (& local0[(+ temp0 1)] $00ff)
        = local51 (+ local51 local0[(+ temp0 1)])
        = temp0 (+ temp0 2)
    )
    = local50 (& local50 $00ff)
    = local51 (& local51 $00ff)
    (if ((<> local50 local43) or (<> local51 local44))
        proc921_0(2 6 17 1)
        return 0
    )
    = temp0 0
    (while (< temp0 30)
        = gGOwnerMaxStamina[local537[temp0]] theGGOwnerMaxStamina[temp0]
        (if (not 
        (if (< 13 local537[temp0])
            < local537[temp0] 19
        )
)
            (if (not 
            (if (<= 0 theGGOwnerMaxStamina[temp0])
                <= theGGOwnerMaxStamina[temp0] 300
            )
)
                proc921_0(2 6 17 1)
                return 0
            )
        )
        ++temp0
    )
    (if (== local1 0)
        (if (gGOwnerMaxStamina[23] and gGOwnerMaxStamina[29])
            = local1 1
        )(else
            = temp1 0
            = temp0 0
            (while (< temp0 13)
                (if (gGOwnerMaxStamina[temp0])
                    ++temp1
                )
                ++temp0
            )
            (if (not gGOwnerMaxStamina[6] or (== temp1 13))
                = local1 2
            )
        )
    )
    = global362 local1
    = global125 global362
    (if (not (& local5 $0080) and (== global125 3))
        proc0_4(144)
    )
    (if (== global125 3)
        = global362 0
    )
    (if ((send ((send gInv:at(10))):amount(local36)))
        (send ((send gInv:at(10))):owner(gOwner))
        (send ((send gInv:at(10))):realOwner(gOwner))
    )
    (if ((send ((send gInv:at(12))):amount(local37)))
        (send ((send gInv:at(12))):owner(gOwner))
        (send ((send gInv:at(12))):realOwner(gOwner))
    )
    (if ((send ((send gInv:at(13))):amount(local38)))
        (send ((send gInv:at(13))):owner(gOwner))
        (send ((send gInv:at(13))):realOwner(gOwner))
    )
    (if ((send ((send gInv:at(11))):amount(local40)))
        (send ((send gInv:at(11))):owner(gOwner))
        (send ((send gInv:at(11))):realOwner(gOwner))
    )
    (if (== (& local5 $0030) 48)
        proc0_4(158)
    )
    (if (& local5 $0004)
        (send gOwner:get(28 1))
    )
    return 1
)


(procedure (localproc_0ae2)
    (var temp0)
    = temp0 0
    (while (< temp0 43)
        = local567[(+ temp0 1)] localproc_03a3(local97[temp0])
        ++temp0
    )
    = temp0 43
    (while (< 0 temp0)
        = local567[temp0] (^ local567[temp0] (& local567[(- temp0 1)] $007f))
        --temp0
    )
    = local50 local611
    = temp0 0
    (while (< temp0 35)
        = local567[(+ temp0 1)] (& local567[(+ temp0 1)] $007f)
        = local50 (+ local50 local567[(+ temp0 1)])
        = temp0 (+ temp0 2)
    )
    = local51 0
    = temp0 1
    (while (< temp0 35)
        = local567[(+ temp0 1)] (& local567[(+ temp0 1)] $007f)
        = local51 (+ local51 local567[(+ temp0 1)])
        = temp0 (+ temp0 2)
    )
    = local50 (& local50 $007f)
    = local51 (& local51 $007f)
    (if ((<> local50 local605) or (<> local51 local606))
        proc921_0(2 6 16 1)
        return 0
    )
    = temp0 0
    (while (< temp0 25)
        = gGOwnerMaxStamina[local612[temp0]] (* 2 local573[temp0])
        (if (not 
        (if (< 12 local612[temp0])
            < local612[temp0] 19
        )
)
            (if (not 
            (if (<= 0 local573[temp0])
                <= local573[temp0] 300
            )
)
                proc921_0(2 6 16 1)
                return 0
            )
        )
        ++temp0
    )
    = global362 local568
    = global125 global362
    = gGOwnerMaxStamina[13] (/ (+ (* gGOwnerMaxStamina[1] 2) gGOwnerMaxStamina[4]) 3)
    = gGOwnerMaxStamina[14] 100
    (if ((send ((send gInv:at(10))):amount(local598)))
        (send ((send gInv:at(10))):owner(gOwner))
    )
    (if ((send ((send gInv:at(0))):amount(100)))
        (send ((send gInv:at(0))):owner(gOwner))
    )
    (if (& local572 $0020)
        proc0_4(158)
    )
    return 1
)


(procedure (localproc_0c9d)
    Message(0 54 2 6 22 1 @local658)
    Message(0 54 2 6 21 1 @local663)
    (quest:
        init()
        show()
        dispose()
    )
    return local657
)


(procedure (localproc_0edb)
    Message(0 54 2 6 18 1 @local668)
    Message(0 54 2 6 21 1 @local678)
    Message(0 54 2 6 19 1 @local688)
    Message(0 54 2 6 22 1 @local698)
    (choose:
        init()
        show()
        dispose()
    )
    return local657
)


(instance public import of Rm
    (properties
        picture 130
    )

    (method (init param1)
        proc0_2()
        (send gMainIconBar:disable())
        (super:init(rest param1))
        Palette(palSET_INTENSITY 72 255 60)
        (self:setScript(importHero))
    )


    (method (dispose)
        proc958_0(0 993 944)
        (super:dispose())
    )

)
(instance {glory2.sav} of File
    (properties)
)
(instance importHero of Script
    (properties)

    (method (changeState newState)
        (var temp0[2])
        (switch (= state newState)
            (case 0
                = cycles 3
            )
            (case 1
                Message(0 54 2 6 2 1 @local53)
                (send gQg3Messager:say(2 0 0 0 self))
            )
            (case 2
                = cycles 2
            )
            (case 3
                (if ((getFileName:doit(@local53)))
                    ({glory2.sav}:name(@local53))
                    = cycles 2
                )(else
                    (self:changeState(6))
                )
            )
            (case 4
                localproc_02c0()
                = local52 localproc_0326()
                (if (local52)
                    = cycles 2
                )(else
                    (self:changeState(7))
                )
            )
            (case 5
                (send gQg3Messager:say(2 6 3 0 self))
            )
            (case 6
                (if (proc0_6(144) and gGOwnerMaxStamina[29])
                    (if (localproc_0c9d())
                        = global125 3
                        = global362 0
                    )(else
                        = global362 1
                        = global125 global362
                        = local1 global125
                    )
                )
                (if ((local52 and (< -1 localproc_0edb())) and (< localproc_0edb() 4))
                    = global362 local657
                    = global125 global362
                    (if (== local657 3)
                        = global362 0
                    )
                )
                Palette(palSET_INTENSITY 72 255 100)
                (if (local52)
                    (send gLongSong:fade(0 2 5 1))
                )
                (send global2:newRoom(
                    (if (local52)
                        140
                    )(else
                        130
                    )
))
            )
            (case 7
                (if ((Print:
                    addText(2 6 4 1)
                    addButton(1 2 6 5 1 0 50)
                    addButton(0 2 6 6 1 60 50)
                    init()
                )
)
                    = local603 121
                    = local604 134
                    = local607 67
                    = local608 136
                    = local609 173
                    = local610 240
                    = local41 160
                    = local42 62
                    = local45 47
                    = local46 144
                    = local47 25
                    = local48 163
                    (self:changeState(2))
                )(else
                    = local52 0
                    (self:changeState(6))
                )
            )
        )
    )

)
(instance getFileName of Dialog
    (properties)

    (method (init)
        (var temp0, temp1)
        = window GloryWindow
        = nsBottom 0
        Message(0 54 2 6 8 1 @local397)
        = text @local397
        (if (not (savedHeros:init()))
            return 0
        )
        (savedHeros:
            setSize()
            moveTo(4 + nsBottom 4)
            state(2)
        )
        = temp0 (+ (savedHeros:nsRight) 4)
        Message(0 54 2 6 10 1 @local437)
        Message(0 54 2 6 11 1 @local457)
        Message(0 54 2 6 12 1 @local477)
        (importItem:
            text(@local477)
            setSize()
            moveTo(temp0 + 10 (savedHeros:nsTop))
            state(
                (if ((savedHeros:nFiles))
                    3
                )(else
                    0
                )
)
        )
        (changeDirItem:
            text(@local457)
            setSize()
            moveTo(temp0 + (importItem:nsBottom) 4)
            state(& (changeDirItem:state) $fff7)
        )
        (cancelItem:
            text(@local437)
            setSize()
            moveTo(temp0 + (changeDirItem:nsBottom) 4)
            state(& (changeDirItem:state) $fff7)
        )
        (self:
            add(savedHeros importItem changeDirItem cancelItem)
            setSize()
            center()
            open(4 15)
        )
        return 1
    )


    (method (doit param1)
        (var temp0, temp1)
        (asm
            pushi   1
            lea     @local637
            push    
            callk   GetCWD, 2
            pushi   #init
            pushi   0
            self    4
            not     
            bnt     code_0565
            pushi   #dispose
            pushi   0
            self    4
            ldi     0
            ret     
code_0565:  pushi   57
            pushi   1
            pushi   #nFiles
            pushi   0
            lofsa   savedHeros
            send    4
            bnt     code_0578
            lofsa   importItem
            jmp     code_057b
code_0578:  lofsa   changeDirItem
code_057b:  push    
            super   Dialog, 6
            sat     temp0
            push    
            lofsa   importItem
            eq?     
            bnt     code_05a7
            pushi   3
            lsp     param1
            lea     @local637
            push    
            pushi   #cursor
            pushi   0
            lofsa   savedHeros
            send    4
            push    
            call    localproc_069e, 6
            ldi     1
            sat     temp1
            jmp     code_05d9
            jmp     code_0565
code_05a7:  lst     temp0
            lofsa   changeDirItem
            eq?     
            bnt     code_05be
            pushi   1
            pushSelf
            call    localproc_0759, 2
            sat     temp1
            not     
            bnt     code_05bc
            jmp     code_05d9
code_05bc:  jmp     code_0565
code_05be:  lst     temp0
            ldi     0
            eq?     
            bt      code_05cd
            lst     temp0
            lofsa   cancelItem
            eq?     
            bnt     code_0565
code_05cd:  ldi     0
            sal     local52
            ldi     0
            sat     temp1
            jmp     code_05d9
            jmp     code_0565
code_05d9:  pushi   #dispose
            pushi   0
            self    4
            lat     temp1
            ret     
        )
    )


    (method (dispose)
        (self:
            eachElementDo(111 1)
            release()
        )
        (super:dispose())
    )

)
(instance savedHeros of FileSelector
    (properties
        y 16
    )

    (method (init)
        (var temp0, temp1, temp2, temp3, theText, temp5, temp6[80])
        (send gGame:setCursor(global21))
        = font gFont_2
        = mask localproc_069e(@temp6 @local637 "*.*")
        = temp1 (self:readFiles(mask))
        (if (not temp1)
            proc921_0(2 6 9 1)
        )(else
            = theText text
            = temp2 0
            (while (< temp2 nFiles)
                = temp3 0
                (while (= temp5 StrAt(theText temp3))
                    StrAt(theText temp3 
                        (if ((< (= temp5 StrAt(theText temp3)) 65) or (> temp5 90))
                            temp5
                        )(else
                            + (- temp5 65) 97
                        )
)
                    ++temp3
                )
                ++temp2
                = theText (+ theText x)
            )
        )
        (send gGame:setCursor(global20))
        return temp1
    )


    (method (dispose)
        (super:dispose(1))
    )

)
(instance cancelItem of DButton
    (properties)
)
(instance changeDirItem of DButton
    (properties)
)
(instance importItem of DButton
    (properties)
)
(instance quest of GameControls
    (properties)

    (method (init param1)
        (send gGame:setCursor(999))
        (send (= window (GloryWindow:new())):
            top(50)
            left(72)
            bottom(155)
            right(248)
            priority(15)
            yourself()
        )
        (self:add(titleIcon yesIcon noIcon))
        (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[70])
        Message(0 54 2 6 20 1 @temp0)
        Display(@temp0 106 165 100 5 3 102 17)
    )

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

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


    (method (select)
        = local657 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(@local658 100 20 + nsTop 3 102 temp0)
    )

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

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


    (method (select)
        = local657 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(@local663 100 20 + nsTop 3 102 temp0)
    )

)
(instance choose of GameControls
    (properties)

    (method (init param1)
        (send gGame:setCursor(999))
        (send (= window (GloryWindow:new())):
            top(40)
            left(72)
            bottom(155)
            right(248)
            priority(15)
            yourself()
        )
        (self:add(chooseIcon figIcon wizIcon thiIcon palIcon))
        (super:init(rest param1))
    )

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

    (method (show)
        (var temp0[100], temp100[10], temp110[110])
        (switch (local1)
            (case 0
                Message(0 54 2 6 18 1 @temp100)
            )
            (case 1
                Message(0 54 2 6 21 1 @temp100)
            )
            (case 2
                Message(0 54 2 6 19 1 @temp100)
            )
            (case 3
                Message(0 54 2 6 22 1 @temp100)
            )
        )
        Message(0 54 2 6 23 1 @temp0)
        Format(@temp110 @temp0 @temp100)
        Display(@temp110 106 165 100 5 3 102 17)
    )

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

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


    (method (select)
        = local657 0
        (choose:state((& (choose: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(@local668 100 20 + nsTop 3 102 temp0)
    )

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

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


    (method (select)
        = local657 1
        (choose:state((& (choose: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(@local678 100 20 + nsTop 3 102 temp0)
    )

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

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


    (method (select)
        = local657 2
        (choose:state((& (choose: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(@local688 100 20 + nsTop 3 102 temp0)
    )

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

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


    (method (select)
        = local657 3
        (choose:state((& (choose: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(@local698 100 20 + nsTop 3 102 temp0)
    )

)
